aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
AgeCommit message (Collapse)AuthorFilesLines
2025-09-01testsuite: arm: factorize arm_v8_neon_ok flagsChristophe Lyon1-3/+3
Like we do in other effective-targets, add "-mcpu=unset -march=armv8-a" directly when setting et_arm_v8_neon_flags in arm_v8_neon_ok_nocache, to avoid having to add these two flags in all users of arm_v8_neon_ok. This avoids duplication and possible typos / oversights. gcc/testsuite/ChangeLog: * lib/target-supports.exp (check_effective_target_arm_v8_neon_ok_nocache): Add "-mcpu=unset -march=armv8-a" to et_arm_v8_neon_flags. (add_options_for_vect_early_break): Remove useless "-mcpu=unset -march=armv8-a". (add_options_for_arm_v8_neon): Likewise.
2025-09-01testsuite: arm: remove arm32 check from a few effective-targetsChristophe Lyon1-46/+39
A few arm effective-targets call check_effective_target_arm32 even though they would force a -march=XXX flag which supports Arm and/or Thumb-2, thus making the arm32 check useless. This has an impact when the toolchain is configured with a default -march or -mcpu which supports Thumb-1 only: in such a case, arm32 is false and we skip many tests, thus reducing coverage. This patch removes the call to check_effective_target_arm32 where it is useless, enabling about 2000 tests. In addition, add an early exit if the target is not an arm one, thus saving a few compilation cycles where not needed. In all callers of arm_neon_ok, remove the now useless "istarget arm*-*-*. gcc/testsuite/ChangeLog: * lib/target-supports.exp (check_effective_target_arm_neon_ok_nocache): Remove arm32 check. Add istarget arm*-*-* check. (check_effective_target_arm_neon_fp16_ok_nocache): Likewise. (check_effective_target_arm_neon_softfp_fp16_ok_nocache): Likewise. (check_effective_target_arm_v8_neon_ok_nocache): Likewise. (check_effective_target_arm_neonv2_ok_nocache): Likewise. (check_effective_target_vect_pack_trunc): Remove istarget arm*-*-* check. (check_effective_target_vect_unpack): Likewise. (check_effective_target_vect_condition): Likewise. (check_effective_target_vect_cond_mixed): Likewise. (available_vector_sizes): Likewise.
2025-09-01tree-optimization/121744 - handle CST << var in shift pattern recogRichard Biener1-0/+13
We currently do not handle promotion/demotion of 'var' when the left operand of a variable shift is constant. There's no good reason why, so the following fixes this omission. PR tree-optimization/121744 * tree-vect-patterns.cc (vect_recog_vector_vector_shift_pattern): Allow constant left operand. * gcc.dg/vect/pr121744-1.c: New testcase.
2025-08-31Fix ICE due to wrong operand is passed to ix86_vgf2p8affine_shift_matrix.liuhongt1-0/+23
1) Fix predicate of operands[3] in cond_<insn><mode> since only const_vec_dup_operand is excepted for masked operations, and pass real count to ix86_vgf2p8affine_shift_matrix. 2) Pass operands[2] instead of operands[1] to gen_vgf2p8affineqb_<mode>_mask which excepted the operand to shifted, but operands[1] is mask operand in cond_<insn><mode>. gcc/ChangeLog: PR target/121699 * config/i386/predicates.md (const_vec_dup_operand): New predicate. * config/i386/sse.md (cond_<insn><mode>): Fix predicate of operands[3], and fix wrong operands passed to ix86_vgf2p8affine_shift_matrix and gen_vgf2p8affineqb_<mode>_mask. gcc/testsuite/ChangeLog: * gcc.target/i386/pr121699.c: New test.
2025-09-01Daily bump.GCC Administrator1-0/+36
2025-08-31Fortran: Pass PDTs to dummies with VALUE attribute [PR99709]Paul Thomas1-0/+47
2025-08-31 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/99709 * trans-array.cc (structure_alloc_comps): For the case COPY_ALLOC_COMP, do a deep copy of non-allocatable PDT arrays Suppress the use of 'duplicate_allocatable' for PDT arrays. * trans-expr.cc (conv_dummy_value): When passing to a PDT dummy with the VALUE attribute, do a deep copy to ensure that parameterized components are reallocated. gcc/testsuite/ PR fortran/99709 * gfortran.dg/pdt_41.f03: New test.
2025-08-31[RISC-V] Improve initial RTL generation for SImode adds on rv64Shreya Munnangi1-0/+24
So this is the next chunk of Shreya's work to adjust our add expanders. In this patch we're adding support for adding a 2*s12 immediate in SI for rv64. To recap, the basic idea is reduce our reliance on the define_insn_and_split that was added a year or so ago by synthesizing the more efficient sequence at expansion time. By handling this early rather than late the synthesized sequence participates in the various optimizer passes in the natural way. In contrast using the define_insn_and_split bypasses the cost modeling in combine and hides the synthesis until after reload as completed (which in turn leads to the problems seen in pr120811). This doesn't solve pr120811, but it is the last prerequisite patch before directly tackling pr120811. This has been bootstrapped & regression tested on the pioneer & bpi and been through the usual testing on riscv32-elf and riscv64-elf. Waiting on pre-commit CI before moving forward. gcc/ * config/riscv/riscv-protos.h (synthesize_add_extended): Prototype. * config/riscv/riscv.cc (synthesize_add_extended): New function. * config/riscv/riscv.md (addsi3): For RV64, try synthesize_add_extended. gcc/testsuite/ * gcc.target/riscv/add-synthesis-2.c: New test.
2025-08-31RISC-V: Add test case for unsigned scalar SAT_MUL form 4Pan Li24-0/+320
The form 4 of unsigned scalar SAT_MUL is covered in middle-expand alreay, add test case here to cover form 4. The below test suites are passed for this patch series. * The rv64gcv fully regression test. gcc/testsuite/ChangeLog: * gcc.target/riscv/sat/sat_arith.h: Add test helper macros. * gcc.target/riscv/sat/sat_u_mul-5-u16-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u16-from-u32.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u16-from-u64.rv32.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u16-from-u64.rv64.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u32-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u32-from-u64.rv32.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u32-from-u64.rv64.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u64-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u8-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u8-from-u16.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u8-from-u32.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u8-from-u64.rv32.c: New test. * gcc.target/riscv/sat/sat_u_mul-5-u8-from-u64.rv64.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u16-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u16-from-u32.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u16-from-u64.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u32-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u32-from-u64.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u64-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u8-from-u128.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u8-from-u16.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u8-from-u32.c: New test. * gcc.target/riscv/sat/sat_u_mul-run-5-u8-from-u64.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
2025-08-31Daily bump.GCC Administrator1-0/+32
2025-08-30phiopt, math-opts: Adjust spaceship_replacement and optimize_spaceship for ↵Jakub Jelinek4-92/+326
recent libstdc++ changes [PR121698] libstdc++ changed its ABI in <compare> for C++20 recently (under the C++20 is still experimental rule). In addition to the -1, 0, 1 values for less, equal, greater it now uses -128 for unordered instead of former 2 and changes some of the operators, instead of checks like (_M_value & ~1) == _M_value in some cases it now uses _M_reverse() which is negation in unsigned char type + conversion back to the original type. _M_reverse() thus turns the -1, 0, 1, -128 values into 1, 0, -1, -128. Note libc++ uses value -127 instead of 2/-128. Now, the middle-end has some optimizations which rely on the particular implementation and don't optimize if not. One is optimize_spaceship which on some targets (currently x86, aarch64 and s390) attempts to use better comparison instructions (ideally just one floating point comparison to get all 4 possible outcomes plus some flag tests or magic instead of 2 or 3 floating point comparisons). This one can actually handle arbitrary int non-[-1,1] values for unordered but still has a default of 2. The patch changes that default to -128 so that even if something is expanded as branches if it is later during RTL optimizations determined to convert that into partial_ordering we get better code. The other optimization (phiopt one) is about optimizing (x <=> y) < 0 etc. into just x < y. This one actually relies on the exact unordered value (2) and has code to deal with that (_M_value & ~1) == _M_value kind of tests and whatever match.pd lowers it. So, this patch partially rewrites it to look for -128 instead of 2, drop those (_M_value & ~1) == _M_value pattern recognitions and instead introduces pattern recognition of _M_reverse(), i.e. cast to unsigned char, negation in that type and cast back to the original signed type. With all these changes we get back the desired optimizations for all the cases we could optimize previously (note, for HONOR_NANS case we don't try to optimize say (x <=> y) == 0 because the original will raise exception if either x or y is a NaN, while turning it into x == y will not, but (x <=> y) <= 0 is fine (x <= y), because it does raise those exceptions. 2025-08-30 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/121698 * tree-ssa-phiopt.cc (spaceship_replacement): Adjust to handle spaceship unordered value -128 rather than 2 and stmts from the new std::partial_order::_M_reverse() instead of (_M_value & ~1) == _M_value etc. * doc/md.texi (spaceship@var{m}4): Use -128 instead of 2. * tree-ssa-math-opts.cc (optimize_spaceship): Adjust comments that libstdc++ unordered value is -128 rather than 2 and use that as the default unordered value. * config/i386/i386-expand.cc (ix86_expand_fp_spaceship): Use GEN_INT (-128) instead of const2_rtx and adjust comment accordingly. * config/aarch64/aarch64.cc (aarch64_expand_fp_spaceship): Likewise. * config/s390/s390.cc (s390_expand_fp_spaceship): Likewise. * gcc.dg/pr94589-2.c: Adjust for expected unordered value -128 rather than 2 and negations in unsigned char instead of and with ~1 and comparison against original value. * gcc.dg/pr94589-4.c: Likewise. * gcc.dg/pr94589-5.c: Likewise. * gcc.dg/pr94589-6.c: Likewise.
2025-08-30x86-64: Use UNSPEC_DTPOFF to check source operand in TLS64_COMBINEH.J. Lu2-0/+47
Since the first operand of PLUS in the source of TLS64_COMBINE pattern: (set (reg/f:DI 128) (plus:DI (unspec:DI [ (symbol_ref:DI ("_TLS_MODULE_BASE_") [flags 0x10]) (reg:DI 126) (reg/f:DI 7 sp) ] UNSPEC_TLSDESC) (const:DI (unspec:DI [ (symbol_ref:DI ("bfd_error") [flags 0x1a] <var_decl 0x7fffe99d6e40 bfd_error>) ] UNSPEC_DTPOFF)))) is unused, use the second operand of PLUS: (const:DI (unspec:DI [ (symbol_ref:DI ("bfd_error") [flags 0x1a] <var_decl 0x7fffe99d6e40 bfd_error>) ] UNSPEC_DTPOFF)) to check if 2 TLS_COMBINE patterns have the same source. gcc/ PR target/121725 * config/i386/i386-features.cc (pass_x86_cse::candidate_gnu2_tls_p): Use the UNSPEC_DTPOFF operand to check source operand in TLS64_COMBINE pattern. gcc/testsuite/ PR target/121725 * gcc.target/i386/pr121725-1a.c: New test. * gcc.target/i386/pr121725-1b.c: Likewise. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-29forwprop: Copy the memcmp optimization from strlen to forwprop [PR116651]Andrew Pinski2-0/+26
To better optimize code dealing with `memcmp == 0` where we have a small constant size, we can inline the memcmp in those cases. There is code to do this in strlen but that is run too late in the case where we can figure out the value of one of the arguments to memcmp. So this copies the optimization to forwprop. An example of where this helps is: ``` bool cmpvect(const std::vector<int> &a) { return a == std::vector<int>{10}; } ``` Where the above should be optimized to just `return a.size() == 1 && a[0] == 10;`. Note pr44130.c testcase needed to change as now it will be optimized away otherwise. Note the loop in pr44130.c os also vectorized which it was not before. Note the optimization remains in strlen as the other part (memcmp -> memcmp_eq) should move to either isel or fab and I didn't want to remove it just yet. Bootstrapped and tested on x86_64-linux-gnu. Changes since v1: * v2: Add verification of arguments to memcmp to simplify_builtin_memcmp. PR tree-optimization/116651 PR tree-optimization/93265 PR tree-optimization/103647 PR tree-optimization/52171 gcc/ChangeLog: * tree-ssa-forwprop.cc (simplify_builtin_memcmp): New function. (simplify_builtin_call): Call simplify_builtin_memcmp for memcmp memcmp_eq builtins. gcc/testsuite/ChangeLog: * gcc.target/i386/pr44130.c: Add an inline-asm clobber. * g++.dg/tree-ssa/vector-compare-1.C: New test. Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-08-29Revert "Fix _Decimal128 arithmetic error under FE_UPWARD."liuhongt1-18/+0
This reverts commit 50064b2898edfb83bc37f2597a35cbd3c1c853e3.
2025-08-30Daily bump.GCC Administrator1-0/+125
2025-08-29c++: array subscript with COND_EXPR as the arraySirui Mu1-0/+26
The following minimum reproducer would miscompile with vanilla gcc: extern int x[10], y[10]; bool g(); void f() { 0[g() ? x : y] = 1; } gcc would mistakenly treat the subexpression (g() ? x : y) as a prvalue and move that array to stack. The following assignment would then write to the stack instead of to the global arrays. When optimizations are enabled, this assignment is discarded by dse and gcc generates the following code for the f function: "_Z1fi": jmp "_Z1gv" The miscompilation requires all the following conditions to be met: - The array subscription expression is written as idx[array], instead of the usual form array[idx]; - The "array" part must be a ternary expression (COND_EXPR in gcc tree) and it must be an lvalue. - The code must be compiled with -fstrong-eval-order which is the default for -std=c++17 or later. The cause of the issue lies in cp_build_array_ref, where it mistakenly generates a COND_EXPR with ARRAY_TYPE to the IL when all the criteria above are met. This patch tries to resolve this issue. It moves the canonicalization step that transforms idx[array] to array[idx] early in cp_build_array_ref to ensure we handle these two forms of array subscription consistently. Tested on x86_64-linux. gcc/cp/ChangeLog: * typeck.cc (cp_build_array_ref): Handle 0[arr] earlier. gcc/testsuite/ChangeLog: * g++.dg/cpp1z/array-condition-expr.C: New test. Signed-off-by: Sirui Mu <msrlancern@gmail.com>
2025-08-29xtensa: Rewrite bswapsi2_internal with compact syntaxTakayuki 'January June' Suwa1-0/+29
Also, the omission of the instruction that sets the shift amount register (SAR) to 8 is now more efficient: it is omitted if there was a previous bswapsi2 in the same BB, but not omitted if no bswapsi2 is found or another insn that modifies SAR is found first (see below). Note that the five instructions for writing to SAR are as follows, along with the insns that use them (except for bswapsi2_internal itself): - SSA8B *shift_per_byte, *shlrd_per_byte - SSA8L *shift_per_byte, *shlrd_per_byte - SSR ashrsi3 (alt 1), lshrsi3 (alt 1), *shlrd_reg, rotrsi3 (alt 1) - SSL ashlsi3_internal (alt 1), *shlrd_reg, rotlsi3 (alt 1) - SSAI *shlrd_const, rotlsi3 (alt 0), rotrsi3 (alt 0) gcc/ChangeLog: * config/xtensa/xtensa-protos.h (xtensa_bswapsi2_output): New function prototype. * config/xtensa/xtensa.cc (xtensa_bswapsi2_output_1, xtensa_bswapsi2_output): New functions. * config/xtensa/xtensa.md (bswapsi2_internal): Rewrite in compact syntax and use xtensa_bswapsi2_output() as asm output. gcc/testsuite/ChangeLog: * gcc.target/xtensa/bswap-SSAI8.c: New.
2025-08-29Fortran: improve compile-time checking of character dummy arguments [PR93330]Harald Anlauf6-5/+247
PR fortran/93330 gcc/fortran/ChangeLog: * interface.cc (get_sym_storage_size): Add argument size_known to indicate that the storage size could be successfully determined. (get_expr_storage_size): Likewise. (gfc_compare_actual_formal): Use them to handle zero-sized dummy and actual arguments. If a character formal argument has the pointer or allocatable attribute, or is an array that is not assumed or explicit size, we generate an error by default unless -std=legacy is specified, which falls back to just giving a warning. If -Wcharacter-truncation is given, warn on a character actual argument longer than the dummy. Generate an error for too short scalar character arguments if -std=f* is given instead of just a warning. gcc/testsuite/ChangeLog: * gfortran.dg/argument_checking_15.f90: Adjust dg-pattern. * gfortran.dg/bounds_check_strlen_7.f90: Add dg-pattern. * gfortran.dg/char_length_3.f90: Adjust options. * gfortran.dg/whole_file_24.f90: Add dg-pattern. * gfortran.dg/whole_file_29.f90: Likewise. * gfortran.dg/argument_checking_27.f90: New test.
2025-08-29RISC-V: Add patterns for vector-scalar IEEE floating-point minPaul-Antoine Arras15-0/+87
This pattern enables the combine pass (or late-combine, depending on the case) to merge a vec_duplicate into an unspec_vfmin RTL instruction. Before this patch, we have two instructions, e.g.: vfmv.v.f v2,fa0 vfmin.vv v1,v1,v2 After, we get only one: vfmin.vf v1,v1,fa0 gcc/ChangeLog: * config/riscv/autovec-opt.md (*vfmin_vf_ieee_<mode>): Add new patterns to combine vec_duplicate + vfmin.vv (unspec) into vfmin.vf. (*vfmul_vf_<mode>, *vfrdiv_vf_<mode>, *vfmin_vf_<mode>): Fix attribute types. * config/riscv/vector.md (@pred_<ieee_fmaxmin_op><mode>_scalar): Allow VLS modes. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f16.c: Add vfmin. * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f32.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-4-f64.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-5-f64.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-6-f64.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-7-f64.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf-8-f64.c: New test.
2025-08-29x86: Allow by_pieces op when expanding memcpy/memset epilogueH.J. Lu8-0/+104
Since commit 401199377c50045ede560daf3f6e8b51749c2a87 Author: H.J. Lu <hjl.tools@gmail.com> Date: Tue Jun 17 10:17:17 2025 +0800 x86: Improve vector_loop/unrolled_loop for memset/memcpy uses move_by_pieces and store_by_pieces to expand memcpy/memset epilogue with vector_loop even when targetm.use_by_pieces_infrastructure_p returns false, which triggers gcc_assert (targetm.use_by_pieces_infrastructure_p (len, align, memsetp ? SET_BY_PIECES : STORE_BY_PIECES, optimize_insn_for_speed_p ())); in store_by_pieces. Fix it by: 1. Add by_pieces_in_use to machine_function to indicate that by_pieces op is currently in use. 2. Set and clear by_pieces_in_use when expanding memcpy/memset epilogue with move_by_pieces and store_by_pieces. 3. Define TARGET_USE_BY_PIECES_INFRASTRUCTURE_P to return true if by_pieces_in_use is true. gcc/ PR target/121096 * config/i386/i386-expand.cc (expand_cpymem_epilogue): Set and clear by_pieces_in_use when using by_pieces op. (expand_setmem_epilogue): Likewise. * config/i386/i386.cc (ix86_use_by_pieces_infrastructure_p): New. (TARGET_USE_BY_PIECES_INFRASTRUCTURE_P): Likewise. * config/i386/i386.h (machine_function): Add by_pieces_in_use. gcc/testsuite/ PR target/121096 * gcc.target/i386/memcpy-strategy-14.c: New test. * gcc.target/i386/memcpy-strategy-15.c: Likewise. * gcc.target/i386/memset-strategy-10.c: Likewise. * gcc.target/i386/memset-strategy-11.c: Likewise. * gcc.target/i386/memset-strategy-12.c: Likewise. * gcc.target/i386/memset-strategy-13.c: Likewise. * gcc.target/i386/memset-strategy-14.c: Likewise. * gcc.target/i386/memset-strategy-15.c: Likewise. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-29x86: Handle constant in any modes in setmem_epilogue_gen_valH.J. Lu1-0/+9
Since the constant passed to setmem_epilogue_gen_val may not be in word_mode, update setmem_epilogue_gen_val to handle any integer modes. gcc/ PR target/121108 * config/i386/i386-expand.cc (setmem_epilogue_gen_val): Don't assert op_mode == word_mode and handle any integer modes. gcc/testsuite/ PR target/121108 * gcc.target/i386/memset-strategy-16.c: New test. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-29x86-64: Improve source operand check for TLS_CALLH.J. Lu3-0/+31
Source operands of 2 TLS_CALL patterns in (insn 10 9 11 3 (set (reg:DI 100) (unspec:DI [ (symbol_ref:DI ("caml_state") [flags 0x10] <var_decl 0x7fe10e1d9e40 caml_state>) ] UNSPEC_TLSDESC)) "x.c":7:16 1674 {*tls_dynamic_gnu2_lea_64_di} (nil)) (insn 11 10 12 3 (parallel [ (set (reg:DI 99) (unspec:DI [ (symbol_ref:DI ("caml_state") [flags 0x10] <var_decl 0x7fe10e1d9e40 caml_state>) (reg:DI 100) (reg/f:DI 7 sp) ] UNSPEC_TLSDESC)) (clobber (reg:CC 17 flags)) ]) "x.c":7:16 1676 {*tls_dynamic_gnu2_call_64_di} (expr_list:REG_DEAD (reg:DI 100) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) and (insn 19 17 20 4 (set (reg:DI 104) (unspec:DI [ (symbol_ref:DI ("caml_state") [flags 0x10] <var_decl 0x7fe10e1d9e40 caml_state>) ] UNSPEC_TLSDESC)) "x.c":6:10 discrim 1 1674 {*tls_dynamic_gnu2_lea_64_di} (nil)) (insn 20 19 21 4 (parallel [ (set (reg:DI 103) (unspec:DI [ (symbol_ref:DI ("caml_state") [flags 0x10] <var_decl 0x7fe10e1d9e40 caml_state>) (reg:DI 104) (reg/f:DI 7 sp) ] UNSPEC_TLSDESC)) (clobber (reg:CC 17 flags)) ]) "x.c":6:10 discrim 1 1676 {*tls_dynamic_gnu2_call_64_di} (expr_list:REG_DEAD (reg:DI 104) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) are the same even though rtx_equal_p returns false since (reg:DI 100) and (reg:DI 104) are set from the same symbol. Use the UNSPEC_TLSDESC symbol (unspec:DI [(symbol_ref:DI ("caml_state") [flags 0x10])] UNSPEC_TLSDESC)) to check if 2 TLS_CALL patterns have the same source. For TLS64_COMBINE, use both UNSPEC_TLSDESC and UNSPEC_DTPOFF unspecs to check if 2 TLS64_COMBINE patterns have the same source. gcc/ PR target/121694 * config/i386/i386-features.cc (redundant_pattern): Add tlsdesc_val. (pass_x86_cse): Likewise. (pass_x86_cse::tls_set_insn_from_symbol): New member function. (pass_x86_cse::candidate_gnu2_tls_p): Set tlsdesc_val. For TLS64_COMBINE, match both UNSPEC_TLSDESC and UNSPEC_DTPOFF symbols. For TLS64_CALL, match the UNSPEC_TLSDESC sumbol. (pass_x86_cse::x86_cse): Initialize the tlsdesc_val field in load. Pass the tlsdesc_val field to ix86_place_single_tls_call for X86_CSE_TLSDESC. gcc/testsuite/ PR target/121694 * gcc.target/i386/pr121668-1b.c: New test. * gcc.target/i386/pr121694-1a.c: Likewise. * gcc.target/i386/pr121694-1b.c: Likewise. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-29c++: -fimplicit-constexpr testcase tweakJason Merrill1-1/+1
If B::get is (implictly or explicitly) constexpr the individual b bindings have constant initialization and get optimized away, so their symbols don't appear in the assembly. gcc/testsuite/ChangeLog: * g++.dg/cpp26/decomp26.C: Add -fimplicit-constexpr.
2025-08-29i386: Fix vect-pragma-target-[12].c testcase for -march=XYZ [PR120643]Andrew Pinski2-2/+2
These 2 testcases were originally designed for the default -march= of x86_64 so if you pass -march=native (on a target with AVX512 enabled), they will fail. It fix this, we add `-mno-sse3 -mtune=generic` to the options to force a specific arch to the testcase. Changes since v1: * v2: Use -mtune=generic instead of -mprefer-vector-width=512. Tested on a skylake-avx512 machine with -march=native. PR testsuite/120643 gcc/testsuite/ChangeLog: * gcc.target/i386/vect-pragma-target-1.c: Add `-mno-sse3 -mtune=generic` to the options. * gcc.target/i386/vect-pragma-target-2.c: Likewise. Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-08-28aarch64/testsuite: Fix vld2-1.c after r16-3201 [PR121713]Andrew Pinski1-1/+2
After r16-3201-gee67004474d521, this testcase started to fail as we can copy prop into arguments now so the number of "after previous" check has doubled. Pushed after a quick check to make sure the testcase is now passing. PR testsuite/121713 gcc/testsuite/ChangeLog: * gcc.target/aarch64/vld2-1.c: Update the number of "after previous" checks. Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-08-29RISC-V: Add test for vec_duplicate + vnmsac.vv unsigned combine with GR2VR ↵Pan Li16-0/+76
cost 0, 1 and 15 Add asm dump check and run test for vec_duplicate + vnmsac.vvm combine to vnmsac.vx, with the GR2VR cost is 0, 2 and 15. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check for vnmsac.vx. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-u16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-u32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-u64.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-u8.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
2025-08-29RISC-V: Add test for vec_duplicate + vnmsac.vv signed combine with GR2VR ↵Pan Li18-0/+446
cost 0, 1 and 15 Add asm dump check and run test for vec_duplicate + vnmsac.vvm combine to vnmsac.vx, with the GR2VR cost is 0, 2 and 15. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Add asm check for vnmsac.vx. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c: Ditto. * gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary.h: Add test helper macros. * gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary_data.h: Add test data for run test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-i16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-i32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-i64.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vx_vnmsac-run-1-i8.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
2025-08-28Fix _Decimal128 arithmetic error under FE_UPWARD.liuhongt1-0/+18
libgcc/config/libbid/ChangeLog: PR target/120691 * bid128_div.c: Fix _Decimal128 arithmetic error under FE_UPWARD. * bid128_rem.c: Ditto. * bid128_sqrt.c: Ditto. * bid64_div.c (bid64_div): Ditto. * bid64_sqrt.c (bid64_sqrt): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/pr120691.c: New test.
2025-08-29Daily bump.GCC Administrator1-0/+71
2025-08-28c++: > in lambda in template arg [PR107953]Jason Merrill1-0/+13
As with PR116928, we need to set greater_than_is_operator_p within the lambda delimiters. PR c++/107953 gcc/cp/ChangeLog: * parser.cc (cp_parser_lambda_expression): Set greater_than_is_operator_p. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-targ18.C: New test.
2025-08-28RISC-V: Add pattern for vector-scalar floating-point minPaul-Antoine Arras16-4/+309
This pattern enables the combine pass (or late-combine, depending on the case) to merge a vec_duplicate into an smin RTL instruction. Before this patch, we have two instructions, e.g.: vfmv.v.f v2,fa0 vfmin.vv v1,v1,v2 After, we get only one: vfmin.vf v1,v1,fa0 gcc/ChangeLog: * config/riscv/autovec-opt.md (*vfmin_vf_<mode>): Add new pattern to combine vec_duplicate + vfmin.vv into vfmin.vf. * config/riscv/vector.md (@pred_<optab><mode>_scalar): Allow VLS modes. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vls/floating-point-min-2.c: Adjust scan dump. * gcc.target/riscv/rvv/autovec/vls/floating-point-min-4.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f16.c: Add vfmin. * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f32.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-1-f64.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f16.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f32.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-2-f64.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f16.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f32.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf-3-f64.c: Likewise. * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop.h: Add support for function variants. * gcc.target/riscv/rvv/autovec/vx_vf/vf_binop_data.h: Add data for vfmin. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmin-run-1-f16.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmin-run-1-f32.c: New test. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmin-run-1-f64.c: New test.
2025-08-28AArch64: Add isinf expander [PR 66462]Wilco Dijkstra1-0/+45
Add an expander for isinf using integer arithmetic. This is typically faster and avoids generating spurious exceptions on signaling NaNs. This fixes part of PR66462. int isinf1 (float x) { return __builtin_isinf (x); } Before: fabs s0, s0 mov w0, 2139095039 fmov s31, w0 fcmp s0, s31 cset w0, le eor w0, w0, 1 ret After: fmov w1, s0 mov w0, -16777216 cmp w0, w1, lsl 1 cset w0, eq ret gcc: PR middle-end/66462 * config/aarch64/aarch64.md (isinf<mode>2): Add new expander. * config/aarch64/iterators.md (mantissa_bits): Add new mode_attr. gcc/testsuite: PR middle-end/66462 * gcc.target/aarch64/pr66462.c: Add new test.
2025-08-28c++/modules: Add explanatory note for incomplete types with definition in ↵Nathaniel Shead3-0/+101
different module [PR119844] The confusion in the PR arose because the definition of 'User' in a separate named module did not provide an implementation for the forward-declaration in the global module. This seems likely to be a common mistake while people are transitioning to modules, so this patch adds an explanatory note. While I was looking at this I also noticed that the existing handling of partial specialisations for this note was wrong (we pointed at the primary template declaration rather than the relevant partial spec), so this patch fixes that up, and also gives a more precise error message for using a template other than by self-reference while it's being defined. PR c++/119844 gcc/cp/ChangeLog: * typeck2.cc (cxx_incomplete_type_inform): Add explanation when a similar type is complete but attached to a different module. Also fix handling of partial specs and templates. gcc/testsuite/ChangeLog: * g++.dg/modules/pr119844_a.C: New test. * g++.dg/modules/pr119844_b.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com>
2025-08-28PR modula2/121629: adding third party modulesGaius Mulley4-0/+64
This patch makes it easier to add third party modules. cc1gm2 now appends the search directory prefix/include/m2 to the search path for non dialect specific modules. Prior to this it appends the dialect specific subdirectories {m2pim,m2iso,m2log,m2min} with the appropriate dialect pathname. The patch also includes a new option -fm2-pathname-root=prefix which allow additional prefix/m2 directories to be searched before the default. gcc/ChangeLog: PR modula2/121629 * doc/gm2.texi (Module Search Path): New section. (Compiler options): New option -fm2-pathname-root=. New option -fm2-pathname-rootI. gcc/m2/ChangeLog: PR modula2/121629 * gm2-compiler/PathName.mod: Add copyright notice. * gm2-lang.cc (named_path): Add field lib_root. (push_back_Ipath): Set lib_root false. (push_back_lib_root): New function. (get_dir_sep_size): Ditto. (add_path_component): Ditto. (add_one_import_path): Ditto. (add_non_dialect_specific_path): Ditto. (foreach_lib_gen_import_path): Ditto. (get_module_source_dir): Ditto. (add_default_include_paths): Ditto. (assign_flibs): Ditto. (m2_pathname_root): Ditto. (add_m2_import_paths): Remove function. (gm2_langhook_post_options): Call assign_flibs. Check np.lib_root and call foreach_lib_gen_import_path. Replace call to add_m2_import_paths with a call to add_default_include_paths. (gm2_langhook_handle_option): Add case OPT_fm2_pathname_rootI_. * gm2spec.cc (named_path): Add field lib_root. (push_back_Ipath): Set lib_root false. (push_back_lib_root): New function. (add_m2_I_path): Add OPT_fm2_pathname_rootI_ option if np.lib_root. (lang_specific_driver): Add case OPT_fm2_pathname_root_. * lang.opt (fm2-pathname-root=): New option. (fm2-pathname-rootI=): Ditto. gcc/testsuite/ChangeLog: PR modula2/121629 * gm2/switches/pathnameroot/pass/switches-pathnameroot-pass.exp: New test. * gm2/switches/pathnameroot/pass/test.mod: New test. * gm2/switches/pathnameroot/pass/testlib/m2/foo.def: New test. * gm2/switches/pathnameroot/pass/testlib/m2/foo.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2025-08-28c++: Fix auto return type deduction with expansion statements [PR121583]Jakub Jelinek2-0/+27
The following testcase ICEs during expansion, because cfun->returns_struct wasn't cleared, despite auto being deduced to int. The problem is that check_return_type -> apply_deduced_return_type is called when parsing the expansion stmt body, at that time processing_template_decl is non-zero and apply_deduced_return_type in that case doesn't do the if (function *fun = DECL_STRUCT_FUNCTION (fco)) { bool aggr = aggregate_value_p (result, fco); #ifdef PCC_STATIC_STRUCT_RETURN fun->returns_pcc_struct = aggr; #endif fun->returns_struct = aggr; } My assumption is that !processing_template_decl in that case is used in the sense "the fco function is not a function template", for function templates no reason to bother with fun->returns*struct, nothing will care about that. When returning a type dependent expression in the expansion stmt body, apply_deduced_return_type just won't be called during parsing, but when instantiating the body and all will be fine. But when returning a non-type-dependent expression, while check_return_type will be called again during instantiation of the body, as the return type is no longer auto in that case apply_deduced_return_type will not be called again and so nothing will fix up fun->returns*struct. The following patch fixes that by using !uses_template_parms (fco) check instead of !processing_template_decl. 2025-08-28 Jakub Jelinek <jakub@redhat.com> PR c++/121583 * semantics.cc (apply_deduced_return_type): Adjust fun->returns*_struct when !uses_template_parms (fco) instead of when !processing_template_decl. * g++.dg/cpp26/expansion-stmt23.C: New test. * g++.dg/cpp26/expansion-stmt24.C: New test.
2025-08-28c++: Fix ICE with parameter uses in expansion stmts [PR121575]Jakub Jelinek1-0/+59
The following testcase shows an ICE when a parameter of a non-template function is referenced in expansion stmt body. tsubst_expr in that case assumes that either the PARM_DECL has registered local specialization, or is this argument or it is in unevaluated context. Parameters are always defined outside of the expansion statement for-range-declaration or body, so for the instantiation of the body outside of templates should always map to themselves. It could be fixed by registering local self-specializations for all the function parameters, but just handling it in tsubst_expr seems to be easier and less costly. Some PARM_DECLs, e.g. from concepts, have NULL DECL_CONTEXT, those are handled like before (and assert it is unevaluated operand), for others this checks if the PARM_DECL is from a non-template and in that case it will just return t. 2025-08-28 Jakub Jelinek <jakub@redhat.com> Jason Merrill <jason@redhat.com> PR c++/121575 * pt.cc (tsubst_expr) <case PARM_DECL>: If DECL_CONTEXT (t) isn't a template return t for PARM_DECLs without local specialization. * g++.dg/cpp26/expansion-stmt20.C: New test.
2025-08-28Fortran: Constructors with PDT components did not work [PR82843]Paul Thomas1-0/+25
2025-08-28 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/82843 * intrinsic.cc (gfc_convert_type_warn): If the 'from_ts' is a PDT instance, copy the derived type to the target ts. * resolve.cc (gfc_resolve_ref): A PDT component in a component reference can be that of the pdt_template. Unconditionally use component of the PDT instance to ensure that the backend_decl is set during translation. Likewise if a component is encountered that is a PDT template type, use the component parmeters to convert to the correct PDT instance. gcc/testsuite/ PR fortran/82843 * gfortran.dg/pdt_40.f03: New test.
2025-08-28Fortran: Implement correct form of PDT constructors [PR82205]Paul Thomas3-16/+21
2025-08-28 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/82205 * decl.cc (gfc_get_pdt_instance): Copy the default initializer for components that are not PDT parameters or parameterized. If any component is a pointer or allocatable set the attributes 'pointer_comp' or 'alloc_comp' of the new PDT instance. * primary.cc (gfc_match_rvalue): Implement the correct form of PDT constructors with 'name (type parms)(component values)'. * trans-array.cc (structure_alloc_comps): Apply scalar default initializers. Array initializers await the coming change in PDT representation. * trans-io.cc (transfer_expr): Do not output the type parms of a PDT in list directed output. gcc/testsuite/ PR fortran/82205 * gfortran.dg/pdt_22.f03: Use the correct for PDT constructors. * gfortran.dg/pdt_23.f03: Likewise. * gfortran.dg/pdt_3.f03: Likewise.
2025-08-28Daily bump.GCC Administrator1-0/+60
2025-08-27Remove xfail marker on RISC-V testJeff Law1-3/+3
So yet another testsuite hygiene patch. This time turning XPASS -> PASS. My tester treats those cases the same so I didn't get notified that nozicond-2.c was passing after some recent changes. This removes the xfail marker on that test and thus the test is expected to pass now. Pushing to the trunk momentarily. gcc/testsuite/ * gcc.target/riscv/nozicond-2.c: Remove xfails.
2025-08-27Fortran: H edit descriptor error with -std=f95Jerry DeLisle10-21/+23
PR fortran/114611 gcc/fortran/ChangeLog: * io.cc: Issue an error on use of the H descriptor in a format with -std=f95 or higher. Otherwise, issue a warning. gcc/testsuite/ChangeLog: * gfortran.dg/aliasing_dummy_1.f90: Accommodate errors and warnings as needed. * gfortran.dg/eoshift_8.f90: Likewise. * gfortran.dg/g77/f77-edit-h-out.f: Likewise. * gfortran.dg/hollerith_1.f90: Likewise. * gfortran.dg/io_constraints_1.f90: Likewise. * gfortran.dg/io_constraints_2.f90: Likewise. * gfortran.dg/longline.f: Likewise. * gfortran.dg/pr20086.f90: Likewise. * gfortran.dg/unused_artificial_dummies_1.f90: Likewise. * gfortran.dg/x_slash_1.f: Likewise.
2025-08-27ifcvt: fix factor_out_operators (again) [PR121695]Andrew Pinski1-0/+25
r16-2648-gaebbc90d8c7c70 had a copy and pasto where the second statement was supposed to be setting the operand 1 of the phi but it was setting operand 0 instead. This fixes typo. Push as obvious after a quick build test for x86_64-linux-gnu. PR tree-optimization/121695 gcc/ChangeLog: * tree-if-conv.cc (factor_out_operators): Fix typo in assignment of the phi. gcc/testsuite/ChangeLog: * gcc.dg/torture/pr121695-1.c: New test. Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-08-27RISC-V: testsuite: Fix vf_vfmul and vf_vfrdivPaul-Antoine Arras3-9/+1
Fix type and remove useless DejaGnu directives. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfmul-run-1-f64.c: Fix type. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfrdiv-run-1-f32.c: Remove useless dg directives. * gcc.target/riscv/rvv/autovec/vx_vf/vf_vfrdiv-run-1-f64.c: Likewise.
2025-08-27tree-optimization/121686 - failed SLP discovery for live recurrenceRichard Biener1-0/+32
The following adjusts the SLP build for only-live stmts to not only consider vect_induction_def and vect_internal_def that are not part of a reduction but instead consider all non-reduction defs that are not part of a reduction, specifically in this case a recurrence def. This is also a missed optimization on the gcc-15 branch (but IMO a very minor one). PR tree-optimization/121686 * tree-vect-slp.cc (vect_analyze_slp): Consider all only-live non-reduction defs for discovery. * gcc.dg/vect/pr121686.c: New testcase.
2025-08-26testsuite; Fix unprotected-allocas-1.c at -O3 [PR121684]Andrew Pinski1-2/+2
The problem here is after r16-101, the 2 functions containing alloca/VLA start to be cloned and then we un-VLA happens in using_vararray so this is no longer testing what it should be testing. The obvious fix is to mark using_vararray and using_alloca as noclone too. Pushed as obvious after a quick test to make sure it is now working. gcc/testsuite/ChangeLog: PR testsuite/121684 * c-c++-common/hwasan/unprotected-allocas-0.c: Mark using_vararray and using_alloca as noclone too. Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
2025-08-26x86-64: Emit the TLS call after debug markerH.J. Lu1-0/+13
For a basic block with only a debug marker: (note 3 0 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK) (note 2 3 5 2 NOTE_INSN_FUNCTION_BEG) (debug_insn 5 2 16 2 (debug_marker) "x.c":6:3 -1 (nil)) emit the TLS call after debug marker. gcc/ PR target/121668 * config/i386/i386-features.cc (ix86_emit_tls_call): Emit the TLS call after debug marker. gcc/testsuite/ PR target/121668 * gcc.target/i386/pr121668-1a.c: New test. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-26Move pr121656.c to gcc.dg/tortureH.J. Lu2-21/+30
Move pr121656.c to gcc.dg/torture and replace weak attribute with noipa attribute. Verified by reverting 56ca14c4c4f Fix invalid right shift count with recent ifcvt changes to trigger FAIL: gcc.dg/torture/pr121656.c -O1 execution test FAIL: gcc.dg/torture/pr121656.c -O2 execution test FAIL: gcc.dg/torture/pr121656.c -O3 -g execution test FAIL: gcc.dg/torture/pr121656.c -O2 -flto -fno-use-linker-plugin -flto-partition=none execution test on Linux/x86-64. PR tree-optimization/121656 * gcc.dg/pr121656.c: Moved to ... * gcc.dg/torture/pr121656.c: Here. (dg-options): Removed. (foo): Replace weak attribute with noipa attribute. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
2025-08-26More RISC-V testsuite hygieneJeff Law2-6/+4
More testsuite hygiene. Some of the thead tests are expecting to find xtheadvdot in the extension set, but it's not defined as a valid extension anywhere. I'm just removing xtheadvdot. Someone more familiar with these cores can add it back properly if they're so inclined. Second, there's a space after the zifencei in a couple of the thead arch strings. Naturally that causes failures as well. That's a trivial fix, just remove the bogus whitespace. That gets us clean on riscv.exp on the pioneer system. The pioneer is happy, as is riscv32-elf and riscv64-elf. Pushing to the trunk. gcc/ * config/riscv/riscv-cores.def (xt-c908v): Drop xtheadvdot. (xt-c910v2): Remove extraenous whitespace. (xt-c920v2): Drop xtheadvdot and remove extraeonous whitespace. gcc/testsuite/ * gcc.target/riscv/mcpu-xt-c908v.c: Drop xtheadvdot. * gcc.target/riscv/mcpu-xt-c920v2.c: Drop xtheadvdot.
2025-08-27Daily bump.GCC Administrator1-0/+111
2025-08-26OpenMP: give error when variant is the same as the base function [PR118839]Sandra Loosemore2-0/+24
As noted in the issue, the C++ front end has deeper problems: it's supposed to do the name lookup of the variant at the call site but is instead doing it when parsing the "declare variant" construct, before registering the decl for the base function. The C++ part of the patch is a band-aid to catch the case where there is a previous declaration of the function and it doesn't give an undefined symbol error instead. Some real solution ought to be included as part of fixing PR118791. gcc/c/ PR middle-end/118839 * c-parser.cc (c_finish_omp_declare_variant): Error if variant is the same as base. gcc/cp/ PR middle-end/118839 * decl.cc (omp_declare_variant_finalize_one): Error if variant is the same as base. gcc/fortran/ PR middle-end/118839 * trans-openmp.cc (gfc_trans_omp_declare_variant): Error if variant is the same as base. gcc/testsuite/ PR middle-end/118839 * gcc.dg/gomp/declare-variant-3.c: New. * gfortran.dg/gomp/declare-variant-22.f90: New.
2025-08-26OpenMP: Improve front-end error-checking for "declare variant"Sandra Loosemore8-20/+54
This patch fixes a number of problems with parser error checking of "declare variant", especially in the C front end. The new C testcase unprototyped-variant.c added by this patch used to ICE when gimplifying the call site, at least in part because the variant was being recorded even after it was diagnosed as invalid. There was also a large block of dead code in the C front end that was supposed to fix up an unprototyped declaration of a variant function to match the base function declaration, that was never executed because it was nested in a conditional that could never be true. I've fixed those problems by rearranging the code and only recording the variant if it passes the correctness checks. I also tried to add some comments and re-work some particularly confusing bits of code, so that it's easier to understand. The OpenMP specification doesn't say what the behavior of "declare variant" with the "append_args" clause should be when the base function is unprototyped. The additional arguments are supposed to be inserted between the last fixed argument of the base function and any varargs, but without a prototype, for any given call we have no idea which arguments are fixed and which are varargs, and therefore no idea where to insert the additional arguments. This used to trigger some other diagnostics (which one depending on whether the variant was also unprototyped), but I thought it was better to just reject this with an explicit "sorry". Finally, I also observed that a missing "match" clause was only rejected if "append_args" or "adjust_args" was present. Per the spec, "match" has the "required" property, so if it's missing it should be diagnosed unconditionally. The C++ and Fortran front ends had the same issue so I fixed this one there too. gcc/c/ChangeLog * c-parser.cc (c_finish_omp_declare_variant): Rework diagnostic code. Do not record variant if there are errors. Make check for a missing "match" clause unconditional. gcc/cp/ChangeLog * parser.cc (cp_finish_omp_declare_variant): Structure diagnostic code similarly to C front end. Make check for a missing "match" clause unconditional. gcc/fortran/ChangeLog * openmp.cc (gfc_match_omp_declare_variant): Make check for a missing "match" clause unconditional. gcc/testsuite/ChangeLog * c-c++-common/gomp/append-args-1.c: Adjust expected output. * g++.dg/gomp/adjust-args-1.C: Likewise. * g++.dg/gomp/adjust-args-3.C: Likewise. * gcc.dg/gomp/adjust-args-1.c: Likewise: * gcc.dg/gomp/append-args-1.c: Likewise. * gcc.dg/gomp/unprototyped-variant.c: New. * gfortran.dg/gomp/adjust-args-1.f90: Adjust expected output. * gfortran.dg/gomp/append_args-1.f90: Likewise.