aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-10-03libstdc++: Re-enable std::hash<std::bitset> in freestanding [PR103626]Arsen Arsenović3-4/+9
PR libstdc++/103626 - _GLIBCXX_HOSTED should respect -ffreestanding libstdc++-v3/ChangeLog: PR libstdc++/103626 * include/std/bitset [!_GLIBCXX_HOSTED]: Re-enable std::hash. * testsuite/20_util/bitset/cons/constexpr_c++23.cc: Require ET hosted. * testsuite/20_util/bitset/ext/constexpr.cc: Likewise.
2022-10-03libstdc++: Add effective-target 'hosted' for testsuite [PR103626]Jonathan Wakely1-1/+9
PR libstdc++/103626 - _GLIBCXX_HOSTED should respect -ffreestanding libstdc++-v3/ChangeLog: PR libstdc++/103626 * testsuite/lib/libstdc++.exp (check_effective_target_stacktrace): Also require hosted. (check_effective_target_hosted): New proc.
2022-10-03libstdc++: Make some tests work on freestanding [PR103626]Arsen Arsenović13-64/+104
PR libstdc++/103626 - _GLIBCXX_HOSTED should respect -ffreestanding Co-authored-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/103626 * testsuite/17_intro/headers/c++1998/stdc++.cc [!__STDC_HOSTED__]: Do not include C headers that aren't valid for freestanding. * testsuite/17_intro/tag_type_explicit_ctor.cc [!__STDC_HOSTED__]: Do not test tag types that aren't defined for freestanding. * testsuite/18_support/headers/cstdlib/functions_std.cc: Do not check for std::getenv and std::system for freestanding. * testsuite/17_intro/using_namespace_std_exp_neg.cc [!__STDC_HOSTED__]: Do not test hosted parts of the standard library. * testsuite/17_intro/using_namespace_std_tr1_neg.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/allocator_traits/members/rebind_alloc.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/allocator_traits/requirements/explicit_instantiation.cc [!HOSTED]: Likewise. * testsuite/20_util/headers/bitset/synopsis.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/pointer_traits/requirements/typedefs.cc [!__STDC_HOSTED__]: Likewise. * testsuite/20_util/tuple/cons/deduction.cc [!__STDC_HOSTED__]: Likewise. * testsuite/25_algorithms/move/93872.cc [!__STDC_HOSTED__]: Likewise. * testsuite/std/ranges/adaptors/100577.cc [!__STDC_HOSTED__]: Likewise.
2022-10-03libstdc++: Rework how freestanding install works [PR106953]Arsen Arsenović2-479/+477
In light of there being far more freestanding headers now, ad-hoc maintenance of a subset of the install implementation has become unsustainable. Instead, we gate off a part of the normal install routine so that it works without HOSTED enabled, as well as subdivide lists of headers into freestanding and hosted components, according to the HOSTED flag. libstdc++-v3/ChangeLog: PR libstdc++/106953 * include/Makefile.am [!_GLIBCXX_HOSTED]: Remove install-freestanding-headers, unifying it with the usual install-headers * include/Makefile.in: Regenerate.
2022-10-03libstdc++: Mark headers that must be hosted as such [PR103626]Arsen Arsenović170-59/+428
PR libstdc++/103626 - _GLIBCXX_HOSTED should respect -ffreestanding Co-authored-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/103626 * include/Makefile.am: Add new header. * include/Makefile.in: Regenerate. * include/bits/requires_hosted.h: New header. * include/experimental/algorithm: Include <bits/requires_hosted.h>. * include/experimental/any: Likewise. * include/experimental/array: Likewise. * include/experimental/buffer: Likewise. * include/experimental/chrono: Likewise. * include/experimental/deque: Likewise. * include/experimental/executor: Likewise. * include/experimental/filesystem: Likewise. * include/experimental/forward_list: Likewise. * include/experimental/functional: Likewise. * include/experimental/internet: Likewise. * include/experimental/io_context: Likewise. * include/experimental/iterator: Likewise. * include/experimental/list: Likewise. * include/experimental/map: Likewise. * include/experimental/memory: Likewise. * include/experimental/memory_resource: Likewise. * include/experimental/net: Likewise. * include/experimental/netfwd: Likewise. * include/experimental/numeric: Likewise. * include/experimental/optional: Likewise. * include/experimental/propagate_const: Likewise. * include/experimental/random: Likewise. * include/experimental/ratio: Likewise. * include/experimental/regex: Likewise. * include/experimental/scope: Likewise. * include/experimental/set: Likewise. * include/experimental/simd: Likewise. * include/experimental/socket: Likewise. * include/experimental/source_location: Likewise. * include/experimental/string: Likewise. * include/experimental/string_view: Likewise. * include/experimental/system_error: Likewise. * include/experimental/timer: Likewise. * include/experimental/tuple: Likewise. * include/experimental/unordered_map: Likewise. * include/experimental/unordered_set: Likewise. * include/experimental/utility: Likewise. * include/experimental/vector: Likewise. * include/std/barrier: Likewise. * include/std/chrono: Likewise. * include/std/condition_variable: Likewise. * include/std/deque: Likewise. * include/std/execution: Likewise. * include/std/filesystem: Likewise. * include/std/forward_list: Likewise. * include/std/fstream: Likewise. * include/std/future: Likewise. * include/std/iomanip: Likewise. * include/std/ios: Likewise. * include/std/iosfwd: Likewise. * include/std/iostream: Likewise. * include/std/istream: Likewise. * include/std/latch: Likewise. * include/std/list: Likewise. * include/std/locale: Likewise. * include/std/map: Likewise. * include/std/memory_resource: Likewise. * include/std/mutex: Likewise. * include/std/ostream: Likewise. * include/std/queue: Likewise. * include/std/random: Likewise. * include/std/regex: Likewise. * include/std/semaphore: Likewise. * include/std/set: Likewise. * include/std/shared_mutex: Likewise. * include/std/spanstream: Likewise. * include/std/sstream: Likewise. * include/std/stack: Likewise. * include/std/stacktrace: Likewise. * include/std/stop_token: Likewise. * include/std/streambuf: Likewise. * include/std/string: Likewise. * include/std/syncstream: Likewise. * include/std/system_error: Likewise. * include/std/thread: Likewise. * include/std/unordered_map: Likewise. * include/std/unordered_set: Likewise. * include/std/valarray: Likewise. * include/std/vector: Likewise. * include/tr1/array: Likewise. * include/tr1/ccomplex: Likewise. * include/tr1/cctype: Likewise. * include/tr1/cfenv: Likewise. * include/tr1/cfloat: Likewise. * include/tr1/cinttypes: Likewise. * include/tr1/climits: Likewise. * include/tr1/cmath: Likewise. * include/tr1/complex: Likewise. * include/tr1/complex.h: Likewise. * include/tr1/cstdarg: Likewise. * include/tr1/cstdbool: Likewise. * include/tr1/cstdint: Likewise. * include/tr1/cstdio: Likewise. * include/tr1/cstdlib: Likewise. * include/tr1/ctgmath: Likewise. * include/tr1/ctime: Likewise. * include/tr1/ctype.h: Likewise. * include/tr1/cwchar: Likewise. * include/tr1/cwctype: Likewise. * include/tr1/fenv.h: Likewise. * include/tr1/float.h: Likewise. * include/tr1/functional: Likewise. * include/tr1/inttypes.h: Likewise. * include/tr1/limits.h: Likewise. * include/tr1/math.h: Likewise. * include/tr1/memory: Likewise. * include/tr1/random: Likewise. * include/tr1/regex: Likewise. * include/tr1/stdarg.h: Likewise. * include/tr1/stdbool.h: Likewise. * include/tr1/stdint.h: Likewise. * include/tr1/stdio.h: Likewise. * include/tr1/stdlib.h: Likewise. * include/tr1/tgmath.h: Likewise. * include/tr1/tuple: Likewise. * include/tr1/type_traits: Likewise. * include/tr1/unordered_map: Likewise. * include/tr1/unordered_set: Likewise. * include/tr1/utility: Likewise. * include/tr1/wchar.h: Likewise. * include/tr1/wctype.h: Likewise. * include/c_global/cmath: Likewise. * include/ext/algorithm: Include <bits/requires_hosted.h>. * include/ext/bitmap_allocator.h: Likewise. * include/ext/cmath: Likewise. * include/ext/codecvt_specializations.h: Likewise. * include/ext/debug_allocator.h: Likewise. * include/ext/enc_filebuf.h: Likewise. * include/ext/extptr_allocator.h: Likewise. * include/ext/functional: Likewise. * include/ext/malloc_allocator.h: Likewise. * include/ext/memory: Likewise. * include/ext/mt_allocator.h: Likewise. * include/ext/new_allocator.h: Likewise. * include/ext/numeric: Likewise. * include/ext/pod_char_traits.h: Likewise. * include/ext/pool_allocator.h: Likewise. * include/ext/random: Likewise. * include/ext/random.tcc: Likewise. * include/ext/rb_tree: Likewise. * include/ext/rc_string_base.h: Likewise. * include/ext/rope: Likewise. * include/ext/ropeimpl.h: Likewise. * include/ext/slist: Likewise. * include/ext/sso_string_base.h: Likewise. * include/ext/stdio_filebuf.h: Likewise. * include/ext/stdio_sync_filebuf.h: Likewise. * include/ext/string_conversions.h: Likewise. * include/ext/throw_allocator.h: Likewise. * include/ext/vstring.h: Likewise. * include/ext/vstring.tcc: Likewise. * include/ext/vstring_fwd.h: Likewise. * include/ext/vstring_util.h: Likewise. * include/std/charconv: Likewise. (__cpp_lib_to_chars): Do not define for freestanding. * include/std/version: Adjust which macros get defined in freestanding. * include/ext/pointer.h [!_GLIBCXX_HOSTED]: Omit iostream functionality from freestanding. * include/std/algorithm [!_GLIBCXX_HOSTED]: Omit PSTL algos. * include/std/memory [!_GLIBCXX_HOSTED]: Omit <bits/stl_tempbuf.h> in freestanding * include/bits/algorithmfwd.h [!_GLIBCXX_HOSTED]: Omit leftover random_shuffle and stable_partition definition. * include/bits/stl_algo.h [!_GLIBCXX_HOSTED]: Omit random_shuffle and stable_partition from freestanding. * include/bits/ranges_algo.h [!_GLIBCXX_HOSTED]: Omit stable_partition from freestanding. * include/bits/concept_check.h: Remove needless HOSTED check. * include/std/iterator: Include <bits/ranges_base.h>. * include/std/numeric (__cpp_lib_parallel_algorithms): Do not define for freestanding. * include/std/functional (__cpp_lib_boyer_moore_searcher): Likewise. * testsuite/lib/prune.exp: Match error for hosted-only libstdc++ tests.
2022-10-03libstdc++: Adjust precompiled headers for freestandingJonathan Wakely2-12/+86
Co-authored-by: Arsen Arsenović <arsen@aarsen.me> libstdc++-v3/ChangeLog: * include/precompiled/extc++.h [!_GLIBCXX_HOSTED]: Do not include headers that aren't valid for freestanding. * include/precompiled/stdc++.h [!_GLIBCXX_HOSTED]: Likewise.
2022-10-03libstdc++: Filter out unconditional <stdio.h> default includeArsen Arsenović2-8/+26
_AC_INCLUDES_DEFAULT_REQUIREMENTS including <stdio.h> when checking for stdint.h has prevented proper detection of whether stdint.h is present, since it'd poison the cache variables with test results failing due to <stdio.h> failing to include. As a solution, for autoconf versions under 2.70, we filter out that bit of code from ac_includes_default. This issue was fixed in autoconf-2.70. This also applies to various other headers, but was noticed when looking into why HAVE_STDINT_H was misdefined. libstdc++-v3/ChangeLog: * configure.ac: Remove any lines that unconditionally include <stdio.h> from ac_includes_default, when running Autoconf <2.70. * configure: Regenerate.
2022-10-03libstdc++: Make _GLIBCXX_HOSTED respect -ffreestanding [PR103626]Jonathan Wakely6-7/+7
This allows the library to switch to freestanding mode when compiling with the -ffreestanding flag. This means you don't need a separate libstdc++ build configured with --disable-hosted-libstdcxx in order to compile for a freestanding environment. The testsuite support files cannot be compiled for freestanding, so add -fno-freestanding to override any -ffreestanding in the test flags. libstdc++-v3/ChangeLog: PR libstdc++/103626 * acinclude.m4 (GLIBCXX_ENABLE_HOSTED): Define _GLIBCXX_HOSTED to __STDC_HOSTED__ for non-freestanding installations. * configure: Regenerate. * include/Makefile.am (${host_builddir}/c++config.h): Adjust grep pattern. * include/Makefile.in: Regenerate. * testsuite/lib/libstdc++.exp (v3-build_support): Use -fno-freestanding. * testsuite/libstdc++-abi/abi.exp: Likewise.
2022-10-03libsanitizer: Fix Solaris 11.3 compilation of sanitizer_procmaps_solaris.cpp ↵Rainer Orth1-0/+2
[PR105531] The latest libsanitizer import broke Solaris 11.3 bootstrap again, due to an oversight of mine. A fix has been committed upstream https://reviews.llvm.org/D133556 This patch cherry-picks it. Tested on Solaris 11.3 and 11.4, SPARC and x86. 2022-09-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> libsanitizer: PR sanitizer/105531 * sanitizer_common/sanitizer_procmaps_solaris.cpp: Cherry-pick llvm-project revision 1cd4d63fb9ab0f04c7151911dde0d58b673823de.
2022-10-03vect: while_ult for integer masksAndrew Stubbs3-6/+35
Add a vector length parameter needed by amdgcn without breaking aarch64. All amdgcn vector masks are DImode, regardless of vector length, so we can't tell what length is implied simply from the operator mode. (Even if we used different integer modes there's no mode small enough to differenciate a 2 or 4 lane mask). Without knowing the intended length we end up using a mask with too many lanes enabled, which leads to undefined behaviour.. The extra operand is not added for vector mask types so AArch64 does not need to be adjusted. gcc/ChangeLog: * config/gcn/gcn-valu.md (while_ultsidi): Limit mask length using operand 3. * doc/md.texi (while_ult): Document new operand 3 usage. * internal-fn.cc (expand_while_optab_fn): Set operand 3 when lhs_type maps to a non-vector mode.
2022-10-03Don't process undefined range.Andrew MacLeod2-0/+23
No need to continue processing an undefined range. gcc/ PR tree-optimization/107109 * range-op.cc (adjust_op1_for_overflow): Don't process undefined. gcc/testsuite/ * gcc.dg/pr107109.c: New.
2022-10-03arm: Add missing early clobber to MVE vrev64q_m patternsChristophe Lyon2-2/+19
Like the non-predicated vrev64q patterns, mve_vrev64q_m_<supf><mode> and mve_vrev64q_m_f<mode> need an early clobber constraint, otherwise we can generate an unpredictable instruction: Warning: 64-bit element size and same destination and source operands makes instruction UNPREDICTABLE when calling vrevq64_m* with the same first and second arguments. OK for trunk? Thanks, Christophe gcc/ChangeLog: * config/arm/mve.md (mve_vrev64q_m_<supf><mode>): Add early clobber. (mve_vrev64q_m_f<mode>): Likewise. gcc/testsuite/ChangeLog: * gcc.target/arm/mve/intrinsics/vrev64q_m_s16-clobber.c: New test.
2022-10-03c: Adjust LDBL_EPSILON for C2x for IBM long doubleJoseph Myers3-1/+44
C2x changes the <float.h> definition of *_EPSILON to apply only to normalized numbers. The effect is that LDBL_EPSILON for IBM long double becomes 0x1p-105L instead of 0x1p-1074L. There is a reasonable case for considering this a defect fix - it originated from the issue reporting process (DR#467), though it ended up being resolved by a paper (N2326) for C2x rather than through the issue process, and code using *_EPSILON often needs to override the pre-C2x value of LDBL_EPSILON and use something on the order of magnitude of the C2x value instead. However, I've followed the conservative approach of only making the change for C2x and not for previous standard versions (and not for C++, which doesn't have the C2x changes in this area). The testcases added are intended to be valid for all long double formats. The C11 one is based on gcc.target/powerpc/rs6000-ldouble-2.c (and when we move to a C2x default, gcc.target/powerpc/rs6000-ldouble-2.c will need an appropriate option added to keep using an older language version). Tested with no regressions for cross to powerpc-linux-gnu. gcc/c-family/ * c-cppbuiltin.cc (builtin_define_float_constants): Do not special-case __*_EPSILON__ setting for IBM long double for C2x. gcc/testsuite/ * gcc.dg/c11-float-7.c, gcc.dg/c2x-float-12.c: New tests.
2022-10-03libstdc++: Fix tests broken by C++23 P2266R3 "Simpler implicit move"Jonathan Wakely2-2/+2
In C++23 mode these tests started to FAIL because an rvalue reference parameter can no longer be bound to an lvalue reference return type. As confirmed by Ville (who added these tests) the problem overloads are not intended to be called, and only exist to verify that they don't interfere with the intended behaviour. This changes the function bodies to just throw, so that the tests will fail if the function is called. libstdc++-v3/ChangeLog: * testsuite/27_io/basic_ostream/inserters_other/char/6.cc: Change body of unused operator<< overload to throw if called. * testsuite/27_io/basic_ostream/inserters_other/wchar_t/6.cc: Likewise.
2022-10-03Do not pessimize range in set_nonzero_bits.Aldy Hernandez1-0/+13
Currently if we have a range of [0,0] and we set the nonzero bits to 1, the current code pessimizes the range to [0,1] because it assumes the range is [1,1] plus the possibility of 0. This fixes the oversight. gcc/ChangeLog: * value-range.cc (irange::set_nonzero_bits): Do not pessimize range. (range_tests_nonzero_bits): New test.
2022-10-03Avoid comparing ranges when sub-ranges is 0.Aldy Hernandez1-0/+3
There is nothing else to compare when the number of sub-ranges is 0. gcc/ChangeLog: * value-range.cc (irange::operator==): Early bail on m_num_ranges equal to 0.
2022-10-03Do not compare nonzero masks for varying.Aldy Hernandez1-4/+1
There is no need to compare nonzero masks when comparing two VARYING ranges, as they are always the same when range types are the same. gcc/ChangeLog: * value-range.cc (irange::legacy_equal_p): Remove nonozero mask check when comparing VR_VARYING ranges.
2022-10-03Do not compare incompatible ranges in ipa-prop.Aldy Hernandez1-2/+2
gcc/ChangeLog: * ipa-prop.cc (struct ipa_vr_ggc_hash_traits): Do not compare incompatible ranges in ipa-prop.
2022-10-03Fortran: fix testcasesFrancois-Xavier Coudert2-7/+3
Remove unreliable test for IEEE_FMA(), which fails on powerpc. Adjust stop codes for modes_1.f90. 2022-10-03 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> gcc/testsuite/ PR fortran/107062 * gfortran.dg/ieee/fma_1.f90: Fix test. * gfortran.dg/ieee/modes_1.f90: Fix test.
2022-10-03libstdc++: Fix gdb pretty printers when dealing with std::stringFrançois Dumont7-27/+23
Since revision 33b43b0d8cd2de722d177ef823930500948a7487 std::string and other similar typedef are ambiguous from a gdb point of view because it matches both std::basic_string<char> and std::__cxx11::basic_string<char> symbols. For those typedef add a workaround to accept the substitution as long as the same regardless of __cxx11 namespace. Also avoid to register printers for types in std::__cxx11::__8:: namespace, there is no such symbols. libstdc++-v3/ChangeLog: * python/libstdcxx/v6/printers.py (Printer.add_version): Do not add version namespace for __cxx11 symbols. (add_one_template_type_printer): Likewise. (add_one_type_printer): Likewise. (FilteringTypePrinter._recognizer.recognize): Add a workaround for std::string & al ambiguous typedef matching both std:: and std::__cxx11:: symbols. * testsuite/libstdc++-prettyprinters/cxx17.cc: Remove obsolete \#define _GLIBCXX_USE_CXX11_ABI 0. * testsuite/libstdc++-prettyprinters/simple.cc: Likewise. Adapt test to accept std::__cxx11::list. * testsuite/libstdc++-prettyprinters/simple11.cc: Likewise. * testsuite/libstdc++-prettyprinters/whatis.cc: Likewise. * testsuite/libstdc++-prettyprinters/80276.cc: Likewise and remove xfail for c++20 and debug mode. * testsuite/libstdc++-prettyprinters/libfundts.cc: Likewise.
2022-10-03Daily bump.GCC Administrator3-1/+31
2022-10-02tree-cfg: Fix a verification diagnostic typo [PR107121]Jakub Jelinek1-1/+1
Obvious typo in diagnostics. 2022-10-02 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/107121 * tree-cfg.cc (verify_gimple_call): Fix a typo in diagnostics, DEFFERED_INIT -> DEFERRED_INIT.
2022-10-02Adjust LIBGCC2_INCLUDES for VxWorks and augment commentOlivier Hainque1-8/+28
Investigating the reasons for libgcc build failures in a canadian context, orthogonally to the recent update of vxcrtstuff, exposed interesting differences in the way include search paths are managed between a regular Linux->VxWorks cross build and a canadian setup building a Windows->VxWorks toolchain in a Linux environment. This change augments the comment attached to LIBGCC2_INCLUDE in libgcc/config/t-vxworks to better describe the parameters at play. It also adjusts the addition of options for gcc/include and gcc/include-fixed to minimize the actual differences for libgcc in the two kinds of configurations. 2022-03-06 Olivier Hainque <hainque@adacore.com> libgcc/ * config/t-vxworks (LIBGCC2_INCLUDE): Augment comment. Move -I options for gcc/include and gcc/include-fixed at the end and make them -isystem.
2022-10-02Define GCC_DRIVER_HOST_INITIALIZATION for VxWorks targetsMarc Poulhiès4-0/+109
We need to perform static links by default on VxWorks, where the use of shared libraries involves unusual steps compared to standard native systems. This has to be conveyed before the lang_specific_driver code gets invoked (in particular for g++), so specs aren't available. This change defines the GCC_DRIVER_HOST_INITIALIZATION macro for VxWorks, to insert a -static option in case the user hasn't provided any explicit indication on the command line of the kind of link desired. While a HOST macro doesn't seem appropriate to control a target OS driven behavior, this matches other uses and won't conflict as VxWorks is not supported on any of the other configurations using this macro. gcc/ * config/vxworks-driver.cc: New. * config.gcc (*vxworks*): Add vxworks-driver.o in extra_gcc_objs. * config/t-vxworks: Add vxworks-driver.o. * config/vxworks.h (GCC_DRIVER_HOST_INITIALIZATION): New.
2022-10-02Prevent secondary warning from diagnostic tweak in gthr-vxworks.hOlivier Hainque1-1/+4
Within gthr-vxworks.h, we prevent C++ errors from missing declarations in some system headers by prepending their inclusion with a #pragma GCC diagnostic ignored "-Wstrict-prototypes" But Wstrict-prototypes is internally registered as valid for C/ObjC only, not C++, and this trick in turn triggers a Wpragma warning with -Wsystem-headers. This change just arranges to ignore the secondary warning locally. 2021-02-03 Olivier Hainque <hainque@adacore.com> * config/gthr-vxworks.h: Prevent Wpragma warning for the pragma diagnostics on Wstrict-prototypes.
2022-10-02Refine guard for vxworks crtstuff specOlivier Hainque1-5/+4
Working on the reintroduction of shared libraries support (and of modules depending on shared libraries) exposed a few test failures of simple c++ constructor tests on arm-vxworks7r2. Investigation revealed that we were not linking the crtstuff objects as needed from a compiler configured not to have shared libs support, because of the ENABLE_SHARED_LIBGCC guard in this piece of vxworks.h: /* Setup the crtstuff begin/end we might need for dwarf EH registration and/or INITFINI_ARRAY support for shared libs. */ #if (HAVE_INITFINI_ARRAY_SUPPORT && defined(ENABLE_SHARED_LIBGCC)) \ || (DWARF2_UNWIND_INFO && !defined(CONFIG_SJLJ_EXCEPTIONS)) #define VX_CRTBEGIN_SPEC "%{!shared:vx_crtbegin.o%s;:vx_crtbeginS.o%s}" crtstuff initfini array support is meant to be leveraged for constructors regardless of whether the compiler also happens to be configured with shared library support, so the guard on ENABLE_SHARED_LIBGCC here is inappropriate. This change just removes it, 2022-09-30 Olivier Hainque <hainque@adacore.com> gcc/ * config/vxworks.h (VX_CRTBEGIN_SPEC, VX_CRTEND_SPEC): If HAVE_INITFINI_ARRAY_SUPPORT, pick crtstuff objects regardless of ENABLE_SHARED_LIBGCC.
2022-10-02Daily bump.GCC Administrator5-1/+66
2022-10-01Fortran: Fix ICE and wrong code for assumed-rank arrays [PR100029, PR100040]José Rui Faustino de Sousa3-21/+85
gcc/fortran/ChangeLog: PR fortran/100040 PR fortran/100029 * trans-expr.cc (gfc_conv_class_to_class): Add code to have assumed-rank arrays recognized as full arrays and fix the type of the array assignment. (gfc_conv_procedure_call): Change order of code blocks such that the free of ALLOCATABLE dummy arguments with INTENT(OUT) occurs first. gcc/testsuite/ChangeLog: PR fortran/100029 * gfortran.dg/PR100029.f90: New test. PR fortran/100040 * gfortran.dg/PR100040.f90: New test.
2022-10-01c++: make some cp_trait_kind switch statements exhaustivePatrick Palka1-6/+25
This replaces the unreachable default case in some cp_trait_kind switches with an exhaustive listing of the trait codes that we don't expect to see, so that when adding a new trait we'll get a helpful -Wswitch warning if we forget to handle the new trait in a relevant switch. gcc/cp/ChangeLog: * semantics.cc (trait_expr_value): Make cp_trait_kind switch statement exhaustive. (finish_trait_expr): Likewise. (finish_trait_type): Likewise.
2022-10-01or1k: Only define TARGET_HAVE_TLS when HAVE_AS_TLSStafford Horne1-0/+2
This was found when testing buildroot with linuxthreads enabled. In this case, the build passes --disable-tls to the toolchain during configuration. After building the OpenRISC toolchain it was still generating TLS code sequences and causing linker failures such as: ..../or1k-buildroot-linux-uclibc-gcc -o gpsd-3.24/gpsctl .... -lusb-1.0 -lm -lrt -lnsl ..../ld: ..../sysroot/usr/lib/libusb-1.0.so: undefined reference to `__tls_get_addr' This patch fixes this by disabling tls for the OpenRISC target when requested via --disable-tls. gcc/ChangeLog: * config/or1k/or1k.cc (TARGET_HAVE_TLS): Only define if HAVE_AS_TLS is defined. Tested-by: Yann E. MORIN <yann.morin@orange.com>
2022-10-01OpenACC: Fix struct-component-kind-1.c testJulian Brown1-1/+1
This patch is a minimal fix for the recently-added struct-component-kind-1.c test (which is currently failing to emit one of the errors it expects in scan output). This fragment was erroneously omitted from the second version of the patch posted previously: https://gcc.gnu.org/pipermail/gcc-patches/2022-September/602504.html 2022-10-01 Julian Brown <julian@codesourcery.com> gcc/ * gimplify.cc (omp_group_base): Fix IF_PRESENT (no_create) handling.
2022-10-01Improve Z flag handling on H8Jeff Law2-0/+269
This patch improves handling of the Z bit in the status register in a variety of ways to improve either the code size or code speed on various H8 subtargets. For example, we can test the zero/nonzero status of the upper byte of a 16 bit register using mov.b, we can move the Z or an inverted Z into a QImode register profitably on some subtargets. We can move Z or an inverted Z into the sign bit on the H8/SX profitably, etc. gcc/ * config/h8300/h8300.md (HSI2): New iterator. (eqne_invert): Similarly. * config/h8300/testcompare.md (testhi_upper_z): New pattern. (cmpqi_z, cmphi_z, cmpsi_z): Likewise. (store_z_qi, store_z_i_qi, store_z_hi, store_z_hi_sb): New define_insn_and_splits and/or define_insns. (store_z_hi_neg, store_z_hi_and, store_z_<mode>): Likewise. (store_z_<mode>_neg, store_z_<mode>_and, store_z): Likewise.
2022-09-30c++: loop through array CONSTRUCTORJason Merrill1-1/+5
I noticed that we were ignoring all the special rules for when to use a simple INIT_EXPR for array initialization from a CONSTRUCTOR, because split_nonconstant_init_1 was also passing 1 to the from_array parameter. Arguably that's the real bug, but I think we can be flexible. The test that I noticed this with no longer fails without it. gcc/cp/ChangeLog: * init.cc (build_vec_init): Clear from_array for CONSTRUCTOR initializer.
2022-09-30c++: cast split_nonconstant_init return val to voidJason Merrill1-7/+12
We were already converting the result of expand_vec_init_expr to void; we need to do the same for split_nonconstant_init. The test that I noticed this with no longer fails without it. gcc/cp/ChangeLog: * cp-gimplify.cc (cp_genericize_init): Also convert the result of split_nonconstant_init to void.
2022-09-30Install correct patch version.Jeff Law1-5/+5
gcc/ * tree-ssa-dom.cc (record_edge_info): Install correct version of patch.
2022-09-30Emit discriminators for inlined call sites.Eugene Rozenfeld1-1/+5
This change is based on commit 9fa26998a63d4b22b637ed8702520819e408a694 by Dehao Chen in vendors/google/heads/gcc-4_8. Tested on x86_64-pc-linux-gnu. gcc/ChangeLog: * dwarf2out.cc (add_call_src_coords_attributes): Emit discriminators for inlined call sites.
2022-10-01Daily bump.GCC Administrator9-1/+257
2022-09-30More gimple const/copy propagation opportunitiesJeff Law2-2/+157
While investigating a benchmark for optimization opportunities I came across single block loop which either iterates precisely once or forever. This is an interesting scenario as we can ignore the infinite looping path and treat any PHI nodes as degenerates. So more concretely let's consider this trivial testcase: volatile void abort (void); void foo(int a) { int b = 0; while (1) { if (!a) break; b = 1; } if (b != 0) abort (); } Quick analysis shows that b's initial value is 0 and its value only changes if we enter an infinite loop. So if we get to the test b != 0, the only possible value b could have would be 0 and the test and its true arm can be eliminated. The DOM3 dump looks something like this: ;; basic block 2, loop depth 0, count 118111600 (estimated locally), maybe hot ;; prev block 0, next block 3, flags: (NEW, VISITED) ;; pred: ENTRY [always] count:118111600 (estimated locally) (FALLTHRU,EXECUTABLE) ;; succ: 3 [always] count:118111600 (estimated locally) (FALLTHRU,EXECUTABLE) ;; basic block 3, loop depth 1, count 1073741824 (estimated locally), maybe hot ;; prev block 2, next block 4, flags: (NEW, VISITED) ;; pred: 2 [always] count:118111600 (estimated locally) (FALLTHRU,EXECUTABLE) ;; 3 [89.0% (guessed)] count:955630224 (estimated locally) (FALSE_VALUE,EXECUTABLE) # b_1 = PHI <0(2), 1(3)> if (a_3(D) == 0) goto <bb 4>; [11.00%] else goto <bb 3>; [89.00%] ;; succ: 4 [11.0% (guessed)] count:118111600 (estimated locally) (TRUE_VALUE,EXECUTABLE) ;; 3 [89.0% (guessed)] count:955630224 (estimated locally) (FALSE_VALUE,EXECUTABLE) ;; basic block 4, loop depth 0, count 118111600 (estimated locally), maybe hot ;; prev block 3, next block 5, flags: (NEW, VISITED) ;; pred: 3 [11.0% (guessed)] count:118111600 (estimated locally) (TRUE_VALUE,EXECUTABLE) if (b_1 != 0) goto <bb 5>; [0.00%] else goto <bb 6>; [100.00%] ;; succ: 5 [never] count:0 (precise) (TRUE_VALUE,EXECUTABLE) ;; 6 [always] count:118111600 (estimated locally) (FALSE_VALUE,EXECUTABLE) This is a good representative of what the benchmark code looks like. The primary effect we want to capture is to realize that the test if (b_1 != 0) is always false and optimize it accordingly. In the benchmark, this opportunity is well hidden until after the loop optimizers have completed, so the first chance to capture this case is in DOM3. Furthermore, DOM wants loops normalized with latch blocks/edges. So instead of bb3 looping back to itself, there's an intermediate empty block during DOM. I originally thought this was likely to only affect the benchmark. But when I instrumented the optimization and bootstrapped GCC, much to my surprise there were several hundred similar cases identified in GCC itself. So it's not as benchmark specific as I'd initially feared. Anyway, detecting this in DOM is pretty simple. We detect the infinite loop, including the latch block. Once we've done that, we walk the PHI nodes and attach equivalences to the appropriate outgoing edge. That's all we need to do as the rest of DOM is already prepared to handle equivalences on edges. gcc/ * tree-ssa-dom.cc (single_block_loop_p): New function. (record_edge_info): Also record equivalences for the outgoing edge of a single block loop where the condition is an invariant. gcc/testsuite/ * gcc.dg/infinite-loop.c: New test.
2022-09-30Minor cleanup/prep in DOMJeff Law1-5/+4
It's a bit weird that free_dom_edge_info leaves a dangling pointer in e->aux. Not sure what I was thinking. There's two callers. One wipes e->aux immediately after the call, the other attaches a newly created object immediately after the call. So we can wipe e->aux within the call and simplify one of the two call sites. This is preparatory work for a minor optimization where we want to detect another class of edge equivalences in DOM (until something better is available) and either attach them an existing edge_info structure or create a new one if one doesn't currently exist for a given edge. gcc/ * tree-ssa-dom.cc (free_dom_edge_info): Clear e->aux too. (free_all_edge_infos): Do not clear e->aux here.
2022-09-30Document -fexcess-precision=16 in target.defH.J. Lu1-1/+1
* target.def (TARGET_C_EXCESS_PRECISION): Document -fexcess-precision=16.
2022-09-30Document -fexcess-precision=16 in tm.texiPalmer Dabbelt1-1/+1
I just happened to stuble on this one while trying to sort out the RISC-V bits. gcc/ChangeLog * doc/tm.texi (TARGET_C_EXCESS_PRECISION): Add 16.
2022-09-30RISC-V: Support -fexcess-precision=16Palmer Dabbelt1-0/+1
This fixes f19a327077e ("Support -fexcess-precision=16 which will enable FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16 when backend supports _Float16.") on RISC-V targets. gcc/ChangeLog PR target/106815 * config/riscv/riscv.cc (riscv_excess_precision): Add support for EXCESS_PRECISION_TYPE_FLOAT16.
2022-09-30libstdc++: Remove <sstream> dependency from std::bitset::to_ulong() testJonathan Wakely1-12/+1
There's no need to use a stringstream to test the to_ulong() member. This will allow the test to be used in freestanding mode. libstdc++-v3/ChangeLog: * testsuite/20_util/bitset/access/to_ulong.cc: Construct bitset from binary literal instead of using stringstream.
2022-09-30libstdc++: Optimize operator>> for std::bitsetJonathan Wakely1-9/+27
We can improve performance by using a char buffer instead of basic_string. The loop bound already means we can't overflow the buffer, and we don't need to keep writing a null character after every character written to the buffer. We could just use basic_string::resize(N) to zero-init the whole string, then overwrite those chars. But that zero-init of all N chars would be wasted in the case where we are writing to a bitset<N> with large N, but only end up extracting one or two chars from the stream. With this change we just use buffer of uninitialized chars. For a small-ish bitset (currently <= 256) we can improve performance further by using alloca instead of the heap. libstdc++-v3/ChangeLog: * include/std/bitset (operator>>): Use a simple buffer instead of std::basic_string.
2022-09-30libstdc++: Remove non-standard public members in std::bitsetJonathan Wakely1-36/+33
This makes _M_copy_from_ptr, _M_copy_from_string and _M_copy_to_string private, and declares operator<< and operator>> as friends. Also remove the historical _M_copy_from_string and _M_copy_to_string overloads. Those were used before DR 396 was implemented but are not needed now. There are no tests or docs describing them, so I don't think we intend to support them as extensions. libstdc++-v3/ChangeLog: * include/std/bitset (_M_copy_from_ptr, _M_copy_from_string) (_M_copy_to_string): Change access to private. (_M_copy_from_string(const basic_string&, size_t, size_t)): Remove. (_M_copy_to_string(const basic_string&)): Remove.
2022-09-30libstdc++: Fix broken dg-prune-outputJonathan Wakely1-1/+1
The new pattern in the dg-prune-output directive doesn't work. Instead of a messy regex full of leaning toothpicks, just match on the diagnostic text instead of the header paths. libstdc++-v3/ChangeLog: * testsuite/20_util/bind/ref_neg.cc: Fix dg-prune-output directive.
2022-09-30arm, csky: Fix C++ ICEs with _Float16 and __fp16 [PR107080]Jakub Jelinek3-5/+26
On Fri, Sep 30, 2022 at 09:54:49AM -0400, Jason Merrill wrote: > > Note, there is one further problem on aarch64/arm, types with HFmode > > (_Float16 and __fp16) are there mangled as Dh (which is standard > > Itanium mangling: > > ::= Dh # IEEE 754r half-precision floating point (16 bits) > > ::= DF <number> _ # ISO/IEC TS 18661 binary floating point type _FloatN (N bits) > > so in theory is also ok, but DF16_ is more specific. Should we just > > change Dh to DF16_ in those backends, or should __fp16 there be distinct > > type from _Float16 where __fp16 would mangle Dh and _Float16 DF16_ ? > > You argued for keeping __float128 separate from _Float128, does the same > argument not apply to this case? Actually, they already were distinct types that just mangled the same. So the same issue that had to be solved on i?86, ia64 and rs6000 for _Float64x vs. long double is a problem on arm and aarch64 with _Float16 vs. __fp16. The following patch fixes it for arm after aarch64 has been changed already before. > > And there is csky, which mangles __fp16 (but only if type's name is __fp16, > > not _Float16) as __fp16, that looks clearly invalid to me as it isn't > > valid in the mangling grammar. So perhaps just nuke csky's mangle_type > > and have it mangled as DF16_ by the generic code? And seems even on csky __fp16 is distinct type from _Float16 (which is a good thing for consistency, these 3 targets are the only ones that have __fp16 type), so instead the patch handles it the same as on arm/aarch64, Dh mangling for __fp16 and DF16_ for _Float16. 2022-09-30 Jakub Jelinek <jakub@redhat.com> PR c++/107080 * config/arm/arm.cc (arm_mangle_type): Mangle just __fp16 as Dh and _Float16 as DF16_. * config/csky/csky.cc (csky_init_builtins): Fix a comment typo. (csky_mangle_type): Mangle __fp16 as Dh and _Float16 as DF16_ rather than mangling __fp16 as __fp16. * g++.target/arm/pr107080.C: New test.
2022-09-30diagnostics: Fix virtual location for -Wuninitialized [PR69543]Lewis Hyatt5-25/+73
Warnings issued for -Wuninitialized have been using the spelling location of the problematic usage, discarding any information on the location of the macro expansion point if such usage was in a macro. This makes the warnings impossible to control reliably with #pragma GCC diagnostic, and also discards useful context in the diagnostic output. There seems to be no need to discard the virtual location information, so this patch fixes that. PR69543 was mostly about _Pragma issues which have been fixed for many years now. The PR remains open because two of the testcases added in response to it still have xfails, but those xfails have nothing to do with _Pragma and rather just with the issue fixed by this patch, so the PR can be closed now as well. The other testcase modified here, pragma-diagnostic-2.c, was explicitly testing for the undesirable behavior that was xfailed in pr69543-3.c. I have adjusted that and also added a new testcase verifying all 3 types of warning that come from tree-ssa-uninit.cc get the proper location information now. gcc/ChangeLog: PR preprocessor/69543 * tree-ssa-uninit.cc (warn_uninit): Stop stripping macro tracking information away from the diagnostic location. (maybe_warn_read_write_only): Likewise. (maybe_warn_operand): Likewise. gcc/testsuite/ChangeLog: PR preprocessor/69543 * c-c++-common/pr69543-3.c: Remove xfail. * c-c++-common/pr69543-4.c: Likewise. * gcc.dg/cpp/pragma-diagnostic-2.c: Adjust test for new behavior. * c-c++-common/pragma-diag-16.c: New test.
2022-09-30aarch64: Fix C++ ICEs with _Float16 and __fp16 [PR107080]Jakub Jelinek2-0/+21
On Fri, Sep 30, 2022 at 09:54:49AM -0400, Jason Merrill wrote: > > Note, there is one further problem on aarch64/arm, types with HFmode > > (_Float16 and __fp16) are there mangled as Dh (which is standard > > Itanium mangling: > > ::= Dh # IEEE 754r half-precision floating point (16 bits) > > ::= DF <number> _ # ISO/IEC TS 18661 binary floating point type _FloatN (N bits) > > so in theory is also ok, but DF16_ is more specific. Should we just > > change Dh to DF16_ in those backends, or should __fp16 there be distinct > > type from _Float16 where __fp16 would mangle Dh and _Float16 DF16_ ? > > You argued for keeping __float128 separate from _Float128, does the same > argument not apply to this case? Actually, they already were distinct types that just mangled the same. So the same issue that had to be solved on i?86, ia64 and rs6000 for _Float64x vs. long double is a problem on arm and aarch64 with _Float16 vs. __fp16. The following patch fixes it so far for aarch64. 2022-09-30 Jakub Jelinek <jakub@redhat.com> PR c++/107080 * config/aarch64/aarch64.cc (aarch64_mangle_type): Mangle just __fp16 as Dh and _Float16 as DF16_. * g++.target/aarch64/pr107080.C: New test.
2022-09-30i386, rs6000, ia64, s390: Fix C++ ICEs with _Float64x or _Float128 [PR107080]Jakub Jelinek5-11/+91
The following testcase ICEs on x86 as well as ppc64le (the latter with -mabi=ieeelongdouble), because _Float64x there isn't mangled as DF64x but e or u9__ieee128 instead. Those are the mangling that should be used for the non-standard types with the same mode or for long double, but not for _Float64x. All the 4 mangle_type targhook implementations start with type = TYPE_MAIN_VARIANT (type); so I think it is cleanest to handle it the same in all and return NULL before the switches on mode or whatever other tests. s390 doesn't actually have a bug, but while I was there, having type = TYPE_MAIN_VARIANT (type); if (TYPE_MAIN_VARIANT (type) == long_double_type_node) looked useless to me. Note, there is one further problem on aarch64/arm, types with HFmode (_Float16 and __fp16) are there mangled as Dh (which is standard Itanium mangling: ::= Dh # IEEE 754r half-precision floating point (16 bits) ::= DF <number> _ # ISO/IEC TS 18661 binary floating point type _FloatN (N bits) so in theory is also ok, but DF16_ is more specific. Should we just change Dh to DF16_ in those backends, or should __fp16 there be distinct type from _Float16 where __fp16 would mangle Dh and _Float16 DF16_ ? And there is csky, which mangles __fp16 (but only if type's name is __fp16, not _Float16) as __fp16, that looks clearly invalid to me as it isn't valid in the mangling grammar. So perhaps just nuke csky's mangle_type and have it mangled as DF16_ by the generic code? 2022-09-30 Jakub Jelinek <jakub@redhat.com> PR c++/107080 * config/i386/i386.cc (ix86_mangle_type): Always return NULL for float128_type_node or float64x_type_node, don't check float128t_type_node later on. * config/ia64/ia64.cc (ia64_mangle_type): Always return NULL for float128_type_node or float64x_type_node. * config/rs6000/rs6000.cc (rs6000_mangle_type): Likewise. Don't check float128_type_node later on. * config/s390/s390.cc (s390_mangle_type): Don't use TYPE_MAIN_VARIANT on type which was set to TYPE_MAIN_VARIANT a few lines earlier. * g++.dg/cpp23/ext-floating11.C: New test.