aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2025-04-10c++: nested lambda capture pack [PR119345]Jason Merrill2-0/+14
tsubst_stmt already registers a local capture proxy as a local_specialization of both an outer capture proxy and the captured variable; we also need to do that in add_extra_args. PR c++/119345 gcc/cp/ChangeLog: * pt.cc (add_extra_args): Also register a specialization of the captured variable. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-targ14.C: New test.
2025-04-10c++: alias_ctad_tweaks ICE w/ inherited CTAD [PR119687]Patrick Palka2-2/+22
With inherited CTAD the set of guides may be a two-dimensional overload set (i.e. OVERLOADs of OVERLOADs) so alias_ctad_tweaks (which also does the inherited CTAD transformation) needs to use the 2D-aware lkp_iterator instead of ovl_iterator, or better yet use the more idiomatic lkp_range. PR c++/119687 gcc/cp/ChangeLog: * pt.cc (alias_ctad_tweaks): Use lkp_range / lkp_iterator instead of ovl_iterator. gcc/testsuite/ChangeLog: * g++.dg/cpp23/class-deduction-inherited8.C: New test. Reviewed-by: Jason Merill <jason@redhat.com>
2025-04-10c++: Use G_ instead of _ around cp/errors.cc gcc-internal-format strings ↵Jakub Jelinek1-30/+29
[PR119684] These pp_printf/pp_verbatim format strings should be gcc-internal-format, they use the pretty-print.cc format specifier handling rather than libc *printf, but pp_printf/pp_verbatim are intentionally not handled through exgettext because not everything done through them should be translated (e.g. its use for dump files shouldn't be). In addition, composing translatable messages from "in requirements " and later on "with " might make it harder to be translated. I've verified these strings (at least those which don't use format specifiers added post GCC 4.3 which gettext doesn't handle) are properly marked as gcc-internal-format in gcc.pot. The lack of that caused ICEs on German translation of the "%s%s%sIn instantiation of %q#D:\n" message because it contained too many %s. 2025-04-10 Jakub Jelinek <jakub@redhat.com> PR translation/119684 * error.cc (cp_print_error_function): Use G_ instead of _ for pp_printf arguments. (function_category): Use G_ instead of _. (print_instantiation_full_context): Use G_ instead of _ in pp_verbatim arguments. (print_location): Likewise. (print_instantiation_partial_context): Likewise. (maybe_print_constexpr_context): Likewise. (print_constrained_decl_info): Use G_() around pp_verbatim argument. (print_concept_check_info): Likewise. (print_constraint_context_head): Likewise. (print_requires_expression_info): Likewise. Merge separate pp_verbatim "in requirements " and "with " into one with conditional messages.
2025-04-10cobol: New testcases for reference modification.Bob Dubner22-0/+244
gcc/testsuite * cobol.dg/group2/Dynamic_reference_modification.cob: New testcase. * cobol.dg/group2/Length_overflow__1_.cob: Likewise. * cobol.dg/group2/Length_overflow__2_.cob: Likewise. * cobol.dg/group2/Length_overflow_with_offset__1_.cob: Likewise. * cobol.dg/group2/Length_overflow_with_offset__2_.cob: Likewise. * cobol.dg/group2/Length_overflow_with_offset__3_.cob: Likewise. * cobol.dg/group2/Offset_overflow.cob: Likewise. * cobol.dg/group2/Offset_underflow.cob: Likewise. * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob: Likewise. * cobol.dg/group2/Refmod_sources_are_figurative_constants.cob: Likewise. * cobol.dg/group2/Static_reference_modification.cob: Likewise. * cobol.dg/group2/Dynamic_reference_modification.out: New known-good result. * cobol.dg/group2/Length_overflow__1_.out: Likewise. * cobol.dg/group2/Length_overflow__2_.out: Likewise. * cobol.dg/group2/Length_overflow_with_offset__1_.out: Likewise. * cobol.dg/group2/Length_overflow_with_offset__2_.out: Likewise. * cobol.dg/group2/Length_overflow_with_offset__3_.out: Likewise. * cobol.dg/group2/Offset_overflow.out: Likewise. * cobol.dg/group2/Offset_underflow.out: Likewise. * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out: Likewise. * cobol.dg/group2/Refmod_sources_are_figurative_constants.out: Likewise. * cobol.dg/group2/Static_reference_modification.out: Likewise.
2025-04-10c++: lambda in constraint of lambda [PR119175]Jason Merrill2-0/+18
Here when we went to mangle the constraints of from<0>, the outer lambda has no mangling scope, but the inner one was treated as having the outer one as its scope. And mangling the outer one means mangling its constraints, which include the inner one. So infinite recursion. But a lambda closure type isn't a scope that anything should have for mangling, the inner lambda should also have no mangling scope. PR c++/119175 gcc/cp/ChangeLog: * mangle.cc (decl_mangling_context): Look through lambda type. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-lambda23.C: New test.
2025-04-10Darwin: Add spec substitution for static-libgcobol.Iain Sandoe1-0/+1
This just follows the common pattern used for other runtime libs. gcc/ChangeLog: * config/darwin.h (LINK_SPEC): Add support for -static-libgcobol. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-04-10middle-end/119706 - allow POLY_INT_CST as is_gimple_mem_ref_addrRichard Biener1-1/+1
We currently only INTEGER_CST, but not POLY_INT_CST, which leads to the situation that when the POLY_INT_CST is only indrectly present via a SSA def the IL is valid but when propagated it's not. That's unsustainable. PR middle-end/119706 * gimple-expr.cc (is_gimple_mem_ref_addr): Also allow POLY_INT_CST.
2025-04-10testsuite, cobol: Add libquadmath paths.Iain Sandoe1-0/+9
Even when we are using IEC 128b floating point, the quadmath library can be pulled in 'as needed'. gcc/testsuite/ChangeLog: * lib/cobol.exp: Add libquadmath paths. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
2025-04-10Avoid using POINTER_DIFF_EXPR for overlap checks [PR119399]Richard Sandiford2-3/+14
In r10-4803-g8489e1f45b50600c I'd used POINTER_DIFF_EXPR to subtract the two pointers involved in an overlap test. I'm not sure whether I'd specifically chosen that over MINUS_EXPR or not; if so, the only reason I can think of is that it is probably faster on targets with PSImode pointers. Regardless, as the PR points out, subtracting unrelated pointers using POINTER_DIFF_EXPR is undefined behaviour. gcc/ PR tree-optimization/119399 * tree-data-ref.cc (create_waw_or_war_checks): Use a MINUS_EXPR on two converted pointers, rather than converting a POINTER_DIFF_EXPR on the pointers. gcc/testsuite/ PR tree-optimization/119399 * gcc.dg/vect/pr119399.c: New test.
2025-04-10RISC-V: Fix the behavior for multilib-generator with --cmodel=large on rv32Kito Cheng1-2/+2
Large code model is only supported on RV64, so we don't need to generate the multilibs for RV32 with --cmodel=large. And the compact code model is something we don't supported on upstream (which is accidentally added in the past), so we need to remove it. gcc/ChangeLog: * config/riscv/multilib-generator: Remove the compact code model and check large code model for RV32.
2025-04-10RISC-V: Include local riscv_vector.h in testsuiteKito Cheng35-35/+35
That could prevent us including stdint.h from glibc, and that will cause problem when the corresponding multilib isn't built. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c: Include local riscv_vector.h. * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c: Ditto. * gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c: Ditto. * gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: Ditto. * gcc.target/riscv/rvv/base/abi-callee-saved-1.c: Ditto. * gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c: Ditto. * gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: Ditto. * gcc.target/riscv/rvv/base/abi-callee-saved-2.c: Ditto. * gcc.target/riscv/rvv/base/bug-10-2.c: Ditto. * gcc.target/riscv/rvv/base/bug-10.c: Ditto. * gcc.target/riscv/rvv/base/bug-7.c: Ditto. * gcc.target/riscv/rvv/base/bug-8.c: Ditto. * gcc.target/riscv/rvv/base/bug-9.c: Ditto. * gcc.target/riscv/rvv/base/pr110943.c: Ditto. * gcc.target/riscv/rvv/base/pr112431-21.c: Ditto. * gcc.target/riscv/rvv/base/pr114639-1.c: Ditto. * gcc.target/riscv/rvv/base/pr115068.c: Ditto. * gcc.target/riscv/rvv/base/pr117286.c: Ditto. * gcc.target/riscv/rvv/base/pr117544.c: Ditto. * gcc.target/riscv/rvv/base/pr117955.c: Ditto. * gcc.target/riscv/rvv/base/pr118872.c: Ditto. * gcc.target/riscv/rvv/base/vlmul_ext-1.c: Ditto. * gcc.target/riscv/rvv/base/vssubu-1.c: Ditto. * gcc.target/riscv/rvv/base/vssubu-2.c: Ditto. * gcc.target/riscv/rvv/base/vwaddsub-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/pr111234.c: Ditto. * gcc.target/riscv/rvv/vsetvl/pr115214.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-24.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c: Ditto. * gcc.target/riscv/rvv/xtheadvector/pr116591.c: Ditto. * gcc.target/riscv/rvv/xtheadvector/pr116592.c: Ditto. * gcc.target/riscv/rvv/xtheadvector/pr118357.c: Ditto. * gcc.target/riscv/rvv/xtheadvector/vsext.c: Ditto. * gcc.target/riscv/rvv/xtheadvector/vzext.c: Ditto.
2025-04-10Daily bump.GCC Administrator9-1/+249
2025-04-09c++: ICE with nested default targ lambdas [PR119574]Patrick Palka4-1/+23
Here we substitute into the inner lambda twice, first during default argument substitution for the outer template parameters, then during that for the inner template parameters. For the second testcase (which is easier to follow/debug), the first substitution into the inner lambda is with the template arguments {0, NULL_TREE}, which we defer because it's an incremental substitution. For the second and final substitution we have the template arguments {1, NULL_TREE}, which we try combining via add_extra_args and ICE on the checking assert because TREE_STATIC isn't set on the deferred arguments but the template arguments are considered dependent. The template arguments aren't dependent however -- they're just incomplete because when we deferred them we were in the middle of deduction, and we consider a NULL_TREE template argument as dependent. If we remove this checking assert, we go on to correctly merge the template arguments into {{0, NULL_TREE}, {1, NULL_TREE}}. So this patch just removes this imprecise assert. PR c++/119574 gcc/cp/ChangeLog: * pt.cc (add_extra_args): Remove checking assert. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-targ13.C: New test. * g++.dg/cpp2a/lambda-targ13a.C: New test. * g++.dg/cpp2a/lambda-targ13b.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com>
2025-04-09cobol: Proper comparison of alphanumeric to refmoded numeric-display [PR119682]Bob Dubner1-4/+7
gcc/cobol PR cobol/119682 * genapi.cc: (cobol_compare): Change the call to __gg__compare(). libgcobol PR cobol/119682 * common-defs.h: Define the REFER_T_REFMOD constant. * intrinsic.cc: (__gg__max): Change the calls to __gg__compare_2(), (__gg__min): Likewise, (__gg__ord_min): Likewise, (__gg__ord_max): Likewise. * libgcobol.cc: (__gg__compare_2): Change definition of calling parameters, eliminate separate flag bit for ALL and ADDRESS_OF, change comparison of alphanumeric to numeric when the numeric is a refmod. * libgcobol.h: Change declaration of __gg__compare_2.
2025-04-09pretty-print: Fix format specifier descriptionJakub Jelinek1-1/+1
I've noticed we talk about %Ns even when that isn't supported and we actually only support %.Ns which the comment describes. 2025-04-09 Jakub Jelinek <jakub@redhat.com> * pretty-print.cc (pretty_printer::format): Use %.Ns instead of %Ns in function comment.
2025-04-09modula2: FIx a comment typoJakub Jelinek1-1/+2
During make gcc.pot I've noticed among tons of other warnings (e.g. because can't appears in non-C/C++ style comment and so gettext considers it unterminated) a warning where the lack of " looked unintentional. 2025-04-09 Jakub Jelinek <jakub@redhat.com> * gm2-compiler/M2MetaError.def: Fix comment typo, range" -> "range2".
2025-04-09h8300: Fix up bit test and jump splitter [PR119664]Jakub Jelinek2-4/+19
r12-2601 has added this define_insn_and_split and corresponding (define_insn "" [(set (reg:CCZ CC_REG) (eq (zero_extract:HSI (match_operand:HSI 0 "register_operand" "r") (const_int 1) (match_operand 1 "const_int_operand" "n")) (const_int 0)))] "INTVAL (operands[1]) < 16" "btst %Z1,%Y0" [(set_attr "length" "2")]) pattern into which the define_insn_and_split wants to splut in addition to a conditional jump. But as can be seen, the btst define_insn uses HSI mode iterator while define_insn_and_split QHSI, so for QImode it splits into something that can't be recognized. This was probably latent since r12-2601 and on the attached testcase is reproduceable starting with r15-1945 - a late combiner change. 2025-04-09 Jakub Jelinek <jakub@redhat.com> PR target/119664 * config/h8300/jumpcall.md (bit test and jump define_insn_and_split): Use HSI iterator rather than QHSI. * gcc.dg/pr119664.c: New test.
2025-04-09Update gcc de.poJoseph Myers1-237/+129
* de.po: Update.
2025-04-09aarch64: Add sve testcase for PR 116595 [PR116595]Andrew Pinski1-0/+7
This was fixed with r15-9329-gf183ae0ae891a471764876eb but only a RISC-V V testcase was added. So this adds an aarch64 SVE testcase too. Pushed as obvious after a quick test to make sure it passes. PR middle-end/116595 gcc/testsuite/ChangeLog: * g++.target/aarch64/sve/pr116595.C: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2025-04-09d: Fix forward referenced enums missing type names in debug info [PR118309]Iain Buclaw3-13/+47
Calling `rest_of_type_compilation' as the D types were built meant that debug info was being emitted before all forward references were resolved, resulting in DW_AT_name's to be missing. Instead, defer outputting type debug information until all modules have been parsed and generated in `d_finish_compilation'. PR d/118309 gcc/d/ChangeLog: * modules.cc: Include debug.h (d_finish_compilation): Call debug_hooks->type_decl on all TYPE_DECLs. * types.cc: Remove toplev.h include. (finish_aggregate_type): Don't call rest_of_type_compilation or rest_of_decl_compilation on type. (TypeVisitor::visit (TypeEnum *)): Likewise. gcc/testsuite/ChangeLog: * gdc.dg/debug/dwarf2/pr118309.d: New test.
2025-04-09Update gcc.po filesJoseph Myers20-139295/+144504
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po, ja.po, ka.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po, zh_TW.po: Update.
2025-04-09Fortran: fix issue with impure elemental subroutine and interface [PR119656]Harald Anlauf3-7/+65
PR fortran/119656 gcc/fortran/ChangeLog: * interface.cc (gfc_compare_actual_formal): Fix front-end memleak when searching for matching interfaces. * trans-expr.cc (gfc_conv_procedure_call): If there is a formal dummy corresponding to an absent argument, use its type, and only fall back to inferred type otherwise. gcc/testsuite/ChangeLog: * gfortran.dg/optional_absent_13.f90: New test.
2025-04-09[RISC-V] Fix more fallout from combine.c changesJeff Law4-4/+4
Trivial fallout from the recent combine work. We end up with a srai rather than an xor in some of the saturation sequences. Both variants look equally performant, so I'm just adjusting the expected test output. gcc/testsuite * gcc.target/riscv/sat/sat_s_sub-1-i64.c: Update expected output. * gcc.target/riscv/sat/sat_s_sub-2-i64.c: Likewise. * gcc.target/riscv/sat/sat_s_sub-3-i64.c: Likewise. * gcc.target/riscv/sat/sat_s_sub-4-i64.c: Likewise.
2025-04-09testsuite/x86: Correctly escape asterisk in scan-assemblerUros Bizjak2-10/+10
Asterisk in []* regexp applies to bracket expression. When asterisk is a part of the word, then it needs to be escaped with \\. Also use []+ instead of []* to match elements in bracket expression one or more times. gcc/testsuite/ChangeLog: * gcc.target/i386/pr67215-1.c: Correctly escape asterisk in scan-assembler dirctive. * gcc.target/i386/pr67215-2.c: Ditto.
2025-04-09deref-before-check-pr113253.c: Fix bogus warnings on lp32Jonathan Yong1-4/+5
Warnings about pointer sizes cause the test to fail incorrectly. A dummy return value is also added to set_marker_internal for completeness to suppress a -Wreturn-type warning even though gcc does not issue it by default. Signed-off-by: Jonathan Yong <10walls@gmail.com> gcc/testsuite/ChangeLog: PR analyzer/113253 * gcc.dg/analyzer/deref-before-check-pr113253.c: (ptrdiff_t): use stddef.h type. (uintptr_t): ditto. (EMACS_INT): ditto. (set_marker_internal): Add dummy 0 to suppress -Wreturn-type.
2025-04-09[committed][RISC-V] Adjust expected output for rvv testJeff Law1-2/+1
The recent combine changes twiddled code generation ever so slightly on risc-v and is causing pr117722.c to fail. The relevant change is this sequence to perform an abs() across elements in a vector: > ! vwsubu.vv v1,v4,v3 > vsetvli zero,zero,e16,mf2,tu,ma > - vrsub.vi v3,v1,0 > - vmax.vv v1,v1,v3 Turns into: > ! vwsubu.vv v1,v3,v4 > ! vwsubu.vv v5,v4,v3 > vsetvli zero,zero,e16,mf2,tu,ma > + vmax.vv v1,v1,v5 There's other trivial differences, but that highlights the key change in the abs sequence. The first sequence has lower register pressure since it synthesizes the negation using vrsub.vi. The second sequence is better from a data dependency standpoint as the two vwsubu instructions can execute in parallel on designs with > 1 vector ALU. I don't consider either sequence inherently better than the other. So I'm just adjusting the test to accept our new code. gcc/testsuite * gcc.target/riscv/rvv/autovec/pr117722.c: Adjust expected output.
2025-04-09riscv: Fix r15-9270 fallout on RISC-VJakub Jelinek1-1/+33
On Wed, Apr 09, 2025 at 02:38:01PM +0200, Mark Wielaard wrote: > Unfortunately this seems to have broken the riscv bootstrap: > https://builder.sourceware.org/buildbot/#/builders/337/builds/105 > > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: enumeration value ‘TCTX_OMP_MAP’ not handled in switch [-Werror=switch] > 4730 | switch (context) > | ^ > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: enumeration value ‘TCTX_OMP_MAP_IMP_REF’ not handled in switch [-Werror=switch] > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: enumeration value ‘TCTX_OMP_PRIVATE’ not handled in switch [-Werror=switch] > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: enumeration value ‘TCTX_OMP_FIRSTPRIVATE’ not handled in switch [-Werror=switch] > ../../gcc/gcc/config/riscv/riscv-vector-builtins.cc:4730:10: error: enumeration value ‘TCTX_OMP_DEVICE_ADDR’ not handled in switch [-Werror=switch] > cc1plus: all warnings being treated as errors Indeed, riscv-vector-builtins.cc IMHO needs pretty much the same changes as aarch64, just with s/SVE/RVV/g. I've also left out default: break; so that it is caught next time somebody adds further enumerators. 2025-04-09 Jakub Jelinek <jakub@redhat.com> * config/riscv/riscv-vector-builtins.cc (verify_type_context): Diagnose RVV types for a given OpenMP context.
2025-04-09rtl-optimization/119689 - compare-debug failure with LRARichard Biener2-1/+45
The previous change to fix LRA rematerialization broke compare-debug for i586 bootstrap. Fixed by using prev_nonnote_nondebug_insn instead of prev_nonnote_insn. PR rtl-optimization/119689 PR rtl-optimization/115568 * lra-remat.cc (create_cands): Use prev_nonnote_nondebug_insn to check whether insn2 is directly before insn. * g++.target/i386/pr119689.C: New testcase.
2025-04-09d: Use CONSTRUCTOR_ZERO_PADDING_BITS in the D FE [PR117832]Iain Buclaw7-28/+45
Adds a new wrapper function for `build_constructor', and calls it instead to ensure that all CONSTRUCTOR nodes explicitly created by the front-end have CONSTRUCTOR_ZERO_PADDING_BITS set. Some places may not be necessary as it's guaranteed for there to be no padding in the type, such as D dynamic arrays. Other places this gets turned into a double-memset when optimizations are turned off, as the front-end already generates a memset call to zero out all padding on initializing a variable. The optimizer sees through this so will correctly clear all bits once, so this can be improved later as-needed. PR d/117832 gcc/d/ChangeLog: * d-tree.h (build_padded_constructor): New prototype. * d-codegen.cc (build_padded_constructor): New function. (d_array_value): Call it. (build_memset_call): Likewise. (build_struct_literal): Likewise. (underlying_complex_expr): Likewise. (build_array_from_val): Likewise. (build_array_from_exprs): Likewise. (d_build_call): Likewise. (get_frame_for_symbol): Likewise. * d-convert.cc (convert_for_rvalue): Likewise. (convert_for_assignment): Likewise. * decl.cc (class DeclVisitor): Likewise. * expr.cc (class ExprVisitor): Likewise. * modules.cc (layout_moduleinfo): Likewise. * typeinfo.cc (class TypeInfoVisitor): Likewise.
2025-04-09Revert "RISC-V: Refine the testcases for cond_widen_complicate-3"Pan Li10-93/+36
This reverts commit f70f4b60debce4a223725781d1973c05d8d1dfa9.
2025-04-09libcpp: Fix error recovery after use of __VA_ARGS__ as macro argument [PR118674]Jakub Jelinek1-0/+5
The following testcase ICEs after emitting one pedwarn (about using __VA_ARGS__ in a place where it shouldn't be used) and one error. The error is emitted by _cpp_save_parameter where it sees the node has been used already earlier. But unlike the other _cpp_save_parameter caller which does goto out; if it returns false, this call with explicit __VA_ARGS__ doesn't and if it increments number of parameters etc. after the error, we then try to unsave it twice. The following patch fixes it by doing the goto out in that case too, the macro will then not be considered as variable arguments macro, but for error recovery I think that is fine. The other option would be before the other _cpp_save_parameter caller check if the node is pfile->spec_nodes.n__VA_ARGS__ and in that case also error and goto out, but that seems more expensive than this for the common case that the macro definition is correct. 2025-04-09 Jakub Jelinek <jakub@redhat.com> PR preprocessor/118674 * macro.cc (parse_params) <case CPP_ELLIPSIS>: If _cpp_save_parameter failed for __VA_ARGS__, goto out. * gcc.dg/cpp/pr118674.c: New test.
2025-04-09testsuite: Add -mabi to pr116595.CRobin Dapp1-1/+1
As usual, I forgot to add -mabi=lp64d to the test case. This patch adds it. Going to push as obvious. gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/autovec/pr116595.C: Add -mabi.
2025-04-09expr: Use constant_lower_bound classifying constructor els [PR116595].Robin Dapp2-3/+13
In categorize_ctor_elements_1 we do VECTOR_CST_NELTS (value).to_constant () but VALUE's type can be a VLA vector (since r15-5780-g17b520a10cdaab). This patch uses constant_lower_bound instead. PR middle-end/116595 gcc/ChangeLog: * expr.cc (categorize_ctor_elements_1): Use constant_lower_bound. gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/autovec/pr116595.C: New test.
2025-04-09Fortran: Fix some problems with the reduce intrinsic [PR119460]Paul Thomas7-28/+123
2025-04-09 Paul Thomas <pault@gcc.gnu.org> and Harald Anlauf <anlauf@gcc.gnu.org> gcc/fortran PR fortran/119460 * iresolve.cc (generate_reduce_op_wrapper): Increase the size of 'tname'. Change intent of 'a' and 'b' to intent_in. * trans-decl.cc (add_argument_checking): Do not test artificial formal symbols. * trans-expr.cc (gfc_conv_procedure_call): Remove reduce_scalar and the blocks triggered by it. * trans-intrinsic.cc (gfc_conv_intrinsic_function): Set the result of non-character, scalar reduce to be allocatable. gcc/testsuite/ PR fortran/119460 * gfortran.dg/reduce_2.f90: Add test to check that deferred len characters cannot slip through. * gfortran.dg/reduce_3.f90: New test * gfortran.dg/reduce_4.f90: New test libgfortran/ PR libfortran/119460 * intrinsics/reduce.c (reduce): Correct error message about mismatch between dim and the rank of array. Output the values of both. Correct the evaluation of the result stride and extent. (reduce_scalar): The front end treats the result as an allocatable so eliminate memcpy and free. Return the base-addr of the local descriptor. (reduce_c): Correct the type of the string lengths. (reduce_scalar_c): Correct the type of the string lengths.Test to see if 'res' is allocated. If not then return the base_addr of the local descriptor.
2025-04-09Fortran: Add code gen for do,concurrent's LOCAL/LOCAL_INIT [PR101602]Tobias Burnus14-30/+807
Implement LOCAL and LOCAL_INIT; we locally replace the tree declaration by a local declaration of the outer variable. The 'local_init' then assigns the value at the beginning of each loop iteration from the outer declaration. Note that the current implementation does not handle LOCAL with types that have a default initializer and LOCAL/LOCAL_INIT for assumed-shape arrays; this is diagnosed with a sorry error. PR fortran/101602 gcc/fortran/ChangeLog: * resolve.cc (resolve_locality_spec): Remove 'sorry, unimplemented'. * trans-stmt.cc (struct symbol_and_tree_t): New. (gfc_trans_concurrent_locality_spec): New. (gfc_trans_forall_1): Call it; update to handle local and local_init. * trans-decl.cc (gfc_start_saved_local_decls, gfc_stop_saved_local_decls): New; moved code from ... (gfc_process_block_locals): ... here. Call it. * trans.h (gfc_start_saved_local_decls, gfc_stop_saved_local_decls): Declare. gcc/testsuite/ChangeLog: * gfortran.dg/do_concurrent_8_f2023.f90: Update for removed 'sorry, unimplemented'. * gfortran.dg/do_concurrent_9.f90: Likewise. * gfortran.dg/do_concurrent_all_clauses.f90: Likewise. * gfortran.dg/do_concurrent_local_init.f90: Likewise. * gfortran.dg/do_concurrent_locality_specs.f90: Likewise. * gfortran.dg/do_concurrent_11.f90: New test. * gfortran.dg/do_concurrent_12.f90: New test. * gfortran.dg/do_concurrent_13.f90: New test. * gfortran.dg/do_concurrent_14.f90: New test. * gfortran.dg/do_concurrent_15.f90: New test.
2025-04-08c++: lambda in concept [PR118698]Jason Merrill3-1/+34
When normalizing is_foo for <T>, we get to normalizing callable<decltype(...),T> for <T,foo>, which means substituting <T,foo> into <decltype(...),T>. Since r14-9938, because in_template_context is false we return the lambda unchanged, just with LAMBDA_EXPR_EXTRA_ARGS set, so the closure type still refers to the is_specialization_of tparms in its CLASSTYPE_TEMPLATE_INFO. So then in normalize_atom caching find_template_parameters walks over the parameter mapping; any_template_parm_r walks into the TREE_TYPE of a LAMBDA_EXPR without considering EXTRA_ARGS and finds a template parm from the wrong parameter list. But since r15-3530 we expect to set tf_partial when substituting with dependent arguments, so we should set that when normalizing. And then tf_partial causes TREE_STATIC to be set on the EXTRA_ARGS, meaning that those args will replace all the template parms in the rest of the lambda, so we can walk just the EXTRA_ARGS and ignore the rest. PR c++/118698 gcc/cp/ChangeLog: * constraint.cc (struct norm_info): Add tf_partial. * pt.cc (any_template_parm_r): Handle LAMBDA_EXPR_EXTRA_ARGS. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-lambda22.C: New test.
2025-04-09LoongArch: Fix awk / sed usage for compatibilityYang Yujie2-29/+40
Tested with nawk, mawk, and gawk. gcc/ChangeLog: * config/loongarch/genopts/gen-evolution.awk: remove usage of "asort". * config/loongarch/genopts/genstr.sh: replace sed with awk.
2025-04-09Daily bump.GCC Administrator8-1/+582
2025-04-08testsuite: Update guality XFAILs for aarch64Richard Sandiford7-8/+8
In previous years, I've tried to update the guality tests so that they give clean results on aarch64-linux-gnu with a recent version of GDB. This patch does the same thing for GCC 15. The version of GDB I used was 16.2. As before, there are no PRs for the XFAILs. The idea is that anyone who is interested in working in this area can see the current XFAILs by grepping the tests. gcc/testsuite/ * gcc.dg/guality/pr36728-3.c: Update XFAILs for aarch64. * gcc.dg/guality/pr41353-1.c: Likewise. * gcc.dg/guality/pr54693-2.c: Likewise. * gcc.dg/guality/pr68860-1.c: Likewise. * gcc.dg/guality/pr68860-2.c: Likewise. * gcc.dg/guality/sra-1.c: Likewise. * gcc.dg/guality/vla-1.c: Likewise.
2025-04-08testsuite: Fix gcc.dg/vect/pr99102.c command lineRichard Sandiford1-1/+1
The aarch64_sve256_hw line forced the vector length, but didn't force SVE itself. This meant that the associated: /* { dg-final { scan-tree-dump "MASK_SCATTER_STORE" "vect" { target aarch64_sve256_hw } } } */ wouldn't always fire. I imagine this was tested with SVE enabled by default, which would have masked the problem. gcc/testsuite/ * gcc.dg/vect/pr99102.c: Force SVE when forcing the vector length.
2025-04-08Doc: Copy-edit text about -Wno-xxx [PR90468]Sandra Loosemore1-12/+13
The issue is specifically about a missing word, but I spotted other copy-editing issues like misplaced hyphens in nearby text. I also thought that the -Wimplicit example was anachronistic because it's a hard error in modern C dialects rather than a warning, and replaced it with something users are more likely to run into. gcc/ChangeLog PR c++/90468 * doc/invoke.texi (Warning Options): Clean up text describing -Wno-xxx.
2025-04-08d: Fix infinite loop in isAliasThisTupleIain Buclaw3-14/+26
This reverts a change in the upstream D implementation of the compiler, as the refactoring introduced a regression. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 51816cd01d. Reviewed-on: https://github.com/dlang/dmd/pull/21155
2025-04-08cobol: Further fixes for cobol cross-compilation from 32-bit arches [PR119364]Jakub Jelinek4-18/+28
On top of https://gcc.gnu.org/pipermail/gcc-patches/2025-April/680256.html patch this brings make check-cobol when using the cross compiler from 32-bit host to x86_64-linux to the following: Running /home/jakub/src/gcc/gcc/testsuite/cobol.dg/dg.exp ... FAIL: cobol.dg/group1/declarative_1.cob -O0 execution test FAIL: cobol.dg/group1/declarative_1.cob -O1 execution test FAIL: cobol.dg/group1/declarative_1.cob -O2 execution test FAIL: cobol.dg/group1/declarative_1.cob -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test FAIL: cobol.dg/group1/declarative_1.cob -O3 -g execution test FAIL: cobol.dg/group1/declarative_1.cob -Os execution test === cobol Summary === # of expected passes 3123 # of unexpected failures 6 # of expected failures 6 (which has some analysis but not a fix yet). This patch fixes various cases where host size of various types (void *, int, size_t, unsigned char) is used in place where size of those types in bytes on the target should be used instead. At least the size of void * and size_t actually differns between ilp32 hosts and lp64 targets, int could be different in theory as well but we actually don't support 16-bit ints on the host side and only support lp64 targets right now for cobol, and finally sizeof(unsigned char) is always 1, so there is no point to multiply by that and it is still wrong to use host sizeof for the target decisions. 2025-04-08 Jakub Jelinek <jakub@redhat.com> PR cobol/119364 * genapi.cc (function_handle_from_name): Use sizeof_pointer. (parser_file_add): Use int_size_in_bytes(VOID_P) and int_size_in_bytes(int). (inspect_tally): Use int_size_in_bytes(VOID_P). (inspect_replacing): Likewise. (gg_array_of_field_pointers): Likewise. (gg_array_of_file_pointers): Likewise. (parser_set_pointers): Use sizeof_pointer. * cobol1.cc (create_our_type_nodes_init): Use int_size_in_bytes(SIZE_T) and int_size_in_bytes(VOID_P). * gengen.cc (gg_array_of_size_t): Use int_size_in_bytes(SIZE_T). (gg_array_of_bytes): Just use N, don't multiply it by sizeof(unsigned char). * parse.y: Include tree.h. Use int_size_in_bytes(ptr_type_node).
2025-04-08simplify-rtx: Fix up POPCOUNT optimization [PR119672]Jakub Jelinek1-2/+4
The gcc.dg/vect/pr113281-1.c test and many others ICE on riscv since presumably the r15-9238 change which allowed more cases of vector modes in simplify_const_relational_operation. In the testcase it is EQ of (popcount:SI (unspec:RVVMF32BI [ (and:RVVMF32BI (const_vector:RVVMF32BI repeat [ (const_int 1 [0x1]) ]) (reg:RVVMF32BI 147 [ mask__6.8_35 ])) (reg:SI 143 [ _41 ]) (const_int 0 [0]) (reg:SI 66 vl) (reg:SI 67 vtype) ] UNSPEC_VPREDICATE)) and (const_int 0 [0]) which it tries to fold as EQ comparison of (unspec:RVVMF32BI [ (and:RVVMF32BI (const_vector:RVVMF32BI repeat [ (const_int 1 [0x1]) ]) (reg:RVVMF32BI 147 [ mask__6.8_35 ])) (reg:SI 143 [ _41 ]) (const_int 0 [0]) (reg:SI 66 vl) (reg:SI 67 vtype) ] UNSPEC_VPREDICATE) with (const_int 0 [0]) which ICEs because const0_rtx isn't a vector. Fixed by using CONST0_RTX, so that we pass (const_vector:RVVMF32BI repeat [ (const_int 0 [0]) ]) instead. 2025-04-08 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/119672 * simplify-rtx.cc (simplify_context::simplify_relational_operation_1): For POPCOUNT == 0 or != 0 optimizations use CONST0_RTX (GET_MODE (XEXP (op0, 0))) rather than const0_rtx.
2025-04-08c: fix checking for a tag for variably modified tagged types [PR119612]Martin Uecker5-16/+64
The checking assertion added for PR118765 did not take into account that add_decl_expr can change TYPE_NAME to a TYPE_DECL with no name for certain cases of variably modified types. This also implies that we might sometimes not reliably detect the absence of a tag when only considering TYPE_NAME. This patch introduces a new helper function c_type_tag to reliable compute the tag for a tagged types and uses it for code where the switch to C23 may cause regressions. PR c/119612 gcc/c/ChangeLog: * c-tree.h (c_type_tag): Add prototype. * c-typeck.cc (c_type_tag): New function. (tagged_types_tu_compatible_p, composite_type_internal): Use c_type_tag. * c-decl.cc (c_struct_hasher::hash, previous_tag): Use c_type_tag. gcc/testsuite/ChangeLog: * gcc.dg/gnu23-tag-6.c: New test. * gcc.dg/pr119612.c: New test.
2025-04-08OpenMP: Fix append_args handling in modify_call_for_omp_dispatchTobias Burnus4-22/+26
At tree level, the addr ref is also required for array dummy arguments, contrary to C; the GOMP_interop calls in modify_call_for_omp_dispatch were updated accordingly (using build_fold_addr_expr). As the GOMP_interop calls had no location data associated with them, the init call happened as soon as executing the previous line of code, which was confusing; solution: use the location data of the function call itself. PR middle-end/119662 gcc/ChangeLog: * gimplify.cc (modify_call_for_omp_dispatch): Fix GOMP_interop arg passing; add location info to function calls. libgomp/ChangeLog: * testsuite/libgomp.c/append-args-fr-1.c: New test. * testsuite/libgomp.c/append-args-fr.h: New test. gcc/testsuite/ChangeLog: * c-c++-common/gomp/append-args-interop.c: Update for fixed GOMP_interop call. * g++.dg/gomp/append-args-8.C: Likewise. * gfortran.dg/gomp/append-args-interop.f90: Likewise.
2025-04-08c++: self-dependent alias template [PR117530]Jason Merrill2-6/+18
Here, instantiating B<short> means instantiating A<short>, which means instantiating B<short>. And then when we go to register the initial instantiation, it conflicts with the inner one. Fixed by checking after tsubst whether there's already something in the hash table. We already did something much like this in tsubst_decl, but that doesn't handle this case. While I was here, I noticed that we had a pop_deferring_access_checks on one early exit but not another, and since I wanted to add yet another I switched to using deferring_access_check_sentinel. PR c++/117530 gcc/cp/ChangeLog: * pt.cc (instantiate_template): Check retrieve_specialization after tsubst. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-uneval27.C: New test.
2025-04-08riscv: Fix a typo in config/riscv/freebsd.h [PR119678]Jakub Jelinek1-1/+1
The r15-1124 commit had a typo in one of the FBSD_LINK_PG_NOTE macro uses. Fixed thusly, tested with ../configure --target riscv64-unknown-freebsd14 --disable-bootstrap --enable-languages=c --disable-libsanitizer --disable-libgomp make -j32 Before it failed while compiling gcc.cc: In file included from ./tm.h:44, from ../../gcc/gcc.cc:35: ../../gcc/config/riscv/freebsd.h:45:5: error: expected ‘,’ or ‘;’ before ‘FBSD_LINK_PG_NOTES’ 45 | " FBSD_LINK_PG_NOTES " \ | ^~~~~~~~~~~~~~~~~~ ../../gcc/gcc.cc:1211:32: note: in expansion of macro ‘LINK_SPEC’ Now it fails later on during libgcc configury because I don't have corresponding binutils. 2025-04-08 Jakub Jelinek <jakub@redhat.com> PR target/119678 * config/riscv/freebsd.h (LINK_SPEC): Use FBSD_LINK_PG_NOTE rather than non-existing FBSD_LINK_PG_NOTES.
2025-04-08nvptx: In offloading compilation, special-case certain host-setup symbol ↵Thomas Schwinge1-0/+2
aliases: avoid unused label 'emit_ptx_alias' diagnostic Minor fix-up for commit 65b31b3fff2fced015ded1026733605f34053796 "nvptx: In offloading compilation, special-case certain host-setup symbol aliases [PR101544]", as of which we see for non-offloading configurations: +[...]/source-gcc/gcc/config/nvptx/nvptx.cc: In function 'void nvptx_asm_output_def_from_decls(FILE*, tree, tree)': +[...]/source-gcc/gcc/config/nvptx/nvptx.cc:7769:2: warning: label 'emit_ptx_alias' defined but not used [-Wunused-label] + 7769 | emit_ptx_alias: + | ^~~~~~~~~~~~~~ gcc/ * config/nvptx/nvptx.cc (nvptx_asm_output_def_from_decls) [!ACCEL_COMPILER]: Don't define label 'emit_ptx_alias'.
2025-04-08cse: Fix up delete_trivially_dead_insns [PR119594]Jakub Jelinek2-2/+45
The following testcase is miscompiled by delete_trivially_dead_insns, latently since r0-6313, actually since r15-1575. The problem is in that r0-6313 change, which made count_reg_usage not count uses of the pseudo which the containing SET sets. That is needed so we can delete those instructions as trivially dead if they are really dead, but has the following problem. After fwprop proper we have: (insn 7 2 8 2 (set (reg/v:DI 101 [ g ]) (const_int -1 [0xffffffffffffffff])) "pr119594.c":8:10 95 {*movdi_internal} (nil)) ... (insn 26 24 27 7 (set (reg:DI 104 [ g ]) (zero_extend:DI (subreg:SI (reg/v:DI 101 [ g ]) 0))) "pr119594.c":11:8 175 {*zero_extendsidi2} (expr_list:REG_EQUAL (const_int 4294967295 [0xffffffff]) (expr_list:REG_DEAD (reg/v:DI 101 [ g ]) (nil)))) (insn 27 26 28 7 (set (reg/v:DI 101 [ g ]) (zero_extend:DI (subreg:SI (reg/v:DI 101 [ g ]) 0))) "pr119594.c":11:8 175 {*zero_extendsidi2} (expr_list:REG_EQUAL (const_int 4294967295 [0xffffffff]) (expr_list:REG_UNUSED (reg/v:DI 101 [ g ]) (nil)))) and nothing else uses or sets the 101 and 104 pseudos. The subpass doesn't look at REG_UNUSED or REG_DEAD notes (correctly, as they aren't guaranteed to be accurate). The last change in the IL was forward propagation of (reg:DI 104 [ g ]) value into the following insn. Now, count_reg_usage doesn't count anything on insn 7, the SET_DEST is a reg, so we don't count that and SET_SRC doesn't contain any regs. On insn 26 it counts one usage of pseudo 101 (so counts[101] = 1) and on insn 27 since r0-6313 doesn't count anything as that insn sets pseudo 101 to something that uses it, it isn't a side-effect instruction and can't throw. Now, after counting reg usages the subpass walks the IL from end to start, sees insn 27, counts[101] is non-zero, so insn_live_p is true, nothing is deleted. Then sees insn 26, counts[104] is zero, insn_live_p is false, we delete the insn and decrease associated counts, in this case counts[101] becomes zero. And finally later we process insn 7, counts[101] is now zero, insn_live_p is false, we delete the insn (and decrease associated counts, which aren't any). Except that this resulted in insn 27 staying in the IL but using a REG which is no longer set (and worse, having a REG_EQUAL note of something we need later in the same bb, so we then assume pseudo 101 contains 0xffffffff, which it no longer does. Now, if insn 26 was after insn 27, this would work just fine, we'd first delete that and then insn 27 and then insn 7, which is why most of the time it happens to work fine. The following patch fixes it by detecting the cases where there are self-references after a pseudo has been used at least once outside of the self-references or just as REG_P SET_DEST and in that case only increases the count for the pseudo, making it not trivially deletable. 2025-04-08 Eric Botcazou <botcazou@adacore.com> Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/119594 * cse.cc (count_reg_usage): Count even x == dest regs if they have non-zero counts already and incr is positive. * gcc.dg/pr119594.c: New test.