aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-04-06c++: Fix up ICE when cplus_decl_attributes is called with error_mark_node ↵Jakub Jelinek2-3/+16
attributes [PR104668] cplus_decl_attributes can be called with attributes equal to error_mark_node, there are some spots in the function that test it or decl_attributes it calls starts with: if (TREE_TYPE (*node) == error_mark_node || attributes == error_mark_node) return NULL_TREE; But the recent PR104245 change broke this when processing_template_decl is true. The patch returns early for attributes error_mark_node from cplus_decl_attributes. 2022-04-06 Jakub Jelinek <jakub@redhat.com> PR c++/104668 * decl2.cc (splice_template_attributes): Return NULL if *p is error_mark_node. (cplus_decl_attributes): Return early if attributes is error_mark_node. Don't check that later. * g++.dg/cpp0x/pr104668.C: New test.
2022-04-06c++: make -Wctad-maybe-unsupported respect complain [PR105143]Patrick Palka3-1/+27
We were attempting to issue a -Wctad-maybe-unsupported warning even when complain=tf_none, which led to a crash in the first testcase below and a bogus error during overload resolution in the second testcase. PR c++/105143 gcc/cp/ChangeLog: * pt.cc (do_class_deduction): Check complain before attempting to issue a -Wctad-maybe-unsupported warning. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/nodiscard1.C: New test. * g++.dg/warn/Wctad-maybe-unsupported4.C: New test.
2022-04-06sh: Fix up __attribute__((optimize ("Os"))) handling on SH [PR105069]Jakub Jelinek1-1/+1
As mentioned in the PR, various tests on sh-elf ICE like: make check-gcc RUNTESTFLAGS="compile.exp='pr104327.c pr58332.c pr81360.c pr84425.c'" FAIL: gcc.c-torture/compile/pr104327.c -O0 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr104327.c -O0 (test for excess errors) FAIL: gcc.c-torture/compile/pr104327.c -O1 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr104327.c -O1 (test for excess errors) FAIL: gcc.c-torture/compile/pr104327.c -O2 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr104327.c -O2 (test for excess errors) FAIL: gcc.c-torture/compile/pr104327.c -O3 -g (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr104327.c -O3 -g (test for excess errors) FAIL: gcc.c-torture/compile/pr104327.c -Os (test for excess errors) FAIL: gcc.c-torture/compile/pr58332.c -O0 (test for excess errors) FAIL: gcc.c-torture/compile/pr58332.c -O1 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr58332.c -O1 (test for excess errors) FAIL: gcc.c-torture/compile/pr58332.c -O2 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr58332.c -O2 (test for excess errors) FAIL: gcc.c-torture/compile/pr58332.c -O3 -g (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr58332.c -O3 -g (test for excess errors) FAIL: gcc.c-torture/compile/pr58332.c -Os (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr58332.c -Os (test for excess errors) FAIL: gcc.c-torture/compile/pr81360.c -O0 (test for excess errors) FAIL: gcc.c-torture/compile/pr81360.c -O1 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr81360.c -O1 (test for excess errors) FAIL: gcc.c-torture/compile/pr81360.c -O2 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr81360.c -O2 (test for excess errors) FAIL: gcc.c-torture/compile/pr81360.c -O3 -g (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr81360.c -O3 -g (test for excess errors) FAIL: gcc.c-torture/compile/pr81360.c -Os (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr81360.c -Os (test for excess errors) FAIL: gcc.c-torture/compile/pr84425.c -O0 (test for excess errors) FAIL: gcc.c-torture/compile/pr84425.c -O1 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr84425.c -O1 (test for excess errors) FAIL: gcc.c-torture/compile/pr84425.c -O2 (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr84425.c -O2 (test for excess errors) FAIL: gcc.c-torture/compile/pr84425.c -O3 -g (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr84425.c -O3 -g (test for excess errors) FAIL: gcc.c-torture/compile/pr84425.c -Os (internal compiler error: 'global_options' are modified in local context) FAIL: gcc.c-torture/compile/pr84425.c -Os (test for excess errors) With the following patch, none of those tests ICE anymore, though pr104327.c still FAILs with: Excess errors: /usr/src/gcc/gcc/testsuite/gcc.c-torture/compile/pr104327.c:6:1: error: inlining failed in call to 'always_inline' 'bar': target specific option mismatch I think that would be fixable by overriding TARGET_CAN_INLINE_P hook and allowing at least for always_inline changes in sh_div_str. 2022-04-06 Jakub Jelinek <jakub@redhat.com> PR target/105069 * config/sh/sh.opt (mdiv=): Add Save.
2022-04-06--target-help: align with --help=targetMartin Liska3-3/+4
PR driver/105096 gcc/ChangeLog: * common.opt: Document properly based on what it does. * gcc.cc (display_help): Unify with what we have in common.opt. * opts.cc (common_handle_option): Do not print undocumented options.
2022-04-06rs6000/testsuite: Skip pr105140.cSegher Boessenkool1-0/+1
This test fails with error "AltiVec argument passed to unprototyped function", but the code (in rs6000.c:invalid_arg_for_unprototyped_fn, from 2005) actually tests for any vector type argument. It also does not fail on Darwin, not reflected here though. 2022-04-06 Segher Boessenkool <segher@kernel.crashing.org> gcc/testsuite/ PR target/105147 * gcc.dg/pr105140.c: Skip for powerpc*-*-*.
2022-04-06c++: -Wunused-value and array init [PR104702]Jason Merrill2-3/+18
Here, because of problems with the new warning-control code and expressions that change location, the suppress_warning on the INDIRECT_REF didn't work. Those problems still need to be worked out, but it's simple to avoid needing to use suppress_warning in the first place by using a reference instead. PR c++/104702 gcc/cp/ChangeLog: * init.cc (build_vec_init): Use a reference for the result. gcc/testsuite/ChangeLog: * g++.dg/warn/Wunused-19.C: New test.
2022-04-06mips: Fix C++14 vs. C++17 ABI incompatibility on mips64Xi Ruoyao2-5/+73
This fixes tmpdir-g++.dg-struct-layout-1/{t032,t059} failure. Clang++ also ignores C++17 empty bases in return values. gcc/ * config/mips/mips.cc (mips_fpr_return_fields): Ignore cxx17_empty_base_field_p fields and set an indicator. (mips_return_in_msb): Adjust for mips_fpr_return_fields change. (mips_function_value_1): Inform psABI change about C++17 empty bases. gcc/testsuite/ * g++.target/mips/cxx17_empty_base.C: New test.
2022-04-06gimple.cc: Follow-up to adjust gimple_call_builtin_p and ↵Jakub Jelinek1-25/+11
gimple_call_combined_fn [PR105150] On Wed, Apr 06, 2022 at 09:41:44AM +0100, Richard Sandiford wrote: > But it seems like the magic incantation to detect “real” built-in > function calls is getting longer and longer. Can we not abstract this > in a single place rather than have to repeat the same long sequence in > multiple places? I've already committed it, so it can be only dealt with an incremental patch. Here is a patch that adjusts instead gimple_builtin_call_types_compatible_p, after the assert: if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL) if (tree decl = builtin_decl_explicit (DECL_FUNCTION_CODE (fndecl))) fndecl = decl; but we then lose the theoretical possibility of comparing against the actual user declaration. Though I guess in the gimple-fold.cc gimple-low.cc gimple-match-head.cc calls to that function we also want this rather than what they do currently. 2022-04-06 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/105150 * gimple.cc (gimple_builtin_call_types_compatible_p): Use builtin_decl_explicit here... (gimple_call_builtin_p, gimple_call_combined_fn): ... rather than here.
2022-04-06c++: -Wshadow=compatible-local type vs var [PR100608]Jason Merrill2-0/+14
The patch for PR92024 changed -Wshadow=compatible-local to warn if either new or old decl was a type, but the rationale only talked about the case where both are types. If only one is, they aren't compatible. PR c++/100608 gcc/cp/ChangeLog: * name-lookup.cc (check_local_shadow): Use -Wshadow=local if exactly one of 'old' and 'decl' is a type. gcc/testsuite/ChangeLog: * g++.dg/warn/Wshadow-compatible-local-3.C: New test.
2022-04-06tree-optimization/105173 - fix insertion logic in reassocRichard Biener2-12/+41
The find_insert_point logic around deciding whether to insert before or after the found insertion point does not handle the case of _12 = ..;, _12, 1.0 well. The following puts the logic into find_insert_point itself instead. 2022-04-06 Richard Biener <rguenther@suse.de> PR tree-optimization/105173 * tree-ssa-reassoc.cc (find_insert_point): Get extra insert_before output argument and compute it. (insert_stmt_before_use): Adjust. (rewrite_expr_tree): Likewise. * gcc.dg/pr105173.c: New testcase.
2022-04-06ipa/105166 - avoid modref queries with mismatching typesRichard Biener2-1/+12
We should avoid mismatched argument values (integers for pointers) when doing modref queries. This is the third place to guard. 2022-04-06 Richard Biener <rguenther@suse.de> PR ipa/105166 * ipa-modref-tree.cc (modref_access_node::get_ao_ref ): Bail out for non-pointer arguments. * gcc.dg/torture/pr105166.c: New testcase.
2022-04-06tree-optimization/105163 - abnormal SSA coalescing and reassocRichard Biener2-12/+30
The negate propagation optimizations in reassoc did not look out for abnormal SSA coalescing issues. The following fixes that. 2022-04-06 Richard Biener <rguenther@suse.de> PR tree-optimization/105163 * tree-ssa-reassoc.cc (repropagate_negates): Avoid propagating negated abnormals. * gcc.dg/torture/pr105163.c: New testcase.
2022-04-06gimple.cc: Adjust gimple_call_builtin_p and gimple_call_combined_fn [PR105150]Jakub Jelinek2-13/+25
On Tue, Apr 05, 2022 at 11:28:53AM +0200, Richard Biener wrote: > > In GIMPLE, we call: > > && gimple_builtin_call_types_compatible_p (stmt, fndecl) > > but that is insufficient, that verifies whether the arguments passed to > > GIMPLE_CALL match the fndecl argument types. But that fndecl may very well > > be the user declaration, so doesn't have to match exactly the builtin > > as predeclared by builtins.def etc. (though, there is the cotcha that say > > for FILE * we just use void * etc.). So e.g. in tree-ssa-strlen.cc > > we use additional: > > tree callee = gimple_call_fndecl (stmt); > > tree decl = builtin_decl_explicit (DECL_FUNCTION_CODE (callee)); > > if (decl > > && decl != callee > > && !gimple_builtin_call_types_compatible_p (stmt, decl)) > > return false; > > Yeah, I think we should use that (and only that) function decl > in get_call_combined_fn and gimple_call_combined_fn until the > frontend stops slapping wrong BUILT_IN_* on random decls. So, as a preparation step, this patch adjusts gimple_call_builtin_p and gimple_call_combined_fn so that they check argument types against the builtin_decl_explicit TYPE_ARG_TYPES rather than against the actual used fndecl. 2022-04-06 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/105150 * gimple.cc (gimple_call_builtin_p, gimple_call_combined_fn): For BUILT_IN_NORMAL calls, call gimple_builtin_call_types_compatible_p preferrably on builtin_decl_explicit decl rather than fndecl. * tree-ssa-strlen.cc (valid_builtin_call): Don't call gimple_builtin_call_types_compatible_p here.
2022-04-06vect: Fix mask handling for SLP gathers [PR103761]Richard Sandiford3-13/+50
check_load_store_for_partial_vectors predates the support for SLP gathers and so had a hard-coded assumption that gathers/scatters (and load/stores lanes) would be non-SLP operations. This patch passes down the slp_node so that the routine can work out how many vectors are needed in both the SLP and non-SLP cases. gcc/ PR tree-optimization/103761 * tree-vect-stmts.cc (check_load_store_for_partial_vectors): Replace the ncopies parameter with an slp_node parameter. Calculate the number of vectors based on it and vectype. Rename lambda to group_memory_nvectors. (vectorizable_store, vectorizable_load): Update calls accordingly. gcc/testsuite/ PR tree-optimization/103761 * gcc.dg/vect/pr103761.c: New test. * gcc.target/aarch64/sve/pr103761.c: Likewise.
2022-04-06docs: Document new param x86-stlf-window-ninsns.Martin Liska1-0/+8
gcc/ChangeLog: * doc/invoke.texi: Document it.
2022-04-06tree-optimization/105148 - fix IVOPTs recording usesRichard Biener2-2/+24
The following fixes recording uses in ARRAY_REFs with non-constant element size or low bound. 2022-04-05 Richard Biener <rguenther@suse.de> PR tree-optimization/105148 * tree-ssa-loop-ivopts.cc (idx_record_use): Walk raw operands 2 and 3 of ARRAY_REFs. * gcc.dg/torture/pr105148.c: New testcase.
2022-04-06Support pandn for V1TI mode (i.e. *andnotv1ti3).Roger Sayle2-5/+19
This simple patch allows the i386 backend to generate pandn instructions for V1TI mode. Currently, the testcase: typedef unsigned __int128 v1ti __attribute__ ((__vector_size__ (16))); v1ti andnot1(v1ti x, v1ti y) { return ~x & y; } generates with -O2 pcmpeqd %xmm2, %xmm2 pxor %xmm2, %xmm0 pand %xmm1, %xmm0 ret with this patch, we now generate: pandn %xmm1, %xmm0 ret It turns out that there are currently three (near) duplicates of the logic for andn/pandn/vandn/vpandn in i386/sse.md: one for floating point vectors (MODEF), one for integer vectors (VI) and a third for TFmode. Rather than introduce a fourth copy, this patch introduces a new mode iterator to share/reuse the TFmode define_insn to also handle V1TI. 2022-04-06 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/i386/sse.md (ANDNOT_MODE): New mode iterator for TF and V1TI. (*andnottf3): Replace with... (*andnot<mode>3): New define_insn using ANDNOT_MODE. gcc/testsuite/ChangeLog * gcc.target/i386/sse2-v1ti-andnot.c: New test case.
2022-04-06tree-optimization/105142 - wrong code with maybe_fold_{and,or}_comparisonsRichard Biener4-45/+102
The following avoids expanding definitions in regions conditionally executed under the condition A when simplifying A && B or A || B. This is done by passing down the basic-block of the outer condition to maybe_fold_{and,or}_comparisons, through the various helpers in gimple-fold.cc that might call back to maybe_fold_{and,or}_comparisons and ultimatively to maybe_fold_comparisons_from_match_pd where the fix is to provide a custom valueization hook to gimple_match_op::resimplify that avoids looking at definitions that do not dominate the outer block. For the testcase this avoids combining a stmt that invokes undefined integer overflow when the outer condition is false but it also aovids combining stmts with range information that is derived from the outer condition. The new parameter to maybe_fold_{and,or}_comparisons is defaulted to nullptr and I only adjusted the if-combine to pass down the outer block. I think other callers like tree-if-conv have the same issue but it's not straight-forward as to what to do there. 2022-04-05 Richard Biener <rguenther@suse.de> PR tree-optimization/105142 * gimple-fold.h (maybe_fold_and_comparisons): Add defaulted basic-block parameter. (maybe_fold_or_comparisons): Likewise. * gimple-fold.cc (follow_outer_ssa_edges): New. (maybe_fold_comparisons_from_match_pd): Use follow_outer_ssa_edges when an outer condition basic-block is specified. (and_comparisons_1, and_var_with_comparison, and_var_with_comparison_1, or_comparisons_1, or_var_with_comparison, or_var_with_comparison_1): Receive and pass down the outer condition basic-block. * tree-ssa-ifcombine.cc (ifcombine_ifandif): Pass down the basic-block of the outer condition. * g++.dg/torture/pr105142.C: New testcase.
2022-04-06testsuite/105122 - adjust testcases after memcpy folding changesRichard Biener3-3/+5
After r12-7931 we again honor MOVE_MAX when folding memcpy to a load/store pair. On i?86-*-* without SSE this now exposes the change done in r12-2666-g29f0e955c97da0 which adjusts MOVE_MAX from 16 to 4 on those targets. This makes adjusting testcases necessary that assume that we transform memcpy to load/store pairs on GIMPLE for sizes larger or equal to 8. 2022-04-04 Richard Biener <rguenther@suse.de> PR testsuite/105122 * gcc.dg/memcpy-6.c: Adjust. * gcc.dg/strlenopt-73.c: Likewise. * gcc.dg/strlenopt-80.c: Likewise.
2022-04-05rs6000: Support UN[GL][ET] in rs6000_maybe_emit_maxc_minc [PR105002]Kewen Lin1-1/+20
Commit r12-7687 exposed one miss optimization chance in function rs6000_maybe_emit_maxc_minc, for now it only considers comparison codes GE/GT/LE/LT, but it can support more variants with codes UNLT/UNLE/UNGT/UNGE by reversing them into the equivalent ones with GE/GT/LE/LT. gcc/ChangeLog: PR target/105002 * config/rs6000/rs6000.cc (rs6000_maybe_emit_maxc_minc): Support more comparison codes UNLT/UNLE/UNGT/UNGE.
2022-04-06Daily bump.GCC Administrator6-1/+217
2022-04-05Document that the 'access' and 'nonnull' attributes are independentDavid Malcolm1-0/+8
gcc/ChangeLog: * doc/extend.texi (Common Function Attributes): Document that 'access' does not imply 'nonnull'. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-04-05Update gcc .po filesJoseph Myers19-129887/+134946
* be.po, da.po, de.po, el.po, es.po, fi.po, fr.po, hr.po, id.po, ja.po, nl.po, ru.po, sr.po, sv.po, tr.po, uk.po, vi.po, zh_CN.po, zh_TW.po: Update.
2022-04-05Fortran: Fix clause splitting for OMP masked taskloop directiveSandra Loosemore2-1/+21
This patch fixes an obvious coding goof that caused all clauses for the combined OMP masked taskloop directive to be discarded. gcc/fortran/ * trans-openmp.cc (gfc_split_omp_clauses): Fix mask for EXEC_OMP_MASKED_TASKLOOP. gcc/testsuite/ * gfortran.dg/gomp/masked-taskloop.f90: New.
2022-04-05i386: Fix movv2qi_internal xmm reg to xmm reg move for AVX512FP16 [PR105139]Uros Bizjak2-1/+18
2022-04-05 Uroš Bizjak <ubizjak@gmail.com> gcc/ChangeLog: PR target/105139 * config/i386/mmx.md (*movv2qi_internal): Change insn mode of alternative 5 to HF for TARGET_AVX512FP16. gcc/testsuite/ChangeLog: PR target/105139 * gcc.target/i386/pr105139.c: New test.
2022-04-05Fortran: improve error recovery for invalid coarray function declarationsHarald Anlauf2-3/+21
gcc/fortran/ChangeLog: PR fortran/104210 * arith.cc (eval_intrinsic): Avoid NULL pointer dereference. (gfc_zero_size_array): Likewise. gcc/testsuite/ChangeLog: PR fortran/104210 * gfortran.dg/pr104210.f90: New test.
2022-04-05Fortran: a RECURSIVE procedure cannot be an INTRINSICHarald Anlauf2-0/+15
gcc/fortran/ChangeLog: PR fortran/105138 * intrinsic.cc (gfc_is_intrinsic): When a symbol refers to a RECURSIVE procedure, it cannot be an INTRINSIC. gcc/testsuite/ChangeLog: PR fortran/105138 * gfortran.dg/recursive_reference_3.f90: New test. Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
2022-04-05aarch64: Stop +mops clobbering variable valuesRichard Sandiford3-35/+171
The mops cpy* patterns take three registers: a destination address, a source address, and a size. The patterns clobber all three registers as part of the operation. The set* patterns take a destination address, a size, and a store value, and they clobber the first two registers as part of the operation. However, the associated expanders would try to use existing source, destination and size registers where possible. Any variables in those registers could therefore change unexpectedly. For example: void copy1 (int *x, int *y, long z, int **res) { __builtin_memcpy (x, y, z); *res = x; } generated: cpyfp [x0]!, [x1]!, x2! cpyfm [x0]!, [x1]!, x2! cpyfe [x0]!, [x1]!, x2! str x0, [x3] ret which stores the incremented x at *res. gcc/ * config/aarch64/aarch64.md (aarch64_cpymemdi): Turn into a define_expand and turn operands 0 and 1 from REGs to MEMs. (*aarch64_cpymemdi): New pattern. (aarch64_setmemdi): Turn into a define_expand and turn operand 0 from a REG to a MEM. (*aarch64_setmemdi): New pattern. * config/aarch64/aarch64.cc (aarch64_expand_cpymem_mops): Use copy_to_mode_reg on all three registers. Replace the original MEM addresses rather than creating wild reads and writes. (aarch64_expand_setmem_mops): Likewise for the size and for the destination memory and address. gcc/testsuite/ * gcc.target/aarch64/mops_4.c: New test.
2022-04-05aarch64: Fix -fpack-struct + <arm_neon.h> [PR103147]Richard Sandiford24-25/+382
This PR is about -fpack-struct causing a crash when <arm_neon.h> is included. The new register_tuple_type code was expecting a normal unpacked structure layout instead of a packed one. For SVE we got around this by temporarily suppressing -fpack-struct, so that the tuple types always have their normal ABI. However: (a) The SVE ACLE tuple types are defined to be abstract. The fact that GCC uses structures is an internal implementation detail. (b) In contrast, the ACLE explicitly defines the Advanced SIMD tuple types to be particular structures. (c) Clang and previous versions of GCC are consistent in applying -fpack-struct to these tuple structures. This patch therefore honours -fpack-struct and -fpack-struct=. It also adds tests for some other combinations, such as -mgeneral-regs-only and -fpack-struct -mstrict-align. gcc/ PR target/103147 * config/aarch64/aarch64-protos.h (aarch64_simd_switcher): New class. * config/aarch64/aarch64-sve-builtins.h (sve_switcher): Inherit from aarch64_simd_switcher. * config/aarch64/aarch64-builtins.cc (aarch64_simd_tuple_modes): New variable. (aarch64_lookup_simd_builtin_type): Use it instead of TYPE_MODE. (register_tuple_type): Add more asserts. Expect the alignment of the structure to be subject to flag_pack_struct and maximum_field_alignment. Set aarch64_simd_tuple_modes. (aarch64_simd_switcher::aarch64_simd_switcher): New function. (aarch64_simd_switcher::~aarch64_simd_switcher): Likewise. (handle_arm_neon_h): Hold an aarch64_simd_switcher throughout. (aarch64_general_init_builtins): Hold an aarch64_simd_switcher while calling aarch64_init_simd_builtins. * config/aarch64/aarch64-sve-builtins.cc (sve_switcher::sve_switcher) (sve_switcher::~sve_switcher): Remove code now performed by aarch64_simd_switcher. gcc/testsuite/ PR target/103147 * gcc.target/aarch64/pr103147-1.c: New test. * gcc.target/aarch64/pr103147-2.c: Likewise. * gcc.target/aarch64/pr103147-3.c: Likewise. * gcc.target/aarch64/pr103147-4.c: Likewise. * gcc.target/aarch64/pr103147-5.c: Likewise. * gcc.target/aarch64/pr103147-6.c: Likewise. * gcc.target/aarch64/pr103147-7.c: Likewise. * gcc.target/aarch64/pr103147-8.c: Likewise. * gcc.target/aarch64/pr103147-9.c: Likewise. * gcc.target/aarch64/pr103147-10.c: Likewise. * g++.target/aarch64/pr103147-1.C: Likewise. * g++.target/aarch64/pr103147-2.C: Likewise. * g++.target/aarch64/pr103147-3.C: Likewise. * g++.target/aarch64/pr103147-4.C: Likewise. * g++.target/aarch64/pr103147-5.C: Likewise. * g++.target/aarch64/pr103147-6.C: Likewise. * g++.target/aarch64/pr103147-7.C: Likewise. * g++.target/aarch64/pr103147-8.C: Likewise. * g++.target/aarch64/pr103147-9.C: Likewise. * g++.target/aarch64/pr103147-10.C: Likewise.
2022-04-05aarch64: Use error_n for plural text [PR104897]Richard Sandiford1-6/+10
Use error_n rather than error_at for “%d vectors”, so that translators can pick different translations based on the number (2 vs more than 2, etc.) gcc/ PR target/104897 * config/aarch64/aarch64-sve-builtins.cc (function_resolver::infer_vector_or_tuple_type): Use error_n for "%d vectors" messages.
2022-04-05c++: alias template equivalence and CTAD [PR103852]Jason Merrill2-6/+23
I had been thinking about DR1286 "equivalence" as meaning generally interchangeable, but looking back at the proposed resolution in the context of this PR, I see that it's just about use as a template argument. So let's give a pedwarn if we look through a renaming alias. PR c++/103852 DR 1286 gcc/cp/ChangeLog: * pt.cc (do_class_deduction): Pedwarn for renaming alias in C++17. gcc/testsuite/ChangeLog: * g++.dg/cpp1z/class-deduction-alias1.C: Expect warning.
2022-04-05c++: elaborated-type-spec in requires-expr [PR101677]Jason Merrill4-4/+21
We were failing to declare class S in the global namespace because we were treating the requires-expression parameter scope as a normal block scope, so the implicit declaration went there. It seems to me that the requires parameter scope is more like a function parameter scope (not least in the use of the word "parameter"), so let's change the scope kind. But then we need to adjust the prohibition on placeholders declaring implicit template parameters. PR c++/101677 gcc/cp/ChangeLog: * name-lookup.h (struct cp_binding_level): Add requires_expression bit-field. * parser.cc (cp_parser_requires_expression): Set it. (synthesize_implicit_template_parm): Check it. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-pr67178.C: Adjust error. * g++.dg/cpp2a/concepts-requires28.C: New test.
2022-04-05c++: adjust testcaseJason Merrill1-2/+2
This test was failing with -std=c++23 -fimplicit-constexpr (not tested by default) due to different wording in the error message. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/noexcept34.C: Allow more wording variation.
2022-04-05OpenMP: Fix nested use_device_ptrChung-Lin Tang1-1/+1
This patch fixes a bug in lower_omp_target, where for Fortran arrays, the expanded sender assignment is wrongly using the variable in the current ctx, instead of the one looked-up outside, which is causing use_device_ptr/addr to fail to work when used inside an omp-parallel (where the omp child_fn is split away from the original). The fix is inside omp-low.cc, though because the omp_array_data langhook is used only by Fortran, this is essentially Fortran-specific. 2022-04-05 Chung-Lin Tang <cltang@codesourcery.com> gcc/ChangeLog: * omp-low.cc (lower_omp_target): Use outer context looked-up 'var' as argument to lang_hooks.decls.omp_array_data, instead of 'ovar' from current clause. libgomp/ChangeLog: * testsuite/libgomp.fortran/use_device_ptr-4.f90: New testcase.
2022-04-05c/105151 - move early walloca passRichard Biener2-1/+9
When the walloca pass gained support for ranger the early pass was not moved to a place where SSA form is available but remained in the lowering pipeline. For the testcase in this bug this is a problem because for errorneous input we still run the lowering pipeline but here have broken SSA form which ranger does not like. The solution is to rectify the mistake with using ranger without SSA form and move the pass which solves both issues. 2022-04-05 Richard Biener <rguenther@suse.de> PR c/105151 * passes.def (pass_walloca): Move early instance into pass_build_ssa_passes to make SSA form available. * gcc.dg/gimplefe-error-14.c: New testcase.
2022-04-05testsuite/s390: Adapt test expections.Robin Dapp4-8/+24
Some tests expect a convert instruction but nowadays (r12-4475-g247c407c83f001) the conversion is already done at compile time. This results in a literal-pool load. Change the tests accordingly. gcc/testsuite/ChangeLog: * gcc.target/s390/zvector/vec-double-compile.c: Expect vl instead of vc*. * gcc.target/s390/zvector/vec-float-compile.c: Dito. * gcc.target/s390/zvector/vec-signed-compile.c: Dito. * gcc.target/s390/zvector/vec-unsigned-compile.c: Dito.
2022-04-05testsuite/s390: Change nle -> h in ifcvt tests.Robin Dapp3-6/+6
We have been emitting the "higher" variantes instead of the "not less or equal" ones for a while. Change the test expectations accordingly. gcc/testsuite/ChangeLog: * gcc.target/s390/ifcvt-two-insns-bool.c: Change nle to h. * gcc.target/s390/ifcvt-two-insns-int.c: Dito. * gcc.target/s390/ifcvt-two-insns-long.c: Dito.
2022-04-05testsuite: Add -fno-tree-loop-distribute-patterns.Robin Dapp1-1/+3
In gcc.dg/Wuse-after-free-2.c we try to detect a use-after-free. The test's while loop is converted into a rawmemchr builtin making it impossible to determine that the pointers *p and *q are related. Therefore, disable the tree loop distribute patterns pass for this test. gcc/testsuite/ChangeLog: * gcc.dg/Wuse-after-free-2.c: Add -fno-tree-loop-distribute-patterns in order to avoid rawmemchr.
2022-04-05Split vector load from parm_del to elemental loads to avoid STLF stalls.liuhongt5-0/+103
Since cfg is freed before machine_reorg, just do a rough calculation of the window according to the layout. Also according to an experiment on CLX, set window size to 64. Currently only handle V2DFmode load since it doesn't need any scratch registers, and it's sufficient to recover cray performance for -O2 compared to GCC11. gcc/ChangeLog: PR target/101908 * config/i386/i386.cc (ix86_split_stlf_stall_load): New function (ix86_reorg): Call ix86_split_stlf_stall_load. * config/i386/i386.opt (-param=x86-stlf-window-ninsns=): New param. gcc/testsuite/ChangeLog: * gcc.target/i386/pr101908-1.c: New test. * gcc.target/i386/pr101908-2.c: New test. * gcc.target/i386/pr101908-3.c: New test.
2022-04-05try multi-reg dest in default_zero_call_used_regsAlexandre Oliva3-11/+86
When the mode of regno_reg_rtx is not hard_regno_mode_ok for the target, try grouping the register with subsequent ones. This enables s16 to s31 and their hidden pairs to be zeroed with the default logic on some arm variants. for gcc/ChangeLog * targhooks.cc (default_zero_call_used_regs): Attempt to group regs that the target refuses to use in their natural modes. (zcur_select_mode_rtx): New. * regs.h (struct target_regs): Add x_hard_regno_max_nregs. (hard_regno_max_nregs): Define. * reginfo.cc (init_reg_modes_target): Set hard_regno_max_nregs.
2022-04-05Daily bump.GCC Administrator5-1/+73
2022-04-04Update gcc sv.poJoseph Myers1-480/+307
* sv.po: Update.
2022-04-04doc: Fix typos in match.pd documentationAlex Coplan1-18/+18
This patch fixes some spelling and grammar issues in the match.pd documentation. gcc/ChangeLog: * doc/match-and-simplify.texi: Fix typos.
2022-04-04c++: repeated friend template [PR101894]Jason Merrill2-0/+12
Since olddecl isn't a definition, it doesn't get DECL_FRIEND_CONTEXT, so we need to copy it from newdecl when we merge the declarations. PR c++/101894 gcc/cp/ChangeLog: * decl.cc (duplicate_decls): Copy DECL_FRIEND_CONTEXT. gcc/testsuite/ChangeLog: * g++.dg/lookup/friend22.C: New test.
2022-04-04c++: alias-tmpl equivalence and default targs [PR103852]Jason Merrill3-8/+38
The suggested resolution for CWG1286, which we implemented, ignores default template arguments, but this PR is an example of why that doesn't make sense: the templates aren't functionally equivalent. PR c++/103852 DR 1286 gcc/cp/ChangeLog: * pt.cc (get_underlying_template): Compare default template args. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/alias-decl-dr1286a.C: Default args now matter. * g++.dg/cpp1z/class-deduction-alias1.C: New test.
2022-04-04aarch64: Restrict aarch64-tune.md regeneration to --enable-maintainer-mode ↵Jakub Jelinek1-0/+10
[PR105144] Normally updates to the source directory files are guarded with --enable-maintainer-mode, e.g. we don't regenerate configure, config.h, Makefile.in in directories that use automake etc. unless gcc is configured that way. Otherwise the source tree can't be e.g. stored on a read-only filesystem etc. In gcc/Makefile.in we use @MAINT@ for that but that works because gcc/Makefile is generated by configure. In config/*/t-* files we need to check $(ENABLE_MAINTAINER_RULES): # The following provides the variable ENABLE_MAINTAINER_RULES that can # be used in language Make-lang.in makefile fragments to enable # maintainer rules. So, ENABLE_MAINTAINER_RULES is 'true' in # maintainer mode, and '' otherwise. @MAINT@ ENABLE_MAINTAINER_RULES = true On Mon, Apr 04, 2022 at 11:10:14AM +0100, Richard Sandiford wrote: > I guess the risk is that it will become even easier to forget > to commit an updated aarch64-tune.md. Perhaps we should have a > non-maintainer rule to build aarch64-tune.md locally and check it > against the source-directory version, and fail the build if there's > a mismatch. Or maybe we should just generate aarch64-tune.md in the > build directory and remove the source directory version. I've tried if aarch64-tune.md will be read from the build dir, but it is not. The gen* files can use -I options to add additional directories, but they don't use them. Here is a variant patch which will complain and fail if there is a change and --enable-maintainer-mode is not enabled. 2022-04-04 Jakub Jelinek <jakub@redhat.com> PR target/105144 * config/aarch64/t-aarch64 (s-aarch64-tune-md): Do move-if-change only if configured with --enable-maintainer-mode, otherwise compare tmp-aarch64-tune.md with $(srcdir)/config/aarch64/aarch64-tune.md and if they differ, emit a message and fail.
2022-04-04aarch64: Fix aarch64-tune.md (re)generation [PR105144]Jakub Jelinek2-1/+3
As I wrote in the PR, our Fedora trunk gcc builds likely after r12-7842 change are now failing (lto1 crashes). What happens is that when one bootstraps into an empty build directory (or set of them), mddeps.mk doesn't exist yet and so Makefile doesn't include it. When building from an empty dir, that is usually not a big issue, it is enough when various build directory files depend on just $(srcdir)/config/aarch64/aarch64.md, those files don't exist and aarch64.md does, so they are built, so is mddeps.mk. But because the other dependencies aren't there (in particular $(srcdir)/config/aarch64/aarch64-tune.md ), the s-aarch64-tune-md rule isn't invoked to regenerate that file and the r12-7842 commit reordered aarch64-cores.def entries but didn't commit regenerated aarch64-tune.md. Because it is just reordering in aarch64-tune.md, it actually doesn't matter and bootstraps succeeds. But then during make install, mddeps.mk exists already in gcc/ directory, it sees that aarch64-cores.def is newer than aarch64-tune.md (unless gen_update is used, that just touches aarch64-tune.md to make sure it is newer) and regenerates it and as it is different, make install rebuilds a large subset of the *.o files, but this time with the system g++ rather than previous stage one. And during lto linking of it there are differences in LTO bytecode between the compilers and we crash. The following patch fixes that by regenerating aarch64-tune.md (what was forgotten in r12-7842) and by adding a dependency from s-mddeps to s-aarch64-tune-md, which makes sure that even when mddeps.mk doesn't exist yet make sees the dependency and regenerates aarch64-tune.md if needed. 2022-04-04 Jakub Jelinek <jakub@redhat.com> PR target/105144 * config/aarch64/t-aarch64 (s-mddeps): Depend on s-aarch64-tune-md. * config/aarch64/aarch64-tune.md: Regenerated.
2022-04-04tree-optimization/105132 - add missing checking in vectorizable_operationRichard Biener2-0/+18
The following adds missing verification that the input vectors have the same number of elements for vectorizable_operation. 2022-04-04 Richard Biener <rguenther@suse.de> PR tree-optimization/105132 * tree-vect-stmts.cc (vectorizable_operation): Check that the input vectors have the same number of elements. * gcc.dg/torture/pr105132.c: New testcase.
2022-04-04middle-end/105140 - fix bogus recursion in fold_convertible_pRichard Biener2-2/+20
fold_convertible_p expects an operand and a type to convert to but recurses with two vector component types. Fixed by allowing types instead of an operand as well. 2022-04-04 Richard Biener <rguenther@suse.de> PR middle-end/105140 * fold-const.cc (fold_convertible_p): Allow a TYPE_P arg. * gcc.dg/pr105140.c: New testcase.
2022-04-04d: Compile simd_ctfe.d only on avx_runtime or vect_sizes_16B_8B targetsIain Buclaw1-1/+2
PR d/104740 gcc/testsuite/ChangeLog: * gdc.dg/simd_ctfe.d: Compile with target avx_runtime or vect_sizes_16B_8B.