aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-03-12Add 'gcc/tree.cc:user_omp_clause_code_name' [PR65095]Thomas Schwinge6-38/+41
Re PR65095 "Adapt OpenMP diagnostic messages for OpenACC", move C/C++ front end 'gcc/c-family/c-omp.cc:c_omp_map_clause_name' to generic 'gcc/tree.cc:user_omp_clause_code_name' . No functional change. PR other/65095 gcc/ * tree-core.h (user_omp_claus_code_name): Declare function. * tree.cc (user_omp_clause_code_name): New function. gcc/c/ * c-typeck.cc (handle_omp_array_sections_1) (c_oacc_check_attachments): Call 'user_omp_clause_code_name' instead of 'c_omp_map_clause_name'. gcc/cp/ * semantics.cc (handle_omp_array_sections_1) (cp_oacc_check_attachments): Call 'user_omp_clause_code_name' instead of 'c_omp_map_clause_name'. gcc/c-family/ * c-common.h (c_omp_map_clause_name): Remove. * c-omp.cc (c_omp_map_clause_name): Remove.
2022-03-12PR middle-end/98420: Don't fold x - x to 0.0 with -frounding-mathRoger Sayle2-1/+12
This patch addresses PR middle-end/98420, which is inappropriate constant folding of x - x to 0.0 (in match.pd) when -frounding-math is specified. Specifically, x - x may be -0.0 with FE_DOWNWARD as the rounding mode. To summarize, the desired IEEE behaviour, x - x for floating point x, (1) can't be folded to 0.0 by default, due to the possibility of NaN or Inf (2) can be folded to 0.0 with -ffinite-math-only (3) can't be folded to 0.0 with -ffinite-math-only -frounding-math (4) can be folded with -ffinite-math-only -frounding-math -fno-signed-zeros 2022-03-12 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog PR middle-end/98420 * match.pd (minus @0 @0): Additional checks for -fno-rounding-math (the defaut) or -fno-signed-zeros. gcc/testsuite/ChangeLog PR middle-end/98420 * gcc.dg/pr98420.c: New test case.
2022-03-11Fix DImode to TImode sign extend issueMichael Meissner1-1/+1
PR target/104868 had had an issue where my code that updated the DImode to TImode sign extension for power10 failed. In looking at the failure message, the reason is when extendditi2 tries to split the insn, it generates an insn that does not satisfy its constraints: (set (reg:V2DI 65 1) (vec_duplicate:V2DI (reg:DI 0))) The reason is vsx_splat_v2di does not allow GPR register 0 when the will be generating a mtvsrdd instruction. In the definition of the mtvsrdd instruction, if the RA register is 0, it means clear the upper 64 bits of the vector instead of moving register GPR 0 to those bits. When I wrote the extendditi2 pattern, I forgot that mtvsrdd had that behavior so I used a 'r' constraint instead of 'b'. In the rare case where the value is in GPR register 0, this split will fail. This patch uses the right constraint for extendditi2. 2022-03-11 Michael Meissner <meissner@linux.ibm.com> gcc/ PR target/104868 * config/rs6000/vsx.md (extendditi2): Use a 'b' constraint when moving from a GPR register to an Altivec register.
2022-03-12Daily bump.GCC Administrator5-1/+94
2022-03-11d: Cache generated import declarations in a hash_mapIain Buclaw1-36/+41
Originally, these were cached in the front-end AST node field `isym'. However, this field is due to be removed in the future. gcc/d/ChangeLog: * imports.cc (imported_decls): Define. (class ImportVisitor): Add result_ field. (ImportVisitor::result): New method. (ImportVisitor::visit (Module *)): Store decl to result_. (ImportVisitor::visit (Import *)): Likewise. (ImportVisitor::visit (AliasDeclaration *)): Don't cache decl in front-end AST node. (ImportVisitor::visit (OverDeclaration *)): Likewise. (ImportVisitor::visit (FuncDeclaration *)): Likewise. (ImportVisitor::visit (Declaration *)): Likewise. (build_import_decl): Use imported_decls to cache and lookup built declarations.
2022-03-11d: Fix mistakes in strings to be translated [PR104552]Iain Buclaw1-2/+2
Address comments made in PR104552 about documented D language options. gcc/d/ChangeLog: PR translation/104552 * lang.opt (fdump-cxx-spec=): Fix typo in argument handle. (fpreview=fixaliasthis): Quote `alias this' as code.
2022-03-11PR tree-optimization/98335: New peephole2 xorl;movb -> movzblRoger Sayle3-0/+80
This patch is the backend piece of my proposed fix to PR tree-opt/98335, to allow C++ partial struct initialization to be as efficient/optimized as full struct initialization. With the middle-end patch just posted to gcc-patches, the test case in the PR compiles on x86_64-pc-linux-gnu with -O2 to: xorl %eax, %eax movb c(%rip), %al ret with this additional peephole2 (actually four peephole2s): movzbl c(%rip), %eax ret 2022-03-11 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog PR tree-optimization/98335 * config/i386/i386.md (peephole2): Eliminate redundant insv. Combine movl followed by movb. Transform xorl followed by a suitable movb or movw into the equivalent movz[bw]l. gcc/testsuite/ChangeLog PR tree-optimization/98335 * g++.target/i386/pr98335.C: New test case. * gcc.target/i386/pr98335.c: New test case.
2022-03-11PR tree-optimization/98335: Improvements to DSE's compute_trims.Roger Sayle8-5/+139
This patch is the main middle-end piece of a fix for PR tree-opt/98335, which is a code-quality regression affecting mainline. The issue occurs in DSE's (dead store elimination's) compute_trims function that determines where a store to memory can be trimmed. In the testcase given in the PR, this function notices that the first byte of a DImode store is dead, and replaces the 8-byte store at (aligned) offset zero, with a 7-byte store at (unaligned) offset one. Most architectures can store a power-of-two bytes (up to a maximum) in single instruction, so writing 7 bytes requires more instructions than writing 8 bytes. This patch follows Jakub Jelinek's suggestion in comment 5, that compute_trims needs improved heuristics. On x86_64-pc-linux-gnu with -O2 the new test case in the PR goes from: movl $0, -24(%rsp) movabsq $72057594037927935, %rdx movl $0, -21(%rsp) andq -24(%rsp), %rdx movq %rdx, %rax salq $8, %rax movb c(%rip), %al ret to xorl %eax, %eax movb c(%rip), %al ret 2022-03-11 Roger Sayle <roger@nextmovesoftware.com> Richard Biener <rguenther@suse.de> gcc/ChangeLog PR tree-optimization/98335 * builtins.cc (get_object_alignment_2): Export. * builtins.h (get_object_alignment_2): Likewise. * tree-ssa-alias.cc (ao_ref_alignment): New. * tree-ssa-alias.h (ao_ref_alignment): Declare. * tree-ssa-dse.cc (compute_trims): Improve logic deciding whether to align head/tail, writing more bytes but using fewer store insns. gcc/testsuite/ChangeLog PR tree-optimization/98335 * g++.dg/pr98335.C: New test case. * gcc.dg/pr86010.c: New test case. * gcc.dg/pr86010-2.c: New test case.
2022-03-11[Committed] Update g++.dg/other/pr84964.C for ia32 (and similar) targets.Roger Sayle1-3/+3
The "sorry, unimplemented" message in the new g++.dg/other/pr84964.C is apparently dependent upon whether the target passes multi-gigabyte arguments on the stack. This tweaks the testcase to just confirm that it no longer ICEs, not the specific set of warnings/errors triggered. 2022-03-11 Roger Sayle <roger@nextmovesoftware.com> gcc/testsuite/ChangeLog PR c++/84964 * g++.dg/other/pr84964.C: Tweak test to check for the ICE, not for the (target-dependent) sorry.
2022-03-11tree-optimization/104880 - update-address-taken and cmpxchgRichard Biener2-3/+56
The following addresses optimistic non-addressable marking of an argument of __atomic_compare_exchange_n which broke when I added DECL_NOT_GIMPLE_REG_P since we cannot guarantee we can rewrite it when TREE_ADDRESSABLE is unset. Instead we have to restore TREE_ADDRESSABLE in that case. 2022-03-11 Richard Biener <rguenther@suse.de> PR tree-optimization/104880 * tree-ssa.cc (execute_update_address_taken): Remember if we optimistically made something not addressable and prepare to undo it. * g++.dg/opt/pr104880.cc: New testcase.
2022-03-11target/104762 - vectorization costs of CONSTRUCTORsRichard Biener1-6/+11
After accounting for GPR -> XMM move cost for vec_construct the base cost needs adjustments to not double-cost those. This also lowers the cost when such move is not necessary. 2022-03-11 Richard Biener <rguenther@suse.de> PR target/104762 * config/i386/i386.cc (ix86_builtin_vectorization_cost): Do not cost the first lane of SSE pieces as inserts for vec_construct.
2022-03-11Fortran: OpenMP/OpenACC avoid uninit access in size calc for mappingTobias Burnus5-9/+80
gcc/fortran/ChangeLog: * trans-openmp.cc (gfc_trans_omp_clauses, gfc_omp_finish_clause): Obtain size for mapping only if allocatable array is allocated. gcc/testsuite/ChangeLog: * gfortran.dg/goacc/array-with-dt-1.f90: Update/add comments; remove dg-warning for 'is used uninitialized'. * gfortran.dg/goacc/pr93464.f90: Likewise. * gfortran.dg/goacc/array-with-dt-1a.f90: New; copied from gfortran.dg/goacc/array-with-dt-1.f90 but run with -O0. Update dg-warning for 'may be used uninitialized'. * gfortran.dg/goacc/pr93464-2.f90: Likewise; copied from gfortran.dg/goacc/pr93464.f90.
2022-03-11Daily bump.GCC Administrator6-1/+375
2022-03-10PR c++/84964: Middle-end patch to expand_call for ICE after sorry.Roger Sayle2-0/+9
This patch resolves PR c++/84969 which is an ICE in the middle-end after emitting a "sorry, unimplemented" message, and is a regression from earlier releases of GCC. This issue is that after encountering a function call requiring an unreasonable amount of stack space, the code continues and falls foul of an assert checking that stack pointer has been correctly updated. The fix is to (locally) consider aborted function calls as "no return", which skips this downstream sanity check. 2022-03-10 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog PR c++/84964 * calls.cc (expand_call): Ignore stack adjustments after sorry. gcc/testsuite/ChangeLog PR c++/84964 * g++.dg/other/pr84964.C: New test case.
2022-03-10analyzer: fix ICE with -fanalyzer-transitivity [PR104863]David Malcolm2-0/+18
gcc/analyzer/ChangeLog: PR analyzer/104863 * constraint-manager.cc (constraint_manager::add_constraint): Refresh the EC IDs when adding constraints implied by offsets. gcc/testsuite/ChangeLog: PR analyzer/104863 * gcc.dg/analyzer/torture/pr104863.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-03-10[PR103074] LRA: Check new conflicts when splitting hard reg live range.Vladimir N. Makarov2-2/+23
Splitting hard register live range can create (artificial) conflict of the hard register with another pseudo because of simplified conflict calculation in LRA. We should check such conflict on the next assignment sub-pass and spill and reassign the pseudo if necessary. The patch implements this. gcc/ChangeLog: PR target/103074 * lra-constraints.cc (split_reg): Set up check_and_force_assignment_correctness_p when splitting hard register live range. gcc/testsuite/ChangeLog: PR target/103074 * gcc.target/i386/pr103074.c: New.
2022-03-10c++: ->template and implicit typedef [PR104608]Marek Polacek3-1/+33
Here we have a forward declaration of Parameter for which we create an implicit typedef, which is a TYPE_DECL. Then, when looking it up at template definition time, cp_parser_template_id gets (since r12-6754) this TYPE_DECL which it can't handle. This patch defers lookup for TYPE_DECLs that cp_parser_template_id can't handle, a la r12-6879. PR c++/104608 gcc/cp/ChangeLog: * parser.cc (cp_parser_template_name): Repeat lookup of TYPE_DECLs. gcc/testsuite/ChangeLog: * g++.dg/parse/template-keyword3.C: New test. * g++.dg/parse/template-keyword4.C: New test.
2022-03-10c++: Don't allow type-constraint auto(x) [PR104752]Marek Polacek3-2/+22
104752 points out that template<class T> concept C = true; auto y = C auto(1); is ill-formed as per [dcl.type.auto.deduct]: "For an explicit type conversion, T is the specified type, which shall be auto." which doesn't allow type-constraint auto. PR c++/104752 gcc/cp/ChangeLog: * semantics.cc (finish_compound_literal): Disallow auto{x} for is_constrained_auto. * typeck2.cc (build_functional_cast_1): Likewise. gcc/testsuite/ChangeLog: * g++.dg/cpp23/auto-fncast12.C: New test.
2022-03-10c++: ICE with operator delete [PR104846]Marek Polacek2-1/+9
This is an ICE-on-invalid with "auto operator delete[] (void *)" whose return type must be void. The return type is checked in coerce_delete_type but we never got there in this test, because we took the wrong path in grokdeclarator, set type to error_mark_node, ended up creating a FIELD_DECL with build_decl, and confused grokmethod by giving it a FIELD_DECL. Fixed by not taking the data member path for a FUNCTION_TYPE. PR c++/104846 gcc/cp/ChangeLog: * decl.cc (grokdeclarator): Check FUNC_OR_METHOD_TYPE_P before giving data member errors. gcc/testsuite/ChangeLog: * g++.dg/init/delete5.C: New test.
2022-03-10c++: allow variadic operator[] for C++23 [PR103460]Jakub Jelinek2-1/+22
wg21.link/p2128 removed "with exactly one parameter" from over.sub section. grok_op_properties has for that the last 2 lines in: case OVL_OP_FLAG_BINARY: if (arity != 2) { if (operator_code == ARRAY_REF && cxx_dialect >= cxx23) break; but unfortunately it isn't enough, we reject variadic operator[] earlier. The following patch accepts variadic operator[] for C++23 too. 2022-03-10 Jakub Jelinek <jakub@redhat.com> PR c++/103460 * decl.cc (grok_op_properties): Allow variadic operator[] for C++23. * g++.dg/cpp23/subscript7.C: New test.
2022-03-10analyzer: add notes to write-to-const/string from access attr [PR104793]David Malcolm14-15/+362
The previous patch extended -Wanalyzer-write-to-const -Wanalyzer-write-to-string-literal to make use of __attribute__ ((access, ....), but the results could be inscrutable. This patch adds notes to such diagnostics to give the user a reason for why the analyzer is complaining. Example output: test.c: In function 'main': test.c:15:13: warning: write to string literal [-Wanalyzer-write-to-string-literal] 15 | if (getrandom((char *)test, sizeof(buf), GRND_RANDOM)) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 'main': event 1 | | 15 | if (getrandom((char *)test, sizeof(buf), GRND_RANDOM)) | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (1) write to string literal here | test.c:3:5: note: parameter 1 of 'getrandom' marked with attribute 'access (write_only, 1, 2)' 3 | int getrandom (void *__buffer, size_t __length, | ^~~~~~~~~ Unfortunately we don't have location information for the attributes themselves, just the function declaration, and there doesn't seem to be a good way of getting at the location of the individual parameters from the middle end (the C and C++ FEs both have get_fndecl_argument_location, but the implementations are different). gcc/analyzer/ChangeLog: PR analyzer/104793 * analyzer.h (class pending_note): New forward decl. * diagnostic-manager.cc (saved_diagnostic::saved_diagnostic): Initialize m_notes. (saved_diagnostic::operator==): Compare m_notes. (saved_diagnostic::add_note): New. (saved_diagnostic::emit_any_notes): New. (diagnostic_manager::add_note): New. (diagnostic_manager::emit_saved_diagnostic): Call emit_any_notes after emitting the warning. * diagnostic-manager.h (saved_diagnostic::add_note): New decl. (saved_diagnostic::emit_any_notes): New decl. (saved_diagnostic::m_notes): New field. (diagnostic_manager::add_note): New decl. * engine.cc (impl_region_model_context::add_note): New. * exploded-graph.h (impl_region_model_context::add_note): New decl. * pending-diagnostic.h (class pending_note): New. (class pending_note_subclass): New template. * region-model.cc (class reason_attr_access): New. (check_external_function_for_access_attr): Add class annotating_ctxt and use it when checking region. (noop_region_model_context::add_note): New. * region-model.h (region_model_context::add_note): New vfunc. (noop_region_model_context::add_note): New decl. (class region_model_context_decorator): New. (class note_adding_context): New. gcc/testsuite/ChangeLog: PR analyzer/104793 * gcc.dg/analyzer/write-to-const-2.c: Add dg-message directives for expected notes. * gcc.dg/analyzer/write-to-function-1.c: Likewise. * gcc.dg/analyzer/write-to-string-literal-2.c: Likewise. * gcc.dg/analyzer/write-to-string-literal-3.c: Likewise. * gcc.dg/analyzer/write-to-string-literal-4.c: Likewise. * gcc.dg/analyzer/write-to-string-literal-5.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-03-10analyzer: check for writes to consts via access attr [PR104793]David Malcolm7-0/+244
This patch extends: -Wanalyzer-write-to-const -Wanalyzer-write-to-string-literal so that they will check for __attribute__ ((access, ....) on calls to externally-defined functions, and complain about read-only regions pointed to by arguments marked with a "write_only" or "read_write" attribute. gcc/analyzer/ChangeLog: PR analyzer/104793 * region-model.cc (region_model::check_external_function_for_access_attr): New. (region_model::handle_unrecognized_call): Call it. * region-model.h (region_model::check_external_function_for_access_attr): New decl. (region_model::handle_unrecognized_call): New decl. gcc/testsuite/ChangeLog: PR analyzer/104793 * gcc.dg/analyzer/write-to-const-2.c: New test. * gcc.dg/analyzer/write-to-function-1.c: New test. * gcc.dg/analyzer/write-to-string-literal-2.c: New test. * gcc.dg/analyzer/write-to-string-literal-3.c: New test. * gcc.dg/analyzer/write-to-string-literal-4.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-03-10analyzer: fix duplicates in check_for_tainted_size_argDavid Malcolm2-3/+8
gcc/analyzer/ChangeLog: * sm-taint.cc (taint_state_machine::check_for_tainted_size_arg): Avoid generating duplicate saved_diagnostics by only handling the rdwr_map entry for the ptrarg, not the duplicate entry for the sizarg. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/taint-size-access-attr-1.c: Add -fanalyzer-show-duplicate-count to options; verify that a duplicate was not created for the tainted size. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-03-10ipa-cp: Avoid adjusting references through self-recursion (PR 104813)Martin Jambor2-10/+42
When writing the patch that downgrades address-taken references to load references when IPA-CP can prove that all uses of the taken address ends up in loads, I unfortunately did not take into account that find_more_scalar_values_for_callers_subset now happily adds self-recursive edges to the set of callers which should be immediately redirected (originally recursion was meant to be handled as edge redirection in a second pass over the SCC). The code as it is can now decrement the referece counters too many times. This can remedied by removing self-recursive edges earlier, we already do it because of thunk expansion issues, and so this patch does exactly that. gcc/ChangeLog: 2022-03-07 Martin Jambor <mjambor@suse.cz> PR ipa/104813 * ipa-cp.cc (create_specialized_node): Move removal of self-recursive calls from callers vector before refrence adjustments. gcc/testsuite/ChangeLog: 2022-03-07 Martin Jambor <mjambor@suse.cz> PR ipa/104813 * gcc.dg/ipa/pr104813.c: New test.
2022-03-10tree-optimization/102943 - use tree form for sbr_sparse_bitmapRichard Biener1-7/+8
The following arranges to remove an indirection do the bitvector in sbr_sparse_bitmap by embedding bitmap_head instead of bitmap and using the tree form (since we only ever set/query individual aligned bit chunks). That shaves off 6 seconds from 70 seconds of the slowest 521.wrf_r LRANS unit build. 2022-03-10 Richard Biener <rguenther@suse.de> PR tree-optimization/102943 * gimple-range-cache.cc (sbr_sparse_bitmap::bitvec): Make a bitmap_head. (sbr_sparse_bitmap::sbr_sparse_bitmap): Adjust and switch to tree view. (sbr_sparse_bitmap::set_bb_range): Adjust. (sbr_sparse_bitmap::get_bb_range): Likewise.
2022-03-10ada/104861 - use target_noncanonial for Target_NameRichard Biener1-1/+2
The following arranges for s-oscons.ads to record target_noncanonical for Target_Name, matching the install directory layout and what gcc -dumpmachine says. This fixes build issues with gprbuild. 2022-03-10 Richard Biener <rguenther@suse.de> PR ada/104861 gcc/ada/ * gcc-interface/Makefile.in (target_noncanonical): Substitute. (OSCONS_CPP): Pass target_noncanonical as TARGET.
2022-03-10tree-optimization/102943 - avoid (re-)computing dominance bitmapRichard Biener1-23/+35
Currently back_propagate_equivalences tries to optimize dominance queries in a smart way but it fails to notice that when fast indexes are available the dominance query is fast (when called from DOM). It also re-computes the dominance bitmap for each equivalence recorded on an edge, which for FP are usually several. Finally it fails to use the tree bitmap view for efficiency. Overall this cuts 7 seconds of compile-time from originally 77 in the slowest LTRANS unit when building 521.wrf_r. 2022-03-10 Richard Biener <rguenther@suse.de> PR tree-optimization/102943 * tree-ssa-dom.cc (back_propagate_equivalences): Only populate the dominance bitmap if fast queries are not available. Use a tree view bitmap. (record_temporary_equivalences): Cache the dominance bitmap across all equivalences on the edge.
2022-03-10[nvptx] Use no,yes for attribute predicableTom de Vries1-20/+20
The documentation states about the predicable instruction attribute: ... This attribute must be a boolean (i.e. have exactly two elements in its list-of-values), with the possible values being no and yes. ... The nvptx port has instead: ... (define_attr "predicable" "false,true" (const_string "true")) ... Fix this by updating to: ... (define_attr "predicable" "no,yes" (const_string "yes")) ... Tested on nvptx. gcc/ChangeLog: 2022-03-08 Tom de Vries <tdevries@suse.de> PR target/104840 * config/nvptx/nvptx.md (define_attr "predicable"): Use no,yes instead of false,true.
2022-03-10[nvptx] Disable warp sync in simt regionTom de Vries3-17/+58
I ran into a hang for this code: ... #pragma omp target map(tofrom: counter_N0) #pragma omp simd for (int i = 0 ; i < 1 ; i++ ) { #pragma omp atomic update counter_N0 = counter_N0 + 1 ; } ... This has to do with the nature of -muniform-simt. It has two modes of operation: inside and outside an SIMT region. Outside an SIMT region, a warp pretends to execute a single thread, but actually executes in all threads, to keep the local registers in all threads consistent. This approach works unless the insn that is executed is a syscall or an atomic insn. In that case, the insn is predicated, such that it executes in only one thread. If the predicated insn writes a result to a register, then that register is propagated to the other threads, after which the local registers in all threads are consistent again. Inside an SIMT region, a warp executes in all threads. However, the predication and propagation for syscalls and atomic insns is also present here, because nvptx_reorg_uniform_simt works on all code. Care has been taken though to ensure that the predication and propagation is a nop. That is, inside an SIMT region: - the predicate evalutes to true for each thread, and - the propagation insn copies a register from each thread to the same thread. That works fine, until we use -mptx=6.0, and instead of using the deprecated warp propagation insn shfl, we start using shfl.sync: ... @%r33 atom.add.u32 _, [%r29], 1; shfl.sync.idx.b32 %r30, %r30, %r32, 31, 0xffffffff; ... The shfl.sync specifies a member mask indicating all threads, but given that the loop only has a single iteration, only thread 0 will execute the insn, where it will hang waiting for the other threads. Fix this by predicating the shfl.sync (and likewise, bar.warp.sync and the uniform warp check) such that it only executes outside the SIMT region. Tested on x86_64 with nvptx accelerator. gcc/ChangeLog: 2022-03-08 Tom de Vries <tdevries@suse.de> PR target/104783 * config/nvptx/nvptx.cc (nvptx_init_unisimt_predicate) (nvptx_output_unisimt_switch): Handle unisimt_outside_simt_predicate. (nvptx_get_unisimt_outside_simt_predicate): New function. (predicate_insn): New function, factored out of ... (nvptx_reorg_uniform_simt): ... here. Predicate all emitted insns. * config/nvptx/nvptx.h (struct machine_function): Add unisimt_outside_simt_predicate field. * config/nvptx/nvptx.md (define_insn "nvptx_warpsync") (define_insn "nvptx_uniform_warp_check"): Make predicable. libgomp/ChangeLog: 2022-03-10 Tom de Vries <tdevries@suse.de> * testsuite/libgomp.c/pr104783.c: New test.
2022-03-10[nvptx] Handle unused result in nvptx_unisimt_handle_setTom de Vries2-1/+25
For an example: ... #pragma omp target map(tofrom: counter_N0) #pragma omp simd for (int i = 0 ; i < 1 ; i++ ) { #pragma omp atomic update counter_N0 = counter_N0 + 1 ; } ... I noticed that the result of the atomic update (%r30) is propagated: ... @%r33 atom.add.u32 _, [%r29], 1; shfl.sync.idx.b32 %r30, %r30, %r32, 31, 0xffffffff; ... even though it is unused (which is why the bit bucket operand _ is used). Fix this by not emitting the shuffle in this case, such that we have instead: ... @%r33 atom.add.u32 _, [%r29], 1; bar.warp.sync 0xffffffff; ... Tested on nvptx. gcc/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.cc (nvptx_unisimt_handle_set): Handle unused result. gcc/testsuite/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> * gcc.target/nvptx/uniform-simt-4.c: New test.
2022-03-10[nvptx] Use bit-bucket operand for atom insnsTom de Vries3-6/+50
For an atomic fetch operation that doesn't use the result: ... __atomic_fetch_add (p64, v64, MEMMODEL_RELAXED); ... we currently emit: ... atom.add.u64 %r26, [%r25], %r27; ... Detect the REG_UNUSED reg-note for %r26, and emit instead: ... atom.add.u64 _, [%r25], %r27; ... Likewise for all atom insns. Tested on nvptx. gcc/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> PR target/104815 * config/nvptx/nvptx.cc (nvptx_print_operand): Handle 'x' operand modifier. * config/nvptx/nvptx.md: Use %x0 destination operand in atom insns. gcc/testsuite/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> PR target/104815 * gcc.target/nvptx/atomic-bit-bucket-dest.c: New test.
2022-03-10[nvptx] Use atom.and.b64 instead of atom.b64.andTom de Vries3-28/+28
The ptx manual prescribes the instruction format atom{.space}.op.type but the compiler currently emits: ... atom.b64.and %r31, [%r30], %r32; ... which uses the instruction format atom{.space}.type.op. Fix this by emitting instead: ... atom.and.b64 %r31, [%r30], %r32; ... Tested on nvptx. gcc/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.md (define_insn "atomic_fetch_<logic><mode>"): Emit atom.and.b64 instead of atom.b64.and. gcc/testsuite/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> * gcc.target/nvptx/atomic_fetch-1.c: Update. * gcc.target/nvptx/atomic_fetch-2.c: Update.
2022-03-10[nvptx] Add multilib mptx=3.1Tom de Vries1-3/+1
With commit 5b5e456f018 ("[nvptx] Build libraries with mptx=3.1") the intention was that the ptx isa version for all libraries was switched back to 3.1 using MULTILIB_EXTRA_OPTS, without changing the default 6.0. Further testing revealed that this is not the case, and some libs were still build with 6.0. Fix this by introducing an mptx=3.1 multilib. Adding a multilib should be avoided if possible, because it adds build time. But I think it's a reasonable trade-off. With --disable-multilib, the default lib with misa=sm_30 and mptx=6.0 should be usable in most scenarios. With --enable-multilib, we can enable older drivers, as well as generate code similar to how that was done in previous gcc releases, which is very useful. Tested on nvptx. gcc/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> * config/nvptx/t-nvptx (MULTILIB_EXTRA_OPTS): Move mptx=3.1 ... (MULTILIB_OPTIONS): ... here.
2022-03-10[nvptx] Restore default to sm_30Tom de Vries2-2/+2
With commit 07667c911b1 ("[nvptx] Build libraries with misa=sm_30") the intention was that the sm_xx for all libraries was switched back to sm_30 using MULTILIB_EXTRA_OPTS, without changing the default sm_35. Testing on an sm_30 board revealed that still some libs were build with sm_35, so fix this by switching back to default sm_30. Tested on nvptx. gcc/ChangeLog: 2022-03-07 Tom de Vries <tdevries@suse.de> PR target/104758 * config/nvptx/nvptx.opt (misa): Set default to sm_30. * config/nvptx/t-nvptx (MULTILIB_EXTRA_OPTS): Remove misa=sm_30.
2022-03-10[OpenACC privatization] Analyze 'lookup_decl'-translated DECL [PR90115, ↵Thomas Schwinge17-109/+90
PR102330, PR104774] ... so that it matches what we analyze and what we action on. Fix-up for commit 29a2f51806c5b30e17a8d0e9ba7915a3c53c34ff "openacc: Add support for gang local storage allocation in shared memory [PR90115]". PR middle-end/90115 PR middle-end/102330 PR middle-end/104774 gcc/ * omp-low.cc (oacc_privatization_candidate_p) (oacc_privatization_scan_clause_chain) (oacc_privatization_scan_decl_chain, lower_oacc_private_marker): Analyze 'lookup_decl'-translated DECL. gcc/testsuite/ * c-c++-common/goacc/kernels-decompose-pr104061-1-3.c: Adjust. * c-c++-common/goacc/kernels-decompose-pr104061-1-4.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104132-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104133-1.c: Likewise. * c-c++-common/goacc/kernels-decompose-pr104774-1.c: Likewise. * c-c++-common/goacc/privatization-1-compute-loop.c: Likewise. * c-c++-common/goacc/privatization-1-compute.c: Likewise. * c-c++-common/goacc/privatization-1-routine_gang-loop.c: Likewise. * c-c++-common/goacc/privatization-1-routine_gang.c: Likewise. * gfortran.dg/goacc-gomp/pr102330-1.f90: Likewise, and subsume... * gfortran.dg/goacc-gomp/pr102330-2.f90: ... this file, and... * gfortran.dg/goacc-gomp/pr102330-3.f90: ... this file. * gfortran.dg/goacc/privatization-1-compute-loop.f90: Adjust. * gfortran.dg/goacc/privatization-1-compute.f90: Likewise. * gfortran.dg/goacc/privatization-1-routine_gang-loop.f90: Likewise. * gfortran.dg/goacc/privatization-1-routine_gang.f90: Likewise. libgomp/ * testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c: Enhance. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-1.c: Adjust. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-4.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-local-worker-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-1.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-vector-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-2.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-3.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-4.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-5.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-6.c: Likewise. * testsuite/libgomp.oacc-c-c++-common/kernels-private-vars-loop-worker-7.c: Likewise. * testsuite/libgomp.oacc-fortran/optional-private.f90: Likewise. * testsuite/libgomp.oacc-fortran/privatized-ref-1.f95: Likewise. * testsuite/libgomp.oacc-fortran/privatized-ref-2.f90: Likewise.
2022-03-10Add 'c-c++-common/goacc/kernels-decompose-pr104774-1.c' [PR104774]Thomas Schwinge1-0/+41
..., currently XFAILed with 'dg-ice'. PR middle-end/104774 gcc/testsuite/ * c-c++-common/goacc/kernels-decompose-pr104774-1.c: New file.
2022-03-10Add 'gfortran.dg/goacc-gomp/pr102330-{1,2,3}.f90' [PR102330]Thomas Schwinge3-0/+62
..., currently XFAILed with 'dg-ice'. PR middle-end/102330 gcc/testsuite/ * gfortran.dg/goacc-gomp/pr102330-1.f90: New file. * gfortran.dg/goacc-gomp/pr102330-2.f90: Likewise. * gfortran.dg/goacc-gomp/pr102330-3.f90: Likewise.
2022-03-10Enhance further testcases to verify handling of OpenACC privatization level ↵Thomas Schwinge4-38/+163
[PR90115] As originally introduced in commit 11b8286a83289f5b54e813f14ff56d730c3f3185 "[OpenACC privatization] Largely extend diagnostics and corresponding testsuite coverage [PR90115]". PR middle-end/90115 gcc/testsuite/ * c-c++-common/goacc/nesting-1.c: Enhance. * gcc.dg/goacc/nested-function-1.c: Likewise. * gcc.dg/goacc/nested-function-2.c: Likewise. * gfortran.dg/goacc/nested-function-1.f90: Likewise. libgomp/ * testsuite/libgomp.oacc-fortran/routine-1.f90: Enhance. * testsuite/libgomp.oacc-fortran/routine-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-3.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-9.f90: Likewise.
2022-03-10rs6000: Fix up __SIZEOF_{FLOAT,IBM}128__ defines [PR99708]Jakub Jelinek8-40/+96
As mentioned in the PR, right now on powerpc* __SIZEOF_{FLOAT,IBM}128__ macros are predefined unconditionally, because {ieee,ibm}128_float_type_node is always non-NULL, doesn't reflect whether __ieee128 or __ibm128 are actually supported or not. Based on patch review discussions, the following patch: 1) allows __ibm128 to be used in the sources even when !TARGET_FLOAT128_TYPE, as long as long double is double double 2) ensures ibm128_float_type_node is non-NULL only if __ibm128 is supported 3) ensures ieee128_float_type_node is non-NULL only if __ieee128 is supported (aka when TARGET_FLOAT128_TYPE) 4) predefines __SIZEOF_IBM128__ only when ibm128_float_type_node != NULL 5) newly predefines __SIZEOF_IEEE128__ if ieee128_float_type_node != NULL 6) predefines __SIZEOF_FLOAT128__ whenever ieee128_float_type_node != NULL and __float128 macro is predefined to __ieee128 7) removes ptr_*128_float_type_node which nothing uses 8) in order not to ICE during builtin initialization when ibm128_float_type_node == NULL, uses long_double_type_node as fallback for the __builtin_{,un}pack_ibm128 builtins 9) errors when those builtins are called used when ibm128_float_type_node == NULL (during their expansion) 10) moves the {,un}packif -> {,un}packtf remapping for these builtins in expansion earlier, so that we don't ICE on them if not -mabi=ieeelongdouble 2022-03-10 Jakub Jelinek <jakub@redhat.com> PR target/99708 * config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Remove RS6000_BTI_ptr_ieee128_float and RS6000_BTI_ptr_ibm128_float. (ptr_ieee128_float_type_node, ptr_ibm128_float_type_node): Remove. * config/rs6000/rs6000-builtin.cc (rs6000_type_string): Return "**NULL**" if type_node is NULL first. Handle ieee128_float_type_node. (rs6000_init_builtins): Don't initialize ptr_ieee128_float_type_node and ptr_ibm128_float_type_node. Set ibm128_float_type_node and ieee128_float_type_node to NULL rather than long_double_type_node if they aren't supported. Do support __ibm128 even if !TARGET_FLOAT128_TYPE when long double is double double. (rs6000_expand_builtin): Error if bif_is_ibm128 and !ibm128_float_type_node. Remap RS6000_BIF_{,UN}PACK_IF to RS6000_BIF_{,UN}PACK_TF much earlier and only use bif_is_ibm128 check for it. * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Define __SIZEOF_FLOAT128__ here and only iff __float128 macro is defined. (rs6000_cpu_cpp_builtins): Don't define __SIZEOF_FLOAT128__ here. Define __SIZEOF_IBM128__=16 if ieee128_float_type_node is non-NULL. Formatting fix. * config/rs6000/rs6000-gen-builtins.cc: Document ibm128 attribute. (struct attrinfo): Add isibm128 member. (TYPE_MAP_SIZE): Remove. (type_map): Use [] instead of [TYPE_MAP_SIZE]. For "if" use ibm128_float_type_node only if it is non-NULL, otherwise fall back to long_double_type_node. Remove "pif" entry. (parse_bif_attrs): Handle ibm128 attribute and print it for debugging. (write_decls): Output bif_ibm128_bit and bif_is_ibm128. (write_type_node): Use sizeof type_map / sizeof type_map[0] instead of TYPE_MAP_SIZE. (write_bif_static_init): Handle isibm128. * config/rs6000/rs6000-builtins.def: Document ibm128 attribute. (__builtin_pack_ibm128, __builtin_unpack_ibm128): Add ibm128 attribute. * gcc.dg/pr99708.c: New test. * gcc.target/powerpc/pr99708-2.c: New test. * gcc.target/powerpc/convert-fp-128.c (mode_kf): Define only if __FLOAT128_TYPE__ is defined.
2022-03-10PR c++/95999: Improved error recovery in enumeration lists.Roger Sayle2-2/+10
This patch resolves PR c++/95999 which is an ICE-after-error regression in the g++ front-end. When parsing an enumerator list, the C++ parser assumes that cp_parser_constant_expression always returns either an INTEGER_CST or error_mark_node, but in the testcase reported in the PR, it actually returns a VAR_DECL. The usual (but perhaps controversial) design philosophy is that the routine that reports the error normally has a duty to indicate this to the rest of the compiler (via error_mark_node), but here the return value from calling require_rvalue_constant_expression (parser.cc:10666) is ignored. I initially experimented with setting EXPRESSION to error_mark_node here in cp_parser_constant_expression but (perhaps conveniently) that's insufficient to resolve the problem. The simple fix in this patch is to tweak the two places that require INTEGER_CST to treat all other tree types as though they are error_mark_node. 2022-03-10 Roger Sayle <roger@nextmovesoftware.com> gcc/cp/ChangeLog PR c++/95999 * decl.cc (finish_enum_value_list): If VALUE isn't an INTEGER_CST consider it to be zero (i.e. treat it like error_mark_node). (build_enumerator): Likewise, if PREV_VALUE isn't an INTEGER_CST, set VALUE to error_mark_node. gcc/testsuite/ChangeLog PR c++/95999 * g++.dg/parse/pr95999.C: New test case.
2022-03-10PR c++/39751: ICE-on-invalid parsing regression.Roger Sayle2-2/+13
This is a fix for PR c++/39751 which is an ICE-on-invalid regression in the C++ parser after encountering the end of file. The one line change is to check that the tokens cached in DECL_PENDING_INLINE_INFO haven't been purged before processing them in cp_parser_late_parsing_for_member. 2022-03-10 Roger Sayle <roger@nextmovesoftware.com> gcc/cp/ChangeLog PR c++/39751 * parser.cc (cp_parser_late_parsing_for_member): Confirm the token stream hasn't been purged before processing DECL_PENDING_INLINE. gcc/testsuite/ChangeLog PR c++/39751 * g++.dg/parse/pr39751.C: New test case.
2022-03-10Daily bump.GCC Administrator7-1/+211
2022-03-09c: Revert C2x changes to function type compatibilityJoseph Myers5-23/+31
In commit cc806126215c3f4dc187eff3bf923458d8cc6b4f, I implemented changes that C2x had made to compatibility of unprototyped and prototyped function types. C2x has since completely removed unprototyped function types, making () in a function declaration mean (void) as in C++. While that change isn't appropriate at the current development stage for GCC 12, it does mean that it doesn't make sense for GCC 12 to have different rules for unprototyped functions in C2x mode than in other modes or previous and subsequent GCC versions. Thus, revert the previous change to avoid it getting into a GCC release, and update the corresponding tests to expect the same behavior with -std=c2x as with -std=c11 (they will of course need to change again after implementing () as meaning (void)). Bootstrapped with no regressions for x86_64-pc-linux-gnu. gcc/c/ * c-typeck.cc (function_types_compatible_p): Do not handle C2X differently from earlier standards for unprototyped function type compatibility. gcc/testsuite/ * gcc.dg/c11-unproto-1.c, gcc.dg/c11-unproto-2.c: Update comments. * gcc.dg/c2x-unproto-1.c, gcc.dg/c2x-unproto-2.c: Expect same results as in C11 mode. Update comments.
2022-03-09Fortran: improve error recovery on invalid array sectionHarald Anlauf2-1/+12
gcc/fortran/ChangeLog: PR fortran/104849 * expr.cc (find_array_section): Avoid NULL pointer dereference on invalid array section. gcc/testsuite/ChangeLog: PR fortran/104849 * gfortran.dg/pr104849.f90: New test.
2022-03-09Restore INDIRECT_REF asm operand heuristic with MEM_REFRichard Biener1-1/+4
As noticed we are looking for INDIRECT_REF with allows_mem to avoid a copy since then we're sure the operand is in memory (assuming *& is folded). But INDIRECT_REFs are no longer a thing, the following replaces the check with a check for a MEM_REF with a non-ADDR_EXPR operand. This should fix the regression part without fully exploring all possibilities around tcc_reference operands. I've placed an assert that we do not see an INDIRECT_REF here. While we gimplify asm operands we never do any checking on its IL afterwards. 2022-03-09 Richard Biener <rguenther@suse.de> * cfgexpand.cc (expand_gimple_asm): Special-case MEM_REF with non-decl operand, avoiding a copy.
2022-03-09x86: Define LIBGCC2_UNWIND_ATTRIBUTE on ia32 [PR104781]Jakub Jelinek1-0/+6
On Mon, Mar 07, 2022 at 07:06:28AM -0800, H.J. Lu wrote: > Since eh_return doesn't work with stack realignment, disable SSE on > unwind-c.c and unwind-dw2.c to avoid stack realignment with the 4-byte > incoming stack to avoid SSE usage which is caused by The following change does that using LIBGCC2_UNWIND_ATTRIBUTE macro instead, for ia32 only by forcing -mgeneral-regs-only on routines that call __builtin_eh_return in libgcc. 2022-03-09 Jakub Jelinek <jakub@redhat.com> PR target/104781 * config/i386/i386.h (LIBGCC2_UNWIND_ATTRIBUTE): Define for ia32.
2022-03-09c++: non-constant non-dependent decltype folding [PR104823]Patrick Palka6-26/+35
When processing a non-dependent decltype operand we want to instantiate it even if it's non-constant, since non-dependent decltype is always resolved ahead of time. But currently finish_decltype_type uses instantiate_non_dependent_expr, which instantiates only potentially constant expressions, and this causes us to miss diagnosing the narrowing conversion in S{id(v)} in the below testcase because we never instantiate this non-constant non-dependent decltype operand. In light of > On Mon, 7 Mar 2022, Jason Merrill wrote: >> On 3/7/22 14:41, Patrick Palka wrote: >>> instantiate_non_dependent_expr instantiates only potentially constant >>> expressions >> >> Hmm, that now strikes me as a problematic interface, as we don't know whether >> what we get back is template or non-template trees. this patch drops the potentially-constant check in i_n_d_e and turns its dependence check into a checking_assert, since most callers already check that the argument is non-dependent; thus i_n_d_e now instantiates even non-constant expressions and always returns non-templated trees. This patch also relaxes the dependence check in i_n_d_e to use the _uneval version (since that's what finish_decltype_type uses) and strengthens the dependence checks used by other callers accordingly. In cp_parser_parenthesized_expression_list_elt we were calling instantiate_non_dependent_expr (when parsing an attribute list) without first checking for non-dependence. We could fix this by guarding the call appropriately, but I noticed we also fold non-dependent attributes later from cp_check_const_attribute, so this earlier folding is at best redundant. And it currently causes us to reject constexpr-attribute4.C below due to the second folding seeing non-templated trees. Thus the right solution here seems to be to remove this unguarded call to i_n_d_e so that we end up instantiating non-dependent attributes only once. Finally, after calling i_n_d_e in finish_decltype_type we need to keep processing_template_decl cleared for sake of the later call to lvalue_kind, which handles templated and non-templated COND_EXPR differently. Otherwise we'd incorrectly reject the declaration of g in cpp0x/cond2.C with: error: 'g' declared as function returning a function PR c++/104823 gcc/cp/ChangeLog: * except.cc (build_noexcept_spec): Strengthen dependence check to instantiation_dependent_expression_p. * parser.cc (cp_parser_parenthesized_expression_list_elt): Remove fold_expr_p parameter, and don't call instantiate_non_dependent_expr. (cp_parser_parenthesized_expression_list): Adjust accordingly. * pt.cc (expand_integer_pack): Strengthen dependence check to instantiation_dependent_expression_p. (instantiate_non_dependent_expr_internal): Adjust comment. (instantiate_non_dependent_expr_sfinae): Likewise. Drop the potentially-constant check, and relax and turn the dependence check into a checking assert. (instantiate_non_dependent_or_null): Adjust comment. * semantics.cc (finish_decltype_type): Keep processing_template_decl cleared after calling instantiate_non_dependent_expr_sfinae. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/Wnarrowing19.C: New test.
2022-03-09c++: detecting copy-init context during CTAD [PR102137]Patrick Palka6-7/+180
Here we're failing to communicate to cp_finish_decl from tsubst_expr that we're in a copy-initialization context (via the LOOKUP_ONLYCONVERTING flag), which causes us to always consider explicit deduction guides when performing CTAD for a templated variable initializer. It turns out this bug also affects consideration of explicit conversion operators for the same reason. But consideration of explicit constructors seems unaffacted thanks to code in build_aggr_init that sets LOOKUP_ONLYCONVERTING when the initializer represents copy-initialization. So this patch fixes this by making cp_finish_decl set LOOKUP_ONLYCONVERTING just like build_aggr_init does, by inspecting the initializer, so that callers don't need to explicitly pass this flag appropriately. PR c++/102137 PR c++/87820 gcc/cp/ChangeLog: * cp-tree.h (is_copy_initialization): Declare. * decl.cc (cp_finish_decl): Set LOOKUP_ONLYCONVERTING when is_copy_initialization is true. * init.cc (build_aggr_init): Split out copy-initialization check into ... (is_copy_initialization): ... here. * pt.cc (instantiate_decl): Pass 0 instead of LOOKUP_ONLYCONVERTING as flags to cp_finish_decl. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/explicit15.C: New test. * g++.dg/cpp1z/class-deduction108.C: New test.
2022-03-09c++: merge default targs for function templates [PR65396]Patrick Palka8-42/+121
We currently merge default template arguments for class templates, but not for function templates. This patch fixes this by factoring out the argument merging logic in redeclare_class_template into a separate function and using it in duplicate_decls as well. PR c++/65396 gcc/cp/ChangeLog: * cp-tree.h (merge_default_template_args): Declare. * decl.cc (merge_default_template_args): Define, factored out from redeclare_class_template. (duplicate_decls): Use it when merging member function template and free function declarations. * pt.cc (redeclare_class_template): Factor out default argument merging logic into merge_default_template_args. Improve location of a note when there's a template parameter kind mismatch. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/vt-34314.C: Adjust expected location of "redeclared here" note. * g++.dg/template/pr92440.C: Likewise. * g++.old-deja/g++.pt/redecl1.C: Adjust expected location of "redefinition of default argument" error. * g++.dg/template/defarg23.C: New test. * g++.dg/template/defarg23a.C: New test.
2022-03-09testsuite/104759 - adjust gcc.dg/vect/vect-multitypes-12.cRichard Biener1-4/+2
This adjusts gcc.dg/vect/vect-multitypes-12.c to just look for the interesting loop vectorization. 2022-03-09 Richard Biener <rguenther@suse.de> PR testsuite/104759 * gcc.dg/vect/vect-multitypes-12.c: Adjust.