aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2025-03-26Daily bump.GCC Administrator13-1/+624
2025-03-25cobol: Changes to eliminate _Float128 from the front end [PR119241]Bob Dubner13-303/+395
These changes switch _Float128 types to REAL_VALUE_TYPE in the front end. Some __int128 variables and function return values are changed to FIXED_WIDE_INT(128) gcc/cobol PR cobol/119241 * cdf.y: (cdfval_base_t::operator()): Return const. * cdfval.h: (struct cdfval_base_t): Add const cdfval_base_t& operator(). (struct cdfval_t): Add cdfval_t constructor. Change cdf_value definitions. * gcobolspec.cc (lang_specific_driver): Formatting fix. * genapi.cc: Include fold-const.h and realmpfr.h. (initialize_variable_internal): Use real_to_decimal instead of strfromf128. (get_binary_value_from_float): Use wide_int_to_tree instead of build_int_cst_type. (psa_FldLiteralN): Use fold_convert instead of strfromf128, real_from_string and build_real. (parser_display_internal): Rewritten to work on REAL_VALUE_TYPE rather than _Float128. (mh_source_is_literalN): Use FIXED_WIDE_INT(128) rather than __int128, wide_int_to_tree rather than build_int_cst_type, fold_convert rather than build_string_literal. (real_powi10): New function. (binary_initial_from_float128): Change type of last argument from _Float128 to REAL_VALUE_TYPE, process it using real.cc and mpfr APIs. (digits_from_float128): Likewise. (initial_from_float128): Make static. Remove value argument, add local REAL_VALUE_TYPE value variable instead, process it using real.cc and native_encode_expr APIs. (parser_symbol_add): Adjust initial_from_float128 caller. * genapi.h (initial_from_float128): Remove declaration. * genutil.cc (get_power_of_ten): Change return type from __int128 to FIXED_WIDE_INT(128), ditto for retval type, change type of pos from __int128 to unsigned long long. (scale_by_power_of_ten_N): Use wide_int_to_tree instead of build_int_cst_type. Use FIXED_WIDE_INT(128) instead of __int128 as power_of_ten variable type. (copy_little_endian_into_place): Likewise. * genutil.h (get_power_of_ten): Change return type from __int128 to FIXED_WIDE_INT(128). * parse.y (%union): Change type of float128 from _Float128 to REAL_VALUE_TYPE. (string_of): Change argument type from _Float128 to const REAL_VALUE_TYPE &, use real_to_decimal rather than strfromf128. Add another overload with tree argument type. (field: cdf): Use real_zerop rather than comparison against 0.0. (occurs_clause, const_value): Use real_to_integer. (value78): Use build_real and real_to_integer. (data_descr1): Use real_to_integer. (count): Use real_to_integer, real_from_integer and real_identical instead of direct comparison. (value_clause): Use real_from_string3 instead of num_str2i. Use real_identical instead of direct comparison. Use build_real. (allocate): Use real_isneg and real_iszero instead of <= 0 comparison. (move_tgt): Use real_to_integer, real_value_truncate, real_from_integer and real_identical instead of comparison of casts. (cce_expr): Use real_arithmetic and real_convert or real_value_negate instead of direct arithmetics on _Float128. (cce_factor): Use real_from_string3 instead of numstr2i. (literal_refmod_valid): Use real_to_integer. * symbols.cc (symbol_table_t::registers_t::registers_t): Formatting fix. (ERROR_FIELD): Likewise. (extend_66_capacity): Likewise. (cbl_occurs_t::subscript_ok): Use real_to_integer, real_from_integer and real_identical. * symbols.h (cbl_field_data_t::etc_t::value): Change type from _Float128 to tree. (cbl_field_data_t::etc_t::etc_t): Adjust defaulted argument value. (cbl_field_data_t::cbl_field_data_t): Formatting fix. Use etc() rather than etc(0). (cbl_field_data_t::value_of): Change return type from _Float128 to tree. (cbl_field_data_t::operator=): Change return and argument type from _Float128 to tree. (cbl_field_data_t::valify): Use real_from_string, real_value_truncate and build_real. (cbl_field_t::same_as): Use build_zero_cst instead of _Float128(0.0). gcc/testsuite * cobol.dg/literal1.cob: New testcase. * cobol.dg/output1.cob: Likewise Co-authored-by: Richard Biener <rguenth@suse.de> Co-authored-by: Jakub Jelinek <jakub@redhat.com> Co-authored-by: James K. Lowden <jklowden@cobolworx.com> Co-authored-by: Robert Dubner <rdubher@symas.com>
2025-03-25c++: add fixed test [PR101881]Marek Polacek1-0/+5
Fixed recently by r15-7822. PR c++/101881 gcc/testsuite/ChangeLog: * g++.dg/ext/vector44.C: New test.
2025-03-25c++: Properly fold <COND_EXPR>.*<COMPONENT> [PR114525]Simon Martin2-1/+37
We've been miscompiling the following since r0-51314-gd6b4ea8592e338 (I did not go compile something that old, and identified this change via git blame, so might be wrong) === cut here === struct Foo { int x; }; Foo& get (Foo &v) { return v; } void bar () { Foo v; v.x = 1; (true ? get (v) : get (v)).*(&Foo::x) = 2; // v.x still equals 1 here... } === cut here === The problem lies in build_m_component_ref, that computes the address of the COND_EXPR using build_address to build the representation of (true ? get (v) : get (v)).*(&Foo::x); and gets something like &(true ? get (v) : get (v)) // #1 instead of (true ? &get (v) : &get (v)) // #2 and the write does not go where want it to, hence the miscompile. This patch replaces the call to build_address by a call to cp_build_addr_expr, which gives #2, that is properly handled. PR c++/114525 gcc/cp/ChangeLog: * typeck2.cc (build_m_component_ref): Call cp_build_addr_expr instead of build_address. gcc/testsuite/ChangeLog: * g++.dg/expr/cond18.C: New test.
2025-03-25toplevel, libcobol: Add dependency on libquadmath build [PR119244].Iain Sandoe2-0/+4
For the configuration of libgcobol to be correct for targets that need to use libquadmath for 128b FP support, we must be able to find the quadmath library (or not, for targets that have the support in libc). PR cobol/119244 ChangeLog: * Makefile.def: libgcobol configure depends on libquadmath build. * Makefile.in: Regenerate. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-03-25gcc, gcov: Use 'lbasename' consistently.Iain Sandoe1-1/+1
The 'basename' implementation can vary with the host platform (e.g. POSIX c.f. Linux). This is the only current uses of basename() in the source so convert them to use lbasename() as most other cases do. gcc/ChangeLog: * gcov.cc (get_gcov_intermediate_filename): Use lbasename(). Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-03-25gcc, configure: When checking for basename, use the same process as ↵Iain Sandoe3-11/+29
libiberty [PR119250]. We need the configure result from the decl check for basename() in the GCC configuration to match that obtained when configuring libiberty or we get conflicts when <libgen.h> is included in any TU that also includes "system.h" or "libiberty.h" directly. PR other/119250 gcc/ChangeLog: * config.in: Regenerate. * configure: Regenerate. * configure.ac: Match the configure test in libiberty when checking the basename decl. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-03-25libiberty: Append <libgen.h> to AC_CHECK_DECLS [PR119218].Iain Sandoe3-5/+19
Darwin and Solaris, at least, provide basename() in libc, but only declare it in <libgen.h>. That library is not one of the set in AC_INCLUDES_DEFAULT and so we fail the config test and fall back to the libiberty-provided version. In itself, this is not an issue; however, if we include <libgen.h> and libiberty.h in the same TU we do then get a decl conflict. PR other/119218 libiberty/ChangeLog: * config.in: Regenerate. * configure: Regenerate. * configure.ac: Append <libgen.h> to AC_INCLUDES_DEFAULT when checking for the 'basename' decl. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-03-25C prototypes for functions returning C function pointers.Thomas Koenig1-3/+23
This patch handles dumping prototypes for C functions returning function pointers. For the test case MODULE test USE, INTRINSIC :: ISO_C_BINDING CONTAINS FUNCTION lookup(idx) BIND(C) type(C_FUNPTR) :: lookup integer(C_INT), VALUE :: idx lookup = C_FUNLOC(x1) END FUNCTION lookup subroutine x1() end subroutine x1 END MODULE test the prototype is void (*lookup (int idx)) (); Regression-tested. Again no test case because I don't know how. During testing, I also found that vtabs were dumped, this is also corrected. gcc/fortran/ChangeLog: PR fortran/119419 * dump-parse-tree.cc (write_funptr_fcn): New function. (write_type): Invoke it for C_FUNPTR. (write_interop_decl): Do not dump vtabs.
2025-03-25libstdc++: Allow std::ranges::to to create unionsJonathan Wakely2-2/+20
LWG 4229 points out that the std::ranges::to wording refers to class types, but I added an assertion using std::is_class_v which only allows non-union class types. LWG consensus is that unions should be allowed, so this additionally uses std::is_union_v. libstdc++-v3/ChangeLog: * include/std/ranges (ranges::to): Allow unions as well as non-union class types. * testsuite/std/ranges/conv/lwg4229.cc: New test. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-03-25libstdc++: Optimize std::vector construction from input iterators [PR108487]Jonathan Wakely2-16/+56
LWG 3291 make std::ranges::iota_view's iterator have input_iterator_tag as its iterator_category, even though it satisfies the C++20 std::forward_iterator concept. This means that the traditional std::vector::vector(InputIterator, InputIterator) constructor treats iota_view iterators as input iterators, because it only understands the C++17 iterator requirements, not the C++20 iterator concepts. This results in a loop that calls emplace_back for each individual element of the iota_view, requiring the vector to reallocate repeatedly as the values are inserted. This makes it unnecessarily slow to construct a vector from an iota_view. This change adds a new _M_range_initialize_n function for initializing a vector from a range (which doesn't have to be common) and a size. This new function can be used by vector(InputIterator, InputIterator) and vector(from_range_t, R&&) when std::ranges::distance can be used to get the size. It can also be used by the _M_range_initialize overload that gets the size for a Cpp17ForwardIterator pair using std::distance, and by the vector(initializer_list) constructor. With this new function constructing a std::vector from iota_view does a single allocation of the correct size and so doesn't need to reallocate in a loop. Previously the _M_range_initialize overload for Cpp17ForwardIterator was using a local RAII _Guard_alloc object to own the storage, but that was redundant. The _Vector_base can own the storage right away, and its destructor will deallocate it if _M_range_initialize exits via an exception. libstdc++-v3/ChangeLog: PR libstdc++/108487 * include/bits/stl_vector.h (vector(initializer_list)): Call _M_range_initialize_n instead of _M_range_initialize. (vector(InputIterator, InputIterator)): Use _M_range_initialize_n for C++20 sized sentinels and forward iterators. (vector(from_range_t, R&&)): Use _M_range_initialize_n for sized ranges and forward ranges. (vector::_M_range_initialize(FwIt, FwIt, forward_iterator_tag)): Likewise. (vector::_M_range_initialize_n): New function. * testsuite/23_containers/vector/cons/108487.cc: New test. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-03-25libstdc++: Adjust how __gnu_debug::vector detects invalidationJonathan Wakely1-8/+6
The new C++23 member functions assign_range, insert_range and append_range were checking whether the begin() iterator changed after calling the base class member. That works, but is technically undefined when the original iterator has been invalidated by a change in capacity. We can just check the capacity directly, because reallocation only occurs if a change in capacity is required. N.B. we can't use data() either because std::vector<bool> doesn't have it. libstdc++-v3/ChangeLog: * include/debug/vector (vector::assign_range): Use change in capacity to detect reallocation. (vector::insert_range, vector::append_range): Likewise. Remove unused variables. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-03-25libstdc++: Fix std::vector::append_range for overlapping rangesJonathan Wakely5-20/+385
Unlike insert_range and assign_range, the append_range function does not have a precondition that the range doesn't overlap *this. That means we need to avoid relocating the existing elements until after copying from the range. This means I need to revert r15-8488-g3e1d760bf49d0e which made the from_range_t constructor use append_range, because the constructor can avoid the additional complexity needed by append_range. When relocating the existing elements in append_range we can use std::__relocate_a to do it more efficiently, if that's valid. std::vector<bool>::append_range needs similar treatment, although it's a bit simpler as we know that the elements are trivially copyable and so we don't need to worry about them throwing. assign_range doesn't allow overlapping ranges, so can be rewritten to be more efficient than calling append_range for the forward or sized range case. libstdc++-v3/ChangeLog: * include/bits/stl_bvector.h (vector::assign_range): More efficient implementation for forward/sized ranges. (vector::append_range): Handle potentially overlapping range. * include/bits/stl_vector.h (vector(from_range_t, R&&, Alloc)): Do not use append_range for non-sized input range case. (vector::append_range): Handle potentially overlapping range. * include/bits/vector.tcc (vector::insert_range): Forward range instead of moving it. * testsuite/23_containers/vector/bool/modifiers/insert/append_range.cc: Test overlapping ranges. * testsuite/23_containers/vector/modifiers/append_range.cc: Likewise. Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-03-25Add support of --enable-host-pie to the native Ada compilerEric Botcazou5-45/+107
gcc/ada/ PR ada/119440 * gcc-interface/Make-lang.in (GCC_LINK): Filter out -pie in stage 1 (GCC_LLINK): Likewise. * gcc-interface/Makefile.in (COMPILER): Delete and replace by CC. (COMPILER_FLAGS): Delete. (ALL_COMPILERFLAGS): Delete and replace by ALL_CFLAGS. (ALL_ADAFLAGS): Move around. (enable_host_pie): New substituted variable. (LD_PICFLAG): Likewise. Do not add it to TOOLS_LIBS. (LIBIBERTY): Test enable_host_pie. (LIBGNAT): Likewise and use libgnat_pic.a if yes. (TOOLS_FLAGS_TO_PASS): Pass $(PICFLAG) under CFLAGS & $(LD_PICFLAG) under LDFLAGS. Also pass through ADA_CFLAGS. (common-tools): Add $(ALL_CFLAGS) $(ADA_CFLAGS) to the --GCC string of $(GNATLINK) commands. (../../gnatdll$(exeext)): Likewise. (gnatmake-re): Likewise. (gnatlink-re): Likewise. (gnatlib-shared-dual): Remove all the object files at the end. gnattools/ PR ada/119440 * configure.ac (host-pie): New switch. (host-bind-now): Likewise. Substitute PICFLAG and LD_PICFLAG. * configure: Regenerate. * Makefile.in (PICFLAG): New substituted variable. (LD_PICFLAG): Likewise. (TOOLS_FLAGS_TO_PASS): Pass $(PICFLAG) under CFLAGS & $(LD_PICFLAG) under LDFLAGS. Do not pass -I- under ADA_INCLUDES. (TOOLS_FLAGS_TO_PASS_RE): Likewise.
2025-03-25c++: lambda, default argument, unevaluated contextyxj-github-4372-0/+14
This patch would like to avoid the ICE when template lambdas call with default parameters in unevaluated context. The bug is the same as https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119385. For example: 1 | template <class T> 2 | void foo(T x) { 3 | sizeof []<int=0>(T=x) { return 0; }(); 4 | } 5 | 6 | void test { 7 | foo(0); 8 | } when compile with -fsyntax-only -std=c++20, it will have ICE similar to test.cc: In instantiation of 'void foo(T) [with T = int]': test.cc:7:6: required from here 6 | foo(0); | ~~~^~~ test.cc:3:38: internal compiler error: in tsubst_expr, at cp/pt.cc:21919 2 | sizeof []<int=0>(T=x) { return 0; }(); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ And if without the template code `<int=0>`, the code will pass compile, it's wrong. When parsing lambda, the sizeof will affect the lambda internal unevaluated operand being handled. So consider save/restore cp_unevaluated_operand. gcc/cp/ChangeLog: * parser.cc (cp_parser_lambda_expression): Use cp_evaluated. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-uneval25.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com>
2025-03-25arm: testsuite: skip mtp tests on thumb1Richard Earnshaw4-0/+4
These tests need access to the MRC instruction, but that isn't part of of the Thumb1 ISA. So skip the tests when this isn't the case. gcc/testsuite/ChangeLog: * gcc.target/arm/mtp_1.c: Require arm32. * gcc.target/arm/mtp_2.c: Likewise. * gcc.target/arm/mtp_3.c: Likewise. * gcc.target/arm/mtp_4.c: Likewise.
2025-03-25OpenMP: Create additional interop objects with append_args.Sandra Loosemore9-73/+275
This patch adds support for the case where #pragma omp declare variant with append_args is used inside a #pragma omp dispatch interop that specifies fewer interop args than required by the variant; new interop objects are implicitly created and then destroyed around the call to the variant, using the GOMP_interop builtin. gcc/fortran/ChangeLog * trans-openmp.cc (gfc_trans_omp_declare_variant): Remove accidental redeclaration of pref. gcc/ChangeLog * gimplify.cc (modify_call_for_omp_dispatch): Adjust arguments. Remove the "sorry" for the case where new interop objects must be constructed, and add code to make it work instead. (expand_variant_call_expr): Adjust arguments and call to modify_call_for_omp_dispatch. (gimplify_variant_call_expr): Simplify logic for calling expand_variant_call_expr. gcc/testsuite/ChangeLog * c-c++-common/gomp/append-args-1.c: Adjust expected behavior. * c-c++-common/gomp/append-args-interop.c: New. * c-c++-common/gomp/dispatch-11.c: Adjust expected behavior. * g++.dg/gomp/append-args-1.C: Likewise. * gfortran.dg/gomp/append-args-interop.f90: New. * gfortran.dg/gomp/declare-variant-mod-2.f90: Adjust expected behavior. libgomp/ChangeLog * libgomp.texi (OpenMP 5.1): Mark append_args as fully supported. Co-Authored-By: Tobias Burnus <tburnus@baylibre.com>
2025-03-25arm: testsuite: adjust ftest testsRichard Earnshaw25-58/+34
The ftest-*.c tests for Arm check certain ACLE mandated macros to ensure they are correctly defined based on the selected architecture. ACLE states that the macro should be defined if the operation exists in the hardware, but it doesn't have to exist in the current ISA because and interworking call to the library function will still result in using the hardware operation (both GCC and Clang agree on this). So adjust the tests accordingly. Whilst cleaning this up, also remove the now redundant dg-skip-if operations that were testing for incompatible command-line options. That should now be a thing of the past as the framework will clean this up more thoroughly before running the test, or detect incompatible option combinations. gcc/testsuite/ChangeLog: * gcc.target/arm/ftest-armv4t-thumb.c: Expect __ARM_FEATURE_CLZ to be defined. Remove redundant dg-skip-if rules. * gcc.target/arm/ftest-armv5t-thumb.c: Likewise. * gcc.target/arm/ftest-armv5te-thumb.c: Likewise. * gcc.target/arm/ftest-armv6-thumb.c: Likewise. * gcc.target/arm/ftest-armv6k-thumb.c: Likewise. * gcc.target/arm/ftest-armv6z-thumb.c: Likewise. * gcc.target/arm/ftest-armv7em-thumb.c: Remove redundant dg-skip-if rules. Add a require-effective-target for armv7em. * gcc.target/arm/ftest-armv7a-arm.c: Likewise. * gcc.target/arm/ftest-armv7a-thumb.c: Likewise. * gcc.target/arm/ftest-armv7r-arm.c: Likewise. * gcc.target/arm/ftest-armv7r-thumb.c: Likewise. * gcc.target/arm/ftest-armv7ve-arm.c: Likewise. * gcc.target/arm/ftest-armv7ve-thumb.c: Likewise. * gcc.target/arm/ftest-armv8a-arm.c: Likewise. * gcc.target/arm/ftest-armv8a-thumb.c: Likewise. * gcc.target/arm/ftest-armv4-arm.c: Remove redundant dg-skip-if rules. * gcc.target/arm/ftest-armv4t-arm.c: Likewise. * gcc.target/arm/ftest-armv5t-arm.c: Likewise. * gcc.target/arm/ftest-armv5te-arm.c: Likewise. * gcc.target/arm/ftest-armv6-arm.c: Likewise. * gcc.target/arm/ftest-armv6k-arm.c: Likewise. * gcc.target/arm/ftest-armv6m-thumb.c: Likewise. * gcc.target/arm/ftest-armv6t2-arm.c: Likewise. * gcc.target/arm/ftest-armv6t2-thumb.c: Likewise. * gcc.target/arm/ftest-armv6z-arm.c: Likewise.
2025-03-25i386: Fix up combination of -2 r<<= (x & 7) into btr [PR119428]Jakub Jelinek2-2/+22
The following patch is miscompiled from r15-8478 but latently already since my r11-5756 and r11-6631 changes. The r11-5756 change was https://gcc.gnu.org/pipermail/gcc-patches/2020-December/561164.html which changed the splitters to immediately throw away the masking. And the r11-6631 change was an optimization to recognize (set (zero_extract:HI (...) (const_int 1) (...)) (const_int 1) as btr. The problem is their interaction. x86 is not a SHIFT_COUNT_TRUNCATED target, so the masking needs to be explicit in the IL. And combine.cc (make_field_assignment) has since 1992 optimizations which try to optimize x &= (-2 r<< y) into zero_extract (x) = 0. Now, such an optimization is fine if y has not been masked or if the chosen zero_extract has the same mode as the rotate (or it recognizes something with a left shift too). IMHO such optimization is invalid for SHIFT_COUNT_TRUNCATED targets because we explicitly say that the masking of the shift/rotate counts are redundant there and don't need to be part of the IL (I have a patch for that, but because it is just latent, I'm not sure it needs to be posted for gcc 15 (and also am not sure if it should punt or add operand masking just in case)). x86 is not SHIFT_COUNT_TRUNCATED though and so even fixing combine not to do that for SHIFT_COUNT_TRUNCATED targets doesn't help, and we don't have QImode insv, so it is optimized into HImode insertions. Now, if the y in x &= (-2 r<< y) wasn't masked in any way, turning it into HImode btr is just fine, but if it was x &= (-2 r<< (y & 7)) and we just decided to throw away the masking, using btr changes the behavior on it and causes e2fsprogs and sqlite miscompilations. So IMHO on !SHIFT_COUNT_TRUNCATED targets, we need to keep the maskings explicit in the IL, either at least for the duration of the combine pass as does the following patch (where combine is the only known pass to have such transformation), or even keep it until final pass in case there are some later optimizations that would also need to know whether there was explicit masking or not and with what mask. The latter change would be much larger. The following patch just reverts the r11-5756 change and adds a testcase. 2025-03-25 Jakub Jelinek <jakub@redhat.com> PR target/96226 PR target/119428 * config/i386/i386.md (splitter after *<rotate_insn><mode>3_mask, splitter after *<rotate_insn><mode>3_mask_1): Revert 2020-12-05 changes. * gcc.c-torture/execute/pr119428.c: New test.
2025-03-25RISC-V: disable the abd expander for gcc-15 release [PR119224]Vineet Gupta3-4/+32
It seems the new expander triggers a latent issue in sched1 causing extraneous spills in a different sad variant. Given how close we are to gcc-15 release, disable it for now. Since we do want to retain and re-enable this capabilty, manully disable vs. reverting the orig patch which takes away the test case too. Fix the orig test case to expect old codegen idiom (although vneg is no longer emitted, in favor of vrsub). Also add a new testcase which flags any future spills in the affected routine. PR target/119224 gcc/ChangeLog: * config/riscv/autovec.md: Disable abd splitter. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/pr117722.c: Adjust output insn. * gcc.target/riscv/rvv/autovec/pr119224.c: Add new test. Signed-off-by: Vineet Gupta <vineetg@rivosinc.com>
2025-03-25OpenMP: interop - fix Fortran testPaul-Antoine Arras1-4/+10
This fixes up commit r15-8654-g99e2906ae255fc: * Do not use omp_lib in Fortran compile test; instead, provide needed declarations explicitly. * Update scan-dump patterns to be compatible with 32-bit architectures. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/interop-5.f90: Declare omp_interop_kind explicitly instead of use'ing omp_lib. Update scan-dumps to allow for 4-byte pointers.
2025-03-25install.texi: gcn - suggest to use Newlib with simd math fix [PR119325]Tobias Burnus1-2/+3
Suggest a Newlib with a fix for the SIMD math issue. Newlib commit: https://sourceware.org/git/?p=newlib-cygwin.git;a=commitdiff;h=2ef1a37e7 Additionally, for generic support in ROCm, it is expected that 6.4 will added the support; the current version is 6.3.3 and it does not support it; bump >6.3.2 to >6.3.3 in install.texi to avoid doubts. gcc/ChangeLog: PR middle-end/119325 * doc/install.texi (gcn): Change ROCm > 6.3.2 to >6.3.3 for generic support; mention Newlib commit that fixes a SIMD math issue.
2025-03-25omp-general.cc: Remove 'if' around call to always 'true' returning function ↵Tobias Burnus1-8/+5
[PR118627] Before omp_parse_access_method and omp_parse_access_methods unconditionally returned true, now they are void functions. Accordingly, calls had to be updated by removing the 'if' around the call; this also fixes Clang's -Wsometimes-uninitialized warning when compiling omp-general.cc as one variable remained uninitialized for a never occurring false. gcc/ChangeLog: PR middle-end/118627 * omp-general.cc (omp_parse_access_method): Change to return void. (omp_parse_access_methods): Return void; remove 'if' around a function call. (omp_parse_expr): Remove 'if' around a function call.
2025-03-25arm: testsuite: avoid dg-options in primary LTO fileRichard Earnshaw1-2/+1
As the primary LTO file in this test, it cannot use dg-options. Move the flags from there to dg-lto-options. gcc/testsuite/ChangeLog: * gcc.target/arm/lto/pr96939_0.c (dg-options): Delete. Move the options from here ... (dg-lto-options): ... to here.
2025-03-25arm: testsuite: update expected output in vect-early-break-cbranch.cRichard Earnshaw1-6/+6
Similar to r15-4930-gd56d2f3102ada3, update the branch operations when not using CBN?Z for inverting the direction of the branch operations. gcc/testsuite/ChangeLog: * gcc.target/arm/vect-early-break-cbranch.c: Allow BEQ as well as BNE.
2025-03-25arm: testsuite use -std=gnu17 for pr65647.cRichard Earnshaw1-1/+1
This test has missing prototypes. To avoid disturbing the test, use gnu17. gcc/testsuite/ChangeLog: * gcc.target/arm/pr65647.c (dg-options): Add -std=gnu17.
2025-03-25testsuite: aarch64: arm: Remove redundant dg-do run in advsimd-intrinsics testsChristophe Lyon120-120/+0
Tests under advsimd-intrinsics are controlled by advsimd-intrinsics.exp which computes the adequate dg-do-what depending on the actual target, it should not be redefined in the tests, except when the action can never be 'run'. This currently makes no difference, but it would when we remove dg-skip-if for arm targets from tests that could at least be compiled (e.g. vst1x2.c) gcc/testsuite/ * gcc.target/aarch64/advsimd-intrinsics/vabdh_f16_1.c: Remove dg-do directive. * gcc.target/aarch64/advsimd-intrinsics/vabsh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vaddh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcageh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcagth_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcaleh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcalth_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vceqh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vceqzh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcgeh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcgezh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcgth_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcgtzh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcleh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vclezh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vclth_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcltzh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtah_s16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtah_s32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtah_s64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtah_u16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtah_u32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtah_u64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_s16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_s32_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_s64_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_u16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_u32_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_f16_u64_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_s16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_s32_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_s64_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_u16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_u32_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_f16_u64_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_s16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_s32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_s64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_u16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_u32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_n_u64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_s16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_s32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_s64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_u16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_u32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvth_u64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtmh_s16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtmh_s32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtmh_s64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtmh_u16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtmh_u32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtmh_u64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtnh_s16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtnh_s32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtnh_s64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtnh_u16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtnh_u32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtnh_u64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtph_s16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtph_s32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtph_s64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtph_u16_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtph_u32_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vcvtph_u64_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vdiv_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vdivh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vduph_lane.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vfmah_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vfmas_lane_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vfmas_n_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vfmash_lane_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vfmsh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vld1x2.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vld1x3.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vld1x4.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmaxh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmaxnmh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmaxnmv_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmaxv_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vminh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vminnmh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vminnmv_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vminv_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmul_lane_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmulh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmulh_lane_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmulx_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmulx_lane_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmulx_n_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmulxh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vmulxh_lane_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vnegh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vpminmaxnm_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vqrshrn_high_n.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vqrshrun_high_n.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vqshrn_high_n.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vqshrun_high_n.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrecpeh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrecpsh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrecpxh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndah_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndi_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndih_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndmh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndnh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndph_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrndxh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrsqrteh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vrsqrtsh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vsqrt_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vsqrth_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vst1x2.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vst1x3.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vst1x4.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vsubh_f16_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vtrn_half.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vuzp_half.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/vzip_half.c: Likewise.
2025-03-25testsuite: aarch64: restore torture options in vml[as]_float_not_used.cChristophe Lyon2-4/+0
Remove dg-options, so that the test is executed as expected using the options defined by advsimd-intrinsics.exp. gcc/testsuite/ * gcc.target/aarch64/advsimd-intrinsics/vmla_float_not_fused.c: Remove dg-options. * gcc.target/aarch64/advsimd-intrinsics/vmls_float_not_fused.c: Likewise.
2025-03-25testsuite: aarch64: restore torture options in bf16_dup.cChristophe Lyon1-1/+1
Remove dg-options, so that the test is executed as expected using the options defined by advsimd-intrinsics.exp. (Previously we pretend we do, but in fact all torture options are silently overriden with -O2) We skip it at -O0, because the tested optimizations does not take place at this level. gcc/testsuite/ * gcc.target/aarch64/advsimd-intrinsics/bf16_dup.c: Remove dg-options.
2025-03-25testsuite: aarch64: arm: move saturating_arithmetic_autovect tests to simd/Christophe Lyon5-0/+0
These tests force dg-options because they rely on -ftree-vectorize and do not make use of torture options, so move them to simd/ where they belong. gcc/testsuite/ * gcc.target/aarch64/advsimd-intrinsics/saturating_arithmetic_autovect.inc: Move to gcc.target/aarch64/simd/. * gcc.target/aarch64/advsimd-intrinsics/saturating_arithmetic_autovect_1.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/saturating_arithmetic_autovect_2.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/saturating_arithmetic_autovect_3.c: Likewise. * gcc.target/aarch64/advsimd-intrinsics/saturating_arithmetic_autovect_4.c: Likewise.
2025-03-25testsuite: arm: remove duplicate -mcpu=unset in arm_v8_1_lob_okChristophe Lyon1-1/+1
This was probably a typo / oversight. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_arm_v8_1_lob_ok): Remove duplicate -mcpu=unset.
2025-03-25libstdc++: Add testcase for std::filesystem::copy [PR118699]Jonathan Wakely1-0/+18
This was fixed last year by r15-2409-g017e3f89b081e4 (and backports), so just add the testcase. libstdc++-v3/ChangeLog: PR libstdc++/118699 * testsuite/27_io/filesystem/operations/copy.cc: Check copying a file to a directory.
2025-03-25arm: add commutative alternatives to <US>mull pattern.Richard Earnshaw2-5/+6
Prior to Armv6, the SMULL and UMULL instructions, which have the form UMULL Rdlo, Rdhi, Rm, Rs had an operand restriction such that Rdlo, Rdhi and Rm must all be different registers. Rs, however can overlap either of the destination registers. Add some register-tie alternatives to allow the register allocator to find these forms without having to use additional register moves. In addition to this, the test is pretty meaningless on Thumb-1 targets as the S/UMULL instructions do not exist in a 16-bit encoding. So skip the test in this case. gcc/ChangeLog: * config/arm/arm.md (<US>mull): Add alternatives that allow Rs to be tied to either Rdlo or Rdhi. gcc/testsuite/ChangeLog: * gcc.target/arm/pr42575.c: Skip test if thumb1.
2025-03-25opcodes: fix wrong code in expand_binop_directly [PR117811]Richard Earnshaw2-12/+39
If expand_binop_directly fails to add a REG_EQUAL note it tries to unwind and restart. But it can unwind too far if expand_binop changed some of the operands before calling it. We don't need to unwind that far anyway since we should end up taking exactly the same route next time, just without a target rtx. To fix this we remove LAST from the argument list and let the callers (all in expand_binop) do their own unwinding if the call fails. Instead we unwind just as far as the entry to expand_binop_directly and recurse within this function instead of all the way back up. gcc/ChangeLog: PR middle-end/117811 * optabs.cc (expand_binop_directly): Remove LAST as an argument, instead record the last insn on entry. Only delete insns if we need to restart and restart by calling ourself, not expand_binop. (expand_binop): Update callers to expand_binop_directly. If it fails to expand the operation, delete back to LAST. gcc/testsuite: PR middle-end/117811 * gcc.dg/torture/pr117811.c: New test.
2025-03-25libstdc++: Cast -1 to size_t in <format> [PR119429]Jonathan Wakely1-1/+1
This avoids a runtime error from Clang's annoying -fsanitize=integer (even though it's not undefined and behaves correctly). libstdc++-v3/ChangeLog: PR libstdc++/119429 * include/std/format (__format::_Scanner::_Scanner): Cast default argument to size_t.
2025-03-25libstdc++: Fix handling of common cpp20-only ranges for flat sets [PR119415]Tomasz Kamiński3-1/+56
These patch add check to verify if common range iterators satisfies Cpp17LegacyIterator requirements (__detail::__cpp17_input_iterator), before invoking overloads of insert that accepts two iterators. As such overloads existed before c++20 iterators were introduced, they commonly assume existence of iterator_traits<..>::iterator_category, and passing a cpp20-only iterators, leads to hard errors. In case if user-defined container wants to support more efficient insertion in such cases, it should provided insert_range method, as in the case of standard containers. PR libstdc++/119415 libstdc++-v3/ChangeLog: * include/std/flat_set (_Flat_set_impl:insert_range): Add __detail::__cpp17_input_iterator check. * testsuite/23_containers/flat_multiset/1.cc: New tests * testsuite/23_containers/flat_set/1.cc: New tests Reviewed-by: Patrick Palka <ppalka@redhat.com>, Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
2025-03-25tailc: Only diagnose musttail failures during tailc or musttail passes ↵Jakub Jelinek3-39/+87
[PR119376] The following testcases FAIL because musttail failures are diagnosed not just in the tailc or musttail passes, but also during the tailr1 and tailr2. tailr1 pass is before IPA and in the testcases eh cleanup has not cleaned up the IL sufficiently yet to make the musttail calls pass, even tailr2 could be too early. The following patch does that only during the tailc pass, and if that pass is not actually executed, during musttail pass. To do it only in the tailc pass, I chose to pass a new bool flag, because while we have the opt_tailcalls argument, it is actually passed by reference to find_tail_calls and sometimes cleared during that. musttail calls when the new DIAG_MUSTTAIL flag is not set are handled like any other calls, we simply silently punt on those if they can't be turned into tail calls. Furthermore, I had to tweak the musttail pass gate. Previously it was !flag_optimize_sibling_calls && f->has_musttail. The problem is that gate of tailr and tailc passes is flag_optimize_sibling_calls != 0 && dbg_cnt (tail_call) and furthermore, tailc pass is only in the normal optimization queue, so only if not -O0 or -Og. So when one would use tail_call dbg_cnt with some limit, or when e.g. using -foptimize-sibling-calls with -O0 or -Og, nothing would actually diagnose invalid musttail calls or set tail call flags on those if they are ok. I could insert a new PROP_ flag on whether musttail has been handled by tailc pass, but given that we have the cfun->has_musttail flag already and nothing after tailc/musttail passes uses it, I think it is easier to just clear the flag when musttail failures are diagnosed and correct ones have [[tail call]] flag added. Expansion will then only look at the [[tail call]] flag, it could even at the [[must tail call]] flag, but I don't see a point to check cfun->has_musttail. 2025-03-25 Jakub Jelinek <jakub@redhat.com> PR ipa/119376 * tree-tailcall.cc (suitable_for_tail_opt_p): Add DIAG_MUSTTAIL argument, propagate it down to maybe_error_musttail. (suitable_for_tail_call_opt_p): Likewise. (maybe_error_musttail): Add DIAG_MUSTTAIL argument. Don't emit error for gimple_call_must_tail_p calls if it is false. (find_tail_calls): Add DIAG_MUSTTAIL argument, propagate it down to maybe_error_musttail, suitable_for_tail_opt_p, suitable_for_tail_call_opt_p and find_tail_calls calls. (tree_optimize_tail_calls_1): Add DIAG_MUSTTAIL argument, propagate it down to find_tail_calls and if set, clear cfun->has_musttail flag at the end. Rename OPT_MUSTCALL argument to OPT_MUSTTAIL. (execute_tail_calls): Pass true to DIAG_MUSTTAIL tree_optimize_tail_calls_1 argument. (pass_tail_recursion::execute): Pass false to DIAG_MUSTTAIL tree_optimize_tail_calls_1 argument. (pass_musttail::gate): Don't test flag_optimize_sibling_calls. (pass_musttail::execute): Pass true to DIAG_MUSTTAIL tree_optimize_tail_calls_1 argument. * g++.dg/torture/musttail1.C: New test. * g++.dg/opt/musttail2.C: New test.
2025-03-25PR modula2/119449 MAX of SYSTEM.REAL64 cause an ICEGaius Mulley11-89/+168
This bugfix implements MAX(REAL64) and MIN(REAL64) etc for REAL64, REAL96 and REAL128. gcc/m2/ChangeLog: PR modula2/119449 * gm2-compiler/M2GCCDeclare.def (TryDeclareType): Remove tokenno parameter. * gm2-compiler/M2GCCDeclare.mod (TryDeclareType): Ditto. * gm2-compiler/M2GenGCC.mod (FoldTBitsize): Remove op2 and rename op1 as res and op3 as type. (FoldStandardFunction): Call FoldTBitsize omitting op2. * gm2-compiler/M2Quads.mod (GetTypeMin): Rewrite. (GetTypeMinLower): New procedure function. (GetTypeMax): Rewrite. (GetTypeMaxLower): New procedure function. * gm2-compiler/M2Range.mod (CheckCancelled): Comment out. * gm2-compiler/M2System.mod (CreateMinMaxFor): Add realtype parameter. (MapType): Rewrite to use realtype. (CreateType): Ditto. (AttemptToCreateType): Ditto. (MakeFixedSizedTypes): Add realtype boolean. (InitPIMTypes): Ditto. (InitISOTypes): Ditto. (MakeExtraSystemTypes): Ditto. * gm2-gcc/m2pp.cc (m2pp_nop_expr): Remove code. * gm2-gcc/m2type.cc (IsGccRealType): New function. (m2type_GetMinFrom): Rewrite. (m2type_GetMaxFrom): Ditto. (do_min_real): Declare static. (do_max_real): Declare static. gcc/testsuite/ChangeLog: PR modula2/119449 * gm2/pim/pass/minmaxreal.mod: New test. * gm2/pim/pass/minmaxreal2.mod: New test. * gm2/pim/pass/minmaxreal3.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2025-03-25i386: Fix AVX10.2 sat cvt intrinsic.Hu, Lin11-6/+22
The patch aims to modify the missed fixed for vcvttph2iubs's testcase. gcc/testsuite/ChangeLog: * gcc.target/i386/avx10_2-512-vcvttph2iubs-2.c: Modify testcase.
2025-03-25Daily bump.GCC Administrator9-1/+2507
2025-03-24vect: Add assert to expand_vector_conversion [PR118616]Andrew Pinski1-0/+1
In some cases (after inliing due to LTO and -O3), GCC cannot figure out that the length of the converts vect is not empty when supportable_indirect_convert_operation returns true. So we get an extra warning because we loop through all but the last entry and GCC decided that `converts.length () - 1` is -1. This adds an assert to avoid the warning and maybe even produce slightly better code for this function. A gcc_checking_assert would be better here but we don't convert that into an assume attribute or `if(!a) __builtin_unreachable();`, I filed PR 119439 for that. Bootstrapped and tested on x86_64-linux-gnu. PR tree-optimization/118616 gcc/ChangeLog: * tree-vect-generic.cc (expand_vector_conversion): Add an assert that converts vect is non empty if supportable_indirect_convert_operation returns true. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-03-24libstdc++: Fix some broken links in the manualJonathan Wakely2-4/+4
libstdc++-v3/ChangeLog: * doc/xml/manual/policy_data_structures_biblio.xml: Fix two broken links. * doc/html/manual/policy_data_structures.html: Regenerate.
2025-03-24libstdc++: Add testcases for resolved bug [PR101527]Jonathan Wakely2-0/+28
These tests were fixed by a front-end change r13-465-g4df735e01e3199 so this just adds them to the testsuite to be sure we don't regress. libstdc++-v3/ChangeLog: PR libstdc++/101527 * testsuite/24_iterators/common_iterator/101527.cc: New test. * testsuite/24_iterators/counted_iterator/101527.cc: New test.
2025-03-24Update gcc hr.po, sv.poJoseph Myers2-544/+424
* hr.po, sv.po: Update.
2025-03-24libgomp: Save OpenMP device number when initializing the interop objectTobias Burnus1-0/+1
The interop object (opaque object to the user, used internally in libgomp) already had a 'device_num' member, but it was missed to actually set it. libgomp/ChangeLog: * target.c (gomp_interop_internal): Set the 'device_num' member when initializing an interop object.
2025-03-24c++: pack indexing and if constevalJason Merrill2-1/+17
The pack index is manifestly constant-evaluated, and the call to maybe_constant_value needs to reflect that or we wrongly complain about non-constant index if the evaluation uses if consteval. gcc/cp/ChangeLog: * semantics.cc (finish_type_pack_element): Pass mce_true to maybe_constant_value. gcc/testsuite/ChangeLog: * g++.dg/cpp26/pack-indexing16.C: New test.
2025-03-24cobol: Move includes before system.hIain Sandoe1-2/+2
This just moves an include ahead of cobol-system.h which in turn includes system.h. gcc/cobol/ChangeLog: * cdf-copy.cc: Move host include before system.h Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-03-24libgomp/plugin/plugin-nvptx.c: Fix device used for stream creationTobias Burnus1-2/+16
libgomp/ChangeLog: * plugin/plugin-nvptx.c (GOMP_OFFLOAD_interop): Set context for stream creation to use the specified device.
2025-03-24Remove buffer overflow in cobol driverAndreas Schwab1-8/+4
PR cobol/119390 * gcobolspec.cc (lang_specific_driver): Use pointer instead of copying into fixed array.
2025-03-24testsuite: d: Break up Wbuiltin_declaration_mismatch2.d into smaller testsIain Buclaw5-176/+226
gcc/testsuite/ChangeLog: * gdc.dg/Wbuiltin_declaration_mismatch2.d: Split test into ... * gdc.dg/Wbuiltin_declaration_mismatch3.d: New test. * gdc.dg/Wbuiltin_declaration_mismatch4.d: New test. * gdc.dg/Wbuiltin_declaration_mismatch5.d: New test. * gdc.dg/Wbuiltin_declaration_mismatch6.d: New test.