aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-04-29Merge master r12-8312.devel/c++-coroutinesIain Sandoe611-4887/+20223
* Merge master r12-8312-gb85e79dce149.
2022-04-28cgraph: Don't verify semantic_interposition flag for aliases [PR105399]Jakub Jelinek2-1/+14
The following testcase ICEs, because the ctors during cc1plus all have !opt_for_fn (decl, flag_semantic_interposition) - they have NULL DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) and optimization_default_node is for -Ofast and so has flag_semantic_interposition cleared. During free lang data, we set DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) for the ctor which has body (or for thunks), but don't touch it for aliases. During lto1 optimization_default_node reflects the lto1 flags which are -O2 rather than -Ofast and so has flag_semantic_interposition set, for the ctor which has body that makes no difference, but as the alias doesn't still have DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) set, we now trigger this verification check. The following patch just doesn't verify it for aliases during lto1. Another possibility would be to set DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) during free lang data even for aliases. 2022-04-28 Jakub Jelinek <jakub@redhat.com> PR lto/105399 * cgraph.cc (cgraph_node::verify_node): Don't verify semantic_interposition flag against opt_for_fn (decl, flag_semantic_interposition) for aliases in lto1. * g++.dg/lto/pr105399_0.C: New test.
2022-04-28Fix up 'libgomp.oacc-fortran/print-1.f90' GCN offloading compilation [PR104717]Thomas Schwinge1-1/+29
That got broken by recent commit b2202431910e30d8505c94d1cb9341cac7080d10 "fortran: Fix up gfc_trans_oacc_construct [PR104717]". PR fortran/104717 libgomp/ * testsuite/libgomp.oacc-fortran/print-1.f90: Add OpenACC privatization scanning. For GCN offloading compilation, raise '-mgang-private-size'.
2022-04-28c++, coroutines: Improve check for throwing final await [PR104051].Iain Sandoe2-6/+36
We check that the final_suspend () method returns a sane type (i.e. a class or structure) but, unfortunately, that check has to be later than the one for a throwing case. If the use returns some nonsensical type from the method, we need to handle that in the checking for noexcept. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> PR c++/104051 gcc/cp/ChangeLog: * coroutines.cc (coro_diagnose_throwing_final_aw_expr): Handle non-target expression inputs. gcc/testsuite/ChangeLog: * g++.dg/coroutines/pr104051.C: New test.
2022-04-28c++, coroutines: Account for overloaded promise return_value() [PR105301].Iain Sandoe2-2/+57
Whether it was intended or not, it is possible to define a coroutine promise with multiple return_value() methods [which need not even have the same type]. We were not accounting for this possibility in the check to see whether both return_value and return_void are specifier (which is prohibited by the standard). Fixed thus and provided an adjusted diagnostic for the case that multiple return_value() methods are present. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> PR c++/105301 gcc/cp/ChangeLog: * coroutines.cc (coro_promise_type_found_p): Account for possible mutliple overloads of the promise return_value() method. gcc/testsuite/ChangeLog: * g++.dg/coroutines/pr105301.C: New test.
2022-04-28c++, coroutines: Make sure our temporaries are in a bind expr [PR105287]Iain Sandoe2-9/+57
There are a few cases where we can generate a temporary that does not need to be added to the coroutine frame (i.e. these are genuinely ephemeral). The intent was that unnamed temporaries should not be 'promoted' to coroutine frame entries. However there was a thinko and these were not actually ever added to the bind expressions being generated for the expanded awaits. This meant that they were showing in the global namspace, leading to an empty DECL_CONTEXT and the ICE reported. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> PR c++/105287 gcc/cp/ChangeLog: * coroutines.cc (maybe_promote_temps): Ensure generated temporaries are added to the bind expr. (add_var_to_bind): Fix local var naming to use portable punctuation. (register_local_var_uses): Do not add synthetic names to unnamed temporaries. gcc/testsuite/ChangeLog: * g++.dg/coroutines/pr105287.C: New test.
2022-04-28c++, coroutines: Avoid expanding within templates [PR103868]Nathan Sidwell2-12/+163
This is a forward-port of a patch by Nathan (against 10.x) which fixes an open PR. We are ICEing because we ended up tsubst_copying something that had already been tsubst, leading to an assert failure (mostly such repeated tsubsting is harmless). We had a non-dependent co_await in a non-dependent-type template fn, so we processed it at definition time, and then reprocessed at instantiation time. We fix this here by deferring substitution while processing templates. Additional observations (for a better future fix, in the GCC13 timescale): Exprs only have dependent type if at least one operand is dependent which was what the current code was intending to do. Coroutines have the additional wrinkle, that the current fn's type is an implicit operand. So, if the coroutine function's type is not dependent, and the operand is not dependent, we should determine the type of the co_await expression using the DEPENDENT_EXPR wrapper machinery. That allows us to determine the subexpression type, but leave its operand unchanged and then instantiate it later. PR c++/103868 gcc/cp/ChangeLog: * coroutines.cc (finish_co_await_expr): Do not process non-dependent coroutine expressions at template definition time. (finish_co_yield_expr): Likewise. (finish_co_return_stmt): Likewise. gcc/testsuite/ChangeLog: * g++.dg/coroutines/pr103868.C: New test. Co-Authored-by: Iain Sandoe <iain@sandoe.co.uk>
2022-04-28testsuite,X86: Fix missing USER_LABEL_PREFIX cases.Iain Sandoe4-8/+8
Yet another set of testcases that do not account for targets that use __USER_LABEL_PREFIX__. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/testsuite/ChangeLog: * gcc.target/i386/memcpy-strategy-10.c: Account for __USER_LABEL_PREFIX__. * gcc.target/i386/memcpy-strategy-5.c: Likewise. * gcc.target/i386/memset-strategy-5.c: Likewise. * gcc.target/i386/memset-strategy-7.c: Likewise.
2022-04-28testsuite: Add target requires for ifuncs to mv31.C.Iain Sandoe1-0/+1
g++.target/i386/mv31.C fails on targets without ifuncs support so add the necessary target supports guard. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/testsuite/ChangeLog: * g++.target/i386/mv31.C: Add target supports guard for ifuncs.
2022-04-28c++: global-namespace-qualified var after class def [PR90107]Marek Polacek2-0/+11
Here we wrongly reject the definition of "::N::a" struct A; namespace N { extern A a; } struct A {} ::N::a; because our code to diagnose a missing ; after a class definition doesn't realize that :: can follow a class definition. PR c++/90107 gcc/cp/ChangeLog: * parser.cc (cp_parser_class_specifier_1): Accept :: after a class definition. gcc/testsuite/ChangeLog: * g++.dg/parse/qualified6.C: New test.
2022-04-28libstdc++: Fix error reporting in filesystem::copy [PR99290]Jonathan Wakely4-4/+70
The recursive calls to filesystem::copy should stop if any of them reports an error. libstdc++-v3/ChangeLog: PR libstdc++/99290 * src/c++17/fs_ops.cc (fs::copy): Pass error_code to directory_iterator constructor, and check on each iteration. * src/filesystem/ops.cc (fs::copy): Likewise. * testsuite/27_io/filesystem/operations/copy.cc: Check for errors during recursion. * testsuite/experimental/filesystem/operations/copy.cc: Likewise.
2022-04-28d: Merge upstream dmd 313d28b3d, druntime e361d200.Iain Buclaw9-35/+121
D front-end changes: - Import latest bug fixes from the 2.100 release branch. - Fix signatures of extern C++ functions that have size_t parameters. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 313d28b3d. * d-port.cc (Port::memicmp): Use d_size_t instead of size_t. (Port::valcpy): Likewise. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime e361d200.
2022-04-28i386: Fix up ix86_gimplify_va_arg [PR105331]Jakub Jelinek2-0/+12
On the following testcase we emit a bogus 'va_arg_tmp.5' may be used uninitialized warning. The reason is that when gimplifying the addr = &temp; statement, the va_arg_tmp temporary var for which we emit ADDR_EXPR is not TREE_ADDRESSABLE, prepare_gimple_addressable emits some extra code to initialize the newly addressable var from its previous value, but it is a new variable which hasn't been initialized yet and will be later, so we end up initializing it with uninitialized SSA_NAME: va_arg_tmp.6 = va_arg_tmp.5_14(D); addr.2_16 = &va_arg_tmp.6; _17 = MEM[(double *)sse_addr.4_13]; MEM[(double * {ref-all})addr.2_16] = _17; and with -O1 we actually don't DSE it before the warning is emitted. If we make the temp TREE_ADDRESSABLE before the gimplification, then this prepare_gimple_addressable path isn't taken and we effectively omit the first statement above and so the bogus warning is gone. I went through other backends and didn't find another instance of this problem. 2022-04-28 Jakub Jelinek <jakub@redhat.com> PR target/105331 * config/i386/i386.cc (ix86_gimplify_va_arg): Mark va_arg_tmp temporary TREE_ADDRESSABLE before trying to gimplify ADDR_EXPR of it. * gcc.dg/pr105331.c: New test.
2022-04-28doc: Remove misleading text about multilibs for IEEE long doubleJonathan Wakely1-11/+0
The choice of ieee or ibm long double format is orthogonal to multilibs, as the two sets of symbols co-exist and don't need a separate multilib. gcc/ChangeLog: * doc/install.texi (Configuration): Remove misleading text around LE PowerPC Linux multilibs.
2022-04-28libstdc++: Remove redundant line in versioned namespace linker scriptFrançois Dumont1-1/+0
This doesn't match anything. libstdc++-v3/ChangeLog: * config/abi/pre/gnu-versioned-namespace.ver: Remove std::random_device::* pattern.
2022-04-28doc: Document Solaris D bootstrap requirements [PR 103528]Rainer Orth1-1/+13
This patch documents the Solaris-specific D bootstrap requirements. Tested by building and inspecting gccinstall.{pdf,info}. 2022-03-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc: PR d/103528 * doc/install.texi (Tools/packages necessary for building GCC) (GDC): Document libphobos requirement. (Host/target specific installation notes for GCC, *-*-solaris2*): Document libphobos and GDC specifics.
2022-04-28tree-optimization/105219 - bogus max iters for vectorized epilogueRichard Biener2-1/+34
The following makes sure to take into account prologue peeling when trying to narrow down the maximum number of iterations computed for the vectorized epilogue. A similar issue exists when peeling for gaps. 2022-04-27 Richard Biener <rguenther@suse.de> PR tree-optimization/105219 * tree-vect-loop.cc (vect_transform_loop): Disable special code narrowing the vectorized epilogue max iterations when peeling for alignment or gaps was in effect. * gcc.dg/vect/pr105219.c: New testcase.
2022-04-27testsuite: Add test case for pack/unpack bifs at soft-float [PR105334]Kewen Lin1-0/+31
This patch is to add the test coverage for the two recent fixes r12-8091 and r12-8226 from Segher, aix is skipped since it takes soft-float and long-double-128 incompatible. PR target/105334 gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr105334.c: New test.
2022-04-28testsuite: Skip target not support -pthread [PR104676].Jia-Wei Chen1-1/+1
The "ftree-parallelize-loops=" imply -pthread option in gcc/gcc.cc, some target are not support pthread like elf target use newlib, and will get an error: "*-*-elf-gcc: error: unrecognized command-line option '-pthread'" so we add an additional condition "{target pthread}" to make sure the dg-additional-options runs on support targets. gcc/testsuite/ChangeLog PR target/104676 * gcc.dg/torture/pr104676.c: Add "{target pthread}" check.
2022-04-28loongarch: ignore zero-size fields in calling conventionXi Ruoyao3-0/+61
gcc/ * config/loongarch/loongarch.cc (loongarch_flatten_aggregate_field): Ignore empty fields for RECORD_TYPE. gcc/testsuite/ * gcc.target/loongarch/zero-size-field-pass.c: New test. * gcc.target/loongarch/zero-size-field-ret.c: New test.
2022-04-28Daily bump.GCC Administrator7-1/+163
2022-04-27c++: add commentsJason Merrill1-1/+2
gcc/cp/ChangeLog: * tree.cc (strip_typedefs): Add default argument comments.
2022-04-27Fix oversight from previous commit to pr70673.Thomas Koenig1-1/+0
gcc/testsuite/ChangeLog: * gfortran.dg/pr70673.f90: Removed second invalid line.
2022-04-27c++: enum in generic lambda at global scope [PR105398]Marek Polacek2-1/+16
We crash compiling this test since r11-7993 which changed lookup_template_class_1 so that we only call tsubst_enum when !uses_template_parms (current_nonlambda_scope ()) But here current_nonlambda_scope () is the global NAMESPACE_DECL ::, which doesn't have a type, therefore is considered type-dependent. So we don't call tsubst_enum, and crash in tsubst_copy/CONST_DECL because we didn't find the e1 enumerator. I don't think any namespace can depend on any template parameter, so this patch tweaks uses_template_parms. PR c++/105398 gcc/cp/ChangeLog: * pt.cc (uses_template_parms): Return false for any NAMESPACE_DECL. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/lambda-generic-enum2.C: New test.
2022-04-27testsuite: Add testcase for dangling pointer equality bogus warning [PR104492]Jakub Jelinek1-0/+115
On Wed, Apr 27, 2022 at 12:02:33PM +0200, Richard Biener wrote: > I did that but the reduction result did not resemble the same failure > mode. I've failed to manually construct a testcase as well. Possibly > a testcase using libstdc++ but less Qt internals might be possible. Here is a testcase that I've managed to reduce, FAILs with: FAIL: g++.dg/warn/pr104492.C -std=gnu++14 (test for bogus messages, line 111) FAIL: g++.dg/warn/pr104492.C -std=gnu++17 (test for bogus messages, line 111) FAIL: g++.dg/warn/pr104492.C -std=gnu++20 (test for bogus messages, line 111) on both x86_64-linux and i686-linux without your commit and passes with it. 2022-04-27 Jakub Jelinek <jakub@redhat.com> PR middle-end/104492 * g++.dg/warn/pr104492.C: New test.
2022-04-27Split test to remove failing run time test and add check for ICE.Thomas Koenig2-1/+25
gcc/testsuite/ChangeLog: PR fortran/70673 PR fortran/78054 * gfortran.dg/pr70673.f90: Remove invalid statement. * gfortran.dg/pr70673_2.f90: New test to check that ICE does not re-appear.
2022-04-27libstdc++: Update {x86_64,i?86,aarch64,s390x,ppc{,64,64le}} baseline_symbols.txtJakub Jelinek8-8/+90
The following patch updates baseline_symbols.txt on arches where I have latest libstdc++ builds (my ws + Fedora package builds). I've manually excluded: +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intB5cxx11IjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intB5cxx11IlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intB5cxx11ImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intB5cxx11ItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intB5cxx11IxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE14_M_extract_intB5cxx11IyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intB5cxx11IjEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intB5cxx11IlEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intB5cxx11ImEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intB5cxx11ItEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intB5cxx11IxEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 +FUNC:_ZNKSt17__gnu_cxx_ieee1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE14_M_extract_intB5cxx11IyEES4_S4_S4_RSt8ios_baseRSt12_Ios_IostateRT_@@GLIBCXX_IEEE128_3.4.29 additions on ppc64le as those look unexpected. Those symbols didn't show up in Fedora 11.3.1 build with recent glibc, while other GLIBCXX_IEEE128_3.4.29 symbols are in 11.x already. What this patch includes are only @@GLIBCXX_3.4.30 symbol additions, same symbols on all files, except that powerpc64 adds also _ZNSt17__gnu_cxx_ieee12816__convert_from_vERKP15__locale_structPciPKcz@@GLIBCXX_IEEE128_3.4.30 so everything included in the patch looks right to me. 2022-04-27 Jakub Jelinek <jakub@redhat.com> * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Update. * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/aarch64-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: Update.
2022-04-27libstdc++: Add pretty printer for std::atomicJonathan Wakely3-3/+69
For the atomic specializations for shared_ptr and weak_ptr we can reuse the existing SharedPointerPrinter, with a small tweak. libstdc++-v3/ChangeLog: * python/libstdcxx/v6/printers.py (SharedPointerPrinter): Add support for atomic<shared_ptr<T>> and atomic<weak_ptr<T>>. (StdAtomicPrinter): New printer. (build_libstdcxx_dictionary): Register new printer. * testsuite/libstdc++-prettyprinters/cxx11.cc: Test std::atomic. * testsuite/libstdc++-prettyprinters/cxx20.cc: Test atomic smart pointers.
2022-04-27ada: Fix build for RTEMSSebastian Huber1-18/+14
Commit 621cccba3f8b0cd2757feda171e66e3820b55c2c broke the Ada build for all RTEMS targets except aarch64. gcc/ada/ * tracebak.c: Add support for ARM RTEMS. Add support for RTEMS to PPC ELF. Add support for RTEMS to SPARC. Merge aarch64 support of Linux and RTEMS.
2022-04-27LoongArch: Add fdiv define_expand template.Lulu Cheng1-0/+6
gcc/ChangeLog: * config/loongarch/loongarch.md: Add fdiv define_expand template, then generate floating-point division and floating-point reciprocal instructions.
2022-04-27LoongArch: Add '(clobber (mem:BLK (scratch)))' to PLV instruction templates.Lulu Cheng1-12/+28
gcc/ChangeLog: * config/loongarch/loongarch.md: Add '(clobber (mem:BLK (scratch)))' to PLV instruction templates.
2022-04-27middle-end/104492 - avoid all equality compare dangling pointer diagsRichard Biener1-3/+4
The following extends the equality compare dangling pointer diagnostics suppression for uses following free or realloc to also cover those following invalidation of auto variables via CLOBBERs. That avoids diagnosing idioms like return std::find(std::begin(candidates), std::end(candidates), s) != std::end(candidates); for auto candidates which are prone to forwarding of the final comparison across the storage invalidation as then seen by the late run access warning pass. 2022-04-25 Richard Biener <rguenther@suse.de> PR middle-end/104492 * gimple-ssa-warn-access.cc (pass_waccess::warn_invalid_pointer): Exclude equality compare diagnostics for all kind of invalidations. (pass_waccess::check_dangling_uses): Fix post-dominator query. (pass_waccess::check_pointer_uses): Likewise.
2022-04-27fortran: Compare non-constant bound expressions. [PR105379]Mikael Morin3-11/+56
Starting with r12-8235-gfa5cd7102da676dcb1757b1288421f5f3439ae0e, class descriptor types are compared to detect duplicate declarations. This caused ICEs as the comparison of array spec supported only constant explicit bounds, but dummy class variable descriptor types can have a _data field with non-constant array spec bounds. This change adds support for non-constant bounds. For that, gfc_dep_compare_expr is used. It does probably more than strictly necessary, but using it avoids rewriting a specific comparison function, making mistakes and forgetting cases. PR fortran/103662 PR fortran/105379 gcc/fortran/ChangeLog: * array.cc (compare_bounds): Use bool as return type. Support non-constant expressions. (gfc_compare_array_spec): Update call to compare_bounds. gcc/testsuite/ChangeLog: * gfortran.dg/class_dummy_8.f90: New test. * gfortran.dg/class_dummy_9.f90: New test.
2022-04-27fortran: Avoid infinite self-recursion [PR105381]Mikael Morin2-3/+25
Dummy array decls are local decls different from the argument decl accessible through GFC_DECL_SAVED_DESCRIPTOR. If the argument decl has a DECL_LANG_SPECIFIC set, it is copied over to the local decl at the time the latter is created, so that the DECL_LANG_SPECIFIC object is shared between local dummy decl and argument decl, and thus the GFC_DECL_SAVED_DESCRIPTOR of the argument decl is the argument decl itself. The r12-8230-g7964ab6c364c410c34efe7ca2eba797d36525349 change introduced the non_negative_strides_array_p predicate which recurses through GFC_DECL_SAVED_DESCRIPTOR to avoid seeing dummy decls as purely local decls. As the GFC_DECL_SAVED_DESCRIPTOR of the argument decl is itself, this can cause infinite recursion. This change adds a check to avoid infinite recursion. PR fortran/102043 PR fortran/105381 gcc/fortran/ChangeLog: * trans-array.cc (non_negative_strides_array_p): Inline variable orig_decl and merge nested if conditions. Add condition to not recurse if the next argument is the same as the current. gcc/testsuite/ChangeLog: * gfortran.dg/character_array_dummy_1.f90: New test.
2022-04-27testsuite: Add arm testcase for PR105374Christophe Lyon1-0/+8
As discussed in the PR, here is the testcase with the appropriate dg-* directives. Tested on arm-none-eabi with 1 -mcpu=cortex-a7/-mfloat-abi=soft/-march=armv7ve+simd 2 -mcpu=cortex-a7/-mfloat-abi=hard/-march=armv7ve+simd 3 -mthumb/-mcpu=cortex-a7/-mfloat-abi=hard/-march=armv7ve+simd 4 -mthumb/-mfloat-abi=soft/-march=armv6s-m 5 -mthumb/-mfloat-abi=soft/-march=armv7-m 6 -mthumb/-mfloat-abi=hard/-march=armv7e-m+fp 7 -mthumb/-mfloat-abi=hard/-march=armv7e-m+fp.dp 8 -mthumb/-mfloat-abi=hard/-march=armv8-m.main+fp+dsp 9 -mthumb/-mfloat-abi=hard/-march=armv8.1-m.main+mve.fp+fp.dp 10 -mthumb/-mfloat-abi=hard/-march=armv8.1-m.main+mve The test is UNSUPPORTED with the first three ones (because of -mcpu=cortex-a7), ignored with armv6s-m, and PASSes with all the other ones, while it used crash without Jakub's fix (r12-8263), ie. FAIL with options 5,6,7,8,10. The test passed without Jakub's fix with option 9 because the problem happens only with an integer-only MVE. 2022-04-26 Christophe Lyon <christophe.lyon@arm.com> gcc/testsuite/ PR tree-optimization/105374 * gcc.target/arm/simd/pr105374.C: New.
2022-04-27[Ada] Revert r12-6599 (Fix up handling of ghost units [PR104027])Pierre-Marie de Rodat1-5/+0
gcc/ada/ PR ada/104027 * gnat1drv.adb: Remove the goto End_Of_Program.
2022-04-27PR102024 - IBM Z: Add psabi diagnosticsAndreas Krebbel8-104/+187
For IBM Z in particular there is a problem with structs like: struct A { float a; int :0; }; Our ABI document allows passing a struct in an FPR only if it has exactly one member. On the other hand it says that structs of 1,2,4,8 bytes are passed in a GPR. So this struct is expected to be passed in a GPR. Since we don't return structs in registers (regardless of the number of members) it is always returned in memory. Situation is as follows: All compiler versions tested return it in memory - as expected. gcc 11, gcc 12, g++ 12, and clang 13 pass it in a GPR - as expected. g++ 11 as well as clang++ 13 pass in an FPR For IBM Z we stick to the current GCC 12 behavior, i.e. zero-width bitfields are NOT ignored. A struct as above will be passed in a GPR. Rational behind this is that not affecting the C ABI is more important here. A patch for clang is in progress: https://reviews.llvm.org/D122388 In addition to the usual regression test I ran the compat and struct-layout-1 testsuites comparing the compiler before and after the patch. gcc/ChangeLog: PR target/102024 * config/s390/s390-protos.h (s390_function_arg_vector): Remove prototype. * config/s390/s390.cc (s390_single_field_struct_p): New function. (s390_function_arg_vector): Invoke s390_single_field_struct_p. (s390_function_arg_float): Likewise. gcc/testsuite/ChangeLog: PR target/102024 * g++.target/s390/pr102024-1.C: New test. * g++.target/s390/pr102024-2.C: New test. * g++.target/s390/pr102024-3.C: New test. * g++.target/s390/pr102024-4.C: New test. * g++.target/s390/pr102024-5.C: New test. * g++.target/s390/pr102024-6.C: New test.
2022-04-27asan: Fix up asan_redzone_buffer::emit_redzone_byte [PR105396]Jakub Jelinek2-5/+28
On the following testcase, we have in main's frame 3 variables, some red zone padding, 4 byte d, followed by 12 bytes of red zone padding, then 8 byte b followed by 24 bytes of red zone padding, then 40 bytes c followed by some red zone padding. The intended content of shadow memory for that is (note, each byte describes 8 bytes of memory): f1 f1 f1 f1 04 f2 00 f2 f2 f2 00 00 00 00 00 f3 f3 f3 f3 f3 left red d mr b middle r c right red zone f1 is left red zone magic f2 is middle red zone magic f3 is right red zone magic 00 when all 8 bytes are accessible 01-07 when only 1 to 7 bytes are accessible followed by inaccessible bytes The -fdump-rtl-expand-details dump makes it clear that it misbehaves: Flushing rzbuffer at offset -160 with: f1 f1 f1 f1 Flushing rzbuffer at offset -128 with: 04 f2 00 00 Flushing rzbuffer at offset -128 with: 00 00 00 f2 Flushing rzbuffer at offset -96 with: f2 f2 00 00 Flushing rzbuffer at offset -64 with: 00 00 00 f3 Flushing rzbuffer at offset -32 with: f3 f3 f3 f3 In the end we end up with f1 f1 f1 f1 00 00 00 f2 f2 f2 00 00 00 00 00 f3 f3 f3 f3 f3 shadow bytes because at offset -128 there are 2 overlapping stores as asan_redzone_buffer::emit_redzone_byte has flushed the temporary 4 byte buffer in the middle. The function is called with an offset and value. If the passed offset is consecutive with the prev_offset + buffer size (off == offset), then we handle it correctly, similarly if the new offset is far enough from the old one (we then flush whatever was in the buffer and if needed add up to 3 bytes of 00 before actually pushing value. But what isn't handled correctly is when the offset isn't consecutive to what has been added last time, but it is in the same 4 byte word of shadow memory (32 bytes of actual memory), like the above case where we have consecutive 04 f2 and then skip one shadow memory byte (aka 8 bytes of real memory) and then want to emit f2. Emitting that as a store of little-endian 0x0000f204 followed by a store of 0xf2000000 to the same address doesn't work, we want to emit 0xf200f204. The following patch does that by pushing 1 or 2 00 bytes. Additionally, as a small cleanup, instead of using m_shadow_bytes.safe_push (value); flush_if_full (); in all of if, else if and else bodies it sinks those 2 stmts to the end of function as all do the same thing. 2022-04-27 Jakub Jelinek <jakub@redhat.com> PR sanitizer/105396 * asan.cc (asan_redzone_buffer::emit_redzone_byte): Handle the case where offset is bigger than off but smaller than m_prev_offset + 32 bits by pushing one or more 0 bytes. Sink the m_shadow_bytes.safe_push (value); flush_if_full (); statements from all cases to the end of the function. * gcc.dg/asan/pr105396.c: New test.
2022-04-26rs6000: Move V2DI vec_neg under power8-vector [PR105271]Kewen Lin2-3/+17
As PR105271 shows, __builtin_altivec_neg_v2di requires option -mpower8-vector as its pattern expansion relies on subv2di which has guard VECTOR_UNIT_P8_VECTOR_P (V2DImode). This fix is to move the related lines for __builtin_altivec_neg_v2di to the section of stanza power8-vector. PR target/105271 gcc/ChangeLog: * config/rs6000/rs6000-builtins.def (NEG_V2DI): Move to [power8-vector] stanza. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr105271.c: New test.
2022-04-27Daily bump.GCC Administrator9-1/+167
2022-04-26c++: pack init-capture of unresolved overload [PR102629]Jason Merrill2-1/+25
Here we were failing to diagnose that the initializer for the capture pack is an unresolved overload. It turns out that the reason we didn't recognize the deduction failure in do_auto_deduction was that the individual 'auto' in the expansion of the capture pack was still marked as a parameter pack, so we were deducing it to an empty pack instead of failing. PR c++/102629 gcc/cp/ChangeLog: * pt.cc (gen_elem_of_pack_expansion_instantiation): Clear TEMPLATE_TYPE_PARAMETER_PACK on auto. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-pack-init7.C: New test.
2022-04-26GCN: Make "gang-private data-share memory exhausted" error more verboseThomas Schwinge1-2/+3
[...]: error: 512 bytes of gang-private data-share memory exhausted (increase with ‘-mgang-private-size=560’, for example) gcc/ * config/gcn/gcn.cc (gcn_print_lds_decl): Make "gang-private data-share memory exhausted" error more verbose.
2022-04-26Update gcc sv.poJoseph Myers1-503/+335
* sv.po: Update.
2022-04-26c++: decltype of non-dependent call of class type [PR105386]Patrick Palka2-1/+16
We need to pass tf_decltype when instantiating a non-dependent decltype operand, like tsubst does in the dependent case, so that we don't force completion of a prvalue operand's class type. PR c++/105386 gcc/cp/ChangeLog: * semantics.cc (finish_decltype_type): Pass tf_decltype to instantiate_non_dependent_expr_sfinae. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/decltype81.C: New test.
2022-04-26lto: use diagnostics_context in print_lto_docs_linkMartin Liska1-3/+17
Properly parse OPT_fdiagnostics_urls_ and then initialize both urls and colors for global_dc. Doing that we would follow the configure option --with-documentation-root-url, -fdiagnostics-urls is respected. Plus we'll print colored warning and note messages. PR lto/105364 gcc/ChangeLog: * lto-wrapper.cc (print_lto_docs_link): Use global_dc. (run_gcc): Parse OPT_fdiagnostics_urls_. (main): Initialize global_dc.
2022-04-26libphobos: Don't call free on the TLS array in the emutls destroy function.Iain Buclaw1-4/+4
Fixes a segfault seen on Darwin when a GC scan is ran after a thread has been destroyed. As the global emutlsArrays hash still has a reference to the array itself, and tries to iterate all elements. Setting the length to zero frees all allocated elements in the array, and ensures that it is skipped when the _d_emutls_scan is called. libphobos/ChangeLog: * libdruntime/gcc/emutls.d (emutlsDestroyThread): Clear the per-thread TLS array, don't call free().
2022-04-26libstdc++: Add std::atomic<shared_ptr>(nullptr_t) constructor (LWG 3661)Jonathan Wakely2-0/+6
This DR was approved at the February 2022 plenary. libstdc++-v3/ChangeLog: * include/bits/shared_ptr_atomic.h (atomic<shared_ptr>): Add constructor for constant initialization from nullptr_t. * testsuite/20_util/shared_ptr/atomic/atomic_shared_ptr.cc: Check for new constructor.
2022-04-26libstdc++: Define std::hash<std::filesystem::path> (LWG 3657)Jonathan Wakely2-0/+20
This DR was approved at the February 2022 plenary. libstdc++-v3/ChangeLog: * include/bits/fs_path.h (hash<filesystem::path>): Define. * testsuite/27_io/filesystem/path/nonmember/hash_value.cc: Check std::hash specialization.
2022-04-26rs6000: Make the has_arch target selectors actually workSegher Boessenkool1-14/+14
2022-04-26 Segher Boessenkoool <segher@kernel.crashing.org> gcc/testsuite/ PR target/105349 * lib/target-supports.exp (check_effective_target_has_arch_pwr5): Use the specified dg-options. (check_effective_target_has_arch_pwr6): Ditto. (check_effective_target_has_arch_pwr7): Ditto. (check_effective_target_has_arch_pwr8): Ditto. (check_effective_target_has_arch_pwr9): Ditto. (check_effective_target_has_arch_pwr10): Ditto. (check_effective_target_has_arch_ppc64): Ditto.
2022-04-26ifcvt: Improve noce_try_store_flag_mask [PR105314]Jakub Jelinek2-3/+15
The following testcase regressed on riscv due to the splitting of critical edges in the sink pass, similarly to x86_64 compared to GCC 11 we now swap the edges, whether true or false edge goes to an empty forwarded bb. From GIMPLE POV, those 2 forms are equivalent, but as can be seen here, for some ifcvt opts it matters one way or another. On this testcase, noce_try_store_flag_mask used to trigger and transformed if (pseudo2) pseudo1 = 0; into pseudo1 &= -(pseudo2 == 0); But with the swapped edges ifcvt actually sees if (!pseudo2) pseudo3 = pseudo1; else pseudo3 = 0; and noce_try_store_flag_mask punts. IMHO there is no reason why it should punt those, it is equivalent to pseudo3 = pseudo1 & -(pseudo2 == 0); and especially if the target has 3 operand AND, it shouldn't be any more costly (and even with 2 operand AND, it might very well happen that RA can make it happen without any extra moves). Initially I've just removed the rtx_equal_p calls from the conditions and didn't add anything there, but that broke aarch64 bootstrap and regressed some testcases on x86_64, where if_info->a or if_info->b could be some larger expression that we can't force into a register. Furthermore, the case where both if_info->a and if_info->b are constants is better handled by other ifcvt optimizations like noce_try_store_flag or noce_try_inverse_constants or noce_try_store_flag_constants. So, I've restricted it to just a REG (perhaps SUBREG of REG might be ok too) next to what has been handled previously. 2022-04-26 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/105314 * ifcvt.cc (noce_try_store_flag_mask): Don't require that the non-zero operand is equal to if_info->x, instead use the non-zero operand as one of the operands of AND with if_info->x as target. * gcc.target/riscv/pr105314.c: New test.