aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-02-06Remove unused variables and procedures.Gaius Mulley3-29/+2
Remove unused variables and procedures (and remove build warning clutter). gcc/m2/ChangeLog: * gm2-compiler/M2Preprocess.mod (BaseName): Comment out. * gm2-lang.cc (opt): Remove. * gm2spec.cc (add_include): Remove. (full_libraries): Remove. (concat_option): Remove. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2023-02-06aarch64: Fix up bfmlal lane pattern [PR104921]Alex Coplan4-1/+28
As the testcase shows, this pattern had an incorrect constraint leading to GCC's output getting rejected by the assembler. This patch fixes the constraint accordingly. The test is split into two: one that can run without bf16 support from the assembler and another that checks that the output actually assembles when such support is available. Bootstrapped/regtested on aarch64-linux-gnu. OK for GCC 13? Or better to wait for next stage 1? What about backports? Thanks, Alex gcc/ChangeLog: PR target/104921 * config/aarch64/aarch64-simd.md (aarch64_bfmlal<bt>_lane<q>v4sf): Use correct constraint for operand 3. gcc/testsuite/ChangeLog: PR target/104921 * gcc.target/aarch64/pr104921-1.c: New test. * gcc.target/aarch64/pr104921-2.c: New test. * gcc.target/aarch64/pr104921.x: Include file for new tests.
2023-02-06libstdc++: Fix non-reserved name for template parameterJonathan Wakely1-6/+6
libstdc++-v3/ChangeLog: * include/bits/ranges_algo.h (__find_last_fn): Rename T to _Tp. (__find_last_if_fn): Likewise.
2023-02-06libstdc++: Fix testsuite warnings about new C++23 deprecationsJonathan Wakely6-0/+20
With the recent change to deprecate std::aligned_storage and std::aligned_union we need to adjust some tests that now fail with -std=c++23. libstdc++-v3/ChangeLog: * include/std/type_traits: Add diagnostic pragmas around references to deprecated std::aligned_storage and std::aligned_union traits. * testsuite/20_util/aligned_storage/requirements/alias_decl.cc: Add dg-warning for et c++23. * testsuite/20_util/aligned_storage/requirements/explicit_instantiation.cc: Likewise. * testsuite/20_util/aligned_storage/value.cc: Likewise. * testsuite/20_util/aligned_union/1.cc: Likewise. * testsuite/20_util/aligned_union/requirements/alias_decl.cc: Likewise.
2023-02-06libstdc++: Implement P1413R3 'deprecate aligned_storage and aligned_union'Nathaniel Shead5-4/+77
Adds deprecated attributes for C++23, and makes use of it for std::aligned_storage, std::aligned_storage_t, std::aligned_union, and std::aligned_union_t. libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in (PREDEFINED): Add new macros. * include/bits/c++config (_GLIBCXX23_DEPRECATED) (_GLIBCXX23_DEPRECATED_SUGGEST): New macros. * include/std/type_traits (aligned_storage, aligned_union) (aligned_storage_t, aligned_union_t): Deprecate for C++23. * testsuite/20_util/aligned_storage/deprecated-2b.cc: New test. * testsuite/20_util/aligned_union/deprecated-2b.cc: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
2023-02-06libstdc++: Normalise _GLIBCXX20_DEPRECATED macroNathaniel Shead3-7/+7
Updates _GLIBCXX20_DEPRECATED to be defined and behave the same as the versions for other standards (e.g. _GLIBCXX17_DEPRECATED). libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in (PREDEFINED): Update macros. * include/bits/c++config (_GLIBCXX20_DEPRECATED): Make consistent with other 'deprecated' macros. * include/std/type_traits (is_pod, is_pod_v): Use _GLIBCXX20_DEPRECATED_SUGGEST instead. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
2023-02-06libstdc++: Enable building libstdc++.{a,so} when !HOSTEDArsen Arsenović12-28/+77
This enables us to provide symbols for placeholders and numeric limits, and allows users to mess about with linker flags less. libstdc++-v3/ChangeLog: * Makefile.am [!_GLIBCXX_HOSTED]: Enable src/ subdirectory. * Makefile.in: Regenerate. * src/Makefile.am [!_GLIBCXX_HOSTED]: Omit compatibility files. There's no history to be compatible with. * src/c++11/Makefile.am [!_GLIBCXX_HOSTED]: Omit hosted-only source files from the build. * src/c++17/Makefile.am [!_GLIBCXX_HOSTED]: Likewise. * src/c++20/Makefile.am [!_GLIBCXX_HOSTED]: Likewise. * src/c++98/Makefile.am [!_GLIBCXX_HOSTED]: Likewise. * src/Makefile.in: Regenerate. * src/c++11/Makefile.in: Regenerate. * src/c++17/Makefile.in: Regenerate. * src/c++20/Makefile.in: Regenerate. * src/c++98/Makefile.in: Regenerate. Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
2023-02-06libstdc++: Disable building additional archives for freestandingJonathan Wakely2-6/+18
This doesn't have any effect yet as we never build anything under libstdc++-v3/src for freestanding, but that will change in the next commit. libstdc++-v3/ChangeLog: * src/Makefile.am [GLIBCXX_HOSTED] (SUBDIRS): Do not add filesystem, libbacktrace and experimental. * src/Makefile.in: Regenerate.
2023-02-06ipa-sra: Fix a typo in a dump string.Martin Jambor1-2/+2
A fix to a typo spotted by Bernhard Reutner-Fischer. Tested by building the compiler with the fix. gcc/ChangeLog: 2023-02-06 Martin Jambor <mjambor@suse.cz> * ipa-sra.cc (adjust_parameter_descriptions): Fix a typo in a dump.
2023-02-06LoongArch: Generate bytepick.[wd] for suitable bit operation patternXi Ruoyao3-23/+77
We can use bytepick.[wd] for a << (8 * x) | b >> (8 * (sizeof(a) - x)) while a and b are uint32_t or uint64_t. This is useful for some cases, for example: https://sourceware.org/pipermail/libc-alpha/2023-February/145203.html gcc/ChangeLog: * config/loongarch/loongarch.md (bytepick_w_ashift_amount): New define_int_iterator. (bytepick_d_ashift_amount): Likewise. (bytepick_imm): New define_int_attr. (bytepick_w_lshiftrt_amount): Likewise. (bytepick_d_lshiftrt_amount): Likewise. (bytepick_w_<bytepick_imm>): New define_insn template. (bytepick_w_<bytepick_imm>_extend): Likewise. (bytepick_d_<bytepick_imm>): Likewise. (bytepick_w): Remove unused define_insn. (bytepick_d): Likewise. (UNSPEC_BYTEPICK_W): Remove unused unspec. (UNSPEC_BYTEPICK_D): Likewise. * config/loongarch/predicates.md (const_0_to_3_operand): Remove unused define_predicate. (const_0_to_7_operand): Likewise. gcc/testsuite/ChangeLog: * g++.target/loongarch/bytepick.C: New test.
2023-02-06testsuite: remove broken AArch64 testTamar Christina1-11/+0
This test is somewhat broken, on systems with the profiling extension it fails because the +profile is required. The functionality tested here is already tested in nativecpu tests, so deleting this test. gcc/testsuite/ChangeLog: * gcc.target/aarch64/options_set_10.c: Removed.
2023-02-06ubsan: Fix up another spot that should have been BUILT_IN_UNREACHABLE_TRAPS ↵Jakub Jelinek2-1/+16
[PR108655] We ICE on the following testcase, because ivcanon calls gimple_build_builtin_unreachable but doesn't expect it would need vops. BUILT_IN_UNREACHABLE_TRAP I've introduced yesterday doesn't need vops and should be used in that case instead of BUILT_IN_TRAP which needs them. 2023-02-06 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/108655 * ubsan.cc (sanitize_unreachable_fn): For -funreachable-traps or -fsanitize=unreachable -fsanitize-trap=unreachable return BUILT_IN_UNREACHABLE_TRAP decl rather than BUILT_IN_TRAP. * gcc.dg/pr108655.c: New test.
2023-02-05c++: equivalence of non-dependent calls [PR107461]Patrick Palka6-6/+59
After r13-5684-g59e0376f607805 the (pruned) callee of a non-dependent CALL_EXPR is a bare FUNCTION_DECL rather than ADDR_EXPR of FUNCTION_DECL. This innocent change revealed that cp_tree_equal doesn't first check dependence of a CALL_EXPR before treating a FUNCTION_DECL callee as a dependent name, which leads to us incorrectly accepting the first two testcases below and rejecting the third: * In the first testcase, cp_tree_equal incorrectly returns true for the two non-dependent CALL_EXPRs f(0) and f(0) (whose CALL_EXPR_FN are different FUNCTION_DECLs) which causes us to treat #2 as a redeclaration of #1. * Same issue in the second testcase, for f<int*>() and f<char>(). * In the third testcase, cp_tree_equal incorrectly returns true for f<int>() and f<void(*)(int)>() which causes us to conflate the two dependent specializations A<decltype(f<int>()(U()))> and A<decltype(f<void(*)(int)>()(U()))>. This patch fixes this by making called_fns_equal treat two callees as dependent names only if the overall CALL_EXPRs are dependent, via a new convenience function call_expr_dependent_name that is like dependent_name but also checks dependence of the overall CALL_EXPR. PR c++/107461 gcc/cp/ChangeLog: * cp-tree.h (call_expr_dependent_name): Declare. * pt.cc (iterative_hash_template_arg) <case CALL_EXPR>: Use call_expr_dependent_name instead of dependent_name. * tree.cc (call_expr_dependent_name): Define. (called_fns_equal): Adjust to take two CALL_EXPRs instead of CALL_EXPR_FNs thereof. Use call_expr_dependent_name instead of dependent_name. (cp_tree_equal) <case CALL_EXPR>: Adjust call to called_fns_equal. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/overload5.C: New test. * g++.dg/cpp0x/overload5a.C: New test. * g++.dg/cpp0x/overload6.C: New test.
2023-02-06Daily bump.GCC Administrator4-1/+17
2023-02-05Fortran: prevent redundant integer division truncation warnings [PR108592]Harald Anlauf2-1/+9
gcc/fortran/ChangeLog: PR fortran/108592 * arith.cc (gfc_arith_divide): Emit integer division truncation warnings using gfc_warning instead of gfc_warning_now to prevent redundant messages. gcc/testsuite/ChangeLog: PR fortran/108592 * gfortran.dg/pr108592.f90: New test.
2023-02-05doc: Remove note on PW32Gerald Pfeifer1-3/+0
gcc/ChangeLog: * doc/install.texi (Specific): Remove PW32.
2023-02-05Daily bump.GCC Administrator2-1/+19
2023-02-04libstdc++: Avoid use of naked int32_t in unseq_backend_simd.h, PR108672Hans-Peter Nilsson1-1/+1
The use of a "naked" int32_t (i.e. without a fitting #include: stdint.h or cstdint or inttypes.h or an equivalent internal header), in libstdc++-v3/include/pstl/unseq_backend_simd.h, caused an error for cris-elf and apparently pru-elf and I guess all "newlib targets". (Unfortunately, there's a lack of other *-elf targets in recent months of gcc-testresults archives.) This does not manifest on e.g. native x86_64-pc-linux-gnu, because there, a definition is included as an effect of including stdlib.h in cstdlib (following the trace in native xtreme-header-2_a.ii with glibc-2.31-13+deb11u5). Maybe better than chasing the right #includes is to directly use the built-in type, like so: libstdc++-v3: PR libstdc++/108672 * include/pstl/unseq_backend_simd.h (__simd_or): Use __INT32_TYPE__ instead of int32_t.
2023-02-04libstdc++: Adjust link to pdftexGerald Pfeifer2-3/+3
libstdc++-v3/ChangeLog: * doc/xml/manual/documentation_hacking.xml: Adjust link to pdftex. * doc/html/manual/documentation_hacking.html: Regenerate.
2023-02-04libstdc++: Optimize basic_string move assignmentFrançois Dumont2-6/+57
Since resolution of Issue 2593 [1] we can consider that equal allocators before the propagate-on-move-assignment operations will still be equal afterward. So we can extend the optimization of transfering the storage of the move-to instance to the move-from one that is currently limited to always equal allocators. [1] https://cplusplus.github.io/LWG/issue2593 libstdc++-v3/ChangeLog: * include/bits/basic_string.h (operator=(basic_string&&)): Transfer move-to storage to the move-from instance when allocators are equal. * testsuite/21_strings/basic_string/allocator/char/move_assign.cc (test04): New test case.
2023-02-04Daily bump.GCC Administrator9-1/+417
2023-02-03range-op: Handle op?.undefined_p () in op[12]_range of comparisons [PR108647]Jakub Jelinek2-2/+53
As mentioned in the PR, we ICE because lhs is singleton [0, 0] or [1, 1] but op2 (or in other cases op1) is undefined and op?.*_bound () ICEs on those because there are no pairs for UNDEFINED. The following patch makes us set r to varying or return false in those cases. 2023-02-03 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/108647 * range-op.cc (operator_equal::op1_range, operator_not_equal::op1_range): Don't test op2 bound equality if op2.undefined_p (), instead set_varying. (operator_lt::op1_range, operator_le::op1_range, operator_gt::op1_range, operator_ge::op1_range): Return false if op2.undefined_p (). (operator_lt::op2_range, operator_le::op2_range, operator_gt::op2_range, operator_ge::op2_range): Return false if op1.undefined_p (). * g++.dg/torture/pr108647.C: New test.
2023-02-03fortran: Fix up hash table usage in gfc_trans_use_stmts [PR108451]Jakub Jelinek1-1/+5
The first testcase in the PR (which I haven't included in the patch because it is unclear to me if it is supposed to be valid or not) ICEs since extra hash table checking has been added recently. The problem is that gfc_trans_use_stmts does tree *slot = entry->decls->find_slot_with_hash (rent->use_name, hash, INSERT); if (*slot == NULL) and later on doesn't store anything into *slot and continues. Another spot a few lines later correctly clears the slot if it decides not to use the slot, so the following patch does the same. 2023-02-03 Jakub Jelinek <jakub@redhat.com> PR fortran/108451 * trans-decl.cc (gfc_trans_use_stmts): Call clear_slot before doing continue.
2023-02-03irange: Compare nonzero bits in irange with widest_int [PR108639]Aldy Hernandez3-2/+32
The problem here is we are trying to compare two ranges with different precisions and the == operator in wide_int is complaining. Interestingly, the problem is not the nonzero bits, but the fact that the entire ranges have different precisions. The reason we don't ICE when comparing the sub-ranges, is because the code in irange::operator== works on trees, and tree_int_cst_equal is promoting the comparison to a widest int: if (TREE_CODE (t1) == INTEGER_CST && TREE_CODE (t2) == INTEGER_CST && wi::to_widest (t1) == wi::to_widest (t2)) return 1; This is why we don't see the ICE until the nonzero bits comparison is done on wide ints. I think we should maintain the current equality behavior, and follow suit in the nonzero bit comparison. I have also fixed the legacy equality code, even though technically nonzero bits shouldn't appear in legacy. But better safe than sorry. PR tree-optimization/108639 gcc/ChangeLog: * value-range.cc (irange::legacy_equal_p): Compare nonzero bits as widest_int. (irange::operator==): Same.
2023-02-03range-ops: Handle undefined ranges in frange op[12]_range [PR108647]Aldy Hernandez1-0/+56
This patch gracefully handles undefined operand ranges for the floating point op[12]_range operators. This is very low risk, as we would have ICEd otherwise. We don't have a testcase that ICEs for floating point ranges, but it's only a matter of time. Besides, this dovetails nicely with the integer versions Jakub is testing. gcc/ChangeLog: PR tree-optimization/108647 * range-op-float.cc (foperator_lt::op1_range): Handle undefined ranges. (foperator_lt::op2_range): Same. (foperator_le::op1_range): Same. (foperator_le::op2_range): Same. (foperator_gt::op1_range): Same. (foperator_gt::op2_range): Same. (foperator_ge::op1_range): Same. (foperator_ge::op2_range): Same. (foperator_unordered_lt::op1_range): Same. (foperator_unordered_lt::op2_range): Same. (foperator_unordered_le::op1_range): Same. (foperator_unordered_le::op2_range): Same. (foperator_unordered_gt::op1_range): Same. (foperator_unordered_gt::op2_range): Same. (foperator_unordered_ge::op1_range): Same. (foperator_unordered_ge::op2_range): Same.
2023-02-03Reset SCEV before removing unreachable globals.Andrew MacLeod2-0/+29
SCEV should be reset in VRP before trying to remove unreachable globals to avoid triggering issues with it's cache. PR tree-optimization/107570 gcc/ * tree-vrp.cc (remove_and_update_globals): Reset SCEV. gcc/testsuite/ * gcc.dg/pr107570.c: New.
2023-02-03c++: wrong error with constexpr array and value-init [PR108158]Marek Polacek2-4/+32
In this test case, we find ourselves evaluating 't' which is ((const struct carray *) this)->data_[VIEW_CONVERT_EXPR<long int>(index)] in cxx_eval_array_reference. ctx->object is non-null, a RESULT_DECL, so we replace it with 't': new_ctx.object = t; // result_decl replaced and then we go to cxx_eval_constant_expression to evaluate an AGGR_INIT_EXPR, where we end up evaluating an INIT_EXPR (which is in the body of the constructor for seed_or_index): ((struct seed_or_index *) this)->value_ = NON_LVALUE_EXPR <0> whereupon in cxx_eval_store_expression we go to the probe loop where the 'this' is evaluated to ze_set.tables_.first_table_.data_[0] so the 'object' is ze_set, but that isn't in ctx->global->get_value_ptr so we fail with a bogus error. ze_set is not there because it comes from a different constexpr context (it's not in cv_cache either). The problem started with r12-2304 where I added the new_ctx.object replacement. That was to prevent a type mismatch: the type of 't' and ctx.object were different. It seems clear that we shouldn't have replaced ctx.object here. The cxx_eval_array_reference I mentioned earlier is called from cxx_eval_store_expression: 6257 init = cxx_eval_constant_expression (&new_ctx, init, vc_prvalue, 6258 non_constant_p, overflow_p); which already created a new context, whose .object we should be using unless, for instance, INIT contained a.b and we're evaluating the 'a' part, which I think was the case for r12-2304; in that case ctx.object has to be something different. It no longer seems necessary to replace new_ctx.object (likely due to changes in empty class handling). PR c++/108158 gcc/cp/ChangeLog: * constexpr.cc (cxx_eval_array_reference): Don't replace new_ctx.object. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/constexpr-108158.C: New test.
2023-02-03c++: Add fixed test [PR101071]Marek Polacek1-0/+95
As a happy accident, this was fixed by the recent r13-2978. PR c++/101071 gcc/testsuite/ChangeLog: * g++.dg/cpp0x/variadic-alias8.C: New test.
2023-02-03libstdc++: Mark pieces of gnu-linux/os_support.h linux-specificSamuel Thibault1-9/+13
This is notably needed because in glibc 2.34, the move of pthread functions into libc.so happened for Linux only, not GNU/Hurd. The pthread_self() function can also always be used fine as it is on GNU/Hurd. libstdc++-v3/ChangeLog: * config/os/gnu-linux/os_defines.h [!__linux__] (_GLIBCXX_NATIVE_THREAD_ID, _GLIBCXX_GTHREAD_USE_WEAK): Do not define. Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
2023-02-03[modula-2] Bugfix to allow html doc build and simplify target dir creationGaius Mulley2-81/+102
This patch allows the m2 html documentation to be built. It also simplifies all calls to $(mkinstalldirs) using $(@D) in gcc/m2/Make-lang.in. gcc/ChangeLog: * doc/gm2.texi (Internals): Remove from menu. (Using): Comment out ifnohtml conditional. (Documentation): Use gcc url. (License): Node simplified. (Copying): New node. Include gpl_v3_without_node. (Contributing): Node simplified. (Internals): Commented out. (Libraries): Node simplified. (Indices): Ditto. (Contents): Ditto. (Functions): Ditto. gcc/m2/ChangeLog: * Make-lang.in (TEXISRC): Remove m2/images/gnu.eps. (RSTSRC): Remove m2/images/gnu.eps. (doc/m2.dvi): Add $(objdir)/m2/images/gnu.eps. (doc/m2.pdf): Add $(objdir)/m2/images/gnu.eps. (M2_PDFFILES): New definition. (m2.install-pdf): New rule. (m2.pod): Add $(objdir)/m2/images/gnu.eps. (m2.info): Add $(objdir)/m2/images/gnu.eps. (m2.html): New rule. (m2/gpl_v3_without_node.texi): New rule. (plugin/m2rte$(soext)): Simplify mkinstalldirs. (cc1gm2$(exeext)): Ditto. (m2/stage1/cc1gm2$(exeext)): Ditto. (m2/gm2-gcc/%.o): Ditto. (m2/gm2-gcc/rtegraph.o): Ditto. (m2/gm2-gcc/$(SRC_PREFIX)%.h): Ditto. (m2/mc-boot/$(SRC_PREFIX)%.o):Ditto. (m2/mc-boot-ch/$(SRC_PREFIX)%.o): Ditto. (m2/mc-boot/main.o): Ditto. (m2/gm2-libs-boot/%.o): Ditto. (m2/gm2-libs-boot/$(SRC_PREFIX)%.h): Ditto. (m2/gm2-libs-boot/RTcodummy.o): Ditto. (m2/gm2-libs-boot/wrapc.o): Ditto. (m2/gm2-libs-boot/M2LINK.o): Ditto. (m2/gm2-libs-boot/UnixArgs.o): Ditto. (m2/gm2-libs-boot/choosetemp.o): Ditto. (m2/gm2-libs-boot/errno.o): Ditto. (m2/gm2-libs-boot/dtoa.o): Ditto. (m2/gm2-libs-boot/ldtoa.o): Ditto. (m2/gm2-libs-boot/termios.o): Ditto. (m2/gm2-libs-boot/SysExceptions.o): Ditto. (m2/gm2-libs-boot/SysStorage.o): Ditto. (m2/gm2-compiler-boot/M2GCCDeclare.o): Ditto. (m2/gm2-compiler-boot/M2Error.o): Ditto. (m2/gm2-compiler-boot/%.o): Ditto. (m2/gm2-compiler-boot/$(SRC_PREFIX)%.h): Ditto. (m2/gm2-compiler-boot/m2flex.o): Ditto. (m2/gm2-compiler/m2flex.c): Ditto. (m2/gm2-libiberty/$(SRC_PREFIX)%.h): Ditto. (m2/gm2-compiler/%.o): Ditto. (m2/gm2-compiler/m2flex.o): Ditto. (m2/gm2-compiler/%.o): Ditto. (m2/gm2-libs-iso/%.o): Ditto. (m2/gm2-libs/gm2-libs-host.h): Ditto. ($(objdir)/m2/gm2-libs-min/SYSTEM.def): Ditto. ($(objdir)/m2/gm2-libs/SYSTEM.def): Ditto. ($(objdir)/m2/gm2-libs-iso/SYSTEM.def): Ditto. ($(objdir)/m2/gm2-libs-coroutines/SYSTEM.def): Ditto. (m2/gm2-compiler/gm2.a): Ditto. (m2/gm2-libs-boot/libgm2.a): Ditto. (m2/gm2-compiler-boot/gm2.a): Ditto. (m2/boot-bin/mklink$(exeext)): Ditto. (m2/gm2-compiler-boot/$(SRC_PREFIX)%.h): Ditto. (m2/gm2-compiler/%.mod): Ditto. (m2/gm2-compiler-boot/%.mod): Ditto. (m2/pge-boot/%.o): Ditto. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2023-02-03libstdc++: Implement ranges::find_last{,_if,_if_not} from P1223R5Patrick Palka4-0/+400
libstdc++-v3/ChangeLog: * include/bits/ranges_algo.h (__find_last_fn, find_last): Define. (__find_last_if_fn, find_last_if): Define. (__find_last_if_not_fn, find_last_if_not): Define. * testsuite/25_algorithms/find_last/1.cc: New test. * testsuite/25_algorithms/find_last_if/1.cc: New test. * testsuite/25_algorithms/find_last_if_not/1.cc: New test.
2023-02-03libstdc++: Implement ranges::iota from P2440R1Patrick Palka2-0/+77
libstdc++-v3/ChangeLog: * include/bits/ranges_algo.h (out_value_result): Define. (iota_result): Define. (__iota_fn, iota): Define. * testsuite/25_algorithms/iota/1.cc: New test.
2023-02-03libstdc++: Implement ranges::contains/contains_subrange from P2302R4Patrick Palka3-0/+124
libstdc++-v3/ChangeLog: * include/bits/ranges_algo.h (__contains_fn, contains): Define. (__contains_subrange_fn, contains_subrange): Define. * testsuite/25_algorithms/contains/1.cc: New test. * testsuite/25_algorithms/contains_subrange/1.cc: New test.
2023-02-03arm: [MVE] Add missing length=8 attributeChristophe Lyon1-5/+9
I have noticed that the "length" "8" attribute is missing in a few patterns in mve.md. gcc/ * config/arm/mve.md (mve_vabavq_p_<supf><mode>): Add length attribute. (mve_vqshluq_m_n_s<mode>): Likewise. (mve_vshlq_m_<supf><mode>): Likewise. (mve_vsriq_m_n_<supf><mode>): Likewise. (mve_vsubq_m_<supf><mode>): Likewise.
2023-02-03arm: Fix warning in libgcc/config/arm/pr-support.cChristophe Lyon1-0/+6
I have noticed some warnings when building GCC for arm-eabi: pr-support.c:110:7: warning: variable ‘set_pac_sp’ set but not used [-Wunused-but-set-variable] pr-support.c:109:7: warning: variable ‘set_pac’ set but not used [-Wunused-but-set-variable] This small patch avoids them by defining these two variables undef TARGET_HAVE_PACBTI, like the code which actually uses them. libgcc/ * config/arm/pr-support.c (__gnu_unwind_execute): Use TARGET_HAVE_PACBTI to define set_pac and set_pac_sp.
2023-02-03c++: unexpected ADDR_EXPR after overload set pruning [PR107461]Patrick Palka2-5/+36
Here the ahead-of-time overload set pruning in finish_call_expr is unintentionally returning a CALL_EXPR whose (pruned) callee is wrapped in an ADDR_EXPR, despite the original callee not being wrapped in an ADDR_EXPR. This ends up causing a bogus declaration mismatch error in the below testcase because the call to min in #1 gets expressed as a CALL_EXPR of ADDR_EXPR of FUNCTION_DECL, whereas the level-lowered call to min in #2 gets expressed instead as a CALL_EXPR of FUNCTION_DECL. This patch fixes this by stripping the spurious ADDR_EXPR appropriately. Thus the first call to min now also gets expressed as a CALL_EXPR of FUNCTION_DECL, matching the behavior before r12-6075-g2decd2cabe5a4f. PR c++/107461 gcc/cp/ChangeLog: * semantics.cc (finish_call_expr): Strip ADDR_EXPR from the selected callee during overload set pruning. gcc/testsuite/ChangeLog: * g++.dg/template/call9.C: New test.
2023-02-03c++: ICE on unviable/ambiguous constrained dtors [PR96745]Patrick Palka2-3/+37
Here we're crashing from check_bases_and_members due to CLASSTYPE_DESTRUCTOR being an OVERLOAD which, due to the pruning performed by add_method, should only happen if there is no viable destructor or the destructor is ambiguous because of unsatisfied or ambiguous constraints. This patch fixes this by making check_bases_and_members naturally handle CLASSTYPE_DESTRUCTOR being an OVERLOAD. It's then convenient to prune the OVERLOAD after effectively diagnosing the overload resolution failure in check_methods. PR c++/96745 gcc/cp/ChangeLog: * class.cc (check_methods): Diagnose an unviable OVERLOAD set for CLASSTYPE_DESTRUCTOR differently from an ambiguous one. Then prune the OVERLOAD to a single function. (check_bases_and_members): Handle CLASSTYPE_DESTRUCTOR being an OVERLOAD when calling deduce_noexcept_on_destructor. Document why it has to be called before check_methods. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-dtor1.C: New test.
2023-02-03c++: excessive satisfaction in check_methods [PR108579]Patrick Palka2-8/+22
In check_methods we're unnecessarily checking satisfaction for all constructors and assignment operators, even those that don't look like copy/move special members. In the testcase below this manifests as an unstable satisfaction error because the satisfaction result is first determined to be false during check_methods (since A<int> is incomplete at this point) and later true after completion of A<int>. This patch fixes this simply by swapping the order of the constraint_satisfied_p and copy/move_fn_p tests. PR c++/108579 gcc/cp/ChangeLog: * class.cc (check_methods): Swap order of constraints_satisfied_p and copy/move_fn_p tests. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-pr108579.C: New test.
2023-02-03ipa: Avoid invalid gimple when IPA-CP and IPA-SRA disagree on types (108384)Martin Jambor3-19/+76
When the compiled program contains type mismatches between callers and callees when it comes to a parameter, IPA-CP can try to propagate one constant from callers while IPA-SRA may try to split a parameter expecting a value of a different size on the same offset. This then currently leads to creation of a VIEW_CONVERT_EXPR with mismatching type sizes of LHS and RHS which is correctly flagged by the GIMPLE verifier as invalid. It seems that the best course of action is to try and avoid the situation altogether and so this patch adds a check to IPA-SRA that peeks into the result of IPA-CP and when it sees a value on the same offset but with a mismatching size, it just decides to leave that particular parameter be. gcc/ChangeLog: 2023-02-02 Martin Jambor <mjambor@suse.cz> PR ipa/108384 * ipa-sra.cc (push_param_adjustments_for_index): Remove a size check when comparing to an IPA-CP value. (dump_list_of_param_indices): New function. (adjust_parameter_descriptions): Check for mismatching IPA-CP values. Dump removed candidates using dump_list_of_param_indices. * ipa-param-manipulation.cc (ipa_param_body_adjustments::modify_expression): Add assert checking sizes of a VIEW_CONVERT_EXPR will match. (ipa_param_body_adjustments::modify_assignment): Likewise. gcc/testsuite/ChangeLog: 2023-02-02 Martin Jambor <mjambor@suse.cz> PR ipa/108384 * gcc.dg/ipa/pr108384.c: New test.
2023-02-03libgomp: Fix reverse offload issuesTobias Burnus2-4/+36
If there is nothing to map, skip the mapping and avoid attempting to copy 0 bytes from addrs, sizes and kinds. Additionally, it could happen that a non-allocated address was deallocated, such as a pointer set, leading to a free for the actual data. libgomp/ * target.c (gomp_target_rev): Handle mapnum == 0 and avoid freeing not allocated memory. * testsuite/libgomp.fortran/reverse-offload-6.f90: New test.
2023-02-03libgomp: enable reverse offload for AMDGCNTobias Burnus2-6/+10
libgomp/ChangeLog: * libgomp.texi (5.0 Impl. Status, gcn specifics): Update for reverse offload. * plugin/plugin-gcn.c (GOMP_OFFLOAD_get_num_devices): Accept reverse-offload requirement.
2023-02-03RISC-V: Remove unnecessary register class.Monk Chiang2-14/+2
Avoid VL_REGS, VTYPE_REGS join register allocation. gcc/ChangeLog: * config/riscv/riscv.h: Remove VL_REGS, VTYPE_REGS class. * config/riscv/riscv.cc: Ditto.
2023-02-03RISC-V: Fix constraint bug for binary operationJu-Zhe Zhong4-69/+75
Current constraint configuration will generate: vadd.vv v0,v24,v25,v0.t vsll.vx v0,v24,a5,v0.t They are incorrect according to RVV ISA. This patch fix this obvious issue. gcc/ChangeLog: * config/riscv/vector-iterators.md (sll.vi): Fix constraint bug. (sll.vv): Ditto. (%3,%4): Ditto. (%3,%v4): Ditto. * config/riscv/vector.md: Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/binop_vv_constraint-1.c: * gcc.target/riscv/rvv/base/shift_vx_constraint-1.c:
2023-02-03RISC-V: Add vsll.vx C++ API testsJu-Zhe Zhong15-0/+5238
gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/base/vsll_vx-1.C: New test. * g++.target/riscv/rvv/base/vsll_vx-2.C: New test. * g++.target/riscv/rvv/base/vsll_vx-3.C: New test. * g++.target/riscv/rvv/base/vsll_vx_mu-1.C: New test. * g++.target/riscv/rvv/base/vsll_vx_mu-2.C: New test. * g++.target/riscv/rvv/base/vsll_vx_mu-3.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tu-1.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tu-2.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tu-3.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tum-1.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tum-2.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tum-3.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tumu-1.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tumu-2.C: New test. * g++.target/riscv/rvv/base/vsll_vx_tumu-3.C: New test.
2023-02-03RISC-V: Add vsra.vx C++ API testsJu-Zhe Zhong15-0/+2862
gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/base/vsra_vx-1.C: New test. * g++.target/riscv/rvv/base/vsra_vx-2.C: New test. * g++.target/riscv/rvv/base/vsra_vx-3.C: New test. * g++.target/riscv/rvv/base/vsra_vx_mu-1.C: New test. * g++.target/riscv/rvv/base/vsra_vx_mu-2.C: New test. * g++.target/riscv/rvv/base/vsra_vx_mu-3.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tu-1.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tu-2.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tu-3.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tum-1.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tum-2.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tum-3.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tumu-1.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tumu-2.C: New test. * g++.target/riscv/rvv/base/vsra_vx_tumu-3.C: New test.
2023-02-03RISC-V: Add vsrl.vx C++ API testsJu-Zhe Zhong15-0/+2862
gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/base/vsrl_vx-1.C: New test. * g++.target/riscv/rvv/base/vsrl_vx-2.C: New test. * g++.target/riscv/rvv/base/vsrl_vx-3.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_mu-1.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_mu-2.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_mu-3.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tu-1.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tu-2.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tu-3.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tum-1.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tum-2.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tum-3.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tumu-1.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tumu-2.C: New test. * g++.target/riscv/rvv/base/vsrl_vx_tumu-3.C: New test.
2023-02-03RISC-V: Add shift constraint testsJu-Zhe Zhong1-0/+133
gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/shift_vx_constraint-1.c: New test.
2023-02-03RISC-V: Add vsll.vx C++ API testsJu-Zhe Zhong18-0/+5256
gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/vsll_vx-1.c: New test. * gcc.target/riscv/rvv/base/vsll_vx-2.c: New test. * gcc.target/riscv/rvv/base/vsll_vx-3.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_m-1.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_m-2.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_m-3.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_mu-1.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_mu-2.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_mu-3.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tu-1.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tu-2.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tu-3.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tum-1.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tum-2.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tum-3.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tumu-1.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tumu-2.c: New test. * gcc.target/riscv/rvv/base/vsll_vx_tumu-3.c: New test.
2023-02-03RISC-V: Add vsra.vx C API testsJu-Zhe Zhong18-0/+2880
gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/vsra_vx-1.c: New test. * gcc.target/riscv/rvv/base/vsra_vx-2.c: New test. * gcc.target/riscv/rvv/base/vsra_vx-3.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_m-1.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_m-2.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_m-3.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_mu-1.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_mu-2.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_mu-3.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tu-1.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tu-2.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tu-3.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tum-1.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tum-2.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tum-3.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tumu-1.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tumu-2.c: New test. * gcc.target/riscv/rvv/base/vsra_vx_tumu-3.c: New test.
2023-02-03RISC-V: Add vsrl.vx C API testsJu-Zhe Zhong18-0/+2880
gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/vsrl_vx-1.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx-2.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx-3.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_m-1.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_m-2.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_m-3.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_mu-1.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_mu-2.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_mu-3.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tu-1.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tu-2.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tu-3.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tum-1.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tum-2.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tum-3.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tumu-1.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tumu-2.c: New test. * gcc.target/riscv/rvv/base/vsrl_vx_tumu-3.c: New test.