From 3e05eb949d77201a0220e2e596656967c716063f Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sun, 10 Mar 2024 00:17:04 +0000 Subject: [PATCH 001/551] Daily bump. --- gcc/ChangeLog | 39 +++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/testsuite/ChangeLog | 15 +++++++++++++++ libstdc++-v3/ChangeLog | 23 +++++++++++++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5b966a63e80e..3ac5f039c4bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,42 @@ +2024-03-09 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.md: Fix typos in comment, indentation glitches + and some other nits. + +2024-03-09 Jakub Jelinek <jakub@redhat.com> + + PR target/114284 + * fwprop.cc (try_fwprop_subst_pattern): Don't propagate + src containing MEMs unless prop.likely_profitable_p (). + +2024-03-09 Xi Ruoyao <xry111@xry111.site> + + * config/loongarch/loongarch.cc (loongarch_print_operand_reloc): + Support 'Q' for R_LARCH_RELAX for TLS IE. + (loongarch_output_move): Use 'Q' to print R_LARCH_RELAX for TLS + IE. + * config/loongarch/loongarch.md (ld_from_got<mode>): Likewise. + +2024-03-09 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.cc (avr_rtx_costs_1) [PLUS]: Determine cost for + usum_widenqihi and add_zero_extend1. + [MINUS]: Determine costs for udiff_widenqihi, sub+zero_extend, + sub+sign_extend. + * config/avr/avr.md (*addhi3.sign_extend1, *subhi3.sign_extend2): + Compute exact insn lengths. + (*usum_widenqihi3): Allow input operands to commute. + +2024-03-09 Jakub Jelinek <jakub@redhat.com> + + * config/i386/i386.opt.urls: Regenerate. + +2024-03-09 Lulu Cheng <chenglulu@loongson.cn> + + * config/loongarch/sync.md (atomic_cas_value_strong<mode>): + In loongarch64, a sign extension operation is added when + operands[2] is a register operand and the mode is SImode. + 2024-03-08 Martin Jambor <mjambor@suse.cz> PR ipa/113757 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 7237a5054bab..a187030afadc 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240309 +20240310 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fce619c24d10..14867898c055 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,18 @@ +2024-03-09 Xi Ruoyao <xry111@xry111.site> + + * gcc.target/loongarch/tls-ie-relax.c: New test. + * gcc.target/loongarch/tls-ie-norelax.c: New test. + * gcc.target/loongarch/tls-ie-extreme.c: New test. + +2024-03-09 Lulu Cheng <chenglulu@loongson.cn> + + * gcc.target/loongarch/regname-fp-s9.c: Add compilation option + '-Wno-pedantic -std=gnu90'. + +2024-03-09 Lulu Cheng <chenglulu@loongson.cn> + + * g++.target/loongarch/atomic-cas-int.C: New test. + 2024-03-08 Martin Jambor <mjambor@suse.cz> PR ipa/113757 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3ed4b0fc3a15..93d41693d23e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,26 @@ +2024-03-09 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114240 + * include/bits/chrono_io.h (_Parser::operator()): Assume + hours(0) for a time_point, so that a time is not required + to be present. + * testsuite/std/time/parse/114240.cc: New test. + +2024-03-09 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114279 + * include/bits/chrono_io.h (_Parser::_M_is_leap_second): New + data member. + (_Parser::_M_reserved): Reserve padding bits for future use. + (_Parser::operator()): Set _M_is_leap_second if %S reads 60s. + (from_stream): Only allow _M_is_leap_second for utc_time and + local_time. Adjust arithmetic for utc_time so that leap seconds + are preserved. Use time_point_cast to convert to a possibly + lower-precision result type. + * testsuite/std/time/parse.cc: Move to ... + * testsuite/std/time/parse/parse.cc: ... here. + * testsuite/std/time/parse/114279.cc: New test. + 2024-03-07 Jonathan Wakely <jwakely@redhat.com> * include/bits/chrono_io.h (_Parser::operator()): Use From 50531b6d400945793a1d549e6ee941d989319d42 Mon Sep 17 00:00:00 2001 From: jlaw <jeffreyalaw@gmail.com> Date: Sat, 9 Mar 2024 19:27:32 -0700 Subject: [PATCH 002/551] [committed] [PR target/111362] Fix compare-debug issue with mode switching The issue here is the code we emit for mode-switching can change when -g is added to the command line. This is caused by processing debug notes occurring after a call which is the last real statement in a basic block. Without -g the CALL_INSN is literally the last insn in the block and the loop exits. If mode switching after the call is needed, it'll be handled as we process outgoing edges. With -g the loop iterates again and in the processing of the node the backend signals that a mode switch is necessary. I pondered fixing this in the target, but the better fix is to ignore the debug notes in the insn stream. I did a cursory review of some of the other compare-debug failures, but did not immediately see others which would likely be fixed by this change. Sigh. Anyway, bootstrapped and regression tested on x86. Regression tested on rv64 as well. PR target/111362 gcc/ * mode-switching.cc (optimize_mode_switching): Only process NONDEBUG insns. gcc/testsuite * gcc.target/riscv/compare-debug-1.c: New test. * gcc.target/riscv/compare-debug-2.c: New test. --- gcc/mode-switching.cc | 2 +- gcc/testsuite/gcc.target/riscv/compare-debug-1.c | 9 +++++++++ gcc/testsuite/gcc.target/riscv/compare-debug-2.c | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/riscv/compare-debug-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/compare-debug-2.c diff --git a/gcc/mode-switching.cc b/gcc/mode-switching.cc index 583929184ce7..a145b77397d1 100644 --- a/gcc/mode-switching.cc +++ b/gcc/mode-switching.cc @@ -959,7 +959,7 @@ optimize_mode_switching (void) FOR_BB_INSNS (bb, insn) { - if (INSN_P (insn)) + if (NONDEBUG_INSN_P (insn)) { int mode = targetm.mode_switching.needed (e, insn, live_now); rtx link; diff --git a/gcc/testsuite/gcc.target/riscv/compare-debug-1.c b/gcc/testsuite/gcc.target/riscv/compare-debug-1.c new file mode 100644 index 000000000000..d65bb287b9a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/compare-debug-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-ch --param=max-completely-peel-times=0 -march=rv64iv -mabi=lp64d -fcompare-debug" } */ + + +void +foo(void) { + for (unsigned i = 0; i < sizeof(foo); i++) + __builtin_printf("%d", i); +} diff --git a/gcc/testsuite/gcc.target/riscv/compare-debug-2.c b/gcc/testsuite/gcc.target/riscv/compare-debug-2.c new file mode 100644 index 000000000000..d87758475e46 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/compare-debug-2.c @@ -0,0 +1,3 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-ch --param=max-completely-peel-times=0 -march=rv64iv -mabi=lp64d -fno-dce -fschedule-insns -fcompare-debug" } */ +#include "compare-debug-1.c" From 7c8f0a79a7e1e42f846ddbca14b98b47ddcfd178 Mon Sep 17 00:00:00 2001 From: jlaw <jeffreyalaw@gmail.com> Date: Sat, 9 Mar 2024 20:11:39 -0700 Subject: [PATCH 003/551] [committed] [target/102250] Document python requirement for risc-v PR target/102250 gcc/ * doc/install.texi: Document need for python when building RISC-V compilers. --- gcc/doc/install.texi | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 173233096d19..e3650e0c4f49 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -253,6 +253,11 @@ name of the package depends on your distro) or you must build GCC as a @option{--disable-multilib}. Otherwise, you may encounter an error such as @samp{fatal error: gnu/stubs-32.h: No such file} +@item Python +If you configure a RISC-V compiler with the option @option{--with-arch} and +the specified architecture string is non-canonical, then you will need +@command{python} installed on the build system. + @item @anchor{GNAT-prerequisite}GNAT In order to build GNAT, the Ada compiler, you need a working GNAT From 6f7d000fcacef31a6947f95021e445c846170f92 Mon Sep 17 00:00:00 2001 From: jlaw <jeffreyalaw@gmail.com> Date: Sat, 9 Mar 2024 21:33:47 -0700 Subject: [PATCH 004/551] Revert "[committed] Adjust expectations for pr59533-1.c" This reverts commit 7e16f819ff413c48702f9087b62eaac39a060a14. --- gcc/testsuite/gcc.target/sh/pr59533-1.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gcc/testsuite/gcc.target/sh/pr59533-1.c b/gcc/testsuite/gcc.target/sh/pr59533-1.c index 859b8e2d24c7..b0469859df5b 100644 --- a/gcc/testsuite/gcc.target/sh/pr59533-1.c +++ b/gcc/testsuite/gcc.target/sh/pr59533-1.c @@ -2,15 +2,15 @@ /* { dg-do compile } */ /* { dg-options "-O1" } */ -/* { dg-final { scan-assembler-times "shll" 3 } } */ +/* { dg-final { scan-assembler-times "shll" 1 } } */ /* { dg-final { scan-assembler-times "movt" 5 } } */ /* { dg-final { scan-assembler-times "rotcl" 1 } } */ /* { dg-final { scan-assembler-times "and" 3 } } */ /* { dg-final { scan-assembler-times "extu.b" 5 } } */ -/* { dg-final { scan-assembler-times "cmp/pz" 25 { target { ! sh2a } } } } */ -/* { dg-final { scan-assembler-times "addc" 6 { target { ! sh2a } } } } */ -/* { dg-final { scan-assembler-times "subc" 14 { target { ! sh2a } } } } */ +/* { dg-final { scan-assembler-times "cmp/pz" 27 { target { ! sh2a } } } } */ +/* { dg-final { scan-assembler-times "addc" 4 { target { ! sh2a } } } } */ +/* { dg-final { scan-assembler-times "subc" 16 { target { ! sh2a } } } } */ /* { dg-final { scan-assembler-times "cmp/pz" 25 { target { sh2a } } } } */ /* { dg-final { scan-assembler-times "addc" 6 { target { sh2a } } } } */ From 993c6de642ffeb2867edbe80ff2a72c0a2eb604e Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Sun, 10 Mar 2024 11:02:35 +0800 Subject: [PATCH 005/551] VECT: Fix ICE for vectorizable LD/ST when both len and store are enabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch would like to fix one ICE in vectorizable_store when both the loop_masks and loop_lens are enabled. The ICE looks like below when build with "-march=rv64gcv -O3". during GIMPLE pass: vect test.c: In function ‘d’: test.c:6:6: internal compiler error: in vectorizable_store, at tree-vect-stmts.cc:8691 6 | void d() { | ^ 0x37a6f2f vectorizable_store .../__RISC-V_BUILD__/../gcc/tree-vect-stmts.cc:8691 0x37b861c vect_analyze_stmt(vec_info*, _stmt_vec_info*, bool*, _slp_tree*, _slp_instance*, vec<stmt_info_for_cost, va_heap, vl_ptr>*) .../__RISC-V_BUILD__/../gcc/tree-vect-stmts.cc:13242 0x1db5dca vect_analyze_loop_operations .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:2208 0x1db885b vect_analyze_loop_2 .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:3041 0x1dba029 vect_analyze_loop_1 .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:3481 0x1dbabad vect_analyze_loop(loop*, vec_info_shared*) .../__RISC-V_BUILD__/../gcc/tree-vect-loop.cc:3639 0x1e389d1 try_vectorize_loop_1 .../__RISC-V_BUILD__/../gcc/tree-vectorizer.cc:1066 0x1e38f3d try_vectorize_loop .../__RISC-V_BUILD__/../gcc/tree-vectorizer.cc:1182 0x1e39230 execute .../__RISC-V_BUILD__/../gcc/tree-vectorizer.cc:1298 There are two ways to reach vectorizer LD/ST, one is the analysis and the other is transform. We cannot have both the lens and the masks enabled during transform but it is valid during analysis. Given the transform doesn't required cost_vec, we can only enable the assert based on cost_vec is NULL or not. Below testsuites are passed for this patch: * The x86 bootstrap tests. * The x86 fully regression tests. * The aarch64 fully regression tests. * The riscv fully regressison tests. gcc/ChangeLog: * tree-vect-stmts.cc (vectorizable_store): Enable the assert during transform process. (vectorizable_load): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/pr114195-1.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- .../gcc.target/riscv/rvv/base/pr114195-1.c | 15 +++++++++++++++ gcc/tree-vect-stmts.cc | 18 ++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr114195-1.c diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114195-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114195-1.c new file mode 100644 index 000000000000..a67b847112b8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114195-1.c @@ -0,0 +1,15 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize" } */ + +long a, b; +extern short c[]; + +void d() { + for (int e = 0; e < 35; e = 2) { + a = ({ a < 0 ? a : 0; }); + b = ({ b < 0 ? b : 0; }); + + c[e] = 0; + } +} diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 14a3ffb5f021..e8617439a480 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -8697,8 +8697,13 @@ vectorizable_store (vec_info *vinfo, ? &LOOP_VINFO_LENS (loop_vinfo) : NULL); - /* Shouldn't go with length-based approach if fully masked. */ - gcc_assert (!loop_lens || !loop_masks); + /* The vect_transform_stmt and vect_analyze_stmt will go here but there + are some difference here. We cannot enable both the lens and masks + during transform but it is allowed during analysis. + Shouldn't go with length-based approach if fully masked. */ + if (cost_vec == NULL) + /* The cost_vec is NULL during transfrom. */ + gcc_assert ((!loop_lens || !loop_masks)); /* Targets with store-lane instructions must not require explicit realignment. vect_supportable_dr_alignment always returns either @@ -10577,8 +10582,13 @@ vectorizable_load (vec_info *vinfo, ? &LOOP_VINFO_LENS (loop_vinfo) : NULL); - /* Shouldn't go with length-based approach if fully masked. */ - gcc_assert (!loop_lens || !loop_masks); + /* The vect_transform_stmt and vect_analyze_stmt will go here but there + are some difference here. We cannot enable both the lens and masks + during transform but it is allowed during analysis. + Shouldn't go with length-based approach if fully masked. */ + if (cost_vec == NULL) + /* The cost_vec is NULL during transfrom. */ + gcc_assert ((!loop_lens || !loop_masks)); /* Targets with store-lane instructions must not require explicit realignment. vect_supportable_dr_alignment always returns either From 8fe27ed193d60f6cd8b34761858a720c95eabbdb Mon Sep 17 00:00:00 2001 From: jlaw <jeffreyalaw@gmail.com> Date: Sun, 10 Mar 2024 11:58:00 -0600 Subject: [PATCH 006/551] [committed] [PR tree-optimization/110199] Simplify MIN/MAX more often So as I mentioned in the BZ, the case of t = MIN_EXPR (A, B) where we know something about the relationship between A and B can be trivially handled by some existing code in DOM. That existing code would simplify when A == B. But by testing GE and LE instead of EQ we can cover more cases with minimal effort. When applicable the MIN/MAX turns into a simple copy. I made one other change. We have other binary operations that we simplify when we know something about the relationship between the operands. That code was not canonicalizing the order of operands when building the expression to lookup in the hash tables to discover that relationship. Since those paths are only testing for equality, we can trivially reverse them and not have to worry about changing codes or anything like that. So extremely safe and avoids having to come back and fix that code to match the MIN_EXPR/MAX_EXPR case later. Bootstrapped on x86 and also tested on the crosses. I briefly thought there was an sh regression, but that was actually the recent fwprop changes twiddling code generation for one test. PR tree-optimization/110199 gcc/ * tree-ssa-scopedtables.cc (avail_exprs_stack::simplify_binary_operation): Generalize handling of MIN_EXPR/MAX_EXPR to allow additional simplifications. Canonicalize comparison operands for other cases. gcc/testsuite * gcc.dg/tree-ssa/minmax-27.c: New test. * gcc.dg/tree-ssa/minmax-28.c: New test. --- gcc/testsuite/gcc.dg/tree-ssa/minmax-27.c | 118 ++++++++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/minmax-28.c | 117 +++++++++++++++++++++ gcc/tree-ssa-scopedtables.cc | 53 ++++++++-- 3 files changed, 282 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/minmax-27.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/minmax-28.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-27.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-27.c new file mode 100644 index 000000000000..4b94203b0d05 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-27.c @@ -0,0 +1,118 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-dom2" } */ + + +int min1(int a, int b) +{ + if (a <= b) + return a < b ? a : b; + return 0; +} + +int min2(int a, int b) +{ + if (a <= b) + return a > b ? b : a; + return 0; +} + +int min3(int a, int b) +{ + if (a < b) + return a < b ? a : b; + return 0; +} + +int min4(int a, int b) +{ + if (a < b) + return a > b ? b : a; + return 0; +} + +int min5(int a, int b) +{ + if (a <= b) + return a <= b ? a : b; + return 0; +} + +int min6(int a, int b) +{ + if (a <= b) + return a >= b ? b : a; + return 0; +} + +int min7(int a, int b) +{ + if (a < b) + return a <= b ? a : b; + return 0; +} + +int min8(int a, int b) +{ + if (b > a) + return a >= b ? b : a; + return 0; +} + +int min9(int a, int b) +{ + if (b >= a) + return a < b ? a : b; + return 0; +} + +int min10(int a, int b) +{ + if (b >= a) + return a > b ? b : a; + return 0; +} + +int min11(int a, int b) +{ + if (b > a) + return a < b ? a : b; + return 0; +} + +int min12(int a, int b) +{ + if (b > a) + return a > b ? b : a; + return 0; +} + +int min13(int a, int b) +{ + if (b >= a) + return a <= b ? a : b; + return 0; +} + +int min14(int a, int b) +{ + if (b >= a) + return a >= b ? b : a; + return 0; +} + +int min15(int a, int b) +{ + if (b > a) + return a <= b ? a : b; + return 0; +} + +int min16(int a, int b) +{ + if (b > a) + return a >= b ? b : a; + return 0; +} + +/* { dg-final { scan-tree-dump-not "MIN_EXPR" "dom2" } } */ + diff --git a/gcc/testsuite/gcc.dg/tree-ssa/minmax-28.c b/gcc/testsuite/gcc.dg/tree-ssa/minmax-28.c new file mode 100644 index 000000000000..732126d74494 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/minmax-28.c @@ -0,0 +1,117 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-dom2" } */ + +int max1(int a, int b) +{ + if (a <= b) + return a < b ? b : a; + return 0; +} + +int max2(int a, int b) +{ + if (a <= b) + return a > b ? a : b; + return 0; +} + +int max3(int a, int b) +{ + if (a < b) + return a < b ? b : a; + return 0; +} + +int max4(int a, int b) +{ + if (a < b) + return a > b ? a : b; + return 0; +} + +int max5(int a, int b) +{ + if (a <= b) + return a <= b ? b : a; + return 0; +} + +int max6(int a, int b) +{ + if (a <= b) + return a >= b ? a : b; + return 0; +} + +int max7(int a, int b) +{ + if (a < b) + return a <= b ? b : a; + return 0; +} + +int max8(int a, int b) +{ + if (b > a) + return a >= b ? a : b; + return 0; +} + +int max9(int a, int b) +{ + if (b >= a) + return a < b ? b : a; + return 0; +} + +int max10(int a, int b) +{ + if (b >= a) + return a > b ? a : b; + return 0; +} + +int max11(int a, int b) +{ + if (b > a) + return a < b ? b : a; + return 0; +} + +int max12(int a, int b) +{ + if (b > a) + return a > b ? a : b; + return 0; +} + +int max13(int a, int b) +{ + if (b >= a) + return a <= b ? b : a; + return 0; +} + +int max14(int a, int b) +{ + if (b >= a) + return a >= b ? a : b; + return 0; +} + +int max15(int a, int b) +{ + if (b > a) + return a <= b ? b : a; + return 0; +} + +int max16(int a, int b) +{ + if (b > a) + return a >= b ? a : b; + return 0; +} + +/* { dg-final { scan-tree-dump-not "MAX_EXPR" "dom2" } } */ + diff --git a/gcc/tree-ssa-scopedtables.cc b/gcc/tree-ssa-scopedtables.cc index e53dfd445eaa..c367d37fa9b5 100644 --- a/gcc/tree-ssa-scopedtables.cc +++ b/gcc/tree-ssa-scopedtables.cc @@ -127,10 +127,49 @@ avail_exprs_stack::simplify_binary_operation (gimple *stmt, switch (code) { - /* For these cases, if we know the operands - are equal, then we know the result. */ + /* For these cases, if we know some relationships + between the operands, then we can simplify. */ case MIN_EXPR: case MAX_EXPR: + { + /* Build a simple equality expr and query the hash table + for it. */ + struct hashable_expr expr; + expr.type = boolean_type_node; + expr.kind = EXPR_BINARY; + expr.ops.binary.op = LE_EXPR; + tree rhs1 = gimple_assign_rhs1 (stmt); + tree rhs2 = gimple_assign_rhs2 (stmt); + if (tree_swap_operands_p (rhs1, rhs2)) + std::swap (rhs1, rhs2); + expr.ops.binary.opnd0 = rhs1; + expr.ops.binary.opnd1 = rhs2; + class expr_hash_elt element2 (&expr, NULL_TREE); + expr_hash_elt **slot + = m_avail_exprs->find_slot (&element2, NO_INSERT); + + /* If the query was successful and returned a nonzero + result, then we know the result of the MIN/MAX, even + though it is not a constant value. */ + if (slot && *slot && integer_onep ((*slot)->lhs ())) + return code == MIN_EXPR ? rhs1 : rhs2; + + /* Try again, this time with GE_EXPR. */ + expr.ops.binary.op = GE_EXPR; + class expr_hash_elt element3 (&expr, NULL_TREE); + slot = m_avail_exprs->find_slot (&element3, NO_INSERT); + + /* If the query was successful and returned a nonzero + result, then we know the result of the MIN/MAX, even + though it is not a constant value. */ + if (slot && *slot && integer_onep ((*slot)->lhs ())) + return code == MIN_EXPR ? rhs2 : rhs1; + + break; + } + + /* For these cases, if we know the operands + are equal, then we know the result. */ case BIT_IOR_EXPR: case BIT_AND_EXPR: case BIT_XOR_EXPR: @@ -151,8 +190,12 @@ avail_exprs_stack::simplify_binary_operation (gimple *stmt, expr.type = boolean_type_node; expr.kind = EXPR_BINARY; expr.ops.binary.op = EQ_EXPR; - expr.ops.binary.opnd0 = gimple_assign_rhs1 (stmt); - expr.ops.binary.opnd1 = gimple_assign_rhs2 (stmt); + tree rhs1 = gimple_assign_rhs1 (stmt); + tree rhs2 = gimple_assign_rhs2 (stmt); + if (tree_swap_operands_p (rhs1, rhs2)) + std::swap (rhs1, rhs2); + expr.ops.binary.opnd0 = rhs1; + expr.ops.binary.opnd1 = rhs2; class expr_hash_elt element2 (&expr, NULL_TREE); expr_hash_elt **slot = m_avail_exprs->find_slot (&element2, NO_INSERT); @@ -168,8 +211,6 @@ avail_exprs_stack::simplify_binary_operation (gimple *stmt, { switch (code) { - case MIN_EXPR: - case MAX_EXPR: case BIT_IOR_EXPR: case BIT_AND_EXPR: return gimple_assign_rhs1 (stmt); From a84b98c62d90bf9e8b01038f624a62725e6a44db Mon Sep 17 00:00:00 2001 From: Iain Buclaw <ibuclaw@gdcproject.org> Date: Sun, 10 Mar 2024 17:49:06 +0100 Subject: [PATCH 007/551] d: Fix -fpreview=in ICEs with forward referenced parameter [PR112285] The way that the target hook preferPassByRef is implemented, it relied on the GCC "back-end" tree type to determine whether or not to use `ref' ABI for D `in' parameters; e.g: prefer by value if it is expected that the target will pass the type around in registers. Building the GCC tree type depends on the AST type being complete - all semantic processing is finished - but as this hook is called from the front-end, this will not be the case for forward referenced or self-referencing types. The consensus in upstream is that `in' parameters should always be implicitly `ref', but as the front-end does not yet support all types being rvalue references, limit this just static arrays and structs. PR d/112285 PR d/112290 gcc/d/ChangeLog: * d-target.cc (Target::preferPassByRef): Return true for all static array and struct types. gcc/testsuite/ChangeLog: * gdc.dg/pr112285.d: New test. * gdc.dg/pr112290.d: New test. --- gcc/d/d-target.cc | 25 +++++-------------------- gcc/testsuite/gdc.dg/pr112285.d | 13 +++++++++++++ gcc/testsuite/gdc.dg/pr112290.d | 15 +++++++++++++++ 3 files changed, 33 insertions(+), 20 deletions(-) create mode 100644 gcc/testsuite/gdc.dg/pr112285.d create mode 100644 gcc/testsuite/gdc.dg/pr112290.d diff --git a/gcc/d/d-target.cc b/gcc/d/d-target.cc index b9d124422b7a..127b9d7ce7c3 100644 --- a/gcc/d/d-target.cc +++ b/gcc/d/d-target.cc @@ -575,31 +575,16 @@ Target::supportsLinkerDirective (void) const } /* Decides whether an `in' parameter of the specified POD type PARAM_TYPE is to - be passed by reference or by valie. This is used only when compiling with + be passed by reference or by value. This is used only when compiling with `-fpreview=in' enabled. */ bool Target::preferPassByRef (Type *param_type) { - if (param_type->size () == SIZE_INVALID) + /* See note in Target::isReturnOnStack. */ + Type *tb = param_type->toBasetype (); + if (tb->size () == SIZE_INVALID) return false; - tree type = build_ctype (param_type); - - /* Prefer a `ref' if the type is an aggregate, and its size is greater than - its alignment. */ - if (AGGREGATE_TYPE_P (type) - && (!valid_constant_size_p (TYPE_SIZE_UNIT (type)) - || compare_tree_int (TYPE_SIZE_UNIT (type), TYPE_ALIGN (type)) > 0)) - return true; - - /* If the back-end is always going to pass this by invisible reference. */ - if (pass_by_reference (NULL, function_arg_info (type, true))) - return true; - - /* If returning the parameter means the caller will do RVO. */ - if (targetm.calls.return_in_memory (type, NULL_TREE)) - return true; - - return false; + return (tb->ty == TY::Tstruct || tb->ty == TY::Tsarray); } diff --git a/gcc/testsuite/gdc.dg/pr112285.d b/gcc/testsuite/gdc.dg/pr112285.d new file mode 100644 index 000000000000..5ca100a74a99 --- /dev/null +++ b/gcc/testsuite/gdc.dg/pr112285.d @@ -0,0 +1,13 @@ +// { dg-do compile } +// { dg-additional-options "-fpreview=in" } +struct S112285 +{ +} + +class C112285 +{ + S112285 s; + void f112285(in C112285) + { + } +} diff --git a/gcc/testsuite/gdc.dg/pr112290.d b/gcc/testsuite/gdc.dg/pr112290.d new file mode 100644 index 000000000000..7456fc21be18 --- /dev/null +++ b/gcc/testsuite/gdc.dg/pr112290.d @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-additional-options "-fpreview=in" } +struct S112290a +{ + S112290b* p; + bool opEquals(in S112290a) + { + return p == p; + } +} + +struct S112290b +{ + string s; +} From 1a4553bc253fc0141e5f41ac15a2320f650c9e7c Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Mon, 11 Mar 2024 00:16:47 +0000 Subject: [PATCH 008/551] Daily bump. --- gcc/ChangeLog | 26 ++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/d/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 30 ++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ac5f039c4bd..33b52868564b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,29 @@ +2024-03-10 jlaw <jeffreyalaw@gmail.com> + + PR tree-optimization/110199 + * tree-ssa-scopedtables.cc + (avail_exprs_stack::simplify_binary_operation): Generalize handling + of MIN_EXPR/MAX_EXPR to allow additional simplifications. Canonicalize + comparison operands for other cases. + +2024-03-10 Pan Li <pan2.li@intel.com> + + * tree-vect-stmts.cc (vectorizable_store): Enable the assert + during transform process. + (vectorizable_load): Ditto. + +2024-03-10 jlaw <jeffreyalaw@gmail.com> + + PR target/102250 + * doc/install.texi: Document need for python when building + RISC-V compilers. + +2024-03-10 jlaw <jeffreyalaw@gmail.com> + + PR target/111362 + * mode-switching.cc (optimize_mode_switching): Only process + NONDEBUG insns. + 2024-03-09 Georg-Johann Lay <avr@gjlay.de> * config/avr/avr.md: Fix typos in comment, indentation glitches diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index a187030afadc..7fe29887d3cc 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240310 +20240311 diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog index 595bb5993c44..843a3b7fb57a 100644 --- a/gcc/d/ChangeLog +++ b/gcc/d/ChangeLog @@ -1,3 +1,10 @@ +2024-03-10 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/112285 + PR d/112290 + * d-target.cc (Target::preferPassByRef): Return true for all static + array and struct types. + 2024-03-03 Iain Buclaw <ibuclaw@gdcproject.org> * dmd/MERGE: Merge upstream dmd f8bae04558. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 14867898c055..6baee43bc1da 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,33 @@ +2024-03-10 Iain Buclaw <ibuclaw@gdcproject.org> + + PR d/112285 + PR d/112290 + * gdc.dg/pr112285.d: New test. + * gdc.dg/pr112290.d: New test. + +2024-03-10 jlaw <jeffreyalaw@gmail.com> + + PR tree-optimization/110199 + * gcc.dg/tree-ssa/minmax-27.c: New test. + * gcc.dg/tree-ssa/minmax-28.c: New test. + +2024-03-10 Pan Li <pan2.li@intel.com> + + * gcc.target/riscv/rvv/base/pr114195-1.c: New test. + +2024-03-10 jlaw <jeffreyalaw@gmail.com> + + Revert: + 2024-01-22 Jeff Law <jlaw@ventanamicro.com> + + * gcc.target/sh/pr59533-1.c: Adjust expected output. + +2024-03-10 jlaw <jeffreyalaw@gmail.com> + + PR target/111362 + * gcc.target/riscv/compare-debug-1.c: New test. + * gcc.target/riscv/compare-debug-2.c: New test. + 2024-03-09 Xi Ruoyao <xry111@xry111.site> * gcc.target/loongarch/tls-ie-relax.c: New test. From 31ce2e993d09dcad1ce139a2848a28de5931056d Mon Sep 17 00:00:00 2001 From: Andrew Pinski <quic_apinski@quicinc.com> Date: Sun, 10 Mar 2024 22:17:09 +0000 Subject: [PATCH 009/551] Fold: Fix up merge_truthop_with_opposite_arm for NaNs [PR95351] The problem here is that merge_truthop_with_opposite_arm would use the type of the result of the comparison rather than the operands of the comparison to figure out if we are honoring NaNs. This fixes that oversight and now we get the correct results in this case. Committed as obvious after a bootstrap/test on x86_64-linux-gnu. PR middle-end/95351 gcc/ChangeLog: * fold-const.cc (merge_truthop_with_opposite_arm): Use the type of the operands of the comparison and not the type of the comparison. gcc/testsuite/ChangeLog: * gcc.dg/float_opposite_arm-1.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> --- gcc/fold-const.cc | 3 ++- gcc/testsuite/gcc.dg/float_opposite_arm-1.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/float_opposite_arm-1.c diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index 43105d20be35..299c22bf3911 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -6420,7 +6420,6 @@ static tree merge_truthop_with_opposite_arm (location_t loc, tree op, tree cmpop, bool rhs_only) { - tree type = TREE_TYPE (cmpop); enum tree_code code = TREE_CODE (cmpop); enum tree_code truthop_code = TREE_CODE (op); tree lhs = TREE_OPERAND (op, 0); @@ -6436,6 +6435,8 @@ merge_truthop_with_opposite_arm (location_t loc, tree op, tree cmpop, if (TREE_CODE_CLASS (code) != tcc_comparison) return NULL_TREE; + tree type = TREE_TYPE (TREE_OPERAND (cmpop, 0)); + if (rhs_code == truthop_code) { tree newrhs = merge_truthop_with_opposite_arm (loc, rhs, cmpop, rhs_only); diff --git a/gcc/testsuite/gcc.dg/float_opposite_arm-1.c b/gcc/testsuite/gcc.dg/float_opposite_arm-1.c new file mode 100644 index 000000000000..d2dbff350663 --- /dev/null +++ b/gcc/testsuite/gcc.dg/float_opposite_arm-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-original -fdump-tree-optimized" } */ +/* { dg-add-options ieee } */ +/* PR middle-end/95351 */ + +int Foo(double possiblyNAN, double b, double c) +{ + return (possiblyNAN <= 2.0) || ((possiblyNAN > 2.0) && (b > c)); +} + +/* Make sure we don't remove either >/<= */ + +/* { dg-final { scan-tree-dump "possiblyNAN > 2.0e.0" "original" } } */ +/* { dg-final { scan-tree-dump "possiblyNAN_\[0-9\]+.D. > 2.0e.0" "optimized" } } */ + +/* { dg-final { scan-tree-dump "possiblyNAN <= 2.0e.0" "original" } } */ +/* { dg-final { scan-tree-dump "possiblyNAN_\[0-9\]+.D. <= 2.0e.0" "optimized" } } */ From 0c4df2c3c38ca15c123e9a801b617e63256c83a3 Mon Sep 17 00:00:00 2001 From: Eric Botcazou <ebotcazou@adacore.com> Date: Mon, 11 Mar 2024 09:24:50 +0100 Subject: [PATCH 010/551] Fix placement of recently implemented DIE It's the DIE added for enumeration types with reverse scalar storage order. gcc/ PR debug/113519 PR debug/113777 * dwarf2out.cc (gen_enumeration_type_die): In the reverse case, generate the DIE with the same parent as in the regular case. gcc/testsuite/ * gcc.dg/sso-20.c: New test. * gcc.dg/sso-21.c: Likewise. --- gcc/dwarf2out.cc | 7 ++++--- gcc/testsuite/gcc.dg/sso-20.c | 19 +++++++++++++++++++ gcc/testsuite/gcc.dg/sso-21.c | 19 +++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/sso-20.c create mode 100644 gcc/testsuite/gcc.dg/sso-21.c diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index 87e4240b8715..8f18bc4fe64b 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -22868,18 +22868,19 @@ gen_enumeration_type_die (tree type, dw_die_ref context_die, bool reverse) if (type_die == NULL || reverse) { + dw_die_ref scope_die = scope_die_for (type, context_die); + /* The DIE with DW_AT_endianity is placed right after the naked DIE. */ if (reverse) { gcc_assert (type_die); dw_die_ref after_die = type_die; type_die = new_die_raw (DW_TAG_enumeration_type); - add_child_die_after (context_die, type_die, after_die); + add_child_die_after (scope_die, type_die, after_die); } else { - type_die = new_die (DW_TAG_enumeration_type, - scope_die_for (type, context_die), type); + type_die = new_die (DW_TAG_enumeration_type, scope_die, type); equate_type_number_to_die (type, type_die); } add_name_attribute (type_die, type_tag (type)); diff --git a/gcc/testsuite/gcc.dg/sso-20.c b/gcc/testsuite/gcc.dg/sso-20.c new file mode 100644 index 000000000000..3bea38423a85 --- /dev/null +++ b/gcc/testsuite/gcc.dg/sso-20.c @@ -0,0 +1,19 @@ +/* PR debug/113519 */ +/* Reported by Zdenek Sojka <zsojka@seznam.cz> */ + +/* { dg-do compile } */ +/* { dg-options "-g -fdebug-types-section" } */ + +enum E { X }; + +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +struct __attribute__((scalar_storage_order("big-endian"))) +{ + enum E e; +} S; +#else +struct __attribute__((scalar_storage_order("little-endian"))) +{ + enum E e; +} S; +#endif diff --git a/gcc/testsuite/gcc.dg/sso-21.c b/gcc/testsuite/gcc.dg/sso-21.c new file mode 100644 index 000000000000..4b5d76d479bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/sso-21.c @@ -0,0 +1,19 @@ +/* PR debug/113777 */ +/* Reported by Zdenek Sojka <zsojka@seznam.cz> */ + +/* { dg-do compile } */ +/* { dg-options "-g" } */ + +typedef short __attribute__((__hardbool__)) hbool; + +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +struct __attribute__((scalar_storage_order("big-endian"))) +{ + hbool a[2]; +} S; +#else +struct __attribute__((scalar_storage_order("little-endian"))) +{ + hbool a[2]; +} S; +#endif From dbe5ccda4dbbd064c703cd3ab2a58ea40f08dd1a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Mon, 11 Mar 2024 11:00:54 +0100 Subject: [PATCH 011/551] bitint: Avoid rewriting large/huge _BitInt vars into SSA after bitint lowering [PR114278] The following testcase ICEs, because update-address-taken subpass of fre5 rewrites _BitInt(128) b; vector(16) unsigned char _3; <bb 2> [local count: 1073741824]: _3 = MEM <vector(16) unsigned char> [(char * {ref-all})p_2(D)]; MEM <vector(16) unsigned char> [(char * {ref-all})&b] = _3; b ={v} {CLOBBER(eos)}; to _BitInt(128) b; vector(16) unsigned char _3; <bb 2> [local count: 1073741824]: _3 = MEM <vector(16) unsigned char> [(char * {ref-all})p_2(D)]; b_5 = VIEW_CONVERT_EXPR<_BitInt(128)>(_3); but we can't have large/huge _BitInt vars in SSA form after the bitint lowering except for function arguments loaded from memory, as expansion isn't able to deal with those, it relies on bitint lowering to lower those operations. The following patch fixes that by setting DECL_NOT_GIMPLE_REG_P for large/huge _BitInt vars after bitint lowering, such that we don't rewrite them into SSA form. 2024-03-11 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114278 * tree-ssa.cc (maybe_optimize_var): If large/huge _BitInt vars are no longer addressable, set DECL_NOT_GIMPLE_REG_P on them. * gcc.dg/bitint-99.c: New test. --- gcc/testsuite/gcc.dg/bitint-99.c | 26 ++++++++++++++++++++++++++ gcc/tree-ssa.cc | 14 ++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/bitint-99.c diff --git a/gcc/testsuite/gcc.dg/bitint-99.c b/gcc/testsuite/gcc.dg/bitint-99.c new file mode 100644 index 000000000000..a0aa446087da --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-99.c @@ -0,0 +1,26 @@ +/* PR tree-optimization/114278 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-O2 -fno-tree-dce -fno-tree-dse -fno-tree-ccp" } */ +/* { dg-additional-options "-mavx2" { target i?86-*-* x86_64-*-* } } */ + +void +foo (void *p) +{ + _BitInt(64) b = *(_BitInt(64) *) __builtin_memmove (&b, p, sizeof (_BitInt(64))); +} + +#if __BITINT_MAXWIDTH__ >= 128 +void +bar (void *p) +{ + _BitInt(128) b = *(_BitInt(128) *) __builtin_memmove (&b, p, sizeof (_BitInt(128))); +} +#endif + +#if __BITINT_MAXWIDTH__ >= 256 +void +baz (void *p) +{ + _BitInt(256) b = *(_BitInt(256) *) __builtin_memmove (&b, p, sizeof (_BitInt(256))); +} +#endif diff --git a/gcc/tree-ssa.cc b/gcc/tree-ssa.cc index 16f42a6022aa..27ab9cfac823 100644 --- a/gcc/tree-ssa.cc +++ b/gcc/tree-ssa.cc @@ -1785,6 +1785,20 @@ maybe_optimize_var (tree var, bitmap addresses_taken, bitmap not_reg_needs, fprintf (dump_file, "\n"); } } + else if (TREE_CODE (TREE_TYPE (var)) == BITINT_TYPE + && (cfun->curr_properties & PROP_gimple_lbitint) != 0 + && TYPE_PRECISION (TREE_TYPE (var)) > MAX_FIXED_MODE_SIZE) + { + /* Don't rewrite large/huge _BitInt vars after _BitInt lowering + into SSA form. */ + DECL_NOT_GIMPLE_REG_P (var) = 1; + if (dump_file) + { + fprintf (dump_file, "_BitInt var after its lowering: "); + print_generic_expr (dump_file, var); + fprintf (dump_file, "\n"); + } + } else if (DECL_NOT_GIMPLE_REG_P (var)) { maybe_reg = true; From 119f5ae0455f02568159eafa9008a555605e7d71 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Mon, 11 Mar 2024 09:35:07 +0100 Subject: [PATCH 012/551] middle-end/114299 - missing error recovery from gimplify failure When internal_get_tmp_var fails to gimplify the value the temporary SSA name is supposed to be initialized with we can leak SSA names with a NULL SSA_NAME_DEF_STMT into the IL. That's bad, so recover from this by instead returning a decl in that case. PR middle-end/114299 * gimplify.cc (internal_get_tmp_var): When gimplification of VAL failed, return a decl. * gcc.target/i386/pr114299.c: New testcase. --- gcc/gimplify.cc | 5 +++++ gcc/testsuite/gcc.target/i386/pr114299.c | 14 ++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr114299.c diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index 6ebca964cb21..d64bbf3ffbd7 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -652,6 +652,11 @@ internal_get_tmp_var (tree val, gimple_seq *pre_p, gimple_seq *post_p, gimplify_and_add (mod, pre_p); ggc_free (mod); + /* If we failed to gimplify VAL then we can end up with the temporary + SSA name not having a definition. In this case return a decl. */ + if (TREE_CODE (t) == SSA_NAME && ! SSA_NAME_DEF_STMT (t)) + return lookup_tmp_var (val, is_formal, not_gimple_reg); + return t; } diff --git a/gcc/testsuite/gcc.target/i386/pr114299.c b/gcc/testsuite/gcc.target/i386/pr114299.c new file mode 100644 index 000000000000..b4f30b7a95fd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114299.c @@ -0,0 +1,14 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-mgeneral-regs-only" } */ + +typedef __attribute__((__vector_size__(8))) __bf16 V; +typedef __attribute__((__vector_size__(16))) __bf16 W; + +V v; +_Atomic V a; + +W +foo(void) /* { dg-error "SSE" } */ +{ + return __builtin_shufflevector(v, a, 1, 2, 5, 0, 1, 6, 6, 4); /* { dg-error "invalid" } */ +} From 1bf70e68e4910fe0904466d06cae7f747c02ab72 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy <szabolcs.nagy@arm.com> Date: Mon, 19 Jun 2023 12:56:41 +0100 Subject: [PATCH 013/551] aarch64,arm: Move branch-protection data to targets The branch-protection types are target specific, not the same on arm and aarch64. This currently affects pac-ret+b-key, but there will be a new type on aarch64 that is not relevant for arm. After the move, change aarch_ identifiers to aarch64_ or arm_ as appropriate. Refactor aarch_validate_mbranch_protection to take the target specific branch-protection types as an argument. In case of invalid input currently no hints are provided: the way branch-protection types and subtypes can be mixed makes it difficult without causing confusion. gcc/ChangeLog: * config/aarch64/aarch64.md: Rename aarch_ to aarch64_. * config/aarch64/aarch64.opt: Likewise. * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Likewise. * config/aarch64/aarch64.cc (aarch64_expand_prologue): Likewise. (aarch64_expand_epilogue): Likewise. (aarch64_post_cfi_startproc): Likewise. (aarch64_handle_no_branch_protection): Copy and rename. (aarch64_handle_standard_branch_protection): Likewise. (aarch64_handle_pac_ret_protection): Likewise. (aarch64_handle_pac_ret_leaf): Likewise. (aarch64_handle_pac_ret_b_key): Likewise. (aarch64_handle_bti_protection): Likewise. (aarch64_override_options): Update branch protection validation. (aarch64_handle_attr_branch_protection): Likewise. * config/arm/aarch-common-protos.h (aarch_validate_mbranch_protection): Pass branch protection type description as argument. (struct aarch_branch_protect_type): Move from aarch-common.h. * config/arm/aarch-common.cc (aarch_handle_no_branch_protection): Remove. (aarch_handle_standard_branch_protection): Remove. (aarch_handle_pac_ret_protection): Remove. (aarch_handle_pac_ret_leaf): Remove. (aarch_handle_pac_ret_b_key): Remove. (aarch_handle_bti_protection): Remove. (aarch_validate_mbranch_protection): Pass branch protection type description as argument. * config/arm/aarch-common.h (enum aarch_key_type): Remove. (struct aarch_branch_protect_type): Remove. * config/arm/arm-c.cc (arm_cpu_builtins): Remove aarch_ra_sign_key. * config/arm/arm.cc (arm_handle_no_branch_protection): Copy and rename. (arm_handle_standard_branch_protection): Likewise. (arm_handle_pac_ret_protection): Likewise. (arm_handle_pac_ret_leaf): Likewise. (arm_handle_bti_protection): Likewise. (arm_configure_build_target): Update branch protection validation. * config/arm/arm.opt: Remove aarch_ra_sign_key. --- gcc/config/aarch64/aarch64-c.cc | 4 +- gcc/config/aarch64/aarch64.cc | 75 ++++++++++++++++++++++++---- gcc/config/aarch64/aarch64.md | 2 +- gcc/config/aarch64/aarch64.opt | 2 +- gcc/config/arm/aarch-common-protos.h | 19 ++++++- gcc/config/arm/aarch-common.cc | 71 ++++---------------------- gcc/config/arm/aarch-common.h | 20 -------- gcc/config/arm/arm-c.cc | 2 - gcc/config/arm/arm.cc | 55 +++++++++++++++++--- gcc/config/arm/arm.opt | 3 -- 10 files changed, 145 insertions(+), 108 deletions(-) diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc index c3bc8c490343..b5a6917d06db 100644 --- a/gcc/config/aarch64/aarch64-c.cc +++ b/gcc/config/aarch64/aarch64-c.cc @@ -235,9 +235,9 @@ aarch64_update_cpp_builtins (cpp_reader *pfile) if (aarch_ra_sign_scope != AARCH_FUNCTION_NONE) { int v = 0; - if (aarch_ra_sign_key == AARCH_KEY_A) + if (aarch64_ra_sign_key == AARCH64_KEY_A) v |= 1; - if (aarch_ra_sign_key == AARCH_KEY_B) + if (aarch64_ra_sign_key == AARCH64_KEY_B) v |= 2; if (aarch_ra_sign_scope == AARCH_FUNCTION_ALL) v |= 4; diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 0a28e033088a..ae040781c438 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -9541,12 +9541,12 @@ aarch64_expand_prologue (void) /* Sign return address for functions. */ if (aarch64_return_address_signing_enabled ()) { - switch (aarch_ra_sign_key) + switch (aarch64_ra_sign_key) { - case AARCH_KEY_A: + case AARCH64_KEY_A: insn = emit_insn (gen_paciasp ()); break; - case AARCH_KEY_B: + case AARCH64_KEY_B: insn = emit_insn (gen_pacibsp ()); break; default: @@ -9962,12 +9962,12 @@ aarch64_expand_epilogue (rtx_call_insn *sibcall) if (aarch64_return_address_signing_enabled () && (sibcall || !TARGET_ARMV8_3)) { - switch (aarch_ra_sign_key) + switch (aarch64_ra_sign_key) { - case AARCH_KEY_A: + case AARCH64_KEY_A: insn = emit_insn (gen_autiasp ()); break; - case AARCH_KEY_B: + case AARCH64_KEY_B: insn = emit_insn (gen_autibsp ()); break; default: @@ -18689,6 +18689,62 @@ aarch64_set_asm_isa_flags (aarch64_feature_flags flags) aarch64_set_asm_isa_flags (&global_options, flags); } +static void +aarch64_handle_no_branch_protection (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_NONE; + aarch_enable_bti = 0; +} + +static void +aarch64_handle_standard_branch_protection (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF; + aarch64_ra_sign_key = AARCH64_KEY_A; + aarch_enable_bti = 1; +} + +static void +aarch64_handle_pac_ret_protection (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF; + aarch64_ra_sign_key = AARCH64_KEY_A; +} + +static void +aarch64_handle_pac_ret_leaf (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_ALL; +} + +static void +aarch64_handle_pac_ret_b_key (void) +{ + aarch64_ra_sign_key = AARCH64_KEY_B; +} + +static void +aarch64_handle_bti_protection (void) +{ + aarch_enable_bti = 1; +} + +static const struct aarch_branch_protect_type aarch64_pac_ret_subtypes[] = { + { "leaf", false, aarch64_handle_pac_ret_leaf, NULL, 0 }, + { "b-key", false, aarch64_handle_pac_ret_b_key, NULL, 0 }, + { NULL, false, NULL, NULL, 0 } +}; + +static const struct aarch_branch_protect_type aarch64_branch_protect_types[] = +{ + { "none", true, aarch64_handle_no_branch_protection, NULL, 0 }, + { "standard", true, aarch64_handle_standard_branch_protection, NULL, 0 }, + { "pac-ret", false, aarch64_handle_pac_ret_protection, + aarch64_pac_ret_subtypes, ARRAY_SIZE (aarch64_pac_ret_subtypes) }, + { "bti", false, aarch64_handle_bti_protection, NULL, 0 }, + { NULL, false, NULL, NULL, 0 } +}; + /* Implement TARGET_OPTION_OVERRIDE. This is called once in the beginning and is used to parse the -m{cpu,tune,arch} strings and setup the initial tuning structs. In particular it must set selected_tune and @@ -18711,7 +18767,8 @@ aarch64_override_options (void) aarch64_validate_sls_mitigation (aarch64_harden_sls_string); if (aarch64_branch_protection_string) - aarch_validate_mbranch_protection (aarch64_branch_protection_string, + aarch_validate_mbranch_protection (aarch64_branch_protect_types, + aarch64_branch_protection_string, "-mbranch-protection="); /* -mcpu=CPU is shorthand for -march=ARCH_FOR_CPU, -mtune=CPU. @@ -19149,7 +19206,7 @@ aarch64_handle_attr_cpu (const char *str) static bool aarch64_handle_attr_branch_protection (const char* str) { - return aarch_validate_mbranch_protection (str, + return aarch_validate_mbranch_protection (aarch64_branch_protect_types, str, "target(\"branch-protection=\")"); } @@ -24449,7 +24506,7 @@ void aarch64_post_cfi_startproc (FILE *f, tree ignored ATTRIBUTE_UNUSED) { if (cfun->machine->frame.laid_out && aarch64_return_address_signing_enabled () - && aarch_ra_sign_key == AARCH_KEY_B) + && aarch64_ra_sign_key == AARCH64_KEY_B) asm_fprintf (f, "\t.cfi_b_key_frame\n"); } diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 7d51d923bf68..385a669b9b3c 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -1027,7 +1027,7 @@ if (aarch64_return_address_signing_enabled () && (TARGET_PAUTH)) { - if (aarch_ra_sign_key == AARCH_KEY_B) + if (aarch64_ra_sign_key == AARCH64_KEY_B) ret = "retab"; else ret = "retaa"; diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt index ceed5cdb201f..6356c419399b 100644 --- a/gcc/config/aarch64/aarch64.opt +++ b/gcc/config/aarch64/aarch64.opt @@ -40,7 +40,7 @@ TargetVariable unsigned aarch_enable_bti = 2 TargetVariable -enum aarch_key_type aarch_ra_sign_key = AARCH_KEY_A +enum aarch64_key_type aarch64_ra_sign_key = AARCH64_KEY_A ; The TLS dialect names to use with -mtls-dialect. diff --git a/gcc/config/arm/aarch-common-protos.h b/gcc/config/arm/aarch-common-protos.h index 936d03c82ee8..9849fcbc0985 100644 --- a/gcc/config/arm/aarch-common-protos.h +++ b/gcc/config/arm/aarch-common-protos.h @@ -159,7 +159,22 @@ rtx_insn *arm_md_asm_adjust (vec<rtx> &outputs, vec<rtx> & /*inputs*/, vec<rtx> &clobbers, HARD_REG_SET &clobbered_regs, location_t loc); -/* Validation routine for branch-protection common to AArch64 and Arm. */ -bool aarch_validate_mbranch_protection (const char *, const char *); +/* Specifies a -mbranch-protection= argument. */ +struct aarch_branch_protect_type +{ + /* The type's name that the user passes to the branch-protection option + string. */ + const char* name; + /* The type can only appear alone, other types should be rejected. */ + int alone; + /* Function to handle the protection type and set global variables. */ + void (*handler)(void); + /* A list of types that can follow this type in the option string. */ + const struct aarch_branch_protect_type* subtypes; + unsigned int num_subtypes; +}; + +bool aarch_validate_mbranch_protection ( + const struct aarch_branch_protect_type *, const char *, const char *); #endif /* GCC_AARCH_COMMON_PROTOS_H */ diff --git a/gcc/config/arm/aarch-common.cc b/gcc/config/arm/aarch-common.cc index 9bbde9369787..aa405af8192b 100644 --- a/gcc/config/arm/aarch-common.cc +++ b/gcc/config/arm/aarch-common.cc @@ -37,6 +37,7 @@ #include "function.h" #include "emit-rtl.h" #include "aarch-common.h" +#include "aarch-common-protos.h" /* Return TRUE if X is either an arithmetic shift left, or is a multiplication by a power of two. */ @@ -660,61 +661,6 @@ arm_md_asm_adjust (vec<rtx> &outputs, vec<rtx> & /*inputs*/, return saw_asm_flag ? seq : NULL; } -static void -aarch_handle_no_branch_protection (void) -{ - aarch_ra_sign_scope = AARCH_FUNCTION_NONE; - aarch_enable_bti = 0; -} - -static void -aarch_handle_standard_branch_protection (void) -{ - aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF; - aarch_ra_sign_key = AARCH_KEY_A; - aarch_enable_bti = 1; -} - -static void -aarch_handle_pac_ret_protection (void) -{ - aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF; - aarch_ra_sign_key = AARCH_KEY_A; -} - -static void -aarch_handle_pac_ret_leaf (void) -{ - aarch_ra_sign_scope = AARCH_FUNCTION_ALL; -} - -static void -aarch_handle_pac_ret_b_key (void) -{ - aarch_ra_sign_key = AARCH_KEY_B; -} - -static void -aarch_handle_bti_protection (void) -{ - aarch_enable_bti = 1; -} - -static const struct aarch_branch_protect_type aarch_pac_ret_subtypes[] = { - { "leaf", false, aarch_handle_pac_ret_leaf, NULL, 0 }, - { "b-key", false, aarch_handle_pac_ret_b_key, NULL, 0 }, - { NULL, false, NULL, NULL, 0 } -}; - -static const struct aarch_branch_protect_type aarch_branch_protect_types[] = { - { "none", true, aarch_handle_no_branch_protection, NULL, 0 }, - { "standard", true, aarch_handle_standard_branch_protection, NULL, 0 }, - { "pac-ret", false, aarch_handle_pac_ret_protection, aarch_pac_ret_subtypes, - ARRAY_SIZE (aarch_pac_ret_subtypes) }, - { "bti", false, aarch_handle_bti_protection, NULL, 0 }, - { NULL, false, NULL, NULL, 0 } -}; - /* In-place split *str at delim, return *str and set *str to the tail of the string or NULL if the end is reached. */ @@ -735,12 +681,15 @@ next_tok (char **str, int delim) return tok; } -/* Parses CONST_STR for branch protection features specified in - aarch64_branch_protect_types, and set any global variables required. - Returns true on success. */ +/* Parses CONST_STR according to branch protection features specified in + TYPES. The first type resets the settings, the last type is marked with + name == NULL. On failure an error message is printed referencing OPT as + the source of the options. Returns true on success. */ bool -aarch_validate_mbranch_protection (const char *const_str, const char *opt) +aarch_validate_mbranch_protection ( + const struct aarch_branch_protect_type *types, const char *const_str, + const char *opt) { char *str_root = xstrdup (const_str); char *next_str = str_root; @@ -750,11 +699,11 @@ aarch_validate_mbranch_protection (const char *const_str, const char *opt) bool res = true; /* First entry is "none" and it is used to reset the state. */ - aarch_branch_protect_types[0].handler (); + types->handler (); while (str) { - const aarch_branch_protect_type *type = aarch_branch_protect_types; + const aarch_branch_protect_type *type = types; for (; type->name; type++) if (strcmp (str, type->name) == 0) break; diff --git a/gcc/config/arm/aarch-common.h b/gcc/config/arm/aarch-common.h index 8a1964fdf17d..6bfdbdacf16d 100644 --- a/gcc/config/arm/aarch-common.h +++ b/gcc/config/arm/aarch-common.h @@ -45,24 +45,4 @@ enum aarch_function_type { AARCH_FUNCTION_ALL }; -/* The key type that -msign-return-address should use. */ -enum aarch_key_type { - AARCH_KEY_A, - AARCH_KEY_B -}; - -struct aarch_branch_protect_type -{ - /* The type's name that the user passes to the branch-protection option - string. */ - const char* name; - /* The type can only appear alone, other types should be rejected. */ - int alone; - /* Function to handle the protection type and set global variables. */ - void (*handler)(void); - /* A list of types that can follow this type in the option string. */ - const struct aarch_branch_protect_type* subtypes; - unsigned int num_subtypes; -}; - #endif /* GCC_AARCH_COMMON_H */ diff --git a/gcc/config/arm/arm-c.cc b/gcc/config/arm/arm-c.cc index 2e181bf7f36b..6e10262b0678 100644 --- a/gcc/config/arm/arm-c.cc +++ b/gcc/config/arm/arm-c.cc @@ -248,8 +248,6 @@ arm_cpu_builtins (struct cpp_reader* pfile) { unsigned int pac = 1; - gcc_assert (aarch_ra_sign_key == AARCH_KEY_A); - if (aarch_ra_sign_scope == AARCH_FUNCTION_ALL) pac |= 0x4; diff --git a/gcc/config/arm/arm.cc b/gcc/config/arm/arm.cc index 6a35fe441381..0217abc218d6 100644 --- a/gcc/config/arm/arm.cc +++ b/gcc/config/arm/arm.cc @@ -3259,6 +3259,52 @@ static sbitmap isa_all_fpubits_internal; static sbitmap isa_all_fpbits; static sbitmap isa_quirkbits; +static void +arm_handle_no_branch_protection (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_NONE; + aarch_enable_bti = 0; +} + +static void +arm_handle_standard_branch_protection (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF; + aarch_enable_bti = 1; +} + +static void +arm_handle_pac_ret_protection (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_NON_LEAF; +} + +static void +arm_handle_pac_ret_leaf (void) +{ + aarch_ra_sign_scope = AARCH_FUNCTION_ALL; +} + +static void +arm_handle_bti_protection (void) +{ + aarch_enable_bti = 1; +} + +static const struct aarch_branch_protect_type arm_pac_ret_subtypes[] = { + { "leaf", false, arm_handle_pac_ret_leaf, NULL, 0 }, + { NULL, false, NULL, NULL, 0 } +}; + +static const struct aarch_branch_protect_type arm_branch_protect_types[] = { + { "none", true, arm_handle_no_branch_protection, NULL, 0 }, + { "standard", true, arm_handle_standard_branch_protection, NULL, 0 }, + { "pac-ret", false, arm_handle_pac_ret_protection, arm_pac_ret_subtypes, + ARRAY_SIZE (arm_pac_ret_subtypes) }, + { "bti", false, arm_handle_bti_protection, NULL, 0 }, + { NULL, false, NULL, NULL, 0 } +}; + /* Configure a build target TARGET from the user-specified options OPTS and OPTS_SET. If WARN_COMPATIBLE, emit a diagnostic if both the CPU and architecture have been specified, but the two are not identical. */ @@ -3306,14 +3352,9 @@ arm_configure_build_target (struct arm_build_target *target, if (opts->x_arm_branch_protection_string) { - aarch_validate_mbranch_protection (opts->x_arm_branch_protection_string, + aarch_validate_mbranch_protection (arm_branch_protect_types, + opts->x_arm_branch_protection_string, "-mbranch-protection="); - - if (aarch_ra_sign_key != AARCH_KEY_A) - { - warning (0, "invalid key type for %<-mbranch-protection=%>"); - aarch_ra_sign_key = AARCH_KEY_A; - } } if (arm_selected_arch) diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt index e4b29facad3b..0cd3fc2cd0cc 100644 --- a/gcc/config/arm/arm.opt +++ b/gcc/config/arm/arm.opt @@ -30,9 +30,6 @@ enum aarch_function_type aarch_ra_sign_scope = AARCH_FUNCTION_NONE TargetVariable unsigned aarch_enable_bti = 0 -TargetVariable -enum aarch_key_type aarch_ra_sign_key = AARCH_KEY_A - Enum Name(tls_type) Type(enum arm_tls_type) TLS dialect to use: From 96b63fa255e343bb9b3e7f77302213a91ce96293 Mon Sep 17 00:00:00 2001 From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> Date: Mon, 11 Mar 2024 15:45:17 +0100 Subject: [PATCH 014/551] testsuite: vect: Require vect_perm in several tests [PR114071, PR113557, PR96109] Several vectorization tests FAIL on 32 and 64-bit Solaris/SPARC: FAIL: gcc.dg/vect/pr37027.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/pr37027.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/pr37027.c scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/pr37027.c scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/pr67790.c -flto -ffat-lto-objects scan-tree-dump vect "vectorizing stmts using SLP" FAIL: gcc.dg/vect/pr67790.c scan-tree-dump vect "vectorizing stmts using SLP" FAIL: gcc.dg/vect/slp-47.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-47.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-48.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-48.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 FAIL: gcc.dg/vect/slp-reduc-1.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/slp-reduc-1.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-reduc-1.c scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/slp-reduc-1.c scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-reduc-2.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/slp-reduc-2.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-reduc-2.c scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/slp-reduc-2.c scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-reduc-7.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/slp-reduc-7.c -flto -ffat-lto-objects scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-reduc-7.c scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/slp-reduc-7.c scan-tree-dump-times vect "vectorizing stmts using SLP" 1 FAIL: gcc.dg/vect/slp-reduc-8.c -flto -ffat-lto-objects scan-tree-dump vect "vectorized 1 loops" FAIL: gcc.dg/vect/slp-reduc-8.c scan-tree-dump vect "vectorized 1 loops" FAIL: gcc.dg/vect/vect-multi-peel-gaps.c -flto -ffat-lto-objects scan-tree-dump vect "LOOP VECTORIZED" FAIL: gcc.dg/vect/vect-multi-peel-gaps.c scan-tree-dump vect "LOOP VECTORIZED" The dumps show variations of /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:24:17: note: ==> examining statement: _4 = a[i_19].f2; /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:24:17: missed: unsupported vect permute { 1 0 3 2 5 4 } /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:24:17: missed: unsupported load permutation /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/pr37027.c:27:17: missed: not vectorized: relevant stmt not supported: _4 = a[i_19].f2; so I think the tests should require vect_perm. This is what this patch does Tested on sparc-sun-solaris2.11 and i386-pc-solaris2.11. 2024-02-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: PR tree-optimization/114071 * gcc.dg/vect/pr37027.c: Require vect_perm. * gcc.dg/vect/pr67790.c: Likewise. * gcc.dg/vect/slp-reduc-1.c: Likewise. * gcc.dg/vect/slp-reduc-2.c: Likewise. * gcc.dg/vect/slp-reduc-7.c: Likewise. * gcc.dg/vect/slp-reduc-8.c: Likewise. PR tree-optimization/113557 * gcc.dg/vect/vect-multi-peel-gaps.c (scan-tree-dump): Also require vect_perm. PR testsuite/96109 * gcc.dg/vect/slp-47.c: Require vect_perm. * gcc.dg/vect/slp-48.c: Likewise. --- gcc/testsuite/gcc.dg/vect/pr37027.c | 1 + gcc/testsuite/gcc.dg/vect/pr67790.c | 1 + gcc/testsuite/gcc.dg/vect/slp-47.c | 1 + gcc/testsuite/gcc.dg/vect/slp-48.c | 1 + gcc/testsuite/gcc.dg/vect/slp-reduc-1.c | 1 + gcc/testsuite/gcc.dg/vect/slp-reduc-2.c | 1 + gcc/testsuite/gcc.dg/vect/slp-reduc-7.c | 1 + gcc/testsuite/gcc.dg/vect/slp-reduc-8.c | 1 + gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c | 2 +- 9 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/vect/pr37027.c b/gcc/testsuite/gcc.dg/vect/pr37027.c index 69f58264de92..b747e2503a38 100644 --- a/gcc/testsuite/gcc.dg/vect/pr37027.c +++ b/gcc/testsuite/gcc.dg/vect/pr37027.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include <stdarg.h> diff --git a/gcc/testsuite/gcc.dg/vect/pr67790.c b/gcc/testsuite/gcc.dg/vect/pr67790.c index 32eacd91fdaa..71eb0944be76 100644 --- a/gcc/testsuite/gcc.dg/vect/pr67790.c +++ b/gcc/testsuite/gcc.dg/vect/pr67790.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/slp-47.c b/gcc/testsuite/gcc.dg/vect/slp-47.c index 7772bb71c8d0..641397df3c95 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-47.c +++ b/gcc/testsuite/gcc.dg/vect/slp-47.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/slp-48.c b/gcc/testsuite/gcc.dg/vect/slp-48.c index 38f533233d65..6c611e6d39c9 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-48.c +++ b/gcc/testsuite/gcc.dg/vect/slp-48.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-1.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-1.c index b9bddb859944..b36cf32533ed 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-1.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-1.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include <stdarg.h> #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-2.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-2.c index aa09d01975a7..b1dbfe1fd87b 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-2.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-2.c @@ -1,6 +1,7 @@ /* Disabling epilogues until we find a better way to deal with scans. */ /* { dg-additional-options "--param vect-epilogues-nomask=0" } */ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include <stdarg.h> #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c index 8b52635f0908..1e0de894cecd 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-7.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include <stdarg.h> #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/slp-reduc-8.c b/gcc/testsuite/gcc.dg/vect/slp-reduc-8.c index 618c800e577a..83dd5d3f04f2 100644 --- a/gcc/testsuite/gcc.dg/vect/slp-reduc-8.c +++ b/gcc/testsuite/gcc.dg/vect/slp-reduc-8.c @@ -1,4 +1,5 @@ /* { dg-require-effective-target vect_int } */ +/* { dg-require-effective-target vect_perm } */ #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c b/gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c index 7e7db3c7a45f..033c3587f1b2 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c +++ b/gcc/testsuite/gcc.dg/vect/vect-multi-peel-gaps.c @@ -60,4 +60,4 @@ void intrapred_luma_16x16(int * restrict sp) { mprr_2[VERT_PRED_16][j][15]=sp[j*2]; } } -/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" {target vect_int } } } */ +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" {target { vect_int && vect_perm } } } } */ From 4e1fcf44bdc582e71408175d75e025f5be8b0e55 Mon Sep 17 00:00:00 2001 From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> Date: Mon, 11 Mar 2024 15:46:30 +0100 Subject: [PATCH 015/551] testsuite: vect: Require vect_hw_misalign in gcc.dg/vect/vect-cost-model-1.c etc. [PR98238] Several gcc.dg/vect/vect-cost-model-?.c tests FAIL on 32 and 64-bit Solaris/SPARC: FAIL: gcc.dg/vect/vect-cost-model-1.c -flto -ffat-lto-objects scan-tree-dump vect "LOOP VECTORIZED" FAIL: gcc.dg/vect/vect-cost-model-1.c scan-tree-dump vect "LOOP VECTORIZED" FAIL: gcc.dg/vect/vect-cost-model-3.c -flto -ffat-lto-objects scan-tree-dump vect "LOOP VECTORIZED" FAIL: gcc.dg/vect/vect-cost-model-3.c scan-tree-dump vect "LOOP VECTORIZED" FAIL: gcc.dg/vect/vect-cost-model-5.c -flto -ffat-lto-objects scan-tree-dump vect "LOOP VECTORIZED" FAIL: gcc.dg/vect/vect-cost-model-5.c scan-tree-dump vect "LOOP VECTORIZED" The dumps show /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c:7:30: note: ==> examining statement: _3 = *_2; /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c:7:30: missed: unsupported unaligned access /vol/gcc/src/hg/master/local/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c:8:6: missed: not vectorized: relevant stmt not supported: _3 = *_2; so I think the tests need to require vect_hw_misalign. This is what this patch does. Tested on sparc-sun-solaris2.11 and i386-pc-solaris2.11. 2024-02-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: PR tree-optimization/98238 * gcc.dg/vect/vect-cost-model-1.c (scan-tree-dump): Also require vect_hw_misalign. * gcc.dg/vect/vect-cost-model-3.c: Likewise. * gcc.dg/vect/vect-cost-model-5.c: Likewise. --- gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-cost-model-3.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-cost-model-5.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c b/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c index 0737da5d6718..1457e8f3625b 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-cost-model-1.c @@ -8,4 +8,4 @@ f (int *x, int *y) x[i] += y[i]; } -/* { dg-final { scan-tree-dump {LOOP VECTORIZED} vect { target vect_int } } } */ +/* { dg-final { scan-tree-dump {LOOP VECTORIZED} vect { target { vect_int && vect_hw_misalign } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-cost-model-3.c b/gcc/testsuite/gcc.dg/vect/vect-cost-model-3.c index d7c6cfd20490..fba18aae0cfc 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-cost-model-3.c +++ b/gcc/testsuite/gcc.dg/vect/vect-cost-model-3.c @@ -8,4 +8,4 @@ f (int *restrict x, int *restrict y) x[i] += y[i]; } -/* { dg-final { scan-tree-dump {LOOP VECTORIZED} vect { target vect_int } } } */ +/* { dg-final { scan-tree-dump {LOOP VECTORIZED} vect { target { vect_int && vect_hw_misalign } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-cost-model-5.c b/gcc/testsuite/gcc.dg/vect/vect-cost-model-5.c index 536ec0a3cdaa..b9d0ca47af25 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-cost-model-5.c +++ b/gcc/testsuite/gcc.dg/vect/vect-cost-model-5.c @@ -8,4 +8,4 @@ f (int *restrict x, int *restrict y) x[i] += y[i]; } -/* { dg-final { scan-tree-dump {LOOP VECTORIZED} vect { target vect_int } } } */ +/* { dg-final { scan-tree-dump {LOOP VECTORIZED} vect { target { vect_int && vect_hw_misalign } } } } */ From 8410402272038aae7e4b2bd76df38607a78cad95 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Mon, 11 Mar 2024 15:21:42 +0000 Subject: [PATCH 016/551] PR modula2/114295 Incorrect location if compiling implementation without definition This patch fixes a bug which occurred if gm2 was asked to compile an implementation module and could not find the definition module. The error location would be set to the SYSTEM module. The bug occurred as the module sym was created during the peep phase after which the few tokens are destroyed and recreated during parsing. The bug fix is to call PutDeclared when the module is encountered during parsing which updates the tokenno associated with the module. gcc/m2/ChangeLog: PR modula2/114295 * gm2-compiler/M2Batch.mod (MakeProgramSource): Call PutDeclared if the module is known. (MakeDefinitionSource): Ditto. (MakeImplementationSource): Ditto. * gm2-compiler/M2Comp.mod (ExamineHeader): New procedure. (ExamineCompilationUnit): Rewrite. (PeepInto): Rewrite. * gm2-compiler/M2Error.mod (NewError): Remove default call to GetTokenNo. * gm2-compiler/M2Quads.mod (callRequestDependant): Push tokno with Adr. (BuildStringAdrParam): Ditto. (doBuildBinaryOp): Push OperatorPos on the bool stack. (BuildRelOp): Ditto. * gm2-compiler/P2Build.bnf (SetType): Pass set token pos to BuildSetType. (PointerType): Pass pointer token pos to BuildPointerType. * gm2-compiler/P2SymBuild.def (BuildPointerType): Add parameter pointerpos. (BuildSetType): Add parameter setpos. * gm2-compiler/P2SymBuild.mod (BuildPointerType): Add parameter pointerpos. Build combined token and use it when creating a pointer type. (BuildSetType): Add parameter setpos. Build combined token and use it when creating a set type. * gm2-compiler/SymbolTable.mod (DebugUnknownToken): New constant. (CheckTok): New procedure function. (MakeProcedure): Call CheckTok. (MakeRecord): Ditto. (MakeVarient): Ditto. (MakeEnumeration): Ditto. (MakeHiddenType): Ditto. (MakeConstant): Ditto. (MakeConstStringCnul): Ditto. (MakeSubrange): Ditto. (MakeTemporary): Ditto. (MakeVariableForParam): Ditto. (MakeParameterHeapVar): Ditto. (MakePointer): Ditto. (MakeSet): Ditto. (MakeUnbounded): Ditto. (MakeProcType): Ditto. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2Batch.mod | 12 +++- gcc/m2/gm2-compiler/M2Comp.mod | 88 +++++++++++++++++++++-------- gcc/m2/gm2-compiler/M2Error.mod | 6 +- gcc/m2/gm2-compiler/M2Quads.mod | 42 +++++++------- gcc/m2/gm2-compiler/P2Build.bnf | 13 +++-- gcc/m2/gm2-compiler/P2SymBuild.def | 4 +- gcc/m2/gm2-compiler/P2SymBuild.mod | 45 ++++++++------- gcc/m2/gm2-compiler/SymbolTable.mod | 47 ++++++++++++++- 8 files changed, 179 insertions(+), 78 deletions(-) diff --git a/gcc/m2/gm2-compiler/M2Batch.mod b/gcc/m2/gm2-compiler/M2Batch.mod index d6eb53ff90db..8cfc906513cc 100644 --- a/gcc/m2/gm2-compiler/M2Batch.mod +++ b/gcc/m2/gm2-compiler/M2Batch.mod @@ -23,7 +23,11 @@ IMPLEMENTATION MODULE M2Batch ; FROM M2Debug IMPORT Assert ; -FROM SymbolTable IMPORT MakeModule, MakeDefImp, IsModule, IsDefImp, GetScope, GetLocalSym, GetCurrentScope, GetSym, NulSym ; + +FROM SymbolTable IMPORT MakeModule, MakeDefImp, IsModule, IsDefImp, + GetScope, GetLocalSym, GetCurrentScope, + PutDeclared, GetSym, NulSym ; + FROM NameKey IMPORT GetKey, WriteKey ; FROM M2Printf IMPORT printf2 ; FROM M2Error IMPORT InternalError ; @@ -69,6 +73,8 @@ BEGIN Sym := MakeModule (tok, n) ; Put (Sym, n) ; Push (Sym) + ELSE + PutDeclared (tok, Sym) END ; RETURN Sym END MakeProgramSource ; @@ -96,6 +102,8 @@ BEGIN Sym := MakeDefImp (tok, n) ; Put (Sym, n) ; Push (Sym) + ELSE + PutDeclared (tok, Sym) END ; RETURN Sym END MakeDefinitionSource ; @@ -123,6 +131,8 @@ BEGIN Sym := MakeDefImp (tok, n) ; Put (Sym, n) ; Push (Sym) + ELSE + PutDeclared (tok, Sym) END ; RETURN Sym END MakeImplementationSource ; diff --git a/gcc/m2/gm2-compiler/M2Comp.mod b/gcc/m2/gm2-compiler/M2Comp.mod index c10c301cbde3..719ae6641dc6 100644 --- a/gcc/m2/gm2-compiler/M2Comp.mod +++ b/gcc/m2/gm2-compiler/M2Comp.mod @@ -30,7 +30,8 @@ FROM M2Search IMPORT FindSourceDefFile, FindSourceModFile ; FROM M2Code IMPORT Code ; FROM M2LexBuf IMPORT OpenSource, CloseSource, ResetForNewPass, currenttoken, GetToken, - ReInitialize, currentstring, GetTokenNo ; + ReInitialize, currentstring, GetTokenNo, BuiltinTokenNo, + UnknownTokenNo ; FROM M2FileName IMPORT CalculateFileName ; FROM M2Preprocess IMPORT PreprocessModule, MakeSaveTempsFileNameExt, OnExitDelete ; @@ -288,32 +289,74 @@ BEGIN END compile ; +(* + ExamineHeader - examines up until the ';', '[' or eof and determines if the source file + is a program, implementation/definition module. +*) + +PROCEDURE ExamineHeader (VAR name: ADDRESS; VAR isdefimp, module: BOOLEAN) ; +BEGIN + (* Stop if we see one of eof ';' '['. *) + WHILE (currenttoken#eoftok) AND + (currenttoken#semicolontok) AND (currenttoken#lsbratok) DO + IF name = NIL + THEN + IF (currenttoken=implementationtok) OR (currenttoken=definitiontok) + THEN + isdefimp := TRUE ; + GetToken + END ; + IF currenttoken=moduletok + THEN + module := TRUE ; + GetToken ; + IF currenttoken=identtok + THEN + name := currentstring + END + END ; + END ; + GetToken + END ; +END ExamineHeader ; + + (* ExamineCompilationUnit - opens the source file to obtain the module name and kind of module. *) -PROCEDURE ExamineCompilationUnit (VAR name: ADDRESS; VAR isdefimp: BOOLEAN) ; +PROCEDURE ExamineCompilationUnit () : CARDINAL ; VAR - Message: String ; + Message : String ; + name : ADDRESS ; + module, + isdefimp: BOOLEAN ; BEGIN + name := NIL ; isdefimp := FALSE ; (* default to program module *) - (* stop if we see eof, ';' or '[' *) - WHILE (currenttoken#eoftok) AND (currenttoken#semicolontok) AND (currenttoken#lsbratok) DO - IF (currenttoken=implementationtok) OR (currenttoken=definitiontok) + module := FALSE ; (* Seen module keyword? *) + ExamineHeader (name, isdefimp, module) ; + IF name = NIL + THEN + IF module THEN - isdefimp := TRUE ; - GetToken + Message := MetaString0 (InitString ('no {%kMODULE} keyword seen')) + ELSE + Message := MetaString0 (InitString ('no module ident seen')) END ; - IF currenttoken=identtok + m2flex.M2Error (string (Message)) ; + exit (1) + ELSE + (* The token used is will be overwritten when P0 is underway. + At this point we are determining the module kind and the tokens + read will be discarded (see ReInitialize below). *) + IF isdefimp THEN - name := currentstring ; - RETURN - END ; - GetToken - END ; - Message := MetaString0 (InitString ('no {%kMODULE} name found')) ; - m2flex.M2Error (string (Message)) ; - exit (1) + RETURN MakeImplementationSource (BuiltinTokenNo, makekey (name)) + ELSE + RETURN MakeProgramSource (BuiltinTokenNo, makekey (name)) + END + END END ExamineCompilationUnit ; @@ -324,17 +367,14 @@ END ExamineCompilationUnit ; PROCEDURE PeepInto (s: String) ; VAR - name : ADDRESS ; - isdefimp: BOOLEAN ; + mainModule: CARDINAL ; BEGIN IF OpenSource (s) THEN - ExamineCompilationUnit (name, isdefimp) ; - IF isdefimp + mainModule := ExamineCompilationUnit () ; + IF mainModule # NulSym THEN - SetMainModule (MakeImplementationSource (GetTokenNo (), makekey (name))) - ELSE - SetMainModule (MakeProgramSource (GetTokenNo (), makekey (name))) + SetMainModule (mainModule) END ; CloseSource ; ReInitialize diff --git a/gcc/m2/gm2-compiler/M2Error.mod b/gcc/m2/gm2-compiler/M2Error.mod index 37e08248eea8..1d79c804a597 100644 --- a/gcc/m2/gm2-compiler/M2Error.mod +++ b/gcc/m2/gm2-compiler/M2Error.mod @@ -398,10 +398,8 @@ VAR BEGIN IF AtTokenNo = UnknownTokenNo THEN - (* this could be used as a useful debugging hook as the front end - has forgotten the token no. This can occur if a complex record - structure or array is used for example. *) - AtTokenNo := GetTokenNo () + (* This could be used as a useful debugging hook as the front end + has forgotten the token no. *) END ; NEW(e) ; WITH e^ DO diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 2be229d0bf82..3231f9f56067 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -2384,12 +2384,12 @@ PROCEDURE callRequestDependant (tokno: CARDINAL; BEGIN Assert (requestDep # NulSym) ; PushTtok (requestDep, tokno) ; - PushTF (Adr, Address) ; + PushTFtok (Adr, Address, tokno) ; PushTtok (MakeConstString (tokno, GetSymName (moduleSym)), tokno) ; PushT (1) ; BuildAdrFunction ; - PushTF (Adr, Address) ; + PushTFtok (Adr, Address, tokno) ; PushTtok (MakeConstString (tokno, GetLibName (moduleSym)), tokno) ; PushT (1) ; BuildAdrFunction ; @@ -2399,12 +2399,12 @@ BEGIN PushTF (Nil, Address) ; PushTF (Nil, Address) ELSE - PushTF (Adr, Address) ; + PushTFtok (Adr, Address, tokno) ; PushTtok (MakeConstString (tokno, GetSymName (depModuleSym)), tokno) ; PushT (1) ; BuildAdrFunction ; - PushTF (Adr, Address) ; + PushTFtok (Adr, Address, tokno) ; PushTtok (MakeConstString (tokno, GetLibName (depModuleSym)), tokno) ; PushT (1) ; BuildAdrFunction @@ -2668,7 +2668,7 @@ PROCEDURE BuildStringAdrParam (tok: CARDINAL; name: Name); VAR str, m2strnul: CARDINAL ; BEGIN - PushTF (Adr, Address) ; + PushTFtok (Adr, Address, tok) ; str := MakeConstString (tok, name) ; PutConstStringKnown (tok, str, name, FALSE, TRUE) ; m2strnul := DeferMakeConstStringM2nul (tok, str) ; @@ -2772,12 +2772,12 @@ BEGIN (* DeconstructModules (module_name, argc, argv, envp); *) PushTtok (deconstructModules, tok) ; - PushTF(Adr, Address) ; + PushTFtok (Adr, Address, tok) ; PushTtok (MakeConstString (tok, GetSymName (moduleSym)), tok) ; PushT(1) ; BuildAdrFunction ; - PushTF(Adr, Address) ; + PushTFtok (Adr, Address, tok) ; PushTtok (MakeConstString (tok, GetLibName (moduleSym)), tok) ; PushT(1) ; BuildAdrFunction ; @@ -2836,12 +2836,12 @@ BEGIN (* RegisterModule (module_name, init, fini, dependencies); *) PushTtok (RegisterModule, tok) ; - PushTF (Adr, Address) ; + PushTFtok (Adr, Address, tok) ; PushTtok (MakeConstString (tok, GetSymName (moduleSym)), tok) ; PushT (1) ; BuildAdrFunction ; - PushTF (Adr, Address) ; + PushTFtok (Adr, Address, tok) ; PushTtok (MakeConstString (tok, GetLibName (moduleSym)), tok) ; PushT (1) ; BuildAdrFunction ; @@ -6422,7 +6422,7 @@ BEGIN THEN MarkAsReadWrite(rw) ; (* pass the address field of an unbounded variable *) - PushTF(Adr, Address) ; + PushTFtok (Adr, Address, OperandTok (pi)) ; PushTFAD (f^.TrueExit, f^.FalseExit, f^.Unbounded, f^.Dimension) ; PushT(1) ; BuildAdrFunction ; @@ -6452,7 +6452,7 @@ BEGIN THEN MarkAsReadWrite(rw) ; (* pass the address field of an unbounded variable *) - PushTF(Adr, Address) ; + PushTFtok (Adr, Address, OperandTok (pi)) ; PushTFAD (f^.TrueExit, f^.FalseExit, f^.Unbounded, f^.Dimension) ; PushT(1) ; BuildAdrFunction ; @@ -12574,19 +12574,21 @@ BEGIN IF Operator = OrTok THEN CheckBooleanId ; - PopBool (t1, f1) ; + PopBooltok (t1, f1, rightpos) ; PopTtok (Operator, OperatorPos) ; - PopBool (t2, f2) ; + PopBooltok (t2, f2, leftpos) ; Assert (f2=0) ; - PushBool (Merge (t1, t2), f1) + OperatorPos := MakeVirtualTok (OperatorPos, leftpos, rightpos) ; + PushBooltok (Merge (t1, t2), f1, OperatorPos) ELSIF (Operator = AndTok) OR (Operator = AmbersandTok) THEN CheckBooleanId ; - PopBool (t1, f1) ; + PopBooltok (t1, f1, rightpos) ; PopTtok (Operator, OperatorPos) ; - PopBool (t2, f2) ; + PopBooltok (t2, f2, leftpos) ; Assert (t2=0) ; - PushBool (t1, Merge (f1, f2)) + OperatorPos := MakeVirtualTok (OperatorPos, leftpos, rightpos) ; + PushBooltok (t1, Merge (f1, f2), OperatorPos) ELSE PopTFrwtok (right, righttype, rightrw, rightpos) ; PopTtok (Operator, OperatorPos) ; @@ -12893,7 +12895,7 @@ BEGIN GenQuadO (tokpos, Operator, Operand1, Operand2, 0, FALSE) END ; GenQuadO (tokpos, GotoOp, NulSym, NulSym, 0, FALSE) ; - PushBool (Merge (NextQuad-1, t1), Merge (NextQuad-2, f1)) + PushBooltok (Merge (NextQuad-1, t1), Merge (NextQuad-2, f1), tokpos) ELSIF (OperandT (2) = HashTok) OR (OperandT (2) = LessGreaterTok) THEN (* are the two boolean expressions the different? *) @@ -12909,7 +12911,7 @@ BEGIN GenQuadO (tokpos, Operator, Operand1, Operand2, 0, FALSE) END ; GenQuadO (tokpos, GotoOp, NulSym, NulSym, 0, FALSE) ; - PushBool (Merge (NextQuad-2, f1), Merge (NextQuad-1, t1)) + PushBooltok (Merge (NextQuad-2, f1), Merge (NextQuad-1, t1), tokpos) ELSE MetaError0 ('only allowed to use the relation operators {%Ek=} {%Ek#} rather than {%Ek<} or {%Ek>} on {%EkBOOLEAN} expressions as these do not imply an ordinal value for {%kTRUE} or {%kFALSE}') END @@ -13061,7 +13063,7 @@ BEGIN GenQuadOtok (combinedTok, MakeOp (Op), left, right, 0, FALSE, leftpos, rightpos, UnknownTokenNo) ; (* True Exit *) GenQuadO (combinedTok, GotoOp, NulSym, NulSym, 0, FALSE) ; (* False Exit *) - PushBool (NextQuad-2, NextQuad-1) + PushBooltok (NextQuad-2, NextQuad-1, combinedTok) END END BuildRelOp ; diff --git a/gcc/m2/gm2-compiler/P2Build.bnf b/gcc/m2/gm2-compiler/P2Build.bnf index b22f052c92bc..d69ce2cf17e5 100644 --- a/gcc/m2/gm2-compiler/P2Build.bnf +++ b/gcc/m2/gm2-compiler/P2Build.bnf @@ -104,7 +104,6 @@ FROM P2SymBuild IMPORT P2StartBuildProgramModule, BuildVarientSelector, StartBuildVarientFieldRecord, EndBuildVarientFieldRecord, - BuildNulName, StartBuildArray, EndBuildArray, BuildFieldArray, BuildArrayComma, @@ -861,17 +860,21 @@ CaseLabelList := CaseLabels { "," CaseLabels } =: CaseLabels := ConstExpression [ ".." ConstExpression ] =: -SetType := % VAR ispacked: BOOLEAN ; % +SetType := % VAR ispacked: BOOLEAN ; + setpos : CARDINAL ; % + % setpos := GetTokenNo () % % ispacked := FALSE % ( "SET" % ispacked := FALSE % | "PACKEDSET" % ispacked := TRUE % ) "OF" % BuildNulName % - SimpleType % BuildSetType (ispacked) % + SimpleType % BuildSetType (setpos, ispacked) % =: -PointerType := "POINTER" "TO" % BuildNulName % - Type % BuildPointerType % +PointerType := % VAR pointerpos: CARDINAL ; % + % pointerpos := GetTokenNo () % + "POINTER" "TO" % BuildNulName % + Type % BuildPointerType (pointerpos) % =: ProcedureType := "PROCEDURE" % BuildProcedureType ; % diff --git a/gcc/m2/gm2-compiler/P2SymBuild.def b/gcc/m2/gm2-compiler/P2SymBuild.def index 4f6ad96d8441..89a83144011b 100644 --- a/gcc/m2/gm2-compiler/P2SymBuild.def +++ b/gcc/m2/gm2-compiler/P2SymBuild.def @@ -887,7 +887,7 @@ PROCEDURE BuildNoReturnAttribute (procedureSym: CARDINAL) ; |------------| |-------------| *) -PROCEDURE BuildPointerType ; +PROCEDURE BuildPointerType (pointerpos: CARDINAL) ; (* @@ -906,7 +906,7 @@ PROCEDURE BuildPointerType ; |------------| |-------------| *) -PROCEDURE BuildSetType (ispacked: BOOLEAN) ; +PROCEDURE BuildSetType (setpos: CARDINAL; ispacked: BOOLEAN) ; (* diff --git a/gcc/m2/gm2-compiler/P2SymBuild.mod b/gcc/m2/gm2-compiler/P2SymBuild.mod index 17a6e1b71ca3..0b90b762e2ea 100644 --- a/gcc/m2/gm2-compiler/P2SymBuild.mod +++ b/gcc/m2/gm2-compiler/P2SymBuild.mod @@ -26,7 +26,7 @@ FROM libc IMPORT strlen ; FROM NameKey IMPORT Name, MakeKey, makekey, KeyToCharStar, NulName, LengthKey, WriteKey ; FROM StrLib IMPORT StrEqual ; FROM M2Debug IMPORT Assert, WriteDebug ; -FROM M2LexBuf IMPORT UnknownTokenNo, GetTokenNo ; +FROM M2LexBuf IMPORT UnknownTokenNo, GetTokenNo, MakeVirtual2Tok ; FROM M2Error IMPORT InternalError, WriteFormat1, WriteFormat2, WriteFormat0, ErrorStringAt, ErrorStringAt2 ; FROM M2MetaError IMPORT MetaError1, MetaError2, MetaErrorsT2, MetaErrors1, MetaErrors2, MetaErrorString1 ; FROM DynamicStrings IMPORT String, InitString, InitStringCharStar, Mark, Slice, ConCat, KillString, string ; @@ -2130,25 +2130,27 @@ END BuildNoReturnAttribute ; |------------| |-------------| *) -PROCEDURE BuildPointerType ; +PROCEDURE BuildPointerType (pointerpos: CARDINAL) ; VAR - tok : CARDINAL ; + combined, + namepos, + typepos : CARDINAL ; name : Name ; Type, PtrToType: CARDINAL ; BEGIN - PopTtok(Type, tok) ; - PopT(name) ; - name := CheckAnonymous(name) ; + PopTtok (Type, typepos) ; + PopTtok (name, namepos) ; + name := CheckAnonymous (name) ; - PtrToType := MakePointer(tok, name) ; - PutPointer(PtrToType, Type) ; + combined := MakeVirtual2Tok (pointerpos, typepos) ; + PtrToType := MakePointer (combined, name) ; + PutPointer (PtrToType, Type) ; CheckForExportedImplementation(PtrToType) ; (* May be an exported hidden type *) - PushTtok(name, tok) ; + PushTtok (name, namepos) ; Annotate("%1n|%3d||pointer type name") ; - PushTtok(PtrToType, tok) ; + PushTtok(PtrToType, combined) ; Annotate("%1s(%1d)|%3d||pointer type") - END BuildPointerType ; @@ -2168,21 +2170,24 @@ END BuildPointerType ; |------------| |-------------| *) -PROCEDURE BuildSetType (ispacked: BOOLEAN) ; +PROCEDURE BuildSetType (setpos: CARDINAL; ispacked: BOOLEAN) ; VAR - tok : CARDINAL ; - name : Name ; + combined, + namepos, + typepos : CARDINAL ; + name : Name ; Type, - SetType: CARDINAL ; + SetType : CARDINAL ; BEGIN - PopTtok(Type, tok) ; - PopT(name) ; - SetType := MakeSet (tok, name) ; + PopTtok (Type, typepos) ; + PopTtok (name, namepos) ; + combined := MakeVirtual2Tok (setpos, typepos) ; + SetType := MakeSet (combined, name) ; CheckForExportedImplementation(SetType) ; (* May be an exported hidden type *) PutSet(SetType, Type, ispacked) ; - PushT(name) ; + PushTtok (name, namepos) ; Annotate("%1n||set type name") ; - PushTtok (SetType, tok) ; + PushTtok (SetType, combined) ; Annotate ("%1s(%1d)|%3d||set type|token no") END BuildSetType ; diff --git a/gcc/m2/gm2-compiler/SymbolTable.mod b/gcc/m2/gm2-compiler/SymbolTable.mod index b49cc889dcae..c08de6a97c32 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.mod +++ b/gcc/m2/gm2-compiler/SymbolTable.mod @@ -99,7 +99,10 @@ IMPORT Indexing ; CONST - DebugUnknowns = FALSE ; + DebugUnknowns = FALSE ; (* Debug unknown symbols. *) + DebugUnknownToken = FALSE ; (* If enabled it will generate a warning every + time a symbol is created with an unknown + location. *) (* The Unbounded is a pseudo type used within the compiler @@ -3265,6 +3268,29 @@ BEGIN END GetModuleCtors ; +(* + CheckTok - checks to see that tok is at a known location. If not + it uses GetTokenNo as a fall back. +*) + +PROCEDURE CheckTok (tok: CARDINAL; name: ARRAY OF CHAR) : CARDINAL ; +VAR + s: String ; +BEGIN + IF tok = UnknownTokenNo + THEN + tok := GetTokenNo () ; + IF DebugUnknownToken + THEN + s := InitString (name) ; + s := ConCat (s, InitString (' symbol {%W} has been created with an unknown token location')) ; + MetaErrorStringT0 (GetTokenNo (), s) + END + END ; + RETURN tok +END CheckTok ; + + (* MakeModule - creates a module sym with ModuleName. It returns the symbol index. @@ -3276,6 +3302,7 @@ VAR pCall: PtrToCallFrame ; Sym : CARDINAL ; BEGIN + (* tok := CheckTok (tok, 'module') ; *) (* Make a new symbol since we are at the outer scope level. DeclareSym examines the current scope level for any symbols @@ -3645,7 +3672,7 @@ BEGIN (* We cannot use DeclareSym as it examines the current scope *) (* for any symbols which have the correct name, but are yet *) (* undefined. *) - + (* tok := CheckTok (tok, 'defimp') ; *) NewSym(Sym) ; pSym := GetPsym(Sym) ; WITH pSym^ DO @@ -3893,6 +3920,7 @@ VAR pSym: PtrToSymbol ; Sym : CARDINAL ; BEGIN + tok := CheckTok (tok, 'procedure') ; Sym := DeclareSym(tok, ProcedureName) ; IF NOT IsError(Sym) THEN @@ -4466,6 +4494,7 @@ PROCEDURE MakeRecord (tok: CARDINAL; RecordName: Name) : CARDINAL ; VAR oaf, sym: CARDINAL ; BEGIN + tok := CheckTok (tok, 'record') ; sym := HandleHiddenOrDeclare (tok, RecordName, oaf) ; FillInRecordFields (tok, sym, RecordName, GetCurrentScope (), oaf) ; ForeachOAFamily (oaf, doFillInOAFamily) ; @@ -4483,6 +4512,7 @@ VAR pSym: PtrToSymbol ; Sym : CARDINAL ; BEGIN + tok := CheckTok (tok, 'varient') ; NewSym (Sym) ; pSym := GetPsym(Sym) ; WITH pSym^ DO @@ -4632,6 +4662,7 @@ VAR pSym : PtrToSymbol ; sym, oaf: CARDINAL ; BEGIN + tok := CheckTok (tok, 'enumeration') ; sym := CheckForHiddenType (EnumerationName) ; IF sym=NulSym THEN @@ -4723,6 +4754,7 @@ VAR pSym: PtrToSymbol ; Sym : CARDINAL ; BEGIN + tok := CheckTok (tok, 'hidden') ; Sym := DeclareSym (tok, TypeName) ; IF NOT IsError(Sym) THEN @@ -4835,6 +4867,7 @@ VAR str: String ; sym: CARDINAL ; BEGIN + tok := CheckTok (tok, 'constant') ; str := Sprintf1 (Mark (InitString ("%d")), value) ; sym := MakeConstLit (tok, makekey (string (str)), Cardinal) ; str := KillString (str) ; @@ -4970,6 +5003,7 @@ PROCEDURE MakeConstLit (tok: CARDINAL; constName: Name; constType: CARDINAL) : C VAR sym: CARDINAL ; BEGIN + tok := CheckTok (tok, 'constlit') ; sym := LookupConstLitPoolEntry (tok, constName, constType) ; IF sym = NulSym THEN @@ -5100,6 +5134,7 @@ PROCEDURE MakeConstStringCnul (tok: CARDINAL; name: Name; known: BOOLEAN) : CARD VAR newstr: CARDINAL ; BEGIN + tok := CheckTok (tok, 'conststringcnul') ; NewSym (newstr) ; InitConstString (tok, newstr, name, name, cnulstr, TRUE, known) ; RETURN newstr @@ -5970,6 +6005,7 @@ VAR pSym : PtrToSymbol ; sym, oaf: CARDINAL ; BEGIN + tok := CheckTok (tok, 'subrange') ; sym := HandleHiddenOrDeclare (tok, SubrangeName, oaf) ; IF NOT IsError(sym) THEN @@ -7739,6 +7775,7 @@ END IsComponent ; PROCEDURE MakeTemporary (tok: CARDINAL; Mode: ModeOfAddr) : CARDINAL ; BEGIN + tok := CheckTok (tok, 'temporary') ; RETURN buildTemporary (tok, Mode, FALSE, NulSym) END MakeTemporary ; @@ -10122,6 +10159,7 @@ VAR pSym : PtrToSymbol ; VariableSym: CARDINAL ; BEGIN + tok := CheckTok (tok, 'parameter') ; VariableSym := MakeVar (tok, ParamName) ; pSym := GetPsym (VariableSym) ; WITH pSym^ DO @@ -10604,6 +10642,7 @@ PROCEDURE MakeParameterHeapVar (tok: CARDINAL; type: CARDINAL; mode: ModeOfAddr) VAR heapvar: CARDINAL ; BEGIN + tok := CheckTok (tok, 'parameter heap var') ; heapvar := NulSym ; type := SkipType (type) ; IF IsPointer (type) @@ -11079,6 +11118,7 @@ PROCEDURE MakePointer (tok: CARDINAL; PointerName: Name) : CARDINAL ; VAR oaf, sym: CARDINAL ; BEGIN + tok := CheckTok (tok, 'pointer') ; sym := HandleHiddenOrDeclare(tok, PointerName, oaf) ; FillInPointerFields(sym, PointerName, GetCurrentScope(), oaf) ; ForeachOAFamily(oaf, doFillInOAFamily) ; @@ -11341,6 +11381,7 @@ VAR pSym : PtrToSymbol ; oaf, sym: CARDINAL ; BEGIN + tok := CheckTok (tok, 'set') ; sym := HandleHiddenOrDeclare(tok, SetName, oaf) ; IF NOT IsError(sym) THEN @@ -11680,6 +11721,7 @@ PROCEDURE MakeUnbounded (tok: CARDINAL; VAR sym, oaf: CARDINAL ; BEGIN + tok := CheckTok (tok, 'unbounded') ; oaf := MakeOAFamily(SimpleType) ; sym := GetUnbounded(oaf, ndim) ; IF sym=NulSym @@ -12513,6 +12555,7 @@ VAR pSym : PtrToSymbol ; oaf, sym: CARDINAL ; BEGIN + tok := CheckTok (tok, 'proctype') ; sym := HandleHiddenOrDeclare (tok, ProcTypeName, oaf) ; IF NOT IsError(sym) THEN From c27b30552e6cc789425d3628d294dafc5f3a0861 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw <rearnsha@arm.com> Date: Wed, 6 Mar 2024 13:41:02 +0000 Subject: [PATCH 017/551] gomp: testsuite: improve compatibility of bad-array-section-3.c [PR113428] This test generates different warnings on ilp32 targets because the size of an integer matches the size of a pointer. Avoid this by using signed char. gcc/testsuite: PR testsuite/113428 * gcc.dg/gomp/bad-array-section-c-3.c: Use signed char instead of int. --- gcc/testsuite/gcc.dg/gomp/bad-array-section-c-3.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.dg/gomp/bad-array-section-c-3.c b/gcc/testsuite/gcc.dg/gomp/bad-array-section-c-3.c index 8be15ced8c06..431af71c4222 100644 --- a/gcc/testsuite/gcc.dg/gomp/bad-array-section-c-3.c +++ b/gcc/testsuite/gcc.dg/gomp/bad-array-section-c-3.c @@ -1,15 +1,15 @@ /* { dg-do compile } */ struct S { - int *ptr; + signed char *ptr; }; int main() { - int arr[20]; + signed char arr[20]; /* Reject array section in compound initialiser. */ -#pragma omp target map( (struct S) { .ptr = (int *) arr[5:5] } ) +#pragma omp target map( (struct S) { .ptr = (signed char *) arr[5:5] } ) /* { dg-error {expected '\]' before ':' token} "" { target *-*-* } .-1 } */ /* { dg-warning {cast to pointer from integer of different size} "" { target *-*-* } .-2 } */ /* { dg-message {sorry, unimplemented: unsupported map expression} "" { target *-*-* } .-3 } */ From 9b3243858bed000b0ee8c3cf718f61b0e75e72ec Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Mon, 11 Mar 2024 19:36:52 +0000 Subject: [PATCH 018/551] Update gcc sv.po * sv.po: Update. --- gcc/po/sv.po | 437 +++++++++++++++++++++------------------------------ 1 file changed, 177 insertions(+), 260 deletions(-) diff --git a/gcc/po/sv.po b/gcc/po/sv.po index f24eb1bbd349..536fe50f1c08 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -32,7 +32,7 @@ msgstr "" "Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2024-03-03 17:38+0100\n" +"PO-Revision-Date: 2024-03-10 13:32+0100\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -1635,10 +1635,9 @@ msgid "Warn about C++26 constructs in code compiled with an older standard." msgstr "Varna för C++26-konstruktioner i kod kompilerad med en äldre standard." #: c-family/c.opt:507 -#, fuzzy, no-c-format -#| msgid "Warn about suspicious divisions of two sizeof expressions that don't work correctly with pointers." +#, no-c-format msgid "Warn about suspicious calls to calloc-like functions where sizeof expression is the earlier size argument and not the latter." -msgstr "Varna för misstänkta divisioner av två sizeof-uttryck som inte fungerar korrekt med pekare." +msgstr "Varna för misstänkta anrop av calloc-liknande funktioner där sizeof-uttryck är det tidigare storleksargumentet och inte det senare." #: c-family/c.opt:511 #, no-c-format @@ -1758,10 +1757,9 @@ msgid "Warn when a declaration is found after a statement." msgstr "Varna när en deklaration hittas efter en sats." #: c-family/c.opt:612 -#, fuzzy, no-c-format -#| msgid "Warn about unprototyped function declarations." +#, no-c-format msgid "Warn for missing parameter types in function declarations." -msgstr "Varna för funktionsdeklarationer utan prototyp." +msgstr "Varna för saknade parametertyper i funktionsdeklarationer." #: c-family/c.opt:616 #, no-c-format @@ -2174,10 +2172,9 @@ msgid "Warn when the template keyword is missing after a member access token in msgstr "Varna när nyckelordet template saknas efter en medlemsåtkomstsymbol i en beroende medlems åtkomstuttryck om den medlemmen är en mall." #: c-family/c.opt:994 -#, fuzzy, no-c-format -#| msgid "Warn about global functions without previous declarations." +#, no-c-format msgid "Warn about global variables without previous declarations." -msgstr "Varna för globala funktioner utan tidigare deklaration." +msgstr "Varna för globala variabler utan tidigare deklaration." #: c-family/c.opt:1001 #, no-c-format @@ -2265,10 +2262,9 @@ msgid "Warn about potentially suboptimal choices related to OpenACC parallelism. msgstr "Varna för potentiellt suboptimala val relaterade till OpenACC-parallellism." #: c-family/c.opt:1101 -#, fuzzy, no-c-format -#| msgid "Warn about \"suspicious\" constructs." +#, no-c-format msgid "Warn about suspicious OpenMP code." -msgstr "Varna för ”misstänkta” konstruktioner." +msgstr "Varna för misstänkt OpenMP-kod." #: c-family/c.opt:1105 #, no-c-format @@ -2606,10 +2602,9 @@ msgid "Warn if a comparison always evaluates to true or false." msgstr "Varna om en logisk jämförelse alltid beräknas till sant eller falskt." #: c-family/c.opt:1413 -#, fuzzy, no-c-format -#| msgid "template-id not allowed for destructor" +#, no-c-format msgid "Warn about simple-template-id in a constructor or destructor." -msgstr "mall-id är inte tillåtet för destruerare" +msgstr "Varna för simple-template-id i en konstruerare eller destruerare." #: c-family/c.opt:1417 #, no-c-format @@ -2918,10 +2913,9 @@ msgid "Print hierarchical comparisons when template types are mismatched." msgstr "Skriv ut hierarkiska jämförelser när malltyper inte stämmer överens." #: c-family/c.opt:1818 -#, fuzzy, no-c-format -#| msgid "default argument mismatch in overload resolution" +#, no-c-format msgid "Note all candidates during overload resolution failure." -msgstr "standardargument stämmer inte överens i upplösning av överlagring" +msgstr "Notera alla kandidater under misslyckad upplösning av överlagring." #: c-family/c.opt:1822 #, no-c-format @@ -3084,10 +3078,9 @@ msgid "Warn about macros that have conflicting header units definitions." msgstr "Varna för makron som har motstridiga huvudenhetsdefinitioner." #: c-family/c.opt:1992 -#, fuzzy, no-c-format -#| msgid "Warn when a pointer is compared with a zero character constant." +#, no-c-format msgid "Warn if pointers of distinct types are compared without a cast." -msgstr "Varna när en pekare jämförs med en noll-teckenkonstant." +msgstr "Varna om pekare av distinkta typer jämförs utan en typkonvertering." #: c-family/c.opt:1996 #, no-c-format @@ -3130,10 +3123,9 @@ msgid "Implement resolution of DR 150 for matching of template template argument msgstr "Implementera upplösning av DR 150 för att matcha mall-mall-argument." #: c-family/c.opt:2043 -#, fuzzy, no-c-format -#| msgid "Generate code for NeXT (Apple Mac OS X) runtime environment." +#, no-c-format msgid "Generate code for NeXT (Apple macOS) runtime environment." -msgstr "Generera kod för körtidsmiljön NeXT (Apple Mac OS X)." +msgstr "Generera kod för körtidsmiljön NeXT (Apple macOS)." #: c-family/c.opt:2047 #, no-c-format @@ -3526,10 +3518,9 @@ msgid "Conform to the ISO 2023 C++ draft standard (experimental and incomplete s msgstr "Följ standardutkastet ISO 2023 C++ (experimentellt och ofullständigt stöd)." #: c-family/c.opt:2480 c-family/c.opt:2484 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 2023 C++ draft standard (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2026 C++ draft standard (experimental and incomplete support)." -msgstr "Följ standardutkastet ISO 2023 C++ (experimentellt och ofullständigt stöd)." +msgstr "Följ standardutkastet ISO 2026 C++ (experimentellt och ofullständigt stöd)." #: c-family/c.opt:2488 c-family/c.opt:2642 #, no-c-format @@ -3548,16 +3539,14 @@ msgid "Conform to the ISO 2017 C standard (published in 2018)." msgstr "Följ standarden ISO 2017 C (publicerades 2018)." #: c-family/c.opt:2504 c-family/c.opt:2654 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 202X C standard draft (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) (experimental and incomplete support)." -msgstr "Följ standardutkastet ISO 202X C (experimentellt och ofullständigt stöd)." +msgstr "Följ standardutkastet ISO 2023 C (förväntas publiceras under 2024) (experimentellt och ofullständigt stöd)." #: c-family/c.opt:2508 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -std=c11." +#, no-c-format msgid "Deprecated in favor of -std=c23." -msgstr "Undanbedes till förmån för -std=c11." +msgstr "Undanbedes till förmån för -std=c23." #: c-family/c.opt:2512 c-family/c.opt:2516 c-family/c.opt:2626 #, no-c-format @@ -3620,10 +3609,9 @@ msgid "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimen msgstr "Följ standardutkastet ISO 2023 C++ med GNU-utökningar (experimentellt och ofullständigt stöd)." #: c-family/c.opt:2578 c-family/c.opt:2582 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental and incomplete support)." -msgstr "Följ standardutkastet ISO 2023 C++ med GNU-utökningar (experimentellt och ofullständigt stöd)." +msgstr "Följ standardutkastet ISO 2026 C++ med GNU-utökningar (experimentellt och ofullständigt stöd)." #: c-family/c.opt:2586 #, no-c-format @@ -3641,16 +3629,14 @@ msgid "Conform to the ISO 2017 C standard (published in 2018) with GNU extension msgstr "Följ standarden ISO 2017 C (publicerades 2018) med GNU-utökningar." #: c-family/c.opt:2602 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 202X C standard draft with GNU extensions (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) with GNU extensions (experimental and incomplete support)." -msgstr "Följ standardutkastet ISO 202X C med GNU-utökningar (experimentellt och ofullständigt stöd)." +msgstr "Följ standardutkastet ISO 2023 C (förväntas publiceras under 2024) med GNU-utökningar (experimentellt och ofullständigt stöd)." #: c-family/c.opt:2606 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -std=gnu11." +#, no-c-format msgid "Deprecated in favor of -std=gnu23." -msgstr "Undanbedes till förmån för -std=gnu11." +msgstr "Undanbedes till förmån för -std=gnu23." #: c-family/c.opt:2610 c-family/c.opt:2614 #, no-c-format @@ -4583,10 +4569,9 @@ msgid "Warn about code paths in which floating-point arithmetic is used in locat msgstr "Varna för kodvägar i vilka flyttalsaritmetik används på platser där precis beräkning behövs." #: analyzer/analyzer.opt:139 -#, fuzzy, no-c-format -#| msgid "Warn about code paths which appear to lead to infinite recursion." +#, no-c-format msgid "Warn about code paths which appear to lead to an infinite loop." -msgstr "Varna för kodvägar vilka förefaller leda till oändlig rekursion." +msgstr "Varna för kodvägar vilka förefaller leda till oändlig slinga." #: analyzer/analyzer.opt:143 #, no-c-format @@ -4614,10 +4599,9 @@ msgid "Warn about code paths in which a write or read to a buffer is out-of-boun msgstr "Varna för kodvägar i vilka en skrivning eller läsning till/från en buffert går utanför gränserna." #: analyzer/analyzer.opt:163 -#, fuzzy, no-c-format -#| msgid "Warn about code paths in which a write or read to a buffer is out-of-bounds." +#, no-c-format msgid "Warn about code paths in which undefined behavior would occur due to overlapping buffers." -msgstr "Varna för kodvägar i vilka en skrivning eller läsning till/från en buffert går utanför gränserna." +msgstr "Varna för kodvägar i vilka odefinierat beteende skulle uppstå på grund av överlappande buffertar." #: analyzer/analyzer.opt:167 #, no-c-format @@ -4695,10 +4679,9 @@ msgid "Warn about code paths in which an unsanitized value is used as a size." msgstr "Varna för kodvägar i vilka ett osanerat värde används som en storlek." #: analyzer/analyzer.opt:227 -#, fuzzy, no-c-format -#| msgid "Warn about code paths which appear to lead to infinite recursion." +#, no-c-format msgid "Warn about code paths in in which a call is made to strtok with undefined behavior." -msgstr "Varna för kodvägar vilka förefaller leda till oändlig rekursion." +msgstr "Varna för kodvägar i vilka förefaller ett anrop görs av strtok med odefinierat beteende." #: analyzer/analyzer.opt:231 #, no-c-format @@ -4746,10 +4729,9 @@ msgid "Warn about code paths in which an uninitialized value is used." msgstr "Varna för kodvägar i vilka ett oinitierat värde används." #: analyzer/analyzer.opt:267 -#, fuzzy, no-c-format -#| msgid "Warn if the code is too complicated for the analyzer to fully explore." +#, no-c-format msgid "Warn if expressions are too complicated for the analyzer to fully track." -msgstr "Varna om koden är för komplicerad för att analyseraren skall kunna utforska den fullständigt." +msgstr "Varna om uttryck är för komplicerade för att analyseraren skall kunna spåra dem fullständigt." #: analyzer/analyzer.opt:271 #, no-c-format @@ -4877,10 +4859,9 @@ msgid "Dump various analyzer internals to SRCFILE.*.fg.dot and SRCFILE.*.tg.dot. msgstr "Dumpa diverse intern information om analyseraren till KÄLLFIL.*.fg.dot och KÄLLFIL.*.tg.dot." #: analyzer/analyzer.opt:371 -#, fuzzy, no-c-format -#| msgid "Dump various analyzer internals to SRCFILE.analyzer.txt." +#, no-c-format msgid "Dump various analyzer internals to SRCFILE.*.infinite-loop.dot." -msgstr "Dumpa diverse intern information om analyseraren till KÄLLFIL.analyzer.txt." +msgstr "Dumpa diverse intern information om analyseraren till KÄLLFIL.*.infinite-loop.dot." #: analyzer/analyzer.opt:375 #, no-c-format @@ -5318,10 +5299,9 @@ msgid "Do not add a default symbol exports to modules or dynamic libraries." msgstr "Lägg inte till standardsymbolexporter till moduler eller dynamiska bibliotek." #: config/darwin.opt:246 -#, fuzzy, no-c-format -#| msgid "Do not add a default symbol exports to modules or dynamic libraries." +#, no-c-format msgid "Do not add default run paths (for the compiler library directories) to executables, modules or dynamic libraries." -msgstr "Lägg inte till standardsymbolexporter till moduler eller dynamiska bibliotek." +msgstr "Lägg inte till en standardkörsökväg (för kompilatorns bibliotekskataloger) till körbara, moduler eller dynamiska bibliotek." #: config/darwin.opt:250 #, no-c-format @@ -5985,10 +5965,9 @@ msgid "Set the version of RISC-V ISA spec." msgstr "Sätt versionen för RISC-V ISA-specifikationen." #: config/riscv/riscv.opt:509 -#, fuzzy, no-c-format -#| msgid "Enable conditional move instruction usage." +#, no-c-format msgid "Enable conditional moves unconditionally." -msgstr "Aktivera användning av villkorliga flyttinstruktioner." +msgstr "Aktivera villkorliga flyttinstruktioner ovillkorligt." #: config/riscv/riscv.opt:513 #, no-c-format @@ -5996,22 +5975,19 @@ msgid "Always inline subword atomic operations." msgstr "Inline:a alltid atomära operationer på delord." #: config/riscv/riscv.opt:517 -#, fuzzy, no-c-format -#| msgid "Use caller save register across calls if possible." +#, no-c-format msgid "Inline strcmp calls if possible." -msgstr "Använd anroparens sparregister mellan anrop om möjligt." +msgstr "Inline:a strcmp-anrop om möjligt." #: config/riscv/riscv.opt:521 -#, fuzzy, no-c-format -#| msgid "Use caller save register across calls if possible." +#, no-c-format msgid "Inline strncmp calls if possible." -msgstr "Använd anroparens sparregister mellan anrop om möjligt." +msgstr "Inline:a strncmp-anrop om möjligt." #: config/riscv/riscv.opt:525 -#, fuzzy, no-c-format -#| msgid "Reduce stack alignment on call sites if possible." +#, no-c-format msgid "Inline strlen calls if possible." -msgstr "Reducera stackjusteringen vid anropsplatsen om möjligt." +msgstr "Inline:a strlen-anrop om möjligt." #: config/riscv/riscv.opt:529 #, no-c-format @@ -6019,10 +5995,9 @@ msgid "Max number of bytes to compare as part of inlined strcmp/strncmp routines msgstr "Max antal byte att jämföra som en del av inline:ade strcmp/strncmp-rutiner (standard: 64)." #: config/riscv/riscv.opt:533 -#, fuzzy, no-c-format -#| msgid "Valid arguments to -mcode-readable=:" +#, no-c-format msgid "Valid arguments to -param=riscv-autovec-preference=:" -msgstr "Giltiga argument till -mcode-readable=:" +msgstr "Giltiga argument till -param=riscv-autovec-preference=:" #: config/riscv/riscv.opt:546 #, no-c-format @@ -6040,10 +6015,9 @@ msgid "-param=riscv-autovec-lmul=<string>\tSet the RVV LMUL of auto-vectorizatio msgstr "-param=riscv-autovec-lmul=<sträng>\tSätt RVV LMUL:en för autovektorisering i RISC-V-porteringen." #: config/riscv/riscv.opt:576 -#, fuzzy, no-c-format -#| msgid "Valid arguments to -mstringop-strategy=:" +#, no-c-format msgid "Valid arguments to -param=vsetvl-strategy=:" -msgstr "Giltiga argument till -mstringop-strategy=:" +msgstr "Giltiga argument till -param=vsetvl-strategy=:" #: config/riscv/riscv.opt:589 #, no-c-format @@ -6056,10 +6030,9 @@ msgid "Valid arguments to -mstringop-strategy=:" msgstr "Giltiga argument till -mstringop-strategy=:" #: config/riscv/riscv.opt:609 -#, fuzzy, no-c-format -#| msgid "Specify memset expansion strategy when expected size is known." +#, no-c-format msgid "Specify stringop expansion strategy." -msgstr "Ange strategi för expansion av memset när den förväntade storleken är känd." +msgstr "Ange strategi för expansion av stringop." #: config/m32c/m32c.opt:23 #, no-c-format @@ -6212,16 +6185,14 @@ msgid "Workaround for ARM Cortex-A53 Erratum number 843419." msgstr "Sätt att gå runt ARM Cortex-A53:s errata nummer 843419." #: config/aarch64/aarch64.opt:102 -#, fuzzy, no-c-format -#| msgid "Specify how to access the thread pointer." +#, no-c-format msgid "The register used to access the thread pointer:" -msgstr "Ange hur trådpekaren skall nås." +msgstr "Registret använt för att nå trådpekaren:" #: config/aarch64/aarch64.opt:133 -#, fuzzy, no-c-format -#| msgid "Specify thread pointer register number." +#, no-c-format msgid "Specify the thread pointer register." -msgstr "Ange registernumret för trådpekare." +msgstr "Ange trådpekarregistret." #: config/aarch64/aarch64.opt:137 #, no-c-format @@ -7105,10 +7076,9 @@ msgid "Branches are this expensive (arbitrary units)." msgstr "Hopp är så här dyra (godtyckliga enheter)." #: config/i386/i386.opt:300 -#, fuzzy, no-c-format -#| msgid "-mlarge-data-threshold=<number>\tData greater than given threshold will go into .ldata section in x86-64 medium model." +#, no-c-format msgid "-mlarge-data-threshold=<number>\tData greater than given threshold will go into a large data section in x86-64 medium and large code models." -msgstr "-mlarge-data-threshold=<antal>\tData större än den angivna gränsen kommer hamna i .ldata-sektionen i x86-64 medelmodell." +msgstr "-mlarge-data-threshold=<antal>\tData större än den angivna gränsen kommer hamna i en stor sektion i x86-64 medelstora och stora kodmodeller." #: config/i386/i386.opt:304 #, no-c-format @@ -8041,40 +8011,34 @@ msgid "Support AMX-COMPLEX built-in functions and code generation." msgstr "Stöd inbyggda AMX-COMPLEX-funktioner och -kodgenerering." #: config/i386/i386.opt:1303 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVXVNNIINT8 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVXVNNIINT16 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVXVNNIINT8-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVXVNNIINT16-funktioner och -kodgenerering." #: config/i386/i386.opt:1308 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM3 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och FMA-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och SM3-funktioner och -kodgenerering." #: config/i386/i386.opt:1313 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SHA512 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och AVX2-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och SHA512-funktioner och -kodgenerering." #: config/i386/i386.opt:1318 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM4 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och FMA-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX- och SM4-funktioner och -kodgenerering." #: config/i386/i386.opt:1323 -#, fuzzy, no-c-format -#| msgid "Enable vectorization on trees." +#, no-c-format msgid "Enable vectorization for gather instruction." -msgstr "Aktivera vektorisering av träd." +msgstr "Aktivera vektorisering för samlingsinstruktion." #: config/i386/i386.opt:1327 -#, fuzzy, no-c-format -#| msgid "Enable vectorization on trees." +#, no-c-format msgid "Enable vectorization for scatter instruction." -msgstr "Aktivera vektorisering av träd." +msgstr "Aktivera vektorisering för spridningsinstruktion." #: config/i386/i386.opt:1331 #, no-c-format @@ -8087,28 +8051,24 @@ msgid "Enable GPR32 in inline asm when APX_F enabled." msgstr "Aktivera GPR32 i inline:ad asm när APX_F är aktiverat." #: config/i386/i386.opt:1364 -#, fuzzy, no-c-format -#| msgid "Support BMI2 built-in functions and code generation." +#, no-c-format msgid "Support 512 bit vector built-in functions and code generation." -msgstr "Stöd inbyggda BMI2-funktioner och -kodgenerering." +msgstr "Stöd inbyggda 512bitsvektorfunktioner och -kodgenerering." #: config/i386/i386.opt:1368 -#, fuzzy, no-c-format -#| msgid "Support AES built-in functions and code generation." +#, no-c-format msgid "Support USER_MSR built-in functions and code generation." -msgstr "Stöd inbyggda AES-funktioner och -kodgenerering." +msgstr "Stöd inbyggda USER_MSR-funktioner och -kodgenerering." #: config/i386/i386.opt:1372 config/i386/i386.opt:1382 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX10.1-funktioner och -kodgenerering." #: config/i386/i386.opt:1377 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1-512 built-in functions and code generation." -msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX512F-funktioner och -kodgenerering." +msgstr "Stöd inbyggda MMX-, SSE-, SSE2-, SSE3-, SSSE3-, SSE4.1-, SSE4.2-, AVX-, AVX2- och AVX10.1-512-funktioner och -kodgenerering." #: config/pa/pa64-hpux.opt:23 #, no-c-format @@ -10210,16 +10170,14 @@ msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bi msgstr "Tillåt flyttalsinstruktioner i hårdvara att omfatta både 32-bitars och 64-bitars operationer." #: config/loongarch/loongarch.opt:81 -#, fuzzy, no-c-format -#| msgid "FPU types of LoongArch:" +#, no-c-format msgid "SIMD extension levels of LoongArch:" -msgstr "FPU-typer hos LoongArch:" +msgstr "SIMD-utvidgningsnivåer för LoongArch:" #: config/loongarch/loongarch.opt:94 -#, fuzzy, no-c-format -#| msgid "-march=ISA\tGenerate code for the given ISA." +#, no-c-format msgid "-msimd=SIMD\tGenerate code for the given SIMD extension." -msgstr "-march=ISA\tGenerera kod för den angivna ISA:n." +msgstr "-march=SIMD\tGenerera kod för den angivna SIMD-utvidgningen." #: config/loongarch/loongarch.opt:98 #, no-c-format @@ -10287,10 +10245,9 @@ msgid "-mmax-inline-memcpy-size=SIZE\tSet the max size of memcpy to inline, defa msgstr "-mmax-inline-memcpy-size=STORLEK\tAnge den maximala storleken att inline:a memcpy, standard är 1024." #: config/loongarch/loongarch.opt:189 config/mips/mips.opt:150 -#, fuzzy, no-c-format -#| msgid "The code model option names for -mcmodel:" +#, no-c-format msgid "The code model option names for -mexplicit-relocs:" -msgstr "Namnen för flaggan för kodmodell för -mcmodel:" +msgstr "Namnen för flaggan för kodmodell för -mexplicit-relocs:" #: config/loongarch/loongarch.opt:202 config/mips/mips.opt:163 #, no-c-format @@ -10298,16 +10255,14 @@ msgid "Use %reloc() assembly operators." msgstr "Använd assembleroperatorer %reloc()." #: config/loongarch/loongarch.opt:206 config/mips/mips.opt:167 -#, fuzzy, no-c-format -#| msgid "Use %reloc() assembly operators." +#, no-c-format msgid "Use %reloc() assembly operators (for backward compatibility)." -msgstr "Använd assembleroperatorer %reloc()." +msgstr "Använd assembleroperatorer %reloc() (för bakåtkompatibilitet)." #: config/loongarch/loongarch.opt:210 -#, fuzzy, no-c-format -#| msgid "Generate software reciprocal divide and square root for better throughput." +#, no-c-format msgid "Generate approximate reciprocal divide and square root for better throughput." -msgstr "Generera inversdivision och kvadratrot i programvara för bättre genomströmning." +msgstr "Generera approximativ inversdivision och kvadratrot i programvara för bättre genomströmning." #: config/loongarch/loongarch.opt:245 #, no-c-format @@ -10315,22 +10270,19 @@ msgid "Avoid using the GOT to access external symbols." msgstr "Undvika att använda GOT för att komma åt externa symboler." #: config/loongarch/loongarch.opt:254 -#, fuzzy, no-c-format -#| msgid "Enable relaxing in the assembler." +#, no-c-format msgid "Pass -mrelax or -mno-relax option to the assembler." -msgstr "Aktivera lättnad i assemblern." +msgstr "Skicka flaggan -mrelax eller -mno-relax till assemblern." #: config/loongarch/loongarch.opt:258 -#, fuzzy, no-c-format -#| msgid "Used to limit unroll factor which indicates how much the autovectorizer may unroll a loop. The default value is 4." +#, no-c-format msgid "Used to limit unroll factor which indicates how much the autovectorizer may unroll a loop. The default value is 6." -msgstr "Används för att begränsa utrullningsfaktorn som indikerar hur mycket autovektoriseraren får rulla ut en slinga. Standardvärdet är 4." +msgstr "Används för att begränsa utrullningsfaktorn som indikerar hur mycket autovektoriseraren får rulla ut en slinga. Standardvärdet är 6." #: config/loongarch/loongarch.opt:276 -#, fuzzy, no-c-format -#| msgid "Support flag-preserving add-carry instructions." +#, no-c-format msgid "Support frecipe.{s/d} and frsqrte.{s/d} instructions." -msgstr "Stöd flaggbevarande add-carry-instruktioner." +msgstr "Stöd instruktionerna frecipe.{s/d} och frsqrte.{s/d}." #: config/loongarch/loongarch.opt:280 #, no-c-format @@ -10338,16 +10290,14 @@ msgid "Support div.w[u] and mod.w[u] instructions with inputs not sign-extended. msgstr "Stöd instruktionerna div.w[u] och mod.w[u] med indata som inte är teckenutvidgat." #: config/loongarch/loongarch.opt:284 -#, fuzzy, no-c-format -#| msgid "Support XSAVEC instructions." +#, no-c-format msgid "Support am{swap/add}[_db].{b/h} instructions." -msgstr "Stöd instruktionerna XSAVEC." +msgstr "Stöd instruktionerna am{swap/add}[_db].{b/h}." #: config/loongarch/loongarch.opt:288 -#, fuzzy, no-c-format -#| msgid "Support XSAVEC instructions." +#, no-c-format msgid "Support amcas[_db].{b/h/w/d} instructions." -msgstr "Stöd instruktionerna XSAVEC." +msgstr "Stöd instruktionerna amcas[_db].{b/h/w/d}." #: config/loongarch/loongarch.opt:292 #, no-c-format @@ -12530,16 +12480,14 @@ msgid "Warn about invalid OpenACC dimensions." msgstr "Varna för en felaktiga OpenACC-dimensioner." #: config/gcn/gcn.opt:92 -#, fuzzy, no-c-format -#| msgid "SRAM-ECC modes:" +#, no-c-format msgid "SRAM-ECC and XNACK modes:" -msgstr "SRAM-ECC-lägen:" +msgstr "SRAM-ECC- och XNACK-lägen:" #: config/gcn/gcn.opt:108 -#, fuzzy, no-c-format -#| msgid "Compile for devices requiring XNACK enabled. Default off." +#, no-c-format msgid "Compile for devices requiring XNACK enabled. Default \"any\" if USM is supported." -msgstr "Kompilera för enheter som kräver att XNACK är aktiverat. Standard är av." +msgstr "Kompilera för enheter som kräver att XNACK är aktiverat. Standard är ”any” om USM stödjs." #: config/gcn/gcn.opt:112 #, no-c-format @@ -12592,34 +12540,29 @@ msgid "Enable 32-bit jump instructions." msgstr "Använd 32-bitars hoppinstruktioner." #: config/bpf/bpf.opt:64 -#, fuzzy, no-c-format -#| msgid "Enable asan store operations protection." +#, no-c-format msgid "Enable general atomic operations introduced in v3 ISA." -msgstr "Aktivera asan-skydd av lagringsoperationer." +msgstr "Använd generella atomära operationer introducerade i v3 ISA." #: config/bpf/bpf.opt:68 -#, fuzzy, no-c-format -#| msgid "Enable 32-bit jump instructions." +#, no-c-format msgid "Enable byte swap instructions." -msgstr "Använd 32-bitars hoppinstruktioner." +msgstr "Använd byte-växlings-instruktioner." #: config/bpf/bpf.opt:72 -#, fuzzy, no-c-format -#| msgid "Enable divide and modulus instructions." +#, no-c-format msgid "Enable signed division and modulus instructions." -msgstr "Använd divisions- och modulusinstruktioner." +msgstr "Använd divisions- och modulusinstruktioner med tecken." #: config/bpf/bpf.opt:76 -#, fuzzy, no-c-format -#| msgid "Enable divide and modulus instructions." +#, no-c-format msgid "Enable signed move and memory load instructions." -msgstr "Använd divisions- och modulusinstruktioner." +msgstr "Använd flyttnings- och minnesladdningsinstruktioner med tecken." #: config/bpf/bpf.opt:102 -#, fuzzy, no-c-format -#| msgid "Known assembler dialects (for use with the -masm= option):" +#, no-c-format msgid "Known assembler dialects (for use with the -masm= option)" -msgstr "Kända assemblerdialekter (att användas med flaggan -masm=):" +msgstr "Kända assemblerdialekter (att användas med flaggan -masm=)" #: config/mips/mips.opt:32 #, no-c-format @@ -12702,10 +12645,9 @@ msgid "Use Enhanced Virtual Addressing instructions." msgstr "Använd instruktioner för förbättrad virtuell adressering." #: config/mips/mips.opt:171 -#, fuzzy, no-c-format -#| msgid "Does nothing. Preserved for backward compatibility." +#, no-c-format msgid "Don't use %reloc() assembly operators (for backward compatibility)." -msgstr "Gör ingenting. Bevarad för bakåtkompatibilitet." +msgstr "Använd inte assembleroperatorer %reloc() (för bakåtkompatibilitet)." #: config/mips/mips.opt:175 #, no-c-format @@ -12968,10 +12910,9 @@ msgid "Optimize lui/addiu address loads." msgstr "Optimera adressladdning lui/addiu." #: config/mips/mips.opt:406 -#, fuzzy, no-c-format -#| msgid "Enable MUL instructions." +#, no-c-format msgid "Enable the MIPS16e V2 instructions." -msgstr "Använd MUL-instruktioner." +msgstr "Använd instruktionerna MIPS16e V2." #: config/mips/mips.opt:410 #, no-c-format @@ -13849,10 +13790,9 @@ msgid "Warn about functions which might be candidates for __attribute__((malloc) msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((malloc))." #: common.opt:790 -#, fuzzy, no-c-format -#| msgid "Warn about functions which might be candidates for __attribute__((noreturn))." +#, no-c-format msgid "Warn about functions which might be candidates for __attribute__((returns_nonnull))." -msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((noreturn))." +msgstr "Varna för funktioner som är möjliga kandidater för __attribute__((returns_nonnull))." #: common.opt:794 #, no-c-format @@ -14305,10 +14245,9 @@ msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics." msgstr "-fdiagnostics-color=[never|always|auto]\tFärglägg felmeddelanden." #: common.opt:1394 -#, fuzzy, no-c-format -#| msgid "Enable verbose output." +#, no-c-format msgid "Enable formatting of JSON output." -msgstr "Aktivera utförlig utskrift." +msgstr "Aktivera formatering av JSON-utdata." #: common.opt:1398 #, no-c-format @@ -14661,16 +14600,14 @@ msgid "Harden conditional branches by checking reversed conditions." msgstr "Härda villkorsgrenar genom att kontrollera omvända villkor." #: common.opt:1846 -#, fuzzy, no-c-format -#| msgid "Harden conditionals not used in branches, checking reversed conditions." +#, no-c-format msgid "Harden control flow by recording and checking execution paths." -msgstr "Härda villkor som inte används i grenar, kontrollera omvända villkor." +msgstr "Härda styrflödet genom att spela in och kontroller körvägar." #: common.opt:1850 -#, fuzzy, no-c-format -#| msgid "disable pass %s for function %s" +#, no-c-format msgid "Disable CFR in leaf functions." -msgstr "avaktivera pass %s för funktionen %s" +msgstr "Avaktivera CFR i lövfunktioner." #: common.opt:1854 #, no-c-format @@ -15003,10 +14940,9 @@ msgid "-fmessage-length=<number>\tLimit diagnostics to <number> characters per l msgstr "-fmessage-length=<antal>\tBegränsa felmeddelandens längd till <antal> tecken per rad. 0 stänger av radbrytning." #: common.opt:2279 -#, fuzzy, no-c-format -#| msgid "Align the start of functions." +#, no-c-format msgid "Align the start of every function." -msgstr "Justera starten av funktioner." +msgstr "Justera starten av varje funktion." #: common.opt:2283 #, no-c-format @@ -15654,10 +15590,9 @@ msgid "Restore default strub mode: as per attributes, with relaxed checking." msgstr "Återställ strub-läget: enligt attribut, med lättare kontroller." #: common.opt:2948 -#, fuzzy, no-c-format -#| msgid "Enable hwasan instrumentation of builtin functions." +#, no-c-format msgid "Enable stack scrubbing for all viable functions." -msgstr "Aktivera hwasan-instrumentering av inbyggda funktioner." +msgstr "Aktivera stackskrubbning för alla möjliga funktioner." #: common.opt:2952 #, no-c-format @@ -15665,10 +15600,9 @@ msgid "Enable at-calls stack scrubbing for all viable functions." msgstr "Aktivera stackskrubbning vid anrop för alla möjliga funktioner." #: common.opt:2956 -#, fuzzy, no-c-format -#| msgid "Enable interrupt stack instructions." +#, no-c-format msgid "Enable internal stack scrubbing for all viable functions." -msgstr "Använd avbrottsstackinstruktioner." +msgstr "Aktivera intern stackskrubbning av alla möjliga funktioner." #: common.opt:2960 #, no-c-format @@ -16126,10 +16060,9 @@ msgid "Assume assembler support for view in (DWARF2+) .loc directives." msgstr "Anta att assemblern stödjer vyer i .loc-direktiv (DWARF2+)." #: common.opt:3483 -#, fuzzy, no-c-format -#| msgid "Generate debug information in VMS format." +#, no-c-format msgid "Generate debug information in CodeView format." -msgstr "Generera felsökningsinformation i VMS-format." +msgstr "Generera felsökningsinformation i CodeView-format." #: common.opt:3503 #, no-c-format @@ -17581,13 +17514,12 @@ msgstr "Det maximala antalet nästade anrop att söka i efter styrberoenden unde #: params.opt:1126 #, no-c-format msgid "Maximum number of predicates anded for each predicate ored in the normalized predicate chain." -msgstr "Maximalt antal predikat med \"and\" för varje predikat med \"or\" i den normaliserade predikatkedjan." +msgstr "Maximalt antal predikat med ”and” för varje predikat med ”or” i den normaliserade predikatkedjan." #: params.opt:1131 -#, fuzzy, no-c-format -#| msgid "Maximum number of bases stored in each modref tree." +#, no-c-format msgid "Maximum number of predicates ored in the normalized predicate chain." -msgstr "Maximalt antal baser som lagras i varje modref-träd." +msgstr "Maximalt antal predikat med ”or” i den normaliserade predikatkedjan." #: params.opt:1135 #, no-c-format @@ -17675,22 +17607,19 @@ msgid "Enable loop vectorization of floating point inductions." msgstr "Aktivera slingvektorisering av flyttalsinduktioner." #: params.opt:1203 -#, fuzzy, no-c-format -#| msgid "Maximum number of basic blocks before EVRP uses a sparse cache." +#, no-c-format msgid "Maximum number of basic blocks before VRP uses a sparse bitmap cache." -msgstr "Maximalt antal grundblock innan EVRP använder en gles cache." +msgstr "Maximalt antal grundblock innan VRP använder en gles bitkartecache." #: params.opt:1207 -#, fuzzy, no-c-format -#| msgid "Maximum number of outgoing edges in a switch before EVRP will not process it." +#, no-c-format msgid "Maximum number of outgoing edges in a switch before VRP will not process it." -msgstr "Maximalt antal utgående bågar i en switch före EVRP inte kommer bearbeta den." +msgstr "Maximalt antal utgående bågar i en switch innan VRP inte kommer bearbeta den." #: params.opt:1211 -#, fuzzy, no-c-format -#| msgid "Maximum number of basic blocks before EVRP uses a sparse cache." +#, no-c-format msgid "Maximum number of basic blocks for VRP to use a basic cache vector." -msgstr "Maximalt antal grundblock innan EVRP använder en gles cache." +msgstr "Maximalt antal grundblock till VRP att använda en grundläggande cachevektor." #: cfgrtl.cc:2822 msgid "flow control insn inside a basic block" @@ -18513,10 +18442,9 @@ msgstr "" "Fel på översättningen rapporteras till <tp-sv@listor.tp-sv.se>\n" #: gcov-tool.cc:595 -#, fuzzy, c-format -#| msgid "Copyright %s 2023 Free Software Foundation, Inc.\n" +#, c-format msgid "Copyright %s 2024 Free Software Foundation, Inc.\n" -msgstr "Copyright %s 2023 Free Software Foundation, Inc.\n" +msgstr "Copyright %s 2024 Free Software Foundation, Inc.\n" #: gcov.cc:927 #, c-format @@ -18690,10 +18618,9 @@ msgid "gcov %s%s\n" msgstr "gcov %s%s\n" #: gcov.cc:969 -#, fuzzy, c-format -#| msgid "collect2 version %s\n" +#, c-format msgid "JSON format version: %s\n" -msgstr "collect2 version %s\n" +msgstr "JSON-formatversion: %s\n" #: gcov.cc:1367 #, c-format @@ -19526,10 +19453,9 @@ msgid "incompatible floating point / vector register operand for '%%%c'" msgstr "inkompatibla flyttals-/vektorregisteroperander för ”%%%c”" #: config/aarch64/aarch64.cc:12061 -#, fuzzy, c-format -#| msgid "incompatible register operand for '%%%c'" +#, c-format msgid "incompatible operand for '%%%c'" -msgstr "inkompatibla registeroperander för ”%%%c”" +msgstr "inkompatibel operand för ”%%%c”" #: config/aarch64/aarch64.cc:12081 #, c-format @@ -19682,22 +19608,19 @@ msgid "invalid operand to %%p code" msgstr "ogiltig operand till %%p-kod" #: config/arc/arc.cc:4940 -#, fuzzy, c-format -#| msgid "invalid operand to %%s code" +#, c-format msgid "invalid operand for %%s code" msgstr "ogiltig operand till %%s-kod" #: config/arc/arc.cc:4958 -#, fuzzy, c-format -#| msgid "invalid operand to %%N code" +#, c-format msgid "invalid operand for %%N code" msgstr "ogiltig operand till %%N-kod" #: config/arc/arc.cc:4971 -#, fuzzy, c-format -#| msgid "invalid operand to %%N code" +#, c-format msgid "invalid operand for %%N or %%S code" -msgstr "ogiltig operand till %%N-kod" +msgstr "ogiltig operand till %%N- eller %%S-kod" #: config/arc/arc.cc:4993 config/m32r/m32r.cc:2080 #, c-format @@ -20264,22 +20187,16 @@ msgid "unknown insn mode" msgstr "okänt instruktionsläge" #: config/i386/i386.cc:23578 -#, fuzzy -#| msgid "invalid conversion from type %<bfloat16_t%>" msgid "invalid conversion from type %<__bf16%> without option %<-msse2%>" -msgstr "ogiltig konvertering från typen %<bfloat16_t%>" +msgstr "ogiltig konvertering från typen %<__bf16%> utan flaggan %<-msse2%>" #: config/i386/i386.cc:23581 -#, fuzzy -#| msgid "invalid conversion from type %<bfloat16_t%>" msgid "invalid conversion from type %<_Float16%> without option %<-msse2%>" -msgstr "ogiltig konvertering från typen %<bfloat16_t%>" +msgstr "ogiltig konvertering från typen %<_Float16%> utan flaggan %<-msse2%>" #: config/i386/i386.cc:23584 -#, fuzzy -#| msgid "invalid conversion to type %<bfloat16_t%>" msgid "invalid conversion to type %<__bf16%> without option %<-msse2%>" -msgstr "ogiltig konvertering till typen %<bfloat16_t%>" +msgstr "ogiltig konvertering till typen %<__bf16%> utan flaggan %<-msse2%>" #: config/i386/i386.cc:23587 #, fuzzy @@ -76400,12 +76317,12 @@ msgstr "%s kan inte innehålla en slinga i mellanliggande kod vid %L" #: fortran/openmp.cc:10256 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP directive in intervening code at %L" -msgstr "" +msgstr "%s kan inte innehålla OpenMP-direktiv i mellanliggande kod vid %L" #: fortran/openmp.cc:10268 fortran/openmp.cc:10294 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP API call in intervening code at %L" -msgstr "" +msgstr "%s kan inte innehålla OpenMP-API-anrop i mellanliggande kod vid %L" #: fortran/openmp.cc:10822 #, gcc-internal-format, gfc-internal-format @@ -76467,7 +76384,7 @@ msgstr "%s-slingans slututtryck är inte i kanonisk form vid %L" #: fortran/openmp.cc:10906 #, gcc-internal-format, gfc-internal-format msgid "%s loop end expression at %L uses variable bound in intervening code" -msgstr "" +msgstr "%s-slingans slututtryck vid %L använder variabel begränsning i mellanliggande kod" #: fortran/openmp.cc:10913 #, gcc-internal-format, gfc-internal-format @@ -76482,7 +76399,7 @@ msgstr "%s-slingeinkrementet är inte i kanonisk form vid %L" #: fortran/openmp.cc:10926 #, gcc-internal-format, gfc-internal-format msgid "%s loop increment expression at %L uses variable bound in intervening code" -msgstr "" +msgstr "%s-slingans ökningsuttryck vid %L använder variabel begränsning i mellanliggande kod" #. Parse error, can't recover from this. #: fortran/openmp.cc:10944 @@ -76500,7 +76417,7 @@ msgstr "%s !$ACC LOOP-slingor är inte perfekt nästade vid %L" #: fortran/openmp.cc:10963 #, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested with REDUCTION INSCAN clause at %L" -msgstr "" +msgstr "%s intre slingor måste vara perfekt nästade med en REDUCTION INSCAN-klausul vid %L" #: fortran/openmp.cc:11190 fortran/openmp.cc:11203 #, gcc-internal-format, gfc-internal-format @@ -76565,12 +76482,12 @@ msgstr "NAME %qs är felaktigt i !ACC$ ROUTINE ( NAME ) vid %L" #: fortran/openmp.cc:11539 #, gcc-internal-format, gfc-internal-format msgid "!$OMP TARGET region at %L with a nested TEAMS at %L may not contain any other statement, declaration or directive outside of the single TEAMS construct" -msgstr "" +msgstr "!$OMP TARGET-regionen vid %L med en nästad TEAMS vid %L får inte innehålla någon annan sats, deklaration eller direktiv utanför den ensamma TEAMS-konstruktionen" #: fortran/openmp.cc:11543 #, gcc-internal-format, gfc-internal-format msgid "!$OMP TARGET region at %L with a nested TEAMS may not contain any other statement, declaration or directive outside of the single TEAMS construct" -msgstr "" +msgstr "!$OMP TARGET-regionen vid %L med en nästad TEAMS får inte innehålla någon annan sats, deklaration eller direktiv utanför den ensamma TEAMS-konstruktionen" #: fortran/openmp.cc:11637 #, gcc-internal-format, gfc-internal-format @@ -76750,17 +76667,17 @@ msgstr "Oklassificerbart OpenACC-direktiv vid %C" #: fortran/parse.cc:817 #, gcc-internal-format msgid "%qs directive at %L must either have a variable argument or, if associated with an ALLOCATE stmt, must be preceded by an executable statement or OpenMP construct" -msgstr "" +msgstr "direktivet %qs vid %L måste antingen ha ett variabelt argument eller, om det är associerat med en ALLOCATE-sats, måste föregås av en körbar sats eller OpenMP-konstruktion" #: fortran/parse.cc:829 #, gcc-internal-format msgid "Structure-component expression at %L in %qs directive not permitted in declarative directive; as directive associated with an ALLOCATE stmt it must be preceded by an executable statement or OpenMP construct" -msgstr "" +msgstr "Strukturkomponentuttrycket vid %L i %qs-direktivet är inte tillåtet i ett deklarativt direktiv; som ett diretiv associerat med en ALLOCATE-sats måste det föregås av en körbar sats eller OpenMP-konstruktion" #: fortran/parse.cc:855 #, gcc-internal-format msgid "%qs directive at %L associated with an ALLOCATE stmt must be preceded by an executable statement or OpenMP construct; note the variables in the list all have the allocatable or pointer attribute" -msgstr "" +msgstr "direktivet %qs vid %L associerat med en ALLOCATE-sats måste föregås av en körbar sats eller OpenMP-konstruktion; observera att variablerna i listan har alla attributet allokerbar eller pekare" #: fortran/parse.cc:1023 fortran/parse.cc:1325 #, fuzzy, gcc-internal-format, gfc-internal-format @@ -76776,7 +76693,7 @@ msgstr "Oklassificerbart OpenMP-direktiv vid %C" #: fortran/parse.cc:1312 #, gcc-internal-format msgid "OpenMP ERROR directive at %L with %<at(execution)%> clause in a PURE procedure" -msgstr "" +msgstr "Ett direktiv OpenMP ERROR vid %L med klausulen %<at(execution)%> i en PURE-procedur" #: fortran/parse.cc:1440 #, gcc-internal-format, gfc-internal-format @@ -77186,7 +77103,7 @@ msgstr "Överflödig !$ACC END LOOP vid %C" #: fortran/parse.cc:5809 #, gcc-internal-format, gfc-internal-format msgid "%s statements at %L and %L have both no list item but only one may" -msgstr "" +msgstr "%s-satserna vid %L och %L har saknar båda listelement men bara en får det" #: fortran/parse.cc:5829 #, fuzzy, gcc-internal-format, gfc-internal-format @@ -81450,7 +81367,7 @@ msgstr "Fördröjd typparameter stödjs inte ännu" #: fortran/trans-decl.cc:5224 #, gcc-internal-format msgid "Sorry, !$OMP allocate for COMMON block variable %qs at %L not supported" -msgstr "" +msgstr "Ledsen, !$OMP allocate för COMMON-blocksvariabeln %qs vid %L stödjs inte" #: fortran/trans-decl.cc:5231 #, fuzzy, gcc-internal-format @@ -81617,22 +81534,22 @@ msgstr "ohanterat uttryck" #: fortran/trans-openmp.cc:4100 #, gcc-internal-format msgid "%<uses_allocators%> clause with traits and memory spaces" -msgstr "" +msgstr "klausulen %<uses_allocators%> med egenskaper och minnesutrymmen" #: fortran/trans-openmp.cc:5024 #, gcc-internal-format msgid "%<!$OMP %s%> at %L requires %<-fopenmp-allocators%>" -msgstr "" +msgstr "%<!$OMP %s%> vid %L kräver %<-fopenmp-allocators%>" #: fortran/trans-openmp.cc:5027 #, gcc-internal-format msgid "All files that might deallocate such a variable must be compiled with %<-fopenmp-allocators%>" -msgstr "" +msgstr "Alla filer som kan avallokera en sådan variabel måste kompileras med %<-fopenmp-allocators%>" #: fortran/trans-openmp.cc:5030 #, gcc-internal-format msgid "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, INTENT(OUT) for allocatable dummy arguments, and reallocation of allocatable components allocated with an OpenMP allocator" -msgstr "" +msgstr "Detta inkluderar explicit DEALLOCATE, omallokering eller inbyggd tilldelning, INTENT(OUT) för allokerbara attrappargument och omallokering av allokerbara komponenter allokerade med en OpenMP-allokerare" #: fortran/trans-openmp.cc:5607 fortran/trans-openmp.cc:5627 #, fuzzy, gcc-internal-format @@ -82217,12 +82134,12 @@ msgstr "argumentet till CAP är inte en konstant eller variabel av typen CHAR" #: m2/gm2-gcc/m2expr.cc:4029 #, gcc-internal-format msgid "constant literal %qs exceeds internal ZTYPE range" -msgstr "" +msgstr "den konstanta literalen %qs överskrider det interna intervallet för ZTYPE" #: m2/gm2-gcc/m2expr.cc:3949 #, gcc-internal-format msgid "constant literal %qs contains %qc, expected 0 or 1" -msgstr "" +msgstr "den konstanta literalen %qs innehåller %qc, 0 eller 1 förväntades" #: m2/gm2-gcc/m2expr.cc:3964 m2/gm2-gcc/m2expr.cc:3976 #, fuzzy, gcc-internal-format @@ -83398,7 +83315,7 @@ msgstr "oanvänt namn %qE" #: rust/resolve/rust-ast-resolve-expr.cc:167 #, gcc-internal-format, gfc-internal-format msgid "are you trying to break %s? how dare you?" -msgstr "" +msgstr "försöker du göra sönder %s? hur vågar du?" #~ msgid "to generate dependencies you must specify '-fcpp' " #~ msgstr "för att generera beroenden måste man ange ”-fcpp” " From 0c179654c3170749f3fb3232f2442fcbc99bffbb Mon Sep 17 00:00:00 2001 From: Jerry DeLisle <jvdelisle@gcc.gnu.org> Date: Mon, 11 Mar 2024 15:15:34 -0700 Subject: [PATCH 019/551] libgfortran: [PR114304] Revert portion of PR105347 change. PR libfortran/105437 PR libfortran/114304 libgfortran/ChangeLog: * io/list_read.c (eat_separator): Remove check for decimal point mode and semicolon used as a seprator. Removes the regression. gcc/testsuite/ChangeLog: * gfortran.dg/pr105473.f90: Add additional checks to address the case of semicolon at the end of a line. --- gcc/testsuite/gfortran.dg/pr105473.f90 | 21 ++++++++++++++------- libgfortran/io/list_read.c | 12 +----------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/gcc/testsuite/gfortran.dg/pr105473.f90 b/gcc/testsuite/gfortran.dg/pr105473.f90 index b309217540d0..2679f6bb4475 100644 --- a/gcc/testsuite/gfortran.dg/pr105473.f90 +++ b/gcc/testsuite/gfortran.dg/pr105473.f90 @@ -3,44 +3,51 @@ implicit none integer n,m,ios real r + real :: x(3) complex z character(40):: testinput n = 999; m = 777; r=1.2345 z = cmplx(0.0,0.0) -! Check that semi-colon is not allowed as separator with decimal=point. +! Check that semi-colon is allowed as separator with decimal=point. ios=0 testinput = '1;17;3.14159' read(testinput,*,decimal='point',iostat=ios) n, m, r - if (ios /= 5010) print *, "stop 1" + if (ios /= 0) stop 1 +! Check that semi-colon allowed as a separator with decimal=point. + ios=0 + testinput = '1.23435 1243.24 13.24 ;' + read(testinput, *, iostat=ios) x + if (ios /= 0) stop 2 + ! Check that comma is not allowed as a separator with decimal=comma. ios=0 testinput = '1,17,3,14159' read(testinput,*,decimal='comma',iostat=ios) n, m, r - if (ios /= 5010) print *, "stop 2" + if (ios /= 5010) stop 3 ! Check a good read. ios=99 testinput = '1;17;3,14159' read(testinput,*,decimal='comma',iostat=ios) n, m, r - if (ios /= 0) print *, "stop 3" + if (ios /= 0) stop 4 ! Check that comma is not allowed as a separator with decimal=comma. ios=99; z = cmplx(0.0,0.0) testinput = '1,17, (3,14159, 1,7182)' read(testinput,*,decimal='comma', iostat=ios) n, m, z - if (ios /= 5010) stop 4 + if (ios /= 5010) stop 5 ! Check that semi-colon is not allowed as separator with decimal=point. ios=99; z = cmplx(0.0,0.0) testinput = '1,17; (3.14159; 1.7182)' read(testinput,*,decimal='point', iostat=ios) n, m, z - if (ios /= 5010) stop 5 + if (ios /= 5010) stop 6 ! Check a good read. ios=99;z = cmplx(0.0,0.0) testinput = '1;17; (3,14159; 1,7182)' read(testinput,*,decimal='comma', iostat=ios) n, m, z - if (ios /= 0) stop 6 + if (ios /= 0) stop 7 end program diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index e38e9a849765..fb3f7dbc34d8 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -476,18 +476,8 @@ eat_separator (st_parameter_dt *dtp) unget_char (dtp, c); break; } - dtp->u.p.comma_flag = 1; - eat_spaces (dtp); - break; - + /* Fall through. */ case ';': - if (dtp->u.p.current_unit->decimal_status == DECIMAL_POINT) - { - generate_error (&dtp->common, LIBERROR_READ_VALUE, - "Semicolon not allowed as separator with DECIMAL='point'"); - unget_char (dtp, c); - break; - } dtp->u.p.comma_flag = 1; eat_spaces (dtp); break; From 06289168022f7c8dba00058c92cdf3fbd64919da Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Tue, 12 Mar 2024 00:17:48 +0000 Subject: [PATCH 020/551] Daily bump. --- gcc/ChangeLog | 65 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/m2/ChangeLog | 46 +++++++++++++++++++++++++++++ gcc/po/ChangeLog | 4 +++ gcc/testsuite/ChangeLog | 57 ++++++++++++++++++++++++++++++++++++ libgfortran/ChangeLog | 8 +++++ 6 files changed, 181 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33b52868564b..505e1da16189 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,68 @@ +2024-03-11 Szabolcs Nagy <szabolcs.nagy@arm.com> + + * config/aarch64/aarch64.md: Rename aarch_ to aarch64_. + * config/aarch64/aarch64.opt: Likewise. + * config/aarch64/aarch64-c.cc (aarch64_update_cpp_builtins): Likewise. + * config/aarch64/aarch64.cc (aarch64_expand_prologue): Likewise. + (aarch64_expand_epilogue): Likewise. + (aarch64_post_cfi_startproc): Likewise. + (aarch64_handle_no_branch_protection): Copy and rename. + (aarch64_handle_standard_branch_protection): Likewise. + (aarch64_handle_pac_ret_protection): Likewise. + (aarch64_handle_pac_ret_leaf): Likewise. + (aarch64_handle_pac_ret_b_key): Likewise. + (aarch64_handle_bti_protection): Likewise. + (aarch64_override_options): Update branch protection validation. + (aarch64_handle_attr_branch_protection): Likewise. + * config/arm/aarch-common-protos.h (aarch_validate_mbranch_protection): + Pass branch protection type description as argument. + (struct aarch_branch_protect_type): Move from aarch-common.h. + * config/arm/aarch-common.cc (aarch_handle_no_branch_protection): + Remove. + (aarch_handle_standard_branch_protection): Remove. + (aarch_handle_pac_ret_protection): Remove. + (aarch_handle_pac_ret_leaf): Remove. + (aarch_handle_pac_ret_b_key): Remove. + (aarch_handle_bti_protection): Remove. + (aarch_validate_mbranch_protection): Pass branch protection type + description as argument. + * config/arm/aarch-common.h (enum aarch_key_type): Remove. + (struct aarch_branch_protect_type): Remove. + * config/arm/arm-c.cc (arm_cpu_builtins): Remove aarch_ra_sign_key. + * config/arm/arm.cc (arm_handle_no_branch_protection): Copy and rename. + (arm_handle_standard_branch_protection): Likewise. + (arm_handle_pac_ret_protection): Likewise. + (arm_handle_pac_ret_leaf): Likewise. + (arm_handle_bti_protection): Likewise. + (arm_configure_build_target): Update branch protection validation. + * config/arm/arm.opt: Remove aarch_ra_sign_key. + +2024-03-11 Richard Biener <rguenther@suse.de> + + PR middle-end/114299 + * gimplify.cc (internal_get_tmp_var): When gimplification + of VAL failed, return a decl. + +2024-03-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114278 + * tree-ssa.cc (maybe_optimize_var): If large/huge _BitInt vars are no + longer addressable, set DECL_NOT_GIMPLE_REG_P on them. + +2024-03-11 Eric Botcazou <ebotcazou@adacore.com> + + PR debug/113519 + PR debug/113777 + * dwarf2out.cc (gen_enumeration_type_die): In the reverse case, + generate the DIE with the same parent as in the regular case. + +2024-03-11 Andrew Pinski <quic_apinski@quicinc.com> + + PR middle-end/95351 + * fold-const.cc (merge_truthop_with_opposite_arm): Use + the type of the operands of the comparison and not the type + of the comparison. + 2024-03-10 jlaw <jeffreyalaw@gmail.com> PR tree-optimization/110199 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 7fe29887d3cc..d87f3cf23bc4 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240311 +20240312 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index ed51728aa31e..d9da0b1be969 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,49 @@ +2024-03-11 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114295 + * gm2-compiler/M2Batch.mod (MakeProgramSource): Call PutDeclared + if the module is known. + (MakeDefinitionSource): Ditto. + (MakeImplementationSource): Ditto. + * gm2-compiler/M2Comp.mod (ExamineHeader): New procedure. + (ExamineCompilationUnit): Rewrite. + (PeepInto): Rewrite. + * gm2-compiler/M2Error.mod (NewError): Remove default call to + GetTokenNo. + * gm2-compiler/M2Quads.mod (callRequestDependant): Push tokno with + Adr. + (BuildStringAdrParam): Ditto. + (doBuildBinaryOp): Push OperatorPos on the bool stack. + (BuildRelOp): Ditto. + * gm2-compiler/P2Build.bnf (SetType): Pass set token pos to + BuildSetType. + (PointerType): Pass pointer token pos to BuildPointerType. + * gm2-compiler/P2SymBuild.def (BuildPointerType): Add parameter + pointerpos. + (BuildSetType): Add parameter setpos. + * gm2-compiler/P2SymBuild.mod (BuildPointerType): Add parameter + pointerpos. Build combined token and use it when creating a + pointer type. + (BuildSetType): Add parameter setpos. Build combined token and + use it when creating a set type. + * gm2-compiler/SymbolTable.mod (DebugUnknownToken): New constant. + (CheckTok): New procedure function. + (MakeProcedure): Call CheckTok. + (MakeRecord): Ditto. + (MakeVarient): Ditto. + (MakeEnumeration): Ditto. + (MakeHiddenType): Ditto. + (MakeConstant): Ditto. + (MakeConstStringCnul): Ditto. + (MakeSubrange): Ditto. + (MakeTemporary): Ditto. + (MakeVariableForParam): Ditto. + (MakeParameterHeapVar): Ditto. + (MakePointer): Ditto. + (MakeSet): Ditto. + (MakeUnbounded): Ditto. + (MakeProcType): Ditto. + 2024-03-08 Gaius Mulley <gaiusmod2@gmail.com> * gm2-compiler/M2Quads.mod (Init): Use InitIndexTuned with diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 4d2e8b9a62b2..0e962c9fdc14 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2024-03-11 Joseph Myers <josmyers@redhat.com> + + * sv.po: Update. + 2024-03-04 Joseph Myers <josmyers@redhat.com> * sv.po: Update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6baee43bc1da..7fd16f212ff2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,60 @@ +2024-03-11 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/105437 + PR libfortran/114304 + * gfortran.dg/pr105473.f90: Add additional checks to address + the case of semicolon at the end of a line. + +2024-03-11 Richard Earnshaw <rearnsha@arm.com> + + PR testsuite/113428 + * gcc.dg/gomp/bad-array-section-c-3.c: Use signed char instead + of int. + +2024-03-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR tree-optimization/98238 + * gcc.dg/vect/vect-cost-model-1.c (scan-tree-dump): Also require + vect_hw_misalign. + * gcc.dg/vect/vect-cost-model-3.c: Likewise. + * gcc.dg/vect/vect-cost-model-5.c: Likewise. + +2024-03-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR tree-optimization/114071 + PR tree-optimization/113557 + PR testsuite/96109 + * gcc.dg/vect/pr37027.c: Require vect_perm. + * gcc.dg/vect/pr67790.c: Likewise. + * gcc.dg/vect/slp-reduc-1.c: Likewise. + * gcc.dg/vect/slp-reduc-2.c: Likewise. + * gcc.dg/vect/slp-reduc-7.c: Likewise. + * gcc.dg/vect/slp-reduc-8.c: Likewise. + * gcc.dg/vect/vect-multi-peel-gaps.c (scan-tree-dump): Also + require vect_perm. + * gcc.dg/vect/slp-47.c: Require vect_perm. + * gcc.dg/vect/slp-48.c: Likewise. + +2024-03-11 Richard Biener <rguenther@suse.de> + + PR middle-end/114299 + * gcc.target/i386/pr114299.c: New testcase. + +2024-03-11 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114278 + * gcc.dg/bitint-99.c: New test. + +2024-03-11 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/sso-20.c: New test. + * gcc.dg/sso-21.c: Likewise. + +2024-03-11 Andrew Pinski <quic_apinski@quicinc.com> + + PR middle-end/95351 + * gcc.dg/float_opposite_arm-1.c: New test. + 2024-03-10 Iain Buclaw <ibuclaw@gdcproject.org> PR d/112285 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 897a43ad5ff1..f32771ee64d8 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2024-03-11 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/105437 + PR libfortran/114304 + * io/list_read.c (eat_separator): Remove check for decimal + point mode and semicolon used as a seprator. Removes + the regression. + 2024-03-07 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/105456 From c4e5789cede6974b6483c0f82069ff80b5a547e4 Mon Sep 17 00:00:00 2001 From: Andrew Pinski <quic_apinski@quicinc.com> Date: Mon, 11 Mar 2024 17:40:08 -0700 Subject: [PATCH 021/551] Reject -fno-multiflags [PR114314] When -fmultiflags option support was added in r13-3693-g6b1a2474f9e422, it accidently allowed -fno-multiflags which then would pass on to cc1. This fixes that oversight. Committed as obvious after bootstrap/test on x86_64-linux-gnu. gcc/ChangeLog: PR driver/114314 * common.opt (fmultiflags): Add RejectNegative. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> --- gcc/common.opt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/common.opt b/gcc/common.opt index 51c4a17da83b..1ad0169bd6f9 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2295,7 +2295,7 @@ Common Var(flag_move_loop_stores) Optimization Move stores out of loops. fmultiflags -Common Driver +Common Driver RejectNegative Building block for specs-based multilib-aware TFLAGS. fdce From c0c57246d5b47459bdb488734bc2c004a92668b5 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Mon, 11 Mar 2024 14:58:57 +0100 Subject: [PATCH 022/551] tree-optimization/114297 - SLP reduction with early break fix The following makes sure to pass in the SLP node for the live stmts we are generating the reduction epilogue for to vect_create_epilog_for_reduction. This follows the previous fix for the non-SLP path. PR tree-optimization/114297 * tree-vect-loop.cc (vectorizable_live_operation): Pass in the live stmts SLP node to vect_create_epilog_for_reduction. * gcc.dg/vect/vect-early-break_123-pr114297.c: New testcase. --- .../vect/vect-early-break_123-pr114297.c | 22 +++++++++++++++++++ gcc/tree-vect-loop.cc | 7 +++--- 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-early-break_123-pr114297.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_123-pr114297.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_123-pr114297.c new file mode 100644 index 000000000000..84487b7903bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_123-pr114297.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-add-options vect_early_break } */ +/* { dg-require-effective-target vect_early_break } */ + +void h() __attribute__((__noreturn__)); +struct Extremes { + int w; + int h; +}; +struct Extremes *array; +int f(int num, int size1) +{ + int sw = 0, sh = 0; + for (int i = 0; i < size1; ++i) + { + if (num - i == 0) + h(); + sw += array[i].w; + sh += array[i].h; + } + return (sw) + (sh); +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 20ee0aad9326..4375ebdcb493 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -10729,17 +10729,18 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, block, but we have to find an alternate exit first. */ if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)) { + slp_tree phis_node = slp_node ? slp_node_instance->reduc_phis : NULL; for (auto exit : get_loop_exit_edges (LOOP_VINFO_LOOP (loop_vinfo))) if (exit != LOOP_VINFO_IV_EXIT (loop_vinfo)) { vect_create_epilog_for_reduction (loop_vinfo, reduc_info, - slp_node, slp_node_instance, + phis_node, slp_node_instance, exit); break; } if (LOOP_VINFO_EARLY_BREAKS_VECT_PEELED (loop_vinfo)) - vect_create_epilog_for_reduction (loop_vinfo, reduc_info, slp_node, - slp_node_instance, + vect_create_epilog_for_reduction (loop_vinfo, reduc_info, + phis_node, slp_node_instance, LOOP_VINFO_IV_EXIT (loop_vinfo)); } From cdf0c6604d03afd7f544dd8bd5d43d9ded059ada Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Tue, 12 Mar 2024 15:01:57 +0800 Subject: [PATCH 023/551] RISC-V: Fix some code style issue(s) in riscv-c.cc [NFC] Notice some code style issue(s) when add __riscv_v_fixed_vlen, includes: * Meanless empty line. * Line greater than 80 chars. * Indent with 3 space(s). * Argument unalignment. gcc/ChangeLog: * config/riscv/riscv-c.cc (riscv_ext_version_value): Fix code style greater than 80 chars. (riscv_cpu_cpp_builtins): Fix useless empty line, indent with 3 space(s) and argument unalignment. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv-c.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc index 3755ec0b8ef3..7029ba881869 100644 --- a/gcc/config/riscv/riscv-c.cc +++ b/gcc/config/riscv/riscv-c.cc @@ -37,7 +37,8 @@ along with GCC; see the file COPYING3. If not see static int riscv_ext_version_value (unsigned major, unsigned minor) { - return (major * RISCV_MAJOR_VERSION_BASE) + (minor * RISCV_MINOR_VERSION_BASE); + return (major * RISCV_MAJOR_VERSION_BASE) + + (minor * RISCV_MINOR_VERSION_BASE); } /* Implement TARGET_CPU_CPP_BUILTINS. */ @@ -110,7 +111,6 @@ riscv_cpu_cpp_builtins (cpp_reader *pfile) case CM_MEDANY: builtin_define ("__riscv_cmodel_medany"); break; - } if (riscv_user_wants_strict_align) @@ -142,9 +142,9 @@ riscv_cpu_cpp_builtins (cpp_reader *pfile) riscv_ext_version_value (0, 12)); } - if (TARGET_XTHEADVECTOR) - builtin_define_with_int_value ("__riscv_th_v_intrinsic", - riscv_ext_version_value (0, 11)); + if (TARGET_XTHEADVECTOR) + builtin_define_with_int_value ("__riscv_th_v_intrinsic", + riscv_ext_version_value (0, 11)); /* Define architecture extension test macros. */ builtin_define_with_int_value ("__riscv_arch_test", 1); From 39737cdf002637c7a652e9c3e36f369cfce581e5 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 12 Mar 2024 10:23:19 +0100 Subject: [PATCH 024/551] strlen: Fix another spot that can create invalid ranges [PR114293] This PR is similar to PR110603 fixed with r14-8487, except in a different spot. From the memset with -1 size of non-zero value we determine minimum of (size_t) -1 and the code uses PTRDIFF_MAX - 2 (not really sure I understand why it is - 2 and not - 1, e.g. heap allocated array with PTRDIFF_MAX char elements which contain '\0' in the last element should be fine, no? One can still represent arr[PTRDIFF_MAX] - arr[0] and arr[0] - arr[PTRDIFF_MAX] in ptrdiff_t and strlen (arr) == PTRDIFF_MAX - 1) as the maximum, so again invalid range. As in the other case, it is just UB that can lead to that, and we have choice to only keep the min and use +inf for max, or only keep max and use 0 for min, or not set the range at all, or use [min, min] or [max, max] etc. The following patch uses [min, +inf]. 2024-03-12 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114293 * tree-ssa-strlen.cc (strlen_pass::handle_builtin_strlen): If max is smaller than min, set max to ~(size_t)0. * gcc.dg/pr114293.c: New test. --- gcc/testsuite/gcc.dg/pr114293.c | 10 ++++++++++ gcc/tree-ssa-strlen.cc | 2 ++ 2 files changed, 12 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr114293.c diff --git a/gcc/testsuite/gcc.dg/pr114293.c b/gcc/testsuite/gcc.dg/pr114293.c new file mode 100644 index 000000000000..eb49ede0657d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr114293.c @@ -0,0 +1,10 @@ +/* PR tree-optimization/114293 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -w" } */ + +int +foo (int x) +{ + __builtin_memset (&x, 5, -1); + return __builtin_strlen ((char *) &x); +} diff --git a/gcc/tree-ssa-strlen.cc b/gcc/tree-ssa-strlen.cc index 20540c529482..e09c9cc081f5 100644 --- a/gcc/tree-ssa-strlen.cc +++ b/gcc/tree-ssa-strlen.cc @@ -2341,6 +2341,8 @@ strlen_pass::handle_builtin_strlen () wide_int min = wi::to_wide (old); wide_int max = wi::to_wide (TYPE_MAX_VALUE (ptrdiff_type_node)) - 2; + if (wi::gtu_p (min, max)) + max = wi::to_wide (TYPE_MAX_VALUE (TREE_TYPE (lhs))); set_strlen_range (lhs, min, max); } else From ad860cc27b3312f9119c7fecb8638a7c1f6d77c9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 12 Mar 2024 11:34:50 +0100 Subject: [PATCH 025/551] asan: Instrument <retval> stores in callees rather than callers [PR112709] asan currently instruments since PR69276 r6-6758 fix calls which store the return value into memory on the caller side, before the call it verifies the memory is writable. Now PR112709 where we ICE on trying to instrument such calls made me think about whether that is what we want to do. There are 3 different cases. One is when a function returns an aggregate which is passed e.g. in registers, say like struct S { int a[4]; }; returning on x86_64. That would be ideally instrumented in between the actual call and storing of the aggregate into memory, but asan currently mostly works as a GIMPLE pass and arranging for the instrumentation to happen at that spot would be really hard. We could diagnose after the call but generally asan attempts to diagnose stuff before something is overwritten rather than after, or keep the current behavior (that is what this patch does, which has the disadvantage that it can complain about UB even for functions which never return and so never actually store, and doesn't check whether the memory wasn't e.g. poisoned during the call) or could e.g. instrument both before and after the call (that would have the disadvantage the current state has but at least would check post-factum the store again afterwards). Another case is when a function returns an aggregate through a hidden reference, struct T { int a[128]; }; on x86_64 or even the above struct S on ia32 as example. In the actual program such stores happen when storing something to <retval> or its parts in the callee, because <retval> there expands to *hidden_retval. So, IMHO we should instrument those in the callee rather than caller, that is where the writes are and we can do that easily. This is what the patch below does. And the last case is for builtins/internal functions. Usually those don't return aggregates, but in case they'd do and can be expanded inline, it is better to instrument them in the caller (as before) rather than not instrumenting the return stores at all. I had to tweak the expected output on the PR69276 testcase, because with the patch it keeps previous behavior on x86_64 (structure returned in registers, stored in the caller, so reported as UB in A::A()), while on i686 it changed the behavior and is reported as UB in the vnull::operator vec which stores the structure, A::A() is then a frame above it in the backtrace. 2024-03-12 Jakub Jelinek <jakub@redhat.com> PR sanitizer/112709 * asan.cc (has_stmt_been_instrumented_p): Don't instrument call stores on the caller side unless it is a call to a builtin or internal function or function doesn't return by hidden reference. (maybe_instrument_call): Likewise. (instrument_derefs): Instrument stores to RESULT_DECL if returning by hidden reference. * gcc.dg/asan/pr112709-1.c: New test. * g++.dg/asan/pr69276.C: Adjust expected output for some targets. --- gcc/asan.cc | 17 +++++++-- gcc/testsuite/g++.dg/asan/pr69276.C | 3 +- gcc/testsuite/gcc.dg/asan/pr112709-1.c | 52 ++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/asan/pr112709-1.c diff --git a/gcc/asan.cc b/gcc/asan.cc index d621ec9c3232..c533b09b1a12 100644 --- a/gcc/asan.cc +++ b/gcc/asan.cc @@ -1372,7 +1372,12 @@ has_stmt_been_instrumented_p (gimple *stmt) return true; } } - else if (is_gimple_call (stmt) && gimple_store_p (stmt)) + else if (is_gimple_call (stmt) + && gimple_store_p (stmt) + && (gimple_call_builtin_p (stmt) + || gimple_call_internal_p (stmt) + || !aggregate_value_p (TREE_TYPE (gimple_call_lhs (stmt)), + gimple_call_fntype (stmt)))) { asan_mem_ref r; asan_mem_ref_init (&r, NULL, 1); @@ -2751,7 +2756,9 @@ instrument_derefs (gimple_stmt_iterator *iter, tree t, return; poly_int64 decl_size; - if ((VAR_P (inner) || TREE_CODE (inner) == RESULT_DECL) + if ((VAR_P (inner) + || (TREE_CODE (inner) == RESULT_DECL + && !aggregate_value_p (inner, current_function_decl))) && offset == NULL_TREE && DECL_SIZE (inner) && poly_int_tree_p (DECL_SIZE (inner), &decl_size) @@ -3023,7 +3030,11 @@ maybe_instrument_call (gimple_stmt_iterator *iter) } bool instrumented = false; - if (gimple_store_p (stmt)) + if (gimple_store_p (stmt) + && (gimple_call_builtin_p (stmt) + || gimple_call_internal_p (stmt) + || !aggregate_value_p (TREE_TYPE (gimple_call_lhs (stmt)), + gimple_call_fntype (stmt)))) { tree ref_expr = gimple_call_lhs (stmt); instrument_derefs (iter, ref_expr, diff --git a/gcc/testsuite/g++.dg/asan/pr69276.C b/gcc/testsuite/g++.dg/asan/pr69276.C index 1347fae78a68..aea710407e96 100644 --- a/gcc/testsuite/g++.dg/asan/pr69276.C +++ b/gcc/testsuite/g++.dg/asan/pr69276.C @@ -35,4 +35,5 @@ int main() } /* { dg-output "ERROR: AddressSanitizer: heap-buffer-overflow.*(\n|\r\n|\r)" } */ -/* { dg-output " #0 0x\[0-9a-f\]+ +in A::A()" } */ +/* { dg-output " #0 0x\[0-9a-f\]+ +in (A::A\\\(\\\)|vnull::operator vec\\\(\\\).*(\n|\r\n|\r)" } */ +/* { dg-output " #1 0x\[0-9a-f\]+ +in A::A\\\(\\\))" } */ diff --git a/gcc/testsuite/gcc.dg/asan/pr112709-1.c b/gcc/testsuite/gcc.dg/asan/pr112709-1.c new file mode 100644 index 000000000000..970b6c7b6959 --- /dev/null +++ b/gcc/testsuite/gcc.dg/asan/pr112709-1.c @@ -0,0 +1,52 @@ +/* PR sanitizer/112709 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=address -O2" } */ + +struct S { char c[1024]; }; +int foo (int); + +__attribute__((returns_twice, noipa)) struct S +bar (int x) +{ + (void) x; + struct S s = {}; + s.c[42] = 42; + return s; +} + +void +baz (struct S *p) +{ + foo (1); + *p = bar (0); +} + +void +qux (int x, struct S *p) +{ + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + *p = bar (x); +} + +void +corge (int x, struct S *p) +{ + void *q[] = { &&l1, &&l2, &&l3, &&l3 }; + if (x == 25) + { + l1: + x = foo (2); + } + else if (x == 42) + { + l2: + x = foo (foo (3)); + } +l3: + *p = bar (x); + if (x < 4) + goto *q[x & 3]; +} From 4aa87b856067d4911de8fb66b3a27659dc75ca6d Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Sun, 10 Mar 2024 22:06:18 +1100 Subject: [PATCH 026/551] c++: Support target-specific nodes when streaming modules [PR111224] Some targets make use of POLY_INT_CSTs and other custom builtin types, which currently violate some assumptions when streaming. This patch adds support for them, such as types like Aarch64 __fp16, PowerPC __ibm128, and vector types thereof. This patch doesn't provide "full" support of AArch64 SVE, however, since for that we would need to support 'target' nodes (tracked in PR108080). Adding the new builtin types means that on Aarch64 we now have 217 global trees created on initialisation (up from 191), so this patch also slightly bumps the initial size of the fixed_trees allocation to 250. PR c++/98645 PR c++/98688 PR c++/111224 gcc/cp/ChangeLog: * module.cc (enum tree_tag): Add new tag for builtin types. (trees_out::start): POLY_INT_CSTs can be emitted. (trees_in::start): Likewise. (trees_out::core_vals): Stream POLY_INT_CSTs. (trees_in::core_vals): Likewise. (trees_out::type_node): Handle vectors with multiple coeffs. (trees_in::tree_node): Likewise. (init_modules): Register target-specific builtin types. Bump initial capacity slightly. gcc/testsuite/ChangeLog: * g++.dg/modules/target-aarch64-1_a.C: New test. * g++.dg/modules/target-aarch64-1_b.C: New test. * g++.dg/modules/target-powerpc-1_a.C: New test. * g++.dg/modules/target-powerpc-1_b.C: New test. * g++.dg/modules/target-powerpc-2_a.C: New test. * g++.dg/modules/target-powerpc-2_b.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Reviewed-by: Patrick Palka <ppalka@redhat.com> --- gcc/cp/module.cc | 32 +++++++++++++------ .../g++.dg/modules/target-aarch64-1_a.C | 17 ++++++++++ .../g++.dg/modules/target-aarch64-1_b.C | 13 ++++++++ .../g++.dg/modules/target-powerpc-1_a.C | 7 ++++ .../g++.dg/modules/target-powerpc-1_b.C | 10 ++++++ .../g++.dg/modules/target-powerpc-2_a.C | 20 ++++++++++++ .../g++.dg/modules/target-powerpc-2_b.C | 12 +++++++ 7 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/target-aarch64-1_a.C create mode 100644 gcc/testsuite/g++.dg/modules/target-aarch64-1_b.C create mode 100644 gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C create mode 100644 gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C create mode 100644 gcc/testsuite/g++.dg/modules/target-powerpc-2_a.C create mode 100644 gcc/testsuite/g++.dg/modules/target-powerpc-2_b.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 99055523d915..8aab9ea0bae0 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -5173,7 +5173,6 @@ trees_out::start (tree t, bool code_streamed) break; case FIXED_CST: - case POLY_INT_CST: gcc_unreachable (); /* Not supported in C++. */ break; @@ -5259,7 +5258,6 @@ trees_in::start (unsigned code) case FIXED_CST: case IDENTIFIER_NODE: - case POLY_INT_CST: case SSA_NAME: case TARGET_MEM_REF: case TRANSLATION_UNIT_DECL: @@ -6106,7 +6104,10 @@ trees_out::core_vals (tree t) break; case POLY_INT_CST: - gcc_unreachable (); /* Not supported in C++. */ + if (streaming_p ()) + for (unsigned ix = 0; ix != NUM_POLY_INT_COEFFS; ix++) + WT (POLY_INT_CST_COEFF (t, ix)); + break; case REAL_CST: if (streaming_p ()) @@ -6615,8 +6616,9 @@ trees_in::core_vals (tree t) break; case POLY_INT_CST: - /* Not suported in C++. */ - return false; + for (unsigned ix = 0; ix != NUM_POLY_INT_COEFFS; ix++) + RT (POLY_INT_CST_COEFF (t, ix)); + break; case REAL_CST: if (const void *bytes = buf (sizeof (real_value))) @@ -9068,8 +9070,8 @@ trees_out::type_node (tree type) if (streaming_p ()) { poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (type); - /* to_constant asserts that only coeff[0] is of interest. */ - wu (static_cast<unsigned HOST_WIDE_INT> (nunits.to_constant ())); + for (unsigned ix = 0; ix != NUM_POLY_INT_COEFFS; ix++) + wu (nunits.coeffs[ix]); } break; } @@ -9630,9 +9632,11 @@ trees_in::tree_node (bool is_use) case VECTOR_TYPE: { - unsigned HOST_WIDE_INT nunits = wu (); + poly_uint64 nunits; + for (unsigned ix = 0; ix != NUM_POLY_INT_COEFFS; ix++) + nunits.coeffs[ix] = wu (); if (!get_overrun ()) - res = build_vector_type (res, static_cast<poly_int64> (nunits)); + res = build_vector_type (res, nunits); } break; } @@ -20151,7 +20155,7 @@ init_modules (cpp_reader *reader) some global trees are lazily created and we don't want that to mess with our syndrome of fixed trees. */ unsigned crc = 0; - vec_alloc (fixed_trees, 200); + vec_alloc (fixed_trees, 250); dump () && dump ("+Creating globals"); /* Insert the TRANSLATION_UNIT_DECL. */ @@ -20169,6 +20173,14 @@ init_modules (cpp_reader *reader) dump () && dump ("+%u", v); } } + /* OS- and machine-specific types are dynamically registered at + runtime, so cannot be part of global_tree_arys. */ + registered_builtin_types && dump ("") && dump ("+\tB:"); + for (tree t = registered_builtin_types; t; t = TREE_CHAIN (t)) + { + unsigned v = maybe_add_global (TREE_VALUE (t), crc); + dump () && dump ("+%u", v); + } global_crc = crc32_unsigned (crc, fixed_trees->length ()); dump ("") && dump ("Created %u unique globals, crc=%x", fixed_trees->length (), global_crc); diff --git a/gcc/testsuite/g++.dg/modules/target-aarch64-1_a.C b/gcc/testsuite/g++.dg/modules/target-aarch64-1_a.C new file mode 100644 index 000000000000..6c699053cdc5 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/target-aarch64-1_a.C @@ -0,0 +1,17 @@ +// PR c++/111224 +// { dg-do compile { target aarch64*-*-* } } +// { dg-require-effective-target aarch64_asm_sve_ok } +// { dg-additional-options "-fmodules-ts -march=armv8.2-a+sve" } + +module; + +// We can't do a header unit of this right now because this +// uses target attributes, that we don't yet support. +// See also PR c++/108080. +#include <arm_sve.h> + +export module M; + +export inline void foo(svbool_t x, svfloat16_t f) { + svabs_f16_x(x, f); +} diff --git a/gcc/testsuite/g++.dg/modules/target-aarch64-1_b.C b/gcc/testsuite/g++.dg/modules/target-aarch64-1_b.C new file mode 100644 index 000000000000..c18691dcf8a6 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/target-aarch64-1_b.C @@ -0,0 +1,13 @@ +// PR c++/111224 +// { dg-module-do link { target aarch64*-*-* } } +// { dg-require-effective-target aarch64_asm_sve_ok } +// { dg-additional-options "-fmodules-ts -fno-module-lazy -march=armv8.2-a+sve" } + +#include <arm_sve.h> +import M; + +int main() { + svbool_t x = svptrue_b8 (); + svfloat16_t f = svdup_n_f16(1.0); + foo(x, f); +} diff --git a/gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C b/gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C new file mode 100644 index 000000000000..693ed101ed5d --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C @@ -0,0 +1,7 @@ +// PR c++/98645 +// { dg-do compile { target powerpc*-*-* } } +// { dg-require-effective-target ppc_float128_sw } +// { dg-additional-options "-fmodules-ts -mfloat128 -mabi=ieeelongdouble" } + +export module M; +export __ibm128 i = 0.0; diff --git a/gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C b/gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C new file mode 100644 index 000000000000..d6b684b556d0 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C @@ -0,0 +1,10 @@ +// PR c++/98645 +// { dg-module-do compile { target powerpc*-*-* } } +// { dg-require-effective-target ppc_float128_sw } +// { dg-additional-options "-fmodules-ts -mfloat128 -mabi=ieeelongdouble" } + +import M; + +int main() { + __ibm128 j = i; +} diff --git a/gcc/testsuite/g++.dg/modules/target-powerpc-2_a.C b/gcc/testsuite/g++.dg/modules/target-powerpc-2_a.C new file mode 100644 index 000000000000..cc18862e55ca --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/target-powerpc-2_a.C @@ -0,0 +1,20 @@ +// PR c++/98688 +// { dg-do compile { target powerpc*-*-* } } +// { dg-additional-options "-fmodules-ts -mcpu=power10 -mmma" } + +export module mma_foo0; + +typedef unsigned char vec_t __attribute__((vector_size(16))); + +export void +foo0 (__vector_quad *dst, vec_t *vec, __vector_pair *pvecp) +{ + __vector_quad acc; + __vector_pair vecp0 = *pvecp; + vec_t vec1 = vec[1]; + + __builtin_mma_xvf64ger (&acc, vecp0, vec1); + __builtin_mma_xvf64gerpp (&acc, vecp0, vec1); + __builtin_mma_xvf64gerpn (&acc, vecp0, vec1); + dst[0] = acc; +} diff --git a/gcc/testsuite/g++.dg/modules/target-powerpc-2_b.C b/gcc/testsuite/g++.dg/modules/target-powerpc-2_b.C new file mode 100644 index 000000000000..9e77ba7afcad --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/target-powerpc-2_b.C @@ -0,0 +1,12 @@ +// PR c++/98688 +// { dg-module-do compile { target powerpc*-*-* } } +// { dg-additional-options "-fmodules-ts -mcpu=power10 -mmma" } + +import mma_foo0; + +typedef unsigned char vec_t __attribute__((vector_size(16))); + +void bar(__vector_quad *dst, vec_t *vec, __vector_pair *pvecp) +{ + foo0 (dst, vec, pvecp); +} From 73dac51b32575f980289c073969c6d825963d076 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 12 Mar 2024 14:00:05 +0100 Subject: [PATCH 027/551] tree-optimization/114121 - chrec_fold_{plus,multiply} and recursion The following addresses endless recursion in the chrec_fold_{plus,multiply} functions when handling sign-conversions. We only need to apply tricks when we'd fail (there's a chrec in the converted operand) and we need to make sure to not turn the other operand into something worse (for the chrec-vs-chrec case). PR tree-optimization/114121 * tree-chrec.cc (chrec_fold_plus_1): Guard recursion with converted operand properly. (chrec_fold_multiply): Likewise. Handle missed recursion. * gcc.dg/torture/pr114312.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr114312.c | 15 ++ gcc/tree-chrec.cc | 176 +++++++++++++----------- 2 files changed, 107 insertions(+), 84 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr114312.c diff --git a/gcc/testsuite/gcc.dg/torture/pr114312.c b/gcc/testsuite/gcc.dg/torture/pr114312.c new file mode 100644 index 000000000000..c508c64ed199 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr114312.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target bitint } */ + +#if __BITINT_MAXWIDTH__ >= 129 +typedef _BitInt(129) B; +B b; + +B +foo(void) +{ + _BitInt(64) a = 1; + a &= b * b; + return b << a; +} +#endif diff --git a/gcc/tree-chrec.cc b/gcc/tree-chrec.cc index 7cd0ebc10102..1b2ed7535512 100644 --- a/gcc/tree-chrec.cc +++ b/gcc/tree-chrec.cc @@ -251,23 +251,27 @@ chrec_fold_plus_1 (enum tree_code code, tree type, return chrec_fold_plus_poly_poly (code, type, op0, op1); CASE_CONVERT: - { - /* We can strip sign-conversions to signed by performing the - operation in unsigned. */ - tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); - if (INTEGRAL_TYPE_P (type) - && INTEGRAL_TYPE_P (optype) - && tree_nop_conversion_p (type, optype) - && TYPE_UNSIGNED (optype)) - return chrec_convert (type, - chrec_fold_plus_1 (code, optype, - chrec_convert (optype, - op0, NULL), - TREE_OPERAND (op1, 0)), - NULL); - if (tree_contains_chrecs (op1, NULL)) + if (tree_contains_chrecs (op1, NULL)) + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + { + tree tem = chrec_convert (optype, op0, NULL); + if (TREE_CODE (tem) == POLYNOMIAL_CHREC) + return chrec_convert (type, + chrec_fold_plus_1 (code, optype, + tem, + TREE_OPERAND + (op1, 0)), + NULL); + } return chrec_dont_know; - } + } /* FALLTHRU */ default: @@ -284,26 +288,27 @@ chrec_fold_plus_1 (enum tree_code code, tree type, } CASE_CONVERT: - { - /* We can strip sign-conversions to signed by performing the - operation in unsigned. */ - tree optype = TREE_TYPE (TREE_OPERAND (op0, 0)); - if (INTEGRAL_TYPE_P (type) - && INTEGRAL_TYPE_P (optype) - && tree_nop_conversion_p (type, optype) - && TYPE_UNSIGNED (optype)) - return chrec_convert (type, - chrec_fold_plus_1 (code, optype, - TREE_OPERAND (op0, 0), - chrec_convert (optype, - op1, NULL)), - NULL); - if (tree_contains_chrecs (op0, NULL)) + if (tree_contains_chrecs (op0, NULL)) + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op0, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + return chrec_convert (type, + chrec_fold_plus_1 (code, optype, + TREE_OPERAND (op0, 0), + chrec_convert (optype, + op1, NULL)), + NULL); return chrec_dont_know; - } + } /* FALLTHRU */ default: + gcc_checking_assert (!tree_contains_chrecs (op0, NULL)); switch (TREE_CODE (op1)) { case POLYNOMIAL_CHREC: @@ -325,24 +330,24 @@ chrec_fold_plus_1 (enum tree_code code, tree type, : build_int_cst_type (type, -1))); CASE_CONVERT: - { - /* We can strip sign-conversions to signed by performing the - operation in unsigned. */ - tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); - if (INTEGRAL_TYPE_P (type) - && INTEGRAL_TYPE_P (optype) - && tree_nop_conversion_p (type, optype) - && TYPE_UNSIGNED (optype)) - return chrec_convert (type, - chrec_fold_plus_1 (code, optype, - chrec_convert (optype, - op0, NULL), - TREE_OPERAND (op1, 0)), - NULL); - } - if (tree_contains_chrecs (op1, NULL)) - return chrec_dont_know; + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + return chrec_convert (type, + chrec_fold_plus_1 (code, optype, + chrec_convert (optype, + op0, + NULL), + TREE_OPERAND (op1, 0)), + NULL); + return chrec_dont_know; + } /* FALLTHRU */ default: @@ -440,24 +445,26 @@ chrec_fold_multiply (tree type, return chrec_fold_multiply_poly_poly (type, op0, op1); CASE_CONVERT: - { - /* We can strip sign-conversions to signed by performing the - operation in unsigned. */ - tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); - if (INTEGRAL_TYPE_P (type) - && INTEGRAL_TYPE_P (optype) - && tree_nop_conversion_p (type, optype) - && TYPE_UNSIGNED (optype)) - return chrec_convert (type, - chrec_fold_multiply (optype, - chrec_convert (optype, - op0, NULL), - TREE_OPERAND (op1, 0)), - NULL); - } - if (tree_contains_chrecs (op1, NULL)) - return chrec_dont_know; + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op1, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + { + tree tem = chrec_convert (optype, op0, NULL); + if (TREE_CODE (tem) == POLYNOMIAL_CHREC) + return chrec_convert (type, + chrec_fold_multiply (optype, tem, + TREE_OPERAND + (op1, 0)), + NULL); + } + return chrec_dont_know; + } /* FALLTHRU */ default: @@ -506,27 +513,28 @@ chrec_fold_multiply (tree type, } CASE_CONVERT: - { - /* We can strip sign-conversions to signed by performing the - operation in unsigned. */ - tree optype = TREE_TYPE (TREE_OPERAND (op0, 0)); - if (INTEGRAL_TYPE_P (type) - && INTEGRAL_TYPE_P (optype) - && tree_nop_conversion_p (type, optype) - && TYPE_UNSIGNED (optype)) - return chrec_convert (type, - chrec_fold_multiply (optype, - TREE_OPERAND (op0, 0), - chrec_convert (optype, - op1, NULL)), - NULL); - } - if (tree_contains_chrecs (op0, NULL)) - return chrec_dont_know; + { + /* We can strip sign-conversions to signed by performing the + operation in unsigned. */ + tree optype = TREE_TYPE (TREE_OPERAND (op0, 0)); + if (INTEGRAL_TYPE_P (type) + && INTEGRAL_TYPE_P (optype) + && tree_nop_conversion_p (type, optype) + && TYPE_UNSIGNED (optype)) + return chrec_convert (type, + chrec_fold_multiply (optype, + TREE_OPERAND (op0, 0), + chrec_convert (optype, + op1, + NULL)), + NULL); + return chrec_dont_know; + } /* FALLTHRU */ default: + gcc_checking_assert (!tree_contains_chrecs (op0, NULL)); if (integer_onep (op0)) return op1; @@ -540,7 +548,7 @@ chrec_fold_multiply (tree type, CASE_CONVERT: if (tree_contains_chrecs (op1, NULL)) - return chrec_dont_know; + return chrec_fold_multiply (type, op1, op0); /* FALLTHRU */ default: From ef79c64cb5762c86ee04ddfcedb7fe31eaa3bac8 Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Tue, 12 Mar 2024 15:42:50 +0100 Subject: [PATCH 028/551] libgomp/libgomp.texi: Fix @node order in @menu While texinfo 7.0.3 does not warn, an older texinfo did complain about: libgomp.texi:1964: warning: node next `omp_target_memcpy' in menu `omp_target_memcpy_rect' and in sectioning `omp_target_memcpy_async' differ libgomp/ * libgomp.texi (Device Memory Routines): Swap item order to match the order of the '@node's of the '@subsection's. --- libgomp/libgomp.texi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi index bf5c7a76fc99..57165e0e9813 100644 --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi @@ -1783,8 +1783,8 @@ pointers on devices. They have C linkage and do not throw exceptions. * omp_target_is_present:: Check whether storage is mapped * omp_target_is_accessible:: Check whether memory is device accessible * omp_target_memcpy:: Copy data between devices -* omp_target_memcpy_rect:: Copy a subvolume of data between devices * omp_target_memcpy_async:: Copy data between devices asynchronously +* omp_target_memcpy_rect:: Copy a subvolume of data between devices * omp_target_memcpy_rect_async:: Copy a subvolume of data between devices asynchronously @c * omp_target_memset:: <fixme>/TR12 @c * omp_target_memset_async:: <fixme>/TR12 From 81ee1298b47d3f3b3712ef3f3b2929ca26c4bcd2 Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Mon, 11 Mar 2024 22:05:51 +0100 Subject: [PATCH 029/551] Fortran: handle procedure pointer component in DT array [PR110826] gcc/fortran/ChangeLog: PR fortran/110826 * array.cc (gfc_array_dimen_size): When walking the ref chain of an array and the ultimate component is a procedure pointer, do not try to figure out its dimension even if it is a array-valued function. gcc/testsuite/ChangeLog: PR fortran/110826 * gfortran.dg/proc_ptr_comp_53.f90: New test. --- gcc/fortran/array.cc | 7 +++ .../gfortran.dg/proc_ptr_comp_53.f90 | 43 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/proc_ptr_comp_53.f90 diff --git a/gcc/fortran/array.cc b/gcc/fortran/array.cc index 3a6e3a7c95bc..e9934f1491b2 100644 --- a/gcc/fortran/array.cc +++ b/gcc/fortran/array.cc @@ -2597,6 +2597,13 @@ gfc_array_dimen_size (gfc_expr *array, int dimen, mpz_t *result) case EXPR_FUNCTION: for (ref = array->ref; ref; ref = ref->next) { + /* Ultimate component is a procedure pointer. */ + if (ref->type == REF_COMPONENT + && !ref->next + && ref->u.c.component->attr.function + && IS_PROC_POINTER (ref->u.c.component)) + return false; + if (ref->type != REF_ARRAY) continue; diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_53.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_53.f90 new file mode 100644 index 000000000000..affb59222351 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/proc_ptr_comp_53.f90 @@ -0,0 +1,43 @@ +! { dg-do compile } +! PR fortran/110826 - procedure pointer component in DT array + +module m + implicit none + + type pp + procedure(func_template), pointer, nopass :: f =>null() + end type pp + + abstract interface + function func_template(state) result(dstate) + implicit none + real, dimension(:,:), intent(in) :: state + real, dimension(size(state,1), size(state,2)) :: dstate + end function + end interface + +contains + + function zero_state(state) result(dstate) + real, dimension(:,:), intent(in) :: state + real, dimension(size(state,1), size(state,2)) :: dstate + dstate = 0. + end function zero_state + +end module m + +program test_func_array + use m + implicit none + + real, dimension(4,6) :: state + type(pp) :: func_scalar + type(pp) :: func_array(4) + + func_scalar %f => zero_state + func_array(1)%f => zero_state + print *, func_scalar %f(state) + print *, func_array(1)%f(state) + if (.not. all (shape (func_scalar %f(state)) == shape (state))) stop 1 + if (.not. all (shape (func_array(1)%f(state)) == shape (state))) stop 2 +end program test_func_array From f6d9426b5bb3592fc33ea91420d13e4a1a64f8ab Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Wed, 13 Mar 2024 00:17:12 +0000 Subject: [PATCH 030/551] Daily bump. --- gcc/ChangeLog | 41 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 15 +++++++++++++++ gcc/fortran/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 38 ++++++++++++++++++++++++++++++++++++++ libgomp/ChangeLog | 5 +++++ 6 files changed, 107 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 505e1da16189..802438e60b64 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,44 @@ +2024-03-12 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114121 + * tree-chrec.cc (chrec_fold_plus_1): Guard recursion with + converted operand properly. + (chrec_fold_multiply): Likewise. Handle missed recursion. + +2024-03-12 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/112709 + * asan.cc (has_stmt_been_instrumented_p): Don't instrument call + stores on the caller side unless it is a call to a builtin or + internal function or function doesn't return by hidden reference. + (maybe_instrument_call): Likewise. + (instrument_derefs): Instrument stores to RESULT_DECL if + returning by hidden reference. + +2024-03-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114293 + * tree-ssa-strlen.cc (strlen_pass::handle_builtin_strlen): If + max is smaller than min, set max to ~(size_t)0. + +2024-03-12 Pan Li <pan2.li@intel.com> + + * config/riscv/riscv-c.cc (riscv_ext_version_value): Fix + code style greater than 80 chars. + (riscv_cpu_cpp_builtins): Fix useless empty line, indent + with 3 space(s) and argument unalignment. + +2024-03-12 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114297 + * tree-vect-loop.cc (vectorizable_live_operation): Pass in the + live stmts SLP node to vect_create_epilog_for_reduction. + +2024-03-12 Andrew Pinski <quic_apinski@quicinc.com> + + PR driver/114314 + * common.opt (fmultiflags): Add RejectNegative. + 2024-03-11 Szabolcs Nagy <szabolcs.nagy@arm.com> * config/aarch64/aarch64.md: Rename aarch_ to aarch64_. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index d87f3cf23bc4..1ab707fca679 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240312 +20240313 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 85751b0e3151..2965b95a51de 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,18 @@ +2024-03-12 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/98645 + PR c++/98688 + PR c++/111224 + * module.cc (enum tree_tag): Add new tag for builtin types. + (trees_out::start): POLY_INT_CSTs can be emitted. + (trees_in::start): Likewise. + (trees_out::core_vals): Stream POLY_INT_CSTs. + (trees_in::core_vals): Likewise. + (trees_out::type_node): Handle vectors with multiple coeffs. + (trees_in::tree_node): Likewise. + (init_modules): Register target-specific builtin types. Bump + initial capacity slightly. + 2024-03-08 Jakub Jelinek <jakub@redhat.com> * pt.cc (tsubst_expr): Handle MEM_REF. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index fb11c05186a8..5ce10fa704a7 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2024-03-12 Harald Anlauf <anlauf@gmx.de> + + PR fortran/110826 + * array.cc (gfc_array_dimen_size): When walking the ref chain of an + array and the ultimate component is a procedure pointer, do not try + to figure out its dimension even if it is a array-valued function. + 2024-03-06 Harald Anlauf <anlauf@gmx.de> PR fortran/103707 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7fd16f212ff2..92da402f81a5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,41 @@ +2024-03-12 Harald Anlauf <anlauf@gmx.de> + + PR fortran/110826 + * gfortran.dg/proc_ptr_comp_53.f90: New test. + +2024-03-12 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114121 + * gcc.dg/torture/pr114312.c: New testcase. + +2024-03-12 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/98645 + PR c++/98688 + PR c++/111224 + * g++.dg/modules/target-aarch64-1_a.C: New test. + * g++.dg/modules/target-aarch64-1_b.C: New test. + * g++.dg/modules/target-powerpc-1_a.C: New test. + * g++.dg/modules/target-powerpc-1_b.C: New test. + * g++.dg/modules/target-powerpc-2_a.C: New test. + * g++.dg/modules/target-powerpc-2_b.C: New test. + +2024-03-12 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/112709 + * gcc.dg/asan/pr112709-1.c: New test. + * g++.dg/asan/pr69276.C: Adjust expected output for some targets. + +2024-03-12 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114293 + * gcc.dg/pr114293.c: New test. + +2024-03-12 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114297 + * gcc.dg/vect/vect-early-break_123-pr114297.c: New testcase. + 2024-03-11 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/105437 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index f8d266a340a5..06412e17e016 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2024-03-12 Tobias Burnus <tburnus@baylibre.com> + + * libgomp.texi (Device Memory Routines): Swap item order to match + the order of the '@node's of the '@subsection's. + 2024-03-08 Thomas Schwinge <tschwinge@baylibre.com> * plugin/plugin-gcn.c (GOMP_OFFLOAD_can_run): Don't consider From 364c684c474841e3c9c04e025a5c1bca49705c86 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 13 Mar 2024 09:16:45 +0100 Subject: [PATCH 031/551] gimple-iterator, ubsan: Fix ICE during instrumentation of returns_twice calls [PR112709] ubsan, asan (both PR112709) and _BitInt lowering (PR113466) want to insert some instrumentation or adjustment statements before some statement. This unfortunately creates invalid IL if inserting before a returns_twice call, because we require that such calls are the first statement in a basic block and that we have an edge from the .ABNORMAL_DISPATCHER block to the block containing the returns_twice call (in addition to other edge(s)). The following patch adds helper functions for such insertions and uses it for now in ubsan (I'll post a follow up which uses it in asan and will work later on the _BitInt lowering PR). In particular, if the bb with returns_twice call at the start has just 2 edges, one EDGE_ABNORMAL from .ABNORMAL_DISPATCHER and another (non-EDGE_ABNORMAL/EDGE_EH) from some other bb, it just inserts the statement or sequence on that other edge. If the bb has more predecessor edges or the one not from .ABNORMAL_DISPATCHER is e.g. an EH edge (this latter case likely shouldn't happen, one would need labels or something like that), the patch splits the block with returns_twice call such that there is just one edge next to .ABNORMAL_DISPATCHER edge and adjusts PHIs as needed to make it happen. The functions also replace uses of PHIs from the returns_twice bb with the corresponding PHI arguments, because otherwise it would be invalid IL. E.g. in ubsan/pr112709-2.c (qux) we have before the ubsan pass <bb 10> : # .MEM_5(ab) = PHI <.MEM_4(9), .MEM_25(ab)(11)> # _7(ab) = PHI <_20(9), _8(ab)(11)> # .MEM_21(ab) = VDEF <.MEM_5(ab)> _22 = bar (*_7(ab)); where bar is returns_twice call and bb 11 has .ABNORMAL_DISPATCHER call, this patch instruments it like: <bb 9> : # .MEM_4 = PHI <.MEM_17(ab)(4), .MEM_10(D)(5), .MEM_14(ab)(8)> # DEBUG BEGIN_STMT # VUSE <.MEM_4> _20 = p; # .MEM_27 = VDEF <.MEM_4> .UBSAN_NULL (_20, 0B, 0); # VUSE <.MEM_27> _2 = __builtin_dynamic_object_size (_20, 0); # .MEM_28 = VDEF <.MEM_27> .UBSAN_OBJECT_SIZE (_20, 1024, _2, 0); <bb 10> : # .MEM_5(ab) = PHI <.MEM_28(9), .MEM_25(ab)(11)> # _7(ab) = PHI <_20(9), _8(ab)(11)> # .MEM_21(ab) = VDEF <.MEM_5(ab)> _22 = bar (*_7(ab)); The edge from .ABNORMAL_DISPATCHER is there just to represent the returning for 2nd and later times, the instrumentation can't be done at that point as there is no code executed during that point. The ubsan/pr112709-1.c testcase includes non-virtual PHIs to cover the handling of those as well. 2024-03-13 Jakub Jelinek <jakub@redhat.com> PR sanitizer/112709 * gimple-iterator.h (gsi_safe_insert_before, gsi_safe_insert_seq_before): Declare. * gimple-iterator.cc: Include gimplify.h. (edge_before_returns_twice_call, adjust_before_returns_twice_call, gsi_safe_insert_before, gsi_safe_insert_seq_before): New functions. * ubsan.cc (instrument_mem_ref, instrument_pointer_overflow, instrument_nonnull_arg, instrument_nonnull_return): Use gsi_safe_insert_before instead of gsi_insert_before. (maybe_instrument_pointer_overflow): Use force_gimple_operand, gimple_seq_add_seq_without_update and gsi_safe_insert_seq_before instead of force_gimple_operand_gsi. (instrument_object_size): Likewise. Use gsi_safe_insert_before instead of gsi_insert_before. * gcc.dg/ubsan/pr112709-1.c: New test. * gcc.dg/ubsan/pr112709-2.c: New test. --- gcc/gimple-iterator.cc | 135 ++++++++++++++++++++++++ gcc/gimple-iterator.h | 2 + gcc/testsuite/gcc.dg/ubsan/pr112709-1.c | 64 +++++++++++ gcc/testsuite/gcc.dg/ubsan/pr112709-2.c | 62 +++++++++++ gcc/ubsan.cc | 46 ++++---- 5 files changed, 285 insertions(+), 24 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/ubsan/pr112709-1.c create mode 100644 gcc/testsuite/gcc.dg/ubsan/pr112709-2.c diff --git a/gcc/gimple-iterator.cc b/gcc/gimple-iterator.cc index 55ef3198c52b..531c8aed8241 100644 --- a/gcc/gimple-iterator.cc +++ b/gcc/gimple-iterator.cc @@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-cfg.h" #include "tree-ssa.h" #include "value-prof.h" +#include "gimplify.h" /* Mark the statement STMT as modified, and update it. */ @@ -944,3 +945,137 @@ gsi_start_phis (basic_block bb) return i; } + +/* Helper function for gsi_safe_insert_before and gsi_safe_insert_seq_before. + Find edge to insert statements before returns_twice call at the start of BB, + if there isn't just one, split the bb and adjust PHIs to ensure that. */ + +static edge +edge_before_returns_twice_call (basic_block bb) +{ + gimple_stmt_iterator gsi = gsi_start_nondebug_bb (bb); + gcc_checking_assert (is_gimple_call (gsi_stmt (gsi)) + && (gimple_call_flags (gsi_stmt (gsi)) + & ECF_RETURNS_TWICE) != 0); + edge_iterator ei; + edge e, ad_edge = NULL, other_edge = NULL; + bool split = false; + FOR_EACH_EDGE (e, ei, bb->preds) + { + if ((e->flags & (EDGE_ABNORMAL | EDGE_EH)) == EDGE_ABNORMAL) + { + gimple_stmt_iterator gsi + = gsi_start_nondebug_after_labels_bb (e->src); + gimple *ad = gsi_stmt (gsi); + if (ad && gimple_call_internal_p (ad, IFN_ABNORMAL_DISPATCHER)) + { + gcc_checking_assert (ad_edge == NULL); + ad_edge = e; + continue; + } + } + if (other_edge || e->flags & (EDGE_ABNORMAL | EDGE_EH)) + split = true; + other_edge = e; + } + gcc_checking_assert (ad_edge); + if (other_edge == NULL) + split = true; + if (split) + { + other_edge = split_block_after_labels (bb); + e = make_edge (ad_edge->src, other_edge->dest, EDGE_ABNORMAL); + for (gphi_iterator gsi = gsi_start_phis (other_edge->src); + !gsi_end_p (gsi); gsi_next (&gsi)) + { + gphi *phi = gsi.phi (); + tree lhs = gimple_phi_result (phi); + tree new_lhs = copy_ssa_name (lhs); + gimple_phi_set_result (phi, new_lhs); + gphi *new_phi = create_phi_node (lhs, other_edge->dest); + add_phi_arg (new_phi, new_lhs, other_edge, UNKNOWN_LOCATION); + add_phi_arg (new_phi, gimple_phi_arg_def_from_edge (phi, ad_edge), + e, gimple_phi_arg_location_from_edge (phi, ad_edge)); + } + remove_edge (ad_edge); + } + return other_edge; +} + +/* Helper function for gsi_safe_insert_before and gsi_safe_insert_seq_before. + Replace SSA_NAME uses in G if they are PHI results of PHIs on E->dest + bb with the corresponding PHI argument from E edge. */ + +static void +adjust_before_returns_twice_call (edge e, gimple *g) +{ + use_operand_p use_p; + ssa_op_iter iter; + bool m = false; + FOR_EACH_SSA_USE_OPERAND (use_p, g, iter, SSA_OP_USE) + { + tree s = USE_FROM_PTR (use_p); + if (SSA_NAME_DEF_STMT (s) + && gimple_code (SSA_NAME_DEF_STMT (s)) == GIMPLE_PHI + && gimple_bb (SSA_NAME_DEF_STMT (s)) == e->dest) + { + tree r = gimple_phi_arg_def_from_edge (SSA_NAME_DEF_STMT (s), e); + SET_USE (use_p, unshare_expr (r)); + m = true; + } + } + if (m) + update_stmt (g); +} + +/* Insert G stmt before ITER and keep ITER pointing to the same statement + as before. If ITER is a returns_twice call, insert it on an appropriate + edge instead. */ + +void +gsi_safe_insert_before (gimple_stmt_iterator *iter, gimple *g) +{ + gimple *stmt = gsi_stmt (*iter); + if (stmt + && is_gimple_call (stmt) + && (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) != 0) + { + edge e = edge_before_returns_twice_call (gsi_bb (*iter)); + basic_block new_bb = gsi_insert_on_edge_immediate (e, g); + if (new_bb) + e = single_succ_edge (new_bb); + adjust_before_returns_twice_call (e, g); + } + else + gsi_insert_before (iter, g, GSI_SAME_STMT); +} + +/* Similarly for sequence SEQ. */ + +void +gsi_safe_insert_seq_before (gimple_stmt_iterator *iter, gimple_seq seq) +{ + if (gimple_seq_empty_p (seq)) + return; + gimple *stmt = gsi_stmt (*iter); + if (stmt + && is_gimple_call (stmt) + && (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) != 0) + { + edge e = edge_before_returns_twice_call (gsi_bb (*iter)); + gimple *f = gimple_seq_first_stmt (seq); + gimple *l = gimple_seq_last_stmt (seq); + basic_block new_bb = gsi_insert_seq_on_edge_immediate (e, seq); + if (new_bb) + e = single_succ_edge (new_bb); + for (gimple_stmt_iterator gsi = gsi_for_stmt (f); ; gsi_next (&gsi)) + { + gimple *g = gsi_stmt (gsi); + adjust_before_returns_twice_call (e, g); + if (g == l) + break; + } + } + else + gsi_insert_seq_before (iter, seq, GSI_SAME_STMT); +} diff --git a/gcc/gimple-iterator.h b/gcc/gimple-iterator.h index 78014a43cb93..501f0549d925 100644 --- a/gcc/gimple-iterator.h +++ b/gcc/gimple-iterator.h @@ -93,6 +93,8 @@ extern void gsi_insert_on_edge (edge, gimple *); extern void gsi_insert_seq_on_edge (edge, gimple_seq); extern basic_block gsi_insert_on_edge_immediate (edge, gimple *); extern basic_block gsi_insert_seq_on_edge_immediate (edge, gimple_seq); +extern void gsi_safe_insert_before (gimple_stmt_iterator *, gimple *); +extern void gsi_safe_insert_seq_before (gimple_stmt_iterator *, gimple_seq); extern void gsi_commit_edge_inserts (void); extern void gsi_commit_one_edge_insert (edge, basic_block *); extern gphi_iterator gsi_start_phis (basic_block); diff --git a/gcc/testsuite/gcc.dg/ubsan/pr112709-1.c b/gcc/testsuite/gcc.dg/ubsan/pr112709-1.c new file mode 100644 index 000000000000..2ce31ef897bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr112709-1.c @@ -0,0 +1,64 @@ +/* PR sanitizer/112709 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=undefined -O2" } */ + +struct S { char c[1024]; }; +int foo (int); + +__attribute__((returns_twice, noipa)) struct S +bar (int x) +{ + (void) x; + struct S s = {}; + s.c[42] = 42; + return s; +} + +void +baz (struct S *p) +{ + foo (1); + *p = bar (0); +} + +void +qux (int x, struct S *p) +{ + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + *p = bar (x); +} + +void +corge (int x, struct S *p) +{ + void *q[] = { &&l1, &&l2, &&l3, &&l3 }; + if (x == 25) + { + l1: + x = foo (2); + } + else if (x == 42) + { + l2: + x = foo (foo (3)); + } +l3: + *p = bar (x); + if (x < 4) + goto *q[x & 3]; +} + +void +freddy (int x, struct S *p) +{ + *p = bar (x); + ++p; + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + *p = bar (x); +} diff --git a/gcc/testsuite/gcc.dg/ubsan/pr112709-2.c b/gcc/testsuite/gcc.dg/ubsan/pr112709-2.c new file mode 100644 index 000000000000..97cbeb3f0f6b --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr112709-2.c @@ -0,0 +1,62 @@ +/* PR sanitizer/112709 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=undefined -O2" } */ + +struct S { char c[1024]; } *p; +int foo (int); + +__attribute__((returns_twice, noipa)) int +bar (struct S x) +{ + (void) x.c[0]; + return 0; +} + +void +baz (int *y) +{ + foo (1); + *y = bar (*p); +} + +void +qux (int x, int *y) +{ + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + *y = bar (*p); +} + +void +corge (int x, int *y) +{ + void *q[] = { &&l1, &&l2, &&l3, &&l3 }; + if (x == 25) + { + l1: + x = foo (2); + } + else if (x == 42) + { + l2: + x = foo (foo (3)); + } +l3: + *y = bar (*p); + if (x < 4) + goto *q[x & 3]; +} + +void +freddy (int x, int *y, struct S *p) +{ + bar (*p); + ++p; + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + *y = bar (*p); +} diff --git a/gcc/ubsan.cc b/gcc/ubsan.cc index 7be3cd51b27e..e17d7091408a 100644 --- a/gcc/ubsan.cc +++ b/gcc/ubsan.cc @@ -1458,7 +1458,7 @@ instrument_mem_ref (tree mem, tree base, gimple_stmt_iterator *iter, tree alignt = build_int_cst (pointer_sized_int_node, align); gcall *g = gimple_build_call_internal (IFN_UBSAN_NULL, 3, t, kind, alignt); gimple_set_location (g, gimple_location (gsi_stmt (*iter))); - gsi_insert_before (iter, g, GSI_SAME_STMT); + gsi_safe_insert_before (iter, g); } /* Perform the pointer instrumentation. */ @@ -1485,7 +1485,7 @@ instrument_pointer_overflow (gimple_stmt_iterator *gsi, tree ptr, tree off) return; gcall *g = gimple_build_call_internal (IFN_UBSAN_PTR, 2, ptr, off); gimple_set_location (g, gimple_location (gsi_stmt (*gsi))); - gsi_insert_before (gsi, g, GSI_SAME_STMT); + gsi_safe_insert_before (gsi, g); } /* Instrument pointer arithmetics if any. */ @@ -1577,10 +1577,11 @@ maybe_instrument_pointer_overflow (gimple_stmt_iterator *gsi, tree t) else t = fold_convert (sizetype, moff); } - t = force_gimple_operand_gsi (gsi, t, true, NULL_TREE, true, - GSI_SAME_STMT); - base_addr = force_gimple_operand_gsi (gsi, base_addr, true, NULL_TREE, true, - GSI_SAME_STMT); + gimple_seq seq, this_seq; + t = force_gimple_operand (t, &seq, true, NULL_TREE); + base_addr = force_gimple_operand (base_addr, &this_seq, true, NULL_TREE); + gimple_seq_add_seq_without_update (&seq, this_seq); + gsi_safe_insert_seq_before (gsi, seq); instrument_pointer_overflow (gsi, base_addr, t); } @@ -2035,7 +2036,7 @@ instrument_nonnull_arg (gimple_stmt_iterator *gsi) { g = gimple_build_assign (make_ssa_name (TREE_TYPE (arg)), arg); gimple_set_location (g, loc[0]); - gsi_insert_before (gsi, g, GSI_SAME_STMT); + gsi_safe_insert_before (gsi, g); arg = gimple_assign_lhs (g); } @@ -2068,7 +2069,7 @@ instrument_nonnull_arg (gimple_stmt_iterator *gsi) g = gimple_build_call (fn, 1, data); } gimple_set_location (g, loc[0]); - gsi_insert_before (gsi, g, GSI_SAME_STMT); + gsi_safe_insert_before (gsi, g); ubsan_create_edge (g); } *gsi = gsi_for_stmt (stmt); @@ -2124,7 +2125,7 @@ instrument_nonnull_return (gimple_stmt_iterator *gsi) g = gimple_build_call (fn, 2, data, data2); } gimple_set_location (g, loc[0]); - gsi_insert_before (gsi, g, GSI_SAME_STMT); + gsi_safe_insert_before (gsi, g); ubsan_create_edge (g); *gsi = gsi_for_stmt (stmt); } @@ -2231,6 +2232,7 @@ instrument_object_size (gimple_stmt_iterator *gsi, tree t, bool is_lhs) tree sizet; tree base_addr = base; gimple *bos_stmt = NULL; + gimple_seq seq = NULL; if (decl_p) base_addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (base)), base); @@ -2244,19 +2246,12 @@ instrument_object_size (gimple_stmt_iterator *gsi, tree t, bool is_lhs) sizet = builtin_decl_explicit (BUILT_IN_DYNAMIC_OBJECT_SIZE); sizet = build_call_expr_loc (loc, sizet, 2, base_addr, integer_zero_node); - sizet = force_gimple_operand_gsi (gsi, sizet, false, NULL_TREE, true, - GSI_SAME_STMT); + sizet = force_gimple_operand (sizet, &seq, false, NULL_TREE); /* If the call above didn't end up being an integer constant, go one statement back and get the __builtin_object_size stmt. Save it, we might need it later. */ if (SSA_VAR_P (sizet)) - { - gsi_prev (gsi); - bos_stmt = gsi_stmt (*gsi); - - /* Move on to where we were. */ - gsi_next (gsi); - } + bos_stmt = gsi_stmt (gsi_last (seq)); } else return; @@ -2298,21 +2293,24 @@ instrument_object_size (gimple_stmt_iterator *gsi, tree t, bool is_lhs) && !TREE_ADDRESSABLE (base)) mark_addressable (base); + /* We have to emit the check. */ + gimple_seq this_seq; + t = force_gimple_operand (t, &this_seq, true, NULL_TREE); + gimple_seq_add_seq_without_update (&seq, this_seq); + ptr = force_gimple_operand (ptr, &this_seq, true, NULL_TREE); + gimple_seq_add_seq_without_update (&seq, this_seq); + gsi_safe_insert_seq_before (gsi, seq); + if (bos_stmt && gimple_call_builtin_p (bos_stmt, BUILT_IN_DYNAMIC_OBJECT_SIZE)) ubsan_create_edge (bos_stmt); - /* We have to emit the check. */ - t = force_gimple_operand_gsi (gsi, t, true, NULL_TREE, true, - GSI_SAME_STMT); - ptr = force_gimple_operand_gsi (gsi, ptr, true, NULL_TREE, true, - GSI_SAME_STMT); tree ckind = build_int_cst (unsigned_char_type_node, is_lhs ? UBSAN_STORE_OF : UBSAN_LOAD_OF); gimple *g = gimple_build_call_internal (IFN_UBSAN_OBJECT_SIZE, 4, ptr, t, sizet, ckind); gimple_set_location (g, loc); - gsi_insert_before (gsi, g, GSI_SAME_STMT); + gsi_safe_insert_before (gsi, g); } /* Instrument values passed to builtin functions. */ From 6586359e8e4c611dd96129b5d4f24023949ac3fc Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 13 Mar 2024 09:19:05 +0100 Subject: [PATCH 032/551] asan: Fix ICE during instrumentation of returns_twice calls [PR112709] The following patch on top of the previously posted ubsan/gimple-iterator one handles asan the same. While the case of returning by hidden reference is handled differently because of the first recently posted asan patch, this deals with instrumentation of the aggregates returned in registers case as well as instrumentation of loads from aggregate memory in the function arguments of returns_twice calls. 2024-03-13 Jakub Jelinek <jakub@redhat.com> PR sanitizer/112709 * asan.cc (maybe_create_ssa_name, maybe_cast_to_ptrmode, build_check_stmt, maybe_instrument_call, asan_expand_mark_ifn): Use gsi_safe_insert_before instead of gsi_insert_before. * gcc.dg/asan/pr112709-2.c: New test. --- gcc/asan.cc | 10 +++--- gcc/testsuite/gcc.dg/asan/pr112709-2.c | 50 ++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/asan/pr112709-2.c diff --git a/gcc/asan.cc b/gcc/asan.cc index c533b09b1a12..cfe831064605 100644 --- a/gcc/asan.cc +++ b/gcc/asan.cc @@ -2574,7 +2574,7 @@ maybe_create_ssa_name (location_t loc, tree base, gimple_stmt_iterator *iter, gimple *g = gimple_build_assign (make_ssa_name (TREE_TYPE (base)), base); gimple_set_location (g, loc); if (before_p) - gsi_insert_before (iter, g, GSI_SAME_STMT); + gsi_safe_insert_before (iter, g); else gsi_insert_after (iter, g, GSI_NEW_STMT); return gimple_assign_lhs (g); @@ -2593,7 +2593,7 @@ maybe_cast_to_ptrmode (location_t loc, tree len, gimple_stmt_iterator *iter, NOP_EXPR, len); gimple_set_location (g, loc); if (before_p) - gsi_insert_before (iter, g, GSI_SAME_STMT); + gsi_safe_insert_before (iter, g); else gsi_insert_after (iter, g, GSI_NEW_STMT); return gimple_assign_lhs (g); @@ -2684,7 +2684,7 @@ build_check_stmt (location_t loc, tree base, tree len, align / BITS_PER_UNIT)); gimple_set_location (g, loc); if (before_p) - gsi_insert_before (&gsi, g, GSI_SAME_STMT); + gsi_safe_insert_before (&gsi, g); else { gsi_insert_after (&gsi, g, GSI_NEW_STMT); @@ -3025,7 +3025,7 @@ maybe_instrument_call (gimple_stmt_iterator *iter) tree decl = builtin_decl_implicit (BUILT_IN_ASAN_HANDLE_NO_RETURN); gimple *g = gimple_build_call (decl, 0); gimple_set_location (g, gimple_location (stmt)); - gsi_insert_before (iter, g, GSI_SAME_STMT); + gsi_safe_insert_before (iter, g); } } @@ -3852,7 +3852,7 @@ asan_expand_mark_ifn (gimple_stmt_iterator *iter) g = gimple_build_assign (make_ssa_name (pointer_sized_int_node), NOP_EXPR, len); gimple_set_location (g, loc); - gsi_insert_before (iter, g, GSI_SAME_STMT); + gsi_safe_insert_before (iter, g); tree sz_arg = gimple_assign_lhs (g); tree fun diff --git a/gcc/testsuite/gcc.dg/asan/pr112709-2.c b/gcc/testsuite/gcc.dg/asan/pr112709-2.c new file mode 100644 index 000000000000..e793f53507f8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/asan/pr112709-2.c @@ -0,0 +1,50 @@ +/* PR sanitizer/112709 */ +/* { dg-do compile } */ +/* { dg-options "-fsanitize=address -O2" } */ + +struct S { char c[1024]; } *p; +int foo (int); + +__attribute__((returns_twice, noipa)) int +bar (struct S x) +{ + (void) x.c[0]; + return 0; +} + +void +baz (int *y) +{ + foo (1); + *y = bar (*p); +} + +void +qux (int x, int *y) +{ + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + *y = bar (*p); +} + +void +corge (int x, int *y) +{ + void *q[] = { &&l1, &&l2, &&l3, &&l3 }; + if (x == 25) + { + l1: + x = foo (2); + } + else if (x == 42) + { + l2: + x = foo (foo (3)); + } +l3: + *y = bar (*p); + if (x < 4) + goto *q[x & 3]; +} From c5037fcee2de438774466e78e46e6ab4df72a7fe Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Wed, 13 Mar 2024 09:35:28 +0100 Subject: [PATCH 033/551] OpenMP/Fortran: Fix defaultmap(none) issue with dummy procedures [PR114283] Dummy procedures look similar to variables but aren't - neither in Fortran nor in OpenMP. As the middle end sees PARM_DECLs, mark them as predetermined firstprivate for mapping (as already done in gfc_omp_predetermined_sharing). This does not address the isses related to procedure pointers, which are still discussed on spec level [see PR]. PR fortran/114283 gcc/fortran/ChangeLog: * trans-openmp.cc (gfc_omp_predetermined_mapping): Map dummy procedures as firstprivate. libgomp/ChangeLog: * testsuite/libgomp.fortran/declare-target-indirect-4.f90: New test. --- gcc/fortran/trans-openmp.cc | 9 ++++ .../declare-target-indirect-4.f90 | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 libgomp/testsuite/libgomp.fortran/declare-target-indirect-4.f90 diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index a2bf15665b34..1dba47126edc 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -343,6 +343,15 @@ gfc_omp_predetermined_mapping (tree decl) && GFC_DECL_SAVED_DESCRIPTOR (decl))) return OMP_CLAUSE_DEFAULTMAP_TO; + /* Dummy procedures aren't considered variables by OpenMP, thus are + disallowed in OpenMP clauses. They are represented as PARM_DECLs + in the middle-end, so return OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE here + to avoid complaining about their uses with defaultmap(none). */ + if (TREE_CODE (decl) == PARM_DECL + && TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == FUNCTION_TYPE) + return OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE; + /* These are either array or derived parameters, or vtables. */ if (VAR_P (decl) && TREE_READONLY (decl) && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) diff --git a/libgomp/testsuite/libgomp.fortran/declare-target-indirect-4.f90 b/libgomp/testsuite/libgomp.fortran/declare-target-indirect-4.f90 new file mode 100644 index 000000000000..43f4295494ce --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/declare-target-indirect-4.f90 @@ -0,0 +1,43 @@ +! { dg-additional-options "-fdump-tree-gimple" } + +! PR fortran/114283 + +! { dg-final { scan-tree-dump "#pragma omp parallel shared\\(i\\) if\\(0\\) default\\(none\\) firstprivate\\(g\\)" "gimple" } } +! { dg-final { scan-tree-dump "#pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) firstprivate\\(h\\) map\\(from:j \\\[len: 4\\\]\\) defaultmap\\(none\\)" "gimple" } } + + +module m + implicit none (type, external) + !$omp declare target indirect enter(f1, f2) +contains + integer function f1 () + f1 = 99 + end + integer function f2 () + f2 = 89 + end +end module m + +use m +implicit none (type, external) +call sub1(f1) +call sub2(f2) +contains + subroutine sub1(g) + procedure(integer) :: g + integer :: i + !$omp parallel default(none) if(.false.) shared(i) + i = g () + !$omp end parallel + if (i /= 99) stop 1 + end + + subroutine sub2(h) + procedure(integer) :: h + integer :: j + !$omp target defaultmap(none) map(from:j) + j = h () + !$omp end target + if (j /= 89) stop 1 + end +end From 0613b12dd7f6274a1aac07f295ed51d86c2c85f1 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 13 Mar 2024 10:19:04 +0100 Subject: [PATCH 034/551] bitint: Fix up lowering of bitfield loads/stores [PR114313] The following testcase ICEs, because for large/huge _BitInt bitfield loads/stores we use the DECL_BIT_FIELD_REPRESENTATIVE as the underlying "var" and indexes into it can be larger than the precision of the bitfield might normally allow. The following patch fixes that by passing NULL_TREE type in that case to limb_access, so that we always return m_limb_type type and don't do the extra assertions, after all, the callers expect that too. I had to add the first hunk to avoid ICE, it was using type in one place even when it was NULL. But TYPE_SIZE (TREE_TYPE (var)) seems like the right size to use anyway because the code uses VIEW_CONVERT_EXPR on it. 2024-03-13 Jakub Jelinek <jakub@redhat.com> PR middle-end/114313 * gimple-lower-bitint.cc (bitint_large_huge::limb_access): Use TYPE_SIZE of TREE_TYPE (var) rather than TYPE_SIZE of type. (bitint_large_huge::handle_load): Pass NULL_TREE rather than rhs_type to limb_access for the bitfield load cases. (bitint_large_huge::lower_mergeable_stmt): Pass NULL_TREE rather than lhs_type to limb_access if nlhs is non-NULL. * gcc.dg/torture/bitint-62.c: New test. --- gcc/gimple-lower-bitint.cc | 15 +++++++------ gcc/testsuite/gcc.dg/torture/bitint-62.c | 28 ++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-62.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 65e4ab3f105e..b58220f564c9 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -640,7 +640,7 @@ bitint_large_huge::limb_access (tree type, tree var, tree idx, bool write_p) TREE_TYPE (TREE_TYPE (var)))) { unsigned HOST_WIDE_INT nelts - = CEIL (tree_to_uhwi (TYPE_SIZE (type)), limb_prec); + = CEIL (tree_to_uhwi (TYPE_SIZE (TREE_TYPE (var))), limb_prec); tree atype = build_array_type_nelts (ltype, nelts); var = build1 (VIEW_CONVERT_EXPR, atype, var); } @@ -1854,7 +1854,7 @@ bitint_large_huge::handle_load (gimple *stmt, tree idx) m_gsi = gsi_after_labels (gsi_bb (m_gsi)); else gsi_next (&m_gsi); - tree t = limb_access (rhs_type, nrhs1, size_int (bo_idx), true); + tree t = limb_access (NULL_TREE, nrhs1, size_int (bo_idx), true); tree iv = make_ssa_name (m_limb_type); g = gimple_build_assign (iv, t); insert_before (g); @@ -1941,7 +1941,7 @@ bitint_large_huge::handle_load (gimple *stmt, tree idx) tree iv2 = NULL_TREE; if (nidx0) { - tree t = limb_access (rhs_type, nrhs1, nidx0, true); + tree t = limb_access (NULL_TREE, nrhs1, nidx0, true); iv = make_ssa_name (m_limb_type); g = gimple_build_assign (iv, t); insert_before (g); @@ -1966,7 +1966,7 @@ bitint_large_huge::handle_load (gimple *stmt, tree idx) if_then (g, profile_probability::likely (), edge_true, edge_false); } - tree t = limb_access (rhs_type, nrhs1, nidx1, true); + tree t = limb_access (NULL_TREE, nrhs1, nidx1, true); if (m_upwards_2limb && !m_first && !m_bitfld_load @@ -2728,8 +2728,8 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, /* Otherwise, stores to any other lhs. */ if (!done) { - tree l = limb_access (lhs_type, nlhs ? nlhs : lhs, - nidx, true); + tree l = limb_access (nlhs ? NULL_TREE : lhs_type, + nlhs ? nlhs : lhs, nidx, true); g = gimple_build_assign (l, rhs1); } insert_before (g); @@ -2873,7 +2873,8 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, /* Otherwise, stores to any other lhs. */ if (!done) { - tree l = limb_access (lhs_type, nlhs ? nlhs : lhs, nidx, true); + tree l = limb_access (nlhs ? NULL_TREE : lhs_type, + nlhs ? nlhs : lhs, nidx, true); g = gimple_build_assign (l, rhs1); } insert_before (g); diff --git a/gcc/testsuite/gcc.dg/torture/bitint-62.c b/gcc/testsuite/gcc.dg/torture/bitint-62.c new file mode 100644 index 000000000000..0dd5ad8942e8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-62.c @@ -0,0 +1,28 @@ +/* PR middle-end/114313 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c23" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 256 +struct S { _BitInt(257) : 257; _BitInt(256) b : 182; } s; + +__attribute__((noipa)) _BitInt(256) +foo (void) +{ + return s.b; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 256 + s.b = 1414262180967678524960294186228886540125217087586381431wb; + if (foo () != 1414262180967678524960294186228886540125217087586381431wb) + __builtin_abort (); + s.b = -581849792837428541666755934071828568425158644418477999wb; + if (foo () != -581849792837428541666755934071828568425158644418477999wb) + __builtin_abort (); +#endif +} From b59f0c9c5a4838658dd2a1db58ac09d9f3be0f51 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Wed, 13 Mar 2024 10:59:02 +0100 Subject: [PATCH 035/551] s390: Deprecate some vector builtins According to IBM Open XL C/C++ for z/OS version 1.1 builtins - vec_permi - vec_ctd - vec_ctsl - vec_ctul - vec_ld2f - vec_st2f are deprecated. Also deprecate helper builtins vec_ctd_s64 and vec_ctd_u64. Furthermore, the overloads of vec_insert which make use of a bool vector are deprecated, too. gcc/ChangeLog: * config/s390/s390-builtins.def (vec_permi): Deprecate. (vec_ctd): Deprecate. (vec_ctd_s64): Deprecate. (vec_ctd_u64): Deprecate. (vec_ctsl): Deprecate. (vec_ctul): Deprecate. (vec_ld2f): Deprecate. (vec_st2f): Deprecate. (vec_insert): Deprecate overloads with bool vectors. --- gcc/config/s390/s390-builtins.def | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def index 680a038fa4b5..54f400ceb5a8 100644 --- a/gcc/config/s390/s390-builtins.def +++ b/gcc/config/s390/s390-builtins.def @@ -416,16 +416,16 @@ B_DEF (s390_vec_splat_s64, vec_splatsv2di, 0, OB_DEF (s390_vec_insert, s390_vec_insert_s8, s390_vec_insert_dbl,B_VX, BT_FN_OV4SI_INT_OV4SI_INT) OB_DEF_VAR (s390_vec_insert_s8, s390_vlvgb, 0, O3_ELEM, BT_OV_V16QI_SCHAR_V16QI_INT) OB_DEF_VAR (s390_vec_insert_u8, s390_vlvgb, 0, O3_ELEM, BT_OV_UV16QI_UCHAR_UV16QI_INT) -OB_DEF_VAR (s390_vec_insert_b8, s390_vlvgb, 0, O3_ELEM, BT_OV_UV16QI_UCHAR_BV16QI_INT) +OB_DEF_VAR (s390_vec_insert_b8, s390_vlvgb, B_DEP, O3_ELEM, BT_OV_UV16QI_UCHAR_BV16QI_INT) OB_DEF_VAR (s390_vec_insert_s16, s390_vlvgh, 0, O3_ELEM, BT_OV_V8HI_SHORT_V8HI_INT) OB_DEF_VAR (s390_vec_insert_u16, s390_vlvgh, 0, O3_ELEM, BT_OV_UV8HI_USHORT_UV8HI_INT) -OB_DEF_VAR (s390_vec_insert_b16, s390_vlvgh, 0, O3_ELEM, BT_OV_UV8HI_USHORT_BV8HI_INT) +OB_DEF_VAR (s390_vec_insert_b16, s390_vlvgh, B_DEP, O3_ELEM, BT_OV_UV8HI_USHORT_BV8HI_INT) OB_DEF_VAR (s390_vec_insert_s32, s390_vlvgf, 0, O3_ELEM, BT_OV_V4SI_INT_V4SI_INT) OB_DEF_VAR (s390_vec_insert_u32, s390_vlvgf, 0, O3_ELEM, BT_OV_UV4SI_UINT_UV4SI_INT) -OB_DEF_VAR (s390_vec_insert_b32, s390_vlvgf, 0, O3_ELEM, BT_OV_UV4SI_UINT_BV4SI_INT) +OB_DEF_VAR (s390_vec_insert_b32, s390_vlvgf, B_DEP, O3_ELEM, BT_OV_UV4SI_UINT_BV4SI_INT) OB_DEF_VAR (s390_vec_insert_s64, s390_vlvgg, 0, O3_ELEM, BT_OV_V2DI_LONGLONG_V2DI_INT) OB_DEF_VAR (s390_vec_insert_u64, s390_vlvgg, 0, O3_ELEM, BT_OV_UV2DI_ULONGLONG_UV2DI_INT) -OB_DEF_VAR (s390_vec_insert_b64, s390_vlvgg, 0, O3_ELEM, BT_OV_UV2DI_ULONGLONG_BV2DI_INT) +OB_DEF_VAR (s390_vec_insert_b64, s390_vlvgg, B_DEP, O3_ELEM, BT_OV_UV2DI_ULONGLONG_BV2DI_INT) OB_DEF_VAR (s390_vec_insert_flt, s390_vlvgf_flt, B_VXE, O3_ELEM, BT_OV_V4SF_FLT_V4SF_INT) /* vlvgf */ OB_DEF_VAR (s390_vec_insert_dbl, s390_vlvgg_dbl, 0, O3_ELEM, BT_OV_V2DF_DBL_V2DF_INT) /* vlvgg */ @@ -658,7 +658,7 @@ OB_DEF_VAR (s390_vec_perm_dbl, s390_vperm, 0, B_DEF (s390_vperm, vec_permv16qi, 0, B_VX, 0, BT_FN_UV16QI_UV16QI_UV16QI_UV16QI) -OB_DEF (s390_vec_permi, s390_vec_permi_s64, s390_vec_permi_dbl, B_VX, BT_FN_OV4SI_OV4SI_OV4SI_INT) +OB_DEF (s390_vec_permi, s390_vec_permi_s64, s390_vec_permi_dbl, B_DEP | B_VX, BT_FN_OV4SI_OV4SI_OV4SI_INT) OB_DEF_VAR (s390_vec_permi_s64, s390_vpdi, 0, O3_U2, BT_OV_V2DI_V2DI_V2DI_INT) OB_DEF_VAR (s390_vec_permi_b64, s390_vpdi, 0, O3_U2, BT_OV_BV2DI_BV2DI_BV2DI_INT) OB_DEF_VAR (s390_vec_permi_u64, s390_vpdi, 0, O3_U2, BT_OV_UV2DI_UV2DI_UV2DI_INT) @@ -2806,7 +2806,7 @@ OB_DEF (s390_vec_any_ngt, s390_vec_any_ngt_flt,s390_vec_any_ngt_db OB_DEF_VAR (s390_vec_any_ngt_flt, vec_any_unlev4sf, B_VXE, 0, BT_OV_INT_V4SF_V4SF) OB_DEF_VAR (s390_vec_any_ngt_dbl, vec_any_unlev2df, 0, 0, BT_OV_INT_V2DF_V2DF) -OB_DEF (s390_vec_ctd, s390_vec_ctd_s64, s390_vec_ctd_u64, B_VX, BT_FN_V2DF_UV4SI_INT) +OB_DEF (s390_vec_ctd, s390_vec_ctd_s64, s390_vec_ctd_u64, B_DEP | B_VX, BT_FN_V2DF_UV4SI_INT) OB_DEF_VAR (s390_vec_ctd_s64, s390_vec_ctd_s64, 0, O2_U5, BT_OV_V2DF_V2DI_INT) /* vcdgb */ OB_DEF_VAR (s390_vec_ctd_u64, s390_vec_ctd_u64, 0, O2_U5, BT_OV_V2DF_UV2DI_INT) /* vcdlgb */ @@ -2814,10 +2814,10 @@ OB_DEF (s390_vfi, s390_vfi_flt, s390_vfi_dbl, OB_DEF_VAR (s390_vfi_flt, s390_vfisb, B_VXE, O2_U4 | O3_U3, BT_OV_V4SF_V4SF_UCHAR_UCHAR) /* vfisb */ OB_DEF_VAR (s390_vfi_dbl, s390_vfidb, 0, O2_U4 | O3_U3, BT_OV_V2DF_V2DF_UCHAR_UCHAR) /* vfidb */ -B_DEF (s390_vec_ctd_s64, vec_ctd_s64, 0, B_VX, O2_U3, BT_FN_V2DF_V2DI_INT) /* vcdgb */ -B_DEF (s390_vec_ctd_u64, vec_ctd_u64, 0, B_VX, O2_U3, BT_FN_V2DF_UV2DI_INT) /* vcdlgb */ -B_DEF (s390_vec_ctsl, vec_ctsl, 0, B_VX, O2_U3, BT_FN_V2DI_V2DF_INT) /* vcgdb */ -B_DEF (s390_vec_ctul, vec_ctul, 0, B_VX, O2_U3, BT_FN_UV2DI_V2DF_INT) /* vclgdb */ +B_DEF (s390_vec_ctd_s64, vec_ctd_s64, 0, B_DEP | B_VX, O2_U3, BT_FN_V2DF_V2DI_INT) /* vcdgb */ +B_DEF (s390_vec_ctd_u64, vec_ctd_u64, 0, B_DEP | B_VX, O2_U3, BT_FN_V2DF_UV2DI_INT) /* vcdlgb */ +B_DEF (s390_vec_ctsl, vec_ctsl, 0, B_DEP | B_VX, O2_U3, BT_FN_V2DI_V2DF_INT) /* vcgdb */ +B_DEF (s390_vec_ctul, vec_ctul, 0, B_DEP | B_VX, O2_U3, BT_FN_UV2DI_V2DF_INT) /* vclgdb */ OB_DEF (s390_vec_float, s390_vec_float_s32, s390_vec_float_u32, B_VXE2, BT_FN_OV4SI_OV4SI) @@ -2848,8 +2848,8 @@ B_DEF (s390_vclgdb, fixuns_truncv2dfv2di2, 0, B_DEF (s390_vfisb, vec_fpintv4sf, 0, B_VXE, O2_U4 | O3_U3, BT_FN_V4SF_V4SF_UCHAR_UCHAR) B_DEF (s390_vfidb, vec_fpintv2df, 0, B_VX, O2_U4 | O3_U3, BT_FN_V2DF_V2DF_UCHAR_UCHAR) -B_DEF (s390_vec_ld2f, vec_ld2f, 0, B_VX, 0, BT_FN_V2DF_FLTCONSTPTR) /* vldeb */ -B_DEF (s390_vec_st2f, vec_st2f, 0, B_VX, 0, BT_FN_VOID_V2DF_FLTPTR) /* vledb */ +B_DEF (s390_vec_ld2f, vec_ld2f, 0, B_DEP | B_VX, 0, BT_FN_V2DF_FLTCONSTPTR) /* vldeb */ +B_DEF (s390_vec_st2f, vec_st2f, 0, B_DEP | B_VX, 0, BT_FN_VOID_V2DF_FLTPTR) /* vledb */ B_DEF (s390_vfmasb, fmav4sf4, 0, B_VXE, 0, BT_FN_V4SF_V4SF_V4SF_V4SF) B_DEF (s390_vfmadb, fmav2df4, 0, B_VX, 0, BT_FN_V2DF_V2DF_V2DF_V2DF) From 9f2b16ce1efef0648a6d52c1d744735c46e2eec1 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Wed, 13 Mar 2024 11:03:02 +0100 Subject: [PATCH 036/551] s390: Streamline vector builtins with LLVM Similar as to s390_lcbb, s390_vll, s390_vstl, et al. make use of a signed vector type for vlbb. Furthermore, a const void pointer seems more common and an integer for the mask. For s390_vfi(s,d)b make use of integers for masks, too. Use unsigned integers for all s390_vlbr/vstbr variants. Make use of type UV16QI for the length operand of s390_vstrs(,z)(h,f). Following the Principles of Operation, change from signed to unsigned type for s390_va(c,cc,ccc)q and s390_vs(,c,bc)biq and s390_vmslg. Make use of scalar type UINT128 instead of UV16QI for s390_vgfm(,a)g, and s390_vsumq(f,g). gcc/ChangeLog: * config/s390/s390-builtin-types.def: Update to reflect latest changes. * config/s390/s390-builtins.def: Streamline vector builtins with LLVM. --- gcc/config/s390/s390-builtin-types.def | 23 ++++++------ gcc/config/s390/s390-builtins.def | 48 +++++++++++++------------- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/gcc/config/s390/s390-builtin-types.def b/gcc/config/s390/s390-builtin-types.def index 556104e0e239..d70eaade8eab 100644 --- a/gcc/config/s390/s390-builtin-types.def +++ b/gcc/config/s390/s390-builtin-types.def @@ -69,6 +69,7 @@ DEF_TYPE (BT_SHORTCONST, short_integer_type_node, 1) DEF_TYPE (BT_UCHAR, unsigned_char_type_node, 0) DEF_TYPE (BT_UCHARCONST, unsigned_char_type_node, 1) DEF_TYPE (BT_UINT, unsigned_type_node, 0) +DEF_TYPE (BT_UINT128, unsigned_intTI_type_node, 0) DEF_TYPE (BT_UINT64, c_uint64_type_node, 0) DEF_TYPE (BT_UINTCONST, unsigned_type_node, 1) DEF_TYPE (BT_ULONG, long_unsigned_type_node, 0) @@ -83,7 +84,6 @@ DEF_VECTOR_TYPE (BT_UV2DI, BT_ULONGLONG, 2) DEF_VECTOR_TYPE (BT_UV4SI, BT_UINT, 4) DEF_VECTOR_TYPE (BT_UV8HI, BT_USHORT, 8) DEF_VECTOR_TYPE (BT_V16QI, BT_SCHAR, 16) -DEF_VECTOR_TYPE (BT_V1TI, BT_INT128, 1) DEF_VECTOR_TYPE (BT_V2DF, BT_DBL, 2) DEF_VECTOR_TYPE (BT_V2DI, BT_LONGLONG, 2) DEF_VECTOR_TYPE (BT_V4SF, BT_FLT, 4) @@ -114,9 +114,11 @@ DEF_POINTER_TYPE (BT_VOIDCONSTPTR, BT_VOIDCONST) DEF_POINTER_TYPE (BT_VOIDPTR, BT_VOID) DEF_DISTINCT_TYPE (BT_BCHAR, BT_UCHAR) DEF_DISTINCT_TYPE (BT_BINT, BT_UINT) +DEF_DISTINCT_TYPE (BT_BINT128, BT_UINT128) DEF_DISTINCT_TYPE (BT_BLONGLONG, BT_ULONGLONG) DEF_DISTINCT_TYPE (BT_BSHORT, BT_USHORT) DEF_OPAQUE_VECTOR_TYPE (BT_BV16QI, BT_BCHAR, 16) +DEF_OPAQUE_VECTOR_TYPE (BT_BV1TI, BT_BINT128, 1) DEF_OPAQUE_VECTOR_TYPE (BT_BV2DI, BT_BLONGLONG, 2) DEF_OPAQUE_VECTOR_TYPE (BT_BV4SI, BT_BINT, 4) DEF_OPAQUE_VECTOR_TYPE (BT_BV8HI, BT_BSHORT, 8) @@ -131,6 +133,7 @@ DEF_FN_TYPE_1 (BT_FN_INT_VOIDPTR, BT_INT, BT_VOIDPTR) DEF_FN_TYPE_1 (BT_FN_OV4SI_INT, BT_OV4SI, BT_INT) DEF_FN_TYPE_1 (BT_FN_OV4SI_INTCONSTPTR, BT_OV4SI, BT_INTCONSTPTR) DEF_FN_TYPE_1 (BT_FN_OV4SI_OV4SI, BT_OV4SI, BT_OV4SI) +DEF_FN_TYPE_1 (BT_FN_UINT128_UINT128, BT_UINT128, BT_UINT128) DEF_FN_TYPE_1 (BT_FN_UV16QI_UCHAR, BT_UV16QI, BT_UCHAR) DEF_FN_TYPE_1 (BT_FN_UV16QI_UCHARCONSTPTR, BT_UV16QI, BT_UCHARCONSTPTR) DEF_FN_TYPE_1 (BT_FN_UV16QI_USHORT, BT_UV16QI, BT_USHORT) @@ -154,7 +157,6 @@ DEF_FN_TYPE_1 (BT_FN_UV8HI_UV8HI, BT_UV8HI, BT_UV8HI) DEF_FN_TYPE_1 (BT_FN_V16QI_SCHAR, BT_V16QI, BT_SCHAR) DEF_FN_TYPE_1 (BT_FN_V16QI_UCHAR, BT_V16QI, BT_UCHAR) DEF_FN_TYPE_1 (BT_FN_V16QI_V16QI, BT_V16QI, BT_V16QI) -DEF_FN_TYPE_1 (BT_FN_V1TI_V1TI, BT_V1TI, BT_V1TI) DEF_FN_TYPE_1 (BT_FN_V2DF_DBL, BT_V2DF, BT_DBL) DEF_FN_TYPE_1 (BT_FN_V2DF_DBLCONSTPTR, BT_V2DF, BT_DBLCONSTPTR) DEF_FN_TYPE_1 (BT_FN_V2DF_FLTCONSTPTR, BT_V2DF, BT_FLTCONSTPTR) @@ -207,18 +209,18 @@ DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI) DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI_UCHAR, BT_OV4SI, BT_OV4SI, BT_UCHAR) DEF_FN_TYPE_2 (BT_FN_OV4SI_OV4SI_ULONG, BT_OV4SI, BT_OV4SI, BT_ULONG) DEF_FN_TYPE_2 (BT_FN_UCHAR_UV16QI_INT, BT_UCHAR, BT_UV16QI, BT_INT) +DEF_FN_TYPE_2 (BT_FN_UINT128_UINT128_UINT128, BT_UINT128, BT_UINT128, BT_UINT128) +DEF_FN_TYPE_2 (BT_FN_UINT128_UV2DI_UV2DI, BT_UINT128, BT_UV2DI, BT_UV2DI) +DEF_FN_TYPE_2 (BT_FN_UINT128_UV4SI_UV4SI, BT_UINT128, BT_UV4SI, BT_UV4SI) DEF_FN_TYPE_2 (BT_FN_UINT_UV4SI_INT, BT_UINT, BT_UV4SI, BT_INT) DEF_FN_TYPE_2 (BT_FN_UINT_VOIDCONSTPTR_INT, BT_UINT, BT_VOIDCONSTPTR, BT_INT) DEF_FN_TYPE_2 (BT_FN_ULONGLONG_UV2DI_INT, BT_ULONGLONG, BT_UV2DI, BT_INT) DEF_FN_TYPE_2 (BT_FN_USHORT_UV8HI_INT, BT_USHORT, BT_UV8HI, BT_INT) -DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHARCONSTPTR_USHORT, BT_UV16QI, BT_UCHARCONSTPTR, BT_USHORT) DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHAR_INT, BT_UV16QI, BT_UCHAR, BT_INT) DEF_FN_TYPE_2 (BT_FN_UV16QI_UCHAR_UCHAR, BT_UV16QI, BT_UCHAR, BT_UCHAR) DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_INTPTR, BT_UV16QI, BT_UV16QI, BT_INTPTR) DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_UCHAR, BT_UV16QI, BT_UV16QI, BT_UCHAR) DEF_FN_TYPE_2 (BT_FN_UV16QI_UV16QI_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI) -DEF_FN_TYPE_2 (BT_FN_UV16QI_UV2DI_UV2DI, BT_UV16QI, BT_UV2DI, BT_UV2DI) -DEF_FN_TYPE_2 (BT_FN_UV16QI_UV4SI_UV4SI, BT_UV16QI, BT_UV4SI, BT_UV4SI) DEF_FN_TYPE_2 (BT_FN_UV16QI_UV8HI_UV8HI, BT_UV16QI, BT_UV8HI, BT_UV8HI) DEF_FN_TYPE_2 (BT_FN_UV2DI_UCHAR_UCHAR, BT_UV2DI, BT_UCHAR, BT_UCHAR) DEF_FN_TYPE_2 (BT_FN_UV2DI_ULONGLONG_INT, BT_UV2DI, BT_ULONGLONG, BT_INT) @@ -249,6 +251,7 @@ DEF_FN_TYPE_2 (BT_FN_V16QI_UINT_VOIDCONSTPTR, BT_V16QI, BT_UINT, BT_VOIDCONSTPTR DEF_FN_TYPE_2 (BT_FN_V16QI_UV16QI_UV16QI, BT_V16QI, BT_UV16QI, BT_UV16QI) DEF_FN_TYPE_2 (BT_FN_V16QI_V16QI_V16QI, BT_V16QI, BT_V16QI, BT_V16QI) DEF_FN_TYPE_2 (BT_FN_V16QI_V8HI_V8HI, BT_V16QI, BT_V8HI, BT_V8HI) +DEF_FN_TYPE_2 (BT_FN_V16QI_VOIDCONSTPTR_INT, BT_V16QI, BT_VOIDCONSTPTR, BT_INT) DEF_FN_TYPE_2 (BT_FN_V2DF_DBL_INT, BT_V2DF, BT_DBL, BT_INT) DEF_FN_TYPE_2 (BT_FN_V2DF_UV2DI_INT, BT_V2DF, BT_UV2DI, BT_INT) DEF_FN_TYPE_2 (BT_FN_V2DF_UV4SI_INT, BT_V2DF, BT_UV4SI, BT_INT) @@ -281,7 +284,6 @@ DEF_FN_TYPE_2 (BT_FN_VOID_UINT64PTR_UINT64, BT_VOID, BT_UINT64PTR, BT_UINT64) DEF_FN_TYPE_2 (BT_FN_VOID_V2DF_FLTPTR, BT_VOID, BT_V2DF, BT_FLTPTR) DEF_FN_TYPE_3 (BT_FN_BV2DI_V2DF_USHORT_INTPTR, BT_BV2DI, BT_V2DF, BT_USHORT, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_BV4SI_V4SF_USHORT_INTPTR, BT_BV4SI, BT_V4SF, BT_USHORT, BT_INTPTR) -DEF_FN_TYPE_3 (BT_FN_INT128_INT128_INT128_INT128, BT_INT128, BT_INT128, BT_INT128, BT_INT128) DEF_FN_TYPE_3 (BT_FN_INT_OV4SI_OV4SI_INTPTR, BT_INT, BT_OV4SI, BT_OV4SI, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_OV4SI_INT_OV4SI_INT, BT_OV4SI, BT_INT, BT_OV4SI, BT_INT) DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_INT_INTPTR, BT_OV4SI, BT_OV4SI, BT_INT, BT_INTPTR) @@ -291,11 +293,12 @@ DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_O DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_UCHAR, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_UCHAR) DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_UINT, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_UINT) DEF_FN_TYPE_3 (BT_FN_OV4SI_OV4SI_OV4SI_ULONGLONG, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_ULONGLONG) +DEF_FN_TYPE_3 (BT_FN_UINT128_UINT128_UINT128_UINT128, BT_UINT128, BT_UINT128, BT_UINT128, BT_UINT128) +DEF_FN_TYPE_3 (BT_FN_UINT128_UV2DI_UV2DI_UINT128, BT_UINT128, BT_UV2DI, BT_UV2DI, BT_UINT128) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UCHAR_INT, BT_UV16QI, BT_UV16QI, BT_UCHAR, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INT, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_INTPTR, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI) -DEF_FN_TYPE_3 (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI, BT_UV16QI, BT_UV2DI, BT_UV2DI, BT_UV16QI) DEF_FN_TYPE_3 (BT_FN_UV16QI_UV8HI_UV8HI_INTPTR, BT_UV16QI, BT_UV8HI, BT_UV8HI, BT_INTPTR) DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_ULONGLONG_INT, BT_UV2DI, BT_UV2DI, BT_ULONGLONG, BT_INT) DEF_FN_TYPE_3 (BT_FN_UV2DI_UV2DI_UV2DI_INT, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_INT) @@ -350,22 +353,22 @@ DEF_FN_TYPE_3 (BT_FN_V8HI_V8HI_V8HI_V8HI, BT_V8HI, BT_V8HI, BT_V8HI, BT_V8HI) DEF_FN_TYPE_3 (BT_FN_VOID_OV4SI_INT_VOIDPTR, BT_VOID, BT_OV4SI, BT_INT, BT_VOIDPTR) DEF_FN_TYPE_3 (BT_FN_VOID_OV4SI_VOIDPTR_UINT, BT_VOID, BT_OV4SI, BT_VOIDPTR, BT_UINT) DEF_FN_TYPE_3 (BT_FN_VOID_V16QI_UINT_VOIDPTR, BT_VOID, BT_V16QI, BT_UINT, BT_VOIDPTR) -DEF_FN_TYPE_4 (BT_FN_INT128_UV2DI_UV2DI_INT128_INT, BT_INT128, BT_UV2DI, BT_UV2DI, BT_INT128, BT_INT) DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OUV4SI_INTCONSTPTR_UCHAR, BT_OV4SI, BT_OV4SI, BT_OUV4SI, BT_INTCONSTPTR, BT_UCHAR) DEF_FN_TYPE_4 (BT_FN_OV4SI_OV4SI_OV4SI_OV4SI_INTPTR, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_OV4SI, BT_INTPTR) +DEF_FN_TYPE_4 (BT_FN_UINT128_UV2DI_UV2DI_UINT128_INT, BT_UINT128, BT_UV2DI, BT_UV2DI, BT_UINT128, BT_INT) DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_INT_INTPTR, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT, BT_INTPTR) DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INT, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INT) DEF_FN_TYPE_4 (BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INTPTR, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_UV16QI, BT_INTPTR) DEF_FN_TYPE_4 (BT_FN_UV16QI_UV2DI_UV2DI_UV16QI_INT, BT_UV16QI, BT_UV2DI, BT_UV2DI, BT_UV16QI, BT_INT) +DEF_FN_TYPE_4 (BT_FN_UV16QI_UV4SI_UV4SI_UV16QI_INTPTR, BT_UV16QI, BT_UV4SI, BT_UV4SI, BT_UV16QI, BT_INTPTR) +DEF_FN_TYPE_4 (BT_FN_UV16QI_UV8HI_UV8HI_UV16QI_INTPTR, BT_UV16QI, BT_UV8HI, BT_UV8HI, BT_UV16QI, BT_INTPTR) DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_UV2DI_ULONGLONGCONSTPTR_UCHAR, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_ULONGLONGCONSTPTR, BT_UCHAR) DEF_FN_TYPE_4 (BT_FN_UV2DI_UV2DI_UV2DI_UV2DI_INT, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_UV2DI, BT_INT) DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_INT_INTPTR, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT, BT_INTPTR) DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_UINTCONSTPTR_UCHAR, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UINTCONSTPTR, BT_UCHAR) DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_UV4SI_INT, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_INT) -DEF_FN_TYPE_4 (BT_FN_UV4SI_UV4SI_UV4SI_UV8HI_INTPTR, BT_UV4SI, BT_UV4SI, BT_UV4SI, BT_UV8HI, BT_INTPTR) DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_INT_INTPTR, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT, BT_INTPTR) DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INT, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INT) -DEF_FN_TYPE_4 (BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INTPTR, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_UV8HI, BT_INTPTR) DEF_FN_TYPE_4 (BT_FN_VOID_UV2DI_UV2DI_ULONGLONGPTR_ULONGLONG, BT_VOID, BT_UV2DI, BT_UV2DI, BT_ULONGLONGPTR, BT_ULONGLONG) DEF_FN_TYPE_4 (BT_FN_VOID_UV4SI_UV4SI_UINTPTR_ULONGLONG, BT_VOID, BT_UV4SI, BT_UV4SI, BT_UINTPTR, BT_ULONGLONG) DEF_FN_TYPE_4 (BT_FN_VOID_V4SI_V4SI_INTPTR_ULONGLONG, BT_VOID, BT_V4SI, BT_V4SI, BT_INTPTR, BT_ULONGLONG) diff --git a/gcc/config/s390/s390-builtins.def b/gcc/config/s390/s390-builtins.def index 54f400ceb5a8..3a63213e5719 100644 --- a/gcc/config/s390/s390-builtins.def +++ b/gcc/config/s390/s390-builtins.def @@ -510,7 +510,7 @@ OB_DEF_VAR (s390_vec_load_bndry_u64, s390_vlbb, 0, OB_DEF_VAR (s390_vec_load_bndry_flt, s390_vlbb, B_VXE, O2_U16, BT_OV_V4SF_FLTCONSTPTR_USHORT) OB_DEF_VAR (s390_vec_load_bndry_dbl, s390_vlbb, 0, O2_U16, BT_OV_V2DF_DBLCONSTPTR_USHORT) -B_DEF (s390_vlbb, vlbb, 0, B_VX, O2_U3, BT_FN_UV16QI_UCHARCONSTPTR_USHORT) +B_DEF (s390_vlbb, vlbb, 0, B_VX, O2_U3, BT_FN_V16QI_VOIDCONSTPTR_INT) OB_DEF (s390_vec_load_pair, s390_vec_load_pair_s64,s390_vec_load_pair_u64,B_VX, BT_FN_OV2DI_LONGLONG_LONGLONG) OB_DEF_VAR (s390_vec_load_pair_s64, MAX, 0, 0, BT_OV_V2DI_LONGLONG_LONGLONG) /* vlvgp */ @@ -852,9 +852,9 @@ B_DEF (s390_vec_adde_u128, vacq, 0, B_DEF (s390_vec_addec_u128, vacccq, 0, B_VX, 0, BT_FN_UV16QI_UV16QI_UV16QI_UV16QI) B_DEF (s390_vaq, addti3, 0, B_VX, 0, BT_FN_INT128_INT128_INT128) -B_DEF (s390_vaccq, vaccq_ti, 0, B_VX, 0, BT_FN_INT128_INT128_INT128) -B_DEF (s390_vacq, vacq, 0, B_VX, 0, BT_FN_INT128_INT128_INT128_INT128) -B_DEF (s390_vacccq, vacccq, 0, B_VX, 0, BT_FN_INT128_INT128_INT128_INT128) +B_DEF (s390_vaccq, vaccq_ti, 0, B_VX, 0, BT_FN_UINT128_UINT128_UINT128) +B_DEF (s390_vacq, vacq, 0, B_VX, 0, BT_FN_UINT128_UINT128_UINT128_UINT128) +B_DEF (s390_vacccq, vacccq, 0, B_VX, 0, BT_FN_UINT128_UINT128_UINT128_UINT128) OB_DEF (s390_vec_and, s390_vec_and_b8, s390_vec_and_dbl_c, B_VX, BT_FN_OV4SI_OV4SI_OV4SI) OB_DEF_VAR (s390_vec_and_b8, s390_vn, 0, 0, BT_OV_BV16QI_BV16QI_BV16QI) @@ -1665,7 +1665,7 @@ OB_DEF_VAR (s390_vec_gfmsum_u32, s390_vgfmf, 0, B_DEF (s390_vgfmb, vec_gfmsumv16qi, 0, B_VX, 0, BT_FN_UV8HI_UV16QI_UV16QI) B_DEF (s390_vgfmh, vec_gfmsumv8hi, 0, B_VX, 0, BT_FN_UV4SI_UV8HI_UV8HI) B_DEF (s390_vgfmf, vec_gfmsumv4si, 0, B_VX, 0, BT_FN_UV2DI_UV4SI_UV4SI) -B_DEF (s390_vgfmg, vec_gfmsum_128, 0, B_VX, 0, BT_FN_UV16QI_UV2DI_UV2DI) +B_DEF (s390_vgfmg, vec_gfmsum_128, 0, B_VX, 0, BT_FN_UINT128_UV2DI_UV2DI) OB_DEF (s390_vec_gfmsum_accum, s390_vec_gfmsum_accum_u8,s390_vec_gfmsum_accum_u32,B_VX, BT_FN_OV4SI_OV4SI_OV4SI_OV4SI) OB_DEF_VAR (s390_vec_gfmsum_accum_u8, s390_vgfmab, 0, 0, BT_OV_UV8HI_UV16QI_UV16QI_UV8HI) @@ -1675,7 +1675,7 @@ OB_DEF_VAR (s390_vec_gfmsum_accum_u32, s390_vgfmaf, 0, B_DEF (s390_vgfmab, vec_gfmsum_accumv16qi,0, B_VX, 0, BT_FN_UV8HI_UV16QI_UV16QI_UV8HI) B_DEF (s390_vgfmah, vec_gfmsum_accumv8hi,0, B_VX, 0, BT_FN_UV4SI_UV8HI_UV8HI_UV4SI) B_DEF (s390_vgfmaf, vec_gfmsum_accumv4si,0, B_VX, 0, BT_FN_UV2DI_UV4SI_UV4SI_UV2DI) -B_DEF (s390_vgfmag, vec_gfmsum_accum_128,0, B_VX, 0, BT_FN_UV16QI_UV2DI_UV2DI_UV16QI) +B_DEF (s390_vgfmag, vec_gfmsum_accum_128,0, B_VX, 0, BT_FN_UINT128_UV2DI_UV2DI_UINT128) OB_DEF (s390_vec_abs, s390_vec_abs_s8, s390_vec_abs_dbl, B_VX, BT_FN_OV4SI_OV4SI) OB_DEF_VAR (s390_vec_abs_s8, s390_vlpb, 0, 0, BT_OV_V16QI_V16QI) @@ -2263,9 +2263,9 @@ B_DEF (s390_vec_sube_u128, vsbiq, 0, B_DEF (s390_vec_subec_u128, vsbcbiq, 0, B_VX, 0, BT_FN_UV16QI_UV16QI_UV16QI_UV16QI) B_DEF (s390_vsq, subti3, 0, B_VX, 0, BT_FN_INT128_INT128_INT128) -B_DEF (s390_vscbiq, vscbiq_ti, 0, B_VX, 0, BT_FN_INT128_INT128_INT128) -B_DEF (s390_vsbiq, vsbiq, 0, B_VX, 0, BT_FN_INT128_INT128_INT128_INT128) -B_DEF (s390_vsbcbiq, vsbcbiq, 0, B_VX, 0, BT_FN_INT128_INT128_INT128_INT128) +B_DEF (s390_vscbiq, vscbiq_ti, 0, B_VX, 0, BT_FN_UINT128_UINT128_UINT128) +B_DEF (s390_vsbiq, vsbiq, 0, B_VX, 0, BT_FN_UINT128_UINT128_UINT128_UINT128) +B_DEF (s390_vsbcbiq, vsbcbiq, 0, B_VX, 0, BT_FN_UINT128_UINT128_UINT128_UINT128) OB_DEF (s390_vec_sum2, s390_vec_sum2_u16, s390_vec_sum2_u32, B_VX, BT_FN_OV4SI_OV4SI_OV4SI) OB_DEF_VAR (s390_vec_sum2_u16, s390_vsumgh, 0, 0, BT_OV_UV2DI_UV8HI_UV8HI) @@ -2278,8 +2278,8 @@ OB_DEF (s390_vec_sum_u128, s390_vec_sum_u128_u32,s390_vec_sum_u128_ OB_DEF_VAR (s390_vec_sum_u128_u32, s390_vsumqf, 0, 0, BT_OV_UV16QI_UV4SI_UV4SI) OB_DEF_VAR (s390_vec_sum_u128_u64, s390_vsumqg, 0, 0, BT_OV_UV16QI_UV2DI_UV2DI) -B_DEF (s390_vsumqf, vec_sum_u128v4si, 0, B_VX, 0, BT_FN_UV16QI_UV4SI_UV4SI) -B_DEF (s390_vsumqg, vec_sum_u128v2di, 0, B_VX, 0, BT_FN_UV16QI_UV2DI_UV2DI) +B_DEF (s390_vsumqf, vec_sum_u128v4si, 0, B_VX, 0, BT_FN_UINT128_UV4SI_UV4SI) +B_DEF (s390_vsumqg, vec_sum_u128v2di, 0, B_VX, 0, BT_FN_UINT128_UV2DI_UV2DI) OB_DEF (s390_vec_sum4, s390_vec_sum4_u8, s390_vec_sum4_u16, B_VX, BT_FN_OV4SI_OV4SI_OV4SI) OB_DEF_VAR (s390_vec_sum4_u8, s390_vsumb, 0, 0, BT_OV_UV4SI_UV16QI_UV16QI) @@ -2303,7 +2303,7 @@ OB_DEF_VAR (s390_vec_test_mask_dbl, s390_vtm, 0, B_DEF (s390_vtm, vec_test_mask_intv16qi,0, B_VX, 0, BT_FN_INT_UV16QI_UV16QI) B_DEF (s390_vec_msum_u128, vec_msumv2di, 0, B_VXE, O4_M12, BT_FN_UV16QI_UV2DI_UV2DI_UV16QI_INT) -B_DEF (s390_vmslg, vmslg, 0, B_VXE, O4_M12, BT_FN_INT128_UV2DI_UV2DI_INT128_INT) +B_DEF (s390_vmslg, vmslg, 0, B_VXE, O4_M12, BT_FN_UINT128_UV2DI_UV2DI_UINT128_INT) OB_DEF (s390_vec_eqv, s390_vec_eqv_b8, s390_vec_eqv_dbl_c, B_VXE, BT_FN_OV4SI_OV4SI_OV4SI) OB_DEF_VAR (s390_vec_eqv_b8, s390_vnx, 0, 0, BT_OV_BV16QI_BV16QI_BV16QI) @@ -2920,17 +2920,17 @@ OB_DEF_VAR (s390_vec_revb_u64, s390_vlbrg, 0, OB_DEF_VAR (s390_vec_revb_flt, s390_vlbrf_flt, B_VXE, 0, BT_OV_V4SF_V4SF) OB_DEF_VAR (s390_vec_revb_dbl, s390_vlbrg_dbl, 0, 0, BT_OV_V2DF_V2DF) -B_DEF (s390_vlbrh, bswapv8hi, 0, B_VX, 0, BT_FN_V8HI_V8HI) -B_DEF (s390_vlbrf, bswapv4si, 0, B_VX, 0, BT_FN_V4SI_V4SI) -B_DEF (s390_vlbrg, bswapv2di, 0, B_VX, 0, BT_FN_V2DI_V2DI) -B_DEF (s390_vlbrq, bswapv1ti, 0, B_VX, 0, BT_FN_V1TI_V1TI) +B_DEF (s390_vlbrh, bswapv8hi, 0, B_VX, 0, BT_FN_UV8HI_UV8HI) +B_DEF (s390_vlbrf, bswapv4si, 0, B_VX, 0, BT_FN_UV4SI_UV4SI) +B_DEF (s390_vlbrg, bswapv2di, 0, B_VX, 0, BT_FN_UV2DI_UV2DI) +B_DEF (s390_vlbrq, bswapti, 0, B_VX, 0, BT_FN_UINT128_UINT128) B_DEF (s390_vlbrf_flt, bswapv4sf, 0, B_VXE, 0, BT_FN_V4SF_V4SF) B_DEF (s390_vlbrg_dbl, bswapv2df, 0, B_VX, 0, BT_FN_V2DF_V2DF) -B_DEF (s390_vstbrh, bswapv8hi, 0, B_VX, 0, BT_FN_V8HI_V8HI) -B_DEF (s390_vstbrf, bswapv4si, 0, B_VX, 0, BT_FN_V4SI_V4SI) -B_DEF (s390_vstbrg, bswapv2di, 0, B_VX, 0, BT_FN_V2DI_V2DI) -B_DEF (s390_vstbrq, bswapv1ti, 0, B_VX, 0, BT_FN_V1TI_V1TI) +B_DEF (s390_vstbrh, bswapv8hi, 0, B_VX, 0, BT_FN_UV8HI_UV8HI) +B_DEF (s390_vstbrf, bswapv4si, 0, B_VX, 0, BT_FN_UV4SI_UV4SI) +B_DEF (s390_vstbrg, bswapv2di, 0, B_VX, 0, BT_FN_UV2DI_UV2DI) +B_DEF (s390_vstbrq, bswapti, 0, B_VX, 0, BT_FN_UINT128_UINT128) B_DEF (s390_vstbrf_flt, bswapv4sf, 0, B_VXE, 0, BT_FN_V4SF_V4SF) B_DEF (s390_vstbrg_dbl, bswapv2df, 0, B_VX, 0, BT_FN_V2DF_V2DF) @@ -3005,8 +3005,8 @@ OB_DEF_VAR (s390_vstrs_b32, s390_vstrsf, 0, OB_DEF_VAR (s390_vstrs_u32, s390_vstrsf, 0, 0, BT_OV_UV16QI_UV4SI_UV4SI_UV16QI_INTPTR) B_DEF (s390_vstrsb, vstrsv16qi, 0, B_VXE2, 0, BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INTPTR) -B_DEF (s390_vstrsh, vstrsv8hi, 0, B_VXE2, 0, BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INTPTR) -B_DEF (s390_vstrsf, vstrsv4si, 0, B_VXE2, 0, BT_FN_UV4SI_UV4SI_UV4SI_UV8HI_INTPTR) +B_DEF (s390_vstrsh, vstrsv8hi, 0, B_VXE2, 0, BT_FN_UV16QI_UV8HI_UV8HI_UV16QI_INTPTR) +B_DEF (s390_vstrsf, vstrsv4si, 0, B_VXE2, 0, BT_FN_UV16QI_UV4SI_UV4SI_UV16QI_INTPTR) OB_DEF (s390_vec_search_string_until_zero_cc, s390_vstrsz_s8, s390_vstrsz_u32, B_VXE2, BT_FN_OV4SI_OV4SI_OV4SI_OV4SI_INTPTR) OB_DEF_VAR (s390_vstrsz_s8, s390_vstrszb, 0, 0, BT_OV_UV16QI_V16QI_V16QI_UV16QI_INTPTR) @@ -3020,8 +3020,8 @@ OB_DEF_VAR (s390_vstrsz_b32, s390_vstrszf, 0, OB_DEF_VAR (s390_vstrsz_u32, s390_vstrszf, 0, 0, BT_OV_UV16QI_UV4SI_UV4SI_UV16QI_INTPTR) B_DEF (s390_vstrszb, vstrszv16qi, 0, B_VXE2, 0, BT_FN_UV16QI_UV16QI_UV16QI_UV16QI_INTPTR) -B_DEF (s390_vstrszh, vstrszv8hi, 0, B_VXE2, 0, BT_FN_UV8HI_UV8HI_UV8HI_UV8HI_INTPTR) -B_DEF (s390_vstrszf, vstrszv4si, 0, B_VXE2, 0, BT_FN_UV4SI_UV4SI_UV4SI_UV8HI_INTPTR) +B_DEF (s390_vstrszh, vstrszv8hi, 0, B_VXE2, 0, BT_FN_UV16QI_UV8HI_UV8HI_UV16QI_INTPTR) +B_DEF (s390_vstrszf, vstrszv4si, 0, B_VXE2, 0, BT_FN_UV16QI_UV4SI_UV4SI_UV16QI_INTPTR) /* arch 14 builtins */ From a63fb786f8564880c91a30b99fda6d8a44adf81d Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Wed, 13 Mar 2024 11:05:08 +0100 Subject: [PATCH 037/551] s390: Fix tests rosbg_si_srl and rxsbg_si_srl Starting with r14-2047-gd0e891406b16dc two SI mode tests are optimized into DI mode. Thus, the scan-assembler directives fail. For example RTL expression (ior:SI (subreg:SI (lshiftrt:DI (reg:DI 69) (const_int 2 [0x2])) 4) (subreg:SI (reg:DI 68) 4)) is optimized into (ior:DI (lshiftrt:DI (reg:DI 69) (const_int 2 [0x2])) (reg:DI 68)) Fixed by moving operands into memory in order to enforce SI mode computation. Furthermore, in r9-6056-g290dfd9bc7bea2 the starting bit position of the scan-assembler directive for rosbg was incorrectly set to 32 which actually should be 32+SHIFT_AMOUNT, i.e., in this particular case 34. gcc/testsuite/ChangeLog: * gcc.target/s390/md/rXsbg_mode_sXl.c: Fix tests rosbg_si_srl and rxsbg_si_srl. --- .../gcc.target/s390/md/rXsbg_mode_sXl.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c b/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c index ede813818ff1..cf454d2783c2 100644 --- a/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c +++ b/gcc/testsuite/gcc.target/s390/md/rXsbg_mode_sXl.c @@ -22,6 +22,8 @@ { dg-skip-if "" { *-*-* } { "*" } { "-march=*" } } */ +unsigned int a, b; + __attribute__ ((noinline)) unsigned int si_sll (unsigned int x) { @@ -42,11 +44,11 @@ rosbg_si_sll (unsigned int a, unsigned int b) /* { dg-final { scan-assembler-times "rosbg\t%r.,%r.,32,62,1" 1 } } */ __attribute__ ((noinline)) unsigned int -rosbg_si_srl (unsigned int a, unsigned int b) +rosbg_si_srl (void) { return a | (b >> 2); } -/* { dg-final { scan-assembler-times "rosbg\t%r.,%r.,32,63,62" 1 } } */ +/* { dg-final { scan-assembler-times "rosbg\t%r.,%r.,34,63,62" 1 } } */ __attribute__ ((noinline)) unsigned int rxsbg_si_sll (unsigned int a, unsigned int b) @@ -56,11 +58,11 @@ rxsbg_si_sll (unsigned int a, unsigned int b) /* { dg-final { scan-assembler-times "rxsbg\t%r.,%r.,32,62,1" 1 } } */ __attribute__ ((noinline)) unsigned int -rxsbg_si_srl (unsigned int a, unsigned int b) +rxsbg_si_srl (void) { return a ^ (b >> 2); } -/* { dg-final { scan-assembler-times "rxsbg\t%r.,%r.,32,63,62" 1 } } */ +/* { dg-final { scan-assembler-times "rxsbg\t%r.,%r.,34,63,62" 1 } } */ __attribute__ ((noinline)) unsigned long long di_sll (unsigned long long x) @@ -108,21 +110,21 @@ main (void) /* SIMode */ { unsigned int r; - unsigned int a = 0x12488421u; - unsigned int b = 0x88881111u; + a = 0x12488421u; + b = 0x88881111u; unsigned int csll = si_sll (b); unsigned int csrl = si_srl (b); r = rosbg_si_sll (a, b); if (r != (a | csll)) __builtin_abort (); - r = rosbg_si_srl (a, b); + r = rosbg_si_srl (); if (r != (a | csrl)) __builtin_abort (); r = rxsbg_si_sll (a, b); if (r != (a ^ csll)) __builtin_abort (); - r = rxsbg_si_srl (a, b); + r = rxsbg_si_srl (); if (r != (a ^ csrl)) __builtin_abort (); } From 4d049fadc25585e336c06e6b60b592f40ddbcc12 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Wed, 13 Mar 2024 11:07:03 +0100 Subject: [PATCH 038/551] s390: Fix TARGET_SECONDARY_RELOAD for non-SYMBOL_REFs RTX X need not necessarily be a SYMBOL_REF and may e.g. be an UNSPEC_GOTENT for which SYMBOL_FLAG_NOTALIGN2_P fails. gcc/ChangeLog: * config/s390/s390.cc (s390_secondary_reload): Guard SYMBOL_FLAG_NOTALIGN2_P. --- gcc/config/s390/s390.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index c857b2028f2e..e63965578f14 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -4779,7 +4779,7 @@ s390_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i, if (in_p && s390_loadrelative_operand_p (x, &symref, &offset) && mode == Pmode - && !SYMBOL_FLAG_NOTALIGN2_P (symref) + && (!SYMBOL_REF_P (symref) || !SYMBOL_FLAG_NOTALIGN2_P (symref)) && (offset & 1) == 1) sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10 : CODE_FOR_reloadsi_larl_odd_addend_z10); From 5a44e14eb4ff47317b420de10fcc2512a6a6e0fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20SVENSSON?= <torbjorn.svensson@foss.st.com> Date: Wed, 13 Mar 2024 15:04:25 +0100 Subject: [PATCH 039/551] testsuite: target test for short_enums MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On arm-none-eabi, the test case fails with below warning on GCC13 .../null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c:63:65: warning: converting a packed 'enum obj_type' pointer (alignment 1) to a 'struct connection' pointer (alignment 4) may result in an unaligned pointer value [-Waddress-of-packed-member] Add a dg-bogus to ensure that the warning is not reintroduced. gcc/testsuite/ChangeLog: * c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c: Added dg-bogus with target on offending line for short_enums. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> --- .../null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c b/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c index c1c8e6f6a39a..a37962f1d856 100644 --- a/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c +++ b/gcc/testsuite/c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c @@ -61,7 +61,7 @@ static inline enum obj_type obj_type(const enum obj_type *t) } static inline struct connection *__objt_conn(enum obj_type *t) { - return ((struct connection *)(((char *)(t)) - ((long)&((struct connection *)0)->obj_type))); + return ((struct connection *)(((char *)(t)) - ((long)&((struct connection *)0)->obj_type))); /* { dg-bogus "may result in an unaligned pointer value" "Fixed in r14-6517-gb7e4a4c626e" { target short_enums } } */ } static inline struct connection *objt_conn(enum obj_type *t) { From 74bca21db31e3f4ab6543b56c3f26b4dfe586fef Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 13 Mar 2024 15:34:59 +0100 Subject: [PATCH 040/551] store-merging: Match bswap64 on 32-bit targets with bswapsi2 [PR114319] gimple-ssa-store-merging.cc tests bswap_optab in 3 different places, in 2 of them it has special exception for double-word bswap using pair of word-mode bswap optabs, but in the last one it doesn't. The following patch changes even the last spot. We don't handle 128-bit bswaps in the passes at all, because currently we just use uint64_t to represent the byte reshuffling (we'd need to use offset_int or something like that instead) and we don't have __builtin_bswap128 nor type-generic __builtin_bswap, so there is nothing for 64-bit targets there. 2024-03-13 Jakub Jelinek <jakub@redhat.com> PR middle-end/114319 * gimple-ssa-store-merging.cc (imm_store_chain_info::try_coalesce_bswap): For 32-bit targets allow matching __builtin_bswap64 if there is bswapsi2 optab. * gcc.target/i386/pr114319.c: New test. --- gcc/gimple-ssa-store-merging.cc | 5 ++++- gcc/testsuite/gcc.target/i386/pr114319.c | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr114319.c diff --git a/gcc/gimple-ssa-store-merging.cc b/gcc/gimple-ssa-store-merging.cc index 42b68abf61b2..cb0cb5f42f65 100644 --- a/gcc/gimple-ssa-store-merging.cc +++ b/gcc/gimple-ssa-store-merging.cc @@ -3051,7 +3051,10 @@ imm_store_chain_info::try_coalesce_bswap (merged_store_group *merged_store, return false; case 64: if (builtin_decl_explicit_p (BUILT_IN_BSWAP64) - && optab_handler (bswap_optab, DImode) != CODE_FOR_nothing) + && (optab_handler (bswap_optab, DImode) != CODE_FOR_nothing + || (word_mode == SImode + && builtin_decl_explicit_p (BUILT_IN_BSWAP32) + && optab_handler (bswap_optab, SImode) != CODE_FOR_nothing))) break; return false; default: diff --git a/gcc/testsuite/gcc.target/i386/pr114319.c b/gcc/testsuite/gcc.target/i386/pr114319.c new file mode 100644 index 000000000000..75175f4b2acc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114319.c @@ -0,0 +1,19 @@ +/* PR middle-end/114319 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -masm=att -mno-movbe" } */ +/* { dg-additional-options "-march=i486" { target ia32 } } */ +/* { dg-final { scan-assembler-times "\tbswap\t%r" 1 { target { ! ia32 } } } } */ +/* { dg-final { scan-assembler-times "\tbswap\t%\[er]" 2 { target ia32 } } } */ + +void +foo (unsigned long long x, unsigned char *y) +{ + y[0] = x >> 56; + y[1] = x >> 48; + y[2] = x >> 40; + y[3] = x >> 32; + y[4] = x >> 24; + y[5] = x >> 16; + y[6] = x >> 8; + y[7] = x; +} From 11caf47b599568c6c6f5a12cf8e21f50778176d3 Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Tue, 12 Mar 2024 22:58:39 +0100 Subject: [PATCH 041/551] Fortran: fix IS_CONTIGUOUS for polymorphic dummy arguments [PR114001] gcc/fortran/ChangeLog: PR fortran/114001 * expr.cc (gfc_is_simply_contiguous): Adjust logic so that CLASS symbols are also handled. gcc/testsuite/ChangeLog: PR fortran/114001 * gfortran.dg/is_contiguous_4.f90: New test. --- gcc/fortran/expr.cc | 19 ++--- gcc/testsuite/gfortran.dg/is_contiguous_4.f90 | 81 +++++++++++++++++++ 2 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/is_contiguous_4.f90 diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index 37ea95d0185c..82a642b01f7a 100644 --- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -6025,15 +6025,16 @@ gfc_is_simply_contiguous (gfc_expr *expr, bool strict, bool permit_element) } sym = expr->symtree->n.sym; - if (expr->ts.type != BT_CLASS - && ((part_ref - && !part_ref->u.c.component->attr.contiguous - && part_ref->u.c.component->attr.pointer) - || (!part_ref - && !sym->attr.contiguous - && (sym->attr.pointer - || (sym->as && sym->as->type == AS_ASSUMED_RANK) - || (sym->as && sym->as->type == AS_ASSUMED_SHAPE))))) + if ((part_ref + && part_ref->u.c.component + && !part_ref->u.c.component->attr.contiguous + && IS_POINTER (part_ref->u.c.component)) + || (!part_ref + && expr->ts.type != BT_CLASS + && !sym->attr.contiguous + && (sym->attr.pointer + || (sym->as && sym->as->type == AS_ASSUMED_RANK) + || (sym->as && sym->as->type == AS_ASSUMED_SHAPE)))) return false; if (!ar || ar->type == AR_FULL) diff --git a/gcc/testsuite/gfortran.dg/is_contiguous_4.f90 b/gcc/testsuite/gfortran.dg/is_contiguous_4.f90 new file mode 100644 index 000000000000..cb066f8836b1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/is_contiguous_4.f90 @@ -0,0 +1,81 @@ +! { dg-do run } +! PR fortran/114001 - IS_CONTIGUOUS and polymorphic dummy + +program main + implicit none + integer :: i, cnt = 0 + logical :: expect + integer, target :: m(10) = [(i,i=1,size(m))] + integer, pointer :: p(:) + type t + integer :: j + end type t + type(t), pointer :: tt(:), tp(:) ! Type pointer + class(t), pointer :: ct(:), cp(:) ! Class pointer + + p => m(1:3) + expect = is_contiguous (p) + print *, "is_contiguous (p)=", expect + if (.not. expect) stop 91 + call sub_star (p, expect) + p => m(1::3) + expect = is_contiguous (p) + print *, "is_contiguous (p)=", expect + if (expect) stop 92 + call sub_star (p, expect) + + allocate (tt(10)) + tt(:)% j = m + tp => tt(4:6) + expect = is_contiguous (tp) + if (.not. expect) stop 96 + print *, "is_contiguous (tp)=", expect + call sub_t (tp, expect) + tp => tt(4::3) + expect = is_contiguous (tp) + if (expect) stop 97 + print *, "is_contiguous (tp)=", expect + call sub_t (tp, expect) + + allocate (ct(10)) + ct(:)% j = m + cp => ct(7:9) + expect = is_contiguous (cp) + print *, "is_contiguous (cp)=", expect + if (.not. expect) stop 98 + call sub_t (cp, expect) + cp => ct(4::3) + expect = is_contiguous (cp) + print *, "is_contiguous (cp)=", expect + if (expect) stop 99 + call sub_t (cp, expect) + +contains + + subroutine sub_star (x, expect) + class(*), intent(in) :: x(:) + logical, intent(in) :: expect + cnt = cnt + 10 + if (is_contiguous (x) .neqv. expect) then + print *, "sub_star(1): is_contiguous (x)=", is_contiguous (x), expect + stop (cnt + 1) + end if + select type (x) + type is (integer) + if (is_contiguous (x) .neqv. expect) then + print *, "sub_star(2): is_contiguous (x)=", is_contiguous (x), expect + stop (cnt + 2) + end if + end select + end + + subroutine sub_t (x, expect) + class(t), intent(in) :: x(:) + logical, intent(in) :: expect + cnt = cnt + 10 + if (is_contiguous (x) .neqv. expect) then + print *, "sub_t: is_contiguous (x)=", is_contiguous (x), expect + stop (cnt + 3) + end if + end +end From d6490157b3e7ec45a024d1a2acc96e53934dbb0e Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 7 Mar 2024 12:00:55 +0000 Subject: [PATCH 042/551] libstdc++: Document that _GLIBCXX_CONCEPT_CHECKS might be removed in future The macro-based concept checks are unmaintained and do not support C++11 or later, so reject valid code. If nobody plans to update them we should consider removing them. Alternatively, we could ignore the macro for C++11 and later, so they have no effect and don't reject valid code. libstdc++-v3/ChangeLog: * doc/xml/manual/debug.xml: Document that concept checking might be removed in future. * doc/xml/manual/extensions.xml: Likewise. --- libstdc++-v3/doc/xml/manual/debug.xml | 2 ++ libstdc++-v3/doc/xml/manual/extensions.xml | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/doc/xml/manual/debug.xml b/libstdc++-v3/doc/xml/manual/debug.xml index 42d4d32aa299..7f6d0876fc61 100644 --- a/libstdc++-v3/doc/xml/manual/debug.xml +++ b/libstdc++-v3/doc/xml/manual/debug.xml @@ -351,6 +351,8 @@ <para> The <link linkend="manual.ext.compile_checks">Compile-Time Checks</link> extension has compile-time checks for many algorithms. + These checks were designed for C++98 and have not been updated to work + with C++11 and later standards. They might be removed at a future date. </para> </section> diff --git a/libstdc++-v3/doc/xml/manual/extensions.xml b/libstdc++-v3/doc/xml/manual/extensions.xml index d4fe2f509d4c..490a50cc3317 100644 --- a/libstdc++-v3/doc/xml/manual/extensions.xml +++ b/libstdc++-v3/doc/xml/manual/extensions.xml @@ -77,8 +77,7 @@ extensions, be aware of two things: object file. The checks are also cleaner and easier to read and understand. </para> - <para>They are off by default for all versions of GCC from 3.0 to 3.4 (the - latest release at the time of writing). + <para>They are off by default for all GCC 3.0 and all later versions. They can be enabled at configure time with <link linkend="manual.intro.setup.configure"><literal>--enable-concept-checks</literal></link>. You can enable them on a per-translation-unit basis with @@ -89,10 +88,17 @@ extensions, be aware of two things: </para> <para>Please note that the concept checks only validate the requirements - of the old C++03 standard. C++11 was expected to have first-class - support for template parameter constraints based on concepts in the core - language. This would have obviated the need for the library-simulated concept - checking described above, but was not part of C++11. + of the old C++03 standard and reject some valid code that meets the relaxed + requirements of C++11 and later standards. + C++11 was expected to have first-class support for template parameter + constraints based on concepts in the core language. + This would have obviated the need for the library-simulated concept checking + described above, but was not part of C++11. + C++20 adds a different model of concepts, which is now used to constrain + some new parts of the C++20 library, e.g. the + <filename><ranges></filename> header and the new overloads in the + <filename><algorithm></filename> header for working with ranges. + The old library-simulated concept checks might be removed at a future date. </para> </chapter> From 45a3ee8a402cc51c02b7f45e8f041039390a4ef8 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 7 Mar 2024 15:19:12 +0000 Subject: [PATCH 043/551] libstdc++: Improve documentation on debugging with libstdc++ libstdc++-v3/ChangeLog: * doc/xml/manual/debug.xml: Improve docs on debug builds and using ASan. Mention _GLIBCXX_ASSERTIONS. Reorder sections to put the most relevant ones first. * doc/xml/manual/using.xml: Add comma. * doc/html/*: Regenerate. --- libstdc++-v3/doc/html/index.html | 2 +- libstdc++-v3/doc/html/manual/debug.html | 75 +++++++++------ .../doc/html/manual/ext_compile_checks.html | 18 ++-- libstdc++-v3/doc/html/manual/index.html | 2 +- libstdc++-v3/doc/html/manual/intro.html | 2 +- libstdc++-v3/doc/html/manual/using.html | 2 +- .../doc/html/manual/using_macros.html | 2 +- libstdc++-v3/doc/xml/manual/debug.xml | 93 +++++++++++-------- libstdc++-v3/doc/xml/manual/using.xml | 2 +- 9 files changed, 119 insertions(+), 79 deletions(-) diff --git a/libstdc++-v3/doc/html/index.html b/libstdc++-v3/doc/html/index.html index 8648d8e2bea6..f9288e471f48 100644 --- a/libstdc++-v3/doc/html/index.html +++ b/libstdc++-v3/doc/html/index.html @@ -23,7 +23,7 @@ </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I. Introduction -</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2014">C++ 2014</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2014.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2014.filesystemts">Filesystem TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2017.par2ts">Parallelism 2 TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2020">C++ 2020</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.2023">C++ 2023</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2014">C++ 2014</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2014.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2014.filesystemts">Filesystem TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2017.par2ts">Parallelism 2 TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2020">C++ 2020</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.2023">C++ 2023</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="manual/status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II. Standard Contents </a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/support.html">4. Support diff --git a/libstdc++-v3/doc/html/manual/debug.html b/libstdc++-v3/doc/html/manual/debug.html index 34ec6598ce46..eb83d4e15ac9 100644 --- a/libstdc++-v3/doc/html/manual/debug.html +++ b/libstdc++-v3/doc/html/manual/debug.html @@ -12,7 +12,7 @@ flags can be varied to change debugging characteristics. For instance, turning off all optimization via the <code class="code">-g -O0 -fno-inline</code> flags will disable inlining and optimizations, - and add debugging information, so that stepping through all functions, + and include debugging information, so that stepping through all functions, (including inlined constructors and destructors) is possible. In addition, <code class="code">-fno-eliminate-unused-debug-types</code> can be used when additional debug information, such as nested class info, @@ -30,31 +30,27 @@ Many other options are available: please see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options" target="_top">"Options for Debugging Your Program"</a> in Using the GNU Compiler Collection (GCC) for a complete list. -</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p> - If you would like debug symbols in libstdc++, there are two ways to - build libstdc++ with debug flags. The first is to create a separate - debug build by running make from the top-level of a tree - freshly-configured with -</p><pre class="programlisting"> - --enable-libstdcxx-debug -</pre><p>and perhaps</p><pre class="programlisting"> - --enable-libstdcxx-debug-flags='...' -</pre><p> - Both the normal build and the debug build will persist, without - having to specify <code class="code">CXXFLAGS</code>, and the debug library will - be installed in a separate directory tree, in <code class="code">(prefix)/lib/debug</code>. - For more information, look at the - <a class="link" href="configure.html" title="Configure">configuration</a> section. +</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> + The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a> + has compile and run-time checks for many containers. </p><p> - A second approach is to use the configuration flags -</p><pre class="programlisting"> - make CXXFLAGS='-g3 -fno-inline -O0' all -</pre><p> - This quick and dirty approach is often sufficient for quick - debugging tasks, when you cannot or don't want to recompile your - application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p> + There are also lightweight assertions for checking function preconditions, + such as checking for out-of-bounds indices when accessing a + <code class="classname">std::vector</code>. These can be enabled without using + the full Debug Mode, by using <code class="option">-D_GLIBCXX_ASSERTIONS</code> + (see <a class="xref" href="using_macros.html" title="Macros">Macros</a>). +</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p> + The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose + termination handler</a> gives information about uncaught + exceptions which kill the program. +</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p> On many targets GCC supports AddressSanitizer, a fast memory error detector, which is enabled by the <code class="option">-fsanitize=address</code> option. +</p><p> + The <code class="classname">std::vector</code> implementation has additional + instrumentation to work with AddressSanitizer, but this has to be enabled + explicitly by using <code class="option">-D_GLIBCXX_SANITIZE_VECTOR</code> + (see <a class="xref" href="using_macros.html" title="Macros">Macros</a>). </p><p> There are also various third party memory tracing and debug utilities that can be used to provide detailed memory allocation information @@ -225,14 +221,33 @@ on-line versions of the GDB user manual in GDB's homepage, at <a class="link" href="http://sourceware.org/gdb/" target="_top"> "GDB: The GNU Project Debugger" </a>. -</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p> - The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose - termination handler</a> gives information about uncaught - exceptions which kill the program. -</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a> - has compile and run-time checks for many containers. - </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time +</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p> + As described above, libstdc++ is built with debug symbols enabled by default, + but because it's also built with optimizations the code can be hard to + follow when stepping into the library in a debugger. +</p><p> + If you would like to debug <code class="filename">libstdc++.so</code> itself, + there are two ways to build an unoptimized libstdc++ with debug flags. + The first is to create a separate debug build by running make from the + top-level of a tree freshly-configured with +</p><pre class="programlisting"> + --enable-libstdcxx-debug +</pre><p>and perhaps</p><pre class="programlisting"> + --enable-libstdcxx-debug-flags='...' +</pre><p> + Both the normal build and the debug build will persist, without + having to specify <code class="code">CXXFLAGS</code>, and the debug library will + be installed in a separate directory tree, in <code class="code">(prefix)/lib/debug</code>. + For more information, look at the + <a class="link" href="configure.html" title="Configure">configuration</a> section. +</p><p> + A second approach is to use the configuration flags +</p><pre class="programlisting"> + make CXXFLAGS='-g3 -fno-inline -O0' all +</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time Checks</a> extension has compile-time checks for many algorithms. + These checks were designed for C++98 and have not been updated to work + with C++11 and later standards. They might be removed at a future date. </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. Standard Contents </td></tr></table></div></body></html> \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/ext_compile_checks.html b/libstdc++-v3/doc/html/manual/ext_compile_checks.html index c60b03381ba0..240d4e47f666 100644 --- a/libstdc++-v3/doc/html/manual/ext_compile_checks.html +++ b/libstdc++-v3/doc/html/manual/ext_compile_checks.html @@ -24,8 +24,7 @@ </p><p>The new version imposes a much smaller space overhead on the generated object file. The checks are also cleaner and easier to read and understand. - </p><p>They are off by default for all versions of GCC from 3.0 to 3.4 (the - latest release at the time of writing). + </p><p>They are off by default for all GCC 3.0 and all later versions. They can be enabled at configure time with <a class="link" href="configure.html" title="Configure"><code class="literal">--enable-concept-checks</code></a>. You can enable them on a per-translation-unit basis with @@ -34,8 +33,15 @@ (or with <code class="code">#define _GLIBCPP_CONCEPT_CHECKS</code> for versions 3.1, 3.2 and 3.3). </p><p>Please note that the concept checks only validate the requirements - of the old C++03 standard. C++11 was expected to have first-class - support for template parameter constraints based on concepts in the core - language. This would have obviated the need for the library-simulated concept - checking described above, but was not part of C++11. + of the old C++03 standard and reject some valid code that meets the relaxed + requirements of C++11 and later standards. + C++11 was expected to have first-class support for template parameter + constraints based on concepts in the core language. + This would have obviated the need for the library-simulated concept checking + described above, but was not part of C++11. + C++20 adds a different model of concepts, which is now used to constrain + some new parts of the C++20 library, e.g. the + <code class="filename"><ranges></code> header and the new overloads in the + <code class="filename"><algorithm></code> header for working with ranges. + The old library-simulated concept checks might be removed at a future date. </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html> \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/index.html b/libstdc++-v3/doc/html/manual/index.html index ef58061c5cf0..ed2aee54cead 100644 --- a/libstdc++-v3/doc/html/manual/index.html +++ b/libstdc++-v3/doc/html/manual/index.html @@ -4,7 +4,7 @@ </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="part"><a href="intro.html">I. Introduction -</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.filesystemts">Filesystem TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.par2ts">Parallelism 2 TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 2020</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2023">C++ 2023</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.filesystemts">Filesystem TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.par2ts">Parallelism 2 TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 2020</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2023">C++ 2023</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II. Standard Contents </a></span></dt><dd><dl><dt><span class="chapter"><a href="support.html">4. Support diff --git a/libstdc++-v3/doc/html/manual/intro.html b/libstdc++-v3/doc/html/manual/intro.html index 3027cb6f3f73..5bb4814d5022 100644 --- a/libstdc++-v3/doc/html/manual/intro.html +++ b/libstdc++-v3/doc/html/manual/intro.html @@ -5,4 +5,4 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. Introduction <a id="id-1.3.3.1.1.1" class="indexterm"></a> -</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.filesystemts">Filesystem TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.par2ts">Parallelism 2 TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 2020</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2023">C++ 2023</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html> \ No newline at end of file +</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2014">C++ 2014</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2014.filesystemts">Filesystem TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2017">C++ 2017</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.specific">Implementation Specific Behavior</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2017.par2ts">Parallelism 2 TS</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="status.html#status.iso.2020">C++ 2020</a></span></dt><dt><span class="section"><a href="status.html#status.iso.2023">C++ 2023</a></span></dt><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt><dt><span class="section"><a href="status.html#status.iso.specfun">C++ IS 29124</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.specfun.specific">Implementation Specific Behavior</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html> \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using.html b/libstdc++-v3/doc/html/manual/using.html index e8e0c6c0e859..d663660b3a4f 100644 --- a/libstdc++-v3/doc/html/manual/using.html +++ b/libstdc++-v3/doc/html/manual/using.html @@ -2,7 +2,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. Introduction -</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_dual_abi.html">Dual ABI</a></span></dt><dd><dl><dt><span class="section"><a href="using_dual_abi.html#manual.intro.using.abi.trouble">Troubleshooting</a></span></dt></dl></dd><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.experimental">Experimental Library Extensions</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.alloc">Memory allocation</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.memory.mtalloc">Non-memory leaks in Pool and MT allocators</a></span></dt></dl></dd><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p> The set of features available in the GNU C++ library is shaped by several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC Command Options</a>. Options that impact libstdc++ are diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html index 62c66b7de4c2..ae5646926307 100644 --- a/libstdc++-v3/doc/html/manual/using_macros.html +++ b/libstdc++-v3/doc/html/manual/using_macros.html @@ -123,5 +123,5 @@ or <code class="classname">malloc_allocator</code></a>. The annotations must be present on all vector operations or none, so this macro must be defined to the same value for all translation units that create, - destroy or modify vectors. + destroy, or modify vectors. </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dual_abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dual ABI</td></tr></table></div></body></html> \ No newline at end of file diff --git a/libstdc++-v3/doc/xml/manual/debug.xml b/libstdc++-v3/doc/xml/manual/debug.xml index 7f6d0876fc61..23dbae5e5213 100644 --- a/libstdc++-v3/doc/xml/manual/debug.xml +++ b/libstdc++-v3/doc/xml/manual/debug.xml @@ -30,7 +30,7 @@ flags can be varied to change debugging characteristics. For instance, turning off all optimization via the <code>-g -O0 -fno-inline</code> flags will disable inlining and optimizations, - and add debugging information, so that stepping through all functions, + and include debugging information, so that stepping through all functions, (including inlined constructors and destructors) is possible. In addition, <code>-fno-eliminate-unused-debug-types</code> can be used when additional debug information, such as nested class info, @@ -55,41 +55,30 @@ </para> </section> -<section xml:id="debug.req"><info><title>Debug Versions of Library Binary Files</title></info> - +<section xml:id="debug.debug_mode"><info><title>Debug Mode</title></info> <para> - If you would like debug symbols in libstdc++, there are two ways to - build libstdc++ with debug flags. The first is to create a separate - debug build by running make from the top-level of a tree - freshly-configured with -</para> -<programlisting> - --enable-libstdcxx-debug -</programlisting> -<para>and perhaps</para> -<programlisting> - --enable-libstdcxx-debug-flags='...' -</programlisting> -<para> - Both the normal build and the debug build will persist, without - having to specify <code>CXXFLAGS</code>, and the debug library will - be installed in a separate directory tree, in <code>(prefix)/lib/debug</code>. - For more information, look at the - <link linkend="manual.intro.setup.configure">configuration</link> section. + The <link linkend="manual.ext.debug_mode">Debug Mode</link> + has compile and run-time checks for many containers. </para> <para> - A second approach is to use the configuration flags + There are also lightweight assertions for checking function preconditions, + such as checking for out-of-bounds indices when accessing a + <classname>std::vector</classname>. These can be enabled without using + the full Debug Mode, by using <option>-D_GLIBCXX_ASSERTIONS</option> + (see <xref linkend="manual.intro.using.macros"/>). </para> -<programlisting> - make CXXFLAGS='-g3 -fno-inline -O0' all -</programlisting> + +</section> + +<section xml:id="debug.exceptions"><info><title>Tracking uncaught exceptions</title></info> <para> - This quick and dirty approach is often sufficient for quick - debugging tasks, when you cannot or don't want to recompile your - application to use the <link linkend="manual.ext.debug_mode">debug mode</link>.</para> + The <link linkend="support.termination.verbose">verbose + termination handler</link> gives information about uncaught + exceptions which kill the program. +</para> </section> <section xml:id="debug.memory"><info><title>Memory Leak Hunting</title></info> @@ -99,6 +88,13 @@ which is enabled by the <option>-fsanitize=address</option> option. </para> +<para> + The <classname>std::vector</classname> implementation has additional + instrumentation to work with AddressSanitizer, but this has to be enabled + explicitly by using <option>-D_GLIBCXX_SANITIZE_VECTOR</option> + (see <xref linkend="manual.intro.using.macros"/>). +</para> + <para> There are also various third party memory tracing and debug utilities that can be used to provide detailed memory allocation information @@ -331,22 +327,45 @@ </section> -<section xml:id="debug.exceptions"><info><title>Tracking uncaught exceptions</title></info> +<section xml:id="debug.req"><info><title>Debug Versions of Library Binary Files</title></info> <para> - The <link linkend="support.termination.verbose">verbose - termination handler</link> gives information about uncaught - exceptions which kill the program. + As described above, libstdc++ is built with debug symbols enabled by default, + but because it's also built with optimizations the code can be hard to + follow when stepping into the library in a debugger. </para> -</section> -<section xml:id="debug.debug_mode"><info><title>Debug Mode</title></info> +<para> + If you would like to debug <filename>libstdc++.so</filename> itself, + there are two ways to build an unoptimized libstdc++ with debug flags. + The first is to create a separate debug build by running make from the + top-level of a tree freshly-configured with +</para> +<programlisting> + --enable-libstdcxx-debug +</programlisting> +<para>and perhaps</para> +<programlisting> + --enable-libstdcxx-debug-flags='...' +</programlisting> +<para> + Both the normal build and the debug build will persist, without + having to specify <code>CXXFLAGS</code>, and the debug library will + be installed in a separate directory tree, in <code>(prefix)/lib/debug</code>. + For more information, look at the + <link linkend="manual.intro.setup.configure">configuration</link> section. +</para> + +<para> + A second approach is to use the configuration flags +</para> +<programlisting> + make CXXFLAGS='-g3 -fno-inline -O0' all +</programlisting> - <para> The <link linkend="manual.ext.debug_mode">Debug Mode</link> - has compile and run-time checks for many containers. - </para> </section> + <section xml:id="debug.compile_time_checks"><info><title>Compile Time Checking</title></info> <para> The <link linkend="manual.ext.compile_checks">Compile-Time diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml index b3b0c368e444..8ac7e74034c4 100644 --- a/libstdc++-v3/doc/xml/manual/using.xml +++ b/libstdc++-v3/doc/xml/manual/using.xml @@ -1341,7 +1341,7 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe or <classname>malloc_allocator</classname></link>. The annotations must be present on all vector operations or none, so this macro must be defined to the same value for all translation units that create, - destroy or modify vectors. + destroy, or modify vectors. </para> </listitem></varlistentry> </variablelist> From a8c7c3a40953e34f57278d224a07dc3698c64a84 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Wed, 13 Mar 2024 10:02:12 +0000 Subject: [PATCH 044/551] libstdc++: Move test error_category to global scope A recent GDB change causes this test to fail due to missing RTTI for the custom_cast type. This is presumably because the custom_cat type was defined as a local class, so has no linkage. Moving it to local scope seems to fix the test regressions, and probably makes the test more realistic as a local class with no linkage isn't practical to use as an error category that almost certainly needs to be referred to in other scopes. libstdc++-v3/ChangeLog: * testsuite/libstdc++-prettyprinters/cxx11.cc: Move custom_cat to namespace scope. --- .../testsuite/libstdc++-prettyprinters/cxx11.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc index f867ea18306d..2f75d12703cb 100644 --- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc +++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/cxx11.cc @@ -63,6 +63,11 @@ struct datum std::unique_ptr<datum> global; +struct custom_cat : std::error_category { + const char* name() const noexcept { return "miaow"; } + std::string message(int) const { return ""; } +}; + int main() { @@ -179,10 +184,7 @@ main() std::error_condition ecinval = std::make_error_condition(std::errc::invalid_argument); // { dg-final { note-test ecinval {std::error_condition = {"generic": EINVAL}} } } - struct custom_cat : std::error_category { - const char* name() const noexcept { return "miaow"; } - std::string message(int) const { return ""; } - } cat; + custom_cat cat; std::error_code emiaow(42, cat); // { dg-final { note-test emiaow {std::error_code = {custom_cat: 42}} } } std::error_condition ecmiaow(42, cat); From 746b71e26bd43366297f3e9f2f7d5f782c30622e Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Thu, 14 Mar 2024 00:18:12 +0000 Subject: [PATCH 045/551] Daily bump. --- gcc/ChangeLog | 65 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/fortran/ChangeLog | 12 ++++++++ gcc/testsuite/ChangeLog | 36 +++++++++++++++++++++++ libgomp/ChangeLog | 5 ++++ libstdc++-v3/ChangeLog | 19 ++++++++++++ 6 files changed, 138 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 802438e60b64..f6ac554e3ee6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,68 @@ +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114319 + * gimple-ssa-store-merging.cc + (imm_store_chain_info::try_coalesce_bswap): For 32-bit targets + allow matching __builtin_bswap64 if there is bswapsi2 optab. + +2024-03-13 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * config/s390/s390.cc (s390_secondary_reload): Guard + SYMBOL_FLAG_NOTALIGN2_P. + +2024-03-13 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * config/s390/s390-builtin-types.def: Update to reflect latest + changes. + * config/s390/s390-builtins.def: Streamline vector builtins with + LLVM. + +2024-03-13 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * config/s390/s390-builtins.def (vec_permi): Deprecate. + (vec_ctd): Deprecate. + (vec_ctd_s64): Deprecate. + (vec_ctd_u64): Deprecate. + (vec_ctsl): Deprecate. + (vec_ctul): Deprecate. + (vec_ld2f): Deprecate. + (vec_st2f): Deprecate. + (vec_insert): Deprecate overloads with bool vectors. + +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114313 + * gimple-lower-bitint.cc (bitint_large_huge::limb_access): Use + TYPE_SIZE of TREE_TYPE (var) rather than TYPE_SIZE of type. + (bitint_large_huge::handle_load): Pass NULL_TREE rather than + rhs_type to limb_access for the bitfield load cases. + (bitint_large_huge::lower_mergeable_stmt): Pass NULL_TREE rather than + lhs_type to limb_access if nlhs is non-NULL. + +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/112709 + * asan.cc (maybe_create_ssa_name, maybe_cast_to_ptrmode, + build_check_stmt, maybe_instrument_call, asan_expand_mark_ifn): Use + gsi_safe_insert_before instead of gsi_insert_before. + +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/112709 + * gimple-iterator.h (gsi_safe_insert_before, + gsi_safe_insert_seq_before): Declare. + * gimple-iterator.cc: Include gimplify.h. + (edge_before_returns_twice_call, adjust_before_returns_twice_call, + gsi_safe_insert_before, gsi_safe_insert_seq_before): New functions. + * ubsan.cc (instrument_mem_ref, instrument_pointer_overflow, + instrument_nonnull_arg, instrument_nonnull_return): Use + gsi_safe_insert_before instead of gsi_insert_before. + (maybe_instrument_pointer_overflow): Use force_gimple_operand, + gimple_seq_add_seq_without_update and gsi_safe_insert_seq_before + instead of force_gimple_operand_gsi. + (instrument_object_size): Likewise. Use gsi_safe_insert_before + instead of gsi_insert_before. + 2024-03-12 Richard Biener <rguenther@suse.de> PR tree-optimization/114121 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 1ab707fca679..d58fa7c0da5a 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240313 +20240314 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5ce10fa704a7..399a284b7e53 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,15 @@ +2024-03-13 Harald Anlauf <anlauf@gmx.de> + + PR fortran/114001 + * expr.cc (gfc_is_simply_contiguous): Adjust logic so that CLASS + symbols are also handled. + +2024-03-13 Tobias Burnus <tburnus@baylibre.com> + + PR fortran/114283 + * trans-openmp.cc (gfc_omp_predetermined_mapping): Map dummy + procedures as firstprivate. + 2024-03-12 Harald Anlauf <anlauf@gmx.de> PR fortran/110826 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 92da402f81a5..17d0558957e3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,39 @@ +2024-03-13 Harald Anlauf <anlauf@gmx.de> + + PR fortran/114001 + * gfortran.dg/is_contiguous_4.f90: New test. + +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114319 + * gcc.target/i386/pr114319.c: New test. + +2024-03-13 Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> + + * c-c++-common/analyzer/null-deref-pr108251-smp_fetch_ssl_fc_has_early-O2.c: + Added dg-bogus with target on offending line for short_enums. + +2024-03-13 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * gcc.target/s390/md/rXsbg_mode_sXl.c: Fix tests rosbg_si_srl + and rxsbg_si_srl. + +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114313 + * gcc.dg/torture/bitint-62.c: New test. + +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/112709 + * gcc.dg/asan/pr112709-2.c: New test. + +2024-03-13 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/112709 + * gcc.dg/ubsan/pr112709-1.c: New test. + * gcc.dg/ubsan/pr112709-2.c: New test. + 2024-03-12 Harald Anlauf <anlauf@gmx.de> PR fortran/110826 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 06412e17e016..c7ff790cda3b 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2024-03-13 Tobias Burnus <tburnus@baylibre.com> + + PR fortran/114283 + * testsuite/libgomp.fortran/declare-target-indirect-4.f90: New test. + 2024-03-12 Tobias Burnus <tburnus@baylibre.com> * libgomp.texi (Device Memory Routines): Swap item order to match diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 93d41693d23e..c7a66aef078f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,22 @@ +2024-03-13 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/libstdc++-prettyprinters/cxx11.cc: Move custom_cat + to namespace scope. + +2024-03-13 Jonathan Wakely <jwakely@redhat.com> + + * doc/xml/manual/debug.xml: Improve docs on debug builds and + using ASan. Mention _GLIBCXX_ASSERTIONS. Reorder sections to put + the most relevant ones first. + * doc/xml/manual/using.xml: Add comma. + * doc/html/*: Regenerate. + +2024-03-13 Jonathan Wakely <jwakely@redhat.com> + + * doc/xml/manual/debug.xml: Document that concept checking might + be removed in future. + * doc/xml/manual/extensions.xml: Likewise. + 2024-03-09 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/114240 From 618e34d56cc38e9c3ae95a413228068e53ed76bb Mon Sep 17 00:00:00 2001 From: liuhongt <hongtao.liu@intel.com> Date: Wed, 13 Mar 2024 10:40:01 +0800 Subject: [PATCH 046/551] i386[stv]: Handle REG_EH_REGION note When we split (insn 37 36 38 10 (set (reg:DI 104 [ _18 ]) (mem:DI (reg/f:SI 98 [ CallNative_nclosure.0_1 ]) [6 MEM[(struct SQRefCounted *)CallNative_nclosure.0_1]._uiRef+0 S8 A32])) "test.C":22:42 84 {*movdi_internal} (expr_list:REG_EH_REGION (const_int -11 [0xfffffffffffffff5]) into (insn 104 36 37 10 (set (subreg:V2DI (reg:DI 124) 0) (vec_concat:V2DI (mem:DI (reg/f:SI 98 [ CallNative_nclosure.0_1 ]) [6 MEM[(struct SQRefCounted *)CallNative_nclosure.0_1]._uiRef+0 S8 A32]) (const_int 0 [0]))) "test.C":22:42 -1 (nil))) (insn 37 104 105 10 (set (subreg:V2DI (reg:DI 104 [ _18 ]) 0) (subreg:V2DI (reg:DI 124) 0)) "test.C":22:42 2024 {movv2di_internal} (expr_list:REG_EH_REGION (const_int -11 [0xfffffffffffffff5]) (nil))) we must copy the REG_EH_REGION note to the first insn and split the block after the newly added insn. The REG_EH_REGION on the second insn will be removed later since it no longer traps. gcc/ChangeLog: * config/i386/i386-features.cc (general_scalar_chain::convert_op): Handle REG_EH_REGION note. (convert_scalars_to_vector): Ditto. * config/i386/i386-features.h (class scalar_chain): New memeber control_flow_insns. gcc/testsuite/ChangeLog: * g++.target/i386/pr111822.C: New test. --- gcc/config/i386/i386-features.cc | 50 +++++++++++++++++++++--- gcc/config/i386/i386-features.h | 1 + gcc/testsuite/g++.target/i386/pr111822.C | 45 +++++++++++++++++++++ 3 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.target/i386/pr111822.C diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc index 1de2a07ed75c..c7d7a965901e 100644 --- a/gcc/config/i386/i386-features.cc +++ b/gcc/config/i386/i386-features.cc @@ -998,20 +998,36 @@ general_scalar_chain::convert_op (rtx *op, rtx_insn *insn) } else if (MEM_P (*op)) { + rtx_insn* eh_insn, *movabs = NULL; rtx tmp = gen_reg_rtx (GET_MODE (*op)); - /* Handle movabs. */ + /* Emit MOVABS to load from a 64-bit absolute address to a GPR. */ if (!memory_operand (*op, GET_MODE (*op))) { rtx tmp2 = gen_reg_rtx (GET_MODE (*op)); + movabs = emit_insn_before (gen_rtx_SET (tmp2, *op), insn); - emit_insn_before (gen_rtx_SET (tmp2, *op), insn); *op = tmp2; } - emit_insn_before (gen_rtx_SET (gen_rtx_SUBREG (vmode, tmp, 0), - gen_gpr_to_xmm_move_src (vmode, *op)), - insn); + eh_insn + = emit_insn_before (gen_rtx_SET (gen_rtx_SUBREG (vmode, tmp, 0), + gen_gpr_to_xmm_move_src (vmode, *op)), + insn); + + if (cfun->can_throw_non_call_exceptions) + { + /* Handle REG_EH_REGION note. */ + rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); + if (note) + { + if (movabs) + eh_insn = movabs; + control_flow_insns.safe_push (eh_insn); + add_reg_note (eh_insn, REG_EH_REGION, XEXP (note, 0)); + } + } + *op = gen_rtx_SUBREG (vmode, tmp, 0); if (dump_file) @@ -2494,6 +2510,7 @@ convert_scalars_to_vector (bool timode_p) { basic_block bb; int converted_insns = 0; + auto_vec<rtx_insn *> control_flow_insns; bitmap_obstack_initialize (NULL); const machine_mode cand_mode[3] = { SImode, DImode, TImode }; @@ -2575,6 +2592,11 @@ convert_scalars_to_vector (bool timode_p) chain->chain_id); } + rtx_insn* iter_insn; + unsigned int ii; + FOR_EACH_VEC_ELT (chain->control_flow_insns, ii, iter_insn) + control_flow_insns.safe_push (iter_insn); + delete chain; } } @@ -2643,6 +2665,24 @@ convert_scalars_to_vector (bool timode_p) DECL_INCOMING_RTL (parm) = gen_rtx_SUBREG (TImode, r, 0); } } + + if (!control_flow_insns.is_empty ()) + { + free_dominance_info (CDI_DOMINATORS); + + unsigned int i; + rtx_insn* insn; + FOR_EACH_VEC_ELT (control_flow_insns, i, insn) + if (control_flow_insn_p (insn)) + { + /* Split the block after insn. There will be a fallthru + edge, which is OK so we keep it. We have to create + the exception edges ourselves. */ + bb = BLOCK_FOR_INSN (insn); + split_block (bb, insn); + rtl_make_eh_edge (NULL, bb, BB_END (bb)); + } + } } return 0; diff --git a/gcc/config/i386/i386-features.h b/gcc/config/i386/i386-features.h index 8bab2d8666de..b259cf679af9 100644 --- a/gcc/config/i386/i386-features.h +++ b/gcc/config/i386/i386-features.h @@ -155,6 +155,7 @@ class scalar_chain hash_map<rtx, rtx> defs_map; unsigned n_sse_to_integer; unsigned n_integer_to_sse; + auto_vec<rtx_insn *> control_flow_insns; bool build (bitmap candidates, unsigned insn_uid, bitmap disallowed); virtual int compute_convert_gain () = 0; diff --git a/gcc/testsuite/g++.target/i386/pr111822.C b/gcc/testsuite/g++.target/i386/pr111822.C new file mode 100644 index 000000000000..d405387b23cf --- /dev/null +++ b/gcc/testsuite/g++.target/i386/pr111822.C @@ -0,0 +1,45 @@ +/* PR target/111822 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -flive-range-shrinkage -fno-dce -fnon-call-exceptions" } */ + +typedef union { + int *pNativeClosure; + struct SQRefCounted *pRefCounted; +} SQObjectValue; +typedef struct { + SQObjectValue _unVal; +} SQObject; +typedef long SQFUNCTION(struct SQVM *); +struct SQVM { + void CallNative(); +}; +struct SQRefCounted { + long long _uiRef; +}; +void Null(); +struct SQObjectPtr : SQObject { + SQObjectPtr() {} + SQObjectPtr(int *pNativeClosure) { + _unVal.pNativeClosure = pNativeClosure; + _unVal.pRefCounted->_uiRef++; + } + ~SQObjectPtr() { --_unVal.pRefCounted->_uiRef; } +}; +struct CallInfo { + SQObjectPtr _closure; +}; +long long _top; +SQFUNCTION _function; +int *CallNative_nclosure; +void SQVM::CallNative() { + long long oldtop = _top; + CallInfo lci; + lci._closure = CallNative_nclosure; + try { + _function(this); + } catch (...) { + _top = oldtop; + } + while (oldtop) + Null(); +} From 8f6e0814b4bfd0a399055e9214562aebfcd902ad Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 14 Mar 2024 09:57:13 +0100 Subject: [PATCH 047/551] gimple-iterator: Some gsi_safe_insert_*before fixes When trying to use the gsi_safe_insert*before APIs in bitint lowering, I've discovered 3 issues and the following patch addresses those: 1) both split_block and split_edge update CDI_DOMINATORS if they are available, but because edge_before_returns_twice_call first splits and then adds an extra EDGE_ABNORMAL edge and then removes another one, the immediate dominators of both the new bb and the bb with returns_twice call need to change 2) the new EDGE_ABNORMAL edge had uninitialized probability; this patch copies the probability from the edge that is going to be removed and similarly copies other flags (EDGE_EXECUTABLE, EDGE_DFS_BACK, EDGE_IRREDUCIBLE_LOOP etc.) 3) if edge_before_returns_twice_call splits a block, then the bb with returns_twice call changes, so the gimple_stmt_iterator for it is no longer accurate, it points to the right statement, but gsi_bb and gsi_seq are no longer correct; the patch updates it 2024-03-14 Jakub Jelinek <jakub@redhat.com> * gimple-iterator.cc (edge_before_returns_twice_call): Copy all flags and probability from ad_edge to e edge. If CDI_DOMINATORS are computed, recompute immediate dominator of other_edge->src and other_edge->dest. (gsi_safe_insert_before, gsi_safe_insert_seq_before): Update *iter for the returns_twice call case to the gsi_for_stmt (stmt) to deal with update it for bb splitting. --- gcc/gimple-iterator.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gcc/gimple-iterator.cc b/gcc/gimple-iterator.cc index 531c8aed8241..ac6cb4aa414d 100644 --- a/gcc/gimple-iterator.cc +++ b/gcc/gimple-iterator.cc @@ -997,7 +997,18 @@ edge_before_returns_twice_call (basic_block bb) add_phi_arg (new_phi, gimple_phi_arg_def_from_edge (phi, ad_edge), e, gimple_phi_arg_location_from_edge (phi, ad_edge)); } + e->flags = ad_edge->flags; + e->probability = ad_edge->probability; remove_edge (ad_edge); + if (dom_info_available_p (CDI_DOMINATORS)) + { + set_immediate_dominator (CDI_DOMINATORS, other_edge->src, + recompute_dominator (CDI_DOMINATORS, + other_edge->src)); + set_immediate_dominator (CDI_DOMINATORS, other_edge->dest, + recompute_dominator (CDI_DOMINATORS, + other_edge->dest)); + } } return other_edge; } @@ -1045,6 +1056,7 @@ gsi_safe_insert_before (gimple_stmt_iterator *iter, gimple *g) if (new_bb) e = single_succ_edge (new_bb); adjust_before_returns_twice_call (e, g); + *iter = gsi_for_stmt (stmt); } else gsi_insert_before (iter, g, GSI_SAME_STMT); @@ -1075,6 +1087,7 @@ gsi_safe_insert_seq_before (gimple_stmt_iterator *iter, gimple_seq seq) if (g == l) break; } + *iter = gsi_for_stmt (stmt); } else gsi_insert_seq_before (iter, seq, GSI_SAME_STMT); From 90a7da695284da49182446ba45fbcddb9eb7fc91 Mon Sep 17 00:00:00 2001 From: Andreas Krebbel <krebbel@linux.ibm.com> Date: Thu, 14 Mar 2024 09:54:31 +0100 Subject: [PATCH 048/551] IBM Z: Fix -munaligned-symbols With this fix we make sure that only symbols with a natural alignment smaller than 2 are considered misaligned with -munaligned-symbols. Background is that -munaligned-symbols is only supposed to affect symbols whose natural alignment wouldn't be enough to fulfill our ABI requirement of having all symbols at even addresses. Because only these are the cases where we differ from other architectures. gcc/ChangeLog: * config/s390/s390.cc (s390_encode_section_info): Adjust the check for misaligned symbols. * config/s390/s390.opt: Improve documentation. gcc/testsuite/ChangeLog: * gcc.target/s390/aligned-1.c: Add weak and void variables incorporating the cases from unaligned-2.c. * gcc.target/s390/unaligned-1.c: Likewise. * gcc.target/s390/unaligned-2.c: Removed. --- gcc/config/s390/s390.cc | 15 ++- gcc/config/s390/s390.opt | 7 +- gcc/testsuite/gcc.target/s390/aligned-1.c | 101 +++++++++++++++++-- gcc/testsuite/gcc.target/s390/unaligned-1.c | 103 ++++++++++++++++++-- gcc/testsuite/gcc.target/s390/unaligned-2.c | 16 --- 5 files changed, 201 insertions(+), 41 deletions(-) delete mode 100644 gcc/testsuite/gcc.target/s390/unaligned-2.c diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index e63965578f14..372a23244032 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -13802,10 +13802,19 @@ s390_encode_section_info (tree decl, rtx rtl, int first) that can go wrong (i.e. no FUNC_DECLs). All symbols without an explicit alignment are assumed to be 2 byte aligned as mandated by our ABI. This behavior can be - overridden for external symbols with the -munaligned-symbols - switch. */ + overridden for external and weak symbols with the + -munaligned-symbols switch. + For all external symbols without explicit alignment + DECL_ALIGN is already trimmed down to 8, however for weak + symbols this does not happen. These cases are catched by the + type size check. */ + const_tree size = TYPE_SIZE (TREE_TYPE (decl)); + unsigned HOST_WIDE_INT size_num = (tree_fits_uhwi_p (size) + ? tree_to_uhwi (size) : 0); if ((DECL_USER_ALIGN (decl) && DECL_ALIGN (decl) % 16) - || (s390_unaligned_symbols_p && !decl_binds_to_current_def_p (decl))) + || (s390_unaligned_symbols_p + && !decl_binds_to_current_def_p (decl) + && (DECL_USER_ALIGN (decl) ? DECL_ALIGN (decl) % 16 : size_num < 16))) SYMBOL_FLAG_SET_NOTALIGN2 (XEXP (rtl, 0)); else if (DECL_ALIGN (decl) % 32) SYMBOL_FLAG_SET_NOTALIGN4 (XEXP (rtl, 0)); diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt index 901ae4beb018..a5b5aa95a122 100644 --- a/gcc/config/s390/s390.opt +++ b/gcc/config/s390/s390.opt @@ -332,7 +332,8 @@ Store all argument registers on the stack. munaligned-symbols Target Var(s390_unaligned_symbols_p) Init(0) -Assume external symbols to be potentially unaligned. By default all -symbols without explicit alignment are assumed to reside on a 2 byte -boundary as mandated by the IBM Z ABI. +Assume external symbols, whose natural alignment would be 1, to be +potentially unaligned. By default all symbols without explicit +alignment are assumed to reside on a 2 byte boundary as mandated by +the IBM Z ABI. diff --git a/gcc/testsuite/gcc.target/s390/aligned-1.c b/gcc/testsuite/gcc.target/s390/aligned-1.c index 2dc99cf66bdc..3f5a2611ef1e 100644 --- a/gcc/testsuite/gcc.target/s390/aligned-1.c +++ b/gcc/testsuite/gcc.target/s390/aligned-1.c @@ -1,20 +1,103 @@ -/* Even symbols without explicite alignment are assumed to reside on a +/* Even symbols without explicit alignment are assumed to reside on a 2 byte boundary, as mandated by the IBM Z ELF ABI, and therefore can be accessed using the larl instruction. */ /* { dg-do compile } */ /* { dg-options "-O3 -march=z900 -fno-section-anchors" } */ -extern unsigned char extern_implicitly_aligned; -extern unsigned char extern_explicitly_aligned __attribute__((aligned(2))); -unsigned char aligned; +extern unsigned char extern_char; +extern unsigned char extern_explicitly_aligned_char __attribute__((aligned(2))); +extern unsigned char extern_explicitly_unaligned_char __attribute__((aligned(1))); +extern unsigned char __attribute__((weak)) extern_weak_char; +extern unsigned char extern_explicitly_aligned_weak_char __attribute__((weak,aligned(2))); +extern unsigned char extern_explicitly_unaligned_weak_char __attribute__((weak,aligned(1))); -unsigned char +unsigned char normal_char; +unsigned char explicitly_unaligned_char __attribute__((aligned(1))); +unsigned char __attribute__((weak)) weak_char = 0; +unsigned char explicitly_aligned_weak_char __attribute__((weak,aligned(2))); +unsigned char explicitly_unaligned_weak_char __attribute__((weak,aligned(1))); + +extern unsigned int extern_int; +extern unsigned int extern_explicitly_aligned_int __attribute__((aligned(4))); +extern unsigned int extern_explicitly_unaligned_int __attribute__((aligned(1))); +extern unsigned int __attribute__((weak)) extern_weak_int; +extern unsigned int extern_explicitly_aligned_weak_int __attribute__((weak,aligned(4))); +extern unsigned int extern_explicitly_unaligned_weak_int __attribute__((weak,aligned(1))); + +unsigned int normal_int; +unsigned int explicitly_unaligned_int __attribute__((aligned(1))); +unsigned int __attribute__((weak)) weak_int = 0; +unsigned int explicitly_aligned_weak_int __attribute__((weak,aligned(4))); +unsigned int explicitly_unaligned_weak_int __attribute__((weak,aligned(1))); + +extern const void extern_void; +extern const void extern_explicitly_aligned_void __attribute__((aligned(2))); +extern const void extern_explicitly_unaligned_void __attribute__((aligned(1))); +extern const void __attribute__((weak)) extern_weak_void; +extern const void extern_explicitly_aligned_weak_void __attribute__((weak,aligned(2))); +extern const void extern_explicitly_unaligned_weak_void __attribute__((weak,aligned(1))); + + +unsigned int foo () { - return extern_implicitly_aligned + extern_explicitly_aligned + aligned; + return extern_char + extern_explicitly_aligned_char + + extern_explicitly_unaligned_char + + extern_weak_char + extern_explicitly_aligned_weak_char + + extern_explicitly_unaligned_weak_char + + + normal_char + explicitly_unaligned_char + + weak_char + explicitly_aligned_weak_char + + explicitly_unaligned_weak_char + + + extern_int + extern_explicitly_aligned_int + + extern_explicitly_unaligned_int + + extern_weak_int + extern_explicitly_aligned_weak_int + + extern_explicitly_unaligned_weak_int + + + normal_int + explicitly_unaligned_int + + weak_int + explicitly_aligned_weak_int + + explicitly_unaligned_weak_int; } -/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_implicitly_aligned\n" 1 } } */ -/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned\n" 1 } } */ -/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,aligned\n" 1 } } */ +const void *f1(void) { return &extern_void; } +const void *f2(void) { return &extern_explicitly_aligned_void; } +const void *f3(void) { return &extern_explicitly_unaligned_void; } +const void *f4(void) { return &extern_weak_void; } +const void *f5(void) { return &extern_explicitly_aligned_weak_void; } +const void *f6(void) { return &extern_explicitly_unaligned_weak_void; } + + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_char\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_char\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,normal_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_char\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,weak_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_aligned_weak_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_weak_char\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_int\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_int\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,normal_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_int\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_aligned_weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_weak_int\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_void\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_void\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_void\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_void\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_void\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_void\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/s390/unaligned-1.c b/gcc/testsuite/gcc.target/s390/unaligned-1.c index 421330aded1b..47d77160266f 100644 --- a/gcc/testsuite/gcc.target/s390/unaligned-1.c +++ b/gcc/testsuite/gcc.target/s390/unaligned-1.c @@ -1,20 +1,103 @@ -/* With the -munaligned-symbols option all external symbols without - explicite alignment are assumed to be potentially unaligned and - therefore cannot be accessed with larl. */ +/* With the -munaligned-symbols option all external and weak symbols + without explicit alignment are assumed to be potentially unaligned + and therefore cannot be accessed with larl. */ /* { dg-do compile } */ /* { dg-options "-O3 -march=z900 -fno-section-anchors -munaligned-symbols" } */ -extern unsigned char extern_unaligned; -extern unsigned char extern_explicitly_aligned __attribute__((aligned(2))); -unsigned char aligned; +extern unsigned char extern_char; +extern unsigned char extern_explicitly_aligned_char __attribute__((aligned(2))); +extern unsigned char extern_explicitly_unaligned_char __attribute__((aligned(1))); +extern unsigned char __attribute__((weak)) extern_weak_char; +extern unsigned char extern_explicitly_aligned_weak_char __attribute__((weak,aligned(2))); +extern unsigned char extern_explicitly_unaligned_weak_char __attribute__((weak,aligned(1))); + +unsigned char normal_char; +unsigned char explicitly_unaligned_char __attribute__((aligned(1))); +unsigned char __attribute__((weak)) weak_char = 0; +unsigned char explicitly_aligned_weak_char __attribute__((weak,aligned(2))); +unsigned char explicitly_unaligned_weak_char __attribute__((weak,aligned(1))); + +extern unsigned int extern_int; +extern unsigned int extern_explicitly_aligned_int __attribute__((aligned(4))); +extern unsigned int extern_explicitly_unaligned_int __attribute__((aligned(1))); +extern unsigned int __attribute__((weak)) extern_weak_int; +extern unsigned int extern_explicitly_aligned_weak_int __attribute__((weak,aligned(4))); +extern unsigned int extern_explicitly_unaligned_weak_int __attribute__((weak,aligned(1))); + +unsigned int normal_int; +unsigned int explicitly_unaligned_int __attribute__((aligned(1))); +unsigned int __attribute__((weak)) weak_int = 0; +unsigned int explicitly_aligned_weak_int __attribute__((weak,aligned(4))); +unsigned int explicitly_unaligned_weak_int __attribute__((weak,aligned(1))); + +extern const void extern_void; +extern const void extern_explicitly_aligned_void __attribute__((aligned(2))); +extern const void extern_explicitly_unaligned_void __attribute__((aligned(1))); +extern const void __attribute__((weak)) extern_weak_void; +extern const void extern_explicitly_aligned_weak_void __attribute__((weak,aligned(2))); +extern const void extern_explicitly_unaligned_weak_void __attribute__((weak,aligned(1))); + unsigned char foo () { - return extern_unaligned + extern_explicitly_aligned + aligned; + return extern_char + extern_explicitly_aligned_char + + extern_explicitly_unaligned_char + + extern_weak_char + extern_explicitly_aligned_weak_char + + extern_explicitly_unaligned_weak_char + + + normal_char + explicitly_unaligned_char + + weak_char + explicitly_aligned_weak_char + + explicitly_unaligned_weak_char + + + extern_int + extern_explicitly_aligned_int + + extern_explicitly_unaligned_int + + extern_weak_int + extern_explicitly_aligned_weak_int + + extern_explicitly_unaligned_weak_int + + + normal_int + explicitly_unaligned_int + + weak_int + explicitly_aligned_weak_int + + explicitly_unaligned_weak_int; } -/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_unaligned\n" 0 } } */ -/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned\n" 1 } } */ -/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,aligned\n" 1 } } */ +const void *f1(void) { return &extern_void; } +const void *f2(void) { return &extern_explicitly_aligned_void; } +const void *f3(void) { return &extern_explicitly_unaligned_void; } +const void *f4(void) { return &extern_weak_void; } +const void *f5(void) { return &extern_explicitly_aligned_weak_void; } +const void *f6(void) { return &extern_explicitly_unaligned_weak_void; } + + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_char\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_char\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_char\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_char\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,normal_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_char\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,weak_char\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_aligned_weak_char\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_weak_char\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_int\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_int\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,normal_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_int\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_aligned_weak_int\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_weak_int\n" 0 } } */ + +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_void\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_void\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_void\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_void\n" 0 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_void\n" 1 } } */ +/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_void\n" 0 } } */ diff --git a/gcc/testsuite/gcc.target/s390/unaligned-2.c b/gcc/testsuite/gcc.target/s390/unaligned-2.c deleted file mode 100644 index c1ece6d5935e..000000000000 --- a/gcc/testsuite/gcc.target/s390/unaligned-2.c +++ /dev/null @@ -1,16 +0,0 @@ -/* weak symbols might get overridden in another module by symbols - which are not aligned on a 2-byte boundary. Although this violates - the zABI we try to handle this gracefully by not using larl on - these symbols if -munaligned-symbols has been specified. */ - -/* { dg-do compile } */ -/* { dg-options "-O3 -march=z900 -fno-section-anchors -munaligned-symbols" } */ -unsigned char __attribute__((weak)) weaksym = 0; - -unsigned char -foo () -{ - return weaksym; -} - -/* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,weaksym\n" 0 } } */ From ddf852dac2abaca317c10b8323f338123b0585c8 Mon Sep 17 00:00:00 2001 From: Chung-Lin Tang <cltang@baylibre.com> Date: Thu, 14 Mar 2024 10:39:52 +0000 Subject: [PATCH 049/551] OpenACC 2.7: front-end support for readonly modifier This patch implements the front-end support for the 'readonly' modifier for the OpenACC 'copyin' clause and 'cache' directive. This currently only includes front-end parsing for C/C++/Fortran and setting of new bits OMP_CLAUSE_MAP_READONLY, OMP_CLAUSE__CACHE__READONLY. Further linking of these bits to points-to analysis and/or utilization of read-only memory in accelerator target are for later patches. gcc/c/ChangeLog: * c-parser.cc (c_parser_oacc_data_clause): Add parsing support for 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier found, update comments. (c_parser_oacc_cache): Add parsing support for 'readonly' modifier, set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update comments. gcc/cp/ChangeLog: * parser.cc (cp_parser_oacc_data_clause): Add parsing support for 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier found, update comments. (cp_parser_oacc_cache): Add parsing support for 'readonly' modifier, set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update comments. gcc/fortran/ChangeLog: * dump-parse-tree.cc (show_omp_namelist): Print "readonly," for OMP_LIST_MAP and OMP_LIST_CACHE if n->u.map.readonly is set. Adjust 'n->u.map_op' to 'n->u.map.op'. * gfortran.h (typedef struct gfc_omp_namelist): Adjust map_op as 'ENUM_BITFIELD (gfc_omp_map_op) op:8', add 'bool readonly' field, change to named struct field 'map'. * openmp.cc (gfc_match_omp_map_clause): Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_omp_clause_reduction): Likewise. (gfc_match_omp_clauses): Add readonly modifier parsing for OpenACC copyin clause, set 'n->u.map.op' and 'n->u.map.readonly' for parsed clause. Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_oacc_declare): Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_match_oacc_cache): Add readonly modifier parsing for OpenACC cache directive. (resolve_omp_clauses): Adjust 'n->u.map_op' to 'n->u.map.op'. * trans-decl.cc (add_clause): Adjust 'n->u.map_op' to 'n->u.map.op'. (finish_oacc_declare): Likewise. * trans-openmp.cc (gfc_trans_omp_clauses): Set OMP_CLAUSE_MAP_READONLY, OMP_CLAUSE__CACHE__READONLY to 1 when readonly is set. Adjust 'n->u.map_op' to 'n->u.map.op'. (gfc_add_clause_implicitly): Adjust 'n->u.map_op' to 'n->u.map.op'. gcc/ChangeLog: * tree.h (OMP_CLAUSE_MAP_READONLY): New macro. (OMP_CLAUSE__CACHE__READONLY): New macro. * tree-core.h (struct GTY(()) tree_base): Adjust comments for new uses of readonly_flag bit in OMP_CLAUSE_MAP_READONLY and OMP_CLAUSE__CACHE__READONLY. * tree-pretty-print.cc (dump_omp_clause): Add support for printing OMP_CLAUSE_MAP_READONLY and OMP_CLAUSE__CACHE__READONLY. gcc/testsuite/ChangeLog: * c-c++-common/goacc/readonly-1.c: New test. * gfortran.dg/goacc/readonly-1.f90: New test. --- gcc/c/c-parser.cc | 68 ++++++++++++-- gcc/cp/parser.cc | 63 +++++++++++-- gcc/fortran/dump-parse-tree.cc | 5 +- gcc/fortran/gfortran.h | 6 +- gcc/fortran/openmp.cc | 87 ++++++++++++------ gcc/fortran/trans-decl.cc | 6 +- gcc/fortran/trans-openmp.cc | 47 +++++----- gcc/testsuite/c-c++-common/goacc/readonly-1.c | 59 ++++++++++++ .../gfortran.dg/goacc/readonly-1.f90 | 89 +++++++++++++++++++ gcc/tree-core.h | 6 ++ gcc/tree-pretty-print.cc | 4 + gcc/tree.h | 8 ++ 12 files changed, 379 insertions(+), 69 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/goacc/readonly-1.c create mode 100644 gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 53e99aa29d96..00f8bf4376e5 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -15627,7 +15627,11 @@ c_parser_omp_var_list_parens (c_parser *parser, enum omp_clause_code kind, OpenACC 2.6: no_create ( variable-list ) attach ( variable-list ) - detach ( variable-list ) */ + detach ( variable-list ) + + OpenACC 2.7: + copyin (readonly : variable-list ) + */ static tree c_parser_oacc_data_clause (c_parser *parser, pragma_omp_clause c_kind, @@ -15680,11 +15684,37 @@ c_parser_oacc_data_clause (c_parser *parser, pragma_omp_clause c_kind, default: gcc_unreachable (); } - tree nl, c; - nl = c_parser_omp_var_list_parens (parser, OMP_CLAUSE_MAP, list, false); - for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c)) - OMP_CLAUSE_SET_MAP_KIND (c, kind); + tree nl = list; + bool readonly = false; + location_t open_loc = c_parser_peek_token (parser)->location; + matching_parens parens; + if (parens.require_open (parser)) + { + /* Turn on readonly modifier parsing for copyin clause. */ + if (c_kind == PRAGMA_OACC_CLAUSE_COPYIN) + { + c_token *token = c_parser_peek_token (parser); + if (token->type == CPP_NAME + && !strcmp (IDENTIFIER_POINTER (token->value), "readonly") + && c_parser_peek_2nd_token (parser)->type == CPP_COLON) + { + c_parser_consume_token (parser); + c_parser_consume_token (parser); + readonly = true; + } + } + nl = c_parser_omp_variable_list (parser, open_loc, OMP_CLAUSE_MAP, list, + false); + parens.skip_until_found_close (parser); + } + + for (tree c = nl; c != list; c = OMP_CLAUSE_CHAIN (c)) + { + OMP_CLAUSE_SET_MAP_KIND (c, kind); + if (readonly) + OMP_CLAUSE_MAP_READONLY (c) = 1; + } return nl; } @@ -19821,15 +19851,39 @@ c_parser_omp_structured_block (c_parser *parser, bool *if_p) /* OpenACC 2.0: # pragma acc cache (variable-list) new-line + OpenACC 2.7: + # pragma acc cache (readonly: variable-list) new-line + LOC is the location of the #pragma token. */ static tree c_parser_oacc_cache (location_t loc, c_parser *parser) { - tree stmt, clauses; + tree stmt, clauses = NULL_TREE; + bool readonly = false; + location_t open_loc = c_parser_peek_token (parser)->location; + matching_parens parens; + if (parens.require_open (parser)) + { + c_token *token = c_parser_peek_token (parser); + if (token->type == CPP_NAME + && !strcmp (IDENTIFIER_POINTER (token->value), "readonly") + && c_parser_peek_2nd_token (parser)->type == CPP_COLON) + { + c_parser_consume_token (parser); + c_parser_consume_token (parser); + readonly = true; + } + clauses = c_parser_omp_variable_list (parser, open_loc, + OMP_CLAUSE__CACHE_, NULL_TREE); + parens.skip_until_found_close (parser); + } + + if (readonly) + for (tree c = clauses; c; c = OMP_CLAUSE_CHAIN (c)) + OMP_CLAUSE__CACHE__READONLY (c) = 1; - clauses = c_parser_omp_var_list_parens (parser, OMP_CLAUSE__CACHE_, NULL); clauses = c_finish_omp_clauses (clauses, C_ORT_ACC); c_parser_skip_to_pragma_eol (parser); diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index bc3aa9dd6adb..6134187c5db9 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -38544,7 +38544,11 @@ cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list, OpenACC 2.6: no_create ( variable-list ) attach ( variable-list ) - detach ( variable-list ) */ + detach ( variable-list ) + + OpenACC 2.7: + copyin (readonly : variable-list ) + */ static tree cp_parser_oacc_data_clause (cp_parser *parser, pragma_omp_clause c_kind, @@ -38597,11 +38601,34 @@ cp_parser_oacc_data_clause (cp_parser *parser, pragma_omp_clause c_kind, default: gcc_unreachable (); } - tree nl, c; - nl = cp_parser_omp_var_list (parser, OMP_CLAUSE_MAP, list, false); - for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c)) - OMP_CLAUSE_SET_MAP_KIND (c, kind); + tree nl = list; + bool readonly = false; + if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN)) + { + /* Turn on readonly modifier parsing for copyin clause. */ + if (c_kind == PRAGMA_OACC_CLAUSE_COPYIN) + { + cp_token *token = cp_lexer_peek_token (parser->lexer); + if (token->type == CPP_NAME + && !strcmp (IDENTIFIER_POINTER (token->u.value), "readonly") + && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON) + { + cp_lexer_consume_token (parser->lexer); + cp_lexer_consume_token (parser->lexer); + readonly = true; + } + } + nl = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_MAP, list, NULL, + false); + } + + for (tree c = nl; c != list; c = OMP_CLAUSE_CHAIN (c)) + { + OMP_CLAUSE_SET_MAP_KIND (c, kind); + if (readonly) + OMP_CLAUSE_MAP_READONLY (c) = 1; + } return nl; } @@ -47178,6 +47205,9 @@ cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok, /* OpenACC 2.0: # pragma acc cache (variable-list) new-line + + OpenACC 2.7: + # pragma acc cache (readonly: variable-list) new-line */ static tree @@ -47187,9 +47217,28 @@ cp_parser_oacc_cache (cp_parser *parser, cp_token *pragma_tok) clauses. */ auto_suppress_location_wrappers sentinel; - tree stmt, clauses; + tree stmt, clauses = NULL_TREE; + bool readonly = false; + + if (cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN)) + { + cp_token *token = cp_lexer_peek_token (parser->lexer); + if (token->type == CPP_NAME + && !strcmp (IDENTIFIER_POINTER (token->u.value), "readonly") + && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON) + { + cp_lexer_consume_token (parser->lexer); + cp_lexer_consume_token (parser->lexer); + readonly = true; + } + clauses = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE__CACHE_, + NULL, NULL); + } + + if (readonly) + for (tree c = clauses; c; c = OMP_CLAUSE_CHAIN (c)) + OMP_CLAUSE__CACHE__READONLY (c) = 1; - clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE__CACHE_, NULL_TREE); clauses = finish_omp_clauses (clauses, C_ORT_ACC); cp_parser_require_pragma_eol (parser, cp_lexer_peek_token (parser->lexer)); diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc index 7b154eb3ca71..db84b06289be 100644 --- a/gcc/fortran/dump-parse-tree.cc +++ b/gcc/fortran/dump-parse-tree.cc @@ -1400,6 +1400,9 @@ show_omp_namelist (int list_type, gfc_omp_namelist *n) fputs (") ALLOCATE(", dumpfile); continue; } + if ((list_type == OMP_LIST_MAP || list_type == OMP_LIST_CACHE) + && n->u.map.readonly) + fputs ("readonly,", dumpfile); if (list_type == OMP_LIST_REDUCTION) switch (n->u.reduction_op) { @@ -1467,7 +1470,7 @@ show_omp_namelist (int list_type, gfc_omp_namelist *n) default: break; } else if (list_type == OMP_LIST_MAP) - switch (n->u.map_op) + switch (n->u.map.op) { case OMP_MAP_ALLOC: fputs ("alloc:", dumpfile); break; case OMP_MAP_TO: fputs ("to:", dumpfile); break; diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index ebba2336e129..32b792f85fb9 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -1363,7 +1363,11 @@ typedef struct gfc_omp_namelist { gfc_omp_reduction_op reduction_op; gfc_omp_depend_doacross_op depend_doacross_op; - gfc_omp_map_op map_op; + struct + { + ENUM_BITFIELD (gfc_omp_map_op) op:8; + bool readonly; + } map; gfc_expr *align; struct { diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 38de60238c0e..5c44e666eb99 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -1210,7 +1210,7 @@ gfc_match_omp_map_clause (gfc_omp_namelist **list, gfc_omp_map_op map_op, { gfc_omp_namelist *n; for (n = *head; n; n = n->next) - n->u.map_op = map_op; + n->u.map.op = map_op; return true; } @@ -1524,7 +1524,7 @@ gfc_match_omp_clause_reduction (char pc, gfc_omp_clauses *c, bool openacc, gfc_omp_namelist *p = gfc_get_omp_namelist (), **tl; p->sym = n->sym; p->where = p->where; - p->u.map_op = OMP_MAP_ALWAYS_TOFROM; + p->u.map.op = OMP_MAP_ALWAYS_TOFROM; tl = &c->lists[OMP_LIST_MAP]; while (*tl) @@ -2181,11 +2181,25 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask, { if (openacc) { - if (gfc_match ("copyin ( ") == MATCH_YES - && gfc_match_omp_map_clause (&c->lists[OMP_LIST_MAP], - OMP_MAP_TO, true, - allow_derived)) - continue; + if (gfc_match ("copyin ( ") == MATCH_YES) + { + bool readonly = gfc_match ("readonly : ") == MATCH_YES; + head = NULL; + if (gfc_match_omp_variable_list ("", + &c->lists[OMP_LIST_MAP], + true, NULL, &head, true, + allow_derived) + == MATCH_YES) + { + gfc_omp_namelist *n; + for (n = *head; n; n = n->next) + { + n->u.map.op = OMP_MAP_TO; + n->u.map.readonly = readonly; + } + continue; + } + } } else if (gfc_match_omp_variable_list ("copyin (", &c->lists[OMP_LIST_COPYIN], @@ -3134,7 +3148,7 @@ gfc_match_omp_clauses (gfc_omp_clauses **cp, const omp_mask mask, { gfc_omp_namelist *n; for (n = *head; n; n = n->next) - n->u.map_op = map_op; + n->u.map.op = map_op; continue; } gfc_current_locus = old_loc; @@ -4002,7 +4016,7 @@ gfc_match_oacc_declare (void) if (gfc_current_ns->proc_name && gfc_current_ns->proc_name->attr.flavor == FL_MODULE) { - if (n->u.map_op != OMP_MAP_ALLOC && n->u.map_op != OMP_MAP_TO) + if (n->u.map.op != OMP_MAP_ALLOC && n->u.map.op != OMP_MAP_TO) { gfc_error ("Invalid clause in module with !$ACC DECLARE at %L", &where); @@ -4036,7 +4050,7 @@ gfc_match_oacc_declare (void) return MATCH_ERROR; } - switch (n->u.map_op) + switch (n->u.map.op) { case OMP_MAP_FORCE_ALLOC: case OMP_MAP_ALLOC: @@ -4151,21 +4165,36 @@ gfc_match_oacc_wait (void) match gfc_match_oacc_cache (void) { + bool readonly = false; gfc_omp_clauses *c = gfc_get_omp_clauses (); /* The OpenACC cache directive explicitly only allows "array elements or subarrays", which we're currently not checking here. Either check this after the call of gfc_match_omp_variable_list, or add something like a only_sections variant next to its allow_sections parameter. */ - match m = gfc_match_omp_variable_list (" (", - &c->lists[OMP_LIST_CACHE], true, - NULL, NULL, true); + match m = gfc_match (" ( "); if (m != MATCH_YES) { gfc_free_omp_clauses(c); return m; } - if (gfc_current_state() != COMP_DO + if (gfc_match ("readonly : ") == MATCH_YES) + readonly = true; + + gfc_omp_namelist **head = NULL; + m = gfc_match_omp_variable_list ("", &c->lists[OMP_LIST_CACHE], true, + NULL, &head, true); + if (m != MATCH_YES) + { + gfc_free_omp_clauses(c); + return m; + } + + if (readonly) + for (gfc_omp_namelist *n = *head; n; n = n->next) + n->u.map.readonly = true; + + if (gfc_current_state() != COMP_DO && gfc_current_state() != COMP_DO_CONCURRENT) { gfc_error ("ACC CACHE directive must be inside of loop %C"); @@ -8436,8 +8465,8 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, } if (openacc && list == OMP_LIST_MAP - && (n->u.map_op == OMP_MAP_ATTACH - || n->u.map_op == OMP_MAP_DETACH)) + && (n->u.map.op == OMP_MAP_ATTACH + || n->u.map.op == OMP_MAP_DETACH)) { symbol_attribute attr; if (n->expr) @@ -8447,7 +8476,7 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, if (!attr.pointer && !attr.allocatable) gfc_error ("%qs clause argument must be ALLOCATABLE or " "a POINTER at %L", - (n->u.map_op == OMP_MAP_ATTACH) ? "attach" + (n->u.map.op == OMP_MAP_ATTACH) ? "attach" : "detach", &n->where); } if (lastref @@ -8518,7 +8547,7 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, else if (openacc) { if (list == OMP_LIST_MAP - && n->u.map_op == OMP_MAP_FORCE_DEVICEPTR) + && n->u.map.op == OMP_MAP_FORCE_DEVICEPTR) resolve_oacc_deviceptr_clause (n->sym, n->where, name); else resolve_oacc_data_clauses (n->sym, n->where, name); @@ -8540,7 +8569,7 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, { case EXEC_OMP_TARGET: case EXEC_OMP_TARGET_DATA: - switch (n->u.map_op) + switch (n->u.map.op) { case OMP_MAP_TO: case OMP_MAP_ALWAYS_TO: @@ -8567,7 +8596,7 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, } break; case EXEC_OMP_TARGET_ENTER_DATA: - switch (n->u.map_op) + switch (n->u.map.op) { case OMP_MAP_TO: case OMP_MAP_ALWAYS_TO: @@ -8577,16 +8606,16 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, case OMP_MAP_PRESENT_ALLOC: break; case OMP_MAP_TOFROM: - n->u.map_op = OMP_MAP_TO; + n->u.map.op = OMP_MAP_TO; break; case OMP_MAP_ALWAYS_TOFROM: - n->u.map_op = OMP_MAP_ALWAYS_TO; + n->u.map.op = OMP_MAP_ALWAYS_TO; break; case OMP_MAP_PRESENT_TOFROM: - n->u.map_op = OMP_MAP_PRESENT_TO; + n->u.map.op = OMP_MAP_PRESENT_TO; break; case OMP_MAP_ALWAYS_PRESENT_TOFROM: - n->u.map_op = OMP_MAP_ALWAYS_PRESENT_TO; + n->u.map.op = OMP_MAP_ALWAYS_PRESENT_TO; break; default: gfc_error ("TARGET ENTER DATA with map-type other " @@ -8596,7 +8625,7 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, } break; case EXEC_OMP_TARGET_EXIT_DATA: - switch (n->u.map_op) + switch (n->u.map.op) { case OMP_MAP_FROM: case OMP_MAP_ALWAYS_FROM: @@ -8606,16 +8635,16 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, case OMP_MAP_DELETE: break; case OMP_MAP_TOFROM: - n->u.map_op = OMP_MAP_FROM; + n->u.map.op = OMP_MAP_FROM; break; case OMP_MAP_ALWAYS_TOFROM: - n->u.map_op = OMP_MAP_ALWAYS_FROM; + n->u.map.op = OMP_MAP_ALWAYS_FROM; break; case OMP_MAP_PRESENT_TOFROM: - n->u.map_op = OMP_MAP_PRESENT_FROM; + n->u.map.op = OMP_MAP_PRESENT_FROM; break; case OMP_MAP_ALWAYS_PRESENT_TOFROM: - n->u.map_op = OMP_MAP_ALWAYS_PRESENT_FROM; + n->u.map.op = OMP_MAP_ALWAYS_PRESENT_FROM; break; default: gfc_error ("TARGET EXIT DATA with map-type other " diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index 6d4630369660..b7dea11461fb 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -6744,7 +6744,7 @@ add_clause (gfc_symbol *sym, gfc_omp_map_op map_op) n = gfc_get_omp_namelist (); n->sym = sym; - n->u.map_op = map_op; + n->u.map.op = map_op; if (!module_oacc_clauses) module_oacc_clauses = gfc_get_omp_clauses (); @@ -6846,10 +6846,10 @@ finish_oacc_declare (gfc_namespace *ns, gfc_symbol *sym, bool block) for (n = omp_clauses->lists[OMP_LIST_MAP]; n; n = n->next) { - switch (n->u.map_op) + switch (n->u.map.op) { case OMP_MAP_DEVICE_RESIDENT: - n->u.map_op = OMP_MAP_FORCE_ALLOC; + n->u.map.op = OMP_MAP_FORCE_ALLOC; break; default: diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index 1dba47126edc..7a088ec5b2df 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -3148,7 +3148,10 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, || (n->expr && gfc_expr_attr (n->expr).pointer))) always_modifier = true; - switch (n->u.map_op) + if (n->u.map.readonly) + OMP_CLAUSE_MAP_READONLY (node) = 1; + + switch (n->u.map.op) { case OMP_MAP_ALLOC: OMP_CLAUSE_SET_MAP_KIND (node, GOMP_MAP_ALLOC); @@ -3275,8 +3278,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, && n->sym->attr.omp_declare_target && (always_modifier || n->sym->attr.pointer) && op != EXEC_OMP_TARGET_EXIT_DATA - && n->u.map_op != OMP_MAP_DELETE - && n->u.map_op != OMP_MAP_RELEASE) + && n->u.map.op != OMP_MAP_DELETE + && n->u.map.op != OMP_MAP_RELEASE) { gcc_assert (n->sym->ts.u.cl->backend_decl); node5 = build_omp_clause (input_location, OMP_CLAUSE_MAP); @@ -3342,7 +3345,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, { enum gomp_map_kind gmk = GOMP_MAP_POINTER; if (op == EXEC_OMP_TARGET_EXIT_DATA - && n->u.map_op == OMP_MAP_DELETE) + && n->u.map.op == OMP_MAP_DELETE) gmk = GOMP_MAP_DELETE; else if (op == EXEC_OMP_TARGET_EXIT_DATA) gmk = GOMP_MAP_RELEASE; @@ -3365,7 +3368,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, { enum gomp_map_kind gmk; if (op == EXEC_OMP_TARGET_EXIT_DATA - && n->u.map_op == OMP_MAP_DELETE) + && n->u.map.op == OMP_MAP_DELETE) gmk = GOMP_MAP_DELETE; else if (op == EXEC_OMP_TARGET_EXIT_DATA) gmk = GOMP_MAP_RELEASE; @@ -3397,18 +3400,18 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, node2 = build_omp_clause (input_location, OMP_CLAUSE_MAP); OMP_CLAUSE_DECL (node2) = decl; OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type); - if (n->u.map_op == OMP_MAP_DELETE) + if (n->u.map.op == OMP_MAP_DELETE) map_kind = GOMP_MAP_DELETE; else if (op == EXEC_OMP_TARGET_EXIT_DATA - || n->u.map_op == OMP_MAP_RELEASE) + || n->u.map.op == OMP_MAP_RELEASE) map_kind = GOMP_MAP_RELEASE; else map_kind = GOMP_MAP_TO_PSET; OMP_CLAUSE_SET_MAP_KIND (node2, map_kind); if (op != EXEC_OMP_TARGET_EXIT_DATA - && n->u.map_op != OMP_MAP_DELETE - && n->u.map_op != OMP_MAP_RELEASE) + && n->u.map.op != OMP_MAP_DELETE + && n->u.map.op != OMP_MAP_RELEASE) { node3 = build_omp_clause (input_location, OMP_CLAUSE_MAP); @@ -3426,7 +3429,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, = gfc_conv_descriptor_data_get (decl); OMP_CLAUSE_SIZE (node3) = size_int (0); - if (n->u.map_op == OMP_MAP_ATTACH) + if (n->u.map.op == OMP_MAP_ATTACH) { /* Standalone attach clauses used with arrays with descriptors must copy the descriptor to the @@ -3442,7 +3445,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, node3 = NULL; goto finalize_map_clause; } - else if (n->u.map_op == OMP_MAP_DETACH) + else if (n->u.map.op == OMP_MAP_DETACH) { OMP_CLAUSE_SET_MAP_KIND (node3, GOMP_MAP_DETACH); /* Similarly to above, we don't want to unmap PTR @@ -3635,8 +3638,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, to perform a single attach/detach operation, of the pointer itself, not of the pointed-to object. */ if (openacc - && (n->u.map_op == OMP_MAP_ATTACH - || n->u.map_op == OMP_MAP_DETACH)) + && (n->u.map.op == OMP_MAP_ATTACH + || n->u.map.op == OMP_MAP_DETACH)) { OMP_CLAUSE_DECL (node) = build_fold_addr_expr (OMP_CLAUSE_DECL (node)); @@ -3665,7 +3668,7 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, se.string_length), TYPE_SIZE_UNIT (tmp)); gomp_map_kind kind; - if (n->u.map_op == OMP_MAP_DELETE) + if (n->u.map.op == OMP_MAP_DELETE) kind = GOMP_MAP_DELETE; else if (op == EXEC_OMP_TARGET_EXIT_DATA) kind = GOMP_MAP_RELEASE; @@ -3722,8 +3725,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, to perform a single attach/detach operation, of the pointer itself, not of the pointed-to object. */ if (openacc - && (n->u.map_op == OMP_MAP_ATTACH - || n->u.map_op == OMP_MAP_DETACH)) + && (n->u.map.op == OMP_MAP_ATTACH + || n->u.map.op == OMP_MAP_DETACH)) { OMP_CLAUSE_DECL (node) = build_fold_addr_expr (inner); @@ -3815,8 +3818,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, { /* Bare attach and detach clauses don't want any additional nodes. */ - if ((n->u.map_op == OMP_MAP_ATTACH - || n->u.map_op == OMP_MAP_DETACH) + if ((n->u.map.op == OMP_MAP_ATTACH + || n->u.map.op == OMP_MAP_DETACH) && (POINTER_TYPE_P (TREE_TYPE (inner)) || GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (inner)))) { @@ -3849,8 +3852,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, map_kind = ((GOMP_MAP_ALWAYS_P (map_kind) || gfc_expr_attr (n->expr).pointer) ? GOMP_MAP_ALWAYS_TO : GOMP_MAP_TO); - else if (n->u.map_op == OMP_MAP_RELEASE - || n->u.map_op == OMP_MAP_DELETE) + else if (n->u.map.op == OMP_MAP_RELEASE + || n->u.map.op == OMP_MAP_DELETE) ; else if (op == EXEC_OMP_TARGET_EXIT_DATA || op == EXEC_OACC_EXIT_DATA) @@ -4097,6 +4100,8 @@ gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses, } if (n->u.present_modifier) OMP_CLAUSE_MOTION_PRESENT (node) = 1; + if (list == OMP_LIST_CACHE && n->u.map.readonly) + OMP_CLAUSE__CACHE__READONLY (node) = 1; omp_clauses = gfc_trans_add_clause (node, omp_clauses); } break; @@ -6570,7 +6575,7 @@ gfc_add_clause_implicitly (gfc_omp_clauses *clauses_out, n2->where = n->where; n2->sym = n->sym; if (is_target) - n2->u.map_op = OMP_MAP_TOFROM; + n2->u.map.op = OMP_MAP_TOFROM; if (tail) { tail->next = n2; diff --git a/gcc/testsuite/c-c++-common/goacc/readonly-1.c b/gcc/testsuite/c-c++-common/goacc/readonly-1.c new file mode 100644 index 000000000000..34fc92c24d5c --- /dev/null +++ b/gcc/testsuite/c-c++-common/goacc/readonly-1.c @@ -0,0 +1,59 @@ +/* { dg-additional-options "-fdump-tree-original" } */ + +struct S +{ + int *ptr; + float f; +}; + +int a[32], b[32]; +#pragma acc declare copyin(readonly: a) copyin(b) + +int main (void) +{ + int x[32], y[32]; + struct S s = {x, 0}; + + #pragma acc parallel copyin(readonly: x[:32], s.ptr[:16]) copyin(y[:32]) + { + #pragma acc cache (readonly: x[:32]) + #pragma acc cache (y[:32]) + } + + #pragma acc kernels copyin(readonly: x[:32], s.ptr[:16]) copyin(y[:32]) + { + #pragma acc cache (readonly: x[:32]) + #pragma acc cache (y[:32]) + } + + #pragma acc serial copyin(readonly: x[:32], s.ptr[:16]) copyin(y[:32]) + { + #pragma acc cache (readonly: x[:32]) + #pragma acc cache (y[:32]) + } + + #pragma acc data copyin(readonly: x[:32], s.ptr[:16]) copyin(y[:32]) + { + #pragma acc cache (readonly: x[:32]) + #pragma acc cache (y[:32]) + } + + #pragma acc enter data copyin(readonly: x[:32], s.ptr[:16]) copyin(y[:32]) + + return 0; +} + +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc kernels map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc serial map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc data map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc enter data map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ + +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*NON_LVALUE_EXPR <s.ptr> \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c++ } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc kernels map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*NON_LVALUE_EXPR <s.ptr> \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c++ } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc serial map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*NON_LVALUE_EXPR <s.ptr> \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c++ } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc data map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) map\\(readonly,to:\\*NON_LVALUE_EXPR <s.ptr> \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c++ } } } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc enter data map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) map\\(readonly,to:\\*NON_LVALUE_EXPR <s.ptr> \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c++ } } } } */ + +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc cache \\(readonly:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\);$" 4 "original" } } */ +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc cache \\(y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\);$" 4 "original" } } */ diff --git a/gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 b/gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 new file mode 100644 index 000000000000..696ebd08321b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 @@ -0,0 +1,89 @@ +! { dg-additional-options "-fdump-tree-original" } + +subroutine foo (a, n) + integer :: n, a(:) + integer :: i, b(n), c(n) + !$acc parallel copyin(readonly: a(:), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end parallel + + !$acc kernels copyin(readonly: a(:), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end kernels + + !$acc serial copyin(readonly: a(:), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end serial + + !$acc data copyin(readonly: a(:), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end data + + !$acc enter data copyin(readonly: a(:), b(:n)) copyin(c(:)) + +end subroutine foo + +program main + integer :: g(32), h(32) + integer :: i, n = 32, a(32) + integer :: b(32), c(32) + + !$acc declare copyin(readonly: g), copyin(h) + + !$acc parallel copyin(readonly: a(:32), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end parallel + + !$acc kernels copyin(readonly: a(:), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end kernels + + !$acc serial copyin(readonly: a(:), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end serial + + !$acc data copyin(readonly: a(:), b(:n)) copyin(c(:)) + do i = 1,32 + !$acc cache (readonly: a(:), b(:n)) + !$acc cache (c(:)) + enddo + !$acc end data + + !$acc enter data copyin(readonly: a(:), b(:n)) copyin(c(:)) + +end program main + +! { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel map\\(readonly,to:\\*.+ map\\(alloc:a.+ map\\(readonly,to:\\*.+ map\\(alloc:b.+ map\\(to:\\*.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel map\\(readonly,to:a.+ map\\(alloc:a.+ map\\(readonly,to:b.+ map\\(alloc:b.+ map\\(to:c.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc kernels map\\(readonly,to:\\*.+ map\\(alloc:a.+ map\\(readonly,to:\\*.+ map\\(alloc:b.+ map\\(to:\\*.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc kernels map\\(readonly,to:a.+ map\\(alloc:a.+ map\\(readonly,to:b.+ map\\(alloc:b.+ map\\(to:c.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc serial map\\(readonly,to:\\*.+ map\\(alloc:a.+ map\\(readonly,to:\\*.+ map\\(alloc:b.+ map\\(to:\\*.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc serial map\\(readonly,to:a.+ map\\(alloc:a.+ map\\(readonly,to:b.+ map\\(alloc:b.+ map\\(to:c.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc data map\\(readonly,to:\\*.+ map\\(alloc:a.+ map\\(readonly,to:\\*.+ map\\(alloc:b.+ map\\(to:\\*.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc data map\\(readonly,to:a.+ map\\(alloc:a.+ map\\(readonly,to:b.+ map\\(alloc:b.+ map\\(to:c.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc enter data map\\(readonly,to:\\*.+ map\\(alloc:a.+ map\\(readonly,to:\\*.+ map\\(alloc:b.+ map\\(to:\\*.+ map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc enter data map\\(readonly,to:a.+ map\\(alloc:a.+ map\\(readonly,to:b.+ map\\(alloc:b.+ map\\(to:c.+ map\\(alloc:c.+" 1 "original" } } + +! { dg-final { scan-tree-dump-times "(?n)#pragma acc cache \\(readonly:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\*\\) parm.*data \\\[len: .+\\\]\\) \\(readonly:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\*\\) parm.*data \\\[len: .+\\\]\\);" 8 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc cache \\(\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\*\\) parm.*data \\\[len: .+\\\]\\);" 8 "original" } } diff --git a/gcc/tree-core.h b/gcc/tree-core.h index 8a89462bd7ec..d529712306d9 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -1344,6 +1344,12 @@ struct GTY(()) tree_base { TYPE_READONLY in all types + OMP_CLAUSE_MAP_READONLY in + OMP_CLAUSE_MAP + + OMP_CLAUSE__CACHE__READONLY in + OMP_CLAUSE__CACHE_ + constant_flag: TREE_CONSTANT in diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc index 654f5247e3ac..926f7e006a76 100644 --- a/gcc/tree-pretty-print.cc +++ b/gcc/tree-pretty-print.cc @@ -913,6 +913,8 @@ dump_omp_clause (pretty_printer *pp, tree clause, int spc, dump_flags_t flags) case OMP_CLAUSE_MAP: pp_string (pp, "map("); + if (OMP_CLAUSE_MAP_READONLY (clause)) + pp_string (pp, "readonly,"); switch (OMP_CLAUSE_MAP_KIND (clause)) { case GOMP_MAP_ALLOC: @@ -1095,6 +1097,8 @@ dump_omp_clause (pretty_printer *pp, tree clause, int spc, dump_flags_t flags) case OMP_CLAUSE__CACHE_: pp_string (pp, "("); + if (OMP_CLAUSE__CACHE__READONLY (clause)) + pp_string (pp, "readonly:"); dump_generic_node (pp, OMP_CLAUSE_DECL (clause), spc, flags, false); goto print_clause_size; diff --git a/gcc/tree.h b/gcc/tree.h index e1fc6c2221dd..b67a37d65226 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1841,6 +1841,14 @@ class auto_suppress_location_wrappers #define OMP_CLAUSE_MAP_DECL_MAKE_ADDRESSABLE(NODE) \ (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.addressable_flag) +/* Nonzero if OpenACC 'readonly' modifier set, used for 'copyin'. */ +#define OMP_CLAUSE_MAP_READONLY(NODE) \ + TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)) + +/* Same as above, for use in OpenACC cache directives. */ +#define OMP_CLAUSE__CACHE__READONLY(NODE) \ + TREE_READONLY (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__CACHE_)) + /* True on an OMP_CLAUSE_USE_DEVICE_PTR with an OpenACC 'if_present' clause. */ #define OMP_CLAUSE_USE_DEVICE_PTR_IF_PRESENT(NODE) \ From b7f70cfdb6f7ab369ecca14a99a0064d2a11ddd2 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 14 Mar 2024 11:23:42 +0000 Subject: [PATCH 050/551] PR modula2/114333 set type comparison against a cardinal should cause an error The type checker M2Check.mod needs extending to detect if a set, array or record is in either operand at the end of the cascaded test list. gcc/m2/ChangeLog: PR modula2/114333 * gm2-compiler/M2Check.mod (checkUnbounded): New procedure function. (checkArrayTypeEquivalence): Extend checking to cover unbounded arrays, arrays and constants. (IsTyped): Simplified the expression and corrected a test for IsConstructor. (checkTypeKindViolation): New procedure function. (doCheckPair): Call checkTypeKindViolation. * gm2-compiler/M2GenGCC.mod (CodeStatement): Remove parameters to CodeEqu and CodeNotEqu. (PerformCodeIfEqu): New procedure. (CodeIfEqu): Rewrite. (PerformCodeIfNotEqu): New procedure. (CodeIfNotEqu): Rewrite. * gm2-compiler/M2Quads.mod (BuildRelOpFromBoolean): Correct comment. gcc/testsuite/ChangeLog: PR modula2/114333 * gm2/cse/pass/testcse54.mod: New test. * gm2/iso/run/pass/array9.mod: New test. * gm2/iso/run/pass/strcons3.mod: New test. * gm2/iso/run/pass/strcons4.mod: New test. * gm2/pim/fail/badset1.mod: New test. * gm2/pim/fail/badset2.mod: New test. * gm2/pim/fail/badset3.mod: New test. * gm2/pim/fail/badset4.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2Check.mod | 111 ++++++++-- gcc/m2/gm2-compiler/M2GenGCC.mod | 212 +++++++++++++------- gcc/m2/gm2-compiler/M2Quads.mod | 2 +- gcc/testsuite/gm2/cse/pass/testcse54.mod | 7 + gcc/testsuite/gm2/iso/run/pass/array9.mod | 28 +++ gcc/testsuite/gm2/iso/run/pass/strcons3.mod | 30 +++ gcc/testsuite/gm2/iso/run/pass/strcons4.mod | 36 ++++ gcc/testsuite/gm2/pim/fail/badset1.mod | 13 ++ gcc/testsuite/gm2/pim/fail/badset2.mod | 13 ++ gcc/testsuite/gm2/pim/fail/badset3.mod | 11 + gcc/testsuite/gm2/pim/fail/badset4.mod | 11 + 11 files changed, 383 insertions(+), 91 deletions(-) create mode 100644 gcc/testsuite/gm2/cse/pass/testcse54.mod create mode 100644 gcc/testsuite/gm2/iso/run/pass/array9.mod create mode 100644 gcc/testsuite/gm2/iso/run/pass/strcons3.mod create mode 100644 gcc/testsuite/gm2/iso/run/pass/strcons4.mod create mode 100644 gcc/testsuite/gm2/pim/fail/badset1.mod create mode 100644 gcc/testsuite/gm2/pim/fail/badset2.mod create mode 100644 gcc/testsuite/gm2/pim/fail/badset3.mod create mode 100644 gcc/testsuite/gm2/pim/fail/badset4.mod diff --git a/gcc/m2/gm2-compiler/M2Check.mod b/gcc/m2/gm2-compiler/M2Check.mod index 5b45ad39c118..20d463d207b8 100644 --- a/gcc/m2/gm2-compiler/M2Check.mod +++ b/gcc/m2/gm2-compiler/M2Check.mod @@ -46,7 +46,8 @@ FROM SymbolTable IMPORT NulSym, IsRecord, IsSet, GetDType, GetSType, IsType, GetDeclaredMod, IsSubrange, GetArraySubscript, IsConst, IsReallyPointer, IsPointer, IsParameter, ModeOfAddr, GetMode, GetType, IsUnbounded, IsComposite, IsConstructor, - IsParameter, IsConstString, IsConstLitInternal, IsConstLit ; + IsParameter, IsConstString, IsConstLitInternal, IsConstLit, + GetStringLength ; FROM M2GCCDeclare IMPORT GetTypeMin, GetTypeMax ; FROM M2System IMPORT Address ; @@ -258,7 +259,35 @@ END checkSubrange ; (* - checkArrayTypeEquivalence - + checkUnbounded - check to see if the unbounded is type compatible with right. + This is only allowed during parameter passing. +*) + +PROCEDURE checkUnbounded (result: status; tinfo: tInfo; unbounded, right: CARDINAL) : status ; +VAR + lLow, rLow, + lHigh, rHigh: CARDINAL ; +BEGIN + (* Firstly check to see if we have resolved this as false. *) + IF isFalse (result) + THEN + RETURN result + ELSE + Assert (IsUnbounded (unbounded)) ; + IF tinfo^.kind = parameter + THEN + (* --fixme-- we should check the unbounded data type against the type of right. *) + RETURN true + ELSE + (* Not allowed to use an unbounded symbol (type) in an expression or assignment. *) + RETURN false + END + END +END checkUnbounded ; + + +(* + checkArrayTypeEquivalence - check array and unbounded array type equivalence. *) PROCEDURE checkArrayTypeEquivalence (result: status; tinfo: tInfo; @@ -273,7 +302,7 @@ BEGIN THEN lSub := GetArraySubscript (left) ; rSub := GetArraySubscript (right) ; - result := checkPair (result, tinfo, GetType (left), GetType (right)) ; + result := checkPair (result, tinfo, GetSType (left), GetSType (right)) ; IF (lSub # NulSym) AND (rSub # NulSym) THEN result := checkSubrange (result, tinfo, getSType (lSub), getSType (rSub)) @@ -284,8 +313,22 @@ BEGIN THEN RETURN true ELSE - result := checkPair (result, tinfo, GetType (left), GetType (right)) + result := checkUnbounded (result, tinfo, left, right) END + ELSIF IsUnbounded (right) AND (IsArray (left) OR IsUnbounded (left)) + THEN + IF IsGenericSystemType (getSType (right)) OR IsGenericSystemType (getSType (left)) + THEN + RETURN true + ELSE + result := checkUnbounded (result, tinfo, right, left) + END + ELSIF IsArray (left) AND IsConst (right) + THEN + result := checkPair (result, tinfo, GetType (left), GetType (right)) + ELSIF IsArray (right) AND IsConst (left) + THEN + result := checkPair (result, tinfo, GetType (left), GetType (right)) END ; RETURN result END checkArrayTypeEquivalence ; @@ -547,12 +590,12 @@ END checkBaseTypeEquivalence ; (* - IsTyped - + IsTyped - returns TRUE if sym will have a type. *) PROCEDURE IsTyped (sym: CARDINAL) : BOOLEAN ; BEGIN - RETURN IsVar (sym) OR IsVar (sym) OR IsParameter (sym) OR + RETURN IsVar (sym) OR IsParameter (sym) OR IsConstructor (sym) OR (IsConst (sym) AND IsConstructor (sym)) OR IsParameter (sym) OR (IsConst (sym) AND (GetType (sym) # NulSym)) END IsTyped ; @@ -630,16 +673,26 @@ BEGIN RETURN result ELSIF IsConstString (left) THEN - typeRight := GetDType (right) ; - IF typeRight = NulSym + IF IsConstString (right) THEN - RETURN result - ELSIF IsSet (typeRight) OR IsEnumeration (typeRight) OR IsProcedure (typeRight) OR - IsRecord (typeRight) + RETURN true + ELSIF IsTyped (right) THEN - RETURN false - ELSE - RETURN doCheckPair (result, tinfo, Char, typeRight) + typeRight := GetDType (right) ; + IF typeRight = NulSym + THEN + RETURN result + ELSIF IsSet (typeRight) OR IsEnumeration (typeRight) OR + IsProcedure (typeRight) OR IsRecord (typeRight) + THEN + RETURN false + ELSIF IsArray (typeRight) + THEN + RETURN doCheckPair (result, tinfo, Char, GetType (typeRight)) + ELSIF GetStringLength (tinfo^.token, left) = 1 + THEN + RETURN doCheckPair (result, tinfo, Char, typeRight) + END END END ; RETURN result @@ -772,6 +825,30 @@ BEGIN END checkSystemEquivalence ; +(* + checkTypeKindViolation - returns false if one operand left or right is + a set, record or array. +*) + +PROCEDURE checkTypeKindViolation (result: status; tinfo: tInfo; + left, right: CARDINAL) : status ; +BEGIN + IF isFalse (result) OR (result = visited) + THEN + RETURN result + ELSE + (* We have checked IsSet (left) and IsSet (right) etc in doCheckPair. *) + IF (IsSet (left) OR IsSet (right)) OR + (IsRecord (left) OR IsRecord (right)) OR + (IsArray (left) OR IsArray (right)) + THEN + RETURN false + END + END ; + RETURN result +END checkTypeKindViolation ; + + (* doCheckPair - *) @@ -810,7 +887,11 @@ BEGIN result := checkGenericTypeEquivalence (result, left, right) ; IF NOT isKnown (result) THEN - result := checkTypeKindEquivalence (result, tinfo, left, right) + result := checkTypeKindEquivalence (result, tinfo, left, right) ; + IF NOT isKnown (result) + THEN + result := checkTypeKindViolation (result, tinfo, left, right) + END END END END diff --git a/gcc/m2/gm2-compiler/M2GenGCC.mod b/gcc/m2/gm2-compiler/M2GenGCC.mod index aeba48d356e6..7633b8425aef 100644 --- a/gcc/m2/gm2-compiler/M2GenGCC.mod +++ b/gcc/m2/gm2-compiler/M2GenGCC.mod @@ -511,8 +511,8 @@ BEGIN LogicalXorOp : CodeSetSymmetricDifference (q) | LogicalDiffOp : CodeSetLogicalDifference (q) | IfLessOp : CodeIfLess (q, op1, op2, op3) | - IfEquOp : CodeIfEqu (q, op1, op2, op3) | - IfNotEquOp : CodeIfNotEqu (q, op1, op2, op3) | + IfEquOp : CodeIfEqu (q) | + IfNotEquOp : CodeIfNotEqu (q) | IfGreEquOp : CodeIfGreEqu (q, op1, op2, op3) | IfLessEquOp : CodeIfLessEqu (q, op1, op2, op3) | IfGreOp : CodeIfGre (q, op1, op2, op3) | @@ -2489,17 +2489,8 @@ END FoldBuiltinFunction ; (* CodeParam - builds a parameter list. - - NOTE that we almost can treat VAR and NON VAR parameters the same, expect for - some types: - - procedure parameters - unbounded parameters - - these require special attention and thus it is easier to test individually - for VAR and NON VAR parameters. - - NOTE that we CAN ignore ModeOfAddr though + Note that we can ignore ModeOfAddr as any lvalue will + have been created in a preceeding quadruple. *) PROCEDURE CodeParam (quad: CARDINAL) ; @@ -7299,101 +7290,172 @@ END ComparisonMixTypes ; (* - CodeIfEqu - codes the quadruple if op1 = op2 then goto op3 + PerformCodeIfEqu - *) -PROCEDURE CodeIfEqu (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfEqu (quad: CARDINAL) ; VAR - tl, tr: Tree ; - location : location_t ; + tl, tr : Tree ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op1) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - IF IsConst(op1) AND IsConst(op2) + (* Ensure that any remaining undeclared constant literal is declared. *) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + IF IsConst (left) AND IsConst (right) THEN - PushValue(op1) ; - PushValue(op2) ; - IF Equ(CurrentQuadToken) + PushValue (left) ; + PushValue (right) ; + IF Equ (combined) THEN - BuildGoto(location, string(CreateLabelName(op3))) + BuildGoto (location, string (CreateLabelName (dest))) ELSE - (* fall through *) + (* Fall through. *) END - ELSIF IsConstSet(op1) OR (IsVar(op1) AND IsSet(SkipType(GetType(op1)))) OR - IsConstSet(op2) OR (IsVar(op2) AND IsSet(SkipType(GetType(op2)))) + ELSIF IsConstSet (left) OR (IsVar (left) AND IsSet (SkipType (GetType (left)))) OR + IsConstSet (right) OR (IsVar (right) AND IsSet (SkipType (GetType (right)))) THEN - CodeIfSetEqu(quad, op1, op2, op3) + CodeIfSetEqu (quad, left, right, dest) ELSE - IF IsComposite(GetType(op1)) OR IsComposite(GetType(op2)) + IF IsComposite (GetType (left)) OR IsComposite (GetType (right)) THEN - MetaErrorT2 (CurrentQuadToken, + MetaErrorT2 (combined, 'equality tests between composite types not allowed {%1Eatd} and {%2atd}', - op1, op2) + left, right) ELSE - ConvertBinaryOperands(location, - tl, tr, - ComparisonMixTypes (SkipType (GetType (op1)), - SkipType (GetType (op2)), - CurrentQuadToken), - op1, op2) ; - DoJump(location, BuildEqualTo(location, tl, tr), NIL, string(CreateLabelName(op3))) + ConvertBinaryOperands (location, + tl, tr, + ComparisonMixTypes (SkipType (GetType (left)), + SkipType (GetType (right)), + combined), + left, right) ; + DoJump (location, BuildEqualTo (location, tl, tr), NIL, + string (CreateLabelName (dest))) END END -END CodeIfEqu ; +END PerformCodeIfEqu ; (* - CodeIfNotEqu - codes the quadruple if op1 # op2 then goto op3 + PerformCodeIfNotEqu - *) -PROCEDURE CodeIfNotEqu (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfNotEqu (quad: CARDINAL) ; VAR - tl, tr : Tree ; - location: location_t ; + tl, tr : Tree ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op1) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - IF IsConst(op1) AND IsConst(op2) + (* Ensure that any remaining undeclared constant literal is declared. *) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + IF IsConst (left) AND IsConst (right) THEN - PushValue(op1) ; - PushValue(op2) ; - IF NotEqu(CurrentQuadToken) + PushValue (left) ; + PushValue (right) ; + IF NotEqu (combined) THEN - BuildGoto(location, string(CreateLabelName(op3))) + BuildGoto (location, string (CreateLabelName (dest))) ELSE - (* fall through *) + (* Fall through. *) END - ELSIF IsConstSet(op1) OR (IsVar(op1) AND IsSet(SkipType(GetType(op1)))) OR - IsConstSet(op2) OR (IsVar(op2) AND IsSet(SkipType(GetType(op2)))) + ELSIF IsConstSet (left) OR (IsVar (left) AND IsSet (SkipType (GetType (left)))) OR + IsConstSet (right) OR (IsVar (right) AND IsSet (SkipType (GetType (right)))) THEN - CodeIfSetNotEqu (op1, op2, op3) + CodeIfSetNotEqu (left, right, dest) ELSE - IF IsComposite(op1) OR IsComposite(op2) + IF IsComposite (GetType (left)) OR IsComposite (GetType (right)) THEN - MetaErrorT2 (CurrentQuadToken, + MetaErrorT2 (combined, 'inequality tests between composite types not allowed {%1Eatd} and {%2atd}', - op1, op2) + left, right) ELSE - ConvertBinaryOperands(location, - tl, tr, - ComparisonMixTypes (SkipType (GetType (op1)), - SkipType (GetType (op2)), - CurrentQuadToken), - op1, op2) ; - DoJump(location, - BuildNotEqualTo(location, tl, tr), NIL, string(CreateLabelName(op3))) + ConvertBinaryOperands (location, + tl, tr, + ComparisonMixTypes (SkipType (GetType (left)), + SkipType (GetType (right)), + combined), + left, right) ; + DoJump (location, BuildNotEqualTo (location, tl, tr), NIL, + string (CreateLabelName (dest))) END END +END PerformCodeIfNotEqu ; + + +(* + IsValidExpressionRelOp - +*) + +PROCEDURE IsValidExpressionRelOp (quad: CARDINAL) : BOOLEAN ; +CONST + Verbose = FALSE ; +VAR + lefttype, righttype, + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; +BEGIN + (* Ensure that any remaining undeclared constant literal is declared. *) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + DeclareConstant (leftpos, left) ; + DeclareConstant (rightpos, right) ; + DeclareConstructor (leftpos, quad, left) ; + DeclareConstructor (rightpos, quad, right) ; + lefttype := GetType (left) ; + righttype := GetType (right) ; + IF ExpressionTypeCompatible (combined, "", left, right, + StrictTypeChecking, FALSE) + THEN + RETURN TRUE + ELSE + IF Verbose + THEN + MetaErrorT2 (combined, + 'expression mismatch between {%1Etad} and {%2tad} seen during comparison', + left, right) + END ; + RETURN FALSE + END +END IsValidExpressionRelOp ; + + +(* + CodeIfEqu - codes the quadruple if op1 = op2 then goto op3 +*) + +PROCEDURE CodeIfEqu (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad) + THEN + PerformCodeIfEqu (quad) + END +END CodeIfEqu ; + + +(* + CodeIfNotEqu - codes the quadruple if op1 # op2 then goto op3 +*) + +PROCEDURE CodeIfNotEqu (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad) + THEN + PerformCodeIfNotEqu (quad) + END END CodeIfNotEqu ; diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 3231f9f56067..0263074d845c 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -12898,7 +12898,7 @@ BEGIN PushBooltok (Merge (NextQuad-1, t1), Merge (NextQuad-2, f1), tokpos) ELSIF (OperandT (2) = HashTok) OR (OperandT (2) = LessGreaterTok) THEN - (* are the two boolean expressions the different? *) + (* are the two boolean expressions different? *) PopBool (t1, f1) ; PopT (Tok) ; PopBool (t2, f2) ; diff --git a/gcc/testsuite/gm2/cse/pass/testcse54.mod b/gcc/testsuite/gm2/cse/pass/testcse54.mod new file mode 100644 index 000000000000..5cc1e64571a6 --- /dev/null +++ b/gcc/testsuite/gm2/cse/pass/testcse54.mod @@ -0,0 +1,7 @@ +MODULE testcse54 ; + +VAR + a: ARRAY [0..10] OF CHAR ; +BEGIN + a := 'hello' +END testcse54. diff --git a/gcc/testsuite/gm2/iso/run/pass/array9.mod b/gcc/testsuite/gm2/iso/run/pass/array9.mod new file mode 100644 index 000000000000..dd3304efb82c --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/array9.mod @@ -0,0 +1,28 @@ +(* Copyright (C) 2009 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE array9 ; + + +PROCEDURE assign (a: ARRAY OF ARRAY OF CARDINAL) ; +END assign ; + +VAR + e: ARRAY [1..5] OF ARRAY [0..29] OF CARDINAL ; +BEGIN + assign(e) +END array9. diff --git a/gcc/testsuite/gm2/iso/run/pass/strcons3.mod b/gcc/testsuite/gm2/iso/run/pass/strcons3.mod new file mode 100644 index 000000000000..7950e64900f4 --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/strcons3.mod @@ -0,0 +1,30 @@ +(* Copyright (C) 2024 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE strcons3 ; + + +TYPE + NameType = ARRAY [0..24] OF CHAR ; + PersonType = RECORD + name: NameType ; + END ; +VAR + person: PersonType ; +BEGIN + person := PersonType{"Blaise Pascal"} +END strcons3. diff --git a/gcc/testsuite/gm2/iso/run/pass/strcons4.mod b/gcc/testsuite/gm2/iso/run/pass/strcons4.mod new file mode 100644 index 000000000000..1c0e350c42fa --- /dev/null +++ b/gcc/testsuite/gm2/iso/run/pass/strcons4.mod @@ -0,0 +1,36 @@ +(* Copyright (C) 2024 Free Software Foundation, Inc. *) +(* This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with gm2; see the file COPYING. If not, write to the Free Software +Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) + +MODULE strcons4 ; + + +TYPE + NameType = ARRAY [0..24] OF CHAR ; + DateType = RECORD + year, month, day: CARDINAL ; + END ; + PersonType = RECORD + name: NameType ; + DateOfBirth: DateType ; + END ; +VAR + date : DateType ; + person: PersonType ; +BEGIN + date := DateType{1623, 6, 19} ; + person := PersonType{"Blaise Pascal", date} ; +END strcons4. diff --git a/gcc/testsuite/gm2/pim/fail/badset1.mod b/gcc/testsuite/gm2/pim/fail/badset1.mod new file mode 100644 index 000000000000..de56fe3ab1c4 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badset1.mod @@ -0,0 +1,13 @@ +MODULE badset1 ; + +FROM libc IMPORT printf ; + +VAR + s: SET OF [1..10] ; + c: CARDINAL ; +BEGIN + IF c = s + THEN + printf ("broken\n") + END +END badset1. diff --git a/gcc/testsuite/gm2/pim/fail/badset2.mod b/gcc/testsuite/gm2/pim/fail/badset2.mod new file mode 100644 index 000000000000..b8c798fa7dc7 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badset2.mod @@ -0,0 +1,13 @@ +MODULE badset2 ; + +FROM libc IMPORT printf ; + +VAR + s: SET OF [1..10] ; + c: CARDINAL ; +BEGIN + IF c # s + THEN + printf ("broken\n") + END +END badset2. diff --git a/gcc/testsuite/gm2/pim/fail/badset3.mod b/gcc/testsuite/gm2/pim/fail/badset3.mod new file mode 100644 index 000000000000..fcbf1775c216 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badset3.mod @@ -0,0 +1,11 @@ +MODULE badset3 ; + + +VAR + s10: SET OF [1..10] ; + s20: SET OF [1..20] ; +BEGIN + IF s10 = s20 + THEN + END +END badset3. diff --git a/gcc/testsuite/gm2/pim/fail/badset4.mod b/gcc/testsuite/gm2/pim/fail/badset4.mod new file mode 100644 index 000000000000..2382e4ea699c --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badset4.mod @@ -0,0 +1,11 @@ +MODULE badset4 ; + + +VAR + s10: SET OF [1..10] ; + s20: SET OF [1..20] ; +BEGIN + IF s10 > s20 + THEN + END +END badset4. From 6c166e55b15894ceb07dcc7b55f900e50e24ec5b Mon Sep 17 00:00:00 2001 From: Lewis Hyatt <lhyatt@gmail.com> Date: Wed, 20 Dec 2023 16:27:42 -0500 Subject: [PATCH 051/551] libcpp: Fix __has_include_next ICE in the last directory of the path [PR80755] In libcpp/files.cc, the function _cpp_has_header(), which implements __has_include and __has_include_next, does not check for a NULL return value from search_path_head(), leading to an ICE tripping an assert when _cpp_find_file() tries to use it. Fix it by checking for that case and silently returning false instead. As suggested by the PR author, it is easiest to make a testcase by using the -idirafter option. To enable that, also modify the dg-additional-options testsuite procedure to make the global $srcdir available, since -idirafter requires the full path. libcpp/ChangeLog: PR preprocessor/80755 * files.cc (search_path_head): Add SUPPRESS_DIAGNOSTIC argument defaulting to false. (_cpp_has_header): Silently return false if the search path has been exhausted, rather than issuing a diagnostic and then hitting an assert. gcc/testsuite/ChangeLog: * lib/gcc-defs.exp (dg-additional-options): Make $srcdir usable in a dg-additional-options directive. * c-c++-common/cpp/has-include-next-2-dir/has-include-next-2.h: New test. * c-c++-common/cpp/has-include-next-2.c: New test. --- .../cpp/has-include-next-2-dir/has-include-next-2.h | 3 +++ gcc/testsuite/c-c++-common/cpp/has-include-next-2.c | 4 ++++ gcc/testsuite/lib/gcc-defs.exp | 1 + libcpp/files.cc | 12 ++++++++---- 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/cpp/has-include-next-2-dir/has-include-next-2.h create mode 100644 gcc/testsuite/c-c++-common/cpp/has-include-next-2.c diff --git a/gcc/testsuite/c-c++-common/cpp/has-include-next-2-dir/has-include-next-2.h b/gcc/testsuite/c-c++-common/cpp/has-include-next-2-dir/has-include-next-2.h new file mode 100644 index 000000000000..1e4be6ce7a34 --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/has-include-next-2-dir/has-include-next-2.h @@ -0,0 +1,3 @@ +#if __has_include_next(<whatever>) +/* This formerly led to an ICE when the current directory was the last one in the path. */ +#endif diff --git a/gcc/testsuite/c-c++-common/cpp/has-include-next-2.c b/gcc/testsuite/c-c++-common/cpp/has-include-next-2.c new file mode 100644 index 000000000000..4928d3e992c6 --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/has-include-next-2.c @@ -0,0 +1,4 @@ +/* PR preprocessor/80755 */ +/* { dg-do preprocess } */ +/* { dg-additional-options "-idirafter $srcdir/c-c++-common/cpp/has-include-next-2-dir" } */ +#include <has-include-next-2.h> diff --git a/gcc/testsuite/lib/gcc-defs.exp b/gcc/testsuite/lib/gcc-defs.exp index 56851f4a082b..70215ed49052 100644 --- a/gcc/testsuite/lib/gcc-defs.exp +++ b/gcc/testsuite/lib/gcc-defs.exp @@ -280,6 +280,7 @@ if { [info exists env(GCC_RUNTEST_PARALLELIZE_DIR)] \ proc dg-additional-options { args } { upvar dg-extra-tool-flags extra-tool-flags + global srcdir if { [llength $args] > 3 } { error "[lindex $args 0]: too many arguments" diff --git a/libcpp/files.cc b/libcpp/files.cc index e66eef465344..c61df339e207 100644 --- a/libcpp/files.cc +++ b/libcpp/files.cc @@ -181,7 +181,8 @@ static bool read_file_guts (cpp_reader *pfile, _cpp_file *file, static bool read_file (cpp_reader *pfile, _cpp_file *file, location_t loc); static struct cpp_dir *search_path_head (cpp_reader *, const char *fname, - int angle_brackets, enum include_type); + int angle_brackets, enum include_type, + bool suppress_diagnostic = false); static const char *dir_name_of_file (_cpp_file *file); static void open_file_failed (cpp_reader *pfile, _cpp_file *file, int, location_t); @@ -1041,7 +1042,7 @@ _cpp_mark_file_once_only (cpp_reader *pfile, _cpp_file *file) nothing left in the path, returns NULL. */ static struct cpp_dir * search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets, - enum include_type type) + enum include_type type, bool suppress_diagnostic) { cpp_dir *dir; _cpp_file *file; @@ -1070,7 +1071,7 @@ search_path_head (cpp_reader *pfile, const char *fname, int angle_brackets, return make_cpp_dir (pfile, dir_name_of_file (file), pfile->buffer ? pfile->buffer->sysp : 0); - if (dir == NULL) + if (dir == NULL && !suppress_diagnostic) cpp_error (pfile, CPP_DL_ERROR, "no include path in which to search for %s", fname); @@ -2164,7 +2165,10 @@ bool _cpp_has_header (cpp_reader *pfile, const char *fname, int angle_brackets, enum include_type type) { - cpp_dir *start_dir = search_path_head (pfile, fname, angle_brackets, type); + cpp_dir *start_dir = search_path_head (pfile, fname, angle_brackets, type, + /* suppress_diagnostic = */ true); + if (!start_dir) + return false; _cpp_file *file = _cpp_find_file (pfile, fname, start_dir, angle_brackets, _cpp_FFK_HAS_INCLUDE, 0); return file->err_no != ENOENT; From 942497ad74272e0ef16020d628e471c5f21474b0 Mon Sep 17 00:00:00 2001 From: Lewis Hyatt <lhyatt@gmail.com> Date: Tue, 12 Dec 2023 17:46:36 -0500 Subject: [PATCH 052/551] libcpp: Fix macro expansion for argument of __has_include [PR110558] When the file name for a #include directive is the result of stringifying a macro argument, libcpp needs to take some care to get the whitespace correct; in particular stringify_arg() needs to see a CPP_PADDING token between macro tokens so that it can figure out when to output space between tokens. The CPP_PADDING tokens are not normally generated when handling a preprocessor directive, but for #include-like directives, libcpp sets the state variable pfile->state.directive_wants_padding to TRUE so that the CPP_PADDING tokens will be output, and then everything works fine for computed includes. As the PR points out, things do not work fine for __has_include. Fix that by setting the state variable the same as is done for #include. libcpp/ChangeLog: PR preprocessor/110558 * macro.cc (builtin_has_include): Set pfile->state.directive_wants_padding prior to lexing the file name, in case it comes from macro expansion. gcc/testsuite/ChangeLog: PR preprocessor/110558 * c-c++-common/cpp/has-include-2.c: New test. * c-c++-common/cpp/has-include-2.h: New test. --- gcc/testsuite/c-c++-common/cpp/has-include-2.c | 12 ++++++++++++ gcc/testsuite/c-c++-common/cpp/has-include-2.h | 1 + libcpp/macro.cc | 3 +++ 3 files changed, 16 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/cpp/has-include-2.c create mode 100644 gcc/testsuite/c-c++-common/cpp/has-include-2.h diff --git a/gcc/testsuite/c-c++-common/cpp/has-include-2.c b/gcc/testsuite/c-c++-common/cpp/has-include-2.c new file mode 100644 index 000000000000..5cd00cb3fb5b --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/has-include-2.c @@ -0,0 +1,12 @@ +/* PR preprocessor/110558 */ +/* { dg-do preprocess } */ +#define STRINGIZE(x) #x +#define GET_INCLUDE(i) STRINGIZE(has-include-i.h) +/* Spaces surrounding the macro args previously caused a problem for __has_include(). */ +#if __has_include(GET_INCLUDE(2)) && __has_include(GET_INCLUDE( 2)) && __has_include(GET_INCLUDE( 2 )) +#include GET_INCLUDE(2) +#include GET_INCLUDE( 2) +#include GET_INCLUDE( 2 ) +#else +#error "__has_include did not handle padding properly" /* { dg-bogus "__has_include" } */ +#endif diff --git a/gcc/testsuite/c-c++-common/cpp/has-include-2.h b/gcc/testsuite/c-c++-common/cpp/has-include-2.h new file mode 100644 index 000000000000..57c402b32a86 --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/has-include-2.h @@ -0,0 +1 @@ +/* PR preprocessor/110558 */ diff --git a/libcpp/macro.cc b/libcpp/macro.cc index a3d2c159f8cb..352eb2e4fd99 100644 --- a/libcpp/macro.cc +++ b/libcpp/macro.cc @@ -398,6 +398,8 @@ builtin_has_include (cpp_reader *pfile, cpp_hashnode *op, bool has_next) NODE_NAME (op)); pfile->state.angled_headers = true; + const auto sav_padding = pfile->state.directive_wants_padding; + pfile->state.directive_wants_padding = true; const cpp_token *token = cpp_get_token_no_padding (pfile); bool paren = token->type == CPP_OPEN_PAREN; if (paren) @@ -406,6 +408,7 @@ builtin_has_include (cpp_reader *pfile, cpp_hashnode *op, bool has_next) cpp_error (pfile, CPP_DL_ERROR, "missing '(' before \"%s\" operand", NODE_NAME (op)); pfile->state.angled_headers = false; + pfile->state.directive_wants_padding = sav_padding; bool bracket = token->type != CPP_STRING; char *fname = NULL; From 2a556dbec2e522655175374c68d61a39b1463c7e Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 14 Mar 2024 11:47:56 +0000 Subject: [PATCH 053/551] libstdc++: Update C++23 status in the manual libstdc++-v3/ChangeLog: * doc/xml/manual/status_cxx2023.xml: Update C++23 status table. * doc/html/manual/status.html: Regenerate. * include/bits/version.def: Fix typo in comment. --- libstdc++-v3/doc/html/manual/status.html | 146 +++++++-- .../doc/xml/manual/status_cxx2023.xml | 289 +++++++++++++++--- libstdc++-v3/include/bits/version.def | 2 +- 3 files changed, 373 insertions(+), 64 deletions(-) diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index dafd48035a68..ea8fd485cb90 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -1832,11 +1832,20 @@ <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html" target="_top"> P2278R4 </a> - </td><td align="center"> 13.1 </td><td align="left"> <code class="code">__cpp_lib_ranges_as_const >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> <code class="code">ranges::to</code> </td><td align="left"> + </td><td align="center"> 13.1 </td><td align="left"> <code class="code">__cpp_lib_ranges_as_const >= 202207L</code> </td></tr><tr bgcolor="#B0B0B0"><td align="left"> <code class="code">ranges::to</code> </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1206r7.pdf" target="_top"> P1206R7 </a> - </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_ranges_to_container >= 202202L</code> </td></tr><tr><td align="left"> Pipe support for user-defined range adaptors </td><td align="left"> + </td><td align="center"> 14.1 (<code class="code">ranges::to</code> function) </td><td align="left"> + <code class="code">__cpp_lib_containers_ranges >= 202202L</code>, + <code class="code">__cpp_lib_ranges_to_container >= 202202L</code> + </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Ranges iterators as inputs to non-Ranges algorithms </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2408r5.html" target="_top"> + P2408R5 + </a> + </td><td align="center"> </td><td align="left"> + <code class="code">__cpp_lib_algorithm_iterator_requirements >= 202207L</code> + </td></tr><tr><td align="left"> Pipe support for user-defined range adaptors </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2387r3.html" target="_top"> P2387R3 </a> @@ -1861,11 +1870,19 @@ <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2302r4.html" target="_top"> P2302R4 </a> - </td><td align="center"> 13.1 </td><td align="left"> <code class="code">__cpp_lib_ranges_contains >= 202207L</code> </td></tr><tr><td align="left"> <code class="code">ranges::fold</code> </td><td align="left"> + </td><td align="center"> 13.1 </td><td align="left"> <code class="code">__cpp_lib_ranges_contains >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Making multi-param constructors of views explicit </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2711r1.html" target="_top"> + P2711R1 + </a> + </td><td align="center"> </td><td align="left"> </td></tr><tr><td align="left"> <code class="code">ranges::fold</code> </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2322r6.html" target="_top"> P2322R6 </a> - </td><td align="center"> 13.1 </td><td align="left"> <code class="code">__cpp_lib_ranges_fold >= 202207L</code> </td></tr><tr><td colspan="4" align="left"> + </td><td align="center"> 13.1 </td><td align="left"> <code class="code">__cpp_lib_ranges_fold >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Relaxing Ranges Just A Smidge</td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2609r3.html" target="_top"> + P2609R3 + </a> + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_ranges >= 202302L</code> </td></tr><tr><td colspan="4" align="left"> <span class="bold"><strong>Compile-time programming</strong></span> </td></tr><tr><td align="left"> A proposal for a type trait to detect scoped enumerations </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1048r1.pdf" target="_top"> @@ -1899,29 +1916,35 @@ <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1413r3.pdf" target="_top"> P1413R3 </a> - </td><td align="center"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left"> A type trait to detect reference binding to temporary </td><td align="left"> + </td><td align="center"> </td><td align="left"> </td></tr><tr><td align="left"> A type trait to detect reference binding to temporary </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2255r2.html" target="_top"> P2255R2 </a> - </td><td align="center"> 13.1 (missing changes to <code class="code">std::tuple</code> </td><td align="left"> <code class="code">__cpp_lib_reference_from_temporary >= 202202L</code> </td></tr><tr><td colspan="4" align="left"> - <span class="bold"><strong>Strings and text</strong></span> - </td></tr><tr><td align="left"> string contains function </td><td align="left"> - <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1679r3.html" target="_top"> - P1679R3 + </td><td align="center"> + <div class="informaltable"><table class="informaltable" border="0"><colgroup><col /></colgroup><tbody><tr><td> 13.1 (missing changes to <code class="code">std::tuple</code>) </td></tr><tr><td> 14.1 (complete) </td></tr></tbody></table></div> + </td><td align="left"> <code class="code">__cpp_lib_reference_from_temporary >= 202202L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> + Move-only types for equality_comparable_with, totally_ordered_with, + and three_way_comparable_with + </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2404r3.pdf" target="_top"> + P2404R3 </a> - </td><td align="center"> 11.1 </td><td align="left"> <code class="code">__cpp_lib_string_contains >= 202011L</code> </td></tr><tr><td align="left"> Prohibit std::basic_string and std::basic_string_view construction from nullptr </td><td align="left"> - <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2166r1.html" target="_top"> - P2166R1 + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_concepts >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> A trait for implicit lifetime types </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2674r1.pdf" target="_top"> + P2674R1 </a> - </td><td align="center"> 12.1 </td><td align="left"> </td></tr><tr><td align="left"> basic_string::resize_and_overwrite </td><td align="left"> - <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1072r10.html" target="_top"> - P1072R10 + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_is_implicit_lifetime >= 202302L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> + <code class="code">common_reference_t</code> of <code class="code">reference_wrapper</code> + Should Be a Reference Type + </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2655r3.html" target="_top"> + P2655R3 </a> - </td><td align="center"> 12.1 </td><td align="left"> <code class="code">__cpp_lib_resize_and_overwrite >= 202110L</code> </td></tr><tr><td align="left"> A strstream replacement using span<charT> as buffer </td><td align="left"> - <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0448r4.pdf" target="_top"> - P0448R4 + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_common_reference >= 202302L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Deprecate <code class="code">numeric_limits::has_denorm</code> </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2614r2.pdf" target="_top"> + P2614R2 </a> - </td><td align="center"> 12.1 </td><td align="left"> <code class="code">__cpp_lib_spanstream >= 202106L</code> </td></tr><tr><td colspan="4" align="left"> + </td><td align="center"> </td><td align="left"> </td></tr><tr><td colspan="4" align="left"> <span class="bold"><strong>Containers</strong></span> </td></tr><tr><td align="left"> Iterator pair constructors for stack and queue </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1425r4.pdf" target="_top"> @@ -1973,7 +1996,27 @@ </a> </td><td align="center"> </td><td align="left"> </td></tr><tr><td colspan="4" align="left"> <span class="bold"><strong>Strings and text</strong></span> - </td></tr><tr><td align="left"> std::format improvements </td><td align="left"> + </td></tr><tr><td align="left"> string contains function </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1679r3.html" target="_top"> + P1679R3 + </a> + </td><td align="center"> 11.1 </td><td align="left"> <code class="code">__cpp_lib_string_contains >= 202011L</code> </td></tr><tr><td align="left"> Prohibit std::basic_string and std::basic_string_view construction from nullptr </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2166r1.html" target="_top"> + P2166R1 + </a> + </td><td align="center"> 12.1 </td><td align="left"> </td></tr><tr><td align="left"> basic_string::resize_and_overwrite </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1072r10.html" target="_top"> + P1072R10 + </a> + </td><td align="center"> 12.1 </td><td align="left"> <code class="code">__cpp_lib_resize_and_overwrite >= 202110L</code> </td></tr><tr><td align="left"> A strstream replacement using span<charT> as buffer </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0448r4.pdf" target="_top"> + P0448R4 + </a> + </td><td align="center"> 12.1 </td><td align="left"> <code class="code">__cpp_lib_spanstream >= 202106L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> <code class="code"> std::string::substr() && </code> </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2438r2.html" target="_top"> + P2438R2 + </a> + </td><td align="center"> </td><td align="left"> </td></tr><tr><td align="left"> std::format improvements </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2216r3.html" target="_top"> P2216R3 </a> @@ -1996,7 +2039,13 @@ <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2419r2.html" target="_top"> P2419R2 </a> - </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_format >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Formatting Ranges </td><td align="left"> + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_format >= 202207L</code> </td></tr><tr><td align="left"> + Formatting pointers + </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2510r3.pdf" target="_top"> + P2510R3 + </a> + </td><td align="center"> 13.2 (feature test macro not defined)</td><td align="left"> <code class="code">__cpp_lib_format >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Formatting Ranges </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2286r8.html" target="_top"> P2286R8 </a> @@ -2004,18 +2053,18 @@ <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2585r1.html" target="_top"> P2585R1 </a> - </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_format_ranges >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Formatted output </td><td align="left"> + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_format_ranges >= 202207L</code> </td></tr><tr><td align="left"> Formatted output </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2093r14.html" target="_top"> P2093R14 </a> - </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_print >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> + </td><td align="center"> 14.1 </td><td align="left"> <code class="code">__cpp_lib_print >= 202207L</code> </td></tr><tr><td align="left"> Should the output of std::print to a terminal be synchronized with the underlying stream? </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2539r3.html" target="_top"> P2539R3 </a> - </td><td align="center"> </td><td align="left"> </td></tr><tr><td align="left"> + </td><td align="center"> 14.1 </td><td align="left"> </td></tr><tr><td align="left"> Formatting <code class="code">thread::id</code> and <code class="code">stacktrace</code> </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2693r1.pdf" target="_top"> @@ -2059,13 +2108,19 @@ <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0798r8.html" target="_top"> P0798R8 </a> - </td><td align="center"> 12.1 </td><td align="left"> <code class="code">__cpp_lib_optional >= 202110L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> + </td><td align="center"> 12.1 </td><td align="left"> <code class="code">__cpp_lib_optional >= 202110L</code> </td></tr><tr><td align="left"> Compatibility between <code class="code">tuple</code>, <code class="code">pair</code> and <span class="emphasis"><em>tuple-like</em></span> objects </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2165r4.pdf" target="_top"> P2165R4 </a> - </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_tuple_like >= 202207L</code> </td></tr><tr><td align="left"> <code class="code">move_only_function</code> </td><td align="left"> + </td><td align="center"> 14.1 </td><td align="left"> <code class="code">__cpp_lib_tuple_like >= 202207L</code> </td></tr><tr><td align="left"> + Default Arguments for <code class="code">pair</code>'s Forwarding Constructor + </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1951r1.html" target="_top"> + P1951R1 + </a> + </td><td align="center"> 14.1 </td><td align="left"> </td></tr><tr><td align="left"> <code class="code">move_only_function</code> </td><td align="left"> <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0288r9.html" target="_top"> P0288R9 </a> @@ -2113,7 +2168,42 @@ <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1642r11.html" target="_top"> P1642R11 </a> - </td><td align="center"> 13.1 </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p> + </td><td align="center"> 13.1 </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Providing size feedback in the Allocator interface </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0401r6.html" target="_top"> + P0401R6 + </a> + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_allocate_at_least >= 202306L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> + Disallow User Specialization of <code class="code">allocator_traits</code> + </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2652r2.html" target="_top"> + P2652R2 + </a> + </td><td align="center"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Explicit lifetime management </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2590r2.pdf" target="_top"> + P2590R2 + </a> + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_start_lifetime_as >= 202207L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> + Fixing <code class="code">std::start_lifetime_as</code> and + <code class="code">std::start_lifetime_as_array</code> + </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2679r2.pdf" target="_top"> + P2679R2 + </a> + </td><td align="center"> </td><td align="left"> </td></tr><tr><td align="left"> out_ptr - a scalable output pointer abstraction </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1132r8.html" target="_top"> + P1132R8 + </a> + </td><td align="center"> 14.1 </td><td align="left"> <code class="code">__cpp_lib_out_ptr >= 202106L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> <code class="code">barrier</code>'s phase completion guarantees </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2588r3.html" target="_top"> + P2588R3 + </a> + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_barrier >= 202302L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> + Standard Library Modules <code class="code">std</code> and <code class="code">std.compat</code> + </td><td align="left"> + <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2465r3.pdf" target="_top"> + P2465R3 + </a> + </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_modules >= 202207L</code> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p> This table is based on the table of contents of ISO/IEC DTR 19768, Doc No: N1836=05-0096, Date: 2005-06-24, "Draft Technical Report on C++ Library Extensions". diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2023.xml b/libstdc++-v3/doc/xml/manual/status_cxx2023.xml index 4bf22f00bce0..9b870d1dbdfb 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2023.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2023.xml @@ -312,15 +312,32 @@ or any notes about the implementation. </row> <row> - <?dbhtml bgcolor="#C8B0B0" ?> + <?dbhtml bgcolor="#B0B0B0" ?> <entry> <code>ranges::to</code> </entry> <entry> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1206r7.pdf"> P1206R7 </link> </entry> + <entry align="center"> 14.1 (<code>ranges::to</code> function) </entry> + <entry> + <code>__cpp_lib_containers_ranges >= 202202L</code>, + <code>__cpp_lib_ranges_to_container >= 202202L</code> + </entry> + </row> + + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> Ranges iterators as inputs to non-Ranges algorithms </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2408r5.html"> + P2408R5 + </link> + </entry> <entry align="center"> </entry> - <entry> <code>__cpp_lib_ranges_to_container >= 202202L</code> </entry> + <entry> + <code>__cpp_lib_algorithm_iterator_requirements >= 202207L</code> + </entry> </row> <row> @@ -377,6 +394,18 @@ or any notes about the implementation. <entry> <code>__cpp_lib_ranges_contains >= 202207L</code> </entry> </row> + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> Making multi-param constructors of views explicit </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2711r1.html"> + P2711R1 + </link> + </entry> + <entry align="center"> </entry> + <entry/> + </row> + <row> <entry> <code>ranges::fold</code> </entry> <entry> @@ -388,6 +417,18 @@ or any notes about the implementation. <entry> <code>__cpp_lib_ranges_fold >= 202207L</code> </entry> </row> + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> Relaxing Ranges Just A Smidge</entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2609r3.html"> + P2609R3 + </link> + </entry> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_ranges >= 202302L</code> </entry> + </row> + <row> <entry namest="c1" nameend="c4" align="left"> <emphasis role="bold">Compile-time programming</emphasis> @@ -484,65 +525,73 @@ or any notes about the implementation. </row> <row> - <?dbhtml bgcolor="#B0B0B0" ?> <entry> A type trait to detect reference binding to temporary </entry> <entry> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2255r2.html"> P2255R2 </link> </entry> - <entry align="center"> 13.1 (missing changes to <code>std::tuple</code> </entry> + <entry align="center"> + <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody> + <row><entry> 13.1 (missing changes to <code>std::tuple</code>) </entry></row> + <row><entry> 14.1 (complete) </entry></row> + </tbody></tgroup></informaltable> + </entry> <entry> <code>__cpp_lib_reference_from_temporary >= 202202L</code> </entry> </row> <row> - <entry namest="c1" nameend="c4" align="left"> - <emphasis role="bold">Strings and text</emphasis> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> + Move-only types for equality_comparable_with, totally_ordered_with, + and three_way_comparable_with </entry> - </row> - - <row> - <entry> string contains function </entry> <entry> - <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1679r3.html"> - P1679R3 + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2404r3.pdf"> + P2404R3 </link> </entry> - <entry align="center"> 11.1 </entry> - <entry> <code>__cpp_lib_string_contains >= 202011L</code> </entry> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_concepts >= 202207L</code> </entry> </row> <row> - <entry> Prohibit std::basic_string and std::basic_string_view construction from nullptr </entry> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> A trait for implicit lifetime types </entry> <entry> - <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2166r1.html"> - P2166R1 + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2674r1.pdf"> + P2674R1 </link> </entry> - <entry align="center"> 12.1 </entry> - <entry /> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_is_implicit_lifetime >= 202302L</code> </entry> </row> <row> - <entry> basic_string::resize_and_overwrite </entry> + <?dbhtml bgcolor="#C8B0B0" ?> <entry> - <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1072r10.html"> - P1072R10 + <code>common_reference_t</code> of <code>reference_wrapper</code> + Should Be a Reference Type + </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2655r3.html"> + P2655R3 </link> </entry> - <entry align="center"> 12.1 </entry> - <entry> <code>__cpp_lib_resize_and_overwrite >= 202110L</code> </entry> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_common_reference >= 202302L</code> </entry> </row> <row> - <entry> A strstream replacement using span<charT> as buffer </entry> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> Deprecate <code>numeric_limits::has_denorm</code> </entry> <entry> - <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0448r4.pdf"> - P0448R4 + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2614r2.pdf"> + P2614R2 </link> </entry> - <entry align="center"> 12.1 </entry> - <entry> <code>__cpp_lib_spanstream >= 202106L</code> </entry> + <entry align="center"> </entry> + <entry/> </row> <row> @@ -683,6 +732,63 @@ or any notes about the implementation. </entry> </row> + <row> + <entry> string contains function </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1679r3.html"> + P1679R3 + </link> + </entry> + <entry align="center"> 11.1 </entry> + <entry> <code>__cpp_lib_string_contains >= 202011L</code> </entry> + </row> + + <row> + <entry> Prohibit std::basic_string and std::basic_string_view construction from nullptr </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2166r1.html"> + P2166R1 + </link> + </entry> + <entry align="center"> 12.1 </entry> + <entry /> + </row> + + <row> + <entry> basic_string::resize_and_overwrite </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1072r10.html"> + P1072R10 + </link> + </entry> + <entry align="center"> 12.1 </entry> + <entry> <code>__cpp_lib_resize_and_overwrite >= 202110L</code> </entry> + </row> + + <row> + <entry> A strstream replacement using span<charT> as buffer </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0448r4.pdf"> + P0448R4 + </link> + </entry> + <entry align="center"> 12.1 </entry> + <entry> <code>__cpp_lib_spanstream >= 202106L</code> </entry> + </row> + + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> <code> std::string::substr() && </code> </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2438r2.html"> + P2438R2 + </link> + </entry> + <entry align="center"> </entry> + <entry/> + </row> + + <row> <entry> std::format improvements </entry> <entry> @@ -735,6 +841,19 @@ or any notes about the implementation. <entry> <code>__cpp_lib_format >= 202207L</code> </entry> </row> + <row> + <entry> + Formatting pointers + </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2510r3.pdf"> + P2510R3 + </link> + </entry> + <entry align="center"> 13.2 (feature test macro not defined)</entry> + <entry> <code>__cpp_lib_format >= 202207L</code> </entry> + </row> + <row> <?dbhtml bgcolor="#C8B0B0" ?> <entry> Formatting Ranges </entry> @@ -760,19 +879,17 @@ or any notes about the implementation. </row> <row> - <?dbhtml bgcolor="#C8B0B0" ?> <entry> Formatted output </entry> <entry> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2093r14.html"> P2093R14 </link> </entry> - <entry align="center"> </entry> + <entry align="center"> 14.1 </entry> <entry> <code>__cpp_lib_print >= 202207L</code> </entry> </row> <row> - <?dbhtml bgcolor="#C8B0B0" ?> <entry> Should the output of std::print to a terminal be synchronized with the underlying stream? @@ -782,7 +899,7 @@ or any notes about the implementation. P2539R3 </link> </entry> - <entry align="center"> </entry> + <entry align="center"> 14.1 </entry> <entry/> </row> @@ -898,7 +1015,6 @@ or any notes about the implementation. </row> <row> - <?dbhtml bgcolor="#C8B0B0" ?> <entry> Compatibility between <code>tuple</code>, <code>pair</code> and <emphasis>tuple-like</emphasis> objects </entry> @@ -907,10 +1023,23 @@ or any notes about the implementation. P2165R4 </link> </entry> - <entry align="center"> </entry> + <entry align="center"> 14.1 </entry> <entry> <code>__cpp_lib_tuple_like >= 202207L</code> </entry> </row> + <row> + <entry> + Default Arguments for <code>pair</code>'s Forwarding Constructor + </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1951r1.html"> + P1951R1 + </link> + </entry> + <entry align="center"> 14.1 </entry> + <entry/> + </row> + <row> <entry> <code>move_only_function</code> </entry> <entry> @@ -1043,6 +1172,96 @@ or any notes about the implementation. <entry /> </row> + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> Providing size feedback in the Allocator interface </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0401r6.html"> + P0401R6 + </link> + </entry> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_allocate_at_least >= 202306L</code> </entry> + </row> + + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> + Disallow User Specialization of <code>allocator_traits</code> + </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2652r2.html"> + P2652R2 + </link> + </entry> + <entry align="center"> </entry> + <entry/> + </row> + + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> Explicit lifetime management </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2590r2.pdf"> + P2590R2 + </link> + </entry> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_start_lifetime_as >= 202207L</code> </entry> + </row> + + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> + Fixing <code>std::start_lifetime_as</code> and + <code>std::start_lifetime_as_array</code> + </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2679r2.pdf"> + P2679R2 + </link> + </entry> + <entry align="center"> </entry> + <entry/> + </row> + + <row> + <entry> out_ptr - a scalable output pointer abstraction </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1132r8.html"> + P1132R8 + </link> + </entry> + <entry align="center"> 14.1 </entry> + <entry> <code>__cpp_lib_out_ptr >= 202106L</code> </entry> + </row> + + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> <code>barrier</code>'s phase completion guarantees </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2588r3.html"> + P2588R3 + </link> + </entry> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_barrier >= 202302L</code> </entry> + </row> + + <row> + <?dbhtml bgcolor="#C8B0B0" ?> + <entry> + Standard Library Modules <code>std</code> and <code>std.compat</code> + </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2465r3.pdf"> + P2465R3 + </link> + </entry> + <entry align="center"> </entry> + <entry> <code>__cpp_lib_modules >= 202207L</code> </entry> + </row> + </tbody> </tgroup> </table> diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index d298420121b8..be5af18e818c 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1457,7 +1457,7 @@ ftms = { }; //ftms = { -// name = container_ranges; +// name = containers_ranges; // values = { // v = 202202; // cxxmin = 23; From e6836bbbd7a01af0791c02087e568b4822418c0d Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 14 Mar 2024 11:52:17 +0000 Subject: [PATCH 054/551] libstdc++: Correct notes about std::call_once in manual [PR66146] The bug with exceptions thrown during a std::call_once call affects all targets, so fix the docs that say it only affects non-Linux targets. libstdc++-v3/ChangeLog: PR libstdc++/66146 * doc/xml/manual/status_cxx2011.xml: Remove mention of Linux in note about std::call_once. * doc/xml/manual/status_cxx2014.xml: Likewise. * doc/xml/manual/status_cxx2017.xml: Likewise. * doc/html/manual/status.html: Regenerate. --- libstdc++-v3/doc/html/manual/status.html | 6 +++--- libstdc++-v3/doc/xml/manual/status_cxx2011.xml | 2 +- libstdc++-v3/doc/xml/manual/status_cxx2014.xml | 2 +- libstdc++-v3/doc/xml/manual/status_cxx2017.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index ea8fd485cb90..2e293d32f818 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -217,7 +217,7 @@ <span class="emphasis"><em>30</em></span> </td><td colspan="3" align="left"> <span class="emphasis"><em>Thread support</em></span> - </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.4.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.4.4.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Y</td><td align="left">Exception support is broken on non-Linux targets. + </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.4.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.4.4.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Y</td><td align="left">Exception support is broken. See <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146" target="_top">PR 66146</a>. </td></tr><tr><td align="left">30.5</td><td align="left">Condition variables</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.1</td><td align="left">Overview</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.2</td><td align="left">Error handling</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.3</td><td align="left">Class <code class="code">future_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.4</td><td align="left">Shared state</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.5</td><td align="left">Class template <code class="code">promise</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.6</td><td align="left">Class template <code class="code">future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.7</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.8</td><td align="left">Function template <code class="code">async</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.9</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"> @@ -490,7 +490,7 @@ <span class="emphasis"><em>30</em></span> </td><td colspan="3" align="left"> <span class="emphasis"><em>Thread support</em></span> - </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.4</td><td align="left">Shared timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.4.1</td><td align="left">Class <code class="code">shared_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.3</td><td align="left">Class template <code class="code">shared_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.4.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.4.4.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Broken</td><td align="left">Exception support is broken on non-Linux targets. + </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.4</td><td align="left">Shared timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.4.1</td><td align="left">Class <code class="code">shared_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.3</td><td align="left">Class template <code class="code">shared_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.4.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.4.4.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Broken</td><td align="left">Exception support is broken. See <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146" target="_top">PR 66146</a>. </td></tr><tr><td align="left">30.5</td><td align="left">Condition variables</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.1</td><td align="left">Overview</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.2</td><td align="left">Error handling</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.3</td><td align="left">Class <code class="code">future_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.4</td><td align="left">Shared state</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.5</td><td align="left">Class template <code class="code">promise</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.6</td><td align="left">Class template <code class="code">future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.7</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.8</td><td align="left">Function template <code class="code">async</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.9</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"> @@ -967,7 +967,7 @@ <span class="emphasis"><em>33</em></span> </td><td colspan="3" align="left"> <span class="emphasis"><em>Thread support</em></span> - </td></tr><tr><td align="left">33.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.3.1</td><td align="left">Header <code class="code">thread</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.3.2</td><td align="left">Class <code class="code">thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">33.3.2.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">33.3.3</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.4</td><td align="left">Shared mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.4.1</td><td align="left">Class <code class="code">shared_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.5</td><td align="left">Shared timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.5.1</td><td align="left">Class <code class="code">shared_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.4.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4.2</td><td align="left">Class template <code class="code">scoped_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4.3</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4.4</td><td align="left">Class template <code class="code">shared_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.5</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.6</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.6.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">33.4.6.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Y</td><td align="left">Exception support is broken on non-Linux targets. + </td></tr><tr><td align="left">33.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.3.1</td><td align="left">Header <code class="code">thread</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.3.2</td><td align="left">Class <code class="code">thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">33.3.2.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">33.3.3</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.4</td><td align="left">Shared mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.4.1</td><td align="left">Class <code class="code">shared_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.3.5</td><td align="left">Shared timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.3.5.1</td><td align="left">Class <code class="code">shared_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.4.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4.2</td><td align="left">Class template <code class="code">scoped_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4.3</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.4.4</td><td align="left">Class template <code class="code">shared_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.5</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.4.6</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.4.6.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">33.4.6.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Y</td><td align="left">Exception support is broken. See <a class="link" href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146" target="_top">PR 66146</a>. </td></tr><tr><td align="left">33.5</td><td align="left">Condition variables</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.6.1</td><td align="left">Overview</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.6.2</td><td align="left">Header <code class="code"><future></code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">33.6.3</td><td align="left">Error handling</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6.4</td><td align="left">Class <code class="code">future_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6.5</td><td align="left">Shared state</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6.6</td><td align="left">Class template <code class="code">promise</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6.7</td><td align="left">Class template <code class="code">future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6.8</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6.9</td><td align="left">Function template <code class="code">async</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">33.6.10</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"> diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2011.xml b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml index 1eeb2d1ccd78..7f589ad7f7af 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2011.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml @@ -2404,7 +2404,7 @@ particular release. <entry>30.4.4.2</entry> <entry>Function <code>call_once</code></entry> <entry>Y</entry> - <entry>Exception support is broken on non-Linux targets. + <entry>Exception support is broken. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146">PR 66146</link>. diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2014.xml b/libstdc++-v3/doc/xml/manual/status_cxx2014.xml index 807cea57d120..518a8973f729 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2014.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2014.xml @@ -1390,7 +1390,7 @@ not in any particular release. <entry>30.4.4.2</entry> <entry>Function <code>call_once</code></entry> <entry>Broken</entry> - <entry>Exception support is broken on non-Linux targets. + <entry>Exception support is broken. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146">PR 66146</link>. diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml index bea6db929c62..144b9909fac0 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml @@ -2505,7 +2505,7 @@ since C++14 and the implementation is complete. <entry>33.4.6.2</entry> <entry>Function <code>call_once</code></entry> <entry>Y</entry> - <entry>Exception support is broken on non-Linux targets. + <entry>Exception support is broken. See <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146">PR 66146</link>. From 075104eef6d0ff215c394b6eaadcb525fa7c4975 Mon Sep 17 00:00:00 2001 From: Juergen Christ <jchrist@linux.ibm.com> Date: Wed, 25 Oct 2023 14:57:03 +0200 Subject: [PATCH 055/551] s390: fix htm-builtins test cases Transactional and non-transactional stores to the same cache line cause transactions to abort on newer generations. Add sufficient padding to make sure another cache line is used. Tested on s390. gcc/testsuite/ChangeLog: * gcc.target/s390/htm-builtins-1.c: Fix. * gcc.target/s390/htm-builtins-2.c: Fix. Signed-off-by: Juergen Christ <jchrist@linux.ibm.com> --- gcc/testsuite/gcc.target/s390/htm-builtins-1.c | 4 +++- gcc/testsuite/gcc.target/s390/htm-builtins-2.c | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.target/s390/htm-builtins-1.c b/gcc/testsuite/gcc.target/s390/htm-builtins-1.c index ff43be9fe736..4f95bf3accaa 100644 --- a/gcc/testsuite/gcc.target/s390/htm-builtins-1.c +++ b/gcc/testsuite/gcc.target/s390/htm-builtins-1.c @@ -53,9 +53,11 @@ __attribute__ ((aligned(256))) struct __attribute__ ((aligned(256))) struct { volatile uint64_t c1; + char pad1[256 - sizeof(uint64_t)]; volatile uint64_t c2; + char pad2[256 - sizeof(uint64_t)]; volatile uint64_t c3; -} counters = { 0, 0, 0 }; +} counters = { 0 }; /* ---------------------------- local helper functions --------------------- */ diff --git a/gcc/testsuite/gcc.target/s390/htm-builtins-2.c b/gcc/testsuite/gcc.target/s390/htm-builtins-2.c index bb9d346ea560..2e838caacc8c 100644 --- a/gcc/testsuite/gcc.target/s390/htm-builtins-2.c +++ b/gcc/testsuite/gcc.target/s390/htm-builtins-2.c @@ -94,9 +94,11 @@ float global_float_3 = 0.0; __attribute__ ((aligned(256))) struct { volatile uint64_t c1; + char pad1[256 - sizeof(uint64_t)]; volatile uint64_t c2; + char pad2[256 - sizeof(uint64_t)]; volatile uint64_t c3; -} counters = { 0, 0, 0 }; +} counters = { 0 }; /* ---------------------------- local helper functions --------------------- */ From 9349aefa1df7ae36714b7b9f426ad46e314892d1 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 14 Mar 2024 14:09:20 +0100 Subject: [PATCH 056/551] aarch64: Fix TImode __sync_*_compare_and_exchange expansion with LSE [PR114310] The following testcase ICEs with LSE atomics. The problem is that the @atomic_compare_and_swap<mode> expander uses aarch64_reg_or_zero predicate for the desired operand, which is fine, given that for most of the modes and even for TImode in some cases it can handle zero immediate just fine, but the TImode @aarch64_compare_and_swap<mode>_lse just uses register_operand for that operand instead, again intentionally so, because the casp, caspa, caspl and caspal instructions need to use a pair of consecutive registers for the operand and xzr is just one register and we can't just store zero into the link register to emulate pair of zeros. So, the following patch fixes that by forcing the newval operand into a register for the TImode LSE case. 2024-03-14 Jakub Jelinek <jakub@redhat.com> PR target/114310 * config/aarch64/aarch64.cc (aarch64_expand_compare_and_swap): For TImode force newval into a register. * gcc.dg/pr114310.c: New test. --- gcc/config/aarch64/aarch64.cc | 2 ++ gcc/testsuite/gcc.dg/pr114310.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr114310.c diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index ae040781c438..1ea84c8bd738 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -24693,6 +24693,8 @@ aarch64_expand_compare_and_swap (rtx operands[]) rval = copy_to_mode_reg (r_mode, oldval); else emit_move_insn (rval, gen_lowpart (r_mode, oldval)); + if (mode == TImode) + newval = force_reg (mode, newval); emit_insn (gen_aarch64_compare_and_swap_lse (mode, rval, mem, newval, mod_s)); diff --git a/gcc/testsuite/gcc.dg/pr114310.c b/gcc/testsuite/gcc.dg/pr114310.c new file mode 100644 index 000000000000..55edd800e426 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr114310.c @@ -0,0 +1,20 @@ +/* PR target/114310 */ +/* { dg-do run { target int128 } } */ + +volatile __attribute__((aligned (sizeof (__int128_t)))) __int128_t v = 10; + +int +main () +{ +#if __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 + if (__sync_val_compare_and_swap (&v, (__int128_t) 10, (__int128_t) 0) != 10) + __builtin_abort (); + if (__sync_val_compare_and_swap (&v, (__int128_t) 10, (__int128_t) 15) != 0) + __builtin_abort (); + if (__sync_val_compare_and_swap (&v, (__int128_t) 0, (__int128_t) 42) != 0) + __builtin_abort (); + if (__sync_val_compare_and_swap (&v, (__int128_t) 31, (__int128_t) 35) != 42) + __builtin_abort (); +#endif + return 0; +} From 25242ed8eb93613af6f296785da2d4ece816b7d6 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Wed, 6 Mar 2024 23:18:08 +0100 Subject: [PATCH 057/551] Fix 'char' initialization, copy, check in 'libgomp.oacc-fortran/acc-memcpy.f90' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Our dear friend '-Wuninitialized' reported: [...]/libgomp.oacc-fortran/acc-memcpy.f90:18:27: 18 | char(j) = int (j, int8) | ^ Warning: ‘j’ may be used uninitialized [-Wmaybe-uninitialized] [...]/libgomp.oacc-fortran/acc-memcpy.f90:14:20: 14 | integer(int8) :: j | ^ note: ‘j’ was declared here ..., but actually there were other issues. libgomp/ * testsuite/libgomp.oacc-fortran/acc-memcpy.f90: Fix 'char' initialization, copy, check. --- libgomp/testsuite/libgomp.oacc-fortran/acc-memcpy.f90 | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libgomp/testsuite/libgomp.oacc-fortran/acc-memcpy.f90 b/libgomp/testsuite/libgomp.oacc-fortran/acc-memcpy.f90 index 670dc50ff071..844d08a46616 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/acc-memcpy.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/acc-memcpy.f90 @@ -11,15 +11,14 @@ program main integer(int8), allocatable :: char(:) type(c_ptr) :: dptr integer(c_intptr_t) :: i - integer(int8) :: j allocate(char(-128:127)) do i = -128, 127 - char(j) = int (j, int8) + char(i) = int (i, int8) end do dptr = acc_malloc (256_c_size_t) - call acc_memcpy_to_device (dptr, char, 255_c_size_t) + call acc_memcpy_to_device (dptr, char, 256_c_size_t) do i = 0, 255 if (acc_is_present (transfer (transfer(char, i) + i, dptr), 1)) & @@ -31,8 +30,7 @@ program main call acc_memcpy_from_device (char, dptr, 256_c_size_t) do i = -128, 127 - char(i) = int (j, int8) - if (char(i) /= j) & + if (char(i) /= i) & stop 2 end do From 473c6123ffad38dddef7b126bf97971784d94b40 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Fri, 20 Oct 2023 15:49:35 +0200 Subject: [PATCH 058/551] Minor fixes for OpenACC/Fortran 'self' clause for compute constructs ... to fix up recent commit 3a3596389c2e539cb8fd5dc5784a4e2afe193a2a "OpenACC 2.7: Implement self clause for compute constructs". gcc/fortran/ * dump-parse-tree.cc (show_omp_clauses): Handle 'self_expr'. * openmp.cc (gfc_free_omp_clauses): Likewise. * trans-openmp.cc (gfc_split_omp_clauses): Don't handle 'self_expr'. --- gcc/fortran/dump-parse-tree.cc | 6 ++++++ gcc/fortran/openmp.cc | 1 + gcc/fortran/trans-openmp.cc | 2 -- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc index db84b06289be..7bc78663768c 100644 --- a/gcc/fortran/dump-parse-tree.cc +++ b/gcc/fortran/dump-parse-tree.cc @@ -1619,6 +1619,12 @@ show_omp_clauses (gfc_omp_clauses *omp_clauses) show_expr (omp_clauses->if_exprs[i]); fputc (')', dumpfile); } + if (omp_clauses->self_expr) + { + fputs (" SELF(", dumpfile); + show_expr (omp_clauses->self_expr); + fputc (')', dumpfile); + } if (omp_clauses->final_expr) { fputs (" FINAL(", dumpfile); diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 5c44e666eb99..315ec68f259d 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -164,6 +164,7 @@ gfc_free_omp_clauses (gfc_omp_clauses *c) gfc_free_expr (c->if_expr); for (i = 0; i < OMP_IF_LAST; i++) gfc_free_expr (c->if_exprs[i]); + gfc_free_expr (c->self_expr); gfc_free_expr (c->final_expr); gfc_free_expr (c->num_threads); gfc_free_expr (c->chunk_size); diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index 7a088ec5b2df..f867e2240bf8 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -6840,8 +6840,6 @@ gfc_split_omp_clauses (gfc_code *code, /* And this is copied to all. */ clausesa[GFC_OMP_SPLIT_TARGET].if_expr = code->ext.omp_clauses->if_expr; - clausesa[GFC_OMP_SPLIT_TARGET].self_expr - = code->ext.omp_clauses->self_expr; clausesa[GFC_OMP_SPLIT_TARGET].nowait = code->ext.omp_clauses->nowait; } From 38958ac987dc3e6162e2ddaba3c7e7f41381e079 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Thu, 14 Mar 2024 15:01:01 +0100 Subject: [PATCH 059/551] OpenACC 2.7: front-end support for readonly modifier: Add basic OpenACC 'declare' testing ... to complement commit ddf852dac2abaca317c10b8323f338123b0585c8 "OpenACC 2.7: front-end support for readonly modifier". gcc/testsuite/ * c-c++-common/goacc/readonly-1.c: Add basic OpenACC 'declare' testing. * gfortran.dg/goacc/readonly-1.f90: Likewise. --- gcc/testsuite/c-c++-common/goacc/readonly-1.c | 5 +++++ gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/gcc/testsuite/c-c++-common/goacc/readonly-1.c b/gcc/testsuite/c-c++-common/goacc/readonly-1.c index 34fc92c24d5c..300464c92e3f 100644 --- a/gcc/testsuite/c-c++-common/goacc/readonly-1.c +++ b/gcc/testsuite/c-c++-common/goacc/readonly-1.c @@ -8,12 +8,15 @@ struct S int a[32], b[32]; #pragma acc declare copyin(readonly: a) copyin(b) +/* Not visible in 'original' dump; handled via 'offload_vars'. */ int main (void) { int x[32], y[32]; struct S s = {x, 0}; + #pragma acc declare copyin(readonly: x/*[:32]*/, s/*.ptr[:16]*/) copyin(y/*[:32]*/) + #pragma acc parallel copyin(readonly: x[:32], s.ptr[:16]) copyin(y[:32]) { #pragma acc cache (readonly: x[:32]) @@ -43,6 +46,8 @@ int main (void) return 0; } +/* { dg-final { scan-tree-dump-times "(?n)#pragma acc declare map\\(to:y\\) map\\(readonly,to:s\\) map\\(readonly,to:x\\)" 1 "original" } } */ + /* { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ /* { dg-final { scan-tree-dump-times "(?n)#pragma acc kernels map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ /* { dg-final { scan-tree-dump-times "(?n)#pragma acc serial map\\(to:y\\\[0\\\] \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:\\*s.ptr \\\[len: \[0-9\]+\\\]\\) .+ map\\(readonly,to:x\\\[0\\\] \\\[len: \[0-9\]+\\\]\\)" 1 "original" { target { c } } } } */ diff --git a/gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 b/gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 index 696ebd08321b..fc1e2719e670 100644 --- a/gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/readonly-1.f90 @@ -3,6 +3,9 @@ subroutine foo (a, n) integer :: n, a(:) integer :: i, b(n), c(n) + !!$acc declare copyin(readonly: a(:), b(:n)) copyin(c(:)) + !$acc declare copyin(readonly: b) copyin(c) + !$acc parallel copyin(readonly: a(:), b(:n)) copyin(c(:)) do i = 1,32 !$acc cache (readonly: a(:), b(:n)) @@ -74,6 +77,9 @@ program main end program main +! The front end turns OpenACC 'declare' into OpenACC 'data'. +! { dg-final { scan-tree-dump-times "(?n)#pragma acc data map\\(readonly,to:\\*b\\) map\\(alloc:b.+ map\\(to:\\*c\\) map\\(alloc:c.+" 1 "original" } } +! { dg-final { scan-tree-dump-times "(?n)#pragma acc data map\\(readonly,to:g\\) map\\(to:h\\)" 1 "original" } } ! { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel map\\(readonly,to:\\*.+ map\\(alloc:a.+ map\\(readonly,to:\\*.+ map\\(alloc:b.+ map\\(to:\\*.+ map\\(alloc:c.+" 1 "original" } } ! { dg-final { scan-tree-dump-times "(?n)#pragma acc parallel map\\(readonly,to:a.+ map\\(alloc:a.+ map\\(readonly,to:b.+ map\\(alloc:b.+ map\\(to:c.+ map\\(alloc:c.+" 1 "original" } } ! { dg-final { scan-tree-dump-times "(?n)#pragma acc kernels map\\(readonly,to:\\*.+ map\\(alloc:a.+ map\\(readonly,to:\\*.+ map\\(alloc:b.+ map\\(to:\\*.+ map\\(alloc:c.+" 1 "original" } } From 0adc8c5f146b108f99c4df09e43276e3a2419262 Mon Sep 17 00:00:00 2001 From: xndcn <xndchn@gmail.com> Date: Fri, 16 Feb 2024 11:00:13 +0000 Subject: [PATCH 060/551] libstdc++: Add missing clear_padding in __atomic_float constructor For 80-bit long double we need to clear the padding bits on construction. libstdc++-v3/ChangeLog: * include/bits/atomic_base.h (__atomic_float::__atomic_float(Fp)): Clear padding. * testsuite/29_atomics/atomic_float/compare_exchange_padding.cc: New test. Signed-off-by: xndcn <xndchn@gmail.com> Reviewed-by: Jonathan Wakely <jwakely@redhat.com> --- libstdc++-v3/include/bits/atomic_base.h | 2 +- .../atomic_float/compare_exchange_padding.cc | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/29_atomics/atomic_float/compare_exchange_padding.cc diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h index b857b441169e..dd360302f801 100644 --- a/libstdc++-v3/include/bits/atomic_base.h +++ b/libstdc++-v3/include/bits/atomic_base.h @@ -1283,7 +1283,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION constexpr __atomic_float(_Fp __t) : _M_fp(__t) - { } + { __atomic_impl::__clear_padding(_M_fp); } __atomic_float(const __atomic_float&) = delete; __atomic_float& operator=(const __atomic_float&) = delete; diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_float/compare_exchange_padding.cc b/libstdc++-v3/testsuite/29_atomics/atomic_float/compare_exchange_padding.cc new file mode 100644 index 000000000000..49626ac66511 --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic_float/compare_exchange_padding.cc @@ -0,0 +1,53 @@ +// { dg-do run { target c++20 } } +// { dg-options "-O0" } +// { dg-additional-options "[atomic_link_flags [get_multilibs]] -latomic" } + +#include <atomic> +#include <cstring> +#include <limits> +#include <testsuite_hooks.h> + +template<typename T> +void __attribute__((noinline,noipa)) +fill_padding(T& f) +{ + T mask; + std::memset(&mask, 0xff, sizeof(T)); + __builtin_clear_padding(&mask); + unsigned char* ptr_f = (unsigned char*)&f; + unsigned char* ptr_mask = (unsigned char*)&mask; + for (unsigned i = 0; i < sizeof(T); i++) + { + if (ptr_mask[i] == 0x00) + { + ptr_f[i] = 0xff; + } + } +} + +void +test01() +{ + // test for long double with padding (float80) + if constexpr (std::numeric_limits<long double>::digits == 64) + { + long double f = 0.5f; // long double has padding bits on x86 + fill_padding(f); + std::atomic<long double> as{ f }; // padding cleared on constructor + long double t = 1.5; + + as.fetch_add(t); + long double s = f + t; + t = as.load(); + VERIFY(s == t); // padding ignored on comparison + fill_padding(s); + VERIFY(as.compare_exchange_weak(s, f)); // padding cleared on cmpexchg + fill_padding(f); + VERIFY(as.compare_exchange_strong(f, t)); // padding cleared on cmpexchg + } +} + +int main() +{ + test01(); +} From f98b85b1ef74b7c5c0852b3d063262bce63df14e Mon Sep 17 00:00:00 2001 From: Xi Ruoyao <xry111@xry111.site> Date: Wed, 13 Mar 2024 20:44:38 +0800 Subject: [PATCH 061/551] LoongArch: Remove unused and incorrect "sge<u>_<X:mode><GPR:mode>" define_insn If this insn is really used, we'll have something like slti $r4,$r0,$r5 in the code. The assembler will reject it because slti wants 2 register operands and 1 immediate operand. But we've not got any bug report for this, indicating this define_insn is unused at all. Note that do_store_flag (in expr.cc) is already converting x >= 1 to x > 0 unconditionally, so this define_insn is indeed unused and we can just remove it. gcc/ChangeLog: * config/loongarch/loongarch.md (any_ge): Remove. (sge<u>_<X:mode><GPR:mode>): Remove. --- gcc/config/loongarch/loongarch.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md index 525e1e82183f..18fd9c1e7d5c 100644 --- a/gcc/config/loongarch/loongarch.md +++ b/gcc/config/loongarch/loongarch.md @@ -517,7 +517,6 @@ ;; These code iterators allow the signed and unsigned scc operations to use ;; the same template. (define_code_iterator any_gt [gt gtu]) -(define_code_iterator any_ge [ge geu]) (define_code_iterator any_lt [lt ltu]) (define_code_iterator any_le [le leu]) @@ -3355,15 +3354,6 @@ [(set_attr "type" "slt") (set_attr "mode" "<X:MODE>")]) -(define_insn "*sge<u>_<X:mode><GPR:mode>" - [(set (match_operand:GPR 0 "register_operand" "=r") - (any_ge:GPR (match_operand:X 1 "register_operand" "r") - (const_int 1)))] - "" - "slt<u>i\t%0,%.,%1" - [(set_attr "type" "slt") - (set_attr "mode" "<X:MODE>")]) - (define_insn "*slt<u>_<X:mode><GPR:mode>" [(set (match_operand:GPR 0 "register_operand" "=r") (any_lt:GPR (match_operand:X 1 "register_operand" "r") From 7aeedff6a426cc05024af0bc92116d676a5ba42b Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 14 Mar 2024 15:34:36 +0000 Subject: [PATCH 062/551] PR modula2/114333 set type comparison against cardinal should cause error addendum This patch applies the new stricter type checking procedure function to the remaining 6 comparisons: less, greater, lessequ, greequ, ifin and ifnotin. gcc/m2/ChangeLog: PR modula2/114333 * gm2-compiler/M2GenGCC.mod (CodeStatement): Remove op1, op2 and op3 parameters to CodeIfLess, CodeIfLessEqu, CodeIfGreEqu, CodeIfGre, CodeIfIn, CodeIfNotIn. (CodeIfLess): Rewrite. (PerformCodeIfLess): New procedure. (CodeIfLess): Rewrite. (PerformCodeIfLess): New procedure. (CodeIfLessEqu): Rewrite. (PerformCodeIfLessEqu): New procedure. (CodeIfGreEqu): Rewrite. (PerformCodeIfGreEqu): New procedure. (CodeIfGre): Rewrite. (PerformCodeIfGre): New procedure. (CodeIfIn): Rewrite. (PerformCodeIfIn): New procedure. (CodeIfNotIn): Rewrite. (PerformCodeIfNotIn): New procedure. gcc/testsuite/ChangeLog: PR modula2/114333 * gm2/pim/fail/badset5.mod: New test. * gm2/pim/fail/badset6.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2GenGCC.mod | 438 +++++++++++++++---------- gcc/testsuite/gm2/pim/fail/badset5.mod | 13 + gcc/testsuite/gm2/pim/fail/badset6.mod | 23 ++ 3 files changed, 300 insertions(+), 174 deletions(-) create mode 100644 gcc/testsuite/gm2/pim/fail/badset5.mod create mode 100644 gcc/testsuite/gm2/pim/fail/badset6.mod diff --git a/gcc/m2/gm2-compiler/M2GenGCC.mod b/gcc/m2/gm2-compiler/M2GenGCC.mod index 7633b8425aef..7e27373a6ac1 100644 --- a/gcc/m2/gm2-compiler/M2GenGCC.mod +++ b/gcc/m2/gm2-compiler/M2GenGCC.mod @@ -510,14 +510,14 @@ BEGIN LogicalAndOp : CodeSetAnd (q) | LogicalXorOp : CodeSetSymmetricDifference (q) | LogicalDiffOp : CodeSetLogicalDifference (q) | - IfLessOp : CodeIfLess (q, op1, op2, op3) | + IfLessOp : CodeIfLess (q) | IfEquOp : CodeIfEqu (q) | IfNotEquOp : CodeIfNotEqu (q) | - IfGreEquOp : CodeIfGreEqu (q, op1, op2, op3) | - IfLessEquOp : CodeIfLessEqu (q, op1, op2, op3) | - IfGreOp : CodeIfGre (q, op1, op2, op3) | - IfInOp : CodeIfIn (q, op1, op2, op3) | - IfNotInOp : CodeIfNotIn (q, op1, op2, op3) | + IfGreEquOp : CodeIfGreEqu (q) | + IfLessEquOp : CodeIfLessEqu (q) | + IfGreOp : CodeIfGre (q) | + IfInOp : CodeIfIn (q) | + IfNotInOp : CodeIfNotIn (q) | IndrXOp : CodeIndrX (q, op1, op2, op3) | XIndrOp : CodeXIndr (q) | CallOp : CodeCall (CurrentQuadToken, op3) | @@ -6831,50 +6831,67 @@ END CodeIfSetLess ; (* - CodeIfLess - codes the quadruple if op1 < op2 then goto op3 + PerformCodeIfLess - codes the quadruple if op1 < op2 then goto op3 *) -PROCEDURE CodeIfLess (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfLess (quad: CARDINAL) ; VAR tl, tr : Tree ; - location: location_t ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - IF IsConst(op1) AND IsConst(op2) + IF IsConst(left) AND IsConst(right) THEN - PushValue(op1) ; - PushValue(op2) ; + PushValue(left) ; + PushValue(right) ; IF Less(CurrentQuadToken) THEN - BuildGoto(location, string(CreateLabelName(op3))) + BuildGoto(location, string(CreateLabelName(dest))) ELSE (* fall through *) END - ELSIF IsConstSet(op1) OR (IsVar(op1) AND IsSet(SkipType(GetType(op1)))) OR - IsConstSet(op2) OR (IsVar(op2) AND IsSet(SkipType(GetType(op2)))) + ELSIF IsConstSet(left) OR (IsVar(left) AND IsSet(SkipType(GetType(left)))) OR + IsConstSet(right) OR (IsVar(right) AND IsSet(SkipType(GetType(right)))) THEN - CodeIfSetLess(quad, op1, op2, op3) + CodeIfSetLess(quad, left, right, dest) ELSE - IF IsComposite(GetType(op1)) OR IsComposite(GetType(op2)) + IF IsComposite(GetType(left)) OR IsComposite(GetType(right)) THEN - MetaErrorT2 (CurrentQuadToken, + MetaErrorT2 (combined, 'comparison tests between composite types not allowed {%1Eatd} and {%2atd}', - op1, op2) + left, right) ELSE - ConvertBinaryOperands(location, - tl, tr, - ComparisonMixTypes (SkipType (GetType (op1)), - SkipType (GetType (op2)), - CurrentQuadToken), - op1, op2) ; - DoJump(location, - BuildLessThan(location, tl, tr), NIL, string(CreateLabelName(op3))) + ConvertBinaryOperands (location, + tl, tr, + ComparisonMixTypes (SkipType (GetType (left)), + SkipType (GetType (right)), + combined), + left, right) ; + DoJump (location, + BuildLessThan (location, tl, tr), NIL, string (CreateLabelName (dest))) END END +END PerformCodeIfLess ; + + +(* + CodeIfLess - codes the quadruple if op1 < op2 then goto op3 +*) + +PROCEDURE CodeIfLess (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad, FALSE) + THEN + PerformCodeIfLess (quad) + END END CodeIfLess ; @@ -6926,51 +6943,65 @@ END CodeIfSetGre ; (* - CodeIfGre - codes the quadruple if op1 > op2 then goto op3 + PerformCodeIfGre - codes the quadruple if op1 > op2 then goto op3 *) -PROCEDURE CodeIfGre (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfGre (quad: CARDINAL) ; VAR tl, tr : Tree ; - location: location_t ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op1) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - IF IsConst(op1) AND IsConst(op2) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + IF IsConst(left) AND IsConst(right) THEN - PushValue(op1) ; - PushValue(op2) ; - IF Gre(CurrentQuadToken) + PushValue(left) ; + PushValue(right) ; + IF Gre(combined) THEN - BuildGoto(location, string(CreateLabelName(op3))) + BuildGoto(location, string(CreateLabelName(dest))) ELSE (* fall through *) END - ELSIF IsConstSet(op1) OR (IsVar(op1) AND IsSet(SkipType(GetType(op1)))) OR - IsConstSet(op2) OR (IsVar(op2) AND IsSet(SkipType(GetType(op2)))) + ELSIF IsConstSet(left) OR (IsVar(left) AND IsSet(SkipType(GetType(left)))) OR + IsConstSet(right) OR (IsVar(right) AND IsSet(SkipType(GetType(right)))) THEN - CodeIfSetGre(quad, op1, op2, op3) + CodeIfSetGre(quad, left, right, dest) ELSE - IF IsComposite(GetType(op1)) OR IsComposite(GetType(op2)) + IF IsComposite(GetType(left)) OR IsComposite(GetType(right)) THEN - MetaErrorT2 (CurrentQuadToken, + MetaErrorT2 (combined, 'comparison tests between composite types not allowed {%1Eatd} and {%2atd}', - op1, op2) + left, right) ELSE ConvertBinaryOperands(location, tl, tr, - ComparisonMixTypes (SkipType (GetType (op1)), - SkipType (GetType (op2)), - CurrentQuadToken), - op1, op2) ; - DoJump(location, BuildGreaterThan(location, tl, tr), NIL, string(CreateLabelName(op3))) + ComparisonMixTypes (SkipType (GetType (left)), + SkipType (GetType (right)), + combined), + left, right) ; + DoJump(location, BuildGreaterThan(location, tl, tr), NIL, string(CreateLabelName(dest))) END END +END PerformCodeIfGre ; + + +(* + CodeIfGre - codes the quadruple if op1 > op2 then goto op3 +*) + +PROCEDURE CodeIfGre (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad, FALSE) + THEN + PerformCodeIfGre (quad) + END END CodeIfGre ; @@ -7022,51 +7053,66 @@ END CodeIfSetLessEqu ; (* - CodeIfLessEqu - codes the quadruple if op1 <= op2 then goto op3 + PerformCodeIfLessEqu - codes the quadruple if op1 <= op2 then goto op3 *) -PROCEDURE CodeIfLessEqu (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfLessEqu (quad: CARDINAL) ; VAR tl, tr : Tree ; - location: location_t ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op1) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - IF IsConst(op1) AND IsConst(op2) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + IF IsConst(left) AND IsConst(right) THEN - PushValue(op1) ; - PushValue(op2) ; - IF LessEqu(CurrentQuadToken) + PushValue(left) ; + PushValue(right) ; + IF LessEqu(combined) THEN - BuildGoto(location, string(CreateLabelName(op3))) + BuildGoto(location, string(CreateLabelName(dest))) ELSE (* fall through *) END - ELSIF IsConstSet(op1) OR (IsVar(op1) AND IsSet(SkipType(GetType(op1)))) OR - IsConstSet(op2) OR (IsVar(op2) AND IsSet(SkipType(GetType(op2)))) + ELSIF IsConstSet (left) OR (IsVar (left) AND IsSet (SkipType (GetType (left)))) OR + IsConstSet (right) OR (IsVar (right) AND IsSet (SkipType (GetType (right)))) THEN - CodeIfSetLessEqu(quad, op1, op2, op3) + CodeIfSetLessEqu (quad, left, right, dest) ELSE - IF IsComposite(GetType(op1)) OR IsComposite(GetType(op2)) + IF IsComposite (GetType (left)) OR IsComposite (GetType (right)) THEN - MetaErrorT2 (CurrentQuadToken, + MetaErrorT2 (combined, 'comparison tests between composite types not allowed {%1Eatd} and {%2atd}', - op1, op2) + left, right) ELSE - ConvertBinaryOperands(location, - tl, tr, - ComparisonMixTypes (SkipType (GetType (op1)), - SkipType (GetType (op2)), - CurrentQuadToken), - op1, op2) ; - DoJump(location, BuildLessThanOrEqual(location, tl, tr), NIL, string(CreateLabelName(op3))) + ConvertBinaryOperands (location, + tl, tr, + ComparisonMixTypes (SkipType (GetType (left)), + SkipType (GetType (right)), + combined), + left, right) ; + DoJump (location, BuildLessThanOrEqual (location, tl, tr), + NIL, string (CreateLabelName (dest))) END END +END PerformCodeIfLessEqu ; + + +(* + CodeIfLessEqu - codes the quadruple if op1 <= op2 then goto op3 +*) + +PROCEDURE CodeIfLessEqu (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad, FALSE) + THEN + PerformCodeIfLessEqu (quad) + END END CodeIfLessEqu ; @@ -7118,51 +7164,65 @@ END CodeIfSetGreEqu ; (* - CodeIfGreEqu - codes the quadruple if op1 >= op2 then goto op3 + PerformCodeIfGreEqu - codes the quadruple if op1 >= op2 then goto op3 *) -PROCEDURE CodeIfGreEqu (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfGreEqu (quad: CARDINAL) ; VAR tl, tr: Tree ; - location: location_t ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op1) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - IF IsConst(op1) AND IsConst(op2) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + IF IsConst(left) AND IsConst(right) THEN - PushValue(op1) ; - PushValue(op2) ; - IF GreEqu(CurrentQuadToken) + PushValue(left) ; + PushValue(right) ; + IF GreEqu(combined) THEN - BuildGoto(location, string(CreateLabelName(op3))) + BuildGoto(location, string(CreateLabelName(dest))) ELSE (* fall through *) END - ELSIF IsConstSet(op1) OR (IsVar(op1) AND IsSet(SkipType(GetType(op1)))) OR - IsConstSet(op2) OR (IsVar(op2) AND IsSet(SkipType(GetType(op2)))) + ELSIF IsConstSet(left) OR (IsVar(left) AND IsSet(SkipType(GetType(left)))) OR + IsConstSet(right) OR (IsVar(right) AND IsSet(SkipType(GetType(right)))) THEN - CodeIfSetGreEqu(quad, op1, op2, op3) + CodeIfSetGreEqu(quad, left, right, dest) ELSE - IF IsComposite(GetType(op1)) OR IsComposite(GetType(op2)) + IF IsComposite(GetType(left)) OR IsComposite(GetType(right)) THEN - MetaErrorT2 (CurrentQuadToken, + MetaErrorT2 (combined, 'comparison tests between composite types not allowed {%1Eatd} and {%2atd}', - op1, op2) + left, right) ELSE ConvertBinaryOperands(location, tl, tr, - ComparisonMixTypes (SkipType (GetType (op1)), - SkipType (GetType (op2)), - CurrentQuadToken), - op1, op2) ; - DoJump(location, BuildGreaterThanOrEqual(location, tl, tr), NIL, string(CreateLabelName(op3))) + ComparisonMixTypes (SkipType (GetType (left)), + SkipType (GetType (right)), + combined), + left, right) ; + DoJump(location, BuildGreaterThanOrEqual(location, tl, tr), NIL, string(CreateLabelName(dest))) END END +END PerformCodeIfGreEqu ; + + +(* + CodeIfGreEqu - codes the quadruple if op1 >= op2 then goto op3 +*) + +PROCEDURE CodeIfGreEqu (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad, FALSE) + THEN + PerformCodeIfGreEqu (quad) + END END CodeIfGreEqu ; @@ -7302,7 +7362,6 @@ VAR overflow : BOOLEAN ; op : QuadOperator ; BEGIN - (* Ensure that any remaining undeclared constant literal is declared. *) GetQuadOtok (quad, combined, op, left, right, dest, overflow, leftpos, rightpos, destpos) ; @@ -7394,10 +7453,11 @@ END PerformCodeIfNotEqu ; (* - IsValidExpressionRelOp - + IsValidExpressionRelOp - declare left and right constants (if they are not already declared). + Check whether left and right are expression compatible. *) -PROCEDURE IsValidExpressionRelOp (quad: CARDINAL) : BOOLEAN ; +PROCEDURE IsValidExpressionRelOp (quad: CARDINAL; isin: BOOLEAN) : BOOLEAN ; CONST Verbose = FALSE ; VAR @@ -7418,7 +7478,7 @@ BEGIN lefttype := GetType (left) ; righttype := GetType (right) ; IF ExpressionTypeCompatible (combined, "", left, right, - StrictTypeChecking, FALSE) + StrictTypeChecking, isin) THEN RETURN TRUE ELSE @@ -7439,7 +7499,7 @@ END IsValidExpressionRelOp ; PROCEDURE CodeIfEqu (quad: CARDINAL) ; BEGIN - IF IsValidExpressionRelOp (quad) + IF IsValidExpressionRelOp (quad, FALSE) THEN PerformCodeIfEqu (quad) END @@ -7452,7 +7512,7 @@ END CodeIfEqu ; PROCEDURE CodeIfNotEqu (quad: CARDINAL) ; BEGIN - IF IsValidExpressionRelOp (quad) + IF IsValidExpressionRelOp (quad, FALSE) THEN PerformCodeIfNotEqu (quad) END @@ -7541,10 +7601,10 @@ END BuildIfNotVarInConstValue ; (* - CodeIfIn - code the quadruple: if op1 in op2 then goto op3 + PerformCodeIfIn - code the quadruple: if op1 in op2 then goto op3 *) -PROCEDURE CodeIfIn (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfIn (quad: CARDINAL) ; VAR low, high : CARDINAL ; @@ -7552,44 +7612,46 @@ VAR hightree, offset : Tree ; fieldno : INTEGER ; - location: location_t ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op1) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - IF IsConst(op1) AND IsConst(op2) + (* Ensure that any remaining undeclared constant literal is declared. *) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + IF IsConst(left) AND IsConst(right) THEN InternalError ('should not get to here (if we do we should consider calling FoldIfIn)') ELSIF CheckElementSetTypes (quad) THEN - IF IsConst(op1) + IF IsConst(left) THEN - fieldno := GetFieldNo(CurrentQuadToken, op1, GetType(op2), offset) ; + fieldno := GetFieldNo(combined, left, GetType(right), offset) ; IF fieldno>=0 THEN - PushValue(op1) ; + PushValue(left) ; PushIntegerTree(offset) ; - ConvertToType(GetType(op1)) ; + ConvertToType(GetType(left)) ; Sub ; BuildIfConstInVar(location, - Mod2Gcc(SkipType(GetType(op2))), - Mod2Gcc(op2), PopIntegerTree(), - GetMode(op2)=LeftValue, fieldno, - string(CreateLabelName(op3))) + Mod2Gcc(SkipType(GetType(right))), + Mod2Gcc(right), PopIntegerTree(), + GetMode(right)=LeftValue, fieldno, + string(CreateLabelName(dest))) ELSE - MetaErrorT1 (CurrentQuadToken, 'bit exceeded the range of set {%1Eatd}', op1) + MetaErrorT1 (combined, 'bit exceeded the range of set {%1Eatd}', left) END - ELSIF IsConst(op2) + ELSIF IsConst(right) THEN (* builds a cascaded list of if statements *) - PushValue(op2) ; - BuildIfVarInConstValue(location, CurrentQuadToken, GetValue(CurrentQuadToken), op1, op3) + PushValue(right) ; + BuildIfVarInConstValue(location, combined, GetValue(combined), left, dest) ELSE - GetSetLimits(SkipType(GetType(op2)), low, high) ; + GetSetLimits(SkipType(GetType(right)), low, high) ; PushValue(low) ; lowtree := PopIntegerTree() ; @@ -7597,21 +7659,21 @@ BEGIN hightree := PopIntegerTree() ; BuildIfVarInVar(location, - Mod2Gcc(SkipType(GetType(op2))), - Mod2Gcc(op2), Mod2Gcc(op1), - GetMode(op2)=LeftValue, + Mod2Gcc(SkipType(GetType(right))), + Mod2Gcc(right), Mod2Gcc(left), + GetMode(right)=LeftValue, lowtree, hightree, - string(CreateLabelName(op3))) + string(CreateLabelName(dest))) END END -END CodeIfIn ; +END PerformCodeIfIn ; (* - CodeIfNotIn - code the quadruple: if not (op1 in op2) then goto op3 + PerformCodeIfNotIn - code the quadruple: if not (op1 in op2) then goto op3 *) -PROCEDURE CodeIfNotIn (quad: CARDINAL; op1, op2, op3: CARDINAL) ; +PROCEDURE PerformCodeIfNotIn (quad: CARDINAL) ; VAR low, high : CARDINAL ; @@ -7619,44 +7681,46 @@ VAR hightree, offset : Tree ; fieldno : INTEGER ; - location: location_t ; + location : location_t ; + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + overflow : BOOLEAN ; + op : QuadOperator ; BEGIN - location := TokenToLocation(CurrentQuadToken) ; - - (* firstly ensure that any constant literal is declared *) - DeclareConstant(CurrentQuadToken, op1) ; - DeclareConstant(CurrentQuadToken, op2) ; - DeclareConstructor(CurrentQuadToken, quad, op1) ; - DeclareConstructor(CurrentQuadToken, quad, op2) ; - IF IsConst(op1) AND IsConst(op2) + (* Ensure that any remaining undeclared constant literal is declared. *) + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + leftpos, rightpos, destpos) ; + location := TokenToLocation (combined) ; + IF IsConst(left) AND IsConst(right) THEN InternalError ('should not get to here (if we do we should consider calling FoldIfIn)') ELSIF CheckElementSetTypes (quad) THEN - IF IsConst(op1) + IF IsConst(left) THEN - fieldno := GetFieldNo(CurrentQuadToken, op1, SkipType(GetType(op2)), offset) ; + fieldno := GetFieldNo(combined, left, SkipType(GetType(right)), offset) ; IF fieldno>=0 THEN - PushValue(op1) ; + PushValue(left) ; PushIntegerTree(offset) ; - ConvertToType(GetType(op1)) ; + ConvertToType(GetType(left)) ; Sub ; BuildIfNotConstInVar(location, - Mod2Gcc(SkipType(GetType(op2))), - Mod2Gcc(op2), PopIntegerTree(), - GetMode(op2)=LeftValue, fieldno, - string(CreateLabelName(op3))) + Mod2Gcc(SkipType(GetType(right))), + Mod2Gcc(right), PopIntegerTree(), + GetMode(right)=LeftValue, fieldno, + string(CreateLabelName(dest))) ELSE - MetaErrorT1 (CurrentQuadToken, 'bit exceeded the range of set {%1Eatd}', op2) + MetaErrorT1 (combined, 'bit exceeded the range of set {%1Eatd}', right) END - ELSIF IsConst(op2) + ELSIF IsConst(right) THEN (* builds a cascaded list of if statements *) - PushValue(op2) ; - BuildIfNotVarInConstValue(quad, GetValue(CurrentQuadToken), op1, op3) + PushValue(right) ; + BuildIfNotVarInConstValue(quad, GetValue(combined), left, dest) ELSE - GetSetLimits(SkipType(GetType(op2)), low, high) ; + GetSetLimits(SkipType(GetType(right)), low, high) ; PushValue(low) ; lowtree := PopIntegerTree() ; @@ -7664,13 +7728,39 @@ BEGIN hightree := PopIntegerTree() ; BuildIfNotVarInVar(location, - Mod2Gcc(SkipType(GetType(op2))), - Mod2Gcc(op2), Mod2Gcc(op1), - GetMode(op2)=LeftValue, + Mod2Gcc(SkipType(GetType(right))), + Mod2Gcc(right), Mod2Gcc(left), + GetMode(right)=LeftValue, lowtree, hightree, - string(CreateLabelName(op3))) + string(CreateLabelName(dest))) END END +END PerformCodeIfNotIn ; + + +(* + CodeIfIn - code the quadruple: if op1 in op2 then goto op3 +*) + +PROCEDURE CodeIfIn (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad, TRUE) + THEN + PerformCodeIfIn (quad) + END +END CodeIfIn ; + + +(* + CodeIfNotIn - code the quadruple: if not (op1 in op2) then goto op3 +*) + +PROCEDURE CodeIfNotIn (quad: CARDINAL) ; +BEGIN + IF IsValidExpressionRelOp (quad, TRUE) + THEN + PerformCodeIfNotIn (quad) + END END CodeIfNotIn ; diff --git a/gcc/testsuite/gm2/pim/fail/badset5.mod b/gcc/testsuite/gm2/pim/fail/badset5.mod new file mode 100644 index 000000000000..ecc7622f37f1 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badset5.mod @@ -0,0 +1,13 @@ +MODULE badset5 ; + +FROM libc IMPORT printf ; + +VAR + s: SET OF [1..10] ; + c: CARDINAL ; +BEGIN + IF c > s + THEN + printf ("broken\n") + END +END badset5. diff --git a/gcc/testsuite/gm2/pim/fail/badset6.mod b/gcc/testsuite/gm2/pim/fail/badset6.mod new file mode 100644 index 000000000000..d97f8e254446 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badset6.mod @@ -0,0 +1,23 @@ +MODULE badset6 ; + +FROM libc IMPORT printf ; + +TYPE + set = SET OF [1..10] ; + +PROCEDURE Init (s: set) ; +VAR + c: CARDINAL ; +BEGIN + IF c > s + THEN + printf ("broken\n") + ELSE + printf ("broken\n") + END +END Init ; + + +BEGIN + Init (set {5,6}) +END badset6. From 7580e39452b65ab5fb5a06f3f1ad7d59720269b5 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 14 Mar 2024 17:48:30 +0100 Subject: [PATCH 063/551] icf: Reset SSA_NAME_{PTR,RANGE}_INFO in successfully merged functions [PR113907] AFAIK we have no code in LTO streaming to stream out or in SSA_NAME_{RANGE,PTR}_INFO, so LTO effectively throws it all away and let vrp1 and alias analysis after IPA recompute that. There is just one spot, for IPA VRP and IPA bit CCP we save/restore ranges and set SSA_NAME_{PTR,RANGE}_INFO e.g. on parameters depending on what we saved and propagated, but that is after streaming in bodies for the post IPA optimizations. Now, without LTO SSA_NAME_{RANGE,PTR}_INFO is already computed from earlier in many cases (er.g. evrp and early alias analysis but other spots too), but IPA ICF is ignoring the ranges and points-to details when comparing the bodies. I think ignoring that is just fine, that is effectively what we do for LTO where we throw that information away before the analysis, and not ignoring it could lead to fewer ICF merging possibilities. So, the following patch instead verifies that for LTO SSA_NAME_{PTR,RANGE}_INFO just isn't there on SSA_NAMEs in functions into which other functions have been ICFed, and for non-LTO throws that information away (which matches the LTO behavior). Another possibility would be to remember the SSA_NAME <-> SSA_NAME mapping vector (just one of the 2) on successful sem_function::equals on the sem_function which is not the chosen leader (e.g. how SSA_NAMEs in the leader map to SSA_NAMEs in the other function) and use that vector to union the ranges in sem_function::merge. I can implement that for comparison, but wanted to post this first if there is an agreement on doing that or if Honza thinks we should take SSA_NAME_{RANGE,PTR}_INFO into account. I think we can compare SSA_NAME_RANGE_INFO, but have no idea how to try to compare points to info. And I think it will result in less effective ICF for non-LTO vs. LTO unnecessarily. 2024-03-12 Jakub Jelinek <jakub@redhat.com> PR middle-end/113907 * ipa-icf.cc (sem_item_optimizer::merge_classes): Reset SSA_NAME_RANGE_INFO and SSA_NAME_PTR_INFO on successfully ICF merged functions. * gcc.dg/pr113907-1.c: New test. --- gcc/ipa-icf.cc | 32 +++++++++++++++++++- gcc/testsuite/gcc.dg/pr113907-1.c | 49 +++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr113907-1.c diff --git a/gcc/ipa-icf.cc b/gcc/ipa-icf.cc index 5d5a42f9c6c9..120d85449882 100644 --- a/gcc/ipa-icf.cc +++ b/gcc/ipa-icf.cc @@ -3398,6 +3398,7 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count, continue; sem_item *source = c->members[0]; + bool this_merged_p = false; if (DECL_NAME (source->decl) && MAIN_NAME_P (DECL_NAME (source->decl))) @@ -3445,7 +3446,7 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count, if (dbg_cnt (merged_ipa_icf)) { bool merged = source->merge (alias); - merged_p |= merged; + this_merged_p |= merged; if (merged && alias->type == VAR) { @@ -3454,6 +3455,35 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count, } } } + + merged_p |= this_merged_p; + if (this_merged_p + && source->type == FUNC + && (!flag_wpa || flag_checking)) + { + unsigned i; + tree name; + FOR_EACH_SSA_NAME (i, name, DECL_STRUCT_FUNCTION (source->decl)) + { + /* We need to either merge or reset SSA_NAME_*_INFO. + For merging we don't preserve the mapping between + original and alias SSA_NAMEs from successful equals + calls. */ + if (POINTER_TYPE_P (TREE_TYPE (name))) + { + if (SSA_NAME_PTR_INFO (name)) + { + gcc_checking_assert (!flag_wpa); + SSA_NAME_PTR_INFO (name) = NULL; + } + } + else if (SSA_NAME_RANGE_INFO (name)) + { + gcc_checking_assert (!flag_wpa); + SSA_NAME_RANGE_INFO (name) = NULL; + } + } + } } if (!m_merged_variables.is_empty ()) diff --git a/gcc/testsuite/gcc.dg/pr113907-1.c b/gcc/testsuite/gcc.dg/pr113907-1.c new file mode 100644 index 000000000000..04c4fb8c1287 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr113907-1.c @@ -0,0 +1,49 @@ +/* PR middle-end/113907 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ +/* { dg-additional-options "-minline-all-stringops" { target i?86-*-* x86_64-*-* } } */ + +static inline int +foo (int len, void *indata, void *outdata) +{ + if (len < 0 || (len & 7) != 0) + return 0; + if (len != 0 && indata != outdata) + __builtin_memcpy (outdata, indata, len); + return len; +} + +static inline int +bar (int len, void *indata, void *outdata) +{ + if (len < 0 || (len & 1) != 0) + return 0; + if (len != 0 && indata != outdata) + __builtin_memcpy (outdata, indata, len); + return len; +} + +int (*volatile p1) (int, void *, void *) = foo; +int (*volatile p2) (int, void *, void *) = bar; + +__attribute__((noipa)) int +baz (int len, void *indata, void *outdata) +{ + if ((len & 6) != 0) + bar (len, indata, outdata); + else + foo (len, indata, outdata); +} + +struct S { char buf[64]; } s __attribute__((aligned (8))); + +int +main () +{ + for (int i = 0; i < 64; ++i) + s.buf[i] = ' ' + i; + p2 (2, s.buf, s.buf + 33); + for (int i = 0; i < 64; ++i) + if (s.buf[i] != ' ' + ((i >= 33 && i < 35) ? i - 33 : i)) + __builtin_abort (); +} From fd7104388406b77ad4b81eb77d976ecfff848913 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 14 Mar 2024 17:51:32 +0100 Subject: [PATCH 064/551] gcn: Fix a comment typo I've noticed a typo in the comment above ABI_VERSION_SPEC. Fixed thusly. 2024-03-14 Jakub Jelinek <jakub@redhat.com> * config/gcn/gcn-hsa.h (ABI_VERSION_SPEC): Fix comment typo. --- gcc/config/gcn/gcn-hsa.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/gcn/gcn-hsa.h b/gcc/config/gcn/gcn-hsa.h index e5b93f7d9e54..9cf181f52a40 100644 --- a/gcc/config/gcn/gcn-hsa.h +++ b/gcc/config/gcn/gcn-hsa.h @@ -80,7 +80,7 @@ extern unsigned int gcn_local_sym_hash (const char *name); writes a new AMD GPU object file and the ABI version needs to be the same. - LLVM <= 17 defaults to 4 while LLVM >= 18 defaults to 5. GCC supports LLVM >= 13.0.1 and only LLVM >= 14 supports version 5. - Note that Fiji is only suppored with LLVM <= 17 as version 3 i no longer + Note that Fiji is only suppored with LLVM <= 17 as version 3 is no longer supported in LLVM >= 18. */ #define ABI_VERSION_SPEC "march=fiji:--amdhsa-code-object-version=3;" \ "!march=*|march=*:--amdhsa-code-object-version=4" From df483ebd24689a3bebfae2089637a00eca0e5a12 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Mon, 26 Feb 2024 13:17:13 +0000 Subject: [PATCH 065/551] libstdc++: Add nodiscard in <algorithm> Add the [[nodiscard]] attribute to several functions in <algorithm>. These all have no side effects and are only called for their return value (e.g. std::count) or produce a result that must not be discarded for correctness (e.g. std::remove). I was intending to add the attribute to a number of other functions like std::copy_if, std::unique_copy, std::set_union, and std::set_difference. I stopped when I noticed that MSVC doesn't use it on those functions, which I suspect is because they're often used with an insert iterator (e.g. std::back_insert_iterator). In that case it doesn't matter if you discard the result, because you have the container to tell you how many elements were copied to the output range. libstdc++-v3/ChangeLog: * include/bits/stl_algo.h (find_end, all_of, none_of, any_of) (find_if_not, is_partitioned, partition_point, remove) (remove_if, unique, lower_bound, upper_bound, equal_range) (binary_search, includes, is_sorted, is_sorted_until, minmax) (minmax_element, is_permutation, clamp, find_if, find_first_of) (adjacent_find, count, count_if, search, search_n, min_element) (max_element): Add nodiscard attribute. * include/bits/stl_algobase.h (min, max, lower_bound, equal) (lexicographical_compare, lexicographical_compare_three_way) (mismatch): Likewise. * include/bits/stl_heap.h (is_heap, is_heap_until): Likewise. * testsuite/25_algorithms/equal/debug/1_neg.cc: Add dg-warning. * testsuite/25_algorithms/equal/debug/2_neg.cc: Likewise. * testsuite/25_algorithms/equal/debug/3_neg.cc: Likewise. * testsuite/25_algorithms/find_first_of/concept_check_1.cc: Likewise. * testsuite/25_algorithms/is_permutation/2.cc: Likewise. * testsuite/25_algorithms/lexicographical_compare/71545.cc: Likewise. * testsuite/25_algorithms/lower_bound/33613.cc: Likewise. * testsuite/25_algorithms/lower_bound/debug/irreflexive.cc: Likewise. * testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc: Likewise. * testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc: Likewise. * testsuite/25_algorithms/minmax/3.cc: Likewise. * testsuite/25_algorithms/search/78346.cc: Likewise. * testsuite/25_algorithms/search_n/58358.cc: Likewise. * testsuite/25_algorithms/unique/1.cc: Likewise. * testsuite/25_algorithms/unique/11480.cc: Likewise. * testsuite/25_algorithms/upper_bound/33613.cc: Likewise. * testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc: Likewise. * testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc: Likewise. * testsuite/ext/concept_checks.cc: Likewise. * testsuite/ext/is_heap/47709.cc: Likewise. * testsuite/ext/is_sorted/cxx0x.cc: Likewise. --- libstdc++-v3/include/bits/stl_algo.h | 102 +++++++++--------- libstdc++-v3/include/bits/stl_algobase.h | 32 +++--- libstdc++-v3/include/bits/stl_heap.h | 8 +- .../25_algorithms/equal/debug/1_neg.cc | 1 + .../25_algorithms/equal/debug/2_neg.cc | 1 + .../25_algorithms/equal/debug/3_neg.cc | 1 + .../find_first_of/concept_check_1.cc | 1 + .../25_algorithms/is_permutation/2.cc | 1 + .../lexicographical_compare/71545.cc | 1 + .../25_algorithms/lower_bound/33613.cc | 1 + .../lower_bound/debug/irreflexive.cc | 1 + .../lower_bound/debug/partitioned_neg.cc | 1 + .../lower_bound/debug/partitioned_pred_neg.cc | 1 + .../testsuite/25_algorithms/minmax/3.cc | 1 + .../testsuite/25_algorithms/search/78346.cc | 1 + .../testsuite/25_algorithms/search_n/58358.cc | 1 + .../testsuite/25_algorithms/unique/1.cc | 1 + .../testsuite/25_algorithms/unique/11480.cc | 2 +- .../25_algorithms/upper_bound/33613.cc | 1 + .../upper_bound/debug/partitioned_neg.cc | 1 + .../upper_bound/debug/partitioned_pred_neg.cc | 1 + libstdc++-v3/testsuite/ext/concept_checks.cc | 4 + libstdc++-v3/testsuite/ext/is_heap/47709.cc | 1 + libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc | 1 + 24 files changed, 95 insertions(+), 72 deletions(-) diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h index 7a0cf6b67370..1a996aa61da3 100644 --- a/libstdc++-v3/include/bits/stl_algo.h +++ b/libstdc++-v3/include/bits/stl_algo.h @@ -320,7 +320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * [__first1,__last1-(__last2-__first2)) */ template<typename _ForwardIterator1, typename _ForwardIterator2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator1 find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) @@ -370,7 +370,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ template<typename _ForwardIterator1, typename _ForwardIterator2, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator1 find_end(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2, @@ -405,7 +405,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @p [__first,__last), and false otherwise. */ template<typename _InputIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool all_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { return __last == std::find_if_not(__first, __last, __pred); } @@ -423,7 +423,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @p [__first,__last), and false otherwise. */ template<typename _InputIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool none_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { return __last == _GLIBCXX_STD_A::find_if(__first, __last, __pred); } @@ -442,7 +442,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * otherwise. */ template<typename _InputIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool any_of(_InputIterator __first, _InputIterator __last, _Predicate __pred) { return !std::none_of(__first, __last, __pred); } @@ -458,7 +458,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * such that @p __pred(*i) is false, or @p __last if no such iterator exists. */ template<typename _InputIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _InputIterator find_if_not(_InputIterator __first, _InputIterator __last, _Predicate __pred) @@ -483,7 +483,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * do not. */ template<typename _InputIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_partitioned(_InputIterator __first, _InputIterator __last, _Predicate __pred) @@ -505,7 +505,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * and @p none_of(mid, __last, __pred) are both true. */ template<typename _ForwardIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR _ForwardIterator partition_point(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) @@ -783,7 +783,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * are still present, but their value is unspecified. */ template<typename _ForwardIterator, typename _Tp> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator remove(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) @@ -817,7 +817,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * are still present, but their value is unspecified. */ template<typename _ForwardIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator remove_if(_ForwardIterator __first, _ForwardIterator __last, _Predicate __pred) @@ -886,7 +886,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * are still present, but their value is unspecified. */ template<typename _ForwardIterator> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator unique(_ForwardIterator __first, _ForwardIterator __last) { @@ -917,7 +917,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * are still present, but their value is unspecified. */ template<typename _ForwardIterator, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator unique(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __binary_pred) @@ -1958,7 +1958,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * the function used for the initial sort. */ template<typename _ForwardIterator, typename _Tp, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) @@ -2014,7 +2014,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * @ingroup binary_search_algorithms */ template<typename _ForwardIterator, typename _Tp> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) @@ -2045,7 +2045,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * the function used for the initial sort. */ template<typename _ForwardIterator, typename _Tp, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) @@ -2118,7 +2118,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * but does not actually call those functions. */ template<typename _ForwardIterator, typename _Tp> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline pair<_ForwardIterator, _ForwardIterator> equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) @@ -2155,7 +2155,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * but does not actually call those functions. */ template<typename _ForwardIterator, typename _Tp, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline pair<_ForwardIterator, _ForwardIterator> equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) @@ -2189,7 +2189,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * that, use std::find or a container's specialized find member functions. */ template<typename _ForwardIterator, typename _Tp> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR bool binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) @@ -2223,7 +2223,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * the function used for the initial sort. */ template<typename _ForwardIterator, typename _Tp, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR bool binary_search(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val, _Compare __comp) @@ -2803,7 +2803,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * returned. */ template<typename _InputIterator1, typename _InputIterator2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) @@ -2849,7 +2849,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) */ template<typename _InputIterator1, typename _InputIterator2, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool includes(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, @@ -3186,7 +3186,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * @return True if the elements are sorted, false otherwise. */ template<typename _ForwardIterator> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_sorted(_ForwardIterator __first, _ForwardIterator __last) { return std::is_sorted_until(__first, __last) == __last; } @@ -3201,7 +3201,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * @return True if the elements are sorted, false otherwise. */ template<typename _ForwardIterator, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_sorted(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) @@ -3232,7 +3232,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * for which the range [__first, i) is sorted. */ template<typename _ForwardIterator> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator is_sorted_until(_ForwardIterator __first, _ForwardIterator __last) { @@ -3257,7 +3257,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * for which the range [__first, i) is sorted. */ template<typename _ForwardIterator, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator is_sorted_until(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) @@ -3283,7 +3283,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * __b) otherwise. */ template<typename _Tp> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline pair<const _Tp&, const _Tp&> minmax(const _Tp& __a, const _Tp& __b) { @@ -3304,7 +3304,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * __b) otherwise. */ template<typename _Tp, typename _Compare> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline pair<const _Tp&, const _Tp&> minmax(const _Tp& __a, const _Tp& __b, _Compare __comp) { @@ -3384,7 +3384,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * such that no other element in the range is larger. */ template<typename _ForwardIterator> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline pair<_ForwardIterator, _ForwardIterator> minmax_element(_ForwardIterator __first, _ForwardIterator __last) { @@ -3412,7 +3412,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * such that no other element in the range is larger. */ template<typename _ForwardIterator, typename _Compare> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline pair<_ForwardIterator, _ForwardIterator> minmax_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) @@ -3430,7 +3430,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) } template<typename _Tp> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline pair<_Tp, _Tp> minmax(initializer_list<_Tp> __l) { @@ -3442,7 +3442,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) } template<typename _Tp, typename _Compare> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline pair<_Tp, _Tp> minmax(initializer_list<_Tp> __l, _Compare __comp) { @@ -3469,7 +3469,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) */ template<typename _ForwardIterator1, typename _ForwardIterator2, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _BinaryPredicate __pred) @@ -3563,7 +3563,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * otherwise, returns false. */ template<typename _ForwardIterator1, typename _ForwardIterator2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) @@ -3592,7 +3592,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) */ template<typename _ForwardIterator1, typename _ForwardIterator2, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2, @@ -3619,7 +3619,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * @pre `_Tp` is LessThanComparable and `(__hi < __lo)` is false. */ template<typename _Tp> - constexpr const _Tp& + [[nodiscard]] constexpr const _Tp& clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi) { __glibcxx_assert(!(__hi < __lo)); @@ -3639,7 +3639,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2) * @pre `__comp(__hi, __lo)` is false. */ template<typename _Tp, typename _Compare> - constexpr const _Tp& + [[nodiscard]] constexpr const _Tp& clamp(const _Tp& __val, const _Tp& __lo, const _Tp& __hi, _Compare __comp) { __glibcxx_assert(!__comp(__hi, __lo)); @@ -3861,7 +3861,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * such that @p __pred(*i) is true, or @p __last if no such iterator exists. */ template<typename _InputIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _InputIterator find_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) @@ -3893,7 +3893,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * otherwise returns @p __last1. */ template<typename _InputIterator, typename _ForwardIterator> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR _InputIterator find_first_of(_InputIterator __first1, _InputIterator __last1, _ForwardIterator __first2, _ForwardIterator __last2) @@ -3935,7 +3935,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO */ template<typename _InputIterator, typename _ForwardIterator, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR _InputIterator find_first_of(_InputIterator __first1, _InputIterator __last1, _ForwardIterator __first2, _ForwardIterator __last2, @@ -3967,7 +3967,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * or @p __last if no such iterator exists. */ template<typename _ForwardIterator> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator adjacent_find(_ForwardIterator __first, _ForwardIterator __last) { @@ -3993,7 +3993,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * exists. */ template<typename _ForwardIterator, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator adjacent_find(_ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __binary_pred) @@ -4019,7 +4019,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * for which @c *i == @p __value */ template<typename _InputIterator, typename _Tp> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline typename iterator_traits<_InputIterator>::difference_type count(_InputIterator __first, _InputIterator __last, const _Tp& __value) { @@ -4043,7 +4043,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * for which @p __pred(*i) is true. */ template<typename _InputIterator, typename _Predicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline typename iterator_traits<_InputIterator>::difference_type count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) { @@ -4084,7 +4084,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @p [__first1,__last1-(__last2-__first2)) */ template<typename _ForwardIterator1, typename _ForwardIterator2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator1 search(_ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2, _ForwardIterator2 __last2) @@ -4118,7 +4118,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * equal to @p __val. */ template<typename _ForwardIterator, typename _Integer, typename _Tp> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator search_n(_ForwardIterator __first, _ForwardIterator __last, _Integer __count, const _Tp& __val) @@ -4153,7 +4153,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO */ template<typename _ForwardIterator, typename _Integer, typename _Tp, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator search_n(_ForwardIterator __first, _ForwardIterator __last, _Integer __count, const _Tp& __val, @@ -4178,7 +4178,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @return @p __searcher(__first,__last).first */ template<typename _ForwardIterator, typename _Searcher> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator search(_ForwardIterator __first, _ForwardIterator __last, const _Searcher& __searcher) @@ -5571,7 +5571,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @return Iterator referencing the first instance of the smallest value. */ template<typename _ForwardIterator> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR _ForwardIterator inline min_element(_ForwardIterator __first, _ForwardIterator __last) { @@ -5596,7 +5596,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * according to __comp. */ template<typename _ForwardIterator, typename _Compare> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline _ForwardIterator min_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) @@ -5635,7 +5635,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * @return Iterator referencing the first instance of the largest value. */ template<typename _ForwardIterator> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline _ForwardIterator max_element(_ForwardIterator __first, _ForwardIterator __last) { @@ -5660,7 +5660,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * according to __comp. */ template<typename _ForwardIterator, typename _Compare> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline _ForwardIterator max_element(_ForwardIterator __first, _ForwardIterator __last, _Compare __comp) diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 74ff42d4f393..d831e0e9883c 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -228,7 +228,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * preprocessor macro. */ template<typename _Tp> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline const _Tp& min(const _Tp& __a, const _Tp& __b) { @@ -252,7 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * preprocessor macro. */ template<typename _Tp> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline const _Tp& max(const _Tp& __a, const _Tp& __b) { @@ -276,7 +276,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * once, unlike a preprocessor macro. */ template<typename _Tp, typename _Compare> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline const _Tp& min(const _Tp& __a, const _Tp& __b, _Compare __comp) { @@ -298,7 +298,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * once, unlike a preprocessor macro. */ template<typename _Tp, typename _Compare> - _GLIBCXX14_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX14_CONSTEXPR inline const _Tp& max(const _Tp& __a, const _Tp& __b, _Compare __comp) { @@ -1522,7 +1522,7 @@ _GLIBCXX_END_NAMESPACE_CONTAINER * @ingroup binary_search_algorithms */ template<typename _ForwardIterator, typename _Tp> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _ForwardIterator lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __val) @@ -1571,7 +1571,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * ranges are equal. */ template<typename _II1, typename _II2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool equal(_II1 __first1, _II1 __last1, _II2 __first2) { @@ -1602,7 +1602,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * ranges are equal. */ template<typename _IIter1, typename _IIter2, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool equal(_IIter1 __first1, _IIter1 __last1, _IIter2 __first2, _BinaryPredicate __binary_pred) @@ -1689,7 +1689,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * ranges are equal. */ template<typename _II1, typename _II2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) { @@ -1722,7 +1722,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * ranges are equal. */ template<typename _IIter1, typename _IIter2, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool equal(_IIter1 __first1, _IIter1 __last1, _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred) @@ -1754,7 +1754,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * then this is an inline call to @c memcmp. */ template<typename _II1, typename _II2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool lexicographical_compare(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) @@ -1789,7 +1789,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * comp parameter instead of @c <. */ template<typename _II1, typename _II2, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool lexicographical_compare(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, _Compare __comp) @@ -1843,7 +1843,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * returns. */ template<typename _InputIter1, typename _InputIter2, typename _Comp> - constexpr auto + [[nodiscard]] constexpr auto lexicographical_compare_three_way(_InputIter1 __first1, _InputIter1 __last1, _InputIter2 __first2, @@ -1932,7 +1932,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * to by the iterators are not equal. */ template<typename _InputIterator1, typename _InputIterator2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2) @@ -1967,7 +1967,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO */ template<typename _InputIterator1, typename _InputIterator2, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __binary_pred) @@ -2014,7 +2014,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO * to by the iterators are not equal. */ template<typename _InputIterator1, typename _InputIterator2> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) @@ -2051,7 +2051,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO */ template<typename _InputIterator1, typename _InputIterator2, typename _BinaryPredicate> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline pair<_InputIterator1, _InputIterator2> mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2, diff --git a/libstdc++-v3/include/bits/stl_heap.h b/libstdc++-v3/include/bits/stl_heap.h index 98817cf558ac..9c1214a2b213 100644 --- a/libstdc++-v3/include/bits/stl_heap.h +++ b/libstdc++-v3/include/bits/stl_heap.h @@ -492,7 +492,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * the range [__first, i) is a heap. */ template<typename _RandomAccessIterator> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _RandomAccessIterator is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last) { @@ -521,7 +521,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * the range [__first, i) is a heap. Comparisons are made using __comp. */ template<typename _RandomAccessIterator, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline _RandomAccessIterator is_heap_until(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) @@ -546,7 +546,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @ingroup heap_algorithms */ template<typename _RandomAccessIterator> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last) { return std::is_heap_until(__first, __last) == __last; } @@ -560,7 +560,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @ingroup heap_algorithms */ template<typename _RandomAccessIterator, typename _Compare> - _GLIBCXX20_CONSTEXPR + _GLIBCXX_NODISCARD _GLIBCXX20_CONSTEXPR inline bool is_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp) diff --git a/libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc b/libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc index 9d18e7d48f1d..f9328599a558 100644 --- a/libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/equal/debug/1_neg.cc @@ -27,6 +27,7 @@ test01() std::vector<int> vect; vect.push_back(1); std::equal(vect.end(), vect.begin(), vect.begin()); + // { dg-warning "ignoring return value" "" { target c++17 } 29 } } int diff --git a/libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc b/libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc index a24d883a4770..2e9134a74ea6 100644 --- a/libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/equal/debug/2_neg.cc @@ -27,6 +27,7 @@ test01() std::vector<int> v1, v2; v1.push_back(1); std::equal(v1.begin(), v1.end(), v2.begin()); + // { dg-warning "ignoring return value" "" { target c++17 } 29 } } int diff --git a/libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc b/libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc index 9301e251c714..425e7aa78c66 100644 --- a/libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/equal/debug/3_neg.cc @@ -33,6 +33,7 @@ test01() l2.push_back(2); std::equal(++l1.begin(), l1.end(), ++l2.begin()); + // { dg-warning "ignoring return value" "" { target c++17 } 35 } } int diff --git a/libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc b/libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc index f68cc8086c46..a970cd4bd61c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/find_first_of/concept_check_1.cc @@ -37,6 +37,7 @@ class2 b; void test01() { std::find_first_of(&a, &a, &b, &b, comp); + // { dg-warning "ignoring return value" "" { target c++17 } 39 } } int main() diff --git a/libstdc++-v3/testsuite/25_algorithms/is_permutation/2.cc b/libstdc++-v3/testsuite/25_algorithms/is_permutation/2.cc index 90ad2ff5c099..ab0610c32955 100644 --- a/libstdc++-v3/testsuite/25_algorithms/is_permutation/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/is_permutation/2.cc @@ -103,6 +103,7 @@ void test02() int arr[] = { 11, 22, 33 }; using namespace std; is_permutation(begin(arr0), end(arr0), begin(arr), end(arr), thrower); + // { dg-warning "ignoring return value" "" { target c++17 } 105 } } int main() diff --git a/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc index fb9a0ca1913c..9f666caa68b7 100644 --- a/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc +++ b/libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/71545.cc @@ -33,4 +33,5 @@ int main() X x[1]; int i[1]; std::lexicographical_compare(x, x+1, i, i+1); + // { dg-warning "ignoring return value" "" { target c++17 } 35 } } diff --git a/libstdc++-v3/testsuite/25_algorithms/lower_bound/33613.cc b/libstdc++-v3/testsuite/25_algorithms/lower_bound/33613.cc index 618091a98a40..fa42b82b7213 100644 --- a/libstdc++-v3/testsuite/25_algorithms/lower_bound/33613.cc +++ b/libstdc++-v3/testsuite/25_algorithms/lower_bound/33613.cc @@ -33,4 +33,5 @@ bool ab(A, B); void test01(A* a, B b) { std::lower_bound(a, a, b, ab); + // { dg-warning "ignoring return value" "" { target c++17 } 35 } } diff --git a/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc b/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc index 691917ee1964..41a6028e4041 100644 --- a/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc +++ b/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/irreflexive.cc @@ -44,4 +44,5 @@ void test01() { A as[] = { 0, 1, 2, 3 }; std::lower_bound(as, as + 4, 1, A_int_comparer()); + // { dg-warning "ignoring return value" "" { target c++17 } 46 } } diff --git a/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc b/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc index b72787e24fe3..bc01d8147fad 100644 --- a/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc @@ -36,6 +36,7 @@ void test01() { A as[] = { 0, 1, 2, 0, 2, 3 }; std::lower_bound(as, as + 6, A(1)); + // { dg-warning "ignoring return value" "" { target c++17 } 38 } } int diff --git a/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc b/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc index 27210dece6f5..f860df939404 100644 --- a/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc @@ -24,6 +24,7 @@ void test01() { int as[] = { 0, 1, 0, 2, 3 }; std::lower_bound(as, as + 5, 1, std::less<int>()); + // { dg-warning "ignoring return value" "" { target c++17 } 26 } } diff --git a/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc b/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc index 159421c17a46..a6620b9fa0d8 100644 --- a/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc +++ b/libstdc++-v3/testsuite/25_algorithms/minmax/3.cc @@ -43,6 +43,7 @@ int compare_counter::count = 0; void test01() { std::minmax({1, 2, 3, 4, 5, 6, 7, 8}, compare_counter()); + // { dg-warning "ignoring return value" "" { target c++17 } 45 } // If N is the number of arguments in the minmax function call, // 25.3.7 specifies that at most 3N/2 comparisons are allowed. diff --git a/libstdc++-v3/testsuite/25_algorithms/search/78346.cc b/libstdc++-v3/testsuite/25_algorithms/search/78346.cc index c1bc5a4857d3..e6f3956b252d 100644 --- a/libstdc++-v3/testsuite/25_algorithms/search/78346.cc +++ b/libstdc++-v3/testsuite/25_algorithms/search/78346.cc @@ -109,6 +109,7 @@ test01() { value s[] = { 0, 1, 2, 3, 4, 5 }; std::search(s, s+6, stashing_iterator(s), stashing_iterator(s+4)); + // { dg-warning "ignoring return value" "" { target c++17 } 111 } } int diff --git a/libstdc++-v3/testsuite/25_algorithms/search_n/58358.cc b/libstdc++-v3/testsuite/25_algorithms/search_n/58358.cc index 49397b1267be..651fd86fc9c1 100644 --- a/libstdc++-v3/testsuite/25_algorithms/search_n/58358.cc +++ b/libstdc++-v3/testsuite/25_algorithms/search_n/58358.cc @@ -29,6 +29,7 @@ void test01() int count = 0; std::search_n(a.begin(), a.end(), 10, 1, [&count](int t, int u) { ++count; return t == u; }); + // { dg-warning "ignoring return value" "" { target c++17 } 30 } VERIFY( count <= 11 ); } diff --git a/libstdc++-v3/testsuite/25_algorithms/unique/1.cc b/libstdc++-v3/testsuite/25_algorithms/unique/1.cc index 6826e26fdc03..698c370e2299 100644 --- a/libstdc++-v3/testsuite/25_algorithms/unique/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/unique/1.cc @@ -27,5 +27,6 @@ int main() using namespace std; list<int> menge; unique (menge.begin(), menge.end()); + // { dg-warning "ignoring return value" "" { target c++17 } 29 } return 0; } diff --git a/libstdc++-v3/testsuite/25_algorithms/unique/11480.cc b/libstdc++-v3/testsuite/25_algorithms/unique/11480.cc index 9d1bd4efe32c..a008fc57f549 100644 --- a/libstdc++-v3/testsuite/25_algorithms/unique/11480.cc +++ b/libstdc++-v3/testsuite/25_algorithms/unique/11480.cc @@ -31,7 +31,7 @@ bool compare(int a, int b) // libstdc++/11480 void test01() { - std::unique(a, a+10, compare); + std::unique(a, a+10, compare); // { dg-warning "ignoring return value" "" { target c++17 } } VERIFY( compare_count == 9 ); } diff --git a/libstdc++-v3/testsuite/25_algorithms/upper_bound/33613.cc b/libstdc++-v3/testsuite/25_algorithms/upper_bound/33613.cc index 71ba2fd7ee5a..19453a38f514 100644 --- a/libstdc++-v3/testsuite/25_algorithms/upper_bound/33613.cc +++ b/libstdc++-v3/testsuite/25_algorithms/upper_bound/33613.cc @@ -33,4 +33,5 @@ bool ba(B, A); void test01(A* a, B b) { std::upper_bound(a, a, b, ba); + // { dg-warning "ignoring return value" "" { target c++17 } 35 } } diff --git a/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc b/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc index e6dfb8936de9..630357d6a456 100644 --- a/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc @@ -36,6 +36,7 @@ void test01() { A as[] = { 0, 2, 1, 3, 4, 5 }; std::upper_bound(as, as + 6, A(1)); + // { dg-warning "ignoring return value" "" { target c++17 } 38 } } int diff --git a/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc b/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc index ec5fea8c3242..5beab7d22d74 100644 --- a/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc @@ -24,6 +24,7 @@ void test01() { int as[] = { 0, 2, 1, 3, 4 }; std::upper_bound(as, as + 5, 1, std::less<int>()); + // { dg-warning "ignoring return value" "" { target c++17 } 26 } } diff --git a/libstdc++-v3/testsuite/ext/concept_checks.cc b/libstdc++-v3/testsuite/ext/concept_checks.cc index e6baad3e75e0..abb43a4fadea 100644 --- a/libstdc++-v3/testsuite/ext/concept_checks.cc +++ b/libstdc++-v3/testsuite/ext/concept_checks.cc @@ -73,6 +73,10 @@ test2054( ) upper_bound(Index.begin(), Index.end(), SearchTerm, aComparison); equal_range(Index.begin(), Index.end(), SearchTerm, aComparison); binary_search(Index.begin(), Index.end(), SearchTerm, aComparison); + // { dg-warning "ignoring return value" "" { target c++17 } 72 } + // { dg-warning "ignoring return value" "" { target c++17 } 73 } + // { dg-warning "ignoring return value" "" { target c++17 } 74 } + // { dg-warning "ignoring return value" "" { target c++17 } 75 } } int main() diff --git a/libstdc++-v3/testsuite/ext/is_heap/47709.cc b/libstdc++-v3/testsuite/ext/is_heap/47709.cc index d9bf2df13c77..50bbccaf7251 100644 --- a/libstdc++-v3/testsuite/ext/is_heap/47709.cc +++ b/libstdc++-v3/testsuite/ext/is_heap/47709.cc @@ -25,4 +25,5 @@ void foo() { std::vector<int> v; is_heap(v.begin(), v.end()); + // { dg-warning "ignoring return value" "" { target c++17 } 27 } } diff --git a/libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc b/libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc index dfdd72641a11..3592d68bfcf6 100644 --- a/libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc +++ b/libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc @@ -24,4 +24,5 @@ void foo() { std::vector<int> v; is_sorted(v.begin(), v.end()); + // { dg-warning "ignoring return value" "" { target c++17 } 26 } } From f89cfdb2f2e9b4fe517b1e00511c4d70a7014cbc Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Wed, 13 Mar 2024 21:19:54 +0000 Subject: [PATCH 066/551] libstdc++: Fix std::format("{}", negative_integer) [PR114325] The fast path for "{}" format strings has a bug for negative integers where the length passed to std::to_chars is too long. libstdc++-v3/ChangeLog: PR libstdc++/114325 * include/std/format (_Scanner::_M_scan): Pass correct length to __to_chars_10_impl. * testsuite/std/format/functions/format.cc: Check negative integers with empty format-spec. --- libstdc++-v3/include/std/format | 7 ++++--- libstdc++-v3/testsuite/std/format/functions/format.cc | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 1e839e88db48..613016d1a107 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -4091,6 +4091,7 @@ namespace __format __sink_out = __sink.out(); if constexpr (is_same_v<_CharT, char>) + // Fast path for "{}" format strings and simple format arg types. if (__fmt.size() == 2 && __fmt[0] == '{' && __fmt[1] == '}') { bool __done = false; @@ -4124,14 +4125,14 @@ namespace __format __uval = make_unsigned_t<_Tp>(~__arg) + 1u; else __uval = __arg; - const auto __n = __detail::__to_chars_len(__uval) + __neg; - if (auto __res = __sink_out._M_reserve(__n)) + const auto __n = __detail::__to_chars_len(__uval); + if (auto __res = __sink_out._M_reserve(__n + __neg)) { auto __ptr = __res.get(); *__ptr = '-'; __detail::__to_chars_10_impl(__ptr + (int)__neg, __n, __uval); - __res._M_bump(__n); + __res._M_bump(__n + __neg); __done = true; } } diff --git a/libstdc++-v3/testsuite/std/format/functions/format.cc b/libstdc++-v3/testsuite/std/format/functions/format.cc index a27fbe74631b..4499397aaf97 100644 --- a/libstdc++-v3/testsuite/std/format/functions/format.cc +++ b/libstdc++-v3/testsuite/std/format/functions/format.cc @@ -157,6 +157,11 @@ test_std_examples() // Restore std::locale::global(std::locale::classic()); + + string s5 = format("{}", -100); // PR libstdc++/114325 + VERIFY(s5 == "-100"); + string s6 = format("{:d} {:d}", -123, 999); + VERIFY(s6 == "-123 999"); } } From bc5a9dab55d13f888a3cdd150c8cf5c2244f35e0 Mon Sep 17 00:00:00 2001 From: Max Filippov <jcmvbkbc@gmail.com> Date: Thu, 14 Mar 2024 04:20:36 -0700 Subject: [PATCH 067/551] gcc: xtensa: reorder movsi_internal patterns for better code generation during LRA After switching to LRA xtensa backend generates the following code for saving/loading registers: movi a9, 0x190 add a9, a9, sp s32i.n a3, a9, 0 instead of the shorter and more efficient s32i a3, a9, 0x190 E.g. the following code can be used to reproduce it: int f1(int a, int b, int c, int d, int e, int f, int *p); int f2(int a, int b, int c, int d, int e, int f, int *p); int f3(int a, int b, int c, int d, int e, int f, int *p); int foo(int a, int b, int c, int d, int e, int f) { int g[100]; return f1(a, b, c, d, e, f, g) + f2(a, b, c, d, e, f, g) + f3(a, b, c, d, e, f, g); } This happens in the LRA pass because s32i.n and l32i.n are listed before the s32i and l32i in the movsi_internal pattern and alternative consideration loop stops early. gcc/ * config/xtensa/xtensa.md (movsi_internal): Move l32i and s32i patterns ahead of the l32i.n and s32i.n. --- gcc/config/xtensa/xtensa.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 1a2249b059a0..5cdf4dffe700 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -1270,13 +1270,15 @@ }) (define_insn "movsi_internal" - [(set (match_operand:SI 0 "nonimmed_operand" "=D,D,D,D,R,R,a,q,a,a,W,a,a,U,*a,*A") - (match_operand:SI 1 "move_operand" "M,D,d,R,D,d,r,r,I,Y,i,T,U,r,*A,*r"))] + [(set (match_operand:SI 0 "nonimmed_operand" "=D,D,D,a,U,D,R,R,a,q,a,a,W,a,*a,*A") + (match_operand:SI 1 "move_operand" "M,D,d,U,r,R,D,d,r,r,I,Y,i,T,*A,*r"))] "xtensa_valid_move (SImode, operands)" "@ movi.n\t%0, %x1 mov.n\t%0, %1 mov.n\t%0, %1 + %v1l32i\t%0, %1 + %v0s32i\t%1, %0 %v1l32i.n\t%0, %1 %v0s32i.n\t%1, %0 %v0s32i.n\t%1, %0 @@ -1286,13 +1288,11 @@ movi\t%0, %1 const16\t%0, %t1\;const16\t%0, %b1 %v1l32r\t%0, %1 - %v1l32i\t%0, %1 - %v0s32i\t%1, %0 rsr\t%0, ACCLO wsr\t%1, ACCLO" - [(set_attr "type" "move,move,move,load,store,store,move,move,move,move,move,load,load,store,rsr,wsr") + [(set_attr "type" "move,move,move,load,store,load,store,store,move,move,move,move,move,load,rsr,wsr") (set_attr "mode" "SI") - (set_attr "length" "2,2,2,2,2,2,3,3,3,3,6,3,3,3,3,3")]) + (set_attr "length" "2,2,2,3,3,2,2,2,3,3,3,3,6,3,3,3")]) (define_split [(set (match_operand:SHI 0 "register_operand") From 6cf4286ff9456685a29812a3560d00b956d62c39 Mon Sep 17 00:00:00 2001 From: David Faust <david.faust@oracle.com> Date: Thu, 14 Mar 2024 09:05:38 -0700 Subject: [PATCH 068/551] bpf: define INT8_TYPE as signed char Change the BPF backend to define INT8_TYPE with an explicit sign, rather than a plain char. This is in line with other targets and removes the risk of int8_t being affected by the signedness of the plain char type of the host system. The motivation for this change is that even if `char' is defined to be signed in BPF targets, some BPF programs use the (mal)practice of including internal libc headers, either directly or indirectly via kernel headers, which in turn may trigger compilation errors regarding redefinitions of types. gcc/ * config/bpf/bpf.h (INT8_TYPE): Change to signed char. --- gcc/config/bpf/bpf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/bpf/bpf.h b/gcc/config/bpf/bpf.h index f107a5a4c349..3cc5daa1b58d 100644 --- a/gcc/config/bpf/bpf.h +++ b/gcc/config/bpf/bpf.h @@ -99,7 +99,7 @@ #define SIG_ATOMIC_TYPE "char" -#define INT8_TYPE "char" +#define INT8_TYPE "signed char" #define INT16_TYPE "short int" #define INT32_TYPE "int" #define INT64_TYPE "long int" From 53fd0f5b1fd737a208c12909fa1188281cb370a3 Mon Sep 17 00:00:00 2001 From: John David Anglin <danglin@gcc.gnu.org> Date: Thu, 14 Mar 2024 18:32:56 +0000 Subject: [PATCH 069/551] hppa: Fix REG+D address support before reload When generating PA 1.x code or code for GNU ld, floating-point accesses only support 5-bit displacements but integer accesses support 14-bit displacements. I mistakenly assumed reload could fix an invalid 14-bit displacement in a floating-point access but this is not the case. 2024-03-14 John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog: PR target/114288 * config/pa/pa.cc (pa_legitimate_address_p): Don't allow 14-bit displacements before reload for modes that may use a floating-point load or store. --- gcc/config/pa/pa.cc | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/gcc/config/pa/pa.cc b/gcc/config/pa/pa.cc index 694123e37c9d..129289f8e624 100644 --- a/gcc/config/pa/pa.cc +++ b/gcc/config/pa/pa.cc @@ -10968,20 +10968,15 @@ pa_legitimate_address_p (machine_mode mode, rtx x, bool strict, code_helper) /* Long 14-bit displacements always okay for these cases. */ if (INT14_OK_STRICT + || reload_completed || mode == QImode || mode == HImode) return true; - /* A secondary reload may be needed to adjust the displacement - of floating-point accesses when STRICT is nonzero. */ - if (strict) - return false; - - /* We get significantly better code if we allow long displacements - before reload for all accesses. Instructions must satisfy their - constraints after reload, so we must have an integer access. - Return true for both cases. */ - return true; + /* We have to limit displacements to those supported by + both floating-point and integer accesses as reload can't + fix invalid displacements. See PR114288. */ + return false; } if (!TARGET_DISABLE_INDEXING From 6dbf0d252f69ab2924256e6778ba7dc55d5b6915 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 14 Mar 2024 19:09:34 +0000 Subject: [PATCH 070/551] PR modula2/114294 expression causes ICE This patch fixes an ICE when encountering an expression: 1 + HIGH (a[0]). The fix was to assign a type to the constant created by BuildConstHighFromSym in M2Quads.mod. gcc/m2/ChangeLog: PR modula2/114294 * gm2-compiler/M2Quads.mod (BuildConstHighFromSym): Call PutConst to assign the type Cardinal in the result constant. gcc/testsuite/ChangeLog: PR modula2/114294 * gm2/pim/pass/log: Removed. * gm2/pim/pass/highexp.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2Quads.mod | 1 + gcc/testsuite/gm2/pim/pass/highexp.mod | 9 + gcc/testsuite/gm2/pim/pass/log | 457 ------------------------- 3 files changed, 10 insertions(+), 457 deletions(-) create mode 100644 gcc/testsuite/gm2/pim/pass/highexp.mod delete mode 100644 gcc/testsuite/gm2/pim/pass/log diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 0263074d845c..1776a09b41f8 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -8400,6 +8400,7 @@ VAR BEGIN PopT (NoOfParam) ; ReturnVar := MakeTemporary (tok, ImmediateValue) ; + PutConst (ReturnVar, Cardinal) ; GenHigh (tok, ReturnVar, 1, OperandT (1)) ; PopN (NoOfParam+1) ; PushTtok (ReturnVar, tok) diff --git a/gcc/testsuite/gm2/pim/pass/highexp.mod b/gcc/testsuite/gm2/pim/pass/highexp.mod new file mode 100644 index 000000000000..f98be7df3315 --- /dev/null +++ b/gcc/testsuite/gm2/pim/pass/highexp.mod @@ -0,0 +1,9 @@ +MODULE highexp ; + + +VAR + a: ARRAY [0..9] OF CHAR ; + c: CARDINAL ; +BEGIN + c := 1 + HIGH (a) +END highexp. diff --git a/gcc/testsuite/gm2/pim/pass/log b/gcc/testsuite/gm2/pim/pass/log deleted file mode 100644 index 5bbdc50ab6ec..000000000000 --- a/gcc/testsuite/gm2/pim/pass/log +++ /dev/null @@ -1,457 +0,0 @@ -===================================================== -Stabs setchar3 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file setchar3.mod, line 30. - -Breakpoint 1, _M2_setchar3_init () at setchar3.mod:30 -30 ch := 'z' ; -31 s := smallchar{} ; -$1 = {} -type = SET ['A'..'Z'] -===================================================== -Dwarf2 setchar3 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file setchar3.mod, line 30. - -Breakpoint 1, _M2_setchar3_init () at setchar3.mod:30 -30 ch := 'z' ; -31 s := smallchar{} ; -$1 = {} -type = SET ['A'..'Z'] -===================================================== -Stabs subrange15 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file subrange15.mod, line 8. - -Breakpoint 1, _M2_subrange15_init () at subrange15.mod:8 -8 s := 20 ; -9 s := 21 ; -$1 = 20 -type = [20..40] -===================================================== -Dwarf2 subrange15 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file subrange15.mod, line 8. - -Breakpoint 1, _M2_subrange15_init () at subrange15.mod:8 -8 s := 20 ; -9 s := 21 ; -$1 = 20 -type = [20..40] -===================================================== -Stabs subrange16 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file subrange16.mod, line 8. - -Breakpoint 1, _M2_subrange16_init () at subrange16.mod:8 -8 s := 'A' ; -9 s := 'B' ; -$1 = 65 'A' -type = ['A'..'Z'] -===================================================== -Dwarf2 subrange16 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file subrange16.mod, line 8. - -Breakpoint 1, _M2_subrange16_init () at subrange16.mod:8 -8 s := 'A' ; -9 s := 'B' ; -$1 = 65 'A' -type = ['A'..'Z'] -===================================================== -Stabs subrange17 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file subrange17.mod, line 9. - -Breakpoint 1, _M2_subrange17_init () at subrange17.mod:9 -9 s := blue ; -10 s := red ; -$1 = blue -type = [blue..yellow] -===================================================== -Dwarf2 subrange17 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file subrange17.mod, line 9. - -Breakpoint 1, _M2_subrange17_init () at subrange17.mod:9 -9 s := blue ; -10 s := red ; -$1 = blue -type = [blue..yellow] -===================================================== -Stabs array4 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file array4.mod, line 6. - -Breakpoint 1, _M2_array4_init () at array4.mod:6 -6 s[1] := 1 ; -7 s[1] := 1 ; -$1 = {1, 0, 0, 0, 0} -type = ARRAY [1..5] OF <invalid type code 7> -===================================================== -Dwarf2 array4 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file array4.mod, line 6. - -Breakpoint 1, _M2_array4_init () at array4.mod:6 -6 s[1] := 1 ; -7 s[1] := 1 ; -$1 = {1, 0, 0, 0, 0} -type = ARRAY [1..5] OF CARDINAL -===================================================== -Stabs array5 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file array5.mod, line 8. - -Breakpoint 1, _M2_array5_init () at array5.mod:8 -8 NEW(s) ; -9 s^[1] := 1 ; -$1 = 0x536280 -type = POINTER TO ARRAY [1..5] OF <invalid type code 7> -===================================================== -Dwarf2 array5 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file array5.mod, line 8. - -Breakpoint 1, _M2_array5_init () at array5.mod:8 -8 NEW(s) ; -9 s^[1] := 1 ; -$1 = 0x536280 -type = POINTER TO ARRAY [1..5] OF CARDINAL -===================================================== -Stabs char -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file char.mod, line 6. - -Breakpoint 1, _M2_char_init () at char.mod:6 -6 s := 'a' ; -7 s := 'z' ; -$1 = 97 'a' -type = <invalid type code 18> -===================================================== -Dwarf2 char -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file char.mod, line 6. - -Breakpoint 1, _M2_char_init () at char.mod:6 -6 s := 'a' ; -7 s := 'z' ; -$1 = 97 'a' -type = CHAR -===================================================== -Stabs int -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file int.mod, line 6. - -Breakpoint 1, _M2_int_init () at int.mod:6 -6 s := 1 ; -7 s := 1 ; -$1 = 1 -type = <invalid type code 7> -===================================================== -Dwarf2 int -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file int.mod, line 6. - -Breakpoint 1, _M2_int_init () at int.mod:6 -6 s := 1 ; -7 s := 1 ; -$1 = 1 -type = INTEGER -===================================================== -Stabs ptrarray -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file ptrarray.mod, line 27. - -Breakpoint 1, _M2_ptrarray_init () at ptrarray.mod:27 -27 s := NIL ; -31 END ptrarray. -$1 = 0x0 -type = POINTER TO ARRAY [0..9] OF <invalid type code 18> -===================================================== -Dwarf2 ptrarray -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file ptrarray.mod, line 27. - -Breakpoint 1, _M2_ptrarray_init () at ptrarray.mod:27 -27 s := NIL ; -31 END ptrarray. -$1 = 0x0 -type = POINTER TO ARRAY [0..9] OF CHAR -===================================================== -Stabs variant9 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x4212d8: file variant9.mod, line 19. - -Breakpoint 1, _M2_variant9_init () at variant9.mod:19 -19 WITH s DO -20 Data := card; -$1 = {Data = card, <error type>} -type = RcdType = RECORD - Data : DataType; - : <unknown type>; -END -===================================================== -Dwarf2 variant9 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x4212d8: file variant9.mod, line 19. - -Breakpoint 1, _M2_variant9_init () at variant9.mod:19 -19 WITH s DO -20 Data := card; -$1 = {Data = card, {$$1 = {j = 0, k = 0}, $$2 = {st = 0 C}}} -type = RcdType = RECORD - Data : DataType; - : ; -END -===================================================== -Stabs setenum -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file setenum.mod, line 30. - -Breakpoint 1, _M2_setenum_init () at setenum.mod:30 -30 s := set{}; -31 s := set{}; -$1 = {} -type = set = SET OF enum -===================================================== -Dwarf2 setenum -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file setenum.mod, line 30. - -Breakpoint 1, _M2_setenum_init () at setenum.mod:30 -30 s := set{}; -31 s := set{}; -$1 = {} -type = set = SET OF enum -===================================================== -Stabs record7 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file record7.mod, line 32. - -Breakpoint 1, _M2_record7_init () at record7.mod:32 -32 s := NIL ; -36 END record7. -$1 = 0x0 -type = POINTER TO ARRAY [-2..2] OF foo = RECORD - f1 : CARDINAL; - f2 : CHAR; - f3 : ARRAY [-2..2] OF CARDINAL; -END -===================================================== -Dwarf2 record7 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file record7.mod, line 32. - -Breakpoint 1, _M2_record7_init () at record7.mod:32 -32 s := NIL ; -36 END record7. -$1 = 0x0 -type = POINTER TO ARRAY [-2..2] OF foo = RECORD - f1 : CARDINAL; - f2 : CHAR; - f3 : ARRAY [-2..2] OF CARDINAL; -END -===================================================== -Stabs setchar4 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file setchar4.mod, line 29. - -Breakpoint 1, _M2_setchar4_init () at setchar4.mod:29 -29 p := ADR(s) ; -30 p^[0] := -1 ; -$1 = {} -type = charset = SET OF [200C..177C] -===================================================== -Dwarf2 setchar4 -GNU gdb 6.3 -Copyright (C) 2004-2024 Free Software Foundation, Inc. -GDB is free software, covered by the GNU General Public License, and you are -welcome to change it and/or distribute copies of it under certain conditions. -Type "show copying" to see the conditions. -There is absolutely no warranty for GDB. Type "show warranty" for details. -This GDB was configured as "x86_64-unknown-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1". - -Breakpoint 1 at 0x421298: file setchar4.mod, line 29. - -Breakpoint 1, _M2_setchar4_init () at setchar4.mod:29 -29 p := ADR(s) ; -30 p^[0] := -1 ; -$1 = {} -type = charset = SET OF CHAR -gdb is hashed (/home/gaius/opt/bin/gdb) From efab88888c1b692ab080bcee99a6ef7ba6ee43ed Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Thu, 22 Feb 2024 10:06:27 +0000 Subject: [PATCH 071/551] tree-core: clarify clobber comments It came up on the mailing list that OBJECT_BEGIN/END are described as marking object lifetime, but mark the beginning of the constructor and end of the destructor, whereas the C++ notion of lifetime is between the end of the constructor and beginning of the destructor. So let's fix the comments. gcc/ChangeLog: * tree-core.h (enum clobber_kind): Clarify CLOBBER_OBJECT_* comments. --- gcc/tree-core.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gcc/tree-core.h b/gcc/tree-core.h index d529712306d9..a74fbdf75b4b 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -993,9 +993,11 @@ enum clobber_kind { CLOBBER_UNDEF, /* Beginning of storage duration, e.g. malloc. */ CLOBBER_STORAGE_BEGIN, - /* Beginning of object lifetime, e.g. C++ constructor. */ + /* Beginning of object data, e.g. start of C++ constructor. This differs + from C++ 'lifetime', which starts when initialization is complete; a + clobber there would discard the initialization. */ CLOBBER_OBJECT_BEGIN, - /* End of object lifetime, e.g. C++ destructor. */ + /* End of object data, e.g. end of C++ destructor. */ CLOBBER_OBJECT_END, /* End of storage duration, e.g. free. */ CLOBBER_STORAGE_END, From c1f6690b821f06616d442d732b24473d91eca66a Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Fri, 15 Mar 2024 00:17:52 +0000 Subject: [PATCH 072/551] Daily bump. --- gcc/ChangeLog | 77 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/c/ChangeLog | 9 +++++ gcc/cp/ChangeLog | 9 +++++ gcc/fortran/ChangeLog | 31 +++++++++++++++++ gcc/m2/ChangeLog | 48 +++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 74 +++++++++++++++++++++++++++++++++++++++ libcpp/ChangeLog | 16 +++++++++ libgomp/ChangeLog | 5 +++ libstdc++-v3/ChangeLog | 72 ++++++++++++++++++++++++++++++++++++++ 10 files changed, 342 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6ac554e3ee6..8e1668058773 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,80 @@ +2024-03-14 Jason Merrill <jason@redhat.com> + + * tree-core.h (enum clobber_kind): Clarify CLOBBER_OBJECT_* + comments. + +2024-03-14 John David Anglin <danglin@gcc.gnu.org> + + PR target/114288 + * config/pa/pa.cc (pa_legitimate_address_p): Don't allow + 14-bit displacements before reload for modes that may use + a floating-point load or store. + +2024-03-14 David Faust <david.faust@oracle.com> + + * config/bpf/bpf.h (INT8_TYPE): Change to signed char. + +2024-03-14 Max Filippov <jcmvbkbc@gmail.com> + + * config/xtensa/xtensa.md (movsi_internal): Move l32i and s32i + patterns ahead of the l32i.n and s32i.n. + +2024-03-14 Jakub Jelinek <jakub@redhat.com> + + * config/gcn/gcn-hsa.h (ABI_VERSION_SPEC): Fix comment typo. + +2024-03-14 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/113907 + * ipa-icf.cc (sem_item_optimizer::merge_classes): Reset + SSA_NAME_RANGE_INFO and SSA_NAME_PTR_INFO on successfully ICF merged + functions. + +2024-03-14 Xi Ruoyao <xry111@xry111.site> + + * config/loongarch/loongarch.md (any_ge): Remove. + (sge<u>_<X:mode><GPR:mode>): Remove. + +2024-03-14 Jakub Jelinek <jakub@redhat.com> + + PR target/114310 + * config/aarch64/aarch64.cc (aarch64_expand_compare_and_swap): For + TImode force newval into a register. + +2024-03-14 Chung-Lin Tang <cltang@baylibre.com> + + * tree.h (OMP_CLAUSE_MAP_READONLY): New macro. + (OMP_CLAUSE__CACHE__READONLY): New macro. + * tree-core.h (struct GTY(()) tree_base): Adjust comments for new + uses of readonly_flag bit in OMP_CLAUSE_MAP_READONLY and + OMP_CLAUSE__CACHE__READONLY. + * tree-pretty-print.cc (dump_omp_clause): Add support for printing + OMP_CLAUSE_MAP_READONLY and OMP_CLAUSE__CACHE__READONLY. + +2024-03-14 Andreas Krebbel <krebbel@linux.ibm.com> + + * config/s390/s390.cc (s390_encode_section_info): Adjust the check + for misaligned symbols. + * config/s390/s390.opt: Improve documentation. + +2024-03-14 Jakub Jelinek <jakub@redhat.com> + + * gimple-iterator.cc (edge_before_returns_twice_call): Copy all + flags and probability from ad_edge to e edge. If CDI_DOMINATORS + are computed, recompute immediate dominator of other_edge->src + and other_edge->dest. + (gsi_safe_insert_before, gsi_safe_insert_seq_before): Update *iter + for the returns_twice call case to the gsi_for_stmt (stmt) to deal + with update it for bb splitting. + +2024-03-14 liuhongt <hongtao.liu@intel.com> + + * config/i386/i386-features.cc + (general_scalar_chain::convert_op): Handle REG_EH_REGION note. + (convert_scalars_to_vector): Ditto. + * config/i386/i386-features.h (class scalar_chain): New + memeber control_flow_insns. + 2024-03-13 Jakub Jelinek <jakub@redhat.com> PR middle-end/114319 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index d58fa7c0da5a..d71dec2cf4d8 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240314 +20240315 diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index f8b56315ce5d..b8374c7d7740 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,12 @@ +2024-03-14 Chung-Lin Tang <cltang@baylibre.com> + + * c-parser.cc (c_parser_oacc_data_clause): Add parsing support for + 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier + found, update comments. + (c_parser_oacc_cache): Add parsing support for 'readonly' modifier, + set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update + comments. + 2024-03-08 Jakub Jelinek <jakub@redhat.com> PR debug/113918 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2965b95a51de..05fd84c60cea 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2024-03-14 Chung-Lin Tang <cltang@baylibre.com> + + * parser.cc (cp_parser_oacc_data_clause): Add parsing support for + 'readonly' modifier, set OMP_CLAUSE_MAP_READONLY if readonly modifier + found, update comments. + (cp_parser_oacc_cache): Add parsing support for 'readonly' modifier, + set OMP_CLAUSE__CACHE__READONLY if readonly modifier found, update + comments. + 2024-03-12 Nathaniel Shead <nathanieloshead@gmail.com> PR c++/98645 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 399a284b7e53..21a85a6266b6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,34 @@ +2024-03-14 Thomas Schwinge <thomas@codesourcery.com> + + * dump-parse-tree.cc (show_omp_clauses): Handle 'self_expr'. + * openmp.cc (gfc_free_omp_clauses): Likewise. + * trans-openmp.cc (gfc_split_omp_clauses): Don't handle 'self_expr'. + +2024-03-14 Chung-Lin Tang <cltang@baylibre.com> + + * dump-parse-tree.cc (show_omp_namelist): Print "readonly," for + OMP_LIST_MAP and OMP_LIST_CACHE if n->u.map.readonly is set. + Adjust 'n->u.map_op' to 'n->u.map.op'. + * gfortran.h (typedef struct gfc_omp_namelist): Adjust map_op as + 'ENUM_BITFIELD (gfc_omp_map_op) op:8', add 'bool readonly' field, + change to named struct field 'map'. + * openmp.cc (gfc_match_omp_map_clause): Adjust 'n->u.map_op' to + 'n->u.map.op'. + (gfc_match_omp_clause_reduction): Likewise. + (gfc_match_omp_clauses): Add readonly modifier parsing for OpenACC + copyin clause, set 'n->u.map.op' and 'n->u.map.readonly' for parsed + clause. Adjust 'n->u.map_op' to 'n->u.map.op'. + (gfc_match_oacc_declare): Adjust 'n->u.map_op' to 'n->u.map.op'. + (gfc_match_oacc_cache): Add readonly modifier parsing for OpenACC + cache directive. + (resolve_omp_clauses): Adjust 'n->u.map_op' to 'n->u.map.op'. + * trans-decl.cc (add_clause): Adjust 'n->u.map_op' to 'n->u.map.op'. + (finish_oacc_declare): Likewise. + * trans-openmp.cc (gfc_trans_omp_clauses): Set OMP_CLAUSE_MAP_READONLY, + OMP_CLAUSE__CACHE__READONLY to 1 when readonly is set. Adjust + 'n->u.map_op' to 'n->u.map.op'. + (gfc_add_clause_implicitly): Adjust 'n->u.map_op' to 'n->u.map.op'. + 2024-03-13 Harald Anlauf <anlauf@gmx.de> PR fortran/114001 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index d9da0b1be969..b051f0178994 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,51 @@ +2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114294 + * gm2-compiler/M2Quads.mod (BuildConstHighFromSym): + Call PutConst to assign the type Cardinal in the result + constant. + +2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114333 + * gm2-compiler/M2GenGCC.mod (CodeStatement): Remove op1, op2 and + op3 parameters to CodeIfLess, CodeIfLessEqu, CodeIfGreEqu, CodeIfGre, + CodeIfIn, CodeIfNotIn. + (CodeIfLess): Rewrite. + (PerformCodeIfLess): New procedure. + (CodeIfLess): Rewrite. + (PerformCodeIfLess): New procedure. + (CodeIfLessEqu): Rewrite. + (PerformCodeIfLessEqu): New procedure. + (CodeIfGreEqu): Rewrite. + (PerformCodeIfGreEqu): New procedure. + (CodeIfGre): Rewrite. + (PerformCodeIfGre): New procedure. + (CodeIfIn): Rewrite. + (PerformCodeIfIn): New procedure. + (CodeIfNotIn): Rewrite. + (PerformCodeIfNotIn): New procedure. + +2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114333 + * gm2-compiler/M2Check.mod (checkUnbounded): New procedure + function. + (checkArrayTypeEquivalence): Extend checking to cover unbounded + arrays, arrays and constants. + (IsTyped): Simplified the expression and corrected a test for + IsConstructor. + (checkTypeKindViolation): New procedure function. + (doCheckPair): Call checkTypeKindViolation. + * gm2-compiler/M2GenGCC.mod (CodeStatement): Remove parameters + to CodeEqu and CodeNotEqu. + (PerformCodeIfEqu): New procedure. + (CodeIfEqu): Rewrite. + (PerformCodeIfNotEqu): New procedure. + (CodeIfNotEqu): Rewrite. + * gm2-compiler/M2Quads.mod (BuildRelOpFromBoolean): Correct + comment. + 2024-03-11 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114295 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 17d0558957e3..b8e5161ea61b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,77 @@ +2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114294 + * gm2/pim/pass/log: Removed. + * gm2/pim/pass/highexp.mod: New test. + +2024-03-14 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/113907 + * gcc.dg/pr113907-1.c: New test. + +2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114333 + * gm2/pim/fail/badset5.mod: New test. + * gm2/pim/fail/badset6.mod: New test. + +2024-03-14 Thomas Schwinge <tschwinge@baylibre.com> + + * c-c++-common/goacc/readonly-1.c: Add basic OpenACC 'declare' + testing. + * gfortran.dg/goacc/readonly-1.f90: Likewise. + +2024-03-14 Jakub Jelinek <jakub@redhat.com> + + PR target/114310 + * gcc.dg/pr114310.c: New test. + +2024-03-14 Juergen Christ <jchrist@linux.ibm.com> + + * gcc.target/s390/htm-builtins-1.c: Fix. + * gcc.target/s390/htm-builtins-2.c: Fix. + +2024-03-14 Lewis Hyatt <lhyatt@gmail.com> + + PR preprocessor/110558 + * c-c++-common/cpp/has-include-2.c: New test. + * c-c++-common/cpp/has-include-2.h: New test. + +2024-03-14 Lewis Hyatt <lhyatt@gmail.com> + + * lib/gcc-defs.exp (dg-additional-options): Make $srcdir usable in a + dg-additional-options directive. + * c-c++-common/cpp/has-include-next-2-dir/has-include-next-2.h: New test. + * c-c++-common/cpp/has-include-next-2.c: New test. + +2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114333 + * gm2/cse/pass/testcse54.mod: New test. + * gm2/iso/run/pass/array9.mod: New test. + * gm2/iso/run/pass/strcons3.mod: New test. + * gm2/iso/run/pass/strcons4.mod: New test. + * gm2/pim/fail/badset1.mod: New test. + * gm2/pim/fail/badset2.mod: New test. + * gm2/pim/fail/badset3.mod: New test. + * gm2/pim/fail/badset4.mod: New test. + +2024-03-14 Chung-Lin Tang <cltang@baylibre.com> + + * c-c++-common/goacc/readonly-1.c: New test. + * gfortran.dg/goacc/readonly-1.f90: New test. + +2024-03-14 Andreas Krebbel <krebbel@linux.ibm.com> + + * gcc.target/s390/aligned-1.c: Add weak and void variables + incorporating the cases from unaligned-2.c. + * gcc.target/s390/unaligned-1.c: Likewise. + * gcc.target/s390/unaligned-2.c: Removed. + +2024-03-14 liuhongt <hongtao.liu@intel.com> + + * g++.target/i386/pr111822.C: New test. + 2024-03-13 Harald Anlauf <anlauf@gmx.de> PR fortran/114001 diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 3cbc8f9f9107..879a57378602 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,19 @@ +2024-03-14 Lewis Hyatt <lhyatt@gmail.com> + + PR preprocessor/110558 + * macro.cc (builtin_has_include): Set + pfile->state.directive_wants_padding prior to lexing the + file name, in case it comes from macro expansion. + +2024-03-14 Lewis Hyatt <lhyatt@gmail.com> + + PR preprocessor/80755 + * files.cc (search_path_head): Add SUPPRESS_DIAGNOSTIC argument + defaulting to false. + (_cpp_has_header): Silently return false if the search path has been + exhausted, rather than issuing a diagnostic and then hitting an + assert. + 2024-02-22 Jakub Jelinek <jakub@redhat.com> PR c/114007 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index c7ff790cda3b..09bc8bdc97da 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2024-03-14 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.oacc-fortran/acc-memcpy.f90: Fix 'char' + initialization, copy, check. + 2024-03-13 Tobias Burnus <tburnus@baylibre.com> PR fortran/114283 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c7a66aef078f..ac5e6e921fdf 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,75 @@ +2024-03-14 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114325 + * include/std/format (_Scanner::_M_scan): Pass correct length to + __to_chars_10_impl. + * testsuite/std/format/functions/format.cc: Check negative + integers with empty format-spec. + +2024-03-14 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/stl_algo.h (find_end, all_of, none_of, any_of) + (find_if_not, is_partitioned, partition_point, remove) + (remove_if, unique, lower_bound, upper_bound, equal_range) + (binary_search, includes, is_sorted, is_sorted_until, minmax) + (minmax_element, is_permutation, clamp, find_if, find_first_of) + (adjacent_find, count, count_if, search, search_n, min_element) + (max_element): Add nodiscard attribute. + * include/bits/stl_algobase.h (min, max, lower_bound, equal) + (lexicographical_compare, lexicographical_compare_three_way) + (mismatch): Likewise. + * include/bits/stl_heap.h (is_heap, is_heap_until): Likewise. + * testsuite/25_algorithms/equal/debug/1_neg.cc: Add dg-warning. + * testsuite/25_algorithms/equal/debug/2_neg.cc: Likewise. + * testsuite/25_algorithms/equal/debug/3_neg.cc: Likewise. + * testsuite/25_algorithms/find_first_of/concept_check_1.cc: + Likewise. + * testsuite/25_algorithms/is_permutation/2.cc: Likewise. + * testsuite/25_algorithms/lexicographical_compare/71545.cc: + Likewise. + * testsuite/25_algorithms/lower_bound/33613.cc: Likewise. + * testsuite/25_algorithms/lower_bound/debug/irreflexive.cc: + Likewise. + * testsuite/25_algorithms/lower_bound/debug/partitioned_neg.cc: + Likewise. + * testsuite/25_algorithms/lower_bound/debug/partitioned_pred_neg.cc: + Likewise. + * testsuite/25_algorithms/minmax/3.cc: Likewise. + * testsuite/25_algorithms/search/78346.cc: Likewise. + * testsuite/25_algorithms/search_n/58358.cc: Likewise. + * testsuite/25_algorithms/unique/1.cc: Likewise. + * testsuite/25_algorithms/unique/11480.cc: Likewise. + * testsuite/25_algorithms/upper_bound/33613.cc: Likewise. + * testsuite/25_algorithms/upper_bound/debug/partitioned_neg.cc: + Likewise. + * testsuite/25_algorithms/upper_bound/debug/partitioned_pred_neg.cc: + Likewise. + * testsuite/ext/concept_checks.cc: Likewise. + * testsuite/ext/is_heap/47709.cc: Likewise. + * testsuite/ext/is_sorted/cxx0x.cc: Likewise. + +2024-03-14 xndcn <xndchn@gmail.com> + + * include/bits/atomic_base.h (__atomic_float::__atomic_float(Fp)): + Clear padding. + * testsuite/29_atomics/atomic_float/compare_exchange_padding.cc: + New test. + +2024-03-14 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/66146 + * doc/xml/manual/status_cxx2011.xml: Remove mention of Linux in + note about std::call_once. + * doc/xml/manual/status_cxx2014.xml: Likewise. + * doc/xml/manual/status_cxx2017.xml: Likewise. + * doc/html/manual/status.html: Regenerate. + +2024-03-14 Jonathan Wakely <jwakely@redhat.com> + + * doc/xml/manual/status_cxx2023.xml: Update C++23 status table. + * doc/html/manual/status.html: Regenerate. + * include/bits/version.def: Fix typo in comment. + 2024-03-13 Jonathan Wakely <jwakely@redhat.com> * testsuite/libstdc++-prettyprinters/cxx11.cc: Move custom_cat From d7d05824ae68da24908d97a10b9ec59d08f75a90 Mon Sep 17 00:00:00 2001 From: Chenghui Pan <panchenghui@loongson.cn> Date: Thu, 14 Mar 2024 09:26:54 +0800 Subject: [PATCH 073/551] LoongArch: Remove masking process for operand 3 of xvpermi.q. The behavior of non-zero unused bits in xvpermi.q instruction's third operand is undefined on LoongArch, according to our discussion (https://github.com/llvm/llvm-project/pull/83540), we think that keeping original insn operand as unmodified state is better solution. This patch partially reverts 7b158e036a95b1ab40793dd53bed7dbd770ffdaf. gcc/ChangeLog: * config/loongarch/lasx.md (lasx_xvpermi_q_<LASX:mode>): Remove masking of operand 3. gcc/testsuite/ChangeLog: * gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c: Reposition operand 3's value into instruction's defined accept range. --- gcc/config/loongarch/lasx.md | 5 ----- .../gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/gcc/config/loongarch/lasx.md b/gcc/config/loongarch/lasx.md index ac84db7f0ce1..3f25c0c17563 100644 --- a/gcc/config/loongarch/lasx.md +++ b/gcc/config/loongarch/lasx.md @@ -640,8 +640,6 @@ (set_attr "mode" "<MODE>")]) ;; xvpermi.q -;; Unused bits in operands[3] need be set to 0 to avoid -;; causing undefined behavior on LA464. (define_insn "lasx_xvpermi_q_<LASX:mode>" [(set (match_operand:LASX 0 "register_operand" "=f") (unspec:LASX @@ -651,9 +649,6 @@ UNSPEC_LASX_XVPERMI_Q))] "ISA_HAS_LASX" { - int mask = 0x33; - mask &= INTVAL (operands[3]); - operands[3] = GEN_INT (mask); return "xvpermi.q\t%u0,%u2,%3"; } [(set_attr "type" "simd_splat") diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c index dbc29d2fb22c..f89dfc311207 100644 --- a/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c +++ b/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c @@ -27,7 +27,7 @@ main () *((unsigned long*)& __m256i_result[2]) = 0x7fff7fff7fff0000; *((unsigned long*)& __m256i_result[1]) = 0x7fe37fe3001d001d; *((unsigned long*)& __m256i_result[0]) = 0x7fff7fff7fff0000; - __m256i_out = __lasx_xvpermi_q (__m256i_op0, __m256i_op1, 0x2a); + __m256i_out = __lasx_xvpermi_q (__m256i_op0, __m256i_op1, 0x22); ASSERTEQ_64 (__LINE__, __m256i_result, __m256i_out); *((unsigned long*)& __m256i_op0[3]) = 0x0000000000000000; @@ -42,7 +42,7 @@ main () *((unsigned long*)& __m256i_result[2]) = 0x000000000019001c; *((unsigned long*)& __m256i_result[1]) = 0x0000000000000000; *((unsigned long*)& __m256i_result[0]) = 0x00000000000001fe; - __m256i_out = __lasx_xvpermi_q (__m256i_op0, __m256i_op1, 0xb9); + __m256i_out = __lasx_xvpermi_q (__m256i_op0, __m256i_op1, 0x31); ASSERTEQ_64 (__LINE__, __m256i_result, __m256i_out); *((unsigned long*)& __m256i_op0[3]) = 0x00ff00ff00ff00ff; @@ -57,7 +57,7 @@ main () *((unsigned long*)& __m256i_result[2]) = 0xffff0000ffff0000; *((unsigned long*)& __m256i_result[1]) = 0x00ff00ff00ff00ff; *((unsigned long*)& __m256i_result[0]) = 0x00ff00ff00ff00ff; - __m256i_out = __lasx_xvpermi_q (__m256i_op0, __m256i_op1, 0xca); + __m256i_out = __lasx_xvpermi_q (__m256i_op0, __m256i_op1, 0x02); ASSERTEQ_64 (__LINE__, __m256i_result, __m256i_out); return 0; From 81f3d963e05de8b17d4ccc7667ead9ed156193a4 Mon Sep 17 00:00:00 2001 From: Tejas Belagod <tejas.belagod@arm.com> Date: Wed, 6 Mar 2024 15:30:26 +0530 Subject: [PATCH 074/551] vect: Call vect_convert_output with the right vecitype [PR114108] This patch fixes a bug where vect_recog_abd_pattern called vect_convert_output with the incorrect vecitype for the corresponding pattern_stmt. vect_convert_output expects vecitype to be the vector form of the scalar type of the LHS of pattern_stmt, but we were passing in the vector form of the LHS of the new impending conversion statement. This caused a skew in ABD's pattern_stmt having the vectype of the following gimple pattern_stmt. 2024-03-06 Tejas Belagod <tejas.belagod@arm.com> gcc/ChangeLog: PR middle-end/114108 * tree-vect-patterns.cc (vect_recog_abd_pattern): Call vect_convert_output with the correct vecitype. gcc/testsuite/ChangeLog: * gcc.dg/vect/pr114108.c: New test. --- gcc/testsuite/gcc.dg/vect/pr114108.c | 19 +++++++++++++++++++ gcc/tree-vect-patterns.cc | 5 ++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr114108.c diff --git a/gcc/testsuite/gcc.dg/vect/pr114108.c b/gcc/testsuite/gcc.dg/vect/pr114108.c new file mode 100644 index 000000000000..b3075d41398e --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr114108.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ + +#include "tree-vect.h" + +typedef signed char schar; + +__attribute__((noipa, noinline, optimize("O3"))) +void foo(const schar *a, const schar *b, schar *c, int n) +{ + for (int i = 0; i < n; i++) + { + unsigned u = __builtin_abs (a[i] - b[i]); + c[i] = u <= 7U ? u : 7U; + } +} + + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target aarch64*-*-* } } } */ +/* { dg-final { scan-tree-dump "vect_recog_abd_pattern: detected" "vect" { target aarch64*-*-* } } } */ diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index d562f57920f6..4f491c6b8336 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -1576,9 +1576,8 @@ vect_recog_abd_pattern (vec_info *vinfo, && !TYPE_UNSIGNED (abd_out_type)) { tree unsign = unsigned_type_for (abd_out_type); - tree unsign_vectype = get_vectype_for_scalar_type (vinfo, unsign); - stmt = vect_convert_output (vinfo, stmt_vinfo, unsign, stmt, - unsign_vectype); + stmt = vect_convert_output (vinfo, stmt_vinfo, unsign, stmt, vectype_out); + vectype_out = get_vectype_for_scalar_type (vinfo, unsign); } return vect_convert_output (vinfo, stmt_vinfo, out_type, stmt, vectype_out); From acc38ff59976e972ba4b1e39f7653813a05de588 Mon Sep 17 00:00:00 2001 From: YunQiang Su <syq@gcc.gnu.org> Date: Fri, 15 Mar 2024 14:33:58 +0800 Subject: [PATCH 075/551] MIPS: Add -m(no-)strict-align option We support options -m(no-)unaligned-access 2 years ago, while currently most of other ports prefer -m(no-)strict-align. Let's support -m(no-)strict-align, and keep -m(no-)unaligned-access as alias. gcc * config/mips/mips.opt: Support -mstrict-align, and use TARGET_STRICT_ALIGN as the flag; keep -m(no-)unaligned-access as alias. * config/mips/mips.h: Use TARGET_STRICT_ALIGN. * config/mips/mips.opt.urls: Regenerate. * doc/invoke.texi: Document -m(no-)strict-algin for MIPSr6. --- gcc/config/mips/mips.h | 2 +- gcc/config/mips/mips.opt | 12 ++++++++++-- gcc/config/mips/mips.opt.urls | 6 ++++++ gcc/doc/invoke.texi | 18 ++++++++++++------ 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 7145d23c6508..6444a68dfd58 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -251,7 +251,7 @@ struct mips_cpu_info { || ISA_HAS_MSA)) /* ISA load/store instructions can handle unaligned address */ -#define ISA_HAS_UNALIGNED_ACCESS (TARGET_UNALIGNED_ACCESS \ +#define ISA_HAS_UNALIGNED_ACCESS (!TARGET_STRICT_ALIGN \ && (mips_isa_rev >= 6)) /* The ISA compression flags that are currently in effect. */ diff --git a/gcc/config/mips/mips.opt b/gcc/config/mips/mips.opt index ce36942aabe6..c1abb36212f9 100644 --- a/gcc/config/mips/mips.opt +++ b/gcc/config/mips/mips.opt @@ -429,9 +429,17 @@ mtune= Target RejectNegative Joined Var(mips_tune_option) ToLower Enum(mips_arch_opt_value) -mtune=PROCESSOR Optimize the output for PROCESSOR. +mstrict-align +Target Var(TARGET_STRICT_ALIGN) Init(0) +Don't generate code with unaligned load store, only valid for MIPS R6. + munaligned-access -Target Var(TARGET_UNALIGNED_ACCESS) Init(1) -Generate code with unaligned load store, valid for MIPS R6. +Target RejectNegative Alias(mstrict-align) NegativeAlias +Generate code with unaligned load store for R6 (alias of -mno-strict-align). + +mno-unaligned-access +Target RejectNegative Alias(mstrict-align) +Don't generate code with unaligned load store for R6 (alias of -mstrict-align). muninit-const-in-rodata Target Var(TARGET_UNINIT_CONST_IN_RODATA) diff --git a/gcc/config/mips/mips.opt.urls b/gcc/config/mips/mips.opt.urls index 96aba041026a..9d166646d65c 100644 --- a/gcc/config/mips/mips.opt.urls +++ b/gcc/config/mips/mips.opt.urls @@ -233,9 +233,15 @@ UrlSuffix(gcc/MIPS-Options.html#index-mmadd4) mtune= UrlSuffix(gcc/MIPS-Options.html#index-mtune-10) +mstrict-align +UrlSuffix(gcc/MIPS-Options.html#index-mstrict-align-3) + munaligned-access UrlSuffix(gcc/MIPS-Options.html#index-munaligned-access-1) +mno-unaligned-access +UrlSuffix(gcc/MIPS-Options.html#index-mno-unaligned-access-1) + muninit-const-in-rodata UrlSuffix(gcc/MIPS-Options.html#index-muninit-const-in-rodata) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 85c938d4a148..864768fd2f42 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1143,7 +1143,8 @@ Objective-C and Objective-C++ Dialects}. -mcheck-zero-division -mno-check-zero-division -mdivide-traps -mdivide-breaks -mload-store-pairs -mno-load-store-pairs --munaligned-access -mno-unaligned-access +-mstrict-align -mno-strict-align +-mno-unaligned-access -munaligned-access -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls -mmad -mno-mad -mimadd -mno-imadd -mfused-madd -mno-fused-madd -nocpp -mfix-24k -mno-fix-24k @@ -28561,14 +28562,19 @@ instructions to enable load/store bonding. This option is enabled by default but only takes effect when the selected architecture is known to support bonding. +@opindex mstrict-align +@opindex mno-strict-align @opindex munaligned-access @opindex mno-unaligned-access -@item -munaligned-access +@item -mstrict-align +@itemx -mno-strict-align +@itemx -munaligned-access @itemx -mno-unaligned-access -Enable (disable) direct unaligned access for MIPS Release 6. -MIPSr6 requires load/store unaligned-access support, -by hardware or trap&emulate. -So @option{-mno-unaligned-access} may be needed by kernel. +Disable (enable) direct unaligned access for MIPS Release 6. +MIPSr6 requires load/store unaligned-access support, by hardware or +trap&emulate. So @option{-mstrict-align} may be needed by kernel. The +options @option{-munaligned-access} and @option{-mno-unaligned-access} +are obsoleted, and only for backward-compatible. @opindex mmemcpy @opindex mno-memcpy From 3fd46d859cda1074125449a4cc680ce59fcebc38 Mon Sep 17 00:00:00 2001 From: Paul Thomas <pault@gcc.gnu.org> Date: Fri, 15 Mar 2024 06:52:59 +0000 Subject: [PATCH 076/551] Fortran: Fix class/derived/complex function associate selectors [PR87477] 2024-03-15 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/87477 PR fortran/89645 PR fortran/99065 PR fortran/114141 PR fortran/114280 * class.cc (gfc_change_class): New function needed for associate names, when rank changes or a derived type is produced by resolution * dump-parse-tree.cc (show_code_node): Make output for SELECT TYPE more comprehensible. * expr.cc (find_inquiry_ref): Do not simplify expressions of an inferred type. * gfortran.h : Add 'gfc_association_list' to structure 'gfc_association_list'. Add prototypes for 'gfc_find_derived_types', 'gfc_fixup_inferred_type_refs' and 'gfc_change_class'. Add macro IS_INFERRED_TYPE. * match.cc (copy_ts_from_selector_to_associate): Add bolean arg 'select_type' with default false. If this is a select type name and the selector is a inferred type, build the class type and apply it to the associate name. (build_associate_name): Pass true to 'select_type' in call to previous. * parse.cc (parse_associate): If the selector is inferred type the associate name is too. Make sure that function selector class and rank, if known, are passed to the associate name. If a function result exists, pass its typespec to the associate name. * primary.cc (resolvable_fcns): New function to check that all the function references are resolvable. (gfc_match_varspec): If a scalar derived type select type temporary has an array reference, match the array reference, treating this in the same way as an equivalence member. Do not set 'inquiry' if applied to an unknown type the inquiry name is ambiguous with the component of an accessible derived type. Check that resolution of the target expression is OK by testing if the symbol is declared or is an operator expression, then using 'resolvable_fcns' recursively. If all is well, resolve the expression. If this is an inferred type with a component reference, call 'gfc_find_derived_types' to find a suitable derived type. If there is an inquiry ref and the symbol either is of unknown type or is inferred to be a derived type, set the primary and symbol TKR appropriately. * resolve.cc (resolve_variable): Call new function below. (gfc_fixup_inferred_type_refs): New function to ensure that the expression references for a inferred type are consistent with the now fixed up selector. (resolve_assoc_var): Ensure that derived type or class function selectors transmit the correct arrayspec to the associate name. (resolve_select_type): If the selector is an associate name of inferred type and has no component references, the associate name should have its typespec. Simplify the conversion of a class array to class scalar by calling 'gfc_change_class'. Make sure that a class, inferred type selector with an array ref transfers the typespec from the symbol to the expression. * symbol.cc (gfc_set_default_type): If an associate name with unknown type has a selector expression, try resolving the expr. (find_derived_types, gfc_find_derived_types): New functions that search for a derived type with a given name. * trans-expr.cc (gfc_conv_variable): Some inferred type exprs escape resolution so call 'gfc_fixup_inferred_type_refs'. * trans-stmt.cc (trans_associate_var): Tidy up expression for 'class_target'. Finalize and free class function results. Correctly handle selectors that are class functions and class array references, passed as derived types. gcc/testsuite/ PR fortran/87477 PR fortran/89645 PR fortran/99065 * gfortran.dg/associate_64.f90 : New test * gfortran.dg/associate_66.f90 : New test * gfortran.dg/associate_67.f90 : New test PR fortran/114141 * gfortran.dg/associate_65.f90 : New test PR fortran/114280 * gfortran.dg/associate_68.f90 : New test --- gcc/fortran/class.cc | 50 +++ gcc/fortran/dump-parse-tree.cc | 17 +- gcc/fortran/expr.cc | 5 + gcc/fortran/gfortran.h | 15 + gcc/fortran/match.cc | 27 +- gcc/fortran/parse.cc | 52 +++- gcc/fortran/primary.cc | 170 ++++++++-- gcc/fortran/resolve.cc | 290 +++++++++++++++-- gcc/fortran/symbol.cc | 76 ++++- gcc/fortran/trans-expr.cc | 4 + gcc/fortran/trans-stmt.cc | 28 +- gcc/testsuite/gfortran.dg/associate_64.f90 | 345 +++++++++++++++++++++ gcc/testsuite/gfortran.dg/associate_65.f90 | 30 ++ gcc/testsuite/gfortran.dg/associate_66.f90 | 45 +++ gcc/testsuite/gfortran.dg/associate_67.f90 | 41 +++ gcc/testsuite/gfortran.dg/associate_68.f90 | 79 +++++ 16 files changed, 1197 insertions(+), 77 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/associate_64.f90 create mode 100644 gcc/testsuite/gfortran.dg/associate_65.f90 create mode 100644 gcc/testsuite/gfortran.dg/associate_66.f90 create mode 100644 gcc/testsuite/gfortran.dg/associate_67.f90 create mode 100644 gcc/testsuite/gfortran.dg/associate_68.f90 diff --git a/gcc/fortran/class.cc b/gcc/fortran/class.cc index ce31a93abcd0..abe89630be3c 100644 --- a/gcc/fortran/class.cc +++ b/gcc/fortran/class.cc @@ -815,6 +815,56 @@ gfc_build_class_symbol (gfc_typespec *ts, symbol_attribute *attr, } +/* Change class, using gfc_build_class_symbol. This is needed for associate + names, when rank changes or a derived type is produced by resolution. */ + +void +gfc_change_class (gfc_typespec *ts, symbol_attribute *sym_attr, + gfc_array_spec *sym_as, int rank, int corank) +{ + symbol_attribute attr; + gfc_component *c; + gfc_array_spec *as = NULL; + gfc_symbol *der = ts->u.derived; + + ts->type = BT_CLASS; + attr = *sym_attr; + attr.class_ok = 0; + attr.associate_var = 1; + attr.class_pointer = 1; + attr.allocatable = 0; + attr.pointer = 1; + attr.dimension = rank ? 1 : 0; + if (rank) + { + if (sym_as) + as = gfc_copy_array_spec (sym_as); + else + { + as = gfc_get_array_spec (); + as->rank = rank; + as->type = AS_DEFERRED; + as->corank = corank; + } + } + if (as && as->corank != 0) + attr.codimension = 1; + + if (!gfc_build_class_symbol (ts, &attr, &as)) + gcc_unreachable (); + + gfc_set_sym_referenced (ts->u.derived); + + /* Make sure the _vptr is set. */ + c = gfc_find_component (ts->u.derived, "_vptr", true, true, NULL); + if (c->ts.u.derived == NULL) + c->ts.u.derived = gfc_find_derived_vtab (der); + /* _vptr now has the _vtab in it, change it to the _vtype. */ + if (c->ts.u.derived->attr.vtab) + c->ts.u.derived = c->ts.u.derived->ts.u.derived; +} + + /* Add a procedure pointer component to the vtype to represent a specific type-bound procedure. */ diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc index 7bc78663768c..87a65036a3dd 100644 --- a/gcc/fortran/dump-parse-tree.cc +++ b/gcc/fortran/dump-parse-tree.cc @@ -2701,11 +2701,20 @@ show_code_node (int level, gfc_code *c) case EXEC_BLOCK: { - const char* blocktype; + const char *blocktype, *sname = NULL; gfc_namespace *saved_ns; gfc_association_list *alist; - if (c->ext.block.assoc) + if (c->ext.block.ns && c->ext.block.ns->code + && c->ext.block.ns->code->op == EXEC_SELECT_TYPE) + { + gfc_expr *fcn = c->ext.block.ns->code->expr1; + blocktype = "SELECT TYPE"; + /* expr1 is _loc(assoc_name->vptr) */ + if (fcn && fcn->expr_type == EXPR_FUNCTION) + sname = fcn->value.function.actual->expr->symtree->n.sym->name; + } + else if (c->ext.block.assoc) blocktype = "ASSOCIATE"; else blocktype = "BLOCK"; @@ -2713,7 +2722,7 @@ show_code_node (int level, gfc_code *c) fprintf (dumpfile, "%s ", blocktype); for (alist = c->ext.block.assoc; alist; alist = alist->next) { - fprintf (dumpfile, " %s = ", alist->name); + fprintf (dumpfile, " %s = ", sname ? sname : alist->name); show_expr (alist->target); } @@ -2744,7 +2753,7 @@ show_code_node (int level, gfc_code *c) if (c->op == EXEC_SELECT_RANK) fputs ("SELECT RANK ", dumpfile); else if (c->op == EXEC_SELECT_TYPE) - fputs ("SELECT TYPE ", dumpfile); + fputs ("SELECT CASE ", dumpfile); // Preceded by SELECT TYPE construct else fputs ("SELECT CASE ", dumpfile); show_expr (c->expr1); diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index 82a642b01f7a..e4b1e8307e34 100644 --- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -1844,6 +1844,11 @@ find_inquiry_ref (gfc_expr *p, gfc_expr **newp) gfc_resolve_expr (tmp); + /* Leave these to the backend since the type and kind is not confirmed until + resolution. */ + if (IS_INFERRED_TYPE (tmp)) + goto cleanup; + /* In principle there can be more than one inquiry reference. */ for (; inquiry; inquiry = inquiry->next) { diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 32b792f85fb9..c7039730fad9 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -2967,6 +2967,11 @@ typedef struct gfc_association_list locus where; gfc_expr *target; + + /* Used for inferring the derived type of an associate name, whose selector + is a sibling derived type function that has not yet been parsed. */ + gfc_symbol *derived_types; + unsigned inferred_type:1; } gfc_association_list; #define gfc_get_association_list() XCNEW (gfc_association_list) @@ -3533,6 +3538,8 @@ bool gfc_add_component (gfc_symbol *, const char *, gfc_component **); gfc_symbol *gfc_use_derived (gfc_symbol *); gfc_component *gfc_find_component (gfc_symbol *, const char *, bool, bool, gfc_ref **); +int gfc_find_derived_types (gfc_symbol *, gfc_namespace *, const char *, + bool stash = false); gfc_st_label *gfc_get_st_label (int); void gfc_free_st_label (gfc_st_label *); @@ -3799,6 +3806,7 @@ void gfc_free_association_list (gfc_association_list *); void gfc_expression_rank (gfc_expr *); bool gfc_op_rank_conformable (gfc_expr *, gfc_expr *); bool gfc_resolve_ref (gfc_expr *); +void gfc_fixup_inferred_type_refs (gfc_expr *); bool gfc_resolve_expr (gfc_expr *); void gfc_resolve (gfc_namespace *); void gfc_resolve_code (gfc_code *, gfc_namespace *); @@ -3925,6 +3933,7 @@ const char *gfc_dt_upper_string (const char *); symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *); symbol_attribute gfc_expr_attr (gfc_expr *); symbol_attribute gfc_caf_attr (gfc_expr *, bool i = false, bool *r = NULL); +bool is_inquiry_ref (const char *, gfc_ref **); match gfc_match_rvalue (gfc_expr **); match gfc_match_varspec (gfc_expr*, int, bool, bool); bool gfc_check_digit (char, int); @@ -3992,6 +4001,8 @@ unsigned int gfc_hash_value (gfc_symbol *); gfc_expr *gfc_get_len_component (gfc_expr *e, int); bool gfc_build_class_symbol (gfc_typespec *, symbol_attribute *, gfc_array_spec **); +void gfc_change_class (gfc_typespec *, symbol_attribute *, + gfc_array_spec *, int, int); gfc_symbol *gfc_find_derived_vtab (gfc_symbol *); gfc_symbol *gfc_find_vtab (gfc_typespec *); gfc_symtree* gfc_find_typebound_proc (gfc_symbol*, bool*, @@ -4022,6 +4033,10 @@ bool gfc_may_be_finalized (gfc_typespec); #define IS_PROC_POINTER(sym) \ (sym->ts.type == BT_CLASS && sym->attr.class_ok && CLASS_DATA (sym) \ ? CLASS_DATA (sym)->attr.proc_pointer : sym->attr.proc_pointer) +#define IS_INFERRED_TYPE(expr) \ + (expr && expr->expr_type == EXPR_VARIABLE \ + && expr->symtree->n.sym->assoc \ + && expr->symtree->n.sym->assoc->inferred_type) /* frontend-passes.cc */ diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc index eee569dac910..4539c9bb1344 100644 --- a/gcc/fortran/match.cc +++ b/gcc/fortran/match.cc @@ -6322,7 +6322,8 @@ gfc_match_select (void) /* Transfer the selector typespec to the associate name. */ static void -copy_ts_from_selector_to_associate (gfc_expr *associate, gfc_expr *selector) +copy_ts_from_selector_to_associate (gfc_expr *associate, gfc_expr *selector, + bool select_type = false) { gfc_ref *ref; gfc_symbol *assoc_sym; @@ -6405,12 +6406,30 @@ copy_ts_from_selector_to_associate (gfc_expr *associate, gfc_expr *selector) assoc_sym->as = NULL; build_class_sym: - if (selector->ts.type == BT_CLASS) + /* Deal with the very specific case of a SELECT_TYPE selector being an + associate_name whose type has been identified by component references. + It must be assumed that it will be identified as a CLASS expression, + so convert it now. */ + if (select_type + && IS_INFERRED_TYPE (selector) + && selector->ts.type == BT_DERIVED) + { + gfc_find_derived_vtab (selector->ts.u.derived); + /* The correct class container has to be available. */ + assoc_sym->ts.u.derived = selector->ts.u.derived; + assoc_sym->ts.type = BT_CLASS; + assoc_sym->attr.pointer = 1; + if (!selector->ts.u.derived->attr.is_class) + gfc_build_class_symbol (&assoc_sym->ts, &assoc_sym->attr, &assoc_sym->as); + associate->ts = assoc_sym->ts; + } + else if (selector->ts.type == BT_CLASS) { /* The correct class container has to be available. */ assoc_sym->ts.type = BT_CLASS; assoc_sym->ts.u.derived = CLASS_DATA (selector) - ? CLASS_DATA (selector)->ts.u.derived : selector->ts.u.derived; + ? CLASS_DATA (selector)->ts.u.derived + : selector->ts.u.derived; assoc_sym->attr.pointer = 1; gfc_build_class_symbol (&assoc_sym->ts, &assoc_sym->attr, &assoc_sym->as); } @@ -6438,7 +6457,7 @@ build_associate_name (const char *name, gfc_expr **e1, gfc_expr **e2) if (expr2->ts.type == BT_UNKNOWN) sym->attr.untyped = 1; else - copy_ts_from_selector_to_associate (expr1, expr2); + copy_ts_from_selector_to_associate (expr1, expr2, true); sym->attr.flavor = FL_VARIABLE; sym->attr.referenced = 1; diff --git a/gcc/fortran/parse.cc b/gcc/fortran/parse.cc index a4fda6e5eb6b..a2bf328f681d 100644 --- a/gcc/fortran/parse.cc +++ b/gcc/fortran/parse.cc @@ -5150,6 +5150,17 @@ parse_associate (void) sym->declared_at = a->where; gfc_set_sym_referenced (sym); + /* If the selector is a inferred type then the associate_name had better + be as well. Use array references, if present, to identify it as an + array. */ + if (IS_INFERRED_TYPE (a->target)) + { + sym->assoc->inferred_type = 1; + for (gfc_ref *r = a->target->ref; r; r = r->next) + if (r->type == REF_ARRAY) + sym->attr.dimension = 1; + } + /* Initialize the typespec. It is not available in all cases, however, as it may only be set on the target during resolution. Still, sometimes it helps to have it right now -- especially @@ -5176,21 +5187,41 @@ parse_associate (void) && sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)) sym->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL); + /* If the function has been parsed, go straight to the result to + obtain the expression rank. */ + if (target->expr_type == EXPR_FUNCTION + && target->symtree + && target->symtree->n.sym) + { + tsym = target->symtree->n.sym; + if (!tsym->result) + tsym->result = tsym; + sym->ts = tsym->result->ts; + if (sym->ts.type == BT_CLASS) + { + if (CLASS_DATA (sym)->as) + target->rank = CLASS_DATA (sym)->as->rank; + sym->attr.class_ok = 1; + } + else + target->rank = tsym->result->as ? tsym->result->as->rank : 0; + } + /* Check if the target expression is array valued. This cannot be done by calling gfc_resolve_expr because the context is unavailable. However, the references can be resolved and the rank of the target expression set. */ - if (target->ref && gfc_resolve_ref (target) + if (!sym->assoc->inferred_type + && target->ref && gfc_resolve_ref (target) && target->expr_type != EXPR_ARRAY && target->expr_type != EXPR_COMPCALL) gfc_expression_rank (target); /* Determine whether or not function expressions with unknown type are structure constructors. If so, the function result can be converted - to be a derived type. - TODO: Deal with references to sibling functions that have not yet been - parsed (PRs 89645 and 99065). */ - if (target->expr_type == EXPR_FUNCTION && target->ts.type == BT_UNKNOWN) + to be a derived type. */ + if (target->expr_type == EXPR_FUNCTION + && target->ts.type == BT_UNKNOWN) { gfc_symbol *derived; /* The derived type has a leading uppercase character. */ @@ -5200,16 +5231,7 @@ parse_associate (void) { sym->ts.type = BT_DERIVED; sym->ts.u.derived = derived; - } - else if (target->symtree && (tsym = target->symtree->n.sym)) - { - sym->ts = tsym->result ? tsym->result->ts : tsym->ts; - if (sym->ts.type == BT_CLASS) - { - if (CLASS_DATA (sym)->as) - target->rank = CLASS_DATA (sym)->as->rank; - sym->attr.class_ok = 1; - } + sym->assoc->inferred_type = 0; } } diff --git a/gcc/fortran/primary.cc b/gcc/fortran/primary.cc index 12e7bf3c873a..0ab69bb9dcea 100644 --- a/gcc/fortran/primary.cc +++ b/gcc/fortran/primary.cc @@ -2003,7 +2003,7 @@ extend_ref (gfc_expr *primary, gfc_ref *tail) /* Used by gfc_match_varspec() to match an inquiry reference. */ -static bool +bool is_inquiry_ref (const char *name, gfc_ref **ref) { inquiry_type type; @@ -2035,6 +2035,29 @@ is_inquiry_ref (const char *name, gfc_ref **ref) } +/* Check to see if functions in operator expressions can be resolved now. */ + +static bool +resolvable_fcns (gfc_expr *e, + gfc_symbol *sym ATTRIBUTE_UNUSED, + int *f ATTRIBUTE_UNUSED) +{ + bool p; + gfc_symbol *s; + + if (e->expr_type != EXPR_FUNCTION) + return false; + + s = e && e->symtree && e->symtree->n.sym ? e->symtree->n.sym : NULL; + p = s && (s->attr.use_assoc + || s->attr.host_assoc + || s->attr.if_source == IFSRC_DECL + || s->attr.proc == PROC_INTRINSIC + || gfc_is_intrinsic (s, 0, e->where)); + return !p; +} + + /* Match any additional specifications associated with the current variable like member references or substrings. If equiv_flag is set we only match stuff that is allowed inside an EQUIVALENCE @@ -2057,6 +2080,7 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, bool unknown; bool inquiry; bool intrinsic; + bool inferred_type; locus old_loc; char sep; @@ -2087,6 +2111,18 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, if (sym->assoc && sym->assoc->target) tgt_expr = sym->assoc->target; + inferred_type = IS_INFERRED_TYPE (primary); + + /* SELECT TYPE and SELECT RANK temporaries within an ASSOCIATE block, whose + selector has not been parsed, can generate errors with array and component + refs.. Use 'inferred_type' as a flag to suppress these errors. */ + if (!inferred_type + && (gfc_peek_ascii_char () == '(' && !sym->attr.dimension) + && !sym->attr.codimension + && sym->attr.select_type_temporary + && !sym->attr.select_rank_temporary) + inferred_type = true; + /* For associate names, we may not yet know whether they are arrays or not. If the selector expression is unambiguously an array; eg. a full array or an array section, then the associate name must be an array and we can @@ -2136,7 +2172,8 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, sym->ts.u.derived = tgt_expr->ts.u.derived; } - if ((equiv_flag && gfc_peek_ascii_char () == '(') + if ((inferred_type && !sym->as && gfc_peek_ascii_char () == '(') + || (equiv_flag && gfc_peek_ascii_char () == '(') || gfc_peek_ascii_char () == '[' || sym->attr.codimension || (sym->attr.dimension && sym->ts.type != BT_CLASS && !sym->attr.proc_pointer && !gfc_is_proc_ptr_comp (primary) @@ -2194,41 +2231,100 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, inquiry = false; if (m == MATCH_YES && sep == '%' && primary->ts.type != BT_CLASS - && primary->ts.type != BT_DERIVED) + && (primary->ts.type != BT_DERIVED || inferred_type)) { match mm; old_loc = gfc_current_locus; mm = gfc_match_name (name); - if (mm == MATCH_YES && is_inquiry_ref (name, &tmp)) + /* This is a usable inquiry reference, if the symbol is already known + to have a type or no derived types with a component of this name + can be found. If this was an inquiry reference with the same name + as a derived component and the associate-name type is not derived + or class, this is fixed up in 'gfc_fixup_inferred_type_refs'. */ + if (mm == MATCH_YES && is_inquiry_ref (name, &tmp) + && !(sym->ts.type == BT_UNKNOWN + && gfc_find_derived_types (sym, gfc_current_ns, name))) inquiry = true; gfc_current_locus = old_loc; } + /* Use the default type if there is one. */ if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES && gfc_get_default_type (sym->name, sym->ns)->type == BT_DERIVED) gfc_set_default_type (sym, 0, sym->ns); - /* See if there is a usable typespec in the "no IMPLICIT type" error. */ - if (sym->ts.type == BT_UNKNOWN && m == MATCH_YES) + /* See if the type can be determined by resolution of the selector expression, + if allowable now, or inferred from references. */ + if ((sym->ts.type == BT_UNKNOWN || inferred_type) + && m == MATCH_YES) { - bool permissible; - - /* These target expressions can be resolved at any time. */ - permissible = tgt_expr && tgt_expr->symtree && tgt_expr->symtree->n.sym - && (tgt_expr->symtree->n.sym->attr.use_assoc - || tgt_expr->symtree->n.sym->attr.host_assoc - || tgt_expr->symtree->n.sym->attr.if_source - == IFSRC_DECL); - permissible = permissible - || (tgt_expr && tgt_expr->expr_type == EXPR_OP); - - if (permissible) + bool sym_present, resolved = false; + gfc_symbol *tgt_sym; + + sym_present = tgt_expr && tgt_expr->symtree && tgt_expr->symtree->n.sym; + tgt_sym = sym_present ? tgt_expr->symtree->n.sym : NULL; + + /* These target expressions can be resolved at any time: + (i) With a declared symbol or intrinsic function; or + (ii) An operator expression, + just as long as (iii) all the functions in the expression have been + declared or are intrinsic. */ + if (((sym_present // (i) + && (tgt_sym->attr.use_assoc + || tgt_sym->attr.host_assoc + || tgt_sym->attr.if_source == IFSRC_DECL + || tgt_sym->attr.proc == PROC_INTRINSIC + || gfc_is_intrinsic (tgt_sym, 0, tgt_expr->where))) + || (tgt_expr && tgt_expr->expr_type == EXPR_OP)) // (ii) + && !gfc_traverse_expr (tgt_expr, NULL, resolvable_fcns, 0) // (iii) + && gfc_resolve_expr (tgt_expr)) { - gfc_resolve_expr (tgt_expr); sym->ts = tgt_expr->ts; + primary->ts = sym->ts; + resolved = true; } - if (sym->ts.type == BT_UNKNOWN) + /* If this hasn't done the trick and the target expression is a function, + or an unresolved operator expression, then this must be a derived type + if 'name' matches an accessible type both in this namespace and in the + as yet unparsed contained function. In principle, the type could have + already been inferred to be complex and yet a derived type with a + component name 're' or 'im' could be found. */ + if (tgt_expr + && (tgt_expr->expr_type == EXPR_FUNCTION + || (!resolved && tgt_expr->expr_type == EXPR_OP)) + && (sym->ts.type == BT_UNKNOWN + || (inferred_type && sym->ts.type != BT_COMPLEX)) + && gfc_find_derived_types (sym, gfc_current_ns, name, true)) + { + sym->assoc->inferred_type = 1; + /* The first returned type is as good as any at this stage. The final + determination is made in 'gfc_fixup_inferred_type_refs'*/ + gfc_symbol **dts = &sym->assoc->derived_types; + tgt_expr->ts.type = BT_DERIVED; + tgt_expr->ts.kind = 0; + tgt_expr->ts.u.derived = *dts; + sym->ts = tgt_expr->ts; + primary->ts = sym->ts; + /* Delete the dt list even if this process has to be done again for + another primary expression. */ + while (*dts && (*dts)->dt_next) + { + gfc_symbol **tmp = &(*dts)->dt_next; + *dts = NULL; + dts = tmp; + } + } + /* If there is a usable inquiry reference not there are no matching + derived types, force the inquiry reference by setting unknown the + type of the primary expression. */ + else if (inquiry && (sym->ts.type == BT_DERIVED && inferred_type) + && !gfc_find_derived_types (sym, gfc_current_ns, name)) + primary->ts.type = BT_UNKNOWN; + + /* An inquiry reference might determine the type, otherwise we have an + error. */ + if (sym->ts.type == BT_UNKNOWN && !inquiry) { gfc_error ("Symbol %qs at %C has no IMPLICIT type", sym->name); return MATCH_ERROR; @@ -2273,6 +2369,7 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, { if (tmp) { + gfc_symbol *s; switch (tmp->u.i) { case INQUIRY_RE: @@ -2294,6 +2391,39 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, break; } + /* If necessary, infer the type of the primary expression + and the associate-name using the the inquiry ref.. */ + s = primary->symtree ? primary->symtree->n.sym : NULL; + if (s && s->assoc && s->assoc->target + && (s->ts.type == BT_UNKNOWN + || (primary->ts.type == BT_UNKNOWN + && s->assoc->inferred_type + && s->ts.type == BT_DERIVED))) + { + if (tmp->u.i == INQUIRY_RE || tmp->u.i == INQUIRY_IM) + { + s->ts.type = BT_COMPLEX; + s->ts.kind = gfc_default_real_kind;; + s->assoc->inferred_type = 1; + primary->ts = s->ts; + } + else if (tmp->u.i == INQUIRY_LEN) + { + s->ts.type = BT_CHARACTER; + s->ts.kind = gfc_default_character_kind;; + s->assoc->inferred_type = 1; + primary->ts = s->ts; + } + else if (s->ts.type == BT_UNKNOWN) + { + /* KIND inquiry gives no clue as to symbol type. */ + primary->ref = tmp; + primary->ts.type = BT_INTEGER; + primary->ts.kind = gfc_default_integer_kind; + return MATCH_YES; + } + } + if ((tmp->u.i == INQUIRY_RE || tmp->u.i == INQUIRY_IM) && primary->ts.type != BT_COMPLEX) { diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 02acc4aef31b..c5ae826bd6e8 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -5866,6 +5866,18 @@ resolve_variable (gfc_expr *e) return false; } + /* Guessed type variables are associate_names whose selector had not been + parsed at the time that the construct was parsed. Now the namespace is + being resolved, the TKR of the selector will be available for fixup of + the associate_name. */ + if (IS_INFERRED_TYPE (e) && e->ref) + { + gfc_fixup_inferred_type_refs (e); + /* KIND inquiry ref returns the kind of the target. */ + if (e->expr_type == EXPR_CONSTANT) + return true; + } + /* For variables that are used in an associate (target => object) where the object's basetype is array valued while the target is scalar, the ts' type of the component refs is still array valued, which @@ -6171,6 +6183,159 @@ resolve_variable (gfc_expr *e) } +/* 'sym' was initially guessed to be derived type but has been corrected + in resolve_assoc_var to be a class entity or the derived type correcting. + If a class entity it will certainly need the _data reference or the + reference derived type symbol correcting in the first component ref if + a derived type. */ + +void +gfc_fixup_inferred_type_refs (gfc_expr *e) +{ + gfc_ref *ref, *new_ref; + gfc_symbol *sym, *derived; + gfc_expr *target; + sym = e->symtree->n.sym; + + /* An associate_name whose selector is (i) a component ref of a selector + that is a inferred type associate_name; or (ii) an intrinsic type that + has been inferred from an inquiry ref. */ + if (sym->ts.type != BT_DERIVED && sym->ts.type != BT_CLASS) + { + sym->attr.dimension = sym->assoc->target->rank ? 1 : 0; + if (!sym->attr.dimension && e->ref->type == REF_ARRAY) + { + ref = e->ref; + /* A substring misidentified as an array section. */ + if (sym->ts.type == BT_CHARACTER + && ref->u.ar.start[0] && ref->u.ar.end[0] + && !ref->u.ar.stride[0]) + { + new_ref = gfc_get_ref (); + new_ref->type = REF_SUBSTRING; + new_ref->u.ss.start = ref->u.ar.start[0]; + new_ref->u.ss.end = ref->u.ar.end[0]; + new_ref->u.ss.length = sym->ts.u.cl; + *ref = *new_ref; + free (new_ref); + } + else + { + e->ref = ref->next; + free (ref); + } + } + + /* It is possible for an inquiry reference to be mistaken for a + component reference. Correct this now. */ + ref = e->ref; + if (ref && ref->type == REF_ARRAY) + ref = ref->next; + if (ref && ref->type == REF_COMPONENT + && is_inquiry_ref (ref->u.c.component->name, &new_ref)) + { + e->symtree->n.sym = sym; + *ref = *new_ref; + gfc_free_ref_list (new_ref); + } + + /* The kind of the associate name is best evaluated directly from the + selector because of the guesses made in primary.cc, when the type + is still unknown. */ + if (ref && ref->type == REF_INQUIRY && ref->u.i == INQUIRY_KIND) + { + gfc_expr *ne = gfc_get_int_expr (gfc_default_integer_kind, &e->where, + sym->assoc->target->ts.kind); + gfc_replace_expr (e, ne); + } + + /* Now that the references are all sorted out, set the expression rank + and return. */ + gfc_expression_rank (e); + return; + } + + derived = sym->ts.type == BT_CLASS ? CLASS_DATA (sym)->ts.u.derived + : sym->ts.u.derived; + + /* Ensure that class symbols have an array spec and ensure that there + is a _data field reference following class type references. */ + if (sym->ts.type == BT_CLASS + && sym->assoc->target->ts.type == BT_CLASS) + { + e->rank = CLASS_DATA (sym)->as ? CLASS_DATA (sym)->as->rank : 0; + sym->attr.dimension = 0; + CLASS_DATA (sym)->attr.dimension = e->rank ? 1 : 0; + if (e->ref && (e->ref->type != REF_COMPONENT + || e->ref->u.c.component->name[0] != '_')) + { + ref = gfc_get_ref (); + ref->type = REF_COMPONENT; + ref->next = e->ref; + e->ref = ref; + ref->u.c.component = gfc_find_component (sym->ts.u.derived, "_data", + true, true, NULL); + ref->u.c.sym = sym->ts.u.derived; + } + } + + /* Proceed as far as the first component reference and ensure that the + correct derived type is being used. */ + for (ref = e->ref; ref; ref = ref->next) + if (ref->type == REF_COMPONENT) + { + if (ref->u.c.component->name[0] != '_') + ref->u.c.sym = derived; + else + ref->u.c.sym = sym->ts.u.derived; + break; + } + + /* Verify that the type inferrence mechanism has not introduced a spurious + array reference. This can happen with an associate name, whose selector + is an element of another inferred type. */ + target = e->symtree->n.sym->assoc->target; + if (!(sym->ts.type == BT_CLASS ? CLASS_DATA (sym)->as : sym->as) + && e != target && !target->rank) + { + /* First case: array ref after the scalar class or derived + associate_name. */ + if (e->ref && e->ref->type == REF_ARRAY + && e->ref->u.ar.type != AR_ELEMENT) + { + ref = e->ref; + e->ref = ref->next; + free (ref); + + /* If it hasn't a ref to the '_data' field supply one. */ + if (sym->ts.type == BT_CLASS + && !(e->ref->type == REF_COMPONENT + && strcmp (e->ref->u.c.component->name, "_data"))) + { + gfc_ref *new_ref; + gfc_find_component (e->symtree->n.sym->ts.u.derived, + "_data", true, true, &new_ref); + new_ref->next = e->ref; + e->ref = new_ref; + } + } + /* 2nd case: a ref to the '_data' field followed by an array ref. */ + else if (e->ref && e->ref->type == REF_COMPONENT + && strcmp (e->ref->u.c.component->name, "_data") == 0 + && e->ref->next && e->ref->next->type == REF_ARRAY + && e->ref->next->u.ar.type != AR_ELEMENT) + { + ref = e->ref->next; + e->ref->next = e->ref->next->next; + free (ref); + } + } + + /* Now that all the references are OK, get the expression rank. */ + gfc_expression_rank (e); +} + + /* Checks to see that the correct symbol has been host associated. The only situations where this arises are: (i) That in which a twice contained function is parsed after @@ -9263,6 +9428,53 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target) return; } + if (sym->assoc->inferred_type || IS_INFERRED_TYPE (target)) + { + /* By now, the type of the target has been fixed up. */ + symbol_attribute attr; + + if (sym->ts.type == BT_DERIVED + && target->ts.type == BT_CLASS + && !UNLIMITED_POLY (target)) + { + /* Inferred to be derived type but the target has type class. */ + sym->ts = CLASS_DATA (target)->ts; + if (!sym->as) + sym->as = gfc_copy_array_spec (CLASS_DATA (target)->as); + attr = CLASS_DATA (sym) ? CLASS_DATA (sym)->attr : sym->attr; + sym->attr.dimension = target->rank ? 1 : 0; + gfc_change_class (&sym->ts, &attr, sym->as, + target->rank, gfc_get_corank (target)); + sym->as = NULL; + } + else if (target->ts.type == BT_DERIVED + && target->symtree && target->symtree->n.sym + && target->symtree->n.sym->ts.type == BT_CLASS + && IS_INFERRED_TYPE (target) + && target->ref && target->ref->next + && target->ref->next->type == REF_ARRAY + && !target->ref->next->next) + { + /* A inferred type selector whose symbol has been determined to be + a class array but which only has an array reference. Change the + associate name and the selector to class type. */ + sym->ts = target->ts; + attr = CLASS_DATA (sym) ? CLASS_DATA (sym)->attr : sym->attr; + sym->attr.dimension = target->rank ? 1 : 0; + gfc_change_class (&sym->ts, &attr, sym->as, + target->rank, gfc_get_corank (target)); + sym->as = NULL; + target->ts = sym->ts; + } + else if ((target->ts.type == BT_DERIVED) + || (sym->ts.type == BT_CLASS && target->ts.type == BT_CLASS + && CLASS_DATA (target)->as && !CLASS_DATA (sym)->as)) + /* Confirmed to be either a derived type or misidentified to be a + scalar class object, when the selector is a class array. */ + sym->ts = target->ts; + } + + if (target->expr_type == EXPR_NULL) { gfc_error ("Selector at %L cannot be NULL()", &target->where); @@ -9289,15 +9501,50 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target) || gfc_is_ptr_fcn (target)); /* Finally resolve if this is an array or not. */ + if (target->expr_type == EXPR_FUNCTION + && (sym->ts.type == BT_CLASS || sym->ts.type == BT_DERIVED)) + { + gfc_expression_rank (target); + if (target->ts.type == BT_DERIVED + && !sym->as + && target->symtree->n.sym->as) + { + sym->as = gfc_copy_array_spec (target->symtree->n.sym->as); + sym->attr.dimension = 1; + } + else if (target->ts.type == BT_CLASS + && CLASS_DATA (target)->as) + { + target->rank = CLASS_DATA (target)->as->rank; + if (!(sym->ts.type == BT_CLASS && CLASS_DATA (sym)->as)) + { + sym->ts = target->ts; + sym->attr.dimension = 0; + } + } + } + + if (sym->attr.dimension && target->rank == 0) { /* primary.cc makes the assumption that a reference to an associate name followed by a left parenthesis is an array reference. */ - if (sym->ts.type != BT_CHARACTER) - gfc_error ("Associate-name %qs at %L is used as array", - sym->name, &sym->declared_at); - sym->attr.dimension = 0; - return; + if (sym->assoc->inferred_type && sym->ts.type != BT_CLASS) + { + gfc_expression_rank (sym->assoc->target); + sym->attr.dimension = sym->assoc->target->rank ? 1 : 0; + if (!sym->attr.dimension && sym->as) + sym->as = NULL; + } + + if (sym->attr.dimension && target->rank == 0) + { + if (sym->ts.type != BT_CHARACTER) + gfc_error ("Associate-name %qs at %L is used as array", + sym->name, &sym->declared_at); + sym->attr.dimension = 0; + return; + } } /* We cannot deal with class selectors that need temporaries. */ @@ -9356,7 +9603,7 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target) correct this now. */ gfc_typespec *ts = &target->ts; gfc_ref *ref; - gfc_component *c; + for (ref = target->ref; ref != NULL; ref = ref->next) { switch (ref->type) @@ -9374,32 +9621,15 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target) } /* Create a scalar instance of the current class type. Because the rank of a class array goes into its name, the type has to be - rebuild. The alternative of (re-)setting just the attributes + rebuilt. The alternative of (re-)setting just the attributes and as in the current type, destroys the type also in other places. */ as = NULL; sym->ts = *ts; sym->ts.type = BT_CLASS; attr = CLASS_DATA (sym) ? CLASS_DATA (sym)->attr : sym->attr; - attr.class_ok = 0; - attr.associate_var = 1; - attr.dimension = attr.codimension = 0; - attr.class_pointer = 1; - if (!gfc_build_class_symbol (&sym->ts, &attr, &as)) - gcc_unreachable (); - /* Make sure the _vptr is set. */ - c = gfc_find_component (sym->ts.u.derived, "_vptr", true, true, NULL); - if (c->ts.u.derived == NULL) - c->ts.u.derived = gfc_find_derived_vtab (sym->ts.u.derived); - CLASS_DATA (sym)->attr.pointer = 1; - CLASS_DATA (sym)->attr.class_pointer = 1; - gfc_set_sym_referenced (sym->ts.u.derived); - gfc_commit_symbol (sym->ts.u.derived); - /* _vptr now has the _vtab in it, change it to the _vtype. */ - if (c->ts.u.derived->attr.vtab) - c->ts.u.derived = c->ts.u.derived->ts.u.derived; - c->ts.u.derived->ns->types_resolved = 0; - resolve_types (c->ts.u.derived->ns); + gfc_change_class (&sym->ts, &attr, as, 0, 0); + sym->as = NULL; } } @@ -9443,6 +9673,14 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target) } } + if (sym->ts.type == BT_CLASS + && IS_INFERRED_TYPE (target) + && target->ts.type == BT_DERIVED + && CLASS_DATA (sym)->ts.u.derived == target->ts.u.derived + && target->ref && target->ref->next && !target->ref->next->next + && target->ref->next->type == REF_ARRAY) + target->ts = target->symtree->n.sym->ts; + /* If the target is a good class object, so is the associate variable. */ if (sym->ts.type == BT_CLASS && gfc_expr_attr (target).class_ok) sym->attr.class_ok = 1; diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc index 5d9852c79e00..16adb2a7efb2 100644 --- a/gcc/fortran/symbol.cc +++ b/gcc/fortran/symbol.cc @@ -291,6 +291,19 @@ bool gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns) { gfc_typespec *ts; + gfc_expr *e; + + /* Check to see if a function selector of unknown type can be resolved. */ + if (sym->assoc + && (e = sym->assoc->target) + && e->expr_type == EXPR_FUNCTION) + { + if (e->ts.type == BT_UNKNOWN) + gfc_resolve_expr (e); + sym->ts = e->ts; + if (sym->ts.type != BT_UNKNOWN) + return true; + } if (sym->ts.type != BT_UNKNOWN) gfc_internal_error ("gfc_set_default_type(): symbol already has a type"); @@ -307,7 +320,7 @@ gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns) "; did you mean %qs?", sym->name, &sym->declared_at, guessed); else - gfc_error ("Symbol %qs at %L has no IMPLICIT type", + gfc_error ("Symbol %qs at %L has no IMPLICIT type(symbol)", sym->name, &sym->declared_at); sym->attr.untyped = 1; /* Ensure we only give an error once. */ } @@ -2402,6 +2415,67 @@ gfc_use_derived (gfc_symbol *sym) } +/* Find all derived types in the uppermost namespace that have a component + a component called name and stash them in the assoc field of an + associate name variable. + This is used to infer the derived type of an associate name, whose selector + is a sibling derived type function that has not yet been parsed. Either + the derived type is use associated in both contained and sibling procedures + or it appears in the uppermost namespace. */ + +static int cts = 0; +static void +find_derived_types (gfc_symbol *sym, gfc_symtree *st, const char *name, + bool contained, bool stash) +{ + if (st->n.sym && st->n.sym->attr.flavor == FL_DERIVED + && !st->n.sym->attr.is_class + && ((contained && st->n.sym->attr.use_assoc) || !contained) + && gfc_find_component (st->n.sym, name, true, true, NULL)) + { + /* Do the stashing, if required. */ + cts++; + if (stash) + { + if (sym->assoc->derived_types) + st->n.sym->dt_next = sym->assoc->derived_types; + sym->assoc->derived_types = st->n.sym; + } + } + + if (st->left) + find_derived_types (sym, st->left, name, contained, stash); + + if (st->right) + find_derived_types (sym, st->right, name, contained, stash); +} + +int +gfc_find_derived_types (gfc_symbol *sym, gfc_namespace *ns, + const char *name, bool stash) +{ + gfc_namespace *encompassing = NULL; + gcc_assert (sym->assoc); + + cts = 0; + while (ns->parent) + { + if (!ns->parent->parent && ns->proc_name + && (ns->proc_name->attr.function || ns->proc_name->attr.subroutine)) + encompassing = ns; + ns = ns->parent; + } + + /* Search the top level namespace first. */ + find_derived_types (sym, ns->sym_root, name, false, stash); + + /* Then the encompassing namespace. */ + if (encompassing && encompassing != ns) + find_derived_types (sym, encompassing->sym_root, name, true, stash); + + return cts; +} + /* Find the component with the given name in the union type symbol. If ref is not NULL it will be set to the chain of components through which the component can actually be accessed. This is necessary for unions because diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index d63c304661a4..bd14ce99ed67 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -3142,6 +3142,10 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr) gcc_assert (se->string_length); } + /* Some expressions leak through that haven't been fixed up. */ + if (IS_INFERRED_TYPE (expr) && expr->ref) + gfc_fixup_inferred_type_refs (expr); + gfc_typespec *ts = &sym->ts; while (ref) { diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc index e09828e218b1..1ec76f9778c9 100644 --- a/gcc/fortran/trans-stmt.cc +++ b/gcc/fortran/trans-stmt.cc @@ -1747,9 +1747,9 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block) e = sym->assoc->target; class_target = (e->expr_type == EXPR_VARIABLE) - && e->ts.type == BT_CLASS - && (gfc_is_class_scalar_expr (e) - || gfc_is_class_array_ref (e, NULL)); + && e->ts.type == BT_CLASS + && (gfc_is_class_scalar_expr (e) + || gfc_is_class_array_ref (e, NULL)); unlimited = UNLIMITED_POLY (e); @@ -2043,6 +2043,10 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block) { gfc_conv_expr (&se, e); se.expr = gfc_evaluate_now (se.expr, &se.pre); + /* Finalize the expression and free if it is allocatable. */ + gfc_finalize_tree_expr (&se, NULL, gfc_expr_attr (e), e->rank); + gfc_add_block_to_block (&se.post, &se.finalblock); + need_len_assign = false; } else if (sym->ts.type == BT_CLASS && CLASS_DATA (sym)->attr.dimension) { @@ -2157,26 +2161,36 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block) { tree stmp; tree dtmp; + tree ctmp; - se.expr = ctree; + ctmp = ctree; dtmp = TREE_TYPE (TREE_TYPE (sym->backend_decl)); ctree = gfc_create_var (dtmp, "class"); - stmp = gfc_class_data_get (se.expr); + if (IS_INFERRED_TYPE (e) + && !GFC_CLASS_TYPE_P (TREE_TYPE (se.expr))) + stmp = se.expr; + else + stmp = gfc_class_data_get (ctmp); + /* Coarray scalar component expressions can emerge from the front end as array elements of the _data field. */ if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (stmp))) stmp = gfc_conv_descriptor_data_get (stmp); + + if (!POINTER_TYPE_P (TREE_TYPE (stmp))) + stmp = gfc_build_addr_expr (NULL, stmp); + dtmp = gfc_class_data_get (ctree); stmp = fold_convert (TREE_TYPE (dtmp), stmp); gfc_add_modify (&se.pre, dtmp, stmp); - stmp = gfc_class_vptr_get (se.expr); + stmp = gfc_class_vptr_get (ctmp); dtmp = gfc_class_vptr_get (ctree); stmp = fold_convert (TREE_TYPE (dtmp), stmp); gfc_add_modify (&se.pre, dtmp, stmp); if (UNLIMITED_POLY (sym)) { - stmp = gfc_class_len_get (se.expr); + stmp = gfc_class_len_get (ctmp); dtmp = gfc_class_len_get (ctree); stmp = fold_convert (TREE_TYPE (dtmp), stmp); gfc_add_modify (&se.pre, dtmp, stmp); diff --git a/gcc/testsuite/gfortran.dg/associate_64.f90 b/gcc/testsuite/gfortran.dg/associate_64.f90 new file mode 100644 index 000000000000..d7fde185bd09 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_64.f90 @@ -0,0 +1,345 @@ +! { dg-do run } +! { dg-options "-fdump-tree-original" } +! +! Tests the fix for PR89645 and 99065, in which derived type or class functions, +! used as associate selectors and which were parsed after the containing scope +! of the associate statement, caused "no IMPLICIT type" and "Syntax" errors. +! +! Contributed by Ian Harvey <ian_harvey@bigpond.com> +! +module m + implicit none + type t + integer :: i = 0 + end type t + integer :: i = 0 + type(t), parameter :: test_array (2) = [t(42),t(84)], & + test_scalar = t(99) +end module m + +! DERIVED TYPE VERSION OF THE PROBLEM, AS REPORTED IN THE PRs +module type_selectors + use m + implicit none + private + public foo1 +contains +! Since these functions are parsed first, the symbols are available for +! parsing in 'foo'. + function bar1() result(res) ! The array version caused syntax errors in foo + type(t), allocatable :: res(:) + allocate (res, source = test_array) + end + function bar2() result(res) ! Scalar class functions were OK - test anyway + type(t), allocatable :: res + allocate (res, source = test_scalar) + end + subroutine foo1() +! First the array selector + associate (var1 => bar1()) + if (any (var1%i .ne. test_array%i)) stop 1 + if (var1(2)%i .ne. test_array(2)%i) stop 2 + end associate +! Now the scalar selector + associate (var2 => bar2()) + if (var2%i .ne. test_scalar%i) stop 3 + end associate + +! Now the array selector that needed fixing up because the function follows.... + associate (var1 => bar3()) + if (any (var1%i .ne. test_array%i)) stop 4 + if (var1(2)%i .ne. test_array(2)%i) stop 5 + end associate +! ....and equivalent scalar selector + associate (var2 => bar4()) + if (var2%i .ne. test_scalar%i) stop 6 + end associate + end subroutine foo1 + +! These functions are parsed after 'foo' so the symbols were not available +! for the selectors and the fixup, tested here, was necessary. + function bar3() result(res) + class(t), allocatable :: res(:) + allocate (res, source = test_array) + end + + function bar4() result(res) + class(t), allocatable :: res + allocate (res, source = t(99)) + end +end module type_selectors + +! CLASS VERSION OF THE PROBLEM, WHICH REQUIRED MOST OF THE WORK! +module class_selectors + use m + implicit none + private + public foo2 +contains + +! Since these functions are parsed first, the symbols are available for +! parsing in 'foo'. + function bar1() result(res) ! The array version caused syntax errors in foo + class(t), allocatable :: res(:) + allocate (res, source = test_array) + end + + function bar2() result(res) ! Scalar class functions were OK - test anyway + class(t), allocatable :: res + allocate (res, source = t(99)) + end + + subroutine foo2() +! First the array selector + associate (var1 => bar1()) + if (any (var1%i .ne. test_array%i)) stop 7 + if (var1(2)%i .ne. test_array(2)%i) stop 8 + select type (x => var1) + type is (t) + if (any (x%i .ne. test_array%i)) stop 9 + if (x(1)%i .ne. test_array(1)%i) stop 10 + class default + stop 11 + end select + end associate + +! Now scalar selector + associate (var2 => bar2()) + select type (z => var2) + type is (t) + if (z%i .ne. test_scalar%i) stop 12 + class default + stop 13 + end select + end associate + +! This is the array selector that needed the fixup. + associate (var1 => bar3()) + if (any (var1%i .ne. test_array%i)) stop 14 + if (var1(2)%i .ne. test_array(2)%i) stop 15 + select type (x => var1) + type is (t) + if (any (x%i .ne. test_array%i)) stop 16 + if (x(1)%i .ne. test_array(1)%i) stop 17 + class default + stop 18 + end select + end associate + +! Now the equivalent scalar selector + associate (var2 => bar4()) + select type (z => var2) + type is (t) + if (z%i .ne. test_scalar%i) stop 19 + class default + stop 20 + end select + end associate + + end subroutine foo2 + +! These functions are parsed after 'foo' so the symbols were not available +! for the selectors and the fixup, tested here, was necessary. + function bar3() result(res) + class(t), allocatable :: res(:) + allocate (res, source = test_array) + end + + function bar4() result(res) + class(t), allocatable :: res + allocate (res, source = t(99)) + end +end module class_selectors + +! THESE TESTS CAUSED PROBLEMS DURING DEVELOPMENT FOR BOTH PARSING ORDERS. +module problem_selectors + implicit none + private + public foo3, foo4 + type t + integer :: i + end type t + type s + integer :: i + type(t) :: dt + end type s + type(t), parameter :: test_array (2) = [t(42),t(84)], & + test_scalar = t(99) + type(s), parameter :: test_sarray (2) = [s(142,t(42)),s(184,t(84))] +contains + + subroutine foo3() + integer :: i + block + associate (var1 => bar7()) + if (any (var1%i .ne. test_array%i)) stop 21 + if (var1(2)%i .ne. test_array(2)%i) stop 22 + associate (z => var1(1)%i) + if (z .ne. 42) stop 23 + end associate + end associate + end block + + associate (var2 => bar8()) + i = var2(2)%i + associate (var3 => var2%dt) + if (any (var3%i .ne. test_sarray%dt%i)) stop 24 + end associate + associate (var4 => var2(2)) + if (var4%i .ne. 184) stop 25 + end associate + end associate + end subroutine foo3 + + function bar7() result(res) + type(t), allocatable :: res(:) + allocate (res, source = test_array) + end + + function bar8() result(res) + type(s), allocatable :: res(:) + allocate (res, source = test_sarray) + end + + subroutine foo4() + integer :: i + block + associate (var1 => bar7()) + if (any (var1%i .ne. test_array%i)) stop 26 + if (var1(2)%i .ne. test_array(2)%i) stop 27 + associate (z => var1(1)%i) + if (z .ne. 42) stop 28 + end associate + end associate + end block + + associate (var2 => bar8()) + i = var2(2)%i + associate (var3 => var2%dt) + if (any (var3%i .ne. test_sarray%dt%i)) stop 29 + end associate + associate (var4 => var2(2)) + if (var4%i .ne. 184) stop 30 + end associate + end associate + end subroutine foo4 + +end module problem_selectors + +module more_problem_selectors + implicit none + private + public foo5, foo6 + type t + integer :: i = 0 + end type t + type s + integer :: i = 0 + type(t) :: dt + end type s +contains +! In this version, the order of declarations of 't' and 's' is such that +! parsing var%i sets the type of var to 't' and this is corrected to 's' +! on parsing var%dt%i + subroutine foo5() + associate (var3 => bar3()) + if (var3%i .ne. 42) stop 31 + if (var3%dt%i .ne. 84) stop 32 + end associate + +! Repeat with class version + associate (var4 => bar4()) + if (var4%i .ne. 84) stop 33 + if (var4%dt%i .ne. 168) stop 34 + select type (x => var4) + type is (s) + if (x%i .ne. var4%i) stop 35 + if (x%dt%i .ne. var4%dt%i) stop 36 + class default + stop 37 + end select + end associate + +! Ditto with no type component clues for select type + associate (var5 => bar4()) + select type (z => var5) + type is (s) + if (z%i .ne. 84) stop 38 + if (z%dt%i .ne. 168) stop 39 + class default + stop 40 + end select + end associate + end subroutine foo5 + +! Now the array versions + subroutine foo6() + class(s), allocatable :: elem + associate (var6 => bar5()) + if (var6(1)%i .ne. 42) stop 41 + if (any (var6%dt%i .ne. [84])) stop 42 + end associate + +! Class version with an assignment to a named variable + associate (var7 => bar6()) + elem = var7(2) + if (any (var7%i .ne. [84, 168])) stop 43 + if (any (var7%dt%i .ne. [168, 336])) stop 44 + end associate + if (elem%i .ne. 168) stop 45 + if (elem%dt%i .ne. 336) stop 46 + + select type (z => elem) + type is (s) + if (z%i .ne. 168) stop 47 + if (z%dt%i .ne. 336) stop 48 + class default + stop 49 + end select + +! Array version without type clues before select type + associate (var8 => bar6()) + select type (z => var8) + type is (s) + if (any (z%i .ne. [84,168])) stop 50 + if (any (z%dt%i .ne. [168,336])) stop 51 + class default + stop 52 + end select + end associate + end subroutine foo6 + + type(s) function bar3() + bar3= s(42, t(84)) + end + + function bar4() result(res) + class(s), allocatable :: res + res = s(84, t(168)) + end + + function bar5() result (res) + type(s), allocatable :: res(:) + res = [s(42, t(84))] + end + + function bar6() result (res) + class(s), allocatable :: res(:) + res = [s(84, t(168)),s(168, t(336))] + end + +end module more_problem_selectors + +program test + use type_selectors + use class_selectors + use problem_selectors + use more_problem_selectors + call foo1() + call foo2() + call foo3() + call foo4() + call foo5() + call foo6() +end program test +! { dg-final { scan-tree-dump-times "__builtin_free" 18 "original" } } diff --git a/gcc/testsuite/gfortran.dg/associate_65.f90 b/gcc/testsuite/gfortran.dg/associate_65.f90 new file mode 100644 index 000000000000..04a1437958a9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_65.f90 @@ -0,0 +1,30 @@ +! { dg-do run } +! Test fix for PR114141 +! Contributed by Steve Kargl <sgk@troutmask.apl.washington.edu> +program foo + implicit none + real :: y = 0.0 + associate (x => log(cmplx(-1,0))) + y = x%im ! Gave 'Symbol ‘x’ at (1) has no IMPLICIT type' + if (int(100*y)-314 /= 0) stop 1 + end associate + +! Check wrinkle in comment 1 (parentheses around selector) of the PR is fixed. + associate (x => ((log(cmplx(-1,1))))) + y = x%im ! Gave 'The RE or IM part_ref at (1) must be applied to a + ! COMPLEX expression' + if (int(100*y)-235 /= 0) stop 2 + end associate + +! Check that more complex(pun intended!) expressions are OK. + associate (x => exp (log(cmplx(-1,0))+cmplx(0,0.5))) + y = x%re ! Gave 'Symbol ‘x’ at (1) has no IMPLICIT type' + if (int(1000*y)+877 /= 0) stop 3 + end associate + +! Make sure that AIMAG intrinsic is OK. + associate (x => ((log(cmplx(-1,0.5))))) + y = aimag (x) + if (int(100*y)-267 /= 0) stop 4 + end associate +end program diff --git a/gcc/testsuite/gfortran.dg/associate_66.f90 b/gcc/testsuite/gfortran.dg/associate_66.f90 new file mode 100644 index 000000000000..d507eb62807c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_66.f90 @@ -0,0 +1,45 @@ +! { dg-do run } +! { dg-options "-fdump-tree-original" } +! +! Tests unlimited polymorphic function selectors in ASSOCIATE. +! +! Contributed by Harald Anlauf <anlauf@gmx.de> in +! https://gcc.gnu.org/pipermail/fortran/2024-January/060098.html +! +program p + implicit none +! scalar array + associate (var1 => foo1(), var2 => foo2()) + call prt (var1); call prt (var2) + end associate +contains +! Scalar value + function foo1() result(res) + class(*), allocatable :: res + res = 42.0 + end function foo1 +! Array value + function foo2() result(res) + class(*), allocatable :: res(:) + res = [42, 84] + end function foo2 +! Test the associate-name value + subroutine prt (x) + class(*), intent(in) :: x(..) + logical :: ok = .false. + select rank(x) + rank (0) + select type (x) + type is (real) + if (int(x*10) .eq. 420) ok = .true. + end select + rank (1) + select type (x) + type is (integer) + if (all (x .eq. [42, 84])) ok = .true. + end select + end select + if (.not.ok) stop 1 + end subroutine prt +end +! { dg-final { scan-tree-dump-times "__builtin_free" 2 "original" } } diff --git a/gcc/testsuite/gfortran.dg/associate_67.f90 b/gcc/testsuite/gfortran.dg/associate_67.f90 new file mode 100644 index 000000000000..6bc3bc5f4d65 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_67.f90 @@ -0,0 +1,41 @@ +! { dg-do run } +! +! Tests pointer function selectors in ASSOCIATE. +! +! Contributed by Harald Anlauf <anlauf@gmx.de> in +! https://gcc.gnu.org/pipermail/fortran/2024-March/060294.html +program paul + implicit none + type t + integer :: i + end type t + type(t), pointer :: p(:) + integer :: j + allocate (p(-3:3)) + p% i = [(j,j=-3,3)] + + associate (q => p) + print *, lbound (q), ubound (q) ! Should print -3 3 (OK) + print *, q% i + end associate + + associate (q => set_ptr()) + print *, lbound (q), ubound (q) ! Should print -3 3 (OK) + print *, q(:)% i ! <<< ... has no IMPLICIT type + end associate + + associate (q => (p)) + print *, lbound (q), ubound (q) ! Should print 1 7 (OK) + print *, q% i + end associate + + associate (q => (set_ptr())) + print *, lbound (q), ubound (q) ! Should print 1 7 (OK) + print *, q(:)% i ! <<< ... has no IMPLICIT type + end associate +contains + function set_ptr () result (res) + type(t), pointer :: res(:) + res => p + end function set_ptr +end diff --git a/gcc/testsuite/gfortran.dg/associate_68.f90 b/gcc/testsuite/gfortran.dg/associate_68.f90 new file mode 100644 index 000000000000..f05ecd8e26ad --- /dev/null +++ b/gcc/testsuite/gfortran.dg/associate_68.f90 @@ -0,0 +1,79 @@ +! { dg-do run } +! Test the fix for PR114280 in which inquiry references of associate names +! of as yet unparsed function selectors failed. +! Contributed by Steve Kargl <> +program paul2 + implicit none + type t + real :: re + end type t + real :: comp = 1, repart = 10, impart =100 + call foo +contains + subroutine foo () + associate (x => bar1()) +! 'x' identified as complex from outset + if (int(x%im) .ne. 100) stop 1 ! Has no IMPLICIT type + if (int(x%re) .ne. 10) stop 2 + end associate + + associate (x => bar1()) +! 'x' identified as derived then corrected to complex + if (int(x%re) .ne. 11) stop 3 ! Has no IMPLICIT type + if (int(x%im) .ne. 101) stop 4 + if (x%kind .ne. kind(1.0)) stop 5 + end associate + + associate (x => bar1()) + if (x%kind .ne. kind(1.0)) stop 6 ! Invalid character in name + end associate + + associate (x => bar2()) + if (int(x%re) .ne. 1) stop 7 ! Invalid character in name + end associate + + associate (xx => bar3()) + if (xx%len .ne. 8) stop 8 ! Has no IMPLICIT type + if (trim (xx) .ne. "Nice one") stop 9 + if (xx(6:8) .ne. "one") stop 10 + end associate + +! Now check the array versions + associate (x => bar4()) + if (any (int(abs (x(:) + 2.0)) .ne. [104,105])) stop 0 + if (int(x(2)%re) .ne. 14) stop 11 + if (any (int(x%im) .ne. [103,104])) stop 12 + if (any (int(abs(x)) .ne. [103,104])) stop 13 + end associate + + associate (x => bar5()) + if (x(:)%kind .ne. kind("A")) stop 14 + if (x(2)%len .ne. 4) stop 15 + if (x%len .ne. 4) stop 16 + if (x(2)(1:3) .ne. "two") stop 17 + if (any(x .ne. ["one ", "two "])) stop 18 + end associate + end + complex function bar1 () + bar1 = cmplx(repart, impart) + repart = repart + 1 + impart = impart + 1 + end + type(t) function bar2 () + bar2% re = comp + comp = comp + 1 + end + character(8) function bar3 () + bar3 = "Nice one!" + end + function bar4 () result (res) + complex, allocatable, dimension(:) :: res + res = [cmplx(repart, impart),cmplx(repart+1, impart+1)] + repart = repart + 2 + impart = impart + 2 + end + function bar5 () result (res) + character(4), allocatable, dimension(:) :: res + res = ["one ", "two "] + end +end From 90b9872311ccb24685ba33b6ba6f374d50f03874 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 15 Mar 2024 09:16:43 +0100 Subject: [PATCH 077/551] bitint: Fix up adjustment of large/huge _BitInt arguments of returns_twice calls [PR113466] This patch (on top of the just posted gsi_safe_insert* fixes patch) fixes the instrumentation of large/huge _BitInt SSA_NAME arguments of returns_twice calls. In this case it isn't just a matter of using gsi_safe_insert_before instead of gsi_insert_before, we need to do more. One thing is that unlike the asan/ubsan instrumentation which does just some checking, here we want the statement before the call to load into a SSA_NAME which is passed to the call. With another edge we need to add a PHI, with one PHI argument the loaded SSA_NAME, another argument an uninitialized warning free SSA_NAME and a result and arrange for all 3 SSA_NAMEs to be preserved (i.e. stay as is, be no longer lowered afterwards). Unfortunately, edge_before_returns_twice_call can create new SSA_NAMEs using copy_ssa_name and while we can have a reasonable partition for them (same partition as PHI result correspoding to the PHI argument newly added), adding SSA_NAMEs into a partition after the partitions are finalized is too ugly. So, this patch takes a different approach suggested by Richi, just emit the argument loads before the returns_twice call normally (i.e. temporarily create invalid IL) and just remember that we did that, and when the bitint lowering is otherwise done fix this up, gsi_remove those statements, gsi_safe_insert_before and and create the needed new PHIs. 2024-03-15 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/113466 * gimple-lower-bitint.cc (bitint_large_huge): Add m_returns_twice_calls member. (bitint_large_huge::bitint_large_huge): Initialize it. (bitint_large_huge::~bitint_large_huge): Release it. (bitint_large_huge::lower_call): Remember ECF_RETURNS_TWICE call stmts before which at least one statement has been inserted. (gimple_lower_bitint): Move argument loads before ECF_RETURNS_TWICE calls to a different block and add corresponding PHIs. * gcc.dg/bitint-100.c: New test. --- gcc/gimple-lower-bitint.cc | 71 +++++++++++++++++++- gcc/testsuite/gcc.dg/bitint-100.c | 108 ++++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/bitint-100.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index b58220f564c9..42c39d8a47af 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -419,7 +419,8 @@ struct bitint_large_huge bitint_large_huge () : m_names (NULL), m_loads (NULL), m_preserved (NULL), m_single_use_names (NULL), m_map (NULL), m_vars (NULL), - m_limb_type (NULL_TREE), m_data (vNULL) {} + m_limb_type (NULL_TREE), m_data (vNULL), + m_returns_twice_calls (vNULL) {} ~bitint_large_huge (); @@ -553,6 +554,7 @@ struct bitint_large_huge unsigned m_bitfld_load; vec<tree> m_data; unsigned int m_data_cnt; + vec<gimple *> m_returns_twice_calls; }; bitint_large_huge::~bitint_large_huge () @@ -565,6 +567,7 @@ bitint_large_huge::~bitint_large_huge () delete_var_map (m_map); XDELETEVEC (m_vars); m_data.release (); + m_returns_twice_calls.release (); } /* Insert gimple statement G before current location @@ -5248,6 +5251,7 @@ bitint_large_huge::lower_call (tree obj, gimple *stmt) default: break; } + bool returns_twice = (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) != 0; for (unsigned int i = 0; i < nargs; ++i) { tree arg = gimple_call_arg (stmt, i); @@ -5271,6 +5275,11 @@ bitint_large_huge::lower_call (tree obj, gimple *stmt) arg = make_ssa_name (TREE_TYPE (arg)); gimple *g = gimple_build_assign (arg, v); gsi_insert_before (&gsi, g, GSI_SAME_STMT); + if (returns_twice) + { + m_returns_twice_calls.safe_push (stmt); + returns_twice = false; + } } gimple_call_set_arg (stmt, i, arg); if (m_preserved == NULL) @@ -7091,6 +7100,66 @@ gimple_lower_bitint (void) if (edge_insertions) gsi_commit_edge_inserts (); + /* Fix up arguments of ECF_RETURNS_TWICE calls. Those were temporarily + inserted before the call, but that is invalid IL, so move them to the + right place and add corresponding PHIs. */ + if (!large_huge.m_returns_twice_calls.is_empty ()) + { + auto_vec<gimple *, 16> arg_stmts; + while (!large_huge.m_returns_twice_calls.is_empty ()) + { + gimple *stmt = large_huge.m_returns_twice_calls.pop (); + gimple_stmt_iterator gsi = gsi_after_labels (gimple_bb (stmt)); + while (gsi_stmt (gsi) != stmt) + { + arg_stmts.safe_push (gsi_stmt (gsi)); + gsi_remove (&gsi, false); + } + gimple *g; + basic_block bb = NULL; + edge e = NULL, ead = NULL; + FOR_EACH_VEC_ELT (arg_stmts, i, g) + { + gsi_safe_insert_before (&gsi, g); + if (i == 0) + { + bb = gimple_bb (stmt); + gcc_checking_assert (EDGE_COUNT (bb->preds) == 2); + e = EDGE_PRED (bb, 0); + ead = EDGE_PRED (bb, 1); + if ((ead->flags & EDGE_ABNORMAL) == 0) + std::swap (e, ead); + gcc_checking_assert ((e->flags & EDGE_ABNORMAL) == 0 + && (ead->flags & EDGE_ABNORMAL)); + } + tree lhs = gimple_assign_lhs (g); + tree arg = lhs; + gphi *phi = create_phi_node (copy_ssa_name (arg), bb); + add_phi_arg (phi, arg, e, UNKNOWN_LOCATION); + tree var = create_tmp_reg (TREE_TYPE (arg)); + suppress_warning (var, OPT_Wuninitialized); + arg = get_or_create_ssa_default_def (cfun, var); + SSA_NAME_OCCURS_IN_ABNORMAL_PHI (arg) = 1; + add_phi_arg (phi, arg, ead, UNKNOWN_LOCATION); + arg = gimple_phi_result (phi); + SSA_NAME_OCCURS_IN_ABNORMAL_PHI (arg) = 1; + imm_use_iterator iter; + gimple *use_stmt; + FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs) + { + if (use_stmt == phi) + continue; + gcc_checking_assert (use_stmt == stmt); + use_operand_p use_p; + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + SET_USE (use_p, arg); + } + } + update_stmt (stmt); + arg_stmts.truncate (0); + } + } + return ret; } diff --git a/gcc/testsuite/gcc.dg/bitint-100.c b/gcc/testsuite/gcc.dg/bitint-100.c new file mode 100644 index 000000000000..e859bfba6b86 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-100.c @@ -0,0 +1,108 @@ +/* PR tree-optimization/113466 */ +/* { dg-do compile { target bitint575 } } */ +/* { dg-options "-O2" } */ + +int foo (int); + +__attribute__((returns_twice, noipa)) _BitInt(325) +bar (_BitInt(575) x) +{ + (void) x; + return 0wb; +} + +__attribute__((returns_twice, noipa)) _BitInt(325) +garply (_BitInt(575) x, _BitInt(575) y, _BitInt(575) z, int u, int v, _BitInt(575) w) +{ + (void) x; + (void) y; + (void) z; + (void) u; + (void) v; + (void) w; + return 0wb; +} + +_BitInt(325) +baz (_BitInt(575) y) +{ + foo (1); + return bar (y); +} + +_BitInt(325) +qux (int x, _BitInt(575) y) +{ + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + return bar (y); +} + +void +corge (int x, _BitInt(575) y, _BitInt(325) *z) +{ + void *q[] = { &&l1, &&l2, &&l3, &&l3 }; + if (x == 25) + { + l1: + x = foo (2); + } + else if (x == 42) + { + l2: + x = foo (foo (3)); + } +l3: + *z = bar (y); + if (x < 4) + goto *q[x & 3]; +} + +_BitInt(325) +freddy (int x, _BitInt(575) y) +{ + bar (y); + ++y; + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + return bar (y); +} + +_BitInt(325) +quux (_BitInt(575) x, _BitInt(575) y, _BitInt(575) z) +{ + _BitInt(575) w = x + y; + foo (1); + return garply (x, y, z, 42, 42, w); +} + +_BitInt(325) +grault (int x, _BitInt(575) y, _BitInt(575) z) +{ + _BitInt(575) v = x + y; + _BitInt(575) w = x - y; + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + return garply (y, z, v, 0, 0, w); +} + +_BitInt(325) +plugh (int x, _BitInt(575) y, _BitInt(575) z, _BitInt(575) v, _BitInt(575) w) +{ + garply (y, z, v, 1, 2, w); + ++y; + z += 2wb; + v <<= 3; + w *= 3wb; + if (x == 25) + x = foo (2); + else if (x == 42) + x = foo (foo (3)); + return garply (y, z, v, 1, 2, w); +} From 8ae7062bf4005c08b093828d40e2c9278e6f6d9c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 15 Mar 2024 10:01:41 +0100 Subject: [PATCH 078/551] testsuite: Fix up pr104601.C for recent libstdc++ changes r14-9478 added [[nodiscard]] to various <algorithm> APIs including find_if the pr104601.C testcase uses. As it is an optimization bug fix testcase, haven't tried to adjust the testcase to use the find_if result, but instead have added -Wno-unused-result flag to quiet the warning. 2024-03-15 Jakub Jelinek <jakub@redhat.com> * g++.dg/torture/pr104601.C: Add -Wno-unused-result to dg-options. --- gcc/testsuite/g++.dg/torture/pr104601.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/g++.dg/torture/pr104601.C b/gcc/testsuite/g++.dg/torture/pr104601.C index 92ad73d47e92..c8d4661e86d4 100644 --- a/gcc/testsuite/g++.dg/torture/pr104601.C +++ b/gcc/testsuite/g++.dg/torture/pr104601.C @@ -1,6 +1,6 @@ // PR tree-optimization/104601 // { dg-do run } -// { dg-options "-std=c++17" } +// { dg-options "-std=c++17 -Wno-unused-result" } #include <algorithm> #include <optional> From 0319f265eddd17c32cb037b71489d9882a6eb00d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 15 Mar 2024 10:10:57 +0100 Subject: [PATCH 079/551] expand: EXTEND_BITINT CALL_EXPR results [PR114332] The x86-64 and aarch64 psABIs (and the unwritten ia64 psABI part) say that the padding bits of _BitInt are undefined, while the expansion internally typically assumes that non-mode precision integers are sign/zero extended and extends after operations. We handle that mismatch with EXTEND_BITINT done when reading from untrusted sources like function arguments, reading _BitInt from memory etc. but otherwise keep relying on stuff being extended internally (say in pseudos). The return value of a function is an ABI boundary though too and we need to extend that too. 2024-03-15 Jakub Jelinek <jakub@redhat.com> PR middle-end/114332 * expr.cc (expand_expr_real_1): EXTEND_BITINT also CALL_EXPR results. --- gcc/expr.cc | 3 ++- gcc/testsuite/gcc.dg/torture/bitint-64.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-64.c diff --git a/gcc/expr.cc b/gcc/expr.cc index f7d74525c15b..2918c4697354 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -12350,7 +12350,8 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode, return expand_builtin (exp, target, subtarget, tmode, ignore); } } - return expand_call (exp, target, ignore); + temp = expand_call (exp, target, ignore); + return EXTEND_BITINT (temp); case VIEW_CONVERT_EXPR: op0 = NULL_RTX; diff --git a/gcc/testsuite/gcc.dg/torture/bitint-64.c b/gcc/testsuite/gcc.dg/torture/bitint-64.c new file mode 100644 index 000000000000..8f0f21cbee29 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-64.c @@ -0,0 +1,22 @@ +/* PR middle-end/114332 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c23 -fwrapv" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +enum E { E22 = 22 } e = E22; + +_BitInt (5) +foo (void) +{ + _Atomic _BitInt (5) b = 0; + b += e; + return b; +} + +int +main () +{ + if (foo () != -10) + __builtin_abort (); +} From 7dd3b2b09cbeb6712ec680a0445cb0ad41070423 Mon Sep 17 00:00:00 2001 From: Joe Ramsay <Joe.Ramsay@arm.com> Date: Fri, 15 Mar 2024 09:20:45 +0000 Subject: [PATCH 080/551] match.pd: Only merge truncation with conversion for -fno-signed-zeros This optimisation does not honour signed zeros, so should not be enabled except with -fno-signed-zeros. gcc/ChangeLog: * match.pd: Fix truncation pattern for -fno-signed-zeroes gcc/testsuite/ChangeLog: * gcc.target/aarch64/no_merge_trunc_signed_zero.c: New test. --- gcc/match.pd | 1 + .../aarch64/no_merge_trunc_signed_zero.c | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/no_merge_trunc_signed_zero.c diff --git a/gcc/match.pd b/gcc/match.pd index 9ce313323a30..15a1e7350d4a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -4858,6 +4858,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify (float (fix_trunc @0)) (if (!flag_trapping_math + && !HONOR_SIGNED_ZEROS (type) && types_match (type, TREE_TYPE (@0)) && direct_internal_fn_supported_p (IFN_TRUNC, type, OPTIMIZE_FOR_BOTH)) diff --git a/gcc/testsuite/gcc.target/aarch64/no_merge_trunc_signed_zero.c b/gcc/testsuite/gcc.target/aarch64/no_merge_trunc_signed_zero.c new file mode 100644 index 000000000000..b2c93e555677 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/no_merge_trunc_signed_zero.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-trapping-math -fsigned-zeros" } */ + +#include <math.h> + +float +f1 (float x) +{ + return (int) rintf(x); +} + +double +f2 (double x) +{ + return (long) rint(x); +} + +/* { dg-final { scan-assembler "frintx\\ts\[0-9\]+, s\[0-9\]+" } } */ +/* { dg-final { scan-assembler "cvtzs\\ts\[0-9\]+, s\[0-9\]+" } } */ +/* { dg-final { scan-assembler "scvtf\\ts\[0-9\]+, s\[0-9\]+" } } */ +/* { dg-final { scan-assembler "frintx\\td\[0-9\]+, d\[0-9\]+" } } */ +/* { dg-final { scan-assembler "cvtzs\\td\[0-9\]+, d\[0-9\]+" } } */ +/* { dg-final { scan-assembler "scvtf\\td\[0-9\]+, d\[0-9\]+" } } */ + From ab2da8fb67b1aa0557a16b62689a888730dba610 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 15 Mar 2024 10:46:47 +0100 Subject: [PATCH 081/551] i386: Fix a pasto in ix86_expand_int_sse_cmp [PR114339] In r13-3803-gfa271afb58 I've added an optimization for LE/LEU/GE/GEU comparison against CONST_VECTOR. As the comments say: /* x <= cst can be handled as x < cst + 1 unless there is wrap around in cst + 1. */ ... /* For LE punt if some element is signed maximum. */ ... /* For LEU punt if some element is unsigned maximum. */ and /* x >= cst can be handled as x > cst - 1 unless there is wrap around in cst - 1. */ ... /* For GE punt if some element is signed minimum. */ ... /* For GEU punt if some element is zero. */ Apparently I wrote the GE/GEU (second case) first and then copied/adjusted it for LE/LEU, most of the adjustments look correct, but I've left if (code == GE) comparison when testing if it should punt for signed maximum. That condition is never true, because this is in switch (code) { ... case LE: case LEU: block and we really meant to be what the comment says, for LE punt if some element is signed maximum, as then cst + 1 wraps around. The following patch fixes the pasto. 2024-03-15 Jakub Jelinek <jakub@redhat.com> PR target/114339 * config/i386/i386-expand.cc (ix86_expand_int_sse_cmp) <case LE>: Fix a pasto, compare code against LE rather than GE. * gcc.target/i386/pr114339.c: New test. --- gcc/config/i386/i386-expand.cc | 2 +- gcc/testsuite/gcc.target/i386/pr114339.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr114339.c diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 2210e6f7cc85..8bb8f21e6860 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -4690,7 +4690,7 @@ ix86_expand_int_sse_cmp (rtx dest, enum rtx_code code, rtx cop0, rtx cop1, rtx elt = CONST_VECTOR_ELT (cop1, i); if (!CONST_INT_P (elt)) break; - if (code == GE) + if (code == LE) { /* For LE punt if some element is signed maximum. */ if ((INTVAL (elt) & (GET_MODE_MASK (eltmode) >> 1)) diff --git a/gcc/testsuite/gcc.target/i386/pr114339.c b/gcc/testsuite/gcc.target/i386/pr114339.c new file mode 100644 index 000000000000..8fba3747cf12 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114339.c @@ -0,0 +1,20 @@ +/* PR target/114339 */ +/* { dg-do run } */ +/* { dg-options "-O2 -Wno-psabi" } */ +/* { dg-additional-options "-mavx" { target avx_runtime } } */ + +typedef long long V __attribute__((vector_size (16))); + +__attribute__((noipa)) V +foo (V a) +{ + return a <= (V) {0, __LONG_LONG_MAX__ }; +} + +int +main () +{ + V t = foo ((V) { 0, 0 }); + if (t[0] != -1LL || t[1] != -1LL) + __builtin_abort (); +} From 30e1c3d7e828b2bf2eee1660661bbc79f4151bd6 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 15 Mar 2024 12:20:04 +0100 Subject: [PATCH 082/551] lower-subreg, edit-context: Fix comment typos When backporting r14-9315 to 13 branch, I've noticed I've missed one letter in a comment. And grepping for similar issues I found one word with too many. 2024-03-15 Jakub Jelinek <jakub@redhat.com> * lower-subreg.cc (resolve_simple_move): Fix comment typo, betwee -> between. * edit-context.cc (class line_event): Fix comment typo, betweeen -> between. --- gcc/edit-context.cc | 2 +- gcc/lower-subreg.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/edit-context.cc b/gcc/edit-context.cc index b02da6e809ea..37ac4989de0b 100644 --- a/gcc/edit-context.cc +++ b/gcc/edit-context.cc @@ -129,7 +129,7 @@ class added_line }; /* Class for representing edit events that have occurred on one line of - one file: the replacement of some text betweeen some columns + one file: the replacement of some text between some columns on the line. Subsequent events will need their columns adjusting if they're diff --git a/gcc/lower-subreg.cc b/gcc/lower-subreg.cc index 2f7f0a83e237..d1da94336e75 100644 --- a/gcc/lower-subreg.cc +++ b/gcc/lower-subreg.cc @@ -933,7 +933,7 @@ resolve_simple_move (rtx set, rtx_insn *insn) if (reg_overlap_mentioned_p (XVECEXP (dest, 0, 0), XVECEXP (src, 0, 1))) { - /* If there is overlap betwee the first half of the + /* If there is overlap between the first half of the destination and what will be stored to the second one, use a temporary pseudo. See PR114211. */ rtx tem = gen_reg_rtx (GET_MODE (XVECEXP (src, 0, 1))); From b5e1f0696110fbf5c73426ede70562edc6f54481 Mon Sep 17 00:00:00 2001 From: YunQiang Su <syq@gcc.gnu.org> Date: Fri, 15 Mar 2024 21:22:40 +0800 Subject: [PATCH 083/551] Regenerate opt.urls Fixes: acc38ff59976 ("MIPS: Add -m(no-)strict-align option") gcc/ChangeLog: * config/riscv/riscv.opt.urls: Regenerated. * config/rs6000/sysv4.opt.urls: Likewise. * config/xtensa/xtensa.opt.urls: Likewise. --- gcc/config/riscv/riscv.opt.urls | 2 +- gcc/config/rs6000/sysv4.opt.urls | 2 +- gcc/config/xtensa/xtensa.opt.urls | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/config/riscv/riscv.opt.urls b/gcc/config/riscv/riscv.opt.urls index f40795866cfb..da31820e2343 100644 --- a/gcc/config/riscv/riscv.opt.urls +++ b/gcc/config/riscv/riscv.opt.urls @@ -44,7 +44,7 @@ UrlSuffix(gcc/RISC-V-Options.html#index-mshorten-memrefs) ; skipping UrlSuffix for 'mcmodel=' due to finding no URLs mstrict-align -UrlSuffix(gcc/RISC-V-Options.html#index-mstrict-align-3) +UrlSuffix(gcc/RISC-V-Options.html#index-mstrict-align-4) ; skipping UrlSuffix for 'mexplicit-relocs' due to finding no URLs diff --git a/gcc/config/rs6000/sysv4.opt.urls b/gcc/config/rs6000/sysv4.opt.urls index f8d58d6602cd..c155cddfa36c 100644 --- a/gcc/config/rs6000/sysv4.opt.urls +++ b/gcc/config/rs6000/sysv4.opt.urls @@ -12,7 +12,7 @@ mbit-align UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbit-align) mstrict-align -UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstrict-align-4) +UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mstrict-align-5) mrelocatable UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable) diff --git a/gcc/config/xtensa/xtensa.opt.urls b/gcc/config/xtensa/xtensa.opt.urls index 146db23d1e30..1f193a7da0c9 100644 --- a/gcc/config/xtensa/xtensa.opt.urls +++ b/gcc/config/xtensa/xtensa.opt.urls @@ -33,5 +33,5 @@ mabi=windowed UrlSuffix(gcc/Xtensa-Options.html#index-mabi_003dwindowed) mstrict-align -UrlSuffix(gcc/Xtensa-Options.html#index-mstrict-align-5) +UrlSuffix(gcc/Xtensa-Options.html#index-mstrict-align-6) From ffd47fb63ddc024db847daa07f8ae27fffdfcb28 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 15 Mar 2024 16:50:25 +0100 Subject: [PATCH 084/551] testsuite: Fix pr113431.c FAIL on sparc* [PR113431] As mentioned in the PR, the new testcase FAILs on sparc*-* due to lack of support of misaligned store. This patch restricts that to vect_hw_misalign targets. 2024-03-15 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/113431 * gcc.dg/vect/pr113431.c: Restrict scan-tree-dump-times to vect_hw_misalign targets. --- gcc/testsuite/gcc.dg/vect/pr113431.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/vect/pr113431.c b/gcc/testsuite/gcc.dg/vect/pr113431.c index 04448d9dd81d..2858a769d73c 100644 --- a/gcc/testsuite/gcc.dg/vect/pr113431.c +++ b/gcc/testsuite/gcc.dg/vect/pr113431.c @@ -15,4 +15,4 @@ int main() return 0; } -/* { dg-final { scan-tree-dump-times "optimized: basic block part vectorized" 2 "slp1" { target vect_int } } } */ +/* { dg-final { scan-tree-dump-times "optimized: basic block part vectorized" 2 "slp1" { target { vect_int && vect_hw_misalign } } } } */ From a6dab195f7041671166b9aa6a37e0db4236c829d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 15 Mar 2024 19:04:33 +0100 Subject: [PATCH 085/551] libgcc: Fix quotient and/or remainder negation in __divmodbitint4 [PR114327] While for __mulbitint3 we actually don't negate anything and perform the multiplication in unsigned style always, for __divmodbitint4 if the operands aren't unsigned and are negative, we negate them first and then try to negate them as needed at the end. quotient is negated if just one of the operands was negated and the other wasn't or vice versa, and remainder is negated if the first operand was negated. The case which doesn't work correctly is if due to limited range of the operands we perform the division/modulo in some smaller number of limbs and then extend it to the desired precision of the quotient and/or remainder results. If they aren't negated, the extension is done with memset to 0, if they are negated, the extension was done with memset to -1. The problem is that if the quotient or remainder is zero, then bitint_negate negates it again to zero (that is ok), but we should then extend with memset to 0, not memset to -1. The following patch achieves that by letting bitint_negate also check if the negated operand is zero and changes the memset argument based on that. 2024-03-15 Jakub Jelinek <jakub@redhat.com> PR libgcc/114327 * libgcc2.c (bitint_negate): Return UWtype bitwise or of all the limbs before negation rather than void. (__divmodbitint4): Determine whether to fill in the upper limbs after negation based on whether bitint_negate returned 0 or non-zero, rather then always filling with -1. * gcc.dg/torture/bitint-63.c: New test. --- gcc/testsuite/gcc.dg/torture/bitint-63.c | 30 ++++++++++++++++++++++++ libgcc/libgcc2.c | 19 ++++++++------- 2 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-63.c diff --git a/gcc/testsuite/gcc.dg/torture/bitint-63.c b/gcc/testsuite/gcc.dg/torture/bitint-63.c new file mode 100644 index 000000000000..97acba0fa1ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-63.c @@ -0,0 +1,30 @@ +/* PR libgcc/114327 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c23" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 256 +_BitInt(256) +foo (_BitInt(256) b, _BitInt(256) c) +{ + return b % c; +} + +_BitInt(256) +bar (_BitInt(256) b, _BitInt(256) c) +{ + return b / c; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 256 + if (foo (-0x9e9b9fe60wb, 1wb)) + __builtin_abort (); + if (bar (1wb, -0x9e9b9fe60wb)) + __builtin_abort (); +#endif +} diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c index ef46153731fd..dc856740a696 100644 --- a/libgcc/libgcc2.c +++ b/libgcc/libgcc2.c @@ -1642,19 +1642,22 @@ __mulbitint3 (UBILtype *ret, SItype retprec, #ifdef L_divmodbitint4 /* D = -S. */ -static void +static UWtype bitint_negate (UBILtype *d, const UBILtype *s, SItype n) { UWtype c = 1; + UWtype r = 0; do { UWtype sv = *s, lo; + r |= sv; s += BITINT_INC; c = __builtin_add_overflow (~sv, c, &lo); *d = lo; d += BITINT_INC; } while (--n); + return r; } /* D -= S * L. */ @@ -1977,10 +1980,10 @@ __divmodbitint4 (UBILtype *q, SItype qprec, n = qn; else n = un - vn + 1; - bitint_negate (q + BITINT_END (qn - 1, 0), - q2 + BITINT_END (un - vn, 0), n); + SItype c = bitint_negate (q + BITINT_END (qn - 1, 0), + q2 + BITINT_END (un - vn, 0), n) ? -1 : 0; if (qn > n) - __builtin_memset (q + BITINT_END (0, n), -1, + __builtin_memset (q + BITINT_END (0, n), c, (qn - n) * sizeof (UWtype)); } else @@ -1999,11 +2002,11 @@ __divmodbitint4 (UBILtype *q, SItype qprec, if (uprec < 0) { /* Negative remainder. */ - bitint_negate (r + BITINT_END (rn - 1, 0), - r + BITINT_END (rn - 1, 0), - rn > vn ? vn : rn); + SItype c = bitint_negate (r + BITINT_END (rn - 1, 0), + r + BITINT_END (rn - 1, 0), + rn > vn ? vn : rn) ? -1 : 0; if (rn > vn) - __builtin_memset (r + BITINT_END (0, vn), -1, + __builtin_memset (r + BITINT_END (0, vn), c, (rn - vn) * sizeof (UWtype)); } else From 53fb2cf75965e4dbcf145a12d8ae41f4667a8498 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sat, 16 Mar 2024 00:16:51 +0000 Subject: [PATCH 086/551] Daily bump. --- gcc/ChangeLog | 60 ++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/fortran/ChangeLog | 67 +++++++++++++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 56 ++++++++++++++++++++++++++++++++++ libgcc/ChangeLog | 9 ++++++ 5 files changed, 193 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e1668058773..d8398c942310 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,63 @@ +2024-03-15 YunQiang Su <syq@gcc.gnu.org> + + * config/riscv/riscv.opt.urls: Regenerated. + * config/rs6000/sysv4.opt.urls: Likewise. + * config/xtensa/xtensa.opt.urls: Likewise. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + * lower-subreg.cc (resolve_simple_move): Fix comment typo, + betwee -> between. + * edit-context.cc (class line_event): Fix comment typo, + betweeen -> between. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR target/114339 + * config/i386/i386-expand.cc (ix86_expand_int_sse_cmp) <case LE>: Fix + a pasto, compare code against LE rather than GE. + +2024-03-15 Joe Ramsay <Joe.Ramsay@arm.com> + + * match.pd: Fix truncation pattern for -fno-signed-zeroes + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114332 + * expr.cc (expand_expr_real_1): EXTEND_BITINT also CALL_EXPR results. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/113466 + * gimple-lower-bitint.cc (bitint_large_huge): Add m_returns_twice_calls + member. + (bitint_large_huge::bitint_large_huge): Initialize it. + (bitint_large_huge::~bitint_large_huge): Release it. + (bitint_large_huge::lower_call): Remember ECF_RETURNS_TWICE call stmts + before which at least one statement has been inserted. + (gimple_lower_bitint): Move argument loads before ECF_RETURNS_TWICE + calls to a different block and add corresponding PHIs. + +2024-03-15 YunQiang Su <syq@gcc.gnu.org> + + * config/mips/mips.opt: Support -mstrict-align, and use + TARGET_STRICT_ALIGN as the flag; keep -m(no-)unaligned-access + as alias. + * config/mips/mips.h: Use TARGET_STRICT_ALIGN. + * config/mips/mips.opt.urls: Regenerate. + * doc/invoke.texi: Document -m(no-)strict-algin for MIPSr6. + +2024-03-15 Tejas Belagod <tejas.belagod@arm.com> + + PR middle-end/114108 + * tree-vect-patterns.cc (vect_recog_abd_pattern): Call + vect_convert_output with the correct vecitype. + +2024-03-15 Chenghui Pan <panchenghui@loongson.cn> + + * config/loongarch/lasx.md (lasx_xvpermi_q_<LASX:mode>): + Remove masking of operand 3. + 2024-03-14 Jason Merrill <jason@redhat.com> * tree-core.h (enum clobber_kind): Clarify CLOBBER_OBJECT_* diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index d71dec2cf4d8..0c922a24f40c 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240315 +20240316 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 21a85a6266b6..7781daf40d2d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,70 @@ +2024-03-15 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/87477 + PR fortran/89645 + PR fortran/99065 + PR fortran/114141 + PR fortran/114280 + * class.cc (gfc_change_class): New function needed for + associate names, when rank changes or a derived type is + produced by resolution + * dump-parse-tree.cc (show_code_node): Make output for SELECT + TYPE more comprehensible. + * expr.cc (find_inquiry_ref): Do not simplify expressions of + an inferred type. + * gfortran.h : Add 'gfc_association_list' to structure + 'gfc_association_list'. Add prototypes for + 'gfc_find_derived_types', 'gfc_fixup_inferred_type_refs' and + 'gfc_change_class'. Add macro IS_INFERRED_TYPE. + * match.cc (copy_ts_from_selector_to_associate): Add bolean arg + 'select_type' with default false. If this is a select type name + and the selector is a inferred type, build the class type and + apply it to the associate name. + (build_associate_name): Pass true to 'select_type' in call to + previous. + * parse.cc (parse_associate): If the selector is inferred type + the associate name is too. Make sure that function selector + class and rank, if known, are passed to the associate name. If + a function result exists, pass its typespec to the associate + name. + * primary.cc (resolvable_fcns): New function to check that all + the function references are resolvable. + (gfc_match_varspec): If a scalar derived type select type + temporary has an array reference, match the array reference, + treating this in the same way as an equivalence member. Do not + set 'inquiry' if applied to an unknown type the inquiry name + is ambiguous with the component of an accessible derived type. + Check that resolution of the target expression is OK by testing + if the symbol is declared or is an operator expression, then + using 'resolvable_fcns' recursively. If all is well, resolve + the expression. If this is an inferred type with a component + reference, call 'gfc_find_derived_types' to find a suitable + derived type. If there is an inquiry ref and the symbol either + is of unknown type or is inferred to be a derived type, set the + primary and symbol TKR appropriately. + * resolve.cc (resolve_variable): Call new function below. + (gfc_fixup_inferred_type_refs): New function to ensure that the + expression references for a inferred type are consistent with + the now fixed up selector. + (resolve_assoc_var): Ensure that derived type or class function + selectors transmit the correct arrayspec to the associate name. + (resolve_select_type): If the selector is an associate name of + inferred type and has no component references, the associate + name should have its typespec. Simplify the conversion of a + class array to class scalar by calling 'gfc_change_class'. + Make sure that a class, inferred type selector with an array + ref transfers the typespec from the symbol to the expression. + * symbol.cc (gfc_set_default_type): If an associate name with + unknown type has a selector expression, try resolving the expr. + (find_derived_types, gfc_find_derived_types): New functions + that search for a derived type with a given name. + * trans-expr.cc (gfc_conv_variable): Some inferred type exprs + escape resolution so call 'gfc_fixup_inferred_type_refs'. + * trans-stmt.cc (trans_associate_var): Tidy up expression for + 'class_target'. Finalize and free class function results. + Correctly handle selectors that are class functions and class + array references, passed as derived types. + 2024-03-14 Thomas Schwinge <thomas@codesourcery.com> * dump-parse-tree.cc (show_omp_clauses): Handle 'self_expr'. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b8e5161ea61b..6167f0b8dbfb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,59 @@ +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR libgcc/114327 + * gcc.dg/torture/bitint-63.c: New test. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/113431 + * gcc.dg/vect/pr113431.c: Restrict scan-tree-dump-times to + vect_hw_misalign targets. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR target/114339 + * gcc.target/i386/pr114339.c: New test. + +2024-03-15 Joe Ramsay <Joe.Ramsay@arm.com> + + * gcc.target/aarch64/no_merge_trunc_signed_zero.c: New test. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114332 + * gcc.dg/torture/bitint-64.c: New file. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/torture/pr104601.C: Add -Wno-unused-result to dg-options. + +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/113466 + * gcc.dg/bitint-100.c: New test. + +2024-03-15 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/87477 + PR fortran/89645 + PR fortran/99065 + PR fortran/114141 + PR fortran/114280 + * gfortran.dg/associate_64.f90 : New test + * gfortran.dg/associate_66.f90 : New test + * gfortran.dg/associate_67.f90 : New test + * gfortran.dg/associate_65.f90 : New test + * gfortran.dg/associate_68.f90 : New test + +2024-03-15 Tejas Belagod <tejas.belagod@arm.com> + + * gcc.dg/vect/pr114108.c: New test. + +2024-03-15 Chenghui Pan <panchenghui@loongson.cn> + + * gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c: + Reposition operand 3's value into instruction's defined accept range. + 2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114294 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 0ceb4eb9fd0a..cbe15b929196 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,12 @@ +2024-03-15 Jakub Jelinek <jakub@redhat.com> + + PR libgcc/114327 + * libgcc2.c (bitint_negate): Return UWtype bitwise or of all the limbs + before negation rather than void. + (__divmodbitint4): Determine whether to fill in the upper limbs after + negation based on whether bitint_negate returned 0 or non-zero, rather + then always filling with -1. + 2024-02-22 Kewen Lin <linkw@linux.ibm.com> PR target/109987 From 5213047b1d50af63dfabb5e5649821a6cb157e33 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> Date: Sat, 16 Mar 2024 09:50:00 +0100 Subject: [PATCH 087/551] libcc1: fix <vector> include Use INCLUDE_VECTOR before including system.h, instead of directly including <vector>, to avoid running into poisoned identifiers. Signed-off-by: Dimitry Andric <dimitry@andric.com> libcc1/ChangeLog: PR middle-end/111632 * libcc1plugin.cc: Fix include. * libcp1plugin.cc: Fix include. --- libcc1/libcc1plugin.cc | 3 +-- libcc1/libcp1plugin.cc | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/libcc1/libcc1plugin.cc b/libcc1/libcc1plugin.cc index 72d17c3b81c5..e64847466f4d 100644 --- a/libcc1/libcc1plugin.cc +++ b/libcc1/libcc1plugin.cc @@ -32,6 +32,7 @@ #undef PACKAGE_VERSION #define INCLUDE_MEMORY +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "system.h" #include "coretypes.h" @@ -69,8 +70,6 @@ #include "gcc-c-interface.h" #include "context.hh" -#include <vector> - using namespace cc1_plugin; diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc index 0eff7c68d298..da68c5d0ac1b 100644 --- a/libcc1/libcp1plugin.cc +++ b/libcc1/libcp1plugin.cc @@ -33,6 +33,7 @@ #undef PACKAGE_VERSION #define INCLUDE_MEMORY +#define INCLUDE_VECTOR #include "gcc-plugin.h" #include "system.h" #include "coretypes.h" @@ -71,8 +72,6 @@ #include "rpc.hh" #include "context.hh" -#include <vector> - using namespace cc1_plugin; From ead3075406ece9daaad65a01ae539150aee43f5a Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Tue, 12 Mar 2024 23:24:27 +1100 Subject: [PATCH 088/551] c++: Check module attachment instead of just purview when necessary [PR112631] Block-scope declarations of functions or extern values are not allowed when attached to a named module. Similarly, class member functions are not inline if attached to a named module. However, in both these cases we currently only check if the declaration is within the module purview; it is possible for such a declaration to occur within the module purview but not be attached to a named module (e.g. in an 'extern "C++"' block). This patch makes the required adjustments. PR c++/112631 gcc/cp/ChangeLog: * cp-tree.h (named_module_attach_p): New function. * decl.cc (start_decl): Check for attachment not purview. (grokmethod): Likewise. gcc/testsuite/ChangeLog: * g++.dg/modules/block-decl-1_a.C: New test. * g++.dg/modules/block-decl-1_b.C: New test. * g++.dg/modules/block-decl-2.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> --- gcc/cp/cp-tree.h | 2 ++ gcc/cp/decl.cc | 10 ++++----- gcc/testsuite/g++.dg/modules/block-decl-1_a.C | 9 ++++++++ gcc/testsuite/g++.dg/modules/block-decl-1_b.C | 10 +++++++++ gcc/testsuite/g++.dg/modules/block-decl-2.C | 21 +++++++++++++++++++ 5 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/block-decl-1_a.C create mode 100644 gcc/testsuite/g++.dg/modules/block-decl-1_b.C create mode 100644 gcc/testsuite/g++.dg/modules/block-decl-2.C diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 14895bc65850..05913861e06e 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7381,6 +7381,8 @@ inline bool module_attach_p () inline bool named_module_purview_p () { return named_module_p () && module_purview_p (); } +inline bool named_module_attach_p () +{ return named_module_p () && module_attach_p (); } /* We're currently exporting declarations. */ inline bool module_exporting_p () diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index dbc3df24e77f..7a97b8671991 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -6092,10 +6092,10 @@ start_decl (const cp_declarator *declarator, { /* A function-scope decl of some namespace-scope decl. */ DECL_LOCAL_DECL_P (decl) = true; - if (named_module_purview_p ()) + if (named_module_attach_p ()) error_at (declarator->id_loc, - "block-scope extern declaration %q#D not permitted" - " in module purview", decl); + "block-scope extern declaration %q#D must not be" + " attached to a named module", decl); } /* Enter this declaration into the symbol table. Don't push the plain @@ -18907,10 +18907,10 @@ grokmethod (cp_decl_specifier_seq *declspecs, check_template_shadow (fndecl); /* p1779 ABI-Isolation makes inline not a default for in-class - definitions in named module purview. If the user explicitly + definitions attached to a named module. If the user explicitly made it inline, grokdeclarator will already have done the right things. */ - if ((!named_module_purview_p () + if ((!named_module_attach_p () || flag_module_implicit_inline /* Lambda's operator function remains inline. */ || LAMBDA_TYPE_P (DECL_CONTEXT (fndecl))) diff --git a/gcc/testsuite/g++.dg/modules/block-decl-1_a.C b/gcc/testsuite/g++.dg/modules/block-decl-1_a.C new file mode 100644 index 000000000000..e7ffc6291926 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/block-decl-1_a.C @@ -0,0 +1,9 @@ +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi bla } + +export module bla; + +export extern "C++" inline void fun() { + void oops(); // { dg-bogus "block-scope extern declaration" } + oops(); +} diff --git a/gcc/testsuite/g++.dg/modules/block-decl-1_b.C b/gcc/testsuite/g++.dg/modules/block-decl-1_b.C new file mode 100644 index 000000000000..c0d724f25ac0 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/block-decl-1_b.C @@ -0,0 +1,10 @@ +// { dg-module-do link } +// { dg-additional-options "-fmodules-ts" } + +import bla; + +void oops() {} + +int main() { + fun(); +} diff --git a/gcc/testsuite/g++.dg/modules/block-decl-2.C b/gcc/testsuite/g++.dg/modules/block-decl-2.C new file mode 100644 index 000000000000..974e26f9b7ae --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/block-decl-2.C @@ -0,0 +1,21 @@ +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi !mod } + +export module mod; + +namespace { + void internal() {} +} + +export extern "C++" auto foo() { + struct X { + // `foo` is not attached to a named module, and as such + // `X::f` should be implicitly `inline` here + void f() { // { dg-error "references internal linkage entity" } + internal(); + } + }; + return X{}; +} + +// { dg-prune-output "failed to write compiled module" } From 3e8323e873c5af5047507d6b2cfbd12706820ee2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Sat, 16 Mar 2024 15:15:29 +0100 Subject: [PATCH 089/551] bitint: Fix up stores to large/huge _BitInt bitfields [PR114329] The verifier requires BIT_FIELD_REFs with INTEGRAL_TYPE_P first operand to have mode precision. In most cases for the large/huge _BitInt bitfield stores the code uses bitfield representatives, which are typically arrays of chars, but if the bitfield starts at byte boundary on big endian, the code uses as nlhs in lower_mergeable_store COMPONENT_REF of the bitfield FIELD_DECL instead, which is fine for the limb accesses, but when used for the most significant limb can result in invalid BIT_FIELD_REF because the first operand then has BITINT_TYPE and usually VOIDmode. The following patch adds a helper method for the 4 creatikons of BIT_FIELD_REF which when needed adds a VIEW_CONVERT_EXPR. 2024-03-16 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114329 * gimple-lower-bitint.cc (struct bitint_large_huge): Declare build_bit_field_ref method. (bitint_large_huge::build_bit_field_ref): New method. (bitint_large_huge::lower_mergeable_stmt): Use it. * gcc.dg/bitint-101.c: New test. --- gcc/gimple-lower-bitint.cc | 62 ++++++++++++++++++++++--------- gcc/testsuite/gcc.dg/bitint-101.c | 17 +++++++++ 2 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/bitint-101.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 42c39d8a47af..40d814e5c38f 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -427,6 +427,8 @@ struct bitint_large_huge void insert_before (gimple *); tree limb_access_type (tree, tree); tree limb_access (tree, tree, tree, bool); + tree build_bit_field_ref (tree, tree, unsigned HOST_WIDE_INT, + unsigned HOST_WIDE_INT); void if_then (gimple *, profile_probability, edge &, edge &); void if_then_else (gimple *, profile_probability, edge &, edge &); void if_then_if_then_else (gimple *g, gimple *, @@ -659,6 +661,31 @@ bitint_large_huge::limb_access (tree type, tree var, tree idx, bool write_p) return ret; } +/* Build a BIT_FIELD_REF to access BITSIZE bits with FTYPE type at + offset BITPOS inside of OBJ. */ + +tree +bitint_large_huge::build_bit_field_ref (tree ftype, tree obj, + unsigned HOST_WIDE_INT bitsize, + unsigned HOST_WIDE_INT bitpos) +{ + if (INTEGRAL_TYPE_P (TREE_TYPE (obj)) + && !type_has_mode_precision_p (TREE_TYPE (obj))) + { + unsigned HOST_WIDE_INT nelts + = CEIL (tree_to_uhwi (TYPE_SIZE (TREE_TYPE (obj))), limb_prec); + tree ltype = m_limb_type; + addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (obj)); + if (as != TYPE_ADDR_SPACE (ltype)) + ltype = build_qualified_type (ltype, TYPE_QUALS (ltype) + | ENCODE_QUAL_ADDR_SPACE (as)); + tree atype = build_array_type_nelts (ltype, nelts); + obj = build1 (VIEW_CONVERT_EXPR, atype, obj); + } + return build3 (BIT_FIELD_REF, ftype, obj, bitsize_int (bitsize), + bitsize_int (bitpos)); +} + /* Emit a half diamond, if (COND) |\ @@ -2651,9 +2678,9 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, } tree ftype = build_nonstandard_integer_type (limb_prec - bo_bit, 1); - tree bfr = build3 (BIT_FIELD_REF, ftype, unshare_expr (nlhs), - bitsize_int (limb_prec - bo_bit), - bitsize_int (bo_idx * limb_prec + bo_bit)); + tree bfr = build_bit_field_ref (ftype, unshare_expr (nlhs), + limb_prec - bo_bit, + bo_idx * limb_prec + bo_bit); tree t = add_cast (ftype, rhs1); g = gimple_build_assign (bfr, t); insert_before (g); @@ -2714,12 +2741,11 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, { tree ftype = build_nonstandard_integer_type (rprec + bo_bit, 1); - tree bfr = build3 (BIT_FIELD_REF, ftype, - unshare_expr (nlhs), - bitsize_int (rprec + bo_bit), - bitsize_int ((bo_idx - + tprec / limb_prec) - * limb_prec)); + tree bfr + = build_bit_field_ref (ftype, unshare_expr (nlhs), + rprec + bo_bit, + (bo_idx + tprec / limb_prec) + * limb_prec); tree t = add_cast (ftype, rhs1); g = gimple_build_assign (bfr, t); done = true; @@ -2860,11 +2886,11 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, { tree ftype = build_nonstandard_integer_type (rprec + bo_bit, 1); - tree bfr = build3 (BIT_FIELD_REF, ftype, - unshare_expr (nlhs), - bitsize_int (rprec + bo_bit), - bitsize_int ((bo_idx + tprec / limb_prec) - * limb_prec)); + tree bfr + = build_bit_field_ref (ftype, unshare_expr (nlhs), + rprec + bo_bit, + (bo_idx + tprec / limb_prec) + * limb_prec); tree t = add_cast (ftype, rhs1); g = gimple_build_assign (bfr, t); done = true; @@ -2909,10 +2935,10 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, unsigned int tprec = TYPE_PRECISION (type); unsigned int rprec = tprec % limb_prec; tree ftype = build_nonstandard_integer_type (rprec + bo_bit, 1); - tree bfr = build3 (BIT_FIELD_REF, ftype, unshare_expr (nlhs), - bitsize_int (rprec + bo_bit), - bitsize_int ((bo_idx + tprec / limb_prec) - * limb_prec)); + tree bfr = build_bit_field_ref (ftype, unshare_expr (nlhs), + rprec + bo_bit, + (bo_idx + tprec / limb_prec) + * limb_prec); rhs1 = bf_cur; if (bf_cur != ext) { diff --git a/gcc/testsuite/gcc.dg/bitint-101.c b/gcc/testsuite/gcc.dg/bitint-101.c new file mode 100644 index 000000000000..f6ff524e722d --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-101.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/114329 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-std=c23" } */ + +#if __BITINT_MAXWIDTH__ >= 129 +#define N 129 +#else +#define N 63 +#endif + +struct S { _BitInt(N) b : N; } s; + +void +foo (void) +{ + s.b ^= 42; +} From 218d17496122abe1fd831bd003f129310b32ca83 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Sat, 16 Mar 2024 15:16:33 +0100 Subject: [PATCH 090/551] i386: Fix setup of incoming varargs for (...) functions which return large aggregates [PR114175] The c23-stdarg-6.c testcase I've added recently apparently works fine with -O0 but aborts with -O1 and higher on x86_64-linux. The problem is in setup of incoming varargs. Like function.cc before r14-9249 even ix86_setup_incoming_varargs assumes that TYPE_NO_NAMED_ARGS_STDARG_P don't have any named arguments and there is nothing to advance, but that is not the case for (...) functions returning by hidden reference which have one such artificial argument. If the setup_incoming_varargs hook is called from the if (TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (fndecl)) && fnargs.is_empty ()) { struct assign_parm_data_one data = {}; assign_parms_setup_varargs (&all, &data, false); } spot, i.e. where there is no hidden return argument passed, arg.type is always NULL, while when it is called in the if (cfun->stdarg && !DECL_CHAIN (parm)) assign_parms_setup_varargs (&all, &data, false); spot, even when it is TYPE_NO_NAMED_ARGS_STDARG_P arg.type will be non-NULL. The tree-stdarg.cc pass in f in c23-stdarg-6.cc at -O1 or higher determines that va_arg is used on integral types at most twice (loads 2 words), and because ix86_setup_incoming_varargs doesn't advance, the code saves just the %rdi and %rsi registers to the save area. But that isn't correct, it should save %rsi and %rdx because %rdi is the hidden return argument. With -O0 tree-stdarg.cc doesn't attempt to optimize and we save all the registers, so it works fine in that case. Now, I think we'll need the same fix also on aarch64, alpha, arc, csky, ia64, loongarch, mips, mmix, nios2, riscv, visium which have pretty much the similarly looking snippet in their hooks changed by the r13-3549 commit. Then arm, epiphany, fr30, frv, ft32, m32r, mcore, nds32, rs6000, sh have different changes but most likely need something similar too. I don't have access to most of those, could test aarch64 and rs6000 I guess. 2024-03-16 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/i386/i386.cc (ix86_setup_incoming_varargs): Only skip ix86_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. * gcc.dg/c23-stdarg-7.c: New test. * gcc.dg/c23-stdarg-8.c: New test. --- gcc/config/i386/i386.cc | 3 ++- gcc/testsuite/gcc.dg/c23-stdarg-7.c | 6 ++++++ gcc/testsuite/gcc.dg/c23-stdarg-8.c | 6 ++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/c23-stdarg-7.c create mode 100644 gcc/testsuite/gcc.dg/c23-stdarg-8.c diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 4b6b665e5997..2357ba3f4c6b 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -4643,7 +4643,8 @@ ix86_setup_incoming_varargs (cumulative_args_t cum_v, /* For varargs, we do not want to skip the dummy va_dcl argument. For stdargs, we do want to skip the last named argument. */ next_cum = *cum; - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + if ((!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) && stdarg_p (fntype)) ix86_function_arg_advance (pack_cumulative_args (&next_cum), arg); diff --git a/gcc/testsuite/gcc.dg/c23-stdarg-7.c b/gcc/testsuite/gcc.dg/c23-stdarg-7.c new file mode 100644 index 000000000000..b05a9623cd73 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-stdarg-7.c @@ -0,0 +1,6 @@ +/* Test C23 variadic functions with no named parameters, or last named + parameter with a declaration not allowed in C17. Execution tests. */ +/* { dg-do run } */ +/* { dg-options "-O2 -std=c23 -pedantic-errors" } */ + +#include "c23-stdarg-4.c" diff --git a/gcc/testsuite/gcc.dg/c23-stdarg-8.c b/gcc/testsuite/gcc.dg/c23-stdarg-8.c new file mode 100644 index 000000000000..81140312731f --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-stdarg-8.c @@ -0,0 +1,6 @@ +/* Test C23 variadic functions with no named parameters, or last named + parameter with a declaration not allowed in C17. Execution tests. */ +/* { dg-do run } */ +/* { dg-options "-O2 -std=c23 -pedantic-errors" } */ + +#include "c23-stdarg-6.c" From b5490afe3a480fb20eae7b93f8da203aa7f843b4 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sun, 17 Mar 2024 00:17:21 +0000 Subject: [PATCH 091/551] Daily bump. --- gcc/ChangeLog | 15 +++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 18 ++++++++++++++++++ libcc1/ChangeLog | 6 ++++++ 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d8398c942310..9e546f261cc3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2024-03-16 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/i386/i386.cc (ix86_setup_incoming_varargs): Only skip + ix86_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-16 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114329 + * gimple-lower-bitint.cc (struct bitint_large_huge): Declare + build_bit_field_ref method. + (bitint_large_huge::build_bit_field_ref): New method. + (bitint_large_huge::lower_mergeable_stmt): Use it. + 2024-03-15 YunQiang Su <syq@gcc.gnu.org> * config/riscv/riscv.opt.urls: Regenerated. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 0c922a24f40c..7495d4c64229 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240316 +20240317 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 05fd84c60cea..504bca895ca5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2024-03-16 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/112631 + * cp-tree.h (named_module_attach_p): New function. + * decl.cc (start_decl): Check for attachment not purview. + (grokmethod): Likewise. + 2024-03-14 Chung-Lin Tang <cltang@baylibre.com> * parser.cc (cp_parser_oacc_data_clause): Add parsing support for diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6167f0b8dbfb..3092127fbf37 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,21 @@ +2024-03-16 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * gcc.dg/c23-stdarg-7.c: New test. + * gcc.dg/c23-stdarg-8.c: New test. + +2024-03-16 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114329 + * gcc.dg/bitint-101.c: New test. + +2024-03-16 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/112631 + * g++.dg/modules/block-decl-1_a.C: New test. + * g++.dg/modules/block-decl-1_b.C: New test. + * g++.dg/modules/block-decl-2.C: New test. + 2024-03-15 Jakub Jelinek <jakub@redhat.com> PR libgcc/114327 diff --git a/libcc1/ChangeLog b/libcc1/ChangeLog index 8b13a062366c..32e4a5c6e1ab 100644 --- a/libcc1/ChangeLog +++ b/libcc1/ChangeLog @@ -1,3 +1,9 @@ +2024-03-16 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + PR middle-end/111632 + * libcc1plugin.cc: Fix include. + * libcp1plugin.cc: Fix include. + 2024-02-29 Tom Tromey <tom@tromey.com> PR libcc1/113977 From 2d454f982914c481a268f1c63e431b2682cc3be0 Mon Sep 17 00:00:00 2001 From: Iain Buclaw <ibuclaw@gdcproject.org> Date: Sun, 17 Mar 2024 12:00:57 +0100 Subject: [PATCH 092/551] d: Merge upstream dmd, druntime 855353a1d9 D front-end changes: - Import dmd v2.108.0-rc.1. - Add support for Named Arguments for functions. - Hex strings now convert to integer arrays. D runtime changes: - Import druntime v2.108.0-rc.1. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 855353a1d9. * dmd/VERSION: libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 855353a1d9. --- gcc/d/dmd/MERGE | 2 +- gcc/d/dmd/VERSION | 2 +- gcc/d/dmd/cxxfrontend.d | 10 +++ gcc/d/dmd/dcast.d | 31 ++++--- gcc/d/dmd/dinterpret.d | 2 +- gcc/d/dmd/dsymbolsem.d | 7 +- gcc/d/dmd/dtemplate.d | 48 +++++++++-- gcc/d/dmd/enum.h | 6 ++ gcc/d/dmd/expression.h | 15 ++++ gcc/d/dmd/expressionsem.d | 9 +- gcc/d/dmd/hdrgen.d | 3 +- gcc/d/dmd/lexer.d | 1 - gcc/d/dmd/mtype.d | 17 ++-- gcc/d/dmd/mtype.h | 5 +- gcc/d/dmd/root/filename.d | 2 +- gcc/d/dmd/root/filename.h | 2 +- gcc/d/dmd/template.h | 16 +--- gcc/d/dmd/templatesem.d | 85 ++++++++++++------- gcc/d/dmd/typesem.d | 16 +++- .../compilable/named_arguments_auto_ref.d | 39 +++++++++ .../compilable/named_arguments_ifti.d | 27 ++++++ .../gdc.test/fail_compilation/hexstring.d | 5 +- .../fail_compilation/named_arguments_error.d | 11 ++- .../named_arguments_ifti_error.d | 20 +++++ gcc/testsuite/gdc.test/runnable/literal.d | 10 ++- libphobos/libdruntime/MERGE | 2 +- .../core/internal/gc/impl/conservative/gc.d | 4 +- .../core/internal/gc/impl/manual/gc.d | 2 +- .../core/internal/gc/impl/proto/gc.d | 2 +- 29 files changed, 294 insertions(+), 107 deletions(-) create mode 100644 gcc/testsuite/gdc.test/compilable/named_arguments_auto_ref.d create mode 100644 gcc/testsuite/gdc.test/compilable/named_arguments_ifti.d create mode 100644 gcc/testsuite/gdc.test/fail_compilation/named_arguments_ifti_error.d diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index 4c0a0bc2aac4..a00872ef864d 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -f8bae0455851a1dfc8113d69323415f6de549e39 +855353a1d9e16d43e85b6cf2b03aef388619bd16 The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/VERSION b/gcc/d/dmd/VERSION index 416807683f5a..8ca452f89122 100644 --- a/gcc/d/dmd/VERSION +++ b/gcc/d/dmd/VERSION @@ -1 +1 @@ -v2.108.0-beta.1 +v2.108.0-rc.1 diff --git a/gcc/d/dmd/cxxfrontend.d b/gcc/d/dmd/cxxfrontend.d index 8c0463434686..a0432d2e1b46 100644 --- a/gcc/d/dmd/cxxfrontend.d +++ b/gcc/d/dmd/cxxfrontend.d @@ -14,6 +14,7 @@ import dmd.aggregate : AggregateDeclaration; import dmd.arraytypes; import dmd.astenums; import dmd.common.outbuffer : OutBuffer; +import dmd.denum : EnumDeclaration; import dmd.dmodule /*: Module*/; import dmd.dscope : Scope; import dmd.dstruct /*: StructDeclaration*/; @@ -213,6 +214,15 @@ void genCppHdrFiles(ref Modules ms) return dmd.dtoh.genCppHdrFiles(ms); } +/*********************************************************** + * enumsem.d + */ +Expression getDefaultValue(EnumDeclaration ed, const ref Loc loc) +{ + import dmd.enumsem; + return dmd.enumsem.getDefaultValue(ed, loc); +} + /*********************************************************** * expression.d */ diff --git a/gcc/d/dmd/dcast.d b/gcc/d/dmd/dcast.d index a49bd575f4bb..8a713f424d64 100644 --- a/gcc/d/dmd/dcast.d +++ b/gcc/d/dmd/dcast.d @@ -629,7 +629,7 @@ MATCH implicitConvTo(Expression e, Type t) TY tyn = e.type.nextOf().ty; - if (!tyn.isSomeChar) + if (!tyn.isSomeChar && !e.hexString) return visit(e); switch (t.ty) @@ -703,6 +703,11 @@ MATCH implicitConvTo(Expression e, Type t) return MATCH.nomatch; m = MATCH.constant; } + if (e.hexString && tn.isintegral && (tn.size == e.sz || (!e.committed && (e.len % tn.size) == 0))) + { + m = MATCH.convert; + return m; + } if (!e.committed) { switch (tn.ty) @@ -719,9 +724,6 @@ MATCH implicitConvTo(Expression e, Type t) if (e.postfix != 'd') m = MATCH.convert; return m; - case Tint8: - case Tuns8: - break; case Tenum: if (tn.isTypeEnum().sym.isSpecial()) { @@ -735,14 +737,6 @@ MATCH implicitConvTo(Expression e, Type t) break; } } - if (e.hexString) - { - if (tn.isintegral && tn.size == e.sz) - { - m = MATCH.convert; - return m; - } - } break; default: @@ -1884,6 +1878,19 @@ Expression castTo(Expression e, Scope* sc, Type t, Type att = null) Type tb = t.toBasetype(); Type typeb = e.type.toBasetype(); + if (e.hexString && !e.committed) + { + const szx = cast(ubyte) tb.nextOf().size(); + if (szx != se.sz && (e.len % szx) == 0) + { + import dmd.utils: arrayCastBigEndian; + const data = e.peekData(); + se.setData(arrayCastBigEndian(data, szx).ptr, data.length / szx, szx); + se.type = t; + return se; + } + } + //printf("\ttype = %s\n", e.type.toChars()); if (tb.ty == Tdelegate && typeb.ty != Tdelegate) { diff --git a/gcc/d/dmd/dinterpret.d b/gcc/d/dmd/dinterpret.d index c4924903f25a..5493fc188812 100644 --- a/gcc/d/dmd/dinterpret.d +++ b/gcc/d/dmd/dinterpret.d @@ -6118,7 +6118,7 @@ public: return; } - auto str = arrayCastBigEndian((cast(const ubyte[]) se.peekString()), sz); + auto str = arrayCastBigEndian(se.peekData(), sz); emplaceExp!(StringExp)(pue, e1.loc, str, se.len / sz, cast(ubyte) sz); result = pue.exp(); result.type = e.to; diff --git a/gcc/d/dmd/dsymbolsem.d b/gcc/d/dmd/dsymbolsem.d index bb0a1d6e2cc9..b13f98aee73b 100644 --- a/gcc/d/dmd/dsymbolsem.d +++ b/gcc/d/dmd/dsymbolsem.d @@ -4621,12 +4621,11 @@ void templateInstanceSemantic(TemplateInstance tempinst, Scope* sc, ArgumentList return aliasInstanceSemantic(tempinst, sc, tempdecl); } - Expressions* fargs = argumentList.arguments; // TODO: resolve named args /* See if there is an existing TemplateInstantiation that already * implements the typeargs. If so, just refer to that one instead. */ - tempinst.inst = tempdecl.findExistingInstance(tempinst, fargs); + tempinst.inst = tempdecl.findExistingInstance(tempinst, argumentList); TemplateInstance errinst = null; if (!tempinst.inst) { @@ -4874,7 +4873,7 @@ void templateInstanceSemantic(TemplateInstance tempinst, Scope* sc, ArgumentList /* If function template declaration */ - if (fargs && tempinst.aliasdecl) + if (argumentList.length > 0 && tempinst.aliasdecl) { if (auto fd = tempinst.aliasdecl.isFuncDeclaration()) { @@ -4883,7 +4882,7 @@ void templateInstanceSemantic(TemplateInstance tempinst, Scope* sc, ArgumentList */ if (fd.type) if (auto tf = fd.type.isTypeFunction()) - tf.fargs = fargs; + tf.inferenceArguments = argumentList; } } diff --git a/gcc/d/dmd/dtemplate.d b/gcc/d/dmd/dtemplate.d index 165a010059f9..d181facfc249 100644 --- a/gcc/d/dmd/dtemplate.d +++ b/gcc/d/dmd/dtemplate.d @@ -828,16 +828,24 @@ extern (C++) final class TemplateDeclaration : ScopeDsymbol } /**************************************************** - * Given a new instance tithis of this TemplateDeclaration, + * Given a new instance `tithis` of this TemplateDeclaration, * see if there already exists an instance. - * If so, return that existing instance. + * + * Params: + * tithis = template instance to check + * argumentList = For function templates, needed because different + * `auto ref` resolutions create different instances, + * even when template parameters are identical + * + * Returns: that existing instance, or `null` when it doesn't exist */ - extern (D) TemplateInstance findExistingInstance(TemplateInstance tithis, Expressions* fargs) + extern (D) TemplateInstance findExistingInstance(TemplateInstance tithis, ArgumentList argumentList) { //printf("findExistingInstance() %s\n", tithis.toChars()); - tithis.fargs = fargs; + tithis.fargs = argumentList.arguments; + tithis.fnames = argumentList.names; auto tibox = TemplateInstanceBox(tithis); - auto p = tibox in instances; + auto p = tibox in this.instances; debug (FindExistingInstance) ++(p ? nFound : nNotFound); //if (p) printf("\tfound %p\n", *p); else printf("\tnot found\n"); return p ? *p : null; @@ -3674,7 +3682,12 @@ extern (C++) class TemplateInstance : ScopeDsymbol TemplateInstance inst; // refer to existing instance ScopeDsymbol argsym; // argument symbol table size_t hash; // cached result of toHash() - Expressions* fargs; // for function template, these are the function arguments + + /// For function template, these are the function names and arguments + /// Relevant because different resolutions of `auto ref` parameters + /// create different template instances even with the same template arguments + Expressions* fargs; + Identifiers* fnames; TemplateInstances* deferred; @@ -3974,6 +3987,19 @@ extern (C++) class TemplateInstance : ScopeDsymbol { if (!fd.errors) { + auto resolvedArgs = fd.type.isTypeFunction().resolveNamedArgs( + ArgumentList(this.fargs, this.fnames), null); + + // resolvedArgs can be null when there's an error: fail_compilation/fail14669.d + // In that case, equalsx returns true to prevent endless template instantiations + // However, it can also mean the function was explicitly instantiated + // without function arguments: fail_compilation/fail14669 + // Hence the following check: + if (this.fargs && !resolvedArgs) + return true; + + Expression[] args = resolvedArgs ? (*resolvedArgs)[] : []; + auto fparameters = fd.getParameterList(); size_t nfparams = fparameters.length; // Num function parameters for (size_t j = 0; j < nfparams; j++) @@ -3981,7 +4007,12 @@ extern (C++) class TemplateInstance : ScopeDsymbol Parameter fparam = fparameters[j]; if (fparam.storageClass & STC.autoref) // if "auto ref" { - Expression farg = fargs && j < fargs.length ? (*fargs)[j] : fparam.defaultArg; + Expression farg = (j < args.length) ? args[j] : fparam.defaultArg; + // resolveNamedArgs strips trailing nulls / default params + // when it doesn't anymore, the ternary can be replaced with: + // assert(j < resolvedArgs.length); + if (!farg) + farg = fparam.defaultArg; if (!farg) goto Lnotequals; if (farg.isLvalue()) @@ -5723,8 +5754,7 @@ extern (C++) final class TemplateMixin : TemplateInstance /************************************ * This struct is needed for TemplateInstance to be the key in an associative array. - * Fixing https://issues.dlang.org/show_bug.cgi?id=15812 and - * https://issues.dlang.org/show_bug.cgi?id=15813 would make it unnecessary. + * Fixing https://issues.dlang.org/show_bug.cgi?id=15813 would make it unnecessary. */ struct TemplateInstanceBox { diff --git a/gcc/d/dmd/enum.h b/gcc/d/dmd/enum.h index 650bf3e2c7cd..4e6fbe2cacfb 100644 --- a/gcc/d/dmd/enum.h +++ b/gcc/d/dmd/enum.h @@ -17,6 +17,12 @@ class Identifier; class Type; class Expression; +namespace dmd +{ + // in enumsem.d + Expression *getDefaultValue(EnumDeclaration *ed, const Loc &loc); +} + class EnumDeclaration final : public ScopeDsymbol { public: diff --git a/gcc/d/dmd/expression.h b/gcc/d/dmd/expression.h index 9cd73a965ba0..2f6bb84acb9b 100644 --- a/gcc/d/dmd/expression.h +++ b/gcc/d/dmd/expression.h @@ -800,6 +800,21 @@ class DotTypeExp final : public UnaExp void accept(Visitor *v) override { v->visit(this); } }; +struct ArgumentList final +{ + Expressions* arguments; + Identifiers* names; + ArgumentList() : + arguments(), + names() + { + } + ArgumentList(Expressions* arguments, Identifiers* names = nullptr) : + arguments(arguments), + names(names) + {} +}; + class CallExp final : public UnaExp { public: diff --git a/gcc/d/dmd/expressionsem.d b/gcc/d/dmd/expressionsem.d index db40ae01decf..7ae7f400d166 100644 --- a/gcc/d/dmd/expressionsem.d +++ b/gcc/d/dmd/expressionsem.d @@ -2984,6 +2984,7 @@ private bool functionParameters(const ref Loc loc, Scope* sc, foreach (u; 0 .. elements.length) { Expression a = (*arguments)[i + u]; + assert(a); if (tret && a.implicitConvTo(tret)) { // p is a lazy array of delegates, tret is return type of the delegates @@ -4245,18 +4246,21 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor if (e.hexString) { - const data = cast(const ubyte[]) e.peekString(); switch (e.postfix) { case 'd': + e.committed = true; e.sz = 4; e.type = Type.tdstring; break; case 'w': + e.committed = true; e.sz = 2; e.type = Type.twstring; break; case 'c': + e.committed = true; + goto default; default: e.type = Type.tstring; e.sz = 1; @@ -4266,8 +4270,7 @@ private extern (C++) final class ExpressionSemanticVisitor : Visitor error(e.loc, "hex string with `%s` type needs to be multiple of %d bytes, not %d", e.type.toChars(), e.sz, cast(int) e.len); - e.setData(arrayCastBigEndian(data, e.sz).ptr, e.len / e.sz, e.sz); - e.committed = true; + e.setData(arrayCastBigEndian(e.peekData(), e.sz).ptr, e.len / e.sz, e.sz); } else switch (e.postfix) { diff --git a/gcc/d/dmd/hdrgen.d b/gcc/d/dmd/hdrgen.d index 8eef7992e2ae..41da11dedbec 100644 --- a/gcc/d/dmd/hdrgen.d +++ b/gcc/d/dmd/hdrgen.d @@ -2281,7 +2281,8 @@ private void expressionPrettyPrint(Expression e, ref OutBuffer buf, ref HdrGenSt { buf.writeByte('x'); buf.writeByte('"'); - buf.writeHexString(e.peekData, true); + foreach (i; 0 .. e.len) + buf.printf("%0*llX", e.sz, e.getIndex(i)); buf.writeByte('"'); if (e.postfix) buf.writeByte(e.postfix); diff --git a/gcc/d/dmd/lexer.d b/gcc/d/dmd/lexer.d index 937597cdf89d..c9c506e9cf3c 100644 --- a/gcc/d/dmd/lexer.d +++ b/gcc/d/dmd/lexer.d @@ -1568,7 +1568,6 @@ class Lexer stringbuffer.writeByte(v); } t.setString(stringbuffer); - t.postfix = 'h'; stringPostfix(t); return TOK.hexadecimalString; default: diff --git a/gcc/d/dmd/mtype.d b/gcc/d/dmd/mtype.d index 2c9e058bf325..715ee12159cb 100644 --- a/gcc/d/dmd/mtype.d +++ b/gcc/d/dmd/mtype.d @@ -3073,7 +3073,7 @@ extern (C++) final class TypeFunction : TypeNext TRUST trust; // level of trust PURE purity = PURE.impure; byte inuse; - Expressions* fargs; // function arguments + ArgumentList inferenceArguments; // function arguments to determine `auto ref` in type semantic extern (D) this(ParameterList pl, Type treturn, LINK linkage, StorageClass stc = 0) @safe { @@ -3146,7 +3146,7 @@ extern (C++) final class TypeFunction : TypeNext t.isInOutParam = isInOutParam; t.isInOutQual = isInOutQual; t.trust = trust; - t.fargs = fargs; + t.inferenceArguments = inferenceArguments; t.isctor = isctor; return t; } @@ -3197,10 +3197,12 @@ extern (C++) final class TypeFunction : TypeNext { Expression[] args = argumentList.arguments ? (*argumentList.arguments)[] : null; Identifier[] names = argumentList.names ? (*argumentList.names)[] : null; - auto newArgs = new Expressions(parameterList.length); + const nParams = parameterList.length(); // cached because O(n) + auto newArgs = new Expressions(nParams); newArgs.zero(); size_t ci = 0; bool hasNamedArgs = false; + const bool isVariadic = parameterList.varargs != VarArg.none; foreach (i, arg; args) { if (!arg) @@ -3223,7 +3225,7 @@ extern (C++) final class TypeFunction : TypeNext } if (ci >= newArgs.length) { - if (!parameterList.varargs) + if (!isVariadic) { // Without named args, let the caller diagnose argument overflow if (hasNamedArgs && pMessage) @@ -3247,7 +3249,12 @@ extern (C++) final class TypeFunction : TypeNext if (arg || parameterList[i].defaultArg) continue; - if (parameterList.varargs != VarArg.none && i + 1 == newArgs.length) + if (isVariadic && i + 1 == newArgs.length) + continue; + + // dtemplate sets `defaultArg=null` to avoid semantic on default arguments, + // don't complain about missing arguments in that case + if (this.incomplete) continue; if (pMessage) diff --git a/gcc/d/dmd/mtype.h b/gcc/d/dmd/mtype.h index 2f8bfa68d221..ad64b120f400 100644 --- a/gcc/d/dmd/mtype.h +++ b/gcc/d/dmd/mtype.h @@ -14,6 +14,7 @@ #include "arraytypes.h" #include "ast_node.h" +#include "expression.h" #include "globals.h" #include "visitor.h" @@ -254,8 +255,6 @@ class Type : public ASTNode bool isSharedWild() const { return (mod & (MODshared | MODwild)) == (MODshared | MODwild); } bool isNaked() const { return mod == 0; } Type *nullAttributes() const; - Type *arrayOf(); - Type *sarrayOf(dinteger_t dim); bool hasDeprecatedAliasThis(); virtual Type *makeConst(); virtual Type *makeImmutable(); @@ -567,7 +566,7 @@ class TypeFunction final : public TypeNext TRUST trust; // level of trust PURE purity; // PURExxxx char inuse; - Expressions *fargs; // function arguments + ArgumentList inferenceArguments; // function arguments static TypeFunction *create(Parameters *parameters, Type *treturn, VarArg varargs, LINK linkage, StorageClass stc = 0); const char *kind() override; diff --git a/gcc/d/dmd/root/filename.d b/gcc/d/dmd/root/filename.d index 41c2050057d3..d9f1a04057df 100644 --- a/gcc/d/dmd/root/filename.d +++ b/gcc/d/dmd/root/filename.d @@ -665,7 +665,7 @@ nothrow: * Returns: * if found, filename combined with path, otherwise null */ - extern (C++) static const(char)* searchPath(const ref Strings path, const char* name, bool cwd) + extern (C++) static const(char)* searchPath(const ref Strings path, const(char)* name, bool cwd) { return searchPath(path[], name.toDString, cwd).ptr; } diff --git a/gcc/d/dmd/root/filename.h b/gcc/d/dmd/root/filename.h index 0e52b9823233..e8c8b11fffdd 100644 --- a/gcc/d/dmd/root/filename.h +++ b/gcc/d/dmd/root/filename.h @@ -38,7 +38,7 @@ struct FileName bool equalsExt(const char *ext); - static const char *searchPath(Strings& path, const char *name, bool cwd); + static const char *searchPath(const Strings &path, const char *name, bool cwd); static int exists(const char *name); static bool ensurePathExists(const char *path); static const char *canonicalName(const char *name); diff --git a/gcc/d/dmd/template.h b/gcc/d/dmd/template.h index 0f96a1b3b098..bccec1a68c12 100644 --- a/gcc/d/dmd/template.h +++ b/gcc/d/dmd/template.h @@ -12,6 +12,7 @@ #include "arraytypes.h" #include "dsymbol.h" +#include "expression.h" class Identifier; class TemplateInstance; @@ -46,20 +47,6 @@ struct TemplatePrevious Objects *dedargs; }; -struct ArgumentList final -{ - Expressions* arguments; - Identifiers* names; - ArgumentList() : - arguments(), - names() - { - } - ArgumentList(Expressions* arguments, Identifiers* names = nullptr) : - arguments(arguments), - names(names) - {} -}; class TemplateDeclaration final : public ScopeDsymbol { @@ -271,6 +258,7 @@ class TemplateInstance : public ScopeDsymbol ScopeDsymbol *argsym; // argument symbol table hash_t hash; // cached result of toHash() Expressions *fargs; // for function template, these are the function arguments + Identifiers *fnames; // for function template, argument names TemplateInstances* deferred; diff --git a/gcc/d/dmd/templatesem.d b/gcc/d/dmd/templatesem.d index 0a36838e167d..bd3cd89588f7 100644 --- a/gcc/d/dmd/templatesem.d +++ b/gcc/d/dmd/templatesem.d @@ -250,7 +250,7 @@ MATCH matchWithInstance(Scope* sc, TemplateDeclaration td, TemplateInstance ti, return MATCH.nomatch; size_t parameters_dim = td.parameters.length; - int variadic = td.isVariadic() !is null; + const bool variadic = td.isVariadic() !is null; // If more arguments than parameters, no match if (ti.tiargs.length > parameters_dim && !variadic) @@ -338,12 +338,6 @@ MATCH matchWithInstance(Scope* sc, TemplateDeclaration td, TemplateInstance ti, if (fd) { TypeFunction tf = fd.type.isTypeFunction().syntaxCopy(); - if (argumentList.hasNames) - return nomatch(); - Expressions* fargs = argumentList.arguments; - // TODO: Expressions* fargs = tf.resolveNamedArgs(argumentList, null); - // if (!fargs) - // return nomatch(); fd = new FuncDeclaration(fd.loc, fd.endloc, fd.ident, fd.storage_class, tf); fd.parent = ti; @@ -357,7 +351,7 @@ MATCH matchWithInstance(Scope* sc, TemplateDeclaration td, TemplateInstance ti, tf.incomplete = true; // Resolve parameter types and 'auto ref's. - tf.fargs = fargs; + tf.inferenceArguments = argumentList; uint olderrors = global.startGagging(); fd.type = tf.typeSemantic(td.loc, paramscope); global.endGagging(olderrors); @@ -762,7 +756,7 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat } size_t ntargs = 0; // array size of tiargs - size_t inferStart = 0; // index of first parameter to infer + size_t inferStart = 0; // index of first template parameter to infer from function argument const Loc instLoc = ti.loc; MATCH matchTiargs = MATCH.exact; @@ -834,9 +828,6 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat ParameterList fparameters = fd.getParameterList(); // function parameter list const nfparams = fparameters.length; // number of function parameters - if (argumentList.hasNames) - return matcherror(); // TODO: resolve named args - Expression[] fargs = argumentList.arguments ? (*argumentList.arguments)[] : null; /* Check for match of function arguments with variadic template * parameter, such as: @@ -950,9 +941,14 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat { //printf("%s\n\tnfargs = %d, nfparams = %d, tuple_dim = %d\n", toChars(), nfargs, nfparams, declaredTuple ? declaredTuple.objects.length : 0); //printf("\ttp = %p, fptupindex = %d, found = %d, declaredTuple = %s\n", tp, fptupindex, fptupindex != IDX_NOTFOUND, declaredTuple ? declaredTuple.toChars() : NULL); - size_t argi = 0; - size_t nfargs2 = fargs.length; // nfargs + supplied defaultArgs + enum DEFAULT_ARGI = size_t.max - 10; // pseudo index signifying the parameter is expected to be assigned its default argument + size_t argi = 0; // current argument index + size_t argsConsumed = 0; // to ensure no excess arguments + size_t nfargs2 = argumentList.length; // total number of arguments including applied defaultArgs uint inoutMatch = 0; // for debugging only + Expression[] fargs = argumentList.arguments ? (*argumentList.arguments)[] : null; + Identifier[] fnames = argumentList.names ? (*argumentList.names)[] : null; + for (size_t parami = 0; parami < nfparams; parami++) { Parameter fparam = fparameters[parami]; @@ -961,11 +957,28 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat Type prmtype = fparam.type.addStorageClass(fparam.storageClass); Expression farg; + Identifier fname = argi < fnames.length ? fnames[argi] : null; + bool foundName = false; + if (fparam.ident) + { + foreach (i; 0 .. fnames.length) + { + if (fparam.ident == fnames[i]) + { + argi = i; + foundName = true; + } + } + } + if (fname && !foundName) + { + argi = DEFAULT_ARGI; + } /* See function parameters which wound up * as part of a template tuple parameter. */ - if (fptupindex != IDX_NOTFOUND && parami == fptupindex) + if (fptupindex != IDX_NOTFOUND && parami == fptupindex && argi != DEFAULT_ARGI) { TypeIdentifier tid = prmtype.isTypeIdentifier(); assert(tid); @@ -986,7 +999,12 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat Parameter p = fparameters[j]; if (p.defaultArg) { - break; + break; + } + foreach(name; fnames) + { + if (p.ident == name) + break; } if (!reliesOnTemplateParameters(p.type, (*td.parameters)[inferStart .. td.parameters.length])) { @@ -1055,6 +1073,7 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat } assert(declaredTuple); argi += declaredTuple.objects.length; + argsConsumed += declaredTuple.objects.length; continue; } @@ -1068,7 +1087,7 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat if (TypeTuple tt = prmtype.isTypeTuple()) { const tt_dim = tt.arguments.length; - for (size_t j = 0; j < tt_dim; j++, ++argi) + for (size_t j = 0; j < tt_dim; j++, ++argi, ++argsConsumed) { Parameter p = (*tt.arguments)[j]; if (j == tt_dim - 1 && fparameters.varargs == VarArg.typesafe && @@ -1171,7 +1190,9 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat } } } - nfargs2 = argi + 1; + + if (argi != DEFAULT_ARGI) + nfargs2 = argi + 1; /* If prmtype does not depend on any template parameters: * @@ -1189,7 +1210,11 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat */ if (prmtype.deco || prmtype.syntaxCopy().trySemantic(td.loc, paramscope)) { - ++argi; + if (argi != DEFAULT_ARGI) + { + ++argi; + ++argsConsumed; + } continue; } @@ -1203,6 +1228,7 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat farg = fargs[argi]; } { + assert(farg); // Check invalid arguments to detect errors early. if (farg.op == EXP.error || farg.type.ty == Terror) return nomatch(); @@ -1350,7 +1376,11 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat { if (m < match) match = m; // pick worst match - argi++; + if (argi != DEFAULT_ARGI) + { + argi++; + argsConsumed++; + } continue; } } @@ -1490,8 +1520,8 @@ extern (D) MATCHpair deduceFunctionTemplateMatch(TemplateDeclaration td, Templat } assert(0); } - //printf(". argi = %d, nfargs = %d, nfargs2 = %d\n", argi, nfargs, nfargs2); - if (argi != nfargs2 && fparameters.varargs == VarArg.none) + // printf(". argi = %d, nfargs = %d, nfargs2 = %d, argsConsumed = %d\n", cast(int) argi, cast(int) nfargs, cast(int) nfargs2, cast(int) argsConsumed); + if (argsConsumed != nfargs2 && fparameters.varargs == VarArg.none) return nomatch(); } @@ -1618,7 +1648,7 @@ Lmatch: sc2.minst = sc.minst; sc2.stc |= fd.storage_class & STC.deprecated_; - fd = doHeaderInstantiation(td, ti, sc2, fd, tthis, argumentList.arguments); + fd = doHeaderInstantiation(td, ti, sc2, fd, tthis, argumentList); sc2 = sc2.pop(); sc2 = sc2.pop(); @@ -1650,7 +1680,7 @@ Lmatch: * Limited function template instantiation for using fd.leastAsSpecialized() */ private -FuncDeclaration doHeaderInstantiation(TemplateDeclaration td, TemplateInstance ti, Scope* sc2, FuncDeclaration fd, Type tthis, Expressions* fargs) +FuncDeclaration doHeaderInstantiation(TemplateDeclaration td, TemplateInstance ti, Scope* sc2, FuncDeclaration fd, Type tthis, ArgumentList inferenceArguments) { assert(fd); version (none) @@ -1667,7 +1697,7 @@ FuncDeclaration doHeaderInstantiation(TemplateDeclaration td, TemplateInstance t assert(fd.type.ty == Tfunction); auto tf = fd.type.isTypeFunction(); - tf.fargs = fargs; + tf.inferenceArguments = inferenceArguments; if (tthis) { @@ -2084,11 +2114,6 @@ void functionResolve(ref MatchAccumulator m, Dsymbol dstart, Loc loc, Scope* sc, } //printf("td = %s\n", td.toChars()); - if (argumentList.hasNames) - { - .error(loc, "named arguments with Implicit Function Template Instantiation are not supported yet"); - goto Lerror; - } auto f = td.onemember ? td.onemember.isFuncDeclaration() : null; if (!f) { diff --git a/gcc/d/dmd/typesem.d b/gcc/d/dmd/typesem.d index ad87ea0baebe..b2b9e38ead4d 100644 --- a/gcc/d/dmd/typesem.d +++ b/gcc/d/dmd/typesem.d @@ -2187,6 +2187,12 @@ Type typeSemantic(Type type, const ref Loc loc, Scope* sc) } } + Expressions* fargs = mtype.inferenceArguments.arguments; + + // mtype.argumentList only provided for Implicit Function Template Instantiation + if (mtype.inferenceArguments.length > 0) + fargs = tf.resolveNamedArgs(mtype.inferenceArguments, null); + // Now that we completed semantic for the argument types, // run semantic on their default values, // bearing in mind tuples have been expanded. @@ -2236,8 +2242,10 @@ Type typeSemantic(Type type, const ref Loc loc, Scope* sc) */ if (eparam.storageClass & STC.auto_) { - Expression farg = mtype.fargs && eidx < mtype.fargs.length ? - (*mtype.fargs)[eidx] : eparam.defaultArg; + Expression farg = (fargs && eidx < fargs.length) ? (*fargs)[eidx] : null; + if (!farg) + farg = eparam.defaultArg; + if (farg && (eparam.storageClass & STC.ref_)) { if (!farg.isLvalue()) @@ -5681,7 +5689,7 @@ Type addStorageClass(Type type, StorageClass stc) // Klunky to change these auto tf = new TypeFunction(t.parameterList, t.next, t.linkage, 0); tf.mod = t.mod; - tf.fargs = tf_src.fargs; + tf.inferenceArguments = tf_src.inferenceArguments; tf.purity = t.purity; tf.isnothrow = t.isnothrow; tf.isnogc = t.isnogc; @@ -6775,7 +6783,7 @@ Type substWildTo(Type type, uint mod) t.isInOutParam = false; t.isInOutQual = false; t.trust = tf.trust; - t.fargs = tf.fargs; + t.inferenceArguments = tf.inferenceArguments; t.isctor = tf.isctor; return t.merge(); } diff --git a/gcc/testsuite/gdc.test/compilable/named_arguments_auto_ref.d b/gcc/testsuite/gdc.test/compilable/named_arguments_auto_ref.d new file mode 100644 index 000000000000..aa1ab7191c69 --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/named_arguments_auto_ref.d @@ -0,0 +1,39 @@ +/** +TEST_OUTPUT: +--- +Call 0 +(x: true, y: false) +Call 1 +Call 2 +(x: false, y: false) +Call 3 +(x: false, y: true) +Call 4 +--- + +As of writing this test, template function instances store the function arguments from the call site. +When looking in cache for an existing template instantiation, matching template arguments isn't +sufficient: `auto ref` parameters being ref or not also create different template instances. +This test checks that the special logic for it still works with named arguments. +*/ + +void autoref()(auto ref int x, auto ref int y) +{ + pragma(msg, "(x: ", __traits(isRef, x), ", y: ", __traits(isRef, y), ")"); +} + +void main() +{ + int REF = 0; + enum NOT = 0; + pragma(msg, "Call 0"); + autoref(y: NOT, x: REF); // new instance + pragma(msg, "Call 1"); + autoref(x: REF, y: NOT); // existing instance + pragma(msg, "Call 2"); + autoref(x: NOT, y: NOT); // new instance + pragma(msg, "Call 3"); + autoref(x: NOT, y: REF); // new instance + pragma(msg, "Call 4"); + autoref(y: REF, x: NOT); // existing instance +} diff --git a/gcc/testsuite/gdc.test/compilable/named_arguments_ifti.d b/gcc/testsuite/gdc.test/compilable/named_arguments_ifti.d new file mode 100644 index 000000000000..3a35d799e63b --- /dev/null +++ b/gcc/testsuite/gdc.test/compilable/named_arguments_ifti.d @@ -0,0 +1,27 @@ +// Basic out-of-order test +int f0(T0, T1)(T0 t0, T1 t1) +{ + static assert(is(T0 == int)); + static assert(is(T1 == string)); + return t0; +} + +static assert(f0(t1: "a", t0: 10) == 10); + +// Default argument at beginning instead of end +int f1(T0, T1)(T0 t0 = 20, T1 t1) { return t0; } +static assert(f1(t1: "a") == 20); + +// Two default arguments +int f2(T0, T1)(T0 t0 = 20, T1 t1, T2 t2 = 30) { return t2; } + +// Selecting overload based on name +string f3(T)(T x) { return "x"; } +string f3(T)(T y) { return "y"; } +static assert(f3(x: 0) == "x"); +static assert(f3(y: 0) == "y"); + +// Variadic tuple cut short by named argument +int f4(T...)(T x, int y, int z) { assert(y == 30); assert(z == 50); return T.length; } +static assert(f4(10, 10, 10, y: 30, z: 50) == 3); +static assert(f4(10, 10, 30, z: 50) == 2); diff --git a/gcc/testsuite/gdc.test/fail_compilation/hexstring.d b/gcc/testsuite/gdc.test/fail_compilation/hexstring.d index 95b07e763fff..0f23f444389d 100644 --- a/gcc/testsuite/gdc.test/fail_compilation/hexstring.d +++ b/gcc/testsuite/gdc.test/fail_compilation/hexstring.d @@ -12,11 +12,11 @@ fail_compilation/hexstring.d(38): Error: array cast from `string` to `immutable( fail_compilation/hexstring.d(39): Error: array cast from `string` to `immutable(uint[])` is not supported at compile time fail_compilation/hexstring.d(39): perhaps remove postfix `c` from hex string fail_compilation/hexstring.d(40): Error: hex string with `dstring` type needs to be multiple of 4 bytes, not 5 -fail_compilation/hexstring.d(41): Error: cannot implicitly convert expression `x"44332211"d` of type `dstring` to `immutable(float[])` +fail_compilation/hexstring.d(41): Error: cannot implicitly convert expression `x"11223344"d` of type `dstring` to `immutable(float[])` +fail_compilation/hexstring.d(42): Error: cannot implicitly convert expression `x"1122"w` of type `wstring` to `immutable(ubyte[])` fail_compilation/hexstring.d(28): Error: cannot implicitly convert expression `x"123F"` of type `string` to `ubyte[]` --- */ - immutable ubyte[] s0 = x"123F"; static assert(s0[0] == 0x12); static assert(s0[1] == 0x3F); @@ -39,3 +39,4 @@ immutable ushort[] f10 = cast(immutable ushort[]) (x"1122" ~ ""); immutable uint[] f11 = cast(immutable uint[]) x"AABBCCDD"c; immutable uint[] f12 = x"1122334455"d; immutable float[] f13 = x"11223344"d; +immutable ubyte[] f14 = x"1122"w; diff --git a/gcc/testsuite/gdc.test/fail_compilation/named_arguments_error.d b/gcc/testsuite/gdc.test/fail_compilation/named_arguments_error.d index b634a119564a..125ebcc926e5 100644 --- a/gcc/testsuite/gdc.test/fail_compilation/named_arguments_error.d +++ b/gcc/testsuite/gdc.test/fail_compilation/named_arguments_error.d @@ -19,15 +19,15 @@ fail_compilation/named_arguments_error.d(33): `named_arguments_error.g(in fail_compilation/named_arguments_error.d(43): Error: no named argument `element` allowed for array dimension fail_compilation/named_arguments_error.d(44): Error: no named argument `number` allowed for scalar fail_compilation/named_arguments_error.d(45): Error: cannot implicitly convert expression `g(x: 3, y: 4, z: 5)` of type `int` to `string` -fail_compilation/named_arguments_error.d(46): Error: named arguments with Implicit Function Template Instantiation are not supported yet -fail_compilation/named_arguments_error.d(46): Error: template `tempfun` is not callable using argument types `!()(string, int)` -fail_compilation/named_arguments_error.d(50): Candidate is: `tempfun(T, U)(T t, U u)` +fail_compilation/named_arguments_error.d(46): Error: template `tempfun` is not callable using argument types `!()(int, int)` +fail_compilation/named_arguments_error.d(49): Candidate is: `tempfun(T, U)(T t, U u)` --- */ + void f(int x, int y, int z); int g(int x, int y, int z = 3); @@ -43,11 +43,10 @@ void main() auto g0 = new int[](element: 3); auto g1 = new int(number: 3); string s = g(x: 3, y: 4, z: 5); - enum x = tempfun(u: "u", t: 0); + enum x = tempfun(u: 0, 1); } -// template arguments int tempfun(T, U)(T t, U u) { - return 3; + return 3; } diff --git a/gcc/testsuite/gdc.test/fail_compilation/named_arguments_ifti_error.d b/gcc/testsuite/gdc.test/fail_compilation/named_arguments_ifti_error.d new file mode 100644 index 000000000000..6d8a70a2c469 --- /dev/null +++ b/gcc/testsuite/gdc.test/fail_compilation/named_arguments_ifti_error.d @@ -0,0 +1,20 @@ +/* +TEST_OUTPUT: +--- +fail_compilation/named_arguments_ifti_error.d(17): Error: template `f` is not callable using argument types `!()(int, int)` +fail_compilation/named_arguments_ifti_error.d(13): Candidate is: `f(T, U)(T x, U y)` +fail_compilation/named_arguments_ifti_error.d(18): Error: template `f` is not callable using argument types `!()(int, int)` +fail_compilation/named_arguments_ifti_error.d(13): Candidate is: `f(T, U)(T x, U y)` +fail_compilation/named_arguments_ifti_error.d(19): Error: template `f` is not callable using argument types `!()(int)` +fail_compilation/named_arguments_ifti_error.d(13): Candidate is: `f(T, U)(T x, U y)` +--- +*/ + +void f(T, U)(T x, U y) {} + +void main() +{ + f(x: 3, x: 3); // double assignment of x + f(y: 3, 3); // overflow past last parameter + f(y: 3); // skipping parameter x +} diff --git a/gcc/testsuite/gdc.test/runnable/literal.d b/gcc/testsuite/gdc.test/runnable/literal.d index 27b5543b6fce..3cc7e51197bc 100644 --- a/gcc/testsuite/gdc.test/runnable/literal.d +++ b/gcc/testsuite/gdc.test/runnable/literal.d @@ -243,23 +243,27 @@ void test12950() void testHexstring() { - static immutable uint[] x = cast(immutable uint[]) x"FFAADDEE"; + static immutable uint[] x = cast(immutable uint[]) x"FFAADDEE"d; static assert(x[0] == 0xFFAADDEE); assert(x[0] == 0xFFAADDEE); - static immutable ulong[] y = cast(immutable ulong[]) x"1122334455667788AABBCCDDEEFF0099"; + static immutable ulong[] y = x"1122334455667788AABBCCDDEEFF0099"; static assert(y[0] == 0x1122334455667788); static assert(y[1] == 0xAABBCCDDEEFF0099); assert(y[0] == 0x1122334455667788); assert(y[1] == 0xAABBCCDDEEFF0099); + immutable long[] c = x"1122334455667788AABBCCDDEEFF0099"; + assert(c[0] == 0x1122334455667788); + assert(c[1] == 0xAABBCCDDEEFF0099); + // Test that mangling of StringExp with size 8 is the same as array literal mangling: void f(immutable ulong[] a)() {} static assert(f!y.mangleof == f!([0x1122334455667788, 0xAABBCCDDEEFF0099]).mangleof); // Test printing StringExp with size 8 enum toStr(immutable ulong[] v) = v.stringof; - static assert(toStr!y == `x"88776655443322119900FFEEDDCCBBAA"`); + static assert(toStr!y == `x"1122334455667788AABBCCDDEEFF0099"`); // Hex string postfixes // https://issues.dlang.org/show_bug.cgi?id=24363 diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE index 4c0a0bc2aac4..a00872ef864d 100644 --- a/libphobos/libdruntime/MERGE +++ b/libphobos/libdruntime/MERGE @@ -1,4 +1,4 @@ -f8bae0455851a1dfc8113d69323415f6de549e39 +855353a1d9e16d43e85b6cf2b03aef388619bd16 The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d b/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d index 56433b493022..cb8df47507fc 100644 --- a/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d +++ b/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d @@ -94,8 +94,8 @@ private // Declared as an extern instead of importing core.exception // to avoid inlining - see https://issues.dlang.org/show_bug.cgi?id=13725. - void onInvalidMemoryOperationError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted pure nothrow @nogc; - void onOutOfMemoryError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted nothrow @nogc; + noreturn onInvalidMemoryOperationError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted pure nothrow @nogc; + noreturn onOutOfMemoryError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted pure nothrow @nogc; version (COLLECT_FORK) version (OSX) diff --git a/libphobos/libdruntime/core/internal/gc/impl/manual/gc.d b/libphobos/libdruntime/core/internal/gc/impl/manual/gc.d index 570781e2fdcc..b820adda1a2b 100644 --- a/libphobos/libdruntime/core/internal/gc/impl/manual/gc.d +++ b/libphobos/libdruntime/core/internal/gc/impl/manual/gc.d @@ -26,7 +26,7 @@ import core.internal.container.array; import cstdlib = core.stdc.stdlib : calloc, free, malloc, realloc; static import core.memory; -extern (C) void onOutOfMemoryError(void* pretend_sideffect = null) @trusted pure nothrow @nogc; /* dmd @@@BUG11461@@@ */ +extern (C) noreturn onOutOfMemoryError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted pure nothrow @nogc; /* dmd @@@BUG11461@@@ */ // register GC in C constructor (_STI_) private pragma(crt_constructor) void gc_manual_ctor() diff --git a/libphobos/libdruntime/core/internal/gc/impl/proto/gc.d b/libphobos/libdruntime/core/internal/gc/impl/proto/gc.d index ff044d9a9b2e..2286d17d9ce7 100644 --- a/libphobos/libdruntime/core/internal/gc/impl/proto/gc.d +++ b/libphobos/libdruntime/core/internal/gc/impl/proto/gc.d @@ -8,7 +8,7 @@ import core.internal.container.array; import cstdlib = core.stdc.stdlib : calloc, free, malloc, realloc; static import core.memory; -extern (C) void onOutOfMemoryError(void* pretend_sideffect = null) @trusted pure nothrow @nogc; /* dmd @@@BUG11461@@@ */ +extern (C) noreturn onOutOfMemoryError(void* pretend_sideffect = null, string file = __FILE__, size_t line = __LINE__) @trusted pure nothrow @nogc; /* dmd @@@BUG11461@@@ */ private { From f065c582d9c8e0a4fee7ee563c584ee3b1975bea Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Sun, 17 Mar 2024 14:49:23 +0000 Subject: [PATCH 093/551] PR modula2/114296 ICE when attempting to create a constant set with a variable element This patch corrects the virtual token creation for the aggregate constant and also corrects tokens for constructor components. gcc/m2/ChangeLog: PR modula2/114296 * gm2-compiler/M2ALU.mod (ElementsSolved): Add tokenno parameter. Add constant checks and generate error messages. (EvalSetValues): Pass tokenno parameter to ElementsSolved. * gm2-compiler/M2LexBuf.mod (stop): New procedure. (MakeVirtualTok): Call stop if caret = BadTokenNo. * gm2-compiler/M2Quads.def (BuildNulExpression): Add tokpos parameter. (BuildSetStart): Ditto. (BuildEmptySet): Ditto. (BuildConstructorEnd): Add startpos parameter. (BuildTypeForConstructor): Add tokpos parameter. * gm2-compiler/M2Quads.mod (BuildNulExpression): Add tokpos parameter and push tokpos to the quad stack. (BuildSetStart): Add tokpos parameter and push tokpos. (BuildSetEnd): Rewrite. (BuildEmptySet): Add tokpos parameter and push tokpos with the set type. (BuildConstructorStart): Pop typepos. (BuildConstructorEnd): Add startpos parameter. Create valtok from startpos and cbratokpos. (BuildTypeForConstructor): Add tokpos parameter. * gm2-compiler/M2Range.def (InitAssignmentRangeCheck): Rename d to des and e to expr. Add destok and exprtok parameters. * gm2-compiler/M2Range.mod (InitAssignmentRangeCheck): Rename d to des and e to expr. Add destok and exprtok parameters. Save destok and exprtok into range record. (FoldAssignment): Pass exprtok to TryDeclareConstant. * gm2-compiler/P3Build.bnf (ComponentValue): Rewrite. (Constructor): Rewrite. (ConstSetOrQualidentOrFunction): Rewrite. (SetOrQualidentOrFunction): Rewrite. * gm2-compiler/PCBuild.bnf (ConstSetOrQualidentOrFunction): Rewrite. (SetOrQualidentOrFunction): Rewrite. * gm2-compiler/PHBuild.bnf (Constructor): Rewrite. (ConstSetOrQualidentOrFunction): Rewrite. gcc/testsuite/ChangeLog: PR modula2/114296 * gm2/pim/fail/badtype2.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2ALU.mod | 14 ++- gcc/m2/gm2-compiler/M2LexBuf.mod | 13 ++- gcc/m2/gm2-compiler/M2Quads.def | 15 ++- gcc/m2/gm2-compiler/M2Quads.mod | 124 +++++++++++++----------- gcc/m2/gm2-compiler/M2Range.def | 4 +- gcc/m2/gm2-compiler/M2Range.mod | 14 ++- gcc/m2/gm2-compiler/P3Build.bnf | 48 +++++---- gcc/m2/gm2-compiler/PCBuild.bnf | 11 ++- gcc/m2/gm2-compiler/PHBuild.bnf | 16 +-- gcc/testsuite/gm2/pim/fail/badtype2.mod | 9 ++ 10 files changed, 173 insertions(+), 95 deletions(-) create mode 100644 gcc/testsuite/gm2/pim/fail/badtype2.mod diff --git a/gcc/m2/gm2-compiler/M2ALU.mod b/gcc/m2/gm2-compiler/M2ALU.mod index 58d4b5c24ed7..cfa372671cdf 100644 --- a/gcc/m2/gm2-compiler/M2ALU.mod +++ b/gcc/m2/gm2-compiler/M2ALU.mod @@ -2922,10 +2922,20 @@ END AddField ; ElementsSolved - returns TRUE if all ranges in the set have been solved. *) -PROCEDURE ElementsSolved (r: listOfRange) : BOOLEAN ; +PROCEDURE ElementsSolved (tokenno: CARDINAL; r: listOfRange) : BOOLEAN ; BEGIN WHILE r#NIL DO WITH r^ DO + IF NOT IsConst (low) + THEN + MetaErrorT1 (tokenno, 'a constant set can only contain constant set elements, {%1Ead} is not a constant', + low) + END ; + IF (high # low) AND (NOT IsConst (high)) + THEN + MetaErrorT1 (tokenno, 'a constant set can only contain constant set elements, {%1Ead} is not a constant', + high) + END ; IF NOT (IsSolvedGCC(low) AND IsSolvedGCC(high)) THEN RETURN( FALSE ) @@ -3088,7 +3098,7 @@ END CombineElements ; PROCEDURE EvalSetValues (tokenno: CARDINAL; r: listOfRange) : BOOLEAN ; BEGIN - IF ElementsSolved(r) + IF ElementsSolved (tokenno, r) THEN SortElements(tokenno, r) ; CombineElements(tokenno, r) ; diff --git a/gcc/m2/gm2-compiler/M2LexBuf.mod b/gcc/m2/gm2-compiler/M2LexBuf.mod index 8d9b5a5a6e3b..df073630bc16 100644 --- a/gcc/m2/gm2-compiler/M2LexBuf.mod +++ b/gcc/m2/gm2-compiler/M2LexBuf.mod @@ -48,6 +48,7 @@ CONST Tracing = FALSE ; Debugging = FALSE ; DebugRecover = FALSE ; + BadTokenNo = 32579 ; InitialSourceToken = 2 ; (* 0 is unknown, 1 is builtin. *) TYPE @@ -81,6 +82,10 @@ VAR to OpenSource. *) +PROCEDURE stop ; +END stop ; + + (* InitTokenDesc - returns a TokenDesc filled in with the parameters and the insert field set to NIL. @@ -1060,10 +1065,14 @@ BEGIN AddTokToList (virtualrangetok, NulName, 0, descLeft^.line, descLeft^.col, descLeft^.file, GetLocationBinary (lc, ll, lr)) ; - RETURN HighIndice (ListOfTokens) + caret := HighIndice (ListOfTokens) END END END ; + IF caret = BadTokenNo + THEN + stop + END ; RETURN caret END MakeVirtualTok ; @@ -1075,7 +1084,7 @@ END MakeVirtualTok ; PROCEDURE MakeVirtual2Tok (left, right: CARDINAL) : CARDINAL ; BEGIN - RETURN MakeVirtualTok (left, left, right) + RETURN MakeVirtualTok (left, left, right) ; END MakeVirtual2Tok ; diff --git a/gcc/m2/gm2-compiler/M2Quads.def b/gcc/m2/gm2-compiler/M2Quads.def index 3e92e3181dc1..ad2ee8698467 100644 --- a/gcc/m2/gm2-compiler/M2Quads.def +++ b/gcc/m2/gm2-compiler/M2Quads.def @@ -1934,9 +1934,10 @@ PROCEDURE BuildDesignatorPointer (ptrtok: CARDINAL) ; Empty +------------+ | NulSym | |------------| + tokpos is the position of the RETURN token. *) -PROCEDURE BuildNulExpression ; +PROCEDURE BuildNulExpression (tokpos: CARDINAL) ; (* @@ -1953,7 +1954,7 @@ PROCEDURE BuildNulExpression ; |--------------| *) -PROCEDURE BuildSetStart ; +PROCEDURE BuildSetStart (tokpos: CARDINAL) ; (* @@ -1986,9 +1987,10 @@ PROCEDURE BuildSetEnd ; | SetType | | SetType | |-----------| |-------------| + tokpos points to the opening '{'. *) -PROCEDURE BuildEmptySet ; +PROCEDURE BuildEmptySet (tokpos: CARDINAL) ; (* @@ -2097,9 +2099,12 @@ PROCEDURE BuildConstructorStart (cbratokpos: CARDINAL) ; +------------+ +------------+ | const | | const | |------------+ |------------| + + startpos is the start of the constructor, either the typename or '{' + cbratokpos is the '}'. *) -PROCEDURE BuildConstructorEnd (cbratokpos: CARDINAL) ; +PROCEDURE BuildConstructorEnd (startpos, cbratokpos: CARDINAL) ; (* @@ -2116,7 +2121,7 @@ PROCEDURE NextConstructorField ; it Pushes a Bitset type. *) -PROCEDURE BuildTypeForConstructor ; +PROCEDURE BuildTypeForConstructor (tokpos: CARDINAL) ; (* diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 1776a09b41f8..0558c782101d 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -147,7 +147,7 @@ FROM M2Comp IMPORT CompilingImplementationModule, CompilingProgramModule ; FROM M2LexBuf IMPORT currenttoken, UnknownTokenNo, BuiltinTokenNo, - GetToken, MakeVirtualTok, + GetToken, MakeVirtualTok, MakeVirtual2Tok, GetFileName, TokenToLineNo, GetTokenName, GetTokenNo, GetLineNo, GetPreviousTokenLineNo, PrintTokenNo ; @@ -3702,7 +3702,7 @@ BEGIN THEN (* Tell code generator to test runtime values of assignment so ensure we catch overflow and underflow. *) - BuildRange (InitAssignmentRangeCheck (combinedtok, Des, Exp)) + BuildRange (InitAssignmentRangeCheck (combinedtok, Des, Exp, destok, exptok)) END ; IF checkTypes THEN @@ -11825,11 +11825,12 @@ END BuildAccessWithField ; Empty +------------+ | NulSym | |------------| + tokpos is the position of the RETURN token. *) -PROCEDURE BuildNulExpression ; +PROCEDURE BuildNulExpression (tokpos: CARDINAL) ; BEGIN - PushT(NulSym) + PushTtok (NulSym, tokpos) END BuildNulExpression ; @@ -11839,25 +11840,25 @@ END BuildNulExpression ; it Pushes a Bitset type. *) -PROCEDURE BuildTypeForConstructor ; +PROCEDURE BuildTypeForConstructor (tokpos: CARDINAL) ; VAR c: ConstructorFrame ; BEGIN IF NoOfItemsInStackAddress(ConstructorStack)=0 THEN - PushT(Bitset) + PushTtok (Bitset, tokpos) ELSE c := PeepAddress(ConstructorStack, 1) ; WITH c^ DO - IF IsArray(type) OR IsSet(type) + IF IsArray (type) OR IsSet (type) THEN - PushT(GetSType(type)) - ELSIF IsRecord(type) + PushTtok (GetSType (type), tokpos) + ELSIF IsRecord (type) THEN - PushT(GetSType(GetNth(type, index))) + PushTtok (GetSType (GetNth (type, index)), tokpos) ELSE - MetaError1('{%1ad} is not a set, record or array type which is expected when constructing an aggregate entity', - type) + MetaError1 ('{%1ad} is not a set, record or array type which is expected when constructing an aggregate entity', + type) END END END @@ -11878,9 +11879,9 @@ END BuildTypeForConstructor ; |--------------| *) -PROCEDURE BuildSetStart ; +PROCEDURE BuildSetStart (tokpos: CARDINAL) ; BEGIN - PushT(Bitset) + PushTtok (Bitset, tokpos) END BuildSetStart ; @@ -11900,12 +11901,15 @@ END BuildSetStart ; PROCEDURE BuildSetEnd ; VAR - v, t: CARDINAL ; + valuepos, typepos, + combined, + value, type : CARDINAL ; BEGIN - PopT(v) ; - PopT(t) ; - PushTF(v, t) ; - Assert(IsSet(t)) + PopTtok (value, valuepos) ; + PopTtok (type, typepos) ; + combined := MakeVirtual2Tok (typepos, valuepos) ; + PushTFtok (value, type, combined) ; + Assert (IsSet (type)) END BuildSetEnd ; @@ -11922,52 +11926,54 @@ END BuildSetEnd ; | SetType | | SetType | |-----------| |-------------| + tokpos points to the opening '{'. *) -PROCEDURE BuildEmptySet ; +PROCEDURE BuildEmptySet (tokpos: CARDINAL) ; VAR - n : Name ; - Type : CARDINAL ; - NulSet: CARDINAL ; - tok : CARDINAL ; + n : Name ; + typepos, + Type : CARDINAL ; + NulSet : CARDINAL ; + tok : CARDINAL ; BEGIN - PopT(Type) ; (* type of set we are building *) - tok := GetTokenNo () ; - IF (Type=NulSym) AND Pim + PopTtok (Type, typepos) ; (* type of set we are building *) + IF (Type = NulSym) AND Pim THEN (* allowed generic {} in PIM Modula-2 *) - ELSIF IsUnknown(Type) + typepos := tokpos + ELSIF IsUnknown (Type) THEN - n := GetSymName(Type) ; - WriteFormat1('set type %a is undefined', n) ; + n := GetSymName (Type) ; + WriteFormat1 ('set type %a is undefined', n) ; Type := Bitset - ELSIF NOT IsSet(SkipType(Type)) + ELSIF NOT IsSet (SkipType (Type)) THEN - n := GetSymName(Type) ; + n := GetSymName (Type) ; WriteFormat1('expecting a set type %a', n) ; Type := Bitset ELSE - Type := SkipType(Type) ; - Assert((Type#NulSym)) + Type := SkipType (Type) ; + Assert (Type # NulSym) END ; - NulSet := MakeTemporary(tok, ImmediateValue) ; - PutVar(NulSet, Type) ; - PutConstSet(NulSet) ; + NulSet := MakeTemporary (typepos, ImmediateValue) ; + PutVar (NulSet, Type) ; + PutConstSet (NulSet) ; IF CompilerDebugging THEN - n := GetSymName(Type) ; - printf1('set type = %a\n', n) + n := GetSymName (Type) ; + printf1 ('set type = %a\n', n) END ; - PushNulSet(Type) ; (* onto the ALU stack *) - PopValue(NulSet) ; (* ALU -> symbol table *) + PushNulSet (Type) ; (* onto the ALU stack *) + PopValue (NulSet) ; (* ALU -> symbol table *) (* and now construct the M2Quads stack as defined by the comments above *) - PushT(Type) ; - PushT(NulSet) ; + PushTtok (Type, typepos) ; + PushTtok (NulSet, typepos) ; IF CompilerDebugging THEN - n := GetSymName(Type) ; - printf2('Type = %a (%d) built empty set\n', n, Type) ; + n := GetSymName (Type) ; + printf2 ('Type = %a (%d) built empty set\n', n, Type) ; DisplayStack (* Debugging info *) END END BuildEmptySet ; @@ -12197,10 +12203,11 @@ END SilentBuildConstructorStart ; PROCEDURE BuildConstructorStart (cbratokpos: CARDINAL) ; VAR + typepos, constValue, type : CARDINAL ; BEGIN - PopT (type) ; (* we ignore the type as we already have the constructor symbol from pass C *) + PopTtok (type, typepos) ; (* we ignore the type as we already have the constructor symbol from pass C *) GetConstructorFromFifoQueue (constValue) ; IF type # GetSType (constValue) THEN @@ -12224,25 +12231,34 @@ END BuildConstructorStart ; +------------+ +------------+ | const | | const | |------------| |------------| + + startpos is the start of the constructor, either the typename or '{' + cbratokpos is the '}'. *) -PROCEDURE BuildConstructorEnd (cbratokpos: CARDINAL) ; +PROCEDURE BuildConstructorEnd (startpos, cbratokpos: CARDINAL) ; VAR typetok, value, valtok: CARDINAL ; BEGIN + IF DebugTokPos + THEN + WarnStringAt (InitString ('startpos'), startpos) ; + WarnStringAt (InitString ('cbratokpos'), cbratokpos) + END ; PopTtok (value, valtok) ; - IF IsBoolean (1) + IF DebugTokPos THEN - typetok := valtok - ELSE - typetok := OperandTtok (1) + WarnStringAt (InitString ('value valtok'), valtok) END ; - valtok := MakeVirtualTok (typetok, typetok, cbratokpos) ; + valtok := MakeVirtual2Tok (startpos, cbratokpos) ; PutDeclared (valtok, value) ; PushTtok (value, valtok) ; (* Use valtok as we now know it was a constructor. *) - PopConstructor - (* ; ErrorStringAt (Mark (InitString ('aggregate constant')), valtok) *) + PopConstructor ; + IF DebugTokPos + THEN + WarnStringAt (InitString ('aggregate constant'), valtok) + END END BuildConstructorEnd ; diff --git a/gcc/m2/gm2-compiler/M2Range.def b/gcc/m2/gm2-compiler/M2Range.def index 2ffd74f2c378..f8c211566748 100644 --- a/gcc/m2/gm2-compiler/M2Range.def +++ b/gcc/m2/gm2-compiler/M2Range.def @@ -51,7 +51,9 @@ FROM DynamicStrings IMPORT String ; can be generated later on. *) -PROCEDURE InitAssignmentRangeCheck (tokno: CARDINAL; d, e: CARDINAL) : CARDINAL ; +PROCEDURE InitAssignmentRangeCheck (tokno: CARDINAL; + des, expr: CARDINAL; + destok, exprtok: CARDINAL) : CARDINAL ; (* diff --git a/gcc/m2/gm2-compiler/M2Range.mod b/gcc/m2/gm2-compiler/M2Range.mod index 654ac046c6fb..50c2a48fe7ff 100644 --- a/gcc/m2/gm2-compiler/M2Range.mod +++ b/gcc/m2/gm2-compiler/M2Range.mod @@ -601,16 +601,22 @@ END PutRangeArraySubscript ; (* InitAssignmentRangeCheck - returns a range check node which remembers the information necessary - so that a range check for d := e + so that a range check for des := expr can be generated later on. *) -PROCEDURE InitAssignmentRangeCheck (tokno: CARDINAL; d, e: CARDINAL) : CARDINAL ; +PROCEDURE InitAssignmentRangeCheck (tokno: CARDINAL; + des, expr: CARDINAL; + destok, exprtok: CARDINAL) : CARDINAL ; VAR r: CARDINAL ; + p: Range ; BEGIN r := InitRange () ; - Assert (PutRange (tokno, GetIndice (RangeIndex, r), assignment, d, e) # NIL) ; + p := GetIndice (RangeIndex, r) ; + Assert (PutRange (tokno, p, assignment, des, expr) # NIL) ; + p^.destok := destok ; + p^.exprtok := exprtok ; RETURN r END InitAssignmentRangeCheck ; @@ -1207,7 +1213,7 @@ VAR BEGIN p := GetIndice (RangeIndex, r) ; WITH p^ DO - TryDeclareConstant (tokenNo, expr) ; + TryDeclareConstant (exprtok, expr) ; IF desLowestType # NulSym THEN IF AssignmentTypeCompatible (tokenno, "", des, expr) diff --git a/gcc/m2/gm2-compiler/P3Build.bnf b/gcc/m2/gm2-compiler/P3Build.bnf index 3c9b9534647e..cc1accef1a02 100644 --- a/gcc/m2/gm2-compiler/P3Build.bnf +++ b/gcc/m2/gm2-compiler/P3Build.bnf @@ -739,10 +739,15 @@ ComponentElement := ConstExpression ( ".." ConstExpression % Pus ) =: -ComponentValue := ComponentElement ( 'BY' ConstExpression % PushTtok(ByTok, GetTokenNo() -1) % +ComponentValue := % VAR tokpos: CARDINAL ; % + ( + % tokpos := GetTokenNo () % + ComponentElement ( % tokpos := GetTokenNo () % + 'BY' ConstExpression % PushTtok (ByTok, tokpos) % - | % PushT(NulTok) % - ) + | % PushTtok (NulTok, tokpos) % + ) + ) =: ArraySetRecordValue := ComponentValue % BuildComponentValue % @@ -751,16 +756,22 @@ ArraySetRecordValue := ComponentValue % Bui } =: -Constructor := % DisplayStack % - '{' % BuildConstructorStart (GetTokenNo() -1) % - [ ArraySetRecordValue ] % BuildConstructorEnd (GetTokenNo()) % +Constructor := % VAR tokpos: CARDINAL ; % + % DisplayStack % + '{' % tokpos := GetTokenNo () -1 % + % BuildConstructorStart (tokpos) % + [ ArraySetRecordValue ] % BuildConstructorEnd (tokpos, GetTokenNo()) % '}' =: -ConstSetOrQualidentOrFunction := Qualident - [ Constructor | ConstActualParameters % BuildConstFunctionCall % - ] - | % BuildTypeForConstructor % - Constructor =: +ConstSetOrQualidentOrFunction := % VAR tokpos: CARDINAL ; % + % tokpos := GetTokenNo () % + ( + Qualident + [ Constructor | ConstActualParameters % BuildConstFunctionCall % + ] + | % BuildTypeForConstructor (tokpos) % + Constructor + ) =: ConstActualParameters := % PushInConstExpression % ActualParameters % PopInConstExpression % @@ -1101,10 +1112,13 @@ Factor := % VAR | ConstAttribute ) =: -SetOrDesignatorOrFunction := Qualident - % Assert (OperandTok(1) # UnknownTokenNo) % +SetOrDesignatorOrFunction := % VAR tokpos: CARDINAL ; % + % tokpos := GetTokenNo () % + ( + Qualident + % Assert (OperandTok (1) # UnknownTokenNo) % % CheckWithReference % - % Assert (OperandTok(1) # UnknownTokenNo) % + % Assert (OperandTok (1) # UnknownTokenNo) % [ Constructor | SimpleDes % (* Assert (OperandTok(1) # UnknownTokenNo) *) % [ ActualParameters % IF IsInConstExpression() @@ -1115,8 +1129,8 @@ SetOrDesignatorOrFunction := Qualident END % ] ] | - % BuildTypeForConstructor % - Constructor =: + % BuildTypeForConstructor (tokpos) % + Constructor ) =: -- SimpleDes := { "." Ident | "[" ExpList "]" | "^" } =: SimpleDes := { SubDesignator } =: @@ -1130,7 +1144,7 @@ ExitStatement := "EXIT" % Bui ReturnStatement := "RETURN" % VAR tokno: CARDINAL ; % % tokno := GetTokenNo () -1 % - ( Expression | % BuildNulExpression (* in epsilon *) % + ( Expression | % BuildNulExpression (tokno) % ) % BuildReturn (tokno) % =: diff --git a/gcc/m2/gm2-compiler/PCBuild.bnf b/gcc/m2/gm2-compiler/PCBuild.bnf index 2297663ef27f..4034dda245a9 100644 --- a/gcc/m2/gm2-compiler/PCBuild.bnf +++ b/gcc/m2/gm2-compiler/PCBuild.bnf @@ -700,12 +700,13 @@ ConstructorOrConstActualParameters := Constructor | ConstActualParameters % Pus -- the entry to Constructor ConstSetOrQualidentOrFunction := % PushAutoOff % - ( + % VAR tokpos: CARDINAL ; % + ( % tokpos := GetTokenNo () % PushQualident ( ConstructorOrConstActualParameters | % PushConstType % % PopNothing % ) - | % BuildTypeForConstructor % + | % BuildTypeForConstructor (tokpos) % Constructor ) % PopAuto % =: @@ -1003,12 +1004,14 @@ ConstructorOrSimpleDes := Constructor | % Pop =: SetOrDesignatorOrFunction := % PushAutoOff % - ( + % VAR tokpos: CARDINAL ; % + + ( % tokpos := GetTokenNo () % PushQualident ( ConstructorOrSimpleDes | % PopNothing % ) | - % BuildTypeForConstructor % + % BuildTypeForConstructor (tokpos) % Constructor ) % PopAuto % =: diff --git a/gcc/m2/gm2-compiler/PHBuild.bnf b/gcc/m2/gm2-compiler/PHBuild.bnf index 89e756d4f871..fcb1ce6092ac 100644 --- a/gcc/m2/gm2-compiler/PHBuild.bnf +++ b/gcc/m2/gm2-compiler/PHBuild.bnf @@ -652,19 +652,23 @@ ArraySetRecordValue := ComponentValue % Bui } =: -Constructor := '{' % BuildConstructorStart (GetTokenNo() -1) % - [ ArraySetRecordValue ] % BuildConstructorEnd (GetTokenNo()) % +Constructor := % VAR tokpos: CARDINAL ; % + % DisplayStack % + '{' % tokpos := GetTokenNo () -1 % + % BuildConstructorStart (tokpos) % + [ ArraySetRecordValue ] % BuildConstructorEnd (tokpos, GetTokenNo()) % '}' =: -ConstSetOrQualidentOrFunction := % PushAutoOn % - ( +ConstSetOrQualidentOrFunction := % PushAutoOn % + % VAR tokpos: CARDINAL ; % + ( % tokpos := GetTokenNo () % Qualident [ Constructor | ConstActualParameters % BuildConstFunctionCall % ] - | % BuildTypeForConstructor % + | % BuildTypeForConstructor (tokpos) % Constructor - ) % PopAuto % + ) % PopAuto % =: ConstAttribute := "__ATTRIBUTE__" "__BUILTIN__" "(" "(" ConstAttributeExpression ")" ")" =: diff --git a/gcc/testsuite/gm2/pim/fail/badtype2.mod b/gcc/testsuite/gm2/pim/fail/badtype2.mod new file mode 100644 index 000000000000..ee3e92651900 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badtype2.mod @@ -0,0 +1,9 @@ +MODULE badtype2 ; + +VAR + x: CARDINAL ; + ch: CHAR ; +BEGIN + x := 6 ; + ch := {7 .. x}; +END badtype2. From 07fad7a7fc245369989e9ca746728ea78b924715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= <fdumont@gcc.gnu.org> Date: Thu, 14 Mar 2024 22:13:57 +0100 Subject: [PATCH 094/551] libstdc++: Implement N3644 on _Safe_iterator<> [PR114316] Consider range of value-initialized iterators as valid and empty. libstdc++-v3/ChangeLog: PR libstdc++/114316 * include/debug/safe_iterator.tcc (_Safe_iterator<>::_M_valid_range): First check if both iterators are value-initialized before checking if singular. * testsuite/23_containers/set/debug/114316.cc: New test case. * testsuite/23_containers/vector/debug/114316.cc: New test case. --- libstdc++-v3/include/debug/safe_iterator.tcc | 12 ++++++++++++ .../testsuite/23_containers/set/debug/114316.cc | 16 ++++++++++++++++ .../23_containers/vector/debug/114316.cc | 16 ++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 libstdc++-v3/testsuite/23_containers/set/debug/114316.cc create mode 100644 libstdc++-v3/testsuite/23_containers/vector/debug/114316.cc diff --git a/libstdc++-v3/include/debug/safe_iterator.tcc b/libstdc++-v3/include/debug/safe_iterator.tcc index a8b24233e854..4b2baf2980ed 100644 --- a/libstdc++-v3/include/debug/safe_iterator.tcc +++ b/libstdc++-v3/include/debug/safe_iterator.tcc @@ -194,6 +194,12 @@ namespace __gnu_debug std::pair<difference_type, _Distance_precision>& __dist, bool __check_dereferenceable) const { + if (_M_value_initialized() && __rhs._M_value_initialized()) + { + __dist = std::make_pair(0, __dp_exact); + return true; + } + if (_M_singular() || __rhs._M_singular() || !_M_can_compare(__rhs)) return false; @@ -218,6 +224,12 @@ namespace __gnu_debug std::pair<difference_type, _Distance_precision>& __dist) const { + if (this->_M_value_initialized() && __rhs._M_value_initialized()) + { + __dist = std::make_pair(0, __dp_exact); + return true; + } + if (this->_M_singular() || __rhs._M_singular() || !this->_M_can_compare(__rhs)) return false; diff --git a/libstdc++-v3/testsuite/23_containers/set/debug/114316.cc b/libstdc++-v3/testsuite/23_containers/set/debug/114316.cc new file mode 100644 index 000000000000..126ec89b5e08 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/set/debug/114316.cc @@ -0,0 +1,16 @@ +// { dg-do run { target c++11 } } +// { dg-require-debug-mode "" } + +// PR libstdc++/114316 + +#include <set> +#include <algorithm> + +#include <testsuite_hooks.h> + +int main() +{ + std::set<int>::iterator it{}; + VERIFY( std::find(it, it, 0) == it ); + return 0; +} diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/114316.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/114316.cc new file mode 100644 index 000000000000..f211cf67b4c6 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/114316.cc @@ -0,0 +1,16 @@ +// { dg-do run { target c++11 } } +// { dg-require-debug-mode "" } + +// PR libstdc++/114316 + +#include <vector> +#include <algorithm> + +#include <testsuite_hooks.h> + +int main() +{ + std::vector<int>::iterator it{}; + VERIFY( std::find(it, it, 0) == it ); + return 0; +} From 8064107535328717aeb78418edf778559cd5c3ac Mon Sep 17 00:00:00 2001 From: John David Anglin <danglin@gcc.gnu.org> Date: Sun, 17 Mar 2024 16:38:48 +0000 Subject: [PATCH 095/551] hppa: Fix complaint about non-delegitimized UNSPEC UNSPEC_TP 2024-03-17 John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog: * config/pa/pa.cc (pa_delegitimize_address): Delegitimize UNSPEC_TP. --- gcc/config/pa/pa.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/config/pa/pa.cc b/gcc/config/pa/pa.cc index 129289f8e624..5ab9eff4b5e7 100644 --- a/gcc/config/pa/pa.cc +++ b/gcc/config/pa/pa.cc @@ -10707,7 +10707,13 @@ pa_trampoline_adjust_address (rtx addr) static rtx pa_delegitimize_address (rtx orig_x) { - rtx x = delegitimize_mem_from_attrs (orig_x); + rtx x; + + if (GET_CODE (orig_x) == UNSPEC + && XINT (orig_x, 1) == UNSPEC_TP) + orig_x = XVECEXP (orig_x, 0, 0); + + x = delegitimize_mem_from_attrs (orig_x); if (GET_CODE (x) == LO_SUM && GET_CODE (XEXP (x, 1)) == UNSPEC From 3f3f0b7ee8022776d69ecaed1375e1559716f226 Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Fri, 15 Mar 2024 20:14:07 +0100 Subject: [PATCH 096/551] Fortran: fix for absent array argument passed to optional dummy [PR101135] gcc/fortran/ChangeLog: PR fortran/101135 * trans-array.cc (gfc_get_dataptr_offset): Check for optional arguments being present before dereferencing data pointer. gcc/testsuite/ChangeLog: PR fortran/101135 * gfortran.dg/missing_optional_dummy_6a.f90: Adjust diagnostic pattern. * gfortran.dg/ubsan/missing_optional_dummy_8.f90: New test. --- gcc/fortran/trans-array.cc | 11 ++ .../gfortran.dg/missing_optional_dummy_6a.f90 | 2 +- .../ubsan/missing_optional_dummy_8.f90 | 108 ++++++++++++++++++ 3 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_8.f90 diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 3673fa407208..a7717a8107ee 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -7526,6 +7526,17 @@ gfc_get_dataptr_offset (stmtblock_t *block, tree parm, tree desc, tree offset, /* Set the target data pointer. */ offset = gfc_build_addr_expr (gfc_array_dataptr_type (desc), tmp); + + /* Check for optional dummy argument being present. Arguments of BIND(C) + procedures are excepted here since they are handled differently. */ + if (expr->expr_type == EXPR_VARIABLE + && expr->symtree->n.sym->attr.dummy + && expr->symtree->n.sym->attr.optional + && !is_CFI_desc (NULL, expr)) + offset = build3_loc (input_location, COND_EXPR, TREE_TYPE (offset), + gfc_conv_expr_present (expr->symtree->n.sym), offset, + fold_convert (TREE_TYPE (offset), gfc_index_zero_node)); + gfc_conv_descriptor_data_set (block, parm, offset); } diff --git a/gcc/testsuite/gfortran.dg/missing_optional_dummy_6a.f90 b/gcc/testsuite/gfortran.dg/missing_optional_dummy_6a.f90 index c6a79059a91f..b5e1726d74d3 100644 --- a/gcc/testsuite/gfortran.dg/missing_optional_dummy_6a.f90 +++ b/gcc/testsuite/gfortran.dg/missing_optional_dummy_6a.f90 @@ -49,7 +49,7 @@ end program test ! { dg-final { scan-tree-dump-times "scalar2 \\(.* slr1" 1 "original" } } -! { dg-final { scan-tree-dump-times "= es1 != 0B" 1 "original" } } +! { dg-final { scan-tree-dump-times "= es1 != 0B" 2 "original" } } ! { dg-final { scan-tree-dump-times "assumed_shape2 \\(es1" 0 "original" } } ! { dg-final { scan-tree-dump-times "explicit_shape2 \\(es1" 1 "original" } } diff --git a/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_8.f90 b/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_8.f90 new file mode 100644 index 000000000000..fd3914934aaf --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ubsan/missing_optional_dummy_8.f90 @@ -0,0 +1,108 @@ +! { dg-do run } +! { dg-additional-options "-fdump-tree-original -fsanitize=undefined" } +! +! PR fortran/101135 - Load of null pointer when passing absent +! assumed-shape array argument for an optional dummy argument +! +! Based on testcase by Marcel Jacobse + +program main + implicit none + character(len=3) :: a(6) = ['abc', 'def', 'ghi', 'jlm', 'nop', 'qrs'] + call as () + call as (a(::2)) + call as_c () + call as_c (a(2::2)) + call test_wrapper + call test_wrapper_c + call test_ar_wrapper + call test_ar_wrapper_c +contains + subroutine as (xx) + character(len=*), optional, intent(in) :: xx(*) + if (.not. present (xx)) return + print *, xx(1:3) + end subroutine as + + subroutine as_c (zz) bind(c) + character(len=*), optional, intent(in) :: zz(*) + if (.not. present (zz)) return + print *, zz(1:3) + end subroutine as_c + + subroutine test_wrapper (x) + real, dimension(1), intent(out), optional :: x + call test (x) + call test1 (x) + call test_c (x) + call test1_c (x) + end subroutine test_wrapper + + subroutine test_wrapper_c (w) bind(c) + real, dimension(1), intent(out), optional :: w + call test (w) + call test1 (w) + call test_c (w) + call test1_c (w) + end subroutine test_wrapper_c + + subroutine test (y) + real, dimension(:), intent(out), optional :: y + if (present (y)) y=0. + end subroutine test + + subroutine test_c (y) bind(c) + real, dimension(:), intent(out), optional :: y + if (present (y)) y=0. + end subroutine test_c + + subroutine test1 (y) + real, dimension(1), intent(out), optional :: y + if (present (y)) y=0. + end subroutine test1 + + subroutine test1_c (y) bind(c) + real, dimension(1), intent(out), optional :: y + if (present (y)) y=0. + end subroutine test1_c + + subroutine test_ar_wrapper (p, q, r) + real, intent(out), optional :: p + real, dimension(1), intent(out), optional :: q + real, dimension(:), intent(out), optional :: r + call test_ar (p) + call test_ar (q) + call test_ar (r) + call test_ar_c (p) + call test_ar_c (q) + call test_ar_c (r) + end subroutine test_ar_wrapper + + subroutine test_ar_wrapper_c (u, v, s) bind(c) + real, intent(out), optional :: u + real, dimension(1), intent(out), optional :: v + real, dimension(:), intent(out), optional :: s + call test_ar (u) + call test_ar (v) +! call test_ar (s) ! Disabled due to runtime segfault, see pr114355 + call test_ar_c (u) + call test_ar_c (v) + call test_ar_c (s) + end subroutine test_ar_wrapper_c + + subroutine test_ar (z) + real, dimension(..), intent(out), optional :: z + end subroutine test_ar + + subroutine test_ar_c (z) bind(c) + real, dimension(..), intent(out), optional :: z + end subroutine test_ar_c +end program + +! { dg-final { scan-tree-dump-times "data = v != 0B " 2 "original" } } +! { dg-final { scan-tree-dump-times "data = w != 0B " 2 "original" } } +! { dg-final { scan-tree-dump-times "data = q != 0B " 2 "original" } } +! { dg-final { scan-tree-dump-times "data = x != 0B " 2 "original" } } +! { dg-final { scan-tree-dump-times "data = xx.0 != 0B " 1 "original" } } +! { dg-output " abcghinop(\n|\r\n|\r)" }" +! { dg-output " defjlmqrs(\n|\r\n|\r)" }" From 27d2e933a0dbe4fb0a2e4ebac7811dc38b913553 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Mon, 18 Mar 2024 00:16:48 +0000 Subject: [PATCH 097/551] Daily bump. --- gcc/ChangeLog | 4 ++++ gcc/DATESTAMP | 2 +- gcc/d/ChangeLog | 5 +++++ gcc/fortran/ChangeLog | 6 ++++++ gcc/m2/ChangeLog | 41 +++++++++++++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 11 +++++++++++ libphobos/ChangeLog | 4 ++++ libstdc++-v3/ChangeLog | 9 +++++++++ 8 files changed, 81 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9e546f261cc3..1b1e5b0ba6db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2024-03-17 John David Anglin <danglin@gcc.gnu.org> + + * config/pa/pa.cc (pa_delegitimize_address): Delegitimize UNSPEC_TP. + 2024-03-16 Jakub Jelinek <jakub@redhat.com> PR target/114175 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 7495d4c64229..83552dd360e4 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240317 +20240318 diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog index 843a3b7fb57a..81f053b57649 100644 --- a/gcc/d/ChangeLog +++ b/gcc/d/ChangeLog @@ -1,3 +1,8 @@ +2024-03-17 Iain Buclaw <ibuclaw@gdcproject.org> + + * dmd/MERGE: Merge upstream dmd 855353a1d9. + * dmd/VERSION: + 2024-03-10 Iain Buclaw <ibuclaw@gdcproject.org> PR d/112285 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7781daf40d2d..9ffad8299f2d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2024-03-17 Harald Anlauf <anlauf@gmx.de> + + PR fortran/101135 + * trans-array.cc (gfc_get_dataptr_offset): Check for optional + arguments being present before dereferencing data pointer. + 2024-03-15 Paul Thomas <pault@gcc.gnu.org> PR fortran/87477 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index b051f0178994..bd5a564250b2 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,44 @@ +2024-03-17 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114296 + * gm2-compiler/M2ALU.mod (ElementsSolved): Add tokenno parameter. + Add constant checks and generate error messages. + (EvalSetValues): Pass tokenno parameter to ElementsSolved. + * gm2-compiler/M2LexBuf.mod (stop): New procedure. + (MakeVirtualTok): Call stop if caret = BadTokenNo. + * gm2-compiler/M2Quads.def (BuildNulExpression): Add tokpos + parameter. + (BuildSetStart): Ditto. + (BuildEmptySet): Ditto. + (BuildConstructorEnd): Add startpos parameter. + (BuildTypeForConstructor): Add tokpos parameter. + * gm2-compiler/M2Quads.mod (BuildNulExpression): Add tokpos + parameter and push tokpos to the quad stack. + (BuildSetStart): Add tokpos parameter and push tokpos. + (BuildSetEnd): Rewrite. + (BuildEmptySet): Add tokpos parameter and push tokpos with + the set type. + (BuildConstructorStart): Pop typepos. + (BuildConstructorEnd): Add startpos parameter. + Create valtok from startpos and cbratokpos. + (BuildTypeForConstructor): Add tokpos parameter. + * gm2-compiler/M2Range.def (InitAssignmentRangeCheck): Rename + d to des and e to expr. + Add destok and exprtok parameters. + * gm2-compiler/M2Range.mod (InitAssignmentRangeCheck): Rename + d to des and e to expr. + Add destok and exprtok parameters. + Save destok and exprtok into range record. + (FoldAssignment): Pass exprtok to TryDeclareConstant. + * gm2-compiler/P3Build.bnf (ComponentValue): Rewrite. + (Constructor): Rewrite. + (ConstSetOrQualidentOrFunction): Rewrite. + (SetOrQualidentOrFunction): Rewrite. + * gm2-compiler/PCBuild.bnf (ConstSetOrQualidentOrFunction): Rewrite. + (SetOrQualidentOrFunction): Rewrite. + * gm2-compiler/PHBuild.bnf (Constructor): Rewrite. + (ConstSetOrQualidentOrFunction): Rewrite. + 2024-03-14 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114294 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3092127fbf37..d36e4803079c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2024-03-17 Harald Anlauf <anlauf@gmx.de> + + PR fortran/101135 + * gfortran.dg/missing_optional_dummy_6a.f90: Adjust diagnostic pattern. + * gfortran.dg/ubsan/missing_optional_dummy_8.f90: New test. + +2024-03-17 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114296 + * gm2/pim/fail/badtype2.mod: New test. + 2024-03-16 Jakub Jelinek <jakub@redhat.com> PR target/114175 diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index 7d3afd3d3ffd..f728beeb11fc 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,7 @@ +2024-03-17 Iain Buclaw <ibuclaw@gdcproject.org> + + * libdruntime/MERGE: Merge upstream druntime 855353a1d9. + 2024-03-03 Iain Buclaw <ibuclaw@gdcproject.org> * libdruntime/MERGE: Merge upstream druntime 02d6d07a69. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ac5e6e921fdf..c4e5f57e1a31 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2024-03-17 François Dumont <fdumont@gcc.gnu.org> + + PR libstdc++/114316 + * include/debug/safe_iterator.tcc (_Safe_iterator<>::_M_valid_range): + First check if both iterators are value-initialized before checking if + singular. + * testsuite/23_containers/set/debug/114316.cc: New test case. + * testsuite/23_containers/vector/debug/114316.cc: New test case. + 2024-03-14 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/114325 From f0fda1aff0b752e4182c009c5526b9306bd35f7c Mon Sep 17 00:00:00 2001 From: John David Anglin <danglin@gcc.gnu.org> Date: Mon, 18 Mar 2024 00:19:36 +0000 Subject: [PATCH 098/551] hppa: Improve handling of REG+D addresses when generating PA 2.0 code In looking at PR 112415, it became clear that improvements could be made in the handling of loads and stores using REG+D addresses. A change in 2002 conflated two issues: 1) We can't generate insns with 14-bit displacements before reload completes when generating PA 1.x code since floating-point loads and stores only support 5-bit offsets in PA 1.x. 2) The GNU ELF 32-bit linker lacks relocation support for PA 2.0 floating point instructions with 14-bit displacements. These relocations affect instructions with symbolic references. The result of the change was to block creation of PA 2.0 instructions with 14-bit REG_D displacements for SImode, DImode, SFmode and DFmode on the GNU linux target before reload. This was unnecessary as these instructions don't need relocation. This change revises the INT14_OK_STRICT define to allow creation of instructions with 14-bit REG+D addresses before reload when generating PA 2.0 code. 2024-03-17 John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog: PR rtl-optimization/112415 * config/pa/pa.cc (pa_emit_move_sequence): Revise condition for symbolic memory operands. (pa_legitimate_address_p): Revise LO_SUM condition. * config/pa/pa.h (INT14_OK_STRICT): Revise define. Move comment about GNU linker to predicates.md. * config/pa/predicates.md (floating_point_store_memory_operand): Revise condition for symbolic memory operands. Update comment. --- gcc/config/pa/pa.cc | 18 ++++++++++++------ gcc/config/pa/pa.h | 15 ++------------- gcc/config/pa/predicates.md | 17 +++++++++++------ 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/gcc/config/pa/pa.cc b/gcc/config/pa/pa.cc index 5ab9eff4b5e7..d7666103de8f 100644 --- a/gcc/config/pa/pa.cc +++ b/gcc/config/pa/pa.cc @@ -2039,7 +2039,8 @@ pa_emit_move_sequence (rtx *operands, machine_mode mode, rtx scratch_reg) op1 = replace_equiv_address (op1, scratch_reg); } } - else if ((!INT14_OK_STRICT && symbolic_memory_operand (op1, VOIDmode)) + else if (((TARGET_ELF32 || !TARGET_PA_20) + && symbolic_memory_operand (op1, VOIDmode)) || IS_LO_SUM_DLT_ADDR_P (XEXP (op1, 0)) || IS_INDEX_ADDR_P (XEXP (op1, 0))) { @@ -2088,7 +2089,8 @@ pa_emit_move_sequence (rtx *operands, machine_mode mode, rtx scratch_reg) op0 = replace_equiv_address (op0, scratch_reg); } } - else if ((!INT14_OK_STRICT && symbolic_memory_operand (op0, VOIDmode)) + else if (((TARGET_ELF32 || !TARGET_PA_20) + && symbolic_memory_operand (op0, VOIDmode)) || IS_LO_SUM_DLT_ADDR_P (XEXP (op0, 0)) || IS_INDEX_ADDR_P (XEXP (op0, 0))) { @@ -11038,18 +11040,22 @@ pa_legitimate_address_p (machine_mode mode, rtx x, bool strict, code_helper) && (strict ? STRICT_REG_OK_FOR_BASE_P (y) : REG_OK_FOR_BASE_P (y))) { + y = XEXP (x, 1); + /* Needed for -fPIC */ if (mode == Pmode - && GET_CODE (XEXP (x, 1)) == UNSPEC) + && GET_CODE (y) == UNSPEC) return true; - if (!INT14_OK_STRICT - && (strict || !(reload_in_progress || reload_completed)) + /* Before reload, we need support for 14-bit floating + point loads and stores, and associated relocations. */ + if ((TARGET_ELF32 || !INT14_OK_STRICT) + && !reload_completed && mode != QImode && mode != HImode) return false; - if (CONSTANT_P (XEXP (x, 1))) + if (CONSTANT_P (y)) return true; } return false; diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 7abaeae269e9..403f16c5cb59 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -828,19 +828,8 @@ extern int may_call_alloca; /* Nonzero if 14-bit offsets can be used for all loads and stores. This is not possible when generating PA 1.x code as floating point - accesses only support 5-bit offsets. Note that we do not forbid - the use of 14-bit offsets prior to reload. Instead, we use secondary - reloads to fix REG+D memory addresses for floating-point accesses. - - FIXME: the GNU ELF linker clobbers the LSB of the FP register number - in PA 2.0 floating-point insns with long displacements. This is - because R_PARISC_DPREL14WR and other relocations like it are not - yet supported by GNU ld. For now, we reject long displacements - on this target. */ - -#define INT14_OK_STRICT \ - (TARGET_SOFT_FLOAT \ - || (TARGET_PA_20 && !TARGET_ELF32 && !TARGET_ELF64)) + accesses only support 5-bit offsets. */ +#define INT14_OK_STRICT (TARGET_SOFT_FLOAT || TARGET_PA_20) /* The macros REG_OK_FOR..._P assume that the arg is a REG rtx and check its validity for a certain class. diff --git a/gcc/config/pa/predicates.md b/gcc/config/pa/predicates.md index 3bd3a7c212f3..50dffa1138ca 100644 --- a/gcc/config/pa/predicates.md +++ b/gcc/config/pa/predicates.md @@ -331,12 +331,16 @@ && !IS_INDEX_ADDR_P (XEXP (op, 0))); }) -;; True iff the operand OP can be used as the destination operand of -;; a floating point store. This also implies the operand could be used as +;; True iff the operand OP can be used as the destination operand of a +;; floating point store. This also implies the operand could be used as ;; the source operand of a floating point load. LO_SUM DLT and indexed -;; memory operands are not allowed. Symbolic operands are accepted if -;; INT14_OK_STRICT is true. We accept reloading pseudos and other memory -;; operands. +;; memory operands are not allowed. Symbolic operands are accepted for +;; PA 2.0 when TARGET_ELF32 is not true. We accept reloading pseudos +;; and other memory; operands. + +;; FIXME: The GNU ELF32 linker clobbers the LSB of the FP register number +;; in PA 2.0 {fldw,fstw} insns with long displacements. This is because +;; R_PARISC_DPREL14WR and other relocations like it are not supported. (define_predicate "floating_point_store_memory_operand" (match_code "reg,mem") @@ -362,7 +366,8 @@ return false; return ((reload_in_progress || memory_address_p (mode, XEXP (op, 0))) - && (INT14_OK_STRICT || !symbolic_memory_operand (op, VOIDmode)) + && !((TARGET_ELF32 || !TARGET_PA_20) + && symbolic_memory_operand (op, VOIDmode)) && !IS_LO_SUM_DLT_ADDR_P (XEXP (op, 0)) && !IS_INDEX_ADDR_P (XEXP (op, 0))); }) From 942d470a5a4fb1baeff943127a81b441dffaa543 Mon Sep 17 00:00:00 2001 From: liuhongt <hongtao.liu@intel.com> Date: Fri, 15 Mar 2024 10:59:10 +0800 Subject: [PATCH 099/551] Add missing <any_logic>hf/bf patterns. It will be used by copysignm3/xorsignm3/lroundmn2 expanders. gcc/ChangeLog: PR target/114334 * config/i386/i386.md (mode): Add new number V8BF,V16BF,V32BF. (MODEF248): New mode iterator. (ssevecmodesuffix): Hanlde BF and HF. * config/i386/sse.md (andnot<mode>3): Extend to HF/BF. (<code><mode>3): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/pr114334.c: New test. --- gcc/config/i386/i386.md | 13 +++++++++---- gcc/config/i386/sse.md | 22 +++++++++++----------- gcc/testsuite/gcc.target/i386/pr114334.c | 8 ++++++++ 3 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr114334.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index df97a2d6270d..11fdc6af3faf 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -543,8 +543,9 @@ ;; Main data type used by the insn (define_attr "mode" - "unknown,none,QI,HI,SI,DI,TI,OI,XI,HF,BF,SF,DF,XF,TF,V32HF,V16HF,V8HF, - V16SF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,V8DF,V4HF,V4BF,V2HF,V2BF" + "unknown,none,QI,HI,SI,DI,TI,OI,XI,HF,BF,SF,DF,XF,TF, + V32HF,V16HF,V8HF,V4HF,V2HF,V32BF,V16BF,V8BF,V4BF,V2BF, + V16SF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,V8DF" (const_string "unknown")) ;; The CPU unit operations uses. @@ -1323,6 +1324,8 @@ ;; SSE and x87 SFmode and DFmode floating point modes (define_mode_iterator MODEF [SF DF]) +(define_mode_iterator MODEF248 [BF HF SF (DF "TARGET_SSE2")]) + ;; SSE floating point modes (define_mode_iterator MODEFH [(HF "TARGET_AVX512FP16") SF DF]) @@ -1347,7 +1350,8 @@ (V64QI "b") (V32HI "w") (V16SI "d") (V8DI "q")]) ;; SSE vector suffix for floating point modes -(define_mode_attr ssevecmodesuffix [(SF "ps") (DF "pd")]) +;; BF HF use same suffix as SF for logic operations. +(define_mode_attr ssevecmodesuffix [(BF "ps") (HF "ps") (SF "ps") (DF "pd")]) ;; SSE vector mode corresponding to a scalar mode (define_mode_attr ssevecmode @@ -1357,7 +1361,8 @@ ;; AVX512F vector mode corresponding to a scalar mode (define_mode_attr avx512fvecmode - [(QI "V64QI") (HI "V32HI") (SI "V16SI") (DI "V8DI") (SF "V16SF") (DF "V8DF")]) + [(QI "V64QI") (HI "V32HI") (SI "V16SI") (DI "V8DI") + (HF "V32HF") (BF "V32BF") (SF "V16SF") (DF "V8DF")]) ;; Instruction suffix for REX 64bit operators. (define_mode_attr rex64suffix [(SI "{l}") (DI "{q}")]) diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 1bc614ab7027..3286d3a4facc 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -5125,12 +5125,12 @@ ;; because the native instructions read the full 128-bits. (define_insn "*andnot<mode>3" - [(set (match_operand:MODEF 0 "register_operand" "=x,x,v,v") - (and:MODEF - (not:MODEF - (match_operand:MODEF 1 "register_operand" "0,x,v,v")) - (match_operand:MODEF 2 "register_operand" "x,x,v,v")))] - "SSE_FLOAT_MODE_P (<MODE>mode)" + [(set (match_operand:MODEF248 0 "register_operand" "=x,x,v,v") + (and:MODEF248 + (not:MODEF248 + (match_operand:MODEF248 1 "register_operand" "0,x,v,v")) + (match_operand:MODEF248 2 "register_operand" "x,x,v,v")))] + "TARGET_SSE" { char buf[128]; const char *ops; @@ -5257,11 +5257,11 @@ (const_string "TI")))]) (define_insn "<code><mode>3" - [(set (match_operand:MODEF 0 "register_operand" "=x,x,v,v") - (any_logic:MODEF - (match_operand:MODEF 1 "register_operand" "%0,x,v,v") - (match_operand:MODEF 2 "register_operand" "x,x,v,v")))] - "SSE_FLOAT_MODE_P (<MODE>mode)" + [(set (match_operand:MODEF248 0 "register_operand" "=x,x,v,v") + (any_logic:MODEF248 + (match_operand:MODEF248 1 "register_operand" "%0,x,v,v") + (match_operand:MODEF248 2 "register_operand" "x,x,v,v")))] + "TARGET_SSE" { char buf[128]; const char *ops; diff --git a/gcc/testsuite/gcc.target/i386/pr114334.c b/gcc/testsuite/gcc.target/i386/pr114334.c new file mode 100644 index 000000000000..8e38e24cd166 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114334.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -mavx512fp16" } */ + +long +foo(_Float16 f) +{ + return __builtin_lroundf16(f); +} From 58753dba800de14144785199fd710e9b00544155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20SVENSSON?= <torbjorn.svensson@foss.st.com> Date: Sun, 10 Mar 2024 18:18:51 +0100 Subject: [PATCH 100/551] testsuite: Define _POSIX_C_SOURCE for test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As the tests assume that strndup() is visible (only part of POSIX.1-2008) define the guard to ensure that it's visible. Currently, glibc appears to always have this defined in C++, newlib does not. Without this patch, fails like this can be seen: Testing analyzer/strndup-1.c, -std=c++98 .../strndup-1.c: In function 'void test_1(const char*)': .../strndup-1.c:11:13: error: 'strndup' was not declared in this scope; did you mean 'strncmp'? .../strndup-1.c: In function 'void test_2(const char*)': .../strndup-1.c:16:13: error: 'strndup' was not declared in this scope; did you mean 'strncmp'? .../strndup-1.c: In function 'void test_3(const char*)': .../strndup-1.c:21:13: error: 'strndup' was not declared in this scope; did you mean 'strncmp'? Patch has been verified on Linux. gcc/testsuite/ChangeLog: * c-c++-common/analyzer/strndup-1.c: Define _POSIX_C_SOURCE. Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> --- gcc/testsuite/c-c++-common/analyzer/strndup-1.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/testsuite/c-c++-common/analyzer/strndup-1.c b/gcc/testsuite/c-c++-common/analyzer/strndup-1.c index 85ccae85d832..577ece0cfbaa 100644 --- a/gcc/testsuite/c-c++-common/analyzer/strndup-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/strndup-1.c @@ -1,4 +1,5 @@ /* { dg-skip-if "no strndup in libc" { *-*-darwin[789]* *-*-darwin10* hppa*-*-hpux* *-*-mingw* *-*-vxworks* } } */ +/* { dg-additional-options "-D_POSIX_C_SOURCE=200809L" } */ #include <string.h> #include <stdlib.h> From 9361f19e081294b04e16ac2f6056b3b910f27ff4 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay <avr@gjlay.de> Date: Mon, 18 Mar 2024 08:50:02 +0100 Subject: [PATCH 101/551] avr.md - Tweak xor insn constraints. xor insn can handle some more values without the requirement of a scratch register. This patch adds a new constraint alternative for such values. The output function avr_out_bitop already handles these cases, so no change is needed there. gcc/ * config/avr/constraints.md (CX2, CX3, CX4): New constraints. * config/avr/avr-protos.h (avr_xor_noclobber_dconst): New proto. * config/avr/avr.cc (avr_xor_noclobber_dconst): New function. * config/avr/avr.md (xorhi3, *xorhi3): Add "d,0,CX2,X" alternative. (xorpsi3, *xorpsi3): Add "d,0,CX3,X" alternative. (xorsi3, *xorsi3): Add "d,0,CX4,X" alternative. --- gcc/config/avr/avr-protos.h | 1 + gcc/config/avr/avr.cc | 25 +++++++++++++++ gcc/config/avr/avr.md | 60 +++++++++++++++++------------------ gcc/config/avr/constraints.md | 17 +++++++++- 4 files changed, 72 insertions(+), 31 deletions(-) diff --git a/gcc/config/avr/avr-protos.h b/gcc/config/avr/avr-protos.h index bb6803121177..dc23cfbf461c 100644 --- a/gcc/config/avr/avr-protos.h +++ b/gcc/config/avr/avr-protos.h @@ -101,6 +101,7 @@ extern const char* avr_out_xload (rtx_insn *, rtx*, int*); extern const char* avr_out_cpymem (rtx_insn *, rtx*, int*); extern const char* avr_out_insert_bits (rtx*, int*); extern bool avr_popcount_each_byte (rtx, int, int); +extern bool avr_xor_noclobber_dconst (rtx, int); extern bool avr_has_nibble_0xf (rtx); extern int extra_constraint_Q (rtx x); diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc index 00fce8da15f1..12c59668b4c8 100644 --- a/gcc/config/avr/avr.cc +++ b/gcc/config/avr/avr.cc @@ -281,6 +281,31 @@ avr_popcount_each_byte (rtx xval, int n_bytes, int pop_mask) } +/* Constraint helper function. XVAL is a CONST_INT. Return true if we + can perform XOR without a clobber reg, provided the operation is on + a d-register. This means each byte is in { 0, 0xff, 0x80 }. */ + +bool +avr_xor_noclobber_dconst (rtx xval, int n_bytes) +{ + machine_mode mode = GET_MODE (xval); + + if (VOIDmode == mode) + mode = SImode; + + for (int i = 0; i < n_bytes; ++i) + { + rtx xval8 = simplify_gen_subreg (QImode, xval, mode, i); + unsigned int val8 = UINTVAL (xval8) & GET_MODE_MASK (QImode); + + if (val8 != 0 && val8 != 0xff && val8 != 0x80) + return false; + } + + return true; +} + + /* Access some RTX as INT_MODE. If X is a CONST_FIXED we can get the bit representation of X by "casting" it to CONST_INT. */ diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index bc408633eb5d..97f42be7729c 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -4741,10 +4741,10 @@ [(set_attr "length" "1")]) (define_insn_and_split "xorhi3" - [(set (match_operand:HI 0 "register_operand" "=??r,r ,r") - (xor:HI (match_operand:HI 1 "register_operand" "%0,0 ,0") - (match_operand:HI 2 "nonmemory_operand" "r,Cx2,n"))) - (clobber (match_scratch:QI 3 "=X,X ,&d"))] + [(set (match_operand:HI 0 "register_operand" "=??r,r ,d ,r") + (xor:HI (match_operand:HI 1 "register_operand" "%0,0 ,0 ,0") + (match_operand:HI 2 "nonmemory_operand" "r,Cx2,CX2,n"))) + (clobber (match_scratch:QI 3 "=X,X ,X ,&d"))] "" "#" "&& reload_completed" @@ -4755,10 +4755,10 @@ (clobber (reg:CC REG_CC))])]) (define_insn "*xorhi3" - [(set (match_operand:HI 0 "register_operand" "=??r,r ,r") - (xor:HI (match_operand:HI 1 "register_operand" "%0,0 ,0") - (match_operand:HI 2 "nonmemory_operand" "r,Cx2,n"))) - (clobber (match_scratch:QI 3 "=X,X ,&d")) + [(set (match_operand:HI 0 "register_operand" "=??r,r ,d ,r") + (xor:HI (match_operand:HI 1 "register_operand" "%0,0 ,0 ,0") + (match_operand:HI 2 "nonmemory_operand" "r,Cx2,CX2,n"))) + (clobber (match_scratch:QI 3 "=X,X ,X ,&d")) (clobber (reg:CC REG_CC))] "reload_completed" { @@ -4767,14 +4767,14 @@ return avr_out_bitop (insn, operands, NULL); } - [(set_attr "length" "2,2,4") - (set_attr "adjust_len" "*,out_bitop,out_bitop")]) + [(set_attr "length" "2,2,4,4") + (set_attr "adjust_len" "*,out_bitop,out_bitop,out_bitop")]) (define_insn_and_split "xorpsi3" - [(set (match_operand:PSI 0 "register_operand" "=??r,r ,r") - (xor:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0") - (match_operand:PSI 2 "nonmemory_operand" "r,Cx3,n"))) - (clobber (match_scratch:QI 3 "=X,X ,&d"))] + [(set (match_operand:PSI 0 "register_operand" "=??r,r ,d ,r") + (xor:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0 ,0") + (match_operand:PSI 2 "nonmemory_operand" "r,Cx3,CX3,n"))) + (clobber (match_scratch:QI 3 "=X,X ,X ,&d"))] "" "#" "&& reload_completed" @@ -4785,10 +4785,10 @@ (clobber (reg:CC REG_CC))])]) (define_insn "*xorpsi3" - [(set (match_operand:PSI 0 "register_operand" "=??r,r ,r") - (xor:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0") - (match_operand:PSI 2 "nonmemory_operand" "r,Cx3,n"))) - (clobber (match_scratch:QI 3 "=X,X ,&d")) + [(set (match_operand:PSI 0 "register_operand" "=??r,r ,d ,r") + (xor:PSI (match_operand:PSI 1 "register_operand" "%0,0 ,0 ,0") + (match_operand:PSI 2 "nonmemory_operand" "r,Cx3,CX3,n"))) + (clobber (match_scratch:QI 3 "=X,X ,X ,&d")) (clobber (reg:CC REG_CC))] "reload_completed" { @@ -4799,14 +4799,14 @@ return avr_out_bitop (insn, operands, NULL); } - [(set_attr "length" "3,6,6") - (set_attr "adjust_len" "*,out_bitop,out_bitop")]) + [(set_attr "length" "3,6,6,6") + (set_attr "adjust_len" "*,out_bitop,out_bitop,out_bitop")]) (define_insn_and_split "xorsi3" - [(set (match_operand:SI 0 "register_operand" "=??r,r ,r") - (xor:SI (match_operand:SI 1 "register_operand" "%0,0 ,0") - (match_operand:SI 2 "nonmemory_operand" "r,Cx4,n"))) - (clobber (match_scratch:QI 3 "=X,X ,&d"))] + [(set (match_operand:SI 0 "register_operand" "=??r,r ,d ,r") + (xor:SI (match_operand:SI 1 "register_operand" "%0,0 ,0 ,0") + (match_operand:SI 2 "nonmemory_operand" "r,Cx4,CX4,n"))) + (clobber (match_scratch:QI 3 "=X,X ,X ,&d"))] "" "#" "&& reload_completed" @@ -4817,10 +4817,10 @@ (clobber (reg:CC REG_CC))])]) (define_insn "*xorsi3" - [(set (match_operand:SI 0 "register_operand" "=??r,r ,r") - (xor:SI (match_operand:SI 1 "register_operand" "%0,0 ,0") - (match_operand:SI 2 "nonmemory_operand" "r,Cx4,n"))) - (clobber (match_scratch:QI 3 "=X,X ,&d")) + [(set (match_operand:SI 0 "register_operand" "=??r,r ,d ,r") + (xor:SI (match_operand:SI 1 "register_operand" "%0,0 ,0 ,0") + (match_operand:SI 2 "nonmemory_operand" "r,Cx4,CX4,n"))) + (clobber (match_scratch:QI 3 "=X,X ,X ,&d")) (clobber (reg:CC REG_CC))] "reload_completed" { @@ -4832,8 +4832,8 @@ return avr_out_bitop (insn, operands, NULL); } - [(set_attr "length" "4,8,8") - (set_attr "adjust_len" "*,out_bitop,out_bitop")]) + [(set_attr "length" "4,8,8,8") + (set_attr "adjust_len" "*,out_bitop,out_bitop,out_bitop")]) (define_split diff --git a/gcc/config/avr/constraints.md b/gcc/config/avr/constraints.md index fac54da17dbd..b4e5525d1978 100644 --- a/gcc/config/avr/constraints.md +++ b/gcc/config/avr/constraints.md @@ -169,7 +169,7 @@ (match_test "avr_popcount_each_byte (op, 4, (1<<0) | (1<<7) | (1<<8))"))) (define_constraint "Co1" - "Constant 1-byte integer that allows AND by means of SET + BLD." + "Constant 1-byte integer that allows OR by means of SET + BLD." (and (match_code "const_int") (match_test "avr_popcount_each_byte (op, 1, 1<<1)"))) @@ -218,6 +218,21 @@ (and (match_code "const_int") (match_test "avr_popcount_each_byte (op, 4, (1<<0) | (1<<8))"))) +(define_constraint "CX2" + "Constant 2-byte integer that allows XOR without clobber register but requires a d-register." + (and (match_code "const_int") + (match_test "avr_xor_noclobber_dconst (op, 2)"))) + +(define_constraint "CX3" + "Constant 3-byte integer that allows XOR without clobber register but requires a d-register." + (and (match_code "const_int") + (match_test "avr_xor_noclobber_dconst (op, 3)"))) + +(define_constraint "CX4" + "Constant 4-byte integer that allows XOR without clobber register but requires a d-register." + (and (match_code "const_int") + (match_test "avr_xor_noclobber_dconst (op, 4)"))) + (define_constraint "Csp" "Integer constant in the range -11 @dots{} 6." (and (match_code "const_int") From d0aa0af9a9b7dd709a8c7ff6604ed6b7da0fc23a Mon Sep 17 00:00:00 2001 From: Jan Hubicka <jh@suse.cz> Date: Mon, 18 Mar 2024 10:22:44 +0100 Subject: [PATCH 102/551] Add AMD znver5 processor enablement with scheduler model 2024-02-14 Jan Hubicka <jh@suse.cz> Karthiban Anbazhagan <Karthiban.Anbazhagan@amd.com> gcc/ChangeLog: * common/config/i386/cpuinfo.h (get_amd_cpu): Recognize znver5. * common/config/i386/i386-common.cc (processor_names): Add znver5. (processor_alias_table): Likewise. * common/config/i386/i386-cpuinfo.h (processor_types): Add new zen family. (processor_subtypes): Add znver5. * config.gcc (x86_64-*-* |...): Likewise. * config/i386/driver-i386.cc (host_detect_local_cpu): Let march=native detect znver5 cpu's. * config/i386/i386-c.cc (ix86_target_macros_internal): Add znver5. * config/i386/i386-options.cc (m_ZNVER5): New definition (processor_cost_table): Add znver5. * config/i386/i386.cc (ix86_reassociation_width): Likewise. * config/i386/i386.h (processor_type): Add PROCESSOR_ZNVER5 (PTA_ZNVER5): New definition. * config/i386/i386.md (define_attr "cpu"): Add znver5. (Scheduling descriptions) Add znver5.md. * config/i386/x86-tune-costs.h (znver5_cost): New definition. * config/i386/x86-tune-sched.cc (ix86_issue_rate): Add znver5. (ix86_adjust_cost): Likewise. * config/i386/x86-tune.def (avx512_move_by_pieces): Add m_ZNVER5. (avx512_store_by_pieces): Add m_ZNVER5. * doc/extend.texi: Add znver5. * doc/invoke.texi: Likewise. * config/i386/znver4.md: Rename to zn4zn5.md; combine znver4 and znver5 Scheduler. gcc/testsuite/ChangeLog: * g++.target/i386/mv29.C: Handle znver5 arch. * gcc.target/i386/funcspec-56.inc:Likewise. --- gcc/common/config/i386/cpuinfo.h | 16 + gcc/common/config/i386/i386-common.cc | 6 +- gcc/common/config/i386/i386-cpuinfo.h | 2 + gcc/config.gcc | 14 +- gcc/config/i386/driver-i386.cc | 5 + gcc/config/i386/i386-c.cc | 7 + gcc/config/i386/i386-options.cc | 6 +- gcc/config/i386/i386.cc | 3 +- gcc/config/i386/i386.h | 4 +- gcc/config/i386/i386.md | 5 +- gcc/config/i386/x86-tune-costs.h | 136 +++ gcc/config/i386/x86-tune-sched.cc | 2 + gcc/config/i386/x86-tune.def | 4 +- gcc/config/i386/znver4.md | 1068 ----------------- gcc/doc/extend.texi | 3 + gcc/doc/invoke.texi | 10 + gcc/testsuite/g++.target/i386/mv29.C | 6 + gcc/testsuite/gcc.target/i386/funcspec-56.inc | 2 + 18 files changed, 219 insertions(+), 1080 deletions(-) delete mode 100644 gcc/config/i386/znver4.md diff --git a/gcc/common/config/i386/cpuinfo.h b/gcc/common/config/i386/cpuinfo.h index a595ee537a88..017a952a5db0 100644 --- a/gcc/common/config/i386/cpuinfo.h +++ b/gcc/common/config/i386/cpuinfo.h @@ -310,6 +310,22 @@ get_amd_cpu (struct __processor_model *cpu_model, cpu_model->__cpu_subtype = AMDFAM19H_ZNVER3; } break; + case 0x1a: + cpu_model->__cpu_type = AMDFAM1AH; + if (model <= 0x77) + { + cpu = "znver5"; + CHECK___builtin_cpu_is ("znver5"); + cpu_model->__cpu_subtype = AMDFAM1AH_ZNVER5; + } + else if (has_cpu_feature (cpu_model, cpu_features2, + FEATURE_AVX512VP2INTERSECT)) + { + cpu = "znver5"; + CHECK___builtin_cpu_is ("znver5"); + cpu_model->__cpu_subtype = AMDFAM1AH_ZNVER5; + } + break; default: break; } diff --git a/gcc/common/config/i386/i386-common.cc b/gcc/common/config/i386/i386-common.cc index c35191e69251..f814df8385b9 100644 --- a/gcc/common/config/i386/i386-common.cc +++ b/gcc/common/config/i386/i386-common.cc @@ -2166,7 +2166,8 @@ const char *const processor_names[] = "znver1", "znver2", "znver3", - "znver4" + "znver4", + "znver5" }; /* Guarantee that the array is aligned with enum processor_type. */ @@ -2435,6 +2436,9 @@ const pta processor_alias_table[] = {"znver4", PROCESSOR_ZNVER4, CPU_ZNVER4, PTA_ZNVER4, M_CPU_SUBTYPE (AMDFAM19H_ZNVER4), P_PROC_AVX512F}, + {"znver5", PROCESSOR_ZNVER5, CPU_ZNVER5, + PTA_ZNVER5, + M_CPU_SUBTYPE (AMDFAM1AH_ZNVER5), P_PROC_AVX512F}, {"btver1", PROCESSOR_BTVER1, CPU_GENERIC, PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_PRFCHW diff --git a/gcc/common/config/i386/i386-cpuinfo.h b/gcc/common/config/i386/i386-cpuinfo.h index 2ee7470c8daa..73131657eabc 100644 --- a/gcc/common/config/i386/i386-cpuinfo.h +++ b/gcc/common/config/i386/i386-cpuinfo.h @@ -63,6 +63,7 @@ enum processor_types INTEL_SIERRAFOREST, INTEL_GRANDRIDGE, INTEL_CLEARWATERFOREST, + AMDFAM1AH, CPU_TYPE_MAX, BUILTIN_CPU_TYPE_MAX = CPU_TYPE_MAX }; @@ -104,6 +105,7 @@ enum processor_subtypes INTEL_COREI7_ARROWLAKE_S, INTEL_COREI7_PANTHERLAKE, ZHAOXIN_FAM7H_YONGFENG, + AMDFAM1AH_ZNVER5, CPU_SUBTYPE_MAX }; diff --git a/gcc/config.gcc b/gcc/config.gcc index 624e0dae191a..040afabd9ece 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -703,9 +703,9 @@ c7 esther" # 64-bit x86 processors supported by --with-arch=. Each processor # MUST be separated by exactly one space. x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \ -bdver3 bdver4 znver1 znver2 znver3 znver4 btver1 btver2 k8 k8-sse3 opteron \ -opteron-sse3 nocona core2 corei7 corei7-avx core-avx-i core-avx2 atom \ -slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \ +bdver3 bdver4 znver1 znver2 znver3 znver4 znver5 btver1 btver2 k8 k8-sse3 \ +opteron opteron-sse3 nocona core2 corei7 corei7-avx core-avx-i core-avx2 \ +atom slm nehalem westmere sandybridge ivybridge haswell broadwell bonnell \ silvermont knl knm skylake-avx512 cannonlake icelake-client icelake-server \ skylake goldmont goldmont-plus tremont cascadelake tigerlake cooperlake \ sapphirerapids alderlake rocketlake eden-x2 nano nano-1000 nano-2000 nano-3000 \ @@ -3759,6 +3759,10 @@ case ${target} in arch=znver4 cpu=znver4 ;; + znver5-*) + arch=znver5 + cpu=znver5 + ;; bdver4-*) arch=bdver4 cpu=bdver4 @@ -3896,6 +3900,10 @@ case ${target} in arch=znver4 cpu=znver4 ;; + znver5-*) + arch=znver5 + cpu=znver5 + ;; bdver4-*) arch=bdver4 cpu=bdver4 diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc index 04f523963565..bb53af4b2039 100644 --- a/gcc/config/i386/driver-i386.cc +++ b/gcc/config/i386/driver-i386.cc @@ -492,6 +492,8 @@ const char *host_detect_local_cpu (int argc, const char **argv) processor = PROCESSOR_GEODE; else if (has_feature (FEATURE_MOVBE) && family == 22) processor = PROCESSOR_BTVER2; + else if (has_feature (FEATURE_AVX512VP2INTERSECT)) + processor = PROCESSOR_ZNVER5; else if (has_feature (FEATURE_AVX512F)) processor = PROCESSOR_ZNVER4; else if (has_feature (FEATURE_VAES)) @@ -834,6 +836,9 @@ const char *host_detect_local_cpu (int argc, const char **argv) case PROCESSOR_ZNVER4: cpu = "znver4"; break; + case PROCESSOR_ZNVER5: + cpu = "znver5"; + break; case PROCESSOR_BTVER1: cpu = "btver1"; break; diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc index 366b560158a1..114908c7ec0c 100644 --- a/gcc/config/i386/i386-c.cc +++ b/gcc/config/i386/i386-c.cc @@ -136,6 +136,10 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, def_or_undef (parse_in, "__znver4"); def_or_undef (parse_in, "__znver4__"); break; + case PROCESSOR_ZNVER5: + def_or_undef (parse_in, "__znver5"); + def_or_undef (parse_in, "__znver5__"); + break; case PROCESSOR_BTVER1: def_or_undef (parse_in, "__btver1"); def_or_undef (parse_in, "__btver1__"); @@ -374,6 +378,9 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, case PROCESSOR_ZNVER4: def_or_undef (parse_in, "__tune_znver4__"); break; + case PROCESSOR_ZNVER5: + def_or_undef (parse_in, "__tune_znver5__"); + break; case PROCESSOR_BTVER1: def_or_undef (parse_in, "__tune_btver1__"); break; diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 3cc147fa70c3..7896d5769773 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -174,11 +174,12 @@ along with GCC; see the file COPYING3. If not see #define m_ZNVER2 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER2) #define m_ZNVER3 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER3) #define m_ZNVER4 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER4) +#define m_ZNVER5 (HOST_WIDE_INT_1U<<PROCESSOR_ZNVER5) #define m_BTVER1 (HOST_WIDE_INT_1U<<PROCESSOR_BTVER1) #define m_BTVER2 (HOST_WIDE_INT_1U<<PROCESSOR_BTVER2) #define m_BDVER (m_BDVER1 | m_BDVER2 | m_BDVER3 | m_BDVER4) #define m_BTVER (m_BTVER1 | m_BTVER2) -#define m_ZNVER (m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4) +#define m_ZNVER (m_ZNVER1 | m_ZNVER2 | m_ZNVER3 | m_ZNVER4 | m_ZNVER5) #define m_AMD_MULTIPLE (m_ATHLON_K8 | m_AMDFAM10 | m_BDVER | m_BTVER \ | m_ZNVER) @@ -815,7 +816,8 @@ static const struct processor_costs *processor_cost_table[] = &znver1_cost, &znver2_cost, &znver3_cost, - &znver4_cost + &znver4_cost, + &znver5_cost }; /* Guarantee that the array is aligned with enum processor_type. */ diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index 2357ba3f4c6b..4d6b2b98761d 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -24469,7 +24469,8 @@ ix86_reassociation_width (unsigned int op, machine_mode mode) /* Integer vector instructions execute in FP unit and can execute 3 additions and one multiplication per cycle. */ if ((ix86_tune == PROCESSOR_ZNVER1 || ix86_tune == PROCESSOR_ZNVER2 - || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4) + || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4 + || ix86_tune == PROCESSOR_ZNVER5) && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS) return 1; diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index efd46a143136..529edff93a41 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2320,6 +2320,7 @@ enum processor_type PROCESSOR_ZNVER2, PROCESSOR_ZNVER3, PROCESSOR_ZNVER4, + PROCESSOR_ZNVER5, PROCESSOR_max }; @@ -2442,7 +2443,8 @@ constexpr wide_int_bitmask PTA_ZNVER4 = PTA_ZNVER3 | PTA_AVX512F | PTA_AVX512DQ | PTA_AVX512IFMA | PTA_AVX512CD | PTA_AVX512BW | PTA_AVX512VL | PTA_AVX512BF16 | PTA_AVX512VBMI | PTA_AVX512VBMI2 | PTA_GFNI | PTA_AVX512VNNI | PTA_AVX512BITALG | PTA_AVX512VPOPCNTDQ | PTA_EVEX512; - +constexpr wide_int_bitmask PTA_ZNVER5 = PTA_ZNVER4 | PTA_AVXVNNI + | PTA_MOVDIRI | PTA_MOVDIR64B | PTA_AVX512VP2INTERSECT | PTA_PREFETCHI; constexpr wide_int_bitmask PTA_LUJIAZUI = PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_BMI | PTA_BMI2 | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 11fdc6af3faf..6ac401154e47 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -518,7 +518,8 @@ ;; Processor type. (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem, atom,slm,glm,haswell,generic,lujiazui,yongfeng,amdfam10,bdver1, - bdver2,bdver3,bdver4,btver2,znver1,znver2,znver3,znver4" + bdver2,bdver3,bdver4,btver2,znver1,znver2,znver3,znver4, + znver5" (const (symbol_ref "ix86_schedule"))) ;; A basic instruction type. Refinements due to arguments to be @@ -1392,7 +1393,7 @@ (include "bdver3.md") (include "btver2.md") (include "znver.md") -(include "znver4.md") +(include "zn4zn5.md") (include "geode.md") (include "atom.md") (include "slm.md") diff --git a/gcc/config/i386/x86-tune-costs.h b/gcc/config/i386/x86-tune-costs.h index fb97de4f3ac2..65d7d1f7e429 100644 --- a/gcc/config/i386/x86-tune-costs.h +++ b/gcc/config/i386/x86-tune-costs.h @@ -1986,6 +1986,142 @@ struct processor_costs znver4_cost = { 2, /* Small unroll factor. */ }; +/* This table currently replicates znver4_cost table. */ +struct processor_costs znver5_cost = { + { + /* Start of register allocator costs. integer->integer move cost is 2. */ + + /* reg-reg moves are done by renaming and thus they are even cheaper than + 1 cycle. Because reg-reg move cost is 2 and following tables correspond + to doubles of latencies, we do not model this correctly. It does not + seem to make practical difference to bump prices up even more. */ + 6, /* cost for loading QImode using + movzbl. */ + {6, 6, 6}, /* cost of loading integer registers + in QImode, HImode and SImode. + Relative to reg-reg move (2). */ + {8, 8, 8}, /* cost of storing integer + registers. */ + 2, /* cost of reg,reg fld/fst. */ + {14, 14, 17}, /* cost of loading fp registers + in SFmode, DFmode and XFmode. */ + {12, 12, 16}, /* cost of storing fp registers + in SFmode, DFmode and XFmode. */ + 2, /* cost of moving MMX register. */ + {6, 6}, /* cost of loading MMX registers + in SImode and DImode. */ + {8, 8}, /* cost of storing MMX registers + in SImode and DImode. */ + 2, 2, 3, /* cost of moving XMM,YMM,ZMM + register. */ + {6, 6, 10, 10, 12}, /* cost of loading SSE registers + in 32,64,128,256 and 512-bit. */ + {8, 8, 8, 12, 12}, /* cost of storing SSE registers + in 32,64,128,256 and 512-bit. */ + 6, 8, /* SSE->integer and integer->SSE + moves. */ + 8, 8, /* mask->integer and integer->mask moves */ + {6, 6, 6}, /* cost of loading mask register + in QImode, HImode, SImode. */ + {8, 8, 8}, /* cost if storing mask register + in QImode, HImode, SImode. */ + 2, /* cost of moving mask register. */ + /* End of register allocator costs. */ + }, + + COSTS_N_INSNS (1), /* cost of an add instruction. */ + /* TODO: Lea with 3 components has cost 2. */ + COSTS_N_INSNS (1), /* cost of a lea instruction. */ + COSTS_N_INSNS (1), /* variable shift costs. */ + COSTS_N_INSNS (1), /* constant shift costs. */ + {COSTS_N_INSNS (3), /* cost of starting multiply for QI. */ + COSTS_N_INSNS (3), /* HI. */ + COSTS_N_INSNS (3), /* SI. */ + COSTS_N_INSNS (3), /* DI. */ + COSTS_N_INSNS (3)}, /* other. */ + 0, /* cost of multiply per each bit + set. */ + {COSTS_N_INSNS (10), /* cost of a divide/mod for QI. */ + COSTS_N_INSNS (11), /* HI. */ + COSTS_N_INSNS (13), /* SI. */ + COSTS_N_INSNS (16), /* DI. */ + COSTS_N_INSNS (16)}, /* other. */ + COSTS_N_INSNS (1), /* cost of movsx. */ + COSTS_N_INSNS (1), /* cost of movzx. */ + 8, /* "large" insn. */ + 9, /* MOVE_RATIO. */ + 6, /* CLEAR_RATIO */ + {6, 6, 6}, /* cost of loading integer registers + in QImode, HImode and SImode. + Relative to reg-reg move (2). */ + {8, 8, 8}, /* cost of storing integer + registers. */ + {6, 6, 10, 10, 12}, /* cost of loading SSE registers + in 32bit, 64bit, 128bit, 256bit and 512bit */ + {8, 8, 8, 12, 12}, /* cost of storing SSE register + in 32bit, 64bit, 128bit, 256bit and 512bit */ + {6, 6, 6, 6, 6}, /* cost of unaligned loads. */ + {8, 8, 8, 8, 8}, /* cost of unaligned stores. */ + 2, 2, 2, /* cost of moving XMM,YMM,ZMM + register. */ + 6, /* cost of moving SSE register to integer. */ + /* VGATHERDPD is 17 uops and throughput is 4, VGATHERDPS is 24 uops, + throughput 5. Approx 7 uops do not depend on vector size and every load + is 5 uops. */ + 14, 10, /* Gather load static, per_elt. */ + 14, 20, /* Gather store static, per_elt. */ + 32, /* size of l1 cache. */ + 1024, /* size of l2 cache. */ + 64, /* size of prefetch block. */ + /* New AMD processors never drop prefetches; if they cannot be performed + immediately, they are queued. We set number of simultaneous prefetches + to a large constant to reflect this (it probably is not a good idea not + to limit number of prefetches at all, as their execution also takes some + time). */ + 100, /* number of parallel prefetches. */ + 3, /* Branch cost. */ + COSTS_N_INSNS (7), /* cost of FADD and FSUB insns. */ + COSTS_N_INSNS (7), /* cost of FMUL instruction. */ + /* Latency of fdiv is 8-15. */ + COSTS_N_INSNS (15), /* cost of FDIV instruction. */ + COSTS_N_INSNS (1), /* cost of FABS instruction. */ + COSTS_N_INSNS (1), /* cost of FCHS instruction. */ + /* Latency of fsqrt is 4-10. */ + COSTS_N_INSNS (25), /* cost of FSQRT instruction. */ + + COSTS_N_INSNS (1), /* cost of cheap SSE instruction. */ + COSTS_N_INSNS (3), /* cost of ADDSS/SD SUBSS/SD insns. */ + COSTS_N_INSNS (3), /* cost of MULSS instruction. */ + COSTS_N_INSNS (3), /* cost of MULSD instruction. */ + COSTS_N_INSNS (4), /* cost of FMA SS instruction. */ + COSTS_N_INSNS (4), /* cost of FMA SD instruction. */ + COSTS_N_INSNS (10), /* cost of DIVSS instruction. */ + /* 9-13. */ + COSTS_N_INSNS (13), /* cost of DIVSD instruction. */ + COSTS_N_INSNS (14), /* cost of SQRTSS instruction. */ + COSTS_N_INSNS (20), /* cost of SQRTSD instruction. */ + /* Zen can execute 4 integer operations per cycle. FP operations + take 3 cycles and it can execute 2 integer additions and 2 + multiplications thus reassociation may make sense up to with of 6. + SPEC2k6 bencharks suggests + that 4 works better than 6 probably due to register pressure. + + Integer vector operations are taken by FP unit and execute 3 vector + plus/minus operations per cycle but only one multiply. This is adjusted + in ix86_reassociation_width. */ + 4, 4, 3, 6, /* reassoc int, fp, vec_int, vec_fp. */ + znver2_memcpy, + znver2_memset, + COSTS_N_INSNS (4), /* cond_taken_branch_cost. */ + COSTS_N_INSNS (2), /* cond_not_taken_branch_cost. */ + "16", /* Loop alignment. */ + "16", /* Jump alignment. */ + "0:0:8", /* Label alignment. */ + "16", /* Func alignment. */ + 4, /* Small unroll limit. */ + 2, /* Small unroll factor. */ +}; + /* skylake_cost should produce code tuned for Skylake familly of CPUs. */ static stringop_algs skylake_memcpy[2] = { {libcall, diff --git a/gcc/config/i386/x86-tune-sched.cc b/gcc/config/i386/x86-tune-sched.cc index 23a333714a60..578ba57e6b22 100644 --- a/gcc/config/i386/x86-tune-sched.cc +++ b/gcc/config/i386/x86-tune-sched.cc @@ -69,6 +69,7 @@ ix86_issue_rate (void) case PROCESSOR_ZNVER2: case PROCESSOR_ZNVER3: case PROCESSOR_ZNVER4: + case PROCESSOR_ZNVER5: case PROCESSOR_CORE2: case PROCESSOR_NEHALEM: case PROCESSOR_SANDYBRIDGE: @@ -417,6 +418,7 @@ ix86_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn, int cost, case PROCESSOR_ZNVER2: case PROCESSOR_ZNVER3: case PROCESSOR_ZNVER4: + case PROCESSOR_ZNVER5: /* Stack engine allows to execute push&pop instructions in parall. */ if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP) && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP)) diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def index 8f855914316f..ae2797b7cc2f 100644 --- a/gcc/config/i386/x86-tune.def +++ b/gcc/config/i386/x86-tune.def @@ -575,12 +575,12 @@ DEF_TUNE (X86_TUNE_AVX256_STORE_BY_PIECES, "avx256_store_by_pieces", /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces", - m_SAPPHIRERAPIDS | m_ZNVER4) + m_SAPPHIRERAPIDS | m_ZNVER4 | m_ZNVER5) /* X86_TUNE_AVX512_STORE_BY_PIECES: Optimize store_by_pieces with 512-bit AVX instructions. */ DEF_TUNE (X86_TUNE_AVX512_STORE_BY_PIECES, "avx512_store_by_pieces", - m_SAPPHIRERAPIDS | m_ZNVER4) + m_SAPPHIRERAPIDS | m_ZNVER4 | m_ZNVER5) /*****************************************************************************/ /*****************************************************************************/ diff --git a/gcc/config/i386/znver4.md b/gcc/config/i386/znver4.md deleted file mode 100644 index 0d3b29e54bb6..000000000000 --- a/gcc/config/i386/znver4.md +++ /dev/null @@ -1,1068 +0,0 @@ -;; Copyright (C) 2012-2024 Free Software Foundation, Inc. -;; -;; This file is part of GCC. -;; -;; GCC is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. -;; -;; GCC is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. -;; -;; You should have received a copy of the GNU General Public License -;; along with GCC; see the file COPYING3. If not see -;; <http://www.gnu.org/licenses/>. -;; - - -(define_attr "znver4_decode" "direct,vector,double" - (const_string "direct")) - -;; AMD znver4 Scheduling -;; Modeling automatons for zen decoders, integer execution pipes, -;; AGU pipes, branch, floating point execution and fp store units. -(define_automaton "znver4, znver4_ieu, znver4_idiv, znver4_fdiv, znver4_agu, znver4_fpu, znver4_fp_store") - -;; Decoders unit has 4 decoders and all of them can decode fast path -;; and vector type instructions. -(define_cpu_unit "znver4-decode0" "znver4") -(define_cpu_unit "znver4-decode1" "znver4") -(define_cpu_unit "znver4-decode2" "znver4") -(define_cpu_unit "znver4-decode3" "znver4") - -;; Currently blocking all decoders for vector path instructions as -;; they are dispatched separetely as microcode sequence. -(define_reservation "znver4-vector" "znver4-decode0+znver4-decode1+znver4-decode2+znver4-decode3") - -;; Direct instructions can be issued to any of the four decoders. -(define_reservation "znver4-direct" "znver4-decode0|znver4-decode1|znver4-decode2|znver4-decode3") - -;; Fix me: Need to revisit this later to simulate fast path double behavior. -(define_reservation "znver4-double" "znver4-direct") - - -;; Integer unit 4 ALU pipes. -(define_cpu_unit "znver4-ieu0" "znver4_ieu") -(define_cpu_unit "znver4-ieu1" "znver4_ieu") -(define_cpu_unit "znver4-ieu2" "znver4_ieu") -(define_cpu_unit "znver4-ieu3" "znver4_ieu") -;; Znver4 has an additional branch unit. -(define_cpu_unit "znver4-bru0" "znver4_ieu") -(define_reservation "znver4-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3") - -;; 3 AGU pipes in znver4 -(define_cpu_unit "znver4-agu0" "znver4_agu") -(define_cpu_unit "znver4-agu1" "znver4_agu") -(define_cpu_unit "znver4-agu2" "znver4_agu") -(define_reservation "znver4-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2") - -;; Load is 4 cycles. We do not model reservation of load unit. -(define_reservation "znver4-load" "znver4-agu-reserve") -(define_reservation "znver4-store" "znver4-agu-reserve") - -;; vectorpath (microcoded) instructions are single issue instructions. -;; So, they occupy all the integer units. -(define_reservation "znver4-ivector" "znver4-ieu0+znver4-ieu1 - +znver4-ieu2+znver4-ieu3+znver4-bru0 - +znver4-agu0+znver4-agu1+znver4-agu2") - -;; Floating point unit 4 FP pipes. -(define_cpu_unit "znver4-fpu0" "znver4_fpu") -(define_cpu_unit "znver4-fpu1" "znver4_fpu") -(define_cpu_unit "znver4-fpu2" "znver4_fpu") -(define_cpu_unit "znver4-fpu3" "znver4_fpu") - -(define_reservation "znver4-fpu" "znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") - -(define_reservation "znver4-fvector" "znver4-fpu0+znver4-fpu1 - +znver4-fpu2+znver4-fpu3 - +znver4-agu0+znver4-agu1+znver4-agu2") - -;; DIV units -(define_cpu_unit "znver4-idiv" "znver4_idiv") -(define_cpu_unit "znver4-fdiv" "znver4_fdiv") - -;; Separate fp store and fp-to-int store. Although there are 2 store pipes, the -;; throughput is limited to only one per cycle. -(define_cpu_unit "znver4-fp-store" "znver4_fp_store") - - -;; Integer Instructions -;; Move instructions -;; XCHG -(define_insn_reservation "znver4_imov_double" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "imov") - (eq_attr "memory" "none")))) - "znver4-double,znver4-ieu") - -(define_insn_reservation "znver4_imov_double_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "imov") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-ieu") - -;; imov, imovx -(define_insn_reservation "znver4_imov" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imov,imovx") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-ieu") - -(define_insn_reservation "znver4_imov_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imov,imovx") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu") - -;; Push Instruction -(define_insn_reservation "znver4_push" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "push") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-store") - -(define_insn_reservation "znver4_push_mem" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "push") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-store") - -;; Pop instruction -(define_insn_reservation "znver4_pop" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "pop") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load") - -(define_insn_reservation "znver4_pop_mem" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "pop") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-store") - -;; Integer Instructions or General instructions -;; Multiplications -(define_insn_reservation "znver4_imul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imul") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-ieu1") - -(define_insn_reservation "znver4_imul_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "imul") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu1") - -;; Divisions -(define_insn_reservation "znver4_idiv_DI" 18 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "DI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*10") - -(define_insn_reservation "znver4_idiv_SI" 12 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*6") - -(define_insn_reservation "znver4_idiv_HI" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "HI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*4") - -(define_insn_reservation "znver4_idiv_QI" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "QI") - (eq_attr "memory" "none")))) - "znver4-double,znver4-idiv*4") - -(define_insn_reservation "znver4_idiv_DI_load" 22 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "DI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*10") - -(define_insn_reservation "znver4_idiv_SI_load" 16 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*6") - -(define_insn_reservation "znver4_idiv_HI_load" 14 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "HI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*4") - -(define_insn_reservation "znver4_idiv_QI_load" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "idiv") - (and (eq_attr "mode" "QI") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-idiv*4") - -;; INTEGER/GENERAL Instructions -(define_insn_reservation "znver4_insn" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") - (eq_attr "memory" "none,unknown"))) - "znver4-direct,znver4-ieu") - -(define_insn_reservation "znver4_insn_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu") - -(define_insn_reservation "znver4_insn2" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "icmov,setcc") - (eq_attr "memory" "none,unknown"))) - "znver4-direct,znver4-ieu0|znver4-ieu3") - -(define_insn_reservation "znver4_insn2_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "icmov,setcc") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu0|znver4-ieu3") - -(define_insn_reservation "znver4_rotate" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "rotate") - (eq_attr "memory" "none,unknown"))) - "znver4-direct,znver4-ieu1|znver4-ieu2") - -(define_insn_reservation "znver4_rotate_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "rotate") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu1|znver4-ieu2") - -(define_insn_reservation "znver4_insn_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-ieu,znver4-store") - -(define_insn_reservation "znver4_insn2_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "icmov,setcc") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-ieu0|znver4-ieu3,znver4-store") - -(define_insn_reservation "znver4_rotate_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "rotate") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-ieu1|znver4-ieu2,znver4-store") - -;; alu1 instructions -(define_insn_reservation "znver4_alu1_vector" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "vector") - (and (eq_attr "type" "alu1") - (eq_attr "memory" "none,unknown")))) - "znver4-vector,znver4-ivector*3") - -(define_insn_reservation "znver4_alu1_vector_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "vector") - (and (eq_attr "type" "alu1") - (eq_attr "memory" "load")))) - "znver4-vector,znver4-load,znver4-ivector*3") - -;; Call Instruction -(define_insn_reservation "znver4_call" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "call,callv")) - "znver4-double,znver4-ieu0|znver4-bru0,znver4-store") - -;; Branches -(define_insn_reservation "znver4_branch" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-ieu0|znver4-bru0") - -(define_insn_reservation "znver4_branch_load" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-ieu0|znver4-bru0") - -(define_insn_reservation "znver4_branch_vector" 2 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "none,unknown"))) - "znver4-vector,znver4-ivector*2") - -(define_insn_reservation "znver4_branch_vector_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ibr") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*2") - -;; LEA instruction with simple addressing -(define_insn_reservation "znver4_lea" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "lea")) - "znver4-direct,znver4-ieu") - -;; Leave -(define_insn_reservation "znver4_leave" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "leave")) - "znver4-double,znver4-ieu,znver4-store") - -;; STR and ISHIFT are microcoded. -(define_insn_reservation "znver4_str" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "str") - (eq_attr "memory" "none"))) - "znver4-vector,znver4-ivector*3") - -(define_insn_reservation "znver4_str_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "str") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*3") - -(define_insn_reservation "znver4_ishift" 2 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ishift") - (eq_attr "memory" "none"))) - "znver4-vector,znver4-ivector*2") - -(define_insn_reservation "znver4_ishift_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ishift") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*2") - -;; Other vector type -(define_insn_reservation "znver4_ieu_vector" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "other,multi") - (eq_attr "memory" "none,unknown"))) - "znver4-vector,znver4-ivector*5") - -(define_insn_reservation "znver4_ieu_vector_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "other,multi") - (eq_attr "memory" "load"))) - "znver4-vector,znver4-load,znver4-ivector*5") - -;; Floating Point -;; FP movs -(define_insn_reservation "znver4_fp_cmov" 4 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "fcmov")) - "znver4-vector,znver4-fvector*3") - -(define_insn_reservation "znver4_fp_mov_direct" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "fmov")) - "znver4-direct,znver4-fpu0|znver4-fpu1") - -;;FLD -(define_insn_reservation "znver4_fp_mov_direct_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "direct") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - -;;FST -(define_insn_reservation "znver4_fp_mov_direct_store" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "direct") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu0|znver4-fpu1,znver4-fp-store") - -;;FILD -(define_insn_reservation "znver4_fp_mov_double_load" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1") - -;;FIST -(define_insn_reservation "znver4_fp_mov_double_store" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "double") - (and (eq_attr "type" "fmov") - (eq_attr "memory" "store")))) - "znver4-double,znver4-fpu1,znver4-fp-store") - -;; FSQRT -(define_insn_reservation "znver4_fsqrt" 22 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fpspc") - (and (eq_attr "mode" "XF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*10") - -;; FPSPC instructions -(define_insn_reservation "znver4_fp_spc" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fpspc") - (eq_attr "memory" "none"))) - "znver4-vector,znver4-fvector*6") - -(define_insn_reservation "znver4_fp_insn_vector" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "znver1_decode" "vector") - (eq_attr "type" "mmxcvt,sselog1,ssemov"))) - "znver4-vector,znver4-fvector*6") - -;; FADD, FSUB, FMUL -(define_insn_reservation "znver4_fp_op_mul" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fop,fmul") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0") - -(define_insn_reservation "znver4_fp_op_mul_load" 12 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fop,fmul") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu0") - -;; FDIV -(define_insn_reservation "znver4_fp_div" 15 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fdiv") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fdiv*6") - -(define_insn_reservation "znver4_fp_div_load" 20 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fdiv") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fdiv*6") - -(define_insn_reservation "znver4_fp_idiv_load" 24 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fdiv") - (and (eq_attr "fp_int_src" "true") - (eq_attr "memory" "load")))) - "znver4-double,znver4-load,znver4-fdiv*6") - -;; FABS, FCHS -(define_insn_reservation "znver4_fp_fsgn" 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "fsgn")) - "znver4-direct,znver4-fpu0|znver4-fpu1") - -;; FCMP -(define_insn_reservation "znver4_fp_fcmp" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fcmp") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu1") - -(define_insn_reservation "znver4_fp_fcmp_double" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "fcmp") - (and (eq_attr "znver1_decode" "double") - (eq_attr "memory" "none")))) - "znver4-double,znver4-fpu1,znver4-fpu2") - -;; MMX, SSE, SSEn.n instructions -(define_insn_reservation "znver4_fp_mmx " 1 - (and (eq_attr "cpu" "znver4") - (eq_attr "type" "mmx")) - "znver4-direct,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_mmx_add_cmp" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxadd,mmxcmp") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu") - -(define_insn_reservation "znver4_mmx_add_cmp_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxadd,mmxcmp") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu") - -(define_insn_reservation "znver4_mmx_insn" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_mmx_insn_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_mmx_mov" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmov") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-fp-store") - -(define_insn_reservation "znver4_mmx_mov_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmov") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-fp-store") - -(define_insn_reservation "znver4_mmx_mul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmul") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0|znver4-fpu3") - -(define_insn_reservation "znver4_mmx_mul_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mmxmul") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu3") - -;; AVX instructions -(define_insn_reservation "znver4_sse_log" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu") - -(define_insn_reservation "znver4_sse_log_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - -(define_insn_reservation "znver4_sse_log1" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") - -(define_insn_reservation "znver4_sse_log1_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "both")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2,znver4-fp-store") - -(define_insn_reservation "znver4_sse_comi" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "store"))) - "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") - -(define_insn_reservation "znver4_sse_comi_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "both"))) - "znver4-double,znver4-load,znver4-fpu2|znver4-fpu3,znver4-fp-store") - -(define_insn_reservation "znver4_sse_test" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "prefix_extra" "1") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_sse_test_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "prefix_extra" "1") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_sse_imul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0|znver4-fpu3") - -(define_insn_reservation "znver4_sse_imul_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - -(define_insn_reservation "znver4_sse_mov" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_sse_mov_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_sse_mov_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") - -(define_insn_reservation "znver4_sse_mov_fp" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu") - -(define_insn_reservation "znver4_sse_mov_fp_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - -(define_insn_reservation "znver4_sse_mov_fp_store" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fp-store") - -(define_insn_reservation "znver4_sse_add" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2|znver4-fpu3") - -(define_insn_reservation "znver4_sse_add_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") - -(define_insn_reservation "znver4_sse_add1" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd1") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-vector,znver4-fvector*2") - -(define_insn_reservation "znver4_sse_add1_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd1") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-vector,znver4-load,znver4-fvector*2") - -(define_insn_reservation "znver4_sse_iadd" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu") - -(define_insn_reservation "znver4_sse_iadd_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - -(define_insn_reservation "znver4_sse_mul" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0|znver4-fpu1") - -(define_insn_reservation "znver4_sse_mul_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - -(define_insn_reservation "znver4_sse_div_pd" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V4DF,V2DF,V1DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*5") - -(define_insn_reservation "znver4_sse_div_ps" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*3") - -(define_insn_reservation "znver4_sse_div_pd_load" 18 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V4DF,V2DF,V1DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*5") - -(define_insn_reservation "znver4_sse_div_ps_load" 15 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*3") - -(define_insn_reservation "znver4_sse_cmp_avx" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "prefix" "vex") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0|znver4-fpu1") - -(define_insn_reservation "znver4_sse_cmp_avx_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "prefix" "vex") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") - -(define_insn_reservation "znver4_sse_comi_avx" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "store"))) - "znver4-direct,znver4-fpu2+znver4-fpu3,znver4-fp-store") - -(define_insn_reservation "znver4_sse_comi_avx_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecomi") - (eq_attr "memory" "both"))) - "znver4-direct,znver4-load,znver4-fpu2+znver4-fpu3,znver4-fp-store") - -(define_insn_reservation "znver4_sse_cvt" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2|znver4-fpu3") - -(define_insn_reservation "znver4_sse_cvt_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") - -(define_insn_reservation "znver4_sse_icvt" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2|znver4-fpu3") - -(define_insn_reservation "znver4_sse_icvt_store" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "SI") - (eq_attr "memory" "store")))) - "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") - -(define_insn_reservation "znver4_sse_shuf" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_sse_shuf_load" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu") - -(define_insn_reservation "znver4_sse_ishuf" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "OI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1|znver4-fpu2") - -(define_insn_reservation "znver4_sse_ishuf_load" 8 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "OI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") - -;; AVX512 instructions -(define_insn_reservation "znver4_sse_log_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_log_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_log1_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") - -(define_insn_reservation "znver4_sse_log1_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sselog1") - (and (eq_attr "mode" "V16SF,V8DF,XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") - -(define_insn_reservation "znver4_sse_mul_evex" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_mul_evex_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemul") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_imul_evex" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_imul_evex_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseimul") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_mov_evex" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") - -(define_insn_reservation "znver4_sse_mov_evex_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") - -(define_insn_reservation "znver4_sse_mov_evex_store" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemov") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "store")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") - -(define_insn_reservation "znver4_sse_add_evex" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_add_evex_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseadd") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_iadd_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_iadd_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseiadd") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_div_pd_evex" 13 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*9") - -(define_insn_reservation "znver4_sse_div_ps_evex" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V16SF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fdiv*6") - -(define_insn_reservation "znver4_sse_div_pd_evex_load" 19 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*9") - -(define_insn_reservation "znver4_sse_div_ps_evex_load" 16 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssediv") - (and (eq_attr "mode" "V16SF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fdiv*6") - -(define_insn_reservation "znver4_sse_cmp_avx128" 3 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "none"))))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_cmp_avx128_load" 9 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "load"))))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_cmp_avx256" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V8SF,V4DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "none"))))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_cmp_avx256_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V8SF,V4DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "load"))))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_cmp_avx512" 5 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V16SF,V8DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "none"))))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_cmp_avx512_load" 11 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecmp") - (and (eq_attr "mode" "V16SF,V8DF") - (and (eq_attr "prefix" "evex") - (eq_attr "memory" "load"))))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_cvt_evex" 6 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_cvt_evex_load" 12 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssecvt") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_shuf_evex" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_shuf_evex_load" 7 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "V16SF,V8DF") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") - -(define_insn_reservation "znver4_sse_ishuf_evex" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "none")))) - "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") - -(define_insn_reservation "znver4_sse_ishuf_evex_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (and (eq_attr "mode" "XI") - (eq_attr "memory" "load")))) - "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") - -(define_insn_reservation "znver4_sse_muladd" 4 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "ssemuladd") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_muladd_load" 10 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "sseshuf") - (eq_attr "memory" "load"))) - "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") - -;; AVX512 mask instructions - -(define_insn_reservation "znver4_sse_mskmov" 2 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "mskmov") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") - -(define_insn_reservation "znver4_sse_msklog" 1 - (and (eq_attr "cpu" "znver4") - (and (eq_attr "type" "msklog") - (eq_attr "memory" "none"))) - "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index df0982fdfda5..7b54a241a7bf 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -26194,6 +26194,9 @@ AMD Family 19h Zen version 3. @item znver4 AMD Family 19h Zen version 4. + +@item znver5 +AMD Family 1ah Zen version 5. @end table Here is an example: diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 864768fd2f42..b446b2905c72 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -34487,6 +34487,16 @@ WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI and 64-bit instruction set extensions.) +@item znver5 +AMD Family 1ah core based CPUs with x86-64 instruction set support. (This +supersets BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, +MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, +SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, +WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, +AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, +AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B, +AVX512VP2INTERSECT, PREFETCHI and 64-bit instruction set extensions.) + @item btver1 CPUs based on AMD Family 14h cores with x86-64 instruction set support. (This supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM and 64-bit diff --git a/gcc/testsuite/g++.target/i386/mv29.C b/gcc/testsuite/g++.target/i386/mv29.C index a8dd8ac4803b..ab229534eddd 100644 --- a/gcc/testsuite/g++.target/i386/mv29.C +++ b/gcc/testsuite/g++.target/i386/mv29.C @@ -53,6 +53,10 @@ int __attribute__ ((target("arch=znver4"))) foo () { return 10; } +int __attribute__ ((target("arch=znver5"))) foo () { + return 11; +} + int main () { int val = foo (); @@ -77,6 +81,8 @@ int main () assert (val == 9); else if (__builtin_cpu_is ("znver4")) assert (val == 10); + else if (__builtin_cpu_is ("znver5")) + assert (val == 11); else assert (val == 0); diff --git a/gcc/testsuite/gcc.target/i386/funcspec-56.inc b/gcc/testsuite/gcc.target/i386/funcspec-56.inc index e910e1f92116..2a50f5bf67c8 100644 --- a/gcc/testsuite/gcc.target/i386/funcspec-56.inc +++ b/gcc/testsuite/gcc.target/i386/funcspec-56.inc @@ -224,6 +224,7 @@ extern void test_arch_znver1 (void) __attribute__((__target__("arch= extern void test_arch_znver2 (void) __attribute__((__target__("arch=znver2"))); extern void test_arch_znver3 (void) __attribute__((__target__("arch=znver3"))); extern void test_arch_znver4 (void) __attribute__((__target__("arch=znver4"))); +extern void test_arch_znver5 (void) __attribute__((__target__("arch=znver5"))); extern void test_tune_nocona (void) __attribute__((__target__("tune=nocona"))); extern void test_tune_core2 (void) __attribute__((__target__("tune=core2"))); @@ -249,6 +250,7 @@ extern void test_tune_znver1 (void) __attribute__((__target__("tune= extern void test_tune_znver2 (void) __attribute__((__target__("tune=znver2"))); extern void test_tune_znver3 (void) __attribute__((__target__("tune=znver3"))); extern void test_tune_znver4 (void) __attribute__((__target__("tune=znver4"))); +extern void test_tune_znver5 (void) __attribute__((__target__("tune=znver5"))); extern void test_fpmath_sse (void) __attribute__((__target__("sse2,fpmath=sse"))); extern void test_fpmath_387 (void) __attribute__((__target__("sse2,fpmath=387"))); From dfc9d1cc8353bdd7fbc37bc10bb3fd40f49fa4af Mon Sep 17 00:00:00 2001 From: Jan Hubicka <jh@suse.cz> Date: Mon, 18 Mar 2024 14:24:10 +0100 Subject: [PATCH 103/551] Add missing config/i386/zn4zn5.md file gcc/ChangeLog: * config/i386/zn4zn5.md: Add file missed in the previous commit. --- gcc/config/i386/zn4zn5.md | 1785 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1785 insertions(+) create mode 100644 gcc/config/i386/zn4zn5.md diff --git a/gcc/config/i386/zn4zn5.md b/gcc/config/i386/zn4zn5.md new file mode 100644 index 000000000000..ba9cfbb5dfcf --- /dev/null +++ b/gcc/config/i386/zn4zn5.md @@ -0,0 +1,1785 @@ +;; Copyright (C) 2012-2024 Free Software Foundation, Inc. +;; +;; This file is part of GCC. +;; +;; GCC is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. +;; +;; GCC is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GCC; see the file COPYING3. If not see +;; <http://www.gnu.org/licenses/>. +;; + + +(define_attr "znver4_decode" "direct,vector,double" + (const_string "direct")) + +;; AMD znver4 and znver5 Scheduling +;; Modeling automatons for zen decoders, integer execution pipes, +;; AGU pipes, branch, floating point execution and fp store units. +(define_automaton "znver4, znver4_ieu, znver4_idiv, znver4_fdiv, znver4_agu, znver4_fpu, znver4_fp_store") + +;; Decoders unit has 4 decoders and all of them can decode fast path +;; and vector type instructions. +(define_cpu_unit "znver4-decode0" "znver4") +(define_cpu_unit "znver4-decode1" "znver4") +(define_cpu_unit "znver4-decode2" "znver4") +(define_cpu_unit "znver4-decode3" "znver4") + +;; Currently blocking all decoders for vector path instructions as +;; they are dispatched separetely as microcode sequence. +(define_reservation "znver4-vector" "znver4-decode0+znver4-decode1+znver4-decode2+znver4-decode3") + +;; Direct instructions can be issued to any of the four decoders. +(define_reservation "znver4-direct" "znver4-decode0|znver4-decode1|znver4-decode2|znver4-decode3") + +;; Fix me: Need to revisit this later to simulate fast path double behavior. +(define_reservation "znver4-double" "znver4-direct") + + +;; Integer unit 4 ALU pipes in znver4 6 ALU pipes in znver5. +(define_cpu_unit "znver4-ieu0" "znver4_ieu") +(define_cpu_unit "znver4-ieu1" "znver4_ieu") +(define_cpu_unit "znver4-ieu2" "znver4_ieu") +(define_cpu_unit "znver4-ieu3" "znver4_ieu") +(define_cpu_unit "znver5-ieu4" "znver4_ieu") +(define_cpu_unit "znver5-ieu5" "znver4_ieu") + +;; Znver4 has an additional branch unit. +(define_cpu_unit "znver4-bru0" "znver4_ieu") + +(define_reservation "znver4-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3") +(define_reservation "znver5-ieu" "znver4-ieu0|znver4-ieu1|znver4-ieu2|znver4-ieu3|znver5-ieu4|znver5-ieu5") + +;; 3 AGU pipes in znver4 and 4 AGU pipes in znver5 +(define_cpu_unit "znver4-agu0" "znver4_agu") +(define_cpu_unit "znver4-agu1" "znver4_agu") +(define_cpu_unit "znver4-agu2" "znver4_agu") +(define_cpu_unit "znver5-agu3" "znver4_agu") + +(define_reservation "znver4-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2") +(define_reservation "znver5-agu-reserve" "znver4-agu0|znver4-agu1|znver4-agu2|znver5-agu3") + +;; Load is 4 cycles. We do not model reservation of load unit. +(define_reservation "znver4-load" "znver4-agu-reserve") +(define_reservation "znver4-store" "znver4-agu-reserve") +(define_reservation "znver5-load" "znver5-agu-reserve") +(define_reservation "znver5-store" "znver5-agu-reserve") + +;; vectorpath (microcoded) instructions are single issue instructions. +;; So, they occupy all the integer units. +;; This is used for both Znver4 and Znver5, since reserving extra units not used otherwise +;; is harmless. +(define_reservation "znver4-ivector" "znver4-ieu0+znver4-ieu1 + +znver4-ieu2+znver4-ieu3+znver5-ieu4+znver5-ieu5+znver4-bru0 + +znver4-agu0+znver4-agu1+znver4-agu2+znver5-agu3") + +;; Floating point unit 4 FP pipes in znver4 and znver5. +(define_cpu_unit "znver4-fpu0" "znver4_fpu") +(define_cpu_unit "znver4-fpu1" "znver4_fpu") +(define_cpu_unit "znver4-fpu2" "znver4_fpu") +(define_cpu_unit "znver4-fpu3" "znver4_fpu") + +(define_reservation "znver4-fpu" "znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +;; DIV units +(define_cpu_unit "znver4-idiv" "znver4_idiv") +(define_cpu_unit "znver4-fdiv" "znver4_fdiv") + +;; Separate fp store and fp-to-int store. Although there are 2 store pipes, the +;; throughput is limited to only one per cycle. +(define_cpu_unit "znver4-fp-store" "znver4_fp_store") + +;; Floating point store unit 2 FP pipes in znver5. +(define_cpu_unit "znver5-fp-store0" "znver4_fp_store") +(define_cpu_unit "znver5-fp-store1" "znver4_fp_store") + +;; This is used for both Znver4 and Znver5, since reserving extra units not used otherwise +;; is harmless. +(define_reservation "znver4-fvector" "znver4-fpu0+znver4-fpu1 + +znver4-fpu2+znver4-fpu3+znver5-fp-store0+znver5-fp-store1 + +znver4-agu0+znver4-agu1+znver4-agu2+znver5-agu3") + +(define_reservation "znver5-fp-store256" "znver5-fp-store0|znver5-fp-store1") +(define_reservation "znver5-fp-store-512" "znver5-fp-store0+znver5-fp-store1") + + +;; Integer Instructions +;; Move instructions +;; XCHG +(define_insn_reservation "znver4_imov_double" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "none")))) + "znver4-double,znver4-ieu") + +(define_insn_reservation "znver5_imov_double" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "none")))) + "znver4-double,znver5-ieu") + +(define_insn_reservation "znver4_imov_double_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-ieu") + +(define_insn_reservation "znver5_imov_double_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "imov") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver5-ieu") + +;; imov, imovx +(define_insn_reservation "znver4_imov" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-ieu") + +(define_insn_reservation "znver5_imov" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "none"))) + "znver4-direct,znver5-ieu") + +(define_insn_reservation "znver4_imov_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu") + +(define_insn_reservation "znver5_imov_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "imov,imovx") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver5-ieu") + +;; Push Instruction +(define_insn_reservation "znver4_push" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "push") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-store") + +(define_insn_reservation "znver5_push" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "push") + (eq_attr "memory" "store"))) + "znver4-direct,znver5-store") + +(define_insn_reservation "znver4_push_mem" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "push") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-store") + +(define_insn_reservation "znver5_push_mem" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "push") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver5-store") + +;; Pop instruction +(define_insn_reservation "znver4_pop" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "pop") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load") + +(define_insn_reservation "znver5_pop" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "pop") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load") + +(define_insn_reservation "znver4_pop_mem" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "pop") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-store") + +(define_insn_reservation "znver5_pop_mem" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "pop") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver5-store") + +;; Integer Instructions or General instructions +;; Multiplications +(define_insn_reservation "znver4_imul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "imul") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-ieu1") + +(define_insn_reservation "znver4_imul_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "imul") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu1") + +(define_insn_reservation "znver5_imul_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "imul") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu1") + +;; Divisions +(define_insn_reservation "znver4_idiv_DI" 18 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "DI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*10") + +(define_insn_reservation "znver4_idiv_SI" 12 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*6") + +(define_insn_reservation "znver4_idiv_HI" 10 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "HI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*4") + +(define_insn_reservation "znver4_idiv_QI" 9 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "QI") + (eq_attr "memory" "none")))) + "znver4-double,znver4-idiv*4") + +(define_insn_reservation "znver4_idiv_DI_load" 22 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "DI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*10") + +(define_insn_reservation "znver5_idiv_DI_load" 22 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "DI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*10") + +(define_insn_reservation "znver4_idiv_SI_load" 16 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*6") + +(define_insn_reservation "znver5_idiv_SI_load" 16 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*6") + +(define_insn_reservation "znver4_idiv_HI_load" 14 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "HI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*4") + +(define_insn_reservation "znver5_idiv_HI_load" 14 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "HI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*4") + +(define_insn_reservation "znver4_idiv_QI_load" 13 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "QI") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-idiv*4") + +(define_insn_reservation "znver5_idiv_QI_load" 13 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "idiv") + (and (eq_attr "mode" "QI") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-idiv*4") + +;; INTEGER/GENERAL Instructions +(define_insn_reservation "znver4_insn" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver4-ieu") + +(define_insn_reservation "znver5_insn" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver5-ieu") + +(define_insn_reservation "znver4_insn_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu") + +(define_insn_reservation "znver5_insn_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver5-ieu") + +(define_insn_reservation "znver4_insn2" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver4-ieu0|znver4-ieu3") + +(define_insn_reservation "znver4_insn2_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu0|znver4-ieu3") + +(define_insn_reservation "znver5_insn2_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu0|znver4-ieu3") + +(define_insn_reservation "znver4_rotate" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "none,unknown"))) + "znver4-direct,znver4-ieu1|znver4-ieu2") + +(define_insn_reservation "znver4_rotate_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu1|znver4-ieu2") + +(define_insn_reservation "znver5_rotate_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu1|znver4-ieu2") + +(define_insn_reservation "znver4_insn_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu,znver4-store") + +(define_insn_reservation "znver5_insn_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "alu,alu1,negnot,rotate1,ishift1,test,incdec,icmp") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu,znver5-store") + +(define_insn_reservation "znver4_insn2_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu0|znver4-ieu3,znver4-store") + +(define_insn_reservation "znver5_insn2_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "icmov,setcc") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu0|znver4-ieu3,znver5-store") + +(define_insn_reservation "znver4_rotate_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu1|znver4-ieu2,znver4-store") + +(define_insn_reservation "znver5_rotate_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "rotate") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-ieu1|znver4-ieu2,znver5-store") + +;; alu1 instructions +(define_insn_reservation "znver4_alu1_vector" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "znver1_decode" "vector") + (and (eq_attr "type" "alu1") + (eq_attr "memory" "none,unknown")))) + "znver4-vector,znver4-ivector*3") + +(define_insn_reservation "znver4_alu1_vector_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "vector") + (and (eq_attr "type" "alu1") + (eq_attr "memory" "load")))) + "znver4-vector,znver4-load,znver4-ivector*3") + +(define_insn_reservation "znver5_alu1_vector_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "vector") + (and (eq_attr "type" "alu1") + (eq_attr "memory" "load")))) + "znver4-vector,znver5-load,znver4-ivector*3") + +;; Call Instruction +(define_insn_reservation "znver4_call" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "call,callv")) + "znver4-double,znver4-ieu0|znver4-bru0,znver4-store") + +(define_insn_reservation "znver5_call" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "call,callv")) + "znver4-double,znver4-ieu0|znver4-bru0,znver5-store") + +;; Branches +(define_insn_reservation "znver4_branch" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-ieu0|znver4-bru0") + +(define_insn_reservation "znver4_branch_load" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-ieu0|znver4-bru0") + +(define_insn_reservation "znver5_branch_load" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-ieu0|znver4-bru0") + +(define_insn_reservation "znver4_branch_vector" 2 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "none,unknown"))) + "znver4-vector,znver4-ivector*2") + +(define_insn_reservation "znver4_branch_vector_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*2") + +(define_insn_reservation "znver5_branch_vector_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ibr") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*2") + +;; LEA instruction with simple addressing +(define_insn_reservation "znver4_lea" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "lea")) + "znver4-direct,znver4-ieu") + +(define_insn_reservation "znver5_lea" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "lea")) + "znver4-direct,znver5-ieu") +;; Leave +(define_insn_reservation "znver4_leave" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "leave")) + "znver4-double,znver4-ieu,znver4-store") + +(define_insn_reservation "znver5_leave" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "leave")) + "znver4-double,znver5-ieu,znver5-store") + +;; STR and ISHIFT are microcoded. +(define_insn_reservation "znver4_str" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "str") + (eq_attr "memory" "none"))) + "znver4-vector,znver4-ivector*3") + +(define_insn_reservation "znver4_str_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "str") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*3") + +(define_insn_reservation "znver5_str_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "str") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*3") + +(define_insn_reservation "znver4_ishift" 2 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ishift") + (eq_attr "memory" "none"))) + "znver4-vector,znver4-ivector*2") + +(define_insn_reservation "znver4_ishift_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ishift") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*2") + +(define_insn_reservation "znver5_ishift_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ishift") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*2") + +;; Other vector type +(define_insn_reservation "znver4_ieu_vector" 5 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "other,multi") + (eq_attr "memory" "none,unknown"))) + "znver4-vector,znver4-ivector*5") + +(define_insn_reservation "znver4_ieu_vector_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "other,multi") + (eq_attr "memory" "load"))) + "znver4-vector,znver4-load,znver4-ivector*5") + +(define_insn_reservation "znver5_ieu_vector_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "other,multi") + (eq_attr "memory" "load"))) + "znver4-vector,znver5-load,znver4-ivector*5") + +;; Floating Point +;; FP movs +(define_insn_reservation "znver4_fp_cmov" 4 + (and (eq_attr "cpu" "znver4,znver5") + (eq_attr "type" "fcmov")) + "znver4-vector,znver4-fvector*3") + +(define_insn_reservation "znver4_fp_mov_direct" 1 + (and (eq_attr "cpu" "znver4,znver5") + (eq_attr "type" "fmov")) + "znver4-direct,znver4-fpu0|znver4-fpu1") + +;;FLD +(define_insn_reservation "znver4_fp_mov_direct_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver5_fp_mov_direct_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + +;;FST +(define_insn_reservation "znver4_fp_mov_direct_store" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu0|znver4-fpu1,znver4-fp-store") + +(define_insn_reservation "znver5_fp_mov_direct_store" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "direct") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu0|znver4-fpu1,znver5-fp-store256") + +;;FILD +(define_insn_reservation "znver4_fp_mov_double_load" 13 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1") + +(define_insn_reservation "znver5_fp_mov_double_load" 13 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1") + +;;FIST +(define_insn_reservation "znver4_fp_mov_double_store" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu1,znver4-fp-store") + +(define_insn_reservation "znver5_fp_mov_double_store" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "znver1_decode" "double") + (and (eq_attr "type" "fmov") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu1,znver5-fp-store256") + +;; FSQRT +(define_insn_reservation "znver4_fsqrt" 22 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fpspc") + (and (eq_attr "mode" "XF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*10") + +;; FPSPC instructions +(define_insn_reservation "znver4_fp_spc" 6 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fpspc") + (eq_attr "memory" "none"))) + "znver4-vector,znver4-fvector*6") + +(define_insn_reservation "znver4_fp_insn_vector" 6 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "znver1_decode" "vector") + (eq_attr "type" "mmxcvt,sselog1,ssemov"))) + "znver4-vector,znver4-fvector*6") + +;; FADD, FSUB, FMUL +(define_insn_reservation "znver4_fp_op_mul" 7 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fop,fmul") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0") + +(define_insn_reservation "znver4_fp_op_mul_load" 12 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fop,fmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu0") + +(define_insn_reservation "znver5_fp_op_mul_load" 12 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fop,fmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu0") +;; FDIV +(define_insn_reservation "znver4_fp_div" 15 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fdiv") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fdiv*6") + +(define_insn_reservation "znver4_fp_div_load" 20 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fdiv") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fdiv*6") + +(define_insn_reservation "znver5_fp_div_load" 20 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fdiv") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fdiv*6") + +(define_insn_reservation "znver4_fp_idiv_load" 24 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fdiv") + (and (eq_attr "fp_int_src" "true") + (eq_attr "memory" "load")))) + "znver4-double,znver4-load,znver4-fdiv*6") + +(define_insn_reservation "znver5_fp_idiv_load" 24 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fdiv") + (and (eq_attr "fp_int_src" "true") + (eq_attr "memory" "load")))) + "znver4-double,znver5-load,znver4-fdiv*6") + +;; FABS, FCHS +(define_insn_reservation "znver4_fp_fsgn" 1 + (and (eq_attr "cpu" "znver4") + (eq_attr "type" "fsgn")) + "znver4-direct,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver5_fp_fsgn" 1 + (and (eq_attr "cpu" "znver5") + (eq_attr "type" "fsgn")) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +;; FCMP +(define_insn_reservation "znver4_fp_fcmp" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "fcmp") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu1") + +(define_insn_reservation "znver4_fp_fcmp_double" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "fcmp") + (and (eq_attr "znver1_decode" "double") + (eq_attr "memory" "none")))) + "znver4-double,znver4-fpu1,znver4-fpu2") + +(define_insn_reservation "znver5_fp_fcmp_double" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "fcmp") + (and (eq_attr "znver1_decode" "double") + (eq_attr "memory" "none")))) + "znver4-double,znver4-fpu1,znver5-fp-store256") + +;; MMX, SSE, SSEn.n instructions +(define_insn_reservation "znver4_fp_mmx " 1 + (and (eq_attr "cpu" "znver4,znver5") + (eq_attr "type" "mmx")) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_mmx_add_cmp" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "mmxadd,mmxcmp") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu") + +(define_insn_reservation "znver4_mmx_add_cmp_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxadd,mmxcmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu") + +(define_insn_reservation "znver5_mmx_add_cmp_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxadd,mmxcmp") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu") + +(define_insn_reservation "znver4_mmx_insn" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver5_mmx_insn" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_mmx_insn_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver5_mmx_insn_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxcvt,sseshuf,sseshuf1,mmxshft") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_mmx_mov" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-fp-store") + +(define_insn_reservation "znver5_mmx_mov" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "store"))) + "znver4-direct,znver5-fp-store256") + +(define_insn_reservation "znver4_mmx_mov_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-fp-store") + +(define_insn_reservation "znver5_mmx_mov_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxmov") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver5-fp-store256") + +(define_insn_reservation "znver4_mmx_mul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "mmxmul") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu3") + +(define_insn_reservation "znver4_mmx_mul_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mmxmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu3") + +(define_insn_reservation "znver5_mmx_mul_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mmxmul") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu3") + +;; AVX instructions +(define_insn_reservation "znver4_sse_log" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu") + +(define_insn_reservation "znver4_sse_log_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + +(define_insn_reservation "znver5_sse_log_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + +(define_insn_reservation "znver4_sse_log1" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") + +(define_insn_reservation "znver5_sse_log1" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_log1_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "both")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2,znver4-fp-store") + +(define_insn_reservation "znver5_sse_log1_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V4SF,V8SF,V2DF,V4DF,QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "both")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_comi" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") + +(define_insn_reservation "znver5_sse_comi" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_comi_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-double,znver4-load,znver4-fpu2|znver4-fpu3,znver4-fp-store") + +(define_insn_reservation "znver5_sse_comi_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-double,znver5-load,znver4-fpu2|znver4-fpu3,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_test" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "prefix_extra" "1") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_test_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "prefix_extra" "1") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver5_sse_test_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "prefix_extra" "1") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_imul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu3") + +(define_insn_reservation "znver4_sse_imul_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver5_sse_imul_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_mov" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_mov_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver5_sse_mov_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_mov_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fp-store") + +(define_insn_reservation "znver5_sse_mov_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_mov_fp" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu") + +(define_insn_reservation "znver4_sse_mov_fp_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + +(define_insn_reservation "znver5_sse_mov_fp_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + +(define_insn_reservation "znver4_sse_mov_fp_store" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF,V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fp-store") + +(define_insn_reservation "znver5_sse_mov_fp_store" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "store")))) + "znver4-direct,znver5-fp-store256") + +(define_insn_reservation "znver5_sse_mov_fp_store_512" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "store")))) + "znver4-direct,znver5-fp-store-512") + +(define_insn_reservation "znver4_sse_add" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_add_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver5_sse_add_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_add1" 4 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseadd1") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-vector,znver4-fvector*2") + +(define_insn_reservation "znver4_sse_add1_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd1") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-vector,znver4-load,znver4-fvector*2") + +(define_insn_reservation "znver5_sse_add1_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd1") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-vector,znver5-load,znver4-fvector*2") + +(define_insn_reservation "znver4_sse_iadd" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu") + +(define_insn_reservation "znver4_sse_iadd_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + +(define_insn_reservation "znver5_sse_iadd_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "QI,HI,SI,DI,TI,OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + +(define_insn_reservation "znver4_sse_mul" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_mul_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver5_sse_mul_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_div_pd" 13 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V4DF,V2DF,V1DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*5") + +(define_insn_reservation "znver4_sse_div_ps" 10 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*3") + +(define_insn_reservation "znver4_sse_div_pd_load" 18 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V4DF,V2DF,V1DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*5") + +(define_insn_reservation "znver5_sse_div_pd_load" 18 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V4DF,V2DF,V1DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*5") + +(define_insn_reservation "znver4_sse_div_ps_load" 15 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*3") + +(define_insn_reservation "znver5_sse_div_ps_load" 15 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8SF,V4SF,V2SF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*3") + +(define_insn_reservation "znver4_sse_cmp_avx" 1 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "prefix" "vex") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_cmp_avx_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "prefix" "vex") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver5_sse_cmp_avx_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "prefix" "vex") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_comi_avx" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-fpu2+znver4-fpu3,znver4-fp-store") + +(define_insn_reservation "znver5_sse_comi_avx" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "store"))) + "znver4-direct,znver4-fpu2+znver4-fpu3,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_comi_avx_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-direct,znver4-load,znver4-fpu2+znver4-fpu3,znver4-fp-store") + +(define_insn_reservation "znver5_sse_comi_avx_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecomi") + (eq_attr "memory" "both"))) + "znver4-direct,znver5-load,znver4-fpu2+znver4-fpu3,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_cvt" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_cvt_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver5_sse_cvt_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_icvt" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_icvt_store" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver4-fp-store") + +(define_insn_reservation "znver5_sse_icvt_store" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "SI") + (eq_attr "memory" "store")))) + "znver4-double,znver4-fpu2|znver4-fpu3,znver5-fp-store256") + +(define_insn_reservation "znver4_sse_shuf" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver5_sse_shuf" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_shuf_load" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu") + +(define_insn_reservation "znver5_sse_shuf_load" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V8SF,V4DF,V4SF,V2DF,V2SF,V1DF,SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu") + +(define_insn_reservation "znver4_sse_ishuf" 3 + (and (eq_attr "cpu" "znver4,znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "OI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_ishuf_load" 8 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver5_sse_ishuf_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "OI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +;; AVX512 instructions +(define_insn_reservation "znver4_sse_log_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_log_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_log_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_log_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_log1_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") + +(define_insn_reservation "znver5_sse_log1_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store-512") + +(define_insn_reservation "znver4_sse_log1_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") + +(define_insn_reservation "znver5_sse_log1_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sselog1") + (and (eq_attr "mode" "V16SF,V8DF,XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver5-fp-store-512") + +(define_insn_reservation "znver4_sse_mul_evex" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_mul_evex" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_mul_evex_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_mul_evex_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemul") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_imul_evex" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_imul_evex" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu3") + +(define_insn_reservation "znver4_sse_imul_evex_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_imul_evex_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseimul") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_mov_evex" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") + +(define_insn_reservation "znver5_sse_mov_evex" 2 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_mov_evex_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") + +(define_insn_reservation "znver5_sse_mov_evex_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_mov_evex_store" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fp-store") + +(define_insn_reservation "znver5_sse_mov_evex_store" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemov") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "store")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver5-fp-store-512") + +(define_insn_reservation "znver4_sse_add_evex" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_add_evex" 2 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_add_evex_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_add_evex_load" 8 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseadd") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_iadd_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_iadd_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_iadd_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_iadd_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseiadd") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_div_pd_evex" 13 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*9") + +(define_insn_reservation "znver5_sse_div_pd_evex" 13 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*9") + +(define_insn_reservation "znver4_sse_div_ps_evex" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*6") + +(define_insn_reservation "znver5_sse_div_ps_evex" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fdiv*6") + +(define_insn_reservation "znver4_sse_div_pd_evex_load" 19 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*9") + +(define_insn_reservation "znver5_sse_div_pd_evex_load" 19 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*9") + +(define_insn_reservation "znver4_sse_div_ps_evex_load" 16 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fdiv*6") + +(define_insn_reservation "znver5_sse_div_ps_evex_load" 16 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssediv") + (and (eq_attr "mode" "V16SF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fdiv*6") + +(define_insn_reservation "znver4_sse_cmp_avx128" 3 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_cmp_avx128" 3 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_cmp_avx128_load" 9 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_cmp_avx128_load" 9 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V4SF,V2DF,V2SF,V1DF,SF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_cmp_avx256" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_cmp_avx256" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_cmp_avx256_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_cmp_avx256_load" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V8SF,V4DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_cmp_avx512" 5 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_cmp_avx512" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "none"))))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_cmp_avx512_load" 11 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_cmp_avx512_load" 11 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecmp") + (and (eq_attr "mode" "V16SF,V8DF") + (and (eq_attr "prefix" "evex") + (eq_attr "memory" "load"))))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_cvt_evex" 6 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_cvt_evex" 6 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_cvt_evex_load" 12 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2,znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_cvt_evex_load" 12 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssecvt") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2,znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_shuf_evex" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_shuf_evex" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_shuf_evex_load" 7 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2|znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_shuf_evex_load" 7 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "V16SF,V8DF") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu0|znver4-fpu1|znver4-fpu2|znver4-fpu3") + +(define_insn_reservation "znver4_sse_ishuf_evex" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1*2|znver4-fpu2*2") + +(define_insn_reservation "znver5_sse_ishuf_evex" 5 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "none")))) + "znver4-direct,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_ishuf_evex_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver4-load,znver4-fpu1*2|znver4-fpu2*2") + +(define_insn_reservation "znver5_sse_ishuf_evex_load" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (and (eq_attr "mode" "XI") + (eq_attr "memory" "load")))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +(define_insn_reservation "znver4_sse_muladd" 4 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "ssemuladd") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_muladd" 4 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "ssemuladd") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_muladd_load" 10 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "sseshuf") + (eq_attr "memory" "load"))) + "znver4-direct,znver4-load,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_muladd_load" 10 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "sseshuf") + (eq_attr "memory" "load"))) + "znver4-direct,znver5-load,znver4-fpu1|znver4-fpu2") + +;; AVX512 mask instructions + +(define_insn_reservation "znver4_sse_mskmov" 2 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "mskmov") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0*2|znver4-fpu1*2") + +(define_insn_reservation "znver5_sse_mskmov" 2 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "mskmov") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu1") + +(define_insn_reservation "znver4_sse_msklog" 1 + (and (eq_attr "cpu" "znver4") + (and (eq_attr "type" "msklog") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu2*2|znver4-fpu3*2") + +(define_insn_reservation "znver5_sse_msklog" 1 + (and (eq_attr "cpu" "znver5") + (and (eq_attr "type" "msklog") + (eq_attr "memory" "none"))) + "znver4-direct,znver4-fpu0|znver4-fpu3") From 6cb5ef37c2fac240b68d8ee438aba4885956269f Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Sat, 16 Mar 2024 00:11:25 +1100 Subject: [PATCH 104/551] testsuite: Fix excess errors for new modules testcases on powerpc [PR114320] On some configurations, PowerPC emits -Wpsabi warnings when using IEEE long doubles on a machine configured with IBM long double by default. This patch suppresses these warnings for this testcase. PR testsuite/114320 gcc/testsuite/ChangeLog: * g++.dg/modules/target-powerpc-1_a.C: Suppress -Wpsabi. * g++.dg/modules/target-powerpc-1_b.C: Likewise. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> --- gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C | 2 +- gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C b/gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C index 693ed101ed5d..01709e0eac00 100644 --- a/gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C +++ b/gcc/testsuite/g++.dg/modules/target-powerpc-1_a.C @@ -1,7 +1,7 @@ // PR c++/98645 // { dg-do compile { target powerpc*-*-* } } // { dg-require-effective-target ppc_float128_sw } -// { dg-additional-options "-fmodules-ts -mfloat128 -mabi=ieeelongdouble" } +// { dg-additional-options "-fmodules-ts -mfloat128 -mabi=ieeelongdouble -Wno-psabi" } export module M; export __ibm128 i = 0.0; diff --git a/gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C b/gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C index d6b684b556d0..b4209bc1550e 100644 --- a/gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C +++ b/gcc/testsuite/g++.dg/modules/target-powerpc-1_b.C @@ -1,7 +1,7 @@ // PR c++/98645 // { dg-module-do compile { target powerpc*-*-* } } // { dg-require-effective-target ppc_float128_sw } -// { dg-additional-options "-fmodules-ts -mfloat128 -mabi=ieeelongdouble" } +// { dg-additional-options "-fmodules-ts -mfloat128 -mabi=ieeelongdouble -Wno-psabi" } import M; From fd776d092642d7b9d429a5e45454594a93ccd819 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Fri, 1 Mar 2024 16:46:29 +0000 Subject: [PATCH 105/551] gcc_update: Add missing generated files I'm seeing errors for --enable-maintainer-mode builds due to incorrectly regenerating these files. They should be touched by gcc_update so they aren't regenerated incorrectly. contrib/ChangeLog: * gcc_update: Add more generated files in libcc1, lto-plugin, fixincludes, and libstdc++-v3. --- contrib/gcc_update | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/contrib/gcc_update b/contrib/gcc_update index 774c926e723d..fac86d0e33e4 100755 --- a/contrib/gcc_update +++ b/contrib/gcc_update @@ -70,6 +70,7 @@ files_and_dependencies () { # fixincludes fixincludes/configure: fixincludes/configure.ac fixincludes/aclocal.m4 fixincludes/config.h.in: fixincludes/configure.ac fixincludes/aclocal.m4 +fixincludes/fixincl.x: fixincludes/inclhack.def fixincludes/fixincl.tpl # intl library intl/plural.c: intl/plural.y intl/plural-config.h: intl/plural.y @@ -106,6 +107,7 @@ gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h # direct2s.c:35: warning: current file is older than direct2.c gcc/testsuite/gcc.dg/cpp/direct2s.c: gcc/testsuite/gcc.dg/cpp/direct2.c # lto-plugin +lto-plugin/aclocal.m4: lto-plugin/configure.ac lto-plugin/configure: lto-plugin/configure.ac lto-plugin/aclocal.m4 lto-plugin/Makefile.in: lto-plugin/Makefile.am lto-plugin/aclocal.m4 # tools @@ -186,7 +188,13 @@ libphobos/config.h.in: libphobos/configure.ac libphobos/aclocal.m4 libphobos/configure: libphobos/configure.ac libphobos/aclocal.m4 libphobos/src/Makefile.in: libphobos/src/Makefile.am libphobos/aclocal.m4 libphobos/testsuite/Makefile.in: libphobos/testsuite/Makefile.am libphobos/aclocal.m4 +libstdc++-v3/aclocal.m4: libstdc++-v3/configure.ac libstdc++-v3/acinclude.m4 +libstdc++-v3/Makefile.in: libstdc++-v3/Makefile.am libstdc++-v3/aclocal.m4 +libstdc++-v3/configure: libstdc++-v3/configure.ac libstdc++-v3/acinclude.m4 libstdc++-v3/include/bits/version.h: libstdc++-v3/include/bits/version.def libstdc++-v3/include/bits/version.tpl +libcc1/aclocal.m4: libcc1/configure.ac +libcc1/Makefile.in: libcc1/Makefile.am libcc1/configure.ac libcc1/aclocal.m4 +libcc1/configure: libcc1/configure.ac # Top level Makefile.in: Makefile.tpl Makefile.def configure: configure.ac config/acx.m4 From 3e3ad8eeb41b6a6964604bbbb1bb3dee0182bbf9 Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Mon, 18 Mar 2024 16:04:42 +0000 Subject: [PATCH 106/551] Update gcc fr.po, sv.po * fr.po, sv.po: Update. --- gcc/po/fr.po | 1770 ++++++++++++++++++++------------------------------ gcc/po/sv.po | 686 ++++++++----------- 2 files changed, 975 insertions(+), 1481 deletions(-) diff --git a/gcc/po/fr.po b/gcc/po/fr.po index ca66271f4aa6..2dbfd3dc5914 100644 --- a/gcc/po/fr.po +++ b/gcc/po/fr.po @@ -1,12 +1,12 @@ # This file is distributed under the same license as the gcc package. # # Messages français pour GNU concernant gcc. -# Copyright © 2023 Free Software Foundation, Inc. +# Copyright © 2024 Free Software Foundation, Inc. # # Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996. # François-Xavier Coudert <fxcoudert@gmail.com>, 2008. # Stéphane Aulery <lkppo@free.fr>, 2015, 2016. -# Frédéric Marchal <fmarchal@perso.be>, 2023. +# Frédéric Marchal <fmarchal@perso.be>, 2024. # # Vocabulaire utilisé # lvalue = l-valeur @@ -97,10 +97,10 @@ # msgid "" msgstr "" -"Project-Id-Version: gcc 13.2.0\n" +"Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2023-07-28 14:17+0200\n" +"PO-Revision-Date: 2024-03-16 16:53+0100\n" "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" @@ -408,10 +408,8 @@ msgid "-install_name only allowed with -dynamiclib" msgstr "-install_name permis seulement avec -dynamiclib" #: config/darwin.h:191 -#, fuzzy -#| msgid "-bundle not allowed with -dynamiclib" msgid "-bundle not allowed with -shared" -msgstr "-bundle n'est pas permis avec -dynamiclib" +msgstr "-bundle n'est pas permis avec -shared" #: config/darwin.h:192 msgid "-bundle not allowed with -dynamiclib" @@ -1270,10 +1268,9 @@ msgid "Conform to the ISO Fortran 2018 standard." msgstr "Être conforme au standard Fortran ISO 2018." #: fortran/lang.opt:896 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO Fortran 2003 standard." +#, no-c-format msgid "Conform to the ISO Fortran 2023 standard." -msgstr "Être conforme au standard Fortran ISO 2003." +msgstr "Être conforme au standard Fortran ISO 2023." #: fortran/lang.opt:900 #, no-c-format @@ -1321,10 +1318,9 @@ msgid "Dump various Rust front end internals." msgstr "Vidanger divers détails internes de l'interface Rust." #: rust/lang.opt:75 -#, fuzzy, no-c-format -#| msgid "-frust-dump-<type>\tDump Rust frontend internal information." +#, no-c-format msgid "-frust-dump-<type> Dump Rust frontend internal information." -msgstr "-frust-dump-<type>\tDécharger les informations internes de l'interface Rust." +msgstr "-frust-dump-<type> Décharger les informations internes de l'interface Rust." #: rust/lang.opt:79 #, no-c-format @@ -1332,21 +1328,19 @@ msgid "Enable experimental compilation of Rust files at your own risk" msgstr "Activez la compilation expérimentale de fichiers Rust à vos propres risques" #: rust/lang.opt:83 -#, fuzzy, no-c-format -#| msgid "-frust-max-recursion-depth=integer" +#, no-c-format msgid "-frust-max-recursion-depth=<integer>" -msgstr "-frust-max-recursion-depth=entier" +msgstr "-frust-max-recursion-depth=<entier>" #: rust/lang.opt:87 #, no-c-format msgid "-frust-crate-type=[bin|lib|rlib|dylib|cdylib|staticlib|proc-macro] Crate type to emit" -msgstr "" +msgstr "-frust-crate-type=[bin|lib|rlib|dylib|cdylib|staticlib|proc-macro] Type de cageot (crate) a émettre" #: rust/lang.opt:115 -#, fuzzy, no-c-format -#| msgid "-frust-mangling=[legacy|v0] Choose which version to use for name mangling" +#, no-c-format msgid "-frust-mangling=[legacy|v0] Version to use for name mangling" -msgstr "-frust-mangling=[legacy|v0] Choisir la version pour la décoration de noms" +msgstr "-frust-mangling=[legacy|v0] Version à utiliser pour la décoration de noms" #: rust/lang.opt:128 #, no-c-format @@ -1354,16 +1348,14 @@ msgid "-frust-cfg=<name> Set a config expansion option" msgstr "-frust-cfg=<name> Définir une option d'expansion de configuration" #: rust/lang.opt:132 -#, fuzzy, no-c-format -#| msgid "-frust-edition=[2015|2018|2021] Choose which edition to use when compiling rust code" +#, no-c-format msgid "-frust-edition=[2015|2018|2021] Edition to use when compiling rust code" -msgstr "-frust-edition=[2015|2018|2021] Choisir l'édition pour la compilation de code rust" +msgstr "-frust-edition=[2015|2018|2021] Édition à utiliser pour la compilation de code rust" #: rust/lang.opt:148 -#, fuzzy, no-c-format -#| msgid "Flag to enable embeding metadata directly into object files" +#, no-c-format msgid "Enable embedding metadata directly into object files" -msgstr "Fanion pour activer l'intégration de méta-données directement des les fichiers objets" +msgstr "Activer l'intégration de méta-données directement des les fichiers objets" #: rust/lang.opt:152 #, no-c-format @@ -1371,20 +1363,19 @@ msgid "-frust-metadata-output=<path.rox> Path to output crate metadata" msgstr "-frust-metadata-output=<path.rox> Chemin pour sortir les méta-données des cageots (crate)" #: rust/lang.opt:160 -#, fuzzy, no-c-format -#| msgid "-frust-compile-until=[ast|attributecheck|expansion|nameresolution|lowering|typecheck|privacy|unsafety|const|copimlation|end] When to stop in the pipeline when compiling Rust code" +#, no-c-format msgid "-frust-compile-until=[ast|attributecheck|expansion|astvalidation|featuregating|nameresolution|lowering|typecheck|privacy|unsafety|const|borrowcheck|compilation|end] The pipeline will run up until this stage when compiling Rust code" -msgstr "-frust-compile-until=[ast|attributecheck|expansion|nameresolution|lowering|typecheck|privacy|unsafety|const|copimlation|end] Quand arrêter dans le pipeline lors de la compilation de code Rust" +msgstr "-frust-compile-until=[ast|attributecheck|expansion|astvalidation|featuregating|nameresolution|lowering|typecheck|privacy|unsafety|const|borrowcheck|copimlation|end] Le pipeline va s'exécuter jusqu'à cette étape lors de la compilation de code Rust" #: rust/lang.opt:209 #, no-c-format msgid "Use the temporary and experimental name resolution pipeline instead of the stable one" -msgstr "" +msgstr "Utiliser un pipeline temporaire et expérimental pour la résolution de noms au lieu de celui qui est stable" #: rust/lang.opt:213 #, no-c-format msgid "Use the WIP borrow checker." -msgstr "" +msgstr "Utiliser le vérificateur d'emprunts WIP" #: c-family/c.opt:182 #, no-c-format @@ -1479,18 +1470,17 @@ msgstr "-MT <cible>\tAjouter une cible qui ne nécessite pas d'échappement des #: c-family/c.opt:261 #, no-c-format msgid "Structured format for output dependency information. Supported (\"p1689r5\")." -msgstr "" +msgstr "Format structuré pour la sortie des informations de dépendances. Supporté (« p1689r5 »)." #: c-family/c.opt:265 -#, fuzzy, no-c-format -#| msgid "Generate C++ Module dependency information." +#, no-c-format msgid "File for output dependency information." -msgstr "Générer l'information des dépendances de modules C++i." +msgstr "Fichier pour sortir les informations de dépendances." #: c-family/c.opt:269 #, no-c-format msgid "-fdeps-target=obj.o Output file for the compile step." -msgstr "" +msgstr "-fdeps-target=obj.o Écrit le fichier pour l'étape du compilateur." #: c-family/c.opt:273 #, no-c-format @@ -1638,16 +1628,14 @@ msgid "Warn when a built-in preprocessor macro is undefined or redefined." msgstr "Avertir quand une macro interne du pré-processeur est annulée ou redéfinie." #: c-family/c.opt:438 -#, fuzzy, no-c-format -#| msgid "Warn about features not present in ISO C11, but present in ISO C2X." +#, no-c-format msgid "Warn about features not present in ISO C11, but present in ISO C23." -msgstr "Avertir à propos de fonctionnalités absentes dans le C11 ISO mais présentes dans le C2X ISO." +msgstr "Avertir à propos de fonctionnalités absentes dans le C11 ISO mais présentes dans le C23 ISO." #: c-family/c.opt:442 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -Wc++11-compat" +#, no-c-format msgid "Deprecated in favor of -Wc11-c23-compat." -msgstr "Obsolète à la faveur de -Wc++11-compat" +msgstr "Obsolète à la faveur de -Wc11-c23-compat" #: c-family/c.opt:446 #, no-c-format @@ -1710,16 +1698,14 @@ msgid "Warn about C++23 constructs in code compiled with an older standard." msgstr "Avertir à propos des constructions C++23 dans du code compilé avec un standard plus ancien." #: c-family/c.opt:503 -#, fuzzy, no-c-format -#| msgid "Warn about C++20 constructs in code compiled with an older standard." +#, no-c-format msgid "Warn about C++26 constructs in code compiled with an older standard." -msgstr "Avertir à propos des constructions C++20 dans du code compilé avec un standard plus ancien." +msgstr "Avertir à propos des constructions C++26 dans du code compilé avec un standard plus ancien." #: c-family/c.opt:507 -#, fuzzy, no-c-format -#| msgid "Warn about suspicious divisions of two sizeof expressions that don't work correctly with pointers." +#, no-c-format msgid "Warn about suspicious calls to calloc-like functions where sizeof expression is the earlier size argument and not the latter." -msgstr "Avertir à propos de divisions douteuses de deux expressions sizeof qui ne fonctionnent pas correctement avec des pointeurs." +msgstr "Avertir à propos d'appels douteux aux fonctions de type calloc où l'expression sizeof est le premier argument de taille et non le second." #: c-family/c.opt:511 #, no-c-format @@ -1839,10 +1825,9 @@ msgid "Warn when a declaration is found after a statement." msgstr "Avertir lorsqu'une déclaration est trouvée après une expression." #: c-family/c.opt:612 -#, fuzzy, no-c-format -#| msgid "Warn about unprototyped function declarations." +#, no-c-format msgid "Warn for missing parameter types in function declarations." -msgstr "Avertir à propos des déclarations de fonctions sans prototype." +msgstr "Avertir à propos des types de paramètres manquants dans les déclarations de fonctions." #: c-family/c.opt:616 #, no-c-format @@ -2255,10 +2240,9 @@ msgid "Warn when the template keyword is missing after a member access token in msgstr "Avertir quand un mot clé de patron est manquant après un jeton d'accès à un membre dans une expression d'accès à un membre dépendant si ce membre est un patron." #: c-family/c.opt:994 -#, fuzzy, no-c-format -#| msgid "Warn about global functions without previous declarations." +#, no-c-format msgid "Warn about global variables without previous declarations." -msgstr "Avertir à propos des fonctions globales sans déclaration précédente." +msgstr "Avertir à propos des variables globales sans déclaration précédente." #: c-family/c.opt:1001 #, no-c-format @@ -2346,10 +2330,9 @@ msgid "Warn about potentially suboptimal choices related to OpenACC parallelism. msgstr "Avertir à propos d'un choix potentiellement suboptimal relatif au parallélisme de OpenACC." #: c-family/c.opt:1101 -#, fuzzy, no-c-format -#| msgid "Warn about \"suspicious\" constructs." +#, no-c-format msgid "Warn about suspicious OpenMP code." -msgstr "Avertir à propos des constructions « douteuses »." +msgstr "Avertir à propos de code OpenMP douteux." #: c-family/c.opt:1105 #, no-c-format @@ -2688,10 +2671,9 @@ msgid "Warn if a comparison always evaluates to true or false." msgstr "Avertir si une comparaison est toujours évaluée à vrai ou à faux." #: c-family/c.opt:1413 -#, fuzzy, no-c-format -#| msgid "GCN does not support static constructors or destructors" +#, no-c-format msgid "Warn about simple-template-id in a constructor or destructor." -msgstr "GCN ne supporte pas les constructeurs ou les destructeurs statiques" +msgstr "Avertir à propos de simple-template-id dans un constructeur ou un destructeur" #: c-family/c.opt:1417 #, no-c-format @@ -3001,10 +2983,9 @@ msgid "Print hierarchical comparisons when template types are mismatched." msgstr "Afficher des comparaisons hiérarchiques quand des types de patrons ne concordent pas." #: c-family/c.opt:1818 -#, fuzzy, no-c-format -#| msgid "default argument mismatch in overload resolution" +#, no-c-format msgid "Note all candidates during overload resolution failure." -msgstr "désaccord dans l'argument par défaut lors de la résolution de la surcharge" +msgstr "Noter tous les candidats pendant l'échec de résolution de surcharge." #: c-family/c.opt:1822 #, no-c-format @@ -3167,10 +3148,9 @@ msgid "Warn about macros that have conflicting header units definitions." msgstr "Avertir à propos de macros ayant des définitions d'unités d'en-tête conflictuelles." #: c-family/c.opt:1992 -#, fuzzy, no-c-format -#| msgid "return makes pointer from integer without a cast" +#, no-c-format msgid "Warn if pointers of distinct types are compared without a cast." -msgstr "le retour transforme un entier en pointeur sans transtypage" +msgstr "Avertir si des pointeurs de types distincts sont comparés sans transtypage." #: c-family/c.opt:1996 #, no-c-format @@ -3213,10 +3193,9 @@ msgid "Implement resolution of DR 150 for matching of template template argument msgstr "Implémenter la résolution du DR 150 pour faire correspondre les arguments de patron des patrons." #: c-family/c.opt:2043 -#, fuzzy, no-c-format -#| msgid "Generate code for NeXT (Apple Mac OS X) runtime environment." +#, no-c-format msgid "Generate code for NeXT (Apple macOS) runtime environment." -msgstr "Générer le code pour l'environnement d'exécution NeXT (Apple Mac OS X)." +msgstr "Générer le code pour l'environnement d'exécution NeXT (Apple macOS)." #: c-family/c.opt:2047 #, no-c-format @@ -3609,10 +3588,9 @@ msgid "Conform to the ISO 2023 C++ draft standard (experimental and incomplete s msgstr "Être conforme au brouillon du standard C++ ISO 2023 (support expérimental et incomplet)." #: c-family/c.opt:2480 c-family/c.opt:2484 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 2023 C++ draft standard (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2026 C++ draft standard (experimental and incomplete support)." -msgstr "Être conforme au brouillon du standard C++ ISO 2023 (support expérimental et incomplet)." +msgstr "Être conforme au brouillon du standard C++ ISO 2026 (support expérimental et incomplet)." #: c-family/c.opt:2488 c-family/c.opt:2642 #, no-c-format @@ -3631,16 +3609,14 @@ msgid "Conform to the ISO 2017 C standard (published in 2018)." msgstr "Être conforme au standard C ISO 2017 (publié en 2018)." #: c-family/c.opt:2504 c-family/c.opt:2654 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 202X C standard draft (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) (experimental and incomplete support)." -msgstr "Conforme au brouillon du standard C ISO 202X (support expérimental et incomplet)." +msgstr "Conforme au brouillon du standard C ISO 2023 (publication attendue en 2024) (support expérimental et incomplet)." #: c-family/c.opt:2508 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -std=c11." +#, no-c-format msgid "Deprecated in favor of -std=c23." -msgstr "Rendu obsolète en faveur de -std=c11." +msgstr "Rendu obsolète en faveur de -std=c23." #: c-family/c.opt:2512 c-family/c.opt:2516 c-family/c.opt:2626 #, no-c-format @@ -3703,10 +3679,9 @@ msgid "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimen msgstr "Être conforme au brouillon du standard C++ ISO 2023 avec les extensions GNU (support expérimental et incomplet)." #: c-family/c.opt:2578 c-family/c.opt:2582 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental and incomplete support)." -msgstr "Être conforme au brouillon du standard C++ ISO 2023 avec les extensions GNU (support expérimental et incomplet)." +msgstr "Être conforme au brouillon du standard C++ ISO 2026 avec les extensions GNU (support expérimental et incomplet)." #: c-family/c.opt:2586 #, no-c-format @@ -3724,16 +3699,14 @@ msgid "Conform to the ISO 2017 C standard (published in 2018) with GNU extension msgstr "Être conforme au standard C ISO 2017 (publié en 2018) avec les extensions GNU." #: c-family/c.opt:2602 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 202X C standard draft with GNU extensions (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) with GNU extensions (experimental and incomplete support)." -msgstr "Conforme au brouillon du standard C ISO 202X avec les extensions de GNU (support expérimental et incomplet)." +msgstr "Conforme au brouillon du standard C ISO 2023 (publication attendue en 2024) avec les extensions de GNU (support expérimental et incomplet)." #: c-family/c.opt:2606 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -std=gnu11." +#, no-c-format msgid "Deprecated in favor of -std=gnu23." -msgstr "Rendu obsolète en faveur de -std=gnu11." +msgstr "Rendu obsolète en faveur de -std=gnu23." #: c-family/c.opt:2610 c-family/c.opt:2614 #, no-c-format @@ -4666,10 +4639,9 @@ msgid "Warn about code paths in which floating-point arithmetic is used in locat msgstr "Avertir à propos de chemins dans le code dans lesquels une arithmétique en virgule flottante est utilisée à des endroits où un calcul précis est requis." #: analyzer/analyzer.opt:139 -#, fuzzy, no-c-format -#| msgid "Warn about code paths which appear to lead to infinite recursion." +#, no-c-format msgid "Warn about code paths which appear to lead to an infinite loop." -msgstr "Avertir à propos de chemins dans le code qui semblent mener à une récursion infinie." +msgstr "Avertir à propos de chemins dans le code qui semblent mener à une boucle infinie." #: analyzer/analyzer.opt:143 #, no-c-format @@ -4697,10 +4669,9 @@ msgid "Warn about code paths in which a write or read to a buffer is out-of-boun msgstr "Avertir à propos de chemins dans le code où une écriture ou une lecture est en dehors des limites d'un tampon." #: analyzer/analyzer.opt:163 -#, fuzzy, no-c-format -#| msgid "Warn about code paths in which a write or read to a buffer is out-of-bounds." +#, no-c-format msgid "Warn about code paths in which undefined behavior would occur due to overlapping buffers." -msgstr "Avertir à propos de chemins dans le code où une écriture ou une lecture est en dehors des limites d'un tampon." +msgstr "Avertir à propos de chemins dans le code dans lesquels un comportement non défini se produira à cause de tampons se chevauchant." #: analyzer/analyzer.opt:167 #, no-c-format @@ -4778,10 +4749,9 @@ msgid "Warn about code paths in which an unsanitized value is used as a size." msgstr "Avertir à propos de chemins dans le code où une valeur brute est utilisée comme taille." #: analyzer/analyzer.opt:227 -#, fuzzy, no-c-format -#| msgid "Warn about code paths which appear to lead to infinite recursion." +#, no-c-format msgid "Warn about code paths in in which a call is made to strtok with undefined behavior." -msgstr "Avertir à propos de chemins dans le code qui semblent mener à une récursion infinie." +msgstr "Avertir à propos de chemins dans le code qui appellent strtok avec un comportement indéfini." #: analyzer/analyzer.opt:231 #, no-c-format @@ -4829,10 +4799,9 @@ msgid "Warn about code paths in which an uninitialized value is used." msgstr "Avertir à propos de chemins dans le code où une valeur non initialisée est utilisée." #: analyzer/analyzer.opt:267 -#, fuzzy, no-c-format -#| msgid "Warn if the code is too complicated for the analyzer to fully explore." +#, no-c-format msgid "Warn if expressions are too complicated for the analyzer to fully track." -msgstr "Avertir si le code est trop compliqué pour que l'analyseur réussisse à l'explorer entièrement." +msgstr "Avertir si des expressions sont trop compliquées pour que l'analyseur réussisse à les explorer entièrement." #: analyzer/analyzer.opt:271 #, no-c-format @@ -4960,10 +4929,9 @@ msgid "Dump various analyzer internals to SRCFILE.*.fg.dot and SRCFILE.*.tg.dot. msgstr "Vidanger divers détails internes de l'analyseur dans FICHIERSRC.*.fg.dot et FICHIERSRC.*.tg.dot." #: analyzer/analyzer.opt:371 -#, fuzzy, no-c-format -#| msgid "Dump various analyzer internals to SRCFILE.analyzer.txt." +#, no-c-format msgid "Dump various analyzer internals to SRCFILE.*.infinite-loop.dot." -msgstr "Vidanger divers détails internes de l'analyseur dans FICHIERSRC.analyzer.txt." +msgstr "Vidanger divers détails internes de l'analyseur dans FICHIERSRC.*.infinite-loop.dot." #: analyzer/analyzer.opt:375 #, no-c-format @@ -5401,10 +5369,9 @@ msgid "Do not add a default symbol exports to modules or dynamic libraries." msgstr "Ne pas ajouter un export de symboles par défaut aux modules ou aux bibliothèques dynamiques." #: config/darwin.opt:246 -#, fuzzy, no-c-format -#| msgid "Do not add a default symbol exports to modules or dynamic libraries." +#, no-c-format msgid "Do not add default run paths (for the compiler library directories) to executables, modules or dynamic libraries." -msgstr "Ne pas ajouter un export de symboles par défaut aux modules ou aux bibliothèques dynamiques." +msgstr "Ne pas ajouter les chemins d'exécution par défaut (pour les répertoires des bibliothèques du compilateur) aux exécutables, aux modules ou aux bibliothèques dynamiques." #: config/darwin.opt:250 #, no-c-format @@ -6068,10 +6035,9 @@ msgid "Set the version of RISC-V ISA spec." msgstr "Définir la version des spécifications ISA RISC-V." #: config/riscv/riscv.opt:509 -#, fuzzy, no-c-format -#| msgid "Enable conditional move instruction usage." +#, no-c-format msgid "Enable conditional moves unconditionally." -msgstr "Activer l'utilisation de l'instruction de déplacement conditionnel." +msgstr "Activer les déplacements conditionnels inconditionnellement." #: config/riscv/riscv.opt:513 #, no-c-format @@ -6079,59 +6045,54 @@ msgid "Always inline subword atomic operations." msgstr "Toujours mettre en ligne les opérations atomiques inférieures à une taille de mot." #: config/riscv/riscv.opt:517 -#, fuzzy, no-c-format -#| msgid "Use caller save register across calls if possible." +#, no-c-format msgid "Inline strcmp calls if possible." -msgstr "Faire sauvegarder les registres par l'appelant au travers des appels si possible." +msgstr "Mettre en ligne les appels à strcmp si possible." #: config/riscv/riscv.opt:521 -#, fuzzy, no-c-format -#| msgid "Use caller save register across calls if possible." +#, no-c-format msgid "Inline strncmp calls if possible." -msgstr "Faire sauvegarder les registres par l'appelant au travers des appels si possible." +msgstr "Mettre en ligne les appels à strncmp si possible." #: config/riscv/riscv.opt:525 -#, fuzzy, no-c-format -#| msgid "Reduce stack alignment on call sites if possible." +#, no-c-format msgid "Inline strlen calls if possible." -msgstr "Réduire l'alignement de la pile à l'endroit de l'appel, si possible." +msgstr "Mettre en ligne les appels à strlen si possible." #: config/riscv/riscv.opt:529 #, no-c-format msgid "Max number of bytes to compare as part of inlined strcmp/strncmp routines (default: 64)." -msgstr "" +msgstr "Nombre maximal d'octets à comparer dans les routines strcmp/strncmp mises en ligne (défaut: 64)." #: config/riscv/riscv.opt:533 -#, fuzzy, no-c-format -#| msgid "Valid arguments to -mcode-readable=:" +#, no-c-format msgid "Valid arguments to -param=riscv-autovec-preference=:" -msgstr "Les arguments valides pour -mcode-readable=:" +msgstr "Les arguments valides pour -param=riscv-autovec-preference= :" #: config/riscv/riscv.opt:546 #, no-c-format msgid "-param=riscv-autovec-preference=<string>\tSet the preference of auto-vectorization in the RISC-V port." -msgstr "" +msgstr "-param=riscv-autovec-preference=<chaîne>\tDéfinir la préférence de l'auto-vectorisation dans le portage de RISC-V" #: config/riscv/riscv.opt:550 #, no-c-format msgid "The RVV possible LMUL (-param=riscv-autovec-lmul=):" -msgstr "" +msgstr "Le LMUM possible pour RVV (-param=riscv-autovec-lmul=) :" #: config/riscv/riscv.opt:569 #, no-c-format msgid "-param=riscv-autovec-lmul=<string>\tSet the RVV LMUL of auto-vectorization in the RISC-V port." -msgstr "" +msgstr "-param=riscv-autovec-lmul=<chaîne>\tDéfini le LMUL de RVV de l'auto-vectorisation dans le portage de RISC-V" #: config/riscv/riscv.opt:576 -#, fuzzy, no-c-format -#| msgid "Valid arguments to -mstringop-strategy=:" +#, no-c-format msgid "Valid arguments to -param=vsetvl-strategy=:" -msgstr "Les arguments valables pour -mstringop-strategy=:" +msgstr "Les arguments valables pour -param=vsetvl-strategy= :" #: config/riscv/riscv.opt:589 #, no-c-format msgid "-param=vsetvl-strategy=<string>\tSet the optimization level of VSETVL insert pass." -msgstr "" +msgstr "-param=vsetvl-strategy=<chaîne>\tDéfini le niveau d'optimisation de la passe d'insertion de VSETVL." #: config/riscv/riscv.opt:593 config/i386/i386.opt:496 #, no-c-format @@ -6139,10 +6100,9 @@ msgid "Valid arguments to -mstringop-strategy=:" msgstr "Les arguments valables pour -mstringop-strategy=:" #: config/riscv/riscv.opt:609 -#, fuzzy, no-c-format -#| msgid "Specify memset expansion strategy when expected size is known." +#, no-c-format msgid "Specify stringop expansion strategy." -msgstr "Spécifier la stratégie d'expansion de memset quand la taille attendue est connue." +msgstr "Spécifier la stratégie d'expansion de stringop." #: config/m32c/m32c.opt:23 #, no-c-format @@ -6295,16 +6255,14 @@ msgid "Workaround for ARM Cortex-A53 Erratum number 843419." msgstr "Correctif pour l'erratum numéro 843419 de l'ARM Cortex-A53." #: config/aarch64/aarch64.opt:102 -#, fuzzy, no-c-format -#| msgid "Specify how to access the thread pointer." +#, no-c-format msgid "The register used to access the thread pointer:" -msgstr "Spécifier comment accéder au pointeur du thread." +msgstr "Le registre utilisé pour accéder au pointeur du thread :" #: config/aarch64/aarch64.opt:133 -#, fuzzy, no-c-format -#| msgid "Specify thread pointer register number." +#, no-c-format msgid "Specify the thread pointer register." -msgstr "Spécifier le numéro de registre du pointeur du thread." +msgstr "Spécifier le registre du pointeur du thread." #: config/aarch64/aarch64.opt:137 #, no-c-format @@ -7187,10 +7145,9 @@ msgid "Branches are this expensive (arbitrary units)." msgstr "Les branchements sont coûteux à ce point (unités arbitraires)." #: config/i386/i386.opt:300 -#, fuzzy, no-c-format -#| msgid "-mlarge-data-threshold=<number>\tData greater than given threshold will go into .ldata section in x86-64 medium model." +#, no-c-format msgid "-mlarge-data-threshold=<number>\tData greater than given threshold will go into a large data section in x86-64 medium and large code models." -msgstr "-mlarge-data-threshold=<number>\tLes données plus grandes que la limite spécifiée iront dans la section .ldata dans le modèle moyen du x86-64." +msgstr "-mlarge-data-threshold=<number>\tLes données plus grandes que la limite spécifiée iront dans une section de grandes données dans les modèles de code moyen et large du x86-64." #: config/i386/i386.opt:304 #, no-c-format @@ -8124,74 +8081,64 @@ msgid "Support AMX-COMPLEX built-in functions and code generation." msgstr "Supporter les fonctions internes AMX-COMPLEX et la génération de code." #: config/i386/i386.opt:1303 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVXVNNIINT8 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVXVNNIINT16 built-in functions and code generation." -msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 et AVXVNNIINT8 et la génération de code." +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 et AVXVNNIINT16 et la génération de code." #: config/i386/i386.opt:1308 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM3 built-in functions and code generation." -msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et FMA et la génération de code." +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et SM3 et la génération de code." #: config/i386/i386.opt:1313 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SHA512 built-in functions and code generation." -msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et AVX2 et la génération de code." +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et SHA512 et la génération de code." #: config/i386/i386.opt:1318 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM4 built-in functions and code generation." -msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et FMA et la génération de code." +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX et SM4 et la génération de code." #: config/i386/i386.opt:1323 -#, fuzzy, no-c-format -#| msgid "Enable vectorization on trees." +#, no-c-format msgid "Enable vectorization for gather instruction." -msgstr "Activer la vectorisation sur les arbres." +msgstr "Activer la vectorisation pour l'instruction de rassemblement." #: config/i386/i386.opt:1327 -#, fuzzy, no-c-format -#| msgid "Enable vectorization on trees." +#, no-c-format msgid "Enable vectorization for scatter instruction." -msgstr "Activer la vectorisation sur les arbres." +msgstr "Activer la vectorisation sur l'instruction de dispersion." #: config/i386/i386.opt:1331 #, no-c-format msgid "Support code generation for APX features, including EGPR, PUSH2POP2, NDD and PPX." -msgstr "" +msgstr "Supporter la génération de code pour les fonctionnalité APX, y compris EGPR, PUSH2POP2, NDD et PPX." #: config/i386/i386.opt:1360 #, no-c-format msgid "Enable GPR32 in inline asm when APX_F enabled." -msgstr "" +msgstr "Activer GPR32 dans l'assembleur en ligne quand APX_F est activé." #: config/i386/i386.opt:1364 -#, fuzzy, no-c-format -#| msgid "Support BMI2 built-in functions and code generation." +#, no-c-format msgid "Support 512 bit vector built-in functions and code generation." -msgstr "Supporter les fonctions internes BMI2 et la génération de code." +msgstr "Supporter le vecteur 512 bits dans les fonctions internes et la génération de code." #: config/i386/i386.opt:1368 -#, fuzzy, no-c-format -#| msgid "Support AES built-in functions and code generation." +#, no-c-format msgid "Support USER_MSR built-in functions and code generation." -msgstr "Supporter les fonctions internes AES et la génération de code." +msgstr "Supporter les fonctions internes USER_MSR et la génération de code." #: config/i386/i386.opt:1372 config/i386/i386.opt:1382 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1 built-in functions and code generation." -msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 et AVX512F et la génération de code." +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 et AVX10.1 et la génération de code." #: config/i386/i386.opt:1377 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1-512 built-in functions and code generation." -msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 et AVX512F et la génération de code." +msgstr "Supporter les fonctions internes MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 et AVX10.1-512 et la génération de code." #: config/pa/pa64-hpux.opt:23 #, no-c-format @@ -10297,26 +10244,24 @@ msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bi msgstr "Autoriser les instructions en virgule flottante matérielles à couvrir des opérations 32 et 64 bits." #: config/loongarch/loongarch.opt:81 -#, fuzzy, no-c-format -#| msgid "FPU types of LoongArch:" +#, no-c-format msgid "SIMD extension levels of LoongArch:" -msgstr "Types FPU de LoongArch :" +msgstr "Niveaux d'extension SIMD de LoongArch :" #: config/loongarch/loongarch.opt:94 -#, fuzzy, no-c-format -#| msgid "-march=ISA\tGenerate code for the given ISA." +#, no-c-format msgid "-msimd=SIMD\tGenerate code for the given SIMD extension." -msgstr "-march=ISA\tGénérer le code pour l'ISA donnée." +msgstr "-msimd=SIMD\tGénérer le code pour l'extension SIMD donnée." #: config/loongarch/loongarch.opt:98 #, no-c-format msgid "Enable LoongArch SIMD Extension (LSX, 128-bit)." -msgstr "" +msgstr "Activer l'extension SIMD LoongArch (LSX, 128 bits)." #: config/loongarch/loongarch.opt:102 #, no-c-format msgid "Enable LoongArch Advanced SIMD Extension (LASX, 256-bit)." -msgstr "" +msgstr "Activer l'extension SIMD avancée LoongArch (LASX, 256 bits)." #: config/loongarch/loongarch.opt:107 #, no-c-format @@ -10374,10 +10319,9 @@ msgid "-mmax-inline-memcpy-size=SIZE\tSet the max size of memcpy to inline, defa msgstr "-mmax-inline-memcpy-size=TAILLE\tDéfinir la taille maximale de memcpy à mettre en-ligne, la valeur par défaut est 1024." #: config/loongarch/loongarch.opt:189 config/mips/mips.opt:150 -#, fuzzy, no-c-format -#| msgid "The code model option names for -mcmodel:" +#, no-c-format msgid "The code model option names for -mexplicit-relocs:" -msgstr "Les noms d'options du modèle de code pour -mcmodel:" +msgstr "Les noms d'options du modèle de code pour -mexplicit-relocs :" #: config/loongarch/loongarch.opt:202 config/mips/mips.opt:163 #, no-c-format @@ -10385,16 +10329,14 @@ msgid "Use %reloc() assembly operators." msgstr "Utiliser les opérateurs assembleur %reloc()." #: config/loongarch/loongarch.opt:206 config/mips/mips.opt:167 -#, fuzzy, no-c-format -#| msgid "Use %reloc() assembly operators." +#, no-c-format msgid "Use %reloc() assembly operators (for backward compatibility)." -msgstr "Utiliser les opérateurs assembleur %reloc()." +msgstr "Utiliser les opérateurs assembleur %reloc() (pour rétro-compatibilité)." #: config/loongarch/loongarch.opt:210 -#, fuzzy, no-c-format -#| msgid "Generate software reciprocal divide and square root for better throughput." +#, no-c-format msgid "Generate approximate reciprocal divide and square root for better throughput." -msgstr "Générer les inverses de la racine carrée et de la division par logiciel pour un meilleur débit." +msgstr "Générer des approximations des inverses de la racine carrée et de la division pour un meilleur débit." #: config/loongarch/loongarch.opt:245 #, no-c-format @@ -10402,44 +10344,39 @@ msgid "Avoid using the GOT to access external symbols." msgstr "Éviter d'utiliser la table GOT pour accéder aux symboles externes." #: config/loongarch/loongarch.opt:254 -#, fuzzy, no-c-format -#| msgid "Enable relaxing in the assembler." +#, no-c-format msgid "Pass -mrelax or -mno-relax option to the assembler." -msgstr "Activer la relaxe dans l'assembleur." +msgstr "Passer l'option -mrelax ou -mno-relax à l'assembleur." #: config/loongarch/loongarch.opt:258 -#, fuzzy, no-c-format -#| msgid "Used to limit unroll factor which indicates how much the autovectorizer may unroll a loop. The default value is 4." +#, no-c-format msgid "Used to limit unroll factor which indicates how much the autovectorizer may unroll a loop. The default value is 6." -msgstr "Utilisé pour limiter le facteur de dépliage qui indique combien de fois l'auto vectoriseur peut déplier une boucle. La valeur par défaut est 4." +msgstr "Utilisé pour limiter le facteur de dépliage qui indique combien de fois l'auto vectoriseur peut déplier une boucle. La valeur par défaut est 6." #: config/loongarch/loongarch.opt:276 -#, fuzzy, no-c-format -#| msgid "Support flag-preserving add-carry instructions." +#, no-c-format msgid "Support frecipe.{s/d} and frsqrte.{s/d} instructions." -msgstr "Supporter les instructions de préservation du fanion de report de l'addition." +msgstr "Supporter les instructions frecipe.{s/d} et frsqrte.{s/d}." #: config/loongarch/loongarch.opt:280 #, no-c-format msgid "Support div.w[u] and mod.w[u] instructions with inputs not sign-extended." -msgstr "" +msgstr "Supporter les instructions div.w[u] et mod.w[u] avec les entrées sans extension de signe." #: config/loongarch/loongarch.opt:284 -#, fuzzy, no-c-format -#| msgid "Support XSAVEC instructions." +#, no-c-format msgid "Support am{swap/add}[_db].{b/h} instructions." -msgstr "Supporter les instructions XSAVEC." +msgstr "Supporter les instructions am{swap/add}[_db].{b/h}." #: config/loongarch/loongarch.opt:288 -#, fuzzy, no-c-format -#| msgid "Support XSAVEC instructions." +#, no-c-format msgid "Support amcas[_db].{b/h/w/d} instructions." -msgstr "Supporter les instructions XSAVEC." +msgstr "Supporter les instructions amcas[_db].{b/h/w/d}." #: config/loongarch/loongarch.opt:292 #, no-c-format msgid "Do not need load-load barriers (dbar 0x700)." -msgstr "" +msgstr "Pas besoin des barrières load-load (dbar 0x700)." #: config/or1k/elf.opt:28 #, no-c-format @@ -12619,16 +12556,14 @@ msgid "Warn about invalid OpenACC dimensions." msgstr "Avertir à propos des dimensions OpenACC invalides." #: config/gcn/gcn.opt:92 -#, fuzzy, no-c-format -#| msgid "SRAM-ECC modes:" +#, no-c-format msgid "SRAM-ECC and XNACK modes:" -msgstr "modes SRAM-ECC :" +msgstr "modes SRAM-ECC et XNACK :" #: config/gcn/gcn.opt:108 -#, fuzzy, no-c-format -#| msgid "Compile for devices requiring XNACK enabled. Default off." +#, no-c-format msgid "Compile for devices requiring XNACK enabled. Default \"any\" if USM is supported." -msgstr "Compiler pour les périphériques requérant l'activation de XNACK. Désactivé par défaut." +msgstr "Compiler pour les périphériques requérant l'activation de XNACK. « any » est utilisé par défaut si USM es supporté." #: config/gcn/gcn.opt:112 #, no-c-format @@ -12681,34 +12616,29 @@ msgid "Enable 32-bit jump instructions." msgstr "Activer les instructions de saut 32 bits." #: config/bpf/bpf.opt:64 -#, fuzzy, no-c-format -#| msgid "Enable asan store operations protection." +#, no-c-format msgid "Enable general atomic operations introduced in v3 ISA." -msgstr "Autoriser ASan à protéger les opérations d'écriture." +msgstr "Autoriser les opérations atomiques générales introduite dans l'ISA v3." #: config/bpf/bpf.opt:68 -#, fuzzy, no-c-format -#| msgid "Enable 32-bit jump instructions." +#, no-c-format msgid "Enable byte swap instructions." -msgstr "Activer les instructions de saut 32 bits." +msgstr "Activer les instructions d'échange d'octets." #: config/bpf/bpf.opt:72 -#, fuzzy, no-c-format -#| msgid "Enable divide and modulus instructions." +#, no-c-format msgid "Enable signed division and modulus instructions." -msgstr "Activer les instructions de division et de modulo." +msgstr "Activer les instructions de division et de modulo signées." #: config/bpf/bpf.opt:76 -#, fuzzy, no-c-format -#| msgid "Enable divide and modulus instructions." +#, no-c-format msgid "Enable signed move and memory load instructions." -msgstr "Activer les instructions de division et de modulo." +msgstr "Activer les instructions de déplacement et les chargements mémoire signées." #: config/bpf/bpf.opt:102 -#, fuzzy, no-c-format -#| msgid "Known assembler dialects (for use with the -masm= option):" +#, no-c-format msgid "Known assembler dialects (for use with the -masm= option)" -msgstr "Dialectes d'assembleurs connus (à utiliser avec l'option -masm=):" +msgstr "Dialectes d'assembleurs connus (à utiliser avec l'option -masm=)" #: config/mips/mips.opt:32 #, no-c-format @@ -12791,10 +12721,9 @@ msgid "Use Enhanced Virtual Addressing instructions." msgstr "Utiliser les instructions d'adressage virtuel amélioré (Enhanced Virtual Addressing)." #: config/mips/mips.opt:171 -#, fuzzy, no-c-format -#| msgid "Does nothing. Preserved for backward compatibility." +#, no-c-format msgid "Don't use %reloc() assembly operators (for backward compatibility)." -msgstr "Ne fait rien. Préservé pour rétro-compatibilité." +msgstr "Ne pas utiliser les opérateurs assembleur %reloc() (pour rétro-compatibilité)." #: config/mips/mips.opt:175 #, no-c-format @@ -13057,10 +12986,9 @@ msgid "Optimize lui/addiu address loads." msgstr "Optimiser les chargements d'adresses lui/addiu." #: config/mips/mips.opt:406 -#, fuzzy, no-c-format -#| msgid "Enable MUL instructions." +#, no-c-format msgid "Enable the MIPS16e V2 instructions." -msgstr "Activer les instructions MUL." +msgstr "Activer les instructions MIPS16e V2." #: config/mips/mips.opt:410 #, no-c-format @@ -13938,10 +13866,9 @@ msgid "Warn about functions which might be candidates for __attribute__((malloc) msgstr "Avertir à propos des fonctions qui seraient candidates pour __attribute__((malloc))." #: common.opt:790 -#, fuzzy, no-c-format -#| msgid "Warn about functions which might be candidates for __attribute__((noreturn))." +#, no-c-format msgid "Warn about functions which might be candidates for __attribute__((returns_nonnull))." -msgstr "Avertir à propos des fonctions qui seraient candidates pour __attribute__((noreturn))." +msgstr "Avertir à propos des fonctions qui seraient candidates pour __attribute__((returns_nonnull))." #: common.opt:794 #, no-c-format @@ -14394,10 +14321,9 @@ msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics." msgstr "-fdiagnostics-color=[never|always|auto]\tAfficher les diagnostiques en couleur." #: common.opt:1394 -#, fuzzy, no-c-format -#| msgid "Enable verbose output." +#, no-c-format msgid "Enable formatting of JSON output." -msgstr "Activer la sortie en mode bavard." +msgstr "Activer le formatage de la sortie en JSON." #: common.opt:1398 #, no-c-format @@ -14751,31 +14677,29 @@ msgid "Harden conditional branches by checking reversed conditions." msgstr "Renforcer les branchements conditionnels en vérifiant les conditions inversées." #: common.opt:1846 -#, fuzzy, no-c-format -#| msgid "Harden conditionals not used in branches, checking reversed conditions." +#, no-c-format msgid "Harden control flow by recording and checking execution paths." -msgstr "Renforcer les conditions pas utilisées dans les branches, en vérifiant les conditions inversées." +msgstr "Renforcer le flux de contrôle en enregistrant et en vérifiant les chemins d'exécution." #: common.opt:1850 -#, fuzzy, no-c-format -#| msgid "Disable all optional instructions." +#, no-c-format msgid "Disable CFR in leaf functions." -msgstr "Désactiver toutes les instructions optionnelles." +msgstr "Désactiver les fonctions feuille CFR." #: common.opt:1854 #, no-c-format msgid "Check CFR execution paths also before calls followed by returns of their results." -msgstr "" +msgstr "Vérifier les chemins d'exécution CFR aussi avant les appels suivis du retour de leurs valeurs." #: common.opt:1858 #, no-c-format msgid "Check CFR execution paths also when exiting a function through an exception." -msgstr "" +msgstr "Vérifier les chemins d'exécution CFR aussi en sortant d'une fonction au travers d'une exception." #: common.opt:1862 #, no-c-format msgid "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]\tCheck CFR execution paths also before calling noreturn functions." -msgstr "" +msgstr "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]\tVérifier les chemins d'exécution CFR aussi avant les fonctions qui ne retournent pas." #: common.opt:1885 #, no-c-format @@ -15093,10 +15017,9 @@ msgid "-fmessage-length=<number>\tLimit diagnostics to <number> characters per l msgstr "-fmessage-length=<nombre>\tLimiter la longueur des diagnostiques à <nombre> caractères par ligne. 0 supprime le retour automatique à la ligne." #: common.opt:2279 -#, fuzzy, no-c-format -#| msgid "Align the start of functions." +#, no-c-format msgid "Align the start of every function." -msgstr "Aligner le début des fonctions." +msgstr "Aligner le début de chaque fonction." # SMS= Swing Module Scheduler: est-il besoin de le préciser ? #: common.opt:2283 @@ -15733,34 +15656,32 @@ msgstr "Traiter les débordements signés comme étant indéfinis. Inversé par #: common.opt:2931 #, no-c-format msgid "Disable stack scrub entirely, disregarding strub attributes." -msgstr "" +msgstr "Désactiver entièrement la mise à zéro de la pile (stack scrub), ignore les attributs strub." #: common.opt:2935 #, no-c-format msgid "Enable stack scrub as per attributes, with strict call checking." -msgstr "" +msgstr "Activer la mise à zéro de la pile (stack scrub) selon les attributs, avec vérification stricte de l'appel." #: common.opt:2944 #, no-c-format msgid "Restore default strub mode: as per attributes, with relaxed checking." -msgstr "" +msgstr "Rétablir le mode de mise à zéro de la pile (stack scrub) : selon les attributs, avec une vérification relâchée." #: common.opt:2948 -#, fuzzy, no-c-format -#| msgid "Enable hwasan instrumentation of builtin functions." +#, no-c-format msgid "Enable stack scrubbing for all viable functions." -msgstr "Autoriser l'instrumentalisation hwasan des fonctions internes." +msgstr "Autoriser la mise à zéro de la pile (stack scrubbing) pour toutes les fonctions viables." #: common.opt:2952 #, no-c-format msgid "Enable at-calls stack scrubbing for all viable functions." -msgstr "" +msgstr "Activer la mise à zéro de la pile lors des appels pour toutes les fonctions viables." #: common.opt:2956 -#, fuzzy, no-c-format -#| msgid "Enable interrupt stack instructions." +#, no-c-format msgid "Enable internal stack scrubbing for all viable functions." -msgstr "Activer les instructions de la pile d'interruption." +msgstr "Activer la mise à zéro de la pile interne pour toutes les fonctions viables." #: common.opt:2960 #, no-c-format @@ -16219,10 +16140,9 @@ msgid "Assume assembler support for view in (DWARF2+) .loc directives." msgstr "Supposer que l'assembleur supporte les vues dans les directives .loc (DWARF2+)." #: common.opt:3483 -#, fuzzy, no-c-format -#| msgid "Generate debug information in VMS format." +#, no-c-format msgid "Generate debug information in CodeView format." -msgstr "Générer les informations de débogage dans le format VMS." +msgstr "Générer les informations de débogage dans le format Codeview." #: common.opt:3503 #, no-c-format @@ -17673,13 +17593,12 @@ msgstr "Nombre maximum d'appels imbriqués pour rechercher une dépendance de co #: params.opt:1126 #, no-c-format msgid "Maximum number of predicates anded for each predicate ored in the normalized predicate chain." -msgstr "" +msgstr "Nombre maximal de prédicats combinés par « et » pour chaque prédicat combiné par « ou » dans la chaîne de prédicats normalisée." #: params.opt:1131 -#, fuzzy, no-c-format -#| msgid "Maximum number of bases stored in each modref tree." +#, no-c-format msgid "Maximum number of predicates ored in the normalized predicate chain." -msgstr "Le nombre maximum de bases stockées dans chaque arbre modref." +msgstr "Le nombre maximal de prédicats combinés par « ou » dans la chaîne de prédicats normalisée." #: params.opt:1135 #, no-c-format @@ -17767,22 +17686,19 @@ msgid "Enable loop vectorization of floating point inductions." msgstr "Activer la vectorisation sur les instructions en virgule flottante." #: params.opt:1203 -#, fuzzy, no-c-format -#| msgid "Maximum number of basic blocks before EVRP uses a sparse cache." +#, no-c-format msgid "Maximum number of basic blocks before VRP uses a sparse bitmap cache." -msgstr "Le nombre maximum de blocs de base avant que EVRP utilise une cache peu dense." +msgstr "Le nombre maximum de blocs de base avant que VRP utilise une cache peu dense." #: params.opt:1207 -#, fuzzy, no-c-format -#| msgid "Maximum number of outgoing edges in a switch before EVRP will not process it." +#, no-c-format msgid "Maximum number of outgoing edges in a switch before VRP will not process it." -msgstr "Le nombre maximum d'arêtes sortantes dans un switch avant que EVRP ne le traite." +msgstr "Le nombre maximum d'arêtes sortantes dans un switch avant que VRP ne le traite pas." #: params.opt:1211 -#, fuzzy, no-c-format -#| msgid "Maximum number of basic blocks before EVRP uses a sparse cache." +#, no-c-format msgid "Maximum number of basic blocks for VRP to use a basic cache vector." -msgstr "Le nombre maximum de blocs de base avant que EVRP utilise une cache peu dense." +msgstr "Le nombre maximum de blocs de base pour que VRP utilise un vecteur de cache de base." #: cfgrtl.cc:2822 msgid "flow control insn inside a basic block" @@ -18601,10 +18517,9 @@ msgstr "" "%s.\n" #: gcov-tool.cc:595 -#, fuzzy, c-format -#| msgid "Copyright %s 2023 Free Software Foundation, Inc.\n" +#, c-format msgid "Copyright %s 2024 Free Software Foundation, Inc.\n" -msgstr "Copyright %s 2023 Free Software Foundation, Inc.\n" +msgstr "Copyright %s 2024 Free Software Foundation, Inc.\n" #: gcov.cc:927 #, c-format @@ -18776,10 +18691,9 @@ msgid "gcov %s%s\n" msgstr "gcov %s%s\n" #: gcov.cc:969 -#, fuzzy, c-format -#| msgid "collect2 version %s\n" +#, c-format msgid "JSON format version: %s\n" -msgstr "collect2 version %s\n" +msgstr "version de format JSON : %s\n" #: gcov.cc:1367 #, c-format @@ -19612,10 +19526,9 @@ msgid "incompatible floating point / vector register operand for '%%%c'" msgstr "opérande en virgule flottante ou registre vecteur incompatible pour « %%%c »" #: config/aarch64/aarch64.cc:12061 -#, fuzzy, c-format -#| msgid "incompatible register operand for '%%%c'" +#, c-format msgid "incompatible operand for '%%%c'" -msgstr "opérande de registre incompatible pour « %%%c »" +msgstr "opérande incompatible pour « %%%c »" #: config/aarch64/aarch64.cc:12081 #, c-format @@ -19768,22 +19681,19 @@ msgid "invalid operand to %%p code" msgstr "opérande invalide pour le code %%p" #: config/arc/arc.cc:4940 -#, fuzzy, c-format -#| msgid "invalid operand to %%s code" +#, c-format msgid "invalid operand for %%s code" msgstr "opérande invalide pour le code %%s" #: config/arc/arc.cc:4958 -#, fuzzy, c-format -#| msgid "invalid operand to %%N code" +#, c-format msgid "invalid operand for %%N code" msgstr "opérande invalide pour le code %%N" #: config/arc/arc.cc:4971 -#, fuzzy, c-format -#| msgid "invalid operand to %%N code" +#, c-format msgid "invalid operand for %%N or %%S code" -msgstr "opérande invalide pour le code %%N" +msgstr "opérande invalide pour le code %%N ou %%S" #: config/arc/arc.cc:4993 config/m32r/m32r.cc:2080 #, c-format @@ -20350,40 +20260,28 @@ msgid "unknown insn mode" msgstr "mode insn inconnu" #: config/i386/i386.cc:23578 -#, fuzzy -#| msgid "invalid conversion from type %<bfloat16_t%>" msgid "invalid conversion from type %<__bf16%> without option %<-msse2%>" -msgstr "conversion invalide depuis le type %<bfloat16_t%>" +msgstr "conversion invalide depuis le type %<__bf16%> sans option %<-msse2%>" #: config/i386/i386.cc:23581 -#, fuzzy -#| msgid "invalid conversion from type %<bfloat16_t%>" msgid "invalid conversion from type %<_Float16%> without option %<-msse2%>" -msgstr "conversion invalide depuis le type %<bfloat16_t%>" +msgstr "conversion invalide depuis le type %<_Float16%> sans option %<-msse2%>" #: config/i386/i386.cc:23584 -#, fuzzy -#| msgid "invalid conversion to type %<bfloat16_t%>" msgid "invalid conversion to type %<__bf16%> without option %<-msse2%>" -msgstr "conversion invalide vers le type %<bfloat16_t%>" +msgstr "conversion invalide vers le type %<__bf16%> sans option %<-msse2%>" #: config/i386/i386.cc:23587 -#, fuzzy -#| msgid "invalid conversion to type %<bfloat16_t%>" msgid "invalid conversion to type %<_Float16%> without option %<-msse2%>" -msgstr "conversion invalide vers le type %<bfloat16_t%>" +msgstr "conversion invalide vers le type %<_Float16%> sans option %<-msse2%>" #: config/i386/i386.cc:23625 config/i386/i386.cc:23650 -#, fuzzy -#| msgid "operation not permitted on type %<bfloat16_t%>" msgid "operation not permitted on type %<__bf16%> without option %<-msse2%>" -msgstr "opération non permise sur le type %<bfloat16_t%>" +msgstr "opération non permise sur le type %<__bf16%> sans option %<-msse2%>" #: config/i386/i386.cc:23628 config/i386/i386.cc:23654 -#, fuzzy -#| msgid "operation not permitted on type %<bfloat16_t%>" msgid "operation not permitted on type %<_Float16%> without option %<-msse2%>" -msgstr "opération non permise sur le type %<bfloat16_t%>" +msgstr "opération non permise sur le type %<_Float16%> sans option %<-msse2%>" #: config/ia64/ia64.cc:5470 #, c-format @@ -21016,10 +20914,9 @@ msgid "'o' operand is not constant" msgstr "l'opérande « o » n'est pas une constante" #: config/stormy16/stormy16.cc:1980 -#, fuzzy, c-format -#| msgid "'B' operand is not constant" +#, c-format msgid "'h' operand is not SImode register" -msgstr "l'opérande « B » n'est pas une constante" +msgstr "l'opérande « h » n'est pas un registre SImode" #: config/stormy16/stormy16.cc:1988 #, c-format @@ -21477,10 +21374,8 @@ msgid "In lambda function" msgstr "Dans la fonction lambda" #: cp/error.cc:3712 -#, fuzzy -#| msgid "In static member function %qD" msgid "In explicit object member function %qD" -msgstr "Dans la fonction membre statique %qD" +msgstr "Dans la fonction membre objet explicite %qD" #: cp/error.cc:3714 msgid "In member function %qD" @@ -21679,16 +21574,12 @@ msgstr "" "\n" #: fortran/error.cc:1043 -#, fuzzy -#| msgid "new in Fortran 2003" msgid "Prohibited in Fortran 2023:" -msgstr "nouveau en Fortran 2003" +msgstr "Interdit en Fortran 2023 :" #: fortran/error.cc:1045 -#, fuzzy -#| msgid "Fortran 2018:" msgid "Fortran 2023:" -msgstr "Fortran 2018 :" +msgstr "Fortran 2023 :" #: fortran/error.cc:1047 msgid "Fortran 2018 deleted feature:" @@ -21784,10 +21675,8 @@ msgid "new in Fortran 2018" msgstr "nouveau en Fortran 2018" #: fortran/intrinsic.cc:4896 -#, fuzzy -#| msgid "new in Fortran 2003" msgid "new in Fortran 2023" -msgstr "nouveau en Fortran 2003" +msgstr "nouveau en Fortran 2023" #: fortran/intrinsic.cc:4900 msgid "a GNU Fortran extension" @@ -22320,10 +22209,8 @@ msgid "value computed is not used" msgstr "la valeur calculée n'est pas utilisée" #: go/gofrontend/expressions.cc:1986 -#, fuzzy -#| msgid "expected function name" msgid "unexpected reference to package" -msgstr "nom de fonction attendu" +msgstr "référence inattendue vers le paquet" #: go/gofrontend/expressions.cc:3840 go/gofrontend/expressions.cc:3856 msgid "constant refers to itself" @@ -22505,33 +22392,27 @@ msgstr "le nombre de résultats ne correspond pas au nombre de valeurs" #: go/gofrontend/expressions.cc:14671 msgid "invalid 3-index slice of object that is not a slice" -msgstr "" +msgstr "tranche d'objet à 3 index invalide qui n'est pas une tranche" #: go/gofrontend/expressions.cc:14674 msgid "attempt to slice object that is not array, slice, or string" -msgstr "" +msgstr "tentative de découper un objet qui n'est pas un tableau, une tranche ou une chaîne" #: go/gofrontend/expressions.cc:14677 msgid "attempt to index object that is not array, slice, string, or map" -msgstr "" +msgstr "tentative d'indexer un objet qui n'est pas un tableau, une tranche, une chaîne ou une carte" #: go/gofrontend/expressions.cc:14730 -#, fuzzy -#| msgid "expected integer expression" msgid "attempt to index type expression" -msgstr "expression entière attendue" +msgstr "tentative d'indexer une expression de type" #: go/gofrontend/expressions.cc:14757 -#, fuzzy -#| msgid "invalid left hand side of assignment" msgid "invalid 3-index slice of string" -msgstr "membre gauche invalide dans l'affectation" +msgstr "une tranche à 3 index d'une chaîne est invalide" #: go/gofrontend/expressions.cc:14770 -#, fuzzy -#| msgid "invalid use of type" msgid "invalid slice of map" -msgstr "utilisation invalide du type" +msgstr "tranche de carte invalide" #: go/gofrontend/expressions.cc:14779 go/gofrontend/expressions.cc:15970 msgid "incompatible type for map index" @@ -22543,15 +22424,15 @@ msgstr "interface ou pointeur vers une interface attendu" #: go/gofrontend/expressions.cc:18212 msgid "may only omit types within composite literals of slice, array, or map type" -msgstr "" +msgstr "ne peut omettre les types que dans des littéraux composites de type tranche, tableau ou carte" #: go/gofrontend/expressions.cc:18306 go/gofrontend/expressions.cc:18618 msgid "map composite literal must have keys" -msgstr "" +msgstr "un littéral composite de type carte doit avoir des clés" #: go/gofrontend/expressions.cc:18651 msgid "expected struct, slice, array, or map type for composite literal" -msgstr "" +msgstr "type struct, tranche, tableau ou carte attendu pour un littéral composite" #: go/gofrontend/expressions.cc:19266 go/gofrontend/statements.cc:2121 msgid "type assertion only valid for interface types" @@ -22580,20 +22461,16 @@ msgid "cannot fallthrough final case in switch" msgstr "le « case » final du « switch » ne peut pas être ouvert" #: go/gofrontend/statements.cc:1288 -#, fuzzy -#| msgid "cannot use %qs as a call-used register" msgid "cannot use %<_%> as value" -msgstr "ne peut utiliser %qs comme registre utilisé durant l'appel" +msgstr "ne peut utiliser %<_%> comme valeur" #: go/gofrontend/statements.cc:1300 go/gofrontend/statements.cc:2528 msgid "invalid left hand side of assignment" msgstr "membre gauche invalide dans l'affectation" #: go/gofrontend/statements.cc:1309 -#, fuzzy -#| msgid "incompatible types in binary expression" msgid "incompatible type in binary expression" -msgstr "types incompatibles dans l'expression binaire" +msgstr "type incompatible dans l'expression binaire" #: go/gofrontend/statements.cc:1555 msgid "use of untyped nil" @@ -22604,10 +22481,8 @@ msgid "expected map index on right hand side" msgstr "un index sur un tableau associatif est attendu dans le membre de droite" #: go/gofrontend/statements.cc:2534 -#, fuzzy -#| msgid "no pre-increment operator for type" msgid "increment or decrement of non-numeric type" -msgstr "pas d'opérateur de pré-incrémentation pour le type" +msgstr "incrémentation ou décrémentation d'un type non numérique" #: go/gofrontend/statements.cc:3449 go/gofrontend/statements.cc:3464 msgid "not enough arguments to return" @@ -23088,10 +22963,9 @@ msgid "Unrecognized option: %qs" msgstr "Option non reconnue : %qs" #: rust/lang.opt:90 -#, fuzzy, gcc-internal-format -#| msgid "unknown lam type %qs" +#, gcc-internal-format msgid "unknown crate type: '%qs'" -msgstr "type lam %qs inconnu" +msgstr "type de cageot inconnu : « %qs »" #: rust/lang.opt:118 #, gcc-internal-format @@ -23140,16 +23014,14 @@ msgid "missing makefile target after %qs" msgstr "cible manquante dans le makefile après %qs" #: c-family/c.opt:260 -#, fuzzy, gcc-internal-format -#| msgid "missing path after %qs" +#, gcc-internal-format msgid "missing format after %qs" -msgstr "cible manquante après %qs" +msgstr "format manquant après %qs" #: c-family/c.opt:264 -#, fuzzy, gcc-internal-format -#| msgid "missing path after %qs" +#, gcc-internal-format msgid "missing output path after %qs" -msgstr "cible manquante après %qs" +msgstr "chemin de sortie manquant après %qs" #: c-family/c.opt:311 #, gcc-internal-format @@ -23227,10 +23099,9 @@ msgid "unknown pointer size model %qs" msgstr "modèle de taille de pointeur %qs inconnu" #: config/aarch64/aarch64.opt:379 -#, fuzzy, gcc-internal-format -#| msgid "unknown TLS model %qs" +#, gcc-internal-format msgid "unknown LDP/STP policy %qs" -msgstr "modèle TLS %qs inconnu" +msgstr "politique LDP/STP %qs inconnue" #: config/i386/i386.opt:340 #, gcc-internal-format @@ -23346,10 +23217,9 @@ msgid "unknown floating point contraction style %qs" msgstr "style de contraction en virgule flottante %qs inconnu" #: common.opt:1865 -#, fuzzy, gcc-internal-format -#| msgid "unknown Live-Patching Level %qs" +#, gcc-internal-format msgid "unknown hardcfr noreturn checking level %qs" -msgstr "Niveau de correction à chaud %qs inconnu" +msgstr "niveau de vérification hardcfr noreturn %qs inconnu" #: common.opt:1900 #, gcc-internal-format @@ -23422,10 +23292,9 @@ msgid "unknown TLS model %qs" msgstr "modèle TLS %qs inconnu" #: common.opt:3020 -#, fuzzy, gcc-internal-format -#| msgid "unknown rust mangling option %qs" +#, gcc-internal-format msgid "unknown trampoline implementation %qs" -msgstr "option de décoration rust %qs inconnue" +msgstr "implémentation de trampoline %qs inconnue" #: common.opt:3342 #, gcc-internal-format @@ -24917,10 +24786,9 @@ msgid "%<alias%> attribute ignored because function is defined" msgstr "l'attribut %<alias%> est ignoré car la fonction est définie" #: cgraphunit.cc:921 -#, fuzzy, gcc-internal-format -#| msgid "%<always_inline%> function might not be inlinable" +#, gcc-internal-format msgid "%<always_inline%> function might not be inlinable unless also declared %<inline%>" -msgstr "il pourrait ne pas être possible de mettre en ligne la fonction %<always_inline%>" +msgstr "la fonction %<always_inline%> pourrait ne pas être mise en ligne à moins d'être aussi déclarée %<inline%>" #: cgraphunit.cc:947 #, gcc-internal-format @@ -25177,10 +25045,9 @@ msgid "pointer value used where a floating-point was expected" msgstr "valeur pointeur utilisée là où un nombre en virgule flottante était attendu" #: convert.cc:338 -#, fuzzy, gcc-internal-format -#| msgid "pointer value used where a floating-point was expected" +#, gcc-internal-format msgid "vector value used where a floating-point was expected" -msgstr "valeur pointeur utilisée là où un nombre en virgule flottante était attendu" +msgstr "valeur vectorielle utilisée là où un nombre en virgule flottante était attendu" #: convert.cc:342 #, gcc-internal-format @@ -25659,16 +25526,12 @@ msgid "cannot read spec file %qs: %m" msgstr "ne peut lire le fichier de spec %qs: %m" #: gcc.cc:2412 gcc.cc:2432 -#, fuzzy -#| msgid "specs %%include syntax malformed after %ld characters" msgid "specs %%include syntax malformed after %td characters" -msgstr "la syntaxe des specs %%include est mal formée après %ld caractères" +msgstr "la syntaxe des specs %%include est mal formée après %td caractères" #: gcc.cc:2458 gcc.cc:2467 gcc.cc:2477 gcc.cc:2487 -#, fuzzy -#| msgid "specs %%rename syntax malformed after %ld characters" msgid "specs %%rename syntax malformed after %td characters" -msgstr "la syntaxe des specs %%rename est mal formée après %ld caractères" +msgstr "la syntaxe des specs %%rename est mal formée après %td caractères" # le message signifie bien que la spec à renommer n'a pas été trouvée et non qu'on n'a pas trouvé qu'elle avait été renommée #: gcc.cc:2497 @@ -25682,16 +25545,12 @@ msgid "%s: attempt to rename spec %qs to already defined spec %qs" msgstr "%s: tentative de renommer la spécification %qs en une spécification %qs déjà définie" #: gcc.cc:2527 -#, fuzzy -#| msgid "specs unknown %% command after %ld characters" msgid "specs unknown %% command after %td characters" -msgstr "commande specs %% inconnue après %ld caractères" +msgstr "commande specs %% inconnue après %td caractères" #: gcc.cc:2539 gcc.cc:2553 -#, fuzzy -#| msgid "specs file malformed after %ld characters" msgid "specs file malformed after %td characters" -msgstr "fichier de specs mal composé après %ld caractères" +msgstr "fichier de specs mal composé après %td caractères" #: gcc.cc:2608 #, gcc-internal-format @@ -27802,10 +27661,9 @@ msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" msgstr "vérification gimple: attendait %s(%s), a trouvé %s(%s) dans %s, à %s:%d" #: gimplify.cc:1399 -#, fuzzy, gcc-internal-format -#| msgid "%<allocate%> clause must specify an allocator here" +#, gcc-internal-format msgid "%<allocate%> directive for %qD inside a target region must specify an %<allocator%> clause" -msgstr "la clause %<allocate%> doit spécifier un allocateur ici" +msgstr "la directive %<allocate%> pour %qD à l'intérieur d'une région cible doit spécifier une clause %<allocator%>" #: gimplify.cc:2271 #, gcc-internal-format @@ -27908,16 +27766,14 @@ msgid "%qE not specified in enclosing OpenACC %qs construct" msgstr "%qE non spécifié dans la construction OpenACC %qs englobante" #: gimplify.cc:8056 -#, fuzzy, gcc-internal-format -#| msgid "enclosing OpenACC %qs construct" +#, gcc-internal-format msgid "enclosing OpenACC %qs construct and" -msgstr "construction OpenACC %qs englobante" +msgstr "construction OpenACC %qs englobante et" #: gimplify.cc:8059 -#, fuzzy, gcc-internal-format -#| msgid "enclosing OpenACC %qs construct" +#, gcc-internal-format msgid "enclosing OpenACC %qs construct with %qs clause" -msgstr "construction OpenACC %qs englobante" +msgstr "construction OpenACC %qs englobante avec la clause %qs" #: gimplify.cc:8129 #, gcc-internal-format @@ -28658,109 +28514,104 @@ msgid "function %qs, parameter %u, is used but does not have any certain IPA-SRA msgstr "fonction %qs, paramètre %u, est utilisée mais n'a pas certains accès IPA-SRA" #: ipa-strub.cc:620 -#, fuzzy, gcc-internal-format -#| msgid "pass %s does not support cloning" +#, gcc-internal-format msgid "at-calls %<strub%> does not support call to %qD" -msgstr "l'étape %s ne supporte pas le clonage" +msgstr "le %<strub%> at-calls ne supporte pas l'appel à %qD" #: ipa-strub.cc:654 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> on the target system" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> sur le système cible" #: ipa-strub.cc:658 -#, fuzzy, gcc-internal-format -#| msgid "unsupported constant address:" +#, gcc-internal-format msgid "unsupported %<strub%> call on the target system" -msgstr "adresse constante non supportée :" +msgstr "appel %<strub%> non supporté sur le système cible" #: ipa-strub.cc:684 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because %<-fsplit-stack%> is enabled" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> car %<-fsplit-stack%> est activé" #: ipa-strub.cc:697 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because of attribute %<noipa%>" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> à cause de l'attribut %<noipa%>" #: ipa-strub.cc:712 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because of attribute %<simd%>" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> à cause de l'attribut %<simd%>" #: ipa-strub.cc:846 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because of attribute %<noclone%>" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> interne à cause de l'attribut %<noclone%>" #: ipa-strub.cc:870 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because it calls %qD" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> interne car il appelle %qD" #: ipa-strub.cc:884 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because it contains a non-local goto target" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> interne car il contient un goto vers une cible non locale" #: ipa-strub.cc:897 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because the address of a local label escapes" -msgstr "" +msgstr "%qD n'est pas éligible pour %<strub%> interne car l'adresse d'une étiquette locale échape" #: ipa-strub.cc:936 -#, fuzzy, gcc-internal-format -#| msgid "%s does not support force_nonfallthru" +#, gcc-internal-format msgid "internal %<strub%> does not support forced labels" -msgstr "%s ne supporte pas force_nonfallthru" +msgstr "%<strub%> interne ne supporte pas les étiquettes forcées" #: ipa-strub.cc:950 -#, fuzzy, gcc-internal-format -#| msgid "too many arguments for format" +#, gcc-internal-format msgid "%qD has too many arguments for internal %<strub%>" -msgstr "trop d'arguments pour le format" +msgstr "%qD a trop d'arguments pour %<strub%> interne" #: ipa-strub.cc:1227 #, gcc-internal-format msgid "%qD requires %<strub%>, but no viable %<strub%> mode was found" -msgstr "" +msgstr "%qD requiert %<strub%> mais aucun mode %<strub%> viable a été trouvé" #: ipa-strub.cc:1323 #, gcc-internal-format msgid "%<strub%> mode %qE selected for %qD, when %qE was requested" -msgstr "" +msgstr "le mode %<strub%> %qE est sélectionné pour %qD alors que %qE a été demandé" #: ipa-strub.cc:1332 #, gcc-internal-format msgid "the incompatible selection was determined by ultimate alias target %qD" -msgstr "" +msgstr "la sélection incompatible a été déterminée par la cible d'alias ultime %qD" #: ipa-strub.cc:1679 #, gcc-internal-format msgid "indirect non-%<strub%> call in %<strub%> context %qD" -msgstr "" +msgstr "appel non %<strub%> indirect dans %<strub%> de contexte %qD" #: ipa-strub.cc:1698 #, gcc-internal-format msgid "calling %<always_inline%> %<strub%> %qD in non-%<strub%> context %qD" -msgstr "" +msgstr "appel de %<always_inline%> %<strub%> %qD dans le contexte non %<strub%> %qD" #: ipa-strub.cc:1708 #, gcc-internal-format msgid "calling non-%<strub%> %qD in %<strub%> context %qD" -msgstr "" +msgstr "appel non %<strub%> %qD dans le contexte %<strub%> %qD" #: ipa-strub.cc:1712 #, gcc-internal-format msgid "calling %qD using non-%<strub%> type %qT in %<strub%> context %qD" -msgstr "" +msgstr "appel de %qD en utilisant le non %<strub%> de type %qT sans le contexte %<strub%> %qD" #: ipa-strub.cc:2834 -#, fuzzy, gcc-internal-format -#| msgid "failed to load pendings for %<%E%s%E%>" +#, gcc-internal-format msgid "failed to split %qD for %<strub%>" -msgstr "échec lors du chargement des pendings pour %<%E%s%E%>" +msgstr "échec en scindant %qD pour %<strub%>" #: ira.cc:2441 ira.cc:2463 #, gcc-internal-format @@ -28803,10 +28654,9 @@ msgid "maximum number of generated reload insns per insn achieved (%d)" msgstr "le nombre maximum d'insns de rechargement générées par insn est atteint (%d)" #: lra.cc:546 -#, fuzzy, gcc-internal-format -#| msgid "%<asm%> operand has impossible constraints" +#, gcc-internal-format msgid "%<asm%> operand has impossible constraints or there are not enough registers" -msgstr "l'opérande %<asm%> a des contraintes impossibles" +msgstr "l'opérande %<asm%> a des contraintes impossibles ou il n'y a pas assez de registres" #: lto-cgraph.cc:1171 #, gcc-internal-format @@ -29157,10 +29007,9 @@ msgid "invalid OpenMP non-rectangular loop step; %<(%E - %E) * %E%> is not a mul msgstr "pas de boucle OpenMP non rectangulaire invalide ; %<(%E - %E) * %E%> n'est pas un multiple de la boucle %d avec le pas %qE" #: omp-general.cc:1283 -#, fuzzy, gcc-internal-format -#| msgid "array size expression is not supported yet" +#, gcc-internal-format msgid "%<target_device%> selector set is not supported yet" -msgstr "l'expression de la taille du tableau n'est pas encore supportée" +msgstr "l'ensemble du sélecteur %<target_device%> n'est pas encore supportée" #: omp-general.cc:1288 #, gcc-internal-format @@ -29484,10 +29333,9 @@ msgid "OpenMP runtime API call %qD in a region with %<device(ancestor)%> clause" msgstr "appel d'API de la routine OpenMP %qD dans une région avec la clause %<device(ancestor)%>" #: omp-low.cc:9791 -#, fuzzy, gcc-internal-format -#| msgid "ignoring sink clause with offset that is not a multiple of the loop step" +#, gcc-internal-format msgid "ignoring %<sink%> clause with offset that is not a multiple of the loop step" -msgstr "la clause « sink » est ignorée car elle a un offset qui n'est pas un multiple du pas de la boucle" +msgstr "la clause %<sink%> est ignorée car elle a un offset qui n'est pas un multiple du pas de la boucle" #: omp-low.cc:9814 #, gcc-internal-format @@ -31001,16 +30849,14 @@ msgid "global destructors not supported on this target" msgstr "les destructeurs globaux ne sont pas supportés sur cette cible" #: targhooks.cc:1802 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target%> attribute is not supported on this machine" -msgstr "l'attribut cible n'est pas supporté sur cette machine" +msgstr "l'attribut %<target%> n'est pas supporté sur cette machine" #: targhooks.cc:1814 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target_version%> attribute is not supported on this machine" -msgstr "l'attribut cible n'est pas supporté sur cette machine" +msgstr "l'attribut %<target_version%> n'est pas supporté sur cette machine" #: targhooks.cc:1828 #, gcc-internal-format @@ -31158,10 +31004,9 @@ msgid "%<-fassociative-math%> disabled; other options take precedence" msgstr "%<-fassociative-math%> désactivé; d'autres options prennent le pas" #: toplev.cc:1576 -#, fuzzy, gcc-internal-format -#| msgid "%<-fdata-sections%> not supported for this target" +#, gcc-internal-format msgid "%<-fhardened%> not supported for this target" -msgstr "%<-fdata-sections%> n'est pas supporté pour cette cible" +msgstr "%<-fhardened%> n'est pas supporté pour cette cible" #: toplev.cc:1585 #, gcc-internal-format @@ -31171,7 +31016,7 @@ msgstr "%<-fstack-clash-protection%> n'est pas supporté sur des cibles où la p #: toplev.cc:1598 #, gcc-internal-format msgid "%<-fstack-clash-protection%> is not enabled by %<-fhardened%> because %<-fstack-check%> was specified on the command line" -msgstr "" +msgstr "%<-fstack-clash-protection%> n'est pas activé par %<-fhardened%> car %<-fstack-check%> a été spécifié sur la ligne de commande" #: toplev.cc:1608 #, gcc-internal-format @@ -31429,10 +31274,9 @@ msgid "%qs in gimple IL" msgstr "%qs dans IL gimple" #: tree-cfg.cc:3357 -#, fuzzy, gcc-internal-format -#| msgid "used struct type value where scalar is required" +#, gcc-internal-format msgid "%qs as base where non-register is required" -msgstr "valeur de type « struct » utilisée là où un scalaire est requis" +msgstr "%qs en tant que base où un non-registre est requis" #: tree-cfg.cc:3372 #, gcc-internal-format @@ -31706,10 +31550,9 @@ msgid "invalid operand in %qs" msgstr "opérande invalide dans %qs" #: tree-cfg.cc:4676 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument in option %qs" +#, gcc-internal-format msgid "invalid %qs size argument in load" -msgstr "argument invalide pour l'option %qs" +msgstr "argument de taille %qs invalide dans le chargement" #: tree-cfg.cc:4695 tree-cfg.cc:4721 #, gcc-internal-format @@ -31927,33 +31770,29 @@ msgid "fallthru to exit from bb %d" msgstr "fallthru pour sortir du bloc de base %d" #: tree-cfg.cc:5707 -#, fuzzy, gcc-internal-format -#| msgid "extra brace group at end of initializer" +#, gcc-internal-format msgid "entry block count not initialized" -msgstr "groupe d'accolades superflu à la fin de l'initialisation" +msgstr "décompte du bloc d'entrée pas initialisé" #: tree-cfg.cc:5713 -#, fuzzy, gcc-internal-format -#| msgid "extra brace group at end of initializer" +#, gcc-internal-format msgid "exit block count not initialized" -msgstr "groupe d'accolades superflu à la fin de l'initialisation" +msgstr "décompte du bloc de sortie par initialisé" #: tree-cfg.cc:5720 #, gcc-internal-format msgid "probability of edge from entry block not initialized" -msgstr "" +msgstr "la probabilité de l'arête depuis le bloc d'entrée n'est pas initialisée" #: tree-cfg.cc:5735 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%qE is not initialized" +#, gcc-internal-format, gfc-internal-format msgid "count of bb %d not initialized" -msgstr "%qE n'est pas initialisé" +msgstr "le compte de bb %d n'est pas initialisé" #: tree-cfg.cc:5741 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Uninitialized probability of edge %i->%i" +#, gcc-internal-format, gfc-internal-format msgid "probability of edge %d->%d not initialized" -msgstr "Probabilité non initialisée de l'arête %i->%i" +msgstr "la probabilité de l'arête %d->%d n'est pas initialisée" #: tree-cfg.cc:5761 #, gcc-internal-format @@ -33264,10 +33103,9 @@ msgid "initializer for floating value is not a floating constant" msgstr "l'initialiseur pour une valeur en virgule flottante n'est pas une constante en virgule flottante" #: varasm.cc:5342 -#, fuzzy, gcc-internal-format -#| msgid "initializer for floating value is not a floating constant" +#, gcc-internal-format msgid "initializer for %<_BitInt(%d)%> value is not an integer constant" -msgstr "l'initialiseur pour une valeur en virgule flottante n'est pas une constante en virgule flottante" +msgstr "l'initialiseur pour la valeur %<_BitInt(%d)%> n'est pas une constante entière" #: varasm.cc:5725 #, gcc-internal-format @@ -33463,28 +33301,24 @@ msgid "%qE attribute with unsupported boolean precision" msgstr "attribut %qE avec une précision booléenne non supportée" #: c-family/c-attribs.cc:1059 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute only supported on boolean types" +#, gcc-internal-format msgid "%qE attribute only supported in C" -msgstr "l'attribut %qE est uniquement supporté sur des types booléens" +msgstr "l'attribut %qE est uniquement supporté en C" #: c-family/c-attribs.cc:1066 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute only supported on boolean types" +#, gcc-internal-format msgid "%qE attribute only supported on integral types" -msgstr "l'attribut %qE est uniquement supporté sur des types booléens" +msgstr "l'attribut %qE est uniquement supporté sur des types entiers" #: c-family/c-attribs.cc:1087 c-family/c-attribs.cc:1103 -#, fuzzy, gcc-internal-format -#| msgid "overflow in conversion from %qT to %qT changes value from %qE to %qE" +#, gcc-internal-format msgid "overflows in conversion from %qT to %qT changes value from %qE to %qE" -msgstr "le débordement dans la conversion de %qT vers %qT change la valeur de %qE en %qE" +msgstr "les débordements dans la conversion de %qT vers %qT changent la valeur de %qE en %qE" #: c-family/c-attribs.cc:1112 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute argument value %qE refers to parameter type %qT" +#, gcc-internal-format msgid "%qE attribute requires different values for %<false%> and %<true%> for type %qT" -msgstr "l'argument de l'attribut %qE avec la valeur %qE fait référence au type de paramètre %qT" +msgstr "l'attribut %qE requiert des valeurs différentes pour %<false%> et %<true%> pour le type %qT" #: c-family/c-attribs.cc:1152 #, gcc-internal-format @@ -33503,29 +33337,24 @@ msgid "%qE argument not a string" msgstr "l'argument %qE n'est pas une chaîne de caractères" #: c-family/c-attribs.cc:1555 ada/gcc-interface/utils.cc:6793 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute ignored on objects of type %qT" +#, gcc-internal-format msgid "%qE attribute ignored because of argument %qE" -msgstr "l'attribut %qE est ignoré pour l'objet de type %qT" +msgstr "l'attribut %qE est ignoré pour l'argument %qE" -# %qs est remplacé par un texte non traduit: « hot », « cold », « always_inline ». #: c-family/c-attribs.cc:1576 ada/gcc-interface/utils.cc:6814 -#, fuzzy, gcc-internal-format -#| msgid "ignoring attribute %qE because it conflicts with attribute %qs" +#, gcc-internal-format msgid "ignoring attribute %qE because of excess arguments starting at %qE" -msgstr "l'attribut %qE est ignoré car il est en conflit avec l'attribut %qs" +msgstr "l'attribut %qE est ignoré à cause des arguments surnuméraires en commençant par %qE" #: c-family/c-attribs.cc:1590 ada/gcc-interface/utils.cc:6828 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute does not apply to types" +#, gcc-internal-format msgid "attribute %qE does not apply to elements of non-scalar type %qT" -msgstr "l'attribut %qE ne s'applique pas aux types" +msgstr "l'attribut %qE ne s'applique pas aux éléments de type non scalaire %qT" #: c-family/c-attribs.cc:1595 ada/gcc-interface/utils.cc:6833 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute does not apply to types" +#, gcc-internal-format msgid "attribute %qE does not apply to fields of aggregate type %qT" -msgstr "l'attribut %qE ne s'applique pas aux types" +msgstr "l'attribut %qE ne s'applique pas aux champs de type agrégé %qT" #: c-family/c-attribs.cc:1661 #, gcc-internal-format @@ -34757,16 +34586,14 @@ msgid "argument %u in call to function %qE has pointer to %qs type (%qT)" msgstr "l'argument %u dans l'appel à la fonction %qE est un pointeur vers le type %qs (%qT)" #: c-family/c-common.cc:6535 c-family/c-common.cc:6620 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument %u in call to function %qE has enumerated type" -msgstr "l'argument 3 dans l'appel à la fonction %qE est un type énuméré" +msgstr "l'argument %u dans l'appel à la fonction %qE est un type énuméré" #: c-family/c-common.cc:6541 c-family/c-common.cc:6626 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has boolean type" +#, gcc-internal-format msgid "argument %u in call to function %qE has boolean type" -msgstr "l'argument 3 dans l'appel à la fonction %qE est un type booléen" +msgstr "l'argument %u dans l'appel à la fonction %qE est un type booléen" #: c-family/c-common.cc:6554 #, gcc-internal-format @@ -34779,22 +34606,19 @@ msgid "argument %u in call to function %qE points to incomplete type" msgstr "l'argument %u dans l'appel à la fonction %qE pointe vers un type incomplet" #: c-family/c-common.cc:6604 -#, fuzzy, gcc-internal-format -#| msgid "argument %u in call to function %qE does not have pointer type" +#, gcc-internal-format msgid "argument %u in call to function %qE does not have %<int%> type" -msgstr "l'argument %u dans l'appel à la fonction %qE n'a pas un type pointeur" +msgstr "l'argument %u dans l'appel à la fonction %qE n'a pas un type %<int%>" #: c-family/c-common.cc:6635 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument 1 in call to function %qE has unsigned type" -msgstr "l'argument 3 dans l'appel à la fonction %qE est un type énuméré" +msgstr "l'argument 1 dans l'appel à la fonction %qE est un type non signé" #: c-family/c-common.cc:6642 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument 1 in call to function %qE has signed type" -msgstr "l'argument 3 dans l'appel à la fonction %qE est un type énuméré" +msgstr "l'argument 1 dans l'appel à la fonction %qE est un type signé" #: c-family/c-common.cc:6905 rust/backend/rust-tree.cc:3601 #, gcc-internal-format @@ -35595,22 +35419,19 @@ msgid "stray %<\\%o%> in program" msgstr "%<\\%o%> égaré dans le programme" #: c-family/c-lex.cc:1014 -#, fuzzy, gcc-internal-format -#| msgid "integer constant is too large for %<unsigned long%> type" +#, gcc-internal-format msgid "integer constant is too large for %<unsigned _BitInt(%d)%> type" -msgstr "la constante entière est trop grande pour le type %<unsigned long%>" +msgstr "la constante entière est trop grande pour le type %<unsigned _BitInt(%d)%>" #: c-family/c-lex.cc:1017 -#, fuzzy, gcc-internal-format -#| msgid "integer constant is too large for %<unsigned long%> type" +#, gcc-internal-format msgid "integer constant is too large for %<_BitInt(%d)%> type" -msgstr "la constante entière est trop grande pour le type %<unsigned long%>" +msgstr "la constante entière est trop grande pour le type %<_BitInt(%d)%>" #: c-family/c-lex.cc:1025 c/c-decl.cc:12651 -#, fuzzy, gcc-internal-format -#| msgid "%<__int%d%> is not supported on this target" +#, gcc-internal-format msgid "%<_BitInt(%d)%> is not supported on this target" -msgstr "%<__int%d%> n'est pas supporté sur cette cible" +msgstr "%<_BitInt(%d)%> n'est pas supporté sur cette cible" #: c-family/c-lex.cc:1077 #, gcc-internal-format @@ -35648,10 +35469,9 @@ msgid "non-standard suffix on floating constant" msgstr "suffixe non standard sur une constante en virgule flottante" #: c-family/c-lex.cc:1223 c-family/c-lex.cc:1227 c-family/c-lex.cc:1232 -#, fuzzy, gcc-internal-format -#| msgid "non-standard suffix on floating constant" +#, gcc-internal-format msgid "non-standard suffix on floating constant before C23" -msgstr "suffixe non standard sur une constante en virgule flottante" +msgstr "suffixe non standard sur une constante en virgule flottante avant C23" #: c-family/c-lex.cc:1239 #, gcc-internal-format @@ -36330,16 +36150,14 @@ msgid "%<#pragma GCC optimize%> string is badly formed" msgstr "la chaine de %<#pragma GCC optimize%> est mal formée" #: c-family/c-pragma.cc:1211 -#, fuzzy, gcc-internal-format -#| msgid "junk at end of %<#pragma push_options%>" +#, gcc-internal-format msgid "junk at end of %<#pragma GCC push_options%>" -msgstr "rebut à la fin de %<#pragma push_options%>" +msgstr "rebut à la fin de %<#pragma GCC push_options%>" #: c-family/c-pragma.cc:1248 -#, fuzzy, gcc-internal-format -#| msgid "junk at end of %<#pragma pop_options%>" +#, gcc-internal-format msgid "junk at end of %<#pragma GCC pop_options%>" -msgstr "rebut à la fin de %<#pragma pop_options%>" +msgstr "rebut à la fin de %<#pragma GCC pop_options%>" #: c-family/c-pragma.cc:1255 #, gcc-internal-format @@ -37132,21 +36950,19 @@ msgid "%<memset%> used with length equal to number of elements without multiplic msgstr "%<memset%> utilisé avec une longueur égale au nombre d'éléments sans être multiplié par la taille des éléments" #: c-family/c-warn.cc:2291 -#, fuzzy, gcc-internal-format -#| msgid "interrupt service routine can only have a pointer argument and an optional integer argument" +#, gcc-internal-format msgid "%qD sizes specified with %<sizeof%> in the earlier argument and not in the later argument" -msgstr "la routine de service d'interruption ne peut avoir qu'un argument de type pointeur et un argument entier optionnel" +msgstr "les tailles %qD sont spécifiées avec %<sizeof%> dans le premier argument et non dans le second" #: c-family/c-warn.cc:2293 #, gcc-internal-format msgid "earlier argument should specify number of elements, later size of each element" -msgstr "" +msgstr "le premier argument spécifie le nombre d'éléments tandis que le second donne la taille de chaque élément" #: c-family/c-warn.cc:2332 -#, fuzzy, gcc-internal-format -#| msgid "floating point overflow in expression %qE of type %qT results in %qE" +#, gcc-internal-format msgid "allocation of insufficient size %qE for type %qT with size %qE" -msgstr "débordement d'un nombre en virgule flottante dans l'expression %qE de type %qT résulte en %qE" +msgstr "allocation d'une taille insuffisante %qE pour le type %qT avec la taille %qE" #: c-family/c-warn.cc:2409 #, gcc-internal-format @@ -37426,10 +37242,9 @@ msgid "too many input files" msgstr "trop de fichiers d'entrée" #: c-family/known-headers.cc:322 -#, fuzzy, gcc-internal-format -#| msgid "%qs is defined in header %qs; did you forget to %<#include %s%>?" +#, gcc-internal-format msgid "%qs is defined in header %qs; this is probably fixable by adding %<#include %s%>" -msgstr "%qs est défini dans l'en-tête %qs ; avez-vous oublié %<#include %s%> ?" +msgstr "%qs est défini dans l'en-tête %qs ; ceci peut probablement être corrigé en ajoutant %<#include %s%>" #: common/config/aarch64/aarch64-common.cc:415 config/aarch64/aarch64.cc:18466 #, gcc-internal-format @@ -37626,27 +37441,24 @@ msgid "%<-march=%s%>: extension %qs appear more than one time" msgstr "%<-march=%s%>: l'extension %qs apparaît plus d'une fois" #: common/config/riscv/riscv-common.cc:676 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs is unsupported standard single letter extension" -msgstr "%<-march=%s%>: l'extension %qs apparaît plus d'une fois" +msgstr "%<-march=%s%>: l'extension %qs est une extension standard a une seule lettre non supportée" #: common/config/riscv/riscv-common.cc:684 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 'z' but is unsupported standard extension" -msgstr "%<-march=%s%>: l'extension %qs apparaît plus d'une fois" +msgstr "%<-march=%s%>: l'extension %qs commence par « z » mais c'est une extension standard non supportée" #: common/config/riscv/riscv-common.cc:692 #, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 's' but is unsupported standard supervisor extension" -msgstr "" +msgstr "%<-march=%s%>: l'extension %qs commence par « s » mais c'est une extension superviseur standard non supportée" #: common/config/riscv/riscv-common.cc:700 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 'x' but is unsupported non-standard extension" -msgstr "%<-march=%s%>: l'extension %qs apparaît plus d'une fois" +msgstr "%<-march=%s%>: l'extension %qs commence par « x » mais c'est une extension non standard non supportée" #: common/config/riscv/riscv-common.cc:947 #, gcc-internal-format @@ -37679,16 +37491,14 @@ msgid "%<-march=%s%>: first ISA subset must be %<e%>, %<i%> or %<g%>" msgstr "%<-march=%s%>: le premier sous-ensemble ISA doit être %<e%>, %<i%> ou %<g%>" #: common/config/riscv/riscv-common.cc:1089 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: expect number after %<%dp%>" +#, gcc-internal-format msgid "%<-march=%s%>: Not single-letter extension. %<%c%>" -msgstr "%<-march=%s%>: nombre attendu après %<%dp%>" +msgstr "%<-march=%s%>: pas une extension a une seule lettre. %<%c%>" #: common/config/riscv/riscv-common.cc:1220 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: zcf extension supports in rv32 only" -msgstr "%<-march=%s%>: l'extension %qs apparaît plus d'une fois" +msgstr "%<-march=%s%>: l'extension zcf est uniquement supportée dans rv32" #: common/config/riscv/riscv-common.cc:1225 #, gcc-internal-format @@ -37696,28 +37506,24 @@ msgid "%<-march=%s%>: z*inx conflicts with floating-point extensions" msgstr "%<-march=%s%>: conflits z*inx avec les extensions en virgule flottante" #: common/config/riscv/riscv-common.cc:1231 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: h extension requires i extension" -msgstr "%<-march=%s%>: l'extension %qs apparaît plus d'une fois" +msgstr "%<-march=%s%>: l'extension l'extension requiert l'extension i" #: common/config/riscv/riscv-common.cc:1236 -#, fuzzy, gcc-internal-format -#| msgid "%<-mcpu=%s%> conflicts with %<-march=%s%>" +#, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmt" -msgstr "%<-mcpu=%s%> est en conflit avec %<-march=%s%>" +msgstr "%<-march=%s%> zcd est en conflit avec zcmt" #: common/config/riscv/riscv-common.cc:1238 -#, fuzzy, gcc-internal-format -#| msgid "%<-mcpu=%s%> conflicts with %<-march=%s%>" +#, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmp" -msgstr "%<-mcpu=%s%> est en conflit avec %<-march=%s%>" +msgstr "%<-march=%s%> zcd est en conflit avec zcmp" #: common/config/riscv/riscv-common.cc:1247 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: z*inx conflicts with floating-point extensions" +#, gcc-internal-format msgid "%<-march=%s%>: xtheadvector conflicts with vector extension or its sub-extensions" -msgstr "%<-march=%s%>: conflits z*inx avec les extensions en virgule flottante" +msgstr "%<-march=%s%>: xtheadvector est en conflit avec l'extension vectorielle ou sa sous-extension" #: common/config/riscv/riscv-common.cc:1344 #, gcc-internal-format @@ -37730,10 +37536,9 @@ msgid "%<-march=%s%>: %s must separate with %<_%>" msgstr "%<-march=%s%> %s doit être séparé par %<_%>" #: common/config/riscv/riscv-common.cc:1419 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: name of %s must be more than 1 letter" +#, gcc-internal-format msgid "%<-march=%s%>: i, e or g must be the first extension" -msgstr "%<-march=%s%>: le nom de %s doit avoir plus d'une lettre" +msgstr "%<-march=%s%>: i, e ou g doit être la première extension" #: common/config/riscv/riscv-common.cc:1758 #, gcc-internal-format @@ -38062,10 +37867,9 @@ msgid "PIC is only supported for RTPs" msgstr "PIC est uniquement supporté pour RTP" #: config/aarch64/aarch64-builtins.cc:2122 -#, fuzzy, gcc-internal-format -#| msgid "argument to %qs must be a 2-bit unsigned literal" +#, gcc-internal-format msgid "first argument to %qD must be a string literal" -msgstr "l'argument de %qs doit être un littéral non signé de 2 bits" +msgstr "le premier argument de %qD doit être une chaîne littérale" #: config/aarch64/aarch64-builtins.cc:2253 #: config/aarch64/aarch64-builtins.cc:2487 config/arm/arm-builtins.cc:3146 @@ -38091,31 +37895,27 @@ msgstr "l'argument doit être une constante immédiate de 16 bits" #: config/aarch64/aarch64-builtins.cc:2700 #, gcc-internal-format msgid "128-bit system register support requires the %<d128%> extension" -msgstr "" +msgstr "le support d'un registre système 128 bits requiert l'extension %<d128%>" #: config/aarch64/aarch64-builtins.cc:2715 -#, fuzzy, gcc-internal-format -#| msgid "invalid register name for %q+D" +#, gcc-internal-format msgid "invalid system register name provided" -msgstr "nom de registre invalide pour %q+D" +msgstr "nom de registre système invalide" #: config/aarch64/aarch64-builtins.cc:2729 -#, fuzzy, gcc-internal-format -#| msgid "invalid register name for %q+D" +#, gcc-internal-format msgid "invalid system register name %qs" -msgstr "nom de registre invalide pour %q+D" +msgstr "nom de registre système invalide pour %qs" #: config/aarch64/aarch64-builtins.cc:2809 -#, fuzzy, gcc-internal-format -#| msgid "for statement expected" +#, gcc-internal-format msgid "Constant-type argument expected" -msgstr "instruction « for » attendue" +msgstr "Argument de type constante attendu" #: config/aarch64/aarch64-builtins.cc:2815 -#, fuzzy, gcc-internal-format -#| msgid "argument %d must be a constant immediate in range [0,15]" +#, gcc-internal-format msgid "argument %d must be a constant immediate in range [%wd,%wd]" -msgstr "l'argument %d doit être une constante immédiate dans l'intervalle [0,15]" +msgstr "l'argument %d doit être une constante immédiate dans l'intervalle [%wd,%wd]" #: config/aarch64/aarch64-builtins.cc:2894 #, gcc-internal-format @@ -38168,17 +37968,17 @@ msgstr "la fonction ACLE %qD est incompatible avec l'utilisation de %qs" #: config/aarch64/aarch64-sve-builtins.cc:1112 #, gcc-internal-format msgid "ACLE function %qD cannot be called when SME streaming mode is enabled" -msgstr "" +msgstr "la fonction ACLE %qD ne peut pas être appelée quand le mode de streaming SME est activé" #: config/aarch64/aarch64-sve-builtins.cc:1119 #, gcc-internal-format msgid "ACLE function %qD can only be called when SME streaming mode is enabled" -msgstr "" +msgstr "La fonction ACLE %qD peut uniquement être appelée quand le mode de streamding SME est activé" #: config/aarch64/aarch64-sve-builtins.cc:1126 #, gcc-internal-format msgid "ACLE function %qD can only be called from a function that has %qs state" -msgstr "" +msgstr "La fonction %qD peut uniquement être appelée depuis une fonction dans l'état %qs" #: config/aarch64/aarch64-sve-builtins.cc:1154 #: config/arm/arm-mve-builtins.cc:571 @@ -38188,10 +37988,9 @@ msgid "argument %d of %qE must be an integer constant expression" msgstr "l'argument %d de %qE doit être une expression constante entière" #: config/aarch64/aarch64-sve-builtins.cc:1167 -#, fuzzy, gcc-internal-format -#| msgid "passing %wd to argument %d of %qE, which expects either %wd or %wd" +#, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects the value %wd" -msgstr "passage de %wd à l'argument %d de %qE qui attend soit %wd ou %wd" +msgstr "passage de %wd à l'argument %d de %qE qui attend la valeur %wd" #: config/aarch64/aarch64-sve-builtins.cc:1170 #: config/arm/arm-mve-builtins.cc:583 @@ -38232,21 +38031,19 @@ msgstr[0] "passage du vecteur unique %qT à l'argument %d de %qE qui attend un t msgstr[1] "passage du vecteur unique %qT à l'argument %d de %qE qui attend un tuple de %d vecteurs" #: config/aarch64/aarch64-sve-builtins.cc:1767 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT instead of the expected %qT to argument %d of %qE, after passing %qT to argument %d" +#, gcc-internal-format msgid "passing tuple %qT to argument %d of %qE after passing single vector %qT to argument %d" -msgstr "passage de %qT au lieu de %qT attendu à l'argument %d de %qE après passage de %qT à l'argument %d" +msgstr "passage du tuple %qT à l'argument %d de %qE après avoir passé un seul vecteur %qT à l'argument %d" #: config/aarch64/aarch64-sve-builtins.cc:1772 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT instead of the expected %qT to argument %d of %qE, after passing %qT to argument %d" +#, gcc-internal-format msgid "passing single vector %qT to argument %d of %qE after passing tuple %qT to argument %d" -msgstr "passage de %qT au lieu de %qT attendu à l'argument %d de %qE après passage de %qT à l'argument %d" +msgstr "passage du seul vecteur %qT à l'argument %d de %qE après avoir passé le tuple %qT à l'argument %d" #: config/aarch64/aarch64-sve-builtins.cc:1777 #, gcc-internal-format msgid "passing mismatched tuple types %qT and %qT to arguments %d and %d of %qE" -msgstr "" +msgstr "passage des types de tuples non concordants %qT et %qT aux arguments %d et %d de %qE " #: config/aarch64/aarch64-sve-builtins.cc:1788 #: config/arm/arm-mve-builtins.cc:1104 @@ -38255,16 +38052,14 @@ msgid "%qE has no form that takes %qT arguments" msgstr "%qE n'a pas de forme qui prend des arguments %qT" #: config/aarch64/aarch64-sve-builtins.cc:1849 -#, fuzzy, gcc-internal-format -#| msgid "%qE has no form that takes %qT arguments" +#, gcc-internal-format msgid "%qE has no form that takes %qT and %qT arguments" -msgstr "%qE n'a pas de forme qui prend des arguments %qT" +msgstr "%qE n'a pas de forme qui prend des arguments %qT et %qT" #: config/aarch64/aarch64-sve-builtins.cc:1911 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects %qs or %qs" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an %qs or %qs" -msgstr "passage de %qT à l'argument %d de %qE qui attend %qs ou %qs" +msgstr "passage de %qT à l'argument %d de %qE qui attend un %qs ou %qs" #: config/aarch64/aarch64-sve-builtins.cc:1942 #, gcc-internal-format @@ -38272,16 +38067,14 @@ msgid "passing %qT to argument %d of %qE, which expects a 32-bit or 64-bit integ msgstr "passage de %qT à l'argument %d de %qE qui attend un type entier de 32 ou 64 bits" #: config/aarch64/aarch64-sve-builtins.cc:1961 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit integers" +#, gcc-internal-format msgid "passing %qT and %qT to arguments %d and %d of %qE, which expects a pair of 64-bit integers" -msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'entiers de %d bits" +msgstr "passage de %qT et %qT aux arguments %d et %d de %qE qui attend une paire de vecteurs d'entiers de 64 bits" #: config/aarch64/aarch64-sve-builtins.cc:1985 -#, fuzzy, gcc-internal-format -#| msgid "size mismatch in argument %d of %qE" +#, gcc-internal-format msgid "passing mismatched integer types %qT and %qT to arguments %d and %d of %qE" -msgstr "désaccord de taille dans l'argument %d de %qE" +msgstr "passage des types entiers non concordants %qT et %qT aux arguments %d et %d de %qE" #: config/aarch64/aarch64-sve-builtins.cc:2006 #: config/arm/arm-mve-builtins.cc:1157 @@ -38305,16 +38098,14 @@ msgid "passing %qT to argument %d of %qE, which expects a pointer to 32-bit or 6 msgstr "le passage de %qT à l'argument %d de %qE qui attend un pointeur vers des éléments de 32 ou 64 bits" #: config/aarch64/aarch64-sve-builtins.cc:2068 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a single SVE vector rather than a tuple" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an SVE type rather than a scalar type" -msgstr "passage de %qT à l'argument %d de %qE qui attend un seul vecteur SVE au lieu d'un tuple" +msgstr "passage de %qT à l'argument %d de %qE qui attend un type SVE au lieu d'un type scalaire" #: config/aarch64/aarch64-sve-builtins.cc:2072 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE tuple type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an SVE type" -msgstr "passage de %qT à l'argument %d de %qE qui attend un type tuple SVE" +msgstr "passage de %qT à l'argument %d de %qE qui attend un type SVE" #: config/aarch64/aarch64-sve-builtins.cc:2117 #, gcc-internal-format @@ -38322,10 +38113,9 @@ msgid "passing %qT to argument %d of %qE, which expects a vector of integers" msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'entiers" #: config/aarch64/aarch64-sve-builtins.cc:2147 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE vector type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a 128 bit NEON vector type" -msgstr "passage de %qT à l'argument %d de %qE qui attend un type vectoriel SVE" +msgstr "passage de %qT à l'argument %d de %qE qui attend un type vectoriel NEON 128 bits" #: config/aarch64/aarch64-sve-builtins.cc:2164 #: config/aarch64/aarch64-sve-builtins.cc:2462 @@ -38342,12 +38132,12 @@ msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'élément #: config/aarch64/aarch64-sve-builtins.cc:2227 #, gcc-internal-format msgid "operations on multiple vectors must be predicated by %qs rather than %qs" -msgstr "" +msgstr "les opérations sur des vecteurs multiples doivent être prédiquées par %qs au lieu de %qs" #: config/aarch64/aarch64-sve-builtins.cc:2230 #, gcc-internal-format msgid "operations on single vectors must be predicated by %qs rather than %qs" -msgstr "" +msgstr "les opérations sur des vecteurs simples doivent être prédiquées par %qs au lieu de %qs" #: config/aarch64/aarch64-sve-builtins.cc:2246 #: config/arm/arm-mve-builtins.cc:1248 @@ -38370,10 +38160,9 @@ msgid "passing %qT to argument %d of %qE, but argument %d had type %qT" msgstr "passage de %qT à l'argument %d de %qE mais l'argument %d a le type %qT" #: config/aarch64/aarch64-sve-builtins.cc:2406 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but argument %d had type %qT" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but argument %d was a tuple of %qT" -msgstr "passage de %qT à l'argument %d de %qE mais l'argument %d a le type %qT" +msgstr "passage de %qT à l'argument %d de %qE mais l'argument %d était un tuple de %qT" #: config/aarch64/aarch64-sve-builtins.cc:2430 #: config/arm/arm-mve-builtins.cc:1384 @@ -38382,10 +38171,9 @@ msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit eleme msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'éléments de %d bits" #: config/aarch64/aarch64-sve-builtins.cc:2435 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit elements" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of %d-bit elements" -msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'éléments de %d bits" +msgstr "passage de %qT à l'argument %d de %qE qui attend des vecteurs d'éléments de %d bits" #: config/aarch64/aarch64-sve-builtins.cc:2448 #: config/arm/arm-mve-builtins.cc:1396 @@ -38396,18 +38184,16 @@ msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'entiers s #. Translation note: could also be written "expects a tuple of #. signed integer vectors". #: config/aarch64/aarch64-sve-builtins.cc:2454 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of signed integers" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of signed integers" -msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'entiers signés" +msgstr "passage de %qT à l'argument %d de %qE qui attend des vecteurs d'entiers signés" #. Translation note: could also be written "expects a tuple of #. unsigned integer vectors". #: config/aarch64/aarch64-sve-builtins.cc:2468 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of unsigned integers" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of unsigned integers" -msgstr "passage de %qT à l'argument %d de %qE qui attend un vecteur d'entiers non signés" +msgstr "passage de %qT à l'argument %d de %qE qui attend de vecteurs d'entiers non signés" #: config/aarch64/aarch64-sve-builtins.cc:2488 #: config/arm/arm-mve-builtins.cc:1423 @@ -38434,10 +38220,9 @@ msgid "passing %qT to argument %d of %qE, which expects %qs" msgstr "passage de %qT à l'argument %d de %qE qui attend %qs" #: config/aarch64/aarch64-sve-builtins.cc:2577 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a scalar pointer" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which does not accept scalars for this combination of arguments" -msgstr "passage de %qT à l'argument %d de %qE qui attend un pointeur scalaire" +msgstr "passage de %qT à l'argument %d de %qE qui n'accepte pas de scalaires pour cette combinaison d'arguments" #: config/aarch64/aarch64-sve-builtins.cc:2593 #: config/arm/arm-mve-builtins.cc:1556 @@ -38539,10 +38324,9 @@ msgid "passing %qT to argument %d of %qE, but its %qT form does not accept scala msgstr "passage de %qT à l'argument %d de %qE mais sa forme %qT n'accepte pas de scalaires" #: config/aarch64/aarch64-sve-builtins.cc:3127 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but its %qT form does not accept scalars" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but its %qT form does not accept single vectors" -msgstr "passage de %qT à l'argument %d de %qE mais sa forme %qT n'accepte pas de scalaires" +msgstr "passage de %qT à l'argument %d de %qE mais sa forme %qT n'accepte pas de simples vecteurs" #: config/aarch64/aarch64-sve-builtins.cc:4621 #: config/aarch64/aarch64-sve-builtins.cc:4683 @@ -38553,10 +38337,9 @@ msgid "duplicate definition of %qs" msgstr "définition dupliquée de %qs" #: config/aarch64/aarch64-sve-builtins.cc:4675 -#, fuzzy, gcc-internal-format -#| msgid "%qD is defined with tls model %s" +#, gcc-internal-format msgid "%qs defined without first defining %qs" -msgstr "%qD est défini avec le modèle tls %s" +msgstr "%qs est défini sans définir %qs en premier" #: config/aarch64/aarch64-sve-builtins.cc:4834 #, gcc-internal-format @@ -38640,16 +38423,14 @@ msgid "capture by copy of SVE type %qT" msgstr "capture par copie du type SVE %qT" #: config/aarch64/aarch64.cc:635 -#, fuzzy, gcc-internal-format -#| msgid "third argument to function %qE must be a constant integer" +#, gcc-internal-format msgid "the arguments to %qE must be constant strings" -msgstr "le troisième argument de la fonction %qE doit être une constante entière" +msgstr "les arguments de %qE doivent être des chaînes constantes" #: config/aarch64/aarch64.cc:643 -#, fuzzy, gcc-internal-format -#| msgid "unrecognized string escape" +#, gcc-internal-format msgid "unrecognized state string %qs" -msgstr "échappement de chaîne non reconnu" +msgstr "chaîne d'état %qs non reconnue" #: config/aarch64/aarch64.cc:727 #, gcc-internal-format @@ -38659,19 +38440,17 @@ msgstr "l'attribut %qE ne peut pas être appliqué à un type de fonction SVE" #: config/aarch64/aarch64.cc:754 #, gcc-internal-format msgid "cannot create a new %qs scope since %qs is shared with callers" -msgstr "" +msgstr "impossible de créer la nouvelle portée %qs car %qs est partagée avec des appelants" #: config/aarch64/aarch64.cc:770 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute applies only to functions" +#, gcc-internal-format msgid "%qE attribute applies only to function definitions" -msgstr "l'attribut %qE ne s'applique qu'à des fonctions" +msgstr "l'attribut %qE ne s'applique qu'à des définitions de fonctions" #: config/aarch64/aarch64.cc:816 -#, fuzzy, gcc-internal-format -#| msgid "inconsistent because %qs" +#, gcc-internal-format msgid "inconsistent attributes for state %qs" -msgstr "inconsistant à cause de %qs" +msgstr "attributs inconsistants pour l'état %qs" #: config/aarch64/aarch64.cc:1305 #, gcc-internal-format @@ -38723,10 +38502,9 @@ msgstr "le passage de paramètre pour l'argument de type %qT a changé dans GCC #: config/aarch64/aarch64.cc:6966 config/aarch64/aarch64.cc:7044 #: config/aarch64/aarch64.cc:21189 -#, fuzzy, gcc-internal-format -#| msgid "parameter passing for argument of type %qT changed in GCC 13.1" +#, gcc-internal-format msgid "parameter passing for argument of type %qT changed in GCC 14.1" -msgstr "le passage de paramètre pour l'argument de type %qT a changé dans GCC 13.1" +msgstr "le passage de paramètre pour l'argument de type %qT a changé dans GCC 14.1" #: config/aarch64/aarch64.cc:6976 config/aarch64/aarch64.cc:7053 #: config/aarch64/aarch64.cc:21195 config/arm/arm.cc:7301 @@ -38751,30 +38529,29 @@ msgid "stack probes for SVE frames" msgstr "sondes de pile pour les trames SVE" #: config/aarch64/aarch64.cc:11080 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "calling a streaming function requires the ISA extension %qs" -msgstr "la fonction ACLE %qD requiert l'extension ISA %qs" +msgstr "appeler la fonction de streaming requiert l'extension ISA %qs" #: config/aarch64/aarch64.cc:11089 config/aarch64/aarch64.cc:11093 #, gcc-internal-format msgid "call to a function that shares %qs state from a function that has no %qs state" -msgstr "" +msgstr "appel a une fonction qui partage l'état %qs depuis une fonction qui n'a pas d'état %qs" #: config/aarch64/aarch64.cc:11096 #, gcc-internal-format msgid "call to a function that shares SME state from a function that has no SME state" -msgstr "" +msgstr "appel à une fonction qui partage l'état SME depuis une fonction qui n'a pas d'état SME" #: config/aarch64/aarch64.cc:11154 #, gcc-internal-format msgid "call to a function that shares state other than %qs from a function that has %qs state" -msgstr "" +msgstr "appel à une fonction qui partage un état autre que %qs depuis une fonction qui a l'état %qs" #: config/aarch64/aarch64.cc:11156 #, gcc-internal-format msgid "use %<__arm_preserves(\"za\")%> if the callee preserves ZA" -msgstr "" +msgstr "utilisez %<__arm_preserves(\"za\")%> si l'appelé préserve ZA" #: config/aarch64/aarch64.cc:17859 #, gcc-internal-format @@ -38834,16 +38611,14 @@ msgid "%<-fsanitize=shadow-call-stack%> requires %<-ffixed-x18%>" msgstr "%<-fsanitize=shadow-call-stack%> requiert %<-ffixed-x18%>" #: config/aarch64/aarch64.cc:18237 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "streaming functions require the ISA extension %qs" -msgstr "la fonction ACLE %qD requiert l'extension ISA %qs" +msgstr "les fonctions de streaming requièrent l'extension ISA %qs" #: config/aarch64/aarch64.cc:18239 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "functions with SME state require the ISA extension %qs" -msgstr "la fonction ACLE %qD requiert l'extension ISA %qs" +msgstr "les fonctions avec un état SME requièrent l'extension ISA %qs" #: config/aarch64/aarch64.cc:18333 #, gcc-internal-format @@ -38861,10 +38636,9 @@ msgid "missing cpu name in %<-mcpu=%s%>" msgstr "nom de processeur manquant dans %<-mcpu=%s%>" #: config/aarch64/aarch64.cc:18473 -#, fuzzy, gcc-internal-format -#| msgid "did you mean %<-mcpu=%s%>?" +#, gcc-internal-format msgid "did you mean %<-march=%s%>?" -msgstr "vouliez-vous utiliser %<-mcpu=%s%> ?" +msgstr "vouliez-vous utiliser %<-march=%s%> ?" #: config/aarch64/aarch64.cc:18476 #, gcc-internal-format @@ -38917,10 +38691,9 @@ msgid "unknown value %qs for %<-mtune%>" msgstr "valeur %qs inconnue pour %<-mtune%>" #: config/aarch64/aarch64.cc:18717 -#, fuzzy, gcc-internal-format -#| msgid "switch %<-mcpu=%s%> conflicts with %<-march=%s%> switch" +#, gcc-internal-format msgid "switch %<-mcpu=%s%> conflicts with %<-march=%s%> switch and resulted in options %<%s%> being added" -msgstr "l'option %<-mcpu=%s%> est en conflit avec l'option %<-march=%s%>" +msgstr "l'option %<-mcpu=%s%> est en conflit avec l'option %<-march=%s%> et résulte dans l'ajout des options %<%s%>" #: config/aarch64/aarch64.cc:18773 #, gcc-internal-format @@ -38943,10 +38716,9 @@ msgid "code model %qs not supported in ilp32 mode" msgstr "le modèle de code %qs n'est pas supporté en mode ilp32" #: config/aarch64/aarch64.cc:18954 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "functions with %qs state require the ISA extension %qs" -msgstr "la fonction ACLE %qD requiert l'extension ISA %qs" +msgstr "les fonctions avec l'état %qs requièrent l'extension ISA %qs" #: config/aarch64/aarch64.cc:19057 #, gcc-internal-format @@ -39031,34 +38803,29 @@ msgid "malformed %<target(\"%s\")%> pragma or attribute" msgstr "le pragma ou l'attribut %<target(\"%s\")%> est mal composé" #: config/aarch64/aarch64.cc:19668 -#, fuzzy, gcc-internal-format -#| msgid "attribute %<fallthrough%> specified multiple times" +#, gcc-internal-format msgid "attribute %<target_version%> has multiple values" -msgstr "l'attribut %<fallthrough%> est spécifié plusieurs fois" +msgstr "l'attribut %<target_version%> a plusieurs valeurs" #: config/aarch64/aarch64.cc:19676 -#, fuzzy, gcc-internal-format -#| msgid "attribute %<target%> argument not a string" +#, gcc-internal-format msgid "attribute %<target_version%> argument not a string" -msgstr "l'argument %<target%> de l'attribut n'est pas une chaîne" +msgstr "l'argument %<target_version%> de l'attribut n'est pas une chaîne" #: config/aarch64/aarch64.cc:19698 -#, fuzzy, gcc-internal-format -#| msgid "missing value in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "missing value in %<target_version%> attribute" -msgstr "valeur manquante dans le pragma ou l'attribut %<target()%>" +msgstr "valeur manquante dans l'attribut %<target_version%>" #: config/aarch64/aarch64.cc:19702 -#, fuzzy, gcc-internal-format -#| msgid "invalid feature modifier %qs of value %qs in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "invalid feature modifier %qs of value %qs in %<target_version%> attribute" -msgstr "modificateur de fonctionnalité %qs invalide avec la valeur %qs dans le pragma ou l'attribut %<target()%>" +msgstr "modificateur de fonctionnalité %qs invalide de la valeur %qs dans l'attribut %<target_version%>" #: config/aarch64/aarch64.cc:19708 -#, fuzzy, gcc-internal-format -#| msgid "invalid feature modifier %qs of value %qs in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "duplicate feature modifier %qs of value %qs in %<target_version%> attribute" -msgstr "modificateur de fonctionnalité %qs invalide avec la valeur %qs dans le pragma ou l'attribut %<target()%>" +msgstr "modificateur de fonctionnalité %qs dupliqué avec la valeur %qs dans l'attribut %<target_version%>" #: config/aarch64/aarch64.cc:20285 config/i386/i386-features.cc:3531 #: config/i386/i386-features.cc:3800 @@ -39098,10 +38865,9 @@ msgid "unsupported simdlen %wd" msgstr "simdlen %wd non supportée" #: config/aarch64/aarch64.cc:28605 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support return type %qT for %<simd%> functions" +#, gcc-internal-format msgid "GCC does not currently support return type %qT for simd" -msgstr "GCC ne supporte actuellement pas le type de retour %qT pour les fonctions %<simd%>" +msgstr "GCC ne supporte actuellement pas le type de retour %qT pour simd" #: config/aarch64/aarch64.cc:28609 config/i386/i386.cc:25115 #, gcc-internal-format @@ -39109,10 +38875,9 @@ msgid "unsupported return type %qT for simd" msgstr "type de retour %qT non supporté pour simd" #: config/aarch64/aarch64.cc:28639 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support argument type %qT for %<simd%> functions" +#, gcc-internal-format msgid "GCC does not currently support argument type %qT for simd" -msgstr "GCC ne supporte actuellement pas un argument de type %qT pour des fonctions %<simd%>" +msgstr "GCC ne supporte actuellement pas un argument de type %qT pour simd" #: config/aarch64/aarch64.cc:28643 config/i386/i386.cc:25146 #, gcc-internal-format @@ -39125,32 +38890,29 @@ msgid "GCC does not currently support simdlen %wd for type %qT" msgstr "GCC ne supporte actuellement pas simdlen %wd pour le type %qT" #: config/aarch64/aarch64.cc:28713 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support simdlen %wd for type %qT" +#, gcc-internal-format msgid "GCC does not currently support a simdclone with simdlens %wd and %wd for these types." -msgstr "GCC ne supporte actuellement pas simdlen %wd pour le type %qT" +msgstr "GCC ne supporte actuellement pas un simdclone avec simdlens %wd et %wd pour ces types." #: config/aarch64/aarch64.cc:28803 -#, fuzzy, gcc-internal-format -#| msgid "type attributes ignored after type is already defined" +#, gcc-internal-format msgid "cannot apply attribute %qs to %q+D after the function has been defined" -msgstr "les attributs de type sont ignorés après que le type ait déjà été défini" +msgstr "impossible d'appliquer l'attribut %qs à %q+D après que la fonction ait été définie" #: config/aarch64/aarch64.cc:28805 -#, fuzzy, gcc-internal-format -#| msgid "%qD defined here" +#, gcc-internal-format msgid "%q+D defined here" -msgstr "%qD défini ici" +msgstr "%q+D défini ici" #: config/aarch64/aarch64.cc:29263 #, gcc-internal-format msgid "non-local gotos in functions with SME state" -msgstr "" +msgstr "goto non locaux dans les fonctions avec l'état SME" #: config/aarch64/aarch64.cc:29558 #, gcc-internal-format msgid "catching non-call exceptions in functions with SME state" -msgstr "" +msgstr "interception des exceptions sans appel dans des fonctions avec l'état SME" #: config/alpha/alpha.cc:420 #, gcc-internal-format @@ -39495,21 +39257,19 @@ msgid "invalid type for %<asm%> flag output" msgstr "type invalide pour la sortie du fanion %<asm%>" #: config/arm/aarch-common.cc:765 -#, fuzzy, gcc-internal-format -#| msgid "missing feature modifier in target %s %qs" +#, gcc-internal-format msgid "missing feature or flag for %<%s%>" -msgstr "modificateur de fonctionnalité manquant dans la cible %s %qs" +msgstr "fonctionnalité ou fanion manquant pour %<%s%>" #: config/arm/aarch-common.cc:767 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument %<%s%> for %<-mharden-sls=%>" +#, gcc-internal-format msgid "invalid argument %<%s%> for %<%s%>" -msgstr "argument %<%s%> invalide pour %<-mharden-sls=%>" +msgstr "argument %<%s%> invalide pour %<%s%>" #: config/arm/aarch-common.cc:778 #, gcc-internal-format msgid "argument %<%s%> can only appear alone in %<%s%>" -msgstr "" +msgstr "l'argument %<%s%> peut uniquement apparaître seul dans %<%s%>" #: config/arm/arm-builtins.cc:3125 #, gcc-internal-format, gfc-internal-format @@ -39624,10 +39384,9 @@ msgid "%<#pragma GCC arm%> requires a string parameter" msgstr "%<#pragma GCC arm%> existe une chaîne en paramètre" #: config/arm/arm-c.cc:156 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma GCC arm%> requires a string parameter" +#, gcc-internal-format msgid "%<#pragma GCC arm \"arm_mve.h\"%> requires a boolean parameter" -msgstr "%<#pragma GCC arm%> existe une chaîne en paramètre" +msgstr "%<#pragma GCC arm \"arm_mve.h\"%> exige un paramètre booléen" #: config/arm/arm-c.cc:160 #, gcc-internal-format @@ -39640,34 +39399,29 @@ msgid "this definition requires the MVE ISA extension" msgstr "cette définition requiert l'extension de l'ISA MVE" #: config/arm/arm-mve-builtins.cc:560 -#, fuzzy, gcc-internal-format -#| msgid "you can enable %qs using the command-line option %<-march%>, or by using the %<target%> attribute or pragma" +#, gcc-internal-format msgid "you can enable mve.fp by using the command-line option %<-march%>, or by using the %<target%> attribute or pragma" -msgstr "vous pouvez activer %qs en utilisant l'option %<-march%> sur la ligne de commande ou en utilisant l'attribut ou le pragma %<target%>" +msgstr "vous pouvez activer mve.fp en utilisant l'option %<-march%> sur la ligne de commande ou en utilisant l'attribut ou le pragma %<target%>" #: config/arm/arm-mve-builtins.cc:1166 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but %qT is not a valid SVE element type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but %qT is not a valid MVE element type" -msgstr "passage de %qT à l'argument %d de %qE mais %qT n'est pas un type d'élément SVE valable" +msgstr "passage de %qT à l'argument %d de %qE mais %qT n'est pas un type d'élément MVE valable" #: config/arm/arm-mve-builtins.cc:1200 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a single SVE vector rather than a tuple" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a single MVE vector rather than a tuple" -msgstr "passage de %qT à l'argument %d de %qE qui attend un seul vecteur SVE au lieu d'un tuple" +msgstr "passage de %qT à l'argument %d de %qE qui attend un seul vecteur MVE au lieu d'un tuple" #: config/arm/arm-mve-builtins.cc:1220 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE vector type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an MVE vector type" -msgstr "passage de %qT à l'argument %d de %qE qui attend un type vectoriel SVE" +msgstr "passage de %qT à l'argument %d de %qE qui attend un type vectoriel MVE" #: config/arm/arm-mve-builtins.cc:1223 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE tuple type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an MVE tuple type" -msgstr "passage de %qT à l'argument %d de %qE qui attend un type tuple SVE" +msgstr "passage de %qT à l'argument %d de %qE qui attend un type tuple MVE" #: config/arm/arm-mve-builtins.cc:1290 #, gcc-internal-format @@ -40139,10 +39893,9 @@ msgid "%qE attribute only supported for reduced Tiny cores" msgstr "l'attribut %qE n'est supporté que par les cœurs Tiny réduits" #: config/avr/avr.cc:10405 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute address out of range" +#, gcc-internal-format msgid "%qE attribute address out of range 0x%x%s0x%x" -msgstr "l'adresse de l'attribut %qE est hors limites" +msgstr "l'adresse de l'attribut %qE est hors limites 0x%x%s0x%x" #: config/avr/avr.cc:10419 #, gcc-internal-format @@ -40177,10 +39930,9 @@ msgid "pointer targeting address space %qs must be const in %s %q+D" msgstr "un pointeur visant l'espace d'adresses %qs doit être const dans le/la %s %q+D" #: config/avr/avr.cc:10717 -#, fuzzy, gcc-internal-format -#| msgid "variables marked with %qE attribute must be initialized" +#, gcc-internal-format msgid "variable %q+D with attribute %qs must be located in static storage" -msgstr "les variables marquées avec l'attribut %qE doivent être initialisées" +msgstr "la variable %q+D avec l'attribut %qs doit être placée dans le stockage statique" #: config/avr/avr.cc:10769 #, gcc-internal-format @@ -40188,10 +39940,9 @@ msgid "variable %q+D must be const in order to be put into read-only section by msgstr "la variable %q+D doit être « const » pour être placée dans une section en lecture seule à l'aide de %qs" #: config/avr/avr.cc:10930 -#, fuzzy, gcc-internal-format -#| msgid "static IO declaration for %q+D needs an address" +#, gcc-internal-format msgid "static attribute %qs declaration for %q+D needs an address" -msgstr "la déclaration IO statique pour %q+D a besoin d'une adresse" +msgstr "la déclaration de l'attribut statique %qs pour %q+D a besoin d'une adresse" #: config/avr/avr.cc:11019 #, gcc-internal-format @@ -40214,10 +39965,9 @@ msgstr "variable non initialisée %q+D placée dans la zone mémoire du programm #. address attribute are determined by the attribute, not by #. some initializer. #: config/avr/avr.cc:11172 -#, fuzzy, gcc-internal-format -#| msgid "variables marked with %qE attribute must be initialized" +#, gcc-internal-format msgid "variable %q+D with attribute %qs must not have an initializer" -msgstr "les variables marquées avec l'attribut %qE doivent être initialisées" +msgstr "la variable %q+D avec l'attribut %qs ne doit pas avoir d'initialiseur" #: config/avr/avr.cc:11225 #, gcc-internal-format @@ -40393,10 +40143,9 @@ msgid "invalid argument to built-in function" msgstr "argument invalide pour la fonction interne" #: config/bpf/bpf.cc:1019 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument to built-in function %s" +#, gcc-internal-format msgid "invalid built-in function at expansion" -msgstr "argument invalide pour la fonction interne %s" +msgstr "fonction interne invalide durant l'expansion" #: config/c6x/c6x.cc:245 #, gcc-internal-format @@ -40610,10 +40359,9 @@ msgid "stack frame must be smaller than 64K" msgstr "la trame de pile doit être plus petite que 64K" #: config/gcn/gcn.cc:170 -#, fuzzy, gcc-internal-format -#| msgid "%<-msmart%> is incompatible with %<-mhigh-registers%>" +#, gcc-internal-format msgid "%<-mxnack=on%> is incompatible with %<-march=%s%>" -msgstr "%<-msmart%> est incompatible avec %<-mhigh-registers%>" +msgstr "%<-mxnack=on%> est incompatible avec %<-march=%s%>" #: config/gcn/gcn.cc:284 #, gcc-internal-format @@ -40691,28 +40439,24 @@ msgid "%d bytes of gang-private data-share memory exhausted (increase with %<-mg msgstr "%d octets de mémoire de partage de données privées au gang épuisée (augmentez, par exemple, avec %<-mgang-private-size=%d%>)" #: config/gcn/mkoffload.cc:160 -#, fuzzy, gcc-internal-format -#| msgid "deleting file %s: %m" +#, gcc-internal-format msgid "deleting file %qs: %m" -msgstr "suppression du fichier %s: %m" +msgstr "suppression du fichier %qs : %m" #: config/gcn/mkoffload.cc:862 -#, fuzzy, gcc-internal-format -#| msgid "COLLECT_GCC must be set" +#, gcc-internal-format msgid "%<COLLECT_GCC%> must be set" -msgstr "COLLECT_GCC doit être défini" +msgstr "%<COLLECT_GCC%> doit être défini" #: config/gcn/mkoffload.cc:908 -#, fuzzy, gcc-internal-format -#| msgid "offload compiler %s not found" +#, gcc-internal-format msgid "offload compiler %qs not found" -msgstr "le compilateur de déchargement %s n'a pas été trouvé" +msgstr "le compilateur de déchargement %qs n'a pas été trouvé" #: config/gcn/mkoffload.cc:930 -#, fuzzy, gcc-internal-format -#| msgid "unrecognizable argument of option " +#, gcc-internal-format msgid "unrecognizable argument of option %<" -msgstr "argument méconnaissable pour l'option " +msgstr "argument méconnaissable pour l'option %<" #: config/gcn/mkoffload.cc:994 config/nvptx/mkoffload.cc:751 #, gcc-internal-format @@ -40720,16 +40464,14 @@ msgid "either %<-fopenacc%> or %<-fopenmp%> must be set" msgstr "soit %<-fopenacc%> ou soit %<-fopenmp%> doit être défini" #: config/gcn/mkoffload.cc:1039 -#, fuzzy, gcc-internal-format -#| msgid "unhandled expression" +#, gcc-internal-format msgid "unhandled architecture" -msgstr "expression non gérée" +msgstr "architecture non gérée" #: config/gcn/mkoffload.cc:1079 config/gcn/mkoffload.cc:1231 -#, fuzzy, gcc-internal-format -#| msgid "cannot open %s" +#, gcc-internal-format msgid "cannot open %qs" -msgstr "ne peut ouvrir %s" +msgstr "ne peut ouvrir %qs" #: config/gcn/mkoffload.cc:1217 config/nvptx/mkoffload.cc:841 #, gcc-internal-format @@ -41086,16 +40828,14 @@ msgid "%<-mstringop-strategy=rep_8byte%> not supported for 32-bit code" msgstr "%<-mstringop-strategy=rep_8byte%> pas supporté pour du code 32 bits" #: config/i386/i386-options.cc:2143 -#, fuzzy, gcc-internal-format -#| msgid "%<-muintr%> not supported for 32-bit code" +#, gcc-internal-format msgid "%<-mapxf%> is not supported for 32-bit code" -msgstr "%<-muintr%> pas supporté pour du code 32 bits" +msgstr "%<-mapxf%> pas supporté pour du code 32 bits" #: config/i386/i386-options.cc:2145 -#, fuzzy, gcc-internal-format -#| msgid "%<-mlam=%> option: [u48|u57] not supported for 32-bit code" +#, gcc-internal-format msgid "%<-mapx-features=%> option is not supported for 32-bit code" -msgstr "option %<-mlam=%> : [u48|u57] pas supportée pour du code 32 bits" +msgstr "l'option %<-mapx-features=%> n'est pas supportée pour du code 32 bits" #: config/i386/i386-options.cc:2148 #, gcc-internal-format @@ -41670,10 +41410,9 @@ msgid "the ABI of passing C structures with zero-width bit-fields has changed in msgstr "l'ABI pour passer des structures C avec des champs de bits de largeur zéro a changé dans GCC %{12.1%}" #: config/i386/i386.cc:2722 config/i386/i386.cc:4091 config/i386/i386.cc:4101 -#, fuzzy, gcc-internal-format -#| msgid "SSE register return with SSE disabled" +#, gcc-internal-format msgid "SSE register return with SSE2 disabled" -msgstr "retour d'un registre SSE alors que SSE est désactivé" +msgstr "retour d'un registre SSE alors que SSE2 est désactivé" #: config/i386/i386.cc:2724 #, gcc-internal-format @@ -41681,10 +41420,9 @@ msgid "SSE register return with SSE disabled" msgstr "retour d'un registre SSE alors que SSE est désactivé" #: config/i386/i386.cc:2731 -#, fuzzy, gcc-internal-format -#| msgid "SSE register argument with SSE disabled" +#, gcc-internal-format msgid "SSE register argument with SSE2 disabled" -msgstr "argument dans un registre SSE alors que SSE est désactivé" +msgstr "argument dans un registre SSE alors que SSE2 est désactivé" #: config/i386/i386.cc:2733 #, gcc-internal-format @@ -41788,10 +41526,9 @@ msgid "the alignment of %<_Atomic %T%> fields changed in %{GCC 11.1%}" msgstr "l'alignement des champs de %<_Atomic %T%> ont changé dans %{GCC 11.1%}" #: config/i386/i386.cc:22794 -#, fuzzy, gcc-internal-format -#| msgid "no low registers available for popping high registers" +#, gcc-internal-format msgid "no register available for profiling %<-mcmodel=large%s%>" -msgstr "pas de registre bas disponible pour dépiler les registres hauts" +msgstr "pas de registre disponible pour profiler %<-mcmodel=large%s%>" #: config/i386/i386.cc:22890 #, gcc-internal-format @@ -41799,10 +41536,9 @@ msgid "profiling %<-mcmodel=large%> with PIC is not supported" msgstr "le profilage %<-mcmodel=large%> avec PIC n'est pas supporté" #: config/i386/i386.cc:23603 -#, fuzzy, gcc-internal-format -#| msgid "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since GCC V13, be careful of implicit conversion between %<__bf16%> and %<short%>; a explicit bitcast may be needed here" +#, gcc-internal-format msgid "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since GCC 13.1, be careful of implicit conversion between %<__bf16%> and %<short%>; an explicit bitcast may be needed here" -msgstr "%<__bfloat16%> est redéfini du typedef %<short%> en un réel %<__bf16%> depuis GCC V13, soyez attentif aux conversions implicites entre %<__bf16%> et %<short%>; un transtypage binaire explicite pourrait être nécessaire ici" +msgstr "%<__bfloat16%> est redéfini du typedef %<short%> en un réel %<__bf16%> depuis GCC 13.1, soyez attentif aux conversions implicites entre %<__bf16%> et %<short%>; un transtypage binaire explicite pourrait être nécessaire ici" #: config/i386/i386.cc:25052 #, gcc-internal-format @@ -41911,31 +41647,29 @@ msgid "unknown processor ID %<0x%x%>, some tuning parameters will fall back to d msgstr "ID de processeur %<0x%x%> inconnu, certains réglages vont utiliser la valeur par défaut" #: config/loongarch/loongarch-cpu.cc:141 -#, fuzzy, gcc-internal-format -#| msgid "unknown base architecture %<0x%x%>, %qs failed" +#, gcc-internal-format msgid "unknown native base architecture %<0x%x%>, %qs failed" -msgstr "architecture de base %<0x%x%> inconnue, %qs a échoué" +msgstr "architecture native de base %<0x%x%> inconnue, %qs a échoué" #: config/loongarch/loongarch-cpu.cc:170 -#, fuzzy, gcc-internal-format -#| msgid "unknown FPU type %<0x%x%>, %qs failed" +#, gcc-internal-format msgid "unknown native FPU type %<0x%x%>, %qs failed" -msgstr "type de FPU %<0x%x%> inconnu, %qs a échoué" +msgstr "type de FPU natif %<0x%x%> inconnu, %qs a échoué" #: config/loongarch/loongarch-cpu.cc:177 #, gcc-internal-format msgid "floating-point unit %qs differs from PRID preset %qs" -msgstr "" +msgstr "l'unité en virgule flottante %qs diffère de la prédéfinition PRID %qs" #: config/loongarch/loongarch-cpu.cc:201 #, gcc-internal-format msgid "unknown SIMD extension (%qs disabled while %qs is enabled), disabling SIMD" -msgstr "" +msgstr "extension SIMD inconnue (%qs désactivé tandis que %qs est activé), désactivation de SIMD" #: config/loongarch/loongarch-cpu.cc:239 #, gcc-internal-format msgid "detected base architecture %qs, but some of its features are not detected; the detected base architecture may be unreliable, only detected features will be enabled" -msgstr "" +msgstr "l'architecture de base %qs est détectée mais certaines de ses fonctionnalités ne sont pas détectées ; l'architecture de base détectée pourrait ne pas être fiable, seules les fonctionnalités détectées seront activées" #: config/loongarch/loongarch-opts.cc:225 #, gcc-internal-format @@ -41956,18 +41690,17 @@ msgstr "%qs ne fonctionne pas sur un compilateur croisé" #: config/loongarch/loongarch-opts.cc:365 #, gcc-internal-format msgid "enabing %qs promotes %<%s%s%> to %<%s%s%>" -msgstr "" +msgstr "l'activation de %qs promeut %<%s%s%> vers %<%s%s%>" #: config/loongarch/loongarch-opts.cc:377 #, gcc-internal-format msgid "%qs is disabled by %<-m%s%>, because it requires %<%s%s%>" -msgstr "" +msgstr "%qs est désactivé par %<-m%s%> car il requiert %<%s%s%>" #: config/loongarch/loongarch-opts.cc:389 -#, fuzzy, gcc-internal-format -#| msgid "switch %<-mcpu=%s%> conflicts with switch %<-march=%s%>" +#, gcc-internal-format msgid "%<-m%s=%s%> conflicts with %qs, which requires %<%s%s%>" -msgstr "l'option %<-mcpu=%s%> est en conflit avec l'option %<-march=%s%>" +msgstr "%<-m%s=%s%> est en conflit avec %qs qui requiert %<%s%s%>" #: config/loongarch/loongarch-opts.cc:433 #, gcc-internal-format @@ -42187,10 +41920,9 @@ msgid "%qE attribute requires a string argument" msgstr "l'attribut %qE requiert une chaîne comme argument" #: config/mips/mips.cc:1340 -#, fuzzy, gcc-internal-format -#| msgid "argument to %qE attribute is neither zero, nor one" +#, gcc-internal-format msgid "argument to %qE attribute is neither no, pcrel nor yes" -msgstr "l'argument de l'attribut %qE n'est ni zéro ni un" +msgstr "l'argument de l'attribut %qE n'est ni no, pcrel ou yes" #: config/mips/mips.cc:1506 config/mips/mips.cc:1510 #, gcc-internal-format @@ -42285,10 +42017,9 @@ msgid "MSA MIPS16 code" msgstr "code MIPS16 MSA" #: config/mips/mips.cc:20067 -#, fuzzy, gcc-internal-format -#| msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" +#, gcc-internal-format msgid "MIPS16 requires %<-mexplicit-relocs%>" -msgstr "%<-mno-gpopt%> à besoin de %<-mexplicit-relocs%>" +msgstr "MIPS16 requiert %<-mexplicit-relocs%>" #: config/mips/mips.cc:20258 config/mips/mips.cc:20263 #: config/mips/mips.cc:20353 config/mips/mips.cc:20355 @@ -43154,10 +42885,9 @@ msgid "PTX version (%<-mptx%>) needs to be at least %s to support selected %<-mi msgstr "la version PTX (%<-mptx%>) doit être au moins %s pour supporter le %<-misa%> demandé (sm_%s)" #: config/nvptx/nvptx.cc:340 -#, fuzzy, gcc-internal-format -#| msgid "multiple %<-mcpu=%> options specified" +#, gcc-internal-format msgid "%<-march=%> must be specified" -msgstr "l'option %<-mcpu=%> a été spécifiée plusieurs fois" +msgstr "%<-march=%> doit être spécifié" #: config/nvptx/nvptx.cc:363 #, gcc-internal-format @@ -43334,10 +43064,9 @@ msgid "%<#pragma riscv intrinsic%> requires a string parameter" msgstr "%<#pragma riscv intrinsic%> existe une chaîne en paramètre" #: config/riscv/riscv-c.cc:203 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma riscv intrinsic%> option %qs needs 'V' extension enabled" +#, gcc-internal-format msgid "%<#pragma riscv intrinsic%> option %qs needs 'V' or 'XTHEADVECTOR' extension enabled" -msgstr "l'option %<#pragma riscv intrinsic%> %qs a besoin que l'extension « V » soit activée" +msgstr "l'option %<#pragma riscv intrinsic%> %qs a besoin que l'extension « V » ou « XTHEADVECTOR » soit activée" #: config/riscv/riscv-c.cc:211 #, gcc-internal-format @@ -43347,68 +43076,62 @@ msgstr "option %qs inconnue pour %<#pragma riscv intrinsic%>" #: config/riscv/riscv-target-attr.cc:120 #, gcc-internal-format msgid "unexpected arch for %<target()%> attribute: must start with + or rv" -msgstr "" +msgstr "architecture inattendue pour l'attribut %<target()%> : doit commencer par + ou rv" #: config/riscv/riscv-target-attr.cc:132 #, gcc-internal-format msgid "unexpected arch for %<target()%> attribute: bad string found %<%s%>" -msgstr "" +msgstr "architecture inattendue pour l'attribut %<target()%> : mauvaise chaîne %<%s%> rencontrée" #: config/riscv/riscv-target-attr.cc:156 #, gcc-internal-format msgid "%<target()%> attribute: arch appears more than once" -msgstr "" +msgstr "pour l'attribut %<target()%> : l'architecture apparaît plusieurs fois" #: config/riscv/riscv-target-attr.cc:167 #, gcc-internal-format msgid "%<target()%> attribute: cpu appears more than once" -msgstr "" +msgstr "pour l'attribut %<target()%> : le cpu apparaît plusieurs fois" #: config/riscv/riscv-target-attr.cc:174 #, gcc-internal-format msgid "%<target()%> attribute: unknown CPU %qs" -msgstr "" +msgstr "pour l'attribut %<target()%> : CPU %qs inconnu" #: config/riscv/riscv-target-attr.cc:195 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target()%> attribute: tune appears more than once" -msgstr "l'attribut cible n'est pas supporté sur cette machine" +msgstr "pour l'attribut %<target()%> : TUNE apparaît plusieurs fois" #: config/riscv/riscv-target-attr.cc:201 #, gcc-internal-format msgid "%<target()%> attribute: unknown TUNE %qs" -msgstr "" +msgstr "pour l'attribut %<target()%> : TUNE %qs inconnu" #: config/riscv/riscv-target-attr.cc:240 -#, fuzzy, gcc-internal-format -#| msgid "malformed %<target()%> pragma or attribute" +#, gcc-internal-format msgid "malformed %<target()%> attribute" -msgstr "le pragma ou l'attribut %<target()%> est mal composé" +msgstr "l'attribut %<target()%> est mal composé" #: config/riscv/riscv-target-attr.cc:254 -#, fuzzy, gcc-internal-format -#| msgid "pragma or attribute %<target(\"%s\")%> does not accept an argument" +#, gcc-internal-format msgid "attribute %<target(\"%s\")%> does not accept an argument" -msgstr "le pragma ou l'attribut %<target(\"%s\")%> n'accepte pas d'argument" +msgstr "l'attribut %<target(\"%s\")%> n'accepte pas d'argument" #: config/riscv/riscv-target-attr.cc:271 -#, fuzzy, gcc-internal-format -#| msgid "unknown attribute %qs" +#, gcc-internal-format msgid "Got unknown attribute %<target(\"%s\")%>" -msgstr "attribut %qs inconnu" +msgstr "attribut %<target(\"%s\")%> inconnu" #: config/riscv/riscv-target-attr.cc:352 -#, fuzzy, gcc-internal-format -#| msgid "malformed %<target(\"%s\")%> pragma or attribute" +#, gcc-internal-format msgid "malformed %<target(\"%s\")%> attribute" -msgstr "le pragma ou l'attribut %<target(\"%s\")%> est mal composé" +msgstr "l'attribut %<target(\"%s\")%> est mal composé" #: config/riscv/riscv-vector-builtins.cc:4239 -#, fuzzy, gcc-internal-format -#| msgid "passing %wd to argument %d of %qE, which expects a value in the range [%wd, %wd]" +#, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects a value in the range [%wd, %wd] or %wd" -msgstr "passage de %wd à l'argument %d de %qE qui attend une valeur dans la plage [%wd, %wd]" +msgstr "passage de %wd à l'argument %d de %qE qui attend une valeur dans la plage [%wd, %wd] ou %wd" #: config/riscv/riscv-vector-builtins.cc:4435 #, gcc-internal-format @@ -43461,10 +43184,9 @@ msgid "capture by copy of RVV type %qT" msgstr "capture par copie du type RVV %qT" #: config/riscv/riscv-vector-builtins.cc:4633 -#, fuzzy, gcc-internal-format -#| msgid "no matching function for call to %<%s(%A)%>" +#, gcc-internal-format msgid "no matching function call to %qE with empty arguments" -msgstr "pas de fonction concordante pour l'appel de %<%s(%A)%>" +msgstr "pas d'appel de fonction concordant pour %qE avec des arguments vides" #: config/riscv/riscv.cc:647 #, gcc-internal-format @@ -43487,10 +43209,9 @@ msgid "ABI for flattened struct with zero-length bit-fields changed in GCC 10" msgstr "l'ABI pour des structures aplaties avec un champ de bits d'une taille non nulle a changé dans GCC 10" #: config/riscv/riscv.cc:5237 -#, fuzzy, gcc-internal-format -#| msgid "SVE type %qT cannot be passed to an unprototyped function" +#, gcc-internal-format msgid "RVV type %qT cannot be passed to an unprototyped function" -msgstr "le type SVE %qT ne peut pas être passé en argument à une fonction sans prototype" +msgstr "le type RVV %qT ne peut pas être passé en argument à une fonction sans prototype" #: config/riscv/riscv.cc:5515 #, gcc-internal-format @@ -43505,19 +43226,17 @@ msgstr "%<-mdiv%> requiert %<-march%> pour incorporer l'extension %<M%>" #: config/riscv/riscv.cc:8917 #, gcc-internal-format msgid "Current RISC-V GCC does not support VLEN greater than 4096bit for 'V' Extension" -msgstr "" +msgstr "Le GCC RISC-V actuel ne supporte pas un VLEN plus grand que 4096 bits pour l'extension « V »" #: config/riscv/riscv.cc:8923 -#, fuzzy, gcc-internal-format -#| msgid "target CPU does not support ARM mode" +#, gcc-internal-format msgid "Current RISC-V GCC does not support RVV in big-endian mode" -msgstr "le processeur cible ne supporte pas ARM" +msgstr "Le GCC RISC-V actuel ne supporte pas RVV en mode gros boutiste" #: config/riscv/riscv.cc:8949 config/riscv/riscv.cc:8952 -#, fuzzy, gcc-internal-format -#| msgid "code model %qs with %<-f%s%>" +#, gcc-internal-format msgid "code model %qs with %qs" -msgstr "modèle de code %qs avec %<-f%s%>" +msgstr "modèle de code %qs avec %qs" #: config/riscv/riscv.cc:8981 #, gcc-internal-format @@ -43530,16 +43249,14 @@ msgid "rv32e requires ilp32e ABI" msgstr "rv32e requiert l'ABI ilp32e" #: config/riscv/riscv.cc:8990 -#, fuzzy, gcc-internal-format -#| msgid "rv32e requires ilp32e ABI" +#, gcc-internal-format msgid "rv64e requires lp64e ABI" -msgstr "rv32e requiert l'ABI ilp32e" +msgstr "rv64e requiert l'ABI lp64e" #: config/riscv/riscv.cc:8997 -#, fuzzy, gcc-internal-format -#| msgid "z*inx requires ABI ilp32, ilp32e or lp64" +#, gcc-internal-format msgid "z*inx requires ABI ilp32, ilp32e, lp64 or lp64e" -msgstr "z*inx requiert l'ABI ilp32, ilp32e ou lp64" +msgstr "z*inx requiert l'ABI ilp32, ilp32e, lp64 ou lp64e" #: config/riscv/riscv.cc:9001 #, gcc-internal-format @@ -44455,28 +44172,24 @@ msgid "value %qs is not supported by attribute %<target%>" msgstr "la valeur %qs n'est pas supportée par l'attribut %<target%>" #: config/s390/s390.cc:17531 -#, fuzzy, gcc-internal-format -#| msgid "invalid constraints" +#, gcc-internal-format msgid "invalid cc output constraint: %qs" -msgstr "contraintes invalides" +msgstr "contrainte de sortie cc invalide : %qs" #: config/s390/s390.cc:17536 -#, fuzzy, gcc-internal-format -#| msgid "double constants not supported" +#, gcc-internal-format msgid "multiple cc output constraints not supported" -msgstr "constantes doubles non supportées" +msgstr "contraintes de sortie cc multiples non supportées" #: config/s390/s390.cc:17541 -#, fuzzy, gcc-internal-format -#| msgid "%<asm%> specifier for variable %qE conflicts with %<asm%> clobber list" +#, gcc-internal-format msgid "%<asm%> specifier for cc output conflicts with %<asm%> clobber list" -msgstr "le spécificateur %<asm%> pour la variable %qE est en conflit avec la liste d'écrasement de %<asm%>" +msgstr "le spécificateur %<asm%> pour la sortie de cc est en conflit avec la liste d'écrasement de %<asm%>" #: config/s390/s390.cc:17547 -#, fuzzy, gcc-internal-format -#| msgid "invalid type for pointer diff" +#, gcc-internal-format msgid "invalid type for cc output constraint" -msgstr "type invalide pour le diff pointeur" +msgstr "type invalide pour la contrainte de sortie de cc" #: config/sh/sh.cc:936 #, gcc-internal-format @@ -45039,10 +44752,9 @@ msgid "declaration of %q+D shadows a built-in function" msgstr "la déclaration de %q+D masque une fonction interne" #: c/c-decl.cc:2153 -#, fuzzy, gcc-internal-format -#| msgid "redeclaration of enumerator %q+D" +#, gcc-internal-format msgid "conflicting redeclaration of enumerator %q+D" -msgstr "redéclaration de l'énumération %q+D" +msgstr "redéclaration de l'énumération %q+D conflictuelle" #: c/c-decl.cc:2160 #, gcc-internal-format @@ -45325,10 +45037,9 @@ msgid "traditional C lacks a separate namespace for labels, identifier %qE confl msgstr "le C traditionnel n'a pas d'espace de noms séparé pour les étiquettes, l'identificateur %qE est en conflit" #: c/c-decl.cc:4379 -#, fuzzy, gcc-internal-format -#| msgid "switch jumps over variable initialization" +#, gcc-internal-format msgid "switch jumps over OpenMP %<allocate%> allocation" -msgstr "le « switch » passe outre l'initialisation d'une variable" +msgstr "le « switch » passe outre l'allocation OpenMP %<allocate%>" #: c/c-decl.cc:4385 #, gcc-internal-format @@ -45498,10 +45209,9 @@ msgid "%<[*]%> not allowed in other than function prototype scope" msgstr "%<[*]%> n'est pas permis ailleurs que dans la portée du prototype d'une fonction" #: c/c-decl.cc:5475 cp/decl2.cc:1852 cp/name-lookup.cc:8767 -#, fuzzy, gcc-internal-format -#| msgid "%<omp::%E%> not allowed to be specified in this context" +#, gcc-internal-format msgid "%<omp::%s%> not allowed to be specified in this context" -msgstr "%<omp::%E%> ne peut pas être spécifié dans ce contexte" +msgstr "%<omp::%s%> ne peut pas être spécifié dans ce contexte" #: c/c-decl.cc:5555 #, gcc-internal-format @@ -46126,10 +45836,9 @@ msgid "ISO C90 does not support %<_Noreturn%>" msgstr "le C90 ISO ne supporte pas %<_Noreturn%>" #: c/c-decl.cc:8204 -#, fuzzy, gcc-internal-format -#| msgid "variable previously declared %<static%> redeclared %<extern%>" +#, gcc-internal-format msgid "function previously declared %<static%> redeclared %<extern%>" -msgstr "une variable précédemment déclarée %<static%> est redéclarée %<extern%>" +msgstr "une fonction précédemment déclarée %<static%> est redéclarée %<extern%>" #: c/c-decl.cc:8222 #, gcc-internal-format @@ -46338,10 +46047,9 @@ msgid "flexible array member in a struct with no named members" msgstr "tableau flexible comme membre d'une structure sans aucun membre nommé" #: c/c-decl.cc:9519 -#, fuzzy, gcc-internal-format -#| msgid "flexible array member not at end of struct" +#, gcc-internal-format msgid "structure containing a flexible array member is not at the end of another structure" -msgstr "le tableau flexible n'est pas le dernier membre à la fin de la structure" +msgstr "la structure contenant un membre tableau flexible n'est pas le dernier membre à la fin d'une autre structure" #: c/c-decl.cc:9542 #, gcc-internal-format @@ -46359,16 +46067,14 @@ msgid "union cannot be made transparent" msgstr "une union ne peut pas être rendue transparente" #: c/c-decl.cc:9686 -#, fuzzy, gcc-internal-format -#| msgid "redefinition of typedef %q+D with variably modified type" +#, gcc-internal-format msgid "redefinition of struct or union %qT with variably modified type" -msgstr "redéfinition du typedef %q+D avec un type modifié par une variable" +msgstr "redéfinition d'une struct ou union %qT avec un type modifié par une variable" #: c/c-decl.cc:9689 -#, fuzzy, gcc-internal-format -#| msgid "redefinition of %<struct %E%>" +#, gcc-internal-format msgid "redefinition of struct or union %qT" -msgstr "redéfinition de %<struct %E%>" +msgstr "redéfinition d'une struct ou union %qT" #: c/c-decl.cc:9852 #, gcc-internal-format @@ -46401,10 +46107,9 @@ msgid "enumeration values exceed range of %qs" msgstr "les valeurs de l'énumération excèdent la plage de %qs" #: c/c-decl.cc:10133 -#, fuzzy, gcc-internal-format -#| msgid "nested redefinition of %<enum %E%>" +#, gcc-internal-format msgid "conflicting redefinition of enum %qT" -msgstr "redéfinition imbriquée de %<enum %E%>" +msgstr "redéfinition de enum %qT conflictuelle" #: c/c-decl.cc:10165 c/c-decl.cc:10181 #, gcc-internal-format @@ -46432,10 +46137,9 @@ msgid "enumerator value outside the range of %qs" msgstr "la valeur de l'énumération est en dehors de la plage de %qs" #: c/c-decl.cc:10241 -#, fuzzy, gcc-internal-format -#| msgid "ISO C restricts enumerator values to range of %<int%> before C2X" +#, gcc-internal-format msgid "ISO C restricts enumerator values to range of %<int%> before C23" -msgstr "le C ISO restreint les valeurs de l'énumérateur à la plage d'un %<int%> avant C2X" +msgstr "le C ISO restreint les valeurs de l'énumérateur à la plage d'un %<int%> avant C23" #: c/c-decl.cc:10442 cp/decl.cc:5981 cp/decl.cc:17785 #, gcc-internal-format @@ -46498,10 +46202,9 @@ msgid "traditional C rejects ISO C style function definitions" msgstr "le C traditionnel rejette les définitions de fonctions de style C ISO" #: c/c-decl.cc:10696 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support omitting parameter names in function definitions before C2X" +#, gcc-internal-format msgid "ISO C does not support omitting parameter names in function definitions before C23" -msgstr "le C ISO ne supporte pas l'omission des noms des paramètres dans les définitions de fonctions avant C2X" +msgstr "le C ISO ne supporte pas l'omission des noms des paramètres dans les définitions de fonctions avant C23" #: c/c-decl.cc:10736 c/c-decl.cc:10740 #, gcc-internal-format @@ -46706,10 +46409,9 @@ msgid "ISO C90 does not support boolean types" msgstr "le C90 ISO ne supporte pas les types booléens" #: c/c-decl.cc:12451 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support the %<_Float%d%s%> type" +#, gcc-internal-format msgid "ISO C does not support the %<_Float%d%s%> type before C23" -msgstr "le C ISO ne supporte pas le type %<_Float%d%s%>" +msgstr "le C ISO ne supporte pas le type %<_Float%d%s%> avant C23" #: c/c-decl.cc:12502 cp/parser.cc:20288 #, gcc-internal-format @@ -46717,10 +46419,9 @@ msgid "%<_Float%d%s%> is not supported on this target" msgstr "%<_Float%d%s%> n'est pas supporté sur cette cible" #: c/c-decl.cc:12573 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support decimal floating-point before C2X" +#, gcc-internal-format msgid "ISO C does not support decimal floating-point before C23" -msgstr "le C ISO ne supporte pas les virgules flottantes décimales avant C2X" +msgstr "le C ISO ne supporte pas les virgules flottantes décimales avant C23" #: c/c-decl.cc:12597 c/c-decl.cc:12974 c/c-parser.cc:10628 #, gcc-internal-format @@ -46733,21 +46434,19 @@ msgid "ISO C does not support fixed-point types" msgstr "le C ISO ne supporte pas les types en virgule fixe" #: c/c-decl.cc:12628 -#, fuzzy, gcc-internal-format -#| msgid "case label is not an integer constant expression" +#, gcc-internal-format msgid "%<_BitInt%> argument is not an integer constant expression" -msgstr "l'étiquette du « case » doit être une expression constante entière" +msgstr "l'argument %<_BitInt%> n'est pas une expression constante entière" #: c/c-decl.cc:12634 -#, fuzzy, gcc-internal-format -#| msgid "enumerator value for %qE is not an integer constant expression" +#, gcc-internal-format msgid "%<_BitInt%> argument %qE is not a positive integer constant expression" -msgstr "la valeur de l'énumérateur pour %qE n'est pas une expression constante entière" +msgstr "l'argument %<_BitInt%> %qE n'est pas une expression constante entière positive" #: c/c-decl.cc:12641 #, gcc-internal-format msgid "%<_BitInt%> argument %qE is larger than %<BITINT_MAXWIDTH%> %qd" -msgstr "" +msgstr "l'argument %<_BitInt%> %qE est plus grand que %<BITINT_MAXWIDTH%> %qd" #: c/c-decl.cc:12689 #, gcc-internal-format @@ -46847,10 +46546,9 @@ msgid "ISO C does not support plain %<complex%> meaning %<double complex%>" msgstr "le C ISO ne supporte pas un simple %<complex%> signifiant %<double complex%>" #: c/c-decl.cc:12997 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %<auto%> type deduction before C2X" +#, gcc-internal-format msgid "ISO C does not support %<auto%> type deduction before C23" -msgstr "le C ISO ne supporte pas la déduction de type avec %<auto%> avant C2X" +msgstr "le C ISO ne supporte pas la déduction de type avec %<auto%> avant C23" #: c/c-decl.cc:13026 #, gcc-internal-format @@ -46863,16 +46561,14 @@ msgid "ISO C does not support complex integer types" msgstr "le C ISO interdit les types entiers complexes" #: c/c-decl.cc:13237 -#, fuzzy, gcc-internal-format -#| msgid "Fixed line length must be at least seven" +#, gcc-internal-format msgid "%<signed _BitInt%> argument must be at least 2" -msgstr "La longueur de ligne fixe doit être au moins sept" +msgstr "l'argument de %<signed _BitInt%> doit être au moins 2" #: c/c-decl.cc:13246 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ does not support %<__int%d%> for %qs" +#, gcc-internal-format msgid "ISO C does not support %<%s_BitInt(%d)%> before C23" -msgstr "le C++ ISO ne supporte pas %<__int%d%> pour %qs" +msgstr "le C ISO ne supporte pas %<%s_BitInt(%d)%> avant C23" #: c/c-decl.cc:13545 cp/semantics.cc:6316 #, gcc-internal-format @@ -47159,10 +46855,9 @@ msgid "%<__GIMPLE%> only valid with %<-fgimple%>" msgstr "%<__GIMPLE%> uniquement valable avec %<-fgimple%>" #: c/c-parser.cc:3699 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support specifying %<enum%> underlying types before C2X" +#, gcc-internal-format msgid "ISO C does not support specifying %<enum%> underlying types before C23" -msgstr "le C ISO ne supporte pas de spécifier les types sous-jacents de %<enum%> avant C2X" +msgstr "le C ISO ne supporte pas de spécifier les types sous-jacents de %<enum%> avant C23" #: c/c-parser.cc:3708 #, gcc-internal-format @@ -47269,10 +46964,9 @@ msgid "expected identifier or %<(%>" msgstr "identificateur ou %<(%> attendu" #: c/c-parser.cc:4920 -#, fuzzy, gcc-internal-format -#| msgid "ISO C requires a named argument before %<...%> before C2X" +#, gcc-internal-format msgid "ISO C requires a named argument before %<...%> before C23" -msgstr "le C ISO requiert un argument nommé devant %<...%> avant C2X" +msgstr "le C ISO requiert un argument nommé devant %<...%> avant C23" #: c/c-parser.cc:5045 #, gcc-internal-format @@ -47305,10 +46999,9 @@ msgid "%qE attribute does not take any arguments" msgstr "l'attribut %qE ne prend pas d'argument" #: c/c-parser.cc:5893 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %<[[]]%> attributes before C2X" +#, gcc-internal-format msgid "ISO C does not support %<[[]]%> attributes before C23" -msgstr "le C ISO ne supporte pas les attributs %<[[]]%> avant C2X" +msgstr "le C ISO ne supporte pas les attributs %<[[]]%> avant C23" #: c/c-parser.cc:6106 c/c-parser.cc:6169 c/c-typeck.cc:8822 #, gcc-internal-format @@ -47316,10 +47009,9 @@ msgid "variable-sized object may not be initialized except with an empty initial msgstr "un objet de taille variable ne peut pas être initialisé excepté avec un initialiseur vide" #: c/c-parser.cc:6163 -#, fuzzy, gcc-internal-format -#| msgid "ISO C forbids empty initializer braces before C2X" +#, gcc-internal-format msgid "ISO C forbids empty initializer braces before C23" -msgstr "le C ISO interdit d'initialiser avec des accolades vides avant C2X" +msgstr "le C ISO interdit d'initialiser avec des accolades vides avant C23" #: c/c-parser.cc:6227 #, gcc-internal-format @@ -47342,22 +47034,19 @@ msgid "obsolete use of designated initializer without %<=%>" msgstr "utilisation obsolète d'une initialisation désignée sans %<=%>" #: c/c-parser.cc:6567 cp/parser.cc:13308 -#, fuzzy, gcc-internal-format -#| msgid "no valid clauses specified in %<#pragma acc declare%>" +#, gcc-internal-format msgid "inner loops must be perfectly nested in %<#pragma acc loop%>" -msgstr "pas de clause valide spécifiée dans %<#pragma acc declare%>" +msgstr "les boucles internes doivent être parfaitement imbriquées dans %<#pragma acc loop%>" #: c/c-parser.cc:6574 cp/parser.cc:13315 -#, fuzzy, gcc-internal-format -#| msgid "%<ordered%> region must be closely nested inside a loop region with an %<ordered%> clause" +#, gcc-internal-format msgid "inner loops must be perfectly nested with %<ordered%> clause" -msgstr "une région %<ordered%> doit être étroitement imbriquée à l'intérieur d'une région de boucle avec la clause %<ordered%>" +msgstr "les boucles internes doivent être parfaitement imbriquées avec la clause %<ordered%>" #: c/c-parser.cc:6581 cp/parser.cc:13322 -#, fuzzy, gcc-internal-format -#| msgid "%<nogroup%> clause must not be used together with %<reduction%> clause" +#, gcc-internal-format msgid "inner loops must be perfectly nested with %<reduction%> %<inscan%> clause" -msgstr "la clause %<nogroup%> ne doit pas être utilisée avec la clause %<reduction%>" +msgstr "les boucles internes doivent être parfaitement imbriquées avec la clause %<reduction%> %<inscan%>" #: c/c-parser.cc:6638 c/c-parser.cc:6793 cp/parser.cc:12240 cp/parser.cc:12390 #: cp/parser.cc:48555 @@ -47366,17 +47055,15 @@ msgid "mixing OpenMP directives with attribute and pragma syntax on the same sta msgstr "mélange de directives OpenMP avec des attributs et la syntaxe pragma sur la même instruction" #: c/c-parser.cc:6646 cp/parser.cc:12248 -#, fuzzy, gcc-internal-format -#| msgid "%<omp::%E%> attribute requires argument" +#, gcc-internal-format msgid "OpenMP %<omp::decl%> attribute on a statement" -msgstr "l'attribut %<omp::%E%> requiert un argument" +msgstr "attribut OpenMP %<omp::decl%> sur une instruction" #: c/c-parser.cc:6670 c/c-parser.cc:6889 c/c-parser.cc:25015 cp/parser.cc:12272 #: cp/parser.cc:48535 cp/parser.cc:48675 -#, fuzzy, gcc-internal-format -#| msgid "unknown OpenMP directive name in %qs clause argument" +#, gcc-internal-format msgid "unknown OpenMP directive name in %qs attribute argument" -msgstr "nom de directive OpenMP inconnue dans l'argument de la clause %qs" +msgstr "nom de directive OpenMP inconnue dans l'argument de l'attribut %qs" #: c/c-parser.cc:6762 cp/parser.cc:12359 #, gcc-internal-format @@ -47845,16 +47532,14 @@ msgid "wrong number of arguments to %<__builtin_shuffle%>" msgstr "mauvais nombre d'arguments pour %<__builtin_shuffle%>" #: c/c-parser.cc:11851 -#, fuzzy, gcc-internal-format -#| msgid "wrong number of arguments" +#, gcc-internal-format msgid "wrong number of arguments to %qs" -msgstr "nombre d'arguments erroné" +msgstr "nombre d'arguments erroné pour %qs" #: c/c-parser.cc:11860 -#, fuzzy, gcc-internal-format -#| msgid "%qD does not have integral type" +#, gcc-internal-format msgid "%qs operand not an integral type" -msgstr "%qD n'a pas un type entier" +msgstr "l'opérande %qs n'est pas un type intégral" #: c/c-parser.cc:12123 cp/parser.cc:6134 #, gcc-internal-format @@ -47862,10 +47547,9 @@ msgid "%<omp_all_memory%> may only be used in OpenMP %<depend%> clause" msgstr "%<omp_all_memory%> peut uniquement être utilisé dans la clause OpenMP %<depend%>" #: c/c-parser.cc:12133 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %qs before C2X" +#, gcc-internal-format msgid "ISO C does not support %qs before C23" -msgstr "le C ISO ne supporte pas %qs avant C2X" +msgstr "le C ISO ne supporte pas %qs avant C23" #: c/c-parser.cc:12221 #, gcc-internal-format @@ -47898,10 +47582,9 @@ msgid "ISO C90 forbids compound literals" msgstr "le C90 ISO interdit les littéraux composés" #: c/c-parser.cc:12284 -#, fuzzy, gcc-internal-format -#| msgid "ISO C forbids storage class specifiers in compound literals before C2X" +#, gcc-internal-format msgid "ISO C forbids storage class specifiers in compound literals before C23" -msgstr "le C ISO interdit les spécificateurs de classe de stockage dans les littéraux composés avant C2X" +msgstr "le C ISO interdit les spécificateurs de classe de stockage dans les littéraux composés avant C23" #: c/c-parser.cc:12298 #, gcc-internal-format @@ -48142,10 +47825,9 @@ msgid "expected %<none%>, %<shared%>, %<private%> or %<firstprivate%>" msgstr "%<none%>, %<shared%>, %<private%> ou %<firstprivate%> attendu" #: c/c-parser.cc:15925 cp/parser.cc:39100 -#, fuzzy, gcc-internal-format -#| msgid "expected goto expression" +#, gcc-internal-format msgid "expected constant logical expression" -msgstr "expression « goto » attendue" +msgstr "expression logique constante attendue" #: c/c-parser.cc:16002 cp/parser.cc:39182 #, gcc-internal-format @@ -48217,10 +47899,9 @@ msgid "expected %<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<non msgstr "%<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<none%> ou %<default%> attendu" #: c/c-parser.cc:16552 -#, fuzzy, gcc-internal-format -#| msgid "expected %<scalar%>, %<aggregate%> or %<pointer%>" +#, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<pointer%> or %<all%>" -msgstr "%<scalar%>, %<aggregate%> ou %<pointer%> attendu" +msgstr "%<scalar%>, %<aggregate%>, %<pointer%> ou %<all%> attendu" #: c/c-parser.cc:16629 cp/parser.cc:39718 #, gcc-internal-format @@ -48259,10 +47940,9 @@ msgid "%<tile%> argument needs positive integral constant" msgstr "l'argument %<tile%> a besoin d'une constante entière positive" #: c/c-parser.cc:17059 cp/parser.cc:41829 -#, fuzzy, gcc-internal-format -#| msgid "too many %<if%> clauses" +#, gcc-internal-format msgid "too many %<self%> clauses" -msgstr "trop de clauses %<if%>" +msgstr "trop de clauses %<self%>" #: c/c-parser.cc:17101 cp/parser.cc:39771 #, gcc-internal-format @@ -48406,16 +48086,14 @@ msgid "too many %<close%> modifiers" msgstr "trop de modificateurs %<close%>" #: c/c-parser.cc:18792 cp/parser.cc:41456 -#, fuzzy, gcc-internal-format -#| msgid "too many %<close%> modifiers" +#, gcc-internal-format msgid "too many %<present%> modifiers" -msgstr "trop de modificateurs %<close%>" +msgstr "trop de modificateurs %<present%>" #: c/c-parser.cc:18800 cp/parser.cc:41467 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp target%> with modifier other than %<always%> or %<close%> on %<map%> clause" +#, gcc-internal-format msgid "%<map%> clause with map-type modifier other than %<always%>, %<close%> or %<present%>" -msgstr "%<#pragma omp target%> avec un modificateur autre que %<always%> ou %<close%> sur une clause %<map%>" +msgstr "clause %<map%> avec un modificateur de type map autre que %<always%>, %<close%> ou %<present%>" #: c/c-parser.cc:18838 cp/parser.cc:41507 #, gcc-internal-format @@ -48458,10 +48136,9 @@ msgid "%<detach%> clause event handle has type %qT rather than %<omp_event_handl msgstr "le gestionnaire d'événement de la clause %<detach%> a le type %qT plutôt que %<omp_event_handle_t%>" #: c/c-parser.cc:19391 cp/parser.cc:42045 -#, fuzzy, gcc-internal-format -#| msgid "expected assumption clause" +#, gcc-internal-format msgid "expected an OpenACC clause" -msgstr "clause de présomption attendue" +msgstr "clause OpenACC attendue" #: c/c-parser.cc:19402 c/c-parser.cc:19767 cp/parser.cc:42056 #: cp/parser.cc:42464 @@ -48480,10 +48157,9 @@ msgid "%qs must be the first clause of %qs" msgstr "%qs doit être la première clause de %qs" #: c/c-parser.cc:19756 cp/parser.cc:42453 -#, fuzzy, gcc-internal-format -#| msgid "expected assumption clause" +#, gcc-internal-format msgid "expected an OpenMP clause" -msgstr "clause de présomption attendue" +msgstr "clause OpenMP attendue" #: c/c-parser.cc:19891 cp/parser.cc:47284 #, gcc-internal-format @@ -48581,27 +48257,24 @@ msgid "%<#pragma acc update%> must contain at least one %<device%> or %<host%> o msgstr "%<#pragma acc update%> doit contenir au moins une clause %<device%> ou %<host%> ou %<self%>" #: c/c-parser.cc:20558 -#, fuzzy, gcc-internal-format -#| msgid "variables in %<__regio_symbol%> address space must be declared %<extern%>" +#, gcc-internal-format msgid "variable %qD used in the %<allocator%> clause must be declared before %qD" -msgstr "les variables dans l'espace d'adresses de %<__regio_symbol%> doivent être déclarées %<extern%>" +msgstr "la variable %qD utilisée dans la clause %<allocator%> doit être déclarée avant %qD" #: c/c-parser.cc:20562 c/c-parser.cc:20585 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "to be allocated variable declared here" -msgstr "le paramètre de patron %qD est déclaré ici" +msgstr "la variable à allouer est déclarée ici" #: c/c-parser.cc:20580 #, gcc-internal-format msgid "variable %qD used in the %<allocator%> clause must not be modified between declaration of %qD and its %<allocate%> directive" -msgstr "" +msgstr "la variable %qD utilisée dans la clause %<allocator%> ne peut pas être modifiée entre la déclaration de %qD et sa directive %<allocate%>" #: c/c-parser.cc:20583 -#, fuzzy, gcc-internal-format -#| msgid "defined here" +#, gcc-internal-format msgid "modified here" -msgstr "défini ici" +msgstr "modifié ici" #: c/c-parser.cc:20651 cp/parser.cc:42578 cp/parser.cc:42593 #, gcc-internal-format @@ -48614,39 +48287,34 @@ msgid "%<allocator%> clause allocator expression has type %qT rather than %<omp_ msgstr "l'expression d'allocation de la clause %<allocator%> a le type %qT plutôt que %<omp_allocator_handle_t%>" #: c/c-parser.cc:20692 -#, fuzzy, gcc-internal-format -#| msgid "parameter %qD may not appear in this context" +#, gcc-internal-format msgid "function parameter %qD may not appear as list item in an %<allocate%> directive" -msgstr "le paramètre %qD ne peut pas apparaître dans ce contexte" +msgstr "le paramètre %qD de la fonction ne peut pas apparaître comme élément de liste dans une directive %<allocate%>" #: c/c-parser.cc:20699 -#, fuzzy, gcc-internal-format -#| msgid "deduction guide %qD must be declared in the same scope as %qT" +#, gcc-internal-format msgid "%<allocate%> directive must be in the same scope as %qD" -msgstr "le guide de déduction %qD doit être déclaré dans la même portée que %qT" +msgstr "la directive %<allocate%> doit être dans la même portée que %qD" #: c/c-parser.cc:20707 -#, fuzzy, gcc-internal-format -#| msgid "%qD appears more than once in %<allocate%> clauses" +#, gcc-internal-format msgid "%qD already appeared as list item in an %<allocate%> directive" -msgstr "%qD apparaît plus d'une fois dans les clauses %<allocate%>" +msgstr "%qD est déjà apparu comme élément liste dans une directive %<allocate%>" #: c/c-parser.cc:20714 #, gcc-internal-format msgid "%<allocator%> clause required for static variable %qD" -msgstr "" +msgstr "clause %<allocator%> requise pour la variable statique %qD" #: c/c-parser.cc:20721 -#, fuzzy, gcc-internal-format -#| msgid "%<allocate%> clause must specify an allocator here" +#, gcc-internal-format msgid "%<allocator%> clause requires a predefined allocator as %qD is static" -msgstr "la clause %<allocate%> doit spécifier un allocateur ici" +msgstr "la clause %<allocator%> requiert un allocateur prédéfini car %qD est statique" #: c/c-parser.cc:20725 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp allocate%> not yet supported" +#, gcc-internal-format msgid "%<#pragma omp allocate%> for static variables like %qD not yet supported" -msgstr "%<#pragma omp allocated%> n'est pas encore supporté" +msgstr "%<#pragma omp allocate%> pour des variables statiques comme %qD n'est pas encore supporté" #: c/c-parser.cc:20876 cp/parser.cc:42758 #, gcc-internal-format @@ -48686,16 +48354,14 @@ msgid "%qs clause requires %qs clause" msgstr "la clause %qs requiert la clause %qs" #: c/c-parser.cc:21040 cp/parser.cc:42927 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause" +#, gcc-internal-format msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause implicitly provided by a %<requires%> directive" -msgstr "%<#pragma omp atomic write%> est incompatible avec la clause %<acquire%>" +msgstr "%<#pragma omp atomic write%> est incompatible avec la clause %<acquire%> fournie implicitement par une directive %<requires%>" #: c/c-parser.cc:21051 cp/parser.cc:42938 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause" +#, gcc-internal-format msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause implicitly provided by a %<requires%> directive" -msgstr "%<#pragma omp atomic read%> est incompatible avec la clause %<release%>" +msgstr "%<#pragma omp atomic read%> est incompatible avec la clause %<release%> fournie implicitement par une directive %<requires%>" #: c/c-parser.cc:21083 cp/parser.cc:42970 #, gcc-internal-format @@ -48759,15 +48425,14 @@ msgid "%<depobj%> expression is not lvalue expression" msgstr "l'expression %<depobj%> n'est pas une expression l-valeur" #: c/c-parser.cc:21845 -#, fuzzy, gcc-internal-format -#| msgid "%<depobj%> expression is not lvalue expression" +#, gcc-internal-format msgid "%<destroy%> expression is not lvalue expression" -msgstr "l'expression %<depobj%> n'est pas une expression l-valeur" +msgstr "l'expression %<destroy%> n'est pas une expression l-valeur" #: c/c-parser.cc:21851 cp/parser.cc:43744 #, gcc-internal-format msgid "the %<destroy%> expression %qE should be the same as the %<depobj%> argument %qE" -msgstr "" +msgstr "l'expression %<destroy%> %qE devrait être la même que l'argument %<depobj%> %qE" #: c/c-parser.cc:21882 cp/parser.cc:43780 #, gcc-internal-format @@ -48800,10 +48465,9 @@ msgid "%<[[omp::directive(%s)]]%> must be the only specified attribute on a stat msgstr "%<[[omp::directive(%s)]]%> doit être le seul attribut spécifié dans une instruction" #: c/c-parser.cc:22086 cp/parser.cc:44617 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp taskwait%> may only be used in compound statements" +#, gcc-internal-format msgid "%<#pragma omp scan%> with zero preceding executable statements" -msgstr "%<#pragma omp taskwait%> ne peut être utilisé que dans des instructions composées" +msgstr "%<#pragma omp scan%> avec zéro instruction exécutable précédente" #: c/c-parser.cc:22120 cp/parser.cc:44650 #, gcc-internal-format @@ -48816,10 +48480,9 @@ msgid "expected %<#pragma omp scan%>" msgstr "%<#pragma omp scan%> attendu" #: c/c-parser.cc:22134 cp/parser.cc:44665 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp taskwait%> may only be used in compound statements" +#, gcc-internal-format msgid "%<#pragma omp scan%> with zero succeeding executable statements" -msgstr "%<#pragma omp taskwait%> ne peut être utilisé que dans des instructions composées" +msgstr "%<#pragma omp scan%> avec zéro instruction exécutable suivante" #: c/c-parser.cc:22252 cp/semantics.cc:10734 cp/semantics.cc:10819 #, gcc-internal-format @@ -48828,10 +48491,9 @@ msgstr "déclaration ou initialisation d'itération attendue" #: c/c-parser.cc:22340 c/c-parser.cc:22355 cp/parser.cc:45012 #: cp/parser.cc:45027 -#, fuzzy, gcc-internal-format -#| msgid "not enough perfectly nested loops" +#, gcc-internal-format msgid "not enough nested loops" -msgstr "pas assez de boucles parfaitement imbriquées" +msgstr "pas assez de boucles imbriquées" #: c/c-parser.cc:22455 cp/parser.cc:45299 #, gcc-internal-format @@ -48919,10 +48581,9 @@ msgid "expected trait selector name" msgstr "nom de sélecteur de trait attendu" #: c/c-parser.cc:24542 cp/parser.cc:47860 -#, fuzzy, gcc-internal-format -#| msgid "selector %qs not allowed for context selector set %qs" +#, gcc-internal-format msgid "unknown selector %qs for context selector set %qs" -msgstr "sélecteur %qs pas permis pour l'ensemble %qs du sélecteur de contexte" +msgstr "sélecteur %qs inconnu pour l'ensemble %qs du sélecteur de contexte" #: c/c-parser.cc:24570 cp/parser.cc:47889 #, gcc-internal-format @@ -48930,22 +48591,19 @@ msgid "selector %qs does not accept any properties" msgstr "le sélecteur %qs n'accepte aucune propriété" #: c/c-parser.cc:24592 cp/parser.cc:47921 -#, fuzzy, gcc-internal-format -#| msgid "%<friend%> can only be specified inside a class" +#, gcc-internal-format msgid "%<score%> cannot be specified in traits in the %qs trait-selector-set" -msgstr "%<friend%> peut seulement être spécifié à l'intérieur d'une classe" +msgstr "%<score%> ne peut pas être spécifié dans les traits dans le trait-selector-set %qs" #: c/c-parser.cc:24601 cp/parser.cc:47931 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be constant integer expression" +#, gcc-internal-format msgid "%<score%> argument must be constant integer expression" -msgstr "l'argument du score doit être une expression entière constante" +msgstr "l'argument %<score%> doit être une expression entière constante" #: c/c-parser.cc:24604 cp/parser.cc:47934 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be non-negative" +#, gcc-internal-format msgid "%<score%> argument must be non-negative" -msgstr "l'argument du score doit être non négatif" +msgstr "l'argument %<score%> doit être non négatif" #: c/c-parser.cc:24645 cp/parser.cc:47980 #, gcc-internal-format @@ -48966,16 +48624,14 @@ msgstr "les propriétés pour le sélecteur %<simd%> ne peuvent pas être spéci #. Currently only the now-deprecated syntax #. from OpenMP 5.0 is supported. #: c/c-parser.cc:24705 cp/parser.cc:48035 fortran/openmp.cc:5891 -#, fuzzy, gcc-internal-format -#| msgid "%qs clause on %<requires%> directive not supported yet" +#, gcc-internal-format msgid "%<requires%> selector is not supported yet" -msgstr "la clause %qs sur la directive %<requires%> n'est pas encore supportée" +msgstr "le sélecteur %<requires%> n'est pas encore supportée" #: c/c-parser.cc:24764 cp/parser.cc:48098 -#, fuzzy, gcc-internal-format -#| msgid "expected trait selector name" +#, gcc-internal-format msgid "expected context selector set name" -msgstr "nom de sélecteur de trait attendu" +msgstr "nom de l'ensemble du sélecteur de contexte attendu" #: c/c-parser.cc:24841 cp/parser.cc:48413 #, gcc-internal-format @@ -49018,16 +48674,14 @@ msgid "%qD specified both in declare target %<link%> and %<to%> or %<enter%> cla msgstr "%qD est spécifié à la fois dans les clauses declare target %<link%> et %<to%> ou des clauses %<enter%>" #: c/c-parser.cc:25199 cp/parser.cc:48882 -#, fuzzy, gcc-internal-format -#| msgid "directive with only %<device_type%> clause" +#, gcc-internal-format msgid "directive with only %<device_type%> or %<indirect%> clauses" -msgstr "la directive avec uniquement des clauses %<device_type%>" +msgstr "la directive avec uniquement des clauses %<device_type%> ou %<indirect%>" #: c/c-parser.cc:25202 cp/parser.cc:48885 -#, fuzzy, gcc-internal-format -#| msgid "%<detach%> clause must not be used together with %<mergeable%> clause" +#, gcc-internal-format msgid "%<device_type%> clause must specify 'any' when used with an %<indirect%> clause" -msgstr "la clause %<detach%> ne doit pas être utilisée avec la clause %<mergeable%>" +msgstr "la clause %<device_type%> doit spécifier « any » lorsqu'elle est utilisée avec une clause %<indirect%>" #: c/c-parser.cc:25251 c/c-parser.cc:25293 cp/parser.cc:48940 #: cp/parser.cc:48987 @@ -49118,10 +48772,9 @@ msgid "expected %<simd%>, %<reduction%>, %<target%> or %<variant%>" msgstr "%<simd%>, %<reduction%>, %<target%> ou %<variant%> attendu" #: c/c-parser.cc:25837 cp/parser.cc:49589 -#, fuzzy, gcc-internal-format -#| msgid "expected %<seq_cst%>, %<acq_rel%>, %<release%> or %<acquire%>" +#, gcc-internal-format msgid "expected %<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> or %<seq_cst%>" -msgstr "%<seq_cst%>, %<acq_rel%>, %<release%> ou %<acquire%> attendu" +msgstr "%<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> ou %<seq_cst%> attendu" #: c/c-parser.cc:25866 cp/parser.cc:49624 #, gcc-internal-format @@ -49322,13 +48975,12 @@ msgstr "les opérandes de types décimaux flottants ne peuvent pas être mélang #: c/c-typeck.cc:926 #, gcc-internal-format msgid "%<_Complex _BitInt(%d)%> unsupported" -msgstr "" +msgstr "%<_Complex _BitInt(%d)%> non supporté" #: c/c-typeck.cc:1472 -#, fuzzy, gcc-internal-format -#| msgid "invalid use of pointers to arrays with different qualifiers in ISO C before C2X" +#, gcc-internal-format msgid "invalid use of pointers to arrays with different qualifiers in ISO C before C23" -msgstr "l'utilisation de pointeurs vers des tableaux ayant des qualificatifs différent est interdite en ISO C avant C2X" +msgstr "l'utilisation de pointeurs vers des tableaux ayant des qualificatifs différent est interdite en ISO C avant C23" #: c/c-typeck.cc:1476 #, gcc-internal-format diff --git a/gcc/po/sv.po b/gcc/po/sv.po index 536fe50f1c08..072bedbd9d5a 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -32,7 +32,7 @@ msgstr "" "Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2024-03-10 13:32+0100\n" +"PO-Revision-Date: 2024-03-17 20:14+0100\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -20199,22 +20199,16 @@ msgid "invalid conversion to type %<__bf16%> without option %<-msse2%>" msgstr "ogiltig konvertering till typen %<__bf16%> utan flaggan %<-msse2%>" #: config/i386/i386.cc:23587 -#, fuzzy -#| msgid "invalid conversion to type %<bfloat16_t%>" msgid "invalid conversion to type %<_Float16%> without option %<-msse2%>" -msgstr "ogiltig konvertering till typen %<bfloat16_t%>" +msgstr "ogiltig konvertering till typen %<_Float16%> utan flaggan %<-msse2%>" #: config/i386/i386.cc:23625 config/i386/i386.cc:23650 -#, fuzzy -#| msgid "operation not permitted on type %<bfloat16_t%>" msgid "operation not permitted on type %<__bf16%> without option %<-msse2%>" -msgstr "operationen är inte tillåten på typen %<bfloat16_t%>" +msgstr "operationen är inte tillåten på typen %<bf16%> utan flaggan %<-msse2%>" #: config/i386/i386.cc:23628 config/i386/i386.cc:23654 -#, fuzzy -#| msgid "operation not permitted on type %<bfloat16_t%>" msgid "operation not permitted on type %<_Float16%> without option %<-msse2%>" -msgstr "operationen är inte tillåten på typen %<bfloat16_t%>" +msgstr "operationen är inte tillåten på typen %<_Float16%> utan flaggan %<-msse2%>" #: config/ia64/ia64.cc:5470 #, c-format @@ -20847,10 +20841,9 @@ msgid "'o' operand is not constant" msgstr "”o”-operand är ej konstant" #: config/stormy16/stormy16.cc:1980 -#, fuzzy, c-format -#| msgid "'B' operand is not constant" +#, c-format msgid "'h' operand is not SImode register" -msgstr "”B”-operand är ej konstant" +msgstr "”h”-operand är ej ett SImode-register" #: config/stormy16/stormy16.cc:1988 #, c-format @@ -21307,10 +21300,8 @@ msgid "In lambda function" msgstr "I lambdafunktion" #: cp/error.cc:3712 -#, fuzzy -#| msgid "In static member function %qD" msgid "In explicit object member function %qD" -msgstr "I statisk medlemsfunktion %qD" +msgstr "I explicit objektmedlemsfunktion %qD" #: cp/error.cc:3714 msgid "In member function %qD" @@ -21509,16 +21500,12 @@ msgstr "" "\n" #: fortran/error.cc:1043 -#, fuzzy -#| msgid "new in Fortran 2003" msgid "Prohibited in Fortran 2023:" -msgstr "nytt i Fortran 2003" +msgstr "Förbjudet i Fortran 2023:" #: fortran/error.cc:1045 -#, fuzzy -#| msgid "Fortran 2018:" msgid "Fortran 2023:" -msgstr "Fortran 2018:" +msgstr "Fortran 2023:" #: fortran/error.cc:1047 msgid "Fortran 2018 deleted feature:" @@ -21614,10 +21601,8 @@ msgid "new in Fortran 2018" msgstr "nytt i Fortran 2018" #: fortran/intrinsic.cc:4896 -#, fuzzy -#| msgid "new in Fortran 2003" msgid "new in Fortran 2023" -msgstr "nytt i Fortran 2003" +msgstr "nytt i Fortran 2023" #: fortran/intrinsic.cc:4900 msgid "a GNU Fortran extension" @@ -22150,10 +22135,8 @@ msgid "value computed is not used" msgstr "beräknat värde används inte" #: go/gofrontend/expressions.cc:1986 -#, fuzzy -#| msgid "expected function name" msgid "unexpected reference to package" -msgstr "ett funktionsnamn förväntades" +msgstr "oväntad referens till ett paket" #: go/gofrontend/expressions.cc:3840 go/gofrontend/expressions.cc:3856 msgid "constant refers to itself" @@ -22346,22 +22329,16 @@ msgid "attempt to index object that is not array, slice, string, or map" msgstr "försök att indexera objekt som inte är en vektor, skiva, sträng eller avbildning" #: go/gofrontend/expressions.cc:14730 -#, fuzzy -#| msgid "expected integer expression" msgid "attempt to index type expression" -msgstr "heltalsuttryck förväntades" +msgstr "försök att indexera ett typuttryck" #: go/gofrontend/expressions.cc:14757 -#, fuzzy -#| msgid "invalid left hand side of assignment" msgid "invalid 3-index slice of string" -msgstr "ogiltig vänsterhandssida i tilldelning" +msgstr "felaktig 3-indexskiva av en sträng" #: go/gofrontend/expressions.cc:14770 -#, fuzzy -#| msgid "invalid use of type" msgid "invalid slice of map" -msgstr "ogiltig användning av typ" +msgstr "felaktig skiva av en avbildning" #: go/gofrontend/expressions.cc:14779 go/gofrontend/expressions.cc:15970 msgid "incompatible type for map index" @@ -22410,20 +22387,16 @@ msgid "cannot fallthrough final case in switch" msgstr "kan inte falla igenom sista fallet i en switch" #: go/gofrontend/statements.cc:1288 -#, fuzzy -#| msgid "cannot use %qs as a call-used register" msgid "cannot use %<_%> as value" -msgstr "det går inte att använda %qs som ett anropsanvänt register" +msgstr "det går inte att %<_%> som ett värde" #: go/gofrontend/statements.cc:1300 go/gofrontend/statements.cc:2528 msgid "invalid left hand side of assignment" msgstr "ogiltig vänsterhandssida i tilldelning" #: go/gofrontend/statements.cc:1309 -#, fuzzy -#| msgid "incompatible types in binary expression" msgid "incompatible type in binary expression" -msgstr "inkompatibla typer i binärt uttryck" +msgstr "inkompatibel typ i binärt uttryck" #: go/gofrontend/statements.cc:1555 msgid "use of untyped nil" @@ -22434,10 +22407,8 @@ msgid "expected map index on right hand side" msgstr "avbildningsindex förväntades på högersidan" #: go/gofrontend/statements.cc:2534 -#, fuzzy -#| msgid "no pre-increment operator for type" msgid "increment or decrement of non-numeric type" -msgstr "ingen pre-ökningsoperator för typen" +msgstr "ökning eller minskning av en icke-numerisk typ" #: go/gofrontend/statements.cc:3449 go/gofrontend/statements.cc:3464 msgid "not enough arguments to return" @@ -22925,7 +22896,7 @@ msgstr "okänd lårtyp (crate): ”%qs”" #: rust/lang.opt:118 #, gcc-internal-format msgid "unknown rust mangling option %qs" -msgstr "okänd rust-manglningsalternativ %qs" +msgstr "okänt rust-manglingsalternativ %qs" #: rust/lang.opt:135 #, gcc-internal-format @@ -22969,16 +22940,14 @@ msgid "missing makefile target after %qs" msgstr "makefile-mål saknas efter %qs" #: c-family/c.opt:260 -#, fuzzy, gcc-internal-format -#| msgid "missing path after %qs" +#, gcc-internal-format msgid "missing format after %qs" -msgstr "sökväg saknas efter %qs" +msgstr "format saknas efter %qs" #: c-family/c.opt:264 -#, fuzzy, gcc-internal-format -#| msgid "missing path after %qs" +#, gcc-internal-format msgid "missing output path after %qs" -msgstr "sökväg saknas efter %qs" +msgstr "utmatningssökväg saknas efter %qs" #: c-family/c.opt:311 #, gcc-internal-format @@ -23056,10 +23025,9 @@ msgid "unknown pointer size model %qs" msgstr "okänd pekarstorlekmodell %qs" #: config/aarch64/aarch64.opt:379 -#, fuzzy, gcc-internal-format -#| msgid "unknown TLS model %qs" +#, gcc-internal-format msgid "unknown LDP/STP policy %qs" -msgstr "okänd TLS-modell %qs" +msgstr "okänd LDP/STP-policy %qs" #: config/i386/i386.opt:340 #, gcc-internal-format @@ -23175,10 +23143,9 @@ msgid "unknown floating point contraction style %qs" msgstr "okänd stil för flyttalssammandragning %qs" #: common.opt:1865 -#, fuzzy, gcc-internal-format -#| msgid "unknown Live-Patching Level %qs" +#, gcc-internal-format msgid "unknown hardcfr noreturn checking level %qs" -msgstr "okänd live-patchnings-nivå %qs" +msgstr "okänd hardcfr noreturn-kontrollnivå %qs" #: common.opt:1900 #, gcc-internal-format @@ -23251,10 +23218,9 @@ msgid "unknown TLS model %qs" msgstr "okänd TLS-modell %qs" #: common.opt:3020 -#, fuzzy, gcc-internal-format -#| msgid "unknown rust mangling option %qs" +#, gcc-internal-format msgid "unknown trampoline implementation %qs" -msgstr "okänd rust-manglningsalternativ %qs" +msgstr "okänd trampolinimplementation %qs" #: common.opt:3342 #, gcc-internal-format @@ -24744,10 +24710,9 @@ msgid "%<alias%> attribute ignored because function is defined" msgstr "attributet %<alias%> ignorerat för att funktionen är definierad" #: cgraphunit.cc:921 -#, fuzzy, gcc-internal-format -#| msgid "%<always_inline%> function might not be inlinable" +#, gcc-internal-format msgid "%<always_inline%> function might not be inlinable unless also declared %<inline%>" -msgstr "%<always_inline%>-funktion kanske inte kan inline:as" +msgstr "%<always_inline%>-funktionen kanske inte kan inline:as om den inte även deklareras %<inline%>" #: cgraphunit.cc:947 #, gcc-internal-format @@ -25001,10 +24966,9 @@ msgid "pointer value used where a floating-point was expected" msgstr "pekarvärde använt där ett flyttalsvärde förväntades" #: convert.cc:338 -#, fuzzy, gcc-internal-format -#| msgid "pointer value used where a floating-point was expected" +#, gcc-internal-format msgid "vector value used where a floating-point was expected" -msgstr "pekarvärde använt där ett flyttalsvärde förväntades" +msgstr "vektorvärde använt där ett flyttalsvärde förväntades" #: convert.cc:342 #, gcc-internal-format @@ -25483,16 +25447,12 @@ msgid "cannot read spec file %qs: %m" msgstr "kan inte läsa spec-filen %qs: %m" #: gcc.cc:2412 gcc.cc:2432 -#, fuzzy -#| msgid "specs %%include syntax malformed after %ld characters" msgid "specs %%include syntax malformed after %td characters" -msgstr "specifikationers %%include-syntax felaktig efter %ld tecken" +msgstr "specifikationers %%include-syntax felaktig efter %td tecken" #: gcc.cc:2458 gcc.cc:2467 gcc.cc:2477 gcc.cc:2487 -#, fuzzy -#| msgid "specs %%rename syntax malformed after %ld characters" msgid "specs %%rename syntax malformed after %td characters" -msgstr "specifikationers %%rename-syntax felaktig efter %ld tecken" +msgstr "specifikationers %%rename-syntax felaktig efter %td tecken" #: gcc.cc:2497 #, gcc-internal-format, gfc-internal-format @@ -25505,16 +25465,12 @@ msgid "%s: attempt to rename spec %qs to already defined spec %qs" msgstr "%s: försök att byta namn på specifikation %qs till redan definierad specifikation %qs" #: gcc.cc:2527 -#, fuzzy -#| msgid "specs unknown %% command after %ld characters" msgid "specs unknown %% command after %td characters" -msgstr "specifikationer okänt %%-kommando efter %ld tecken" +msgstr "specifikationer okänt %%-kommando efter %td tecken" #: gcc.cc:2539 gcc.cc:2553 -#, fuzzy -#| msgid "specs file malformed after %ld characters" msgid "specs file malformed after %td characters" -msgstr "specifikationsfil felaktig efter %ld tecken" +msgstr "specifikationsfil felaktig efter %td tecken" #: gcc.cc:2608 #, gcc-internal-format @@ -27624,10 +27580,9 @@ msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" msgstr "gimple-kontroll: %s(%s) förväntades, har %s(%s) i %s, vid %s:%d" #: gimplify.cc:1399 -#, fuzzy, gcc-internal-format -#| msgid "%<allocate%> clause must specify an allocator here" +#, gcc-internal-format msgid "%<allocate%> directive for %qD inside a target region must specify an %<allocator%> clause" -msgstr "%<allocate%>-klausulen måste ange en allokerare här" +msgstr "direktivet %<allocate%> för %qD inuti en målregion måste ange en klausul %<allocator%>" #: gimplify.cc:2271 #, gcc-internal-format @@ -27727,16 +27682,14 @@ msgid "%qE not specified in enclosing OpenACC %qs construct" msgstr "%qE inte angiven i omgivande OpenACC %qs-konstruktion" #: gimplify.cc:8056 -#, fuzzy, gcc-internal-format -#| msgid "enclosing OpenACC %qs construct" +#, gcc-internal-format msgid "enclosing OpenACC %qs construct and" -msgstr "omgivande OpenACC %qs-konstruktion" +msgstr "omgivande OpenACC %qs-konstruktion och" #: gimplify.cc:8059 -#, fuzzy, gcc-internal-format -#| msgid "enclosing OpenACC %qs construct" +#, gcc-internal-format msgid "enclosing OpenACC %qs construct with %qs clause" -msgstr "omgivande OpenACC %qs-konstruktion" +msgstr "omgivande OpenACC %qs-konstruktion med %qs-klausul" #: gimplify.cc:8129 #, gcc-internal-format @@ -28476,10 +28429,9 @@ msgid "function %qs, parameter %u, is used but does not have any certain IPA-SRA msgstr "funktionen %qs, parameter %u, används men har inte någon säker IPA-SRA-åtkomst" #: ipa-strub.cc:620 -#, fuzzy, gcc-internal-format -#| msgid "pass %s does not support cloning" +#, gcc-internal-format msgid "at-calls %<strub%> does not support call to %qD" -msgstr "pass %s stödjer inte kloning" +msgstr "at-anrop %<strub%> stödjer inte anrop av %qD" #: ipa-strub.cc:654 #, gcc-internal-format @@ -28487,10 +28439,9 @@ msgid "%qD is not eligible for %<strub%> on the target system" msgstr "%qD är inte berättigat till %<strub%> på målsystemet" #: ipa-strub.cc:658 -#, fuzzy, gcc-internal-format -#| msgid "unsupported constant address:" +#, gcc-internal-format msgid "unsupported %<strub%> call on the target system" -msgstr "ej stödd konstant adress:" +msgstr "ej stött %<strub%>-anrop på målsystemet" #: ipa-strub.cc:684 #, gcc-internal-format @@ -28528,16 +28479,14 @@ msgid "%qD is not eligible for internal %<strub%> because the address of a local msgstr "%qD är inte berättigat till internt %<strub%> på grund av att det är adressen till en lokal etikett smiter" #: ipa-strub.cc:936 -#, fuzzy, gcc-internal-format -#| msgid "%s does not support force_nonfallthru" +#, gcc-internal-format msgid "internal %<strub%> does not support forced labels" -msgstr "%s stödjer inte force_nonfallthru" +msgstr "internt %<strub%> stödjer inte tvingande etiketter" #: ipa-strub.cc:950 -#, fuzzy, gcc-internal-format -#| msgid "too many arguments for format" +#, gcc-internal-format msgid "%qD has too many arguments for internal %<strub%>" -msgstr "för många argument för formatsträng" +msgstr "%qD har för många argument för internt %<strub%>" #: ipa-strub.cc:1227 #, gcc-internal-format @@ -28575,10 +28524,9 @@ msgid "calling %qD using non-%<strub%> type %qT in %<strub%> context %qD" msgstr "anropar %qD med icke-%<strub%>-typen %qT i %<strub%>-sammanhanget %qD" #: ipa-strub.cc:2834 -#, fuzzy, gcc-internal-format -#| msgid "failed to load pendings for %<%E%s%E%>" +#, gcc-internal-format msgid "failed to split %qD for %<strub%>" -msgstr "misslyckades att ladda väntande för %<%E%s%E%>" +msgstr "misslyckades att dela %qD för %<strub%>" #: ira.cc:2441 ira.cc:2463 #, gcc-internal-format @@ -28621,10 +28569,9 @@ msgid "maximum number of generated reload insns per insn achieved (%d)" msgstr "maximalt antal genererade omladdningsinstruktioner per instruktion uppnått (%d)" #: lra.cc:546 -#, fuzzy, gcc-internal-format -#| msgid "%<asm%> operand has impossible constraints" +#, gcc-internal-format msgid "%<asm%> operand has impossible constraints or there are not enough registers" -msgstr "%<asm%>-operand har omöjliga begränsningar" +msgstr "%<asm%>-operand har omöjliga begränsningar eller så finns det inte tillräckligt med register" #: lto-cgraph.cc:1171 #, gcc-internal-format @@ -28975,10 +28922,9 @@ msgid "invalid OpenMP non-rectangular loop step; %<(%E - %E) * %E%> is not a mul msgstr "felaktig OpenMP ickerektangulärt slingsteg; %<(%E - %E) * %E%> är inte en multipel av slinga %d steg %qE" #: omp-general.cc:1283 -#, fuzzy, gcc-internal-format -#| msgid "array size expression is not supported yet" +#, gcc-internal-format msgid "%<target_device%> selector set is not supported yet" -msgstr "vektorstorleksuttryck stödjs inte ännu" +msgstr "%<target_device%>-väljarmängd stödjs inte ännu" #: omp-general.cc:1288 #, gcc-internal-format @@ -29301,10 +29247,9 @@ msgid "OpenMP runtime API call %qD in a region with %<device(ancestor)%> clause" msgstr "OpenMP-körtids-API-anrop %qD i en region med en %<device(ancestor)%>-klausul" #: omp-low.cc:9791 -#, fuzzy, gcc-internal-format -#| msgid "ignoring sink clause with offset that is not a multiple of the loop step" +#, gcc-internal-format msgid "ignoring %<sink%> clause with offset that is not a multiple of the loop step" -msgstr "ignorerar sink-klausul med ett avstånd som inte är en multipel av slingsteget" +msgstr "ignorerar %<sink%>-klausul med ett avstånd som inte är en multipel av slingsteget" #: omp-low.cc:9814 #, gcc-internal-format @@ -30816,16 +30761,14 @@ msgid "global destructors not supported on this target" msgstr "globala destruerare stödjs inte på denna målarkitektur" #: targhooks.cc:1802 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target%> attribute is not supported on this machine" -msgstr "målattribut stödjs inte på denna maskin" +msgstr "attributet %<target%> stödjs inte på denna maskin" #: targhooks.cc:1814 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target_version%> attribute is not supported on this machine" -msgstr "målattribut stödjs inte på denna maskin" +msgstr "attributet %<target_version%> stödjs inte på denna maskin" #: targhooks.cc:1828 #, gcc-internal-format @@ -30973,10 +30916,9 @@ msgid "%<-fassociative-math%> disabled; other options take precedence" msgstr "%<-fassociative-math%> avslagen, andra flaggor går före" #: toplev.cc:1576 -#, fuzzy, gcc-internal-format -#| msgid "%<-fdata-sections%> not supported for this target" +#, gcc-internal-format msgid "%<-fhardened%> not supported for this target" -msgstr "%<-fdata-sections%> stödjs inte för denna målarkitektur" +msgstr "%<-fhardened%> stödjs inte för denna målarkitektur" #: toplev.cc:1585 #, gcc-internal-format @@ -31244,10 +31186,9 @@ msgid "%qs in gimple IL" msgstr "%qs i gimple IL" #: tree-cfg.cc:3357 -#, fuzzy, gcc-internal-format -#| msgid "used struct type value where scalar is required" +#, gcc-internal-format msgid "%qs as base where non-register is required" -msgstr "struct-typvärde använt där skalär krävs" +msgstr "%qs använt som bas där ett icke-register krävs" #: tree-cfg.cc:3372 #, gcc-internal-format @@ -31521,10 +31462,9 @@ msgid "invalid operand in %qs" msgstr "ogiltig operand till %qs" #: tree-cfg.cc:4676 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument in option %qs" +#, gcc-internal-format msgid "invalid %qs size argument in load" -msgstr "ogiltigt argument i flaggan %qs" +msgstr "ogiltigt storleksargument till %qs i laddning" #: tree-cfg.cc:4695 tree-cfg.cc:4721 #, gcc-internal-format @@ -31742,16 +31682,14 @@ msgid "fallthru to exit from bb %d" msgstr "fall igenom till utgång från gb %d" #: tree-cfg.cc:5707 -#, fuzzy, gcc-internal-format -#| msgid "extra brace group at end of initializer" +#, gcc-internal-format msgid "entry block count not initialized" -msgstr "extra klammergrupp vid slutet av initierare" +msgstr "ingångsblockantal inte initierat" #: tree-cfg.cc:5713 -#, fuzzy, gcc-internal-format -#| msgid "extra brace group at end of initializer" +#, gcc-internal-format msgid "exit block count not initialized" -msgstr "extra klammergrupp vid slutet av initierare" +msgstr "utgångsblockantal inte initierat" #: tree-cfg.cc:5720 #, gcc-internal-format @@ -31759,16 +31697,14 @@ msgid "probability of edge from entry block not initialized" msgstr "sannolikheten för bågen från ingångsblocket är inte initierad" #: tree-cfg.cc:5735 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%qE is not initialized" +#, gcc-internal-format, gfc-internal-format msgid "count of bb %d not initialized" -msgstr "%qE är inte initierad" +msgstr "antal gb %d inte initierat" #: tree-cfg.cc:5741 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Uninitialized probability of edge %i->%i" +#, gcc-internal-format, gfc-internal-format msgid "probability of edge %d->%d not initialized" -msgstr "Oinitierad sannolikhet för båge %i→%i" +msgstr "sannolikheten för bågen %d→%d inte initierad" #: tree-cfg.cc:5761 #, gcc-internal-format @@ -33077,10 +33013,9 @@ msgid "initializer for floating value is not a floating constant" msgstr "initierare för flyttalsvärde är inte en flyttalskonstant" #: varasm.cc:5342 -#, fuzzy, gcc-internal-format -#| msgid "initializer for floating value is not a floating constant" +#, gcc-internal-format msgid "initializer for %<_BitInt(%d)%> value is not an integer constant" -msgstr "initierare för flyttalsvärde är inte en flyttalskonstant" +msgstr "initierare för %<_BitInt(%d)%>-värdet är inte en heltalskonstant" #: varasm.cc:5725 #, gcc-internal-format @@ -33274,28 +33209,24 @@ msgid "%qE attribute with unsupported boolean precision" msgstr "attributet %qE med boolesk precision som inte stödjs" #: c-family/c-attribs.cc:1059 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute only supported on boolean types" +#, gcc-internal-format msgid "%qE attribute only supported in C" -msgstr "attributet %qE stödjs endast på booleska typer" +msgstr "attributet %qE stödjs endast i C" #: c-family/c-attribs.cc:1066 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute only supported on boolean types" +#, gcc-internal-format msgid "%qE attribute only supported on integral types" -msgstr "attributet %qE stödjs endast på booleska typer" +msgstr "attributet %qE stödjs endast på heltalstyper" #: c-family/c-attribs.cc:1087 c-family/c-attribs.cc:1103 -#, fuzzy, gcc-internal-format -#| msgid "overflow in conversion from %qT to %qT changes value from %qE to %qE" +#, gcc-internal-format msgid "overflows in conversion from %qT to %qT changes value from %qE to %qE" msgstr "spill vid konvertering från %qT till %qT som ändrar värde från %qE till %qE" #: c-family/c-attribs.cc:1112 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute argument value %qE refers to parameter type %qT" +#, gcc-internal-format msgid "%qE attribute requires different values for %<false%> and %<true%> for type %qT" -msgstr "värdet %2$qE på argumentet till attributet %1$qE refererar till parametertypen %3$qT" +msgstr "attributet %qE kräver olika värden på %<false%> och %<true%> för typen %qT" #: c-family/c-attribs.cc:1152 #, gcc-internal-format @@ -33314,28 +33245,24 @@ msgid "%qE argument not a string" msgstr "argument %qE är inte en sträng" #: c-family/c-attribs.cc:1555 ada/gcc-interface/utils.cc:6793 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute ignored on objects of type %qT" +#, gcc-internal-format msgid "%qE attribute ignored because of argument %qE" -msgstr "attributet %qE ignorerat på objekt av typen %qT" +msgstr "attributet %qE ignorerat på grund av argumentet %qE" #: c-family/c-attribs.cc:1576 ada/gcc-interface/utils.cc:6814 -#, fuzzy, gcc-internal-format -#| msgid "ignoring attribute %qE because it conflicts with attribute %qs" +#, gcc-internal-format msgid "ignoring attribute %qE because of excess arguments starting at %qE" -msgstr "ignorerar attributet %qE eftersom det står i konflikt med attributet %qs" +msgstr "ignorerar attributet %qE på grund av extra argument med början vid %qE" #: c-family/c-attribs.cc:1590 ada/gcc-interface/utils.cc:6828 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute does not apply to types" +#, gcc-internal-format msgid "attribute %qE does not apply to elements of non-scalar type %qT" -msgstr "attributet %qE är inte applicerbart på typer" +msgstr "attributet %qE är inte applicerbart på element av den icke-skalära typen %qT" #: c-family/c-attribs.cc:1595 ada/gcc-interface/utils.cc:6833 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute does not apply to types" +#, gcc-internal-format msgid "attribute %qE does not apply to fields of aggregate type %qT" -msgstr "attributet %qE är inte applicerbart på typer" +msgstr "attributet %qE är inte applicerbart på fält av aggregattypen %qT" #: c-family/c-attribs.cc:1661 #, gcc-internal-format @@ -34565,16 +34492,14 @@ msgid "argument %u in call to function %qE has pointer to %qs type (%qT)" msgstr "argument %u i anropet av funktionen %qE har typen pekare på %qs (%qT)" #: c-family/c-common.cc:6535 c-family/c-common.cc:6620 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument %u in call to function %qE has enumerated type" -msgstr "argument 3 i anrop av funktionen %qE har uppräkningstyp" +msgstr "argument %u i anrop av funktionen %qE har uppräkningstyp" #: c-family/c-common.cc:6541 c-family/c-common.cc:6626 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has boolean type" +#, gcc-internal-format msgid "argument %u in call to function %qE has boolean type" -msgstr "argument 3 i anrop av funktionen %qE har boolesk typ" +msgstr "argument %u i anrop av funktionen %qE har boolesk typ" #: c-family/c-common.cc:6554 #, gcc-internal-format @@ -34587,22 +34512,19 @@ msgid "argument %u in call to function %qE points to incomplete type" msgstr "argument %u i anropet av funktionen %qE har typen pekare på en ofullständig typ" #: c-family/c-common.cc:6604 -#, fuzzy, gcc-internal-format -#| msgid "argument %u in call to function %qE does not have pointer type" +#, gcc-internal-format msgid "argument %u in call to function %qE does not have %<int%> type" -msgstr "argument %u i anrop av funktionen %qE har inte pekartyp" +msgstr "argument %u i anrop av funktionen %qE har inte typen %<int%>" #: c-family/c-common.cc:6635 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument 1 in call to function %qE has unsigned type" -msgstr "argument 3 i anrop av funktionen %qE har uppräkningstyp" +msgstr "argument 1 i anrop av funktionen %qE har teckenlös typ" #: c-family/c-common.cc:6642 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument 1 in call to function %qE has signed type" -msgstr "argument 3 i anrop av funktionen %qE har uppräkningstyp" +msgstr "argument 1 i anrop av funktionen %qE har typ med tecken" #: c-family/c-common.cc:6905 rust/backend/rust-tree.cc:3601 #, gcc-internal-format @@ -35402,22 +35324,19 @@ msgid "stray %<\\%o%> in program" msgstr "överblivet %<\\%o%> i program" #: c-family/c-lex.cc:1014 -#, fuzzy, gcc-internal-format -#| msgid "integer constant is too large for %<unsigned long%> type" +#, gcc-internal-format msgid "integer constant is too large for %<unsigned _BitInt(%d)%> type" -msgstr "heltalskonstant är för stor för typen %<unsigned long%>" +msgstr "heltalskonstant är för stor för typen %<unsigned _BitInt(%d)%>" #: c-family/c-lex.cc:1017 -#, fuzzy, gcc-internal-format -#| msgid "integer constant is too large for %<unsigned long%> type" +#, gcc-internal-format msgid "integer constant is too large for %<_BitInt(%d)%> type" -msgstr "heltalskonstant är för stor för typen %<unsigned long%>" +msgstr "heltalskonstant är för stor för typen %<_BitInt(%d)%>" #: c-family/c-lex.cc:1025 c/c-decl.cc:12651 -#, fuzzy, gcc-internal-format -#| msgid "%<__int%d%> is not supported on this target" +#, gcc-internal-format msgid "%<_BitInt(%d)%> is not supported on this target" -msgstr "%<__int%d%> stödjs inte för denna målarkitektur" +msgstr "%<_BitInt(%d)%> stödjs inte för denna målarkitektur" #: c-family/c-lex.cc:1077 #, gcc-internal-format @@ -35455,10 +35374,9 @@ msgid "non-standard suffix on floating constant" msgstr "icke-standardsuffix på flyttalskonstant" #: c-family/c-lex.cc:1223 c-family/c-lex.cc:1227 c-family/c-lex.cc:1232 -#, fuzzy, gcc-internal-format -#| msgid "non-standard suffix on floating constant" +#, gcc-internal-format msgid "non-standard suffix on floating constant before C23" -msgstr "icke-standardsuffix på flyttalskonstant" +msgstr "icke-standardsuffix på flyttalskonstant före C23" #: c-family/c-lex.cc:1239 #, gcc-internal-format @@ -36139,16 +36057,14 @@ msgid "%<#pragma GCC optimize%> string is badly formed" msgstr "%<#pragma GCC optimize%>-sträng är felaktigt utformad" #: c-family/c-pragma.cc:1211 -#, fuzzy, gcc-internal-format -#| msgid "junk at end of %<#pragma push_options%>" +#, gcc-internal-format msgid "junk at end of %<#pragma GCC push_options%>" -msgstr "skräp vid slutet av %<#pragma push_options%>" +msgstr "skräp vid slutet av %<#pragma GCC push_options%>" #: c-family/c-pragma.cc:1248 -#, fuzzy, gcc-internal-format -#| msgid "junk at end of %<#pragma pop_options%>" +#, gcc-internal-format msgid "junk at end of %<#pragma GCC pop_options%>" -msgstr "skräp vid slutet av %<#pragma pop_options%>" +msgstr "skräp vid slutet av %<#pragma GCC pop_options%>" #: c-family/c-pragma.cc:1255 #, gcc-internal-format @@ -36941,10 +36857,9 @@ msgid "%<memset%> used with length equal to number of elements without multiplic msgstr "%<memset%> använt med en längd lika med antalet element utan att multiplicera med elementstorleken" #: c-family/c-warn.cc:2291 -#, fuzzy, gcc-internal-format -#| msgid "interrupt service routine can only have a pointer argument and an optional integer argument" +#, gcc-internal-format msgid "%qD sizes specified with %<sizeof%> in the earlier argument and not in the later argument" -msgstr "avbrottshanteringrutiner kan endast ha ett pekarargument och ett valfritt heltalsargument" +msgstr "%qD storlekar angivna med %<sizeof%> i det tidigare argumentet och inte i det senare argumentet" #: c-family/c-warn.cc:2293 #, gcc-internal-format @@ -36952,10 +36867,9 @@ msgid "earlier argument should specify number of elements, later size of each el msgstr "tidigare argument skulle ange antalet element, senare storlek på varje element" #: c-family/c-warn.cc:2332 -#, fuzzy, gcc-internal-format -#| msgid "floating point overflow in expression %qE of type %qT results in %qE" +#, gcc-internal-format msgid "allocation of insufficient size %qE for type %qT with size %qE" -msgstr "flyttalsspill i uttrycket %qE av typen %qT resulterar i %qE" +msgstr "allokering av otillräcklig storlek %qE för typen %qT med storlek %qE" #: c-family/c-warn.cc:2409 #, gcc-internal-format @@ -37230,10 +37144,9 @@ msgid "too many input files" msgstr "för många indatafiler" #: c-family/known-headers.cc:322 -#, fuzzy, gcc-internal-format -#| msgid "%qs is defined in header %qs; did you forget to %<#include %s%>?" +#, gcc-internal-format msgid "%qs is defined in header %qs; this is probably fixable by adding %<#include %s%>" -msgstr "%qs är definierad i huvudet %qs; glömde du %<#include %s%>?" +msgstr "%qs är definierad i huvudet %qs; detta kan förmodligen fixas genom att lägga till %<#include %s%>" #: common/config/aarch64/aarch64-common.cc:415 config/aarch64/aarch64.cc:18466 #, gcc-internal-format @@ -37430,16 +37343,14 @@ msgid "%<-march=%s%>: extension %qs appear more than one time" msgstr "%<-march=%s%>: utökningen %qs förekommer mer än en gång." #: common/config/riscv/riscv-common.cc:676 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs is unsupported standard single letter extension" -msgstr "%<-march=%s%>: utökningen %qs förekommer mer än en gång." +msgstr "%<-march=%s%>: utökningen %qs är en standard enkelbokstavsutökning som inte stödjs" #: common/config/riscv/riscv-common.cc:684 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 'z' but is unsupported standard extension" -msgstr "%<-march=%s%>: utökningen %qs förekommer mer än en gång." +msgstr "%<-march=%s%>: utökningen %qs börjar med ”z” men är en standardutökning som inte stödjs" #: common/config/riscv/riscv-common.cc:692 #, gcc-internal-format @@ -37447,10 +37358,9 @@ msgid "%<-march=%s%>: extension %qs starts with 's' but is unsupported standard msgstr "%<-march=%s%>: utvidgningen %qs börjar med ”s” men är en standardövervakarutvidgning som inte stöjds" #: common/config/riscv/riscv-common.cc:700 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 'x' but is unsupported non-standard extension" -msgstr "%<-march=%s%>: utökningen %qs förekommer mer än en gång." +msgstr "%<-march=%s%>: utökningen %qs börjar med ”x” men är en icke-standardutökning som inte stödjs" #: common/config/riscv/riscv-common.cc:947 #, gcc-internal-format @@ -37483,16 +37393,14 @@ msgid "%<-march=%s%>: first ISA subset must be %<e%>, %<i%> or %<g%>" msgstr "%<-march=%s%>: första ISA-undergrupp måste vara %<e%>, %<i%> eller %<g%>" #: common/config/riscv/riscv-common.cc:1089 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: expect number after %<%dp%>" +#, gcc-internal-format msgid "%<-march=%s%>: Not single-letter extension. %<%c%>" -msgstr "%<-march=%s%>: ett tal förväntades efter %<%dp%>." +msgstr "%<-march=%s%>: Inte en enbokstavsutökning. %<%c%>" #: common/config/riscv/riscv-common.cc:1220 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: zcf extension supports in rv32 only" -msgstr "%<-march=%s%>: utökningen %qs förekommer mer än en gång." +msgstr "%<-march=%s%>: utökningen zcf stödjs bara i rv32" #: common/config/riscv/riscv-common.cc:1225 #, gcc-internal-format @@ -37500,28 +37408,24 @@ msgid "%<-march=%s%>: z*inx conflicts with floating-point extensions" msgstr "%<-march=%s%>: z*inx står i konflikt med flyttalsutökningar" #: common/config/riscv/riscv-common.cc:1231 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: h extension requires i extension" -msgstr "%<-march=%s%>: utökningen %qs förekommer mer än en gång." +msgstr "%<-march=%s%>: utökningen h kräver utökningen i" #: common/config/riscv/riscv-common.cc:1236 -#, fuzzy, gcc-internal-format -#| msgid "%<-mcpu=%s%> conflicts with %<-march=%s%>" +#, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmt" -msgstr "%<-mcpu=%s%> står i konflikt med %<-march=%s%>" +msgstr "%<-mcpu=%s%> zcd står i konflikt med zcmt" #: common/config/riscv/riscv-common.cc:1238 -#, fuzzy, gcc-internal-format -#| msgid "%<-mcpu=%s%> conflicts with %<-march=%s%>" +#, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmp" -msgstr "%<-mcpu=%s%> står i konflikt med %<-march=%s%>" +msgstr "%<-mcpu=%s%> zcd står i konflikt med zcmp" #: common/config/riscv/riscv-common.cc:1247 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: z*inx conflicts with floating-point extensions" +#, gcc-internal-format msgid "%<-march=%s%>: xtheadvector conflicts with vector extension or its sub-extensions" -msgstr "%<-march=%s%>: z*inx står i konflikt med flyttalsutökningar" +msgstr "%<-march=%s%>: xtheadvector står i konflikt med en vektorutökning eller des underutökning" #: common/config/riscv/riscv-common.cc:1344 #, gcc-internal-format @@ -37534,10 +37438,9 @@ msgid "%<-march=%s%>: %s must separate with %<_%>" msgstr "%<-march=%s%>: %s måste separeras med %<_%>" #: common/config/riscv/riscv-common.cc:1419 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: name of %s must be more than 1 letter" +#, gcc-internal-format msgid "%<-march=%s%>: i, e or g must be the first extension" -msgstr "%<-march=%s%>: namnet på %s måste vara mer än 1 bokstav" +msgstr "%<-march=%s%>: i, e eller g måste vara den första utökningen" #: common/config/riscv/riscv-common.cc:1758 #, gcc-internal-format @@ -37866,10 +37769,9 @@ msgid "PIC is only supported for RTPs" msgstr "PIC stödjs endast för RTP:er" #: config/aarch64/aarch64-builtins.cc:2122 -#, fuzzy, gcc-internal-format -#| msgid "argument %d must be an unsigned literal" +#, gcc-internal-format msgid "first argument to %qD must be a string literal" -msgstr "argument %d måste vara en litteral utan tecken" +msgstr "första argumentet till %qD måste vara en stränglitteral" #: config/aarch64/aarch64-builtins.cc:2253 #: config/aarch64/aarch64-builtins.cc:2487 config/arm/arm-builtins.cc:3146 @@ -37898,28 +37800,24 @@ msgid "128-bit system register support requires the %<d128%> extension" msgstr "128-bitars systemregisterstöd kräver utvidgningen %<d128%>" #: config/aarch64/aarch64-builtins.cc:2715 -#, fuzzy, gcc-internal-format -#| msgid "invalid register name for %q+D" +#, gcc-internal-format msgid "invalid system register name provided" -msgstr "ogiltig registernamn för %q+D" +msgstr "felaktig namn på systemregister angivet" #: config/aarch64/aarch64-builtins.cc:2729 -#, fuzzy, gcc-internal-format -#| msgid "invalid register name for %q+D" +#, gcc-internal-format msgid "invalid system register name %qs" -msgstr "ogiltig registernamn för %q+D" +msgstr "felaktigt namn på systemregister %qs" #: config/aarch64/aarch64-builtins.cc:2809 -#, fuzzy, gcc-internal-format -#| msgid "for statement expected" +#, gcc-internal-format msgid "Constant-type argument expected" -msgstr "for-sats förväntades" +msgstr "Konstanttypsargument förväntades" #: config/aarch64/aarch64-builtins.cc:2815 -#, fuzzy, gcc-internal-format -#| msgid "argument %d must be a constant immediate in range [0,15]" +#, gcc-internal-format msgid "argument %d must be a constant immediate in range [%wd,%wd]" -msgstr "argument %d måste vara en konstant omedelbar i intervallet [0,15]" +msgstr "argument %d måste vara en konstant omedelbar i intervallet [%wd,%wd]" #: config/aarch64/aarch64-builtins.cc:2894 #, gcc-internal-format @@ -37992,10 +37890,9 @@ msgid "argument %d of %qE must be an integer constant expression" msgstr "argument %d till %qE måste vara ett konstant heltalsuttryck" #: config/aarch64/aarch64-sve-builtins.cc:1167 -#, fuzzy, gcc-internal-format -#| msgid "passing %wd to argument %d of %qE, which expects either %wd or %wd" +#, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects the value %wd" -msgstr "skickar %wd som argument %d till %qE, vilken förväntar sig %wd eller %wd" +msgstr "skickar %wd som argument %d till %qE, vilken förväntar sig värdet %wd" #: config/aarch64/aarch64-sve-builtins.cc:1170 #: config/arm/arm-mve-builtins.cc:583 @@ -38036,16 +37933,14 @@ msgstr[0] "%qT%d%qE%d" msgstr[1] "skickar en ensam vektor %qT till argument %d till %qE, vilken förväntar sig en tupel med %d vektorer" #: config/aarch64/aarch64-sve-builtins.cc:1767 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT instead of the expected %qT to argument %d of %qE, after passing %qT to argument %d" +#, gcc-internal-format msgid "passing tuple %qT to argument %d of %qE after passing single vector %qT to argument %d" -msgstr "skickar %qT istället för det förväntade %qT som argument %d till %qE, efter att ha skickat %qT som argument %d" +msgstr "skickar tupeln %qT som argument %d till %qE, efter att ha skickat enkel vektor %qT som argument %d" #: config/aarch64/aarch64-sve-builtins.cc:1772 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT instead of the expected %qT to argument %d of %qE, after passing %qT to argument %d" +#, gcc-internal-format msgid "passing single vector %qT to argument %d of %qE after passing tuple %qT to argument %d" -msgstr "skickar %qT istället för det förväntade %qT som argument %d till %qE, efter att ha skickat %qT som argument %d" +msgstr "skickar en enkel vektor %qT som argument %d till %qE efter att ha skickat %qT som argument %d" #: config/aarch64/aarch64-sve-builtins.cc:1777 #, gcc-internal-format @@ -38059,16 +37954,14 @@ msgid "%qE has no form that takes %qT arguments" msgstr "%qE har ingen form som tar %qT-argument" #: config/aarch64/aarch64-sve-builtins.cc:1849 -#, fuzzy, gcc-internal-format -#| msgid "%qE has no form that takes %qT arguments" +#, gcc-internal-format msgid "%qE has no form that takes %qT and %qT arguments" -msgstr "%qE har ingen form som tar %qT-argument" +msgstr "%qE har ingen form som tar argumenten %qT och %qT" #: config/aarch64/aarch64-sve-builtins.cc:1911 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects %qs or %qs" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an %qs or %qs" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig %qs eller %qs" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en %qs eller %qs" #: config/aarch64/aarch64-sve-builtins.cc:1942 #, gcc-internal-format @@ -38076,16 +37969,14 @@ msgid "passing %qT to argument %d of %qE, which expects a 32-bit or 64-bit integ msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig 32-bitars eller 64-bitars heltalstyp" #: config/aarch64/aarch64-sve-builtins.cc:1961 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit integers" +#, gcc-internal-format msgid "passing %qT and %qT to arguments %d and %d of %qE, which expects a pair of 64-bit integers" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en vektor av %d-bitars heltal" +msgstr "skickar %qT och %qT som argument %d och %d till %qE, vilken förväntar sig ett par av 64-bitars heltal" #: config/aarch64/aarch64-sve-builtins.cc:1985 -#, fuzzy, gcc-internal-format -#| msgid "size mismatch in argument %d of %qE" +#, gcc-internal-format msgid "passing mismatched integer types %qT and %qT to arguments %d and %d of %qE" -msgstr "storleken stämmer inte i argument %d till %qE" +msgstr "skickar heltalstyperna %qT och %qT som inte stämmer som argument %d och %qd till %qE" #: config/aarch64/aarch64-sve-builtins.cc:2006 #: config/arm/arm-mve-builtins.cc:1157 @@ -38109,16 +38000,14 @@ msgid "passing %qT to argument %d of %qE, which expects a pointer to 32-bit or 6 msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en pekare till 32-bitars eller 64-bitars element" #: config/aarch64/aarch64-sve-builtins.cc:2068 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a single SVE vector rather than a tuple" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an SVE type rather than a scalar type" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en ensam SVE-vektor snarare än en tupel" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en SVE-typ snarare än en skalär typ" #: config/aarch64/aarch64-sve-builtins.cc:2072 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE tuple type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an SVE type" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en SVE-tupeltyp" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en SVE-typ" #: config/aarch64/aarch64-sve-builtins.cc:2117 #, gcc-internal-format @@ -38126,10 +38015,9 @@ msgid "passing %qT to argument %d of %qE, which expects a vector of integers" msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en vektor av heltal" #: config/aarch64/aarch64-sve-builtins.cc:2147 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE vector type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a 128 bit NEON vector type" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en SVE-vektortyp" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en 128-bitars NEON-vektortyp" #: config/aarch64/aarch64-sve-builtins.cc:2164 #: config/aarch64/aarch64-sve-builtins.cc:2462 @@ -38174,10 +38062,9 @@ msgid "passing %qT to argument %d of %qE, but argument %d had type %qT" msgstr "skickar %qT som argument %d till %qE, men argument %d har typen %qT" #: config/aarch64/aarch64-sve-builtins.cc:2406 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but argument %d had type %qT" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but argument %d was a tuple of %qT" -msgstr "skickar %qT som argument %d till %qE, men argument %d har typen %qT" +msgstr "skickar %qT som argument %d till %qE, men argument %d var en tupel av typen %qT" #: config/aarch64/aarch64-sve-builtins.cc:2430 #: config/arm/arm-mve-builtins.cc:1384 @@ -38186,10 +38073,9 @@ msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit eleme msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en vektor av %d-bitars element" #: config/aarch64/aarch64-sve-builtins.cc:2435 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit elements" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of %d-bit elements" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en vektor av %d-bitars element" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig vektorer av %d-bitars element" #: config/aarch64/aarch64-sve-builtins.cc:2448 #: config/arm/arm-mve-builtins.cc:1396 @@ -38200,18 +38086,16 @@ msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en vektor a #. Translation note: could also be written "expects a tuple of #. signed integer vectors". #: config/aarch64/aarch64-sve-builtins.cc:2454 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of signed integers" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of signed integers" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en vektor av heltal med tecken" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig vektorer av heltal med tecken" #. Translation note: could also be written "expects a tuple of #. unsigned integer vectors". #: config/aarch64/aarch64-sve-builtins.cc:2468 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of unsigned integers" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of unsigned integers" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en vektor av teckenlösa heltal" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig vektorer av teckenlösa heltal" #: config/aarch64/aarch64-sve-builtins.cc:2488 #: config/arm/arm-mve-builtins.cc:1423 @@ -38238,10 +38122,9 @@ msgid "passing %qT to argument %d of %qE, which expects %qs" msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig %qs" #: config/aarch64/aarch64-sve-builtins.cc:2577 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a scalar pointer" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which does not accept scalars for this combination of arguments" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en skalär pekare" +msgstr "skickar %qT som argument %d till %qE, vilken inte tar skalärer till denna kombination av argument" #: config/aarch64/aarch64-sve-builtins.cc:2593 #: config/arm/arm-mve-builtins.cc:1556 @@ -38343,10 +38226,9 @@ msgid "passing %qT to argument %d of %qE, but its %qT form does not accept scala msgstr "skickar %qT som argument %d till %qE, men dess %qT-form tar inte skalärer" #: config/aarch64/aarch64-sve-builtins.cc:3127 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but its %qT form does not accept scalars" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but its %qT form does not accept single vectors" -msgstr "skickar %qT som argument %d till %qE, men dess %qT-form tar inte skalärer" +msgstr "skickar %qT som argument %d till %qE, men dess %qT-form tar inte enkla vektorer" #: config/aarch64/aarch64-sve-builtins.cc:4621 #: config/aarch64/aarch64-sve-builtins.cc:4683 @@ -38357,10 +38239,9 @@ msgid "duplicate definition of %qs" msgstr "dubblerad definition av %qs" #: config/aarch64/aarch64-sve-builtins.cc:4675 -#, fuzzy, gcc-internal-format -#| msgid "%qD is defined with tls model %s" +#, gcc-internal-format msgid "%qs defined without first defining %qs" -msgstr "%qD initieras med tls-modell %s" +msgstr "%qs definierat utan att först definiera %qs" #: config/aarch64/aarch64-sve-builtins.cc:4834 #, gcc-internal-format @@ -38444,16 +38325,14 @@ msgid "capture by copy of SVE type %qT" msgstr "fångst av kopia av SVE-typen %qT" #: config/aarch64/aarch64.cc:635 -#, fuzzy, gcc-internal-format -#| msgid "third argument to function %qE must be a constant integer" +#, gcc-internal-format msgid "the arguments to %qE must be constant strings" -msgstr "tredje argumentet till funktionen %qE måste vara ett konstant heltal" +msgstr "argumenten till %qE måste vara konstanta strängar" #: config/aarch64/aarch64.cc:643 -#, fuzzy, gcc-internal-format -#| msgid "unrecognized string escape" +#, gcc-internal-format msgid "unrecognized state string %qs" -msgstr "okänd stringflyktföljd" +msgstr "okänd tillståndssträng %qs" #: config/aarch64/aarch64.cc:727 #, gcc-internal-format @@ -38466,16 +38345,14 @@ msgid "cannot create a new %qs scope since %qs is shared with callers" msgstr "kan inte skapa en ny räckvidd %qs eftersom %qs delas med sin anropare" #: config/aarch64/aarch64.cc:770 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute applies only to functions" +#, gcc-internal-format msgid "%qE attribute applies only to function definitions" -msgstr "attributet %qE är bara tillämpligt på funktioner" +msgstr "attributet %qE är bara tillämpligt på funktionesdefinitioner" #: config/aarch64/aarch64.cc:816 -#, fuzzy, gcc-internal-format -#| msgid "inconsistent because %qs" +#, gcc-internal-format msgid "inconsistent attributes for state %qs" -msgstr "inkonsistent för att %qs" +msgstr "inkonsistenta attribut för tillståndet %qs" #: config/aarch64/aarch64.cc:1305 #, gcc-internal-format @@ -38527,10 +38404,9 @@ msgstr "parameterskickandet för argument av typen %qT ändrades i GCC 13.1" #: config/aarch64/aarch64.cc:6966 config/aarch64/aarch64.cc:7044 #: config/aarch64/aarch64.cc:21189 -#, fuzzy, gcc-internal-format -#| msgid "parameter passing for argument of type %qT changed in GCC 13.1" +#, gcc-internal-format msgid "parameter passing for argument of type %qT changed in GCC 14.1" -msgstr "parameterskickandet för argument av typen %qT ändrades i GCC 13.1" +msgstr "parameterskickandet för argument av typen %qT ändrades i GCC 14.1" #: config/aarch64/aarch64.cc:6976 config/aarch64/aarch64.cc:7053 #: config/aarch64/aarch64.cc:21195 config/arm/arm.cc:7301 @@ -38555,10 +38431,9 @@ msgid "stack probes for SVE frames" msgstr "stackprov för SVE-ramar" #: config/aarch64/aarch64.cc:11080 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "calling a streaming function requires the ISA extension %qs" -msgstr "ACLE-funktionen %qD behöver ISA-utökningen %qs" +msgstr "att anropa en strömningsfunktion behöver ISA-utökningen %qs" #: config/aarch64/aarch64.cc:11089 config/aarch64/aarch64.cc:11093 #, gcc-internal-format @@ -38638,16 +38513,14 @@ msgid "%<-fsanitize=shadow-call-stack%> requires %<-ffixed-x18%>" msgstr "%<-fsanitize=shadow-call-stack%> kräver %<-ffixed-x18%>" #: config/aarch64/aarch64.cc:18237 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "streaming functions require the ISA extension %qs" -msgstr "ACLE-funktionen %qD behöver ISA-utökningen %qs" +msgstr "strömningsfunktioner behöver ISA-utökningen %qs" #: config/aarch64/aarch64.cc:18239 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "functions with SME state require the ISA extension %qs" -msgstr "ACLE-funktionen %qD behöver ISA-utökningen %qs" +msgstr "funktioner med SME-tillstånd behöver ISA-utökningen %qs" #: config/aarch64/aarch64.cc:18333 #, gcc-internal-format @@ -38665,10 +38538,9 @@ msgid "missing cpu name in %<-mcpu=%s%>" msgstr "cpu-namn saknas i %<-mcpu=%s%>" #: config/aarch64/aarch64.cc:18473 -#, fuzzy, gcc-internal-format -#| msgid "did you mean %<-mcpu=%s%>?" +#, gcc-internal-format msgid "did you mean %<-march=%s%>?" -msgstr "menade du %<-mcpu=%s%>?" +msgstr "menade du %<-march=%s%>?" #: config/aarch64/aarch64.cc:18476 #, gcc-internal-format @@ -38721,10 +38593,9 @@ msgid "unknown value %qs for %<-mtune%>" msgstr "okänt värde %qs till %<-mtune%>" #: config/aarch64/aarch64.cc:18717 -#, fuzzy, gcc-internal-format -#| msgid "switch %<-mcpu=%s%> conflicts with %<-march=%s%> switch" +#, gcc-internal-format msgid "switch %<-mcpu=%s%> conflicts with %<-march=%s%> switch and resulted in options %<%s%> being added" -msgstr "flaggan %<-mcpu=%s%> står i konflikt med flaggan %<-march=%s%>" +msgstr "flaggan %<-mcpu=%s%> står i konflikt med flaggan %<-march=%s%> och resulterade i att flaggan %<%s%> lades till" #: config/aarch64/aarch64.cc:18773 #, gcc-internal-format @@ -38747,10 +38618,9 @@ msgid "code model %qs not supported in ilp32 mode" msgstr "kodmodellen %qs stödjs inte i ilp32-läge" #: config/aarch64/aarch64.cc:18954 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "functions with %qs state require the ISA extension %qs" -msgstr "ACLE-funktionen %qD behöver ISA-utökningen %qs" +msgstr "funktioner med %qs-tillstånd behöver ISA-utökningen %qs" #: config/aarch64/aarch64.cc:19057 #, gcc-internal-format @@ -38835,34 +38705,29 @@ msgid "malformed %<target(\"%s\")%> pragma or attribute" msgstr "felformaterat pragma eller attribut %<target(\"%s\")%>" #: config/aarch64/aarch64.cc:19668 -#, fuzzy, gcc-internal-format -#| msgid "attribute %<fallthrough%> specified multiple times" +#, gcc-internal-format msgid "attribute %<target_version%> has multiple values" -msgstr "attributet %<fallthrough%> angivet flera gånger" +msgstr "attributet %<target_version%> har flera värden" #: config/aarch64/aarch64.cc:19676 -#, fuzzy, gcc-internal-format -#| msgid "attribute %<target%> argument not a string" +#, gcc-internal-format msgid "attribute %<target_version%> argument not a string" -msgstr "argument till attribut %<target%> är inte en sträng" +msgstr "argument till attributet %<target_version%> är inte en sträng" #: config/aarch64/aarch64.cc:19698 -#, fuzzy, gcc-internal-format -#| msgid "missing value in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "missing value in %<target_version%> attribute" -msgstr "värde saknas i pragmat eller attributet %<target()%>" +msgstr "värde saknas i attributet %<target_version%>" #: config/aarch64/aarch64.cc:19702 -#, fuzzy, gcc-internal-format -#| msgid "invalid feature modifier %qs of value %qs in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "invalid feature modifier %qs of value %qs in %<target_version%> attribute" -msgstr "felaktig funktionsmodifierare %qs på värdet %qs i pragmat eller attributet %<target()%>" +msgstr "felaktig funktionsmodifierare %qs på värdet %qs i attributet %<target_version%>" #: config/aarch64/aarch64.cc:19708 -#, fuzzy, gcc-internal-format -#| msgid "invalid feature modifier %qs of value %qs in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "duplicate feature modifier %qs of value %qs in %<target_version%> attribute" -msgstr "felaktig funktionsmodifierare %qs på värdet %qs i pragmat eller attributet %<target()%>" +msgstr "dubblerade funktionsmodifierare %qs på värdet %qs i attributet %<target_version%>" #: config/aarch64/aarch64.cc:20285 config/i386/i386-features.cc:3531 #: config/i386/i386-features.cc:3800 @@ -38902,10 +38767,9 @@ msgid "unsupported simdlen %wd" msgstr "ej stödd simdlen %wd" #: config/aarch64/aarch64.cc:28605 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support return type %qT for %<simd%> functions" +#, gcc-internal-format msgid "GCC does not currently support return type %qT for simd" -msgstr "GCC stödjer för närvarande inte returtypen %qT för %<simd%>-funktioner" +msgstr "GCC stödjer för närvarande inte returtypen %qT för simd" #: config/aarch64/aarch64.cc:28609 config/i386/i386.cc:25115 #, gcc-internal-format @@ -38913,10 +38777,9 @@ msgid "unsupported return type %qT for simd" msgstr "returtyp %qT stödjs ej för simd" #: config/aarch64/aarch64.cc:28639 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support argument type %qT for %<simd%> functions" +#, gcc-internal-format msgid "GCC does not currently support argument type %qT for simd" -msgstr "GCC stödjer för närvarande inte argumenttypen %qT för %<simd%>-funktioner" +msgstr "GCC stödjer för närvarande inte argumenttypen %qT för simd" #: config/aarch64/aarch64.cc:28643 config/i386/i386.cc:25146 #, gcc-internal-format @@ -38929,22 +38792,19 @@ msgid "GCC does not currently support simdlen %wd for type %qT" msgstr "GCC stödjer för närvarande inte simdlen %wd för typen %qT" #: config/aarch64/aarch64.cc:28713 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support simdlen %wd for type %qT" +#, gcc-internal-format msgid "GCC does not currently support a simdclone with simdlens %wd and %wd for these types." -msgstr "GCC stödjer för närvarande inte simdlen %wd för typen %qT" +msgstr "GCC stödjer för närvarande inte en simdclone med simdlen:ar %wd och %wd för dessa typer." #: config/aarch64/aarch64.cc:28803 -#, fuzzy, gcc-internal-format -#| msgid "type attributes ignored after type is already defined" +#, gcc-internal-format msgid "cannot apply attribute %qs to %q+D after the function has been defined" -msgstr "typattribut ignoreras efter att typen redan är definierad" +msgstr "kan inte använda attributet %qs på %q+D efter att funktionen redan har definierats" #: config/aarch64/aarch64.cc:28805 -#, fuzzy, gcc-internal-format -#| msgid "%qD defined here" +#, gcc-internal-format msgid "%q+D defined here" -msgstr "%qD definierades här" +msgstr "%q+D definierades här" #: config/aarch64/aarch64.cc:29263 #, gcc-internal-format @@ -39299,16 +39159,14 @@ msgid "invalid type for %<asm%> flag output" msgstr "ogiltig typ för %<asm%>-flaggutdata" #: config/arm/aarch-common.cc:765 -#, fuzzy, gcc-internal-format -#| msgid "missing filename after %qs" +#, gcc-internal-format msgid "missing feature or flag for %<%s%>" -msgstr "filnamn saknas efter %qs" +msgstr "funktion eller flagga för %<%s%> saknas" #: config/arm/aarch-common.cc:767 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument %<%s%> for %<-mharden-sls=%>" +#, gcc-internal-format msgid "invalid argument %<%s%> for %<%s%>" -msgstr "ogiltigt argument %<%s%> till %<-mharden-sls=%>" +msgstr "ogiltigt argument %<%s%> till %<%s%>" #: config/arm/aarch-common.cc:778 #, gcc-internal-format @@ -39428,10 +39286,9 @@ msgid "%<#pragma GCC arm%> requires a string parameter" msgstr "%<#pragma GCC arm%> kräver en strängparameter" #: config/arm/arm-c.cc:156 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma GCC arm%> requires a string parameter" +#, gcc-internal-format msgid "%<#pragma GCC arm \"arm_mve.h\"%> requires a boolean parameter" -msgstr "%<#pragma GCC arm%> kräver en strängparameter" +msgstr "%<#pragma GCC arm \"arm_mve.h\"%> kräver en strängparameter" #: config/arm/arm-c.cc:160 #, gcc-internal-format @@ -39444,34 +39301,29 @@ msgid "this definition requires the MVE ISA extension" msgstr "denna definition kräver ISA-utökningen MVE" #: config/arm/arm-mve-builtins.cc:560 -#, fuzzy, gcc-internal-format -#| msgid "you can enable %qs using the command-line option %<-march%>, or by using the %<target%> attribute or pragma" +#, gcc-internal-format msgid "you can enable mve.fp by using the command-line option %<-march%>, or by using the %<target%> attribute or pragma" -msgstr "man kan aktivera %qs genom att använda kommandoradsflaggan %<-march%>, eller genom att använda attributet eller pragmat %<target%>" +msgstr "man kan aktivera mve.fp genom att använda kommandoradsflaggan %<-march%>, eller genom att använda attributet eller pragmat %<target%>" #: config/arm/arm-mve-builtins.cc:1166 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but %qT is not a valid SVE element type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but %qT is not a valid MVE element type" -msgstr "skickar %qT som argument %d till %qE, men %qT är inte en giltig SVE-elementtyp" +msgstr "skickar %qT som argument %d till %qE, men %qT är inte en giltig MVE-elementtyp" #: config/arm/arm-mve-builtins.cc:1200 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a single SVE vector rather than a tuple" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a single MVE vector rather than a tuple" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en ensam SVE-vektor snarare än en tupel" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en ensam MVE-vektor snarare än en tupel" #: config/arm/arm-mve-builtins.cc:1220 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE vector type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an MVE vector type" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en SVE-vektortyp" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en MVE-vektortyp" #: config/arm/arm-mve-builtins.cc:1223 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE tuple type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an MVE tuple type" -msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en SVE-tupeltyp" +msgstr "skickar %qT som argument %d till %qE, vilken förväntar sig en MVE-tupeltyp" #: config/arm/arm-mve-builtins.cc:1290 #, gcc-internal-format @@ -39942,10 +39794,9 @@ msgid "%qE attribute only supported for reduced Tiny cores" msgstr "attributet %qE stödjs bara för reducerade Tiny-kärnor" #: config/avr/avr.cc:10405 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute address out of range" +#, gcc-internal-format msgid "%qE attribute address out of range 0x%x%s0x%x" -msgstr "adressen till attributet %qE är utanför giltigt intervall" +msgstr "adressen till attributet %qE är utanför giltigt intervall 0x%x%s0x%x" #: config/avr/avr.cc:10419 #, gcc-internal-format @@ -39978,10 +39829,9 @@ msgid "pointer targeting address space %qs must be const in %s %q+D" msgstr "pekare med mål i adressrymden %qs måste vara konstanta i %s %q+D" #: config/avr/avr.cc:10717 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute only applies to variables in static storage" +#, gcc-internal-format msgid "variable %q+D with attribute %qs must be located in static storage" -msgstr "attributet %qE är bara tillämpligt på variabler med statisk lagringsklass" +msgstr "variabeln %q+D med attributet %qs måste vara placerat i statisk lagring" #: config/avr/avr.cc:10769 #, gcc-internal-format @@ -39989,10 +39839,9 @@ msgid "variable %q+D must be const in order to be put into read-only section by msgstr "variabeln %q+D måste vara const för att kunna läggas i en endast läsbar sektion med hjälp av %qs" #: config/avr/avr.cc:10930 -#, fuzzy, gcc-internal-format -#| msgid "static IO declaration for %q+D needs an address" +#, gcc-internal-format msgid "static attribute %qs declaration for %q+D needs an address" -msgstr "statisk IO-deklaration för %q+D behöver en adress" +msgstr "deklarationen av det statiska attributet %qs för %q+D behöver en adress" #: config/avr/avr.cc:11019 #, gcc-internal-format @@ -40015,10 +39864,9 @@ msgstr "den oinitierade variabeln %q+D placerad i programminnesområdet" #. address attribute are determined by the attribute, not by #. some initializer. #: config/avr/avr.cc:11172 -#, fuzzy, gcc-internal-format -#| msgid "Allocatable %qs at %L cannot have an initializer" +#, gcc-internal-format msgid "variable %q+D with attribute %qs must not have an initializer" -msgstr "Allokerbar %qs vid %L kan inte ha en initierare" +msgstr "variabeln %q+D med attributet %qs får inte ha en initierare" #: config/avr/avr.cc:11225 #, gcc-internal-format @@ -40194,10 +40042,9 @@ msgid "invalid argument to built-in function" msgstr "ogiltigt argument inbyggd funktion" #: config/bpf/bpf.cc:1019 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument to built-in function %s" +#, gcc-internal-format msgid "invalid built-in function at expansion" -msgstr "ogiltigt argument till den inbyggda funktionen %s" +msgstr "ogiltig inbyggd funktion vid expansionen" #: config/c6x/c6x.cc:245 #, gcc-internal-format @@ -40411,10 +40258,9 @@ msgid "stack frame must be smaller than 64K" msgstr "stackramen måste vara mindre än 64 k" #: config/gcn/gcn.cc:170 -#, fuzzy, gcc-internal-format -#| msgid "%<-msmart%> is incompatible with %<-mhigh-registers%>" +#, gcc-internal-format msgid "%<-mxnack=on%> is incompatible with %<-march=%s%>" -msgstr "%<-msmart%> är inkompatibel med %<-mhigh-registers%>" +msgstr "%<-mxnack=on%> är inkompatibelt med %<-march=%s%>" #: config/gcn/gcn.cc:284 #, gcc-internal-format @@ -40492,28 +40338,24 @@ msgid "%d bytes of gang-private data-share memory exhausted (increase with %<-mg msgstr "%d byte med gang-private data-share-minne slut (öka med t.ex. %<-mgang-private-size=%d%>)" #: config/gcn/mkoffload.cc:160 -#, fuzzy, gcc-internal-format -#| msgid "deleting file %s: %m" +#, gcc-internal-format msgid "deleting file %qs: %m" -msgstr "raderar filen %s: %m" +msgstr "raderar filen %qs: %m" #: config/gcn/mkoffload.cc:862 -#, fuzzy, gcc-internal-format -#| msgid "COLLECT_GCC must be set." +#, gcc-internal-format msgid "%<COLLECT_GCC%> must be set" -msgstr "COLLECT_GCC måste vara satt." +msgstr "%<COLLECT_GCC%> måste vara satt" #: config/gcn/mkoffload.cc:908 -#, fuzzy, gcc-internal-format -#| msgid "offload compiler %s not found" +#, gcc-internal-format msgid "offload compiler %qs not found" -msgstr "avlastningskompilatorn %s finns inte" +msgstr "avlastningskompilatorn %qs finns inte" #: config/gcn/mkoffload.cc:930 -#, fuzzy, gcc-internal-format -#| msgid "unrecognizable argument of option " +#, gcc-internal-format msgid "unrecognizable argument of option %<" -msgstr "okänt argument till flaggan " +msgstr "okänt argument till flaggan %<" #: config/gcn/mkoffload.cc:994 config/nvptx/mkoffload.cc:751 #, gcc-internal-format @@ -81786,7 +81628,7 @@ msgstr "ogiltig hexadecimalsiffra" #: go/gofrontend/embed.cc:605 #, gcc-internal-format msgid "unrecognized string escape" -msgstr "okänd stringflyktföljd" +msgstr "okänd strängflyktföljd" #: go/gofrontend/embed.cc:626 #, gcc-internal-format From d2029bbc69df7341775faf6cf1aa13d978c223a1 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Mon, 18 Mar 2024 16:40:35 +0000 Subject: [PATCH 107/551] PR modula2/114380 Incorrect type specified in an error message This patch corrects an error message relating to a variable of a SET type. The bugfix is not to skip over set types (in GetLowestType). gcc/m2/ChangeLog: PR modula2/114380 * gm2-compiler/SymbolTable.mod (GetLowestType): Do not skip over a set type, but return sym. gcc/testsuite/ChangeLog: PR modula2/114380 * gm2/pim/fail/badset7.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/SymbolTable.mod | 2 +- gcc/testsuite/gm2/pim/fail/badset7.mod | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gm2/pim/fail/badset7.mod diff --git a/gcc/m2/gm2-compiler/SymbolTable.mod b/gcc/m2/gm2-compiler/SymbolTable.mod index c08de6a97c32..9d572cff19cd 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.mod +++ b/gcc/m2/gm2-compiler/SymbolTable.mod @@ -6154,7 +6154,7 @@ BEGIN SubrangeSym : type := Subrange.Type | ArraySym : type := Array.Type | SubscriptSym : type := Subscript.Type | - SetSym : type := Set.Type | + SetSym : type := Sym | (* Stop at the set type. *) UnboundedSym : type := Unbounded.Type | UndefinedSym : type := NulSym | DummySym : type := NulSym diff --git a/gcc/testsuite/gm2/pim/fail/badset7.mod b/gcc/testsuite/gm2/pim/fail/badset7.mod new file mode 100644 index 000000000000..5c2499be7391 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/badset7.mod @@ -0,0 +1,14 @@ +MODULE badset7 ; + +FROM SYSTEM IMPORT WORD ; + +PROCEDURE func () : WORD ; +BEGIN + RETURN WORD (0) +END func ; + +VAR + b: BITSET ; +BEGIN + b := func () - {6..31} +END badset7. From 9316d021ebb95062f5e3ed9d67734863279671fe Mon Sep 17 00:00:00 2001 From: Thiago Jung Bauermann <thiago.bauermann@linaro.org> Date: Fri, 15 Mar 2024 12:13:29 -0300 Subject: [PATCH 108/551] testsuite: Turn errors back into warnings in arm/acle/cde-mve-error-2.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since commit 2c3db94d9fd ("c: Turn int-conversion warnings into permerrors") the test fails with errors such as: FAIL: gcc.target/arm/acle/cde-mve-error-2.c -O0 (test for errors, line 32) FAIL: gcc.target/arm/acle/cde-mve-error-2.c -O0 (test for errors, line 33) FAIL: gcc.target/arm/acle/cde-mve-error-2.c -O0 (test for errors, line 34) FAIL: gcc.target/arm/acle/cde-mve-error-2.c -O0 (test for errors, line 35) ⋮ FAIL: gcc.target/arm/acle/cde-mve-error-2.c -O0 (test for excess errors) There's a total of 1016 errors. Here's a sample of the excess errors: Excess errors: /path/gcc.git/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c:117:31: error: passing argument 2 of '__builtin_arm_vcx1qv16qi' makes integer from pointer without a cast [-Wint-conversion] /path/gcc.git/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c:119:3: error: passing argument 3 of '__builtin_arm_vcx1qav16qi' makes integer from pointer without a cast [-Wint-conversion] /path/gcc.git/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c:121:3: error: passing argument 3 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast [-Wint-conversion] /path/gcc.git/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c:123:3: error: passing argument 3 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast [-Wint-conversion] The test expects these messages to be warnings, not errors. My first try was to change it to expect them as errors instead. This didn't work, IIUC because the error prevents the compiler from continuing processing the file and thus other errors which are expected by the test don't get emitted. Therefore, add -fpermissive so that the test behaves as it did previously. Because of the additional line in the header, the line numbers of the expected warnings don't match anymore so replace them with ".-1" as suggested by Richard Earnshaw. Tested on armv8l-linux-gnueabihf. gcc/testsuite/ChangeLog: * gcc.target/arm/acle/cde-mve-error-2.c: Add -fpermissive. Use relative offsets for line numbers. --- .../gcc.target/arm/acle/cde-mve-error-2.c | 63 ++++++++++--------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c b/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c index 5b7774825442..0f605083c5c7 100644 --- a/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c +++ b/gcc/testsuite/gcc.target/arm/acle/cde-mve-error-2.c @@ -2,6 +2,7 @@ /* { dg-do assemble } */ /* { dg-require-effective-target arm_v8_1m_main_cde_mve_fp_ok } */ +/* { dg-options "-fpermissive" } */ /* { dg-add-options arm_v8_1m_main_cde_mve_fp } */ /* The error checking files are split since there are three kinds of @@ -115,73 +116,73 @@ uint8x16_t test_bad_immediates (uint8x16_t n, uint8x16_t m, int someval, /* `imm' is of wrong type. */ accum += __arm_vcx1q_u8 (0, ""); /* { dg-error {argument 2 to '__builtin_arm_vcx1qv16qi' must be a constant immediate in range \[0-4095\]} } */ - /* { dg-warning {passing argument 2 of '__builtin_arm_vcx1qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 117 } */ + /* { dg-warning {passing argument 2 of '__builtin_arm_vcx1qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx1qa (0, accum, ""); /* { dg-error {argument 3 to '__builtin_arm_vcx1qav16qi' must be a constant immediate in range \[0-4095\]} } */ - /* { dg-warning {passing argument 3 of '__builtin_arm_vcx1qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 119 } */ + /* { dg-warning {passing argument 3 of '__builtin_arm_vcx1qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2q (0, n, ""); /* { dg-error {argument 3 to '__builtin_arm_vcx2qv16qi' must be a constant immediate in range \[0-127\]} } */ - /* { dg-warning {passing argument 3 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 121 } */ + /* { dg-warning {passing argument 3 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2q_u8 (0, n, "x"); /* { dg-error {argument 3 to '__builtin_arm_vcx2qv16qi' must be a constant immediate in range \[0-127\]} } */ - /* { dg-warning {passing argument 3 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 123 } */ + /* { dg-warning {passing argument 3 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2qa (0, accum, n, ""); /* { dg-error {argument 4 to '__builtin_arm_vcx2qav16qi' must be a constant immediate in range \[0-127\]} } */ - /* { dg-warning {passing argument 4 of '__builtin_arm_vcx2qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 125 } */ + /* { dg-warning {passing argument 4 of '__builtin_arm_vcx2qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3q_u8 (0, n, m, ""); /* { dg-error {argument 4 to '__builtin_arm_vcx3qv16qi' must be a constant immediate in range \[0-15\]} } */ - /* { dg-warning {passing argument 4 of '__builtin_arm_vcx3qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 127 } */ + /* { dg-warning {passing argument 4 of '__builtin_arm_vcx3qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3q (0, n, m, "x"); /* { dg-error {argument 4 to '__builtin_arm_vcx3qv16qi' must be a constant immediate in range \[0-15\]} } */ - /* { dg-warning {passing argument 4 of '__builtin_arm_vcx3qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 129 } */ + /* { dg-warning {passing argument 4 of '__builtin_arm_vcx3qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3qa (0, accum, n, m, ""); /* { dg-error {argument 5 to '__builtin_arm_vcx3qav16qi' must be a constant immediate in range \[0-15\]} } */ - /* { dg-warning {passing argument 5 of '__builtin_arm_vcx3qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 131 } */ + /* { dg-warning {passing argument 5 of '__builtin_arm_vcx3qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx1q_m (0, accum, "", pred); /* { dg-error {argument 3 to '__builtin_arm_vcx1q_p_v16qi' must be a constant immediate in range \[0-4095\]} } */ - /* { dg-warning {passing argument 3 of '__builtin_arm_vcx1q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 134 } */ + /* { dg-warning {passing argument 3 of '__builtin_arm_vcx1q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx1qa_m (0, accum, "", pred); /* { dg-error {argument 3 to '__builtin_arm_vcx1qa_p_v16qi' must be a constant immediate in range \[0-4095\]} } */ - /* { dg-warning {passing argument 3 of '__builtin_arm_vcx1qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 136 } */ + /* { dg-warning {passing argument 3 of '__builtin_arm_vcx1qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2q_m (0, accum, n, "", pred); /* { dg-error {argument 4 to '__builtin_arm_vcx2q_p_v16qi' must be a constant immediate in range \[0-127\]} } */ - /* { dg-warning {passing argument 4 of '__builtin_arm_vcx2q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 138 } */ + /* { dg-warning {passing argument 4 of '__builtin_arm_vcx2q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2qa_m (0, accum, n, "", pred); /* { dg-error {argument 4 to '__builtin_arm_vcx2qa_p_v16qi' must be a constant immediate in range \[0-127\]} } */ - /* { dg-warning {passing argument 4 of '__builtin_arm_vcx2qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 140 } */ + /* { dg-warning {passing argument 4 of '__builtin_arm_vcx2qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3q_m (0, accum, n, m, "x", pred); /* { dg-error {argument 5 to '__builtin_arm_vcx3q_p_v16qi' must be a constant immediate in range \[0-15\]} } */ - /* { dg-warning {passing argument 5 of '__builtin_arm_vcx3q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 142 } */ + /* { dg-warning {passing argument 5 of '__builtin_arm_vcx3q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3qa_m (0, accum, n, m, "", pred); /* { dg-error {argument 5 to '__builtin_arm_vcx3qa_p_v16qi' must be a constant immediate in range \[0-15\]} } */ - /* { dg-warning {passing argument 5 of '__builtin_arm_vcx3qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 144 } */ + /* { dg-warning {passing argument 5 of '__builtin_arm_vcx3qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ /* `coproc' is of wrong type. */ accum += __arm_vcx1qa ("", accum, 4095); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx1qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 148 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx1qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2q ("", n, 126); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 150 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2qa ("", accum, n, 127); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 152 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3q ("", n, m, 15); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 154 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3qv16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3qa ("", accum, n, m, 15); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 156 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3qav16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx1q_m ("", accum, 4094, pred); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx1q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 159 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx1q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx1qa_m ("", accum, 4095, pred); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx1qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 161 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx1qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2q_m ("", accum, n, 126, pred); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 163 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2qa_m ("", accum, n, 127, pred); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 165 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx2qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3q_m ("", accum, n, m, 15, pred); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 167 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3qa_m ("", accum, n, m, 15, pred); /* { dg-error {coproc must be a constant immediate in range \[0-7\] enabled with .\+cdecp<N>.} } */ - /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 169 } */ + /* { dg-warning {passing argument 1 of '__builtin_arm_vcx3qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ /* `pred" is of wrong type. */ accum += __arm_vcx1q_m (0, accum, 4094, ""); - /* { dg-warning {passing argument 4 of '__builtin_arm_vcx1q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 173 } */ + /* { dg-warning {passing argument 4 of '__builtin_arm_vcx1q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx1qa_m (0, accum, 4095, ""); - /* { dg-warning {passing argument 4 of '__builtin_arm_vcx1qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 175 } */ + /* { dg-warning {passing argument 4 of '__builtin_arm_vcx1qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2q_m (0, accum, n, 126, ""); - /* { dg-warning {passing argument 5 of '__builtin_arm_vcx2q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 177 } */ + /* { dg-warning {passing argument 5 of '__builtin_arm_vcx2q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx2qa_m (0, accum, n, 127, ""); - /* { dg-warning {passing argument 5 of '__builtin_arm_vcx2qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 179 } */ + /* { dg-warning {passing argument 5 of '__builtin_arm_vcx2qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3q_m (0, accum, n, m, 15, ""); - /* { dg-warning {passing argument 6 of '__builtin_arm_vcx3q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 181 } */ + /* { dg-warning {passing argument 6 of '__builtin_arm_vcx3q_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ accum += __arm_vcx3qa_m (0, accum, n, m, 15, ""); - /* { dg-warning {passing argument 6 of '__builtin_arm_vcx3qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } 183 } */ + /* { dg-warning {passing argument 6 of '__builtin_arm_vcx3qa_p_v16qi' makes integer from pointer without a cast \[-Wint-conversion\]} "" { target *-*-* } .-1 } */ return accum; } From 3be2b8f475f22c531d6cef1b041c0573b3ea5133 Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Mon, 18 Mar 2024 19:36:59 +0100 Subject: [PATCH 109/551] Fortran: error recovery in frontend optimization [PR103715] gcc/fortran/ChangeLog: PR fortran/103715 * frontend-passes.cc (check_externals_expr): Prevent invalid read in case of mismatch of external subroutine with function. gcc/testsuite/ChangeLog: PR fortran/103715 * gfortran.dg/pr103715.f90: New test. --- gcc/fortran/frontend-passes.cc | 3 +++ gcc/testsuite/gfortran.dg/pr103715.f90 | 12 ++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr103715.f90 diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc index 06dfa1a32321..3c06018fdbbf 100644 --- a/gcc/fortran/frontend-passes.cc +++ b/gcc/fortran/frontend-passes.cc @@ -5807,6 +5807,9 @@ check_externals_expr (gfc_expr **ep, int *walk_subtrees ATTRIBUTE_UNUSED, if (e->expr_type != EXPR_FUNCTION) return 0; + if (e->symtree && e->symtree->n.sym->attr.subroutine) + return 0; + sym = e->value.function.esym; if (sym == NULL) return 0; diff --git a/gcc/testsuite/gfortran.dg/pr103715.f90 b/gcc/testsuite/gfortran.dg/pr103715.f90 new file mode 100644 index 000000000000..72c5a31fb210 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr103715.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/103715 - ICE in gfc_find_gsymbol +! +! valgrind did report an invalid read in check_externals_procedure + +program p + select type (y => g()) ! { dg-error "Selector shall be polymorphic" } + end select + call g() +end + +! { dg-prune-output "already being used as a FUNCTION" } From b96c5436880d7926299314a33c953171082ab59e Mon Sep 17 00:00:00 2001 From: Uros Bizjak <ubizjak@gmail.com> Date: Mon, 18 Mar 2024 20:40:29 +0100 Subject: [PATCH 110/551] i386: Unify {general,timode}_scalar_chain::convert_op [PR111822] Recent PR111822 fix implemented REG_EH_REGION note copying to a STV converted preload instruction in general_scalar_chain::convert_op. However, the same issue remains in timode_scalar_chain::convert_op. Instead of copying the newly introduced code to timode_scalar_chain::convert_op, the patch unifies both functions to a common function. PR target/111822 gcc/ChangeLog: * config/i386/i386-features.cc (smode_convert_cst): New function to handle SImode, DImode and TImode immediates, generalized from timode_convert_cst. (timode_convert_cst): Remove. (scalar_chain::convert_op): Unify from general_scalar_chain::convert_op and timode_scalar_chain::convert_op. (general_scalar_chain::convert_op): Remove. (timode_scalar_chain::convert_op): Remove. (timode_scalar_chain::convert_insn): Update the call to renamed timode_convert_cst. * config/i386/i386-features.h (class scalar_chain): Redeclare convert_op as protected class member. (class general_calar_chain): Remove convert_op. (class timode_scalar_chain): Ditto. gcc/testsuite/ChangeLog: * g++.target/i386/pr111822.C (dg-do): Compile only for ia32 targets. (dg-options): Add -march=x86-64. --- gcc/config/i386/i386-features.cc | 127 +++++++---------------- gcc/config/i386/i386-features.h | 4 +- gcc/testsuite/g++.target/i386/pr111822.C | 4 +- 3 files changed, 40 insertions(+), 95 deletions(-) diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc index c7d7a965901e..e3e004d55267 100644 --- a/gcc/config/i386/i386-features.cc +++ b/gcc/config/i386/i386-features.cc @@ -980,14 +980,35 @@ scalar_chain::convert_reg (rtx_insn *insn, rtx dst, rtx src) REGNO (src), REGNO (dst), INSN_UID (insn)); } +/* Helper function to convert immediate constant X to vmode. */ +static rtx +smode_convert_cst (rtx x, enum machine_mode vmode) +{ + /* Prefer all ones vector in case of -1. */ + if (constm1_operand (x, GET_MODE (x))) + return CONSTM1_RTX (vmode); + + unsigned n = GET_MODE_NUNITS (vmode); + rtx *v = XALLOCAVEC (rtx, n); + v[0] = x; + for (unsigned i = 1; i < n; ++i) + v[i] = const0_rtx; + return gen_rtx_CONST_VECTOR (vmode, gen_rtvec_v (n, v)); +} + /* Convert operand OP in INSN. We should handle memory operands and uninitialized registers. All other register uses are converted during registers conversion. */ void -general_scalar_chain::convert_op (rtx *op, rtx_insn *insn) +scalar_chain::convert_op (rtx *op, rtx_insn *insn) { + rtx tmp; + + if (GET_MODE (*op) == V1TImode) + return; + *op = copy_rtx_if_shared (*op); if (GET_CODE (*op) == NOT @@ -998,20 +1019,21 @@ general_scalar_chain::convert_op (rtx *op, rtx_insn *insn) } else if (MEM_P (*op)) { - rtx_insn* eh_insn, *movabs = NULL; - rtx tmp = gen_reg_rtx (GET_MODE (*op)); + rtx_insn *movabs = NULL; /* Emit MOVABS to load from a 64-bit absolute address to a GPR. */ if (!memory_operand (*op, GET_MODE (*op))) { - rtx tmp2 = gen_reg_rtx (GET_MODE (*op)); - movabs = emit_insn_before (gen_rtx_SET (tmp2, *op), insn); + tmp = gen_reg_rtx (GET_MODE (*op)); + movabs = emit_insn_before (gen_rtx_SET (tmp, *op), insn); - *op = tmp2; + *op = tmp; } - eh_insn - = emit_insn_before (gen_rtx_SET (gen_rtx_SUBREG (vmode, tmp, 0), + tmp = gen_rtx_SUBREG (vmode, gen_reg_rtx (GET_MODE (*op)), 0); + + rtx_insn *eh_insn + = emit_insn_before (gen_rtx_SET (copy_rtx (tmp), gen_gpr_to_xmm_move_src (vmode, *op)), insn); @@ -1028,33 +1050,17 @@ general_scalar_chain::convert_op (rtx *op, rtx_insn *insn) } } - *op = gen_rtx_SUBREG (vmode, tmp, 0); + *op = tmp; if (dump_file) fprintf (dump_file, " Preloading operand for insn %d into r%d\n", INSN_UID (insn), REGNO (tmp)); } else if (REG_P (*op)) + *op = gen_rtx_SUBREG (vmode, *op, 0); + else if (CONST_SCALAR_INT_P (*op)) { - *op = gen_rtx_SUBREG (vmode, *op, 0); - } - else if (CONST_INT_P (*op)) - { - rtx vec_cst; - rtx tmp = gen_rtx_SUBREG (vmode, gen_reg_rtx (smode), 0); - - /* Prefer all ones vector in case of -1. */ - if (constm1_operand (*op, GET_MODE (*op))) - vec_cst = CONSTM1_RTX (vmode); - else - { - unsigned n = GET_MODE_NUNITS (vmode); - rtx *v = XALLOCAVEC (rtx, n); - v[0] = *op; - for (unsigned i = 1; i < n; ++i) - v[i] = const0_rtx; - vec_cst = gen_rtx_CONST_VECTOR (vmode, gen_rtvec_v (n, v)); - } + rtx vec_cst = smode_convert_cst (*op, vmode); if (!standard_sse_constant_p (vec_cst, vmode)) { @@ -1065,6 +1071,8 @@ general_scalar_chain::convert_op (rtx *op, rtx_insn *insn) emit_insn_before (seq, insn); } + tmp = gen_rtx_SUBREG (vmode, gen_reg_rtx (smode), 0); + emit_insn_before (gen_move_insn (copy_rtx (tmp), vec_cst), insn); *op = tmp; } @@ -1767,67 +1775,6 @@ timode_scalar_chain::fix_debug_reg_uses (rtx reg) } } -/* Helper function to convert immediate constant X to V1TImode. */ -static rtx -timode_convert_cst (rtx x) -{ - /* Prefer all ones vector in case of -1. */ - if (constm1_operand (x, TImode)) - return CONSTM1_RTX (V1TImode); - - rtx *v = XALLOCAVEC (rtx, 1); - v[0] = x; - return gen_rtx_CONST_VECTOR (V1TImode, gen_rtvec_v (1, v)); -} - -/* Convert operand OP in INSN from TImode to V1TImode. */ - -void -timode_scalar_chain::convert_op (rtx *op, rtx_insn *insn) -{ - if (GET_MODE (*op) == V1TImode) - return; - - *op = copy_rtx_if_shared (*op); - - if (REG_P (*op)) - *op = gen_rtx_SUBREG (V1TImode, *op, 0); - else if (MEM_P (*op)) - { - rtx tmp = gen_reg_rtx (V1TImode); - emit_insn_before (gen_rtx_SET (tmp, - gen_gpr_to_xmm_move_src (V1TImode, *op)), - insn); - *op = tmp; - - if (dump_file) - fprintf (dump_file, " Preloading operand for insn %d into r%d\n", - INSN_UID (insn), REGNO (tmp)); - } - else if (CONST_SCALAR_INT_P (*op)) - { - rtx tmp = gen_reg_rtx (V1TImode); - rtx vec_cst = timode_convert_cst (*op); - - if (!standard_sse_constant_p (vec_cst, V1TImode)) - { - start_sequence (); - vec_cst = validize_mem (force_const_mem (V1TImode, vec_cst)); - rtx_insn *seq = get_insns (); - end_sequence (); - emit_insn_before (seq, insn); - } - - emit_insn_before (gen_move_insn (tmp, vec_cst), insn); - *op = tmp; - } - else - { - gcc_assert (SUBREG_P (*op)); - gcc_assert (GET_MODE (*op) == vmode); - } -} - /* Convert INSN from TImode to V1T1mode. */ void @@ -1892,7 +1839,7 @@ timode_scalar_chain::convert_insn (rtx_insn *insn) } else { - src = timode_convert_cst (src); + src = smode_convert_cst (src, V1TImode); src = validize_mem (force_const_mem (V1TImode, src)); use_move = MEM_P (dst); } diff --git a/gcc/config/i386/i386-features.h b/gcc/config/i386/i386-features.h index b259cf679af9..fbf72377afb8 100644 --- a/gcc/config/i386/i386-features.h +++ b/gcc/config/i386/i386-features.h @@ -170,13 +170,13 @@ class scalar_chain void convert_insn_common (rtx_insn *insn); void make_vector_copies (rtx_insn *, rtx); void convert_registers (); + void convert_op (rtx *op, rtx_insn *insn); private: bool add_insn (bitmap candidates, unsigned insn_uid, bitmap disallowed); bool analyze_register_chain (bitmap candidates, df_ref ref, bitmap disallowed); virtual void convert_insn (rtx_insn *insn) = 0; - virtual void convert_op (rtx *op, rtx_insn *insn) = 0; }; class general_scalar_chain : public scalar_chain @@ -188,7 +188,6 @@ class general_scalar_chain : public scalar_chain private: void convert_insn (rtx_insn *insn) final override; - void convert_op (rtx *op, rtx_insn *insn) final override; int vector_const_cost (rtx exp); rtx convert_rotate (enum rtx_code, rtx op0, rtx op1, rtx_insn *insn); }; @@ -202,7 +201,6 @@ class timode_scalar_chain : public scalar_chain private: void fix_debug_reg_uses (rtx reg); void convert_insn (rtx_insn *insn) final override; - void convert_op (rtx *op, rtx_insn *insn) final override; }; } // anon namespace diff --git a/gcc/testsuite/g++.target/i386/pr111822.C b/gcc/testsuite/g++.target/i386/pr111822.C index d405387b23cf..0829c91f2701 100644 --- a/gcc/testsuite/g++.target/i386/pr111822.C +++ b/gcc/testsuite/g++.target/i386/pr111822.C @@ -1,6 +1,6 @@ /* PR target/111822 */ -/* { dg-do compile } */ -/* { dg-options "-O2 -flive-range-shrinkage -fno-dce -fnon-call-exceptions" } */ +/* { dg-do compile { target ia32 } } */ +/* { dg-options "-O2 -flive-range-shrinkage -fno-dce -fnon-call-exceptions -march=x86-64" } */ typedef union { int *pNativeClosure; From 5f6e0853c30fec72d977afaa6f7a5633a8d910be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= <fdumont@gcc.gnu.org> Date: Sun, 17 Mar 2024 17:30:58 +0100 Subject: [PATCH 111/551] libstdc++: Fix _Safe_local_iterator<>::_M_valid_range Unordered container local_iterator range shall not contain any singular iterator unless both iterators are both value-initialized. libstdc++-v3/ChangeLog: * include/debug/safe_local_iterator.tcc (_Safe_local_iterator::_M_valid_range): Add _M_value_initialized and _M_singular checks. * testsuite/23_containers/unordered_set/debug/114316.cc: New test case. --- .../include/debug/safe_local_iterator.tcc | 8 +++++- .../unordered_set/debug/114316.cc | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/23_containers/unordered_set/debug/114316.cc diff --git a/libstdc++-v3/include/debug/safe_local_iterator.tcc b/libstdc++-v3/include/debug/safe_local_iterator.tcc index 90e60e37c322..6d546ec040c4 100644 --- a/libstdc++-v3/include/debug/safe_local_iterator.tcc +++ b/libstdc++-v3/include/debug/safe_local_iterator.tcc @@ -78,7 +78,13 @@ namespace __gnu_debug _M_valid_range(const _Safe_local_iterator& __rhs, std::pair<difference_type, _Distance_precision>& __dist) const { - if (!_M_can_compare(__rhs)) + if (_M_value_initialized() && __rhs._M_value_initialized()) + { + __dist = { 0, __dp_exact }; + return true; + } + + if (_M_singular() || __rhs._M_singular() || !_M_can_compare(__rhs)) return false; if (bucket() != __rhs.bucket()) diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/debug/114316.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/114316.cc new file mode 100644 index 000000000000..41b649a9cbd3 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/debug/114316.cc @@ -0,0 +1,28 @@ +// { dg-do run { target c++11 } } +// { dg-require-debug-mode "" } + +// PR libstdc++/114316 + +#include <unordered_set> +#include <algorithm> + +#include <testsuite_hooks.h> + +void test01() +{ + std::unordered_set<int>::iterator it{}; + VERIFY( std::find(it, it, 0) == it ); +} + +void test02() +{ + std::unordered_set<int>::local_iterator it{}; + VERIFY( std::find(it, it, 0) == it ); +} + +int main() +{ + test01(); + test02(); + return 0; +} From dda96a9d942d73a587e174dd5efe061208a195af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= <fdumont@gcc.gnu.org> Date: Sun, 17 Mar 2024 19:06:55 +0100 Subject: [PATCH 112/551] libstdc++: Fix N3344 behavior on _Safe_iterator::_M_can_advance We shall be able to advance from a 0 offset a value-initialized iterator. libstdc++-v3/ChangeLog: * include/debug/safe_iterator.tcc (_Safe_iterator<>::_M_can_advance): Accept 0 offset advance on value-initialized iterator. * testsuite/23_containers/vector/debug/n3644.cc: New test case. --- libstdc++-v3/include/debug/safe_iterator.tcc | 3 +++ .../23_containers/vector/debug/n3644.cc | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 libstdc++-v3/testsuite/23_containers/vector/debug/n3644.cc diff --git a/libstdc++-v3/include/debug/safe_iterator.tcc b/libstdc++-v3/include/debug/safe_iterator.tcc index 4b2baf2980ed..deaa84d0a1f3 100644 --- a/libstdc++-v3/include/debug/safe_iterator.tcc +++ b/libstdc++-v3/include/debug/safe_iterator.tcc @@ -86,6 +86,9 @@ namespace __gnu_debug _Safe_iterator<_Iterator, _Sequence, _Category>:: _M_can_advance(difference_type __n, bool __strict) const { + if (this->_M_value_initialized() && __n == 0) + return true; + if (this->_M_singular()) return false; diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/n3644.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/n3644.cc new file mode 100644 index 000000000000..052c52f26b7c --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/n3644.cc @@ -0,0 +1,16 @@ +// { dg-do run { target c++11 } } +// { dg-require-debug-mode "" } + +#include <vector> +#include <algorithm> + +#include <testsuite_hooks.h> + +int main() +{ + std::vector<int>::iterator it{}; + auto cpy = it; + std::advance(it, 0); + VERIFY( it == cpy ); + return 0; +} From 3c2827d75ea8fbf7b84bd69e8d10dc239e5daffe Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Mon, 18 Mar 2024 18:44:32 -0400 Subject: [PATCH 113/551] analyzer: support null operands in remove_ssa_names gcc/analyzer/ChangeLog: * access-diagram.cc (remove_ssa_names): Support operands being NULL_TREE, such as e.g. for COMPONENT_REF's operand 2. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/access-diagram.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access-diagram.cc index 2836308c0199..a9c5c8999503 100644 --- a/gcc/analyzer/access-diagram.cc +++ b/gcc/analyzer/access-diagram.cc @@ -311,7 +311,8 @@ remove_ssa_names (tree expr) return SSA_NAME_VAR (expr); tree t = copy_node (expr); for (int i = 0; i < TREE_OPERAND_LENGTH (expr); i++) - TREE_OPERAND (t, i) = remove_ssa_names (TREE_OPERAND (expr, i)); + if (TREE_OPERAND (expr, i)) + TREE_OPERAND (t, i) = remove_ssa_names (TREE_OPERAND (expr, i)); return t; } From 1579394c9ecf3d1f678daa54b835c7fc3b76fb6d Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Mon, 18 Mar 2024 18:44:34 -0400 Subject: [PATCH 114/551] analyzer: fix ICEs due to sloppy types in bounds-checking [PR110902,PR110928,PR111305,PR111441] Various analyzer ICEs in our bugzilla relate to sloppy use of types within bounds-checking. The bounds-checking code works by comparing symbolic *bit* offsets, and we don't have a good user-facing type that can represent such an offset (ptrdiff_type_node is for *byte* offsets). ana::svalue doesn't enforce valid combinations of types for things like binary operations. When I added the access diagrams for GCC 14, this could lead to attempts to generate trees for such svalues, leading to trees with invalid combinations of types (e.g. PLUS_EXPR or MULT_EXPR of incompatible types), leading to ICEs inside the tree folding logic. I tried two approaches to fixing this. My first approach was to fix the type-handling throughout the bounds-checking code to use correct types, using size_type_node for sizes, ptrdiff_type_node for byte offsets, and trying ptrdiff_type_node for bit offsets. I implemented this, and it fixed the crashes, but unfortunately it led to: (a) numerous false negatives from the bounds-checking code, due to it becoming unable to be sure that the accessed offset was beyond the valid bounds, due to the expressions involved gaining complicated sets of nested casts. (b) ugly access diagrams full of nested casts (for capacities, gap measurements, etc) So my second approach, implemented in this patch, is to accept that we don't have a tree type for representing bit offsets. The patch represents bit offsets using "typeless" symbolic values i.e. ones for which get_type () is NULL_TREE, and implements enough support for basic arithemetic as if these are mathematical integers (albeit ones for which concrete values within an expression must fit within a signed wide int). Such values can't be converted to tree, so the patch avoids such conversions, instead implementing a new svalue::maybe_print_for_user for printing them to a pretty_printer. The patch uses ptrdiff_type_node for byte offsets. Doing so fixes the crashes, whilst appearing to preserve the behavior of -Wanalyzer-out-of-bounds in my testing. gcc/analyzer/ChangeLog: PR analyzer/110902 PR analyzer/110928 PR analyzer/111305 PR analyzer/111441 * access-diagram.cc: Include "analyzer/analyzer-selftests.h". (get_access_size_str): Reimplement for conversion of implmementation of bit_size_expr from tree to const svalue &. Use svalue::maybe_print_for_user rather than tree printing routines. (remove_ssa_names): Make non-static. (bit_size_expr::get_formatted_str): Rename to... (bit_size_expr::maybe_get_formatted_str): ...this, adding "model" param and converting return type to a unique_ptr. Update for conversion of implementation of bit_size_expr from tree to const svalue &. Use svalue::maybe_print_for_user rather than tree printing routines. (bit_size_expr::print): Rename to... (bit_size_expr::maybe_print_for_user): ...this, adding "model" param and converting return type to bool. Update for conversion of implementation of bit_size_expr from tree to const svalue &. Use svalue::maybe_print_for_user rather than tree printing routines. (bit_size_expr::maybe_get_as_bytes): Add "mgr" param and convert return type from tree to const svalue *; reimplement. (access_range::access_range): Call strip_types when on region_offset intializations. (access_range::get_size): Update for conversion of implementation of bit_size_expr from tree to const svalue &. (access_operation::get_valid_bits): Pass manager to access_range ctor. (access_operation::maybe_get_invalid_before_bits): Likewise. (access_operation::maybe_get_invalid_after_bits): Likewise. (boundaries::add): Likewise. (bit_to_table_map::populate): Add "mgr" param and pass it to access_range ctor. (access_diagram_impl::access_diagram_impl): Pass manager to bit_to_table_map::populate. (access_diagram_impl::maybe_add_gap): Use svalue rather than tree for symbolic bit offsets. Port to new bit_size_expr representation. (access_diagram_impl::add_valid_vs_invalid_ruler): Port to new bit_size_expr representation. (selftest::assert_eq_typeless_integer): New. (ASSERT_EQ_TYPELESS_INTEGER): New. (selftest::test_bit_size_expr_to_bytes): New. (selftest::analyzer_access_diagram_cc_tests): New. * access-diagram.h (class bit_size_expr): Reimplement, converting implementation from tree to const svalue &. (access_range::access_range): Add "mgr" param. Call strip_types on region_offset initializations. (access_range::get_size): Update decl for reimplementation. * analyzer-selftests.cc (selftest::run_analyzer_selftests): Call selftest::analyzer_access_diagram_cc_tests. * analyzer-selftests.h (selftest::analyzer_checker_script_cc_tests): Delete this stray typo. (selftest::analyzer_access_diagram_cc_tests): New decl. * analyzer.h (print_expr_for_user): New decl. (calc_symbolic_bit_offset): Update decl for reimplementation. (strip_types): New decls. (remove_ssa_names): New decl. * bounds-checking.cc (strip_types): New. (region_model::check_symbolic_bounds): Use typeless svalues. * region-model-manager.cc (region_model_manager::get_or_create_constant_svalue): Add "type" param. Add overload with old signature. (region_model_manager::get_or_create_int_cst): Support type being NULL_TREE. (region_model_manager::maybe_fold_unaryop): Gracefully reject folding of casts to NULL_TREE type. (get_code_for_cast): Use NOP_EXPR for "casting" svalues to NULL_TREE type. (region_model_manager::get_or_create_cast): Support "casting" svalues to NULL_TREE type. (region_model_manager::maybe_fold_binop): Don't crash on inputs with NULL_TREE type. Handle folding of binops on constants with NULL_TREE type. Add missing cast from PR analyzer/110902. Support enough folding of other ops on NULL_TREE type to support bounds checking. (region_model_manager::get_or_create_const_fn_result_svalue): Remove assertion that type is nonnull. * region-model-manager.h (region_model_manager::get_or_create_constant_svalue): Add overloaded decl taking a type. (region_model_manager::maybe_fold_binop): Make public. (region_model_manager::constants_map_t): Use constant_svalue::key_t for the key, rather than just tree. * region-model.cc (print_expr_for_user): New. (selftest::test_array_2): Handle casts. * region.cc (region_offset::calc_symbolic_bit_offset): Return const svalue & rather than tree, and reimplement accordingly. (region::calc_offset): Use ptrdiff_type_node for types of byte offsets. (region::maybe_print_for_user): New. (element_region::get_relative_symbolic_offset): Use NULL_TREE for types of bit offsets. (offset_region::get_bit_offset): Likewise. (sized_region::get_bit_size_sval): Likewise for bit sizes. * region.h (region::maybe_print_for_user): New decl. * svalue.cc (class auto_add_parens): New. (svalue::maybe_print_for_user): New. (svalue::cmp_ptr): Support typeless constant svalues. (tristate_from_boolean_tree_node): New, taken from... (constant_svalue::eval_condition): ...here. Handle comparison of typeless integer svalue constants. * svalue.h (svalue::maybe_print_for_user): New decl. (class constant_svalue): Support the type of the svalue being NULL_TREE. (struct default_hash_traits<constant_svalue::key_t>): New. gcc/ChangeLog: PR analyzer/110902 PR analyzer/110928 PR analyzer/111305 PR analyzer/111441 * selftest.h (ASSERT_NE_AT): New macro. gcc/testsuite/ChangeLog: PR analyzer/110902 PR analyzer/110928 PR analyzer/111305 PR analyzer/111441 * c-c++-common/analyzer/out-of-bounds-const-fn.c: New test. * c-c++-common/analyzer/out-of-bounds-diagram-11.c: Update expected diagram output. * c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c: New test. * c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c: New test. * c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/access-diagram.cc | 588 +++++++++++------- gcc/analyzer/access-diagram.h | 38 +- gcc/analyzer/analyzer-selftests.cc | 1 + gcc/analyzer/analyzer-selftests.h | 2 +- gcc/analyzer/analyzer.h | 11 +- gcc/analyzer/bounds-checking.cc | 148 ++++- gcc/analyzer/region-model-manager.cc | 162 ++++- gcc/analyzer/region-model-manager.h | 7 +- gcc/analyzer/region-model.cc | 23 +- gcc/analyzer/region.cc | 67 +- gcc/analyzer/region.h | 3 + gcc/analyzer/svalue.cc | 156 ++++- gcc/analyzer/svalue.h | 49 +- gcc/selftest.h | 12 + .../analyzer/out-of-bounds-const-fn.c | 48 ++ .../analyzer/out-of-bounds-diagram-11.c | 15 +- .../analyzer/out-of-bounds-diagram-pr110928.c | 28 + .../analyzer/out-of-bounds-diagram-pr111305.c | 26 + .../analyzer/out-of-bounds-diagram-pr111441.c | 19 + 19 files changed, 1070 insertions(+), 333 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access-diagram.cc index a9c5c8999503..4cb6570e90b9 100644 --- a/gcc/analyzer/access-diagram.cc +++ b/gcc/analyzer/access-diagram.cc @@ -40,6 +40,7 @@ along with GCC; see the file COPYING3. If not see #include "analyzer/access-diagram.h" #include "text-art/ruler.h" #include "fold-const.h" +#include "analyzer/analyzer-selftests.h" #if ENABLE_ANALYZER @@ -237,16 +238,14 @@ get_access_size_str (style_manager &sm, access_range accessed_range, tree type) { - bit_size_expr num_bits; - if (accessed_range.get_size (op.m_model, &num_bits)) + bit_size_expr num_bits (accessed_range.get_size (op.m_model.get_manager ())); + if (type) { - if (type) + styled_string s; + pretty_printer pp; + pp_format_decoder (&pp) = default_tree_printer; + if (num_bits.maybe_print_for_user (&pp, op.m_model)) { - styled_string s; - - pretty_printer pp; - num_bits.print (&pp); - if (op.m_dir == DIR_READ) return fmt_styled_string (sm, _("read of %qT (%s)"), @@ -258,22 +257,30 @@ get_access_size_str (style_manager &sm, type, pp_formatted_text (&pp)); } - if (op.m_dir == DIR_READ) - return num_bits.get_formatted_str (sm, - _("read of %wi bit"), - _("read of %wi bits"), - _("read of %wi byte"), - _("read of %wi bytes"), - _("read of %qE bits"), - _("read of %qE bytes")); - else - return num_bits.get_formatted_str (sm, - _("write of %wi bit"), - _("write of %wi bits"), - _("write of %wi byte"), - _("write of %wi bytes"), - _("write of %qE bits"), - _("write of %qE bytes")); + } + if (op.m_dir == DIR_READ) + { + if (auto p + = num_bits.maybe_get_formatted_str (sm, op.m_model, + _("read of %wi bit"), + _("read of %wi bits"), + _("read of %wi byte"), + _("read of %wi bytes"), + _("read of %qs bits"), + _("read of %qs bytes"))) + return std::move (*p.get ()); + } + else + { + if (auto p + = num_bits.maybe_get_formatted_str (sm, op.m_model, + _("write of %wi bit"), + _("write of %wi bits"), + _("write of %wi byte"), + _("write of %wi bytes"), + _("write of %qs bits"), + _("write of %qs bytes"))) + return std::move (*p.get ()); } if (type) @@ -301,9 +308,9 @@ strip_any_cast (tree expr) return expr; } -/* Subroutine of clean_up_for_diagram. */ +/* Duplicate EXPR, replacing any SSA names with the underlying variable. */ -static tree +tree remove_ssa_names (tree expr) { if (TREE_CODE (expr) == SSA_NAME @@ -343,112 +350,124 @@ clean_up_for_diagram (tree expr) /* struct bit_size_expr. */ -text_art::styled_string -bit_size_expr::get_formatted_str (text_art::style_manager &sm, - const char *concrete_single_bit_fmt, - const char *concrete_plural_bits_fmt, - const char *concrete_single_byte_fmt, - const char *concrete_plural_bytes_fmt, - const char *symbolic_bits_fmt, - const char *symbolic_bytes_fmt) const +/* Attempt to generate a user-facing styled string that mentions this + bit_size_expr. + Use MODEL for extracting representative tree values where necessary. + The CONCRETE_* format strings should contain a single %wi. + The SYMBOLIC_* format strings should contain a single %qs. + Return nullptr if unable to represent the expression. */ + +std::unique_ptr<text_art::styled_string> +bit_size_expr::maybe_get_formatted_str (text_art::style_manager &sm, + const region_model &model, + const char *concrete_single_bit_fmt, + const char *concrete_plural_bits_fmt, + const char *concrete_single_byte_fmt, + const char *concrete_plural_bytes_fmt, + const char *symbolic_bits_fmt, + const char *symbolic_bytes_fmt) const { - if (TREE_CODE (m_num_bits) == INTEGER_CST) + region_model_manager &mgr = *model.get_manager (); + if (const svalue *num_bytes = maybe_get_as_bytes (mgr)) { - bit_size_t concrete_num_bits = wi::to_offset (m_num_bits); - if (concrete_num_bits % BITS_PER_UNIT == 0) + if (tree cst = num_bytes->maybe_get_constant ()) { - byte_size_t concrete_num_bytes = concrete_num_bits / BITS_PER_UNIT; + byte_size_t concrete_num_bytes = wi::to_offset (cst); if (concrete_num_bytes == 1) - return fmt_styled_string (sm, concrete_single_byte_fmt, - concrete_num_bytes.to_uhwi ()); + return ::make_unique <text_art::styled_string> + (fmt_styled_string (sm, concrete_single_byte_fmt, + concrete_num_bytes.to_uhwi ())); else - return fmt_styled_string (sm, concrete_plural_bytes_fmt, - concrete_num_bytes.to_uhwi ()); + return ::make_unique <text_art::styled_string> + (fmt_styled_string (sm, concrete_plural_bytes_fmt, + concrete_num_bytes.to_uhwi ())); } else { - if (concrete_num_bits == 1) - return fmt_styled_string (sm, concrete_single_bit_fmt, - concrete_num_bits.to_uhwi ()); - else - return fmt_styled_string (sm, concrete_plural_bits_fmt, - concrete_num_bits.to_uhwi ()); + pretty_printer pp; + pp_format_decoder (&pp) = default_tree_printer; + if (!num_bytes->maybe_print_for_user (&pp, model)) + return nullptr; + return ::make_unique <text_art::styled_string> + (fmt_styled_string (sm, symbolic_bytes_fmt, + pp_formatted_text (&pp))); } } + else if (tree cst = m_num_bits.maybe_get_constant ()) + { + bit_size_t concrete_num_bits = wi::to_offset (cst); + if (concrete_num_bits == 1) + return ::make_unique <text_art::styled_string> + (fmt_styled_string (sm, concrete_single_bit_fmt, + concrete_num_bits.to_uhwi ())); + else + return ::make_unique <text_art::styled_string> + (fmt_styled_string (sm, concrete_plural_bits_fmt, + concrete_num_bits.to_uhwi ())); + } else { - if (tree bytes_expr = maybe_get_as_bytes ()) - return fmt_styled_string (sm, - symbolic_bytes_fmt, - clean_up_for_diagram (bytes_expr)); - return fmt_styled_string (sm, - symbolic_bits_fmt, - clean_up_for_diagram (m_num_bits)); + pretty_printer pp; + pp_format_decoder (&pp) = default_tree_printer; + if (!m_num_bits.maybe_print_for_user (&pp, model)) + return nullptr; + return ::make_unique <text_art::styled_string> + (fmt_styled_string (sm, symbolic_bits_fmt, + pp_formatted_text (&pp))); } } -void -bit_size_expr::print (pretty_printer *pp) const +bool +bit_size_expr::maybe_print_for_user (pretty_printer *pp, + const region_model &model) const { - if (TREE_CODE (m_num_bits) == INTEGER_CST) + if (tree cst = m_num_bits.maybe_get_constant ()) { - bit_size_t concrete_num_bits = wi::to_offset (m_num_bits); + bit_size_t concrete_num_bits = wi::to_offset (cst); pp_bit_size_t (pp, concrete_num_bits); + return true; } else { - if (tree bytes_expr = maybe_get_as_bytes ()) - pp_printf (pp, _("%qE bytes"), bytes_expr); + if (const svalue *num_bytes = maybe_get_as_bytes (*model.get_manager ())) + { + pretty_printer tmp_pp; + pp_format_decoder (&tmp_pp) = default_tree_printer; + if (!num_bytes->maybe_print_for_user (&tmp_pp, model)) + return false; + pp_printf (pp, _("%qs bytes"), pp_formatted_text (&tmp_pp)); + return true; + } else - pp_printf (pp, _("%qE bits"), m_num_bits); + { + pretty_printer tmp_pp; + pp_format_decoder (&tmp_pp) = default_tree_printer; + if (!m_num_bits.maybe_print_for_user (&tmp_pp, model)) + return false; + pp_printf (pp, _("%qs bits"), pp_formatted_text (&tmp_pp)); + return true; + } } } -tree -bit_size_expr::maybe_get_as_bytes () const +/* Attempt to get a symbolic value for this symbolic bit size, + expressed in bytes. + Return null if it's not known to divide exactly. */ + +const svalue * +bit_size_expr::maybe_get_as_bytes (region_model_manager &mgr) const { - switch (TREE_CODE (m_num_bits)) + if (tree cst = m_num_bits.maybe_get_constant ()) { - default: - break; - case INTEGER_CST: - { - const bit_size_t num_bits = wi::to_offset (m_num_bits); - if (num_bits % BITS_PER_UNIT != 0) - return NULL_TREE; - const bit_size_t num_bytes = num_bits / BITS_PER_UNIT; - return wide_int_to_tree (size_type_node, num_bytes); - } - break; - case PLUS_EXPR: - case MINUS_EXPR: - { - bit_size_expr op0 - = bit_size_expr (TREE_OPERAND (m_num_bits, 0)); - tree op0_as_bytes = op0.maybe_get_as_bytes (); - if (!op0_as_bytes) - return NULL_TREE; - bit_size_expr op1 - = bit_size_expr (TREE_OPERAND (m_num_bits, 1)); - tree op1_as_bytes = op1.maybe_get_as_bytes (); - if (!op1_as_bytes) - return NULL_TREE; - return fold_build2 (TREE_CODE (m_num_bits), size_type_node, - op0_as_bytes, op1_as_bytes); - } - break; - case MULT_EXPR: - { - bit_size_expr op1 - = bit_size_expr (TREE_OPERAND (m_num_bits, 1)); - if (tree op1_as_bytes = op1.maybe_get_as_bytes ()) - return fold_build2 (MULT_EXPR, size_type_node, - TREE_OPERAND (m_num_bits, 0), - op1_as_bytes); - } - break; + bit_offset_t concrete_bits = wi::to_offset (cst); + if (concrete_bits % BITS_PER_UNIT != 0) + /* Not an exact multiple, so fail. */ + return nullptr; } - return NULL_TREE; + const svalue *bits_per_byte + = mgr.get_or_create_int_cst (NULL_TREE, BITS_PER_UNIT); + return mgr.maybe_fold_binop (NULL_TREE, EXACT_DIV_EXPR, + &m_num_bits, bits_per_byte); } /* struct access_range. */ @@ -470,23 +489,19 @@ access_range::access_range (const region *base_region, const byte_range &bytes) } access_range::access_range (const region ®, region_model_manager *mgr) -: m_start (reg.get_offset (mgr)), - m_next (reg.get_next_offset (mgr)) +: m_start (strip_types (reg.get_offset (mgr), *mgr)), + m_next (strip_types (reg.get_next_offset (mgr), *mgr)) { } -bool -access_range::get_size (const region_model &model, bit_size_expr *out) const +bit_size_expr +access_range::get_size (region_model_manager *mgr) const { - tree start_expr = m_start.calc_symbolic_bit_offset (model); - if (!start_expr) - return false; - tree next_expr = m_next.calc_symbolic_bit_offset (model); - if (!next_expr) - return false; - *out = bit_size_expr (fold_build2 (MINUS_EXPR, size_type_node, - next_expr, start_expr)); - return true; + const svalue &start_bit_offset = m_start.calc_symbolic_bit_offset (mgr); + const svalue &next_bit_offset = m_next.calc_symbolic_bit_offset (mgr); + return bit_size_expr + (*mgr->get_or_create_binop (NULL_TREE, MINUS_EXPR, + &next_bit_offset, &start_bit_offset)); } bool @@ -551,7 +566,8 @@ access_operation::get_valid_bits () const const svalue *capacity_in_bytes_sval = m_model.get_capacity (m_base_region); return access_range (region_offset::make_concrete (m_base_region, 0), - region_offset::make_byte_offset (m_base_region, capacity_in_bytes_sval)); + region_offset::make_byte_offset (m_base_region, capacity_in_bytes_sval), + *get_manager ()); } access_range @@ -579,7 +595,8 @@ access_operation::maybe_get_invalid_before_bits (access_range *out) const else if (actual_bits.m_next > valid_bits.m_start) { /* Get part of accessed range that's before the valid range. */ - *out = access_range (actual_bits.m_start, valid_bits.m_start); + *out = access_range (actual_bits.m_start, valid_bits.m_start, + *get_manager ()); return true; } else @@ -608,7 +625,8 @@ access_operation::maybe_get_invalid_after_bits (access_range *out) const else if (actual_bits.m_start < valid_bits.m_next) { /* Get part of accessed range that's after the valid range. */ - *out = access_range (valid_bits.m_next, actual_bits.m_next); + *out = access_range (valid_bits.m_next, actual_bits.m_next, + *get_manager ()); return true; } else @@ -663,7 +681,8 @@ class boundaries void add (const region ®, region_model_manager *mgr, enum kind kind) { add (access_range (reg.get_offset (mgr), - reg.get_next_offset (mgr)), + reg.get_next_offset (mgr), + *mgr), kind); } @@ -1004,7 +1023,9 @@ class bit_to_table_map { public: /* Populate m_table_x_for_bit and m_bit_for_table_x. */ - void populate (const boundaries &boundaries, logger *logger) + void populate (const boundaries &boundaries, + region_model_manager &mgr, + logger *logger) { LOG_SCOPE (logger); @@ -1043,7 +1064,8 @@ class bit_to_table_map { const region_offset &next_offset = vec_boundaries[idx + 1]; m_table_x_for_prev_offset[next_offset] = table_x; - m_range_for_table_x[table_x] = access_range (offset, next_offset); + m_range_for_table_x[table_x] + = access_range (offset, next_offset, mgr); } table_x += 1; } @@ -2072,7 +2094,7 @@ class access_diagram_impl : public vbox_widget We don't create a column in the table for the final offset, but we do populate it, so that looking at the table_x of one beyond the final table column gives us the upper bound offset. */ - m_btm.populate (*m_boundaries, logger); + m_btm.populate (*m_boundaries, *m_op.get_manager (), logger); /* Gracefully reject cases where the boundary sorting has gone wrong (due to awkward combinations of symbolic values). */ @@ -2291,30 +2313,19 @@ class access_diagram_impl : public vbox_widget lower.log ("lower", *m_logger); upper.log ("upper", *m_logger); } - tree lower_next = lower.m_next.calc_symbolic_bit_offset (m_op.m_model); - if (!lower_next) - { - if (m_logger) - m_logger->log ("failed to get lower_next"); - return; - } - tree upper_start = upper.m_start.calc_symbolic_bit_offset (m_op.m_model); - if (!upper_start) - { - if (m_logger) - m_logger->log ("failed to get upper_start"); - return; - } - tree num_bits_gap = fold_build2 (MINUS_EXPR, - size_type_node, - upper_start, lower_next); + region_model_manager *mgr = m_op.get_manager (); + const svalue &lower_next = lower.m_next.calc_symbolic_bit_offset (mgr); + const svalue &upper_start = upper.m_start.calc_symbolic_bit_offset (mgr); + const svalue *num_bits_gap + = mgr->get_or_create_binop (NULL_TREE, MINUS_EXPR, + &upper_start, &lower_next); if (m_logger) - m_logger->log ("num_bits_gap: %qE", num_bits_gap); - tree zero = build_int_cst (size_type_node, 0); + m_logger->log ("num_bits_gap: %qs", num_bits_gap->get_desc ().get ()); + + const svalue *zero = mgr->get_or_create_int_cst (NULL_TREE, 0); tristate ts_gt_zero = m_op.m_model.eval_condition (num_bits_gap, GT_EXPR, - zero, - NULL); + zero); if (ts_gt_zero.is_false ()) { if (m_logger) @@ -2322,18 +2333,23 @@ class access_diagram_impl : public vbox_widget return; } - bit_size_expr num_bits (num_bits_gap); - styled_string label = num_bits.get_formatted_str (m_sm, - _("%wi bit"), - _("%wi bits"), - _("%wi byte"), - _("%wi bytes"), - _("%qE bits"), - _("%qE bytes")); - w->add_range (m_btm.get_table_x_for_range (access_range (lower.m_next, - upper.m_start)), - std::move (label), - style::id_plain); + bit_size_expr num_bits (*num_bits_gap); + if (auto p = num_bits.maybe_get_formatted_str (m_sm, m_op.m_model, + _("%wi bit"), + _("%wi bits"), + _("%wi byte"), + _("%wi bytes"), + _("%qs bits"), + _("%qs bytes"))) + { + styled_string label = std::move (*p.get ()); + w->add_range (m_btm.get_table_x_for_range + (access_range (lower.m_next, + upper.m_start, + *mgr)), + std::move (label), + style::id_plain); + } } styled_string @@ -2367,32 +2383,31 @@ class access_diagram_impl : public vbox_widget { if (m_logger) invalid_before_bits.log ("invalid_before_bits", *m_logger); - bit_size_expr num_before_bits; - if (invalid_before_bits.get_size (m_op.m_model, &num_before_bits)) - { - styled_string label; - if (m_op.m_dir == DIR_READ) - label = num_before_bits.get_formatted_str - (m_sm, - _("under-read of %wi bit"), - _("under-read of %wi bits"), - _("under-read of %wi byte"), - _("under-read of %wi bytes"), - _("under-read of %qE bits"), - _("under-read of %qE bytes")); - else - label = num_before_bits.get_formatted_str - (m_sm, - _("underwrite of %wi bit"), - _("underwrite of %wi bits"), - _("underwrite of %wi byte"), - _("underwrite of %wi bytes"), - _("underwrite of %qE bits"), - _("underwrite of %qE bytes")); - w->add_range (m_btm.get_table_x_for_range (invalid_before_bits), - make_warning_string (std::move (label)), - m_invalid_style_id); - } + bit_size_expr num_before_bits + (invalid_before_bits.get_size (m_op.get_manager ())); + std::unique_ptr<styled_string> label; + if (m_op.m_dir == DIR_READ) + label = num_before_bits.maybe_get_formatted_str + (m_sm, m_op.m_model, + _("under-read of %wi bit"), + _("under-read of %wi bits"), + _("under-read of %wi byte"), + _("under-read of %wi bytes"), + _("under-read of %qs bits"), + _("under-read of %qs bytes")); + else + label = num_before_bits.maybe_get_formatted_str + (m_sm, m_op.m_model, + _("underwrite of %wi bit"), + _("underwrite of %wi bits"), + _("underwrite of %wi byte"), + _("underwrite of %wi bytes"), + _("underwrite of %qs bits"), + _("underwrite of %qs bytes")); + if (label) + w->add_range (m_btm.get_table_x_for_range (invalid_before_bits), + make_warning_string (std::move (*label)), + m_invalid_style_id); } else { @@ -2404,36 +2419,37 @@ class access_diagram_impl : public vbox_widget but std::optional is C++17. */ bool got_valid_bits = false; access_range valid_bits (m_op.get_valid_bits ()); - bit_size_expr num_valid_bits; - if (valid_bits.get_size (m_op.m_model, &num_valid_bits)) - { - if (m_logger) - valid_bits.log ("valid_bits", *m_logger); - - got_valid_bits = true; - maybe_add_gap (w, invalid_before_bits, valid_bits); - - styled_string label; - if (m_op.m_dir == DIR_READ) - label = num_valid_bits.get_formatted_str (m_sm, - _("size: %wi bit"), - _("size: %wi bits"), - _("size: %wi byte"), - _("size: %wi bytes"), - _("size: %qE bits"), - _("size: %qE bytes")); - else - label = num_valid_bits.get_formatted_str (m_sm, - _("capacity: %wi bit"), - _("capacity: %wi bits"), - _("capacity: %wi byte"), - _("capacity: %wi bytes"), - _("capacity: %qE bits"), - _("capacity: %qE bytes")); - w->add_range (m_btm.get_table_x_for_range (m_op.get_valid_bits ()), - std::move (label), - m_valid_style_id); - } + bit_size_expr num_valid_bits (valid_bits.get_size (m_op.get_manager ())); + if (m_logger) + valid_bits.log ("valid_bits", *m_logger); + + got_valid_bits = true; + maybe_add_gap (w, invalid_before_bits, valid_bits); + + std::unique_ptr<styled_string> label; + if (m_op.m_dir == DIR_READ) + label = num_valid_bits.maybe_get_formatted_str (m_sm, + m_op.m_model, + _("size: %wi bit"), + _("size: %wi bits"), + _("size: %wi byte"), + _("size: %wi bytes"), + _("size: %qs bits"), + _("size: %qs bytes")); + else + label + = num_valid_bits.maybe_get_formatted_str (m_sm, + m_op.m_model, + _("capacity: %wi bit"), + _("capacity: %wi bits"), + _("capacity: %wi byte"), + _("capacity: %wi bytes"), + _("capacity: %qs bits"), + _("capacity: %qs bytes")); + if (label) + w->add_range (m_btm.get_table_x_for_range (m_op.get_valid_bits ()), + std::move (*label), + m_valid_style_id); access_range invalid_after_bits; if (m_op.maybe_get_invalid_after_bits (&invalid_after_bits)) @@ -2444,32 +2460,31 @@ class access_diagram_impl : public vbox_widget if (m_logger) invalid_before_bits.log ("invalid_after_bits", *m_logger); - bit_size_expr num_after_bits; - if (invalid_after_bits.get_size (m_op.m_model, &num_after_bits)) - { - styled_string label; - if (m_op.m_dir == DIR_READ) - label = num_after_bits.get_formatted_str - (m_sm, - _("over-read of %wi bit"), - _("over-read of %wi bits"), - _("over-read of %wi byte"), - _("over-read of %wi bytes"), - _("over-read of %qE bits"), - _("over-read of %qE bytes")); - else - label = num_after_bits.get_formatted_str - (m_sm, - _("overflow of %wi bit"), - _("overflow of %wi bits"), - _("overflow of %wi byte"), - _("overflow of %wi bytes"), - _("over-read of %qE bits"), - _("overflow of %qE bytes")); - w->add_range (m_btm.get_table_x_for_range (invalid_after_bits), - make_warning_string (std::move (label)), - m_invalid_style_id); - } + bit_size_expr num_after_bits + (invalid_after_bits.get_size (m_op.get_manager ())); + std::unique_ptr<styled_string> label; + if (m_op.m_dir == DIR_READ) + label = num_after_bits.maybe_get_formatted_str + (m_sm, m_op.m_model, + _("over-read of %wi bit"), + _("over-read of %wi bits"), + _("over-read of %wi byte"), + _("over-read of %wi bytes"), + _("over-read of %qs bits"), + _("over-read of %qs bytes")); + else + label = num_after_bits.maybe_get_formatted_str + (m_sm, m_op.m_model, + _("overflow of %wi bit"), + _("overflow of %wi bits"), + _("overflow of %wi byte"), + _("overflow of %wi bytes"), + _("overflow of %qs bits"), + _("overflow of %qs bytes")); + if (label) + w->add_range (m_btm.get_table_x_for_range (invalid_after_bits), + make_warning_string (std::move (*label)), + m_invalid_style_id); } else { @@ -2673,6 +2688,101 @@ access_diagram::access_diagram (const access_operation &op, { } +#if CHECKING_P + +namespace selftest { + +/* Implementation detail of ASSERT_EQ_TYPELESS_INTEGER. */ + +static void +assert_eq_typeless_integer (const location &loc, + const svalue *sval, + int expected_int_val) +{ + ASSERT_NE_AT (loc, sval, nullptr); + ASSERT_EQ_AT (loc, sval->get_kind (), SK_CONSTANT); + ASSERT_EQ_AT (loc, + wi::to_offset (sval->maybe_get_constant ()), + expected_int_val); + ASSERT_EQ_AT (loc, sval->get_type (), NULL_TREE); +} + +/* Assert that SVAL is a constant_svalue equal to EXPECTED_INT_VAL, + with NULL_TREE as its type. */ + +#define ASSERT_EQ_TYPELESS_INTEGER(SVAL, EXPECTED_INT_VAL) \ + SELFTEST_BEGIN_STMT \ + assert_eq_typeless_integer ((SELFTEST_LOCATION), \ + (SVAL), \ + (EXPECTED_INT_VAL)); \ + SELFTEST_END_STMT + + +/* Various tests of bit_size_expr::maybe_get_as_bytes. */ + +static void +test_bit_size_expr_to_bytes () +{ + region_model_manager mgr; + + /* 40 bits: should be 5 bytes. */ + { + bit_size_expr num_bits (*mgr.get_or_create_int_cst (NULL_TREE, 40)); + const svalue *as_bytes = num_bits.maybe_get_as_bytes (mgr); + ASSERT_EQ_TYPELESS_INTEGER (as_bytes, 5); + } + + /* 41 bits: should not convert to bytes. */ + { + bit_size_expr num_bits (*mgr.get_or_create_int_cst (NULL_TREE, 41)); + const svalue *as_bytes = num_bits.maybe_get_as_bytes (mgr); + ASSERT_EQ (as_bytes, nullptr); + } + + tree n = build_global_decl ("n", size_type_node); + + const svalue *init_n + = mgr.get_or_create_initial_value (mgr.get_region_for_global (n)); + + const svalue *n_times_8 + = mgr.get_or_create_binop (NULL_TREE, MULT_EXPR, + init_n, + mgr.get_or_create_int_cst (NULL_TREE, 8)); + + /* (n * 8) bits should be n bytes */ + { + bit_size_expr num_bits (*n_times_8); + const svalue *as_bytes = num_bits.maybe_get_as_bytes (mgr); + ASSERT_EQ (as_bytes, mgr.get_or_create_cast (NULL_TREE, init_n)); + } + + /* (n * 8) + 16 bits should be n + 2 bytes */ + { + bit_size_expr num_bits + (*mgr.get_or_create_binop (NULL_TREE, PLUS_EXPR, + n_times_8, + mgr.get_or_create_int_cst (NULL_TREE, 16))); + const svalue *as_bytes = num_bits.maybe_get_as_bytes (mgr); + ASSERT_EQ (as_bytes->get_kind (), SK_BINOP); + const binop_svalue *binop = as_bytes->dyn_cast_binop_svalue (); + ASSERT_EQ (binop->get_op (), PLUS_EXPR); + ASSERT_EQ (binop->get_arg0 (), mgr.get_or_create_cast (NULL_TREE, init_n)); + ASSERT_EQ_TYPELESS_INTEGER (binop->get_arg1 (), 2); + } +} + +/* Run all of the selftests within this file. */ + +void +analyzer_access_diagram_cc_tests () +{ + test_bit_size_expr_to_bytes (); +} + +} // namespace selftest + +#endif /* CHECKING_P */ + } // namespace ana #endif /* #if ENABLE_ANALYZER */ diff --git a/gcc/analyzer/access-diagram.h b/gcc/analyzer/access-diagram.h index 435690b4772d..a54d1e6cf529 100644 --- a/gcc/analyzer/access-diagram.h +++ b/gcc/analyzer/access-diagram.h @@ -32,23 +32,24 @@ namespace ana { class bit_size_expr { public: - bit_size_expr () : m_num_bits (NULL) {} - bit_size_expr (tree num_bits) : m_num_bits (num_bits) {} - - text_art::styled_string - get_formatted_str (text_art::style_manager &sm, - const char *concrete_single_bit_fmt, - const char *concrete_plural_bits_fmt, - const char *concrete_single_byte_fmt, - const char *concrete_plural_bytes_fmt, - const char *symbolic_bits_fmt, - const char *symbolic_bytes_fmt) const; - void print (pretty_printer *pp) const; - - tree maybe_get_as_bytes () const; + bit_size_expr (const svalue &num_bits) : m_num_bits (num_bits) {} + + std::unique_ptr<text_art::styled_string> + maybe_get_formatted_str (text_art::style_manager &sm, + const region_model &model, + const char *concrete_single_bit_fmt, + const char *concrete_plural_bits_fmt, + const char *concrete_single_byte_fmt, + const char *concrete_plural_bytes_fmt, + const char *symbolic_bits_fmt, + const char *symbolic_bytes_fmt) const; + bool maybe_print_for_user (pretty_printer *pp, + const region_model &model) const; + + const svalue *maybe_get_as_bytes (region_model_manager &mgr) const; private: - tree m_num_bits; + const svalue &m_num_bits; }; /* A range of bits within a base region, where each endpoint @@ -60,8 +61,9 @@ struct access_range : m_start (), m_next () { } - access_range (region_offset start, region_offset next) - : m_start (start), m_next (next) + access_range (region_offset start, region_offset next, + region_model_manager &mgr) + : m_start (strip_types (start, mgr)), m_next (strip_types (next, mgr)) {} access_range (const region *base_region, const bit_range &bits); access_range (const region *base_region, const byte_range &bytes); @@ -74,7 +76,7 @@ struct access_range bool empty_p () const; - bool get_size (const region_model &model, bit_size_expr *out) const; + bit_size_expr get_size (region_model_manager *mgr) const; bool get_size_in_bits (bit_size_t *out) const { diff --git a/gcc/analyzer/analyzer-selftests.cc b/gcc/analyzer/analyzer-selftests.cc index 20fdba768ad0..4500e3a78f3a 100644 --- a/gcc/analyzer/analyzer-selftests.cc +++ b/gcc/analyzer/analyzer-selftests.cc @@ -51,6 +51,7 @@ void run_analyzer_selftests () { #if ENABLE_ANALYZER + analyzer_access_diagram_cc_tests (); analyzer_constraint_manager_cc_tests (); analyzer_function_set_cc_tests (); analyzer_program_point_cc_tests (); diff --git a/gcc/analyzer/analyzer-selftests.h b/gcc/analyzer/analyzer-selftests.h index 20a2bc4ea391..9cfe37a1b1d2 100644 --- a/gcc/analyzer/analyzer-selftests.h +++ b/gcc/analyzer/analyzer-selftests.h @@ -33,7 +33,7 @@ extern void run_analyzer_selftests (); /* Declarations for specific families of tests (by source file), in alphabetical order. */ -extern void analyzer_checker_script_cc_tests (); +extern void analyzer_access_diagram_cc_tests (); extern void analyzer_constraint_manager_cc_tests (); extern void analyzer_function_set_cc_tests (); extern void analyzer_program_point_cc_tests (); diff --git a/gcc/analyzer/analyzer.h b/gcc/analyzer/analyzer.h index 1d792ed23ec7..d43812e39635 100644 --- a/gcc/analyzer/analyzer.h +++ b/gcc/analyzer/analyzer.h @@ -140,6 +140,7 @@ class known_function; extern void dump_tree (pretty_printer *pp, tree t); extern void dump_quoted_tree (pretty_printer *pp, tree t); extern void print_quoted_type (pretty_printer *pp, tree t); +extern void print_expr_for_user (pretty_printer *pp, tree t); extern int readability_comparator (const void *p1, const void *p2); extern int tree_cmp (const void *p1, const void *p2); extern tree fixup_tree_for_diagnostic (tree); @@ -236,7 +237,7 @@ class region_offset return m_sym_offset; } - tree calc_symbolic_bit_offset (const region_model &model) const; + const svalue &calc_symbolic_bit_offset (region_model_manager *mgr) const; const svalue *calc_symbolic_byte_offset (region_model_manager *mgr) const; bool operator== (const region_offset &other) const @@ -436,6 +437,14 @@ get_string_cst_size (const_tree string_cst); extern tree get_ssa_default_def (const function &fun, tree var); +extern const svalue * +strip_types (const svalue *sval, region_model_manager &mgr); + +extern region_offset +strip_types (const region_offset &offset, region_model_manager &mgr); + +extern tree remove_ssa_names (tree expr); + } // namespace ana extern bool is_special_named_call_p (const gcall *call, const char *funcname, diff --git a/gcc/analyzer/bounds-checking.cc b/gcc/analyzer/bounds-checking.cc index f46058ea478c..f8644addbfdc 100644 --- a/gcc/analyzer/bounds-checking.cc +++ b/gcc/analyzer/bounds-checking.cc @@ -1154,6 +1154,149 @@ class symbolic_buffer_over_read : public symbolic_past_the_end enum access_direction get_dir () const final override { return DIR_READ; } }; +const svalue * +strip_types (const svalue *sval, + region_model_manager &mgr) +{ + switch (sval->get_kind ()) + { + default: + gcc_unreachable (); + case SK_REGION: + { + const region_svalue *region_sval = (const region_svalue *)sval; + return mgr.get_ptr_svalue (NULL_TREE, region_sval->get_pointee ()); + } + case SK_CONSTANT: + return sval; + case SK_UNKNOWN: + return mgr.get_or_create_unknown_svalue (NULL_TREE); + case SK_POISONED: + { + const poisoned_svalue *poisoned_sval = (const poisoned_svalue *)sval; + return mgr.get_or_create_poisoned_svalue + (poisoned_sval->get_poison_kind (), + NULL_TREE); + } + case SK_SETJMP: + return sval; + case SK_INITIAL: + return sval; + case SK_UNARYOP: + { + const unaryop_svalue *unaryop_sval = (const unaryop_svalue *)sval; + const enum tree_code op = unaryop_sval->get_op (); + if (op == VIEW_CONVERT_EXPR || op == NOP_EXPR) + return strip_types (unaryop_sval->get_arg (), mgr); + return mgr.get_or_create_unaryop + (NULL_TREE, + op, + strip_types (unaryop_sval->get_arg (), mgr)); + } + case SK_BINOP: + { + const binop_svalue *binop_sval = (const binop_svalue *)sval; + const enum tree_code op = binop_sval->get_op (); + return mgr.get_or_create_binop + (NULL_TREE, + op, + strip_types (binop_sval->get_arg0 (), mgr), + strip_types (binop_sval->get_arg1 (), mgr)); + } + case SK_SUB: + { + const sub_svalue *sub_sval = (const sub_svalue *)sval; + return mgr.get_or_create_sub_svalue + (NULL_TREE, + strip_types (sub_sval->get_parent (), mgr), + sub_sval->get_subregion ()); + } + case SK_REPEATED: + { + const repeated_svalue *repeated_sval = (const repeated_svalue *)sval; + return mgr.get_or_create_repeated_svalue + (NULL_TREE, + strip_types (repeated_sval->get_outer_size (), mgr), + strip_types (repeated_sval->get_inner_svalue (), mgr)); + } + case SK_BITS_WITHIN: + { + const bits_within_svalue *bits_within_sval + = (const bits_within_svalue *)sval; + return mgr.get_or_create_bits_within + (NULL_TREE, + bits_within_sval->get_bits (), + strip_types (bits_within_sval->get_inner_svalue (), mgr)); + } + case SK_UNMERGEABLE: + { + const unmergeable_svalue *unmergeable_sval + = (const unmergeable_svalue *)sval; + return mgr.get_or_create_unmergeable + (strip_types (unmergeable_sval->get_arg (), mgr)); + } + case SK_PLACEHOLDER: + return sval; + case SK_WIDENING: + { + const widening_svalue *widening_sval = (const widening_svalue *)sval; + return mgr.get_or_create_widening_svalue + (NULL_TREE, + widening_sval->get_point (), + strip_types (widening_sval->get_base_svalue (), mgr), + strip_types (widening_sval->get_iter_svalue (), mgr)); + } + case SK_COMPOUND: + { + const compound_svalue *compound_sval = (const compound_svalue *)sval; + binding_map typeless_map; + for (auto iter : compound_sval->get_map ()) + { + const binding_key *key = iter.first; + const svalue *bound_sval = iter.second; + typeless_map.put (key, strip_types (bound_sval, mgr)); + } + return mgr.get_or_create_compound_svalue (NULL_TREE, typeless_map); + } + case SK_CONJURED: + return sval; + case SK_ASM_OUTPUT: + { + const asm_output_svalue *asm_output_sval + = (const asm_output_svalue *)sval; + auto_vec<const svalue *> typeless_inputs + (asm_output_sval->get_num_inputs ()); + for (unsigned idx = 0; idx < asm_output_sval->get_num_inputs (); idx++) + typeless_inputs.quick_push + (strip_types (asm_output_sval->get_input (idx), + mgr)); + return mgr.get_or_create_asm_output_svalue + (NULL_TREE, + asm_output_sval->get_asm_string (), + asm_output_sval->get_output_idx (), + asm_output_sval->get_num_outputs (), + typeless_inputs); + } + case SK_CONST_FN_RESULT: + { + const const_fn_result_svalue *const_fn_result_sval + = (const const_fn_result_svalue *)sval; + auto_vec<const svalue *> typeless_inputs + (const_fn_result_sval->get_num_inputs ()); + for (unsigned idx = 0; + idx < const_fn_result_sval->get_num_inputs (); + idx++) + typeless_inputs.quick_push + (strip_types (const_fn_result_sval->get_input (idx), + mgr)); + return mgr.get_or_create_const_fn_result_svalue + (NULL_TREE, + const_fn_result_sval->get_fndecl (), + typeless_inputs); + } + } +} + /* Check whether an access is past the end of the BASE_REG. Return TRUE if the access was valid, FALSE otherwise. */ @@ -1169,9 +1312,12 @@ region_model::check_symbolic_bounds (const region *base_reg, gcc_assert (ctxt); const svalue *next_byte - = m_mgr->get_or_create_binop (num_bytes_sval->get_type (), PLUS_EXPR, + = m_mgr->get_or_create_binop (NULL_TREE, PLUS_EXPR, sym_byte_offset, num_bytes_sval); + next_byte = strip_types (next_byte, *m_mgr); + capacity = strip_types (capacity, *m_mgr); + if (eval_condition (next_byte, GT_EXPR, capacity).is_true ()) { tree diag_arg = get_representative_tree (base_reg); diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc index 8530f49e74ab..4feb349c9142 100644 --- a/gcc/analyzer/region-model-manager.cc +++ b/gcc/analyzer/region-model-manager.cc @@ -222,21 +222,29 @@ region_model_manager::reject_if_too_complex (svalue *sval) of trees */ const svalue * -region_model_manager::get_or_create_constant_svalue (tree cst_expr) +region_model_manager::get_or_create_constant_svalue (tree type, tree cst_expr) { gcc_assert (cst_expr); gcc_assert (CONSTANT_CLASS_P (cst_expr)); + gcc_assert (type == TREE_TYPE (cst_expr) || type == NULL_TREE); - constant_svalue **slot = m_constants_map.get (cst_expr); + constant_svalue::key_t key (type, cst_expr); + constant_svalue **slot = m_constants_map.get (key); if (slot) return *slot; constant_svalue *cst_sval - = new constant_svalue (alloc_symbol_id (), cst_expr); + = new constant_svalue (alloc_symbol_id (), type, cst_expr); RETURN_UNKNOWN_IF_TOO_COMPLEX (cst_sval); - m_constants_map.put (cst_expr, cst_sval); + m_constants_map.put (key, cst_sval); return cst_sval; } +const svalue * +region_model_manager::get_or_create_constant_svalue (tree cst_expr) +{ + return get_or_create_constant_svalue (TREE_TYPE (cst_expr), cst_expr); +} + /* Return the svalue * for a constant_svalue for the INTEGER_CST for VAL of type TYPE, creating it if necessary. */ @@ -244,10 +252,13 @@ const svalue * region_model_manager::get_or_create_int_cst (tree type, const poly_wide_int_ref &cst) { - gcc_assert (type); - gcc_assert (INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type)); - tree tree_cst = wide_int_to_tree (type, cst); - return get_or_create_constant_svalue (tree_cst); + tree effective_type = type; + if (!type) + effective_type = ptrdiff_type_node; + gcc_assert (INTEGRAL_TYPE_P (effective_type) + || POINTER_TYPE_P (effective_type)); + tree tree_cst = wide_int_to_tree (effective_type, cst); + return get_or_create_constant_svalue (type, tree_cst); } /* Return the svalue * for the constant_svalue for the NULL pointer @@ -432,6 +443,9 @@ region_model_manager::maybe_fold_unaryop (tree type, enum tree_code op, case VIEW_CONVERT_EXPR: case NOP_EXPR: { + if (!type) + return nullptr; + /* Handle redundant casts. */ if (arg->get_type () && useless_type_conversion_p (arg->get_type (), type)) @@ -442,13 +456,13 @@ region_model_manager::maybe_fold_unaryop (tree type, enum tree_code op, unless INNER_TYPE is narrower than TYPE. */ if (const svalue *innermost_arg = arg->maybe_undo_cast ()) { - tree inner_type = arg->get_type (); - if (TYPE_SIZE (type) - && TYPE_SIZE (inner_type) - && (fold_binary (LE_EXPR, boolean_type_node, - TYPE_SIZE (type), TYPE_SIZE (inner_type)) - == boolean_true_node)) - return maybe_fold_unaryop (type, op, innermost_arg); + if (tree inner_type = arg->get_type ()) + if (TYPE_SIZE (type) + && TYPE_SIZE (inner_type) + && (fold_binary (LE_EXPR, boolean_type_node, + TYPE_SIZE (type), TYPE_SIZE (inner_type)) + == boolean_true_node)) + return maybe_fold_unaryop (type, op, innermost_arg); } /* Avoid creating symbolic regions for pointer casts by simplifying (T*)(®ION) to ((T*)®ION). */ @@ -546,7 +560,8 @@ region_model_manager::get_or_create_unaryop (tree type, enum tree_code op, static enum tree_code get_code_for_cast (tree dst_type, tree src_type) { - gcc_assert (dst_type); + if (!dst_type) + return NOP_EXPR; if (!src_type) return NOP_EXPR; @@ -567,17 +582,16 @@ get_code_for_cast (tree dst_type, tree src_type) const svalue * region_model_manager::get_or_create_cast (tree type, const svalue *arg) { - gcc_assert (type); - /* No-op if the types are the same. */ if (type == arg->get_type ()) return arg; /* Don't attempt to handle casts involving vector types for now. */ - if (VECTOR_TYPE_P (type) - || (arg->get_type () - && VECTOR_TYPE_P (arg->get_type ()))) - return get_or_create_unknown_svalue (type); + if (type) + if (VECTOR_TYPE_P (type) + || (arg->get_type () + && VECTOR_TYPE_P (arg->get_type ()))) + return get_or_create_unknown_svalue (type); enum tree_code op = get_code_for_cast (type, arg->get_type ()); return get_or_create_unaryop (type, op, arg); @@ -650,9 +664,17 @@ region_model_manager::maybe_fold_binop (tree type, enum tree_code op, /* (CST OP CST). */ if (cst0 && cst1) { - if (tree result = fold_binary (op, type, cst0, cst1)) - if (CONSTANT_CLASS_P (result)) - return get_or_create_constant_svalue (result); + if (type) + { + if (tree result = fold_binary (op, type, cst0, cst1)) + if (CONSTANT_CLASS_P (result)) + return get_or_create_constant_svalue (result); + } + else + { + if (tree result = int_const_binop (op, cst0, cst1, -1)) + return get_or_create_constant_svalue (NULL_TREE, result); + } } if ((type && FLOAT_TYPE_P (type)) @@ -685,20 +707,21 @@ region_model_manager::maybe_fold_binop (tree type, enum tree_code op, break; case MULT_EXPR: /* (VAL * 0). */ - if (cst1 && zerop (cst1) && INTEGRAL_TYPE_P (type)) - return get_or_create_constant_svalue (build_int_cst (type, 0)); + if (cst1 + && zerop (cst1) + && (type == NULL_TREE || INTEGRAL_TYPE_P (type))) + return get_or_create_int_cst (type, 0); /* (VAL * 1) -> VAL. */ if (cst1 && integer_onep (cst1)) - /* TODO: we ought to have a cast to TYPE here, but doing so introduces - regressions; see PR analyzer/110902. */ - return arg0; + return get_or_create_cast (type, arg0); break; case BIT_AND_EXPR: if (cst1) { - if (zerop (cst1) && INTEGRAL_TYPE_P (type)) + if (zerop (cst1) + && (type == NULL_TREE || INTEGRAL_TYPE_P (type))) /* "(ARG0 & 0)" -> "0". */ - return get_or_create_constant_svalue (build_int_cst (type, 0)); + return get_or_create_int_cst (type, 0); if (const compound_svalue *compound_sval = arg0->dyn_cast_compound_svalue ()) @@ -810,6 +833,80 @@ region_model_manager::maybe_fold_binop (tree type, enum tree_code op, binop->get_arg1 (), arg1)); } + + /* Typeless operations, assumed to be effectively arbitrary sized + integers following normal arithmetic rules. */ + if (!type) + switch (op) + { + default: + break; + case MINUS_EXPR: + { + /* (X - X) -> 0. */ + if (arg0 == arg1) + return get_or_create_int_cst (type, 0); + + /* (X + A) - (A + B) -> (A - B). */ + if (const binop_svalue *binop0 = arg0->dyn_cast_binop_svalue ()) + if (const binop_svalue *binop1 = arg1->dyn_cast_binop_svalue ()) + if (binop0->get_op () == PLUS_EXPR + && binop1->get_op () == PLUS_EXPR + && binop0->get_arg0 () == binop1->get_arg0 ()) + return get_or_create_binop (NULL_TREE, op, + binop0->get_arg1 (), + binop1->get_arg1 ()); + } + break; + + case EXACT_DIV_EXPR: + { + if (const unaryop_svalue *unaryop0 = arg0->dyn_cast_unaryop_svalue ()) + { + if (unaryop0->get_op () == NOP_EXPR) + if (const svalue *sval = maybe_fold_binop (NULL_TREE, op, + unaryop0->get_arg (), + arg1)) + return sval; + } + if (const binop_svalue *binop0 = arg0->dyn_cast_binop_svalue ()) + { + switch (binop0->get_op ()) + { + default: + break; + + case PLUS_EXPR: + case MINUS_EXPR: + /* (A op B) / C -> (A / C) op (B / C). */ + { + if (const svalue *op_on_a + = maybe_fold_binop (NULL_TREE, op, + binop0->get_arg0 (), arg1)) + if (const svalue *op_on_b + = maybe_fold_binop (NULL_TREE, op, + binop0->get_arg1 (), arg1)) + return get_or_create_binop (NULL_TREE, + binop0->get_op (), + op_on_a, op_on_b); + } + break; + + case MULT_EXPR: + /* (A * B) / C -> A * (B / C) if C is a divisor of B. + In particular, this should also handle the case + (A * B) / B -> A. */ + if (const svalue *b_div_c + = maybe_fold_binop (NULL_TREE, op, + binop0->get_arg1 (), arg1)) + return get_or_create_binop (NULL_TREE, binop0->get_op (), + binop0->get_arg0 (), b_div_c); + } + } + } + break; + } + /* etc. */ return NULL; @@ -1391,7 +1488,6 @@ get_or_create_const_fn_result_svalue (tree type, tree fndecl, const vec<const svalue *> &inputs) { - gcc_assert (type); gcc_assert (fndecl); gcc_assert (DECL_P (fndecl)); gcc_assert (TREE_READONLY (fndecl)); diff --git a/gcc/analyzer/region-model-manager.h b/gcc/analyzer/region-model-manager.h index 7d1208c70a70..857bdf94c3a3 100644 --- a/gcc/analyzer/region-model-manager.h +++ b/gcc/analyzer/region-model-manager.h @@ -44,6 +44,7 @@ class region_model_manager } /* svalue consolidation. */ + const svalue *get_or_create_constant_svalue (tree type, tree cst_expr); const svalue *get_or_create_constant_svalue (tree cst_expr); const svalue *get_or_create_int_cst (tree type, const poly_wide_int_ref &cst); const svalue *get_or_create_null_ptr (tree pointer_type); @@ -170,14 +171,14 @@ class region_model_manager void dump_untracked_regions () const; + const svalue *maybe_fold_binop (tree type, enum tree_code op, + const svalue *arg0, const svalue *arg1); private: bool too_complex_p (const complexity &c) const; bool reject_if_too_complex (svalue *sval); const svalue *maybe_fold_unaryop (tree type, enum tree_code op, const svalue *arg); - const svalue *maybe_fold_binop (tree type, enum tree_code op, - const svalue *arg0, const svalue *arg1); const svalue *maybe_fold_sub_svalue (tree type, const svalue *parent_svalue, const region *subregion); @@ -204,7 +205,7 @@ class region_model_manager heap_region m_heap_region; /* svalue consolidation. */ - typedef hash_map<tree, constant_svalue *> constants_map_t; + typedef hash_map<constant_svalue::key_t, constant_svalue *> constants_map_t; constants_map_t m_constants_map; typedef hash_map<tree, unknown_svalue *> unknowns_map_t; diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 33a4584841e4..f079d1fb37ee 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -120,11 +120,29 @@ dump_quoted_tree (pretty_printer *pp, tree t) void print_quoted_type (pretty_printer *pp, tree t) { + if (!t) + return; pp_begin_quote (pp, pp_show_color (pp)); dump_generic_node (pp, t, 0, TDF_SLIM, 0); pp_end_quote (pp, pp_show_color (pp)); } +/* Print EXPR to PP, without quotes. + For use within svalue::maybe_print_for_user + and region::maybe_print_for_user. */ + +void +print_expr_for_user (pretty_printer *pp, tree expr) +{ + /* Workaround for C++'s lang_hooks.decl_printable_name, + which unhelpfully (for us) prefixes the decl with its + type. */ + if (DECL_P (expr)) + dump_generic_node (pp, expr, 0, TDF_SLIM, 0); + else + pp_printf (pp, "%E", expr); +} + /* class region_to_value_map. */ /* Assignment operator for region_to_value_map. */ @@ -8973,7 +8991,10 @@ test_array_2 () const region *arr_i_reg = model.get_lvalue (arr_i, NULL); region_offset offset = arr_i_reg->get_offset (&mgr); ASSERT_EQ (offset.get_base_region (), model.get_lvalue (arr, NULL)); - ASSERT_EQ (offset.get_symbolic_byte_offset ()->get_kind (), SK_BINOP); + const svalue *offset_sval = offset.get_symbolic_byte_offset (); + if (const svalue *cast = offset_sval->maybe_undo_cast ()) + offset_sval = cast; + ASSERT_EQ (offset_sval->get_kind (), SK_BINOP); } /* "arr[i] = i;" - this should remove the earlier bindings. */ diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc index d45706141fb0..705816b62454 100644 --- a/gcc/analyzer/region.cc +++ b/gcc/analyzer/region.cc @@ -78,23 +78,18 @@ region_offset::make_byte_offset (const region *base_region, } } -tree -region_offset::calc_symbolic_bit_offset (const region_model &model) const +const svalue & +region_offset::calc_symbolic_bit_offset (region_model_manager *mgr) const { if (symbolic_p ()) { - tree num_bytes_expr = model.get_representative_tree (m_sym_offset); - if (!num_bytes_expr) - return NULL_TREE; - tree bytes_to_bits_scale = build_int_cst (size_type_node, BITS_PER_UNIT); - return fold_build2 (MULT_EXPR, size_type_node, - num_bytes_expr, bytes_to_bits_scale); + const svalue *bits_per_byte + = mgr->get_or_create_int_cst (NULL_TREE, BITS_PER_UNIT); + return *mgr->get_or_create_binop (NULL_TREE, MULT_EXPR, + m_sym_offset, bits_per_byte); } else - { - tree cst = wide_int_to_tree (size_type_node, m_offset); - return cst; - } + return *mgr->get_or_create_int_cst (size_type_node, m_offset); } const svalue * @@ -388,6 +383,18 @@ operator>= (const region_offset &a, const region_offset &b) return b <= a; } +region_offset +strip_types (const region_offset &offset, region_model_manager &mgr) +{ + if (offset.symbolic_p ()) + return region_offset::make_symbolic + (offset.get_base_region (), + strip_types (offset.get_symbolic_byte_offset (), + mgr)); + else + return offset; +} + /* class region and its various subclasses. */ /* class region. */ @@ -923,7 +930,7 @@ region::calc_offset (region_model_manager *mgr) const const svalue *sval = iter_region->get_relative_symbolic_offset (mgr); accum_byte_sval - = mgr->get_or_create_binop (sval->get_type (), PLUS_EXPR, + = mgr->get_or_create_binop (ptrdiff_type_node, PLUS_EXPR, accum_byte_sval, sval); iter_region = iter_region->get_parent_region (); } @@ -941,7 +948,7 @@ region::calc_offset (region_model_manager *mgr) const accumulated bits to a svalue in bytes and revisit the iter_region collecting the symbolic value. */ byte_offset_t byte_offset = accum_bit_offset / BITS_PER_UNIT; - tree offset_tree = wide_int_to_tree (integer_type_node, + tree offset_tree = wide_int_to_tree (ptrdiff_type_node, byte_offset); accum_byte_sval = mgr->get_or_create_constant_svalue (offset_tree); @@ -1043,6 +1050,28 @@ region::to_json () const return reg_js; } +bool +region::maybe_print_for_user (pretty_printer *pp, + const region_model &) const +{ + switch (get_kind ()) + { + default: + break; + case RK_DECL: + { + const decl_region *reg = (const decl_region *)this; + tree decl = reg->get_decl (); + if (TREE_CODE (decl) == SSA_NAME) + decl = SSA_NAME_VAR (decl); + print_expr_for_user (pp, decl); + return true; + } + } + + return false; +} + /* Generate a description of this region. */ DEBUG_FUNCTION label_text @@ -1909,7 +1938,7 @@ element_region::get_relative_symbolic_offset (region_model_manager *mgr) const hwi_byte_size); const svalue *byte_size_sval = mgr->get_or_create_constant_svalue (byte_size_tree); - return mgr->get_or_create_binop (ptrdiff_type_node, MULT_EXPR, + return mgr->get_or_create_binop (NULL_TREE, MULT_EXPR, m_index, byte_size_sval); } return mgr->get_or_create_unknown_svalue (ptrdiff_type_node); @@ -1955,8 +1984,8 @@ const svalue * offset_region::get_bit_offset (region_model_manager *mgr) const { const svalue *bits_per_byte_sval - = mgr->get_or_create_int_cst (size_type_node, BITS_PER_UNIT); - return mgr->get_or_create_binop (size_type_node, MULT_EXPR, + = mgr->get_or_create_int_cst (NULL_TREE, BITS_PER_UNIT); + return mgr->get_or_create_binop (NULL_TREE, MULT_EXPR, m_byte_offset, bits_per_byte_sval); } @@ -2056,8 +2085,8 @@ const svalue * sized_region::get_bit_size_sval (region_model_manager *mgr) const { const svalue *bits_per_byte_sval - = mgr->get_or_create_int_cst (size_type_node, BITS_PER_UNIT); - return mgr->get_or_create_binop (size_type_node, MULT_EXPR, + = mgr->get_or_create_int_cst (NULL_TREE, BITS_PER_UNIT); + return mgr->get_or_create_binop (NULL_TREE, MULT_EXPR, m_byte_size_sval, bits_per_byte_sval); } diff --git a/gcc/analyzer/region.h b/gcc/analyzer/region.h index 73f35f55ba71..0c190c2f0a2e 100644 --- a/gcc/analyzer/region.h +++ b/gcc/analyzer/region.h @@ -176,6 +176,9 @@ class region : public symbol json::value *to_json () const; + bool maybe_print_for_user (pretty_printer *pp, + const region_model &model) const; + bool non_null_p () const; static int cmp_ptr_ptr (const void *, const void *); diff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc index 8d8f0d4579aa..e64f62d266e1 100644 --- a/gcc/analyzer/svalue.cc +++ b/gcc/analyzer/svalue.cc @@ -95,6 +95,114 @@ svalue::to_json () const return sval_js; } +/* Class for optionally adding open/close paren pairs within + svalue::maybe_print_for_user. */ + +class auto_add_parens +{ +public: + auto_add_parens (pretty_printer *pp, + const svalue *outer_sval, + const svalue &inner_sval) + : m_pp (pp), + m_needs_parens (needs_parens_p (outer_sval, inner_sval)) + { + if (m_needs_parens) + pp_string (m_pp, "("); + } + ~auto_add_parens () + { + if (m_needs_parens) + pp_string (m_pp, ")"); + } + +private: + static bool needs_parens_p (const svalue *outer_sval, + const svalue &inner_sval) + { + if (!outer_sval) + return false; + if (inner_sval.get_kind () == SK_BINOP) + return true; + return false; + } + + pretty_printer *m_pp; + bool m_needs_parens; +}; + +/* Attempt to print a user-facing description of this svalue to PP, + using MODEL for extracting representative tree values if necessary. + Use OUTER_SVAL (which can be null) to determine if we need to wrap + this value in parentheses. */ + +bool +svalue::maybe_print_for_user (pretty_printer *pp, + const region_model &model, + const svalue *outer_sval) const +{ + auto_add_parens p (pp, outer_sval, *this); + + switch (get_kind ()) + { + default: + break; + case SK_CONSTANT: + { + const constant_svalue *sval = (const constant_svalue *)this; + pp_printf (pp, "%E", sval->get_constant ()); + return true; + } + case SK_INITIAL: + { + const initial_svalue *sval = (const initial_svalue *)this; + return sval->get_region ()->maybe_print_for_user (pp, model); + } + case SK_UNARYOP: + { + const unaryop_svalue *sval = (const unaryop_svalue *)this; + if (sval->get_op () == NOP_EXPR) + { + if (!sval->get_arg ()->maybe_print_for_user (pp, model, outer_sval)) + return false; + return true; + } + } + break; + case SK_BINOP: + { + const binop_svalue *sval = (const binop_svalue *)this; + switch (sval->get_op ()) + { + default: + break; + + case PLUS_EXPR: + case MINUS_EXPR: + case MULT_EXPR: + { + if (!sval->get_arg0 ()->maybe_print_for_user (pp, model, this)) + return false; + pp_printf (pp, " %s ", op_symbol_code (sval->get_op ())); + if (!sval->get_arg1 ()->maybe_print_for_user (pp, model, this)) + return false; + return true; + } + } + } + break; + } + + if (tree expr = model.get_representative_tree (this)) + { + expr = remove_ssa_names (expr); + print_expr_for_user (pp, expr); + return true; + } + + return false; +} + /* If this svalue is a constant_svalue, return the underlying tree constant. Otherwise return NULL_TREE. */ @@ -389,7 +497,9 @@ svalue::cmp_ptr (const svalue *sval1, const svalue *sval2) const constant_svalue *constant_sval2 = (const constant_svalue *)sval2; const_tree cst1 = constant_sval1->get_constant (); const_tree cst2 = constant_sval2->get_constant (); - return cmp_csts_same_type (cst1, cst2); + /* The svalues have the same type, but the underlying trees + might not (for the case where both svalues are typeless). */ + return cmp_csts_and_types (cst1, cst2); } break; case SK_UNKNOWN: @@ -850,14 +960,31 @@ constant_svalue::implicitly_live_p (const svalue_set *, return true; } +/* Given EXPR, a non-NULL expression of boolean type, convert to + a tristate based on whether this is known to be true, false, + or is not known. */ + +static tristate +tristate_from_boolean_tree_node (tree expr) +{ + gcc_assert (TREE_TYPE (expr) == boolean_type_node); + + if (expr == boolean_true_node) + return tristate (tristate::TS_TRUE); + else if (expr == boolean_false_node) + return tristate (tristate::TS_FALSE); + else + return tristate (tristate::TS_UNKNOWN); +} + /* Evaluate the condition LHS OP RHS. Subroutine of region_model::eval_condition for when we have a pair of constants. */ tristate constant_svalue::eval_condition (const constant_svalue *lhs, - enum tree_code op, - const constant_svalue *rhs) + enum tree_code op, + const constant_svalue *rhs) { tree lhs_const = lhs->get_constant (); tree rhs_const = rhs->get_constant (); @@ -865,15 +992,28 @@ constant_svalue::eval_condition (const constant_svalue *lhs, gcc_assert (CONSTANT_CLASS_P (lhs_const)); gcc_assert (CONSTANT_CLASS_P (rhs_const)); + if ((lhs->get_type () == NULL_TREE || rhs->get_type () == NULL_TREE) + && TREE_CODE (lhs_const) == INTEGER_CST + && TREE_CODE (rhs_const) == INTEGER_CST + ) + { + if (tree tree_cmp = const_binop (op, boolean_type_node, + lhs_const, rhs_const)) + { + tristate ts = tristate_from_boolean_tree_node (tree_cmp); + if (ts.is_known ()) + return ts; + } + } + /* Check for comparable types. */ if (types_compatible_p (TREE_TYPE (lhs_const), TREE_TYPE (rhs_const))) { - tree comparison + tree tree_cmp = fold_binary (op, boolean_type_node, lhs_const, rhs_const); - if (comparison == boolean_true_node) - return tristate (tristate::TS_TRUE); - if (comparison == boolean_false_node) - return tristate (tristate::TS_FALSE); + tristate ts = tristate_from_boolean_tree_node (tree_cmp); + if (ts.is_known ()) + return ts; } return tristate::TS_UNKNOWN; } diff --git a/gcc/analyzer/svalue.h b/gcc/analyzer/svalue.h index 4f7171b04126..3a2b0319a195 100644 --- a/gcc/analyzer/svalue.h +++ b/gcc/analyzer/svalue.h @@ -177,6 +177,10 @@ class svalue : public symbol const region *maybe_get_deref_base_region () const; + bool maybe_print_for_user (pretty_printer *pp, + const region_model &model, + const svalue *outer_sval = nullptr) const; + protected: svalue (complexity c, symbol::id_t id, tree type) : symbol (c, id), m_type (type) @@ -265,16 +269,49 @@ template <> struct default_hash_traits<region_svalue::key_t> namespace ana { -/* Concrete subclass of svalue representing a specific constant value. */ +/* Concrete subclass of svalue representing a specific constant value. + The type will either be the same as that of the underlying tree constant, + or NULL_TREE indicating the constant is intended to be "typeless". */ class constant_svalue : public svalue { public: - constant_svalue (symbol::id_t id, tree cst_expr) - : svalue (complexity (1, 1), id, TREE_TYPE (cst_expr)), m_cst_expr (cst_expr) + /* A support class for uniquifying instances of region_svalue. */ + struct key_t + { + key_t (tree type, tree cst) + : m_type (type), m_cst (cst) + {} + + hashval_t hash () const + { + inchash::hash hstate; + hstate.add_ptr (m_type); + hstate.add_ptr (m_cst); + return hstate.end (); + } + + bool operator== (const key_t &other) const + { + return (m_type == other.m_type && m_cst == other.m_cst); + } + + void mark_deleted () { m_type = reinterpret_cast<tree> (1); } + void mark_empty () { m_type = reinterpret_cast<tree> (2); } + bool is_deleted () const { return m_type == reinterpret_cast<tree> (1); } + bool is_empty () const { return m_type == reinterpret_cast<tree> (2); } + + tree m_type; + tree m_cst; + }; + + constant_svalue (symbol::id_t id, tree type, tree cst_expr) + : svalue (complexity (1, 1), id, type), + m_cst_expr (cst_expr) { gcc_assert (cst_expr); gcc_assert (CONSTANT_CLASS_P (cst_expr)); + gcc_assert (type == TREE_TYPE (cst_expr) || type == NULL_TREE); } enum svalue_kind get_kind () const final override { return SK_CONSTANT; } @@ -312,6 +349,12 @@ is_a_helper <const constant_svalue *>::test (const svalue *sval) return sval->get_kind () == SK_CONSTANT; } +template <> struct default_hash_traits<constant_svalue::key_t> +: public member_function_hash_traits<constant_svalue::key_t> +{ + static const bool empty_zero_p = false; +}; + namespace ana { /* Concrete subclass of svalue representing an unknowable value, the bottom diff --git a/gcc/selftest.h b/gcc/selftest.h index 49fed5bebac9..3bddaf1c3228 100644 --- a/gcc/selftest.h +++ b/gcc/selftest.h @@ -371,6 +371,18 @@ extern int num_passes; ::selftest::fail (SELFTEST_LOCATION, desc_); \ SELFTEST_END_STMT +/* Like ASSERT_NE, but treat LOC as the effective location of the + selftest. */ + +#define ASSERT_NE_AT(LOC, VAL1, VAL2) \ + SELFTEST_BEGIN_STMT \ + const char *desc_ = "ASSERT_NE (" #VAL1 ", " #VAL2 ")"; \ + if ((VAL1) != (VAL2)) \ + ::selftest::pass ((LOC), desc_); \ + else \ + ::selftest::fail ((LOC), desc_); \ + SELFTEST_END_STMT + /* Evaluate VAL1 and VAL2 and compare them with maybe_ne, calling ::selftest::pass if they might be non-equal, ::selftest::fail if they are known to be equal. */ diff --git a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c new file mode 100644 index 000000000000..7cb8b5f53611 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c @@ -0,0 +1,48 @@ +/* Reduced from analyzer ICE seen with git-2.39.0's pack-bitmap.c + when bounds-checking the result of __builtin_ctzll. */ + +#include <stdint.h> +#include <stddef.h> + +typedef uint64_t eword_t; +struct ewah_bitmap; +struct ewah_iterator +{ + /* [...] */ +}; +struct bitmap; + +void ewah_iterator_init(struct ewah_iterator *it, struct ewah_bitmap *parent); +int ewah_iterator_next(eword_t *next, struct ewah_iterator *it); +void bitmap_set(struct bitmap *self, size_t pos); + +int rebuild_bitmap(const uint32_t *reposition, + struct ewah_bitmap *source, + struct bitmap *dest) +{ + uint32_t pos = 0; + struct ewah_iterator it; + eword_t word; + + ewah_iterator_init(&it, source); + + while (ewah_iterator_next(&word, &it)) { + uint32_t offset, bit_pos; + + for (offset = 0; offset < (sizeof(eword_t) * 8); ++offset) { + if ((word >> offset) == 0) + break; + + offset += __builtin_ctzll(word >> offset); + + bit_pos = reposition[pos + offset]; + if (bit_pos > 0) + bitmap_set(dest, bit_pos - 1); + else + return -1; + } + + pos += (sizeof(eword_t) * 8); + } + return 0; +} diff --git a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c index d68ac8f25ba9..63ae08347aa7 100644 --- a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c +++ b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c @@ -30,9 +30,12 @@ void test6 (size_t size) │ │ ╭──────────┴─────────╮ │ │ │over-read of 4 bytes│ │ │ ╰────────────────────╯ - ╭───────────┴──────────╮ ╭────────┴────────╮ - │size: 'size * 4' bytes│ │'size * 12' bytes│ - ╰──────────────────────╯ ╰─────────────────╯ + │ ╭────────────────┴───────────────╮ + │ │'(size * 16) - (size * 4)' bytes│ + │ ╰────────────────────────────────╯ + ╭───────────┴──────────╮ + │size: 'size * 4' bytes│ + ╰──────────────────────╯ { dg-end-multiline-output "" } */ @@ -55,9 +58,9 @@ void test7 (size_t size) └──────────────────────────────────────────────────┘└──────────────────┘ ├────────────────────────┬─────────────────────────┤├────────┬─────────┤ │ │ - ╭───────────────┴──────────────╮ ╭─────────┴────────╮ - │capacity: 'size * 4 + 3' bytes│ │overflow of 1 byte│ - ╰──────────────────────────────╯ ╰──────────────────╯ + ╭────────────────┴───────────────╮ ╭─────────┴────────╮ + │capacity: '(size * 4) + 3' bytes│ │overflow of 1 byte│ + ╰────────────────────────────────╯ ╰──────────────────╯ { dg-end-multiline-output "" } */ diff --git a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c new file mode 100644 index 000000000000..a0164c9d0465 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c @@ -0,0 +1,28 @@ +/* Verify we don't ICE generating out-of-bounds diagram. */ + +/* { dg-additional-options "-O0 -fdiagnostics-text-art-charset=unicode" } */ + +#include <stdio.h> +#include <stdint.h> + +uint64_t d(int32_t h) { + uint64_t j[2][6]; + int32_t k; + for (k = 1;;) { + printf("FLAG\n"); + if (h < 106 || j[k][h]) /* { dg-warning "stack-based buffer over-read" } */ + return 0; + } +} +int16_t e() { + int32_t f[5]; + for (f[2] = 3; f[2]; --f[2]) + d(0); +} + +int main() { e(); } + +/* We don't care about the exact diagram, just that we don't ICE. */ + +/* { dg-allow-blank-lines-in-output 1 } */ +/* { dg-prune-output ".*" } */ diff --git a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c new file mode 100644 index 000000000000..9cb37a54ef99 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c @@ -0,0 +1,26 @@ +/* Verify we don't ICE generating out-of-bounds diagram. */ + +/* { dg-additional-options "-O0 -fdiagnostics-text-art-charset=unicode" } */ + +#include <stdio.h> +#include <stdint.h> + +struct a { + uint32_t b; +}; +union c { + int8_t b; +}; + +int32_t *d( int32_t *j, int32_t k, struct a l) { + int64_t m[1]= {0}; + for (l.b = 0; l.b <= 0; l.b++) { + printf("FLAG\n"); + l.b == 12 && m[l.b]; /* { dg-bogus "stack-based buffer over-read" } */ + } +} + +/* We don't care about the exact diagram, just that we don't ICE. */ + +/* { dg-allow-blank-lines-in-output 1 } */ +/* { dg-prune-output ".*" } */ diff --git a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c new file mode 100644 index 000000000000..df7c71405d5b --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c @@ -0,0 +1,19 @@ +/* Verify we don't ICE generating out-of-bounds diagram. */ + +/* { dg-additional-options "-fdiagnostics-text-art-charset=unicode" } */ + +#include "analyzer-decls.h" + +void f() { + int a[] = {3, 0, 3, 3, 0, 3, 40883}; + for (int c = 6; c; c--) { + __analyzer_describe(0, a[c]); + 90 > c || a[c]; /* { dg-bogus "stack-based buffer over-read" } */ + } +} +int main() { f(); } + +/* We don't care about the exact diagram, just that we don't ICE. */ + +/* { dg-allow-blank-lines-in-output 1 } */ +/* { dg-prune-output ".*" } */ From 9ee19f9b99ad1f877eb3e93382a437d951f737c8 Mon Sep 17 00:00:00 2001 From: Jonathan Yong <10walls@gmail.com> Date: Sun, 11 Feb 2024 09:25:25 +0000 Subject: [PATCH 115/551] c-c++-common/Wrestrict.c: fix some typos and enable for LLP64 Signed-off-by: Jonathan Yong <10walls@gmail.com> gcc/testsuite: * c-c++-common/Wrestrict.c: Fix typos in comments and enable for LLP64 testing. --- gcc/testsuite/c-c++-common/Wrestrict.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gcc/testsuite/c-c++-common/Wrestrict.c b/gcc/testsuite/c-c++-common/Wrestrict.c index 4d005a618b36..57a3f67e21e5 100644 --- a/gcc/testsuite/c-c++-common/Wrestrict.c +++ b/gcc/testsuite/c-c++-common/Wrestrict.c @@ -381,14 +381,14 @@ void test_memcpy_range_exceed (char *d, const char *s) T (d + i, s + 1, 3); /* { dg-warning "accessing 3 bytes at offsets \\\[\[0-9\]+, \[0-9\]+] and 1 overlaps 1 byte" "memcpy" } */ #if __SIZEOF_SIZE_T__ == 8 - /* Verfiy the offset and size computation is correct. The overlap - offset mentioned in the warning plus sthe size of the access must + /* Verify the offset and size computation is correct. The overlap + offset mentioned in the warning plus the size of the access must not exceed DIFF_MAX. */ - T (d, d + i, 5); /* { dg-warning "accessing 5 bytes at offsets 0 and \\\[9223372036854775805, 9223372036854775807] overlaps 3 bytes at offset 9223372036854775802" "LP64" { target lp64 } } */ - T (d + i, d, 5); /* { dg-warning "accessing 5 bytes at offsets \\\[9223372036854775805, 9223372036854775807] and 0 overlaps 3 bytes at offset 9223372036854775802" "LP64" { target lp64 } } */ + T (d, d + i, 5); /* { dg-warning "accessing 5 bytes at offsets 0 and \\\[9223372036854775805, 9223372036854775807] overlaps 3 bytes at offset 9223372036854775802" "LP64" { target { lp64 || llp64 } } } */ + T (d + i, d, 5); /* { dg-warning "accessing 5 bytes at offsets \\\[9223372036854775805, 9223372036854775807] and 0 overlaps 3 bytes at offset 9223372036854775802" "LP64" { target { lp64 || llp64 } } } */ - T (d, s + i, 5); /* { dg-warning "accessing 5 bytes at offsets 0 and \\\[9223372036854775805, 9223372036854775807] overlaps 3 bytes at offset 9223372036854775802" "LP64" { target lp64 } } */ - T (d + i, s, 5); /* { dg-warning "accessing 5 bytes at offsets \\\[9223372036854775805, 9223372036854775807] and 0 overlaps 3 bytes at offset 9223372036854775802" "LP64" { target lp64 } } */ + T (d, s + i, 5); /* { dg-warning "accessing 5 bytes at offsets 0 and \\\[9223372036854775805, 9223372036854775807] overlaps 3 bytes at offset 9223372036854775802" "LP64" { target { lp64 || llp64 } } } */ + T (d + i, s, 5); /* { dg-warning "accessing 5 bytes at offsets \\\[9223372036854775805, 9223372036854775807] and 0 overlaps 3 bytes at offset 9223372036854775802" "LP64" { target { lp64 || llp64 } } } */ #elif __SIZEOF_SIZE_T__ == 4 T (d, d + i, 5); /* { dg-warning "accessing 5 bytes at offsets 0 and \\\[2147483645, 2147483647] overlaps 3 bytes at offset 2147483642" "ILP32" { target ilp32 } } */ T (d + i, d, 5); /* { dg-warning "accessing 5 bytes at offsets \\\[2147483645, 2147483647] and 0 overlaps 3 bytes at offset 2147483642" "ILP32" { target ilp32 } } */ From 23409731ca4464471d4ef456d6aee50084d00c85 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Tue, 19 Mar 2024 00:18:16 +0000 Subject: [PATCH 116/551] Daily bump. --- contrib/ChangeLog | 5 ++ gcc/ChangeLog | 90 +++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 116 ++++++++++++++++++++++++++++++++++++++++ gcc/fortran/ChangeLog | 6 +++ gcc/m2/ChangeLog | 6 +++ gcc/po/ChangeLog | 4 ++ gcc/testsuite/ChangeLog | 59 ++++++++++++++++++++ libstdc++-v3/ChangeLog | 13 +++++ 9 files changed, 300 insertions(+), 1 deletion(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index a85c1bfcfbe0..801bd76b45e3 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,8 @@ +2024-03-18 Jonathan Wakely <jwakely@redhat.com> + + * gcc_update: Add more generated files in libcc1, lto-plugin, + fixincludes, and libstdc++-v3. + 2024-03-08 Sam James <sam@gentoo.org> PR other/109668 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1b1e5b0ba6db..a5e276a3f3d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,93 @@ +2024-03-18 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/110902 + PR analyzer/110928 + PR analyzer/111305 + PR analyzer/111441 + * selftest.h (ASSERT_NE_AT): New macro. + +2024-03-18 Uros Bizjak <ubizjak@gmail.com> + + PR target/111822 + * config/i386/i386-features.cc (smode_convert_cst): New function + to handle SImode, DImode and TImode immediates, generalized from + timode_convert_cst. + (timode_convert_cst): Remove. + (scalar_chain::convert_op): Unify from + general_scalar_chain::convert_op and timode_scalar_chain::convert_op. + (general_scalar_chain::convert_op): Remove. + (timode_scalar_chain::convert_op): Remove. + (timode_scalar_chain::convert_insn): Update the call to + renamed timode_convert_cst. + * config/i386/i386-features.h (class scalar_chain): + Redeclare convert_op as protected class member. + (class general_calar_chain): Remove convert_op. + (class timode_scalar_chain): Ditto. + +2024-03-18 Jan Hubicka <jh@suse.cz> + + * config/i386/zn4zn5.md: Add file missed in the previous commit. + +2024-03-18 Jan Hubicka <jh@suse.cz> + Karthiban Anbazhagan <Karthiban.Anbazhagan@amd.com> + + * common/config/i386/cpuinfo.h (get_amd_cpu): Recognize znver5. + * common/config/i386/i386-common.cc (processor_names): Add znver5. + (processor_alias_table): Likewise. + * common/config/i386/i386-cpuinfo.h (processor_types): Add new zen + family. + (processor_subtypes): Add znver5. + * config.gcc (x86_64-*-* |...): Likewise. + * config/i386/driver-i386.cc (host_detect_local_cpu): Let + march=native detect znver5 cpu's. + * config/i386/i386-c.cc (ix86_target_macros_internal): Add + znver5. + * config/i386/i386-options.cc (m_ZNVER5): New definition + (processor_cost_table): Add znver5. + * config/i386/i386.cc (ix86_reassociation_width): Likewise. + * config/i386/i386.h (processor_type): Add PROCESSOR_ZNVER5 + (PTA_ZNVER5): New definition. + * config/i386/i386.md (define_attr "cpu"): Add znver5. + (Scheduling descriptions) Add znver5.md. + * config/i386/x86-tune-costs.h (znver5_cost): New definition. + * config/i386/x86-tune-sched.cc (ix86_issue_rate): Add znver5. + (ix86_adjust_cost): Likewise. + * config/i386/x86-tune.def (avx512_move_by_pieces): Add m_ZNVER5. + (avx512_store_by_pieces): Add m_ZNVER5. + * doc/extend.texi: Add znver5. + * doc/invoke.texi: Likewise. + * config/i386/znver4.md: Rename to zn4zn5.md; combine znver4 and znver5 Scheduler. + +2024-03-18 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/constraints.md (CX2, CX3, CX4): New constraints. + * config/avr/avr-protos.h (avr_xor_noclobber_dconst): New proto. + * config/avr/avr.cc (avr_xor_noclobber_dconst): New function. + * config/avr/avr.md (xorhi3, *xorhi3): Add "d,0,CX2,X" alternative. + (xorpsi3, *xorpsi3): Add "d,0,CX3,X" alternative. + (xorsi3, *xorsi3): Add "d,0,CX4,X" alternative. + +2024-03-18 liuhongt <hongtao.liu@intel.com> + + PR target/114334 + * config/i386/i386.md (mode): Add new number V8BF,V16BF,V32BF. + (MODEF248): New mode iterator. + (ssevecmodesuffix): Hanlde BF and HF. + * config/i386/sse.md (andnot<mode>3): Extend to HF/BF. + (<code><mode>3): Ditto. + +2024-03-18 John David Anglin <danglin@gcc.gnu.org> + + PR rtl-optimization/112415 + * config/pa/pa.cc (pa_emit_move_sequence): Revise condition + for symbolic memory operands. + (pa_legitimate_address_p): Revise LO_SUM condition. + * config/pa/pa.h (INT14_OK_STRICT): Revise define. Move + comment about GNU linker to predicates.md. + * config/pa/predicates.md (floating_point_store_memory_operand): + Revise condition for symbolic memory operands. Update + comment. + 2024-03-17 John David Anglin <danglin@gcc.gnu.org> * config/pa/pa.cc (pa_delegitimize_address): Delegitimize UNSPEC_TP. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 83552dd360e4..5fb3f81b7fb9 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240318 +20240319 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 22a54e5332ec..6531a0541f82 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,119 @@ +2024-03-18 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/110902 + PR analyzer/110928 + PR analyzer/111305 + PR analyzer/111441 + * access-diagram.cc: Include "analyzer/analyzer-selftests.h". + (get_access_size_str): Reimplement for conversion of + implmementation of bit_size_expr from tree to const svalue &. Use + svalue::maybe_print_for_user rather than tree printing routines. + (remove_ssa_names): Make non-static. + (bit_size_expr::get_formatted_str): Rename to... + (bit_size_expr::maybe_get_formatted_str): ...this, adding "model" + param and converting return type to a unique_ptr. Update for + conversion of implementation of bit_size_expr from tree to + const svalue &. Use svalue::maybe_print_for_user rather than tree + printing routines. + (bit_size_expr::print): Rename to... + (bit_size_expr::maybe_print_for_user): ...this, adding "model" + param and converting return type to bool. Update for + conversion of implementation of bit_size_expr from tree to + const svalue &. Use svalue::maybe_print_for_user rather than tree + printing routines. + (bit_size_expr::maybe_get_as_bytes): Add "mgr" param and convert + return type from tree to const svalue *; reimplement. + (access_range::access_range): Call strip_types when on region_offset + intializations. + (access_range::get_size): Update for conversion of implementation + of bit_size_expr from tree to const svalue &. + (access_operation::get_valid_bits): Pass manager to access_range + ctor. + (access_operation::maybe_get_invalid_before_bits): Likewise. + (access_operation::maybe_get_invalid_after_bits): Likewise. + (boundaries::add): Likewise. + (bit_to_table_map::populate): Add "mgr" param and pass it to + access_range ctor. + (access_diagram_impl::access_diagram_impl): Pass manager to + bit_to_table_map::populate. + (access_diagram_impl::maybe_add_gap): Use svalue rather than tree + for symbolic bit offsets. Port to new bit_size_expr + representation. + (access_diagram_impl::add_valid_vs_invalid_ruler): Port to new + bit_size_expr representation. + (selftest::assert_eq_typeless_integer): New. + (ASSERT_EQ_TYPELESS_INTEGER): New. + (selftest::test_bit_size_expr_to_bytes): New. + (selftest::analyzer_access_diagram_cc_tests): New. + * access-diagram.h (class bit_size_expr): Reimplement, converting + implementation from tree to const svalue &. + (access_range::access_range): Add "mgr" param. Call strip_types + on region_offset initializations. + (access_range::get_size): Update decl for reimplementation. + * analyzer-selftests.cc (selftest::run_analyzer_selftests): Call + selftest::analyzer_access_diagram_cc_tests. + * analyzer-selftests.h + (selftest::analyzer_checker_script_cc_tests): Delete this stray + typo. + (selftest::analyzer_access_diagram_cc_tests): New decl. + * analyzer.h (print_expr_for_user): New decl. + (calc_symbolic_bit_offset): Update decl for reimplementation. + (strip_types): New decls. + (remove_ssa_names): New decl. + * bounds-checking.cc (strip_types): New. + (region_model::check_symbolic_bounds): Use typeless svalues. + * region-model-manager.cc + (region_model_manager::get_or_create_constant_svalue): Add "type" + param. Add overload with old signature. + (region_model_manager::get_or_create_int_cst): Support type being + NULL_TREE. + (region_model_manager::maybe_fold_unaryop): Gracefully reject folding + of casts to NULL_TREE type. + (get_code_for_cast): Use NOP_EXPR for "casting" svalues to + NULL_TREE type. + (region_model_manager::get_or_create_cast): Support "casting" + svalues to NULL_TREE type. + (region_model_manager::maybe_fold_binop): Don't crash on inputs + with NULL_TREE type. Handle folding of binops on constants with + NULL_TREE type. Add missing cast from PR analyzer/110902. + Support enough folding of other ops on NULL_TREE type to support + bounds checking. + (region_model_manager::get_or_create_const_fn_result_svalue): + Remove assertion that type is nonnull. + * region-model-manager.h + (region_model_manager::get_or_create_constant_svalue): Add + overloaded decl taking a type. + (region_model_manager::maybe_fold_binop): Make public. + (region_model_manager::constants_map_t): Use + constant_svalue::key_t for the key, rather than just tree. + * region-model.cc (print_expr_for_user): New. + (selftest::test_array_2): Handle casts. + * region.cc (region_offset::calc_symbolic_bit_offset): Return + const svalue & rather than tree, and reimplement accordingly. + (region::calc_offset): Use ptrdiff_type_node for types of byte + offsets. + (region::maybe_print_for_user): New. + (element_region::get_relative_symbolic_offset): Use NULL_TREE for + types of bit offsets. + (offset_region::get_bit_offset): Likewise. + (sized_region::get_bit_size_sval): Likewise for bit sizes. + * region.h (region::maybe_print_for_user): New decl. + * svalue.cc (class auto_add_parens): New. + (svalue::maybe_print_for_user): New. + (svalue::cmp_ptr): Support typeless constant svalues. + (tristate_from_boolean_tree_node): New, taken from... + (constant_svalue::eval_condition): ...here. Handle comparison of + typeless integer svalue constants. + * svalue.h (svalue::maybe_print_for_user): New decl. + (class constant_svalue): Support the type of the svalue being + NULL_TREE. + (struct default_hash_traits<constant_svalue::key_t>): New. + +2024-03-18 David Malcolm <dmalcolm@redhat.com> + + * access-diagram.cc (remove_ssa_names): Support operands being + NULL_TREE, such as e.g. for COMPONENT_REF's operand 2. + 2024-03-07 Jakub Jelinek <jakub@redhat.com> * access-diagram.cc: Include diagnostic-core.h before including diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9ffad8299f2d..650a8c3bd9b3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2024-03-18 Harald Anlauf <anlauf@gmx.de> + + PR fortran/103715 + * frontend-passes.cc (check_externals_expr): Prevent invalid read + in case of mismatch of external subroutine with function. + 2024-03-17 Harald Anlauf <anlauf@gmx.de> PR fortran/101135 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index bd5a564250b2..6c6675432408 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,9 @@ +2024-03-18 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114380 + * gm2-compiler/SymbolTable.mod (GetLowestType): Do not + skip over a set type, but return sym. + 2024-03-17 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114296 diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 0e962c9fdc14..64f7b8090eb4 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2024-03-18 Joseph Myers <josmyers@redhat.com> + + * fr.po, sv.po: Update. + 2024-03-11 Joseph Myers <josmyers@redhat.com> * sv.po: Update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d36e4803079c..cb8154649a98 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,62 @@ +2024-03-18 Jonathan Yong <10walls@gmail.com> + + * c-c++-common/Wrestrict.c: Fix typos in comments and + enable for LLP64 testing. + +2024-03-18 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/110902 + PR analyzer/110928 + PR analyzer/111305 + PR analyzer/111441 + * c-c++-common/analyzer/out-of-bounds-const-fn.c: New test. + * c-c++-common/analyzer/out-of-bounds-diagram-11.c: Update + expected diagram output. + * c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c: New test. + * c-c++-common/analyzer/out-of-bounds-diagram-pr111305.c: New test. + * c-c++-common/analyzer/out-of-bounds-diagram-pr111441.c: New test. + +2024-03-18 Uros Bizjak <ubizjak@gmail.com> + + PR target/111822 + * g++.target/i386/pr111822.C (dg-do): Compile only for ia32 targets. + (dg-options): Add -march=x86-64. + +2024-03-18 Harald Anlauf <anlauf@gmx.de> + + PR fortran/103715 + * gfortran.dg/pr103715.f90: New test. + +2024-03-18 Thiago Jung Bauermann <thiago.bauermann@linaro.org> + + * gcc.target/arm/acle/cde-mve-error-2.c: Add -fpermissive. Use + relative offsets for line numbers. + +2024-03-18 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114380 + * gm2/pim/fail/badset7.mod: New test. + +2024-03-18 Nathaniel Shead <nathanieloshead@gmail.com> + + PR testsuite/114320 + * g++.dg/modules/target-powerpc-1_a.C: Suppress -Wpsabi. + * g++.dg/modules/target-powerpc-1_b.C: Likewise. + +2024-03-18 Jan Hubicka <jh@suse.cz> + Karthiban Anbazhagan <Karthiban.Anbazhagan@amd.com> + + * g++.target/i386/mv29.C: Handle znver5 arch. + * gcc.target/i386/funcspec-56.inc:Likewise. + +2024-03-18 Torbjörn SVENSSON <torbjorn.svensson@foss.st.com> + + * c-c++-common/analyzer/strndup-1.c: Define _POSIX_C_SOURCE. + +2024-03-18 liuhongt <hongtao.liu@intel.com> + + * gcc.target/i386/pr114334.c: New test. + 2024-03-17 Harald Anlauf <anlauf@gmx.de> PR fortran/101135 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c4e5f57e1a31..a26908845e32 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,16 @@ +2024-03-18 François Dumont <fdumont@gcc.gnu.org> + + * include/debug/safe_iterator.tcc (_Safe_iterator<>::_M_can_advance): + Accept 0 offset advance on value-initialized iterator. + * testsuite/23_containers/vector/debug/n3644.cc: New test case. + +2024-03-18 François Dumont <fdumont@gcc.gnu.org> + + * include/debug/safe_local_iterator.tcc + (_Safe_local_iterator::_M_valid_range): Add _M_value_initialized and + _M_singular checks. + * testsuite/23_containers/unordered_set/debug/114316.cc: New test case. + 2024-03-17 François Dumont <fdumont@gcc.gnu.org> PR libstdc++/114316 From c4845edfeaf44756ad9672e8d143f1c8f5c4c0f6 Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Sat, 16 Mar 2024 22:00:29 +1100 Subject: [PATCH 117/551] c++: Fix handling of no-linkage decls for modules When testing the changes for PR c++/112631 we discovered that currently we don't emit definitions of block-scope function declarations if they're not used in the module interface TU, which causes issues if they are used by importers. This patch fixes the handling of no-linkage declarations for C++20. In particular, a type declared in a function with vague linkage or declared in a module CMI could potentially be accessible outside its defining TU, and as such we can't assume that function declarations using that type can never be defined in another TU. A complication with handling this is that we're only strictly interested in declarations with a module CMI, but when parsing the global module fragment we don't yet know whether or not this module will have a CMI until we reach the "export module" line (or not). Since this case is IFNDR anyway (by [basic.def.odr] p11) we just tentatively assume while parsing the GMF that this module will have a CMI; once we see (or don't see) an 'export module' declaration we can commit to that knowledge for future declarations. gcc/cp/ChangeLog: * cp-tree.h (module_maybe_has_cmi_p): New function. * decl.cc (grokfndecl): Mark block-scope functions as public if they could be visible in other TUs. * decl2.cc (no_linkage_error): Don't error for declarations that could be defined in other TUs since C++20. Suppress duplicate errors from 'check_global_declaration'. * tree.cc (no_linkage_check): In relaxed mode, don't consider types in a module CMI to have no linkage. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/linkage-1.C: New test. * g++.dg/modules/block-decl-3.h: New test. * g++.dg/modules/block-decl-3_a.C: New test. * g++.dg/modules/block-decl-3_b.C: New test. * g++.dg/modules/block-decl-3_c.C: New test. * g++.dg/modules/linkage-1_a.C: New test. * g++.dg/modules/linkage-1_b.C: New test. * g++.dg/modules/linkage-1_c.C: New test. * g++.dg/modules/linkage-2.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/cp-tree.h | 6 + gcc/cp/decl.cc | 10 +- gcc/cp/decl2.cc | 39 ++++- gcc/cp/tree.cc | 21 ++- gcc/testsuite/g++.dg/cpp2a/linkage-1.C | 18 ++ gcc/testsuite/g++.dg/modules/block-decl-3.h | 39 +++++ gcc/testsuite/g++.dg/modules/block-decl-3_a.C | 157 ++++++++++++++++++ gcc/testsuite/g++.dg/modules/block-decl-3_b.C | 8 + gcc/testsuite/g++.dg/modules/block-decl-3_c.C | 30 ++++ gcc/testsuite/g++.dg/modules/linkage-1_a.C | 15 ++ gcc/testsuite/g++.dg/modules/linkage-1_b.C | 6 + gcc/testsuite/g++.dg/modules/linkage-1_c.C | 9 + gcc/testsuite/g++.dg/modules/linkage-2.C | 26 +++ 13 files changed, 372 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/linkage-1.C create mode 100644 gcc/testsuite/g++.dg/modules/block-decl-3.h create mode 100644 gcc/testsuite/g++.dg/modules/block-decl-3_a.C create mode 100644 gcc/testsuite/g++.dg/modules/block-decl-3_b.C create mode 100644 gcc/testsuite/g++.dg/modules/block-decl-3_c.C create mode 100644 gcc/testsuite/g++.dg/modules/linkage-1_a.C create mode 100644 gcc/testsuite/g++.dg/modules/linkage-1_b.C create mode 100644 gcc/testsuite/g++.dg/modules/linkage-1_c.C create mode 100644 gcc/testsuite/g++.dg/modules/linkage-2.C diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 05913861e06e..52d53589e51d 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -7384,6 +7384,12 @@ inline bool named_module_purview_p () inline bool named_module_attach_p () { return named_module_p () && module_attach_p (); } +/* We don't know if this TU will have a CMI while parsing the GMF, + so tentatively assume that it might, for the purpose of determining + whether no-linkage decls could be used by an importer. */ +inline bool module_maybe_has_cmi_p () +{ return module_has_cmi_p () || (named_module_p () && !module_purview_p ()); } + /* We're currently exporting declarations. */ inline bool module_exporting_p () { return module_kind & MK_EXPORTING; } diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index 7a97b8671991..65ab64885ff8 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -10756,9 +10756,15 @@ grokfndecl (tree ctype, /* Members of anonymous types and local classes have no linkage; make them internal. If a typedef is made later, this will be changed. */ - if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype)) - || decl_function_context (TYPE_MAIN_DECL (ctype)))) + if (ctype && !TREE_PUBLIC (TYPE_MAIN_DECL (ctype))) publicp = 0; + else if (ctype && decl_function_context (TYPE_MAIN_DECL (ctype))) + /* But members of local classes in a module CMI should have their + definitions exported, in case they are (directly or indirectly) + used by an importer. We don't just use module_has_cmi_p here + because for entities in the GMF we don't yet know whether this + module will have a CMI, so we'll conservatively assume it might. */ + publicp = module_maybe_has_cmi_p (); if (publicp && cxx_dialect == cxx98) { diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index 6c9fd415d40e..2562d8aeff6e 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -4696,8 +4696,19 @@ no_linkage_error (tree decl) bool d = false; auto_diagnostic_group grp; if (cxx_dialect >= cxx11) - d = permerror (DECL_SOURCE_LOCATION (decl), "%q#D, declared using " - "unnamed type, is used but never defined", decl); + { + /* If t is declared in a module CMI, then decl could actually + be defined in a different TU, so don't warn since C++20. */ + tree relaxed = no_linkage_check (t, /*relaxed_p=*/true); + if (relaxed != NULL_TREE) + d = permerror (DECL_SOURCE_LOCATION (decl), + "%q#D, declared using an unnamed type, " + "is used but never defined", decl); + else if (cxx_dialect < cxx20) + d = pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wc__20_extensions, + "%q#D, declared using an unnamed type, " + "is used but not defined", decl); + } else if (DECL_EXTERN_C_P (decl)) /* Allow this; it's pretty common in C. */; else if (VAR_P (decl)) @@ -4716,13 +4727,31 @@ no_linkage_error (tree decl) inform (DECL_SOURCE_LOCATION (TYPE_NAME (t)), "%q#D does not refer " "to the unqualified type, so it is not used for linkage", TYPE_NAME (t)); + /* Suppress warning from check_global_declaration if needed. */ + if (d) + suppress_warning (decl, OPT_Wunused); } else if (cxx_dialect >= cxx11) { if (VAR_P (decl) || !DECL_PURE_VIRTUAL_P (decl)) - permerror (DECL_SOURCE_LOCATION (decl), - "%q#D, declared using local type " - "%qT, is used but never defined", decl, t); + { + /* Similarly for local types in a function with vague linkage or + defined in a module CMI, then decl could actually be defined + in a different TU, so don't warn since C++20. */ + bool d = false; + tree relaxed = no_linkage_check (t, /*relaxed_p=*/true); + if (relaxed != NULL_TREE) + d = permerror (DECL_SOURCE_LOCATION (decl), + "%q#D, declared using local type " + "%qT, is used but never defined", decl, t); + else if (cxx_dialect < cxx20) + d = pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wc__20_extensions, + "%q#D, declared using local type " + "%qT, is used but not defined here", decl, t); + /* Suppress warning from check_global_declaration if needed. */ + if (d) + suppress_warning (decl, OPT_Wunused); + } } else if (VAR_P (decl)) warning_at (DECL_SOURCE_LOCATION (decl), 0, "type %qT with no linkage " diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc index e75be9a4e665..f1a23ffe8179 100644 --- a/gcc/cp/tree.cc +++ b/gcc/cp/tree.cc @@ -2971,7 +2971,8 @@ verify_stmt_tree (tree t) /* Check if the type T depends on a type with no linkage and if so, return it. If RELAXED_P then do not consider a class type declared - within a vague-linkage function to have no linkage. Remember: + within a vague-linkage function or in a module CMI to have no linkage, + since it can still be accessed within a different TU. Remember: no-linkage is not the same as internal-linkage. */ tree @@ -3012,7 +3013,15 @@ no_linkage_check (tree t, bool relaxed_p) /* Only treat unnamed types as having no linkage if they're at namespace scope. This is core issue 966. */ if (TYPE_UNNAMED_P (t) && TYPE_NAMESPACE_SCOPE_P (t)) - return t; + { + if (relaxed_p + && TREE_PUBLIC (CP_TYPE_CONTEXT (t)) + && module_maybe_has_cmi_p ()) + /* This type could possibly be accessed outside this TU. */ + return NULL_TREE; + else + return t; + } for (r = CP_TYPE_CONTEXT (t); ; ) { @@ -3023,10 +3032,12 @@ no_linkage_check (tree t, bool relaxed_p) return no_linkage_check (TYPE_CONTEXT (t), relaxed_p); else if (TREE_CODE (r) == FUNCTION_DECL) { - if (!relaxed_p || !vague_linkage_p (r)) - return t; - else + if (relaxed_p + && (vague_linkage_p (r) + || (TREE_PUBLIC (r) && module_maybe_has_cmi_p ()))) r = CP_DECL_CONTEXT (r); + else + return t; } else break; diff --git a/gcc/testsuite/g++.dg/cpp2a/linkage-1.C b/gcc/testsuite/g++.dg/cpp2a/linkage-1.C new file mode 100644 index 000000000000..888ed6fa5b59 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/linkage-1.C @@ -0,0 +1,18 @@ +// { dg-do compile { target c++11 } } + +inline auto f() { + struct A {}; + return A{}; +} +decltype(f()) a(); // { dg-error "used but not defined" "" { target c++17_down } } + +auto g() { + struct A {}; + return A{}; +} +decltype(g()) b(); // { dg-error "used but never defined" } + +int main() { + a(); + b(); +} diff --git a/gcc/testsuite/g++.dg/modules/block-decl-3.h b/gcc/testsuite/g++.dg/modules/block-decl-3.h new file mode 100644 index 000000000000..4b155eb00544 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/block-decl-3.h @@ -0,0 +1,39 @@ +// GMF + +// Non-inline function definitions in headers are a recipe for ODR violations, +// but we should probably support that anyway as its not inherently wrong +// if only ever included into the GMF of a single module. + +auto gmf_n_i() { + struct X { void f() {} }; + return X{}; +} + +inline auto gmf_i_i() { + struct X { void f() {} }; + return X{}; +} + +auto gmf_n_i_i() { + struct X { + auto f() { + struct Y { + void g() {} + }; + return Y{}; + } + }; + return X{}; +} + +inline auto gmf_i_i_i() { + struct X { + auto f() { + struct Y { + void g() {} + }; + return Y{}; + } + }; + return X{}; +} diff --git a/gcc/testsuite/g++.dg/modules/block-decl-3_a.C b/gcc/testsuite/g++.dg/modules/block-decl-3_a.C new file mode 100644 index 000000000000..8cb4dde74d13 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/block-decl-3_a.C @@ -0,0 +1,157 @@ +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi mod } + +// Test that we can link various forms of local class functions. +// Function names use i=inline, n=non-inline, for each nesting. + +module; +#include "block-decl-3.h" + +export module mod; + +namespace { + void internal() {} +} + +// singly-nested + +export auto n_n() { + internal(); + struct X { void f() { internal(); } }; + return X{}; +} + +export auto n_i() { + internal(); + struct X { inline void f() {} }; + return X{}; +} + +export inline auto i_n() { + // `f` is not inline here, so this is OK + struct X { void f() { internal(); } }; + return X{}; +} + +export inline auto i_i() { + struct X { inline void f() {} }; + return X{}; +} + + +// doubly nested + +export auto n_n_n() { + struct X { + auto f() { + struct Y { + void g() { internal(); } + }; + return Y{}; + } + }; + return X{}; +} + +export auto n_i_n() { + struct X { + inline auto f() { + struct Y { + void g() { internal(); } + }; + return Y{}; + } + }; + return X{}; +} + +export inline auto i_n_i() { + struct X { + auto f() { + struct Y { + inline void g() {} + }; + return Y {}; + } + }; + return X{}; +} + +export inline auto i_i_i() { + struct X { + inline auto f() { + struct Y { + inline void g() {} + }; + return Y{}; + } + }; + return X{}; +} + + +// multiple types + +export auto multi_n_n() { + struct X { + void f() { internal(); } + }; + struct Y { + X x; + }; + return Y {}; +} + +export auto multi_n_i() { + struct X { + inline void f() {} + }; + struct Y { + X x; + }; + return Y {}; +} + +export inline auto multi_i_i() { + struct X { + inline void f() {} + }; + struct Y { + X x; + }; + return Y {}; +}; + + +// extern "C++" + +export extern "C++" auto extern_n_i() { + struct X { + void f() {} // implicitly inline + }; + return X{}; +}; + +export extern "C++" inline auto extern_i_i() { + struct X { + void f() {} + }; + return X{}; +}; + + +// GMF + +export using ::gmf_n_i; +export using ::gmf_i_i; +export using ::gmf_n_i_i; +export using ::gmf_i_i_i; + + +// can access from implementation unit + +auto only_used_in_impl() { + struct X { void f() {} }; + return X{}; +} +export void test_from_impl_unit(); diff --git a/gcc/testsuite/g++.dg/modules/block-decl-3_b.C b/gcc/testsuite/g++.dg/modules/block-decl-3_b.C new file mode 100644 index 000000000000..bc9b2a213f06 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/block-decl-3_b.C @@ -0,0 +1,8 @@ +// { dg-additional-options "-fmodules-ts" } + +module mod; + +// Test that we can access (and link) to declarations from the interface +void test_from_impl_unit() { + only_used_in_impl().f(); +} diff --git a/gcc/testsuite/g++.dg/modules/block-decl-3_c.C b/gcc/testsuite/g++.dg/modules/block-decl-3_c.C new file mode 100644 index 000000000000..5b39e038327c --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/block-decl-3_c.C @@ -0,0 +1,30 @@ +// { dg-module-do link } +// { dg-additional-options "-fmodules-ts" } + +import mod; + +int main() { + n_n().f(); + n_i().f(); + i_n().f(); + i_i().f(); + + n_n_n().f().g(); + n_i_n().f().g(); + i_n_i().f().g(); + i_i_i().f().g(); + + multi_n_n().x.f(); + multi_n_i().x.f(); + multi_i_i().x.f(); + + extern_n_i().f(); + extern_i_i().f(); + + gmf_n_i().f(); + gmf_i_i().f(); + gmf_n_i_i().f().g(); + gmf_i_i_i().f().g(); + + test_from_impl_unit(); +} diff --git a/gcc/testsuite/g++.dg/modules/linkage-1_a.C b/gcc/testsuite/g++.dg/modules/linkage-1_a.C new file mode 100644 index 000000000000..750e31ff347f --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/linkage-1_a.C @@ -0,0 +1,15 @@ +// { dg-additional-options "-fmodules-ts -Wno-error=c++20-extensions" } +// { dg-module-cmi M } + +export module M; + +auto f() { + struct A {}; + return A{}; +} +decltype(f()) g(); // { dg-warning "used but not defined" "" { target c++17_down } } +export auto x = g(); + +struct {} s; +decltype(s) h(); // { dg-warning "used but not defined" "" { target c++17_down } } +export auto y = h(); diff --git a/gcc/testsuite/g++.dg/modules/linkage-1_b.C b/gcc/testsuite/g++.dg/modules/linkage-1_b.C new file mode 100644 index 000000000000..f23962d76b77 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/linkage-1_b.C @@ -0,0 +1,6 @@ +// { dg-additional-options "-fmodules-ts" } + +module M; + +decltype(f()) g() { return {}; } +decltype(s) h() { return {}; } diff --git a/gcc/testsuite/g++.dg/modules/linkage-1_c.C b/gcc/testsuite/g++.dg/modules/linkage-1_c.C new file mode 100644 index 000000000000..f1406b99032d --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/linkage-1_c.C @@ -0,0 +1,9 @@ +// { dg-module-do link } +// { dg-additional-options "-fmodules-ts" } + +import M; + +int main() { + auto a = x; + auto b = y; +} diff --git a/gcc/testsuite/g++.dg/modules/linkage-2.C b/gcc/testsuite/g++.dg/modules/linkage-2.C new file mode 100644 index 000000000000..eb4d7b051af2 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/linkage-2.C @@ -0,0 +1,26 @@ +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi !M } + +export module M; + +// Same as a linkage-1 except within an anonymous namespace; +// now these declarations cannot possibly be defined outside this TU, +// so we should error. + +namespace { + auto f() { + struct A {}; + return A{}; + } + decltype(f()) g(); // { dg-error "used but never defined" } + + struct {} s; + decltype(s) h(); // { dg-error "used but never defined" } +} + +export void use() { + g(); + h(); +} + +// { dg-prune-output "not writing module" } From d91a0cee3611f477730a1fc10beff050dfc800ec Mon Sep 17 00:00:00 2001 From: Chen Jiawei <jiawei@iscas.ac.cn> Date: Mon, 18 Mar 2024 20:54:45 -0600 Subject: [PATCH 118/551] [PATCH] RISC-V: Add XiangShan Nanhu microarchitecture. This patch add XiangShan Nanhu cpu microarchitecture, Nanhu is a 6-issue, superscalar, out-of-order processor. More details see: https://xiangshan-doc.readthedocs.io/zh-cn/latest/arch gcc/ChangeLog: * config/riscv/riscv-cores.def (RISCV_TUNE): New def. (RISCV_CORE): Ditto. * config/riscv/riscv-opts.h (enum riscv_microarchitecture_type): New option. * config/riscv/riscv.cc: New def. * config/riscv/riscv.md: New include. * config/riscv/xiangshan.md: New file. gcc/testsuite/ChangeLog: * gcc.target/riscv/mcpu-xiangshan-nanhu.c: New test. Co-Authored by: Lin Jiawei <jiawei.lin@epfl.ch> --- gcc/config/riscv/riscv-cores.def | 6 + gcc/config/riscv/riscv-opts.h | 1 + gcc/config/riscv/riscv.cc | 17 ++ gcc/config/riscv/riscv.md | 3 +- gcc/config/riscv/xiangshan.md | 148 ++++++++++++++++++ .../gcc.target/riscv/mcpu-xiangshan-nanhu.c | 34 ++++ 6 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 gcc/config/riscv/xiangshan.md create mode 100644 gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-nanhu.c diff --git a/gcc/config/riscv/riscv-cores.def b/gcc/config/riscv/riscv-cores.def index 57928bccdc82..2f5efe3be86a 100644 --- a/gcc/config/riscv/riscv-cores.def +++ b/gcc/config/riscv/riscv-cores.def @@ -40,6 +40,7 @@ RISCV_TUNE("sifive-7-series", sifive_7, sifive_7_tune_info) RISCV_TUNE("sifive-p400-series", sifive_p400, sifive_p400_tune_info) RISCV_TUNE("sifive-p600-series", sifive_p600, sifive_p600_tune_info) RISCV_TUNE("thead-c906", generic, thead_c906_tune_info) +RISCV_TUNE("xiangshan-nanhu", xiangshan, xiangshan_nanhu_tune_info) RISCV_TUNE("generic-ooo", generic_ooo, generic_ooo_tune_info) RISCV_TUNE("size", generic, optimize_size_tune_info) @@ -90,4 +91,9 @@ RISCV_CORE("thead-c906", "rv64imafdc_xtheadba_xtheadbb_xtheadbs_xtheadcmo_" "xtheadcondmov_xtheadfmemidx_xtheadmac_" "xtheadmemidx_xtheadmempair_xtheadsync", "thead-c906") + +RISCV_CORE("xiangshan-nanhu", "rv64imafdc_zba_zbb_zbc_zbs_" + "zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh_" + "svinval_zicbom_zicboz", + "xiangshan-nanhu") #undef RISCV_CORE diff --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h index 281dd068c55f..9ae86d52a75f 100644 --- a/gcc/config/riscv/riscv-opts.h +++ b/gcc/config/riscv/riscv-opts.h @@ -57,6 +57,7 @@ enum riscv_microarchitecture_type { sifive_7, sifive_p400, sifive_p600, + xiangshan, generic_ooo }; extern enum riscv_microarchitecture_type riscv_microarchitecture; diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 680c4a728e92..45015addd1fe 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -498,6 +498,23 @@ static const struct riscv_tune_param thead_c906_tune_info = { NULL, /* vector cost */ }; +/* Costs to use when optimizing for xiangshan nanhu. */ +static const struct riscv_tune_param xiangshan_nanhu_tune_info = { + {COSTS_N_INSNS (3), COSTS_N_INSNS (3)}, /* fp_add */ + {COSTS_N_INSNS (3), COSTS_N_INSNS (3)}, /* fp_mul */ + {COSTS_N_INSNS (10), COSTS_N_INSNS (20)}, /* fp_div */ + {COSTS_N_INSNS (3), COSTS_N_INSNS (3)}, /* int_mul */ + {COSTS_N_INSNS (6), COSTS_N_INSNS (6)}, /* int_div */ + 6, /* issue_rate */ + 3, /* branch_cost */ + 3, /* memory_cost */ + 3, /* fmv_cost */ + true, /* slow_unaligned_access */ + false, /* use_divmod_expansion */ + RISCV_FUSE_ZEXTW | RISCV_FUSE_ZEXTH, /* fusible_ops */ + NULL, /* vector cost */ +}; + /* Costs to use when optimizing for a generic ooo profile. */ static const struct riscv_tune_param generic_ooo_tune_info = { {COSTS_N_INSNS (2), COSTS_N_INSNS (2)}, /* fp_add */ diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index b16ed97909c0..f433b03885cc 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -685,7 +685,7 @@ ;; Microarchitectures we know how to tune for. ;; Keep this in sync with enum riscv_microarchitecture. (define_attr "tune" - "generic,sifive_7,sifive_p400,sifive_p600,generic_ooo" + "generic,sifive_7,sifive_p400,sifive_p600,xiangshan,generic_ooo" (const (symbol_ref "((enum attr_tune) riscv_microarchitecture)"))) ;; Describe a user's asm statement. @@ -3859,3 +3859,4 @@ (include "sfb.md") (include "zc.md") (include "corev.md") +(include "xiangshan.md") diff --git a/gcc/config/riscv/xiangshan.md b/gcc/config/riscv/xiangshan.md new file mode 100644 index 000000000000..381c3ce14283 --- /dev/null +++ b/gcc/config/riscv/xiangshan.md @@ -0,0 +1,148 @@ +;; Scheduling description for XiangShan Nanhu. + +;; Nanhu is a 6-issue, superscalar, out-of-order processor. + +;; ----------------------------------------------------- +;; Nanhu Core units +;; 1*jmp + 4*alu + 2*mdu + 4*fma + 2*fmisc + 2*ld + 2*st +;; ----------------------------------------------------- + +(define_automaton "xiangshan") + +(define_cpu_unit "xs_jmp" "xiangshan") +(define_cpu_unit "xs_i2f" "xiangshan") +(define_reservation "xs_jmp_rs" "xs_jmp | xs_i2f") + +(define_cpu_unit "xs_alu_0, xs_alu_1, xs_alu_2, xs_alu_3" "xiangshan") +(define_reservation "xs_alu_rs" + "xs_alu_0 | xs_alu_1 | xs_alu_2 | xs_alu_3") + +(define_cpu_unit "xs_mul_0, xs_mul_1" "xiangshan") +(define_cpu_unit "xs_div_0, xs_div_1" "xiangshan") +(define_reservation "xs_mdu_rs" + "(xs_mul_0 + xs_div_0) | (xs_mul_1 + xs_div_1)") + +(define_cpu_unit "xs_fadd_0, xs_fadd_1, xs_fadd_2, xs_fadd_3" "xiangshan") +(define_cpu_unit "xs_fmul_0, xs_fmul_1, xs_fmul_2, xs_fmul_3" "xiangshan") +(define_reservation "xs_fma_0" "xs_fadd_0 + xs_fmul_0") +(define_reservation "xs_fma_1" "xs_fadd_1 + xs_fmul_1") +(define_reservation "xs_fma_2" "xs_fadd_2 + xs_fmul_2") +(define_reservation "xs_fma_3" "xs_fadd_3 + xs_fmul_3") + +(define_cpu_unit "xs_f2f_0, xs_f2f_1" "xiangshan") +(define_cpu_unit "xs_f2i_0, xs_f2i_1" "xiangshan") +(define_cpu_unit "xs_fdiv_0, xs_fdiv_1" "xiangshan") +(define_reservation "xs_fmisc_rs" + "(xs_f2f_0 + xs_f2i_0 + xs_fdiv_0) | (xs_f2f_1 + xs_f2i_1 + xs_fdiv_1)") + +(define_cpu_unit "xs_ld_0, xs_ld_1" "xiangshan") +(define_cpu_unit "xs_st_0, xs_st_1" "xiangshan") +(define_reservation "xs_ld_rs" "xs_ld_0 | xs_ld_1") +(define_reservation "xs_st_rs" "xs_st_0 | xs_st_1") + +;; ---------------------------------------------------- +;; Memory (load/store) +;; ---------------------------------------------------- + +(define_insn_reservation "xiangshan_load" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "load")) + "xs_ld_rs") + +(define_insn_reservation "xiangshan_fpload" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fpload")) + "xs_ld_rs") + +(define_insn_reservation "xiangshan_store" 1 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "store")) + "xs_st_rs") + +(define_insn_reservation "xiangshan_fpstore" 1 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fpstore")) + "xs_st_rs") + +;; ---------------------------------------------------- +;; Int +;; ---------------------------------------------------- + +(define_insn_reservation "xiangshan_jump" 1 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "jump,call,auipc,unknown")) + "xs_jmp_rs") + +(define_insn_reservation "xiangshan_i2f" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "mtc")) + "xs_jmp_rs") + +(define_insn_reservation "xiangshan_mul" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "imul")) + "xs_mdu_rs") + +(define_insn_reservation "xiangshan_div" 21 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "idiv")) + "xs_mdu_rs") + +(define_insn_reservation "xiangshan_alu" 1 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "nop,const,branch,arith,shift,slt,multi,logical,move,bitmanip,unknown")) + "xs_alu_rs") + +;; ---------------------------------------------------- +;; Float +;; ---------------------------------------------------- + + +(define_insn_reservation "xiangshan_fma" 5 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fmadd")) + "xs_fma_0 | xs_fma_1 | xs_fma_2 | xs_fma_3") + +(define_insn_reservation "xiangshan_fadd" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fadd")) + "xs_fadd_0 | xs_fadd_1 | xs_fadd_2 | xs_fadd_3") + +(define_insn_reservation "xiangshan_fmul" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fmul")) + "xs_fmul_0 | xs_fmul_1 | xs_fmul_2 | xs_fmul_3") + +(define_insn_reservation "xiangshan_f2f" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fcvt,fmove")) + "xs_fmisc_rs") + +(define_insn_reservation "xiangshan_f2i" 3 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "mfc,fcmp")) + "xs_fmisc_rs") + +(define_insn_reservation "xiangshan_sfdiv" 11 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fdiv") + (eq_attr "mode" "SF")) + "xs_fmisc_rs") + +(define_insn_reservation "xiangshan_sfsqrt" 17 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fsqrt") + (eq_attr "mode" "SF")) + "xs_fmisc_rs") + +(define_insn_reservation "xiangshan_dfdiv" 21 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fdiv") + (eq_attr "mode" "DF")) + "xs_fmisc_rs") + +(define_insn_reservation "xiangshan_dfsqrt" 37 + (and (eq_attr "tune" "xiangshan") + (eq_attr "type" "fsqrt") + (eq_attr "mode" "DF")) + "xs_fmisc_rs") diff --git a/gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-nanhu.c b/gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-nanhu.c new file mode 100644 index 000000000000..2903c88d91c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/mcpu-xiangshan-nanhu.c @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-skip-if "-march given" { *-*-* } { "-march=*" } } */ +/* { dg-options "-mcpu=xiangshan-nanhu" { target { rv64 } } } */ +/* XiangShan Nanhu => rv64imafdc_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd + _zkne_zknh_zksed_zksh_svinval_zicbom_zicboz */ + +#if !((__riscv_xlen == 64) \ + && !defined(__riscv_32e) \ + && defined(__riscv_mul) \ + && defined(__riscv_atomic) \ + && (__riscv_flen == 64) \ + && defined(__riscv_compressed) \ + && defined(__riscv_zicbom) \ + && defined(__riscv_zicboz) \ + && defined(__riscv_zba) \ + && defined(__riscv_zbb) \ + && defined(__riscv_zbc) \ + && defined(__riscv_zbs) \ + && defined(__riscv_zbkb) \ + && defined(__riscv_zbkc) \ + && defined(__riscv_zbkx) \ + && defined(__riscv_zknd) \ + && defined(__riscv_zkne) \ + && defined(__riscv_zknh) \ + && defined(__riscv_zksed) \ + && defined(__riscv_zksh) \ + && defined(__riscv_svinval)) +#error "unexpected arch" +#endif + +int main() +{ + return 0; +} From 9eeca7753670d7bccd82e6ed7e4fe97cabd9a362 Mon Sep 17 00:00:00 2001 From: Mary Bennett <mary.bennett@embecosm.com> Date: Mon, 18 Mar 2024 21:32:56 -0600 Subject: [PATCH 119/551] [PATCH v5 1/1] RISC-V: Add support for XCVbi extension in CV32E40P Spec: github.com/openhwgroup/core-v-sw/blob/master/specifications/corev-builtin-spec.md Contributors: Mary Bennett <mary.bennett@embecosm.com> Nandni Jamnadas <nandni.jamnadas@embecosm.com> Pietra Ferreira <pietra.ferreira@embecosm.com> Charlie Keaney Jessica Mills Craig Blackmore <craig.blackmore@embecosm.com> Simon Cook <simon.cook@embecosm.com> Jeremy Bennett <jeremy.bennett@embecosm.com> Helene Chelin <helene.chelin@embecosm.com> gcc/ChangeLog: * common/config/riscv/riscv-common.cc: Create XCVbi extension support. * config/riscv/riscv.opt: Likewise. * config/riscv/corev.md: Implement cv_branch<mode> pattern for cv.beqimm and cv.bneimm. * config/riscv/riscv.md: Add CORE-V branch immediate to RISC-V branch instruction pattern. * config/riscv/constraints.md: Implement constraints cv_bi_s5 - signed 5-bit immediate. * config/riscv/predicates.md: Implement predicate const_int5s_operand - signed 5 bit immediate. * doc/sourcebuild.texi: Add XCVbi documentation. gcc/testsuite/ChangeLog: * gcc.target/riscv/cv-bi-beqimm-compile-1.c: New test. * gcc.target/riscv/cv-bi-beqimm-compile-2.c: New test. * gcc.target/riscv/cv-bi-bneimm-compile-1.c: New test. * gcc.target/riscv/cv-bi-bneimm-compile-2.c: New test. * lib/target-supports.exp: Add proc for XCVbi. --- gcc/common/config/riscv/riscv-common.cc | 2 + gcc/config/riscv/constraints.md | 6 +++ gcc/config/riscv/corev.md | 37 ++++++++++++++ gcc/config/riscv/predicates.md | 4 ++ gcc/config/riscv/riscv.md | 2 +- gcc/config/riscv/riscv.opt | 2 + gcc/doc/sourcebuild.texi | 3 ++ .../gcc.target/riscv/cv-bi-beqimm-compile-1.c | 17 +++++++ .../gcc.target/riscv/cv-bi-beqimm-compile-2.c | 48 +++++++++++++++++++ .../gcc.target/riscv/cv-bi-bneimm-compile-1.c | 17 +++++++ .../gcc.target/riscv/cv-bi-bneimm-compile-2.c | 48 +++++++++++++++++++ gcc/testsuite/lib/target-supports.exp | 13 +++++ 12 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-2.c diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index 48efef40dfd1..440127a2af03 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -366,6 +366,7 @@ static const struct riscv_ext_version riscv_ext_version_table[] = {"xcvalu", ISA_SPEC_CLASS_NONE, 1, 0}, {"xcvelw", ISA_SPEC_CLASS_NONE, 1, 0}, {"xcvsimd", ISA_SPEC_CLASS_NONE, 1, 0}, + {"xcvbi", ISA_SPEC_CLASS_NONE, 1, 0}, {"xtheadba", ISA_SPEC_CLASS_NONE, 1, 0}, {"xtheadbb", ISA_SPEC_CLASS_NONE, 1, 0}, @@ -1618,6 +1619,7 @@ static const riscv_ext_flag_table_t riscv_ext_flag_table[] = {"xcvalu", &gcc_options::x_riscv_xcv_subext, MASK_XCVALU}, {"xcvelw", &gcc_options::x_riscv_xcv_subext, MASK_XCVELW}, {"xcvsimd", &gcc_options::x_riscv_xcv_subext, MASK_XCVSIMD}, + {"xcvbi", &gcc_options::x_riscv_xcv_subext, MASK_XCVBI}, {"xtheadba", &gcc_options::x_riscv_xthead_subext, MASK_XTHEADBA}, {"xtheadbb", &gcc_options::x_riscv_xthead_subext, MASK_XTHEADBB}, diff --git a/gcc/config/riscv/constraints.md b/gcc/config/riscv/constraints.md index 41acaea04eba..972e8842c9f8 100644 --- a/gcc/config/riscv/constraints.md +++ b/gcc/config/riscv/constraints.md @@ -268,6 +268,12 @@ (and (match_test "IN_RANGE (ival, 0, 1073741823)") (match_test "exact_log2 (ival + 1) != -1")))) +(define_constraint "CV_bi_sign5" + "@internal + A 5-bit signed immediate for CORE-V Immediate Branch." + (and (match_code "const_int") + (match_test "IN_RANGE (ival, -16, 15)"))) + (define_constraint "CV_simd_si6" "A 6-bit signed immediate for SIMD." (and (match_code "const_int") diff --git a/gcc/config/riscv/corev.md b/gcc/config/riscv/corev.md index 3857c53ce101..e2db8f311307 100644 --- a/gcc/config/riscv/corev.md +++ b/gcc/config/riscv/corev.md @@ -2614,3 +2614,40 @@ cv.subrotmj.div8\t%0,%1,%2" [(set_attr "type" "arith") (set_attr "mode" "SI")]) + +;; XCVBI Instructions +(define_insn "*cv_branch<mode>" + [(set (pc) + (if_then_else + (match_operator 1 "equality_operator" + [(match_operand:X 2 "register_operand" "r") + (match_operand:X 3 "const_int5s_operand" "CV_bi_sign5")]) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_XCVBI" +{ + if (get_attr_length (insn) == 12) + return "cv.b%N1\t%2,%z3,1f; jump\t%l0,ra; 1:"; + + return "cv.b%C1imm\t%2,%3,%0"; +} + [(set_attr "type" "branch") + (set_attr "mode" "none")]) + +(define_insn "*branch<mode>" + [(set (pc) + (if_then_else + (match_operator 1 "ordered_comparison_operator" + [(match_operand:X 2 "register_operand" "r") + (match_operand:X 3 "reg_or_0_operand" "rJ")]) + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_XCVBI" +{ + if (get_attr_length (insn) == 12) + return "b%N1\t%2,%z3,1f; jump\t%l0,ra; 1:"; + + return "b%C1\t%2,%z3,%l0"; +} + [(set_attr "type" "branch") + (set_attr "mode" "none")]) diff --git a/gcc/config/riscv/predicates.md b/gcc/config/riscv/predicates.md index 6c87a7bd1f49..539e0f7379b7 100644 --- a/gcc/config/riscv/predicates.md +++ b/gcc/config/riscv/predicates.md @@ -445,6 +445,10 @@ (ior (match_operand 0 "const_int6_operand") (match_operand 0 "register_operand"))) +(define_predicate "const_int5s_operand" + (and (match_code "const_int") + (match_test "IN_RANGE (INTVAL (op), -16, 15)"))) + ;; Predicates for the V extension. (define_special_predicate "vector_length_operand" (ior (match_operand 0 "pmode_register_operand") diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index f433b03885cc..0346cc3859d8 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -2756,7 +2756,7 @@ (match_operand:X 3 "reg_or_0_operand" "rJ")]) (label_ref (match_operand 0 "" "")) (pc)))] - "" + "!TARGET_XCVBI" { if (get_attr_length (insn) == 12) return "b%N1\t%2,%z3,1f; jump\t%l0,ra; 1:"; diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt index 45a95177af38..710c0a41870b 100644 --- a/gcc/config/riscv/riscv.opt +++ b/gcc/config/riscv/riscv.opt @@ -430,6 +430,8 @@ Mask(ZCMP) Var(riscv_zc_subext) Mask(ZCMT) Var(riscv_zc_subext) +Mask(XCVBI) Var(riscv_xcv_subext) + TargetVariable int riscv_sv_subext diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index efab862b94f0..7ef82fc9b00a 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2507,6 +2507,9 @@ Test system has an integer register width of 32 bits. @item rv64 Test system has an integer register width of 64 bits. +@item cv_bi +Test system has support for the CORE-V BI extension. + @end table @subsubsection CORE-V specific attributes diff --git a/gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-1.c b/gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-1.c new file mode 100644 index 000000000000..5b6ba5b8ae65 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target cv_bi } */ +/* { dg-options "-march=rv32i_xcvbi -mabi=ilp32" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ + +/* __builtin_expect is used to provide the compiler with + branch prediction information and to direct the compiler + to the expected flow through the code. */ + +int +foo1 (int a, int x, int y) +{ + a = __builtin_expect (a, 12); + return a != 10 ? x : y; +} + +/* { dg-final { scan-assembler-times "cv\\.beqimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),10,\(\?\:.L\[0-9\]\)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-2.c b/gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-2.c new file mode 100644 index 000000000000..bb2e58439577 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/cv-bi-beqimm-compile-2.c @@ -0,0 +1,48 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target cv_bi } */ +/* { dg-options "-march=rv32i_xcvbi -mabi=ilp32" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ + +/* __builtin_expect is used to provide the compiler with + branch prediction information and to direct the compiler + to the expected flow through the code. */ + +int +foo1 (int a, int x, int y) +{ + a = __builtin_expect (a, 10); + return a != -16 ? x : y; +} + +int +foo2 (int a, int x, int y) +{ + a = __builtin_expect (a, 10); + return a != 0 ? x : y; +} + +int +foo3 (int a, int x, int y) +{ + a = __builtin_expect (a, 10); + return a != 15 ? x : y; +} + +int +foo4 (int a, int x, int y) +{ + a = __builtin_expect (a, 10); + return a != -17 ? x : y; +} + +int +foo5 (int a, int x, int y) +{ + a = __builtin_expect (a, 10); + return a != 16 ? x : y; +} + +/* { dg-final { scan-assembler-times "cv\\.beqimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),-16,\(\?\:.L\[0-9\]\)" 1 } } */ +/* { dg-final { scan-assembler-times "cv\\.beqimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),0,\(\?\:.L\[0-9\]\)" 1 } } */ +/* { dg-final { scan-assembler-times "cv\\.beqimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),15,\(\?\:.L\[0-9\]\)" 1 } } */ +/* { dg-final { scan-assembler-times "beq\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),\(\?\:.L\[0-9\]+\)" 2 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-1.c b/gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-1.c new file mode 100644 index 000000000000..21eab38a08dc --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target cv_bi } */ +/* { dg-options "-march=rv32i_xcvbi -mabi=ilp32" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ + +/* __builtin_expect is used to provide the compiler with + branch prediction information and to direct the compiler + to the expected flow through the code. */ + +int +foo1(int a, int x, int y) +{ + a = __builtin_expect(a, 10); + return a == 10 ? x : y; +} + +/* { dg-final { scan-assembler-times "cv\\.bneimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),10,\(\?\:.L\[0-9\]\)" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-2.c b/gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-2.c new file mode 100644 index 000000000000..a028f6844892 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/cv-bi-bneimm-compile-2.c @@ -0,0 +1,48 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target cv_bi } */ +/* { dg-options "-march=rv32i_xcvbi -mabi=ilp32" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ + +/* __builtin_expect is used to provide the compiler with + branch prediction information and to direct the compiler + to the expected flow through the code. */ + +int +foo1(int a, int x, int y) +{ + a = __builtin_expect(a, -16); + return a == -16 ? x : y; +} + +int +foo2(int a, int x, int y) +{ + a = __builtin_expect(a, 0); + return a == 0 ? x : y; +} + +int +foo3(int a, int x, int y) +{ + a = __builtin_expect(a, 15); + return a == 15 ? x : y; +} + +int +foo4(int a, int x, int y) +{ + a = __builtin_expect(a, -17); + return a == -17 ? x : y; +} + +int +foo5(int a, int x, int y) +{ + a = __builtin_expect(a, 16); + return a == 16 ? x : y; +} + +/* { dg-final { scan-assembler-times "cv\\.bneimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),-16,\(\?\:.L\[0-9\]\)" 1 } } */ +/* { dg-final { scan-assembler-times "cv\\.bneimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),0,\(\?\:.L\[0-9\]\)" 1 } } */ +/* { dg-final { scan-assembler-times "cv\\.bneimm\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),15,\(\?\:.L\[0-9\]\)" 1 } } */ +/* { dg-final { scan-assembler-times "bne\t\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),\(\?\:t\[0-6\]\|a\[0-7\]\|s\[1-11\]\),\(\?\:.L\[0-9\]+\)" 2 } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 467b539b20db..3262104b5fd9 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -13375,6 +13375,19 @@ proc check_effective_target_cv_simd { } { } "-march=rv32i_xcvsimd" ] } +# Return 1 if the CORE-V BI extension is available +proc check_effective_target_cv_bi { } { + if { !([istarget riscv*-*-*]) } { + return 0 + } + return [check_no_compiler_messages cv_bi object { + void foo (void) + { + asm ("cv.beqimm t0, -16, foo"); + } + } "-march=rv32i_xcvbi" ] +} + proc check_effective_target_loongarch_sx { } { return [check_no_compiler_messages loongarch_lsx assembly { #if !defined(__loongarch_sx) From 94c3508c5a14d1948fe3bffa9e16c6f3d9c2836a Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Mon, 18 Mar 2024 12:39:03 +0100 Subject: [PATCH 120/551] tree-optimization/114375 - disallow SLP discovery of permuted mask loads We cannot currently handle permutations of mask loads in code generation or permute optimization. But we simply drop any permutation on the floor, so the following instead rejects the SLP build rather than producing wrong-code. I've also made sure to reject them in vectorizable_load for completeness. PR tree-optimization/114375 * tree-vect-slp.cc (vect_build_slp_tree_2): Compute the load permutation for masked loads but reject it when any such is necessary. * tree-vect-stmts.cc (vectorizable_load): Reject masked VMAT_ELEMENTWISE and VMAT_STRIDED_SLP as those are not supported. * gcc.dg/vect/vect-pr114375.c: New testcase. --- gcc/testsuite/gcc.dg/vect/vect-pr114375.c | 44 +++++++++++++++++++++++ gcc/tree-vect-slp.cc | 39 ++++++++++++++------ gcc/tree-vect-stmts.cc | 8 +++++ 3 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-pr114375.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-pr114375.c b/gcc/testsuite/gcc.dg/vect/vect-pr114375.c new file mode 100644 index 000000000000..1e1cb0123d07 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-pr114375.c @@ -0,0 +1,44 @@ +/* { dg-additional-options "-mavx2" { target avx2_runtime } } */ + +#include "tree-vect.h" + +int a[512]; +int b[512]; +int c[512]; + +void __attribute__((noipa)) +foo(int * __restrict p) +{ + for (int i = 0; i < 64; ++i) + { + int tem = 2, tem2 = 2; + if (a[4*i + 1]) + tem = p[4*i]; + if (a[4*i]) + tem2 = p[4*i + 2]; + b[2*i] = tem2; + b[2*i+1] = tem; + if (a[4*i + 2]) + tem = p[4*i + 1]; + if (a[4*i + 3]) + tem2 = p[4*i + 3]; + c[2*i] = tem2; + c[2*i+1] = tem; + } +} +int main() +{ + check_vect (); + + for (int i = 0; i < 512; ++i) + a[i] = (i >> 1) & 1; + + foo (a); + + if (c[0] != 1 || c[1] != 0 || c[2] != 1 || c[3] != 0 + || b[0] != 2 || b[1] != 2 || b[2] != 2 || b[3] != 2) + abort (); + + return 0; +} + diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 527b06c9f9c8..23f9593191ad 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -1921,12 +1921,7 @@ vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node, if (STMT_VINFO_DATA_REF (stmt_info) && DR_IS_READ (STMT_VINFO_DATA_REF (stmt_info))) { - if (gcall *stmt = dyn_cast <gcall *> (stmt_info->stmt)) - gcc_assert (gimple_call_internal_p (stmt, IFN_MASK_LOAD) - || gimple_call_internal_p (stmt, IFN_GATHER_LOAD) - || gimple_call_internal_p (stmt, IFN_MASK_GATHER_LOAD) - || gimple_call_internal_p (stmt, IFN_MASK_LEN_GATHER_LOAD)); - else if (STMT_VINFO_GATHER_SCATTER_P (stmt_info)) + if (STMT_VINFO_GATHER_SCATTER_P (stmt_info)) gcc_assert (DR_IS_READ (STMT_VINFO_DATA_REF (stmt_info))); else { @@ -1943,19 +1938,43 @@ vect_build_slp_tree_2 (vec_info *vinfo, slp_tree node, load_permutation.create (group_size); stmt_vec_info first_stmt_info = DR_GROUP_FIRST_ELEMENT (SLP_TREE_SCALAR_STMTS (node)[0]); + bool any_permute = false; FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), j, load_info) { int load_place; if (STMT_VINFO_GROUPED_ACCESS (stmt_info)) load_place = vect_get_place_in_interleaving_chain - (load_info, first_stmt_info); + (load_info, first_stmt_info); else load_place = 0; gcc_assert (load_place != -1); - load_permutation.safe_push (load_place); + any_permute |= load_place != j; + load_permutation.quick_push (load_place); + } + + if (gcall *stmt = dyn_cast <gcall *> (stmt_info->stmt)) + { + gcc_assert (gimple_call_internal_p (stmt, IFN_MASK_LOAD) + || gimple_call_internal_p (stmt, IFN_GATHER_LOAD) + || gimple_call_internal_p (stmt, IFN_MASK_GATHER_LOAD) + || gimple_call_internal_p (stmt, + IFN_MASK_LEN_GATHER_LOAD)); + load_permutation.release (); + /* We cannot handle permuted masked loads, see PR114375. */ + if (any_permute + || (STMT_VINFO_GROUPED_ACCESS (stmt_info) + && DR_GROUP_SIZE (first_stmt_info) != group_size) + || STMT_VINFO_STRIDED_P (stmt_info)) + { + matches[0] = false; + return NULL; + } + } + else + { + SLP_TREE_LOAD_PERMUTATION (node) = load_permutation; + return node; } - SLP_TREE_LOAD_PERMUTATION (node) = load_permutation; - return node; } } else if (gimple_assign_single_p (stmt_info->stmt) diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index e8617439a480..5a4eb136c6d9 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -10080,6 +10080,14 @@ vectorizable_load (vec_info *vinfo, "unsupported masked emulated gather.\n"); return false; } + else if (memory_access_type == VMAT_ELEMENTWISE + || memory_access_type == VMAT_STRIDED_SLP) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "unsupported masked strided access.\n"); + return false; + } } bool costing_p = !vec_stmt; From 8959ab63f1881a8a4b1921b946d4ea3986bf1063 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 19 Mar 2024 09:10:26 +0100 Subject: [PATCH 121/551] openmp: Make c_omp_check_loop_binding_exprs diagnostics translatable [PR114364] c_omp_check_loop_binding_exprs with check_loop_binding_expr was composing diagnostics from a format string with %s that provided additional words (but not keywords). That is a big no no for translations, both because the translator can't choose a different word order and because the %s part wasn't translated at all (would need to use _("...") to get translated), so this patch rewrites it such that the whole messages are in the format strings. 2024-03-19 Jakub Jelinek <jakub@redhat.com> PR c/114364 * c-omp.cc (enum check_loop_binding_expr_ctx): New type. (check_loop_binding_expr): Remove context argument, add ctx argument with check_loop_binding_expr_ctx type at the end. Don't create diagnostic message from multiple pieces. (c_omp_check_loop_binding_exprs): Adjust callers. --- gcc/c-family/c-omp.cc | 51 +++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/gcc/c-family/c-omp.cc b/gcc/c-family/c-omp.cc index 5117022e330c..c0e02aa422f2 100644 --- a/gcc/c-family/c-omp.cc +++ b/gcc/c-family/c-omp.cc @@ -1793,22 +1793,46 @@ check_loop_binding_expr_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED, #define LOCATION_OR(loc1, loc2) \ ((loc1) != UNKNOWN_LOCATION ? (loc1) : (loc2)) +enum check_loop_binding_expr_ctx { + CHECK_LOOP_BINDING_EXPR_CTX_LOOP_VAR, + CHECK_LOOP_BINDING_EXPR_CTX_IN_INIT, + CHECK_LOOP_BINDING_EXPR_CTX_END_TEST, + CHECK_LOOP_BINDING_EXPR_CTX_INCR +}; + /* Check a single expression EXPR for references to variables bound in intervening code in BODY. Return true if ok, otherwise give an error referencing CONTEXT and return false. Use LOC for the error message if EXPR doesn't have one. */ static bool -check_loop_binding_expr (tree expr, tree body, const char *context, - location_t loc) +check_loop_binding_expr (tree expr, tree body, location_t loc, + check_loop_binding_expr_ctx ctx) { tree bad = walk_tree (&expr, check_loop_binding_expr_r, (void *)&body, NULL); if (bad) { location_t eloc = EXPR_LOCATION (expr); - error_at (LOCATION_OR (eloc, loc), - "variable %qD used %s is bound " - "in intervening code", bad, context); + eloc = LOCATION_OR (eloc, loc); + switch (ctx) + { + case CHECK_LOOP_BINDING_EXPR_CTX_LOOP_VAR: + error_at (eloc, "variable %qD used as loop variable is bound " + "in intervening code", bad); + break; + case CHECK_LOOP_BINDING_EXPR_CTX_IN_INIT: + error_at (eloc, "variable %qD used in initializer is bound " + "in intervening code", bad); + break; + case CHECK_LOOP_BINDING_EXPR_CTX_END_TEST: + error_at (eloc, "variable %qD used in end test is bound " + "in intervening code", bad); + break; + case CHECK_LOOP_BINDING_EXPR_CTX_INCR: + error_at (eloc, "variable %qD used in increment expression is bound " + "in intervening code", bad); + break; + } return false; } return true; @@ -1839,13 +1863,15 @@ c_omp_check_loop_binding_exprs (tree stmt, vec<tree> *orig_inits) e = TREE_OPERAND (init, 1); eloc = LOCATION_OR (EXPR_LOCATION (init), loc); - if (!check_loop_binding_expr (decl, body, "as loop variable", eloc)) + if (!check_loop_binding_expr (decl, body, eloc, + CHECK_LOOP_BINDING_EXPR_CTX_LOOP_VAR)) ok = false; - if (!check_loop_binding_expr (e, body, "in initializer", eloc)) + if (!check_loop_binding_expr (e, body, eloc, + CHECK_LOOP_BINDING_EXPR_CTX_IN_INIT)) ok = false; if (orig_init - && !check_loop_binding_expr (orig_init, body, - "in initializer", eloc)) + && !check_loop_binding_expr (orig_init, body, eloc, + CHECK_LOOP_BINDING_EXPR_CTX_IN_INIT)) ok = false; /* INCR and/or COND may be null if this is a template with a @@ -1859,7 +1885,8 @@ c_omp_check_loop_binding_exprs (tree stmt, vec<tree> *orig_inits) e = TREE_OPERAND (cond, 0); else e = cond; - if (!check_loop_binding_expr (e, body, "in end test", eloc)) + if (!check_loop_binding_expr (e, body, eloc, + CHECK_LOOP_BINDING_EXPR_CTX_END_TEST)) ok = false; } @@ -1870,8 +1897,8 @@ c_omp_check_loop_binding_exprs (tree stmt, vec<tree> *orig_inits) increment/decrement. We don't have to check the latter since there are no operands besides the iteration variable. */ if (TREE_CODE (incr) == MODIFY_EXPR - && !check_loop_binding_expr (TREE_OPERAND (incr, 1), body, - "in increment expression", eloc)) + && !check_loop_binding_expr (TREE_OPERAND (incr, 1), body, eloc, + CHECK_LOOP_BINDING_EXPR_CTX_INCR)) ok = false; } } From 8f85b46337f90c3126b9cefd72ffd29eb9a4ebf3 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 19 Mar 2024 09:13:32 +0100 Subject: [PATCH 122/551] rs6000: Fix up setup_incoming_varargs [PR114175] The c23-stdarg-8.c test (as well as the new test below added to cover even more cases) FAIL on powerpc64le-linux and presumably other powerpc* targets as well. Like in the r14-9503-g218d174961 change on x86-64 we need to advance next_cum after the hidden return pointer argument even in case where there are no user arguments before ... in C23. The following patch does that. There is another TYPE_NO_NAMED_ARGS_STDARG_P use later on: if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) && targetm.calls.must_pass_in_stack (arg)) first_reg_offset += rs6000_arg_size (TYPE_MODE (arg.type), arg.type); but I believe it was added there in r13-3549-g4fe34cdc unnecessarily, when there is no hidden return pointer argument, arg.type is NULL and must_pass_in_stack_var_size as well as must_pass_in_stack_var_size_or_pad return false in that case, and for the TYPE_NO_NAMED_ARGS_STDARG_P case with hidden return pointer argument that argument should have pointer type and it is the first argument, so must_pass_in_stack shouldn't be true for it either. 2024-03-19 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/rs6000/rs6000-call.cc (setup_incoming_varargs): Only skip rs6000_function_arg_advance_1 for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. * gcc.dg/c23-stdarg-9.c: New test. --- gcc/config/rs6000/rs6000-call.cc | 3 +- gcc/testsuite/gcc.dg/c23-stdarg-9.c | 284 ++++++++++++++++++++++++++++ 2 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/c23-stdarg-9.c diff --git a/gcc/config/rs6000/rs6000-call.cc b/gcc/config/rs6000/rs6000-call.cc index 8c590903c864..1f8f93a2ee78 100644 --- a/gcc/config/rs6000/rs6000-call.cc +++ b/gcc/config/rs6000/rs6000-call.cc @@ -2253,7 +2253,8 @@ setup_incoming_varargs (cumulative_args_t cum, /* Skip the last named argument. */ next_cum = *get_cumulative_args (cum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) rs6000_function_arg_advance_1 (&next_cum, arg.mode, arg.type, arg.named, 0); diff --git a/gcc/testsuite/gcc.dg/c23-stdarg-9.c b/gcc/testsuite/gcc.dg/c23-stdarg-9.c new file mode 100644 index 000000000000..e2839e7e2cd0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-stdarg-9.c @@ -0,0 +1,284 @@ +/* Test C23 variadic functions with no named parameters, or last named + parameter with a declaration not allowed in C17. Execution tests. */ +/* { dg-do run } */ +/* { dg-options "-O2 -std=c23 -pedantic-errors" } */ + +#include <stdarg.h> + +struct S { int a[1024]; }; + +int +f1 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +int +f2 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +int +f3 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +int +f4 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +int +f5 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +int +f6 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +int +f7 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +int +f8 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + return r; +} + +struct S +s1 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +struct S +s2 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +struct S +s3 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +struct S +s4 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +struct S +s5 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +struct S +s6 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +struct S +s7 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +struct S +s8 (...) +{ + int r = 0; + va_list ap; + va_start (ap); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + r += va_arg (ap, int); + va_end (ap); + struct S s = {}; + s.a[0] = r; + return s; +} + +int +b1 (void) +{ + return f8 (1, 2, 3, 4, 5, 6, 7, 8); +} + +int +b2 (void) +{ + return s8 (1, 2, 3, 4, 5, 6, 7, 8).a[0]; +} + +int +main () +{ + if (f1 (1) != 1 || f2 (1, 2) != 3 || f3 (1, 2, 3) != 6 + || f4 (1, 2, 3, 4) != 10 || f5 (1, 2, 3, 4, 5) != 15 + || f6 (1, 2, 3, 4, 5, 6) != 21 || f7 (1, 2, 3, 4, 5, 6, 7) != 28 + || f8 (1, 2, 3, 4, 5, 6, 7, 8) != 36) + __builtin_abort (); + if (s1 (1).a[0] != 1 || s2 (1, 2).a[0] != 3 || s3 (1, 2, 3).a[0] != 6 + || s4 (1, 2, 3, 4).a[0] != 10 || s5 (1, 2, 3, 4, 5).a[0] != 15 + || s6 (1, 2, 3, 4, 5, 6).a[0] != 21 + || s7 (1, 2, 3, 4, 5, 6, 7).a[0] != 28 + || s8 (1, 2, 3, 4, 5, 6, 7, 8).a[0] != 36) + __builtin_abort (); +} From a185d8aeeed7a25a01505565aa61ccf8a876c6ff Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 19 Mar 2024 09:14:11 +0100 Subject: [PATCH 123/551] alpha: Fix alpha_setup_incoming_varargs [PR114175] Like in the r14-9503 change on x86-64, I think Alpha also needs to function_arg_advance after the hidden return pointer argument if any. At least, the following patch changes the assembly of s1-s6 functions on the https://gcc.gnu.org/pipermail/gcc-patches/2024-March/647956.html c23-stdarg-9.c testcase, and eyeballing the assembly for int f8 (...) the ... args are passed in 16..21 registers and then on the stack, while for struct S s8 (...) have hidden return pointer passed in 16 register and ... args in 17..21 registers and then on the stack, and seems without this patch the incoming varargs setup does the wrong thing (but I can't test on alpha easily). Many targets seem to be unaffected, e.g. aarch64, arm, s390*, so I'm not trying to change all targets together because such a change clearly isn't needed e.g. for targets which use special register for the hidden return pointer. 2024-03-19 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/alpha/alpha.cc (alpha_setup_incoming_varargs): Only skip function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/alpha/alpha.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/alpha/alpha.cc b/gcc/config/alpha/alpha.cc index 98df142fb061..1126cea1f7ba 100644 --- a/gcc/config/alpha/alpha.cc +++ b/gcc/config/alpha/alpha.cc @@ -6090,7 +6090,8 @@ alpha_setup_incoming_varargs (cumulative_args_t pcum, { CUMULATIVE_ARGS cum = *get_cumulative_args (pcum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) /* Skip the current argument. */ targetm.calls.function_arg_advance (pack_cumulative_args (&cum), arg); From 167ec6df7fd8deb67759acd5dbe72c1982a55873 Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Fri, 15 Mar 2024 19:55:43 +0000 Subject: [PATCH 124/551] arm: [MVE intrinsics] Fix support for loads [PR target/114323] The testcase in this PR shows that we would load from an uninitialized location, because the vld1 instrinsics are reported as "const". This is because function_instance::reads_global_state_p() does not take CP_READ_MEMORY into account. Fixing this gives vld1 the "pure" attribute instead, and solves the problem. 2024-03-15 Christophe Lyon <christophe.lyon@linaro.org> PR target/114323 gcc/ * config/arm/arm-mve-builtins.cc (function_instance::reads_global_state_p): Take CP_READ_MEMORY into account. gcc/testsuite/ * gcc.target/arm/mve/pr114323.c: New. --- gcc/config/arm/arm-mve-builtins.cc | 2 +- gcc/testsuite/gcc.target/arm/mve/pr114323.c | 22 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/arm/mve/pr114323.c diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc index c533d0e93ae3..7e8217666fee 100644 --- a/gcc/config/arm/arm-mve-builtins.cc +++ b/gcc/config/arm/arm-mve-builtins.cc @@ -657,7 +657,7 @@ function_instance::reads_global_state_p () const if (flags & CP_READ_FPCR) return true; - return false; + return flags & CP_READ_MEMORY; } /* Return true if calls to the function could modify some form of diff --git a/gcc/testsuite/gcc.target/arm/mve/pr114323.c b/gcc/testsuite/gcc.target/arm/mve/pr114323.c new file mode 100644 index 000000000000..bd9127b886a7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/pr114323.c @@ -0,0 +1,22 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_mve_hw } */ +/* { dg-options "-O2" } */ +/* { dg-add-options arm_v8_1m_mve_fp } */ + +#include <arm_mve.h> + +__attribute__((noipa)) +uint32x4_t foo (void) { + uint32x4_t V0 = vld1q_u32(((const uint32_t[4]){1, 2, 3, 4})); + return V0; +} + +int main(void) +{ + uint32_t buf[4]; + vst1q_u32 (buf, foo()); + + for (int i = 0; i < 4; i++) + if (buf[i] != i+1) + __builtin_abort (); +} From c1fd4589c2bf9fd8409d51b94df219cb75107762 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao <xry111@xry111.site> Date: Mon, 18 Mar 2024 17:18:34 +0800 Subject: [PATCH 125/551] LoongArch: Fix C23 (...) functions returning large aggregates [PR114175] We were assuming TYPE_NO_NAMED_ARGS_STDARG_P don't have any named arguments and there is nothing to advance, but that is not the case for (...) functions returning by hidden reference which have one such artificial argument. This is causing gcc.dg/c23-stdarg-6.c and gcc.dg/c23-stdarg-8.c to fail. Fix the issue by checking if arg.type is NULL, as r14-9503 explains. gcc/ChangeLog: PR target/114175 * config/loongarch/loongarch.cc (loongarch_setup_incoming_varargs): Only skip loongarch_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/loongarch/loongarch.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 70e31bb831c7..5344f2a6987e 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -767,7 +767,13 @@ loongarch_setup_incoming_varargs (cumulative_args_t cum, argument. Advance a local copy of CUM past the last "real" named argument, to find out how many registers are left over. */ local_cum = *get_cumulative_args (cum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + + /* For a C23 variadic function w/o any named argument, and w/o an + artifical argument for large return value, skip advancing args. + There is such an artifical argument iff. arg.type is non-NULL + (PR 114175). */ + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) loongarch_function_arg_advance (pack_cumulative_args (&local_cum), arg); /* Found out how many registers we need to save. */ From 1f257714674cd8fd69db7367aecdd09b672d1db7 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 19 Mar 2024 09:49:59 +0100 Subject: [PATCH 126/551] arc: Fix up arc_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, arc seems to be affected too. 2024-03-19 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/arc/arc.cc (arc_setup_incoming_varargs): Only skip arc_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/arc/arc.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/arc/arc.cc b/gcc/config/arc/arc.cc index 179f11f70778..686de0ff2d57 100644 --- a/gcc/config/arc/arc.cc +++ b/gcc/config/arc/arc.cc @@ -2352,7 +2352,8 @@ arc_setup_incoming_varargs (cumulative_args_t args_so_far, /* We must treat `__builtin_va_alist' as an anonymous arg. */ next_cum = *get_cumulative_args (args_so_far); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) arc_function_arg_advance (pack_cumulative_args (&next_cum), arg); first_anon_arg = next_cum; From e0e9499aeffdaca88f0f29334384aa5f710a81a4 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 19 Mar 2024 12:24:08 +0100 Subject: [PATCH 127/551] tree-optimization/114151 - revert PR114074 fix The following reverts the chrec_fold_multiply fix and only keeps handling of constant overflow which keeps the original testcase fixed. A better solution might involve ranger improvements or tracking of assumptions during SCEV analysis similar to what niter analysis does. PR tree-optimization/114151 PR tree-optimization/114269 PR tree-optimization/114322 PR tree-optimization/114074 * tree-chrec.cc (chrec_fold_multiply): Restrict the use of unsigned arithmetic when actual overflow on constant operands is observed. * gcc.dg/pr68317.c: Revert last change. --- gcc/testsuite/gcc.dg/pr68317.c | 4 +-- gcc/tree-chrec.cc | 63 +++++++++++++++------------------- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/gcc/testsuite/gcc.dg/pr68317.c b/gcc/testsuite/gcc.dg/pr68317.c index 06cd2e1da9ca..bd053a7522bc 100644 --- a/gcc/testsuite/gcc.dg/pr68317.c +++ b/gcc/testsuite/gcc.dg/pr68317.c @@ -12,8 +12,8 @@ foo () { int32_t index = 0; - for (index; index <= 10; index--) /* { dg-warning "iteration \[0-9\]+ invokes undefined behavior" } */ + for (index; index <= 10; index--) // expected warning here /* Result of the following multiply will overflow when converted to signed int32_t. */ - bar ((0xcafe + index) * 0xdead); + bar ((0xcafe + index) * 0xdead); /* { dg-warning "iteration \[0-9\]+ invokes undefined behavior" } */ } diff --git a/gcc/tree-chrec.cc b/gcc/tree-chrec.cc index 1b2ed7535512..8b7982a2dbe9 100644 --- a/gcc/tree-chrec.cc +++ b/gcc/tree-chrec.cc @@ -38,8 +38,6 @@ along with GCC; see the file COPYING3. If not see #include "gimple.h" #include "tree-ssa-loop.h" #include "dumpfile.h" -#include "value-range.h" -#include "value-query.h" #include "tree-scalar-evolution.h" /* Extended folder for chrecs. */ @@ -475,41 +473,36 @@ chrec_fold_multiply (tree type, /* When overflow is undefined and CHREC_LEFT/RIGHT do not have the same sign or CHREC_LEFT is zero then folding the multiply into - the addition does not have the same behavior on overflow. Use - unsigned arithmetic in that case. */ - value_range rl, rr; - if (!ANY_INTEGRAL_TYPE_P (type) - || TYPE_OVERFLOW_WRAPS (type) - || integer_zerop (CHREC_LEFT (op0)) - || (TREE_CODE (CHREC_LEFT (op0)) == INTEGER_CST - && TREE_CODE (CHREC_RIGHT (op0)) == INTEGER_CST - && (tree_int_cst_sgn (CHREC_LEFT (op0)) - == tree_int_cst_sgn (CHREC_RIGHT (op0)))) - || (get_range_query (cfun)->range_of_expr (rl, CHREC_LEFT (op0)) - && !rl.undefined_p () - && (rl.nonpositive_p () || rl.nonnegative_p ()) - && get_range_query (cfun)->range_of_expr (rr, - CHREC_RIGHT (op0)) - && !rr.undefined_p () - && ((rl.nonpositive_p () && rr.nonpositive_p ()) - || (rl.nonnegative_p () && rr.nonnegative_p ())))) - { - tree left = chrec_fold_multiply (type, CHREC_LEFT (op0), op1); - tree right = chrec_fold_multiply (type, CHREC_RIGHT (op0), op1); - return build_polynomial_chrec (CHREC_VARIABLE (op0), left, right); - } - else + the addition does not have the same behavior on overflow. + Using unsigned arithmetic in that case causes too many performance + regressions, but catch the constant case where the multiplication + of the step overflows. */ + if (INTEGRAL_TYPE_P (type) + && TYPE_OVERFLOW_UNDEFINED (type) + && !integer_zerop (CHREC_LEFT (op0)) + && TREE_CODE (op1) == INTEGER_CST + && TREE_CODE (CHREC_RIGHT (op0)) == INTEGER_CST) { - tree utype = unsigned_type_for (type); - tree uop1 = chrec_convert_rhs (utype, op1); - tree uleft0 = chrec_convert_rhs (utype, CHREC_LEFT (op0)); - tree uright0 = chrec_convert_rhs (utype, CHREC_RIGHT (op0)); - tree left = chrec_fold_multiply (utype, uleft0, uop1); - tree right = chrec_fold_multiply (utype, uright0, uop1); - tree tem = build_polynomial_chrec (CHREC_VARIABLE (op0), - left, right); - return chrec_convert_rhs (type, tem); + wi::overflow_type ovf = wi::OVF_NONE; + wide_int res + = wi::mul (wi::to_wide (CHREC_RIGHT (op0)), + wi::to_wide (op1), TYPE_SIGN (type), &ovf); + if (ovf != wi::OVF_NONE) + { + tree utype = unsigned_type_for (type); + tree uop1 = chrec_convert_rhs (utype, op1); + tree uleft0 = chrec_convert_rhs (utype, CHREC_LEFT (op0)); + tree uright0 = chrec_convert_rhs (utype, CHREC_RIGHT (op0)); + tree left = chrec_fold_multiply (utype, uleft0, uop1); + tree right = chrec_fold_multiply (utype, uright0, uop1); + tree tem = build_polynomial_chrec (CHREC_VARIABLE (op0), + left, right); + return chrec_convert_rhs (type, tem); + } } + tree left = chrec_fold_multiply (type, CHREC_LEFT (op0), op1); + tree right = chrec_fold_multiply (type, CHREC_RIGHT (op0), op1); + return build_polynomial_chrec (CHREC_VARIABLE (op0), left, right); } CASE_CONVERT: From e47330d0742c985fd8d5fe7089aa381d34967d61 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Tue, 19 Mar 2024 10:40:50 +0000 Subject: [PATCH 128/551] libstdc++, Darwin: Do not use dev/null as the file for executables. Darwin has a separate debug linker, which is invoked when the command line contains source files and debug is enabled. Using /dev/null as the executable name does not, therefore, work when debug is enabled, since the debug linker does not accept /dev/null as a valid executable name. The leads to incorrectly UNSUPPORTED testcases because of the unintended error result from the test compilation. The solution here is to use a temporary file that is deleted at the end of the test (which is the mechanism used elsewhere) libstdc++-v3/ChangeLog: * testsuite/lib/libstdc++.exp (v3_target_compile): Instead of /dev/null, use a temporary file for test executables on Darwin. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- libstdc++-v3/testsuite/lib/libstdc++.exp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index 58804ecab267..7466fb51c58b 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -615,11 +615,15 @@ proc v3_target_compile { source dest type options } { } } + # For Windows and Darwin we might want to create a temporary file. + # Note that it needs deleting. + set file_to_delete "" # Small adjustment for Windows hosts. if { $dest == "/dev/null" && [info exists ::env(OS)] && [string match "Windows*" $::env(OS)] } { if { $type == "executable" } { set dest "x.exe" + set file_to_delete ${dest} } else { # Windows uses special file named "nul" as a substitute for # /dev/null @@ -627,6 +631,15 @@ proc v3_target_compile { source dest type options } { } } + # Using /dev/null as the executable name does not work on Darwin when + # debug is enabled, since the debug linker does not accept /dev/null as + # a valid executable name. + if { $dest == "/dev/null" && [istarget *-*-darwin*] + && $type == "executable" } { + set dest dev-null-[pid].exe + set file_to_delete ${dest} + } + lappend options "compiler=$cxx_final" lappend options "timeout=[timeout_value]" @@ -637,7 +650,12 @@ proc v3_target_compile { source dest type options } { } set comp_output [target_compile $source $dest $type $options] - + if { $type == "executable" && $file_to_delete != "" } { + file delete $file_to_delete + if { [istarget *-*-darwin*] && [file exists $file_to_delete.dSYM] } { + file delete -force $file_to_delete.dSYM + } + } return $comp_output } From 71a44faa8a4f76d68356c66c6054e6c242df820f Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Mon, 18 Mar 2024 09:57:33 +0000 Subject: [PATCH 129/551] libstdc++: Sync the atomic_link_flags implementation with GCC. For Darwin, in order to allow uninstalled testing, we need to provide a '-B' option pointing to each path containing an uninstalled library that we are using (these get appended to the embedded runpaths). This updates the version of the atomic_link_flags proc in the libstdc++ testsuite to do the same as the one in the GCC testsuite. libstdc++-v3/ChangeLog: * testsuite/lib/dg-options.exp (atomic_link_flags): Emit a -B option for the path to the uninstalled libatomic. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- libstdc++-v3/testsuite/lib/dg-options.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp index bc387d17ed7a..00ca678a53a9 100644 --- a/libstdc++-v3/testsuite/lib/dg-options.exp +++ b/libstdc++-v3/testsuite/lib/dg-options.exp @@ -314,7 +314,7 @@ proc atomic_link_flags { paths } { if { [file exists "${gccpath}/libatomic/.libs/libatomic.a"] || [file exists "${gccpath}/libatomic/.libs/libatomic.${shlib_ext}"] } { append flags " -B${gccpath}/libatomic/ " - append flags " -L${gccpath}/libatomic/.libs" + append flags " -B${gccpath}/libatomic/.libs" append ld_library_path ":${gccpath}/libatomic/.libs" } } else { From 4adb1a5839e7a3310a127c1776f1f95d7edaa6ff Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Mon, 18 Mar 2024 10:06:44 +0000 Subject: [PATCH 130/551] testsuite, Darwin: Use the IOKit framework in framework-1.c [PR114049]. The intent of the test is to show that we find a framework that is installed in /System/Library/Frameworks when the user has added a '-F' option. The trick is to choose some header that is present for all the Darwin versions we support and that does not contain any content we cannot parse. We had been using the Kernel framework for this, but recent SDK versions have revealed that this is not suitable. Replacing with a use of IOKit. PR target/114049 gcc/testsuite/ChangeLog: * gcc.dg/framework-1.c: Use an IOKit header instead of a Kernel one. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/testsuite/gcc.dg/framework-1.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/framework-1.c b/gcc/testsuite/gcc.dg/framework-1.c index de4adc398681..fdec129a8fb8 100644 --- a/gcc/testsuite/gcc.dg/framework-1.c +++ b/gcc/testsuite/gcc.dg/framework-1.c @@ -1,4 +1,10 @@ /* { dg-do compile { target *-*-darwin* } } */ /* { dg-options "-F." } */ -#include <Kernel/string.h> +/* The intent of the test is to show that we find a framework that + is installed in /System/Library/Frameworks when the user has added + a '-F' option. The trick is to choose some header that is present + for all the Darwin versions we support and that does not contain any + content we cannot parse. */ + +#include <IOKit/IOReturn.h> From c7a774edbf802d79b95871ede5b80f6e9adf8e88 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Tue, 19 Mar 2024 09:06:45 -0400 Subject: [PATCH 131/551] analyzer: fixes to __atomic_{exchange,load,store} [PR114286] In r14-1497-gef768035ae8090 I added some support to the analyzer for __atomic_ builtins (enough to fix false positives I was seeing in my integration tests). Unfortunately I messed up the implementation of __atomic_{exchange,load,store}, leading to ICEs seen in PR analyzer/114286. Fixed thusly, fixing the ICEs. Given that we're in stage 4, the patch doesn't add support for any of the various __atomic_compare_exchange builtins, so that these continue to fall back to the analyzer's "anything could happen" handling of unknown functions. Signed-off-by: David Malcolm <dmalcolm@redhat.com> gcc/analyzer/ChangeLog: PR analyzer/114286 * kf.cc (class kf_atomic_exchange): Reimplement based on signature seen in gimple, rather than user-facing signature. (class kf_atomic_load): Likewise. (class kf_atomic_store): New. (register_atomic_builtins): Register kf_atomic_store. gcc/testsuite/ChangeLog: PR analyzer/114286 * c-c++-common/analyzer/atomic-builtins-pr114286.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/kf.cc | 135 +++++++++++++----- .../analyzer/atomic-builtins-pr114286.c | 48 +++++++ 2 files changed, 150 insertions(+), 33 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/analyzer/atomic-builtins-pr114286.c diff --git a/gcc/analyzer/kf.cc b/gcc/analyzer/kf.cc index ed48ffbcba25..d197ccbd0f05 100644 --- a/gcc/analyzer/kf.cc +++ b/gcc/analyzer/kf.cc @@ -116,39 +116,54 @@ kf_alloca::impl_call_pre (const call_details &cd) const cd.maybe_set_lhs (ptr_sval); } -/* Handler for: - void __atomic_exchange (type *ptr, type *val, type *ret, int memorder). */ +/* Handler for __atomic_exchange. + Although the user-facing documentation specifies it as having this + signature: + void __atomic_exchange (type *ptr, type *val, type *ret, int memorder) + + by the time the C/C++ frontends have acted on it, any calls that + can't be mapped to a _N variation end up with this signature: + + void + __atomic_exchange (size_t sz, void *ptr, void *val, void *ret, + int memorder) + + as seen in the gimple seen by the analyzer, and as specified + in sync-builtins.def. */ class kf_atomic_exchange : public internal_known_function { public: /* This is effectively: - *RET = *PTR; - *PTR = *VAL; + tmpA = *PTR; + tmpB = *VAL; + *PTR = tmpB; + *RET = tmpA; */ void impl_call_pre (const call_details &cd) const final override { - const svalue *ptr_ptr_sval = cd.get_arg_svalue (0); - tree ptr_ptr_tree = cd.get_arg_tree (0); - const svalue *val_ptr_sval = cd.get_arg_svalue (1); - tree val_ptr_tree = cd.get_arg_tree (1); - const svalue *ret_ptr_sval = cd.get_arg_svalue (2); - tree ret_ptr_tree = cd.get_arg_tree (2); + const svalue *num_bytes_sval = cd.get_arg_svalue (0); + const svalue *ptr_sval = cd.get_arg_svalue (1); + tree ptr_tree = cd.get_arg_tree (1); + const svalue *val_sval = cd.get_arg_svalue (2); + tree val_tree = cd.get_arg_tree (2); + const svalue *ret_sval = cd.get_arg_svalue (3); + tree ret_tree = cd.get_arg_tree (3); /* Ignore the memorder param. */ region_model *model = cd.get_model (); region_model_context *ctxt = cd.get_ctxt (); - const region *val_region - = model->deref_rvalue (val_ptr_sval, val_ptr_tree, ctxt); - const svalue *star_val_sval = model->get_store_value (val_region, ctxt); - const region *ptr_region - = model->deref_rvalue (ptr_ptr_sval, ptr_ptr_tree, ctxt); - const svalue *star_ptr_sval = model->get_store_value (ptr_region, ctxt); - const region *ret_region - = model->deref_rvalue (ret_ptr_sval, ret_ptr_tree, ctxt); - model->set_value (ptr_region, star_val_sval, ctxt); - model->set_value (ret_region, star_ptr_sval, ctxt); + const region *ptr_reg = model->deref_rvalue (ptr_sval, ptr_tree, ctxt); + const region *val_reg = model->deref_rvalue (val_sval, val_tree, ctxt); + const region *ret_reg = model->deref_rvalue (ret_sval, ret_tree, ctxt); + + const svalue *tmp_a_sval + = model->read_bytes (ptr_reg, ptr_tree, num_bytes_sval, ctxt); + const svalue *tmp_b_sval + = model->read_bytes (val_reg, val_tree, num_bytes_sval, ctxt); + model->write_bytes (ptr_reg, num_bytes_sval, tmp_b_sval, ctxt); + model->write_bytes (ret_reg, num_bytes_sval, tmp_a_sval, ctxt); } }; @@ -265,32 +280,85 @@ class kf_atomic_op_fetch : public internal_known_function enum tree_code m_op; }; -/* Handler for: - void __atomic_load (type *ptr, type *ret, int memorder). */ +/* Handler for __atomic_load. + Although the user-facing documentation specifies it as having this + signature: + + void __atomic_load (type *ptr, type *ret, int memorder) + + by the time the C/C++ frontends have acted on it, any calls that + can't be mapped to a _N variation end up with this signature: + + void __atomic_load (size_t sz, const void *src, void *dst, int memorder); + + as seen in the gimple seen by the analyzer, and as specified + in sync-builtins.def. */ class kf_atomic_load : public internal_known_function { public: /* This is effectively: - *RET = *PTR; + memmove (dst, src, sz); */ void impl_call_pre (const call_details &cd) const final override { - const svalue *ptr_ptr_sval = cd.get_arg_svalue (0); - tree ptr_ptr_tree = cd.get_arg_tree (0); - const svalue *ret_ptr_sval = cd.get_arg_svalue (1); - tree ret_ptr_tree = cd.get_arg_tree (1); + const svalue *num_bytes_sval = cd.get_arg_svalue (0); + const svalue *src_sval = cd.get_arg_svalue (1); + tree src_tree = cd.get_arg_tree (1); + const svalue *dst_sval = cd.get_arg_svalue (2); + tree dst_tree = cd.get_arg_tree (2); /* Ignore the memorder param. */ region_model *model = cd.get_model (); region_model_context *ctxt = cd.get_ctxt (); - const region *ptr_region - = model->deref_rvalue (ptr_ptr_sval, ptr_ptr_tree, ctxt); - const svalue *star_ptr_sval = model->get_store_value (ptr_region, ctxt); - const region *ret_region - = model->deref_rvalue (ret_ptr_sval, ret_ptr_tree, ctxt); - model->set_value (ret_region, star_ptr_sval, ctxt); + const region *dst_reg = model->deref_rvalue (dst_sval, dst_tree, ctxt); + const region *src_reg = model->deref_rvalue (src_sval, src_tree, ctxt); + + const svalue *data_sval + = model->read_bytes (src_reg, src_tree, num_bytes_sval, ctxt); + model->write_bytes (dst_reg, num_bytes_sval, data_sval, ctxt); + } +}; + +/* Handler for __atomic_store. + Although the user-facing documentation specifies it as having this + signature: + + void __atomic_store (type *ptr, type *val, int memorder) + + by the time the C/C++ frontends have acted on it, any calls that + can't be mapped to a _N variation end up with this signature: + + void __atomic_store (size_t sz, type *dst, type *src, int memorder) + + as seen in the gimple seen by the analyzer, and as specified + in sync-builtins.def. */ + +class kf_atomic_store : public internal_known_function +{ +public: + /* This is effectively: + memmove (dst, src, sz); + */ + void impl_call_pre (const call_details &cd) const final override + { + const svalue *num_bytes_sval = cd.get_arg_svalue (0); + const svalue *dst_sval = cd.get_arg_svalue (1); + tree dst_tree = cd.get_arg_tree (1); + const svalue *src_sval = cd.get_arg_svalue (2); + tree src_tree = cd.get_arg_tree (2); + /* Ignore the memorder param. */ + + region_model *model = cd.get_model (); + region_model_context *ctxt = cd.get_ctxt (); + + const region *dst_reg = model->deref_rvalue (dst_sval, dst_tree, ctxt); + const region *src_reg = model->deref_rvalue (src_sval, src_tree, ctxt); + + const svalue *data_sval + = model->read_bytes (src_reg, src_tree, num_bytes_sval, ctxt); + model->write_bytes (dst_reg, num_bytes_sval, data_sval, ctxt); } }; @@ -2021,6 +2089,7 @@ register_atomic_builtins (known_function_manager &kfm) kfm.add (BUILT_IN_ATOMIC_LOAD_4, make_unique<kf_atomic_load_n> ()); kfm.add (BUILT_IN_ATOMIC_LOAD_8, make_unique<kf_atomic_load_n> ()); kfm.add (BUILT_IN_ATOMIC_LOAD_16, make_unique<kf_atomic_load_n> ()); + kfm.add (BUILT_IN_ATOMIC_STORE, make_unique<kf_atomic_store> ()); kfm.add (BUILT_IN_ATOMIC_STORE_N, make_unique<kf_atomic_store_n> ()); kfm.add (BUILT_IN_ATOMIC_STORE_1, make_unique<kf_atomic_store_n> ()); kfm.add (BUILT_IN_ATOMIC_STORE_2, make_unique<kf_atomic_store_n> ()); diff --git a/gcc/testsuite/c-c++-common/analyzer/atomic-builtins-pr114286.c b/gcc/testsuite/c-c++-common/analyzer/atomic-builtins-pr114286.c new file mode 100644 index 000000000000..1ff47ffaec81 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/atomic-builtins-pr114286.c @@ -0,0 +1,48 @@ +#include "analyzer-decls.h" + +struct S { long long a[16]; } s; + +struct S +test_atomic_load (void) +{ + struct S r; + __atomic_load (&s, &r, __ATOMIC_RELAXED); + __analyzer_eval (r.a[0] == s.a[0]); /* { dg-warning "TRUE" } */ + __analyzer_eval (r.a[15] == s.a[15]); /* { dg-warning "TRUE" } */ + return r; +} + +void +test_atomic_store (struct S x) +{ + __atomic_store (&s, &x, __ATOMIC_RELAXED); + __analyzer_eval (s.a[0] == x.a[0]); /* { dg-warning "TRUE" } */ + __analyzer_eval (s.a[15] == x.a[15]); /* { dg-warning "TRUE" } */ +} + +struct S +test_atomic_exchange (struct S x) +{ + struct S init_x, init_s; + struct S r; + + /* Capture initial values of x and s for comparison below. */ + __atomic_load (&x, &init_x, __ATOMIC_RELAXED); + __atomic_load (&s, &init_s, __ATOMIC_RELAXED); + + __atomic_exchange (&s, &x, &r, __ATOMIC_RELAXED); + + __analyzer_eval (s.a[0] == init_x.a[0]); /* { dg-warning "TRUE" } */ + __analyzer_eval (s.a[15] == init_x.a[15]); /* { dg-warning "TRUE" } */ + __analyzer_eval (r.a[0] == init_s.a[0]); /* { dg-warning "TRUE" } */ + __analyzer_eval (r.a[15] == init_s.a[15]); /* { dg-warning "TRUE" } */ + + return r; +} + +int +test_atomic_compare_exchange (struct S *e, struct S *d) +{ + return __atomic_compare_exchange (&s, e, d, 0, + __ATOMIC_RELAXED, __ATOMIC_RELAXED); +} From 16afbd9c9c4282d56062cef95e6eccfdcf3efe03 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Mon, 18 Mar 2024 13:00:17 +0000 Subject: [PATCH 132/551] libstdc++: Begin lifetime of storage in std::vector<bool> [PR114367] This doesn't cause a problem with GCC, but Clang correctly diagnoses a bug in the code. The objects in the allocated storage need to begin their lifetime before we start using them. This change uses the allocator's construct function instead of using std::construct_at directly, in order to support fancy pointers. libstdc++-v3/ChangeLog: PR libstdc++/114367 * include/bits/stl_bvector.h (_M_allocate): Use allocator's construct function to begin lifetime of words. --- libstdc++-v3/include/bits/stl_bvector.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 2c8b892b07a4..a3343d95b368 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -674,13 +674,13 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _M_allocate(size_t __n) { _Bit_pointer __p = _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); -#if __cpp_lib_is_constant_evaluated +#if __cpp_lib_is_constant_evaluated && __cpp_constexpr_dynamic_alloc if (std::is_constant_evaluated()) - { - __n = _S_nword(__n); - for (size_t __i = 0; __i < __n; ++__i) - __p[__i] = 0ul; - } + { + __n = _S_nword(__n); + for (size_t __i = 0; __i < __n; ++__i) + std::construct_at(std::to_address(__p) + __i); + } #endif return __p; } From f5118546a8d0a99edb34fd672e7847370a1adae1 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Mon, 18 Mar 2024 12:55:36 +0000 Subject: [PATCH 133/551] libstdc++: Fix typos in MemoryChecker assertion messages in PSTL tests This has been reported upstream. libstdc++-v3/ChangeLog: * testsuite/util/pstl/test_utils.h: Fix typos in comments. --- libstdc++-v3/testsuite/util/pstl/test_utils.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/testsuite/util/pstl/test_utils.h b/libstdc++-v3/testsuite/util/pstl/test_utils.h index e35084eabb20..55b510098a04 100644 --- a/libstdc++-v3/testsuite/util/pstl/test_utils.h +++ b/libstdc++-v3/testsuite/util/pstl/test_utils.h @@ -252,7 +252,7 @@ struct MemoryChecker { MemoryChecker(MemoryChecker&& other) : _value(other.value()) { // check for EXPECT_TRUE(state() != alive_state, ...) has not been done since // compiler can optimize out the move ctor call that results in false positive failure - EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker(MemoryChecker&&): attemp to construct an object from non-existing object"); + EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker(MemoryChecker&&): attempt to construct an object from non-existing object"); // set constructed state and increment counter for living object inc_alive_objects(); _state = alive_state; @@ -260,15 +260,15 @@ struct MemoryChecker { MemoryChecker(const MemoryChecker& other) : _value(other.value()) { // check for EXPECT_TRUE(state() != alive_state, ...) has not been done since // compiler can optimize out the copy ctor call that results in false positive failure - EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker(const MemoryChecker&): attemp to construct an object from non-existing object"); + EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker(const MemoryChecker&): attempt to construct an object from non-existing object"); // set constructed state and increment counter for living object inc_alive_objects(); _state = alive_state; } MemoryChecker& operator=(MemoryChecker&& other) { // check if we do not assign over uninitialized memory - EXPECT_TRUE(state() == alive_state, "wrong effect from MemoryChecker::operator=(MemoryChecker&& other): attemp to assign to non-existing object"); - EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker::operator=(MemoryChecker&& other): attemp to assign from non-existing object"); + EXPECT_TRUE(state() == alive_state, "wrong effect from MemoryChecker::operator=(MemoryChecker&& other): attempt to assign to non-existing object"); + EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker::operator=(MemoryChecker&& other): attempt to assign from non-existing object"); // just assign new value, counter is the same, state is the same _value = other.value(); @@ -276,8 +276,8 @@ struct MemoryChecker { } MemoryChecker& operator=(const MemoryChecker& other) { // check if we do not assign over uninitialized memory - EXPECT_TRUE(state() == alive_state, "wrong effect from MemoryChecker::operator=(const MemoryChecker& other): attemp to assign to non-existing object"); - EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker::operator=(const MemoryChecker& other): attemp to assign from non-existing object"); + EXPECT_TRUE(state() == alive_state, "wrong effect from MemoryChecker::operator=(const MemoryChecker& other): attempt to assign to non-existing object"); + EXPECT_TRUE(other.state() == alive_state, "wrong effect from MemoryChecker::operator=(const MemoryChecker& other): attempt to assign from non-existing object"); // just assign new value, counter is the same, state is the same _value = other.value(); @@ -285,7 +285,7 @@ struct MemoryChecker { } ~MemoryChecker() { // check if we do not double destruct the object - EXPECT_TRUE(state() == alive_state, "wrong effect from ~MemoryChecker(): attemp to destroy non-existing object"); + EXPECT_TRUE(state() == alive_state, "wrong effect from ~MemoryChecker(): attempt to destroy non-existing object"); // set destructed state and decrement counter for living object static_cast<volatile std::int64_t&>(_state) = dead_state; dec_alive_objects(); From ef2efc53fd89920a864fa076cabe03873b7f1bdc Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Tue, 19 Mar 2024 12:43:29 +0000 Subject: [PATCH 134/551] libstdc++: Fix Python scripts to output the correct filename These scripts both print "generated by $file, do not edit" header but one of them prints the wrong filename. Use the built-in __file__ attribute to ensure it's correct. contrib/ChangeLog: * unicode/gen_libstdcxx_unicode_data.py: Fix header of generated file to name the correct script. libstdc++-v3/ChangeLog: * include/bits/text_encoding-data.h: Regenerate. * include/bits/unicode-data.h: Regenerate. * scripts/gen_text_encoding_data.py: Fix header of generated file to name the correct script. --- contrib/unicode/gen_libstdcxx_unicode_data.py | 6 ++++-- libstdc++-v3/include/bits/text_encoding-data.h | 3 ++- libstdc++-v3/include/bits/unicode-data.h | 2 +- libstdc++-v3/scripts/gen_text_encoding_data.py | 5 ++++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/contrib/unicode/gen_libstdcxx_unicode_data.py b/contrib/unicode/gen_libstdcxx_unicode_data.py index 2341a442f6ae..da2f6ee66bf4 100755 --- a/contrib/unicode/gen_libstdcxx_unicode_data.py +++ b/contrib/unicode/gen_libstdcxx_unicode_data.py @@ -29,9 +29,11 @@ import sys import re import math +import os -print("""// Generated by contrib/unicode/gen_std_format_width.py, do not edit. - +self = os.path.basename(__file__) +print("// Generated by contrib/unicode/{}, do not edit.".format(self)) +print(""" // Copyright The GNU Toolchain Authors. // // This file is part of the GNU ISO C++ Library. This library is free diff --git a/libstdc++-v3/include/bits/text_encoding-data.h b/libstdc++-v3/include/bits/text_encoding-data.h index 81bd94e6c3a0..d6c34f895f5f 100644 --- a/libstdc++-v3/include/bits/text_encoding-data.h +++ b/libstdc++-v3/include/bits/text_encoding-data.h @@ -1,4 +1,5 @@ -// Generated by gen_text_encoding_data.py, do not edit. +// Generated by scripts/gen_text_encoding_data.py, do not edit. + // Copyright The GNU Toolchain Authors. // diff --git a/libstdc++-v3/include/bits/unicode-data.h b/libstdc++-v3/include/bits/unicode-data.h index 69b8f2926c3e..e39a6c45f6c5 100644 --- a/libstdc++-v3/include/bits/unicode-data.h +++ b/libstdc++-v3/include/bits/unicode-data.h @@ -1,4 +1,4 @@ -// Generated by contrib/unicode/gen_std_format_width.py, do not edit. +// Generated by contrib/unicode/gen_libstdcxx_unicode_data.py, do not edit. // Copyright The GNU Toolchain Authors. // diff --git a/libstdc++-v3/scripts/gen_text_encoding_data.py b/libstdc++-v3/scripts/gen_text_encoding_data.py index 13792b5f5e7d..e11b26e69fca 100755 --- a/libstdc++-v3/scripts/gen_text_encoding_data.py +++ b/libstdc++-v3/scripts/gen_text_encoding_data.py @@ -26,12 +26,15 @@ import sys import csv +import os if len(sys.argv) != 2: print("Usage: %s <character sets csv>" % sys.argv[0], file=sys.stderr) sys.exit(1) -print("""// Generated by gen_text_encoding_data.py, do not edit. +self = os.path.basename(__file__) +print("// Generated by scripts/{}, do not edit.".format(self)) +print(""" // Copyright The GNU Toolchain Authors. // From d1b8c2237d7c6a2d52ea5a852a9a11ad426496f3 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Tue, 19 Mar 2024 12:58:27 +0000 Subject: [PATCH 135/551] libstdc++: Update docs on build process and generated files There are several more sub-directories below 'src' now, with lots more conveience libraries. Document them all as of GCC 14. Also document how to regenerate the generated headers under include/bits and how to update the tzdata.zi file. libstdc++-v3/ChangeLog: * doc/xml/manual/build_hacking.xml: Document generated files. Update list of convenience libraries and sub-directories under the src directory. * doc/html/*: Regenerate. --- libstdc++-v3/doc/html/index.html | 2 +- libstdc++-v3/doc/html/manual/appendix.html | 2 +- .../doc/html/manual/appendix_porting.html | 119 +++++++++++-- libstdc++-v3/doc/html/manual/index.html | 2 +- libstdc++-v3/doc/xml/manual/build_hacking.xml | 164 ++++++++++++++++-- 5 files changed, 262 insertions(+), 27 deletions(-) diff --git a/libstdc++-v3/doc/html/index.html b/libstdc++-v3/doc/html/index.html index f9288e471f48..395908f17a1a 100644 --- a/libstdc++-v3/doc/html/index.html +++ b/libstdc++-v3/doc/html/index.html @@ -135,7 +135,7 @@ </a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="manual/appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="manual/source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="manual/source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="manual/source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="manual/source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="manual/source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="manual/appendix_porting.html">B. Porting and Maintenance -</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="manual/documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="manual/documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="manual/internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="manual/test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="manual/test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="manual/test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="manual/test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="manual/test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.exception.safety"> +</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.make">Make</a></span></dt><dt><span class="section"><a href="manual/appendix_porting.html#build_hacking.generated">Generated files</a></span></dt></dl></dd><dt><span class="section"><a href="manual/documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="manual/documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="manual/documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="manual/internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="manual/internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="manual/test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="manual/test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="manual/test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="manual/test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="manual/test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="manual/test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.exception.safety"> Qualifying Exception Safety Guarantees </a></span></dt><dd><dl><dt><span class="section"><a href="manual/test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="manual/test.html#test.exception.safety.status"> diff --git a/libstdc++-v3/doc/html/manual/appendix.html b/libstdc++-v3/doc/html/manual/appendix.html index 03746f902692..affd5839f435 100644 --- a/libstdc++-v3/doc/html/manual/appendix.html +++ b/libstdc++-v3/doc/html/manual/appendix.html @@ -9,7 +9,7 @@ </a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B. Porting and Maintenance -</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety"> +</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.generated">Generated files</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety"> Qualifying Exception Safety Guarantees </a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status"> diff --git a/libstdc++-v3/doc/html/manual/appendix_porting.html b/libstdc++-v3/doc/html/manual/appendix_porting.html index 8f2824c44b01..5d8d5da0bf99 100644 --- a/libstdc++-v3/doc/html/manual/appendix_porting.html +++ b/libstdc++-v3/doc/html/manual/appendix_porting.html @@ -7,7 +7,7 @@ </th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a> Porting and Maintenance <a id="id-1.3.6.3.1.1.1" class="indexterm"></a> -</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety"> +</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.generated">Generated files</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety"> Qualifying Exception Safety Guarantees </a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status"> @@ -377,22 +377,74 @@ </p></li><li class="listitem"><p> make src </p><p> - Generates two convenience libraries, one for C++98 and one for - C++11, various compatibility files for shared and static - libraries, and then collects all the generated bits and creates + Generates several convenience libraries, + various compatibility files for shared and static libraries, + and then collects all the generated bits and creates the final libstdc++ libraries. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p> make src/c++98 </p><p> Generates a libtool convenience library, - <code class="filename">libc++98convenience</code> with language-support - routines. Uses the <code class="option">-std=gnu++98</code> dialect. + <code class="filename">libc++98convenience</code> with the library components + defined by C++98. Uses the <code class="option">-std=gnu++98</code> dialect. </p></li><li class="listitem"><p> make src/c++11 </p><p> Generates a libtool convenience library, - <code class="filename">libc++11convenience</code> with language-support - routines. Uses the <code class="option">-std=gnu++11</code> dialect. + <code class="filename">libc++11convenience</code> with the library components + that were added or changed in C++11. + Uses the <code class="option">-std=gnu++11</code> dialect. + </p></li><li class="listitem"><p> + make src/c++17 + </p><p> + Generates a libtool convenience library, + <code class="filename">libc++17convenience</code> with the library components + that were added or changed in C++17. + Uses the <code class="option">-std=gnu++17</code> dialect. + </p></li><li class="listitem"><p> + make src/c++20 + </p><p> + Generates a libtool convenience library, + <code class="filename">libc++20convenience</code> with the library components + that were added or changed in C++20. + Uses the <code class="option">-std=gnu++20</code> dialect. + </p></li><li class="listitem"><p> + make src/c++23 + </p><p> + Generates a libtool convenience library, + <code class="filename">libc++23convenience</code> with the library components + that were added or changed in C++23. + At the time of writing (GCC 14) this convenience library is included + in <code class="filename">libstdc++exp.a</code> and not in the final + <code class="filename">libstdc++</code> libraries. + Uses the <code class="option">-std=gnu++23</code> dialect. + </p></li><li class="listitem"><p> + make src/filesystem + </p><p> + Generates a libtool convenience library, + <code class="filename">libstdc++fsconvenience</code>, + and a standalone static library, + <code class="filename">libstdc++fs.a</code>. + These contain definitions of the Filesystem TS extensions. + Uses the <code class="option">-std=gnu++17</code> dialect. + </p></li><li class="listitem"><p> + make src/libbacktrace + </p><p> + Generates a libtool convenience library, + <code class="filename">libstdc++_libbacktrace</code>, + containing the libbacktrace definitions used by the C++23 + <code class="classname">std::stacktrace</code> feature. + </p></li><li class="listitem"><p> + make src/experimental + </p><p> + Generates a standalone static library, + <code class="filename">libstdc++exp.a</code>, containing the symbol definitions + for experimental features and extensions. This collects the convenience + libraries <code class="filename">libstdc++fsconvenience</code>, + <code class="filename">libstdc++_libbacktrace</code>, and + (at the time of writing) <code class="filename">libc++23convenience</code> + and combines them into one. + Uses the <code class="option">-std=gnu++17</code> dialect. </p></li><li class="listitem"><p> make src </p><p> @@ -400,8 +452,49 @@ libraries. Shared-only code is seggregated at compile-time via the macro <code class="literal">_GLIBCXX_SHARED</code>. </p><p> - Then, collects all the generated convenience libraries, adds in - any required compatibility objects, and creates the final shared - and static libraries: <code class="filename">libstdc++.so</code> and - <code class="filename">libstdc++.a</code>. - </p></li></ol></div></li></ol></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html> \ No newline at end of file + Then, collects all the generated convenience libraries that weren't + added to <code class="filename">libstdc++exp.a</code>, + adds in any required compatibility objects, + and creates the final shared and static libraries: + <code class="filename">libstdc++.so</code> and <code class="filename">libstdc++.a</code>. + </p></li></ol></div></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.generated"></a>Generated files</h3></div></div></div><p> + Some files in the libstdc++ source tree are auto-generated from other files. + In general, these are not regenerated automatically, so it must be done + manually when the files they depend on are updated. +</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> + The header file + <code class="filename">include/bits/version.h</code> + is generated from <code class="filename">version.def</code> and + <code class="filename">version.tpl</code> in the same directory. + After editing those files, either run <span class="command"><strong>autogen version.def</strong></span> + in the <code class="filename">include</code> directory of the + source tree, or run <span class="command"><strong>make update-version</strong></span> in the + <code class="filename">include</code> directory of the build tree. + </p></li><li class="listitem"><p> + The header file + <code class="filename">include/bits/unicode-data.h</code> + is generated by the Python script + <code class="filename">../contrib/unicode/gen_libstdcxx_unicode_data.py</code> + using data files in the same directory. The script contains information + on which data files it uses and how to update them. + </p></li><li class="listitem"><p> + The header file + <code class="filename">include/bits/text_encoding-data.h</code> + is generated by the Python script + <code class="filename">scripts/gen_text_encoding_data.py</code> + using the CSV file <a class="link" href="https://www.iana.org/assignments/character-sets/character-sets-1.csv" target="_top">https://www.iana.org/assignments/character-sets/character-sets-1.csv</a> + from the <a class="link" href="https://www.iana.org/time-zones" target="_top">IANA Character Sets</a> + registry. + </p></li><li class="listitem"><p> + The data file <code class="filename">src/c++20/tzdata.zi</code> is copied verbatim + from the + <a class="link" href="https://www.iana.org/time-zones" target="_top">IANA Time Zone Database</a> + (the latest version can be downloaded from + <a class="link" href="https://data.iana.org/time-zones/tzdb/tzdata.zi" target="_top">https://data.iana.org/time-zones/tzdb/tzdata.zi</a>). + Libstdc++ uses this data file to populate a + <code class="classname">std::chrono::tzdb</code> object in case the system does not + provide a copy of the file. + See <a class="xref" href="configure.html" title="Configure">Configuring</a> for the + <code class="code">--with-libstdcxx-zoneinfo</code> option that determines whether + this file is used. + </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html> \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/index.html b/libstdc++-v3/doc/html/manual/index.html index ed2aee54cead..e961efef97b8 100644 --- a/libstdc++-v3/doc/html/manual/index.html +++ b/libstdc++-v3/doc/html/manual/index.html @@ -116,7 +116,7 @@ </a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B. Porting and Maintenance -</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety"> +</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.version">Shared Library Versioning</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.generated">Generated files</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Testing</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Test Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#tests.dg.examples">Examples of Test Directives</a></span></dt><dt><span class="section"><a href="test.html#tests.dg.directives">Directives Specific to Libstdc++ Tests</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">DejaGnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety"> Qualifying Exception Safety Guarantees </a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status"> diff --git a/libstdc++-v3/doc/xml/manual/build_hacking.xml b/libstdc++-v3/doc/xml/manual/build_hacking.xml index 36f659cea4bb..077c0632a791 100644 --- a/libstdc++-v3/doc/xml/manual/build_hacking.xml +++ b/libstdc++-v3/doc/xml/manual/build_hacking.xml @@ -554,9 +554,9 @@ baseline file. make src </para> <para> - Generates two convenience libraries, one for C++98 and one for - C++11, various compatibility files for shared and static - libraries, and then collects all the generated bits and creates + Generates several convenience libraries, + various compatibility files for shared and static libraries, + and then collects all the generated bits and creates the final libstdc++ libraries. </para> <orderedlist> @@ -566,8 +566,8 @@ baseline file. </para> <para> Generates a libtool convenience library, - <filename>libc++98convenience</filename> with language-support - routines. Uses the <option>-std=gnu++98</option> dialect. + <filename>libc++98convenience</filename> with the library components + defined by C++98. Uses the <option>-std=gnu++98</option> dialect. </para> </listitem> <listitem> @@ -576,8 +576,84 @@ baseline file. </para> <para> Generates a libtool convenience library, - <filename>libc++11convenience</filename> with language-support - routines. Uses the <option>-std=gnu++11</option> dialect. + <filename>libc++11convenience</filename> with the library components + that were added or changed in C++11. + Uses the <option>-std=gnu++11</option> dialect. + </para> + </listitem> + <listitem> + <para> + make src/c++17 + </para> + <para> + Generates a libtool convenience library, + <filename>libc++17convenience</filename> with the library components + that were added or changed in C++17. + Uses the <option>-std=gnu++17</option> dialect. + </para> + </listitem> + <listitem> + <para> + make src/c++20 + </para> + <para> + Generates a libtool convenience library, + <filename>libc++20convenience</filename> with the library components + that were added or changed in C++20. + Uses the <option>-std=gnu++20</option> dialect. + </para> + </listitem> + <listitem> + <para> + make src/c++23 + </para> + <para> + Generates a libtool convenience library, + <filename>libc++23convenience</filename> with the library components + that were added or changed in C++23. + At the time of writing (GCC 14) this convenience library is included + in <filename>libstdc++exp.a</filename> and not in the final + <filename>libstdc++</filename> libraries. + Uses the <option>-std=gnu++23</option> dialect. + </para> + </listitem> + <listitem> + <para> + make src/filesystem + </para> + <para> + Generates a libtool convenience library, + <filename>libstdc++fsconvenience</filename>, + and a standalone static library, + <filename>libstdc++fs.a</filename>. + These contain definitions of the Filesystem TS extensions. + Uses the <option>-std=gnu++17</option> dialect. + </para> + </listitem> + <listitem> + <para> + make src/libbacktrace + </para> + <para> + Generates a libtool convenience library, + <filename>libstdc++_libbacktrace</filename>, + containing the libbacktrace definitions used by the C++23 + <classname>std::stacktrace</classname> feature. + </para> + </listitem> + <listitem> + <para> + make src/experimental + </para> + <para> + Generates a standalone static library, + <filename>libstdc++exp.a</filename>, containing the symbol definitions + for experimental features and extensions. This collects the convenience + libraries <filename>libstdc++fsconvenience</filename>, + <filename>libstdc++_libbacktrace</filename>, and + (at the time of writing) <filename>libc++23convenience</filename> + and combines them into one. + Uses the <option>-std=gnu++17</option> dialect. </para> </listitem> <listitem> @@ -591,10 +667,11 @@ baseline file. </para> <para> - Then, collects all the generated convenience libraries, adds in - any required compatibility objects, and creates the final shared - and static libraries: <filename>libstdc++.so</filename> and - <filename>libstdc++.a</filename>. + Then, collects all the generated convenience libraries that weren't + added to <filename>libstdc++exp.a</filename>, + adds in any required compatibility objects, + and creates the final shared and static libraries: + <filename>libstdc++.so</filename> and <filename>libstdc++.a</filename>. </para> </listitem> @@ -604,4 +681,69 @@ baseline file. </section> <!-- make --> +<section xml:id="build_hacking.generated"><info><title>Generated files</title></info> + +<para> + Some files in the libstdc++ source tree are auto-generated from other files. + In general, these are not regenerated automatically, so it must be done + manually when the files they depend on are updated. +</para> + +<itemizedlist> + <listitem> + <para> + The header file + <filename class="headerfile">include/bits/version.h</filename> + is generated from <filename>version.def</filename> and + <filename>version.tpl</filename> in the same directory. + After editing those files, either run <command>autogen version.def</command> + in the <filename class="directory">include</filename> directory of the + source tree, or run <command>make update-version</command> in the + <filename class="directory">include</filename> directory of the build tree. + </para> + </listitem> + <listitem> + <para> + The header file + <filename class="headerfile">include/bits/unicode-data.h</filename> + is generated by the Python script + <filename>../contrib/unicode/gen_libstdcxx_unicode_data.py</filename> + using data files in the same directory. The script contains information + on which data files it uses and how to update them. + </para> + </listitem> + <listitem> + <para> + The header file + <filename class="headerfile">include/bits/text_encoding-data.h</filename> + is generated by the Python script + <filename>scripts/gen_text_encoding_data.py</filename> + using the CSV file <link xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="https://www.iana.org/assignments/character-sets/character-sets-1.csv"/> + from the <link xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="https://www.iana.org/time-zones">IANA Character Sets</link> + registry. + </para> + </listitem> + <listitem> + <para> + The data file <filename>src/c++20/tzdata.zi</filename> is copied verbatim + from the + <link xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="https://www.iana.org/time-zones">IANA Time Zone Database</link> + (the latest version can be downloaded from + <link xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="https://data.iana.org/time-zones/tzdb/tzdata.zi"/>). + Libstdc++ uses this data file to populate a + <classname>std::chrono::tzdb</classname> object in case the system does not + provide a copy of the file. + See <xref linkend="manual.intro.setup.configure"/> for the + <code>--with-libstdcxx-zoneinfo</code> option that determines whether + this file is used. + </para> + </listitem> +</itemizedlist> + +</section> <!-- Generated files --> + </section> From 90788dd722346560d410fe9a5c2d543811027336 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Fri, 1 Mar 2024 11:20:51 +0000 Subject: [PATCH 136/551] libstdc++: Regenerate <bits/version.h> in maintainer mode This is a generated header but regenerating it requires the manual step of running 'make -C include update-version' in the libstdc++ build dir. Make it regenerate automatically when --enable-maintainer-mode is used. libstdc++-v3/ChangeLog: * include/Makefile.am [MAINTAINER_MODE]: Add target to automatically update <bits/version.h>. * include/Makefile.in: Regenerate. gcc/ChangeLog: * doc/install.texi (Prerequisites): Document use of autogen for libstdc++. --- gcc/doc/install.texi | 2 ++ libstdc++-v3/include/Makefile.am | 6 ++++++ libstdc++-v3/include/Makefile.in | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index e3650e0c4f49..014ca25aa628 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -545,6 +545,8 @@ Necessary to run @samp{make check} for @file{fixinc}. Necessary to regenerate the top level @file{Makefile.in} file from @file{Makefile.tpl} and @file{Makefile.def}. +Necessary to regenerate the @file{bits/version.h} header for libstdc++. + @item Flex version 2.5.4 (or later) Necessary when modifying @file{*.l} files. diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 64152351ed0c..cb902de36aed 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -1480,6 +1480,12 @@ update-version: cd ${bits_srcdir} && \ autogen version.def +if MAINTAINER_MODE +# Regenerate it automatically in maintainer mode. +${bits_srcdir}/version.h: ${bits_srcdir}/version.def ${bits_srcdir}/version.tpl + $(MAKE) update-version +endif + # The real deal. install-data-local: install-headers install-headers: diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 5a965c8e03bf..9357087acb4d 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -1954,6 +1954,10 @@ update-version: cd ${bits_srcdir} && \ autogen version.def +# Regenerate it automatically in maintainer mode. +@MAINTAINER_MODE_TRUE@${bits_srcdir}/version.h: ${bits_srcdir}/version.def ${bits_srcdir}/version.tpl +@MAINTAINER_MODE_TRUE@ $(MAKE) update-version + # The real deal. install-data-local: install-headers install-headers: From c608b57f77a47179899666940c3b8b6a2e5435b2 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 29 Feb 2024 17:13:49 +0000 Subject: [PATCH 137/551] libstdc++: Suppress deprecation messages from <tbb/task.h> [PR101228] libstdc++-v3/ChangeLog: PR libstdc++/101228 * include/pstl/parallel_backend_tbb.h (TBB_SUPPRESS_DEPRECATED_MESSAGES): Define before including <tbb/task.h> then undef afterwards. --- libstdc++-v3/include/pstl/parallel_backend_tbb.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libstdc++-v3/include/pstl/parallel_backend_tbb.h b/libstdc++-v3/include/pstl/parallel_backend_tbb.h index 3ff55237bffa..96e4b709fbee 100644 --- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h +++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h @@ -15,6 +15,11 @@ #include "parallel_backend_utils.h" +#ifndef TBB_SUPPRESS_DEPRECATED_MESSAGES +# define TBB_SUPPRESS_DEPRECATED_MESSAGES 1 +# define _GLIBCXX_UNDEF_SUPPRESS +#endif + // Bring in minimal required subset of Intel TBB #include <tbb/blocked_range.h> #include <tbb/parallel_for.h> @@ -25,6 +30,11 @@ #include <tbb/tbb_allocator.h> #include <tbb/task.h> +#ifdef _GLIBCXX_UNDEF_SUPPRESS +# undef TBB_SUPPRESS_DEPRECATED_MESSAGES +# undef _GLIBCXX_UNDEF_SUPPRESS +#endif + #if TBB_INTERFACE_VERSION < 10000 # error Intel(R) Threading Building Blocks 2018 is required; older versions are not supported. #endif From 07e03761a7fc1626a6a74ed957e117f56981558c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Mon, 18 Mar 2024 13:22:17 +0000 Subject: [PATCH 138/551] libstdc++: Fix infinite loop in std::binomial_distribution [PR114359] The multiplication (4 * _M_t * __1p) can wraparound to zero if _M_t is unsigned and 4 * _M_t wraps to zero. The third operand has type double, so do the second multiplication first, so that we aren't multiplying integers. libstdc++-v3/ChangeLog: PR libstdc++/114359 * include/bits/random.tcc (binomial_distribution::param_type): Ensure arithmetic is done as type double. * testsuite/26_numerics/random/binomial_distribution/114359.cc: New test. --- libstdc++-v3/include/bits/random.tcc | 2 +- .../random/binomial_distribution/114359.cc | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc index ade416390b37..8216883c448e 100644 --- a/libstdc++-v3/include/bits/random.tcc +++ b/libstdc++-v3/include/bits/random.tcc @@ -1503,7 +1503,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // sqrt(pi / 2) const double __spi_2 = 1.2533141373155002512078826424055226L; _M_s1 = std::sqrt(__np * __1p) * (1 + _M_d1 / (4 * __np)); - _M_s2 = std::sqrt(__np * __1p) * (1 + _M_d2 / (4 * _M_t * __1p)); + _M_s2 = std::sqrt(__np * __1p) * (1 + _M_d2 / (4 * (_M_t * __1p))); _M_c = 2 * _M_d1 / __np; _M_a1 = std::exp(_M_c) * _M_s1 * __spi_2; const double __a12 = _M_a1 + _M_s2 * __spi_2; diff --git a/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc new file mode 100644 index 000000000000..c1e4c380bf91 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/random/binomial_distribution/114359.cc @@ -0,0 +1,12 @@ +// { dg-do run { target c++11 } } + +// Bug 114359 - std::binomial_distribution hangs in infinite loop + +#include <random> + +int main() +{ + std::default_random_engine g{}; + std::binomial_distribution<std::uint32_t> b(1U << 30); + b(g); // hangs forever +} From 60586710b0646efdbbd77a7f53b93fb5edb87a61 Mon Sep 17 00:00:00 2001 From: Edwin Lu <ewlu@rivosinc.com> Date: Mon, 18 Mar 2024 11:43:41 -0700 Subject: [PATCH 139/551] RISC-V: Fix C23 (...) functions returning large aggregates [PR114175] We assume that TYPE_NO_NAMED_ARGS_STDARG_P don't have any named arguments and there is nothing to advance, but that is not the case for (...) functions returning by hidden reference which have one such artificial argument. This causes gcc.dg/c23-stdarg-[68].c to fail Fix the issue by checking if arg.type is NULL as r14-9503-g218d1749612 explains Tested on linux rv64gcv. gcc/ChangeLog: PR target/114175 * config/riscv/riscv.cc (riscv_setup_incoming_varargs): Only skip riscv_funciton_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL --- gcc/config/riscv/riscv.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 45015addd1fe..02a927f96b4a 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -5395,7 +5395,8 @@ riscv_setup_incoming_varargs (cumulative_args_t cum, argument. Advance a local copy of CUM past the last "real" named argument, to find out how many registers are left over. */ local_cum = *get_cumulative_args (cum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) riscv_function_arg_advance (pack_cumulative_args (&local_cum), arg); /* Found out how many registers we need to save. */ From bc91e3870e9c984c180b478a3449a9a2e56cd107 Mon Sep 17 00:00:00 2001 From: Edwin Lu <ewlu@rivosinc.com> Date: Tue, 12 Mar 2024 14:31:40 -0700 Subject: [PATCH 140/551] RISC-V: Update test expectancies with recent scheduler change Given the recent change with adding the scheduler pipeline descriptions, many scan-dump failures emerged. Relax the expected assembler output conditions on the affected tests to reduce noise. gcc/testsuite/ChangeLog: * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c: Disable scheduling * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c: Ditto * gcc.target/riscv/rvv/base/pr108185-1.c: Update test expectancies * gcc.target/riscv/rvv/base/pr108185-2.c: Ditto * gcc.target/riscv/rvv/base/pr108185-3.c: Ditto * gcc.target/riscv/rvv/base/pr108185-4.c: Ditto * gcc.target/riscv/rvv/base/pr108185-5.c: Ditto * gcc.target/riscv/rvv/base/pr108185-6.c: Ditto * gcc.target/riscv/rvv/base/pr108185-7.c: Ditto * gcc.target/riscv/rvv/base/vcreate.c: Disable scheduling and update test expectancies * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c: Disable scheduling * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c: Update test expectancies * gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c: Ditto * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c: Ditto Signed-off-by: Edwin Lu <ewlu@rivosinc.com> --- .../vect/costmodel/riscv/rvv/dynamic-lmul4-6.c | 1 + .../vect/costmodel/riscv/rvv/dynamic-lmul4-8.c | 1 + gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-1.c | 12 ++++++------ gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-2.c | 12 ++++++------ gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-3.c | 12 ++++++------ gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c | 12 ++++++------ gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-5.c | 12 ++++++------ gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-6.c | 12 ++++++------ gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-7.c | 12 ++++++------ gcc/testsuite/gcc.target/riscv/rvv/base/vcreate.c | 6 ++++-- .../gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c | 1 + .../gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c | 1 + .../riscv/rvv/vsetvl/vlmax_single_block-17.c | 12 ++++++------ .../riscv/rvv/vsetvl/vlmax_single_block-18.c | 6 +++--- .../riscv/rvv/vsetvl/vlmax_switch_vtype-10.c | 4 ++-- .../riscv/rvv/vsetvl/vlmax_switch_vtype-11.c | 2 +- .../riscv/rvv/vsetvl/vlmax_switch_vtype-12.c | 2 +- .../riscv/rvv/vsetvl/vlmax_switch_vtype-4.c | 4 ++-- .../riscv/rvv/vsetvl/vlmax_switch_vtype-5.c | 4 ++-- .../riscv/rvv/vsetvl/vlmax_switch_vtype-6.c | 4 ++-- .../riscv/rvv/vsetvl/vlmax_switch_vtype-7.c | 4 ++-- .../riscv/rvv/vsetvl/vlmax_switch_vtype-8.c | 4 ++-- .../riscv/rvv/vsetvl/vlmax_switch_vtype-9.c | 4 ++-- 23 files changed, 75 insertions(+), 69 deletions(-) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c index bd7ce23f6b88..b23acebc9160 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ +/* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c index 61619a0c8797..ef719ee8445c 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ +/* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-1.c index 4c6e88e7eed8..46d3b5e98d4d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-1.c @@ -60,11 +60,11 @@ test_vbool1_then_vbool64(int8_t * restrict in, int8_t * restrict out) { } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 6 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 2 } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-2.c index 0844e3e87131..729866bf4f25 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-2.c @@ -60,11 +60,11 @@ test_vbool2_then_vbool64(int8_t * restrict in, int8_t * restrict out) { } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 6 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 2 } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-3.c index 49a574485fed..254411c6c92e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-3.c @@ -60,11 +60,11 @@ test_vbool4_then_vbool64(int8_t * restrict in, int8_t * restrict out) { } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 6 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 2 } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c index cef0a11b2d44..d27be6948372 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c @@ -60,11 +60,11 @@ test_vbool8_then_vbool64(int8_t * restrict in, int8_t * restrict out) { } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 6 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 2 } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-5.c index 3f0d67726bc8..06a75e3e016c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-5.c @@ -60,11 +60,11 @@ test_vbool16_then_vbool64(int8_t * restrict in, int8_t * restrict out) { } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 6 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 2 } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-6.c index 4ed658899f4c..c5ef532fe92d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-6.c @@ -60,11 +60,11 @@ test_vbool32_then_vbool64(int8_t * restrict in, int8_t * restrict out) { } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 6 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 2 } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-7.c index 95b7ff976666..28aa32554d43 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-7.c @@ -60,11 +60,11 @@ test_vbool64_then_vbool32(int8_t * restrict in, int8_t * restrict out) { } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 6 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 1 } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 1 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 2 } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 2 } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vcreate.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vcreate.c index 0fc8c3450f09..01006de7c815 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/vcreate.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vcreate.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-march=rv64gcv_zvfh -mabi=lp64 -O3" } */ +/* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include "riscv_vector.h" @@ -254,6 +255,7 @@ test_vcreate_v_i64m2x4 (vint64m2_t v0, vint64m2_t v1, vint64m2_t v2, return __riscv_vcreate_v_i64m2x4 (v0, v1, v2, v3); } -/* { dg-final { scan-assembler-times {vmv1r.v\s+v[0-9]+,\s*v[0-9]+} 24 } } */ -/* { dg-final { scan-assembler-times {vmv2r.v\s+v[0-9]+,\s*v[0-9]+} 12 } } */ +// Ideally with O3, should find 0 instances of any vmvnr.v PR113913 +/* { dg-final { scan-assembler-times {vmv1r.v\s+v[0-9]+,\s*v[0-9]+} 72 } } */ +/* { dg-final { scan-assembler-times {vmv2r.v\s+v[0-9]+,\s*v[0-9]+} 36 } } */ /* { dg-final { scan-assembler-times {vmv4r.v\s+v[0-9]+,\s*v[0-9]+} 16 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c index 131bb18c1d46..4c977e4e169d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */ +/* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c index f0a4fa7a4063..2e2fc0282c9a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-mrvv-vector-bits=scalable -march=rv32gcv -mabi=ilp32 -fno-tree-vectorize" } */ +/* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c index 9a3c60f4346f..be424daf2130 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c @@ -23,12 +23,12 @@ void foo7 (void * restrict in, void * restrict out) *(vbool64_t*)(out + 7) = v7; } -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m1,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m4,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*m8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ /* { dg-final { scan-assembler-times {vlm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ /* { dg-final { scan-assembler-times {vsm\.v\s+(?:v[0-9]|v[1-2][0-9]|v3[0-1]),0\s*\([a-x0-9]+\)} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c index 35c5ac36ebf5..d1d3bca667ad 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c @@ -29,6 +29,6 @@ void f (void * restrict in, void * restrict out) } /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf4,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 6 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-Og -g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c index 454c4a1283c7..ddf53ca6332d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c @@ -43,6 +43,6 @@ void foo (int8_t * restrict in, int8_t * restrict out, int n, int cond) } } -/* { dg-final { scan-assembler-times {vsetvli} 9 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 15 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */ /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c index 1490fb6583fc..4880cb4d6670 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c @@ -54,4 +54,4 @@ void foo (int8_t * restrict in, int8_t * restrict out, int n, int cond1, int con } } -/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 13 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c index c95f0dc8eb8b..0f9ab5ff8cbd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c @@ -53,5 +53,5 @@ void foo (int8_t * restrict in, int8_t * restrict out, int n, int cond1, int con *(vint16mf4_t*)(out + 30000) = v; } } -/* { dg-final { scan-assembler-times {vsetvli} 9 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 15 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c index ac29887826b7..9572ad7e17d2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c @@ -18,5 +18,5 @@ void f (void * restrict in, void * restrict out, int n) } } -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c index ac29887826b7..9572ad7e17d2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c @@ -18,5 +18,5 @@ void f (void * restrict in, void * restrict out, int n) } } -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-flto" no-opts "-g" no-opts "-funroll-loops" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c index 1cccb98f2e23..5081a9b87de7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c @@ -31,5 +31,5 @@ void foo (void * restrict in, void * restrict out, int n) } } -/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 13 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c index 7c8d122ac0df..3a7ce05e6791 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c @@ -41,5 +41,5 @@ void foo (int8_t * restrict in, int8_t * restrict out, int n) } } -/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 13 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c index 12ab77e698ec..1cedc27a135d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c @@ -42,6 +42,6 @@ void foo (int8_t * restrict in, int8_t * restrict out, int n, int cond) *(vint32mf2_t*)(out + i + 700) = v6; } } -/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 13 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ /* { dg-final { scan-assembler-not {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16\s*mf4,\s*t[au],\s*m[au]} { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c index 12ab77e698ec..1cedc27a135d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c @@ -42,6 +42,6 @@ void foo (int8_t * restrict in, int8_t * restrict out, int n, int cond) *(vint32mf2_t*)(out + i + 700) = v6; } } -/* { dg-final { scan-assembler-times {vsetvli} 7 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ -/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli} 13 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ +/* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ /* { dg-final { scan-assembler-not {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16\s*mf4,\s*t[au],\s*m[au]} { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */ From 0bf99b1b7eda2f4c34b9f56b895980ea1c261765 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Tue, 19 Mar 2024 13:57:35 -0400 Subject: [PATCH 141/551] diagnostics: fix corrupt json/SARIF on stderr [PR114348] Various values of -fdiagnostics-format= request machine-readable output on stderr, using JSON, but in various places we use fnotice to write free-form text to stderr, such as "compilation terminated", leading to corrupt JSON. Fix by having fnotice skip the output for such cases. gcc/ChangeLog: PR middle-end/114348 * diagnostic-format-json.cc (json_stderr_output_format::machine_readable_stderr_p): New. (json_file_output_format::machine_readable_stderr_p): New. * diagnostic-format-sarif.cc (sarif_stream_output_format::machine_readable_stderr_p): New. (sarif_file_output_format::machine_readable_stderr_p): New. * diagnostic.cc (diagnostic_context::action_after_output): Move "fnotice" to before "finish" call, so that we still have the diagnostic_context. (fnotice): Bail out if the user requested one of the machine-readable diagnostic output formats on stderr. * diagnostic.h (diagnostic_output_format::machine_readable_stderr_p): New pure virtual function. (diagnostic_text_output_format::machine_readable_stderr_p): New. (diagnostic_context::get_output_format): New accessor. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/diagnostic-format-json.cc | 8 ++++++++ gcc/diagnostic-format-sarif.cc | 8 ++++++++ gcc/diagnostic.cc | 12 +++++++++++- gcc/diagnostic.h | 10 ++++++++++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/gcc/diagnostic-format-json.cc b/gcc/diagnostic-format-json.cc index 51e016b64638..0782ae831eba 100644 --- a/gcc/diagnostic-format-json.cc +++ b/gcc/diagnostic-format-json.cc @@ -314,6 +314,10 @@ class json_stderr_output_format : public json_output_format { flush_to_file (stderr); } + bool machine_readable_stderr_p () const final override + { + return true; + } }; class json_file_output_format : public json_output_format @@ -345,6 +349,10 @@ class json_file_output_format : public json_output_format fclose (outf); free (filename); } + bool machine_readable_stderr_p () const final override + { + return false; + } private: char *m_base_file_name; diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc index 307b2f56c280..97c5943cd339 100644 --- a/gcc/diagnostic-format-sarif.cc +++ b/gcc/diagnostic-format-sarif.cc @@ -1750,6 +1750,10 @@ class sarif_stream_output_format : public sarif_output_format { m_builder.flush_to_file (m_stream); } + bool machine_readable_stderr_p () const final override + { + return m_stream == stderr; + } private: FILE *m_stream; }; @@ -1782,6 +1786,10 @@ class sarif_file_output_format : public sarif_output_format fclose (outf); free (filename); } + bool machine_readable_stderr_p () const final override + { + return false; + } private: char *m_base_file_name; diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index 1d143fa74980..8e4621f8031a 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -802,8 +802,8 @@ diagnostic_context::action_after_output (diagnostic_t diag_kind) case DK_FATAL: if (m_abort_on_error) real_abort (); - finish (); fnotice (stderr, "compilation terminated.\n"); + finish (); exit (FATAL_EXIT_CODE); default: @@ -2264,6 +2264,16 @@ diagnostic_context::emit_diagram (const diagnostic_diagram &diagram) void fnotice (FILE *file, const char *cmsgid, ...) { + /* If the user requested one of the machine-readable diagnostic output + formats on stderr (e.g. -fdiagnostics-format=sarif-stderr), then + emitting free-form text on stderr will lead to corrupt output. + Skip the message for such cases. */ + if (file == stderr && global_dc) + if (const diagnostic_output_format *output_format + = global_dc->get_output_format ()) + if (output_format->machine_readable_stderr_p ()) + return; + va_list ap; va_start (ap, cmsgid); diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h index 0a7c7e02b37c..065ac784e258 100644 --- a/gcc/diagnostic.h +++ b/gcc/diagnostic.h @@ -210,6 +210,7 @@ class diagnostic_output_format virtual void on_end_diagnostic (const diagnostic_info &, diagnostic_t orig_diag_kind) = 0; virtual void on_diagram (const diagnostic_diagram &diagram) = 0; + virtual bool machine_readable_stderr_p () const = 0; protected: diagnostic_output_format (diagnostic_context &context) @@ -238,6 +239,10 @@ class diagnostic_text_output_format : public diagnostic_output_format void on_end_diagnostic (const diagnostic_info &, diagnostic_t orig_diag_kind) override; void on_diagram (const diagnostic_diagram &diagram) override; + bool machine_readable_stderr_p () const final override + { + return false; + } }; /* A stack of sets of classifications: each entry in the stack is @@ -432,6 +437,11 @@ class diagnostic_context void emit_diagram (const diagnostic_diagram &diagram); + const diagnostic_output_format *get_output_format () const + { + return m_output_format; + } + /* Various setters for use by option-handling logic. */ void set_output_format (diagnostic_output_format *output_format); void set_text_art_charset (enum diagnostic_text_art_charset charset); From c87f1f3d660f4103c91c72a4d3e1d19ff2858671 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 19 Mar 2024 16:06:13 -0400 Subject: [PATCH 142/551] analyzer: fix ICE due to corrupt MEM_REFs [PR113505] gcc/analyzer/ChangeLog PR analyzer/113505 * region-model.cc (get_tree_for_byte_offset, region_model::get_representative_path_var_1, test_mem_ref, test_POINTER_PLUS_EXPR_then_MEM_REF): Use char __attribute__((may_alias)) * as type of MEM_REF second argument. gcc/testsuite/ChangeLog PR analyzer/113505 * gcc.dg/analyzer/pr113505.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/region-model.cc | 16 ++++++++++------ gcc/testsuite/gcc.dg/analyzer/pr113505.c | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/analyzer/pr113505.c diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index f079d1fb37ee..8fff53241730 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -3967,9 +3967,10 @@ static tree get_tree_for_byte_offset (tree ptr_expr, byte_offset_t byte_offset) { gcc_assert (ptr_expr); + tree ptype = build_pointer_type_for_mode (char_type_node, ptr_mode, true); return fold_build2 (MEM_REF, char_type_node, - ptr_expr, wide_int_to_tree (size_type_node, byte_offset)); + ptr_expr, wide_int_to_tree (ptype, byte_offset)); } /* Simulate a series of reads of REG until we find a 0 byte @@ -5360,9 +5361,10 @@ region_model::get_representative_path_var_1 (const region *reg, tree addr_parent = build1 (ADDR_EXPR, build_pointer_type (reg->get_type ()), parent_pv.m_tree); - return path_var (build2 (MEM_REF, - reg->get_type (), - addr_parent, offset_pv.m_tree), + tree ptype = build_pointer_type_for_mode (char_type_node, ptr_mode, + true); + return path_var (build2 (MEM_REF, reg->get_type (), addr_parent, + fold_convert (ptype, offset_pv.m_tree)), parent_pv.m_stack_depth); } @@ -9024,7 +9026,8 @@ test_mem_ref () tree int_17 = build_int_cst (integer_type_node, 17); tree addr_of_x = build1 (ADDR_EXPR, int_star, x); - tree offset_0 = build_int_cst (integer_type_node, 0); + tree ptype = build_pointer_type_for_mode (char_type_node, ptr_mode, true); + tree offset_0 = build_int_cst (ptype, 0); tree star_p = build2 (MEM_REF, integer_type_node, p, offset_0); region_model_manager mgr; @@ -9074,7 +9077,8 @@ test_POINTER_PLUS_EXPR_then_MEM_REF () tree a = build_global_decl ("a", int_star); tree offset_12 = build_int_cst (size_type_node, 12); tree pointer_plus_expr = build2 (POINTER_PLUS_EXPR, int_star, a, offset_12); - tree offset_0 = build_int_cst (integer_type_node, 0); + tree ptype = build_pointer_type_for_mode (char_type_node, ptr_mode, true); + tree offset_0 = build_int_cst (ptype, 0); tree mem_ref = build2 (MEM_REF, integer_type_node, pointer_plus_expr, offset_0); region_model_manager mgr; diff --git a/gcc/testsuite/gcc.dg/analyzer/pr113505.c b/gcc/testsuite/gcc.dg/analyzer/pr113505.c new file mode 100644 index 000000000000..58a2b6cd6f44 --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/pr113505.c @@ -0,0 +1,24 @@ +/* PR analyzer/113505 */ +/* { dg-additional-options "-O -fdump-analyzer" } */ + +enum E **foo () __attribute__((__const__)); +char a[2]; +void bar (char *); + +void +baz (void) +{ + char *s, *l; + for (;;) + { + bar (a); + s = a; + while (foo ()[*s]) + s++; + l = s; + *l++ = '\0'; + while (foo ()[*l]) + l++; + bar (s); + } +} From c92076aa5345b6a5523b4e193dcc98fe9743b228 Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Tue, 19 Mar 2024 20:25:39 +0000 Subject: [PATCH 143/551] Update gcc de.po * de.po: Update. --- gcc/po/de.po | 1652 +++++++++++++++++++++----------------------------- 1 file changed, 677 insertions(+), 975 deletions(-) diff --git a/gcc/po/de.po b/gcc/po/de.po index 5e52c01689c1..ed087b43e318 100644 --- a/gcc/po/de.po +++ b/gcc/po/de.po @@ -8,10 +8,10 @@ # Roland Illig <roland.illig@gmx.de>, 2015, 2017-2023. msgid "" msgstr "" -"Project-Id-Version: gcc 13.2.0\n" +"Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2023-07-28 19:58+0200\n" +"PO-Revision-Date: 2024-03-19 21:07+0100\n" "Last-Translator: Roland Illig <roland.illig@gmx.de>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.4.2\n" "X-Poedit-Bookmarks: -1,-1,-1,6017,-1,-1,-1,-1,-1,-1\n" #: cif-code.def:39 @@ -321,10 +321,8 @@ msgid "-install_name only allowed with -dynamiclib" msgstr "»-install_name« ist nur mit »-dynamiclib« erlaubt" #: config/darwin.h:191 -#, fuzzy -#| msgid "-bundle not allowed with -dynamiclib" msgid "-bundle not allowed with -shared" -msgstr "»-bundle« ist nicht mit »-dynamiclib« erlaubt" +msgstr "»-bundle« ist nicht mit »-shared« erlaubt" #: config/darwin.h:192 msgid "-bundle not allowed with -dynamiclib" @@ -1028,7 +1026,7 @@ msgstr "Standardzugriff von Modulentitäten auf PRIVATE setzen." #: fortran/lang.opt:721 #, no-c-format msgid "Handle OpenMP allocators for allocatables and pointers." -msgstr "" +msgstr "OpenMP-Allokatoren für Allozierbare und Zeiger handhaben." #: fortran/lang.opt:725 #, no-c-format @@ -1183,10 +1181,9 @@ msgid "Conform to the ISO Fortran 2018 standard." msgstr "Mit dem Standard ISO Fortran 2018 übereinstimmen." #: fortran/lang.opt:896 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO Fortran 2003 standard." +#, no-c-format msgid "Conform to the ISO Fortran 2023 standard." -msgstr "Mit dem Standard ISO Fortran 2003 übereinstimmen." +msgstr "Mit dem Standard ISO Fortran 2023 übereinstimmen." #: fortran/lang.opt:900 #, no-c-format @@ -1226,7 +1223,7 @@ msgstr "-frust-crate=<Name> Crate-Namen für die Übersetzung festle #: rust/lang.opt:67 #, no-c-format msgid "-frust-extern= Specify where an external library is located" -msgstr "" +msgstr "-frust-extern= Gibt an, wo sich eine externe Bibliothek befindet" #: rust/lang.opt:71 #, no-c-format @@ -1234,10 +1231,9 @@ msgid "Dump various Rust front end internals." msgstr "Diverse Interna des Rust-Frontends wegschreiben." #: rust/lang.opt:75 -#, fuzzy, no-c-format -#| msgid "-frust-dump-<type>\tDump Rust frontend internal information." +#, no-c-format msgid "-frust-dump-<type> Dump Rust frontend internal information." -msgstr "-frust-dump-<type>\tInterna des Rust-Frontends wegschreiben." +msgstr "-frust-dump-<type> Interne Informationen des Rust-Frontends ausgeben." #: rust/lang.opt:79 #, no-c-format @@ -1245,19 +1241,17 @@ msgid "Enable experimental compilation of Rust files at your own risk" msgstr "Experimentelle Übersetzung von Rust-Dateien einschalten, auf eigene Gefahr" #: rust/lang.opt:83 -#, fuzzy, no-c-format -#| msgid "-frust-max-recursion-depth=integer" +#, no-c-format msgid "-frust-max-recursion-depth=<integer>" msgstr "-frust-max-recursion-depth=<Anzahl>" #: rust/lang.opt:87 #, no-c-format msgid "-frust-crate-type=[bin|lib|rlib|dylib|cdylib|staticlib|proc-macro] Crate type to emit" -msgstr "" +msgstr "-frust-crate-type=[bin|lib|rlib|dylib|cdylib|staticlib|proc-macro] Auszugebender Crate-Typ" #: rust/lang.opt:115 -#, fuzzy, no-c-format -#| msgid "-frust-mangling=[legacy|v0] Choose which version to use for name mangling" +#, no-c-format msgid "-frust-mangling=[legacy|v0] Version to use for name mangling" msgstr "-frust-mangling=[legacy|v0] Version der Namensmangelung auswählen" @@ -1267,14 +1261,12 @@ msgid "-frust-cfg=<name> Set a config expansion option" msgstr "-frust-cfg=<Name> Option für Konfigurationsexpansion festlegen" #: rust/lang.opt:132 -#, fuzzy, no-c-format -#| msgid "-frust-edition=[2015|2018|2021] Choose which edition to use when compiling rust code" +#, no-c-format msgid "-frust-edition=[2015|2018|2021] Edition to use when compiling rust code" msgstr "-frust-edition=[2015|2018|2021] Sprachversion zum Übersetzen auswählen" #: rust/lang.opt:148 -#, fuzzy, no-c-format -#| msgid "Flag to enable embeding metadata directly into object files" +#, no-c-format msgid "Enable embedding metadata directly into object files" msgstr "Metadaten direkt in Objektdateien einbetten" @@ -1284,20 +1276,19 @@ msgid "-frust-metadata-output=<path.rox> Path to output crate metadata" msgstr "-frust-metadata-output=<Pfad.rox> Pfad, in den die Create-Metadaten geschrieben werden" #: rust/lang.opt:160 -#, fuzzy, no-c-format -#| msgid "-frust-compile-until=[ast|attributecheck|expansion|nameresolution|lowering|typecheck|privacy|unsafety|const|copimlation|end] When to stop in the pipeline when compiling Rust code" +#, no-c-format msgid "-frust-compile-until=[ast|attributecheck|expansion|astvalidation|featuregating|nameresolution|lowering|typecheck|privacy|unsafety|const|borrowcheck|compilation|end] The pipeline will run up until this stage when compiling Rust code" -msgstr "-frust-compile-until=[ast|attributecheck|expansion|nameresolution|lowering|typecheck|privacy|unsafety|const|copimlation|end] Bis zu welchem Schritt der Verarbeitungskette Rust-Code übersetzt wird" +msgstr "-frust-compile-until=[ast|attributecheck|expansion|astvalidation|featuregating|nameresolution|lowering|typecheck|privacy|unsafety|const|borrowcheck|compilation|end] Die Pipeline beim Kompilieren von Rust-Code bis zu dieser Stufe durchlaufen" #: rust/lang.opt:209 #, no-c-format msgid "Use the temporary and experimental name resolution pipeline instead of the stable one" -msgstr "" +msgstr "Die temporäre und experimentelle Namensauflösungs-Pipeline statt der stabilen nutzen" #: rust/lang.opt:213 #, no-c-format msgid "Use the WIP borrow checker." -msgstr "" +msgstr "Den WIP-Borrow-Prüfer verwenden." #: c-family/c.opt:182 #, no-c-format @@ -1392,18 +1383,17 @@ msgstr "-MT <Ziel>\tZiel hinzufügen, das keine Anführungszeichen benötigt." #: c-family/c.opt:261 #, no-c-format msgid "Structured format for output dependency information. Supported (\"p1689r5\")." -msgstr "" +msgstr "Strukturiertes Format, um Abhängigkeitsinformationen auszugeben. Unterstützt ist »p1689r5«." #: c-family/c.opt:265 -#, fuzzy, no-c-format -#| msgid "Generate C++ Module dependency information." +#, no-c-format msgid "File for output dependency information." -msgstr "Informationen zu Abhängigkeiten von C++-Modulen erzeugen." +msgstr "Datei, um Abhängigkeitsinformationen auszugeben." #: c-family/c.opt:269 #, no-c-format msgid "-fdeps-target=obj.o Output file for the compile step." -msgstr "" +msgstr "-fdeps-target=obj.o Ausgabedatei für den Kompilierschritt." #: c-family/c.opt:273 #, no-c-format @@ -1473,7 +1463,7 @@ msgstr "Bei jeglicher Verwendung von alloca warnen." #: c-family/c.opt:340 #, no-c-format msgid "Warn when allocating insufficient storage for the target type of the assigned pointer." -msgstr "" +msgstr "Warnen, wenn bei einer Zuweisung der allozierte Speicherplatz nicht für den Zieltyp des Zeigers ausreicht." #: c-family/c.opt:344 #, no-c-format @@ -1551,16 +1541,14 @@ msgid "Warn when a built-in preprocessor macro is undefined or redefined." msgstr "Bei undefiniertem oder redefiniertem eingebauten Präprozessormakro warnen." #: c-family/c.opt:438 -#, fuzzy, no-c-format -#| msgid "Warn about features not present in ISO C11, but present in ISO C2X." +#, no-c-format msgid "Warn about features not present in ISO C11, but present in ISO C23." -msgstr "Bei Merkmalen, die in ISO C2X, aber noch nicht in ISO C11 verfügbar sind, warnen." +msgstr "Bei Merkmalen, die in ISO C23, aber noch nicht in ISO C11 verfügbar sind, warnen." #: c-family/c.opt:442 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -std=c11." +#, no-c-format msgid "Deprecated in favor of -Wc11-c23-compat." -msgstr "Veraltet zugunsten von -std=c11." +msgstr "Veraltet zugunsten von -Wc11-c23-compat." #: c-family/c.opt:446 #, no-c-format @@ -1623,16 +1611,14 @@ msgid "Warn about C++23 constructs in code compiled with an older standard." msgstr "Vor C++23-Konstrukten in Code warnen, der mit einem älteren Standard kompiliert wurde." #: c-family/c.opt:503 -#, fuzzy, no-c-format -#| msgid "Warn about C++20 constructs in code compiled with an older standard." +#, no-c-format msgid "Warn about C++26 constructs in code compiled with an older standard." -msgstr "Vor C++20-Konstrukten in Code warnen, der mit einem älteren Standard kompiliert wurde." +msgstr "Vor C++26-Konstrukten in Code warnen, der mit einem älteren Standard kompiliert wurde." #: c-family/c.opt:507 -#, fuzzy, no-c-format -#| msgid "Warn about suspicious divisions of two sizeof expressions that don't work correctly with pointers." +#, no-c-format msgid "Warn about suspicious calls to calloc-like functions where sizeof expression is the earlier size argument and not the latter." -msgstr "Warnen, wenn zwei sizeof-Ausdrücke durcheinander geteilt werden, die nicht korrekt mit Zeigern funktionieren." +msgstr "Vor verdächtigen Aufrufen von calloc-ähnlichen Funktionen warnen, bei denen ein sizeof-Ausdruck die Anzahl angibt statt der Elementgröße." #: c-family/c.opt:511 #, no-c-format @@ -1752,10 +1738,9 @@ msgid "Warn when a declaration is found after a statement." msgstr "Warnen, wenn eine Deklaration hinter einer Anweisung gefunden wird." #: c-family/c.opt:612 -#, fuzzy, no-c-format -#| msgid "Warn about unprototyped function declarations." +#, no-c-format msgid "Warn for missing parameter types in function declarations." -msgstr "Bei Funktionsdeklarationen ohne Prototyp warnen." +msgstr "Bei fehlenden Parametertypen in Funktionsdeklarationen warnen." #: c-family/c.opt:616 #, no-c-format @@ -1835,7 +1820,7 @@ msgstr "Bei Verstößen gegen die Stil-Richtlinien von »Effective C++« warnen. #: c-family/c.opt:683 #, no-c-format msgid "Warn if an additional enum-base is used in an elaborated-type-specifier." -msgstr "" +msgstr "Warnen, wenn eine zusätzliche enum-base in einem elaborated-type-specifier verwendet wird." #: c-family/c.opt:687 #, no-c-format @@ -1885,7 +1870,7 @@ msgstr "Bei Semikolon nach Funktionsdefinition innerhalb einer Klasse warnen." #: c-family/c.opt:731 #, no-c-format msgid "Warn when a structure containing a C99 flexible array member as the last field is not at the end of another structure." -msgstr "" +msgstr "Warnen, wenn eine Struktur, die ein flexibles C99-Array-Mitglied als letztes Feld enthält, nicht am Ende einer anderen Struktur steht." #: c-family/c.opt:736 #, no-c-format @@ -2168,10 +2153,9 @@ msgid "Warn when the template keyword is missing after a member access token in msgstr "Warnen, wenn das Schlüsselwort »template« nach einem Token für Memberzugriff in einem abhängigen Memberzugriff-Ausdruck fehlt, wenn dieser Member ein Template ist." #: c-family/c.opt:994 -#, fuzzy, no-c-format -#| msgid "Warn about global functions without previous declarations." +#, no-c-format msgid "Warn about global variables without previous declarations." -msgstr "Vor globalen Funktionen ohne vorherige Deklaration warnen." +msgstr "Vor globalen Variablen ohne vorherige Deklaration warnen." #: c-family/c.opt:1001 #, no-c-format @@ -2259,10 +2243,9 @@ msgid "Warn about potentially suboptimal choices related to OpenACC parallelism. msgstr "Vor potenziell suboptimalen Entscheidungen im Zusammenhang mit OpenACC-Parallelität warnen." #: c-family/c.opt:1101 -#, fuzzy, no-c-format -#| msgid "Warn about \"suspicious\" constructs." +#, no-c-format msgid "Warn about suspicious OpenMP code." -msgstr "Bei »verdächtigen« Konstrukten warnen." +msgstr "Vor verdächtigem OpenMP-Code warnen." #: c-family/c.opt:1105 #, no-c-format @@ -2292,7 +2275,7 @@ msgstr "Beim Überschreiben von Initialisierungen mit Seiteneffekten warnen." #: c-family/c.opt:1129 #, no-c-format msgid "Warn if the named return value optimization is not performed although it is allowed." -msgstr "" +msgstr "Warnung, wenn die angegebene Rückgabewertoptimierung nicht durchgeführt wird, obwohl sie erlaubt ist." #: c-family/c.opt:1133 #, no-c-format @@ -2402,7 +2385,7 @@ msgstr "Warnen, wenn ein Argument für einen »restrict«-Parameter auch in eine #: c-family/c.opt:1226 #, no-c-format msgid "Warn whenever void-returning functions return a non-void expressions, or a return expression is missing in a function not returning void." -msgstr "" +msgstr "Warnen, wenn Funktionen, die void zurückgeben, einen nicht-void-Ausdruck zurückgeben, oder ein Rückgabeausdruck in einer Funktion fehlt, die nicht void zurückgibt." #: c-family/c.opt:1230 #, no-c-format @@ -2601,10 +2584,9 @@ msgid "Warn if a comparison always evaluates to true or false." msgstr "Warnen, wenn ein Vergleich immer zu »wahr« oder »falsch« auswertet." #: c-family/c.opt:1413 -#, fuzzy, no-c-format -#| msgid "GCN does not support static constructors or destructors" +#, no-c-format msgid "Warn about simple-template-id in a constructor or destructor." -msgstr "GCN unterstützt keine statischen Konstruktoren oder Destruktoren" +msgstr "Bei simple-template-id in einem Konstruktor oder Destruktor warnen." #: c-family/c.opt:1417 #, no-c-format @@ -2913,10 +2895,9 @@ msgid "Print hierarchical comparisons when template types are mismatched." msgstr "Hierarchische Vergleiche ausgeben, wenn die Templatetypen nicht zusammenpassen." #: c-family/c.opt:1818 -#, fuzzy, no-c-format -#| msgid "default argument mismatch in overload resolution" +#, no-c-format msgid "Note all candidates during overload resolution failure." -msgstr "Zuordnungsfehler der Standardargumente in Überladungsauflösung" +msgstr "Wenn das Auflösen von Überladungen nicht eindeutig ist, alle Kandidaten auflisten." #: c-family/c.opt:1822 #, no-c-format @@ -3006,7 +2987,7 @@ msgstr "Normale C-Ausführungsumgebung vermuten." #: c-family/c.opt:1915 #, no-c-format msgid "Implement P2564 for consteval propagation." -msgstr "" +msgstr "P2564 für consteval-Propagierung implementieren." #: c-family/c.opt:1919 #, no-c-format @@ -3079,10 +3060,9 @@ msgid "Warn about macros that have conflicting header units definitions." msgstr "Bei Makros warnen, deren Header-Einheits-Definitionen nicht übereinstimmen." #: c-family/c.opt:1992 -#, fuzzy, no-c-format -#| msgid "return makes pointer from integer without a cast" +#, no-c-format msgid "Warn if pointers of distinct types are compared without a cast." -msgstr "return erzeugt Zeiger von Ganzzahl ohne Typkonvertierung" +msgstr "Bei Vergleichen von Zeigern unterschiedlicher Typen ohne Cast warnen." #: c-family/c.opt:1996 #, no-c-format @@ -3125,10 +3105,9 @@ msgid "Implement resolution of DR 150 for matching of template template argument msgstr "Auflösung von DR 150 für Mustervergleich von Template-Template-Argumenten umsetzen." #: c-family/c.opt:2043 -#, fuzzy, no-c-format -#| msgid "Generate code for NeXT (Apple Mac OS X) runtime environment." +#, no-c-format msgid "Generate code for NeXT (Apple macOS) runtime environment." -msgstr "Code für die NeXT-(Apple macOS X)-Laufzeitumgebung erzeugen." +msgstr "Code für die NeXT-(Apple macOS)-Laufzeitumgebung erzeugen." #: c-family/c.opt:2047 #, no-c-format @@ -3521,10 +3500,9 @@ msgid "Conform to the ISO 2023 C++ draft standard (experimental and incomplete s msgstr "Mit dem ISO-C++-Standardentwurf 2023 übereinstimmen (experimentelle und unvollständige Unterstützung)." #: c-family/c.opt:2480 c-family/c.opt:2484 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 2023 C++ draft standard (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2026 C++ draft standard (experimental and incomplete support)." -msgstr "Mit dem ISO-C++-Standardentwurf 2023 übereinstimmen (experimentelle und unvollständige Unterstützung)." +msgstr "Mit dem ISO-C++-Standardentwurf 2026 übereinstimmen (experimentelle und unvollständige Unterstützung)." #: c-family/c.opt:2488 c-family/c.opt:2642 #, no-c-format @@ -3543,16 +3521,14 @@ msgid "Conform to the ISO 2017 C standard (published in 2018)." msgstr "Mit dem ISO-C-Standard von 2017 (2018 veröffentlicht) übereinstimmen." #: c-family/c.opt:2504 c-family/c.opt:2654 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 202X C standard draft (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) (experimental and incomplete support)." -msgstr "Mit dem ISO-C-Standardentwurf 202X übereinstimmen (experimentelle und unvollständige Unterstützung)." +msgstr "Mit dem ISO-C-Standardentwurf 2023 übereinstimmen (Veröffentlichung für 2024 geplant) (experimentelle und unvollständige Unterstützung)." #: c-family/c.opt:2508 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -std=c11." +#, no-c-format msgid "Deprecated in favor of -std=c23." -msgstr "Veraltet zugunsten von -std=c11." +msgstr "Veraltet zugunsten von -std=c23." #: c-family/c.opt:2512 c-family/c.opt:2516 c-family/c.opt:2626 #, no-c-format @@ -3615,10 +3591,9 @@ msgid "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimen msgstr "Mit dem ISO-C++-Standardentwurf für 2023 mit GNU-Erweiterungen (experimentelle und unvollständige Unterstützung) übereinstimmen." #: c-family/c.opt:2578 c-family/c.opt:2582 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental and incomplete support)." -msgstr "Mit dem ISO-C++-Standardentwurf für 2023 mit GNU-Erweiterungen (experimentelle und unvollständige Unterstützung) übereinstimmen." +msgstr "Mit dem ISO-C++-Standardentwurf für 2026 mit GNU-Erweiterungen (experimentelle und unvollständige Unterstützung) übereinstimmen." #: c-family/c.opt:2586 #, no-c-format @@ -3636,16 +3611,14 @@ msgid "Conform to the ISO 2017 C standard (published in 2018) with GNU extension msgstr "Mit dem ISO-C-Standard von 2017 (veröffentlicht 2018) mit GNU-Erweiterungen übereinstimmen." #: c-family/c.opt:2602 -#, fuzzy, no-c-format -#| msgid "Conform to the ISO 202X C standard draft with GNU extensions (experimental and incomplete support)." +#, no-c-format msgid "Conform to the ISO 2023 C standard draft (expected to be published in 2024) with GNU extensions (experimental and incomplete support)." -msgstr "Mit dem ISO-C-Standardentwurf für 202X mit GNU-Erweiterungen (experimentelle und unvollständige Unterstützung) übereinstimmen." +msgstr "Mit dem ISO-C-Standardentwurf für 2023 (Veröffentlichung für 2024 geplant) mit GNU-Erweiterungen (experimentelle und unvollständige Unterstützung) übereinstimmen." #: c-family/c.opt:2606 -#, fuzzy, no-c-format -#| msgid "Deprecated in favor of -std=gnu11." +#, no-c-format msgid "Deprecated in favor of -std=gnu23." -msgstr "Veraltet zugunsten von -std=gnu11." +msgstr "Veraltet zugunsten von -std=gnu23." #: c-family/c.opt:2610 c-family/c.opt:2614 #, no-c-format @@ -4065,7 +4038,7 @@ msgstr "Die D-Standardbibliothek dynamisch in das Compilat binden." #: m2/lang.opt:35 #, no-c-format msgid "turns on case statement label compile time checking when using an expression of an enum type." -msgstr "" +msgstr "schaltet die Kompilierzeitprüfung der Case-Anweisung ein, wenn ein Ausdruck eines Enumtyps verwendet wird." #: m2/lang.opt:39 #, no-c-format @@ -4090,12 +4063,12 @@ msgstr "zusätzliche semantische Überprüfung zur Compilezeit, fängt üblicher #: m2/lang.opt:55 #, no-c-format msgid "turns on compile time analysis in the first basic block of a procedure detecting access to uninitialized data." -msgstr "" +msgstr "schaltet die Kompilierzeitanalyse im ersten Basisblock einer Prozedur ein, die den Zugriff auf nicht initialisierte Daten erkennt." #: m2/lang.opt:59 #, no-c-format msgid "turns on compile time analysis to detect access to uninitialized variables, the checking can be specified by: known,cond,all." -msgstr "" +msgstr "schaltet die Kompilierzeitanalyse ein, um den Zugriff auf nicht initialisierte Variablen zu erkennen, die Überprüfung kann durch known,cond,all angegeben werden." #: m2/lang.opt:63 #, no-c-format @@ -4395,7 +4368,7 @@ msgstr "-fgo-embedcfg=<Datei>\tEingebettete Dateien über go:embed auflisten." #: go/lang.opt:66 #, no-c-format msgid "-fgo-importcfg=<file>\tProvide file that tells where to find imports." -msgstr "" +msgstr "-fgo-importcfg=<file>\tGibt die Datei an, die verrät, wo die Importe zu finden sind." #: go/lang.opt:70 #, no-c-format @@ -4480,22 +4453,22 @@ msgstr "Die maximale Tiefe der explodierten Knoten, die in einem Dot-Dump ersche #: analyzer/analyzer.opt:59 #, no-c-format msgid "The number of bytes at which to ellipsize string literals in analyzer text art diagrams." -msgstr "" +msgstr "Die Anzahl der Bytes, bei der Stringliterale in Analysator-Textdiagrammen verkürzt dargestellt werden sollen." #: analyzer/analyzer.opt:63 #, no-c-format msgid "The number of literal bytes to show at the head of a string literal in text art when ellipsizing it." -msgstr "" +msgstr "Die Anzahl der Bytes, die bei der Verkürzung am Anfang eines Zeichenkettenliterals angezeigt werden." #: analyzer/analyzer.opt:67 #, no-c-format msgid "The number of literal bytes to show at the tail of a string literal in text art when ellipsizing it." -msgstr "" +msgstr "Die Anzahl der Bytes, die bei der Verkürzung am Ende eines Zeichenkettenliterals angezeigt werden." #: analyzer/analyzer.opt:71 #, no-c-format msgid "The ideal width in characters of text art diagrams generated by the analyzer." -msgstr "" +msgstr "Die ideale Breite der vom Analysierer erzeugten Textdiagramme in Zeichen." #: analyzer/analyzer.opt:75 #, no-c-format @@ -4578,10 +4551,9 @@ msgid "Warn about code paths in which floating-point arithmetic is used in locat msgstr "Bei Codepfaden warnen, in denen Gleitkommaarithmetik verwendet wird, obwohl exakte Berechnungen erforderlich sind." #: analyzer/analyzer.opt:139 -#, fuzzy, no-c-format -#| msgid "Warn about code paths which appear to lead to infinite recursion." +#, no-c-format msgid "Warn about code paths which appear to lead to an infinite loop." -msgstr "Bei Codepfaden warnen, die anscheinend zu endloser Rekursion führen." +msgstr "Bei Codepfaden warnen, die anscheinend zu einer Endlosschleife führen." #: analyzer/analyzer.opt:143 #, no-c-format @@ -4609,10 +4581,9 @@ msgid "Warn about code paths in which a write or read to a buffer is out-of-boun msgstr "Bei Codepfaden warnen, in denen eine Lese- oder Schreiboperation auf einem Puffer außerhalb der Puffergrenzen stattfindet." #: analyzer/analyzer.opt:163 -#, fuzzy, no-c-format -#| msgid "Warn about code paths in which a write or read to a buffer is out-of-bounds." +#, no-c-format msgid "Warn about code paths in which undefined behavior would occur due to overlapping buffers." -msgstr "Bei Codepfaden warnen, in denen eine Lese- oder Schreiboperation auf einem Puffer außerhalb der Puffergrenzen stattfindet." +msgstr "Bei Codepfaden warnen, in denen überlappende Puffer zu undefiniertem Verhalten führen würden." #: analyzer/analyzer.opt:167 #, no-c-format @@ -4690,10 +4661,9 @@ msgid "Warn about code paths in which an unsanitized value is used as a size." msgstr "Bei Codepfaden warnen, in denen ein nicht überprüfter Wert als Größe verwendet wird." #: analyzer/analyzer.opt:227 -#, fuzzy, no-c-format -#| msgid "Warn about code paths which appear to lead to infinite recursion." +#, no-c-format msgid "Warn about code paths in in which a call is made to strtok with undefined behavior." -msgstr "Bei Codepfaden warnen, die anscheinend zu endloser Rekursion führen." +msgstr "Bei Codepfaden warnen, in denen ein Aufruf von strtok zu undefiniertem Verhalten führt." #: analyzer/analyzer.opt:231 #, no-c-format @@ -4741,10 +4711,9 @@ msgid "Warn about code paths in which an uninitialized value is used." msgstr "Bei Codepfaden warnen, in denen ein uninitialisierter Wert verwendet wird." #: analyzer/analyzer.opt:267 -#, fuzzy, no-c-format -#| msgid "Warn if the code is too complicated for the analyzer to fully explore." +#, no-c-format msgid "Warn if expressions are too complicated for the analyzer to fully track." -msgstr "Warnen, wenn der Code so kompliziert ist, dass er nicht vollständig analysiert werden kann." +msgstr "Warnen, wenn Ausdrücke so kompliziert sind, dass sie nicht vollständig verfolgt werden können." #: analyzer/analyzer.opt:271 #, no-c-format @@ -4759,7 +4728,7 @@ msgstr "Die Analyse auf die Prüfung mit dem angegebenen Namen einschränken." #: analyzer/analyzer.opt:279 #, no-c-format msgid "Add extra annotations to diagrams." -msgstr "" +msgstr "Zusätzliche Anmerkungen zu Diagrammen hinzufügen." #: analyzer/analyzer.opt:283 #, no-c-format @@ -4799,7 +4768,7 @@ msgstr "Transitivität von Beschränkungen während der Analyse berücksichtigen #: analyzer/analyzer.opt:311 #, no-c-format msgid "Show events within system headers in analyzer execution paths." -msgstr "" +msgstr "Ereignisse in Systemheadern in den Ausführungspfaden des Analysierers anzeigen." #: analyzer/analyzer.opt:315 #, no-c-format @@ -4872,10 +4841,9 @@ msgid "Dump various analyzer internals to SRCFILE.*.fg.dot and SRCFILE.*.tg.dot. msgstr "Diverse Interna des Analysierers nach SRCFILE.*.fg.dot und SRCFILE.*.tg.dot wegschreiben." #: analyzer/analyzer.opt:371 -#, fuzzy, no-c-format -#| msgid "Dump various analyzer internals to SRCFILE.analyzer.txt." +#, no-c-format msgid "Dump various analyzer internals to SRCFILE.*.infinite-loop.dot." -msgstr "Diverse Interna des Analysierers nach SRCFILE.analyzer.txt wegschreiben." +msgstr "Diverse Interna des Analysierers nach SRCFILE.*.infinite-loop.dot wegschreiben." #: analyzer/analyzer.opt:375 #, no-c-format @@ -5313,10 +5281,9 @@ msgid "Do not add a default symbol exports to modules or dynamic libraries." msgstr "Keine Standardsymbolexporte zu Modulen oder dynamischen Bibliotheken hinzufügen." #: config/darwin.opt:246 -#, fuzzy, no-c-format -#| msgid "Do not add a default symbol exports to modules or dynamic libraries." +#, no-c-format msgid "Do not add default run paths (for the compiler library directories) to executables, modules or dynamic libraries." -msgstr "Keine Standardsymbolexporte zu Modulen oder dynamischen Bibliotheken hinzufügen." +msgstr "Keinen Standardausführungspfad (für die Bibliotheksverzeichnisse des Compilers) zu Programmen, Modulen oder dynamischen Bibliotheken hinzufügen." #: config/darwin.opt:250 #, no-c-format @@ -5864,7 +5831,7 @@ msgstr "-march=\tCode für die angegebene RISC-V-ISA (z.B. RV64IM) erzeugen. ISA #: config/riscv/riscv.opt:91 #, no-c-format msgid "-march=help\tPrint supported -march extensions." -msgstr "" +msgstr "-march=help\tUnterstützte -march-Erweiterungen ausgeben." #: config/riscv/riscv.opt:103 config/mips/mips.opt:430 #, no-c-format @@ -5981,8 +5948,7 @@ msgid "Set the version of RISC-V ISA spec." msgstr "Die Version der RISC-V-ISA-Spezifikation festlegen." #: config/riscv/riscv.opt:509 -#, fuzzy, no-c-format -#| msgid "Enable conditional move instruction usage." +#, no-c-format msgid "Enable conditional moves unconditionally." msgstr "Verwendung bedingter Kopierbefehle einschalten." @@ -5992,59 +5958,54 @@ msgid "Always inline subword atomic operations." msgstr "Atomare Operationen, die sich auf Teilwörter beziehen, stets inlinen." #: config/riscv/riscv.opt:517 -#, fuzzy, no-c-format -#| msgid "Use caller save register across calls if possible." +#, no-c-format msgid "Inline strcmp calls if possible." -msgstr "Vom Aufrufer zu sichernde Register über Aufrufe hinweg verwenden, wenn möglich." +msgstr "Aufrufe von strcmp inlinen, wenn möglich." #: config/riscv/riscv.opt:521 -#, fuzzy, no-c-format -#| msgid "Use caller save register across calls if possible." +#, no-c-format msgid "Inline strncmp calls if possible." -msgstr "Vom Aufrufer zu sichernde Register über Aufrufe hinweg verwenden, wenn möglich." +msgstr "Aufrufe von strncmp inlinen, wenn möglich." #: config/riscv/riscv.opt:525 -#, fuzzy, no-c-format -#| msgid "Reduce stack alignment on call sites if possible." +#, no-c-format msgid "Inline strlen calls if possible." -msgstr "Stapelausrichtung im Aufrufer reduzieren, wenn möglich." +msgstr "Aufrufe von strlen inlinen, wenn möglich." #: config/riscv/riscv.opt:529 #, no-c-format msgid "Max number of bytes to compare as part of inlined strcmp/strncmp routines (default: 64)." -msgstr "" +msgstr "Maximale Anzahl der zu vergleichenden Bytes als Teil der geinlineten strcmp/strncmp-Routinen (Vorgabe: 64)." #: config/riscv/riscv.opt:533 -#, fuzzy, no-c-format -#| msgid "Valid arguments to -mcode-readable=:" +#, no-c-format msgid "Valid arguments to -param=riscv-autovec-preference=:" -msgstr "Gültige Argumente für -mcode-readable=:" +msgstr "Gültige Argumente für -param=riscv-autovec-preference=:" #: config/riscv/riscv.opt:546 #, no-c-format msgid "-param=riscv-autovec-preference=<string>\tSet the preference of auto-vectorization in the RISC-V port." -msgstr "" +msgstr "-param=riscv-autovec-preference=<string>\tPräferenz der Auto-Vektorisierung im RISC-V-Port festlegen." #: config/riscv/riscv.opt:550 #, no-c-format msgid "The RVV possible LMUL (-param=riscv-autovec-lmul=):" -msgstr "" +msgstr "Die möglichen RVV-LMUL (-param=riscv-autovec-lmul=):" #: config/riscv/riscv.opt:569 #, no-c-format msgid "-param=riscv-autovec-lmul=<string>\tSet the RVV LMUL of auto-vectorization in the RISC-V port." -msgstr "" +msgstr "-param=riscv-autovec-lmul=<string>\tDie RVV-LMUL der Auto-Vektorisierung im RISC-V-Port festlegen." #: config/riscv/riscv.opt:576 -#, fuzzy, no-c-format -#| msgid "Valid arguments to -mstringop-strategy=:" +#, no-c-format msgid "Valid arguments to -param=vsetvl-strategy=:" -msgstr "Gültige Arguments für -mstringop-strategy=:" +msgstr "Gültige Argumente für -param=vsetvl-strategy=:" #: config/riscv/riscv.opt:589 #, no-c-format msgid "-param=vsetvl-strategy=<string>\tSet the optimization level of VSETVL insert pass." -msgstr "" +msgstr "-param=vsetvl-strategy=<string>\tOptimierungsstufe des VSETVL-Einfügedurchgangs festlegen." #: config/riscv/riscv.opt:593 config/i386/i386.opt:496 #, no-c-format @@ -6052,10 +6013,9 @@ msgid "Valid arguments to -mstringop-strategy=:" msgstr "Gültige Arguments für -mstringop-strategy=:" #: config/riscv/riscv.opt:609 -#, fuzzy, no-c-format -#| msgid "Specify memset expansion strategy when expected size is known." +#, no-c-format msgid "Specify stringop expansion strategy." -msgstr "Expansionsstrategie für memset bei bekannter erwarteter Größe angeben." +msgstr "Expansionsstrategie für stringop angeben." #: config/m32c/m32c.opt:23 #, no-c-format @@ -6208,16 +6168,14 @@ msgid "Workaround for ARM Cortex-A53 Erratum number 843419." msgstr "Umgehung von Erratum 843419 für ARM-Cortex-A53." #: config/aarch64/aarch64.opt:102 -#, fuzzy, no-c-format -#| msgid "Specify how to access the thread pointer." +#, no-c-format msgid "The register used to access the thread pointer:" -msgstr "Angeben, wie auf den Threadzeiger zugegriffen wird." +msgstr "Das Register, das für den Zugriff auf den Threadzeiger verwendet wird:" #: config/aarch64/aarch64.opt:133 -#, fuzzy, no-c-format -#| msgid "Specify thread pointer register number." +#, no-c-format msgid "Specify the thread pointer register." -msgstr "Registernummer für Threadzeiger angeben." +msgstr "Das Register für den Threadzeiger angeben." #: config/aarch64/aarch64.opt:137 #, no-c-format @@ -6302,7 +6260,7 @@ msgstr "Annäherung der Division einschalten. Dies reduziert die Genauigkeit der #: config/aarch64/aarch64.opt:254 #, no-c-format msgid "Specify when to enable an early register allocation pass. The possibilities are: all functions, functions that have access to strided multi-register instructions, and no functions." -msgstr "" +msgstr "Angeben, wann ein früher Registerzuweisungsdurchlauf aktiviert werden soll. Möglichkeiten: alle Funktionen, Funktionen, die Zugriff auf großschrittige Multi-Register-Anweisungen haben, und keine Funktionen." #: config/aarch64/aarch64.opt:260 #, no-c-format @@ -6327,12 +6285,12 @@ msgstr "Code generieren, um mitzuverfolgen, wann die CPU falsch spekulieren kön #: config/aarch64/aarch64.opt:294 #, no-c-format msgid "Enable the copy of the AArch64 load/store pair fusion pass that runs before register allocation." -msgstr "" +msgstr "Kopie des AArch64-Lade/Speicher-Paar-Fusionspasses, der vor der Registerzuweisung ausgeführt wird, aktivieren." #: config/aarch64/aarch64.opt:299 #, no-c-format msgid "Enable the copy of the AArch64 load/store pair fusion pass that runs after register allocation." -msgstr "" +msgstr "Kopie des AArch64-Lade/Speicher-Paar-Fusionspasses, der nach der Registerzuweisung ausgeführt wird, aktivieren." #: config/aarch64/aarch64.opt:318 #, no-c-format @@ -6352,7 +6310,7 @@ msgstr "Atomare Operationen durch Hilfsfunktionen implementieren." #: config/aarch64/aarch64.opt:337 #, no-c-format msgid "When vectorizing, consider using multiple different approaches and use the cost model to choose the cheapest one." -msgstr "" +msgstr "Bei der Vektorisierung mehrere verschiedene Ansätze in Betracht ziehen und das Kostenmodell verwenden, um den günstigsten auszuwählen." #: config/aarch64/aarch64.opt:342 #, no-c-format @@ -6387,22 +6345,22 @@ msgstr "Begrenzen, wie weit der Autovektorisierer eine Schleife abrollen darf." #: config/aarch64/aarch64.opt:372 #, no-c-format msgid "--param=aarch64-ldp-policy=[default|always|never|aligned] Fine-grained policy for load pairs." -msgstr "" +msgstr "--param=aarch64-ldp-policy=[default|always|never|aligned] Feinkörnige Richtlinie für Ladepaare." #: config/aarch64/aarch64.opt:376 #, no-c-format msgid "--param=aarch64-stp-policy=[default|always|never|aligned] Fine-grained policy for store pairs." -msgstr "" +msgstr "--param=aarch64-stp-policy=[default|always|never|aligned] Feinkörnige Richtlinie für Speicherpaare." #: config/aarch64/aarch64.opt:395 #, no-c-format msgid "Limit on number of alias checks performed when attempting to form an ldp/stp." -msgstr "" +msgstr "Begrenzung der Anzahl der Alias-Prüfungen, die beim Versuch, ein ldp/stp-Paar zu bilden, durchgeführt werden." #: config/aarch64/aarch64.opt:399 #, no-c-format msgid "Param to control which writeback opportunities we try to handle in the load/store pair fusion pass. A value of zero disables writeback handling. One means we try to form pairs involving one or more existing individual writeback accesses where possible. A value of two means we also try to opportunistically form writeback opportunities by folding in trailing destructive updates of the base register used by a pair." -msgstr "" +msgstr "Parameter, mit dem gesteuert wird, welche Rückschreibegelegenheiten im Load/Store-Paar-Fusionsdurchlauf behandelt werden sollen. Der Wert 0 deaktiviert die Rückschreibebehandlung. Der Wert 1 versucht Paare zu bilden, die nach Möglichkeit einen oder mehrere bestehende individuelle Rückschreibzugriffe beinhalten. Der Wert 2 versucht opportunistisch Rückschreibgelegenheiten zu bilden, indem nachlaufende destruktive Aktualisierungen des von einem Paar verwendeten Basisregisters einklappen." #: config/linux.opt:24 #, no-c-format @@ -7005,7 +6963,7 @@ msgstr "Umgelagerte Nur-Lese-Daten in .data-Abschnitt legen." #: config/i386/mingw.opt:23 #, no-c-format msgid "Preprocess, compile or link with specified C RunTime DLL library." -msgstr "" +msgstr "Vorverarbeiten, Kompilieren oder Binden mit der angegebenen C-Laufzeit-DLL-Bibliothek." #: config/i386/mingw.opt:33 #, no-c-format @@ -7100,10 +7058,9 @@ msgid "Branches are this expensive (arbitrary units)." msgstr "Verzweigungen sind so teuer wie hier angegeben (beliebige Einheit)." #: config/i386/i386.opt:300 -#, fuzzy, no-c-format -#| msgid "-mlarge-data-threshold=<number>\tData greater than given threshold will go into .ldata section in x86-64 medium model." +#, no-c-format msgid "-mlarge-data-threshold=<number>\tData greater than given threshold will go into a large data section in x86-64 medium and large code models." -msgstr "-mlarge-data-threshold=<Anzahl>\tDaten größer als angegebener Schwellwert werden in .ldata-Abschnitt im x86-64 Medium-Modell gehen." +msgstr "-mlarge-data-threshold=<Anzahl>\tDaten größer als der angegebene Schwellwert landen in einem Abschnitt für große Daten, in den x86-64-Modellen Mittel und Groß." #: config/i386/i386.opt:304 #, no-c-format @@ -7358,7 +7315,7 @@ msgstr "Bekannte bevorzugte Länge von Registervektoren (für Verwendung mit der #: config/i386/i386.opt:652 #, no-c-format msgid "Enable floating-point status flags setting SSE vector operations on partial vectors." -msgstr "" +msgstr "Aktivieren Sie Gleitkomma-Statusflags, die SSE-Vektoroperationen auf Teilvektoren setzen." #: config/i386/i386.opt:656 #, no-c-format @@ -8036,74 +7993,64 @@ msgid "Support AMX-COMPLEX built-in functions and code generation." msgstr "Eingebaute Funktionen und Codeerzeugung für AMX-COMPLEX unterstützen." #: config/i386/i386.opt:1303 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVXVNNIINT8 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVXVNNIINT16 built-in functions and code generation." -msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 und AVXVNNIINT8 unterstützen." +msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 und AVXVNNIINT16 unterstützen." #: config/i386/i386.opt:1308 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM3 built-in functions and code generation." -msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX und FMA unterstützen." +msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX und SM3 unterstützen." #: config/i386/i386.opt:1313 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SHA512 built-in functions and code generation." -msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX und AVX2 unterstützen." +msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX und SHA512 unterstützen." #: config/i386/i386.opt:1318 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM4 built-in functions and code generation." -msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX und FMA unterstützen." +msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX und SM4 unterstützen." #: config/i386/i386.opt:1323 -#, fuzzy, no-c-format -#| msgid "Enable vectorization on trees." +#, no-c-format msgid "Enable vectorization for gather instruction." -msgstr "Vektorisierung auf Bäumen einschalten." +msgstr "Vektorisierung für Gathering-Befehl einschalten." #: config/i386/i386.opt:1327 -#, fuzzy, no-c-format -#| msgid "Enable vectorization on trees." +#, no-c-format msgid "Enable vectorization for scatter instruction." -msgstr "Vektorisierung auf Bäumen einschalten." +msgstr "Vektorisierung für Scatter-Befehl einschalten." #: config/i386/i386.opt:1331 #, no-c-format msgid "Support code generation for APX features, including EGPR, PUSH2POP2, NDD and PPX." -msgstr "" +msgstr "Codegenerierung für APX-Funktionen unterstützen, einschließlich EGPR, PUSH2POP2, NDD und PPX." #: config/i386/i386.opt:1360 #, no-c-format msgid "Enable GPR32 in inline asm when APX_F enabled." -msgstr "" +msgstr "GPR32 in Inline-Asm einschalten, wenn APX_F eingeschaltet ist." #: config/i386/i386.opt:1364 -#, fuzzy, no-c-format -#| msgid "Support BMI2 built-in functions and code generation." +#, no-c-format msgid "Support 512 bit vector built-in functions and code generation." -msgstr "Eingebaute Funktionen und Codeerzeugung für BMI2 unterstützen." +msgstr "Eingebaute Funktionen und Codeerzeugung für 512-Bit-Vektoren unterstützen." #: config/i386/i386.opt:1368 -#, fuzzy, no-c-format -#| msgid "Support AES built-in functions and code generation." +#, no-c-format msgid "Support USER_MSR built-in functions and code generation." -msgstr "Eingebaute AES-Funktionen und Codeerzeugung unterstützen." +msgstr "Eingebaute USER_MSR-Funktionen und Codeerzeugung unterstützen." #: config/i386/i386.opt:1372 config/i386/i386.opt:1382 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1 built-in functions and code generation." -msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 und AVX512F unterstützen." +msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 und AVX10.1 unterstützen." #: config/i386/i386.opt:1377 -#, fuzzy, no-c-format -#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation." +#, no-c-format msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1-512 built-in functions and code generation." -msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 und AVX512F unterstützen." +msgstr "Eingebaute Funktionen und Codeerzeugung für MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 und AVX10.1-512 unterstützen." #: config/pa/pa64-hpux.opt:23 #, no-c-format @@ -8554,12 +8501,12 @@ msgstr "Bei RAM-Zugriff X wie durch Hardware vorgegeben verwenden, d.h. Pre-Dekr #: config/avr/avr.opt:99 #, no-c-format msgid "The device has the bitfield NVMCTRL_CTRLB.FLMAP. This option is used internally." -msgstr "" +msgstr "Das Gerät hat das Bitfeld NVMCTRL_CTRLB.FLMAP. Diese Option wird intern verwendet." #: config/avr/avr.opt:103 #, no-c-format msgid "The device has the .rodata section located in the RAM area." -msgstr "" +msgstr "Auf dem Gerät befindet sich der Abschnitt .rodata im RAM-Bereich." #: config/avr/avr.opt:108 #, no-c-format @@ -8899,7 +8846,7 @@ msgstr "Alle Argumentregister auf dem Stapelspeicher sichern." #: config/s390/s390.opt:335 #, no-c-format msgid "Assume external symbols to be potentially unaligned. By default all symbols without explicit alignment are assumed to reside on a 2 byte boundary as mandated by the IBM Z ABI." -msgstr "" +msgstr "Annehmen, dass externe Symbole potenziell nicht ausgerichtet sind. Standardmäßig wird bei allen Symbolen ohne explizite Ausrichtung davon ausgegangen, dass sie sich auf einer 2-Byte-Grenze befinden, wie von der IBM Z ABI vorgeschrieben." #: config/rl78/rl78.opt:27 config/rx/elf.opt:26 config/csky/csky.opt:198 #, no-c-format @@ -10205,26 +10152,24 @@ msgid "Allow hardware floating-point instructions to cover both 32-bit and 64-bi msgstr "Hardware-Gleitkommabefehle erlauben, um 32-Bit- und 64-Bit-Befehle abzudecken." #: config/loongarch/loongarch.opt:81 -#, fuzzy, no-c-format -#| msgid "FPU types of LoongArch:" +#, no-c-format msgid "SIMD extension levels of LoongArch:" -msgstr "FPU-Typen von LoongArch:" +msgstr "SIMD-Erweiterungsstufen von LoongArch:" #: config/loongarch/loongarch.opt:94 -#, fuzzy, no-c-format -#| msgid "-march=ISA\tGenerate code for the given ISA." +#, no-c-format msgid "-msimd=SIMD\tGenerate code for the given SIMD extension." -msgstr "-march=ISA\tCode für das gegebene ISA erzeugen." +msgstr "-msimd=SIMD\tCode für die angegebene SIMD-Erweiterung erzeugen." #: config/loongarch/loongarch.opt:98 #, no-c-format msgid "Enable LoongArch SIMD Extension (LSX, 128-bit)." -msgstr "" +msgstr "LoongArch SIMD-Erweiterung (LSX, 128-bit) einschalten." #: config/loongarch/loongarch.opt:102 #, no-c-format msgid "Enable LoongArch Advanced SIMD Extension (LASX, 256-bit)." -msgstr "" +msgstr "Erweiterung für LoongArch Advanced SIMD (LASX, 256-bit) einschalten." #: config/loongarch/loongarch.opt:107 #, no-c-format @@ -10282,10 +10227,9 @@ msgid "-mmax-inline-memcpy-size=SIZE\tSet the max size of memcpy to inline, defa msgstr "-mmax-inline-memcpy-size=SIZE\tDie maximale Größe von inline-memcpy festlegen, Standard ist 1024." #: config/loongarch/loongarch.opt:189 config/mips/mips.opt:150 -#, fuzzy, no-c-format -#| msgid "The code model option names for -mcmodel:" +#, no-c-format msgid "The code model option names for -mexplicit-relocs:" -msgstr "Codemodell-Optionsnamen für -mcmodel:" +msgstr "Die Optionsnamen für Codemodelle für -mexplicit-relocs:" #: config/loongarch/loongarch.opt:202 config/mips/mips.opt:163 #, no-c-format @@ -10293,16 +10237,14 @@ msgid "Use %reloc() assembly operators." msgstr "%reloc()-Assembleroperatoren verwenden." #: config/loongarch/loongarch.opt:206 config/mips/mips.opt:167 -#, fuzzy, no-c-format -#| msgid "Use %reloc() assembly operators." +#, no-c-format msgid "Use %reloc() assembly operators (for backward compatibility)." -msgstr "%reloc()-Assembleroperatoren verwenden." +msgstr "%reloc()-Assembleroperatoren verwenden (für Abwärtskompatibilität)." #: config/loongarch/loongarch.opt:210 -#, fuzzy, no-c-format -#| msgid "Generate software reciprocal divide and square root for better throughput." +#, no-c-format msgid "Generate approximate reciprocal divide and square root for better throughput." -msgstr "Reziproke Division und Quadratwurzel in Software für besseren Durchsatz erzeugen." +msgstr "Näherungsweise reziproke Division und Quadratwurzel für besseren Durchsatz erzeugen." #: config/loongarch/loongarch.opt:245 #, no-c-format @@ -10310,44 +10252,39 @@ msgid "Avoid using the GOT to access external symbols." msgstr "Die GOT möglichst nicht verwenden, um auf externe Symbole zuzugreifen." #: config/loongarch/loongarch.opt:254 -#, fuzzy, no-c-format -#| msgid "Enable relaxing in the assembler." +#, no-c-format msgid "Pass -mrelax or -mno-relax option to the assembler." -msgstr "Lockerung im Assembler einschalten." +msgstr "Die Option -mrelax oder -mno-relax an den Assembler übergeben." #: config/loongarch/loongarch.opt:258 -#, fuzzy, no-c-format -#| msgid "Used to limit unroll factor which indicates how much the autovectorizer may unroll a loop. The default value is 4." +#, no-c-format msgid "Used to limit unroll factor which indicates how much the autovectorizer may unroll a loop. The default value is 6." -msgstr "Den Abrollfaktor begrenzen, der angibt, wie weit der Autovektorisierer eine Schleife abrollen darf. Voreinstellung ist 4." +msgstr "Den Abrollfaktor begrenzen, der angibt, wie weit der Autovektorisierer eine Schleife abrollen darf. Voreinstellung ist 6." #: config/loongarch/loongarch.opt:276 -#, fuzzy, no-c-format -#| msgid "Support flag-preserving add-carry instructions." +#, no-c-format msgid "Support frecipe.{s/d} and frsqrte.{s/d} instructions." -msgstr "Flag-erhaltende Add-Carry-Befehle unterstützen." +msgstr "Die Befehle frecipe.{s/d} und frsqrte.{s/d} unterstützen." #: config/loongarch/loongarch.opt:280 #, no-c-format msgid "Support div.w[u] and mod.w[u] instructions with inputs not sign-extended." -msgstr "" +msgstr "Die Befehle div.w[u] und mod.w[u] für Eingaben ohne Vorzeichenerweiterung unterstützen." #: config/loongarch/loongarch.opt:284 -#, fuzzy, no-c-format -#| msgid "Support XSAVEC instructions." +#, no-c-format msgid "Support am{swap/add}[_db].{b/h} instructions." -msgstr "XSAVEC-Befehle unterstützen." +msgstr "Die Befehle am{swap/add}[_db].{b/h} unterstützen." #: config/loongarch/loongarch.opt:288 -#, fuzzy, no-c-format -#| msgid "Support XSAVEC instructions." +#, no-c-format msgid "Support amcas[_db].{b/h/w/d} instructions." -msgstr "XSAVEC-Befehle unterstützen." +msgstr "Die Befehle amcas[_db].{b/h/w/d} unterstützen." #: config/loongarch/loongarch.opt:292 #, no-c-format msgid "Do not need load-load barriers (dbar 0x700)." -msgstr "" +msgstr "Es werden keine load-load-Barrieren benötigt (dbar 0x700)." #: config/or1k/elf.opt:28 #, no-c-format @@ -12525,16 +12462,14 @@ msgid "Warn about invalid OpenACC dimensions." msgstr "Bei ungültigen OpenACC-Dimensionen warnen." #: config/gcn/gcn.opt:92 -#, fuzzy, no-c-format -#| msgid "SRAM-ECC modes:" +#, no-c-format msgid "SRAM-ECC and XNACK modes:" -msgstr "SRAM-ECC-Modi:" +msgstr "Modi für SRAM-ECC und XNACK:" #: config/gcn/gcn.opt:108 -#, fuzzy, no-c-format -#| msgid "Compile for devices requiring XNACK enabled. Default off." +#, no-c-format msgid "Compile for devices requiring XNACK enabled. Default \"any\" if USM is supported." -msgstr "Für Geräte kompilieren, die aktiviertes XNACK erfordern. Standardmäßig ausgeschaltet." +msgstr "Für Geräte kompilieren, die aktiviertes XNACK erfordern. Standardmäßig »any«, wenn USM unterstützt wird." #: config/gcn/gcn.opt:112 #, no-c-format @@ -12587,34 +12522,29 @@ msgid "Enable 32-bit jump instructions." msgstr "32-Bit-Sprungbefehle einschalten." #: config/bpf/bpf.opt:64 -#, fuzzy, no-c-format -#| msgid "Enable asan store operations protection." +#, no-c-format msgid "Enable general atomic operations introduced in v3 ISA." -msgstr "ASan-Schutz für Speicheroperationen einschalten." +msgstr "Allgemeine atomare Operationen einschalten, die in v3 ISA eingeführt wurden." #: config/bpf/bpf.opt:68 -#, fuzzy, no-c-format -#| msgid "Enable 32-bit jump instructions." +#, no-c-format msgid "Enable byte swap instructions." -msgstr "32-Bit-Sprungbefehle einschalten." +msgstr "Bytetauschbefehle einschalten." #: config/bpf/bpf.opt:72 -#, fuzzy, no-c-format -#| msgid "Enable divide and modulus instructions." +#, no-c-format msgid "Enable signed division and modulus instructions." -msgstr "Divisions- und Modulobefehle einschalten." +msgstr "Vorzeichenbehaftete Divisions- und Modulobefehle einschalten." #: config/bpf/bpf.opt:76 -#, fuzzy, no-c-format -#| msgid "Enable divide and modulus instructions." +#, no-c-format msgid "Enable signed move and memory load instructions." -msgstr "Divisions- und Modulobefehle einschalten." +msgstr "Vorzeichenbehaftete Kopier- und Ladebefehle einschalten." #: config/bpf/bpf.opt:102 -#, fuzzy, no-c-format -#| msgid "Known assembler dialects (for use with the -masm= option):" +#, no-c-format msgid "Known assembler dialects (for use with the -masm= option)" -msgstr "Bekannte Assemblerdialekte (für Verwendung mit Option »-masm=«):" +msgstr "Bekannte Assemblerdialekte (für Verwendung mit Option »-masm=«)" #: config/mips/mips.opt:32 #, no-c-format @@ -12697,10 +12627,9 @@ msgid "Use Enhanced Virtual Addressing instructions." msgstr "Befehle zur Erweiterten Virtuellen Adressierung verwenden." #: config/mips/mips.opt:171 -#, fuzzy, no-c-format -#| msgid "Does nothing. Preserved for backward compatibility." +#, no-c-format msgid "Don't use %reloc() assembly operators (for backward compatibility)." -msgstr "Tut nichts. Für Rückwärtskompatibilität erhalten." +msgstr "Assembleroperatoren %reloc() nicht verwenden (für Rückwärtskompatibilität)." #: config/mips/mips.opt:175 #, no-c-format @@ -12963,10 +12892,9 @@ msgid "Optimize lui/addiu address loads." msgstr "lui/addiu-Adressladebefehle optimieren." #: config/mips/mips.opt:406 -#, fuzzy, no-c-format -#| msgid "Enable MUL instructions." +#, no-c-format msgid "Enable the MIPS16e V2 instructions." -msgstr "MUL-Befehle einschalten." +msgstr "Die MIPS16e-V2-Befehle einschalten." #: config/mips/mips.opt:410 #, no-c-format @@ -13441,7 +13369,7 @@ msgstr "Die Opcodes ENTER_S und LEAVE_S für ARCv2 einschalten." #: config/vxworks-smp.opt:25 #, no-c-format msgid "Select VxWorks SMP C runtimes for linking." -msgstr "" +msgstr "SMP-C-Laufzeiten von VxWorks zum Linken auswählen." #: lto/lang.opt:50 #, no-c-format @@ -13701,7 +13629,7 @@ msgstr "Beim Versuch der Freigabe eines Nicht-Heap-Objektes warnen." #: common.opt:639 #, no-c-format msgid "Warn when -fhardened did not enable an option from its set." -msgstr "" +msgstr "Warnen, wenn »-fhardened« eine Option nicht aktiviert hat." #: common.opt:650 #, no-c-format @@ -13844,10 +13772,9 @@ msgid "Warn about functions which might be candidates for __attribute__((malloc) msgstr "Bei Funktionen, die Kandidaten für __attribute__((malloc)) sein könnten, warnen." #: common.opt:790 -#, fuzzy, no-c-format -#| msgid "Warn about functions which might be candidates for __attribute__((noreturn))." +#, no-c-format msgid "Warn about functions which might be candidates for __attribute__((returns_nonnull))." -msgstr "Bei Funktionen, die Kandidaten für __attribute__((noreturn)) sein könnten, warnen." +msgstr "Bei Funktionen, die Kandidaten für __attribute__((returns_nonnull)) sein könnten, warnen." #: common.opt:794 #, no-c-format @@ -14187,7 +14114,7 @@ msgstr "Optimierungsdurchlauf zur Kopierübertragung von Registern durchführen. #: common.opt:1263 #, no-c-format msgid "Fold instructions calculating memory offsets to the memory access instruction if possible." -msgstr "" +msgstr "Befehle, die Speicher-Offsets berechnen, wenn möglich in die Speicherzugriffsbefehl einbetten." #: common.opt:1267 #, no-c-format @@ -14300,10 +14227,9 @@ msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics." msgstr "-fdiagnostics-color=[never|always|auto]\tDiagnosemeldungen einfärben." #: common.opt:1394 -#, fuzzy, no-c-format -#| msgid "Enable verbose output." +#, no-c-format msgid "Enable formatting of JSON output." -msgstr "Wortreiche Ausgabe einschalten." +msgstr "Formatierung der JSON-Ausgabe einschalten." #: common.opt:1398 #, no-c-format @@ -14378,7 +14304,7 @@ msgstr "Stapeltiefe der Ereignisse in Pfaden anzeigen." #: common.opt:1525 #, no-c-format msgid "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tDetermine which characters to use in text arg diagrams." -msgstr "" +msgstr "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tLegt fest, welche Zeichen in Text-Arg-Diagrammen verwendet werden." #: common.opt:1544 #, no-c-format @@ -14643,7 +14569,7 @@ msgstr "Erraten der Sprungwahrscheinlichkeiten einschalten." #: common.opt:1834 #, no-c-format msgid "Enable various security-relevant flags." -msgstr "" +msgstr "Verschiedene sicherheitsrelevante Optionen einschalten." #: common.opt:1838 #, no-c-format @@ -14656,31 +14582,29 @@ msgid "Harden conditional branches by checking reversed conditions." msgstr "Bedingte Zweigen härten, indem die entgegengesetzten Bedingungen geprüft werden." #: common.opt:1846 -#, fuzzy, no-c-format -#| msgid "Harden conditionals not used in branches, checking reversed conditions." +#, no-c-format msgid "Harden control flow by recording and checking execution paths." -msgstr "Bedingungen, die nicht in den Zweigen verwendet werden, härten, indem die entgegengesetzten Bedingungen geprüft werden." +msgstr "Kontrollfluss härten, indem Ausführungspfade aufgezeichnet und geprüft werden." #: common.opt:1850 -#, fuzzy, no-c-format -#| msgid "disable pass %s for function %s" +#, no-c-format msgid "Disable CFR in leaf functions." -msgstr "Durchlauf %s für Funktion %s ausschalten" +msgstr "CFR in Blattfunktionen ausschalten." #: common.opt:1854 #, no-c-format msgid "Check CFR execution paths also before calls followed by returns of their results." -msgstr "" +msgstr "CFR-Ausführungspfade auch vor Aufrufen prüfen, die ihre Ergebnisse zurückgeben." #: common.opt:1858 #, no-c-format msgid "Check CFR execution paths also when exiting a function through an exception." -msgstr "" +msgstr "CFR-Ausführungspfade auch prüfen, wenn eine Funktion aufgrund einer Exception verlassen wird." #: common.opt:1862 #, no-c-format msgid "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]\tCheck CFR execution paths also before calling noreturn functions." -msgstr "" +msgstr "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]\tCFR-Ausführungspfade auch prüfen, bevor noreturn-Funktionen aufgerufen werden." #: common.opt:1885 #, no-c-format @@ -14750,7 +14674,7 @@ msgstr "__atomic-Operationen »inline« erzeugen, wenn Lock-freie Befehlssequenz #: common.opt:1968 #, no-c-format msgid "-finline-stringops[=memcmp|memcpy|memmove|memset] Expand supported mem/str operations inline, even if against optimization." -msgstr "" +msgstr "-finline-stringops[=memcmp|memcpy|memmove|memset] Unterstützte mem/str-Operationen inline expandieren, auch wenn dies der Optimierung widerspricht." #: common.opt:1999 #, no-c-format @@ -14998,10 +14922,9 @@ msgid "-fmessage-length=<number>\tLimit diagnostics to <number> characters per l msgstr "-fmessage-length=<Anzahl>\tDiagnosemeldungen auf <Anzahl> Zeichen pro Zeile beschränken. 0 unterdrückt Zeilenumbruch." #: common.opt:2279 -#, fuzzy, no-c-format -#| msgid "Align the start of functions." +#, no-c-format msgid "Align the start of every function." -msgstr "Funktionsanfänge ausrichten." +msgstr "Die Anfänge jeder Funktion ausrichten." #: common.opt:2283 #, no-c-format @@ -15636,34 +15559,32 @@ msgstr "Vorzeichenbehafteten Überlauf als undefiniertes Verhalten behandeln. Wi #: common.opt:2931 #, no-c-format msgid "Disable stack scrub entirely, disregarding strub attributes." -msgstr "" +msgstr "Stapelschrubben komplett ausschalten, unabhängig von Strub-Attributen." #: common.opt:2935 #, no-c-format msgid "Enable stack scrub as per attributes, with strict call checking." -msgstr "" +msgstr "Stapelschrubben gemäß der Attribute einschalten, mit strenger Aufrufprüfung." #: common.opt:2944 #, no-c-format msgid "Restore default strub mode: as per attributes, with relaxed checking." -msgstr "" +msgstr "Standard-Strub-Modus wiederherstellen: gemäß Attributen, mit lockerer Prüfung." #: common.opt:2948 -#, fuzzy, no-c-format -#| msgid "Enable hwasan instrumentation of builtin functions." +#, no-c-format msgid "Enable stack scrubbing for all viable functions." -msgstr "hwasan-Instrumentierung für eingebaute Funktionen einschalten." +msgstr "Stapelschrubben für alle geeigneten Funktionen einschalten." #: common.opt:2952 #, no-c-format msgid "Enable at-calls stack scrubbing for all viable functions." -msgstr "" +msgstr "Stapelschrubben für At-Aufrufe für alle geeigneten Funktionen einschalten." #: common.opt:2956 -#, fuzzy, no-c-format -#| msgid "Enable interrupt stack instructions." +#, no-c-format msgid "Enable internal stack scrubbing for all viable functions." -msgstr "Interrupt-Stapelbefehle einschalten." +msgstr "Internes Stapelschrubben für alle geeigneten Funktionen einschalten." #: common.opt:2960 #, no-c-format @@ -15718,7 +15639,7 @@ msgstr "Für Ziele, die normalerweise Trampoline für geschachtelte Funktionen b #: common.opt:3016 #, no-c-format msgid "Whether trampolines are generated in executable memory rather than executable stack." -msgstr "" +msgstr "Ob Trampoline in ausführbarem Speicher statt in ausführbarem Stapelspeicher erzeugt werden." #: common.opt:3034 #, no-c-format @@ -16121,10 +16042,9 @@ msgid "Assume assembler support for view in (DWARF2+) .loc directives." msgstr "Assembler-Unterstützung für Ansicht in (DWARF2+-).loc-Direktiven annehmen." #: common.opt:3483 -#, fuzzy, no-c-format -#| msgid "Generate debug information in VMS format." +#, no-c-format msgid "Generate debug information in CodeView format." -msgstr "Fehlersuchinformationen im VMS-Format erzeugen." +msgstr "Fehlersuchinformationen im CodeView-Format erzeugen." #: common.opt:3503 #, no-c-format @@ -16454,7 +16374,7 @@ msgstr "Der Skalierungsfaktor, der auf die Anzahl der Anweisungen in einem Threa #: params.opt:139 #, no-c-format msgid "Whether the target fully pipelines FMA instructions. If non-zero, reassociation considers the benefit of parallelizing FMA's multiplication part and addition part, assuming FMUL and FMA use the same units that can also do FADD." -msgstr "" +msgstr "Ob das Zielsystem FMA-Befehle vollständig in der Pipeline verarbeitet. Bei einem Wert ungleich Null wird bei der Neuzuordnung der Vorteil der Parallelisierung des Multiplikationsteils und des Additionsteils von FMA berücksichtigt, wobei davon ausgegangen wird, dass FMUL und FMA die gleichen Einheiten verwenden, die auch FADD ausführen können." #: params.opt:146 #, no-c-format @@ -16509,12 +16429,12 @@ msgstr "Höchstzahl der Parameter in einem SCoP." #: params.opt:186 #, no-c-format msgid "Maximum number of blocks for -fharden-control-flow-redundancy." -msgstr "" +msgstr "Maximale Blockanzahl für -fharden-control-flow-redundancy." #: params.opt:190 #, no-c-format msgid "Maximum number of blocks for in-line -fharden-control-flow-redundancy." -msgstr "" +msgstr "Maximale Blockanzahl für in-line -fharden-control-flow-redundancy." #: params.opt:194 #, no-c-format @@ -17575,13 +17495,12 @@ msgstr "Höchstzahl der geschachtelten Aufrufe, die bei der Analyse für uniniti #: params.opt:1126 #, no-c-format msgid "Maximum number of predicates anded for each predicate ored in the normalized predicate chain." -msgstr "" +msgstr "Maximale Anzahl von und-verknüpften Prädikaten, die für jedes oder-verknüpfte Prädikat in der normalisierten Prädikatskette vorkommen." #: params.opt:1131 -#, fuzzy, no-c-format -#| msgid "Maximum number of bases stored in each modref tree." +#, no-c-format msgid "Maximum number of predicates ored in the normalized predicate chain." -msgstr "Höchstzahl der Basen, die pro modref-Baum gespeichert werden." +msgstr "Maximale Anzahl der Prädikate, die oder-verknüpft in der normalisierten Prädikatskette vorkommen." #: params.opt:1135 #, no-c-format @@ -17669,22 +17588,19 @@ msgid "Enable loop vectorization of floating point inductions." msgstr "Schleifenvektorisierung von Gleitkommabefehlen einschalten." #: params.opt:1203 -#, fuzzy, no-c-format -#| msgid "Maximum number of basic blocks before EVRP uses a sparse cache." +#, no-c-format msgid "Maximum number of basic blocks before VRP uses a sparse bitmap cache." -msgstr "Höchstzahl der Basis-Blöcke, bevor EVRP einen spärlich gefüllten Cache verwendet." +msgstr "Höchstzahl der Basis-Blöcke, bevor VRP einen spärlich gefüllten Bitmap-Cache verwendet." #: params.opt:1207 -#, fuzzy, no-c-format -#| msgid "Maximum number of outgoing edges in a switch before EVRP will not process it." +#, no-c-format msgid "Maximum number of outgoing edges in a switch before VRP will not process it." -msgstr "Höchstzahl der ausgehenden Kanten in einem Switch, bevor EVRP sie nicht mehr verarbeitet." +msgstr "Höchstzahl der ausgehenden Kanten in einem Switch, bevor VRP sie nicht mehr verarbeitet." #: params.opt:1211 -#, fuzzy, no-c-format -#| msgid "Maximum number of basic blocks before EVRP uses a sparse cache." +#, no-c-format msgid "Maximum number of basic blocks for VRP to use a basic cache vector." -msgstr "Höchstzahl der Basis-Blöcke, bevor EVRP einen spärlich gefüllten Cache verwendet." +msgstr "Höchstzahl der Basis-Blöcke, bevor VRP einen grundlegenden Cachevektor verwendet." #: cfgrtl.cc:2822 msgid "flow control insn inside a basic block" @@ -18517,10 +18433,9 @@ msgstr "" "Fehler in der deutschen Übersetzung sind an translation-team-de@lists.sourceforge.net zu melden.\n" #: gcov-tool.cc:595 -#, fuzzy, c-format -#| msgid "Copyright %s 2023 Free Software Foundation, Inc.\n" +#, c-format msgid "Copyright %s 2024 Free Software Foundation, Inc.\n" -msgstr "Copyright %s 2023 Free Software Foundation, Inc.\n" +msgstr "Copyright %s 2024 Free Software Foundation, Inc.\n" #: gcov.cc:927 #, c-format @@ -18694,10 +18609,9 @@ msgid "gcov %s%s\n" msgstr "gcov %s%s\n" #: gcov.cc:969 -#, fuzzy, c-format -#| msgid "collect2 version %s\n" +#, c-format msgid "JSON format version: %s\n" -msgstr "collect2-Version %s\n" +msgstr "JSON-Format-Version: %s\n" #: gcov.cc:1367 #, c-format @@ -19529,10 +19443,9 @@ msgid "incompatible floating point / vector register operand for '%%%c'" msgstr "unverträglicher Gleitkomma- / Vektorregisteroperand für »%%%c«" #: config/aarch64/aarch64.cc:12061 -#, fuzzy, c-format -#| msgid "incompatible register operand for '%%%c'" +#, c-format msgid "incompatible operand for '%%%c'" -msgstr "unverträglicher Registeroperand für »%%%c«" +msgstr "unverträglicher Operand für »%%%c«" #: config/aarch64/aarch64.cc:12081 #, c-format @@ -19685,22 +19598,19 @@ msgid "invalid operand to %%p code" msgstr "ungültiger Operand für Code %%p" #: config/arc/arc.cc:4940 -#, fuzzy, c-format -#| msgid "invalid operand to %%s code" +#, c-format msgid "invalid operand for %%s code" msgstr "ungültiger Operand für Code %%s" #: config/arc/arc.cc:4958 -#, fuzzy, c-format -#| msgid "invalid operand to %%N code" +#, c-format msgid "invalid operand for %%N code" msgstr "ungültiger Operand für Code %%N" #: config/arc/arc.cc:4971 -#, fuzzy, c-format -#| msgid "invalid operand to %%N code" +#, c-format msgid "invalid operand for %%N or %%S code" -msgstr "ungültiger Operand für Code %%N" +msgstr "ungültiger Operand für Code %%N oder %%S" #: config/arc/arc.cc:4993 config/m32r/m32r.cc:2080 #, c-format @@ -20267,40 +20177,28 @@ msgid "unknown insn mode" msgstr "unbekannter Befehlsmodus" #: config/i386/i386.cc:23578 -#, fuzzy -#| msgid "invalid conversion from type %<bfloat16_t%>" msgid "invalid conversion from type %<__bf16%> without option %<-msse2%>" -msgstr "ungültige Umwandlung von Typ %<bfloat16_t%>" +msgstr "ungültige Umwandlung von Typ %<__bf16%> ohne Option %<-msse2%>" #: config/i386/i386.cc:23581 -#, fuzzy -#| msgid "invalid conversion from type %<bfloat16_t%>" msgid "invalid conversion from type %<_Float16%> without option %<-msse2%>" -msgstr "ungültige Umwandlung von Typ %<bfloat16_t%>" +msgstr "ungültige Umwandlung von Typ %<_Float16%> ohne Option %<-msse2%>" #: config/i386/i386.cc:23584 -#, fuzzy -#| msgid "invalid conversion to type %<bfloat16_t%>" msgid "invalid conversion to type %<__bf16%> without option %<-msse2%>" -msgstr "ungültige Umwandlung in Typ %<bfloat16_t%>" +msgstr "ungültige Umwandlung in Typ %<__bf16%> ohne Option %<-msse2%>" #: config/i386/i386.cc:23587 -#, fuzzy -#| msgid "invalid conversion to type %<bfloat16_t%>" msgid "invalid conversion to type %<_Float16%> without option %<-msse2%>" -msgstr "ungültige Umwandlung in Typ %<bfloat16_t%>" +msgstr "ungültige Umwandlung in Typ %<_Float16%> ohne Option %<-msse2%>" #: config/i386/i386.cc:23625 config/i386/i386.cc:23650 -#, fuzzy -#| msgid "operation not permitted on type %<bfloat16_t%>" msgid "operation not permitted on type %<__bf16%> without option %<-msse2%>" -msgstr "Operation nicht erlaubt auf Typ %<bfloat16_t%>" +msgstr "Operation nicht erlaubt auf Typ %<__bf16%> ohne Option %<-msse2%>" #: config/i386/i386.cc:23628 config/i386/i386.cc:23654 -#, fuzzy -#| msgid "operation not permitted on type %<bfloat16_t%>" msgid "operation not permitted on type %<_Float16%> without option %<-msse2%>" -msgstr "Operation nicht erlaubt auf Typ %<bfloat16_t%>" +msgstr "Operation nicht erlaubt auf Typ %<_Float16%> ohne Option %<-msse2%>" #: config/ia64/ia64.cc:5470 #, c-format @@ -20933,10 +20831,9 @@ msgid "'o' operand is not constant" msgstr "»o«-Operand ist nicht konstant" #: config/stormy16/stormy16.cc:1980 -#, fuzzy, c-format -#| msgid "'B' operand is not constant" +#, c-format msgid "'h' operand is not SImode register" -msgstr "»B«-Operand ist nicht konstant" +msgstr "»h«-Operand ist kein SImode-Register" #: config/stormy16/stormy16.cc:1988 #, c-format @@ -21393,10 +21290,8 @@ msgid "In lambda function" msgstr "In Lambda-Funktion" #: cp/error.cc:3712 -#, fuzzy -#| msgid "In static member function %qD" msgid "In explicit object member function %qD" -msgstr "In statischer Elementfunktion %qD" +msgstr "In expliziter Objektelementfunktion %qD" #: cp/error.cc:3714 msgid "In member function %qD" @@ -21596,16 +21491,12 @@ msgstr "" "\n" #: fortran/error.cc:1043 -#, fuzzy -#| msgid "new in Fortran 2003" msgid "Prohibited in Fortran 2023:" -msgstr "neu in Fortran 2003" +msgstr "Verboten in Fortran 2023:" #: fortran/error.cc:1045 -#, fuzzy -#| msgid "Fortran 2018:" msgid "Fortran 2023:" -msgstr "Fortran 2018:" +msgstr "Fortran 2023:" #: fortran/error.cc:1047 msgid "Fortran 2018 deleted feature:" @@ -21703,10 +21594,8 @@ msgid "new in Fortran 2018" msgstr "neu in Fortran 2018" #: fortran/intrinsic.cc:4896 -#, fuzzy -#| msgid "new in Fortran 2003" msgid "new in Fortran 2023" -msgstr "neu in Fortran 2003" +msgstr "neu in Fortran 2023" #: fortran/intrinsic.cc:4900 msgid "a GNU Fortran extension" @@ -22239,10 +22128,8 @@ msgid "value computed is not used" msgstr "berechneter Wert ist unbenutzt" #: go/gofrontend/expressions.cc:1986 -#, fuzzy -#| msgid "expected function name" msgid "unexpected reference to package" -msgstr "Funktionsname erwartet" +msgstr "unerwarteter Verweis auf Paket" #: go/gofrontend/expressions.cc:3840 go/gofrontend/expressions.cc:3856 msgid "constant refers to itself" @@ -22424,33 +22311,27 @@ msgstr "Anzahl der Ergebnisse passt nicht zur Anzahl der Werte" #: go/gofrontend/expressions.cc:14671 msgid "invalid 3-index slice of object that is not a slice" -msgstr "" +msgstr "ungültiges 3-Index-Slice eines Objekts, das kein Slice ist" #: go/gofrontend/expressions.cc:14674 msgid "attempt to slice object that is not array, slice, or string" -msgstr "" +msgstr "Versuch, ein Objekt zu schneiden, das weder Array, Slice noch String ist" #: go/gofrontend/expressions.cc:14677 msgid "attempt to index object that is not array, slice, string, or map" -msgstr "" +msgstr "Versuch, ein Objekt zu indizieren, das weder Array, Slice, String noch Map ist" #: go/gofrontend/expressions.cc:14730 -#, fuzzy -#| msgid "expected integer expression" msgid "attempt to index type expression" -msgstr "Ganzzahlausdruck erwartet" +msgstr "Versuch, einen Typausdruck zu indizieren" #: go/gofrontend/expressions.cc:14757 -#, fuzzy -#| msgid "invalid left hand side of assignment" msgid "invalid 3-index slice of string" -msgstr "ungültige linke Seite einer Zuweisung" +msgstr "ungültige 3-Index-Scheibe einer Zeichenkette" #: go/gofrontend/expressions.cc:14770 -#, fuzzy -#| msgid "invalid use of type" msgid "invalid slice of map" -msgstr "ungültige Typ-Verwendung" +msgstr "ungültige Scheibe einer Map" #: go/gofrontend/expressions.cc:14779 go/gofrontend/expressions.cc:15970 msgid "incompatible type for map index" @@ -22462,15 +22343,15 @@ msgstr "Schnittstelle oder Zeiger auf Schnittstelle erwartet" #: go/gofrontend/expressions.cc:18212 msgid "may only omit types within composite literals of slice, array, or map type" -msgstr "" +msgstr "der Typ darf nur innerhalb zusammengesetzter Literale vom Typ Slice, Array oder Map weggelassen werden" #: go/gofrontend/expressions.cc:18306 go/gofrontend/expressions.cc:18618 msgid "map composite literal must have keys" -msgstr "" +msgstr "zusammengesetztes Map-Literal muss Schlüssel haben" #: go/gofrontend/expressions.cc:18651 msgid "expected struct, slice, array, or map type for composite literal" -msgstr "" +msgstr "zusammengesetztes Literal kann nur Struct, Slice, Array oder Map sein" #: go/gofrontend/expressions.cc:19266 go/gofrontend/statements.cc:2121 msgid "type assertion only valid for interface types" @@ -22499,20 +22380,16 @@ msgid "cannot fallthrough final case in switch" msgstr "fallthrough ist bei letztem Fall einer switch-Anweisung unmöglich" #: go/gofrontend/statements.cc:1288 -#, fuzzy -#| msgid "cannot use %qs as a call-used register" msgid "cannot use %<_%> as value" -msgstr "%qs kann nicht als ein rufverwendetes Register verwendet werden" +msgstr "%<_%> kann nicht als Wert verwendet werden" #: go/gofrontend/statements.cc:1300 go/gofrontend/statements.cc:2528 msgid "invalid left hand side of assignment" msgstr "ungültige linke Seite einer Zuweisung" #: go/gofrontend/statements.cc:1309 -#, fuzzy -#| msgid "incompatible types in binary expression" msgid "incompatible type in binary expression" -msgstr "inkompatible Typen in binärem Ausdruck" +msgstr "inkompatibler Typ in binärem Ausdruck" #: go/gofrontend/statements.cc:1555 msgid "use of untyped nil" @@ -22523,10 +22400,8 @@ msgid "expected map index on right hand side" msgstr "Abbildungsindex auf rechter Seite erwartet" #: go/gofrontend/statements.cc:2534 -#, fuzzy -#| msgid "no pre-increment operator for type" msgid "increment or decrement of non-numeric type" -msgstr "kein Präinkrementoperator für Typ" +msgstr "Inkrement oder Dekrement eines nichtnumerischen Typs" #: go/gofrontend/statements.cc:3449 go/gofrontend/statements.cc:3464 msgid "not enough arguments to return" @@ -22694,7 +22569,7 @@ msgstr "Methode %s%s%s ist als go:nointerface gekennzeichnet" #: rust/resolve/rust-ast-resolve-expr.cc:140 #, c-format msgid "You have broken GCC Rust. This is a feature.\n" -msgstr "" +msgstr "Sie haben GCC-Rust kaputtgemacht. Dies ist ein Feature.\n" #: lto-streamer.h:1033 #, gcc-internal-format, gfc-internal-format @@ -23007,10 +22882,9 @@ msgid "Unrecognized option: %qs" msgstr "Unbekannte Option %qs" #: rust/lang.opt:90 -#, fuzzy, gcc-internal-format -#| msgid "unknown lam type %qs" +#, gcc-internal-format msgid "unknown crate type: '%qs'" -msgstr "unbekannter lam-Typ %qs" +msgstr "unbekannter Crate-Typ: %qs" #: rust/lang.opt:118 #, gcc-internal-format @@ -23059,16 +22933,14 @@ msgid "missing makefile target after %qs" msgstr "fehlendes Makefile-Ziel hinter %qs" #: c-family/c.opt:260 -#, fuzzy, gcc-internal-format -#| msgid "missing path after %qs" +#, gcc-internal-format msgid "missing format after %qs" -msgstr "fehlender Pfad hinter %qs" +msgstr "fehlendes Format hinter %qs" #: c-family/c.opt:264 -#, fuzzy, gcc-internal-format -#| msgid "missing path after %qs" +#, gcc-internal-format msgid "missing output path after %qs" -msgstr "fehlender Pfad hinter %qs" +msgstr "fehlender Ausgabepfad hinter %qs" #: c-family/c.opt:311 #, gcc-internal-format @@ -23146,10 +23018,9 @@ msgid "unknown pointer size model %qs" msgstr "unbekanntes Zeigergrößenmodell %qs" #: config/aarch64/aarch64.opt:379 -#, fuzzy, gcc-internal-format -#| msgid "unknown TLS model %qs" +#, gcc-internal-format msgid "unknown LDP/STP policy %qs" -msgstr "unbekanntes TLS-Modell %qs" +msgstr "unbekannte LDP/STP-Richtlinie %qs" #: config/i386/i386.opt:340 #, gcc-internal-format @@ -23169,27 +23040,27 @@ msgstr "%<-msse5%> wurde entfernt" #: config/i386/i386.opt:741 #, gcc-internal-format msgid "AVX512PF support will be removed in GCC 15" -msgstr "" +msgstr "AVX512PF-Unterstützung wird in GCC 15 entfernt" #: config/i386/i386.opt:745 #, gcc-internal-format msgid "AVX512ER support will be removed in GCC 15" -msgstr "" +msgstr "AVX512ER-Unterstützung wird in GCC 15 entfernt" #: config/i386/i386.opt:773 #, gcc-internal-format msgid "AVX5124FMAPS support will be removed in GCC 15" -msgstr "" +msgstr "AVX5124FMAPS-Unterstützung wird in GCC 15 entfernt" #: config/i386/i386.opt:777 #, gcc-internal-format msgid "AVX5124VNNIW support will be removed in GCC 15" -msgstr "" +msgstr "AVX5124VNNIW-Unterstützung wird in GCC 15 entfernt" #: config/i386/i386.opt:972 #, gcc-internal-format msgid "PREFETCHWT1 support will be removed in GCC 15" -msgstr "" +msgstr "PREFETCHWT1-Unterstützung wird in GCC 15 entfernt" #: config/i386/i386.opt:1286 #, gcc-internal-format @@ -23265,10 +23136,9 @@ msgid "unknown floating point contraction style %qs" msgstr "unbekannte Art der Gleitkomma-Kürzung %qs" #: common.opt:1865 -#, fuzzy, gcc-internal-format -#| msgid "unknown Live-Patching Level %qs" +#, gcc-internal-format msgid "unknown hardcfr noreturn checking level %qs" -msgstr "unbekannte Stufe %qs für Live-Patching" +msgstr "unbekannte Prüfstufe %qs für hardcfr noreturn" #: common.opt:1900 #, gcc-internal-format @@ -23278,7 +23148,7 @@ msgstr "Unbekannte Stufe %qs für Stapel-Wiederverwendung" #: common.opt:1972 #, gcc-internal-format msgid "unavailable stringop for inlining %qs" -msgstr "" +msgstr "nicht verfügbare Zeichenkettenoperation zum Inlinen von %qs" #: common.opt:2003 #, gcc-internal-format @@ -23341,10 +23211,9 @@ msgid "unknown TLS model %qs" msgstr "unbekanntes TLS-Modell %qs" #: common.opt:3020 -#, fuzzy, gcc-internal-format -#| msgid "unknown rust mangling option %qs" +#, gcc-internal-format msgid "unknown trampoline implementation %qs" -msgstr "unbekannte Rust-Mangling-Option %qs" +msgstr "unbekannte Trampolinimplementierung %qs" #: common.opt:3342 #, gcc-internal-format @@ -24836,10 +24705,9 @@ msgid "%<alias%> attribute ignored because function is defined" msgstr "Attribut %<alias%> ignoriert, da Funktion bereits definiert ist" #: cgraphunit.cc:921 -#, fuzzy, gcc-internal-format -#| msgid "%<always_inline%> function might not be inlinable" +#, gcc-internal-format msgid "%<always_inline%> function might not be inlinable unless also declared %<inline%>" -msgstr "%<always_inline%> Funktion ist möglicherweise nicht inlinefähig" +msgstr "die Funktion %<always_inline%> ist möglicherweise nicht inlinefähig, es sei denn, sie ist ebenfalls als %<inline%> deklariert" #: cgraphunit.cc:947 #, gcc-internal-format @@ -25093,10 +24961,9 @@ msgid "pointer value used where a floating-point was expected" msgstr "Zeigerwert verwendet, wo Gleitkommawert erwartet wurde" #: convert.cc:338 -#, fuzzy, gcc-internal-format -#| msgid "pointer value used where a floating-point was expected" +#, gcc-internal-format msgid "vector value used where a floating-point was expected" -msgstr "Zeigerwert verwendet, wo Gleitkommawert erwartet wurde" +msgstr "Vektorwert verwendet, wo Gleitkommawert erwartet wurde" #: convert.cc:342 #, gcc-internal-format @@ -25576,21 +25443,17 @@ msgid "cannot read spec file %qs: %m" msgstr "Spec-Datei %qs kann nicht gelesen werden: %m" #: gcc.cc:2412 gcc.cc:2432 -#, fuzzy -#| msgid "specs %%include syntax malformed after %ld characters" msgid "specs %%include syntax malformed after %td characters" -msgstr "falsche %%include-Syntax für Spezifikationen nach %ld Zeichen" +msgstr "specs %%include-Syntax nach %td Zeichen fehlerhaft" #: gcc.cc:2458 gcc.cc:2467 gcc.cc:2477 gcc.cc:2487 -#, fuzzy -#| msgid "specs %%rename syntax malformed after %ld characters" msgid "specs %%rename syntax malformed after %td characters" -msgstr "falsche %%rename-Syntax für Spezifikationen nach %ld Zeichen" +msgstr "specs %%rename-Syntax nach %td Zeichen fehlerhaft" #: gcc.cc:2497 #, gcc-internal-format, gfc-internal-format msgid "specs %s spec was not found to be renamed" -msgstr "keine %s-Spezifikation zum Umbenennen gefunden" +msgstr "specs: keine %s-Spezifikation zum Umbenennen gefunden" #: gcc.cc:2505 #, gcc-internal-format @@ -25598,16 +25461,12 @@ msgid "%s: attempt to rename spec %qs to already defined spec %qs" msgstr "%s: Versuch, Spezifikation %qs in bereits definierte Spezifikation %qs umzubenennen" #: gcc.cc:2527 -#, fuzzy -#| msgid "specs unknown %% command after %ld characters" msgid "specs unknown %% command after %td characters" -msgstr "Spezifikation: unbekannter %%-Befehl nach %ld Zeichen" +msgstr "specs: unbekannter %%-Befehl nach %td Zeichen" #: gcc.cc:2539 gcc.cc:2553 -#, fuzzy -#| msgid "specs file malformed after %ld characters" msgid "specs file malformed after %td characters" -msgstr "Fehler in Spezifikationsdatei nach %ld Zeichen" +msgstr "specs: Datei fehlerhaft nach %td Zeichen" #: gcc.cc:2608 #, gcc-internal-format @@ -25683,7 +25542,7 @@ msgstr "%qs ist eine unbekannte Option für %<-save-temps%>" #: gcc.cc:5024 #, gcc-internal-format msgid "linker hardening options not enabled by %<-fhardened%> because other link options were specified on the command line" -msgstr "" +msgstr "linker-Härtungsoptionen nicht durch %<-fhardened%> aktiviert, da andere Link-Optionen auf der Kommandozeile angegeben wurden" #: gcc.cc:5048 toplev.cc:712 #, gcc-internal-format @@ -26235,17 +26094,17 @@ msgstr "%s wird auf diesem Ziel nicht unterstützt" #: gimple-harden-control-flow.cc:97 #, gcc-internal-format msgid "%qD calls %<setjmp%> or similar, %<-fharden-control-flow-redundancy%> is not supported" -msgstr "" +msgstr "%qD ruft %<setjmp%> oder ähnliches auf, %<-fharden-control-flow-redundancy%> wird nicht unterstützt" #: gimple-harden-control-flow.cc:110 #, gcc-internal-format msgid "%qD receives nonlocal gotos, %<-fharden-control-flow-redundancy%> is not supported" -msgstr "" +msgstr "%qD empfängt nicht-lokale Gotos, %<-fharden-control-flow-redundancy%> wird nicht unterstützt" #: gimple-harden-control-flow.cc:121 #, gcc-internal-format msgid "%qD has more than %u blocks, the requested maximum for %<-fharden-control-flow-redundancy%>" -msgstr "" +msgstr "%qD hat mehr als %u Blöcke, das geforderte Maximum für %<-fharden-control-flow-redundancy%>" #: gimple-ssa-isolate-paths.cc:290 #, gcc-internal-format @@ -27718,10 +27577,9 @@ msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" msgstr "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" #: gimplify.cc:1399 -#, fuzzy, gcc-internal-format -#| msgid "%<allocate%> clause must specify an allocator here" +#, gcc-internal-format msgid "%<allocate%> directive for %qD inside a target region must specify an %<allocator%> clause" -msgstr "%<allocate%>-Klausel muss hier einen Allozierer angeben" +msgstr "%<allocate%>-Direktive für %qD in einer Zielregion muss eine %<allocator%>-Klausel angeben" #: gimplify.cc:2271 #, gcc-internal-format @@ -27821,16 +27679,14 @@ msgid "%qE not specified in enclosing OpenACC %qs construct" msgstr "%qE in umgebendem OpenACC-%qs-Konstrukt nicht angegeben" #: gimplify.cc:8056 -#, fuzzy, gcc-internal-format -#| msgid "enclosing OpenACC %qs construct" +#, gcc-internal-format msgid "enclosing OpenACC %qs construct and" -msgstr "umgebendes OpenACC-%qs-Konstrukt" +msgstr "umgebendes OpenACC-%qs-Konstrukt und" #: gimplify.cc:8059 -#, fuzzy, gcc-internal-format -#| msgid "enclosing OpenACC %qs construct" +#, gcc-internal-format msgid "enclosing OpenACC %qs construct with %qs clause" -msgstr "umgebendes OpenACC-%qs-Konstrukt" +msgstr "umgebendes OpenACC-%qs-Konstrukt mit %qs-Klausel" #: gimplify.cc:8129 #, gcc-internal-format @@ -28571,109 +28427,104 @@ msgid "function %qs, parameter %u, is used but does not have any certain IPA-SRA msgstr "Funktion %qs, Parameter %u, wird verwendet, hat aber keinen bestimmten IPA-SRA-Zugriff" #: ipa-strub.cc:620 -#, fuzzy, gcc-internal-format -#| msgid "pass %s does not support cloning" +#, gcc-internal-format msgid "at-calls %<strub%> does not support call to %qD" -msgstr "pass %s does not support cloning" +msgstr "at-calls %<strub%> does not support call to %qD" #: ipa-strub.cc:654 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> on the target system" -msgstr "" +msgstr "%qD ist für %<strub%> auf dem Zielsystem nicht geeignet" #: ipa-strub.cc:658 -#, fuzzy, gcc-internal-format -#| msgid "unsupported constant address:" +#, gcc-internal-format msgid "unsupported %<strub%> call on the target system" -msgstr "nicht unterstützte konstante Adresse:" +msgstr "nicht unterstützter %<strub%>-Aufruf auf dem Zielsystem" #: ipa-strub.cc:684 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because %<-fsplit-stack%> is enabled" -msgstr "" +msgstr "%qD ist nicht für %<strub%> geeignet, da %<-fsplit-stack%> eingeschaltet ist" #: ipa-strub.cc:697 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because of attribute %<noipa%>" -msgstr "" +msgstr "%qD ist für %<strub%> nicht geeignet wegen des Attributs %<noipa%>" #: ipa-strub.cc:712 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because of attribute %<simd%>" -msgstr "" +msgstr "%qD ist für %<strub%> nicht geeignet wegen des Attributs %<simd%>" #: ipa-strub.cc:846 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because of attribute %<noclone%>" -msgstr "" +msgstr "%qD ist nicht für das interne %<strub%> geeignet wegen des Attributs %<noclone%>" #: ipa-strub.cc:870 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because it calls %qD" -msgstr "" +msgstr "%qD ist nicht für das interne %<strub%> geeignet, da sie %qD aufruft" #: ipa-strub.cc:884 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because it contains a non-local goto target" -msgstr "" +msgstr "%qD ist nicht für das interne %<strub%> geeignet, da sie ein nicht-lokales Sprungziel enthält" #: ipa-strub.cc:897 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because the address of a local label escapes" -msgstr "" +msgstr "%qD ist nicht für das interne %<strub%> geeignet, da die Adresse eines lokalen Labels entwischt" #: ipa-strub.cc:936 -#, fuzzy, gcc-internal-format -#| msgid "%s does not support force_nonfallthru" +#, gcc-internal-format msgid "internal %<strub%> does not support forced labels" -msgstr "Interner Fehler: %s does not support force_nonfallthru" +msgstr "internes %<strub%> unterstützt keine erzwungenen Labels" #: ipa-strub.cc:950 -#, fuzzy, gcc-internal-format -#| msgid "too many arguments for format" +#, gcc-internal-format msgid "%qD has too many arguments for internal %<strub%>" -msgstr "zu viele Argumente für Format" +msgstr "%qD hat zu viele Argumente für internes %<strub%>" #: ipa-strub.cc:1227 #, gcc-internal-format msgid "%qD requires %<strub%>, but no viable %<strub%> mode was found" -msgstr "" +msgstr "%qD erfordert %<strub%>, aber es wurde kein geeigneter %<strub%>-Modus gefunden" #: ipa-strub.cc:1323 #, gcc-internal-format msgid "%<strub%> mode %qE selected for %qD, when %qE was requested" -msgstr "" +msgstr "%<strub%>-Modus %qE ausgewählt für %qD, es wurde jedoch %qE angefordert" #: ipa-strub.cc:1332 #, gcc-internal-format msgid "the incompatible selection was determined by ultimate alias target %qD" -msgstr "" +msgstr "die unvereinbare Auswahl wurde durch das ultimative Alias-Ziel %qD bestimmt" #: ipa-strub.cc:1679 #, gcc-internal-format msgid "indirect non-%<strub%> call in %<strub%> context %qD" -msgstr "" +msgstr "indirekter Nicht-%<strub%>-Aufruf im %<strub%>-Kontext %qD" #: ipa-strub.cc:1698 #, gcc-internal-format msgid "calling %<always_inline%> %<strub%> %qD in non-%<strub%> context %qD" -msgstr "" +msgstr "Aufruf von %<always_inline%> %<strub%> %qD in Nicht-%<strub%>-Kontext %qD" #: ipa-strub.cc:1708 #, gcc-internal-format msgid "calling non-%<strub%> %qD in %<strub%> context %qD" -msgstr "" +msgstr "Aufruf des Nicht-%<strub%>-Ausdrucks %qD im %<strub%>-Kontext %qD" #: ipa-strub.cc:1712 #, gcc-internal-format msgid "calling %qD using non-%<strub%> type %qT in %<strub%> context %qD" -msgstr "" +msgstr "Aufruf von %qD mit Nicht-%<strub%>-Typ %qT in %<strub%>-Kontext %qD" #: ipa-strub.cc:2834 -#, fuzzy, gcc-internal-format -#| msgid "failed to load pendings for %<%E%s%E%>" +#, gcc-internal-format msgid "failed to split %qD for %<strub%>" -msgstr "Fehler beim Laden der ausstehenden Einheiten für %<%E%s%E%>" +msgstr "%qD für %<strub%> konnte nicht aufgeteilt werden" #: ira.cc:2441 ira.cc:2463 #, gcc-internal-format @@ -28716,10 +28567,9 @@ msgid "maximum number of generated reload insns per insn achieved (%d)" msgstr "Höchstzahl der erzeugten Neuladebefehle pro Befehl ist erreicht (%d)" #: lra.cc:546 -#, fuzzy, gcc-internal-format -#| msgid "%<asm%> operand has impossible constraints" +#, gcc-internal-format msgid "%<asm%> operand has impossible constraints or there are not enough registers" -msgstr "%<asm%>-Operand hat unmögliche Nebenbedingungen" +msgstr "%<asm%>-Operand hat unmögliche Einschränkungen, oder es gibt nicht genug Register" #: lto-cgraph.cc:1171 #, gcc-internal-format @@ -29070,10 +28920,9 @@ msgid "invalid OpenMP non-rectangular loop step; %<(%E - %E) * %E%> is not a mul msgstr "ungültiger nicht-rechteckiger OpenMP-Schleifenschritt; %<(%E - %E) * %E%> ist kein Vielfaches von Schleife %d Schritt %qE" #: omp-general.cc:1283 -#, fuzzy, gcc-internal-format -#| msgid "array size expression is not supported yet" +#, gcc-internal-format msgid "%<target_device%> selector set is not supported yet" -msgstr "Ausdruck für Arraygröße wird noch nicht unterstützt" +msgstr "%<target_device%>-Selektormenge wird noch nicht unterstützt" #: omp-general.cc:1288 #, gcc-internal-format @@ -29396,10 +29245,9 @@ msgid "OpenMP runtime API call %qD in a region with %<device(ancestor)%> clause" msgstr "Aufruf der OpenMP-Laufzeit-API %qD in einer Region mit %<device(ancestor)%>-Klausel" #: omp-low.cc:9791 -#, fuzzy, gcc-internal-format -#| msgid "ignoring sink clause with offset that is not a multiple of the loop step" +#, gcc-internal-format msgid "ignoring %<sink%> clause with offset that is not a multiple of the loop step" -msgstr "»sink«-Klausel wird ignoriert, da der Offset kein Vielfaches der Schrittweite ist" +msgstr "%<sink%>-Klausel wird ignoriert, da der Offset kein Vielfaches der Schrittweite ist" #: omp-low.cc:9814 #, gcc-internal-format @@ -29760,12 +29608,12 @@ msgstr "Abschnittsanker müssen ausgeschaltet sein, wenn Toplevel-Neuordnung aus #: opts.cc:1105 #, gcc-internal-format msgid "%<-ftrivial-auto-var-init=zero%> is not enabled by %<-fhardened%> because it was specified on the command line" -msgstr "" +msgstr "%<-ftrivial-auto-var-init=zero%> wird von %<-fhardened%> nicht eingeschaltet, da es in der Befehlszeile angegeben wurde" #: opts.cc:1155 #, gcc-internal-format msgid "%<-fstack-protector-strong%> is not enabled by %<-fhardened%> because it was specified on the command line" -msgstr "" +msgstr "%<-fstack-protector-strong%> wird von %<-fhardened%> nicht eingeschaltet, da es in der Befehlszeile angegeben wurde" #: opts.cc:1200 #, gcc-internal-format @@ -30949,16 +30797,14 @@ msgid "global destructors not supported on this target" msgstr "globale Destruktoren werden für dieses Ziel nicht unterstützt" #: targhooks.cc:1802 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target%> attribute is not supported on this machine" -msgstr "Ziel-Attribut wird auf dieser Maschine nicht unterstützt" +msgstr "%<target%>-Attribut wird auf dieser Maschine nicht unterstützt" #: targhooks.cc:1814 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target_version%> attribute is not supported on this machine" -msgstr "Ziel-Attribut wird auf dieser Maschine nicht unterstützt" +msgstr "%<target_version%>-Attribut wird auf dieser Maschine nicht unterstützt" #: targhooks.cc:1828 #, gcc-internal-format @@ -31106,10 +30952,9 @@ msgid "%<-fassociative-math%> disabled; other options take precedence" msgstr "%<-fassociative-math%> abgeschaltet; andere Optionen haben Vorrang" #: toplev.cc:1576 -#, fuzzy, gcc-internal-format -#| msgid "%<-fdata-sections%> not supported for this target" +#, gcc-internal-format msgid "%<-fhardened%> not supported for this target" -msgstr "%<-fdata-sections%> wird für dieses Ziel nicht unterstützt" +msgstr "%<-fhardened%> wird für dieses Ziel nicht unterstützt" #: toplev.cc:1585 #, gcc-internal-format @@ -31119,7 +30964,7 @@ msgstr "%<-fstack-clash-protection%> wird auf Architekturen, deren Stapel von kl #: toplev.cc:1598 #, gcc-internal-format msgid "%<-fstack-clash-protection%> is not enabled by %<-fhardened%> because %<-fstack-check%> was specified on the command line" -msgstr "" +msgstr "%<-fstack-clash-protection%> wird von %<-fhardened%> nicht eingeschaltet, weil %<-fstack-check%> in der Befehlszeile angegeben wurde" #: toplev.cc:1608 #, gcc-internal-format @@ -31377,10 +31222,9 @@ msgid "%qs in gimple IL" msgstr "%qs in GIMPLE-IL" #: tree-cfg.cc:3357 -#, fuzzy, gcc-internal-format -#| msgid "used struct type value where scalar is required" +#, gcc-internal-format msgid "%qs as base where non-register is required" -msgstr "Wert eines struct-Typs anstelle des geforderten Skalars verwendet" +msgstr "%qs als Basis, es ist jedoch ein Nicht-Register erforderlich" #: tree-cfg.cc:3372 #, gcc-internal-format @@ -31656,10 +31500,9 @@ msgid "invalid operand in %qs" msgstr "ungültiger Operand in %qs" #: tree-cfg.cc:4676 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument in option %qs" +#, gcc-internal-format msgid "invalid %qs size argument in load" -msgstr "ungültiges Argument in Option %qs" +msgstr "ungültiges %qs-Größenargument beim Laden" #: tree-cfg.cc:4695 tree-cfg.cc:4721 #, gcc-internal-format @@ -31891,40 +31734,35 @@ msgstr "ENTRY_BLOCK has IL associated with it" msgid "EXIT_BLOCK has IL associated with it" msgstr "EXIT_BLOCK has IL associated with it" -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79878 #: tree-cfg.cc:5701 #, gcc-internal-format, gfc-internal-format msgid "fallthru to exit from bb %d" -msgstr "fallthru to exit from bb %d" +msgstr "Interner Fehler: fallthru to exit from bb %d" #: tree-cfg.cc:5707 -#, fuzzy, gcc-internal-format -#| msgid "extra brace group at end of initializer" +#, gcc-internal-format msgid "entry block count not initialized" -msgstr "zusätzliche geschweifte Klammern am Ende der Initialisierung" +msgstr "Interner Fehler: entry block count not initialized" #: tree-cfg.cc:5713 -#, fuzzy, gcc-internal-format -#| msgid "extra brace group at end of initializer" +#, gcc-internal-format msgid "exit block count not initialized" -msgstr "zusätzliche geschweifte Klammern am Ende der Initialisierung" +msgstr "Interner Fehler: exit block count not initialized" #: tree-cfg.cc:5720 #, gcc-internal-format msgid "probability of edge from entry block not initialized" -msgstr "" +msgstr "Interner Fehler: probability of edge from entry block not initialized" #: tree-cfg.cc:5735 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%qE is not initialized" +#, gcc-internal-format, gfc-internal-format msgid "count of bb %d not initialized" -msgstr "%qE ist nicht initialisiert" +msgstr "Interner Fehler: count of bb %d not initialized" #: tree-cfg.cc:5741 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Uninitialized probability of edge %i->%i" +#, gcc-internal-format, gfc-internal-format msgid "probability of edge %d->%d not initialized" -msgstr "Interner Fehler: Uninitialized probability of edge %i->%i" +msgstr "Interner Fehler: probability of edge %d->%d not initialized" #: tree-cfg.cc:5761 #, gcc-internal-format @@ -33252,10 +33090,9 @@ msgid "initializer for floating value is not a floating constant" msgstr "Initialisierung für Gleitkommawert ist keine Gleitkommakonstante" #: varasm.cc:5342 -#, fuzzy, gcc-internal-format -#| msgid "initializer for floating value is not a floating constant" +#, gcc-internal-format msgid "initializer for %<_BitInt(%d)%> value is not an integer constant" -msgstr "Initialisierung für Gleitkommawert ist keine Gleitkommakonstante" +msgstr "Initialisierer für %<_BitInt(%d)%>-Wert ist keine Ganzzahlkonstante" #: varasm.cc:5725 #, gcc-internal-format @@ -33449,28 +33286,24 @@ msgid "%qE attribute with unsupported boolean precision" msgstr "Attribut %qE mit nicht unterstützter Boolean-Genauigkeit" #: c-family/c-attribs.cc:1059 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute only supported on boolean types" +#, gcc-internal-format msgid "%qE attribute only supported in C" -msgstr "Attribut %qE wird nur für Boolean-Typen unterstützt" +msgstr "Attribut %qE wird nur in C unterstützt" #: c-family/c-attribs.cc:1066 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute only supported on boolean types" +#, gcc-internal-format msgid "%qE attribute only supported on integral types" -msgstr "Attribut %qE wird nur für Boolean-Typen unterstützt" +msgstr "Attribut %qE wird nur für Ganzzahltypen unterstützt" #: c-family/c-attribs.cc:1087 c-family/c-attribs.cc:1103 -#, fuzzy, gcc-internal-format -#| msgid "overflow in conversion from %qT to %qT changes value from %qE to %qE" +#, gcc-internal-format msgid "overflows in conversion from %qT to %qT changes value from %qE to %qE" msgstr "Überlauf in Umwandlung von %qT nach %qT ändert den Wert von %qE in %qE" #: c-family/c-attribs.cc:1112 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute argument value %qE refers to parameter type %qT" +#, gcc-internal-format msgid "%qE attribute requires different values for %<false%> and %<true%> for type %qT" -msgstr "Attributargument %qE hat den Wert %qE, der auf den Parametertyp %qT verweist" +msgstr "Attribut %qE erfordert unterschiedliche Werte für %<false%> und %<true%> für den Typ %qT" #: c-family/c-attribs.cc:1152 #, gcc-internal-format @@ -33489,28 +33322,24 @@ msgid "%qE argument not a string" msgstr "Argument %qE ist keine Zeichenkette" #: c-family/c-attribs.cc:1555 ada/gcc-interface/utils.cc:6793 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute ignored on objects of type %qT" +#, gcc-internal-format msgid "%qE attribute ignored because of argument %qE" -msgstr "Attribut %qE wird für Objekte vom Typ %qT ignoriert" +msgstr "Attribut %qE wird wegen des Arguments %qE ignoriert" #: c-family/c-attribs.cc:1576 ada/gcc-interface/utils.cc:6814 -#, fuzzy, gcc-internal-format -#| msgid "ignoring attribute %qE because it conflicts with attribute %qs" +#, gcc-internal-format msgid "ignoring attribute %qE because of excess arguments starting at %qE" -msgstr "Attribut %qE steht mit Attribut %qs in Konflikt; wird ignoriert" +msgstr "Attribut %qE wird wegen überzähliger Argumente, die mit %qE beginnen, ignoriert" #: c-family/c-attribs.cc:1590 ada/gcc-interface/utils.cc:6828 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute does not apply to types" +#, gcc-internal-format msgid "attribute %qE does not apply to elements of non-scalar type %qT" -msgstr "Attribut %qE kann nicht auf Typen angewandt werden" +msgstr "das Attribut %qE gilt nicht für Elemente des nicht skalaren Typs %qT" #: c-family/c-attribs.cc:1595 ada/gcc-interface/utils.cc:6833 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute does not apply to types" +#, gcc-internal-format msgid "attribute %qE does not apply to fields of aggregate type %qT" -msgstr "Attribut %qE kann nicht auf Typen angewandt werden" +msgstr "Attribut %qE gilt nicht für Felder des Aggregattyps %qT" #: c-family/c-attribs.cc:1661 #, gcc-internal-format @@ -34743,16 +34572,14 @@ msgid "argument %u in call to function %qE has pointer to %qs type (%qT)" msgstr "Argument %u in Aufruf von %qE darf kein Zeiger auf %qs sein (%qT)" #: c-family/c-common.cc:6535 c-family/c-common.cc:6620 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument %u in call to function %qE has enumerated type" -msgstr "Argument 3 in Aufruf von %qE darf kein enum-Typ sein" +msgstr "Argument %u in Aufruf von %qE hat Aufzählungstyp" #: c-family/c-common.cc:6541 c-family/c-common.cc:6626 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has boolean type" +#, gcc-internal-format msgid "argument %u in call to function %qE has boolean type" -msgstr "Argument 3 in Aufruf von %qE darf kein boolescher Typ sein" +msgstr "Argument %u in Aufruf von %qE ist ein boolescher Typ sein" #: c-family/c-common.cc:6554 #, gcc-internal-format @@ -34765,22 +34592,19 @@ msgid "argument %u in call to function %qE points to incomplete type" msgstr "Argument %u in Aufruf von %qE muss auf einen vollständigen Typ zeigen" #: c-family/c-common.cc:6604 -#, fuzzy, gcc-internal-format -#| msgid "argument %u in call to function %qE does not have pointer type" +#, gcc-internal-format msgid "argument %u in call to function %qE does not have %<int%> type" -msgstr "Argument %u in Aufruf von %qE muss ein Zeigertyp sein" +msgstr "Argument %u in Aufruf von %qE hat nicht den Typ %<int%>" #: c-family/c-common.cc:6635 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument 1 in call to function %qE has unsigned type" -msgstr "Argument 3 in Aufruf von %qE darf kein enum-Typ sein" +msgstr "Argument 1 in Aufruf von %qE hat einen vorzeichenlosen Typen" #: c-family/c-common.cc:6642 -#, fuzzy, gcc-internal-format -#| msgid "argument 3 in call to function %qE has enumerated type" +#, gcc-internal-format msgid "argument 1 in call to function %qE has signed type" -msgstr "Argument 3 in Aufruf von %qE darf kein enum-Typ sein" +msgstr "Argument 1 in Aufruf von %qE hat einen vorzeichenbehafteten Typen" #: c-family/c-common.cc:6905 rust/backend/rust-tree.cc:3601 #, gcc-internal-format @@ -35581,22 +35405,19 @@ msgid "stray %<\\%o%> in program" msgstr "verirrtes %<\\%o%> im Programm" #: c-family/c-lex.cc:1014 -#, fuzzy, gcc-internal-format -#| msgid "integer constant is too large for %<unsigned long%> type" +#, gcc-internal-format msgid "integer constant is too large for %<unsigned _BitInt(%d)%> type" -msgstr "Ganzzahlkonstante ist zu groß für %<unsigned long%>-Typ" +msgstr "Ganzzahlkonstante ist zu groß für %<unsigned _BitInt(%d)%>-Typ" #: c-family/c-lex.cc:1017 -#, fuzzy, gcc-internal-format -#| msgid "integer constant is too large for %<unsigned long%> type" +#, gcc-internal-format msgid "integer constant is too large for %<_BitInt(%d)%> type" -msgstr "Ganzzahlkonstante ist zu groß für %<unsigned long%>-Typ" +msgstr "Ganzzahlkonstante ist zu groß für %<_BitInt(%d)%>-Typ" #: c-family/c-lex.cc:1025 c/c-decl.cc:12651 -#, fuzzy, gcc-internal-format -#| msgid "%<__int%d%> is not supported on this target" +#, gcc-internal-format msgid "%<_BitInt(%d)%> is not supported on this target" -msgstr "%<__int%d%> wird für dieses Ziel nicht unterstützt" +msgstr "%<_BitInt(%d)%> wird für dieses Ziel nicht unterstützt" #: c-family/c-lex.cc:1077 #, gcc-internal-format @@ -35634,10 +35455,9 @@ msgid "non-standard suffix on floating constant" msgstr "Nicht-Standard-Suffix an Gleitkommakonstante" #: c-family/c-lex.cc:1223 c-family/c-lex.cc:1227 c-family/c-lex.cc:1232 -#, fuzzy, gcc-internal-format -#| msgid "non-standard suffix on floating constant" +#, gcc-internal-format msgid "non-standard suffix on floating constant before C23" -msgstr "Nicht-Standard-Suffix an Gleitkommakonstante" +msgstr "Nicht-Standard-Suffix an Gleitkommakonstante vor C23" #: c-family/c-lex.cc:1239 #, gcc-internal-format @@ -35815,10 +35635,11 @@ msgstr "die selben Schleifen-Iterationsvariablen %qD werden in mehreren verknüp msgid "two different outer iteration variables %qD and %qD used in a single loop" msgstr "zwei unterschiedliche äußere Iterationsvariablen %qD und %qD werden in einer einzigen Schleife verwendet" +# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114364 #: c-family/c-omp.cc:1810 #, gcc-internal-format msgid "variable %qD used %s is bound in intervening code" -msgstr "" +msgstr "Variable %qD wird %s verwendet, ist aber im dazwischenliegenden Code gebunden" #: c-family/c-omp.cc:2409 #, gcc-internal-format @@ -35879,7 +35700,7 @@ msgstr "veraltete Option %<-I-%> verwendet, bitte stattdessen %<-iquote%> verwen #: c-family/c-opts.cc:373 #, gcc-internal-format msgid "%<-fdeps-format=%> unknown format %<%s%>" -msgstr "" +msgstr "%<-fdeps-format=%> unbekanntes Format %<%s%>" #: c-family/c-opts.cc:455 #, gcc-internal-format @@ -35954,7 +35775,7 @@ msgstr "externe Funktionen zur TLS-Initialisierung werden auf diesem Ziel nicht #: c-family/c-opts.cc:1149 #, gcc-internal-format msgid "%<-fconcepts-ts%> is deprecated and will be removed in GCC 15; please convert your code to C++20 concepts" -msgstr "" +msgstr "%<-fconcepts-ts%> ist veraltet und wird in GCC 15 entfernt; bitte konvertieren Sie Ihren Code zu C++20-Konzepten" #: c-family/c-opts.cc:1158 #, gcc-internal-format @@ -35979,7 +35800,7 @@ msgstr "Abhängigkeitsdatei »%s« kann nicht geöffnet werden: %m" #: c-family/c-opts.cc:1381 #, gcc-internal-format msgid "%<-MF%> and %<-fdeps-file=%> cannot share an output file %s: %m" -msgstr "" +msgstr "%<-MF%> und %<-fdeps-file=%> können sich die Ausgabedatei %<%s%> nicht teilen: %m" #: c-family/c-opts.cc:1391 #, gcc-internal-format @@ -36014,17 +35835,17 @@ msgstr "%<-fdirectives-only%> ist mit %<-traditional%> unverträglich" #: c-family/c-opts.cc:1634 #, gcc-internal-format msgid "%<_FORTIFY_SOURCE%> is not enabled by %<-fhardened%> because optimizations are turned off" -msgstr "" +msgstr "%<_FORTIFY_SOURCE%> wird von %<-fhardened%> nicht eingeschaltet, da die Optimierungen ausgeschaltet sind" #: c-family/c-opts.cc:1638 #, gcc-internal-format msgid "%<_FORTIFY_SOURCE%> is not enabled by %<-fhardened%> because it was specified in %<-D%> or %<-U%>" -msgstr "" +msgstr "%<_FORTIFY_SOURCE%> wird von %<-fhardened%> nicht eingeschaltet, da es in %<-D%> oder %<-U%> angegeben wurde" #: c-family/c-opts.cc:1644 #, gcc-internal-format msgid "%<_GLIBCXX_ASSERTIONS%> is not enabled by %<-fhardened%> because it was specified in %<-D%> or %<-U%>" -msgstr "" +msgstr "%<_GLIBCXX_ASSERTIONS%> wird von %<-fhardened%> nicht eingeschaltet, da es in %<-D%> oder %<-U%> angegeben wurde" #: c-family/c-opts.cc:1768 #, gcc-internal-format @@ -36317,16 +36138,14 @@ msgid "%<#pragma GCC optimize%> string is badly formed" msgstr "%<#pragma GCC optimize%> Zeichenkette hat falsches Format" #: c-family/c-pragma.cc:1211 -#, fuzzy, gcc-internal-format -#| msgid "junk at end of %<#pragma push_options%>" +#, gcc-internal-format msgid "junk at end of %<#pragma GCC push_options%>" -msgstr "Ausschuss am Ende von %<#pragma push_options%>" +msgstr "Ausschuss am Ende von %<#pragma GCC push_options%>" #: c-family/c-pragma.cc:1248 -#, fuzzy, gcc-internal-format -#| msgid "junk at end of %<#pragma pop_options%>" +#, gcc-internal-format msgid "junk at end of %<#pragma GCC pop_options%>" -msgstr "Ausschuss am Ende von %<#pragma pop_options%>" +msgstr "Ausschuss am Ende von %<#pragma GCC pop_options%>" #: c-family/c-pragma.cc:1255 #, gcc-internal-format @@ -37120,21 +36939,19 @@ msgid "%<memset%> used with length equal to number of elements without multiplic msgstr "im Aufruf von %<memset%> ist die Länge gleich der Anzahl der Elemente angegeben, ohne sie mit der Elementgröße zu multiplizieren" #: c-family/c-warn.cc:2291 -#, fuzzy, gcc-internal-format -#| msgid "interrupt service routine can only have a pointer argument and an optional integer argument" +#, gcc-internal-format msgid "%qD sizes specified with %<sizeof%> in the earlier argument and not in the later argument" -msgstr "Interrupt-Service-Routine darf nur ein Zeiger- und ein optionales Ganzzahl-Argument haben" +msgstr "die Größe von %qD ist mit %<sizeof%> im früheren Argument angegeben, sollte aber im späteren stehen" #: c-family/c-warn.cc:2293 #, gcc-internal-format msgid "earlier argument should specify number of elements, later size of each element" -msgstr "" +msgstr "das frühere Argument sollte die Anzahl der Elemente angeben, das spätere Argument die Größe des einzelnen Elements" #: c-family/c-warn.cc:2332 -#, fuzzy, gcc-internal-format -#| msgid "floating point overflow in expression %qE of type %qT results in %qE" +#, gcc-internal-format msgid "allocation of insufficient size %qE for type %qT with size %qE" -msgstr "Gleitkommaüberlauf in Ausdruck %qE des Typs %qT ergibt %qE" +msgstr "Speicherallokation von ungenügender Größe %qE für Typ %qT mit Größe %qE" #: c-family/c-warn.cc:2409 #, gcc-internal-format @@ -37409,10 +37226,9 @@ msgid "too many input files" msgstr "zu viele Eingabedateien" #: c-family/known-headers.cc:322 -#, fuzzy, gcc-internal-format -#| msgid "%qs is defined in header %qs; did you forget to %<#include %s%>?" +#, gcc-internal-format msgid "%qs is defined in header %qs; this is probably fixable by adding %<#include %s%>" -msgstr "%qs ist im Header %qs definiert; haben Sie vergessen, %<#include %s%> zu schreiben?" +msgstr "%qs ist im Header %qs definiert; das ist wahrscheinlich behebbar, indem Sie %<#include %s%> hinzufügen" #: common/config/aarch64/aarch64-common.cc:415 config/aarch64/aarch64.cc:18466 #, gcc-internal-format @@ -37612,29 +37428,26 @@ msgstr "%<-march=%s%>: Erweiterung %qs kommt mehr als einmal vor" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99291 #: common/config/riscv/riscv-common.cc:676 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs is unsupported standard single letter extension" -msgstr "%<-march=%s%>: Erweiterung %qs kommt mehr als einmal vor" +msgstr "%<-march=%s%>: Erweiterung %qs ist eine nicht unterstützte Einbuchstaben-Erweiterung" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99291 #: common/config/riscv/riscv-common.cc:684 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 'z' but is unsupported standard extension" -msgstr "%<-march=%s%>: Erweiterung %qs kommt mehr als einmal vor" +msgstr "%<-march=%s%>: die Erweiterung %qs beginnt mit %<z%>, ist aber eine nicht unterstützte Standarderweiterung" #: common/config/riscv/riscv-common.cc:692 #, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 's' but is unsupported standard supervisor extension" -msgstr "" +msgstr "%<-march=%s%>: Erweiterung %qs beginnt mit %<s%>, ist aber eine nicht unterstützte Standard-Supervisor-Erweiterung" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99291 #: common/config/riscv/riscv-common.cc:700 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: extension %qs starts with 'x' but is unsupported non-standard extension" -msgstr "%<-march=%s%>: Erweiterung %qs kommt mehr als einmal vor" +msgstr "%<-march=%s%>: Erweiterung %qs beginnt mit %<x%>, ist jedoch eine nicht unterstützte Nicht-Standard-Erweiterung" #: common/config/riscv/riscv-common.cc:947 #, gcc-internal-format @@ -37667,17 +37480,15 @@ msgid "%<-march=%s%>: first ISA subset must be %<e%>, %<i%> or %<g%>" msgstr "%<-march=%s%>: erste ISA-Teilmenge muss %<e%>, %<i%> oder %<g%> sein" #: common/config/riscv/riscv-common.cc:1089 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: expect number after %<%dp%>" +#, gcc-internal-format msgid "%<-march=%s%>: Not single-letter extension. %<%c%>" -msgstr "%<-march=%s%>: nach %<%dp%> muss eine Zahl stehen" +msgstr "%<-march=%s%>: Die Erweiterung %<%c%> ist keine einbuchstabige Erweiterung." # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99291 #: common/config/riscv/riscv-common.cc:1220 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: zcf extension supports in rv32 only" -msgstr "%<-march=%s%>: Erweiterung %qs kommt mehr als einmal vor" +msgstr "%<-march=%s%>: Erweiterung zcf wird nur in rv32 unterstützt" #: common/config/riscv/riscv-common.cc:1225 #, gcc-internal-format @@ -37686,28 +37497,24 @@ msgstr "%<-march=%s%>: z*inx ist mit Gleitkommaerweiterungen unverträglich" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99291 #: common/config/riscv/riscv-common.cc:1231 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: extension %qs appear more than one time" +#, gcc-internal-format msgid "%<-march=%s%>: h extension requires i extension" -msgstr "%<-march=%s%>: Erweiterung %qs kommt mehr als einmal vor" +msgstr "%<-march=%s%>: Erweiterung h erfordert Erweiterung i" #: common/config/riscv/riscv-common.cc:1236 -#, fuzzy, gcc-internal-format -#| msgid "%<-mcpu=%s%> conflicts with %<-march=%s%>" +#, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmt" -msgstr "%<-mcpu=%s%> steht in Konflikt mit %<-march=%s%>" +msgstr "%<-march=%s%>: zcd steht im Konflikt mit zcmt" #: common/config/riscv/riscv-common.cc:1238 -#, fuzzy, gcc-internal-format -#| msgid "%<-mcpu=%s%> conflicts with %<-march=%s%>" +#, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmp" -msgstr "%<-mcpu=%s%> steht in Konflikt mit %<-march=%s%>" +msgstr "%<-march=%s%>: zcd steht im Konflikt mit zcmp" #: common/config/riscv/riscv-common.cc:1247 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: z*inx conflicts with floating-point extensions" +#, gcc-internal-format msgid "%<-march=%s%>: xtheadvector conflicts with vector extension or its sub-extensions" -msgstr "%<-march=%s%>: z*inx ist mit Gleitkommaerweiterungen unverträglich" +msgstr "%<-march=%s%>: xtheadvector steht im Konflikt mit der Vektorerweiterung oder ihren Untererweiterungen" #: common/config/riscv/riscv-common.cc:1344 #, gcc-internal-format @@ -37720,10 +37527,9 @@ msgid "%<-march=%s%>: %s must separate with %<_%>" msgstr "%<-march=%s%>: %s müssen durch %<_%> getrennt sein" #: common/config/riscv/riscv-common.cc:1419 -#, fuzzy, gcc-internal-format -#| msgid "%<-march=%s%>: name of %s must be more than 1 letter" +#, gcc-internal-format msgid "%<-march=%s%>: i, e or g must be the first extension" -msgstr "%<-march=%s%>: Name von %s muss mehr als 1 Buchstabe sein" +msgstr "%<-march=%s%>: i, e oder g muss die erste Erweiterung sein" #: common/config/riscv/riscv-common.cc:1758 #, gcc-internal-format @@ -38054,10 +37860,9 @@ msgid "PIC is only supported for RTPs" msgstr "PIC wird nur für RTPs unterstützt" #: config/aarch64/aarch64-builtins.cc:2122 -#, fuzzy, gcc-internal-format -#| msgid "argument to %qs must be a 2-bit unsigned literal" +#, gcc-internal-format msgid "first argument to %qD must be a string literal" -msgstr "Argument für %qs muss ein vorzeichenloses 2-Bit-Symbol sein" +msgstr "erstes Argument für %qD muss ein Zeichenkettenliteral sein" #: config/aarch64/aarch64-builtins.cc:2253 #: config/aarch64/aarch64-builtins.cc:2487 config/arm/arm-builtins.cc:3146 @@ -38083,31 +37888,27 @@ msgstr "Argument muss eine direkt angegebene 16-Bit-Konstante sein" #: config/aarch64/aarch64-builtins.cc:2700 #, gcc-internal-format msgid "128-bit system register support requires the %<d128%> extension" -msgstr "" +msgstr "die Unterstützung für 128-Bit-Systemregister erfordert die Erweiterung %<d128%>" #: config/aarch64/aarch64-builtins.cc:2715 -#, fuzzy, gcc-internal-format -#| msgid "invalid register name for %q+D" +#, gcc-internal-format msgid "invalid system register name provided" -msgstr "ungültiger Registername für %q+D" +msgstr "ungültiger Systemregistername angegeben" #: config/aarch64/aarch64-builtins.cc:2729 -#, fuzzy, gcc-internal-format -#| msgid "invalid register name for %q+D" +#, gcc-internal-format msgid "invalid system register name %qs" -msgstr "ungültiger Registername für %q+D" +msgstr "ungültiger Systemregistername %qs" #: config/aarch64/aarch64-builtins.cc:2809 -#, fuzzy, gcc-internal-format -#| msgid "for statement expected" +#, gcc-internal-format msgid "Constant-type argument expected" -msgstr "für Anweisung erwartet" +msgstr "Argument muss eine Ganzzahlkonstante sein" #: config/aarch64/aarch64-builtins.cc:2815 -#, fuzzy, gcc-internal-format -#| msgid "argument %d must be a constant immediate in range [0,15]" +#, gcc-internal-format msgid "argument %d must be a constant immediate in range [%wd,%wd]" -msgstr "Argument %d muss eine direkt angegebene Konstante im Bereich [0, 15] sein" +msgstr "Argument %d muss eine direkt angegebene Konstante im Bereich [%wd, %wd] sein" #: config/aarch64/aarch64-builtins.cc:2894 #, gcc-internal-format @@ -38160,17 +37961,17 @@ msgstr "ACLE-Funktion %qD ist nicht kompatibel mit der Verwendung von %qs" #: config/aarch64/aarch64-sve-builtins.cc:1112 #, gcc-internal-format msgid "ACLE function %qD cannot be called when SME streaming mode is enabled" -msgstr "" +msgstr "Die ACLE-Funktion %qD kann nicht aufgerufen werden, wenn der SME-Streaming-Modus aktiviert ist" #: config/aarch64/aarch64-sve-builtins.cc:1119 #, gcc-internal-format msgid "ACLE function %qD can only be called when SME streaming mode is enabled" -msgstr "" +msgstr "Die ACLE-Funktion %qD kann nur aufgerufen werden, wenn der SME-Streaming-Modus aktiviert ist" #: config/aarch64/aarch64-sve-builtins.cc:1126 #, gcc-internal-format msgid "ACLE function %qD can only be called from a function that has %qs state" -msgstr "" +msgstr "Die ACLE-Funktion %qD kann nur von einer Funktion mit dem Status %qs aufgerufen werden" #: config/aarch64/aarch64-sve-builtins.cc:1154 #: config/arm/arm-mve-builtins.cc:571 @@ -38180,10 +37981,9 @@ msgid "argument %d of %qE must be an integer constant expression" msgstr "Argument %d von %qE muss ein konstanter ganzzahliger Ausdruck sein" #: config/aarch64/aarch64-sve-builtins.cc:1167 -#, fuzzy, gcc-internal-format -#| msgid "passing %wd to argument %d of %qE, which expects either %wd or %wd" +#, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects the value %wd" -msgstr "Übergabe von %wd an Argument %d von %qE, das jedoch entweder %wd oder %wd erwartet" +msgstr "Übergabe von %wd an Argument %d von %qE, das jedoch den Wert %wd erwartet" #: config/aarch64/aarch64-sve-builtins.cc:1170 #: config/arm/arm-mve-builtins.cc:583 @@ -38224,21 +38024,19 @@ msgstr[0] "%qT%d%qE%d" msgstr[1] "der einzelne Vektor %qT wird an Argument %d von %qE übergeben, das erwartet jedoch ein Tupel von %d Vektoren" #: config/aarch64/aarch64-sve-builtins.cc:1767 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT instead of the expected %qT to argument %d of %qE, after passing %qT to argument %d" +#, gcc-internal-format msgid "passing tuple %qT to argument %d of %qE after passing single vector %qT to argument %d" -msgstr "Übergabe von %qT anstelle des erwarteten %qT an Argument %d von %qE, nachdem %qT an Argument %d übergeben wurde" +msgstr "Übergabe des Tupels %qT an Argument %d von %qE, nachdem der einzelne Vektor %qT an Argument %d übergeben wurde" #: config/aarch64/aarch64-sve-builtins.cc:1772 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT instead of the expected %qT to argument %d of %qE, after passing %qT to argument %d" +#, gcc-internal-format msgid "passing single vector %qT to argument %d of %qE after passing tuple %qT to argument %d" -msgstr "Übergabe von %qT anstelle des erwarteten %qT an Argument %d von %qE, nachdem %qT an Argument %d übergeben wurde" +msgstr "Übergabe des einzelnen Vektors %qT an Argument %d von %qE, nachdem das Tupel %qT an Argument %d übergeben wurde" #: config/aarch64/aarch64-sve-builtins.cc:1777 #, gcc-internal-format msgid "passing mismatched tuple types %qT and %qT to arguments %d and %d of %qE" -msgstr "" +msgstr "Übergabe nicht übereinstimmender Tupeltypen %qT und %qT an die Argumente %d und %d von %qE" #: config/aarch64/aarch64-sve-builtins.cc:1788 #: config/arm/arm-mve-builtins.cc:1104 @@ -38247,14 +38045,12 @@ msgid "%qE has no form that takes %qT arguments" msgstr "%qE hat keine Form, die %qT Argumente annimmt" #: config/aarch64/aarch64-sve-builtins.cc:1849 -#, fuzzy, gcc-internal-format -#| msgid "%qE has no form that takes %qT arguments" +#, gcc-internal-format msgid "%qE has no form that takes %qT and %qT arguments" -msgstr "%qE hat keine Form, die %qT Argumente annimmt" +msgstr "%qE hat keine Form, die Argumente %qT und %qT annimmt" #: config/aarch64/aarch64-sve-builtins.cc:1911 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects %qs or %qs" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an %qs or %qs" msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch %qs oder %qs erwartet" @@ -38264,16 +38060,14 @@ msgid "passing %qT to argument %d of %qE, which expects a 32-bit or 64-bit integ msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Ganzzahltyp von 32 oder 64 Bits erwartet" #: config/aarch64/aarch64-sve-builtins.cc:1961 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit integers" +#, gcc-internal-format msgid "passing %qT and %qT to arguments %d and %d of %qE, which expects a pair of 64-bit integers" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor von Ganzzahlen mit %d Bits erwartet" +msgstr "Übergabe von %qT und %qT an Argumente %d und %d von %qE, das jedoch ein Paar von 64-Bit-Ganzzahlen erwartet" #: config/aarch64/aarch64-sve-builtins.cc:1985 -#, fuzzy, gcc-internal-format -#| msgid "size mismatch in argument %d of %qE" +#, gcc-internal-format msgid "passing mismatched integer types %qT and %qT to arguments %d and %d of %qE" -msgstr "Unpassende Größe in Argument %d von %qE" +msgstr "Übergabe von nicht übereinstimmenden Ganzzahltypen %qT und %qT an die Argumente %d und %d von %qE" #: config/aarch64/aarch64-sve-builtins.cc:2006 #: config/arm/arm-mve-builtins.cc:1157 @@ -38297,16 +38091,14 @@ msgid "passing %qT to argument %d of %qE, which expects a pointer to 32-bit or 6 msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Zeiger auf Elemente erwartet, die 32 oder 64 Bit groß sind" #: config/aarch64/aarch64-sve-builtins.cc:2068 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a single SVE vector rather than a tuple" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an SVE type rather than a scalar type" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen einzelnen SVE-Vektor statt eines Tupels erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen SVE-Typen statt eines skalaren Typen erwartet" #: config/aarch64/aarch64-sve-builtins.cc:2072 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE tuple type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an SVE type" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen SVE-Tupeltyp erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen SVE-Typen erwartet" #: config/aarch64/aarch64-sve-builtins.cc:2117 #, gcc-internal-format @@ -38314,10 +38106,9 @@ msgid "passing %qT to argument %d of %qE, which expects a vector of integers" msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor von Ganzzahlen erwartet" #: config/aarch64/aarch64-sve-builtins.cc:2147 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE vector type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a 128 bit NEON vector type" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen SVE-Vektortyp erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen 128-Bit-NEON-Vektortypen erwartet" #: config/aarch64/aarch64-sve-builtins.cc:2164 #: config/aarch64/aarch64-sve-builtins.cc:2462 @@ -38334,12 +38125,12 @@ msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor von El #: config/aarch64/aarch64-sve-builtins.cc:2227 #, gcc-internal-format msgid "operations on multiple vectors must be predicated by %qs rather than %qs" -msgstr "" +msgstr "Operationen auf mehreren Vektoren müssen mit %qs und nicht mit %qs angegeben werden" #: config/aarch64/aarch64-sve-builtins.cc:2230 #, gcc-internal-format msgid "operations on single vectors must be predicated by %qs rather than %qs" -msgstr "" +msgstr "Operationen auf einzelnen Vektoren müssen mit %qs und nicht mit %qs angegeben werden" #: config/aarch64/aarch64-sve-builtins.cc:2246 #: config/arm/arm-mve-builtins.cc:1248 @@ -38362,10 +38153,9 @@ msgid "passing %qT to argument %d of %qE, but argument %d had type %qT" msgstr "Übergabe von %qT an Argument %d von %qE, aber Argument %d hatte den Typ %qT" #: config/aarch64/aarch64-sve-builtins.cc:2406 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but argument %d had type %qT" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but argument %d was a tuple of %qT" -msgstr "Übergabe von %qT an Argument %d von %qE, aber Argument %d hatte den Typ %qT" +msgstr "Übergabe von %qT an Argument %d von %qE, aber Argument %d war ein Tupel von %qT" #: config/aarch64/aarch64-sve-builtins.cc:2430 #: config/arm/arm-mve-builtins.cc:1384 @@ -38374,32 +38164,29 @@ msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit eleme msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor von Elementen erwartet, die %d Bit groß sind" #: config/aarch64/aarch64-sve-builtins.cc:2435 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of %d-bit elements" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of %d-bit elements" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor von Elementen erwartet, die %d Bit groß sind" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor von %d-Bit-Elementen erwartet" #: config/aarch64/aarch64-sve-builtins.cc:2448 #: config/arm/arm-mve-builtins.cc:1396 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a vector of signed integers" -msgstr "Übergabe vom %qT an Argument %d von %qE, das jedoch einen Vektor von vorzeichenbehafteten Ganzzahlen erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor von vorzeichenbehafteten Ganzzahlen erwartet" #. Translation note: could also be written "expects a tuple of #. signed integer vectors". #: config/aarch64/aarch64-sve-builtins.cc:2454 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of signed integers" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of signed integers" -msgstr "Übergabe vom %qT an Argument %d von %qE, das jedoch einen Vektor von vorzeichenbehafteten Ganzzahlen erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch Vektoren von vorzeichenbehafteten Ganzzahlen erwartet" #. Translation note: could also be written "expects a tuple of #. unsigned integer vectors". #: config/aarch64/aarch64-sve-builtins.cc:2468 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a vector of unsigned integers" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects vectors of unsigned integers" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Vektor vorzeichenloser Ganzzahlen erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch Vektoren von vorzeichenlosen Ganzzahlen erwartet" #: config/aarch64/aarch64-sve-builtins.cc:2488 #: config/arm/arm-mve-builtins.cc:1423 @@ -38426,10 +38213,9 @@ msgid "passing %qT to argument %d of %qE, which expects %qs" msgstr "Übergabe von %qT an das Argument %d von %qE, das jedoch %qs erwartet" #: config/aarch64/aarch64-sve-builtins.cc:2577 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a scalar pointer" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which does not accept scalars for this combination of arguments" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen Zeiger auf einen skalaren Typen erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch keine Skalare dieser Kombination von Argumenten akzeptiert" #: config/aarch64/aarch64-sve-builtins.cc:2593 #: config/arm/arm-mve-builtins.cc:1556 @@ -38531,10 +38317,9 @@ msgid "passing %qT to argument %d of %qE, but its %qT form does not accept scala msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch in der %qT-Form keine Skalare akzeptiert" #: config/aarch64/aarch64-sve-builtins.cc:3127 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but its %qT form does not accept scalars" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but its %qT form does not accept single vectors" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch in der %qT-Form keine Skalare akzeptiert" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch in der %qT-Form keine einzelnen Vektoren akzeptiert" #: config/aarch64/aarch64-sve-builtins.cc:4621 #: config/aarch64/aarch64-sve-builtins.cc:4683 @@ -38545,10 +38330,9 @@ msgid "duplicate definition of %qs" msgstr "doppelte Definition von %qs" #: config/aarch64/aarch64-sve-builtins.cc:4675 -#, fuzzy, gcc-internal-format -#| msgid "%qD is defined with tls model %s" +#, gcc-internal-format msgid "%qs defined without first defining %qs" -msgstr "%qD ist mit TLS-Modell %s definiert" +msgstr "%qs ist definiert, ohne vorher %qs zu definieren" #: config/aarch64/aarch64-sve-builtins.cc:4834 #, gcc-internal-format @@ -38632,16 +38416,14 @@ msgid "capture by copy of SVE type %qT" msgstr "der SVE-Typ %qT kann nicht durch Kopieren gefangen werden" #: config/aarch64/aarch64.cc:635 -#, fuzzy, gcc-internal-format -#| msgid "third argument to function %qE must be a constant integer" +#, gcc-internal-format msgid "the arguments to %qE must be constant strings" -msgstr "Drittes Argument für Funktion %qE muss eine konstante Ganzzahl sein" +msgstr "die Argumente für %qE müssen konstante Zeichenfolgen sein" #: config/aarch64/aarch64.cc:643 -#, fuzzy, gcc-internal-format -#| msgid "unrecognized string escape" +#, gcc-internal-format msgid "unrecognized state string %qs" -msgstr "unbekanntes Escapezeichen in Zeichenkette" +msgstr "nicht erkannte Statuszeichenkette %qs" #: config/aarch64/aarch64.cc:727 #, gcc-internal-format @@ -38651,19 +38433,17 @@ msgstr "das Attribut %qE kann nicht auf einen SVE-Funktionstyp angewendet werden #: config/aarch64/aarch64.cc:754 #, gcc-internal-format msgid "cannot create a new %qs scope since %qs is shared with callers" -msgstr "" +msgstr "kann keinen neuen Gültigkeitsbereich %qs erstellen, da %qs mit Aufrufern geteilt wird" #: config/aarch64/aarch64.cc:770 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute applies only to functions" +#, gcc-internal-format msgid "%qE attribute applies only to function definitions" -msgstr "Attribut %qE kann nur auf Funktionen angewandt werden" +msgstr "Attribut %qE kann nur auf Funktionsdefinitionen angewandt werden" #: config/aarch64/aarch64.cc:816 -#, fuzzy, gcc-internal-format -#| msgid "inconsistent because %qs" +#, gcc-internal-format msgid "inconsistent attributes for state %qs" -msgstr "inkonsistent wegen %qs" +msgstr "inkonsistente Attribute für den Zustand %qs" #: config/aarch64/aarch64.cc:1305 #, gcc-internal-format @@ -38715,10 +38495,9 @@ msgstr "die Parameterübergabe für das Argument vom Typ %qT hat sich in GCC 13. #: config/aarch64/aarch64.cc:6966 config/aarch64/aarch64.cc:7044 #: config/aarch64/aarch64.cc:21189 -#, fuzzy, gcc-internal-format -#| msgid "parameter passing for argument of type %qT changed in GCC 13.1" +#, gcc-internal-format msgid "parameter passing for argument of type %qT changed in GCC 14.1" -msgstr "die Parameterübergabe für das Argument vom Typ %qT hat sich in GCC 13.1 geändert" +msgstr "die Parameterübergabe für das Argument vom Typ %qT hat sich in GCC 14.1 geändert" #: config/aarch64/aarch64.cc:6976 config/aarch64/aarch64.cc:7053 #: config/aarch64/aarch64.cc:21195 config/arm/arm.cc:7301 @@ -38743,30 +38522,29 @@ msgid "stack probes for SVE frames" msgstr "Stapelsonde für SVE-Rahmen" #: config/aarch64/aarch64.cc:11080 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "calling a streaming function requires the ISA extension %qs" -msgstr "ACLE-Funktion %qD erfordert ISA-Erweiterung %qs" +msgstr "der Aufruf einer Streaming-Funktion erfordert die ISA-Erweiterung %qs" #: config/aarch64/aarch64.cc:11089 config/aarch64/aarch64.cc:11093 #, gcc-internal-format msgid "call to a function that shares %qs state from a function that has no %qs state" -msgstr "" +msgstr "Aufruf einer Funktion, die den %qs-Zustand teilt, aus einer Funktion, die keinen %qs-Zustand hat" #: config/aarch64/aarch64.cc:11096 #, gcc-internal-format msgid "call to a function that shares SME state from a function that has no SME state" -msgstr "" +msgstr "Aufruf einer Funktion, die den SME-Status teilt, aus einer Funktion, die keinen SME-Status hat" #: config/aarch64/aarch64.cc:11154 #, gcc-internal-format msgid "call to a function that shares state other than %qs from a function that has %qs state" -msgstr "" +msgstr "Aufruf einer Funktion, die einen anderen Status als %qs hat, aus einer Funktion, die den Status %qs hat" #: config/aarch64/aarch64.cc:11156 #, gcc-internal-format msgid "use %<__arm_preserves(\"za\")%> if the callee preserves ZA" -msgstr "" +msgstr "verwenden Sie %<__arm_preserves(\"za\")%>, wenn die aufgerufene Funktion ZA beibehält" #: config/aarch64/aarch64.cc:17859 #, gcc-internal-format @@ -38828,16 +38606,14 @@ msgid "%<-fsanitize=shadow-call-stack%> requires %<-ffixed-x18%>" msgstr "%<-fsanitize=shadow-call-stack%> erfordert %<-ffixed-x18%>" #: config/aarch64/aarch64.cc:18237 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "streaming functions require the ISA extension %qs" -msgstr "ACLE-Funktion %qD erfordert ISA-Erweiterung %qs" +msgstr "Streaming-Funktionen erfordern die ISA-Erweiterung %qs" #: config/aarch64/aarch64.cc:18239 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "functions with SME state require the ISA extension %qs" -msgstr "ACLE-Funktion %qD erfordert ISA-Erweiterung %qs" +msgstr "Funktionen mit SME-Zustand erfordern die ISA-Erweiterung %qs" #: config/aarch64/aarch64.cc:18333 #, gcc-internal-format @@ -38856,10 +38632,9 @@ msgid "missing cpu name in %<-mcpu=%s%>" msgstr "fehlender CPU-Name in %<-mcpu=%s%>" #: config/aarch64/aarch64.cc:18473 -#, fuzzy, gcc-internal-format -#| msgid "did you mean %<-mcpu=%s%>?" +#, gcc-internal-format msgid "did you mean %<-march=%s%>?" -msgstr "meinten Sie %<-mcpu=%s%>?" +msgstr "meinten Sie %<-march=%s%>?" #: config/aarch64/aarch64.cc:18476 #, gcc-internal-format @@ -38913,10 +38688,9 @@ msgid "unknown value %qs for %<-mtune%>" msgstr "unbekannter Wert %qs für %<-mtune%>" #: config/aarch64/aarch64.cc:18717 -#, fuzzy, gcc-internal-format -#| msgid "switch %<-mcpu=%s%> conflicts with %<-march=%s%> switch" +#, gcc-internal-format msgid "switch %<-mcpu=%s%> conflicts with %<-march=%s%> switch and resulted in options %<%s%> being added" -msgstr "Schalter %<-mcpu=%s%> steht mit dem Schalter %<-march=%s%> in Konflikt" +msgstr "Schalter %<-mcpu=%s%> steht mit dem Schalter %<-march=%s%> in Konflikt und hat dazu geführt, dass die Optionen %<%s%> hinzugefügt wurden" #: config/aarch64/aarch64.cc:18773 #, gcc-internal-format @@ -38939,10 +38713,9 @@ msgid "code model %qs not supported in ilp32 mode" msgstr "Codemodell %qs wird im ilp32-Modus nicht unterstützt" #: config/aarch64/aarch64.cc:18954 -#, fuzzy, gcc-internal-format -#| msgid "ACLE function %qD requires ISA extension %qs" +#, gcc-internal-format msgid "functions with %qs state require the ISA extension %qs" -msgstr "ACLE-Funktion %qD erfordert ISA-Erweiterung %qs" +msgstr "Funktionen mit dem Status %qs erfordern die ISA-Erweiterung %qs" #: config/aarch64/aarch64.cc:19057 #, gcc-internal-format @@ -39030,34 +38803,29 @@ msgid "malformed %<target(\"%s\")%> pragma or attribute" msgstr "falsch geformtes Pragma oder Attribut %<target(\"%s\")%>" #: config/aarch64/aarch64.cc:19668 -#, fuzzy, gcc-internal-format -#| msgid "attribute %<fallthrough%> specified multiple times" +#, gcc-internal-format msgid "attribute %<target_version%> has multiple values" -msgstr "Attribut %<fallthrough%> ist mehrfach angegeben" +msgstr "das Attribut %<target_version%> hat mehrere Werte" #: config/aarch64/aarch64.cc:19676 -#, fuzzy, gcc-internal-format -#| msgid "attribute %<target%> argument not a string" +#, gcc-internal-format msgid "attribute %<target_version%> argument not a string" -msgstr "Argument für Attribut %<target%> ist keine Zeichenkette" +msgstr "das Argument des Attributs %<target_version%> ist keine Zeichenkette" #: config/aarch64/aarch64.cc:19698 -#, fuzzy, gcc-internal-format -#| msgid "missing value in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "missing value in %<target_version%> attribute" -msgstr "fehlender Wert für Pragma oder Attribut %<target()%>" +msgstr "im Attribut %<target_version%> fehlt der Wert" #: config/aarch64/aarch64.cc:19702 -#, fuzzy, gcc-internal-format -#| msgid "invalid feature modifier %qs of value %qs in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "invalid feature modifier %qs of value %qs in %<target_version%> attribute" -msgstr "ungültiger Featuremodifizierer %qs mit Wert %qs in Pragma oder Attribut %<target()%>" +msgstr "ungültiger Featuremodifizierer %qs mit Wert %qs in Attribut %<target_version%>" #: config/aarch64/aarch64.cc:19708 -#, fuzzy, gcc-internal-format -#| msgid "invalid feature modifier %qs of value %qs in %<target()%> pragma or attribute" +#, gcc-internal-format msgid "duplicate feature modifier %qs of value %qs in %<target_version%> attribute" -msgstr "ungültiger Featuremodifizierer %qs mit Wert %qs in Pragma oder Attribut %<target()%>" +msgstr "doppelter Featuremodifizierer %qs mit Wert %qs in Attribut %<target_version%>" #: config/aarch64/aarch64.cc:20285 config/i386/i386-features.cc:3531 #: config/i386/i386-features.cc:3800 @@ -39097,10 +38865,9 @@ msgid "unsupported simdlen %wd" msgstr "nicht unterstützte simdlen %wd" #: config/aarch64/aarch64.cc:28605 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support return type %qT for %<simd%> functions" +#, gcc-internal-format msgid "GCC does not currently support return type %qT for simd" -msgstr "GCC bietet derzeit keine Unterstützung für Rückgabetyp %qT für %<simd%>-Funktionen" +msgstr "GCC bietet derzeit keine Unterstützung für Rückgabetyp %qT für SIMD-Funktionen" #: config/aarch64/aarch64.cc:28609 config/i386/i386.cc:25115 #, gcc-internal-format @@ -39108,10 +38875,9 @@ msgid "unsupported return type %qT for simd" msgstr "nicht unterstützter Rückgabetyp %qT für SIMD" #: config/aarch64/aarch64.cc:28639 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support argument type %qT for %<simd%> functions" +#, gcc-internal-format msgid "GCC does not currently support argument type %qT for simd" -msgstr "GCC bietet derzeit keine Unterstützung für Parametertyp %qT für %<simd%>-Funktionen" +msgstr "GCC bietet derzeit keine Unterstützung für Parametertyp %qT für SIMD-Funktionen" #: config/aarch64/aarch64.cc:28643 config/i386/i386.cc:25146 #, gcc-internal-format @@ -39124,32 +38890,29 @@ msgid "GCC does not currently support simdlen %wd for type %qT" msgstr "GCC unterstützt derzeit %<simdlen %wd%> für Typ %qT nicht" #: config/aarch64/aarch64.cc:28713 -#, fuzzy, gcc-internal-format -#| msgid "GCC does not currently support simdlen %wd for type %qT" +#, gcc-internal-format msgid "GCC does not currently support a simdclone with simdlens %wd and %wd for these types." -msgstr "GCC unterstützt derzeit %<simdlen %wd%> für Typ %qT nicht" +msgstr "GCC unterstützt derzeit kein simdclone mit simdlens %wd und %wd für diese Typen." #: config/aarch64/aarch64.cc:28803 -#, fuzzy, gcc-internal-format -#| msgid "type attributes ignored after type is already defined" +#, gcc-internal-format msgid "cannot apply attribute %qs to %q+D after the function has been defined" -msgstr "Typattribute ignoriert, nachdem Typ bereits definiert ist" +msgstr "das Attribut %qs kann nicht auf %q+D angewendet werden, nachdem die Funktion definiert worden ist" #: config/aarch64/aarch64.cc:28805 -#, fuzzy, gcc-internal-format -#| msgid "%qD defined here" +#, gcc-internal-format msgid "%q+D defined here" -msgstr "%qD hier definiert" +msgstr "%q+D hier definiert" #: config/aarch64/aarch64.cc:29263 #, gcc-internal-format msgid "non-local gotos in functions with SME state" -msgstr "" +msgstr "nichtlokale Gotos in Funktionen mit SME-Zustand" #: config/aarch64/aarch64.cc:29558 #, gcc-internal-format msgid "catching non-call exceptions in functions with SME state" -msgstr "" +msgstr "Abfangen von Nicht-Aufruf-Ausnahmen in Funktionen mit SME-Zustand" #: config/alpha/alpha.cc:420 #, gcc-internal-format @@ -39493,23 +39256,20 @@ msgstr "unbekannte Ausgabe %qs des %<asm%>-Schalters" msgid "invalid type for %<asm%> flag output" msgstr "ungültiger Typ für %<asm%>-Schalter-Ausgabe" -# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79868 #: config/arm/aarch-common.cc:765 -#, fuzzy, gcc-internal-format -#| msgid "missing feature modifier in target %s %qs" +#, gcc-internal-format msgid "missing feature or flag for %<%s%>" -msgstr "fehlender Eigenschaftsmodifizierer in Ziel%qs %qs" +msgstr "fehlendes Merkmal oder Kennzeichen für %<%s%>" #: config/arm/aarch-common.cc:767 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument %<%s%> for %<-mharden-sls=%>" +#, gcc-internal-format msgid "invalid argument %<%s%> for %<%s%>" -msgstr "ungültiges Argument %qs für %<-mharden-sls=%>" +msgstr "ungültiges Argument %<%s%> für %<%s%>" #: config/arm/aarch-common.cc:778 #, gcc-internal-format msgid "argument %<%s%> can only appear alone in %<%s%>" -msgstr "" +msgstr "das Argument %<%s%> kann nur allein in %<%s%> erscheinen" #: config/arm/arm-builtins.cc:3125 #, gcc-internal-format, gfc-internal-format @@ -39625,10 +39385,9 @@ msgid "%<#pragma GCC arm%> requires a string parameter" msgstr "%<#pragma GCC arm%> erfordert eine Zeichenkette als Parameter" #: config/arm/arm-c.cc:156 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma GCC arm%> requires a string parameter" +#, gcc-internal-format msgid "%<#pragma GCC arm \"arm_mve.h\"%> requires a boolean parameter" -msgstr "%<#pragma GCC arm%> erfordert eine Zeichenkette als Parameter" +msgstr "%<#pragma GCC arm \"arm_mve.h\"%> erfordert einen booleschen Parameter" #: config/arm/arm-c.cc:160 #, gcc-internal-format @@ -39641,34 +39400,29 @@ msgid "this definition requires the MVE ISA extension" msgstr "diese Definition erfordert die MVE-ISA-Erweiterung" #: config/arm/arm-mve-builtins.cc:560 -#, fuzzy, gcc-internal-format -#| msgid "you can enable %qs using the command-line option %<-march%>, or by using the %<target%> attribute or pragma" +#, gcc-internal-format msgid "you can enable mve.fp by using the command-line option %<-march%>, or by using the %<target%> attribute or pragma" -msgstr "Sie können %qs mit der Befehlszeilenoption %<-march%> einschalten, oder mit dem Attribut %<target%> oder Pragma" +msgstr "Sie können mve.fp mit der Befehlszeilenoption %<-march%> oder mit dem Attribut oder Pragma %<target%> einschalten" #: config/arm/arm-mve-builtins.cc:1166 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, but %qT is not a valid SVE element type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, but %qT is not a valid MVE element type" -msgstr "Übergabe von %qT an Argument %d von %qE, aber %qT ist kein gültiger SVE-Elementtyp" +msgstr "Übergabe von %qT an Argument %d von %qE, aber %qT ist kein gültiger MVE-Elementtyp" #: config/arm/arm-mve-builtins.cc:1200 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects a single SVE vector rather than a tuple" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a single MVE vector rather than a tuple" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen einzelnen SVE-Vektor statt eines Tupels erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen einzelnen MVE-Vektor statt eines Tupels erwartet" #: config/arm/arm-mve-builtins.cc:1220 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE vector type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an MVE vector type" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen SVE-Vektortyp erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen MVE-Vektortyp erwartet" #: config/arm/arm-mve-builtins.cc:1223 -#, fuzzy, gcc-internal-format -#| msgid "passing %qT to argument %d of %qE, which expects an SVE tuple type" +#, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an MVE tuple type" -msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen SVE-Tupeltyp erwartet" +msgstr "Übergabe von %qT an Argument %d von %qE, das jedoch einen MVE-Tupeltyp erwartet" #: config/arm/arm-mve-builtins.cc:1290 #, gcc-internal-format @@ -40142,10 +39896,9 @@ msgid "%qE attribute only supported for reduced Tiny cores" msgstr "Attribut %qE wird nur für reduzierte Tiny-Kerne unterstützt" #: config/avr/avr.cc:10405 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute address out of range" +#, gcc-internal-format msgid "%qE attribute address out of range 0x%x%s0x%x" -msgstr "Adresse von Attribut %qE außerhalb des gültigen Bereichs" +msgstr "Adresse von Attribut %qE außerhalb des gültigen Bereichs 0x%x%s0x%x" #: config/avr/avr.cc:10419 #, gcc-internal-format @@ -40178,10 +39931,9 @@ msgid "pointer targeting address space %qs must be const in %s %q+D" msgstr "Zeiger auf Adressraum %qs muss in %s %q+D konstant sein" #: config/avr/avr.cc:10717 -#, fuzzy, gcc-internal-format -#| msgid "variables marked with %qE attribute must be initialized" +#, gcc-internal-format msgid "variable %q+D with attribute %qs must be located in static storage" -msgstr "variablen, die mit dem %qE-Attribut markiert sind, müssen initialisiert werden" +msgstr "variablen %q+D, die mit dem %qs-Attribut markiert ist, muss im statischen Speicher verortet sein" #: config/avr/avr.cc:10769 #, gcc-internal-format @@ -40189,10 +39941,9 @@ msgid "variable %q+D must be const in order to be put into read-only section by msgstr "Variable %q+D muss konstant sein, um mit %qs in Nur-Lese-Abschnitt gelegt zu werden" #: config/avr/avr.cc:10930 -#, fuzzy, gcc-internal-format -#| msgid "static IO declaration for %q+D needs an address" +#, gcc-internal-format msgid "static attribute %qs declaration for %q+D needs an address" -msgstr "»static IO«-Deklaration von %q+D erfordert eine Adresse" +msgstr "statische Attributdeklaration %qs für %q+D erfordert eine Adresse" #: config/avr/avr.cc:11019 #, gcc-internal-format @@ -40215,10 +39966,9 @@ msgstr "nicht initialisierte Variable %q+D in Programmspeicherbereich platziert" #. address attribute are determined by the attribute, not by #. some initializer. #: config/avr/avr.cc:11172 -#, fuzzy, gcc-internal-format -#| msgid "variables marked with %qE attribute must be initialized" +#, gcc-internal-format msgid "variable %q+D with attribute %qs must not have an initializer" -msgstr "variablen, die mit dem %qE-Attribut markiert sind, müssen initialisiert werden" +msgstr "die Variable %q+D mit dem Attribut %qs darf keinen Initialisierer haben" #: config/avr/avr.cc:11225 #, gcc-internal-format @@ -40394,10 +40144,9 @@ msgid "invalid argument to built-in function" msgstr "ungültiges Argument für eingebaute Funktion" #: config/bpf/bpf.cc:1019 -#, fuzzy, gcc-internal-format -#| msgid "invalid argument to built-in function %s" +#, gcc-internal-format msgid "invalid built-in function at expansion" -msgstr "ungültiges Argument für eingebaute Funktion »%s«" +msgstr "ungültige eingebaute Funktion bei der Expansion" #: config/c6x/c6x.cc:245 #, gcc-internal-format @@ -40611,10 +40360,9 @@ msgid "stack frame must be smaller than 64K" msgstr "Stapelrahmen muss kleiner als 64k sein" #: config/gcn/gcn.cc:170 -#, fuzzy, gcc-internal-format -#| msgid "%<-msmart%> is incompatible with %<-mhigh-registers%>" +#, gcc-internal-format msgid "%<-mxnack=on%> is incompatible with %<-march=%s%>" -msgstr "%<-msmart%> ist mit %<-mhigh-registers%> unverträglich" +msgstr "%<-mxnack=on%> ist nicht kompatibel mit %<-march=%s%>" #: config/gcn/gcn.cc:284 #, gcc-internal-format @@ -40692,28 +40440,24 @@ msgid "%d bytes of gang-private data-share memory exhausted (increase with %<-mg msgstr "%d Bytes des gang-privaten Speichers für Datenaustausch erschöpft (kann zum Beispiel mit %<-mgang-private-size=%d%> erhöht werden)" #: config/gcn/mkoffload.cc:160 -#, fuzzy, gcc-internal-format -#| msgid "deleting file %s: %m" +#, gcc-internal-format msgid "deleting file %qs: %m" -msgstr "Datei %s kann nicht gelöscht werden: %m" +msgstr "Löschen der Datei %qs: %m" #: config/gcn/mkoffload.cc:862 -#, fuzzy, gcc-internal-format -#| msgid "COLLECT_GCC must be set" +#, gcc-internal-format msgid "%<COLLECT_GCC%> must be set" -msgstr "COLLECT_GCC muss gesetzt sein" +msgstr "%<COLLECT_GCC%> muss gesetzt sein" #: config/gcn/mkoffload.cc:908 -#, fuzzy, gcc-internal-format -#| msgid "offload compiler %s not found" +#, gcc-internal-format msgid "offload compiler %qs not found" -msgstr "Offload-Compiler %s nicht gefunden" +msgstr "Offload-Compiler %qs nicht gefunden" #: config/gcn/mkoffload.cc:930 -#, fuzzy, gcc-internal-format -#| msgid "unrecognizable argument of option " +#, gcc-internal-format msgid "unrecognizable argument of option %<" -msgstr "nicht erkanntes Kommandozeilenargument von Option " +msgstr "nicht erkanntes Kommandozeilenargument von Option %<" #: config/gcn/mkoffload.cc:994 config/nvptx/mkoffload.cc:751 #, gcc-internal-format @@ -40721,16 +40465,14 @@ msgid "either %<-fopenacc%> or %<-fopenmp%> must be set" msgstr "entweder %<-fopenacc%> oder %<-fopenmp%> muss angegeben sein" #: config/gcn/mkoffload.cc:1039 -#, fuzzy, gcc-internal-format -#| msgid "unhandled expression" +#, gcc-internal-format msgid "unhandled architecture" -msgstr "unbehandelter Ausdruck" +msgstr "unbehandelte Architektur" #: config/gcn/mkoffload.cc:1079 config/gcn/mkoffload.cc:1231 -#, fuzzy, gcc-internal-format -#| msgid "cannot open %s" +#, gcc-internal-format msgid "cannot open %qs" -msgstr "»%s« kann nicht geöffnet werden" +msgstr "%qs kann nicht geöffnet werden" #: config/gcn/mkoffload.cc:1217 config/nvptx/mkoffload.cc:841 #, gcc-internal-format @@ -41063,22 +40805,22 @@ msgstr "%<target(\"tune=x86-64\")%> ist veraltet; stattdessen entsprechend %<tar #: config/i386/i386-options.cc:2104 #, gcc-internal-format msgid "%<-mtune=knl%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung von %<-mtune=knl%> wird in GCC 15 entfernt" #: config/i386/i386-options.cc:2105 #, gcc-internal-format msgid "%<target(\"tune=knl\")%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung für %<target(\"tune=knl\")%> wird in GCC 15 entfernt" #: config/i386/i386-options.cc:2110 #, gcc-internal-format msgid "%<-mtune=knm%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung von %<-mtune=knm%> wird in GCC 15 entfernt" #: config/i386/i386-options.cc:2111 #, gcc-internal-format msgid "%<target(\"tune=knm\")%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung für %<target(\"tune=knm\")%> wird in GCC 15 entfernt" #. rep; movq isn't available in 32-bit code. #: config/i386/i386-options.cc:2138 @@ -41087,16 +40829,14 @@ msgid "%<-mstringop-strategy=rep_8byte%> not supported for 32-bit code" msgstr "%<-mstringop-strategy=rep_8byte%> wird für 32-Bit-Code nicht unterstützt" #: config/i386/i386-options.cc:2143 -#, fuzzy, gcc-internal-format -#| msgid "%<-muintr%> not supported for 32-bit code" +#, gcc-internal-format msgid "%<-mapxf%> is not supported for 32-bit code" -msgstr "%<-muintr%> wird für 32-Bit-Code nicht unterstützt" +msgstr "%<-mapxf%> wird für 32-Bit-Code nicht unterstützt" #: config/i386/i386-options.cc:2145 -#, fuzzy, gcc-internal-format -#| msgid "%<-mlam=%> option: [u48|u57] not supported for 32-bit code" +#, gcc-internal-format msgid "%<-mapx-features=%> option is not supported for 32-bit code" -msgstr "%<-mlam=%>-Option: [u48|u57] wird für 32-Bit-Code nicht unterstützt" +msgstr "%<-mapx-features=%> wird für 32-Bit-Code nicht unterstützt" #: config/i386/i386-options.cc:2148 #, gcc-internal-format @@ -41136,7 +40876,7 @@ msgstr "%<-mabi=%s%> wird nicht zusammen mit %<-fsanitize=thread%> unterstützt" #: config/i386/i386-options.cc:2196 #, gcc-internal-format msgid "%<-mlam=u48%> is not compatible with Hardware-assisted AddressSanitizer, override to %<-mlam=u57%>" -msgstr "" +msgstr "%<-mlam=u48%> ist nicht kompatibel mit hardwareunterstütztem AddressSanitizer, stattdessen wird %<-mlam=u57%> verwendet" #: config/i386/i386-options.cc:2216 config/i386/i386-options.cc:2225 #: config/i386/i386-options.cc:2237 config/i386/i386-options.cc:2248 @@ -41188,22 +40928,22 @@ msgstr "Die ausgewählte CPU unterstützt nicht den x86-64-Befehlssatz" #: config/i386/i386-options.cc:2327 #, gcc-internal-format msgid "%<-march=knl%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung für %<-march=knl%> wird in GCC 15 entfernt" #: config/i386/i386-options.cc:2328 #, gcc-internal-format msgid "%<target(\"arch=knl\")%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung für %<target(\"arch=knl\")%> wird in GCC 15 entfernt" #: config/i386/i386-options.cc:2333 #, gcc-internal-format msgid "%<-march=knm%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung für %<-march=knm%> wird in GCC 15 entfernt" #: config/i386/i386-options.cc:2334 #, gcc-internal-format msgid "%<target(\"arch=knm\")%> support will be removed in GCC 15" -msgstr "" +msgstr "Unterstützung für %<target(\"arch=knm\")%> wird in GCC 15 entfernt werden" #: config/i386/i386-options.cc:2411 #, gcc-internal-format @@ -41298,7 +41038,7 @@ msgstr "%<target(\"rtd\")%> wird im 64-Bit-Modus ignoriert" #: config/i386/i386-options.cc:2676 #, gcc-internal-format msgid "%<-mno-evex512%> or %<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10.1-512 is available" -msgstr "" +msgstr "%<-mno-evex512%> oder %<-mno-avx512XXX%> kann AVX10-Befehle nicht deaktivieren, wenn AVX10.1-512 verfügbar ist" #. We should not emit 512 bit instructions under AVX10.1-256 #. when EVEX512 is enabled w/o any AVX512 features enabled. @@ -41306,22 +41046,22 @@ msgstr "" #: config/i386/i386-options.cc:2690 #, gcc-internal-format msgid "Using %<-mevex512%> without any AVX512 features enabled together with AVX10.1 only will not enable any AVX512 or AVX10.1-512 features, using 256 as max vector size" -msgstr "" +msgstr "Die Verwendung von %<-mevex512%> ohne aktivierte AVX512-Funktionen zusammen mit AVX10.1 aktiviert keine AVX512- oder AVX10.1-512-Funktionen und verwendet 256 als maximale Vektorgröße" #: config/i386/i386-options.cc:2697 config/i386/i386-options.cc:2703 #, gcc-internal-format msgid "Vector size conflicts between AVX10.1 and AVX512, using 512 as max vector size" -msgstr "" +msgstr "Vektorgrößenkonflikte zwischen AVX10.1 und AVX512, als maximale Vektorgröße wird 512 verwendet" #: config/i386/i386-options.cc:2711 #, gcc-internal-format msgid "%<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10 is available" -msgstr "" +msgstr "%<-mno-avx512XXX%> kann AVX10-Anweisungen nicht deaktivieren, wenn AVX10 verfügbar ist" #: config/i386/i386-options.cc:2721 #, gcc-internal-format msgid "%<-mno-avx10.1, -mno-avx10.1-256, -mno-avx10.1-512%> cannot disable AVX512 instructions when %<-mavx512XXX%>" -msgstr "" +msgstr "%<-mno-avx10.1, -mno-avx10.1-256, -mno-avx10.1-512%> können AVX512-Anweisungen nicht deaktivieren, wenn %<-mavx512XXX%> gewählt ist" #: config/i386/i386-options.cc:2776 #, gcc-internal-format @@ -41426,7 +41166,7 @@ msgstr "%qs ist kein gültiges Basisregister in %<-mstack-protector-guard-reg=%> #: config/i386/i386-options.cc:3245 #, gcc-internal-format msgid "%<-fcf-protection=full%> is not enabled by %<-fhardened%> because it was specified on the command line" -msgstr "" +msgstr "%<-fcf-protection=full%> wird von %<-fhardened%> nicht aktiviert, da es in der Befehlszeile angegeben wurde" #: config/i386/i386-options.cc:3254 #, gcc-internal-format @@ -41671,10 +41411,9 @@ msgid "the ABI of passing C structures with zero-width bit-fields has changed in msgstr "das ABI der C-Strukturübergabe mit Bitfeldern der Breite 0 hat sich in GCC %{12.1%} geändert" #: config/i386/i386.cc:2722 config/i386/i386.cc:4091 config/i386/i386.cc:4101 -#, fuzzy, gcc-internal-format -#| msgid "SSE register return with SSE disabled" +#, gcc-internal-format msgid "SSE register return with SSE2 disabled" -msgstr "SSE-Registerrückgabe mit SSE ausgeschaltet" +msgstr "SSE-Registerrückgabe mit SSE2 ausgeschaltet" #: config/i386/i386.cc:2724 #, gcc-internal-format @@ -41682,10 +41421,9 @@ msgid "SSE register return with SSE disabled" msgstr "SSE-Registerrückgabe mit SSE ausgeschaltet" #: config/i386/i386.cc:2731 -#, fuzzy, gcc-internal-format -#| msgid "SSE register argument with SSE disabled" +#, gcc-internal-format msgid "SSE register argument with SSE2 disabled" -msgstr "SSE-Registerargument mit SSE ausgeschaltet" +msgstr "SSE-Registerargument mit SSE2 ausgeschaltet" #: config/i386/i386.cc:2733 #, gcc-internal-format @@ -41791,10 +41529,9 @@ msgid "the alignment of %<_Atomic %T%> fields changed in %{GCC 11.1%}" msgstr "die Ausrichtung von %<_Atomic %T%>-Feldern wurde mit %{GCC 11.1%} geändert" #: config/i386/i386.cc:22794 -#, fuzzy, gcc-internal-format -#| msgid "no low registers available for popping high registers" +#, gcc-internal-format msgid "no register available for profiling %<-mcmodel=large%s%>" -msgstr "keine unteren Register für das Hervorholen der hohen Register verfügbar" +msgstr "kein Register für die Profilerstellung von %<-mcmodel=large%s%> verfügbar" #: config/i386/i386.cc:22890 #, gcc-internal-format @@ -41802,10 +41539,9 @@ msgid "profiling %<-mcmodel=large%> with PIC is not supported" msgstr "Profiling von %<-mcmodel=large%> wird mit PIC nicht unterstützt" #: config/i386/i386.cc:23603 -#, fuzzy, gcc-internal-format -#| msgid "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since GCC V13, be careful of implicit conversion between %<__bf16%> and %<short%>; a explicit bitcast may be needed here" +#, gcc-internal-format msgid "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since GCC 13.1, be careful of implicit conversion between %<__bf16%> and %<short%>; an explicit bitcast may be needed here" -msgstr "%<__bfloat16%> ist seit GCC V13 von typedef %<short%> zum echten %<__bf16%> umdefiniert, achten Sie daher auf implizite Umwandlungen zwischen %<__bf16%> und %<short%>; ein expliziter Bitcast könnte hier nötig sein" +msgstr "%<__bfloat16%> ist seit GCC 13.1 von typedef %<short%> zum echten %<__bf16%> umdefiniert, Vorsicht bei impliziter Konvertierung zwischen %<__bf16%> und %<short%>; hier kann ein explizites Bitcast nötig sein" #: config/i386/i386.cc:25052 #, gcc-internal-format @@ -41914,21 +41650,19 @@ msgid "unknown processor ID %<0x%x%>, some tuning parameters will fall back to d msgstr "unbekannte Prozessor-ID %<0x%x%>, einige Tuning-Parameter werden auf die Standardwerte zurückgesetzt" #: config/loongarch/loongarch-cpu.cc:141 -#, fuzzy, gcc-internal-format -#| msgid "unknown base architecture %<0x%x%>, %qs failed" +#, gcc-internal-format msgid "unknown native base architecture %<0x%x%>, %qs failed" -msgstr "unbekannte Basisarchitektur %<0x%x%>, %qs fehlgeschlagen" +msgstr "unbekannte native Basisarchitektur %<0x%x%>, %qs fehlgeschlagen" #: config/loongarch/loongarch-cpu.cc:170 -#, fuzzy, gcc-internal-format -#| msgid "unknown FPU type %<0x%x%>, %qs failed" +#, gcc-internal-format msgid "unknown native FPU type %<0x%x%>, %qs failed" -msgstr "unbekannter FPU-Typ %<0x%x%>, %qs fehlgeschlagen" +msgstr "unbekannter nativer FPU-Typ %<0x%x%>, %qs fehlgeschlagen" #: config/loongarch/loongarch-cpu.cc:177 #, gcc-internal-format msgid "floating-point unit %qs differs from PRID preset %qs" -msgstr "" +msgstr "Gleitkommaeinheit %qs weicht von PRID-Voreinstellung %qs ab" #: config/loongarch/loongarch-cpu.cc:201 #, gcc-internal-format @@ -61295,10 +61029,9 @@ msgid "%<static_assert%> without a message only available with %<-std=c++17%> or msgstr "%<static_assert%> ohne Text ist erst ab %<-std=c++17%> oder %<-std=gnu++17%> verfügbar" #: cp/parser.cc:16974 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> without a message only available with %<-std=c++17%> or %<-std=gnu++17%>" +#, gcc-internal-format msgid "%<static_assert%> with non-string message only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "%<static_assert%> ohne Text ist erst ab %<-std=c++17%> oder %<-std=gnu++17%> verfügbar" +msgstr "%<static_assert%> ohne Meldung, die keine Zeichenkette ist, ist erst ab %<-std=c++2c%> oder %<-std=gnu++2c%> verfügbar" #: cp/parser.cc:17172 #, gcc-internal-format @@ -61523,10 +61256,9 @@ msgid "use of %<auto%> in lambda parameter declaration only available with %<-st msgstr "Verwendung von %<auto%> in Lambda-Parameterdeklaration ist nur mit %<-std=c++14%> oder %<-std=gnu++14%> verfügbar" #: cp/parser.cc:20356 -#, fuzzy, gcc-internal-format -#| msgid "use of %<auto%> in parameter declaration only available with %<-fconcepts-ts%>" +#, gcc-internal-format msgid "use of %<auto%> in template argument only available with %<-fconcepts-ts%>" -msgstr "Verwendung von %<auto%> in Parameterdeklaration ist nur mit %<-fconcepts-ts%> verfügbar" +msgstr "Verwendung von %<auto%> in Templateargument ist nur mit %<-fconcepts-ts%> verfügbar" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104877 #: cp/parser.cc:20360 @@ -61622,7 +61354,7 @@ msgstr "Typen dürfen nicht in enum-base definiert werden" #: cp/parser.cc:21618 #, gcc-internal-format msgid "declaration of enumeration with fixed underlying type and no enumerator list is only permitted as a standalone declaration" -msgstr "" +msgstr "die Deklaration einer Aufzählung mit festem zugrundeliegenden Typ und ohne Aufzählungsliste ist nur als eigenständige Deklaration zulässig" #: cp/parser.cc:21622 #, gcc-internal-format @@ -61817,10 +61549,9 @@ msgid "%<asm%> qualifier outside of function body" msgstr "%<asm%>-Qualifizierer außerhalb des Funktionsrumpfes" #: cp/parser.cc:22948 -#, fuzzy, gcc-internal-format -#| msgid "attribute ignored in declaration of %q#T" +#, gcc-internal-format msgid "attributes ignored on %<asm%> declaration" -msgstr "Attribut in Deklaration von %q#T ignoriert" +msgstr "Attribute in %<asm%>-Deklaration werden ignoriert" #: cp/parser.cc:23035 #, gcc-internal-format @@ -62015,16 +61746,14 @@ msgid "types may not be defined in parameter types" msgstr "Typen dürfen nicht in Parametertypen definiert werden" #: cp/parser.cc:25732 -#, fuzzy, gcc-internal-format -#| msgid "storage class specifiers invalid in parameter declarations" +#, gcc-internal-format msgid "%<this%> specifier in template parameter declaration" -msgstr "Speicherklassenangaben sind in Parameterdeklarationen ungültig" +msgstr "%<this%>-Angabe in Template-Parameterdeklaration" #: cp/parser.cc:25746 -#, fuzzy, gcc-internal-format -#| msgid "non-parameter %qs cannot be a parameter pack" +#, gcc-internal-format msgid "an explicit object parameter cannot be a function parameter pack" -msgstr "Nicht-Parameter %qs kann kein Parameterpack sein" +msgstr "ein expliziter Objektparameter kann kein Funktionsparameterpaket sein" #: cp/parser.cc:25838 #, gcc-internal-format @@ -62047,10 +61776,9 @@ msgid "parameter pack cannot have a default argument" msgstr "Parameterpack kann kein Standardargument haben" #: cp/parser.cc:25887 -#, fuzzy, gcc-internal-format -#| msgid "template parameter pack cannot have a default argument" +#, gcc-internal-format msgid "an explicit object parameter may not have a default argument" -msgstr "Templateparameterpack kann kein Standardargument haben" +msgstr "ein expliziter Objektparameter darf kein Standardargument haben" #: cp/parser.cc:26011 #, gcc-internal-format @@ -62332,10 +62060,9 @@ msgid "expected attribute before %<...%>" msgstr "Attribut vor %<...%> erwartet" #: cp/parser.cc:30214 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute without arguments on a non-prototype" +#, gcc-internal-format msgid "attribute with no arguments contains no parameter packs" -msgstr "Attribut %qE ohne Argumente für einen Nicht-Prototyp" +msgstr "Attribut ohne Argumente enthält keine Parameterpakete" #: cp/parser.cc:30260 #, gcc-internal-format @@ -62419,10 +62146,9 @@ msgid "too many template-parameter-lists" msgstr "zu viele Templateparameterlisten" #: cp/parser.cc:32576 -#, fuzzy, gcc-internal-format -#| msgid "template-id not allowed for destructor" +#, gcc-internal-format msgid "template-id not allowed for constructor in C++20" -msgstr "Template-ID ist für Destruktor nicht erlaubt" +msgstr "template-id ist für Konstruktor in C++20 nicht erlaubt" #: cp/parser.cc:32687 #, gcc-internal-format @@ -62836,10 +62562,9 @@ msgid "%<wait%> expression must be integral" msgstr "%<wait%>-Ausdruck muss ganzzahlig sein" #: cp/parser.cc:39638 -#, fuzzy, gcc-internal-format -#| msgid "expected %<scalar%>, %<aggregate%> or %<pointer%>" +#, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<all%>" -msgstr "%<scalar%>, %<aggregate%> oder %<pointer%> erwartet" +msgstr "%<scalar%>, %<aggregate%> oder %<all%> erwartet" #: cp/parser.cc:40029 #, gcc-internal-format @@ -62977,10 +62702,9 @@ msgid "%<#pragma omp assumes%> may only be used at file or namespace scope" msgstr "%<#pragma omp assumes%> darf nur im Gültigkeitsbereich einer Datei oder eines Namensraums verwendet werden" #: cp/parser.cc:51053 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma GCC ivdep%> must be inside a function" +#, gcc-internal-format msgid "%<#pragma GCC %s%> must be inside a function" -msgstr "%<#pragma GCC ivdep%> muss innerhalb einer Funktion sein" +msgstr "%<#pragma GCC %s%> muss innerhalb einer Funktion sein" #: cp/parser.cc:51195 #, gcc-internal-format @@ -64545,16 +64269,14 @@ msgid " since %q+#D declared in base class" msgstr " denn %q+#D ist in Basisklasse deklariert" #: cp/search.cc:2281 -#, fuzzy, gcc-internal-format -#| msgid "virtual function %q+D overriding final function" +#, gcc-internal-format msgid "explicit object member function overrides virtual function" -msgstr "virtuelle Funktion %q+D übersteuert final-Funktion" +msgstr "die explizite Objektmemberfunktion übersteuert die virtuelle Funktion" #: cp/search.cc:2284 -#, fuzzy, gcc-internal-format -#| msgid "resolver indirect function declared here" +#, gcc-internal-format msgid "virtual function declared here" -msgstr "Auflöser-indirekte Funktion ist hier deklariert" +msgstr "die virtuelle Funktion ist hier deklariert" #: cp/semantics.cc:1109 #, gcc-internal-format @@ -64637,22 +64359,19 @@ msgid "arguments to destructor are not allowed" msgstr "Argumente für Destruktor sind nicht erlaubt" #: cp/semantics.cc:3175 -#, fuzzy, gcc-internal-format -#| msgid "%<this%> is unavailable for static member functions" +#, gcc-internal-format msgid "%<this%> is unavailable for explicit object member functions" -msgstr "%<this%> ist für statische Elementfunktionen nicht verfügbar" +msgstr "%<this%> ist für explizite Objektmemberfunktionen nicht verfügbar" #: cp/semantics.cc:3187 -#, fuzzy, gcc-internal-format -#| msgid "use the apostrophe directive %qs instead" +#, gcc-internal-format msgid "use explicit object parameter %qs instead" -msgstr "verwenden Sie stattdessen die Apostroph-Direktive %qs" +msgstr "verwenden Sie stattdessen den expliziten Objektparameter %qs" #: cp/semantics.cc:3191 -#, fuzzy, gcc-internal-format -#| msgid "invalid template non-type parameter" +#, gcc-internal-format msgid "name the explicit object parameter" -msgstr "ungültiger Nicht-Typ-Parameter für Template" +msgstr "geben Sie dem expliziten Objektparameter einen Namen" #: cp/semantics.cc:3196 #, gcc-internal-format @@ -64811,21 +64530,19 @@ msgid "%qT is not an enumeration type" msgstr "%qT ist kein Aufzählungstyp" #: cp/semantics.cc:4650 -#, fuzzy, gcc-internal-format -#| msgid "requested alignment is not an integer constant" +#, gcc-internal-format msgid "%<__type_pack_element%> index is not an integral constant" -msgstr "Verlangte Ausrichtung ist keine Ganzzahlkonstante" +msgstr "%<__type_pack_element%>-Index ist keine Ganzzahlkonstante" #: cp/semantics.cc:4656 #, gcc-internal-format msgid "%<__type_pack_element%> index is negative" -msgstr "" +msgstr "%<__type_pack_element%>-Index ist negativ" #: cp/semantics.cc:4662 -#, fuzzy, gcc-internal-format -#| msgid "Reference statement index out of range" +#, gcc-internal-format msgid "%<__type_pack_element%> index is out of range" -msgstr "Index der Referenzanweisung außerhalb des gültigen Bereichs" +msgstr "%<__type_pack_element%>-Index liegt außerhalb des Bereichs" #. Parameter packs can only be used in templates #: cp/semantics.cc:4785 @@ -64859,10 +64576,9 @@ msgid "%<offsetof%> within non-standard-layout type %qT is conditionally-support msgstr "%<offsetof%> innerhalb von Typ %qT (der kein Standardlayout hat) ist bedingt unterstützt" #: cp/semantics.cc:6046 -#, fuzzy, gcc-internal-format -#| msgid "constructor priorities are not supported" +#, gcc-internal-format msgid "pointer-to-member mapping %qE not supported" -msgstr "Konstruktorprioritäten werden nicht unterstützt" +msgstr "Pointer-to-Member-Mapping %qE wird nicht unterstützt" #: cp/semantics.cc:6240 #, gcc-internal-format @@ -65133,46 +64849,42 @@ msgstr "%<#pragma omp atomic update%> verwendet zwei unterschiedliche Ausdrücke #: cp/semantics.cc:11509 #, gcc-internal-format msgid "%<static_assert%> message must be a string literal or object with %<size%> and %<data%> members" -msgstr "" +msgstr "%<static_assert%>-Meldung muss ein Stringliteral oder ein Objekt mit den Membern %<size%> und %<data%> sein" #: cp/semantics.cc:11525 #, gcc-internal-format msgid "%<static_assert%> message %<size()%> must be implicitly convertible to %<std::size_t%>" -msgstr "" +msgstr "%<size()%> der %<static_assert%>-Nachricht muss implizit in %<std::size_t%> umwandelbar sein" #: cp/semantics.cc:11534 #, gcc-internal-format msgid "%<static_assert%> message %<data()%> must be implicitly convertible to %<const char*%>" -msgstr "" +msgstr "%<data()%> der %<static_assert%>-Nachricht muss implizit in %<const char*%> umwandelbar sein" #: cp/semantics.cc:11592 -#, fuzzy, gcc-internal-format -#| msgid "%<hint%> expression must be constant integer expression" +#, gcc-internal-format msgid "%<static_assert%> message %<size()%> must be a constant expression" -msgstr "%<hint%>-Ausdruck muss ganzzahlig und konstant sein" +msgstr "%<size()%> der %<static_assert%>-Meldung muss ein konstanter Ausdruck sein" #: cp/semantics.cc:11600 #, gcc-internal-format msgid "%<static_assert%> message %<size()%> %qE too large" -msgstr "" +msgstr "%<size()%> der %<static_assert%>-Meldung ist %qE und damit zu groß" #: cp/semantics.cc:11627 -#, fuzzy, gcc-internal-format -#| msgid "%<reinterpret_cast<%T>(%E)%> is not a constant expression" +#, gcc-internal-format msgid "%<static_assert%> message %<data()[%d]%> must be a constant expression" -msgstr "%<reinterpret_cast<%T>(%E)%> ist kein Konstantenausdruck" +msgstr "%<data()[%d]%> der %<static_assert%>-Meldung muss ein konstanter Ausdruck sein" #: cp/semantics.cc:11654 -#, fuzzy, gcc-internal-format -#| msgid "argument %d of %qE must be an integer constant expression" +#, gcc-internal-format msgid "%<static_assert%> message %<data()%> must be a core constant expression" -msgstr "Argument %d von %qE muss ein konstanter ganzzahliger Ausdruck sein" +msgstr "%<data()%> der %<static_assert%>-Meldung muss ein Kernkonstantenausdruck sein" #: cp/semantics.cc:11680 -#, fuzzy, gcc-internal-format -#| msgid "static assertion failed: %s" +#, gcc-internal-format msgid "static assertion failed: %.*s" -msgstr "statische Erklärung gescheitert: %s" +msgstr "statische Assertion fehlgeschlagen: %.*s" #: cp/semantics.cc:11688 #, gcc-internal-format @@ -65769,10 +65481,9 @@ msgid "the compiler can assume that the address of %qD will never be NULL" msgstr "der Compiler kann annehmen, dass die Adresse von %qD niemals NULL ist" #: cp/typeck.cc:5055 -#, fuzzy, gcc-internal-format -#| msgid "bitwise operation between different enumeration types %qT and %qT is deprecated" +#, gcc-internal-format msgid "bitwise operation between different enumeration types %qT and %qT" -msgstr "bitweise Operation zwischen den unterschiedlichen Aufzählungstypen %qT und %qT ist veraltet" +msgstr "bitweise Operation zwischen den unterschiedlichen Aufzählungstypen %qT und %qT" #: cp/typeck.cc:5058 #, gcc-internal-format @@ -65780,10 +65491,9 @@ msgid "bitwise operation between different enumeration types %qT and %qT is depr msgstr "bitweise Operation zwischen den unterschiedlichen Aufzählungstypen %qT und %qT ist veraltet" #: cp/typeck.cc:5064 -#, fuzzy, gcc-internal-format -#| msgid "arithmetic between different enumeration types %qT and %qT is deprecated" +#, gcc-internal-format msgid "arithmetic between different enumeration types %qT and %qT" -msgstr "Arithmetik zwischen den unterschiedlichen Aufzählungstypen %qT und %qT ist veraltet" +msgstr "Arithmetik zwischen den unterschiedlichen Aufzählungstypen %qT und %qT" #: cp/typeck.cc:5067 #, gcc-internal-format @@ -65791,16 +65501,14 @@ msgid "arithmetic between different enumeration types %qT and %qT is deprecated" msgstr "Arithmetik zwischen den unterschiedlichen Aufzählungstypen %qT und %qT ist veraltet" #: cp/typeck.cc:5104 -#, fuzzy, gcc-internal-format -#| msgid "comparison of enumeration type %qT with floating-point type %qT is deprecated" +#, gcc-internal-format msgid "comparison of enumeration type %qT with floating-point type %qT" -msgstr "Vergleich zwischen Aufzählungstyp %qT und Gleitkommatyp %qT ist veraltet" +msgstr "Vergleich zwischen Aufzählungstyp %qT und Gleitkommatyp %qT" #: cp/typeck.cc:5107 -#, fuzzy, gcc-internal-format -#| msgid "comparison of floating-point type %qT with enumeration type %qT is deprecated" +#, gcc-internal-format msgid "comparison of floating-point type %qT with enumeration type %qT" -msgstr "Vergleich zwischen Gleitkommatyp %qT und Aufzählungstyp %qT ist veraltet" +msgstr "Vergleich zwischen Gleitkommatyp %qT und Aufzählungstyp %qT" #: cp/typeck.cc:5110 #, gcc-internal-format @@ -65813,16 +65521,14 @@ msgid "comparison of floating-point type %qT with enumeration type %qT is deprec msgstr "Vergleich zwischen Gleitkommatyp %qT und Aufzählungstyp %qT ist veraltet" #: cp/typeck.cc:5123 -#, fuzzy, gcc-internal-format -#| msgid "arithmetic between enumeration type %qT and floating-point type %qT is deprecated" +#, gcc-internal-format msgid "arithmetic between enumeration type %qT and floating-point type %qT" -msgstr "Arithmetik zwischen Aufzählungstyp %qT und Gleitkommatyp %qT ist veraltet" +msgstr "Arithmetik zwischen Aufzählungstyp %qT und Gleitkommatyp %qT" #: cp/typeck.cc:5126 -#, fuzzy, gcc-internal-format -#| msgid "arithmetic between floating-point type %qT and enumeration type %qT is deprecated" +#, gcc-internal-format msgid "arithmetic between floating-point type %qT and enumeration type %qT" -msgstr "Arithmetik zwischen Gleitkommatyp %qT und Aufzählungstyp %qT ist veraltet" +msgstr "Arithmetik zwischen Gleitkommatyp %qT und Aufzählungstyp %qT" #: cp/typeck.cc:5129 #, gcc-internal-format @@ -65946,16 +65652,15 @@ msgid "ISO C++ forbids taking the address of a bound member function to form a p msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer gebundenen Elementfunktion, um einen Zeiger auf Elementfunktion zu erzeugen. Stattdessen %<&%T::%D%> verwenden" #: cp/typeck.cc:7171 -#, fuzzy, gcc-internal-format -#| msgid "(a pointer to member can only be formed with %<&%E%>)" +#, gcc-internal-format msgid "a pointer to explicit object member function can only be formed with %<&%T::%D%>" -msgstr "(ein Zeiger auf ein Element kann nur mit %<»&%E%> erzeugt werden)" +msgstr "ein Zeiger auf eine explizite Objektelementfunktion kann nur mit %<&%T::%D%> erzeugt werden" #. Make this a permerror because we used to accept it. #: cp/typeck.cc:7204 #, gcc-internal-format msgid "taking address of rvalue" -msgstr "Adresse eines rvalues wird ermittelt" +msgstr "Adresse eines Rvalues wird ermittelt" #: cp/typeck.cc:7221 #, gcc-internal-format @@ -66290,10 +65995,9 @@ msgid "returning reference to temporary" msgstr "Referenz auf temporären Wert wird zurückgegeben" #: cp/typeck.cc:10633 -#, fuzzy, gcc-internal-format -#| msgid "returning reference to temporary" +#, gcc-internal-format msgid "returning pointer to temporary" -msgstr "Referenz auf temporären Wert wird zurückgegeben" +msgstr "Zeiger auf temporäre Variable wird zurückgegeben" #: cp/typeck.cc:10636 #, gcc-internal-format @@ -66403,7 +66107,7 @@ msgstr "" #: cp/typeck.cc:11898 #, gcc-internal-format msgid "using rvalue as lvalue" -msgstr "rvalue wird als lvalue verwendet" +msgstr "Rvalue wird als Lvalue verwendet" #: cp/typeck2.cc:51 #, gcc-internal-format @@ -66904,21 +66608,19 @@ msgid "cast from %qs to %qs will produce zero result" msgstr "Umwandlung von %qs nach %qs führt zum Ergebnis 0" #: d/d-convert.cc:748 -#, fuzzy, gcc-internal-format -#| msgid "cannot convert %qE from type %qT to type %qT" +#, gcc-internal-format msgid "cannot convert parameter %qs from type %qs to type %qs in assignment" -msgstr "%qE kann nicht vom Typ %qT in den Typ %qT umgewandelt werden" +msgstr "Parameter %qs kann innerhalb der Anweisung nicht vom Typ %qs in den Typ %qs umgewandelt werden" #: d/d-convert.cc:754 -#, fuzzy, gcc-internal-format -#| msgid "cannot convert %qH to %qI in argument passing" +#, gcc-internal-format msgid "cannot convert parameter %qs from type %qs to type %qs in argument passing" -msgstr "%qH kann nicht nach %qI bei Argumentübergabe umgewandelt werden" +msgstr "Parameter %qs kann bei der Argumentübergabe nicht vom Typ %qs in den Typ %qs umgewandelt werden" #: d/d-convert.cc:759 #, gcc-internal-format msgid "parameters of type %<va_list%> {aka %qs} are decayed to pointer types, and require %<va_copy%> to be converted back into a static array type" -msgstr "" +msgstr "Parameter vom Typ %<va_list%> {auch %qs} werden zu Zeigertypen degradiert und benötigen %<va_copy%>, um sie zurück in einen statischen Arraytyp umzuwandeln" #: d/d-lang.cc:463 #, gcc-internal-format From 9c91f8a88b2db50c8faf70786d3cef27b39ac9fc Mon Sep 17 00:00:00 2001 From: "Vladimir N. Makarov" <vmakarov@redhat.com> Date: Tue, 19 Mar 2024 16:57:11 -0400 Subject: [PATCH 144/551] [PR99829][LRA]: Fixing LRA ICE on arm LRA removed insn setting equivalence to memory whose output was reloaded. This resulted in writing an uninitiated value to the memory which triggered assert in LRA code checking the final generated code. This patch fixes the problem. Comment in the patch contains more details about the problem and its solution. gcc/ChangeLog: PR target/99829 * lra-constraints.cc (lra_constraints): Prevent removing insn with reverse equivalence to memory if the memory was reloaded. --- gcc/lra-constraints.cc | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/gcc/lra-constraints.cc b/gcc/lra-constraints.cc index 0ae81c1ff9cb..10e3d4e40977 100644 --- a/gcc/lra-constraints.cc +++ b/gcc/lra-constraints.cc @@ -5213,7 +5213,7 @@ lra_constraints (bool first_p) bool changed_p; int i, hard_regno, new_insns_num; unsigned int min_len, new_min_len, uid; - rtx set, x, reg, dest_reg; + rtx set, x, reg, nosubreg_dest; rtx_insn *original_insn; basic_block last_bb; bitmap_iterator bi; @@ -5377,14 +5377,14 @@ lra_constraints (bool first_p) { if ((set = single_set (curr_insn)) != NULL_RTX) { - dest_reg = SET_DEST (set); + nosubreg_dest = SET_DEST (set); /* The equivalence pseudo could be set up as SUBREG in a case when it is a call restore insn in a mode different from the pseudo mode. */ - if (GET_CODE (dest_reg) == SUBREG) - dest_reg = SUBREG_REG (dest_reg); - if ((REG_P (dest_reg) - && (x = get_equiv (dest_reg)) != dest_reg + if (GET_CODE (nosubreg_dest) == SUBREG) + nosubreg_dest = SUBREG_REG (nosubreg_dest); + if ((REG_P (nosubreg_dest) + && (x = get_equiv (nosubreg_dest)) != nosubreg_dest /* Remove insns which set up a pseudo whose value cannot be changed. Such insns might be not in init_insns because we don't update equiv data @@ -5403,11 +5403,21 @@ lra_constraints (bool first_p) up the equivalence. */ || in_list_p (curr_insn, ira_reg_equiv - [REGNO (dest_reg)].init_insns))) + [REGNO (nosubreg_dest)].init_insns))) || (((x = get_equiv (SET_SRC (set))) != SET_SRC (set)) && in_list_p (curr_insn, ira_reg_equiv - [REGNO (SET_SRC (set))].init_insns))) + [REGNO (SET_SRC (set))].init_insns) + /* This is a reverse equivalence to memory (see ira.cc) + in store insn. We can reload all the destination and + have an output reload which is a store to memory. If + we just remove the insn, we will have the output + reload storing an undefined value to the memory. + Check that we did not reload the memory to prevent a + wrong code generation. We could implement using the + equivalence still in such case but doing this is not + worth the efforts as such case is very rare. */ + && MEM_P (nosubreg_dest))) { /* This is equiv init insn of pseudo which did not get a hard register -- remove the insn. */ From 7a6261332de58fd47283d694d8cd61ea7cdb324c Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Tue, 19 Mar 2024 17:15:38 -0400 Subject: [PATCH 145/551] testsuite: fix target for linkage-1.C This test fails in C++11 due to: linkage-1.C:3:8: error: 'f' function uses 'auto' type specifier without trailing return type 3 | inline auto f() { | ^~~~ linkage-1.C:3:8: note: deduced return type only available with '-std=c++14' or '-std=gnu++14' Compile it in C++14 thus. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/linkage-1.C: Use target c++14. --- gcc/testsuite/g++.dg/cpp2a/linkage-1.C | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/g++.dg/cpp2a/linkage-1.C b/gcc/testsuite/g++.dg/cpp2a/linkage-1.C index 888ed6fa5b59..2b83ffe55b7c 100644 --- a/gcc/testsuite/g++.dg/cpp2a/linkage-1.C +++ b/gcc/testsuite/g++.dg/cpp2a/linkage-1.C @@ -1,4 +1,4 @@ -// { dg-do compile { target c++11 } } +// { dg-do compile { target c++14 } } inline auto f() { struct A {}; From bf838884fac573b4902a21bb82d9b6f777e32cb9 Mon Sep 17 00:00:00 2001 From: Martin Jambor <mjambor@suse.cz> Date: Tue, 19 Mar 2024 22:33:27 +0100 Subject: [PATCH 146/551] ipa: Fix C++ member ptr indirect inlining (PR 114254, PR 108802) Even though we have had code to handle creation of indirect call graph edges (so that these calls can than be made direct as part of IPA-CP and inlining and eventually also inlined) for C++ member pointers for many years, it turns out that it does not work for lambdas and that it has been severely broken since GCC 10 when the base class has virtual functions. Lambdas don't work because the code cannot work with structures representing member function pointers because they are passed by reference instead by value and the code was not ready for that. The presence of virtual methods broke thinks because at some point C++ FE got clever and stopped emitting the check for virtual methods when the base class does not have any and that in turn made our existing testcases not test the necessary pattern matching code. The pattern matcher had a small bug which did not matter before r10-917-g3b47da42de621c but did afterwards. This patch changes the pattern matcher to match both of these cases. gcc/ChangeLog: 2024-03-06 Martin Jambor <mjambor@suse.cz> PR ipa/108802 PR ipa/114254 * ipa-prop.cc (ipa_get_stmt_member_ptr_load_param): Fix case looking at COMPONENT_REFs directly from a PARM_DECL, also recognize loads from a pointer parameter. (ipa_analyze_indirect_call_uses): Also recognize loads from a pointer parameter, also recognize the case when pfn pointer is loaded in its own BB. gcc/testsuite/ChangeLog: 2024-03-06 Martin Jambor <mjambor@suse.cz> PR ipa/108802 PR ipa/114254 * g++.dg/ipa/iinline-4.C: New test. * g++.dg/ipa/pr108802.C: Likewise. --- gcc/ipa-prop.cc | 110 +++++++++++++++++++-------- gcc/testsuite/g++.dg/ipa/iinline-4.C | 61 +++++++++++++++ gcc/testsuite/g++.dg/ipa/pr108802.C | 14 ++++ 3 files changed, 154 insertions(+), 31 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ipa/iinline-4.C create mode 100644 gcc/testsuite/g++.dg/ipa/pr108802.C diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc index e22c4f78405d..e8e4918d5a82 100644 --- a/gcc/ipa-prop.cc +++ b/gcc/ipa-prop.cc @@ -2500,7 +2500,9 @@ static tree ipa_get_stmt_member_ptr_load_param (gimple *stmt, bool use_delta, HOST_WIDE_INT *offset_p) { - tree rhs, rec, ref_field, ref_offset, fld, ptr_field, delta_field; + tree rhs, fld, ptr_field, delta_field; + tree ref_field = NULL_TREE; + tree ref_offset = NULL_TREE; if (!gimple_assign_single_p (stmt)) return NULL_TREE; @@ -2511,35 +2513,53 @@ ipa_get_stmt_member_ptr_load_param (gimple *stmt, bool use_delta, ref_field = TREE_OPERAND (rhs, 1); rhs = TREE_OPERAND (rhs, 0); } - else - ref_field = NULL_TREE; - if (TREE_CODE (rhs) != MEM_REF) - return NULL_TREE; - rec = TREE_OPERAND (rhs, 0); - if (TREE_CODE (rec) != ADDR_EXPR) - return NULL_TREE; - rec = TREE_OPERAND (rec, 0); - if (TREE_CODE (rec) != PARM_DECL - || !type_like_member_ptr_p (TREE_TYPE (rec), &ptr_field, &delta_field)) + + if (TREE_CODE (rhs) == MEM_REF) + { + ref_offset = TREE_OPERAND (rhs, 1); + if (ref_field && integer_nonzerop (ref_offset)) + return NULL_TREE; + } + else if (!ref_field) return NULL_TREE; - ref_offset = TREE_OPERAND (rhs, 1); + + if (TREE_CODE (rhs) == MEM_REF + && TREE_CODE (TREE_OPERAND (rhs, 0)) == SSA_NAME + && SSA_NAME_IS_DEFAULT_DEF (TREE_OPERAND (rhs, 0))) + { + rhs = TREE_OPERAND (rhs, 0); + if (TREE_CODE (SSA_NAME_VAR (rhs)) != PARM_DECL + || !type_like_member_ptr_p (TREE_TYPE (TREE_TYPE (rhs)), &ptr_field, + &delta_field)) + return NULL_TREE; + } + else + { + if (TREE_CODE (rhs) == MEM_REF + && TREE_CODE (TREE_OPERAND (rhs, 0)) == ADDR_EXPR) + rhs = TREE_OPERAND (TREE_OPERAND (rhs, 0), 0); + if (TREE_CODE (rhs) != PARM_DECL + || !type_like_member_ptr_p (TREE_TYPE (rhs), &ptr_field, + &delta_field)) + return NULL_TREE; + } if (use_delta) fld = delta_field; else fld = ptr_field; - if (offset_p) - *offset_p = int_bit_position (fld); if (ref_field) { - if (integer_nonzerop (ref_offset)) + if (ref_field != fld) return NULL_TREE; - return ref_field == fld ? rec : NULL_TREE; } - else - return tree_int_cst_equal (byte_position (fld), ref_offset) ? rec - : NULL_TREE; + else if (!tree_int_cst_equal (byte_position (fld), ref_offset)) + return NULL_TREE; + + if (offset_p) + *offset_p = int_bit_position (fld); + return rhs; } /* Returns true iff T is an SSA_NAME defined by a statement. */ @@ -2585,8 +2605,9 @@ ipa_note_param_call (struct cgraph_node *node, int param_index, describing the call is created. This is very simple for ordinary pointers represented in SSA but not-so-nice when it comes to member pointers. The ugly part of this function does nothing more than trying to match the - pattern of such a call. An example of such a pattern is the gimple dump - below, the call is on the last line: + pattern of such a call. Look up the documentation of macro + TARGET_PTRMEMFUNC_VBIT_LOCATION for details. An example of such a pattern + is the gimple dump below, the call is on the last line: <bb 2>: f$__delta_5 = f.__delta; @@ -2710,10 +2731,23 @@ ipa_analyze_indirect_call_uses (struct ipa_func_body_info *fbi, gcall *call, corresponding to the pattern. */ if (!single_pred_p (virt_bb) || !single_succ_p (virt_bb) - || single_pred (virt_bb) != bb || single_succ (virt_bb) != join) return; + + if (single_pred (virt_bb) != bb) + { + /* In cases when the distinction between a normal and a virtual + function is encoded in the delta field, the load of the + actual non-virtual function pointer can be in its own BB. */ + + if (!single_pred_p (bb) || !single_succ_p (bb)) + return; + bb = single_pred (bb); + if (bb != single_pred (virt_bb)) + return; + } + /* Third, let's see that the branching is done depending on the least significant bit of the pfn. */ @@ -2759,17 +2793,31 @@ ipa_analyze_indirect_call_uses (struct ipa_func_body_info *fbi, gcall *call, if (rec != rec2) return; - index = ipa_get_param_decl_index (info, rec); - if (index >= 0 - && parm_preserved_before_stmt_p (fbi, index, call, rec)) + if (TREE_CODE (rec) == SSA_NAME) { - struct cgraph_edge *cs = ipa_note_param_call (fbi->node, index, - call, false); - cs->indirect_info->offset = offset; - cs->indirect_info->agg_contents = 1; - cs->indirect_info->member_ptr = 1; - cs->indirect_info->guaranteed_unmodified = 1; + index = ipa_get_param_decl_index (info, SSA_NAME_VAR (rec)); + if (index < 0 + || !parm_ref_data_preserved_p (fbi, index, call, + gimple_assign_rhs1 (def))) + return; + by_ref = true; } + else + { + index = ipa_get_param_decl_index (info, rec); + if (index < 0 + || !parm_preserved_before_stmt_p (fbi, index, call, rec)) + return; + by_ref = false; + } + + struct cgraph_edge *cs = ipa_note_param_call (fbi->node, index, + call, false); + cs->indirect_info->offset = offset; + cs->indirect_info->agg_contents = 1; + cs->indirect_info->member_ptr = 1; + cs->indirect_info->by_ref = by_ref; + cs->indirect_info->guaranteed_unmodified = 1; return; } diff --git a/gcc/testsuite/g++.dg/ipa/iinline-4.C b/gcc/testsuite/g++.dg/ipa/iinline-4.C new file mode 100644 index 000000000000..b7ab89bb4d54 --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/iinline-4.C @@ -0,0 +1,61 @@ +/* Verify that simple indirect calls are inlined even without early + inlining.. */ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining" } */ +/* { dg-add-options bind_pic_locally } */ + +extern void non_existent (const char *, int); + +class String +{ +private: + const char *data; + +public: + String (const char *d) : data(d) + {} + + int funcOne (int delim) const; + int printStuffTwice (int delim) const; + virtual int whee (int delim) const; +}; + + +int String::funcOne (int delim) const +{ + int i; + for (i = 0; i < delim; i++) + non_existent(data, i); + + return 1; +} + +extern int global; + +int docalling (int c, int (String::* f)(int delim) const) +{ + String S ("muhehehe"); + + if (c > 2) + global = 3; + else + global = 5; + + return (S.*f)(4); +} + +int __attribute__ ((noinline,noclone)) get_input (void) +{ + return 1; +} + +int main (int argc, char *argv[]) +{ + int i = 0; + while (i < 1000) + i += docalling (get_input (), &String::funcOne); + non_existent ("done", i); + return 0; +} + +/* { dg-final { scan-ipa-dump "String::funcOne\[^\\n\]*inline copy in int main" "inline" } } */ diff --git a/gcc/testsuite/g++.dg/ipa/pr108802.C b/gcc/testsuite/g++.dg/ipa/pr108802.C new file mode 100644 index 000000000000..2e2b6c66b64a --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/pr108802.C @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -std=c++14 -fdump-ipa-inline -fno-early-inlining" } */ +/* { dg-add-options bind_pic_locally } */ + +struct A { + int interesting(int x) { return 2 * x; } +}; + +int f1() { + A a; + return [&](auto&& f) { return (a.*f)(42); } (&A::interesting); +} + +/* { dg-final { scan-ipa-dump "A::interesting\[^\\n\]*inline copy in int f1" "inline" } } */ From cc606a916d87864d945457926280853dbeaa4e92 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Wed, 20 Mar 2024 00:18:09 +0000 Subject: [PATCH 147/551] Daily bump. --- contrib/ChangeLog | 5 ++ gcc/ChangeLog | 130 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 17 ++++++ gcc/c-family/ChangeLog | 9 +++ gcc/cp/ChangeLog | 11 ++++ gcc/po/ChangeLog | 4 ++ gcc/testsuite/ChangeLog | 103 +++++++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 53 ++++++++++++++++ 9 files changed, 333 insertions(+), 1 deletion(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 801bd76b45e3..508e9da6179a 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,8 @@ +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + * unicode/gen_libstdcxx_unicode_data.py: Fix header of generated + file to name the correct script. + 2024-03-18 Jonathan Wakely <jwakely@redhat.com> * gcc_update: Add more generated files in libcc1, lto-plugin, diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a5e276a3f3d6..85f645c02385 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,133 @@ +2024-03-19 Martin Jambor <mjambor@suse.cz> + + PR ipa/108802 + PR ipa/114254 + * ipa-prop.cc (ipa_get_stmt_member_ptr_load_param): Fix case looking + at COMPONENT_REFs directly from a PARM_DECL, also recognize loads from + a pointer parameter. + (ipa_analyze_indirect_call_uses): Also recognize loads from a pointer + parameter, also recognize the case when pfn pointer is loaded in its + own BB. + +2024-03-19 Vladimir N. Makarov <vmakarov@redhat.com> + + PR target/99829 + * lra-constraints.cc (lra_constraints): Prevent removing insn + with reverse equivalence to memory if the memory was reloaded. + +2024-03-19 David Malcolm <dmalcolm@redhat.com> + + PR middle-end/114348 + * diagnostic-format-json.cc + (json_stderr_output_format::machine_readable_stderr_p): New. + (json_file_output_format::machine_readable_stderr_p): New. + * diagnostic-format-sarif.cc + (sarif_stream_output_format::machine_readable_stderr_p): New. + (sarif_file_output_format::machine_readable_stderr_p): New. + * diagnostic.cc (diagnostic_context::action_after_output): Move + "fnotice" to before "finish" call, so that we still have the + diagnostic_context. + (fnotice): Bail out if the user requested one of the + machine-readable diagnostic output formats on stderr. + * diagnostic.h + (diagnostic_output_format::machine_readable_stderr_p): New pure + virtual function. + (diagnostic_text_output_format::machine_readable_stderr_p): New. + (diagnostic_context::get_output_format): New accessor. + +2024-03-19 Edwin Lu <ewlu@rivosinc.com> + + PR target/114175 + * config/riscv/riscv.cc (riscv_setup_incoming_varargs): Only skip + riscv_funciton_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL + +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + * doc/install.texi (Prerequisites): Document use of autogen for + libstdc++. + +2024-03-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114151 + PR tree-optimization/114269 + PR tree-optimization/114322 + PR tree-optimization/114074 + * tree-chrec.cc (chrec_fold_multiply): Restrict the use of + unsigned arithmetic when actual overflow on constant operands + is observed. + +2024-03-19 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/arc/arc.cc (arc_setup_incoming_varargs): Only skip + arc_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-19 Xi Ruoyao <xry111@xry111.site> + + PR target/114175 + * config/loongarch/loongarch.cc + (loongarch_setup_incoming_varargs): Only skip + loongarch_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P + functions if arg.type is NULL. + +2024-03-19 Christophe Lyon <christophe.lyon@linaro.org> + + PR target/114323 + * config/arm/arm-mve-builtins.cc + (function_instance::reads_global_state_p): Take CP_READ_MEMORY + into account. + +2024-03-19 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/alpha/alpha.cc (alpha_setup_incoming_varargs): Only skip + function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-19 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/rs6000/rs6000-call.cc (setup_incoming_varargs): Only skip + rs6000_function_arg_advance_1 for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114375 + * tree-vect-slp.cc (vect_build_slp_tree_2): Compute the + load permutation for masked loads but reject it when any + such is necessary. + * tree-vect-stmts.cc (vectorizable_load): Reject masked + VMAT_ELEMENTWISE and VMAT_STRIDED_SLP as those are not + supported. + +2024-03-19 Mary Bennett <mary.bennett@embecosm.com> + + * common/config/riscv/riscv-common.cc: Create XCVbi extension + support. + * config/riscv/riscv.opt: Likewise. + * config/riscv/corev.md: Implement cv_branch<mode> pattern + for cv.beqimm and cv.bneimm. + * config/riscv/riscv.md: Add CORE-V branch immediate to RISC-V + branch instruction pattern. + * config/riscv/constraints.md: Implement constraints + cv_bi_s5 - signed 5-bit immediate. + * config/riscv/predicates.md: Implement predicate + const_int5s_operand - signed 5 bit immediate. + * doc/sourcebuild.texi: Add XCVbi documentation. + +2024-03-19 Chen Jiawei <jiawei@iscas.ac.cn> + + * config/riscv/riscv-cores.def (RISCV_TUNE): New def. + (RISCV_CORE): Ditto. + * config/riscv/riscv-opts.h (enum riscv_microarchitecture_type): New + option. + * config/riscv/riscv.cc: New def. + * config/riscv/riscv.md: New include. + * config/riscv/xiangshan.md: New file. + 2024-03-18 David Malcolm <dmalcolm@redhat.com> PR analyzer/110902 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 5fb3f81b7fb9..75de3250ecdc 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240319 +20240320 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 6531a0541f82..0d5c2189ff95 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,20 @@ +2024-03-19 Jakub Jelinek <jakub@redhat.com> + + PR analyzer/113505 + * region-model.cc (get_tree_for_byte_offset, + region_model::get_representative_path_var_1, + test_mem_ref, test_POINTER_PLUS_EXPR_then_MEM_REF): Use + char __attribute__((may_alias)) * as type of MEM_REF second argument. + +2024-03-19 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114286 + * kf.cc (class kf_atomic_exchange): Reimplement based on signature + seen in gimple, rather than user-facing signature. + (class kf_atomic_load): Likewise. + (class kf_atomic_store): New. + (register_atomic_builtins): Register kf_atomic_store. + 2024-03-18 David Malcolm <dmalcolm@redhat.com> PR analyzer/110902 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 71291e72d369..78b7dbe7f89f 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,12 @@ +2024-03-19 Jakub Jelinek <jakub@redhat.com> + + PR c/114364 + * c-omp.cc (enum check_loop_binding_expr_ctx): New type. + (check_loop_binding_expr): Remove context argument, add ctx + argument with check_loop_binding_expr_ctx type at the end. Don't + create diagnostic message from multiple pieces. + (c_omp_check_loop_binding_exprs): Adjust callers. + 2024-03-08 Jakub Jelinek <jakub@redhat.com> * c-common.cc (resolve_overloaded_atomic_exchange): Instead of setting diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 504bca895ca5..451a7f28b12f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +2024-03-19 Nathaniel Shead <nathanieloshead@gmail.com> + + * cp-tree.h (module_maybe_has_cmi_p): New function. + * decl.cc (grokfndecl): Mark block-scope functions as public if + they could be visible in other TUs. + * decl2.cc (no_linkage_error): Don't error for declarations that + could be defined in other TUs since C++20. Suppress duplicate + errors from 'check_global_declaration'. + * tree.cc (no_linkage_check): In relaxed mode, don't consider + types in a module CMI to have no linkage. + 2024-03-16 Nathaniel Shead <nathanieloshead@gmail.com> PR c++/112631 diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 64f7b8090eb4..0aab431e323b 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2024-03-19 Joseph Myers <josmyers@redhat.com> + + * de.po: Update. + 2024-03-18 Joseph Myers <josmyers@redhat.com> * fr.po, sv.po: Update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cb8154649a98..e865fa58e13e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,106 @@ +2024-03-19 Martin Jambor <mjambor@suse.cz> + + PR ipa/108802 + PR ipa/114254 + * g++.dg/ipa/iinline-4.C: New test. + * g++.dg/ipa/pr108802.C: Likewise. + +2024-03-19 Marek Polacek <polacek@redhat.com> + + * g++.dg/cpp2a/linkage-1.C: Use target c++14. + +2024-03-19 Jakub Jelinek <jakub@redhat.com> + + PR analyzer/113505 + * gcc.dg/analyzer/pr113505.c: New test. + +2024-03-19 Edwin Lu <ewlu@rivosinc.com> + + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c: Disable scheduling + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c: Ditto + * gcc.target/riscv/rvv/base/pr108185-1.c: Update test expectancies + * gcc.target/riscv/rvv/base/pr108185-2.c: Ditto + * gcc.target/riscv/rvv/base/pr108185-3.c: Ditto + * gcc.target/riscv/rvv/base/pr108185-4.c: Ditto + * gcc.target/riscv/rvv/base/pr108185-5.c: Ditto + * gcc.target/riscv/rvv/base/pr108185-6.c: Ditto + * gcc.target/riscv/rvv/base/pr108185-7.c: Ditto + * gcc.target/riscv/rvv/base/vcreate.c: Disable scheduling and update + test expectancies + * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c: Disable scheduling + * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c: Update test + expectancies + * gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c: Ditto + +2024-03-19 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114286 + * c-c++-common/analyzer/atomic-builtins-pr114286.c: New test. + +2024-03-19 Iain Sandoe <iain@sandoe.co.uk> + + PR target/114049 + * gcc.dg/framework-1.c: Use an IOKit header instead of a + Kernel one. + +2024-03-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114151 + PR tree-optimization/114269 + PR tree-optimization/114322 + PR tree-optimization/114074 + * gcc.dg/pr68317.c: Revert last change. + +2024-03-19 Christophe Lyon <christophe.lyon@linaro.org> + + PR target/114323 + * gcc.target/arm/mve/pr114323.c: New. + +2024-03-19 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * gcc.dg/c23-stdarg-9.c: New test. + +2024-03-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114375 + * gcc.dg/vect/vect-pr114375.c: New testcase. + +2024-03-19 Mary Bennett <mary.bennett@embecosm.com> + + * gcc.target/riscv/cv-bi-beqimm-compile-1.c: New test. + * gcc.target/riscv/cv-bi-beqimm-compile-2.c: New test. + * gcc.target/riscv/cv-bi-bneimm-compile-1.c: New test. + * gcc.target/riscv/cv-bi-bneimm-compile-2.c: New test. + * lib/target-supports.exp: Add proc for XCVbi. + +2024-03-19 Chen Jiawei <jiawei@iscas.ac.cn> + + * gcc.target/riscv/mcpu-xiangshan-nanhu.c: New test. + Co-Authored by: Lin Jiawei <jiawei.lin@epfl.ch> + +2024-03-19 Nathaniel Shead <nathanieloshead@gmail.com> + + * g++.dg/cpp2a/linkage-1.C: New test. + * g++.dg/modules/block-decl-3.h: New test. + * g++.dg/modules/block-decl-3_a.C: New test. + * g++.dg/modules/block-decl-3_b.C: New test. + * g++.dg/modules/block-decl-3_c.C: New test. + * g++.dg/modules/linkage-1_a.C: New test. + * g++.dg/modules/linkage-1_b.C: New test. + * g++.dg/modules/linkage-1_c.C: New test. + * g++.dg/modules/linkage-2.C: New test. + 2024-03-18 Jonathan Yong <10walls@gmail.com> * c-c++-common/Wrestrict.c: Fix typos in comments and diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a26908845e32..05bfa4e9e201 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,56 @@ +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114359 + * include/bits/random.tcc (binomial_distribution::param_type): + Ensure arithmetic is done as type double. + * testsuite/26_numerics/random/binomial_distribution/114359.cc: New test. + +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/101228 + * include/pstl/parallel_backend_tbb.h (TBB_SUPPRESS_DEPRECATED_MESSAGES): + Define before including <tbb/task.h> then undef afterwards. + +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + * include/Makefile.am [MAINTAINER_MODE]: Add target to + automatically update <bits/version.h>. + * include/Makefile.in: Regenerate. + +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + * doc/xml/manual/build_hacking.xml: Document generated files. + Update list of convenience libraries and sub-directories under + the src directory. + * doc/html/*: Regenerate. + +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/text_encoding-data.h: Regenerate. + * include/bits/unicode-data.h: Regenerate. + * scripts/gen_text_encoding_data.py: Fix header of generated + file to name the correct script. + +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/util/pstl/test_utils.h: Fix typos in comments. + +2024-03-19 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114367 + * include/bits/stl_bvector.h (_M_allocate): Use allocator's + construct function to begin lifetime of words. + +2024-03-19 Iain Sandoe <iain@sandoe.co.uk> + + * testsuite/lib/dg-options.exp (atomic_link_flags): Emit a -B + option for the path to the uninstalled libatomic. + +2024-03-19 Iain Sandoe <iain@sandoe.co.uk> + + * testsuite/lib/libstdc++.exp (v3_target_compile): Instead of + /dev/null, use a temporary file for test executables on Darwin. + 2024-03-18 François Dumont <fdumont@gcc.gnu.org> * include/debug/safe_iterator.tcc (_Safe_iterator<>::_M_can_advance): From 44ba7bcb752a40ec7490dea53d3a472ce633371d Mon Sep 17 00:00:00 2001 From: Lewis Hyatt <lhyatt@gmail.com> Date: Wed, 8 Nov 2023 16:13:14 -0500 Subject: [PATCH 148/551] diagnostics: Fix behavior of permerror options after diagnostic pop [PR111918] When a diagnostic pragma changes the classification of a given diagnostic, the global options flags (such as warn_narrowing, etc.) may get changed too. Specifically, if a warning was not enabled initially and was later enabled by a pragma, then the corresponding global flag will change from false to true when the pragma is processed. That change is permanent and is not undone by a subsequent `#pragma GCC diagnostic pop'; the warning flag needs to remain enabled since a diagnostic could be generated later on for a source location prior to the pop. So in order to support popping to the initial classification, given that the global options flags no longer reflect that state, the diagnostic_context object itself remembers the way things were before it changed anything. The current implementation works fine for diagnostics that are always errors or always warnings, but it doesn't do the right thing for diagnostics that could be either, such as -Wnarrowing. The classification of that diagnostic (or any permerror diagnostic) depends on the state of -fpermissive; for the particular case of -Wnarrowing it also matters whether a compile-time or run-time narrowing is being diagnosed. The problem is that the current implementation insists on recording whether an enabled diagnostic should be a DK_WARNING or a DK_ERROR, and then, after popping to the initial state, it overrides it always to that type only. Fix that up by adding a new internal diagnostic type DK_ANY. This just indicates that the diagnostic is enabled without mandating exactly what type of diagnostic it should be. Then the diagnostic can be emitted with whatever type the frontend asks for. Incidentally, while making this change, I noticed that classify_diagnostic() spends some time computing a return value (the old classification kind) that is not used anywhere. The computed value seems to have some problems, mainly that it does not take into account `#pragma GCC diagnostic pop' at all, and so the returned value doesn't seem like it could make sense in many contexts. Given it would also not be desirable to leak the new internal-only DK_ANY type to outside callers, I think it would make sense in a subsequent cleanup patch to remove the return value altogether. gcc/ChangeLog: PR c++/111918 * diagnostic-core.h (enum diagnostic_t): Add DK_ANY special flag. * diagnostic.cc (diagnostic_option_classifier::classify_diagnostic): Make use of DK_ANY to indicate a diagnostic was initially enabled. (diagnostic_context::diagnostic_enabled): Do not change the type of a diagnostic if the saved classification is type DK_ANY. gcc/testsuite/ChangeLog: PR c++/111918 * g++.dg/cpp0x/Wnarrowing21a.C: New test. * g++.dg/cpp0x/Wnarrowing21b.C: New test. * g++.dg/cpp0x/Wnarrowing21c.C: New test. * g++.dg/cpp0x/Wnarrowing21d.C: New test. --- gcc/diagnostic-core.h | 5 ++++- gcc/diagnostic.cc | 13 ++++++++++--- gcc/testsuite/g++.dg/cpp0x/Wnarrowing21a.C | 14 ++++++++++++++ gcc/testsuite/g++.dg/cpp0x/Wnarrowing21b.C | 9 +++++++++ gcc/testsuite/g++.dg/cpp0x/Wnarrowing21c.C | 9 +++++++++ gcc/testsuite/g++.dg/cpp0x/Wnarrowing21d.C | 9 +++++++++ 6 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/Wnarrowing21a.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/Wnarrowing21b.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/Wnarrowing21c.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/Wnarrowing21d.C diff --git a/gcc/diagnostic-core.h b/gcc/diagnostic-core.h index f5e1e500dc34..8071cc1f69b5 100644 --- a/gcc/diagnostic-core.h +++ b/gcc/diagnostic-core.h @@ -33,7 +33,10 @@ typedef enum DK_LAST_DIAGNOSTIC_KIND, /* This is used for tagging pragma pops in the diagnostic classification history chain. */ - DK_POP + DK_POP, + /* This is used internally to note that a diagnostic is enabled + without mandating any specific type. */ + DK_ANY, } diagnostic_t; /* RAII-style class for grouping related diagnostics. */ diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc index 8e4621f8031a..6ffd62361462 100644 --- a/gcc/diagnostic.cc +++ b/gcc/diagnostic.cc @@ -1136,8 +1136,7 @@ classify_diagnostic (const diagnostic_context *context, if (old_kind == DK_UNSPECIFIED) { old_kind = !context->option_enabled_p (option_index) - ? DK_IGNORED : (context->warning_as_error_requested_p () - ? DK_ERROR : DK_WARNING); + ? DK_IGNORED : DK_ANY; m_classify_diagnostic[option_index] = old_kind; } @@ -1472,7 +1471,15 @@ diagnostic_context::diagnostic_enabled (diagnostic_info *diagnostic) option. */ if (diag_class == DK_UNSPECIFIED && !option_unspecified_p (diagnostic->option_index)) - diagnostic->kind = m_option_classifier.get_current_override (diagnostic->option_index); + { + const diagnostic_t new_kind + = m_option_classifier.get_current_override (diagnostic->option_index); + if (new_kind != DK_ANY) + /* DK_ANY means the diagnostic is not to be ignored, but we don't want + to change it specifically to DK_ERROR or DK_WARNING; we want to + preserve whatever the caller has specified. */ + diagnostic->kind = new_kind; + } /* This allows for future extensions, like temporarily disabling warnings for ranges of source code. */ diff --git a/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21a.C b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21a.C new file mode 100644 index 000000000000..fa865987e5f6 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21a.C @@ -0,0 +1,14 @@ +/* PR c++/111918 */ +/* { dg-do compile { target c++11 } } */ +/* { dg-options "" } Suppress default -pedantic-errors so we can test permerror functionality. */ +extern int g (); +float f1{123456789}; /* { dg-error "-Wnarrowing" } */ +float f2{g ()}; /* { dg-warning "-Wnarrowing" } */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnarrowing" +float f3{123456789}; /* { dg-bogus "-Wnarrowing" } */ +float f4{g ()}; /* { dg-bogus "-Wnarrowing" } */ +#pragma GCC diagnostic pop +float f5{123456789}; /* { dg-bogus "warning" "warning in place of error" } */ + /* { dg-error "-Wnarrowing" "" { target *-*-* } .-1 } */ +float f6{g ()}; /* { dg-warning "-Wnarrowing" } */ diff --git a/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21b.C b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21b.C new file mode 100644 index 000000000000..b8049358acc4 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21b.C @@ -0,0 +1,9 @@ +/* PR c++/111918 */ +/* { dg-do compile { target c++11 } } */ +/* { dg-options "-Wno-error=narrowing" } */ +float f1{123456789}; /* { dg-warning "-Wnarrowing" } */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnarrowing" +float f2{123456789}; /* { dg-bogus "-Wnarrowing" } */ +#pragma GCC diagnostic pop +float f3{123456789}; /* { dg-warning "-Wnarrowing" } */ diff --git a/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21c.C b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21c.C new file mode 100644 index 000000000000..6a98dd081767 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21c.C @@ -0,0 +1,9 @@ +/* PR c++/111918 */ +/* { dg-do compile { target c++11 } } */ +/* { dg-options "-fpermissive" } */ +float f1{123456789}; /* { dg-warning "-Wnarrowing" } */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnarrowing" +float f2{123456789}; /* { dg-bogus "-Wnarrowing" } */ +#pragma GCC diagnostic pop +float f3{123456789}; /* { dg-warning "-Wnarrowing" } */ diff --git a/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21d.C b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21d.C new file mode 100644 index 000000000000..a371e0a964f9 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/Wnarrowing21d.C @@ -0,0 +1,9 @@ +/* PR c++/111918 */ +/* { dg-do compile { target c++11 } } */ +/* { dg-options "-Wno-narrowing" } */ +float f1{123456789}; /* { dg-bogus "-Wnarrowing" } */ +#pragma GCC diagnostic push +#pragma GCC diagnostic warning "-Wnarrowing" +float f2{123456789}; /* { dg-warning "-Wnarrowing" } */ +#pragma GCC diagnostic pop +float f3{123456789}; /* { dg-bogus "-Wnarrowing" } */ From 0529f98b7b1b0eadb009a7aa3161462897e53745 Mon Sep 17 00:00:00 2001 From: Chenghui Pan <panchenghui@loongson.cn> Date: Fri, 15 Mar 2024 09:30:25 +0800 Subject: [PATCH 149/551] LoongArch: Remove unused/useless definitions. This patch removes some unnecessary definitions of target hook functions according to the documentation of GCC. gcc/ChangeLog: * config/loongarch/loongarch-protos.h (loongarch_cfun_has_cprestore_slot_p): Delete. (loongarch_adjust_insn_length): Delete. (current_section_name): Delete. (loongarch_split_symbol_type): Delete. * config/loongarch/loongarch.cc (loongarch_case_values_threshold): Delete. (loongarch_spill_class): Delete. (TARGET_OPTAB_SUPPORTED_P): Delete. (TARGET_CASE_VALUES_THRESHOLD): Delete. (TARGET_SPILL_CLASS): Delete. --- gcc/config/loongarch/loongarch-protos.h | 5 ----- gcc/config/loongarch/loongarch.cc | 26 ------------------------- 2 files changed, 31 deletions(-) diff --git a/gcc/config/loongarch/loongarch-protos.h b/gcc/config/loongarch/loongarch-protos.h index 1fdfda9af01f..871544f760c0 100644 --- a/gcc/config/loongarch/loongarch-protos.h +++ b/gcc/config/loongarch/loongarch-protos.h @@ -93,7 +93,6 @@ extern void loongarch_split_lsx_copy_d (rtx, rtx, rtx, rtx (*)(rtx, rtx, rtx)); extern void loongarch_split_lsx_insert_d (rtx, rtx, rtx, rtx); extern void loongarch_split_lsx_fill_d (rtx, rtx); extern const char *loongarch_output_move (rtx, rtx); -extern bool loongarch_cfun_has_cprestore_slot_p (void); #ifdef RTX_CODE extern void loongarch_expand_scc (rtx *); extern bool loongarch_expand_vec_cmp (rtx *); @@ -135,7 +134,6 @@ extern int loongarch_class_max_nregs (enum reg_class, machine_mode); extern machine_mode loongarch_hard_regno_caller_save_mode (unsigned int, unsigned int, machine_mode); -extern int loongarch_adjust_insn_length (rtx_insn *, int); extern const char *loongarch_output_conditional_branch (rtx_insn *, rtx *, const char *, const char *); @@ -157,7 +155,6 @@ extern bool loongarch_global_symbol_noweak_p (const_rtx); extern bool loongarch_weak_symbol_p (const_rtx); extern bool loongarch_symbol_binds_local_p (const_rtx); -extern const char *current_section_name (void); extern unsigned int current_section_flags (void); extern bool loongarch_use_ins_ext_p (rtx, HOST_WIDE_INT, HOST_WIDE_INT); extern bool loongarch_check_zero_div_p (void); @@ -198,8 +195,6 @@ extern bool loongarch_epilogue_uses (unsigned int); extern bool loongarch_load_store_bonding_p (rtx *, machine_mode, bool); extern bool loongarch_split_symbol_type (enum loongarch_symbol_type); -typedef rtx (*mulsidi3_gen_fn) (rtx, rtx, rtx); - extern void loongarch_register_frame_header_opt (void); extern void loongarch_expand_vec_cond_expr (machine_mode, machine_mode, rtx *); extern void loongarch_expand_vec_cond_mask_expr (machine_mode, machine_mode, diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 5344f2a6987e..570e9aebad1e 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -10816,23 +10816,6 @@ loongarch_expand_vec_cmp (rtx operands[]) return true; } -/* Implement TARGET_CASE_VALUES_THRESHOLD. */ - -unsigned int -loongarch_case_values_threshold (void) -{ - return default_case_values_threshold (); -} - -/* Implement TARGET_SPILL_CLASS. */ - -static reg_class_t -loongarch_spill_class (reg_class_t rclass ATTRIBUTE_UNUSED, - machine_mode mode ATTRIBUTE_UNUSED) -{ - return NO_REGS; -} - /* Implement TARGET_PROMOTE_FUNCTION_MODE. */ /* This function is equivalent to default_promote_function_mode_always_promote @@ -11287,9 +11270,6 @@ loongarch_asm_code_end (void) #undef TARGET_FUNCTION_ARG_BOUNDARY #define TARGET_FUNCTION_ARG_BOUNDARY loongarch_function_arg_boundary -#undef TARGET_OPTAB_SUPPORTED_P -#define TARGET_OPTAB_SUPPORTED_P loongarch_optab_supported_p - #undef TARGET_VECTOR_MODE_SUPPORTED_P #define TARGET_VECTOR_MODE_SUPPORTED_P loongarch_vector_mode_supported_p @@ -11359,18 +11339,12 @@ loongarch_asm_code_end (void) #undef TARGET_SCHED_REASSOCIATION_WIDTH #define TARGET_SCHED_REASSOCIATION_WIDTH loongarch_sched_reassociation_width -#undef TARGET_CASE_VALUES_THRESHOLD -#define TARGET_CASE_VALUES_THRESHOLD loongarch_case_values_threshold - #undef TARGET_ATOMIC_ASSIGN_EXPAND_FENV #define TARGET_ATOMIC_ASSIGN_EXPAND_FENV loongarch_atomic_assign_expand_fenv #undef TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS #define TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS true -#undef TARGET_SPILL_CLASS -#define TARGET_SPILL_CLASS loongarch_spill_class - #undef TARGET_HARD_REGNO_NREGS #define TARGET_HARD_REGNO_NREGS loongarch_hard_regno_nregs #undef TARGET_HARD_REGNO_MODE_OK From 1938d9d2bb8ecf84d2aa3c3ef2fb78ec19433057 Mon Sep 17 00:00:00 2001 From: Chenghui Pan <panchenghui@loongson.cn> Date: Fri, 15 Mar 2024 09:30:26 +0800 Subject: [PATCH 150/551] LoongArch: Change loongarch_expand_vec_cmp()'s return type from bool to void. This function is always return true at the end of function implementation, so the return value is useless. gcc/ChangeLog: * config/loongarch/lasx.md (vec_cmp<mode><mode256_i>): Remove checking of loongarch_expand_vec_cmp()'s return value. (vec_cmpu<ILASX:mode><mode256_i>): Ditto. * config/loongarch/lsx.md (vec_cmp<mode><mode_i>): Ditto. (vec_cmpu<ILSX:mode><mode_i>): Ditto. * config/loongarch/loongarch-protos.h (loongarch_expand_vec_cmp): Change loongarch_expand_vec_cmp()'s return type from bool to void. * config/loongarch/loongarch.cc (loongarch_expand_vec_cmp): Ditto. --- gcc/config/loongarch/lasx.md | 6 ++---- gcc/config/loongarch/loongarch-protos.h | 2 +- gcc/config/loongarch/loongarch.cc | 3 +-- gcc/config/loongarch/lsx.md | 6 ++---- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/gcc/config/loongarch/lasx.md b/gcc/config/loongarch/lasx.md index 3f25c0c17563..2fa5e46c8e8a 100644 --- a/gcc/config/loongarch/lasx.md +++ b/gcc/config/loongarch/lasx.md @@ -1378,8 +1378,7 @@ (match_operand:LASX 3 "register_operand")]))] "ISA_HAS_LASX" { - bool ok = loongarch_expand_vec_cmp (operands); - gcc_assert (ok); + loongarch_expand_vec_cmp (operands); DONE; }) @@ -1390,8 +1389,7 @@ (match_operand:ILASX 3 "register_operand")]))] "ISA_HAS_LASX" { - bool ok = loongarch_expand_vec_cmp (operands); - gcc_assert (ok); + loongarch_expand_vec_cmp (operands); DONE; }) diff --git a/gcc/config/loongarch/loongarch-protos.h b/gcc/config/loongarch/loongarch-protos.h index 871544f760c0..e3ed2b912a55 100644 --- a/gcc/config/loongarch/loongarch-protos.h +++ b/gcc/config/loongarch/loongarch-protos.h @@ -95,7 +95,7 @@ extern void loongarch_split_lsx_fill_d (rtx, rtx); extern const char *loongarch_output_move (rtx, rtx); #ifdef RTX_CODE extern void loongarch_expand_scc (rtx *); -extern bool loongarch_expand_vec_cmp (rtx *); +extern void loongarch_expand_vec_cmp (rtx *); extern void loongarch_expand_conditional_branch (rtx *); extern void loongarch_expand_conditional_move (rtx *); extern void loongarch_expand_conditional_trap (rtx); diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 570e9aebad1e..f11cf149bbf7 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -10807,13 +10807,12 @@ loongarch_expand_vec_cond_mask_expr (machine_mode mode, machine_mode vimode, } /* Expand integer vector comparison */ -bool +void loongarch_expand_vec_cmp (rtx operands[]) { rtx_code code = GET_CODE (operands[1]); loongarch_expand_lsx_cmp (operands[0], code, operands[2], operands[3]); - return true; } /* Implement TARGET_PROMOTE_FUNCTION_MODE. */ diff --git a/gcc/config/loongarch/lsx.md b/gcc/config/loongarch/lsx.md index b9b94b9079cb..87d3e7c5d9fe 100644 --- a/gcc/config/loongarch/lsx.md +++ b/gcc/config/loongarch/lsx.md @@ -518,8 +518,7 @@ (match_operand:LSX 3 "register_operand")]))] "ISA_HAS_LSX" { - bool ok = loongarch_expand_vec_cmp (operands); - gcc_assert (ok); + loongarch_expand_vec_cmp (operands); DONE; }) @@ -530,8 +529,7 @@ (match_operand:ILSX 3 "register_operand")]))] "ISA_HAS_LSX" { - bool ok = loongarch_expand_vec_cmp (operands); - gcc_assert (ok); + loongarch_expand_vec_cmp (operands); DONE; }) From 994d8f922b9d88f45775f57a490409ab1c3baf59 Mon Sep 17 00:00:00 2001 From: Chenghui Pan <panchenghui@loongson.cn> Date: Fri, 15 Mar 2024 09:30:27 +0800 Subject: [PATCH 151/551] LoongArch: Combine UNITS_PER_FP_REG and UNITS_PER_FPREG macros. These macros are completely same in definition, so we can keep the previous one and eliminate later one. gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_hard_regno_mode_ok_uncached): Combine UNITS_PER_FP_REG and UNITS_PER_FPREG macros. (loongarch_hard_regno_nregs): Ditto. (loongarch_class_max_nregs): Ditto. (loongarch_get_separate_components): Ditto. (loongarch_process_components): Ditto. * config/loongarch/loongarch.h (UNITS_PER_FPREG): Ditto. (UNITS_PER_HWFPVALUE): Ditto. (UNITS_PER_FPVALUE): Ditto. --- gcc/config/loongarch/loongarch.cc | 10 +++++----- gcc/config/loongarch/loongarch.h | 7 ++----- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index f11cf149bbf7..030957db4e72 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -6776,7 +6776,7 @@ loongarch_hard_regno_mode_ok_uncached (unsigned int regno, machine_mode mode) and TRUNC. There's no point allowing sizes smaller than a word, because the FPU has no appropriate load/store instructions. */ if (mclass == MODE_INT) - return size >= MIN_UNITS_PER_WORD && size <= UNITS_PER_FPREG; + return size >= MIN_UNITS_PER_WORD && size <= UNITS_PER_FP_REG; } return false; @@ -6819,7 +6819,7 @@ loongarch_hard_regno_nregs (unsigned int regno, machine_mode mode) if (LASX_SUPPORTED_MODE_P (mode)) return 1; - return (GET_MODE_SIZE (mode) + UNITS_PER_FPREG - 1) / UNITS_PER_FPREG; + return (GET_MODE_SIZE (mode) + UNITS_PER_FP_REG - 1) / UNITS_PER_FP_REG; } /* All other registers are word-sized. */ @@ -6854,7 +6854,7 @@ loongarch_class_max_nregs (enum reg_class rclass, machine_mode mode) else if (LSX_SUPPORTED_MODE_P (mode)) size = MIN (size, UNITS_PER_LSX_REG); else - size = MIN (size, UNITS_PER_FPREG); + size = MIN (size, UNITS_PER_FP_REG); } left &= ~reg_class_contents[FP_REGS]; } @@ -8228,7 +8228,7 @@ loongarch_get_separate_components (void) if (IMM12_OPERAND (offset)) bitmap_set_bit (components, regno); - offset -= UNITS_PER_FPREG; + offset -= UNITS_PER_FP_REG; } /* Don't mess with the hard frame pointer. */ @@ -8307,7 +8307,7 @@ loongarch_process_components (sbitmap components, loongarch_save_restore_fn fn) if (bitmap_bit_p (components, regno)) loongarch_save_restore_reg (mode, regno, offset, fn); - offset -= UNITS_PER_FPREG; + offset -= UNITS_PER_FP_REG; } } diff --git a/gcc/config/loongarch/loongarch.h b/gcc/config/loongarch/loongarch.h index bf2351f0968f..888a633961dc 100644 --- a/gcc/config/loongarch/loongarch.h +++ b/gcc/config/loongarch/loongarch.h @@ -138,19 +138,16 @@ along with GCC; see the file COPYING3. If not see /* Width of a LASX vector register in bits. */ #define BITS_PER_LASX_REG (UNITS_PER_LASX_REG * BITS_PER_UNIT) -/* For LARCH, width of a floating point register. */ -#define UNITS_PER_FPREG (TARGET_DOUBLE_FLOAT ? 8 : 4) - /* The largest size of value that can be held in floating-point registers and moved with a single instruction. */ #define UNITS_PER_HWFPVALUE \ - (TARGET_SOFT_FLOAT ? 0 : UNITS_PER_FPREG) + (TARGET_SOFT_FLOAT ? 0 : UNITS_PER_FP_REG) /* The largest size of value that can be held in floating-point registers. */ #define UNITS_PER_FPVALUE \ (TARGET_SOFT_FLOAT ? 0 \ - : TARGET_SINGLE_FLOAT ? UNITS_PER_FPREG \ + : TARGET_SINGLE_FLOAT ? UNITS_PER_FP_REG \ : LONG_DOUBLE_TYPE_SIZE / BITS_PER_UNIT) /* The number of bytes in a double. */ From 6a55e39bdb1fdb570730c08413ebbe744e493411 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 19 Mar 2024 15:25:16 +0100 Subject: [PATCH 152/551] middle-end/113396 - int128 array index and value-ranges The following fixes bogus truncation of a value-range for an int128 array index when computing the maximum extent for a variable array reference. Instead of possibly slowing things down by using widest_int the following makes sure the range bounds fit within the constraints offset_int were designed for. PR middle-end/113396 * tree-dfa.cc (get_ref_base_and_extent): Use index range bounds only if they fit within the address-range constraints of offset_int. * gcc.dg/torture/pr113396.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr113396.c | 19 +++++++++++++++++++ gcc/tree-dfa.cc | 6 ++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr113396.c diff --git a/gcc/testsuite/gcc.dg/torture/pr113396.c b/gcc/testsuite/gcc.dg/torture/pr113396.c new file mode 100644 index 000000000000..585f717bddab --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr113396.c @@ -0,0 +1,19 @@ +/* { dg-do run } */ +/* { dg-require-effective-target int128 } */ + +unsigned char m[] = {5, 79, 79, 79, 79}; +__int128 p; +int main() +{ + int g1 = 0; + p = 0; + for (int aj = 0; aj < 256; aj++) + { + m[0] = -4; + for (; p >= 0; p -= 1) { + g1 = m[p]; + } + } + if (g1 != 0xfc) + __builtin_abort(); +} diff --git a/gcc/tree-dfa.cc b/gcc/tree-dfa.cc index cbd3774b21f5..93e53b29a6d0 100644 --- a/gcc/tree-dfa.cc +++ b/gcc/tree-dfa.cc @@ -549,7 +549,8 @@ get_ref_base_and_extent (tree exp, poly_int64 *poffset, /* Try to constrain maxsize with range information. */ offset_int omax = offset_int::from (max, TYPE_SIGN (TREE_TYPE (index))); - if (known_lt (lbound, omax)) + if (wi::get_precision (max) <= ADDR_MAX_BITSIZE + && known_lt (lbound, omax)) { poly_offset_int rmaxsize; rmaxsize = (omax - lbound + 1) @@ -567,7 +568,8 @@ get_ref_base_and_extent (tree exp, poly_int64 *poffset, /* Try to adjust bit_offset with range information. */ offset_int omin = offset_int::from (min, TYPE_SIGN (TREE_TYPE (index))); - if (known_le (lbound, omin)) + if (wi::get_precision (min) <= ADDR_MAX_BITSIZE + && known_le (lbound, omin)) { poly_offset_int woffset = wi::sext (omin - lbound, From cd1ce3b326d49c16bade1fb76daa2ee67586efc9 Mon Sep 17 00:00:00 2001 From: "demin.han" <demin.han@starfivetech.com> Date: Wed, 13 Mar 2024 18:43:26 +0800 Subject: [PATCH 153/551] RISC-V: Introduce option -mrvv-max-lmul for RVV autovec Following replacement of -param=riscv-autovec-preference with -mrvv-vector-bits, this patch replaces -param=riscv-autovec-lmul with -mrvv-max-lmul. -param issue is mentioned in following links: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112648 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112651 Tested On RV64 and RV32, no regression. PR target/112651 gcc/ChangeLog: * config/riscv/riscv-opts.h (enum riscv_autovec_lmul_enum): Rename (enum rvv_max_lmul_enum): Ditto (TARGET_MAX_LMUL): Ditto * config/riscv/riscv-v.cc (preferred_simd_mode): Ditto * config/riscv/riscv-vector-costs.cc (costs::record_potential_unexpected_spills): Ditto (costs::better_main_loop_than_p): Ditto * config/riscv/riscv.opt: Replace -param=riscv-autovec-lmul with -mrvv-max-lmul gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/autovec/bug-2.C: Replace option * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-10.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-12.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-11.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-12.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-13.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-14.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr111317.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr111848.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113112-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113112-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113112-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113112-4.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113112-5.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113247-1.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113247-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113281-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113281-4.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr113281-5.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/pr114264.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-10.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-11.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-12.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-2.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-3.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-4.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-5.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-6.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-7.c: Ditto * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-9.c: Ditto * gcc.target/riscv/rvv/autovec/bug-1.c: Ditto * gcc.target/riscv/rvv/autovec/bug-2.c: Ditto * gcc.target/riscv/rvv/autovec/bug-3.c: Ditto * gcc.target/riscv/rvv/autovec/bug-4.c: Ditto * gcc.target/riscv/rvv/autovec/bug-5.c: Ditto * gcc.target/riscv/rvv/autovec/bug-8.c: Ditto * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-3.c: Ditto * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-4.c: Ditto * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-7.c: Ditto * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-8.c: Ditto * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-1.c: Ditto * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c: Ditto * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-1.c: Ditto * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-2.c: Ditto * gcc.target/riscv/rvv/autovec/fold-min-poly.c: Ditto * gcc.target/riscv/rvv/autovec/partial/gimple_fold-1.c: Ditto * gcc.target/riscv/rvv/autovec/partial/select_vl-2.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-1.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-16.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-17.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-18.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-19.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-2.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-3.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-4.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-5.c: Ditto * gcc.target/riscv/rvv/autovec/partial/slp-6.c: Ditto * gcc.target/riscv/rvv/autovec/pr112450.c: Ditto * gcc.target/riscv/rvv/autovec/pr112598-1.c: Ditto * gcc.target/riscv/rvv/autovec/pr112598-2.c: Ditto * gcc.target/riscv/rvv/autovec/pr112694-1.c: Ditto * gcc.target/riscv/rvv/autovec/pr112999.c: Ditto * gcc.target/riscv/rvv/autovec/pr113393-2.c: Ditto * gcc.target/riscv/rvv/autovec/series-1.c: Ditto * gcc.target/riscv/rvv/autovec/series_run-1.c: Ditto * gcc.target/riscv/rvv/autovec/slp-interleave-1.c: Ditto * gcc.target/riscv/rvv/autovec/slp-interleave-2.c: Ditto * gcc.target/riscv/rvv/autovec/slp-interleave-3.c: Ditto * gcc.target/riscv/rvv/autovec/slp-interleave-4.c: Ditto * gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-10.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-12.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-13.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-14.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/abs-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/abs-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/and-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/and-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/and-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/avg-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/avg-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/avg-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/avg-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/avg-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/avg-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/bswap16-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cmp-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cmp-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cmp-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cmp-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cmp-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cmp-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-10.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-11.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-12.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-13.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-14.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/combine-merge-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls/compress-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/compress-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/compress-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/compress-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/compress-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/compress-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_abs-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_add-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_add-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_and-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-10.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-11.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-12.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_convert-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_copysign-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_div-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_div-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_ext-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_ext-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_ext-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_ext-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_ext-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_fma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_fma-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_fms-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_fnma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_fnma-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_fnms-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_ior-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_max-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_max-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_min-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_min-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_mod-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_mul-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_mul-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_mulh-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_narrow-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_narrow-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_neg-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_neg-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_not-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_shift-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_shift-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_sqrt-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_sub-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_sub-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_trunc-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_trunc-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_trunc-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_trunc-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_trunc-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wadd-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wadd-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wadd-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wadd-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wfma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wfma-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wfms-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wfnma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wmul-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wmul-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wmul-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wsub-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wsub-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wsub-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_wsub-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cond_xor-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/consecutive-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/consecutive-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/const-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/const-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/const-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/const-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/const-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-10.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-11.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-12.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/convert-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls/cvt-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/div-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/dup-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/dup-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/dup-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/dup-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/dup-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/dup-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/dup-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ext-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ext-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ext-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ext-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ext-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/extract-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/extract-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-add-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-add-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-add-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-div-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-div-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-div-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-max-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-max-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-max-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-max-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-max-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-min-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-min-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-min-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-min-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-min-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-mul-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-mul-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-mul-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fma-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fma-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fma-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fma-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fma-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fma-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fms-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fms-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fms-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnma-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnma-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnma-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnma-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnma-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnma-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnms-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnms-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/fnms-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ior-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ior-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/ior-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mask-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mask-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mask-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-ceil-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-floor-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-iceil-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-iceil-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-ifloor-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-ifloor-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-irint-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-irint-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-iround-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-iround-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lceil-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lceil-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lceil-rv32-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lceilf-rv64-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lfloor-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lfloor-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lfloor-rv32-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lfloorf-rv64-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llceilf-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llfloor-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llfloorf-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llrint-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llrintf-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llrintf16-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llround-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llroundf-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-llroundf16-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lrint-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lrint-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lrint-rv32-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lrintf-rv64-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv32-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv64-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lround-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lround-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lround-rv32-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lroundf-rv64-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv32-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv64-0.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-rint-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-round-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-roundeven-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/math-trunc-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/max-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/merge-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/merge-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/merge-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/merge-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/merge-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/merge-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/merge-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/min-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/minus-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/minus-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/minus-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/misalign-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mod-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-10.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-11.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-12.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-13.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-14.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-15.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-16.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-17.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mov-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mulh-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/mult-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/narrow-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/narrow-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/narrow-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/neg-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/neg-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/not-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/perm-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/perm-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/perm-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/perm-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/perm-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/perm-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/perm-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/plus-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/plus-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/plus-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-10.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-11.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-12.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-13.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-14.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-15.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-16.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-17.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-18.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-19.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-20.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-21.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/reduc-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/repeat-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls/series-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/series-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/series-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/series-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/shift-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/shift-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/shift-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/shift-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/shift-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/shift-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/spill-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/spill-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/spill-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/spill-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/spill-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/sqrt-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trailing-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trailing-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trailing-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trailing-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trailing-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trailing-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trailing-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trunc-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trunc-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trunc-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trunc-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/trunc-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-10.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-11.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-12.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-13.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-14.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-15.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-16.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-17.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-18.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-19.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-20.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-21.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-22.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-5.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-6.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-7.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-8.c: Ditto * gcc.target/riscv/rvv/autovec/vls/vec-set-9.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wadd-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wadd-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wadd-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wadd-4.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wfma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wfma-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wfma-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wfms-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wfnma-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wfnms-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wmul-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wmul-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wmul-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wred-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wred-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wred-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wsub-1.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wsub-2.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wsub-3.c: Ditto * gcc.target/riscv/rvv/autovec/vls/wsub-4.c: Ditto * gcc.target/riscv/rvv/autovec/widen/widen_reduc-1.c: Ditto * gcc.target/riscv/rvv/autovec/widen/widen_reduc_order-2.c: Ditto * gcc.target/riscv/rvv/autovec/zve32f-3.c: Ditto * gcc.target/riscv/rvv/autovec/zve32x-3.c: Ditto * gcc.target/riscv/rvv/autovec/zve64d-3.c: Ditto * gcc.target/riscv/rvv/autovec/zve64f-3.c: Ditto * gcc.target/riscv/rvv/autovec/zve64x-3.c: Ditto * gcc.target/riscv/rvv/base/cpymem-1.c: Ditto * gcc.target/riscv/rvv/base/cpymem-2.c: Ditto * gcc.target/riscv/rvv/rvv.exp: Ditto * gcc.target/riscv/rvv/vsetvl/pr111255.c: Ditto * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c: Ditto * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-2.c: Ditto Signed-off-by: demin.han <demin.han@starfivetech.com> --- gcc/config/riscv/riscv-opts.h | 4 +- gcc/config/riscv/riscv-v.cc | 2 +- gcc/config/riscv/riscv-vector-costs.cc | 4 +- gcc/config/riscv/riscv.opt | 20 +++--- .../g++.target/riscv/rvv/autovec/bug-2.C | 2 +- .../costmodel/riscv/rvv/dynamic-lmul-ice-1.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul-ice-2.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul-ice-3.c | 2 +- .../riscv/rvv/dynamic-lmul-mixed-1.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul1-1.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul1-2.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul1-3.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul1-4.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul1-5.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul1-6.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul1-7.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul2-1.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul2-2.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul2-3.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul2-4.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul2-5.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul2-6.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul2-7.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-1.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-10.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-11.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-12.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-2.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-3.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-5.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-6.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-7.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-8.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul4-9.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-1.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-10.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-11.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-12.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-13.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-14.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-2.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-3.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-4.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-5.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-6.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-7.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-8.c | 2 +- .../costmodel/riscv/rvv/dynamic-lmul8-9.c | 2 +- .../costmodel/riscv/rvv/no-dynamic-lmul-1.c | 2 +- .../vect/costmodel/riscv/rvv/pr111317.c | 2 +- .../vect/costmodel/riscv/rvv/pr111848.c | 2 +- .../vect/costmodel/riscv/rvv/pr113112-1.c | 2 +- .../vect/costmodel/riscv/rvv/pr113112-2.c | 2 +- .../vect/costmodel/riscv/rvv/pr113112-3.c | 2 +- .../vect/costmodel/riscv/rvv/pr113112-4.c | 2 +- .../vect/costmodel/riscv/rvv/pr113112-5.c | 2 +- .../vect/costmodel/riscv/rvv/pr113247-1.c | 2 +- .../vect/costmodel/riscv/rvv/pr113247-2.c | 2 +- .../vect/costmodel/riscv/rvv/pr113281-3.c | 2 +- .../vect/costmodel/riscv/rvv/pr113281-4.c | 2 +- .../vect/costmodel/riscv/rvv/pr113281-5.c | 2 +- .../vect/costmodel/riscv/rvv/pr114264.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-10.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-11.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-12.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-2.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-3.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-4.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-5.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-6.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-7.c | 2 +- .../vect/costmodel/riscv/rvv/vla_vs_vls-9.c | 2 +- .../gcc.target/riscv/rvv/autovec/bug-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/bug-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/bug-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/bug-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/bug-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/bug-8.c | 2 +- .../riscv/rvv/autovec/cmp/cmp_vi-3.c | 2 +- .../riscv/rvv/autovec/cmp/cmp_vi-4.c | 2 +- .../riscv/rvv/autovec/cmp/cmp_vi-7.c | 2 +- .../riscv/rvv/autovec/cmp/cmp_vi-8.c | 2 +- .../rvv/autovec/cond/cond_widen_reduc-1.c | 2 +- .../rvv/autovec/cond/cond_widen_reduc-2.c | 2 +- .../rvv/autovec/cond/cond_widen_reduc_run-1.c | 2 +- .../rvv/autovec/cond/cond_widen_reduc_run-2.c | 2 +- .../riscv/rvv/autovec/fold-min-poly.c | 2 +- .../riscv/rvv/autovec/partial/gimple_fold-1.c | 2 +- .../riscv/rvv/autovec/partial/select_vl-2.c | 2 +- .../riscv/rvv/autovec/partial/slp-1.c | 8 +-- .../riscv/rvv/autovec/partial/slp-16.c | 6 +- .../riscv/rvv/autovec/partial/slp-17.c | 6 +- .../riscv/rvv/autovec/partial/slp-18.c | 6 +- .../riscv/rvv/autovec/partial/slp-19.c | 6 +- .../riscv/rvv/autovec/partial/slp-2.c | 4 +- .../riscv/rvv/autovec/partial/slp-3.c | 4 +- .../riscv/rvv/autovec/partial/slp-4.c | 4 +- .../riscv/rvv/autovec/partial/slp-5.c | 4 +- .../riscv/rvv/autovec/partial/slp-6.c | 4 +- .../gcc.target/riscv/rvv/autovec/pr112450.c | 2 +- .../gcc.target/riscv/rvv/autovec/pr112598-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/pr112598-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/pr112694-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/pr112999.c | 2 +- .../gcc.target/riscv/rvv/autovec/pr113393-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/series-1.c | 2 +- .../riscv/rvv/autovec/series_run-1.c | 2 +- .../riscv/rvv/autovec/slp-interleave-1.c | 2 +- .../riscv/rvv/autovec/slp-interleave-2.c | 2 +- .../riscv/rvv/autovec/slp-interleave-3.c | 2 +- .../riscv/rvv/autovec/slp-interleave-4.c | 2 +- .../autovec/unop/math-lroundf16-rv64-ice-1.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-10.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-12.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-13.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-14.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-5.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-6.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-7.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-8.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/bitmask-9.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/trailing-1.c | 2 +- .../riscv/rvv/autovec/vls-vlmax/trailing-2.c | 2 +- .../rvv/autovec/vls-vlmax/trailing_run-1.c | 2 +- .../rvv/autovec/vls-vlmax/trailing_run-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/abs-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/abs-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/and-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/and-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/and-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/avg-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/avg-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/avg-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/avg-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/avg-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/avg-6.c | 2 +- .../riscv/rvv/autovec/vls/bswap16-0.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/cmp-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/cmp-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/cmp-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/cmp-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/cmp-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/cmp-6.c | 2 +- .../riscv/rvv/autovec/vls/combine-1.c | 2 +- .../riscv/rvv/autovec/vls/combine-2.c | 2 +- .../riscv/rvv/autovec/vls/combine-3.c | 2 +- .../riscv/rvv/autovec/vls/combine-4.c | 2 +- .../riscv/rvv/autovec/vls/combine-5.c | 2 +- .../riscv/rvv/autovec/vls/combine-6.c | 2 +- .../riscv/rvv/autovec/vls/combine-7.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-1.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-10.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-11.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-12.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-13.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-14.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-2.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-3.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-4.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-5.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-6.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-7.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-8.c | 2 +- .../riscv/rvv/autovec/vls/combine-merge-9.c | 2 +- .../riscv/rvv/autovec/vls/compress-1.c | 2 +- .../riscv/rvv/autovec/vls/compress-2.c | 2 +- .../riscv/rvv/autovec/vls/compress-3.c | 2 +- .../riscv/rvv/autovec/vls/compress-4.c | 2 +- .../riscv/rvv/autovec/vls/compress-5.c | 2 +- .../riscv/rvv/autovec/vls/compress-6.c | 2 +- .../riscv/rvv/autovec/vls/cond_abs-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_add-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_add-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_and-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-10.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-11.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-12.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-3.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-4.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-5.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-6.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-7.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-8.c | 2 +- .../riscv/rvv/autovec/vls/cond_convert-9.c | 2 +- .../riscv/rvv/autovec/vls/cond_copysign-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_div-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_div-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_ext-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_ext-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_ext-3.c | 2 +- .../riscv/rvv/autovec/vls/cond_ext-4.c | 2 +- .../riscv/rvv/autovec/vls/cond_ext-5.c | 2 +- .../riscv/rvv/autovec/vls/cond_fma-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_fma-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_fms-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_fnma-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_fnma-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_fnms-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_ior-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_max-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_max-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_min-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_min-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_mod-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_mul-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_mul-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_mulh-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_narrow-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_narrow-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_neg-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_neg-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_not-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_shift-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_shift-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_sqrt-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_sub-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_sub-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_trunc-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_trunc-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_trunc-3.c | 2 +- .../riscv/rvv/autovec/vls/cond_trunc-4.c | 2 +- .../riscv/rvv/autovec/vls/cond_trunc-5.c | 2 +- .../riscv/rvv/autovec/vls/cond_wadd-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_wadd-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_wadd-3.c | 2 +- .../riscv/rvv/autovec/vls/cond_wadd-4.c | 2 +- .../riscv/rvv/autovec/vls/cond_wfma-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_wfma-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_wfms-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_wfnma-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_wmul-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_wmul-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_wmul-3.c | 2 +- .../riscv/rvv/autovec/vls/cond_wsub-1.c | 2 +- .../riscv/rvv/autovec/vls/cond_wsub-2.c | 2 +- .../riscv/rvv/autovec/vls/cond_wsub-3.c | 2 +- .../riscv/rvv/autovec/vls/cond_wsub-4.c | 2 +- .../riscv/rvv/autovec/vls/cond_xor-1.c | 2 +- .../riscv/rvv/autovec/vls/consecutive-1.c | 2 +- .../riscv/rvv/autovec/vls/consecutive-2.c | 2 +- .../riscv/rvv/autovec/vls/const-1.c | 2 +- .../riscv/rvv/autovec/vls/const-2.c | 2 +- .../riscv/rvv/autovec/vls/const-3.c | 2 +- .../riscv/rvv/autovec/vls/const-4.c | 2 +- .../riscv/rvv/autovec/vls/const-5.c | 2 +- .../riscv/rvv/autovec/vls/convert-1.c | 2 +- .../riscv/rvv/autovec/vls/convert-10.c | 2 +- .../riscv/rvv/autovec/vls/convert-11.c | 2 +- .../riscv/rvv/autovec/vls/convert-12.c | 2 +- .../riscv/rvv/autovec/vls/convert-2.c | 2 +- .../riscv/rvv/autovec/vls/convert-3.c | 2 +- .../riscv/rvv/autovec/vls/convert-4.c | 2 +- .../riscv/rvv/autovec/vls/convert-5.c | 2 +- .../riscv/rvv/autovec/vls/convert-6.c | 2 +- .../riscv/rvv/autovec/vls/convert-7.c | 2 +- .../riscv/rvv/autovec/vls/convert-8.c | 2 +- .../riscv/rvv/autovec/vls/convert-9.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/cvt-0.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/div-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/dup-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/dup-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/dup-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/dup-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/dup-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/dup-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/dup-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ext-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ext-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ext-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ext-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ext-5.c | 2 +- .../riscv/rvv/autovec/vls/extract-1.c | 2 +- .../riscv/rvv/autovec/vls/extract-2.c | 2 +- .../rvv/autovec/vls/floating-point-add-1.c | 2 +- .../rvv/autovec/vls/floating-point-add-2.c | 2 +- .../rvv/autovec/vls/floating-point-add-3.c | 2 +- .../rvv/autovec/vls/floating-point-div-1.c | 2 +- .../rvv/autovec/vls/floating-point-div-2.c | 2 +- .../rvv/autovec/vls/floating-point-div-3.c | 2 +- .../rvv/autovec/vls/floating-point-max-1.c | 2 +- .../rvv/autovec/vls/floating-point-max-2.c | 2 +- .../rvv/autovec/vls/floating-point-max-3.c | 2 +- .../rvv/autovec/vls/floating-point-max-4.c | 2 +- .../rvv/autovec/vls/floating-point-max-5.c | 2 +- .../rvv/autovec/vls/floating-point-min-1.c | 2 +- .../rvv/autovec/vls/floating-point-min-2.c | 2 +- .../rvv/autovec/vls/floating-point-min-3.c | 2 +- .../rvv/autovec/vls/floating-point-min-4.c | 2 +- .../rvv/autovec/vls/floating-point-min-5.c | 2 +- .../rvv/autovec/vls/floating-point-mul-1.c | 2 +- .../rvv/autovec/vls/floating-point-mul-2.c | 2 +- .../rvv/autovec/vls/floating-point-mul-3.c | 2 +- .../rvv/autovec/vls/floating-point-sgnj-1.c | 2 +- .../rvv/autovec/vls/floating-point-sgnj-2.c | 2 +- .../rvv/autovec/vls/floating-point-sgnjx-1.c | 2 +- .../rvv/autovec/vls/floating-point-sgnjx-2.c | 2 +- .../rvv/autovec/vls/floating-point-sub-1.c | 2 +- .../rvv/autovec/vls/floating-point-sub-2.c | 2 +- .../rvv/autovec/vls/floating-point-sub-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fma-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fma-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fma-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fma-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fma-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fma-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fma-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fms-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fms-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fms-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnma-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnma-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnma-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnma-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnma-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnma-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnma-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnms-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnms-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/fnms-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/init-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/init-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/init-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/init-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/init-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/init-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/init-7.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-0.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-1.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-2.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-3.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-4.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-5.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-6.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-7.c | 2 +- .../rvv/autovec/vls/init-repeat-sequence-8.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ior-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ior-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/ior-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mask-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mask-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mask-3.c | 2 +- .../riscv/rvv/autovec/vls/math-ceil-1.c | 2 +- .../riscv/rvv/autovec/vls/math-floor-1.c | 2 +- .../riscv/rvv/autovec/vls/math-iceil-0.c | 2 +- .../riscv/rvv/autovec/vls/math-iceil-1.c | 2 +- .../riscv/rvv/autovec/vls/math-ifloor-0.c | 2 +- .../riscv/rvv/autovec/vls/math-ifloor-1.c | 2 +- .../riscv/rvv/autovec/vls/math-irint-0.c | 2 +- .../riscv/rvv/autovec/vls/math-irint-1.c | 2 +- .../riscv/rvv/autovec/vls/math-iround-0.c | 2 +- .../riscv/rvv/autovec/vls/math-iround-1.c | 2 +- .../riscv/rvv/autovec/vls/math-lceil-0.c | 2 +- .../riscv/rvv/autovec/vls/math-lceil-1.c | 2 +- .../riscv/rvv/autovec/vls/math-lceil-rv32-0.c | 2 +- .../rvv/autovec/vls/math-lceilf-rv64-0.c | 2 +- .../riscv/rvv/autovec/vls/math-lfloor-0.c | 2 +- .../riscv/rvv/autovec/vls/math-lfloor-1.c | 2 +- .../rvv/autovec/vls/math-lfloor-rv32-0.c | 2 +- .../rvv/autovec/vls/math-lfloorf-rv64-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llceil-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llceilf-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llfloor-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llfloorf-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llrint-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llrintf-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llrintf16-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llround-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llroundf-0.c | 2 +- .../riscv/rvv/autovec/vls/math-llroundf16-0.c | 2 +- .../riscv/rvv/autovec/vls/math-lrint-0.c | 2 +- .../riscv/rvv/autovec/vls/math-lrint-1.c | 2 +- .../riscv/rvv/autovec/vls/math-lrint-rv32-0.c | 2 +- .../rvv/autovec/vls/math-lrintf-rv64-0.c | 2 +- .../rvv/autovec/vls/math-lrintf16-rv32-0.c | 2 +- .../rvv/autovec/vls/math-lrintf16-rv64-0.c | 2 +- .../riscv/rvv/autovec/vls/math-lround-0.c | 2 +- .../riscv/rvv/autovec/vls/math-lround-1.c | 2 +- .../rvv/autovec/vls/math-lround-rv32-0.c | 2 +- .../rvv/autovec/vls/math-lroundf-rv64-0.c | 2 +- .../rvv/autovec/vls/math-lroundf16-rv32-0.c | 2 +- .../rvv/autovec/vls/math-lroundf16-rv64-0.c | 2 +- .../riscv/rvv/autovec/vls/math-nearbyint-1.c | 2 +- .../riscv/rvv/autovec/vls/math-rint-1.c | 2 +- .../riscv/rvv/autovec/vls/math-round-1.c | 2 +- .../riscv/rvv/autovec/vls/math-roundeven-1.c | 2 +- .../riscv/rvv/autovec/vls/math-trunc-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/max-1.c | 2 +- .../riscv/rvv/autovec/vls/merge-1.c | 2 +- .../riscv/rvv/autovec/vls/merge-2.c | 2 +- .../riscv/rvv/autovec/vls/merge-3.c | 2 +- .../riscv/rvv/autovec/vls/merge-4.c | 2 +- .../riscv/rvv/autovec/vls/merge-5.c | 2 +- .../riscv/rvv/autovec/vls/merge-6.c | 2 +- .../riscv/rvv/autovec/vls/merge-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/min-1.c | 2 +- .../riscv/rvv/autovec/vls/minus-1.c | 2 +- .../riscv/rvv/autovec/vls/minus-2.c | 2 +- .../riscv/rvv/autovec/vls/minus-3.c | 2 +- .../riscv/rvv/autovec/vls/misalign-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mod-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-10.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-11.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-12.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-13.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-14.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-15.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-16.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-17.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-8.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mov-9.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mulh-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/mult-1.c | 2 +- .../riscv/rvv/autovec/vls/narrow-1.c | 2 +- .../riscv/rvv/autovec/vls/narrow-2.c | 2 +- .../riscv/rvv/autovec/vls/narrow-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/neg-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/neg-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/not-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/perm-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/perm-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/perm-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/perm-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/perm-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/perm-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/perm-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/plus-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/plus-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/plus-3.c | 2 +- .../riscv/rvv/autovec/vls/reduc-1.c | 2 +- .../riscv/rvv/autovec/vls/reduc-10.c | 2 +- .../riscv/rvv/autovec/vls/reduc-11.c | 2 +- .../riscv/rvv/autovec/vls/reduc-12.c | 2 +- .../riscv/rvv/autovec/vls/reduc-13.c | 2 +- .../riscv/rvv/autovec/vls/reduc-14.c | 2 +- .../riscv/rvv/autovec/vls/reduc-15.c | 2 +- .../riscv/rvv/autovec/vls/reduc-16.c | 2 +- .../riscv/rvv/autovec/vls/reduc-17.c | 2 +- .../riscv/rvv/autovec/vls/reduc-18.c | 2 +- .../riscv/rvv/autovec/vls/reduc-19.c | 2 +- .../riscv/rvv/autovec/vls/reduc-2.c | 2 +- .../riscv/rvv/autovec/vls/reduc-20.c | 2 +- .../riscv/rvv/autovec/vls/reduc-21.c | 2 +- .../riscv/rvv/autovec/vls/reduc-3.c | 2 +- .../riscv/rvv/autovec/vls/reduc-4.c | 2 +- .../riscv/rvv/autovec/vls/reduc-5.c | 2 +- .../riscv/rvv/autovec/vls/reduc-6.c | 2 +- .../riscv/rvv/autovec/vls/reduc-7.c | 2 +- .../riscv/rvv/autovec/vls/reduc-8.c | 2 +- .../riscv/rvv/autovec/vls/reduc-9.c | 2 +- .../riscv/rvv/autovec/vls/repeat-1.c | 2 +- .../riscv/rvv/autovec/vls/repeat-2.c | 2 +- .../riscv/rvv/autovec/vls/repeat-3.c | 2 +- .../riscv/rvv/autovec/vls/repeat-4.c | 2 +- .../riscv/rvv/autovec/vls/repeat-5.c | 2 +- .../riscv/rvv/autovec/vls/repeat-6.c | 2 +- .../riscv/rvv/autovec/vls/repeat-7.c | 2 +- .../riscv/rvv/autovec/vls/repeat-8.c | 2 +- .../riscv/rvv/autovec/vls/repeat-9.c | 2 +- .../riscv/rvv/autovec/vls/series-1.c | 2 +- .../riscv/rvv/autovec/vls/series-2.c | 2 +- .../riscv/rvv/autovec/vls/series-3.c | 2 +- .../riscv/rvv/autovec/vls/series-4.c | 2 +- .../riscv/rvv/autovec/vls/shift-1.c | 2 +- .../riscv/rvv/autovec/vls/shift-2.c | 2 +- .../riscv/rvv/autovec/vls/shift-3.c | 2 +- .../riscv/rvv/autovec/vls/shift-4.c | 2 +- .../riscv/rvv/autovec/vls/shift-5.c | 2 +- .../riscv/rvv/autovec/vls/shift-6.c | 2 +- .../riscv/rvv/autovec/vls/spill-1.c | 2 +- .../riscv/rvv/autovec/vls/spill-2.c | 2 +- .../riscv/rvv/autovec/vls/spill-3.c | 2 +- .../riscv/rvv/autovec/vls/spill-5.c | 2 +- .../riscv/rvv/autovec/vls/spill-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/sqrt-1.c | 2 +- .../riscv/rvv/autovec/vls/trailing-1.c | 2 +- .../riscv/rvv/autovec/vls/trailing-2.c | 2 +- .../riscv/rvv/autovec/vls/trailing-3.c | 2 +- .../riscv/rvv/autovec/vls/trailing-4.c | 2 +- .../riscv/rvv/autovec/vls/trailing-5.c | 2 +- .../riscv/rvv/autovec/vls/trailing-6.c | 2 +- .../riscv/rvv/autovec/vls/trailing-7.c | 2 +- .../riscv/rvv/autovec/vls/trunc-1.c | 2 +- .../riscv/rvv/autovec/vls/trunc-2.c | 2 +- .../riscv/rvv/autovec/vls/trunc-3.c | 2 +- .../riscv/rvv/autovec/vls/trunc-4.c | 2 +- .../riscv/rvv/autovec/vls/trunc-5.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-1.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-10.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-11.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-12.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-13.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-14.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-15.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-16.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-17.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-18.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-19.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-2.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-20.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-21.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-22.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-3.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-4.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-5.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-6.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-7.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-8.c | 2 +- .../riscv/rvv/autovec/vls/vec-set-9.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wadd-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wadd-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wadd-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wadd-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wfma-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wfma-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wfma-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wfms-1.c | 2 +- .../riscv/rvv/autovec/vls/wfnma-1.c | 2 +- .../riscv/rvv/autovec/vls/wfnms-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wmul-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wmul-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wmul-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wred-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wred-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wred-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wsub-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wsub-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wsub-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls/wsub-4.c | 2 +- .../riscv/rvv/autovec/widen/widen_reduc-1.c | 2 +- .../rvv/autovec/widen/widen_reduc_order-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/zve32f-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/zve32x-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/zve64d-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/zve64f-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/zve64x-3.c | 2 +- .../gcc.target/riscv/rvv/base/cpymem-1.c | 4 +- .../gcc.target/riscv/rvv/base/cpymem-2.c | 6 +- gcc/testsuite/gcc.target/riscv/rvv/rvv.exp | 72 +++++++++---------- .../gcc.target/riscv/rvv/vsetvl/pr111255.c | 2 +- .../riscv/rvv/vsetvl/vsetvl_bug-1.c | 2 +- .../riscv/rvv/vsetvl/vsetvl_bug-2.c | 2 +- 547 files changed, 612 insertions(+), 612 deletions(-) diff --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h index 9ae86d52a75f..392b9169240d 100644 --- a/gcc/config/riscv/riscv-opts.h +++ b/gcc/config/riscv/riscv-opts.h @@ -74,7 +74,7 @@ enum stack_protector_guard { }; /* RISC-V auto-vectorization RVV LMUL. */ -enum riscv_autovec_lmul_enum { +enum rvv_max_lmul_enum { RVV_M1 = 1, RVV_M2 = 2, RVV_M4 = 4, @@ -152,6 +152,6 @@ enum rvv_vector_bits_enum { /* The maximmum LMUL according to user configuration. */ #define TARGET_MAX_LMUL \ - (int) (riscv_autovec_lmul == RVV_DYNAMIC ? RVV_M8 : riscv_autovec_lmul) + (int) (rvv_max_lmul == RVV_DYNAMIC ? RVV_M8 : rvv_max_lmul) #endif /* ! GCC_RISCV_OPTS_H */ diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc index 967f4e382875..814c5febabe6 100644 --- a/gcc/config/riscv/riscv-v.cc +++ b/gcc/config/riscv/riscv-v.cc @@ -2338,7 +2338,7 @@ preferred_simd_mode (scalar_mode mode) if (autovec_use_vlmax_p ()) { /* We use LMUL = 1 as base bytesize which is BYTES_PER_RISCV_VECTOR and - riscv_autovec_lmul as multiply factor to calculate the the NUNITS to + rvv_max_lmul as multiply factor to calculate the NUNITS to get the auto-vectorization mode. */ poly_uint64 nunits; poly_uint64 vector_size = BYTES_PER_RISCV_VECTOR * TARGET_MAX_LMUL; diff --git a/gcc/config/riscv/riscv-vector-costs.cc b/gcc/config/riscv/riscv-vector-costs.cc index 5ac8655b4d87..f462c272a6e5 100644 --- a/gcc/config/riscv/riscv-vector-costs.cc +++ b/gcc/config/riscv/riscv-vector-costs.cc @@ -890,7 +890,7 @@ costs::record_potential_unexpected_spills (loop_vec_info loop_vinfo) { /* We only want to apply the heuristic if LOOP_VINFO is being vectorized for VLA and known NITERS VLS loop. */ - if (riscv_autovec_lmul == RVV_DYNAMIC + if (rvv_max_lmul == RVV_DYNAMIC && (m_cost_type == VLA_VECTOR_COST || (m_cost_type == VLS_VECTOR_COST && LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)))) @@ -998,7 +998,7 @@ costs::better_main_loop_than_p (const vector_costs *uncast_other) const return other_prefer_unrolled; } } - else if (riscv_autovec_lmul == RVV_DYNAMIC) + else if (rvv_max_lmul == RVV_DYNAMIC) { if (other->m_has_unexpected_spills_p) { diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt index 710c0a41870b..7d625af02d52 100644 --- a/gcc/config/riscv/riscv.opt +++ b/gcc/config/riscv/riscv.opt @@ -531,27 +531,27 @@ Target RejectNegative Joined UInteger Var(riscv_strcmp_inline_limit) Init(64) Max number of bytes to compare as part of inlined strcmp/strncmp routines (default: 64). Enum -Name(riscv_autovec_lmul) Type(enum riscv_autovec_lmul_enum) -The RVV possible LMUL (-param=riscv-autovec-lmul=): +Name(rvv_max_lmul) Type(enum rvv_max_lmul_enum) +The RVV possible LMUL (-mrvv-max-lmul=): EnumValue -Enum(riscv_autovec_lmul) String(m1) Value(RVV_M1) +Enum(rvv_max_lmul) String(m1) Value(RVV_M1) EnumValue -Enum(riscv_autovec_lmul) String(m2) Value(RVV_M2) +Enum(rvv_max_lmul) String(m2) Value(RVV_M2) EnumValue -Enum(riscv_autovec_lmul) String(m4) Value(RVV_M4) +Enum(rvv_max_lmul) String(m4) Value(RVV_M4) EnumValue -Enum(riscv_autovec_lmul) String(m8) Value(RVV_M8) +Enum(rvv_max_lmul) String(m8) Value(RVV_M8) EnumValue -Enum(riscv_autovec_lmul) String(dynamic) Value(RVV_DYNAMIC) +Enum(rvv_max_lmul) String(dynamic) Value(RVV_DYNAMIC) --param=riscv-autovec-lmul= -Target RejectNegative Joined Enum(riscv_autovec_lmul) Var(riscv_autovec_lmul) Init(RVV_M1) --param=riscv-autovec-lmul=<string> Set the RVV LMUL of auto-vectorization in the RISC-V port. +mrvv-max-lmul= +Target RejectNegative Joined Enum(rvv_max_lmul) Var(rvv_max_lmul) Init(RVV_M1) +-mrvv-max-lmul=<string> Set the RVV LMUL of auto-vectorization. madjust-lmul-cost Target Var(TARGET_ADJUST_LMUL_COST) Init(0) diff --git a/gcc/testsuite/g++.target/riscv/rvv/autovec/bug-2.C b/gcc/testsuite/g++.target/riscv/rvv/autovec/bug-2.C index 53bc4a300725..1234ae47ce77 100644 --- a/gcc/testsuite/g++.target/riscv/rvv/autovec/bug-2.C +++ b/gcc/testsuite/g++.target/riscv/rvv/autovec/bug-2.C @@ -1,4 +1,4 @@ -/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3 --param=riscv-autovec-lmul=m4" } */ +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3 -mrvv-max-lmul=m4" } */ int max(int __b) { if (0 < __b) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c index 4f019ccae6b3..9e83a24b416d 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic" } */ int a, *b[9], c, d, e; diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c index 6fc8062f23b0..cd354d702ed6 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -Ofast -ftree-vectorize --param riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -Ofast -ftree-vectorize -mrvv-max-lmul=dynamic" } */ typedef struct rtx_def *rtx; struct replacement { diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c index c1f698b9a687..c0a7e1c35e6c 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O2 -ftree-vectorize -flto -fno-use-linker-plugin -flto-partition=none --param riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O2 -ftree-vectorize -flto -fno-use-linker-plugin -flto-partition=none -mrvv-max-lmul=dynamic" } */ void (*foo[6][6]) (int); void bar (hdR) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c index e654fc6bf846..8d0002805db7 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c index f481c8094c9a..d5fd0f2e3206 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c index e044c65e7f25..a0e61303e80f 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fno-schedule-insns -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fno-schedule-insns -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c index 212788a93c3f..2111c0bbc9a2 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c index 2e2ff9dc74ac..c47a4c4ceb17 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c index 80eb38c9986f..e4b74f037e3b 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c index 3dd594e3f6ea..73d16dab7324 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c index a8c98c40d6e9..b76bb4b06b4b 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -Wno-psabi -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -Wno-psabi -fdump-tree-vect-details" } */ #include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c index 0079aa02a853..6637f3c3e3f4 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c index d8a0e66a65e7..554512245c02 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c index 0079aa02a853..6637f3c3e3f4 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c index 23269196b856..a8e603f90f36 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c index 2ef88a307bce..dcb20a302c83 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> typedef int8_t v128qi __attribute__ ((vector_size (128))); diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c index 5eec2b0c4dab..f5d1a02736a7 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> typedef int8_t v128qi __attribute__ ((vector_size (128))); diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c index 38cbefbe6255..49ea3c2cf725 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic" } */ int x264_pixel_8x8 (unsigned char *pix1, unsigned char *pix2, int i_stride_pix2) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c index 08dc7ca92dd5..650821391825 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-10.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-10.c index e47af25aa9b9..4a372edea5a4 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-10.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ int bar (int *x, int a, int b, int n) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c index 48b24279b553..0f0cd595a951 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ void foo (int *__restrict a, int *__restrict b, int *__restrict c, int *__restrict d, diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-12.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-12.c index 0cb492e611c9..29e6dfc223e4 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-12.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ void f (int *restrict a, int *restrict b, int *restrict c, int *restrict d, diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c index b9a9229ed9f8..95742e2a7a15 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c index 9af91b0b8639..85e3021f1c2b 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c index 2a881da0b017..c4cb2081f930 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c index b23acebc9160..3734b5c18a74 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c index 45bceaac0eb8..1d37a516a76f 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c index ef719ee8445c..756176d42126 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ /* { dg-additional-options "-fno-schedule-insns -fno-schedule-insns2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c index 7fda83ab9780..46450f431331 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fselective-scheduling -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fselective-scheduling -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c index 702a3b74f9a3..87e6b099069d 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c index 95b0600a9d7f..bd5aa80f0ba1 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-11.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-11.c index 83df2bc46e58..c9e282512250 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-11.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-12.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-12.c index 8a2ebf56144f..9fa6b69a7c9d 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-12.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=scalable -fselective-scheduling -fdump-tree-vect-details" } */ void foo (int *restrict a, int *restrict b, int n) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-13.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-13.c index baef4e390143..40a3acd40887 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-13.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-13.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ void f (int *restrict a, int *restrict b, int *restrict c, int *restrict d, int n) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-14.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-14.c index 0d42c3b27cbe..9a9bb4875049 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-14.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ void f (int *restrict a, int *restrict b, int *restrict c, int *restrict d, int x, diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c index c3d0d5d574c2..15c615fa1cf1 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c index a575427f8cd1..c0f55a49a79e 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c index b55bcad6a275..91af60d717a7 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> #include <stddef.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c index 307dd69e2c48..ba2822f2e539 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c index 9a7eb421d881..d8c365330b48 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c index 103d22b23afd..33012ec11d43 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c index 0255bdf8cc6d..aad04c48b679 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c index e6cc1ad83e61..f045f857cc3f 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c index 6752f254fee3..2e7baa3b8afc 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111317.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111317.c index d4bea242a9a0..8b4d97241026 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111317.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111317.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param=riscv-autovec-lmul=m1" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=m1" } */ void foo (char *__restrict a, short *__restrict b, int n) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111848.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111848.c index 5a673f509f4f..339c80f8805a 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111848.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr111848.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -fdump-tree-vect-details" } */ #include <stdint-gcc.h> void diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-1.c index 6d8a1d42492c..7f97c4285348 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=zvl -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=zvl -fdump-tree-vect-details" } */ #define N 40 diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-2.c index 9401e395c406..fd27b2964b50 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=zvl -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=zvl -fdump-tree-vect-details" } */ #define TYPE double #define N 200 diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-3.c index 07e0cdfbc85a..86241e705767 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=zvl" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=zvl" } */ int f[12][100]; diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-4.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-4.c index 215f6de6572a..a7ee7b0b6132 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-4.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -Ofast -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=zvl -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -Ofast -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=zvl -fno-schedule-insns -fno-schedule-insns2" } */ typedef struct rtx_def *rtx; struct replacement { diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-5.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-5.c index 9ab2ab94c794..263d41b5a071 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-5.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113112-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param riscv-autovec-lmul=dynamic -mrvv-vector-bits=zvl -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=zvl -fno-schedule-insns -fno-schedule-insns2" } */ typedef struct { int iatom[3]; diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-1.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-1.c index 0d09a624a005..0c76bcc904a4 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-1.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param=riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-2.c index af3712c55e4d..309dcf7f79e5 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113247-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param=riscv-autovec-lmul=dynamic -mrvv-vector-bits=zvl" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic -mrvv-vector-bits=zvl" } */ #include "pr113247-1.c" diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-3.c index 706e19116c94..d8402dc41189 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=m8" } */ unsigned char a; diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-4.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-4.c index 3947a9ae671a..a5319e9b7d21 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-4.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=zvl" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=m8 -mrvv-vector-bits=zvl" } */ unsigned char a; diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-5.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-5.c index d3f5717b8740..0163129be187 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-5.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr113281-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize --param=riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic" } */ unsigned char a; diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114264.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114264.c index 7853f292af76..e51d80e56820 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114264.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/pr114264.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize --param=riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -ftree-vectorize -mrvv-max-lmul=dynamic" } */ char *jpeg_difference7_input_buf; void diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-10.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-10.c index 89a6c6789603..144479324d75 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-10.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=m4 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m4 -fno-schedule-insns -fno-schedule-insns2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-11.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-11.c index 86732ef2ce50..13ae8bd3bcfa 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-11.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-schedule-insns -fno-schedule-insns2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-12.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-12.c index a1fcb3f34436..1f9fa48264e1 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-12.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=dynamic -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=dynamic -fno-schedule-insns -fno-schedule-insns2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-2.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-2.c index ca203f508471..4a979df01267 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-2.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=m2" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m2" } */ void foo (int *__restrict a, int *__restrict b, int *__restrict c) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-3.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-3.c index f8e533507856..d48375b3349a 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-3.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=m4" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m4" } */ void foo (int *__restrict a, int *__restrict b, int *__restrict c) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-4.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-4.c index 4859d570c0c0..36dc0ad2263f 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-4.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ void foo (int *__restrict a, int *__restrict b, int *__restrict c) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-5.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-5.c index 8a568028bcf9..993fae0f02a1 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-5.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=dynamic" } */ void foo (int *__restrict a, int *__restrict b, int *__restrict c) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-6.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-6.c index 46ebd5fd49b6..7fd8397fed03 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-6.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ void foo (int *__restrict a, int *__restrict b, int *__restrict c) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-7.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-7.c index f5aceca32d7c..1519a0dfdb7b 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-7.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=dynamic" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=dynamic" } */ void foo (int *__restrict a, int *__restrict b, int *__restrict c) diff --git a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-9.c b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-9.c index 7f03cb9ecbe0..cb4abeca9898 100644 --- a/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-9.c +++ b/gcc/testsuite/gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=m2" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m2" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-1.c index 86ad19cb17b3..5222b1cd0f05 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=zvl -fno-vect-cost-model -O3 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -mrvv-max-lmul=m8 -mrvv-vector-bits=zvl -fno-vect-cost-model -O3 -fdump-tree-optimized" } */ #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-2.c index 07f9d91dfd3b..a6dbbaafc75b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-2.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-require-effective-target riscv_v } */ -/* { dg-options "--param=riscv-autovec-lmul=m8 -mrvv-vector-bits=scalable -ftree-vectorize -fno-tree-loop-distribute-patterns -fno-vect-cost-model -fno-common -O2" } */ +/* { dg-options "-mrvv-max-lmul=m8 -mrvv-vector-bits=scalable -ftree-vectorize -fno-tree-loop-distribute-patterns -fno-vect-cost-model -fno-common -O2" } */ #define N 128 diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-3.c index 9af5add3ff9d..05ac2e54cbed 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl512b -mabi=lp64d --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=scalable -fno-vect-cost-model -O2 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvl512b -mabi=lp64d -mrvv-max-lmul=m8 -mrvv-vector-bits=scalable -fno-vect-cost-model -O2 -ffast-math" } */ #define N 16 diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-4.c index 1b6ad2654fc6..a2e353bdf32c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=zvl" } */ +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3 -mrvv-max-lmul=m8 -mrvv-vector-bits=zvl" } */ typedef struct { short a; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-5.c index 1a3fc1690e69..cff18b14d33b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O2 --param=riscv-autovec-lmul=m4 -mrvv-vector-bits=zvl" } */ +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O2 -mrvv-max-lmul=m4 -mrvv-vector-bits=zvl" } */ typedef unsigned char u8; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c index 91fc5dd9f4d8..6009a512a519 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/bug-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m2 -mrvv-vector-bits=zvl" } */ +/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d -O3 -mrvv-max-lmul=m2 -mrvv-vector-bits=zvl" } */ union U { diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-3.c index c9003279b0c8..54ad8c597026 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=dynamic -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=dynamic -fdump-tree-optimized-details" } */ #include "macro.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-4.c index 544ff7515221..033ed1044358 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=dynamic -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=dynamic -fdump-tree-optimized-details" } */ #include "macro.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-7.c index 63ded00947dc..b38afaf80cfb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=dynamic -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=dynamic -fdump-tree-optimized-details" } */ #include "macro.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-8.c index f29b5f12c513..54ebcdf6385d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cmp/cmp_vi-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 --param=riscv-autovec-lmul=dynamic -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=dynamic -fdump-tree-optimized-details" } */ #include "macro.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-1.c index a80c3b9eded0..034b1216a7ee 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh_zvl128b -mabi=lp64d -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh_zvl128b -mabi=lp64d -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math" } */ #include <stdint-gcc.h> #define TEST_TYPE(TYPE1, TYPE2, N) \ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c index c2a207db0e4d..ac3e43940689 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh_zvl128b -mabi=lp64d -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh_zvl128b -mabi=lp64d -mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math" } */ #include "cond_widen_reduc-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-1.c index 9dbecee49d30..610b6efd14d2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-1.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-additional-options "-mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math" } */ +/* { dg-additional-options "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math" } */ #include "cond_widen_reduc-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-2.c index 7c319012156e..887c1c26304c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-2.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-additional-options "-mrvv-vector-bits=scalable --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math" } */ +/* { dg-additional-options "-mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math" } */ #include "cond_widen_reduc-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/fold-min-poly.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/fold-min-poly.c index 85917fe46bf3..cd3b95facd56 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/fold-min-poly.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/fold-min-poly.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options " -march=rv64gcv_zvl128b -mabi=lp64d -O3 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m1" } */ +/* { dg-options " -march=rv64gcv_zvl128b -mabi=lp64d -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m1" } */ void foo1 (int* restrict a, int* restrict b, int n) { diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/gimple_fold-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/gimple_fold-1.c index cf6d742f98fc..297ffdbc456a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/gimple_fold-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/gimple_fold-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m8 -O3 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=zvl -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/select_vl-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/select_vl-2.c index ce50d80e0bcb..a96e6ffa3153 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/select_vl-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/select_vl-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=scalable -fno-schedule-insns --param riscv-autovec-lmul=m1 -O3 -ftree-vectorize" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -mrvv-vector-bits=scalable -fno-schedule-insns -mrvv-max-lmul=m1 -O3 -ftree-vectorize" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-1.c index fae1ab590a30..a4424f0bcadf 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-1.c @@ -20,7 +20,7 @@ f (int8_t *restrict a, int8_t *restrict b, int n) } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ -/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ -/* { dg-final { scan-assembler {\tvand} { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ +/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ +/* { dg-final { scan-assembler {\tvand} { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-16.c index 02fb365f5289..1c7503b770ee 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-16.c @@ -20,7 +20,7 @@ f (uint8_t *restrict a, uint8_t *restrict b, int n) } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ -/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "--param riscv-autovec-lmul=m1"} } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ +/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "-mrvv-max-lmul=m1"} } } } */ /* { dg-final { scan-assembler-not {\tvmul} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-17.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-17.c index 3adec12a60ca..0da6658fcfa8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-17.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-17.c @@ -30,7 +30,7 @@ f (uint8_t *restrict a, uint8_t *restrict b, } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 2 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ -/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 2 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ +/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ /* { dg-final { scan-assembler-not {\tvmul} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-18.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-18.c index 8f1a7e12c1f9..cedd3f6e9843 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-18.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-18.c @@ -22,7 +22,7 @@ f (float *restrict a, float *restrict b, } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1 or m2. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 2 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" "--param riscv-autovec-lmul=m2" } } } } */ -/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "--param riscv-autovec-lmul=m1" "--param riscv-autovec-lmul=m2" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1 or m2. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 2 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" "-mrvv-max-lmul=m2" } } } } */ +/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "-mrvv-max-lmul=m1" "-mrvv-max-lmul=m2" } } } } */ /* { dg-final { scan-assembler-not {\tvmul} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-19.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-19.c index 2fa6168ca9c0..d386c4ff8a87 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-19.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-19.c @@ -22,7 +22,7 @@ f (float *restrict a, float *restrict b, } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1 or m2. */ -/* { dg-final { scan-tree-dump "\.VEC_PERM" "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" "--param riscv-autovec-lmul=m2" } } } } */ -/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "--param riscv-autovec-lmul=m1" "--param riscv-autovec-lmul=m2" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1 or m2. */ +/* { dg-final { scan-tree-dump "\.VEC_PERM" "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" "-mrvv-max-lmul=m2" } } } } */ +/* { dg-final { scan-assembler {\tvid\.v} { xfail { any-opts "-mrvv-max-lmul=m1" "-mrvv-max-lmul=m2" } } } } */ /* { dg-final { scan-assembler-not {\tvmul} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-2.c index 08ac776b4fe3..68991a1caebb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-2.c @@ -20,5 +20,5 @@ f (int16_t *restrict a, int16_t *restrict b, int n) } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-3.c index 88598e67626a..35659d290767 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-3.c @@ -20,5 +20,5 @@ f (int8_t *restrict a, int8_t *restrict b, int n) } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-4.c index 7543ecad5237..2ab3846aa097 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-4.c @@ -20,5 +20,5 @@ f (int16_t *restrict a, int16_t *restrict b, int n) } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-5.c index eaa580f8bb64..a10a7c831b1b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-5.c @@ -20,5 +20,5 @@ f (int8_t *restrict a, int8_t *restrict b, int n) } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-6.c index 324cae01069a..395f90287f0f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/slp-6.c @@ -20,6 +20,6 @@ f (uint8_t *restrict a, uint8_t *restrict b, int n) } /* FIXME: Since we don't have VECT cost model yet, LOAD_LANES/STORE_LANES are chosen - instead of SLP when riscv-autovec-lmul=m1. */ -/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "--param riscv-autovec-lmul=m1" } } } } */ + instead of SLP when rvv-autotec-max-lmul=m1. */ +/* { dg-final { scan-tree-dump-times "\.VEC_PERM" 1 "optimized" { xfail { any-opts "-mrvv-max-lmul=m1" } } } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112450.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112450.c index 964a4d34e3d5..ec118b94f7ed 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112450.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112450.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O2 --param=riscv-autovec-lmul=m8 -fno-vect-cost-model" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O2 -mrvv-max-lmul=m8 -fno-vect-cost-model" } */ int a, b, d, e; short c; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-1.c index a1d7e5bf17b1..e962ca13fcf2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvfh_zfh_zvl512b -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m8 -O3 -fno-vect-cost-model -ffast-math" } */ +/* { dg-options "-march=rv32gcv_zvfh_zfh_zvl512b -mabi=ilp32d -O3 -mrvv-max-lmul=m8 -O3 -fno-vect-cost-model -ffast-math" } */ #include <stdint-gcc.h> #define TEST_UNARY_CALL_CVT(TYPE_IN, TYPE_OUT, CALL) \ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-2.c index d32e8bacb5a2..53abe0925de9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112598-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zfh_zvl512b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zfh_zvl512b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112694-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112694-1.c index 3743ac825103..6b3b7a05c98d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112694-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112694-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve64d_zvfh_zfh -mabi=ilp32d -mcmodel=medany -fdiagnostics-plain-output -ftree-vectorize -O2 --param riscv-autovec-lmul=m1 -std=c99 -fno-vect-cost-model -mrvv-vector-bits=zvl -ffast-math" } */ +/* { dg-options "-march=rv32gc_zve64d_zvfh_zfh -mabi=ilp32d -mcmodel=medany -fdiagnostics-plain-output -ftree-vectorize -O2 -mrvv-max-lmul=m1 -std=c99 -fno-vect-cost-model -mrvv-vector-bits=zvl -ffast-math" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112999.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112999.c index a1244c1317ad..2c63ee5e5fbb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112999.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr112999.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl512b -mabi=lp64d --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=zvl -O3 -fno-vect-cost-model -fno-tree-loop-distribute-patterns" } */ +/* { dg-options "-march=rv64gcv_zvl512b -mabi=lp64d -mrvv-max-lmul=m8 -mrvv-vector-bits=zvl -O3 -fno-vect-cost-model -fno-tree-loop-distribute-patterns" } */ int a[1024]; int b[1024]; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113393-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113393-2.c index 2d203ea95d44..8f25157f36b6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113393-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr113393-2.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl --param=riscv-autovec-lmul=m2" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m2" } */ /* { dg-require-effective-target riscv_v } */ __attribute__((noinline, noclone)) static int diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/series-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/series-1.c index 43da34eb4e37..a88f602b0ca9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/series-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/series-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m4" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=zvl -mrvv-max-lmul=m4" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/series_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/series_run-1.c index b318364fa35f..8c50f851f02a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/series_run-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/series_run-1.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl --param riscv-autovec-lmul=m4" } */ +/* { dg-options "-mrvv-vector-bits=zvl -mrvv-max-lmul=m4" } */ #include "series-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c index 9f371436fe17..296fd4a45c0b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-lmul=m8 -O3 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */ struct S { int a, b; } s[8]; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c index 6cc390c0b348..d992c4c087cc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-lmul=m8 -O3 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */ struct S { int a, b; } s[8]; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c index 326d66e25594..96bd8ec34f45 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-lmul=m8 -O3 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */ struct S { int a, b; } s[8]; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c index 2bb73ebcfd10..64483c58ea29 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/slp-interleave-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gc_zve32f_zvl1024b -mabi=lp64d -fno-vect-cost-model --param=riscv-autovec-lmul=m8 -O3 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gc_zve32f_zvl1024b -mabi=lp64d -fno-vect-cost-model -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized-details" } */ struct S { int a, b; } s[8]; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c index 5fb61c7b44c5..080c02cb2fba 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c @@ -1,6 +1,6 @@ /* Test that we do not have ice when compile */ /* { dg-do compile } */ -/* { dg-options "--param=riscv-autovec-lmul=m4 -march=rv64gcv_zvfh_zfh -mabi=lp64d -O3 -ftree-vectorize -fno-vect-cost-model -ffast-math -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-mrvv-max-lmul=m4 -march=rv64gcv_zvfh_zfh -mabi=lp64d -O3 -ftree-vectorize -fno-vect-cost-model -ffast-math -fno-schedule-insns -fno-schedule-insns2" } */ #include "test-math.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-10.c index f1600e0a7d66..36ca75e870e6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-10.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 --param riscv-autovec-lmul=m2" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3 -mrvv-max-lmul=m2" } */ #include <stdint-gcc.h> #include <assert.h> #define N 16 diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-12.c index c41f11bfa85d..ddad6f34c1cf 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-12.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 --param riscv-autovec-lmul=m2" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3 -mrvv-max-lmul=m2" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-13.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-13.c index 12174f73488c..85f044e070b2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-13.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-13.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 --param riscv-autovec-lmul=m4" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3 -mrvv-max-lmul=m4" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-14.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-14.c index 7ecfc8025830..9ad5011d3072 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-14.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-14.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3 -mrvv-max-lmul=m8" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-5.c index 3554b6c16dac..3424d9151fe6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-5.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -O3" } */ +/* { dg-options "-mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -O3" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-6.c index 0957abd90b44..2f64aaca3de4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-6.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl --param riscv-autovec-lmul=m4 -O3" } */ +/* { dg-options "-mrvv-vector-bits=zvl -mrvv-max-lmul=m4 -O3" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-7.c index 4f265d30e700..0162d8b49d4d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-7.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl --param riscv-autovec-lmul=m8 -O3" } */ +/* { dg-options "-mrvv-vector-bits=zvl -mrvv-max-lmul=m8 -O3" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-8.c index 32bbea75db10..4b27a574aa5e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-8.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl --param riscv-autovec-lmul=m8 -O3" } */ +/* { dg-options "-mrvv-vector-bits=zvl -mrvv-max-lmul=m8 -O3" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-9.c index 85ab1eea6557..51d0354dbe38 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-9.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl --param riscv-autovec-lmul=m8 -O3" } */ +/* { dg-options "-mrvv-vector-bits=zvl -mrvv-max-lmul=m8 -O3" } */ #include <stdint-gcc.h> #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c index 89c1af3f3cf4..4bc6f76177b9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=zvl" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -mrvv-max-lmul=m8 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c index d84c21df334c..e08a93c58e74 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=zvl" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -mrvv-max-lmul=m8 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c index 0a0d9b2713dd..92d1a0652b3e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3 -mrvv-max-lmul=m8" } */ #include "trailing-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c index 194d18b06f1e..d25ed77e0c91 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3 -mrvv-max-lmul=m8" } */ #include "trailing-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-1.c index 7c7a5bd6ac74..6584030f5c7c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-2.c index e98f5c4bbf8a..5389a55a97f1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/abs-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-1.c index 15ffdf68de7b..2cfef6d20d47 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-2.c index d0e68b1b47c3..ad8c8f6909d2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-3.c index 5b697dd88185..ceb806f64abc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/and-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c index 2327a3d018e1..30e60d520d68 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c index 8030810fdbd1..33df429a634e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c index dce0ffa346e6..9058905e3f5b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-4.c index 65912fb39f2f..8d106aaeed09 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-5.c index a197b24c234b..981abd515888 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-6.c index a53de71a01b0..bfe4ba3c4bda 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/avg-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/bswap16-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/bswap16-0.c index 11880bae1f8b..07072777791b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/bswap16-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/bswap16-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-1.c index 05742b90fd5c..965cb1db7803 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-2.c index 39a56025818e..eda6070ebb87 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-3.c index 387157d9be6b..fba10568585e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-4.c index 40b8871ea3ac..773107066b94 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-5.c index 378b704d3601..d01153daa981 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-6.c index f0351e0baf85..264520fab17c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cmp-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-1.c index 7afb19405004..edabcde39a60 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-2.c index cbb59959af09..f9560f680a17 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-3.c index abd49c003e01..8cf237f1f79e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-4.c index 6fa9b13a9ae9..996bb7433c84 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-5.c index 2a8793266bba..34df94c40085 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-6.c index 88bfe589aa7c..e0240014c8e2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-7.c index eeb96901087c..6f4292282cdf 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-1.c index 4622a5b58ade..b05eb122e8d5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-10.c index 0d4776cac80f..c06c8ee878ec 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-11.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-11.c index 4af45cc07836..02f0a5f6d5e9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-11.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-12.c index d2f18521d5ac..9393836c749c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-13.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-13.c index ae6e712b9a5a..7d7221d5df4f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-13.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-13.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-14.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-14.c index f8d5e40c5772..9920d0fff593 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-14.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-2.c index 3eaf8bb948d8..b2e52b877b82 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-3.c index 52fd64deaa87..e3f31b2a3ee2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-4.c index af6aaf369b75..394a2634dc31 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-5.c index a1dacaca20bf..29e020b7c7e1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-6.c index 99d4019710b8..7de13fa691a6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-7.c index 5165d4743c61..e84e5b5395fb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-8.c index d270dd9eebe0..1cc01006bfb2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-9.c index ea77cb0c3f6c..f2e3941fa685 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/combine-merge-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-1.c index 537a032947e3..0a3a0b2522fd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/compress-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-2.c index e643147105f7..fee8428f087b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/compress-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-3.c index 5e872942c9da..fc883a1d17aa 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/compress-3.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-4.c index a4ceb62912ad..31bdd97d4575 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/compress-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-5.c index f407027ae40c..c1ab0fd12f2b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/compress-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-6.c index ffc0b8fa5b49..56e775859011 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/compress-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/compress-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_abs-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_abs-1.c index 3eaabce96111..2f6de6151790 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_abs-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_abs-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-1.c index 61da94cbc410..06a62e01f9af 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-2.c index cb730870211b..fb53738677c6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_add-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_and-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_and-1.c index eb8d56a2a1df..01ff61cee942 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_and-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_and-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-1.c index 3baf5cfff077..59c2f8cb42ba 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-10.c index e56dc33212d7..3eebcd01627c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-11.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-11.c index 41ec468bf3de..2a9a9ada0eb7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-11.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-12.c index c2cb8bfde1ad..4444ad8dfb48 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-2.c index beecdf439161..79b8325af206 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-3.c index f71236b03859..d2b629135c79 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-4.c index fa5780cc4da3..cdadf5c34315 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-5.c index 696e17cb29d6..d061aa74a47b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-6.c index a830777b9ba3..4394233ae91f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-7.c index 6f56cb6c2fec..881bd57b07c1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-8.c index 62cc7a3343e7..f439806455aa 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-9.c index 14ae1a3fe684..47fd131440a7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_convert-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_copysign-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_copysign-1.c index 55191582d08d..e99a70286ffd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_copysign-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_copysign-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-1.c index 373ff00f95b3..4c6a21bb7efd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-2.c index fac75ef0775b..894e83957ad0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_div-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-1.c index c356cf512b8b..73f425ee2dd2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-2.c index 02bdf656cf84..d714f3f3710e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-3.c index 2db3ea2c8cef..9c3790c6c001 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-4.c index 192722c32893..98a5eb1c03c9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-5.c index 96ba993a24fb..3f3882ad4b2f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ext-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-1.c index 54d2f0721f4b..939c87d6711c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-2.c index 145f81fa5c34..5d6928519d31 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fma-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fms-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fms-1.c index bfed1dbec023..5f00d51c6775 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fms-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fms-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-1.c index 5871c71fdbf8..12bcafb0f8eb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-2.c index f91039aa3661..9375c84521e3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnma-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnms-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnms-1.c index 59fae9b47883..a8f889032263 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnms-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_fnms-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ior-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ior-1.c index 2c30854033ec..d8e535073d1e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ior-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_ior-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-1.c index 60e0f9391d2c..1b59686303e8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-2.c index f8db2925b52d..f46298c07972 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_max-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-1.c index 2a13c254e7f0..760c6f6f2d54 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-2.c index 0ae82085b1bf..95560068e8a8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_min-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mod-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mod-1.c index 060c58bfe5c9..4d9862d5aec4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mod-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mod-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-1.c index f6b58c101bad..8e8cf996e296 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-2.c index 4df3d5579b37..36a726645b6f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mul-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mulh-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mulh-1.c index ffa6458a9e57..f92ceccd94fa 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mulh-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_mulh-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-1.c index 08f2285083c9..a947a0862589 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-2.c index 41452e73f50b..2f220c901b23 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_narrow-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-1.c index ca944460ca78..1da9312fa694 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-2.c index cf44c1805e5c..bbe734c2f28e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_neg-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_not-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_not-1.c index 1a2a8f451087..3096095ff259 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_not-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_not-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-1.c index 3ac6203630cd..3e94dbb447f3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-2.c index 8c2fa470dad5..e9d4e3730086 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_shift-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sqrt-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sqrt-1.c index 1c1c2ab280f0..283f2d5dcad6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sqrt-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sqrt-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-1.c index 629e66cd6309..8ef45752b994 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-2.c index 385ab41d173c..a7c97601f42b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_sub-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-1.c index f548856ac23c..dce94c587e43 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-2.c index 5d38c77bceb8..2a0d8bdf6c67 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-3.c index 75967331f645..510c656b7ccc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-4.c index 867de1322045..d2b8ece1421a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-5.c index 12ca119b8fc1..72a5147225c5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_trunc-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-1.c index ccaaf3192c74..218a4754cfa9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-2.c index d2a67c85454a..c7132e8bc834 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-3.c index 6ae95f30241e..9814e8df2375 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-4.c index d9056e67c08d..d28242d2f7d5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wadd-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-1.c index fa4022bcc7a3..4eece1c02bbe 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-2.c index 5a2bfed9bc90..34b9f0254482 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfma-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfms-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfms-1.c index 86fbe0bde735..ce7c1c0e16fe 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfms-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfms-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfnma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfnma-1.c index fa0fc64367d0..79ec5af36881 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfnma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wfnma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-1.c index f18cd66489df..ae5bddc921ca 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-2.c index b7a6d52931f4..af9e20a1a087 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-3.c index 64ca747f649d..17c9a58f9077 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wmul-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-1.c index 887aabd5c199..7dd2987a1174 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-2.c index 4093450374eb..9fd3471e7223 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-3.c index 20e3a8fb05a5..d9eae4efdc34 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-4.c index b97cd8a05922..b0cb28777a71 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_wsub-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_xor-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_xor-1.c index 1bb057017735..b6b0007e3fd9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_xor-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cond_xor-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-1.c index b9bc15f7c826..f9a763a271fd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-2.c index 8c0bc201425a..8f5103c50c73 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/consecutive-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-1.c index f3217e6063e8..2ff2cf6010b6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-2.c index 99255ec5aa69..c827f3bfd3e0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-3.c index a9c8ae34ba77..a9f531c7031e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-4.c index 50d1515aff6d..f95be047dd60 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-5.c index afc2a8777185..21ab91c37217 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/const-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-1.c index ca04f7f382e1..99004c3852d1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-10.c index 95d04cd814ca..8abbe59a942a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-11.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-11.c index 853acb3226b5..9f96da75cbd7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-11.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-12.c index 8fdfa4475855..858c915d44a9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-2.c index 4b6a168625ce..3c0106d31ba2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-3.c index 6d74bdd35d48..e4237ba6c632 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-4.c index 8ef991de44c3..3fea034793d2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-5.c index 09a44de616ae..2381284e1f72 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-6.c index 2948dde0d0b1..6db44067fea9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-7.c index ea39012b95a2..f4863371f08e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-8.c index 59f36f582f64..d895d8cf816e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-9.c index 3546ddc4554c..9f0da2c570bd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/convert-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-trapping-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cvt-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cvt-0.c index 5637b05ad6ee..6083aff2c5c3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cvt-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/cvt-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -ffast-math --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -ffast-math -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/div-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/div-1.c index 7d8a3e2df705..1b9e05875851 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/div-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/div-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-1.c index 1f520f2b0a74..995286165f53 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-2.c index 1a930d059c8a..fdd335f81ca1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-3.c index 46fb5a525a56..f95e8b01aee3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-4.c index 7e46dc425264..74625b784c7f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-5.c index 9b9327bdd4d8..511f3ba8aa02 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-6.c index 52d5a65b44e0..41616e65f17e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-7.c index 39f27ece2e79..6e18304c0174 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/dup-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-builtin -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-1.c index e46990efa565..151d0e7d7ca3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-2.c index 03968a6baf9e..0879f5a3d2c8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-3.c index 4cc19302b0bf..f8c9cf44b646 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-4.c index 7593a35d666b..23fa14bf68e1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-5.c index 5dca5a7875db..9dd20a2477aa 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ext-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-1.c index 907a7080bf7a..f593daf30599 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-2.c index 7daa074ad773..48ef9f381087 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/extract-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-1.c index 5c2da4df24e7..382860b03a1f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-2.c index 73a355bc0859..042dd0d5ccc6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-3.c index 42925e5143a7..fffaa12323e5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-add-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-1.c index 93a9e39d00ca..89a9e56494d3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-2.c index a5bc2a0e970f..1a3aff74453d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-3.c index f1fb7ed2c9d1..19b5ba51c74b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-div-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-1.c index 8d3cd2aa5384..ef625d52bd14 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-2.c index a13de042041f..8dc5a31de243 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-3.c index 108a883bba55..6f31e275c18e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-4.c index d74801887b6c..db3bf8667bba 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-5.c index dd163682396b..231919ebf88b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-max-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-1.c index e082c47b0442..47062683bca4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-2.c index 1b900522750a..101ad573aef0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-3.c index ad05800572f2..65afa96c9409 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-4.c index 5d4109aa3c26..004a95cd05d6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-5.c index 0e3cbf2acec7..82a86965fb61 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-min-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-1.c index 3beccb275ab5..5464c80724c8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-2.c index b96163861779..297f049795b1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-3.c index d8e4e26bc00d..f49bf28f0ff0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-mul-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-1.c index 0cc18d912152..fa89c52f630e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-2.c index 3a66481070af..518bebbca3ec 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-1.c index 86c23ef0436c..9ca136561fab 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-2.c index ec9001f8ee45..219031303153 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -ffast-math" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -ffast-math" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-1.c index 75fe340935cd..12bbbc673256 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-2.c index 96a6fe6df2c0..8ddefc69f2c4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-3.c index 0094e2cbf4b3..54a3adf3d106 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/floating-point-sub-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-1.c index 7f9073a4dc18..ce8f351f8924 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-2.c index ddc4b552fc7b..94b2327763f5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-3.c index 3bb52ae59741..24842f324f10 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-4.c index 903a4f723e6a..01ebc8fc3a8e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-5.c index de565b76b0c9..ad97a089287a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-6.c index 97fd9b8cd192..8a61d24bbc11 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-7.c index c6dc9f7ff810..6f806b8d3061 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fma-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-1.c index 491ed0025634..37150e1c779e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-2.c index ade6cb11cc5c..28dc7eaf255c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-3.c index 1746f172ef68..203eebf71caf 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fms-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-1.c index 418c767a7bf3..f10d1f9aa6cd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-2.c index c1b629a7b222..ae96bacaf89d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-3.c index bab693eda0bf..babe2967b624 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-4.c index f0a7c5dee30d..3cdfff62da82 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-5.c index 053f1eee62e1..72ffdd107a18 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-6.c index 9053517346c7..b57d8422c1bb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-7.c index 9952a498d934..0b3e195e6023 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnma-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-1.c index 7fb8884f58c9..162f3e32005f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-2.c index b044061c9d69..13f1dfb399b4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-3.c index 5547bc4c130c..bb4a40354c0b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/fnms-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-1.c index 0f78ae0ebe26..f16f709fee79 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c index ae31e227ad1d..fbe6ce808bc0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl256b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl256b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-3.c index df15bd7300f4..189423c0fe54 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl256b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl256b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-4.c index 09bdbd19cc00..145e7d4323c5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl512b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl512b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-5.c index 65ca8cb41e36..3081e16c8081 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl512b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl512b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-6.c index 9cd36ce2ec11..6af57b7d230d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl1024b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl1024b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-7.c index ad337054f3ac..c11ce43ece02 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl1024b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl1024b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c index 9bb21d7ab18d..5549f8731dd8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c index e5934ac382cb..1b2d1decd101 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c index 7b30e2b5c755..428bb4e29203 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c index d3efc9aca3d0..38a878480da9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c index a9d1e87965e8..7f21a36ae8b2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c index b528c8036b91..b92d55835b91 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c index 5c36d86e0cf1..85170781198f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c index 1087b60ab293..4fa651ae894e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c index f0d40dfa7004..0b339d04e5a7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-1.c index dcee81a9bc08..ce67471a98f7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-2.c index adcba29197a8..c07fd20c5c1c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-3.c index ed142d58489c..cc0c19ab336c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/ior-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-1.c index d5b65ff55005..bfa226b83d53 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-2.c index 7fe4ec96dc8f..4a78163d93b7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-3.c index 7d2254b326db..bb31a5ecf554 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mask-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ceil-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ceil-1.c index b113df80c5f0..c35c6f1369be 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ceil-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ceil-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-floor-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-floor-1.c index 076580e6a586..aa69d6904bfb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-floor-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-floor-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-0.c index f8877a1d5648..b14cc5db5a41 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-1.c index a2a2e2458d90..8c0b4441b13b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iceil-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-0.c index 69eaa11f6d23..de145f39bc45 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-1.c index b6a2122c0066..1dbf472713b3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-ifloor-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-0.c index 3297bc6ec656..b2ce7006f5a7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-1.c index 5447326b9976..31436a89ce27 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-irint-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-0.c index 12fe7a227724..8e8feebf97fd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-1.c index bad232d729d1..e5b95dbce555 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-iround-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-0.c index f84357460af1..ffef193d53b6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-1.c index 2d4080868a90..c29ae8860aab 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32f -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32f -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-rv32-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-rv32-0.c index 94168c1201ee..d9b0848bb7cf 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-rv32-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceil-rv32-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceilf-rv64-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceilf-rv64-0.c index 12ac4e5ccd0e..2ea751e67690 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceilf-rv64-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lceilf-rv64-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-0.c index fe61e997de47..347cb0791a54 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-1.c index a64e5c4d252b..4d8caf60347e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32f -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32f -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-rv32-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-rv32-0.c index f5a8311a3e89..30aa13dcb9da 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-rv32-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloor-rv32-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloorf-rv64-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloorf-rv64-0.c index 08b1b7f91373..c170a879656d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloorf-rv64-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lfloorf-rv64-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c index 204e3adefcad..919ce1e80b7b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceilf-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceilf-0.c index 09842c0fc8e9..710400fa9906 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceilf-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llceilf-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloor-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloor-0.c index 205a5d20d8a0..f3ffa0e0aa8f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloor-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloor-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloorf-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloorf-0.c index b72eaf975c3e..3dadab1a1d10 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloorf-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llfloorf-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrint-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrint-0.c index b0bf422f6850..ada0b981246f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrint-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrint-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf-0.c index 9445f5df60e6..07ead40a2c6b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf16-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf16-0.c index be2373d5b9d9..622b9bf3b025 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf16-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llrintf16-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llround-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llround-0.c index 9bed7648b43c..c195e276f87d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llround-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llround-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf-0.c index d3993fcfc4fb..60c670a0c840 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf16-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf16-0.c index 0ca112dc96dd..860af08ce702 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf16-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-llroundf16-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-0.c index 561edef7d3d5..d768dcecb79a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-1.c index 5414352fbbee..cfbd06349ab0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32f -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32f -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-rv32-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-rv32-0.c index 61563e47aa05..012683169f13 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-rv32-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrint-rv32-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf-rv64-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf-rv64-0.c index b095ff280ad3..11c62f4a6936 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf-rv64-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf-rv64-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv32-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv32-0.c index f78c8e3fb619..78f5df4fbfe8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv32-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv32-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv64-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv64-0.c index 21ef441131b2..37de3347a848 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv64-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv64-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-0.c index c2a9f6b44947..0ae48d249517 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-1.c index 5a4313326717..c9e29a6e782d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32f -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32f -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-rv32-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-rv32-0.c index f52685409c29..a915971e8a77 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-rv32-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lround-rv32-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvl4096b -mabi=ilp32d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf-rv64-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf-rv64-0.c index 2c6515aa9651..3942969e22ad 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf-rv64-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf-rv64-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv32-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv32-0.c index 4b660709c12a..7080927f791f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv32-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv32-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv32gcv_zvfh_zvl4096b -mabi=ilp32d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv64-0.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv64-0.c index 9fa456372f3b..3d8967de7a58 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv64-0.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv64-0.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c index 8c8498c5982a..bb62ce2ef8a8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-rint-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-rint-1.c index cf10d61541a3..9896e3039748 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-rint-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-rint-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-round-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-round-1.c index 97fd6975969f..33806f89c096 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-round-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-round-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-roundeven-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-roundeven-1.c index 8489d39481f7..fe5b2891b92f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-roundeven-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-roundeven-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-trunc-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-trunc-1.c index 51211bd653ed..d1c080ffa8cd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-trunc-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/math-trunc-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/max-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/max-1.c index e4400c20733c..c98357fab195 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/max-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/max-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-1.c index 9cbc845b38b7..cd24922d0ad4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/merge-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-2.c index e270db947df9..52d91244f51b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/merge-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-3.c index 033952ffbe4f..4931d2a36047 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/merge-3.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-4.c index 62ed1a5fd17a..f22a18f8ef3b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/merge-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-5.c index 42fa2ec7682b..cf8d04c4bce8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/merge-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-6.c index d5222f6cb289..3b6f9774d515 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/merge-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-7.c index bd097f033dd5..b0257134438b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/merge-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/merge-7.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/min-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/min-1.c index 41e2d26e1588..42b8d8c5dd03 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/min-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/min-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-1.c index 4d698ba3c890..10aacf3cbe23 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-2.c index 2d9dd6290f5e..10f9a7af6bc4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-3.c index 2625c164e41b..4dff0aa2402a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/minus-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/misalign-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/misalign-1.c index 6e08f77921af..1a076cbcd0f5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/misalign-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/misalign-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m4 -fno-tree-loop-distribute-patterns" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m4 -fno-tree-loop-distribute-patterns" } */ #include <stdlib.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mod-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mod-1.c index 17d2784b90dc..4bb94beaf2fc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mod-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mod-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c index 18dad346464b..bd34f0289744 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c index c199c330ce54..0de41d0c069b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-11.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-11.c index 4737008426f2..81720db35cce 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-11.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-12.c index f61c372162e0..eae2bdc124dc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-13.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-13.c index 56a7cf0b9f1d..736f04f4ded6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-13.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-13.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-14.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-14.c index de49ed82dbbc..4606484f26cb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-14.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-15.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-15.c index bed6a4784b06..5c0795dd658b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-15.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-15.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-16.c index 06ab31b30947..871225a8bc93 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-16.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-17.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-17.c index c2f0e3c2fc61..c0d0ae51a627 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-17.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-17.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c index 77d3fed58864..ca332240e469 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c index 5fae343ed49c..0f331e89f67d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c index c515f0225184..175bbb5f8c12 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c index 1164ab5de9fc..76b81ad715a4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c index 404ef5d0e86e..73be9d633c29 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mov-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ /* { dg-final { check-function-bodies "**" "" } } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mulh-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mulh-1.c index 47bb40f98287..fe1dd7c142b8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mulh-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mulh-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mult-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mult-1.c index 0d1b5a45e9c9..58bb4287ec53 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mult-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/mult-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-1.c index ca6b856aca44..a419de6f5305 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-2.c index 3838ee5fd683..f87f5baaf76e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-3.c index 03d03dc9c0c7..26ea11875650 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/narrow-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-1.c index 0d723d70e8c2..fb58d2e6d7d9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-2.c index c2ab0098afae..a980364c2324 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/neg-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/not-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/not-1.c index 316bac88fed3..3cdeed08f1ac 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/not-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/not-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-1.c index 327913ba5e5c..35a648b97240 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/perm-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-2.c index d56231268fd4..237997646b8f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/perm-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-3.c index 87319e373da1..0d407efc285b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/perm-3.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-4.c index 4d6862cf1c04..a9706313367a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/perm-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-5.c index 3460315bac37..b465d559faea 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/perm-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-6.c index a2a722f48972..e20964b81cd9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/perm-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-7.c index b474ccfd7ca9..6cc753f72e91 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/perm-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "../vls-vlmax/perm-7.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-1.c index 146b4dd2cace..6b19f2d01c98 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-2.c index 6ce07194d144..797e7b98b920 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-3.c index c68b2bc7755d..d32d9d9a91d3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/plus-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-1.c index b6d8e6a51edd..fb7dfb8def03 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-10.c index 22aace423cf5..b5187e04a296 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-11.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-11.c index 0e8518a473f7..6ad0207f5007 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-11.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-12.c index aabbe71f8a35..3fc84c146a2f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-13.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-13.c index c3f5f2c7c6dc..ab548f98517e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-13.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-13.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-14.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-14.c index 61eea795ab96..12baca08f688 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-14.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-15.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-15.c index a368e5576d18..0db6e67e0ddc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-15.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-15.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-16.c index c528d69ad8e7..d856bf8e84ed 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-16.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-17.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-17.c index d0f00e66dfc5..e208a4d36e06 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-17.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-17.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-18.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-18.c index ba8fb520364d..24a9a6bf9756 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-18.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-18.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-19.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-19.c index 5130fe5f2e33..5a4df4824240 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-19.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-19.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-2.c index 158aaf3c006f..3d845921c228 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-20.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-20.c index 819104a8cdf9..daf9c8a32a94 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-20.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-20.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-21.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-21.c index 2b61e0ac71a0..d1b8c2535cca 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-21.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-21.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-3.c index d24f2ef5b1ed..18436aadcf75 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-4.c index 1143bdec46d7..f34ee84be982 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-5.c index 0370b4dff7c5..bcfc53697324 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-6.c index 954e39d76a4d..52f7284268c6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-7.c index 6762db8011a4..faae666f7cc6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-8.c index 905c9d0a833a..a7e02d3f9889 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-9.c index be7c32358ceb..7d63738fdaab 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/reduc-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized-details" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized-details" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-1.c index 2c831f9f2286..3fe720d4a8b3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-2.c index a465bb6ea64c..e9102d173c10 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-3.c index 9c9899b31dd0..e02f6fc84f50 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-4.c index 17bc31367d63..f552439c2c0e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-5.c index 6398f2476adc..1de2d43e0d16 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-6.c index 960a164112fb..11b14862dadd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-7.c index 98be878daedc..4ba0f8522e2b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-8.c index b8d952ef6ad0..441d801e4fdd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-9.c index 1db68fcf3fe3..7331ad069286 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/repeat-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-1.c index b575bb9e60bf..d515887bda85 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-2.c index c84eed158e55..9c4381d88c77 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-3.c index 16cce76dcf46..6d56974d3b92 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-4.c index 966391e1f5c3..1a07f8d70f26 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/series-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8 -fno-builtin" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8 -fno-builtin" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-1.c index ee8da2573c70..eb3f32c1fc92 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-2.c index ebd5575f2672..8caed20a18b0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-3.c index 244bee02e552..f54cb09a9cbe 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-4.c index 56b6ef92c836..ee80ffdc4dad 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-5.c index c909cb1a75a8..ee097806c909 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-6.c index fdea84c39d8d..07cfcffd5ae0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/shift-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-1.c index 842bb630be56..b64c73f34f13 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-2.c index 8f6ee81b98f2..8fcdca705384 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-3.c index 0f317d6cce5c..ca296ce02d66 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-5.c index b366a4649d87..150135a91103 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-6.c index d35e2a44f79b..c5d2d0194348 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/spill-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d --param=riscv-autovec-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -mrvv-max-lmul=m8 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/sqrt-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/sqrt-1.c index 60dbfd77c2af..1d94d57c7293 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/sqrt-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/sqrt-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c index ed15a12ecfb2..675ce8512a5f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c index 5deb097bf544..475dcf2ee3d0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c index e503d6c4dff0..974d566ffd6d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c index c7945643d57c..19170a5a9a46 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c index 43e179229500..a4797450476a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c index bb91c6a18554..17ec6d0030a7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c index b12f08d280e1..21e2c10e71f1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trailing-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-1.c index ae129d094dac..c197db32114e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-2.c index 0631dad5321c..25bb2a246623 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-3.c index 3c5f045632f4..1993c63ae2da 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-4.c index d9a5eeb212ed..bd931e8861bb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-5.c index b87a5c4dfadb..41d2ce471251 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/trunc-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-1.c index d53fdc221628..3640b6cc6c74 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-10.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-10.c index c9242362372c..a0f02c1dce0d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-10.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-11.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-11.c index 4ec86789d80a..c3b20c4f30df 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-11.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-11.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-12.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-12.c index 4436830307b7..3da7fa1fe760 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-12.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-13.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-13.c index 037a4a6f71a4..230d43108947 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-13.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-13.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-14.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-14.c index 4dd58884d79b..0379fa32442a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-14.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-14.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-15.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-15.c index 77eeed49a992..fcc80cfd2690 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-15.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-15.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-16.c index 4f2bb2c75084..105cb9681cac 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-16.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-16.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-17.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-17.c index 9376aee2ac22..3a75926c3e24 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-17.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-17.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-18.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-18.c index ade887ea3bef..aa7aea873c10 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-18.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-18.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-19.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-19.c index 7106bd936ad0..efbe874581aa 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-19.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-19.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-2.c index 6132bb4945a5..68e3c9debecd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-20.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-20.c index 2da3e3c18a4c..88f2769043bc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-20.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-20.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-21.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-21.c index db2682ad3fd5..a483304715b2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-21.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-21.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-22.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-22.c index 3bb3936c006f..f100e5f12d36 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-22.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-22.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-3.c index 6080060b60df..42080e69cfa7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-4.c index 09852f7ca1d1..474057eb2ba6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-5.c index b6a4d1a2c8bc..6864d7fe4ac8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-6.c index 11e22db53f49..b8cdc0829a36 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-7.c index d4ce093f2016..58e3e7d6fb01 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-8.c index 4beb2b0b9be4..8292ee9351cd 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-8.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-9.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-9.c index b59f3f3d1215..ae45b71974f6 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/vec-set-9.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 --param=riscv-autovec-lmul=m8" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2 -mrvv-max-lmul=m8" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-1.c index bce56b77fd12..2269a4cd243a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-2.c index d0b55c0a1d78..b4ab497ab9e7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-3.c index b6067c8da4f0..dbae1f13eb07 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-4.c index 253750ad5e01..21c29bc62636 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wadd-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-1.c index a92b1c971408..2aab1e00a722 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-2.c index 145ffd94ba99..bff13c184be8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-3.c index 4461a28dbcdd..537ed0a8563c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfma-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfms-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfms-1.c index 804cfa003edd..7710aa7090b7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfms-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfms-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnma-1.c index 7c555866792a..479d45eb88c7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnma-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnma-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnms-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnms-1.c index ce1150918942..1eeb6a1d663a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnms-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wfnms-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-1.c index 8269dfa3fada..46e67408e799 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-2.c index 3675388b77d2..4f4aaa89255a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-3.c index 813a9a633f57..73bc45bad8b8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wmul-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-1.c index 7ce910cbfce9..7cdd2d8cf454 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-2.c index 75d49bc25281..d7895666560d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -ffast-math -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -ffast-math -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-3.c index f49acc14d7af..6e9456b23209 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wred-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "wred-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-1.c index eea95400b63f..6d95914ad5f5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-2.c index 1048d2978965..9e67ad1c039c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-3.c index ac4bfe2e87a3..f92ffd76965e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-4.c index 619c0c77aaf1..69883e415911 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls/wsub-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 --param=riscv-autovec-lmul=m8 -fdump-tree-optimized" } */ +/* { dg-options "-march=rv64gcv_zvfh_zvl4096b -mabi=lp64d -O3 -mrvv-max-lmul=m8 -fdump-tree-optimized" } */ #include "def.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc-1.c index 213c4d0cb1f8..be1e4cd32245 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh_zvl128b -mabi=lp64d -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh_zvl128b -mabi=lp64d -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math" } */ #include <stdint-gcc.h> #define TEST_TYPE(TYPE1, TYPE2, N) \ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc_order-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc_order-2.c index fd99a5dac1f0..c97bde0b9d1f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc_order-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_reduc_order-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m2 -fno-vect-cost-model" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -fno-vect-cost-model" } */ #include <stdint-gcc.h> #define TEST_TYPE(TYPE1, TYPE2, N) \ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-3.c index a2d38a85264d..4a34f8a7d3d9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gc_zve32f -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fdump-tree-vect-details" } */ #include "template-1.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-3.c index 8b054b7890dd..e72a5c1080c7 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32x-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve32x -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gc_zve32x -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fdump-tree-vect-details" } */ #include "template-1.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-3.c index 34d34e756b1e..0fe15ec69e9c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64d-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fdump-tree-vect-details" } */ #include "template-1.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-3.c index 2dfcc6d2a73d..8f47df61632f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64f-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve64f -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gc_zve64f -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fdump-tree-vect-details" } */ #include "template-1.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-3.c index d7ee31f0af41..a02cbd42c44f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/zve64x-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gc_zve64x -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fdump-tree-vect-details" } */ +/* { dg-options "-march=rv32gc_zve64x -mabi=ilp32d -fno-vect-cost-model -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fdump-tree-vect-details" } */ #include "template-1.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c index 25b34ee2331c..0699cb78dd51 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-1.c @@ -50,7 +50,7 @@ void f2 (__INT32_TYPE__* a, __INT32_TYPE__* b, int l) Use extern here so that we get a known alignment, lest DATA_ALIGNMENT force us to make the scan pattern accomodate code for different alignments depending on word size. -** f3: { target { { any-opts "-mcmodel=medlow" } && { no-opts "-march=rv64gcv_zvl512b" "-march=rv64gcv_zvl1024b" "--param=riscv-autovec-lmul=dynamic" "--param=riscv-autovec-lmul=m2" "--param=riscv-autovec-lmul=m4" "--param=riscv-autovec-lmul=m8" "-mrvv-vector-bits=zvl" } } } +** f3: { target { { any-opts "-mcmodel=medlow" } && { no-opts "-march=rv64gcv_zvl512b" "-march=rv64gcv_zvl1024b" "-mrvv-max-lmul=dynamic" "-mrvv-max-lmul=m2" "-mrvv-max-lmul=m4" "-mrvv-max-lmul=m8" "-mrvv-vector-bits=zvl" } } } ** lui\s+[ta][0-7],%hi\(a_a\) ** addi\s+[ta][0-7],[ta][0-7],%lo\(a_a\) ** lui\s+[ta][0-7],%hi\(a_b\) @@ -85,7 +85,7 @@ void f2 (__INT32_TYPE__* a, __INT32_TYPE__* b, int l) */ /* -** f3: { target { { any-opts "-mcmodel=medany" } && { no-opts "-march=rv64gcv_zvl512b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl1024b" "--param=riscv-autovec-lmul=dynamic" "--param=riscv-autovec-lmul=m8" "--param=riscv-autovec-lmul=m4" "-mrvv-vector-bits=zvl" } } } +** f3: { target { { any-opts "-mcmodel=medany" } && { no-opts "-march=rv64gcv_zvl512b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl1024b" "-mrvv-max-lmul=dynamic" "-mrvv-max-lmul=m8" "-mrvv-max-lmul=m4" "-mrvv-vector-bits=zvl" } } } ** lla\s+[ta][0-7],a_a ** lla\s+[ta][0-7],a_b ** vsetivli\s+zero,16,e32,m8,ta,ma diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-2.c index 1161ccb95cb8..6a854c87cd06 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/cpymem-2.c @@ -16,7 +16,7 @@ typedef struct { short s; char c[30]; } s16; */ /* -** f1: { target { { any-opts "-mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl512b --param=riscv-autovec-lmul=dynamic" } } } +** f1: { target { { any-opts "-mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl512b -mrvv-max-lmul=dynamic" } } } ** vl1re8.v\s+v1,0\(a1\) ** vs1r.v\s+v1,0\(a0\) ** ret @@ -37,7 +37,7 @@ void f1 (c16 *a, c16* b) */ /* -** f2: { target { { any-opts "-mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl512b --param=riscv-autovec-lmul=dynamic" } } } +** f2: { target { { any-opts "-mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl512b -mrvv-max-lmul=dynamic" } } } ** vl2re8.v\s+v2,0\(a1\) ** vs2r.v\s+v2,0\(a0\) ** ret @@ -57,7 +57,7 @@ void f2 (c32 *a, c32* b) */ /* -** f3: { target { { any-opts "-mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl512b --param=riscv-autovec-lmul=dynamic" } } } +** f3: { target { { any-opts "-mrvv-vector-bits=zvl" } && { no-opts "-march=rv64gcv_zvl1024b" "-march=rv64gcv_zvl256b" "-march=rv64gcv_zvl512b -mrvv-max-lmul=dynamic" } } } ** vl2re16.v\s+v2,0\(a1\) ** vs2r.v\s+v2,0\(a0\) ** ret diff --git a/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp b/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp index fe404c604dd0..8c4e916d5b1f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp +++ b/gcc/testsuite/gcc.target/riscv/rvv/rvv.exp @@ -47,16 +47,16 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/struct/*.\[cS\]]] \ "" "-O3 -ftree-vectorize" set AUTOVEC_TEST_OPTS [list \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=m1} \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=m2} \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=m4} \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=m8} \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=dynamic} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=m1} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=m2} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=m4} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=m8} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=dynamic} ] + {-ftree-vectorize -O3 -mrvv-max-lmul=m1} \ + {-ftree-vectorize -O3 -mrvv-max-lmul=m2} \ + {-ftree-vectorize -O3 -mrvv-max-lmul=m4} \ + {-ftree-vectorize -O3 -mrvv-max-lmul=m8} \ + {-ftree-vectorize -O3 -mrvv-max-lmul=dynamic} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=m1} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=m2} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=m4} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=m8} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=dynamic} ] foreach op $AUTOVEC_TEST_OPTS { dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/partial/*.\[cS\]]] \ "" "$op" @@ -80,12 +80,12 @@ foreach op $AUTOVEC_TEST_OPTS { # widening operation only test on LMUL < 8 set AUTOVEC_TEST_OPTS [list \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=m1} \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=m2} \ - {-ftree-vectorize -O3 --param riscv-autovec-lmul=m4} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=m1} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=m2} \ - {-ftree-vectorize -O2 --param riscv-autovec-lmul=m4} ] + {-ftree-vectorize -O3 -mrvv-max-lmul=m1} \ + {-ftree-vectorize -O3 -mrvv-max-lmul=m2} \ + {-ftree-vectorize -O3 -mrvv-max-lmul=m4} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=m1} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=m2} \ + {-ftree-vectorize -O2 -mrvv-max-lmul=m4} ] foreach op $AUTOVEC_TEST_OPTS { dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/widen/*.\[cS\]]] \ "" "$op" @@ -97,26 +97,26 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/vls-vlmax/*.\[cS\]]] # gather-scatter tests set AUTOVEC_TEST_OPTS [list \ - {-ftree-vectorize -O3 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m1 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m4 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m8 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=dynamic -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m1 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m4 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=m8 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=zvl --param riscv-autovec-lmul=dynamic -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m1 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m4 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m8 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O3 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=dynamic -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m1 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m2 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m4 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=m8 -fno-vect-cost-model -ffast-math} \ - {-ftree-vectorize -O2 -mrvv-vector-bits=scalable --param riscv-autovec-lmul=dynamic -ffast-math} ] + {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m1 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m4 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=m8 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=zvl -mrvv-max-lmul=dynamic -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=zvl -mrvv-max-lmul=m1 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=zvl -mrvv-max-lmul=m4 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=zvl -mrvv-max-lmul=m8 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=zvl -mrvv-max-lmul=dynamic -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m1 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m4 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=m8 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O3 -mrvv-vector-bits=scalable -mrvv-max-lmul=dynamic -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=scalable -mrvv-max-lmul=m1 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=scalable -mrvv-max-lmul=m2 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=scalable -mrvv-max-lmul=m4 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=scalable -mrvv-max-lmul=m8 -fno-vect-cost-model -ffast-math} \ + {-ftree-vectorize -O2 -mrvv-vector-bits=scalable -mrvv-max-lmul=dynamic -ffast-math} ] foreach op $AUTOVEC_TEST_OPTS { dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/autovec/gather-scatter/*.\[cS\]]] \ "" "$op" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111255.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111255.c index 91bd4ca730e9..4e5a4b469355 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111255.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111255.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d -O3 --param riscv-autovec-lmul=m2 -fno-vect-cost-model" } */ +/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d -O3 -mrvv-max-lmul=m2 -fno-vect-cost-model" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c index 703e47e9172f..96bea3a7dc22 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv_zvl256b -mabi=lp64 --param=riscv-autovec-lmul=m8 -mrvv-vector-bits=zvl -O2" } */ +/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv_zvl256b -mabi=lp64 -mrvv-max-lmul=m8 -mrvv-vector-bits=zvl -O2" } */ struct a_struct { diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-2.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-2.c index 5665a237c8a5..489dae832166 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv_zvl256b -mabi=lp64d --param=riscv-autovec-lmul=m4 -O3 -fomit-frame-pointer -funroll-loops" } */ +/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv_zvl256b -mabi=lp64d -mrvv-max-lmul=m4 -O3 -fomit-frame-pointer -funroll-loops" } */ int safe_lshift_func_int32_t_s_s_left, safe_lshift_func_int32_t_s_s_right, safe_sub_func_uint64_t_u_u_ui2, safe_mul_func_uint64_t_u_u_ui2, g_79_2, From 5e64228fe1f7ec536da314246eec968aea0d704d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 10:34:51 +0100 Subject: [PATCH 154/551] system.h: rename vec_step to workaround powerpc/clang bug [PR114369] On Sat, Jul 20, 2019 at 05:26:57PM +0100, Richard Sandiford wrote: > Gerald Pfeifer <gerald@pfeifer.com> writes: > > I have seen an increasing number of reports of GCC failing to > > build with clang on powerpc (on FreeBSD, though that's probably > > immaterial). > > > > Turns out that clang has vec_step as a reserved word on powerpc > > with AltiVec. > > > > We OTOH use vec_step s as a variable name in gcc/tree-vect-loop.c. > > > > > > The best approach I can see is to rename vec_step. Before I prepare > > a patch: what alternate name/spelling would you prefer? > > Would it work to #define vec_step to vec_step_ or something on affected > hosts, say in system.h? > > I'd prefer that to renmaing since "vec_step" does seem the most natural > name for the variable. The equivalent scalar variable is "step" and > other vector values in the surrounding code also use the "vec_" prefix. So like this? If/when clang finally fixes https://github.com/llvm/llvm-project/issues/85579 on their side, we can then limit it to clang versions which still have the bug. I've git grepped for vec_set and appart from altivec.h it is just used in tree-vect-loop.cc, some Ada files which aren't preprocessed, ChangeLogs, rs6000-vecdefines.h (but that header is only included from altivec.h and vec_step is then redefined to the function-like macro) and in rs6000-overload.def but that file is processed with a generator, not included in C/C++ sources. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR bootstrap/114369 * system.h (vec_step): Define to vec_step_ when compiling with clang on PowerPC. --- gcc/system.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/system.h b/gcc/system.h index ab29fc197764..1028dcb1eb3c 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -1302,6 +1302,12 @@ void gcc_stablesort_r (void *, size_t, size_t, sort_r_cmp_fn *, void *data); #define NULL nullptr #endif +/* Workaround clang on PowerPC which has vec_step as reserved keyword + rather than function-like macro defined in <altivec.h>. See PR114369. */ +#if defined(__clang__) && defined(__powerpc__) +#define vec_step vec_step_ +#endif + /* Return true if STR string starts with PREFIX. */ inline bool From 0ba773df160ab1552d76eb51248d0b4d4ca86fae Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 10:35:56 +0100 Subject: [PATCH 155/551] tree-ssa-loop-ch: Fix comment typos When looking at PR109596, I've noticed some comment typos. 2024-03-20 Jakub Jelinek <jakub@redhat.com> * tree-ssa-loop-ch.cc (update_profile_after_ch): Fix comment typo: probabbility -> probability. (ch_base::copy_headers): Fix comment typo: itrations -> iterations. --- gcc/tree-ssa-loop-ch.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/tree-ssa-loop-ch.cc b/gcc/tree-ssa-loop-ch.cc index 6c6e562d5a0a..1f0033be4c43 100644 --- a/gcc/tree-ssa-loop-ch.cc +++ b/gcc/tree-ssa-loop-ch.cc @@ -568,7 +568,7 @@ do_while_loop_p (class loop *loop) <body> // region start loop_header: - if (cond1) <- we need to update probabbility here + if (cond1) <- we need to update probability here goto loop_exit; if (cond2) <- and determine scaling factor here. moreover cond2 is now always true @@ -1049,7 +1049,7 @@ ch_base::copy_headers (function *fun) fprintf (dump_file, "\n"); } - /* We possibly decreased number of itrations by 1. */ + /* We possibly decreased number of iterations by 1. */ auto_vec<edge> exits = get_loop_exit_edges (loop); bool precise = (nexits == (int) exits.length ()); /* Check that loop may not terminate in other way than via From 4c276896d646c2dbc8047fd81d6e65f8c5ecf01d Mon Sep 17 00:00:00 2001 From: Hao Liu <hliu@os.amperecomputing.com> Date: Wed, 20 Mar 2024 17:37:01 +0800 Subject: [PATCH 156/551] testsuite: add the case to cover the vectorization of A[(i+x)*stride] [PR114322] This issues has been fixed by r14-9540-ge0e9499a in PR114151. Tested on aarch64-linux-gnu. gcc/testsuite/ChangeLog: PR tree-optimization/114322 * gcc.dg/vect/pr114322.c: New testcase. --- gcc/testsuite/gcc.dg/vect/pr114322.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/vect/pr114322.c diff --git a/gcc/testsuite/gcc.dg/vect/pr114322.c b/gcc/testsuite/gcc.dg/vect/pr114322.c new file mode 100644 index 000000000000..2642abf37188 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr114322.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/114322 */ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_int } */ + +int +foo (int *A, int *B, int x, int stride) +{ + int sum = 0; + + if (stride > 1) + { + for (int i = 0; i < 1024; ++i) + sum += A[(i + x) * stride] + B[i]; + } + + return sum; +} + +/* { dg-final { scan-tree-dump-not "failed: evolution of base is not affine." "vect" } } */ +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ From 456e10f28b36aa417e0db145556831c4f979fbd7 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 10:55:07 +0100 Subject: [PATCH 157/551] bitint: Fix handling of conditional bitfield loads [PR114365] For the m_var_msb (aka left shift) case of large/huge _BitInt bitfield loads handle_load adds a PHI node, but I forgot to actually update the temporary the code later on uses, so the PHI result was unused and the code incorrectly used something that wasn't valid SSA form. In particular, we emitted if (_29 != 2) goto <bb 4>; [80.00%] else goto <bb 5>; [20.00%] <bb 4> [local count: 1073741824]: _33 = VIEW_CONVERT_EXPR<unsigned long[3]>(s.D.2771)[_31]; <bb 5> [local count: 1073741824]: # _34 = PHI <_33(4), 0(3)> _35 = _32 >> 31; _36 = _33 << 33; _37 = _36 | _35; _38 = _37 << _19; where instead of _33 the _36 def stmt should be using _34. Fixed thusly. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114365 * gimple-lower-bitint.cc (bitint_large_huge::handle_load): When adding a PHI node, set iv2 to its result afterwards. * gcc.dg/bitint-102.c: New test. --- gcc/gimple-lower-bitint.cc | 1 + gcc/testsuite/gcc.dg/bitint-102.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/bitint-102.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 40d814e5c38f..1ce13ca25799 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -2026,6 +2026,7 @@ bitint_large_huge::handle_load (gimple *stmt, tree idx) add_phi_arg (phi, build_zero_cst (m_limb_type), edge_false, UNKNOWN_LOCATION); m_gsi = gsi_after_labels (edge_true->dest); + iv2 = iv3; } } g = gimple_build_assign (make_ssa_name (m_limb_type), RSHIFT_EXPR, diff --git a/gcc/testsuite/gcc.dg/bitint-102.c b/gcc/testsuite/gcc.dg/bitint-102.c new file mode 100644 index 000000000000..9f9861ee2be5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-102.c @@ -0,0 +1,18 @@ +/* PR tree-optimization/114365 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-std=c23 -O2" } */ + +struct S { + int : 31; +#if __BITINT_MAXWIDTH__ >= 129 + _BitInt(129) b : 129; +#else + _BitInt(63) b : 63; +#endif +} s; + +void +foo (int a) +{ + s.b <<= a; +} From 59067ddf66e71bd1bab92a9f581d01657286382c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 11:46:07 +0100 Subject: [PATCH 158/551] Use integer_{zero,one}_node some more When looking at the analyzer MEM_REF invalid second arg issue, I've noticed tons of build_int_cst (integer_type_node, {0,1}) or build_zero_cst (integer_type_node) cases. That just wastes compile time (albeit not very much). The following patch fixes what my sed script found. 2024-03-20 Jakub Jelinek <jakub@redhat.com> gcc/analyzer/ * constraint-manager.cc (test_range, test_constraint_conditions, test_constant_comparisons, test_constraint_impl, test_purging, test_bits): Use integer_zero_node instead of build_zero_cst (integer_type_node) or build_int_cst (integer_type_node, 0) and integer_one_node instead of build_int_cst (integer_type_node, 1). * region-model.cc (region_model::get_store_value, append_interesting_constants, test_array_1, test_get_representative_tree, test_unique_constants, test_assignment, test_stack_frames, test_constraint_merging, test_widening_constraints, test_iteration_1, test_array_2): Likewise. gcc/cp/ * coroutines.cc (expand_one_await_expression): Use integer_zero_node instead of build_int_cst (integer_type_node, 0) and integer_one_node instead of build_int_cst (integer_type_node, 1). gcc/fortran/ * trans-array.cc (structure_alloc_comps): Use integer_zero_node instead of build_zero_cst (integer_type_node) or build_int_cst (integer_type_node, 0) and integer_one_node instead of build_int_cst (integer_type_node, 1). * trans-expr.cc (conv_scalar_char_value): Likewise. * trans-stmt.cc (gfc_trans_form_team, gfc_trans_change_team, gfc_trans_sync_team, gfc_trans_sync): Likewise. * trans-decl.cc (create_main_function): Likewise. * trans-intrinsic.cc (trans_this_image, conv_intrinsic_move_alloc): Likewise. * trans.cc (gfc_allocate_using_caf_lib, gfc_deallocate_with_status): Likewise. gcc/objc/ * objc-next-runtime-abi-02.cc (build_v2_class_ro_t_initializer): Use integer_zero_node instead of build_int_cst (integer_type_node, 0). --- gcc/analyzer/constraint-manager.cc | 14 +++++++------- gcc/analyzer/region-model.cc | 28 ++++++++++++++-------------- gcc/cp/coroutines.cc | 4 ++-- gcc/fortran/trans-array.cc | 2 +- gcc/fortran/trans-decl.cc | 2 +- gcc/fortran/trans-expr.cc | 4 ++-- gcc/fortran/trans-intrinsic.cc | 4 ++-- gcc/fortran/trans-stmt.cc | 8 ++++---- gcc/fortran/trans.cc | 8 ++++---- gcc/objc/objc-next-runtime-abi-02.cc | 2 +- 10 files changed, 38 insertions(+), 38 deletions(-) diff --git a/gcc/analyzer/constraint-manager.cc b/gcc/analyzer/constraint-manager.cc index a380b95315ee..06a2bb860e63 100644 --- a/gcc/analyzer/constraint-manager.cc +++ b/gcc/analyzer/constraint-manager.cc @@ -3374,8 +3374,8 @@ namespace selftest { static void test_range () { - tree int_0 = build_int_cst (integer_type_node, 0); - tree int_1 = build_int_cst (integer_type_node, 1); + tree int_0 = integer_zero_node; + tree int_1 = integer_one_node; tree int_2 = build_int_cst (integer_type_node, 2); tree int_5 = build_int_cst (integer_type_node, 5); @@ -3419,7 +3419,7 @@ static void test_constraint_conditions () { tree int_42 = build_int_cst (integer_type_node, 42); - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree x = build_global_decl ("x", integer_type_node); tree y = build_global_decl ("y", integer_type_node); @@ -3874,7 +3874,7 @@ test_transitivity () static void test_constant_comparisons () { - tree int_1 = build_int_cst (integer_type_node, 1); + tree int_1 = integer_one_node; tree int_3 = build_int_cst (integer_type_node, 3); tree int_4 = build_int_cst (integer_type_node, 4); tree int_5 = build_int_cst (integer_type_node, 5); @@ -4058,7 +4058,7 @@ static void test_constraint_impl () { tree int_42 = build_int_cst (integer_type_node, 42); - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree x = build_global_decl ("x", integer_type_node); tree y = build_global_decl ("y", integer_type_node); @@ -4220,7 +4220,7 @@ test_many_constants () static void test_purging (void) { - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree a = build_global_decl ("a", integer_type_node); tree b = build_global_decl ("b", integer_type_node); @@ -4654,7 +4654,7 @@ test_bits (void) { region_model_manager mgr; - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree int_0x80 = build_int_cst (integer_type_node, 0x80); tree int_0xff = build_int_cst (integer_type_node, 0xff); tree x = build_global_decl ("x", integer_type_node); diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 8fff53241730..c3a4ec7bcfc5 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -2724,7 +2724,7 @@ region_model::get_store_value (const region *reg, = cast_reg->get_original_region ()->dyn_cast_string_region ()) { tree string_cst = str_reg->get_string_cst (); - tree byte_offset_cst = build_int_cst (integer_type_node, 0); + tree byte_offset_cst = integer_zero_node; if (const svalue *char_sval = m_mgr->maybe_get_char_from_string_cst (string_cst, byte_offset_cst)) @@ -7168,7 +7168,7 @@ build_real_cst_from_string (tree type, const char *str) static void append_interesting_constants (auto_vec<tree> *out) { - out->safe_push (build_int_cst (integer_type_node, 0)); + out->safe_push (integer_zero_node); out->safe_push (build_int_cst (integer_type_node, 42)); out->safe_push (build_int_cst (unsigned_type_node, 0)); out->safe_push (build_int_cst (unsigned_type_node, 42)); @@ -7393,7 +7393,7 @@ test_array_1 () region_model_manager mgr; region_model model (&mgr); - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree a_0 = build4 (ARRAY_REF, char_type_node, a, int_0, NULL_TREE, NULL_TREE); tree char_A = build_int_cst (char_type_node, 'A'); @@ -7450,7 +7450,7 @@ test_get_representative_tree () { test_region_model_context ctxt; region_model model (&mgr); - tree idx = build_int_cst (integer_type_node, 0); + tree idx = integer_zero_node; tree a_0 = build4 (ARRAY_REF, char_type_node, a, idx, NULL_TREE, NULL_TREE); const region *a_0_reg = model.get_lvalue (a_0, &ctxt); @@ -7502,7 +7502,7 @@ test_get_representative_tree () static void test_unique_constants () { - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree int_42 = build_int_cst (integer_type_node, 42); test_region_model_context ctxt; @@ -7885,7 +7885,7 @@ test_bit_range_regions () static void test_assignment () { - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree x = build_global_decl ("x", integer_type_node); tree y = build_global_decl ("y", integer_type_node); @@ -7944,7 +7944,7 @@ test_stack_frames () tree int_42 = build_int_cst (integer_type_node, 42); tree int_10 = build_int_cst (integer_type_node, 10); tree int_5 = build_int_cst (integer_type_node, 5); - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; auto_vec <tree> param_types; tree parent_fndecl = make_fndecl (integer_type_node, @@ -8627,7 +8627,7 @@ test_state_merging () static void test_constraint_merging () { - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree int_5 = build_int_cst (integer_type_node, 5); tree x = build_global_decl ("x", integer_type_node); tree y = build_global_decl ("y", integer_type_node); @@ -8674,9 +8674,9 @@ test_widening_constraints () { region_model_manager mgr; function_point point (program_point::origin (mgr).get_function_point ()); - tree int_0 = build_int_cst (integer_type_node, 0); + tree int_0 = integer_zero_node; tree int_m1 = build_int_cst (integer_type_node, -1); - tree int_1 = build_int_cst (integer_type_node, 1); + tree int_1 = integer_one_node; tree int_256 = build_int_cst (integer_type_node, 256); test_region_model_context ctxt; const svalue *int_0_sval = mgr.get_or_create_constant_svalue (int_0); @@ -8790,8 +8790,8 @@ test_iteration_1 () region_model_manager mgr; program_point point (program_point::origin (mgr)); - tree int_0 = build_int_cst (integer_type_node, 0); - tree int_1 = build_int_cst (integer_type_node, 1); + tree int_0 = integer_zero_node; + tree int_1 = integer_one_node; tree int_256 = build_int_cst (integer_type_node, 256); tree i = build_global_decl ("i", integer_type_node); @@ -8944,8 +8944,8 @@ test_array_2 () /* "int i;" */ tree i = build_global_decl ("i", integer_type_node); - tree int_0 = build_int_cst (integer_type_node, 0); - tree int_1 = build_int_cst (integer_type_node, 1); + tree int_0 = integer_zero_node; + tree int_1 = integer_one_node; tree arr_0 = build4 (ARRAY_REF, integer_type_node, arr, int_0, NULL_TREE, NULL_TREE); diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc index 9b037edbd144..b05cb9eb3302 100644 --- a/gcc/cp/coroutines.cc +++ b/gcc/cp/coroutines.cc @@ -1750,7 +1750,7 @@ expand_one_await_expression (tree *stmt, tree *await_expr, void *d) data->coro_fp); r = cp_build_init_expr (cond, r); finish_switch_cond (r, sw); - r = build_case_label (build_int_cst (integer_type_node, 0), NULL_TREE, + r = build_case_label (integer_zero_node, NULL_TREE, create_anon_label_with_ctx (loc, actor)); add_stmt (r); /* case 0: */ /* Implement the suspend, a scope exit without clean ups. */ @@ -1758,7 +1758,7 @@ expand_one_await_expression (tree *stmt, tree *await_expr, void *d) is_cont ? cont : susp); r = coro_build_cvt_void_expr_stmt (r, loc); add_stmt (r); /* goto ret; */ - r = build_case_label (build_int_cst (integer_type_node, 1), NULL_TREE, + r = build_case_label (integer_one_node, NULL_TREE, create_anon_label_with_ctx (loc, actor)); add_stmt (r); /* case 1: */ r = build1_loc (loc, GOTO_EXPR, void_type_node, resume_label); diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index a7717a8107ee..0a453828bade 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -10397,7 +10397,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest, gfc_add_expr_to_block (&tblock, t); if (c->attr.pdt_array) gfc_add_modify (&tblock, gfc_conv_descriptor_version (comp), - build_zero_cst (integer_type_node)); + integer_zero_node); tmp = build3_loc (input_location, COND_EXPR, void_type_node, cd, gfc_finish_block (&tblock), gfc_call_free (tmp)); diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc index b7dea11461fb..e160c5c98c1b 100644 --- a/gcc/fortran/trans-decl.cc +++ b/gcc/fortran/trans-decl.cc @@ -6636,7 +6636,7 @@ create_main_function (tree fndecl) /* "return 0". */ tmp = fold_build2_loc (input_location, MODIFY_EXPR, integer_type_node, DECL_RESULT (ftn_main), - build_int_cst (integer_type_node, 0)); + integer_zero_node); tmp = build1_v (RETURN_EXPR, tmp); gfc_add_expr_to_block (&body, tmp); diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index bd14ce99ed67..76bed9830c43 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -4082,7 +4082,7 @@ conv_scalar_char_value (gfc_symbol *sym, gfc_se *se, gfc_expr **expr) if ((*expr)->ref == NULL) { se->expr = gfc_string_to_single_character - (build_int_cst (integer_type_node, 1), + (integer_one_node, gfc_build_addr_expr (gfc_get_pchar_type ((*expr)->ts.kind), gfc_get_symbol_decl ((*expr)->symtree->n.sym)), @@ -4092,7 +4092,7 @@ conv_scalar_char_value (gfc_symbol *sym, gfc_se *se, gfc_expr **expr) { gfc_conv_variable (se, *expr); se->expr = gfc_string_to_single_character - (build_int_cst (integer_type_node, 1), + (integer_one_node, gfc_build_addr_expr (gfc_get_pchar_type ((*expr)->ts.kind), se->expr), (*expr)->ts.kind); diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc index 0468dfae2b17..4e26af21b462 100644 --- a/gcc/fortran/trans-intrinsic.cc +++ b/gcc/fortran/trans-intrinsic.cc @@ -2562,7 +2562,7 @@ trans_this_image (gfc_se * se, gfc_expr *expr) gfc_add_modify (&loop, loop_var, fold_build2_loc (input_location, PLUS_EXPR, integer_type_node, loop_var, - build_int_cst (integer_type_node, 1))); + integer_one_node)); /* Making the loop... actually loop! */ tmp = gfc_finish_block (&loop); @@ -12815,7 +12815,7 @@ conv_intrinsic_move_alloc (gfc_code *code) null_pointer_node)); tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_sync_all, 3, null_pointer_node, null_pointer_node, - build_int_cst (integer_type_node, 0)); + integer_zero_node); tmp = fold_build3_loc (input_location, COND_EXPR, void_type_node, cond, tmp, build_empty_stmt (input_location)); diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc index 1ec76f9778c9..7997c167bae9 100644 --- a/gcc/fortran/trans-stmt.cc +++ b/gcc/fortran/trans-stmt.cc @@ -764,7 +764,7 @@ gfc_trans_form_team (gfc_code *code) tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_form_team, 3, team_id, team_type, - build_int_cst (integer_type_node, 0)); + integer_zero_node); gfc_add_expr_to_block (&se.pre, tmp); gfc_add_block_to_block (&se.pre, &argse1.post); gfc_add_block_to_block (&se.pre, &argse2.post); @@ -795,7 +795,7 @@ gfc_trans_change_team (gfc_code *code) tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_change_team, 2, team_type, - build_int_cst (integer_type_node, 0)); + integer_zero_node); gfc_add_expr_to_block (&argse.pre, tmp); gfc_add_block_to_block (&argse.pre, &argse.post); return gfc_finish_block (&argse.pre); @@ -846,7 +846,7 @@ gfc_trans_sync_team (gfc_code *code) tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_sync_team, 2, team_type, - build_int_cst (integer_type_node, 0)); + integer_zero_node); gfc_add_expr_to_block (&argse.pre, tmp); gfc_add_block_to_block (&argse.pre, &argse.post); return gfc_finish_block (&argse.pre); @@ -1357,7 +1357,7 @@ gfc_trans_sync (gfc_code *code, gfc_exec_op type) } else if (code->expr1->rank == 0) { - len = build_int_cst (integer_type_node, 1); + len = integer_one_node; images = gfc_build_addr_expr (NULL_TREE, images); } else diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc index 1a03a4a91d46..7f50b16aee9d 100644 --- a/gcc/fortran/trans.cc +++ b/gcc/fortran/trans.cc @@ -900,7 +900,7 @@ gfc_allocate_using_caf_lib (stmtblock_t * block, tree pointer, tree size, { gcc_assert(errlen == NULL_TREE); errmsg = null_pointer_node; - errlen = build_int_cst (integer_type_node, 0); + errlen = integer_zero_node; } size = fold_convert (size_type_node, size); @@ -1903,7 +1903,7 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, if (descr) cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node, gfc_conv_descriptor_version (descr), - build_int_cst (integer_type_node, 1)); + integer_one_node); else cond = gfc_omp_call_is_alloc (pointer); omp_tmp = builtin_decl_explicit (BUILT_IN_GOMP_FREE); @@ -1917,7 +1917,7 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, 0)); if (flag_openmp_allocators && descr) gfc_add_modify (&non_null, gfc_conv_descriptor_version (descr), - build_zero_cst (integer_type_node)); + integer_zero_node); if (status != NULL_TREE && !integer_zerop (status)) { @@ -1946,7 +1946,7 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, { gcc_assert (errlen == NULL_TREE); errmsg = null_pointer_node; - errlen = build_zero_cst (integer_type_node); + errlen = integer_zero_node; } else { diff --git a/gcc/objc/objc-next-runtime-abi-02.cc b/gcc/objc/objc-next-runtime-abi-02.cc index b3de6d789a5b..cdf559b9bea8 100644 --- a/gcc/objc/objc-next-runtime-abi-02.cc +++ b/gcc/objc/objc-next-runtime-abi-02.cc @@ -3244,7 +3244,7 @@ build_v2_class_ro_t_initializer (tree type, tree name, explicitly declare the alignment padding. */ /* reserved, pads alignment. */ CONSTRUCTOR_APPEND_ELT (initlist, NULL_TREE, - build_int_cst (integer_type_node, 0)); + integer_zero_node); /* ivarLayout */ unsigned_char_star = build_pointer_type (unsigned_char_type_node); From 47cdd86cd5d3d3fd26f9764020c4502ea8eca27b Mon Sep 17 00:00:00 2001 From: Yury Khrustalev <yury.khrustalev@arm.com> Date: Wed, 20 Mar 2024 11:21:04 +0000 Subject: [PATCH 159/551] aarch64: Sync aarch64-sys-regs.def with Binutils This patch updates `aarch64-sys-regs.def', bringing it into sync with the Binutils source. gcc/ChangeLog: * config/aarch64/aarch64-sys-regs.def: Copy from Binutils. --- gcc/config/aarch64/aarch64-sys-regs.def | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/config/aarch64/aarch64-sys-regs.def b/gcc/config/aarch64/aarch64-sys-regs.def index 6a948171d6e4..8b65673a5d60 100644 --- a/gcc/config/aarch64/aarch64-sys-regs.def +++ b/gcc/config/aarch64/aarch64-sys-regs.def @@ -521,6 +521,7 @@ SYSREG ("id_aa64isar0_el1", CPENC (3,0,0,6,0), F_REG_READ, AARCH64_NO_FEATURES) SYSREG ("id_aa64isar1_el1", CPENC (3,0,0,6,1), F_REG_READ, AARCH64_NO_FEATURES) SYSREG ("id_aa64isar2_el1", CPENC (3,0,0,6,2), F_REG_READ, AARCH64_NO_FEATURES) + SYSREG ("id_aa64isar3_el1", CPENC (3,0,0,6,3), F_REG_READ, AARCH64_NO_FEATURES) SYSREG ("id_aa64mmfr0_el1", CPENC (3,0,0,7,0), F_REG_READ, AARCH64_NO_FEATURES) SYSREG ("id_aa64mmfr1_el1", CPENC (3,0,0,7,1), F_REG_READ, AARCH64_NO_FEATURES) SYSREG ("id_aa64mmfr2_el1", CPENC (3,0,0,7,2), F_REG_READ, AARCH64_NO_FEATURES) From 68eca9b6aefeb40bdd4c55e42528cb32d1e2935b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 16:59:08 +0100 Subject: [PATCH 160/551] csky: Fix up csky_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, csky seems to be affected too. Just visually checked differences in c23-stdarg-9.c assembly in a cross without/with the patch, committed to trunk. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/csky/csky.cc (csky_setup_incoming_varargs): Only skip csky_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/csky/csky.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/csky/csky.cc b/gcc/config/csky/csky.cc index e33ca8cf4346..72619ea30312 100644 --- a/gcc/config/csky/csky.cc +++ b/gcc/config/csky/csky.cc @@ -2090,7 +2090,8 @@ csky_setup_incoming_varargs (cumulative_args_t pcum_v, cfun->machine->uses_anonymous_args = 1; local_cum = *pcum; - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) csky_function_arg_advance (local_cum_v, arg); regs_to_push = CSKY_NPARM_REGS - local_cum.reg; if (regs_to_push) From b089ceb365e5132e4b2a8acfb18127bbee2d0d00 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 16:59:21 +0100 Subject: [PATCH 161/551] epiphany: Fix up epiphany_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, epiphany seems to be affected too. Just visually checked differences in c23-stdarg-9.c assembly in a cross without/with the patch, committed to trunk. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/epiphany/epiphany.cc (epiphany_setup_incoming_varargs): Only skip function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/epiphany/epiphany.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/epiphany/epiphany.cc b/gcc/config/epiphany/epiphany.cc index d6c057f1685b..79254c202542 100644 --- a/gcc/config/epiphany/epiphany.cc +++ b/gcc/config/epiphany/epiphany.cc @@ -728,7 +728,8 @@ epiphany_setup_incoming_varargs (cumulative_args_t cum, gcc_assert (arg.mode != BLKmode); next_cum = *get_cumulative_args (cum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) next_cum = (ROUND_ADVANCE_CUM (next_cum, arg.mode, arg.type) + ROUND_ADVANCE_ARG (arg.mode, arg.type)); first_anon_arg = next_cum; From 22612a8b5e0853c530f98fc7c0d6f6812b36518d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 16:59:32 +0100 Subject: [PATCH 162/551] ft32: Fix up ft32_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, ft32 seems to be affected too. Just visually checked differences in c23-stdarg-9.c assembly in a cross without/with the patch, committed to trunk. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/ft32/ft32.cc (ft32_setup_incoming_varargs): Only skip function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/ft32/ft32.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcc/config/ft32/ft32.cc b/gcc/config/ft32/ft32.cc index 36d3dcfd7b52..3c6e5fb1f6ca 100644 --- a/gcc/config/ft32/ft32.cc +++ b/gcc/config/ft32/ft32.cc @@ -635,9 +635,10 @@ ft32_setup_incoming_varargs (cumulative_args_t cum_v, { CUMULATIVE_ARGS *cum = get_cumulative_args (cum_v); int named_size = 0; - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) - named_size = - GET_MODE_SIZE (SImode) * (*cum - FT32_R0) + GET_MODE_SIZE (arg.mode); + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) + named_size + = GET_MODE_SIZE (SImode) * (*cum - FT32_R0) + GET_MODE_SIZE (arg.mode); if (named_size < 24) *pretend_size = 24 - named_size; From 921eb457c5b105bcd84eaeac22067e9b03d5b9d1 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 16:59:43 +0100 Subject: [PATCH 163/551] m32r: Fix up m32r_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, m32r seems to be affected too. Just visually checked differences in c23-stdarg-9.c assembly in a cross without/with the patch, committed to trunk. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/m32r/m32r.cc (m32r_setup_incoming_varargs): Only skip function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/m32r/m32r.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/m32r/m32r.cc b/gcc/config/m32r/m32r.cc index 65f74db95236..c45a7d616e86 100644 --- a/gcc/config/m32r/m32r.cc +++ b/gcc/config/m32r/m32r.cc @@ -1287,7 +1287,8 @@ m32r_setup_incoming_varargs (cumulative_args_t cum, if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) gcc_assert (arg.mode != BLKmode); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) first_anon_arg = (ROUND_ADVANCE_CUM (*get_cumulative_args (cum), arg.mode, arg.type) + ROUND_ADVANCE_ARG (arg.mode, arg.type)); From b22a9c7dd29a14a217de8b86d3e100e4e8b7785e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 16:59:56 +0100 Subject: [PATCH 164/551] nds32: Fix up nds32_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, nds32 seems to be affected too. Just visually checked differences in c23-stdarg-9.c assembly in a cross without/with the patch, committed to trunk. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/nds32/nds32.cc (nds32_setup_incoming_varargs): Only skip function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/nds32/nds32.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/nds32/nds32.cc b/gcc/config/nds32/nds32.cc index 463df8604e08..f5ea1daad404 100644 --- a/gcc/config/nds32/nds32.cc +++ b/gcc/config/nds32/nds32.cc @@ -2374,7 +2374,8 @@ nds32_setup_incoming_varargs (cumulative_args_t ca, for varargs. */ total_args_regs = NDS32_MAX_GPR_REGS_FOR_ARGS + NDS32_GPR_ARG_FIRST_REGNUM; - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) num_of_used_regs = NDS32_AVAILABLE_REGNUM_FOR_GPR_ARG (cum->gpr_offset, arg.mode, arg.type) + NDS32_NEED_N_REGS_FOR_ARG (arg.mode, arg.type); From 4c9d2810908004b7e04599b426aca5ee1bd16735 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 17:00:08 +0100 Subject: [PATCH 165/551] nios2: Fix up nios2_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, nios2 seems to be affected too. Just visually checked differences in c23-stdarg-9.c assembly in a cross without/with the patch, committed to trunk. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/nios2/nios2.cc (nios2_setup_incoming_varargs): Only skip nios2_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/nios2/nios2.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/nios2/nios2.cc b/gcc/config/nios2/nios2.cc index fba13c34dae2..a981e5095ef0 100644 --- a/gcc/config/nios2/nios2.cc +++ b/gcc/config/nios2/nios2.cc @@ -3525,7 +3525,8 @@ nios2_setup_incoming_varargs (cumulative_args_t cum_v, cfun->machine->uses_anonymous_args = 1; local_cum = *cum; - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) nios2_function_arg_advance (local_cum_v, arg); regs_to_push = NUM_ARG_REGS - local_cum.regs_used; From b05ee9b69e4644cefbb94a768c4ea302fd44b934 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 20 Mar 2024 17:00:51 +0100 Subject: [PATCH 166/551] visium: Fix up visium_setup_incoming_varargs [PR114175] Like for x86-64, alpha or rs6000, visium seems to be affected too. Just visually checked differences in c23-stdarg-9.c assembly in a cross without/with the patch, committed to trunk. 2024-03-20 Jakub Jelinek <jakub@redhat.com> PR target/114175 * config/visium/visium.cc (visium_setup_incoming_varargs): Only skip TARGET_FUNCTION_ARG_ADVANCE for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/visium/visium.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/visium/visium.cc b/gcc/config/visium/visium.cc index fd63f08c14e2..0368a0f40de2 100644 --- a/gcc/config/visium/visium.cc +++ b/gcc/config/visium/visium.cc @@ -1482,7 +1482,8 @@ visium_setup_incoming_varargs (cumulative_args_t pcum_v, /* The caller has advanced ARGS_SO_FAR up to, but not beyond, the last named argument. Advance a local copy of ARGS_SO_FAR past the last "real" named argument, to find out how many registers are left over. */ - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) TARGET_FUNCTION_ARG_ADVANCE (local_args_so_far, arg); /* Find how many registers we need to save. */ From d2b25083a41347ce3d2875fcd932dcb08756058a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= <fdumont@gcc.gnu.org> Date: Wed, 20 Mar 2024 06:47:20 +0100 Subject: [PATCH 167/551] libstdc++: [_GLIBCXX_DEBUG] Define __cpp_lib_null_iterators _GLIBCXX_DEBUG has now fully N3344 compliant iterator checks, we can define __cpp_lib_null_iterators macros like the normal mode. libstdc++-v3/ChangeLog: * include/bits/version.def (null_iterators): Remove extra_cond. * include/bits/version.h: Regenerate. --- libstdc++-v3/include/bits/version.def | 1 - libstdc++-v3/include/bits/version.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index be5af18e818c..26e62c6a9b2a 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -209,7 +209,6 @@ ftms = { values = { v = 201304; cxxmin = 14; - extra_cond = "!defined(_GLIBCXX_DEBUG)"; }; }; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 9107b45a4841..23c8c09ab4bf 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -214,7 +214,7 @@ #undef __glibcxx_want_make_reverse_iterator #if !defined(__cpp_lib_null_iterators) -# if (__cplusplus >= 201402L) && (!defined(_GLIBCXX_DEBUG)) +# if (__cplusplus >= 201402L) # define __glibcxx_null_iterators 201304L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_null_iterators) # define __cpp_lib_null_iterators 201304L From b7c4ae5ace82b81dafffbc50e8026adfa3cc76e7 Mon Sep 17 00:00:00 2001 From: Flavio Cruz <flaviocruz@gmail.com> Date: Wed, 28 Feb 2024 22:59:09 -0500 Subject: [PATCH 168/551] Hurd x86_64: add unwind support for signal trampoline code Tested with some simple toy examples where an exception is thrown in the signal handler. libgcc/ChangeLog: * config/i386/gnu-unwind.h: Support unwinding x86_64 signal frames. Signed-off-by: Flavio Cruz <flaviocruz@gmail.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> --- libgcc/config/i386/gnu-unwind.h | 97 ++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 3 deletions(-) diff --git a/libgcc/config/i386/gnu-unwind.h b/libgcc/config/i386/gnu-unwind.h index 0751b5593d45..02b060ab4a57 100644 --- a/libgcc/config/i386/gnu-unwind.h +++ b/libgcc/config/i386/gnu-unwind.h @@ -32,9 +32,100 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #ifdef __x86_64__ -/* - * TODO: support for 64 bits needs to be implemented. - */ +#define MD_FALLBACK_FRAME_STATE_FOR x86_gnu_fallback_frame_state + +static _Unwind_Reason_Code +x86_gnu_fallback_frame_state +(struct _Unwind_Context *context, _Unwind_FrameState *fs) +{ + static const unsigned char gnu_sigtramp_code[] = + { + /* rpc_wait_trampoline: */ + 0x48, 0xc7, 0xc0, 0xe7, 0xff, 0xff, 0xff, /* mov $-25,%rax */ + 0x0f, 0x05, /* syscall */ + 0x49, 0x89, 0x04, 0x24, /* mov %rax,(%r12) */ + 0x48, 0x89, 0xdc, /* mov %rbx,%rsp */ + + /* trampoline: */ + 0x5f, /* pop %rdi */ + 0x5e, /* pop %rsi */ + 0x5a, /* pop %rdx */ + 0x48, 0x83, 0xc4, 0x08, /* add $0x8,%rsp */ + 0x41, 0xff, 0xd5, /* call *%r13 */ + + /* RA HERE */ + 0x48, 0x8b, 0x7c, 0x24, 0x10, /* mov 0x10(%rsp),%rdi */ + 0xc3, /* ret */ + + /* firewall: */ + 0xf4, /* hlt */ + }; + + const size_t gnu_sigtramp_len = sizeof gnu_sigtramp_code; + const size_t gnu_sigtramp_tail = 7; /* length of tail after RA */ + + struct stack_contents { + void *sigreturn_addr; + void *sigreturn_returns_here; + struct sigcontext *return_scp; + } *stack_contents; + struct sigcontext *scp; + unsigned long usp; + + unsigned char *adjusted_pc = (unsigned char*)(context->ra) + + gnu_sigtramp_tail - gnu_sigtramp_len; + if (memcmp (adjusted_pc, gnu_sigtramp_code, gnu_sigtramp_len)) + return _URC_END_OF_STACK; + + stack_contents = context->cfa; + + scp = stack_contents->return_scp; + usp = scp->sc_ursp; + + fs->regs.reg[0].loc.offset = (unsigned long)&scp->sc_rax - usp; + fs->regs.reg[1].loc.offset = (unsigned long)&scp->sc_rdx - usp; + fs->regs.reg[2].loc.offset = (unsigned long)&scp->sc_rcx - usp; + fs->regs.reg[3].loc.offset = (unsigned long)&scp->sc_rbx - usp; + fs->regs.reg[4].loc.offset = (unsigned long)&scp->sc_rsi - usp; + fs->regs.reg[5].loc.offset = (unsigned long)&scp->sc_rdi - usp; + fs->regs.reg[6].loc.offset = (unsigned long)&scp->sc_rbp - usp; + fs->regs.reg[8].loc.offset = (unsigned long)&scp->sc_r8 - usp; + fs->regs.reg[9].loc.offset = (unsigned long)&scp->sc_r9 - usp; + fs->regs.reg[10].loc.offset = (unsigned long)&scp->sc_r10 - usp; + fs->regs.reg[11].loc.offset = (unsigned long)&scp->sc_r11 - usp; + fs->regs.reg[12].loc.offset = (unsigned long)&scp->sc_r12 - usp; + fs->regs.reg[13].loc.offset = (unsigned long)&scp->sc_r13 - usp; + fs->regs.reg[14].loc.offset = (unsigned long)&scp->sc_r14 - usp; + fs->regs.reg[15].loc.offset = (unsigned long)&scp->sc_r15 - usp; + fs->regs.reg[16].loc.offset = (unsigned long)&scp->sc_rip - usp; + + /* Register 7 is rsp */ + fs->regs.cfa_how = CFA_REG_OFFSET; + fs->regs.cfa_reg = 7; + fs->regs.cfa_offset = usp - (unsigned long) context->cfa; + + fs->regs.how[0] = REG_SAVED_OFFSET; + fs->regs.how[1] = REG_SAVED_OFFSET; + fs->regs.how[2] = REG_SAVED_OFFSET; + fs->regs.how[3] = REG_SAVED_OFFSET; + fs->regs.how[4] = REG_SAVED_OFFSET; + fs->regs.how[5] = REG_SAVED_OFFSET; + fs->regs.how[6] = REG_SAVED_OFFSET; + fs->regs.how[8] = REG_SAVED_OFFSET; + fs->regs.how[9] = REG_SAVED_OFFSET; + fs->regs.how[10] = REG_SAVED_OFFSET; + fs->regs.how[11] = REG_SAVED_OFFSET; + fs->regs.how[12] = REG_SAVED_OFFSET; + fs->regs.how[13] = REG_SAVED_OFFSET; + fs->regs.how[14] = REG_SAVED_OFFSET; + fs->regs.how[15] = REG_SAVED_OFFSET; + fs->regs.how[16] = REG_SAVED_OFFSET; + + fs->retaddr_column = 16; + fs->signal_frame = 1; + + return _URC_NO_REASON; +} #else /* ifdef __x86_64__ */ From 806621dc14f893476dd6f2a9ae5cf773f3b0951b Mon Sep 17 00:00:00 2001 From: Xi Ruoyao <xry111@xry111.site> Date: Thu, 21 Mar 2024 04:01:17 +0800 Subject: [PATCH 169/551] LoongArch: Fix a typo [PR 114407] gcc/ChangeLog: PR target/114407 * config/loongarch/loongarch-opts.cc (loongarch_config_target): Fix typo in diagnostic message, enabing -> enabling. --- gcc/config/loongarch/loongarch-opts.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc index 7eeac43ed2f2..627f9148adf3 100644 --- a/gcc/config/loongarch/loongarch-opts.cc +++ b/gcc/config/loongarch/loongarch-opts.cc @@ -362,7 +362,7 @@ loongarch_config_target (struct loongarch_target *target, gcc_assert (constrained.simd); inform (UNKNOWN_LOCATION, - "enabing %qs promotes %<%s%s%> to %<%s%s%>", + "enabling %qs promotes %<%s%s%> to %<%s%s%>", loongarch_isa_ext_strings[t.isa.simd], OPTSTR_ISA_EXT_FPU, loongarch_isa_ext_strings[t.isa.fpu], OPTSTR_ISA_EXT_FPU, loongarch_isa_ext_strings[ISA_EXT_FPU64]); From 8e913b5c0c998b2ae9497a6ff6bdf475c136cd97 Mon Sep 17 00:00:00 2001 From: Cupertino Miranda <cupertino.miranda@oracle.com> Date: Tue, 30 Jan 2024 15:55:18 +0000 Subject: [PATCH 170/551] bpf: Fix CO-RE field expression builtins This patch corrects bugs within the CO-RE builtin field expression related builtins. The following bugs were identified and corrected based on the expected results of bpf-next selftests testsuite. It addresses the following problems: - Expressions with pointer dereferencing now point to the BTF structure type, instead of the structure pointer type. - Pointer addition to structure root is now identified and constructed in CO-RE relocations as if it is an array access. For example, "&(s+2)->b" generates "2:1" as an access string where "2" is refering to the access for "s+2". gcc/ChangeLog: * config/bpf/core-builtins.cc (core_field_info): Add support for POINTER_PLUS_EXPR in the root of the field expression. (bpf_core_get_index): Likewise. (pack_field_expr): Make the BTF type to point to the structure related node, instead of its pointer type. (make_core_safe_access_index): Correct to new code. gcc/testsuite/ChangeLog: * gcc.target/bpf/core-attr-5.c: Correct. * gcc.target/bpf/core-attr-6.c: Likewise. * gcc.target/bpf/core-attr-struct-as-array.c: Add test case for pointer arithmetics as array access use case. --- gcc/config/bpf/core-builtins.cc | 54 +++++++++++++++---- gcc/testsuite/gcc.target/bpf/core-attr-5.c | 4 +- gcc/testsuite/gcc.target/bpf/core-attr-6.c | 4 +- .../bpf/core-attr-struct-as-array.c | 35 ++++++++++++ 4 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/gcc.target/bpf/core-attr-struct-as-array.c diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc index 8d8c54c1fb3d..4256fea15e49 100644 --- a/gcc/config/bpf/core-builtins.cc +++ b/gcc/config/bpf/core-builtins.cc @@ -388,8 +388,8 @@ core_field_info (tree src, enum btf_core_reloc_kind kind) src = root_for_core_field_info (src); - get_inner_reference (src, &bitsize, &bitpos, &var_off, &mode, &unsignedp, - &reversep, &volatilep); + tree root = get_inner_reference (src, &bitsize, &bitpos, &var_off, &mode, + &unsignedp, &reversep, &volatilep); /* Note: Use DECL_BIT_FIELD_TYPE rather than DECL_BIT_FIELD here, because it remembers whether the field in question was originally declared as a @@ -414,6 +414,23 @@ core_field_info (tree src, enum btf_core_reloc_kind kind) { case BPF_RELO_FIELD_BYTE_OFFSET: { + result = 0; + if (var_off == NULL_TREE + && TREE_CODE (root) == INDIRECT_REF + && TREE_CODE (TREE_OPERAND (root, 0)) == POINTER_PLUS_EXPR) + { + tree node = TREE_OPERAND (root, 0); + tree offset = TREE_OPERAND (node, 1); + tree type = TREE_TYPE (TREE_OPERAND (node, 0)); + type = TREE_TYPE (type); + + gcc_assert (TREE_CODE (offset) == INTEGER_CST && tree_fits_shwi_p (offset) + && COMPLETE_TYPE_P (type) && tree_fits_shwi_p (TYPE_SIZE (type))); + + HOST_WIDE_INT offset_i = tree_to_shwi (offset); + result += offset_i; + } + type = unsigned_type_node; if (var_off != NULL_TREE) { @@ -422,9 +439,9 @@ core_field_info (tree src, enum btf_core_reloc_kind kind) } if (bitfieldp) - result = start_bitpos / 8; + result += start_bitpos / 8; else - result = bitpos / 8; + result += bitpos / 8; } break; @@ -552,6 +569,7 @@ bpf_core_get_index (const tree node, bool *valid) { tree offset = TREE_OPERAND (node, 1); tree type = TREE_TYPE (TREE_OPERAND (node, 0)); + type = TREE_TYPE (type); if (TREE_CODE (offset) == INTEGER_CST && tree_fits_shwi_p (offset) && COMPLETE_TYPE_P (type) && tree_fits_shwi_p (TYPE_SIZE (type))) @@ -627,14 +645,18 @@ compute_field_expr (tree node, unsigned int *accessors, switch (TREE_CODE (node)) { - case ADDR_EXPR: - return 0; case INDIRECT_REF: - accessors[0] = 0; - return 1; - case POINTER_PLUS_EXPR: - accessors[0] = bpf_core_get_index (node, valid); - return 1; + if (TREE_CODE (node = TREE_OPERAND (node, 0)) == POINTER_PLUS_EXPR) + { + accessors[0] = bpf_core_get_index (node, valid); + *access_node = TREE_OPERAND (node, 0); + return 1; + } + else + { + accessors[0] = 0; + return 1; + } case COMPONENT_REF: n = compute_field_expr (TREE_OPERAND (node, 0), accessors, valid, @@ -660,6 +682,7 @@ compute_field_expr (tree node, unsigned int *accessors, access_node, false); return n; + case ADDR_EXPR: case CALL_EXPR: case SSA_NAME: case VAR_DECL: @@ -688,6 +711,9 @@ pack_field_expr (tree *args, tree access_node = NULL_TREE; tree type = NULL_TREE; + if (TREE_CODE (root) == ADDR_EXPR) + root = TREE_OPERAND (root, 0); + ret.reloc_decision = REPLACE_CREATE_RELOCATION; unsigned int accessors[100]; @@ -695,6 +721,8 @@ pack_field_expr (tree *args, compute_field_expr (root, accessors, &valid, &access_node, false); type = TREE_TYPE (access_node); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); if (valid == true) { @@ -1351,6 +1379,8 @@ make_core_safe_access_index (tree expr, bool *changed, bool entry = true) if (base == NULL_TREE || base == expr) return expr; + base = expr; + tree ret = NULL_TREE; int n; bool valid = true; @@ -1365,6 +1395,8 @@ make_core_safe_access_index (tree expr, bool *changed, bool entry = true) { if (TREE_CODE (access_node) == INDIRECT_REF) base = TREE_OPERAND (access_node, 0); + else + base = access_node; bool local_changed = false; ret = make_core_safe_access_index (base, &local_changed, false); diff --git a/gcc/testsuite/gcc.target/bpf/core-attr-5.c b/gcc/testsuite/gcc.target/bpf/core-attr-5.c index e71901d0d4d1..90734dab3a29 100644 --- a/gcc/testsuite/gcc.target/bpf/core-attr-5.c +++ b/gcc/testsuite/gcc.target/bpf/core-attr-5.c @@ -63,5 +63,5 @@ func (struct T *t, int i) /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:1:2\"\\)" 1 } } */ /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:1:1:1\"\\)" 1 } } */ /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:0\"\\)" 1 } } */ -/* { dg-final { scan-assembler-times "bpfcr_type \\(struct T \\*\\)" 4 } } */ -/* { dg-final { scan-assembler-times "bpfcr_type \\(struct U \\*\\)" 4 { xfail *-*-* } } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct T\\)" 4 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct U\\)" 4 { xfail *-*-* } } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-attr-6.c b/gcc/testsuite/gcc.target/bpf/core-attr-6.c index 34a4c367e528..d0c5371b86e0 100644 --- a/gcc/testsuite/gcc.target/bpf/core-attr-6.c +++ b/gcc/testsuite/gcc.target/bpf/core-attr-6.c @@ -45,6 +45,6 @@ func (struct T *t, int i) /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:3\"\\)" 2 } } */ /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:1:2\"\\)" 1 } } */ /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:0\"\\)" 1 } } */ -/* { dg-final { scan-assembler-times "bpfcr_type \\(struct T \\*\\)" 3 } } */ -/* { dg-final { scan-assembler-times "bpfcr_type \\(struct U \\*\\)" 2 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct T\\)" 3 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type \\(struct U\\)" 2 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-attr-struct-as-array.c b/gcc/testsuite/gcc.target/bpf/core-attr-struct-as-array.c new file mode 100644 index 000000000000..3f6eb9cb97f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/core-attr-struct-as-array.c @@ -0,0 +1,35 @@ +/* Basic test for struct __attribute__((preserve_access_index)) + for BPF CO-RE support. */ + +/* { dg-do compile } */ +/* { dg-options "-O0 -dA -gbtf -mco-re" } */ + +struct S { + int a; + int b; + int c; +} __attribute__((preserve_access_index)); + +void +func (struct S * s) +{ + /* This test is marked as XFAIL since for the time being the CO-RE + implementation is not able to disambiguate between a point manipulation + and a CO-RE access when using preserve_access_index attribute. The + current implemetantion is incorrect if we consider that STRUCT S might + have different size within the kernel. + This example demonstrates how the implementation of preserve_access_index + as an attribute of the type is flagile. */ + + /* 2:2 */ + int *x = &((s+2)->c); + *x = 4; + + /* 2:1 */ + int *y = __builtin_preserve_access_index (&((s+2)->b)); + *y = 2; +} + +/* { dg-final { scan-assembler-times "ascii \"2:2.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 { xfail *-*-* } } } */ +/* { dg-final { scan-assembler-times "ascii \"2:1.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ +/* { dg-final { scan-assembler-times "bpfcr_type" 2 } } */ From 624d025f62fdbc969cca08fdb1ac77246b8535a5 Mon Sep 17 00:00:00 2001 From: Cupertino Miranda <cupertino.miranda@oracle.com> Date: Tue, 5 Mar 2024 11:53:56 +0000 Subject: [PATCH 171/551] bpf: Fix access string default for CO-RE type based relocations Although part of all CO-RE relocation data, type based relocations do not require an access string. Initial implementation defined it as an empty string. On the other hand, libbpf when parsing the CO-RE relocations verifies that those strings would contain "0", otherwise reports an error. This patch makes GCC compliant with libbpf expectations. gcc/Changelog: * config/bpf/btfext-out.cc (cpf_core_reloc_add): Correct for new code. Add assert to validate the string is set. * config/bpf/core-builtins.cc (cr_final): Make string struct field as const. (process_enum_value): Correct for field type change. (process_type): Set access string to "0". gcc/testsuite/ChangeLog: * gcc.target/bpf/core-builtin-type-based.c: Correct. * gcc.target/bpf/core-builtin-type-id.c: Correct. --- gcc/config/bpf/btfext-out.cc | 5 +++-- gcc/config/bpf/core-builtins.cc | 10 ++++++---- gcc/testsuite/gcc.target/bpf/core-builtin-type-based.c | 1 + gcc/testsuite/gcc.target/bpf/core-builtin-type-id.c | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/gcc/config/bpf/btfext-out.cc b/gcc/config/bpf/btfext-out.cc index 00d2501a976b..7ec438fd1d10 100644 --- a/gcc/config/bpf/btfext-out.cc +++ b/gcc/config/bpf/btfext-out.cc @@ -299,8 +299,9 @@ bpf_core_reloc_add (const tree type, const char * section_name, /* Buffer the access string in the auxiliary strtab. */ bpfcr->bpfcr_astr_off = 0; - if (accessor != NULL) - bpfcr->bpfcr_astr_off = btf_ext_add_string (accessor); + gcc_assert (accessor != NULL); + bpfcr->bpfcr_astr_off = btf_ext_add_string (accessor); + bpfcr->bpfcr_type = get_btf_id (ctf_lookup_tree_type (ctfc, type)); bpfcr->bpfcr_insn_label = label; bpfcr->bpfcr_kind = kind; diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc index 4256fea15e49..70b14e48e6e5 100644 --- a/gcc/config/bpf/core-builtins.cc +++ b/gcc/config/bpf/core-builtins.cc @@ -205,7 +205,7 @@ struct cr_local /* Core Relocation Final data */ struct cr_final { - char *str; + const char *str; tree type; enum btf_core_reloc_kind kind; }; @@ -868,8 +868,10 @@ process_enum_value (struct cr_builtins *data) { if (TREE_VALUE (l) == expr) { - ret.str = (char *) ggc_alloc_atomic ((index / 10) + 1); - sprintf (ret.str, "%d", index); + char *tmp = (char *) ggc_alloc_atomic ((index / 10) + 1); + sprintf (tmp, "%d", index); + ret.str = (const char *) tmp; + break; } index++; @@ -987,7 +989,7 @@ process_type (struct cr_builtins *data) || data->kind == BPF_RELO_TYPE_MATCHES); struct cr_final ret; - ret.str = NULL; + ret.str = ggc_strdup ("0"); ret.type = data->type; ret.kind = data->kind; diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-type-based.c b/gcc/testsuite/gcc.target/bpf/core-builtin-type-based.c index 74a8d5a14d9d..9d818133c084 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-type-based.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-type-based.c @@ -56,3 +56,4 @@ int foo(void *data) /* { dg-final { scan-assembler-times "0x8\[\t \]+\[^\n\]*bpfcr_kind" 13 } } BPF_TYPE_EXISTS */ /* { dg-final { scan-assembler-times "0x9\[\t \]+\[^\n\]*bpfcr_kind" 11 } } BPF_TYPE_SIZE */ /* { dg-final { scan-assembler-times "0xc\[\t \]+\[^\n\]*bpfcr_kind" 13 } } BPF_TYPE_MATCHES */ +/* { dg-final { scan-assembler-times "bpfcr_astr_off \[(\"\]+0\[(\"\]+" 37 } } */ diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-type-id.c b/gcc/testsuite/gcc.target/bpf/core-builtin-type-id.c index 4b23288eac08..9576b91bc940 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-type-id.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-type-id.c @@ -38,3 +38,4 @@ int foo(void *data) /* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bpfcr_type" 0 { xfail *-*-* } } } */ /* { dg-final { scan-assembler-times "0x6\[\t \]+\[^\n\]*bpfcr_kind" 13 } } BPF_TYPE_ID_LOCAL */ /* { dg-final { scan-assembler-times "0x7\[\t \]+\[^\n\]*bpfcr_kind" 7 } } BPF_TYPE_ID_TARGET */ +/* { dg-final { scan-assembler-times "bpfcr_astr_off \[(\"\]+0\[(\"\]+" 20 } } */ From f10c18df9c02dc518360426c021971838e0012d2 Mon Sep 17 00:00:00 2001 From: Cupertino Miranda <cupertino.miranda@oracle.com> Date: Fri, 8 Mar 2024 13:33:42 +0000 Subject: [PATCH 172/551] bpf: Corrected index computation when present with unnamed struct fields Any unnamed non-struct-or-union field is not a member of the BTF_KIND_STRUCT. For that reason, CO-RE access strings indexes should take that in consideration. This patch adds a condition to the incrementer that computes the index for the field access. gcc/ChangeLog: * config/bpf/core-builtins.cc (bpf_core_get_index): Check if field contains a DECL_NAME. gcc/testsuite/ChangeLog: * gcc.target/bpf/core-builtin-fieldinfo-offset-1.c: Add testcase for unnamed fields. --- gcc/config/bpf/core-builtins.cc | 6 +++++- .../gcc.target/bpf/core-builtin-fieldinfo-offset-1.c | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc index 70b14e48e6e5..8333ad81d0e0 100644 --- a/gcc/config/bpf/core-builtins.cc +++ b/gcc/config/bpf/core-builtins.cc @@ -553,7 +553,11 @@ bpf_core_get_index (const tree node, bool *valid) { if (l == node) return i; - i++; + /* Skip unnamed padding, not represented by BTF. */ + if (DECL_NAME(l) != NULL_TREE + || TREE_CODE (TREE_TYPE (l)) == UNION_TYPE + || TREE_CODE (TREE_TYPE (l)) == RECORD_TYPE) + i++; } } else if (code == ARRAY_REF || code == ARRAY_RANGE_REF || code == MEM_REF) diff --git a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c index 27654205287d..8b1d8b012a2a 100644 --- a/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c +++ b/gcc/testsuite/gcc.target/bpf/core-builtin-fieldinfo-offset-1.c @@ -14,6 +14,9 @@ struct T { struct S s[2]; char c; char d; + int a: 1; + int:31; + int f; }; enum { @@ -38,7 +41,9 @@ unsigned int foo (struct T *t) unsigned e1 = __builtin_preserve_field_info (bar()->d, FIELD_BYTE_OFFSET); unsigned e2 = __builtin_preserve_field_info (bar()->s[1].a4, FIELD_BYTE_OFFSET); - return s0a1 + s0a4 + s0x + s1a1 + s1a4 + s1x + c + d + e1 + e2; + unsigned f1 = __builtin_preserve_field_info (t->f, FIELD_BYTE_OFFSET); + + return s0a1 + s0a4 + s0x + s1a1 + s1a4 + s1x + c + d + e1 + e2 + f1; } /* { dg-final { scan-assembler-times "\[\t \]mov\[\t \]%r\[0-9\],4" 2 } } */ @@ -65,5 +70,6 @@ unsigned int foo (struct T *t) /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:1:1:4\"\\)" 1 } } */ /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:2\"\\)" 1 } } */ /* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:3\"\\)" 2 } } */ +/* { dg-final { scan-assembler-times "bpfcr_astr_off \\(\"0:5\"\\)" 1 } } */ -/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bpfcr_kind" 10 } } */ +/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bpfcr_kind" 11 } } */ From 9093f275e0a3430e4517e782e7f5419d403113f7 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 20 Mar 2024 18:33:11 -0400 Subject: [PATCH 173/551] analyzer: fix -Wanalyzer-deref-before-check false positive seen in loop header macro [PR109251] gcc/analyzer/ChangeLog: PR analyzer/109251 * sm-malloc.cc (deref_before_check::emit): Reject cases where the check is in a loop header within a macro expansion. (deref_before_check::loop_header_p): New. gcc/testsuite/ChangeLog: PR analyzer/109251 * c-c++-common/analyzer/deref-before-check-pr109251-1.c: New test. * c-c++-common/analyzer/deref-before-check-pr109251-2.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/sm-malloc.cc | 30 ++++++++++ .../analyzer/deref-before-check-pr109251-1.c | 60 +++++++++++++++++++ .../analyzer/deref-before-check-pr109251-2.c | 37 ++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-1.c create mode 100644 gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-2.c diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc index a518816b2b8b..4e11d6dfc630 100644 --- a/gcc/analyzer/sm-malloc.cc +++ b/gcc/analyzer/sm-malloc.cc @@ -1563,6 +1563,21 @@ class deref_before_check : public malloc_diagnostic if (linemap_location_from_macro_definition_p (line_table, check_loc)) return false; + /* Reject warning if the check is in a loop header within a + macro expansion. This rejects cases like: + | deref of x; + | [...snip...] + | FOR_EACH(x) { + | [...snip...] + | } + where the FOR_EACH macro tests for non-nullness of x, since + the user is hoping to encapsulate the details of iteration + in the macro, and the extra check on the first iteration + would just be noise if we reported it. */ + if (loop_header_p (m_check_enode->get_point ()) + && linemap_location_from_macro_expansion_p (line_table, check_loc)) + return false; + /* Reject if m_deref_expr is sufficiently different from m_arg for cases where the dereference is spelled differently from the check, which is probably two different ways to get the @@ -1618,6 +1633,21 @@ class deref_before_check : public malloc_diagnostic } private: + static bool loop_header_p (const program_point &point) + { + const supernode *snode = point.get_supernode (); + if (!snode) + return false; + for (auto &in_edge : snode->m_preds) + { + if (const cfg_superedge *cfg_in_edge + = in_edge->dyn_cast_cfg_superedge ()) + if (cfg_in_edge->back_edge_p ()) + return true; + } + return false; + } + static bool sufficiently_similar_p (tree expr_a, tree expr_b) { pretty_printer *pp_a = global_dc->printer->clone (); diff --git a/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-1.c b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-1.c new file mode 100644 index 000000000000..769cffae6d74 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-1.c @@ -0,0 +1,60 @@ +/* Reduced from linux-5.10.162's kernel/sched/fair.c, + with !CONFIG_FAIR_GROUP_SCHED. */ + +#define NULL ((void*)0) + +struct load_weight +{ + unsigned long weight; + /* [...snip...] */ +}; + +struct sched_entity +{ + struct load_weight load; + /* [...snip...] */ + unsigned int on_rq; + /* [...snip...] */ +}; + +struct cfs_rq +{ + /* [...snip...] */ + unsigned int nr_running; + /* [...snip...] */ +}; + +extern int +__calc_delta(int delta_exec, unsigned long weight /* [...snip...] */); + +/* !CONFIG_FAIR_GROUP_SCHED */ +#define for_each_sched_entity(se) \ + for (; se; se = (struct sched_entity *)NULL) + +extern struct cfs_rq* +cfs_rq_of(struct sched_entity* se); + +extern int +__sched_period(unsigned long nr_running); + +int +sched_slice(struct cfs_rq* cfs_rq, struct sched_entity* se) +{ + unsigned int nr_running = cfs_rq->nr_running; + int slice; + + /* [...snip...] */ + + slice = __sched_period(nr_running + !se->on_rq); + + for_each_sched_entity(se) { + /* [...snip...] */ + cfs_rq = cfs_rq_of(se); + /* [...snip...] */ + slice = __calc_delta(slice, se->load.weight); + } + + /* [...snip...] */ + + return slice; +} diff --git a/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-2.c b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-2.c new file mode 100644 index 000000000000..8e85a47d315e --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr109251-2.c @@ -0,0 +1,37 @@ +struct node +{ + struct node *next; + int val; +}; + +int test_loop_1 (struct node *n) +{ + int total = 0; + if (n->val = 42) + return -1; + for (struct node *iter = n; iter; iter=iter->next) + total += iter->val; + return total; +} + +int test_loop_2 (struct node *n) +{ + int total = 0; + if (n->val = 42) + return -1; + for (; n; n=n->next) + total += n->val; + return total; +} + +#define FOR_EACH_NODE(ITER) for (; (ITER); (ITER)=(ITER)->next) + +int test_loop_3 (struct node *n) +{ + int total = 0; + if (n->val = 42) + return -1; + FOR_EACH_NODE (n) + total += n->val; + return total; +} From af37618473e27e7a996a3a159bcfb54439b47570 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Thu, 21 Mar 2024 00:18:14 +0000 Subject: [PATCH 174/551] Daily bump. --- gcc/ChangeLog | 166 +++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 21 ++ gcc/cp/ChangeLog | 6 + gcc/fortran/ChangeLog | 15 + gcc/objc/ChangeLog | 5 + gcc/testsuite/ChangeLog | 593 ++++++++++++++++++++++++++++++++++++++++ libgcc/ChangeLog | 4 + libstdc++-v3/ChangeLog | 5 + 9 files changed, 816 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85f645c02385..776947fb99bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,169 @@ +2024-03-20 Cupertino Miranda <cupertino.miranda@oracle.com> + + * config/bpf/core-builtins.cc (bpf_core_get_index): Check if + field contains a DECL_NAME. + +2024-03-20 Cupertino Miranda <cupertino.miranda@oracle.com> + + * config/bpf/btfext-out.cc (cpf_core_reloc_add): Correct for new code. + Add assert to validate the string is set. + * config/bpf/core-builtins.cc (cr_final): Make string struct + field as const. + (process_enum_value): Correct for field type change. + (process_type): Set access string to "0". + +2024-03-20 Cupertino Miranda <cupertino.miranda@oracle.com> + + * config/bpf/core-builtins.cc (core_field_info): Add + support for POINTER_PLUS_EXPR in the root of the field expression. + (bpf_core_get_index): Likewise. + (pack_field_expr): Make the BTF type to point to the structure + related node, instead of its pointer type. + (make_core_safe_access_index): Correct to new code. + +2024-03-20 Xi Ruoyao <xry111@xry111.site> + + PR target/114407 + * config/loongarch/loongarch-opts.cc (loongarch_config_target): + Fix typo in diagnostic message, enabing -> enabling. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/visium/visium.cc (visium_setup_incoming_varargs): Only skip + TARGET_FUNCTION_ARG_ADVANCE for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/nios2/nios2.cc (nios2_setup_incoming_varargs): Only skip + nios2_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/nds32/nds32.cc (nds32_setup_incoming_varargs): Only skip + function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/m32r/m32r.cc (m32r_setup_incoming_varargs): Only skip + function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/ft32/ft32.cc (ft32_setup_incoming_varargs): Only skip + function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/epiphany/epiphany.cc (epiphany_setup_incoming_varargs): Only + skip function arg advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR target/114175 + * config/csky/csky.cc (csky_setup_incoming_varargs): Only skip + csky_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions + if arg.type is NULL. + +2024-03-20 Yury Khrustalev <yury.khrustalev@arm.com> + + * config/aarch64/aarch64-sys-regs.def: Copy from Binutils. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114365 + * gimple-lower-bitint.cc (bitint_large_huge::handle_load): When adding + a PHI node, set iv2 to its result afterwards. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + * tree-ssa-loop-ch.cc (update_profile_after_ch): Fix comment typo: + probabbility -> probability. + (ch_base::copy_headers): Fix comment typo: itrations -> iterations. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/114369 + * system.h (vec_step): Define to vec_step_ when compiling + with clang on PowerPC. + +2024-03-20 demin.han <demin.han@starfivetech.com> + + PR target/112651 + * config/riscv/riscv-opts.h (enum riscv_autovec_lmul_enum): Rename + (enum rvv_max_lmul_enum): Ditto + (TARGET_MAX_LMUL): Ditto + * config/riscv/riscv-v.cc (preferred_simd_mode): Ditto + * config/riscv/riscv-vector-costs.cc (costs::record_potential_unexpected_spills): Ditto + (costs::better_main_loop_than_p): Ditto + * config/riscv/riscv.opt: Replace -param=riscv-autovec-lmul with -mrvv-max-lmul + +2024-03-20 Richard Biener <rguenther@suse.de> + + PR middle-end/113396 + * tree-dfa.cc (get_ref_base_and_extent): Use index range + bounds only if they fit within the address-range constraints + of offset_int. + +2024-03-20 Chenghui Pan <panchenghui@loongson.cn> + + * config/loongarch/loongarch.cc + (loongarch_hard_regno_mode_ok_uncached): Combine UNITS_PER_FP_REG and + UNITS_PER_FPREG macros. + (loongarch_hard_regno_nregs): Ditto. + (loongarch_class_max_nregs): Ditto. + (loongarch_get_separate_components): Ditto. + (loongarch_process_components): Ditto. + * config/loongarch/loongarch.h (UNITS_PER_FPREG): Ditto. + (UNITS_PER_HWFPVALUE): Ditto. + (UNITS_PER_FPVALUE): Ditto. + +2024-03-20 Chenghui Pan <panchenghui@loongson.cn> + + * config/loongarch/lasx.md (vec_cmp<mode><mode256_i>): Remove checking + of loongarch_expand_vec_cmp()'s return value. + (vec_cmpu<ILASX:mode><mode256_i>): Ditto. + * config/loongarch/lsx.md (vec_cmp<mode><mode_i>): Ditto. + (vec_cmpu<ILSX:mode><mode_i>): Ditto. + * config/loongarch/loongarch-protos.h + (loongarch_expand_vec_cmp): Change loongarch_expand_vec_cmp()'s return + type from bool to void. + * config/loongarch/loongarch.cc (loongarch_expand_vec_cmp): Ditto. + +2024-03-20 Chenghui Pan <panchenghui@loongson.cn> + + * config/loongarch/loongarch-protos.h + (loongarch_cfun_has_cprestore_slot_p): Delete. + (loongarch_adjust_insn_length): Delete. + (current_section_name): Delete. + (loongarch_split_symbol_type): Delete. + * config/loongarch/loongarch.cc + (loongarch_case_values_threshold): Delete. + (loongarch_spill_class): Delete. + (TARGET_OPTAB_SUPPORTED_P): Delete. + (TARGET_CASE_VALUES_THRESHOLD): Delete. + (TARGET_SPILL_CLASS): Delete. + +2024-03-20 Lewis Hyatt <lhyatt@gmail.com> + + PR c++/111918 + * diagnostic-core.h (enum diagnostic_t): Add DK_ANY special flag. + * diagnostic.cc (diagnostic_option_classifier::classify_diagnostic): + Make use of DK_ANY to indicate a diagnostic was initially enabled. + (diagnostic_context::diagnostic_enabled): Do not change the type of + a diagnostic if the saved classification is type DK_ANY. + 2024-03-19 Martin Jambor <mjambor@suse.cz> PR ipa/108802 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 75de3250ecdc..95c7d7a00c23 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240320 +20240321 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 0d5c2189ff95..7d8bc4ec1098 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,24 @@ +2024-03-20 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/109251 + * sm-malloc.cc (deref_before_check::emit): Reject cases where the + check is in a loop header within a macro expansion. + (deref_before_check::loop_header_p): New. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + * constraint-manager.cc (test_range, test_constraint_conditions, + test_constant_comparisons, test_constraint_impl, test_purging, + test_bits): Use integer_zero_node instead of + build_zero_cst (integer_type_node) or + build_int_cst (integer_type_node, 0) and integer_one_node instead of + build_int_cst (integer_type_node, 1). + * region-model.cc (region_model::get_store_value, + append_interesting_constants, test_array_1, + test_get_representative_tree, test_unique_constants, test_assignment, + test_stack_frames, test_constraint_merging, test_widening_constraints, + test_iteration_1, test_array_2): Likewise. + 2024-03-19 Jakub Jelinek <jakub@redhat.com> PR analyzer/113505 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 451a7f28b12f..e7776d303e61 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + * coroutines.cc (expand_one_await_expression): Use + integer_zero_node instead of build_int_cst (integer_type_node, 0) + and integer_one_node instead of build_int_cst (integer_type_node, 1). + 2024-03-19 Nathaniel Shead <nathanieloshead@gmail.com> * cp-tree.h (module_maybe_has_cmi_p): New function. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 650a8c3bd9b3..a1c1713d93b3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,18 @@ +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + * trans-array.cc (structure_alloc_comps): Use integer_zero_node + instead of build_zero_cst (integer_type_node) or + build_int_cst (integer_type_node, 0) and integer_one_node instead of + build_int_cst (integer_type_node, 1). + * trans-expr.cc (conv_scalar_char_value): Likewise. + * trans-stmt.cc (gfc_trans_form_team, gfc_trans_change_team, + gfc_trans_sync_team, gfc_trans_sync): Likewise. + * trans-decl.cc (create_main_function): Likewise. + * trans-intrinsic.cc (trans_this_image, conv_intrinsic_move_alloc): + Likewise. + * trans.cc (gfc_allocate_using_caf_lib, gfc_deallocate_with_status): + Likewise. + 2024-03-18 Harald Anlauf <anlauf@gmx.de> PR fortran/103715 diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 3cc5d6081236..1d0bfc68ce8f 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,8 @@ +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + * objc-next-runtime-abi-02.cc (build_v2_class_ro_t_initializer): Use + integer_zero_node instead of build_int_cst (integer_type_node, 0). + 2024-02-24 Jakub Jelinek <jakub@redhat.com> * objc-encoding.cc (encode_array): Use HOST_WIDE_INT_0 macros. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e865fa58e13e..dfc94e290d08 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,596 @@ +2024-03-20 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/109251 + * c-c++-common/analyzer/deref-before-check-pr109251-1.c: New test. + * c-c++-common/analyzer/deref-before-check-pr109251-2.c: New test. + +2024-03-20 Cupertino Miranda <cupertino.miranda@oracle.com> + + * gcc.target/bpf/core-builtin-fieldinfo-offset-1.c: Add + testcase for unnamed fields. + +2024-03-20 Cupertino Miranda <cupertino.miranda@oracle.com> + + * gcc.target/bpf/core-builtin-type-based.c: Correct. + * gcc.target/bpf/core-builtin-type-id.c: Correct. + +2024-03-20 Cupertino Miranda <cupertino.miranda@oracle.com> + + * gcc.target/bpf/core-attr-5.c: Correct. + * gcc.target/bpf/core-attr-6.c: Likewise. + * gcc.target/bpf/core-attr-struct-as-array.c: Add test case for + pointer arithmetics as array access use case. + +2024-03-20 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114365 + * gcc.dg/bitint-102.c: New test. + +2024-03-20 Hao Liu <hliu@os.amperecomputing.com> + + PR tree-optimization/114322 + * gcc.dg/vect/pr114322.c: New testcase. + +2024-03-20 demin.han <demin.han@starfivetech.com> + + PR target/112651 + * g++.target/riscv/rvv/autovec/bug-2.C: Replace option + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-ice-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul-mixed-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-4.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-5.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-6.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul1-7.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-4.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-5.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-6.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul2-7.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-10.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-11.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-12.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-5.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-6.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-7.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-8.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul4-9.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-10.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-11.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-12.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-13.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-14.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-4.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-5.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-6.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-7.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-8.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/dynamic-lmul8-9.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/no-dynamic-lmul-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr111317.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr111848.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113112-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113112-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113112-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113112-4.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113112-5.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113247-1.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113247-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113281-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113281-4.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr113281-5.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/pr114264.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-10.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-11.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-12.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-2.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-3.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-4.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-5.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-6.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-7.c: Ditto + * gcc.dg/vect/costmodel/riscv/rvv/vla_vs_vls-9.c: Ditto + * gcc.target/riscv/rvv/autovec/bug-1.c: Ditto + * gcc.target/riscv/rvv/autovec/bug-2.c: Ditto + * gcc.target/riscv/rvv/autovec/bug-3.c: Ditto + * gcc.target/riscv/rvv/autovec/bug-4.c: Ditto + * gcc.target/riscv/rvv/autovec/bug-5.c: Ditto + * gcc.target/riscv/rvv/autovec/bug-8.c: Ditto + * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-3.c: Ditto + * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-4.c: Ditto + * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-7.c: Ditto + * gcc.target/riscv/rvv/autovec/cmp/cmp_vi-8.c: Ditto + * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-1.c: Ditto + * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc-2.c: Ditto + * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-1.c: Ditto + * gcc.target/riscv/rvv/autovec/cond/cond_widen_reduc_run-2.c: Ditto + * gcc.target/riscv/rvv/autovec/fold-min-poly.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/gimple_fold-1.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/select_vl-2.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-1.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-16.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-17.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-18.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-19.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-2.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-3.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-4.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-5.c: Ditto + * gcc.target/riscv/rvv/autovec/partial/slp-6.c: Ditto + * gcc.target/riscv/rvv/autovec/pr112450.c: Ditto + * gcc.target/riscv/rvv/autovec/pr112598-1.c: Ditto + * gcc.target/riscv/rvv/autovec/pr112598-2.c: Ditto + * gcc.target/riscv/rvv/autovec/pr112694-1.c: Ditto + * gcc.target/riscv/rvv/autovec/pr112999.c: Ditto + * gcc.target/riscv/rvv/autovec/pr113393-2.c: Ditto + * gcc.target/riscv/rvv/autovec/series-1.c: Ditto + * gcc.target/riscv/rvv/autovec/series_run-1.c: Ditto + * gcc.target/riscv/rvv/autovec/slp-interleave-1.c: Ditto + * gcc.target/riscv/rvv/autovec/slp-interleave-2.c: Ditto + * gcc.target/riscv/rvv/autovec/slp-interleave-3.c: Ditto + * gcc.target/riscv/rvv/autovec/slp-interleave-4.c: Ditto + * gcc.target/riscv/rvv/autovec/unop/math-lroundf16-rv64-ice-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-10.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-12.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-13.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-14.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/bitmask-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls-vlmax/trailing_run-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/abs-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/abs-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/and-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/and-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/and-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/avg-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/avg-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/avg-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/avg-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/avg-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/avg-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/bswap16-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cmp-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cmp-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cmp-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cmp-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cmp-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cmp-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-10.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-11.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-12.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-13.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-14.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/combine-merge-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/compress-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/compress-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/compress-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/compress-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/compress-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/compress-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_abs-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_add-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_add-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_and-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-10.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-11.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-12.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_convert-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_copysign-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_div-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_div-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_ext-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_ext-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_ext-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_ext-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_ext-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_fma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_fma-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_fms-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_fnma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_fnma-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_fnms-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_ior-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_max-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_max-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_min-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_min-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_mod-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_mul-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_mul-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_mulh-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_narrow-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_narrow-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_neg-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_neg-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_not-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_shift-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_shift-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_sqrt-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_sub-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_sub-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_trunc-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_trunc-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_trunc-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_trunc-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_trunc-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wadd-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wadd-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wadd-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wadd-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wfma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wfma-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wfms-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wfnma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wmul-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wmul-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wmul-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wsub-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wsub-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wsub-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_wsub-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cond_xor-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/consecutive-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/consecutive-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/const-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/const-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/const-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/const-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/const-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-10.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-11.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-12.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/convert-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/cvt-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/div-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/dup-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/dup-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/dup-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/dup-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/dup-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/dup-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/dup-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ext-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ext-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ext-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ext-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ext-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/extract-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/extract-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-add-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-add-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-add-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-div-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-div-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-div-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-max-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-max-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-max-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-max-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-max-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-min-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-min-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-min-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-min-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-min-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-mul-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-mul-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-mul-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnj-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-sgnjx-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/floating-point-sub-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fma-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fma-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fma-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fma-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fma-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fma-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fms-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fms-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fms-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnma-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnma-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnma-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnma-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnma-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnma-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnms-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnms-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/fnms-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/init-repeat-sequence-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ior-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ior-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/ior-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mask-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mask-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mask-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-ceil-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-floor-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-iceil-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-iceil-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-ifloor-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-ifloor-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-irint-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-irint-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-iround-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-iround-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lceil-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lceil-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lceil-rv32-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lceilf-rv64-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lfloor-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lfloor-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lfloor-rv32-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lfloorf-rv64-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llceil-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llceilf-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llfloor-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llfloorf-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llrint-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llrintf-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llrintf16-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llround-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llroundf-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-llroundf16-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lrint-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lrint-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lrint-rv32-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lrintf-rv64-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv32-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lrintf16-rv64-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lround-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lround-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lround-rv32-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lroundf-rv64-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv32-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-lroundf16-rv64-0.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-nearbyint-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-rint-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-round-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-roundeven-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/math-trunc-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/max-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/merge-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/merge-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/merge-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/merge-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/merge-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/merge-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/merge-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/min-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/minus-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/minus-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/minus-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/misalign-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mod-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-10.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-11.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-12.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-13.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-14.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-15.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-16.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-17.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mov-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mulh-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/mult-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/narrow-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/narrow-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/narrow-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/neg-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/neg-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/not-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/perm-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/perm-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/perm-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/perm-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/perm-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/perm-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/perm-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/plus-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/plus-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/plus-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-10.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-11.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-12.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-13.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-14.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-15.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-16.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-17.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-18.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-19.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-20.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-21.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/reduc-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/repeat-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/series-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/series-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/series-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/series-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/shift-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/shift-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/shift-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/shift-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/shift-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/shift-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/spill-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/spill-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/spill-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/spill-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/spill-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/sqrt-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trailing-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trailing-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trailing-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trailing-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trailing-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trailing-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trailing-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trunc-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trunc-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trunc-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trunc-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/trunc-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-10.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-11.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-12.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-13.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-14.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-15.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-16.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-17.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-18.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-19.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-20.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-21.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-22.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-5.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-6.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-7.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-8.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/vec-set-9.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wadd-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wadd-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wadd-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wadd-4.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wfma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wfma-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wfma-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wfms-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wfnma-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wfnms-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wmul-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wmul-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wmul-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wred-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wred-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wred-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wsub-1.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wsub-2.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wsub-3.c: Ditto + * gcc.target/riscv/rvv/autovec/vls/wsub-4.c: Ditto + * gcc.target/riscv/rvv/autovec/widen/widen_reduc-1.c: Ditto + * gcc.target/riscv/rvv/autovec/widen/widen_reduc_order-2.c: Ditto + * gcc.target/riscv/rvv/autovec/zve32f-3.c: Ditto + * gcc.target/riscv/rvv/autovec/zve32x-3.c: Ditto + * gcc.target/riscv/rvv/autovec/zve64d-3.c: Ditto + * gcc.target/riscv/rvv/autovec/zve64f-3.c: Ditto + * gcc.target/riscv/rvv/autovec/zve64x-3.c: Ditto + * gcc.target/riscv/rvv/base/cpymem-1.c: Ditto + * gcc.target/riscv/rvv/base/cpymem-2.c: Ditto + * gcc.target/riscv/rvv/rvv.exp: Ditto + * gcc.target/riscv/rvv/vsetvl/pr111255.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-1.c: Ditto + * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-2.c: Ditto + +2024-03-20 Richard Biener <rguenther@suse.de> + + PR middle-end/113396 + * gcc.dg/torture/pr113396.c: New testcase. + +2024-03-20 Lewis Hyatt <lhyatt@gmail.com> + + PR c++/111918 + * g++.dg/cpp0x/Wnarrowing21a.C: New test. + * g++.dg/cpp0x/Wnarrowing21b.C: New test. + * g++.dg/cpp0x/Wnarrowing21c.C: New test. + * g++.dg/cpp0x/Wnarrowing21d.C: New test. + 2024-03-19 Martin Jambor <mjambor@suse.cz> PR ipa/108802 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index cbe15b929196..abd3e598869c 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,7 @@ +2024-03-20 Flavio Cruz <flaviocruz@gmail.com> + + * config/i386/gnu-unwind.h: Support unwinding x86_64 signal frames. + 2024-03-15 Jakub Jelinek <jakub@redhat.com> PR libgcc/114327 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 05bfa4e9e201..6aeab3a7e62a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2024-03-20 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/version.def (null_iterators): Remove extra_cond. + * include/bits/version.h: Regenerate. + 2024-03-19 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/114359 From 415091f09096a0ebba1fdcd4af8c2fda24cfd411 Mon Sep 17 00:00:00 2001 From: liuhongt <hongtao.liu@intel.com> Date: Mon, 18 Mar 2024 18:53:59 +0800 Subject: [PATCH 175/551] Document -fexcess-precision=16. gcc/ChangeLog: PR middle-end/114347 * doc/invoke.texi: Document -fexcess-precision=16. --- gcc/doc/invoke.texi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index b446b2905c72..e0950ca5dc2a 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -14931,6 +14931,9 @@ assignments). This option is enabled by default for C or C++ if a strict conformance option such as @option{-std=c99} or @option{-std=c++17} is used. @option{-ffast-math} enables @option{-fexcess-precision=fast} by default regardless of whether a strict conformance option is used. +If @option{-fexcess-precision=16} is specified, constants and the +results of expressions with types @code{_Float16} and @code{__bf16} +are computed without excess precision. @opindex mfpmath @option{-fexcess-precision=standard} is not implemented for languages From 9d6ff6f1ea2ae7fc32ec9fbd0554fb06238ed045 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 19 Mar 2024 14:50:06 +0100 Subject: [PATCH 176/551] tree-optimization/113727 - bogus SRA with BIT_FIELD_REF When SRA analyzes BIT_FIELD_REFs it handles writes and not byte aligned reads differently from byte aligned reads. Instead of trying to create replacements for the loaded portion the former cases try to replace the base object while keeping the wrapping BIT_FIELD_REFs. This breaks when we have both kinds operating on the same base object if there's no appearant overlap conflict as the conflict that then nevertheless exists isn't handled with. The fix is to enforce what I think is part of the design handling the former case - that only the full base object gets replaced and no further sub-objects are created within as otherwise keeping the wrapping BIT_FIELD_REF cannot work. The patch enforces this within analyze_access_subtree. PR tree-optimization/113727 * tree-sra.cc (analyze_access_subtree): Do not allow replacements in subtrees when grp_partial_lhs. * gcc.dg/torture/pr113727.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr113727.c | 26 +++++++++++++++++++++++++ gcc/tree-sra.cc | 3 ++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr113727.c diff --git a/gcc/testsuite/gcc.dg/torture/pr113727.c b/gcc/testsuite/gcc.dg/torture/pr113727.c new file mode 100644 index 000000000000..f92ddad5c8e3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr113727.c @@ -0,0 +1,26 @@ +/* { dg-do run } */ +/* { dg-require-effective-target int32plus } */ + +struct f { + unsigned au : 5; + unsigned f3 : 21; +} g_994; + +int main() +{ + struct f aq1 = {}; + { + struct f aq = {9, 5}; + struct f as = aq; + for (int y = 0 ; y <= 4; y += 1) + if (as.au) + { + struct f aa[5] = {{2, 154}, {2, 154}, {2, 154}, {2, 154}, {2, 154}}; + as = aa[0]; + } + aq1 = as; + } + if (aq1.f3 != 0x9a) + __builtin_abort(); + return 0; +} diff --git a/gcc/tree-sra.cc b/gcc/tree-sra.cc index f8e71ec48b93..dbfae5e7fdd9 100644 --- a/gcc/tree-sra.cc +++ b/gcc/tree-sra.cc @@ -2735,7 +2735,8 @@ analyze_access_subtree (struct access *root, struct access *parent, { hole |= covered_to < child->offset; sth_created |= analyze_access_subtree (child, root, - allow_replacements && !scalar, + allow_replacements && !scalar + && !root->grp_partial_lhs, totally); root->grp_unscalarized_data |= child->grp_unscalarized_data; From 134ef2a8cac1a5cc718739bd7d3b3472947c80d6 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Thu, 21 Mar 2024 08:30:39 +0100 Subject: [PATCH 177/551] tree-optimization/111736 - avoid address sanitizing of __seg_gs The following more thoroughly avoids address sanitizing accesses to non-generic address-spaces. PR tree-optimization/111736 * asan.cc (instrument_derefs): Do not instrument accesses to non-generic address-spaces. * gcc.target/i386/pr111736.c: New testcase. --- gcc/asan.cc | 4 ++++ gcc/testsuite/gcc.target/i386/pr111736.c | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr111736.c diff --git a/gcc/asan.cc b/gcc/asan.cc index cfe831064605..7f91cc616fca 100644 --- a/gcc/asan.cc +++ b/gcc/asan.cc @@ -2755,6 +2755,10 @@ instrument_derefs (gimple_stmt_iterator *iter, tree t, if (VAR_P (inner) && DECL_HARD_REGISTER (inner)) return; + /* Accesses to non-generic address-spaces should not be instrumented. */ + if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (TREE_TYPE (inner)))) + return; + poly_int64 decl_size; if ((VAR_P (inner) || (TREE_CODE (inner) == RESULT_DECL diff --git a/gcc/testsuite/gcc.target/i386/pr111736.c b/gcc/testsuite/gcc.target/i386/pr111736.c new file mode 100644 index 000000000000..231fdd07e803 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr111736.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fsanitize=address" } */ + +int __seg_gs m; + +int foo (void) +{ + return m; +} + +extern int __seg_gs n; + +int bar (void) +{ + return n; +} + +int baz (int __seg_gs *o) +{ + return *o; +} + +/* { dg-final { scan-assembler-not "asan_report_load" } } */ From ac2f8c2a367151fc0410f904339c475a953cffc8 Mon Sep 17 00:00:00 2001 From: liuhongt <hongtao.liu@intel.com> Date: Thu, 21 Mar 2024 13:15:23 +0800 Subject: [PATCH 178/551] Fix runtime error for nonlinear iv vectorization(step_mult). wi::from_mpz doesn't take a sign argument, we want it to be wrapped instead of saturation, so pass utype and true to it, and it fixes the bug. gcc/ChangeLog: PR tree-optimization/114396 * tree-vect-loop.cc (vect_peel_nonlinear_iv_init): Pass utype and true to wi::from_mpz. gcc/testsuite/ChangeLog: * gcc.target/i386/pr114396.c: New test. --- gcc/testsuite/gcc.target/i386/pr114396.c | 105 +++++++++++++++++++++++ gcc/tree-vect-loop.cc | 2 +- 2 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr114396.c diff --git a/gcc/testsuite/gcc.target/i386/pr114396.c b/gcc/testsuite/gcc.target/i386/pr114396.c new file mode 100644 index 000000000000..4c4015f871f3 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114396.c @@ -0,0 +1,105 @@ +/* { dg-do run } */ +/* { dg-options "-O1 -fwrapv -fno-vect-cost-model" } */ + +short a = 0xF; +short b[16]; +unsigned short ua = 0xF; +unsigned short ub[16]; + +short +__attribute__((noipa)) +foo (short a) +{ + for (int e = 0; e < 9; e += 1) + b[e] = a *= 5; + return a; +} + +short +__attribute__((noipa)) +foo1 (short a) +{ + for (int e = 0; e < 9; e += 1) + b[e] = a *= -5; + return a; +} + +unsigned short +__attribute__((noipa)) +foou (unsigned short a) +{ + for (int e = 0; e < 9; e += 1) + ub[e] = a *= -5; + return a; +} + +unsigned short +__attribute__((noipa)) +foou1 (unsigned short a) +{ + for (int e = 0; e < 9; e += 1) + ub[e] = a *= 5; + return a; +} + +short +__attribute__((noipa,optimize("O3"))) +foo_o3 (short a) +{ + for (int e = 0; e < 9; e += 1) + b[e] = a *= 5; + return a; +} + +short +__attribute__((noipa,optimize("O3"))) +foo1_o3 (short a) +{ + for (int e = 0; e < 9; e += 1) + b[e] = a *= -5; + return a; +} + +unsigned short +__attribute__((noipa,optimize("O3"))) +foou_o3 (unsigned short a) +{ + for (int e = 0; e < 9; e += 1) + ub[e] = a *= -5; + return a; +} + +unsigned short +__attribute__((noipa,optimize("O3"))) +foou1_o3 (unsigned short a) +{ + for (int e = 0; e < 9; e += 1) + ub[e] = a *= 5; + return a; +} + +int main() { + unsigned short uexp, ures; + short exp, res; + exp = foo (a); + res = foo_o3 (a); + if (exp != res) + __builtin_abort (); + + exp = foo1 (a); + res = foo1_o3 (a); + if (uexp != ures) + __builtin_abort (); + + uexp = foou (a); + ures = foou_o3 (a); + if (uexp != ures) + __builtin_abort (); + + uexp = foou1 (a); + ures = foou1_o3 (a); + if (uexp != ures) + __builtin_abort (); + + return 0; +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 4375ebdcb493..2921a9e6aa12 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -9454,7 +9454,7 @@ vect_peel_nonlinear_iv_init (gimple_seq* stmts, tree init_expr, wi::to_mpz (skipn, exp, UNSIGNED); mpz_ui_pow_ui (mod, 2, TYPE_PRECISION (type)); mpz_powm (res, base, exp, mod); - begin = wi::from_mpz (type, res, TYPE_SIGN (type)); + begin = wi::from_mpz (utype, res, true); tree mult_expr = wide_int_to_tree (utype, begin); init_expr = gimple_build (stmts, MULT_EXPR, utype, init_expr, mult_expr); From 59b6cece54f33ac4994834d01e18269856576556 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 21 Mar 2024 13:07:50 +0100 Subject: [PATCH 179/551] libgcc: Fix up bitint division [PR114397] The Knuth's division algorithm relies on the number of dividend limbs to be greater ore equal to number of divisor limbs, which is why I've added a special case for un < vn at the start of __divmodbitint4. Unfortunately, my assumption that it then implies abs(v) > abs(u) and so quotient must be 0 and remainder same as dividend is incorrect. This is because this check is done before negation of the operands. While bitint_reduce_prec reduces precision from clearly useless limbs, the problematic case is when the dividend is unsigned or non-negative and divisor is negative. We can have limbs (from MS to LS): dividend: 0 M ?... divisor: -1 -N ?... where M has most significant bit set and M >= N (if M == N then it also the following limbs matter) and the most significant limbs can be even partial. In this case, the quotient should be -1 rather than 0. bitint_reduce_prec will reduce the precision of the dividend so that M is the most significant limb, but can't reduce precision of the divisor to more than having the -1 as most significant limb, because -N doesn't have the most significant bit set. The following patch fixes it by detecting this problematic case in the un < vn handling, and instead of assuming q is 0 and r is u will decrease vn by 1 because it knows the later code will negate the divisor and it can be then expressed after negation in one fewer limbs. 2024-03-21 Jakub Jelinek <jakub@redhat.com> PR libgcc/114397 * libgcc2.c (__divmodbitint4): Don't assume un < vn always means abs(v) > abs(u), check for a special case of un + 1 == vn where u is non-negative and v negative and after v's negation vn could be reduced by 1. * gcc.dg/torture/bitint-65.c: New test. --- gcc/testsuite/gcc.dg/torture/bitint-65.c | 44 ++++++++++++ libgcc/libgcc2.c | 89 +++++++++++++++--------- 2 files changed, 100 insertions(+), 33 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-65.c diff --git a/gcc/testsuite/gcc.dg/torture/bitint-65.c b/gcc/testsuite/gcc.dg/torture/bitint-65.c new file mode 100644 index 000000000000..b7724d05382c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-65.c @@ -0,0 +1,44 @@ +/* PR libgcc/114397 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c23" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 129 +int +foo (unsigned _BitInt (128) a, _BitInt (129) b) +{ + return a / b; +} +#endif + +#if __BITINT_MAXWIDTH__ >= 192 +int +bar (unsigned _BitInt (128) a, _BitInt (192) b) +{ + return a / b; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 129 + if (foo (336225022742818342628768636932743029911uwb, + -336225022742818342628768636932743029911wb) != -1 + || foo (336225022742818342628768636932743029912uwb, + -336225022742818342628768636932743029911wb) != -1 + || foo (336225022742818342628768636932743029911uwb, + -336225022742818342628768636932743029912wb) != 0) + __builtin_abort (); +#endif +#if __BITINT_MAXWIDTH__ >= 192 + if (bar (336225022742818342628768636932743029911uwb, + -336225022742818342628768636932743029911wb) != -1 + || bar (336225022742818342628768636932743029912uwb, + -336225022742818342628768636932743029911wb) != -1 + || bar (336225022742818342628768636932743029911uwb, + -336225022742818342628768636932743029912wb) != 0) + __builtin_abort (); +#endif +} diff --git a/libgcc/libgcc2.c b/libgcc/libgcc2.c index dc856740a696..71c73d6b8469 100644 --- a/libgcc/libgcc2.c +++ b/libgcc/libgcc2.c @@ -1707,44 +1707,67 @@ __divmodbitint4 (UBILtype *q, SItype qprec, USItype vp = avprec % W_TYPE_SIZE; if (__builtin_expect (un < vn, 0)) { - /* If abs(v) > abs(u), then q is 0 and r is u. */ - if (q) - __builtin_memset (q, 0, qn * sizeof (UWtype)); - if (r == NULL) - return; -#if __LIBGCC_BITINT_ORDER__ == __ORDER_BIG_ENDIAN__ - r += rn - 1; - u += un - 1; -#endif - if (up) - --un; - if (rn < un) - un = rn; - for (rn -= un; un; --un) + /* If abs(v) > abs(u), then q is 0 and r is u. + Unfortunately un < vn doesn't always mean abs(v) > abs(u). + If uprec > 0 and vprec < 0 and vn == un + 1, if the + top limb of v is all ones and the second most significant + limb has most significant bit clear, then just decrease + vn/avprec/vp and continue, after negation both numbers + will have the same number of limbs. */ + if (un + 1 == vn + && uprec >= 0 + && vprec < 0 + && ((v[BITINT_END (0, vn - 1)] | (vp ? ((UWtype) -1 << vp) : 0)) + == (UWtype) -1) + && (Wtype) v[BITINT_END (1, vn - 2)] >= 0) { - *r = *u; - r += BITINT_INC; - u += BITINT_INC; + vp = 0; + --vn; +#if __LIBGCC_BITINT_ORDER__ == __ORDER_BIG_ENDIAN__ + ++v; +#endif } - if (!rn) - return; - if (up) + else { - if (uprec > 0) - *r = *u & (((UWtype) 1 << up) - 1); - else - *r = *u | ((UWtype) -1 << up); - r += BITINT_INC; - if (!--rn) + /* q is 0 and r is u. */ + if (q) + __builtin_memset (q, 0, qn * sizeof (UWtype)); + if (r == NULL) return; +#if __LIBGCC_BITINT_ORDER__ == __ORDER_BIG_ENDIAN__ + r += rn - 1; + u += un - 1; +#endif + if (up) + --un; + if (rn < un) + un = rn; + for (rn -= un; un; --un) + { + *r = *u; + r += BITINT_INC; + u += BITINT_INC; + } + if (!rn) + return; + if (up) + { + if (uprec > 0) + *r = *u & (((UWtype) 1 << up) - 1); + else + *r = *u | ((UWtype) -1 << up); + r += BITINT_INC; + if (!--rn) + return; + } + UWtype c = uprec < 0 ? (UWtype) -1 : (UWtype) 0; + for (; rn; --rn) + { + *r = c; + r += BITINT_INC; + } + return; } - UWtype c = uprec < 0 ? (UWtype) -1 : (UWtype) 0; - for (; rn; --rn) - { - *r = c; - r += BITINT_INC; - } - return; } USItype qn2 = un - vn + 1; if (qn >= qn2) From c3fb8a4d150586459a9fa177cb2aeeac5e4c0464 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs <ams@baylibre.com> Date: Wed, 20 Mar 2024 12:49:24 +0000 Subject: [PATCH 180/551] amdgcn: Clean up device memory in gcn-run gcc/ChangeLog: * config/gcn/gcn-run.cc (main): Add an hsa_memory_free calls for each device_malloc call. --- gcc/config/gcn/gcn-run.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/config/gcn/gcn-run.cc b/gcc/config/gcn/gcn-run.cc index d45ff3e6c2ba..2f3ed2d41d2f 100644 --- a/gcc/config/gcn/gcn-run.cc +++ b/gcc/config/gcn/gcn-run.cc @@ -755,7 +755,13 @@ main (int argc, char *argv[]) /* Clean shut down. */ XHSA (hsa_fns.hsa_memory_free_fn (kernargs), - "Clean up device memory"); + "Clean up device kernargs memory"); + XHSA (hsa_fns.hsa_memory_free_fn (args), + "Clean up device args memory"); + XHSA (hsa_fns.hsa_memory_free_fn (heap), + "Clean up device heap memory"); + XHSA (hsa_fns.hsa_memory_free_fn (stack), + "Clean up device stack memory"); XHSA (hsa_fns.hsa_executable_destroy_fn (executable), "Clean up GCN executable"); XHSA (hsa_fns.hsa_queue_destroy_fn (queue), From 69dc2dc7e0e853856b84b1bcc89d0241d8a570aa Mon Sep 17 00:00:00 2001 From: Andrew Stubbs <ams@baylibre.com> Date: Mon, 4 Mar 2024 15:48:47 +0000 Subject: [PATCH 181/551] amdgcn: Ensure gfx11 is running in cumode CUmode "on" is the setting for compatibility with GCN and CDNA devices. gcc/ChangeLog: * config/gcn/gcn-hsa.h (ASM_SPEC): Pass -mattr=+cumode. --- gcc/config/gcn/gcn-hsa.h | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/config/gcn/gcn-hsa.h b/gcc/config/gcn/gcn-hsa.h index 9cf181f52a40..c75256dbac37 100644 --- a/gcc/config/gcn/gcn-hsa.h +++ b/gcc/config/gcn/gcn-hsa.h @@ -107,6 +107,7 @@ extern unsigned int gcn_local_sym_hash (const char *name); "%{" NO_XNACK XNACKOPT "} " \ "%{" NO_SRAM_ECC SRAMOPT "} " \ "%{march=gfx1030|march=gfx1100:-mattr=+wavefrontsize64} " \ + "%{march=gfx1030|march=gfx1100:-mattr=+cumode} " \ "-filetype=obj" #define LINK_SPEC "--pie --export-dynamic" #define LIB_SPEC "-lc" From a2fe34e0b993d5fb879d75ddb42b24b45c4b7242 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs <ams@baylibre.com> Date: Mon, 4 Mar 2024 15:52:00 +0000 Subject: [PATCH 182/551] amdgcn: Comment correction The location of the marker was changed, but the comment wasn't updated. Fixed now. gcc/ChangeLog: * config/gcn/gcn.cc (gcn_expand_builtin_1): Comment correction. --- gcc/config/gcn/gcn.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index bc076d1120d9..fca001811e5d 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -4932,8 +4932,8 @@ gcn_expand_builtin_1 (tree exp, rtx target, rtx /*subtarget */ , } case GCN_BUILTIN_FIRST_CALL_THIS_THREAD_P: { - /* Stash a marker in the unused upper 16 bits of s[0:1] to indicate - whether it was the first call. */ + /* Stash a marker in the unused upper 16 bits of QUEUE_PTR_ARG to + indicate whether it was the first call. */ rtx result = gen_reg_rtx (BImode); emit_move_insn (result, const0_rtx); if (cfun->machine->args.reg[QUEUE_PTR_ARG] >= 0) From 081f8937cb82da311c224da04b0c6cbd57a8fb5d Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Thu, 7 Mar 2024 20:41:23 -0500 Subject: [PATCH 183/551] c++: explicit inst of template method not generated [PR110323] Consider constexpr int VAL = 1; struct foo { template <int B> void bar(typename std::conditional<B==VAL, int, float>::type arg) { } }; template void foo::bar<1>(int arg); where we since r11-291 fail to emit the code for the explicit instantiation. That's because cp_walk_subtrees/TYPENAME_TYPE now walks TYPE_CONTEXT ('conditional' here) as well, and in a template finds the B==VAL template argument. VAL is constexpr, which implies const, which in the global scope implies static. constrain_visibility_for_template then makes "struct conditional<(B == VAL), int, float>" non-TREE_PUBLIC. Then symtab_node::needed_p checks TREE_PUBLIC, sees it's 0, and we don't emit any code. I thought the fix would be some ODR-esque check to not consider constexpr variables/fns that are used just for their value. But it turned out to be tricky. For instance, we can't skip determine_visibility in a template; we can't even skip it for value-dep expressions. For example, no-linkage-expr1.C has using P = struct {}*; template <int N> void f(int(*)[((P)0, N)]) {} where ((P)0, N) is value-dep, but N is not relevant here: we have to ferret out the anonymous type. When instantiating, it's already gone. This patch uses decl_constant_var_p. This is to implement (an approximation) [basic.def.odr]#14.5.1 and [basic.def.odr]#5.2. PR c++/110323 gcc/cp/ChangeLog: * decl2.cc (min_vis_expr_r) <case VAR_DECL>: Do nothing for decl_constant_var_p VAR_DECLs. gcc/testsuite/ChangeLog: * g++.dg/template/explicit-instantiation6.C: New test. * g++.dg/template/explicit-instantiation7.C: New test. --- gcc/cp/decl2.cc | 7 ++- .../g++.dg/template/explicit-instantiation6.C | 43 +++++++++++++++++++ .../g++.dg/template/explicit-instantiation7.C | 22 ++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/explicit-instantiation6.C create mode 100644 gcc/testsuite/g++.dg/template/explicit-instantiation7.C diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc index 2562d8aeff6e..1339f210dde5 100644 --- a/gcc/cp/decl2.cc +++ b/gcc/cp/decl2.cc @@ -2718,7 +2718,12 @@ min_vis_expr_r (tree *tp, int */*walk_subtrees*/, void *data) /* Fall through. */ case VAR_DECL: case FUNCTION_DECL: - if (! TREE_PUBLIC (t)) + if (decl_constant_var_p (t)) + /* The ODR allows definitions in different TUs to refer to distinct + constant variables with internal or no linkage, so such a reference + shouldn't affect visibility (PR110323). FIXME but only if the + lvalue-rvalue conversion is applied. */; + else if (! TREE_PUBLIC (t)) tpvis = VISIBILITY_ANON; else tpvis = DECL_VISIBILITY (t); diff --git a/gcc/testsuite/g++.dg/template/explicit-instantiation6.C b/gcc/testsuite/g++.dg/template/explicit-instantiation6.C new file mode 100644 index 000000000000..8b77c9deb203 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/explicit-instantiation6.C @@ -0,0 +1,43 @@ +// PR c++/110323 +// { dg-do compile { target c++14 } } + +template<bool B, class T, class F> +struct conditional { using type = T; }; + +template<class T, class F> +struct conditional<false, T, F> { using type = F; }; + +constexpr int VAL = 1; + +static constexpr int getval () { return 1; } + +template<typename> +constexpr int TVAL = 1; + +static struct S { + constexpr operator bool() { return true; } +} s; + +struct foo { + template <int B> + void bar(typename conditional<B == VAL, int, float>::type arg) { } + + template <int B> + void qux(typename conditional<B == TVAL<int>, int, float>::type arg) { } + + template <int B> + void sox(typename conditional<B == noexcept (VAL), int, float>::type arg) { } + + template <int B> + void nim(typename conditional<B != sizeof (VAL), int, float>::type arg) { } +}; + +template void foo::bar<1>(int arg); +template void foo::qux<1>(int arg); +template void foo::sox<1>(int arg); +template void foo::nim<1>(int arg); + +// { dg-final { scan-assembler "_ZN3foo3barILi1EEEvN11conditionalIXeqT_L_ZL3VALEEifE4typeE" } } +// { dg-final { scan-assembler "_ZN3foo3quxILi1EEEvN11conditionalIXeqT_L_Z4TVALIiEEEifE4typeE" } } +// { dg-final { scan-assembler "_ZN3foo3soxILi1EEEvN11conditionalIXeqT_nxL_ZL3VALEEifE4typeE" } } +// { dg-final { scan-assembler "_ZN3foo3nimILi1EEEvN11conditionalIXneT_szL_ZL3VALEEifE4typeE" } } diff --git a/gcc/testsuite/g++.dg/template/explicit-instantiation7.C b/gcc/testsuite/g++.dg/template/explicit-instantiation7.C new file mode 100644 index 000000000000..9a870e808fa7 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/explicit-instantiation7.C @@ -0,0 +1,22 @@ +// PR c++/110323 +// { dg-do compile { target c++11 } } + +using P = struct { }*; +using N = struct A { }*; + +template<bool B, class T, class F> +struct conditional { using type = T; }; + +struct foo { + template <int B> + void bar(typename conditional<((P) 0, B), int, float>::type arg) { } + + template <int B> + void baz(typename conditional<((N) 0, B), int, float>::type arg) { } +}; + +template void foo::bar<1>(int arg); +template void foo::baz<1>(int arg); + +// { dg-final { scan-assembler-not "_ZN3foo3barILi1EEEvN11conditionalIXcmcvP1XLi0EneT_Li0EEifE4typeE" } } +// { dg-final { scan-assembler "_ZN3foo3bazILi1EEEvN11conditionalIXcmcvP1ALi0EneT_Li0EEifE4typeE" } } From 509352069d6f166d396f4b4a86e71ea521f2ca78 Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Wed, 20 Mar 2024 20:59:24 +0100 Subject: [PATCH 184/551] Fortran: improve array component description in runtime error message [PR30802] Runtime error messages for array bounds violation shall use the following scheme for a coherent, abridged description of arrays or array components of derived types: (1) If x is an ordinary array variable, use "x" (2) if z is a DT scalar and x an array component at level 1, use "z%x" (3) if z is a DT scalar and x an array component at level > 1, or if z is a DT array and x an array (at any level), use "z...%x" Use a new helper function abridged_ref_name for construction of that name. gcc/fortran/ChangeLog: PR fortran/30802 * trans-array.cc (abridged_ref_name): New helper function. (trans_array_bound_check): Use it. (array_bound_check_elemental): Likewise. (gfc_conv_array_ref): Likewise. gcc/testsuite/ChangeLog: PR fortran/30802 * gfortran.dg/bounds_check_17.f90: Adjust pattern. * gfortran.dg/bounds_check_fail_8.f90: New test. --- gcc/fortran/trans-array.cc | 132 +++++++++++------- gcc/testsuite/gfortran.dg/bounds_check_17.f90 | 2 +- .../gfortran.dg/bounds_check_fail_8.f90 | 56 ++++++++ 3 files changed, 142 insertions(+), 48 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/bounds_check_fail_8.f90 diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 0a453828bade..30b84762346d 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -3485,6 +3485,78 @@ gfc_conv_array_ubound (tree descriptor, int dim) } +/* Generate abridged name of a part-ref for use in bounds-check message. + Cases: + (1) for an ordinary array variable x return "x" + (2) for z a DT scalar and array component x (at level 1) return "z%%x" + (3) for z a DT scalar and array component x (at level > 1) or + for z a DT array and array x (at any number of levels): "z...%%x" + */ + +static char * +abridged_ref_name (gfc_expr * expr, gfc_array_ref * ar) +{ + gfc_ref *ref; + gfc_symbol *sym; + char *ref_name = NULL; + const char *comp_name = NULL; + int len_sym, last_len = 0, level = 0; + bool sym_is_array; + + gcc_assert (expr->expr_type == EXPR_VARIABLE && expr->ref != NULL); + + sym = expr->symtree->n.sym; + sym_is_array = (sym->ts.type != BT_CLASS + ? sym->as != NULL + : IS_CLASS_ARRAY (sym)); + len_sym = strlen (sym->name); + + /* Scan ref chain to get name of the array component (when ar != NULL) or + array section, determine depth and remember its component name. */ + for (ref = expr->ref; ref; ref = ref->next) + { + if (ref->type == REF_COMPONENT + && strcmp (ref->u.c.component->name, "_data") != 0) + { + level++; + comp_name = ref->u.c.component->name; + continue; + } + + if (ref->type != REF_ARRAY) + continue; + + if (ar) + { + if (&ref->u.ar == ar) + break; + } + else if (ref->u.ar.type == AR_SECTION) + break; + } + + if (level > 0) + last_len = strlen (comp_name); + + /* Provide a buffer sufficiently large to hold "x...%%z". */ + ref_name = XNEWVEC (char, len_sym + last_len + 6); + strcpy (ref_name, sym->name); + + if (level == 1 && !sym_is_array) + { + strcat (ref_name, "%%"); + strcat (ref_name, comp_name); + } + else if (level > 0) + { + strcat (ref_name, "...%%"); + strcat (ref_name, comp_name); + } + + return ref_name; +} + + /* Generate code to perform an array index bound check. */ static tree @@ -3496,7 +3568,9 @@ trans_array_bound_check (gfc_se * se, gfc_ss *ss, tree index, int n, tree tmp_lo, tmp_up; tree descriptor; char *msg; + char *ref_name = NULL; const char * name = NULL; + gfc_expr *expr; if (!(gfc_option.rtcheck & GFC_RTCHECK_BOUNDS)) return index; @@ -3509,6 +3583,12 @@ trans_array_bound_check (gfc_se * se, gfc_ss *ss, tree index, int n, name = ss->info->expr->symtree->n.sym->name; gcc_assert (name != NULL); + /* When we have a component ref, get name of the array section. + Note that there can only be one part ref. */ + expr = ss->info->expr; + if (expr->ref && !compname) + name = ref_name = abridged_ref_name (expr, NULL); + if (VAR_P (descriptor)) name = IDENTIFIER_POINTER (DECL_NAME (descriptor)); @@ -3562,6 +3642,7 @@ trans_array_bound_check (gfc_se * se, gfc_ss *ss, tree index, int n, free (msg); } + free (ref_name); return index; } @@ -3573,36 +3654,17 @@ array_bound_check_elemental (gfc_se * se, gfc_ss * ss, gfc_expr * expr) { gfc_array_ref *ar; gfc_ref *ref; - gfc_symbol *sym; char *var_name = NULL; - size_t len; int dim; if (expr->expr_type == EXPR_VARIABLE) { - sym = expr->symtree->n.sym; - len = strlen (sym->name) + 1; - - for (ref = expr->ref; ref; ref = ref->next) - if (ref->type == REF_COMPONENT) - len += 2 + strlen (ref->u.c.component->name); - - var_name = XALLOCAVEC (char, len); - strcpy (var_name, sym->name); - for (ref = expr->ref; ref; ref = ref->next) { - /* Append component name. */ - if (ref->type == REF_COMPONENT) - { - strcat (var_name, "%%"); - strcat (var_name, ref->u.c.component->name); - continue; - } - if (ref->type == REF_ARRAY && ref->u.ar.type == AR_SECTION) { ar = &ref->u.ar; + var_name = abridged_ref_name (expr, ar); for (dim = 0; dim < ar->dimen; dim++) { if (ar->dimen_type[dim] == DIMEN_ELEMENT) @@ -3618,6 +3680,7 @@ array_bound_check_elemental (gfc_se * se, gfc_ss * ss, gfc_expr * expr) var_name); } } + free (var_name); } } } @@ -4034,33 +4097,7 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_expr *expr, } if (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS) - { - size_t len; - gfc_ref *ref; - - len = strlen (sym->name) + 1; - for (ref = expr->ref; ref; ref = ref->next) - { - if (ref->type == REF_ARRAY && &ref->u.ar == ar) - break; - if (ref->type == REF_COMPONENT) - len += 2 + strlen (ref->u.c.component->name); - } - - var_name = XALLOCAVEC (char, len); - strcpy (var_name, sym->name); - - for (ref = expr->ref; ref; ref = ref->next) - { - if (ref->type == REF_ARRAY && &ref->u.ar == ar) - break; - if (ref->type == REF_COMPONENT) - { - strcat (var_name, "%%"); - strcat (var_name, ref->u.c.component->name); - } - } - } + var_name = abridged_ref_name (expr, ar); decl = se->expr; if (UNLIMITED_POLY(sym) @@ -4195,6 +4232,7 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_expr *expr, decl = NULL_TREE; } + free (var_name); se->expr = build_array_ref (se->expr, offset, decl, se->class_vptr); } diff --git a/gcc/testsuite/gfortran.dg/bounds_check_17.f90 b/gcc/testsuite/gfortran.dg/bounds_check_17.f90 index 50d66c75a809..e970727d7d90 100644 --- a/gcc/testsuite/gfortran.dg/bounds_check_17.f90 +++ b/gcc/testsuite/gfortran.dg/bounds_check_17.f90 @@ -23,4 +23,4 @@ END -! { dg-output "At line 22 of file .*bounds_check_17.f90.*Fortran runtime error: Index '11' of dimension 1 of array 'z%y%x' above upper bound of 10" } +! { dg-output "At line 22 of file .*bounds_check_17.f90.*Fortran runtime error: Index '11' of dimension 1 of array 'z\.\.\.%x' above upper bound of 10" } diff --git a/gcc/testsuite/gfortran.dg/bounds_check_fail_8.f90 b/gcc/testsuite/gfortran.dg/bounds_check_fail_8.f90 new file mode 100644 index 000000000000..7ee659f0c7ed --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bounds_check_fail_8.f90 @@ -0,0 +1,56 @@ +! { dg-do compile } +! { dg-additional-options "-fcheck=bounds -g -fdump-tree-original" } +! +! PR fortran/30802 - improve bounds-checking for array references +! +! Use proper array component references in runtime error message. + +program test + implicit none + integer :: k = 0 + type t + real, dimension(10,20,30) :: z = 23 + end type t + type u + type(t) :: vv(4,5) + complex :: cc(6,7) + end type u + type vec + integer :: xx(3) = [2,4,6] + end type vec + type(t) :: uu, ww(1) + type(u) :: x1, x2, y1(1), y2(1) + + print *, uu % z(1,k,:) ! runtime check for dimension 2 of uu%z + print *, ww(1)% z(1,:,k) ! runtime check for dimension 3 of ww...%z + print *, x1 % vv(2,3)% z(1,:,k) ! runtime check for dimension 3 of x1...%z + print *, x2 % vv(k,:)% z(1,2,3) ! runtime check for dimension 1 of x2%vv + print *, y1(k)% vv(2,3)% z(k,:,1) ! runtime check for dimension 1 of y1 + ! and for dimension 1 of y1...%z + print *, y2(1)% vv(:,k)% z(1,2,k) ! runtime check for dimension 2 of y2...%vv + ! and for dimension 3 of y2...%z + print *, y1(1)% cc(k,:)% re ! runtime check for dimension 1 of y1...%cc +contains + subroutine sub (yy, k) + class(vec), intent(in) :: yy(:) + integer, intent(in) :: k + print *, yy(1)%xx(k) ! runtime checks for yy and yy...%xx + end +end program test + +! { dg-final { scan-tree-dump-times "dimension 2 of array .'uu%%z.' outside of expected range" 2 "original" } } +! { dg-final { scan-tree-dump-times "dimension 3 of array .'ww\.\.\.%%z.' outside of expected range" 2 "original" } } +! { dg-final { scan-tree-dump-times "dimension 3 of array .'x1\.\.\.%%z.' outside of expected range" 2 "original" } } +! { dg-final { scan-tree-dump-times "dimension 1 of array .'x2%%vv.' outside of expected range" 2 "original" } } +! { dg-final { scan-tree-dump-times "dimension 1 of array .'y1\.\.\.%%z.' outside of expected range" 2 "original" } } +! { dg-final { scan-tree-dump-times "dimension 2 of array .'y2\.\.\.%%vv.' outside of expected range" 2 "original" } } +! { dg-final { scan-tree-dump-times "dimension 1 of array .'y1\.\.\.%%cc.' outside of expected range" 2 "original" } } + +! { dg-final { scan-tree-dump-times "dimension 1 of array .'y1.' above upper bound" 1 "original" } } +! { dg-final { scan-tree-dump-times "dimension 1 of array .'y1.' below lower bound" 1 "original" } } +! { dg-final { scan-tree-dump-times "dimension 3 of array .'y2\.\.\.%%z.' above upper bound" 1 "original" } } +! { dg-final { scan-tree-dump-times "dimension 3 of array .'y2\.\.\.%%z.' below lower bound" 1 "original" } } + +! { dg-final { scan-tree-dump-times "dimension 1 of array .'yy.' above upper bound" 1 "original" } } +! { dg-final { scan-tree-dump-times "dimension 1 of array .'yy\.\.\.%%xx.' above upper bound" 1 "original" } } +! { dg-final { scan-tree-dump-times "dimension 1 of array .'yy\.\.\.%%xx.' below lower bound" 1 "original" } } From ba744d50ac0360f7992a42494db766f6548913e3 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 21 Mar 2024 18:30:23 +0000 Subject: [PATCH 185/551] PR modula2/114418 missing import of TSIZE from system causes ICE This patch detects whether the symbol func is NulSym before generating an error and if so just uses the token location and fixed string to generate an error message. gcc/m2/ChangeLog: PR modula2/114418 * gm2-compiler/PCSymBuild.mod (PushConstFunctionType): Check func against NulSym and issue an error. gcc/testsuite/ChangeLog: PR modula2/114418 * gm2/pim/fail/missingtsize.mod: New test. * gm2/pim/fail/missingtsize2.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/PCSymBuild.mod | 48 +++++++++++++++----- gcc/testsuite/gm2/pim/fail/missingtsize.mod | 8 ++++ gcc/testsuite/gm2/pim/fail/missingtsize2.mod | 8 ++++ 3 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/gm2/pim/fail/missingtsize.mod create mode 100644 gcc/testsuite/gm2/pim/fail/missingtsize2.mod diff --git a/gcc/m2/gm2-compiler/PCSymBuild.mod b/gcc/m2/gm2-compiler/PCSymBuild.mod index e21654087812..9a6e8c06e70c 100644 --- a/gcc/m2/gm2-compiler/PCSymBuild.mod +++ b/gcc/m2/gm2-compiler/PCSymBuild.mod @@ -1412,6 +1412,38 @@ BEGIN END buildConstFunction ; +(* + ErrorConstFunction - generate an error message at functok using func in the + error message providing it is not NulSym. +*) + +PROCEDURE ErrorConstFunction (func: CARDINAL; functok: CARDINAL) ; +BEGIN + IF func = NulSym + THEN + IF Iso + THEN + ErrorFormat0 (NewError (functok), + 'the only functions permissible in a constant expression are: CAP, CHR, CMPLX, FLOAT, HIGH, IM, LENGTH, MAX, MIN, ODD, ORD, RE, SIZE, TSIZE, TRUNC, VAL and gcc builtins') + ELSE + ErrorFormat0 (NewError (functok), + 'the only functions permissible in a constant expression are: CAP, CHR, FLOAT, HIGH, MAX, MIN, ODD, ORD, SIZE, TSIZE, TRUNC, VAL and gcc builtins') + END + ELSE + IF Iso + THEN + MetaErrorT1 (functok, + 'the only functions permissible in a constant expression are: CAP, CHR, CMPLX, FLOAT, HIGH, IM, LENGTH, MAX, MIN, ODD, ORD, RE, SIZE, TSIZE, TRUNC, VAL and gcc builtins, but not {%1Ead}', + func) + ELSE + MetaErrorT1 (functok, + 'the only functions permissible in a constant expression are: CAP, CHR, FLOAT, HIGH, MAX, MIN, ODD, ORD, SIZE, TSIZE, TRUNC, VAL and gcc builtins, but not {%1Ead}', + func) + END + END +END ErrorConstFunction ; + + (* PushConstFunctionType - *) @@ -1426,7 +1458,10 @@ BEGIN PopTtok (func, functok) ; IF inDesignator THEN - IF (func#Convert) AND + IF func = NulSym + THEN + ErrorConstFunction (func, functok) + ELSIF (func#Convert) AND (IsPseudoBaseFunction(func) OR IsPseudoSystemFunctionConstExpression(func) OR (IsProcedure(func) AND IsProcedureBuiltin(func))) @@ -1442,16 +1477,7 @@ BEGIN WriteFormat0('a constant type conversion can only have one argument') END ELSE - IF Iso - THEN - MetaErrorT1 (functok, - 'the only functions permissible in a constant expression are: CAP, CHR, CMPLX, FLOAT, HIGH, IM, LENGTH, MAX, MIN, ODD, ORD, RE, SIZE, TSIZE, TRUNC, VAL and gcc builtins, but not {%1Ead}', - func) - ELSE - MetaErrorT1 (functok, - 'the only functions permissible in a constant expression are: CAP, CHR, FLOAT, HIGH, MAX, MIN, ODD, ORD, SIZE, TSIZE, TRUNC, VAL and gcc builtins, but not {%1Ead}', - func) - END + ErrorConstFunction (func, functok) END END ; PushTtok (func, functok) diff --git a/gcc/testsuite/gm2/pim/fail/missingtsize.mod b/gcc/testsuite/gm2/pim/fail/missingtsize.mod new file mode 100644 index 000000000000..23ec055d7bee --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/missingtsize.mod @@ -0,0 +1,8 @@ +MODULE missingtsize ; + +CONST + NoOfBytes = TSIZE (CARDINAL) ; + +BEGIN + +END missingtsize. diff --git a/gcc/testsuite/gm2/pim/fail/missingtsize2.mod b/gcc/testsuite/gm2/pim/fail/missingtsize2.mod new file mode 100644 index 000000000000..8e859445ab0a --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/missingtsize2.mod @@ -0,0 +1,8 @@ +MODULE missingtsize2 ; + +CONST + NoOfBytes = TSIZE (CARDINAL) * 4 ; + +BEGIN + +END missingtsize2. \ No newline at end of file From 48d49200510198cafcab55601cd8e5f8eb541f01 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 21 Mar 2024 19:38:03 +0000 Subject: [PATCH 186/551] PR modula2/113836 gm2 does not dump gimple or quadruples to file This patch provides the localized modula2 changes to gcc/m2 which facilitate the dumping of gimple and quadruples to file. PR modula2/113836 will be full complete after a subsequent patch adding changes to lang.opt and documentation. The lang.opt patch requires all language bootstrap regression testing whereas this patch is isolated to gcc/m2 and only the m2 language. gcc/m2/ChangeLog: PR modula2/113836 * Make-lang.in (GM2_C_OBJS): Add m2/gm2-gcc/m2pp.o. (m2/m2pp.o): Remove rule. (GM2-COMP-BOOT-DEFS): Add M2LangDump.def. (GM2-COMP-BOOT-MODS): Add M2LangDump.mod. (GM2-GCC-DEFS): Add M2LangDump.def. (GM2-GCC-MODS): Add M2LangDump.mod. * gm2-compiler/M2CaseList.mod (WriteCase): Rewrite. * gm2-compiler/M2Code.mod (DoModuleDeclare): Call DumpFilteredResolver depending upon DumpLangDecl. (DoCodeBlock): Call CreateDumpGimple depending upon DumpLangGimple. (Code): Replace DisplayQuadList blocks with DumpQuadruples. (DisplayQuadsInScope): Remove. (DisplayQuadNumbers): Remove. (CodeBlock): Rewrite. * gm2-compiler/M2GCCDeclare.def (IncludeDumpSymbol): New procedure. (DumpFilteredResolver): New procedure. (DumpFilteredDefinitive): New procedure. * gm2-compiler/M2GCCDeclare.mod (IncludeDumpSymbol): New procedure. (DumpFilteredResolver): New procedure. (DumpFilteredDefinitive): New procedure. (doInclude): Rewrite to use GetDumpFile. (WatchIncludeList): Remove fixed debugging value. (doExclude): Rewrite to use GetDumpFile. (DeclareTypesConstantsProceduresInRange): Remove fixed debugging values. (PreAddModGcc): Rename parameter t as tree. (IncludeGetNth): Rewrite to use GetDumpFile. (IncludeType): Ditto. (IncludeSubscript): Ditto. (PrintLocalSymbol): Ditto. (PrintLocalSymbols): Ditto. (IncludeGetVarient): Ditto. (PrintDeclared): Ditto. (PrintAlignment): Ditto. (PrintDecl): Ditto. (PrintScope): Ditto. (PrintProcedure): Ditto. (PrintSym): Ditto. (PrintSymbol): Ditto. (PrintTerse): Ditto. * gm2-compiler/M2Options.def (GetDumpLangDeclFilename): New procedure function. (SetDumpLangDeclFilename): New procedure. (GetDumpLangQuadFilename): New procedure function. (SetDumpLangQuadFilename): New procedure. (GetDumpLangGimpleFilename): New procedure function. (SetDumpLangGimpleFilename): New procedure. (SetM2DumpFilter): New procedure. (GetM2DumpFilter): New procedure function. (GetDumpLangGimple): New procedure function. * gm2-compiler/M2Options.mod (GetDumpLangDeclFilename): New procedure function. (SetDumpLangDeclFilename): New procedure. (GetDumpLangQuadFilename): New procedure function. (SetDumpLangQuadFilename): New procedure. (GetDumpLangGimpleFilename): New procedure function. (SetDumpLangGimpleFilename): New procedure. (SetM2DumpFilter): New procedure. (GetM2DumpFilter): New procedure function. (GetDumpLangGimple): New procedure function. * gm2-compiler/M2Quads.def (DumpQuadruples): New procedure. * gm2-compiler/M2Quads.mod (DumpUntil): New procedure. (GetCtorInit): New procedure function. (GetCtorFini): New procedure function. (DumpQuadrupleFilter): New procedure function. (DumpQuadrupleAll): New procedure. (DisplayQuadList): Remove procedure. (DumpQuadruples): New procedure. (DisplayQuadRange): Rewrite. (DisplayQuad): Ditto. (DisplayProcedureAttributes): Ditto. (WriteOperator): Ditto. (WriteMode): Ditto. * gm2-compiler/M2Scope.mod (ForeachScopeBlockDo2): Replace DisplayQuadruples with TraceQuadruples. (ForeachScopeBlockDo3): Replace DisplayQuadruples with TraceQuadruples. * gm2-compiler/SymbolConversion.def (Gcc2Mod): New procedure function. * gm2-compiler/SymbolConversion.mod: New procedure function. * gm2-gcc/m2misc.cc (m2misc_DebugTree): New function. (m2misc_DebugTreeChain): New function. * gm2-gcc/m2options.h (M2Options_GetDumpLangDeclFilename): New prototype. (M2Options_SetDumpLangDeclFilename): New prototype. (M2Options_GetDumpLangQuadFilename): New prototype. (M2Options_SetDumpLangQuadFilename): New prototype. (M2Options_GetDumpLangGimpleFilename): New prototype. (M2Options_SetDumpLangGimpleFilename): New prototype. (M2Options_GetDumpLangGimple): New prototype. (M2Options_SetM2DumpFilter): New prototype. (M2Options_GetM2DumpFilter): New prototype. * m2pp.cc: Move to... * gm2-gcc/m2pp.cc: ...here. * m2pp.h: Move to... * gm2-gcc/m2pp.h: ...here. * gm2-gcc/m2statement.cc (m2statement_BuildEndFunctionCode): Call m2pp_dump_gimple. * gm2-lang.cc (ENABLE_QUAD_DUMP_ALL): New define. (gm2_langhook_init_options): Add switch cases for proposed new command line options. * gm2-libs/DynamicStrings.def (ReverseIndex): New procedure function. * gm2-libs/DynamicStrings.mod: New procedure function. * gm2-compiler/M2LangDump.def: New file. * gm2-compiler/M2LangDump.mod: New file. * gm2-gcc/m2langdump.h: New file. * gm2-gcc/m2pp.def: New file. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/Make-lang.in | 12 +- gcc/m2/gm2-compiler/M2CaseList.mod | 4 +- gcc/m2/gm2-compiler/M2Code.mod | 111 ++-- gcc/m2/gm2-compiler/M2GCCDeclare.def | 21 + gcc/m2/gm2-compiler/M2GCCDeclare.mod | 434 ++++++------ gcc/m2/gm2-compiler/M2LangDump.def | 102 +++ gcc/m2/gm2-compiler/M2LangDump.mod | 802 +++++++++++++++++++++++ gcc/m2/gm2-compiler/M2Options.def | 68 +- gcc/m2/gm2-compiler/M2Options.mod | 135 +++- gcc/m2/gm2-compiler/M2Quads.def | 8 +- gcc/m2/gm2-compiler/M2Quads.mod | 392 +++++++---- gcc/m2/gm2-compiler/M2Scope.mod | 18 +- gcc/m2/gm2-compiler/SymbolConversion.def | 9 +- gcc/m2/gm2-compiler/SymbolConversion.mod | 25 +- gcc/m2/gm2-gcc/m2langdump.h | 41 ++ gcc/m2/gm2-gcc/m2misc.cc | 6 +- gcc/m2/gm2-gcc/m2options.h | 9 + gcc/m2/{ => gm2-gcc}/m2pp.cc | 309 ++++++--- gcc/m2/gm2-gcc/m2pp.def | 45 ++ gcc/m2/{ => gm2-gcc}/m2pp.h | 38 +- gcc/m2/gm2-gcc/m2statement.cc | 7 +- gcc/m2/gm2-lang.cc | 38 +- gcc/m2/gm2-libs/DynamicStrings.def | 20 +- gcc/m2/gm2-libs/DynamicStrings.mod | 46 +- 24 files changed, 2139 insertions(+), 561 deletions(-) create mode 100644 gcc/m2/gm2-compiler/M2LangDump.def create mode 100644 gcc/m2/gm2-compiler/M2LangDump.mod create mode 100644 gcc/m2/gm2-gcc/m2langdump.h rename gcc/m2/{ => gm2-gcc}/m2pp.cc (90%) create mode 100644 gcc/m2/gm2-gcc/m2pp.def rename gcc/m2/{ => gm2-gcc}/m2pp.h (54%) diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in index 33b9ce8d8e88..49ec168b2058 100644 --- a/gcc/m2/Make-lang.in +++ b/gcc/m2/Make-lang.in @@ -519,7 +519,7 @@ SO=-O0 -g -fPIC # Language-specific object files for the gm2 compiler. GM2_C_OBJS = m2/gm2-lang.o \ - m2/m2pp.o \ + m2/gm2-gcc/m2pp.o \ m2/gm2-gcc/m2assert.o \ m2/gm2-gcc/m2block.o \ m2/gm2-gcc/m2builtins.o \ @@ -608,11 +608,6 @@ m2/gm2-lang.o: $(srcdir)/m2/gm2-lang.cc gt-m2-gm2-lang.h $(GCC_HEADER_DEPENDENCI $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) $(POSTCOMPILE) -m2/m2pp.o : $(srcdir)/m2/m2pp.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) - $(COMPILER) $(CM2DEP) -c -g -DGM2 $(ALL_COMPILERFLAGS) \ - $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION) - $(POSTCOMPILE) - m2/gm2-gcc/rtegraph.o: $(srcdir)/m2/gm2-gcc/rtegraph.cc $(GCC_HEADER_DEPENDENCIES_FOR_M2) \ gt-m2-rtegraph.h -test -d $(@D)/$(DEPDIR) || $(mkinstalldirs) $(@D)/$(DEPDIR) @@ -761,6 +756,7 @@ GM2-COMP-BOOT-DEFS = \ M2GCCDeclare.def \ M2GenGCC.def \ M2Graph.def \ + M2LangDump.def \ M2LexBuf.def \ M2MetaError.def \ M2Optimize.def \ @@ -834,6 +830,7 @@ GM2-COMP-BOOT-MODS = \ M2GCCDeclare.mod \ M2GenGCC.mod \ M2Graph.mod \ + M2LangDump.mod \ M2LexBuf.mod \ M2MetaError.mod \ M2Optimize.mod \ @@ -886,6 +883,7 @@ GM2-GCC-DEFS = \ m2expr.def \ m2linemap.def \ m2misc.def \ + m2pp.def \ m2statement.def \ m2top.def \ m2tree.def \ @@ -1040,6 +1038,7 @@ GM2-COMP-DEFS = \ M2GCCDeclare.def \ M2GenGCC.def \ M2Graph.def \ + M2LangDump.def \ M2LexBuf.def \ M2MetaError.def \ M2Optimize.def \ @@ -1110,6 +1109,7 @@ GM2-COMP-MODS = \ M2GCCDeclare.mod \ M2GenGCC.mod \ M2Graph.mod \ + M2LangDump.mod \ M2LexBuf.mod \ M2MetaError.mod \ M2Optimize.mod \ diff --git a/gcc/m2/gm2-compiler/M2CaseList.mod b/gcc/m2/gm2-compiler/M2CaseList.mod index 08a6052e7960..b98f55375bd3 100644 --- a/gcc/m2/gm2-compiler/M2CaseList.mod +++ b/gcc/m2/gm2-compiler/M2CaseList.mod @@ -39,8 +39,8 @@ FROM m2type IMPORT GetMinFrom ; FROM m2expr IMPORT GetIntegerOne, CSTIntToString, CSTIntToChar ; FROM Storage IMPORT ALLOCATE ; FROM M2Base IMPORT IsExpressionCompatible, Char ; -FROM M2Printf IMPORT printf1 ; FROM M2LexBuf IMPORT TokenToLocation ; +FROM NumberIO IMPORT WriteCard ; FROM SymbolTable IMPORT NulSym, IsConst, IsFieldVarient, IsRecord, IsRecordField, GetVarientTag, GetType, ForeachLocalSymDo, GetSymName, IsEnumeration, SkipType, NoOfElements, GetNth, @@ -1191,7 +1191,7 @@ end InRangeList ; PROCEDURE WriteCase (c: CARDINAL) ; BEGIN (* this debugging PROCEDURE should be finished. *) - printf1 ("%d", c) + WriteCard (c, 0) END WriteCase ; diff --git a/gcc/m2/gm2-compiler/M2Code.mod b/gcc/m2/gm2-compiler/M2Code.mod index 010e1d02fca8..ea1126d756e0 100644 --- a/gcc/m2/gm2-compiler/M2Code.mod +++ b/gcc/m2/gm2-compiler/M2Code.mod @@ -23,10 +23,12 @@ IMPLEMENTATION MODULE M2Code ; FROM SYSTEM IMPORT WORD ; -FROM M2Options IMPORT Statistics, DisplayQuadruples, OptimizeUncalledProcedures, - (* OptimizeDynamic, *) OptimizeCommonSubExpressions, - StyleChecking, Optimizing, WholeProgram ; +FROM M2Options IMPORT Statistics, OptimizeUncalledProcedures, + OptimizeCommonSubExpressions, + StyleChecking, Optimizing, WholeProgram, + DumpLangDecl, DumpLangGimple ; +FROM M2LangDump IMPORT CreateDumpDecl, CloseDumpDecl, MakeGimpleTemplate ; FROM M2Error IMPORT InternalError ; FROM M2Students IMPORT StudentVariableCheck ; @@ -41,7 +43,8 @@ FROM M2Printf IMPORT printf2, printf1, printf0 ; FROM NameKey IMPORT Name ; FROM M2Batch IMPORT ForeachSourceModuleDo ; -FROM M2Quads IMPORT CountQuads, GetFirstQuad, DisplayQuadList, DisplayQuadRange, +FROM M2Quads IMPORT CountQuads, GetFirstQuad, + DumpQuadruples, DisplayQuadRange, BackPatchSubrangesAndOptParam, LoopAnalysis, ForLoopAnalysis, GetQuad, QuadOperator ; @@ -59,7 +62,8 @@ FROM M2GenGCC IMPORT ConvertQuadsToTree ; FROM M2GCCDeclare IMPORT FoldConstants, StartDeclareScope, DeclareProcedure, InitDeclarations, - DeclareModuleVariables, MarkExported ; + DeclareModuleVariables, MarkExported, + DumpFilteredResolver, DumpFilteredDefinitive ; FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock, ForeachScopeBlockDo2, ForeachScopeBlockDo3 ; @@ -71,12 +75,14 @@ FROM m2flex IMPORT GetTotalLines ; FROM FIO IMPORT FlushBuffer, StdOut ; FROM M2Quiet IMPORT qprintf0 ; FROM M2SSA IMPORT DiscoverSSA ; +FROM m2pp IMPORT CreateDumpGimple, CloseDumpGimple ; +FROM DynamicStrings IMPORT String, KillString ; CONST - MaxOptimTimes = 10 ; (* upper limit of no of times we run through all optimization *) - Debugging = TRUE ; - + MaxOptimTimes = 10 ; (* upper limit of no of times we run through all optimization *) + Debugging = TRUE ; + TraceQuadruples = FALSE ; VAR Total, @@ -139,11 +145,7 @@ BEGIN printf1 ('Total source lines compiled : %6d\n', Count) ; FlushBuffer (StdOut) END ; - IF DisplayQuadruples - THEN - printf0 ('after all front end optimization\n') ; - DisplayQuadList - END + DumpQuadruples ('after all front end optimization\n') END OptimizationAnalysis ; @@ -169,11 +171,23 @@ END RemoveUnreachableCode ; PROCEDURE DoModuleDeclare ; BEGIN + IF DumpLangDecl + THEN + CreateDumpDecl ("symbol resolver of filtered symbols\n") ; + DumpFilteredResolver + END ; IF WholeProgram THEN ForeachSourceModuleDo (StartDeclareScope) ELSE StartDeclareScope (GetMainModule ()) + END ; + IF DumpLangDecl + THEN + CloseDumpDecl ; + CreateDumpDecl ("definitive declaration of filtered symbols\n") ; + DumpFilteredDefinitive ; + CloseDumpDecl END END DoModuleDeclare ; @@ -198,11 +212,17 @@ END PrintModule ; *) PROCEDURE DoCodeBlock ; +VAR + filename: String ; + len : CARDINAL ; BEGIN - IF WholeProgram + IF DumpLangGimple THEN - (* ForeachSourceModuleDo(PrintModule) ; *) - CodeBlock (GetMainModule ()) + filename := MakeGimpleTemplate (len) ; + CreateDumpGimple (filename, len) ; + filename := KillString (filename) ; + CodeBlock (GetMainModule ()) ; + CloseDumpGimple ELSE CodeBlock (GetMainModule ()) END @@ -231,6 +251,7 @@ END DetermineSubExpTemporaries ; PROCEDURE Code ; BEGIN + DumpQuadruples ('before any optimization\n') ; CheckHiddenTypeAreAddress ; SetPassToNoPass ; BackPatchSubrangesAndOptParam ; @@ -238,11 +259,7 @@ BEGIN ForLoopAnalysis ; (* must be done before any optimization as the index variable increment quad might change *) - IF DisplayQuadruples - THEN - printf0 ('before any optimization\n') ; - DisplayQuadList - END ; + DumpQuadruples ('before declaring symbols to gcc\n') ; (* now is a suitable time to check for student errors as *) (* we know all the front end symbols must be resolved. *) @@ -258,20 +275,9 @@ BEGIN InitDeclarations ; (* default and fixed sized types are all declared from now on. *) RemoveUnreachableCode ; - - IF DisplayQuadruples - THEN - printf0 ('after dead procedure elimination\n') ; - DisplayQuadList - END ; - + DumpQuadruples ('after dead procedure elimination\n') ; DetermineSubExpTemporaries ; - - IF DisplayQuadruples - THEN - printf0 ('after identifying simple subexpression temporaries\n') ; - DisplayQuadList - END ; + DumpQuadruples ('after identifying simple subexpression temporaries\n') ; qprintf0 (' symbols to gcc trees\n') ; DoModuleDeclare ; @@ -377,20 +383,6 @@ BEGIN END Init ; -(* - DisplayQuadsInScope - -*) - -(* -PROCEDURE DisplayQuadsInScope (sb: ScopeBlock) ; -BEGIN - printf0 ('Quads in scope\n') ; - ForeachScopeBlockDo (sb, DisplayQuadRange) ; - printf0 ('===============\n') -END DisplayQuadsInScope ; -*) - - (* OptimizeScopeBlock - *) @@ -416,21 +408,6 @@ BEGIN END OptimizeScopeBlock ; -(* - DisplayQuadNumbers - the range, start..end. -*) - -(* -PROCEDURE DisplayQuadNumbers (start, end: CARDINAL) ; -BEGIN - IF DisplayQuadruples - THEN - printf2 ('Coding [%d..%d]\n', start, end) - END -END DisplayQuadNumbers ; -*) - - (* CodeProceduresWithinBlock - codes the procedures within the module scope. *) @@ -465,7 +442,7 @@ VAR sb: ScopeBlock ; n : Name ; BEGIN - IF DisplayQuadruples + IF TraceQuadruples THEN n := GetSymName (scope) ; printf1 ('before coding block %a\n', n) @@ -474,7 +451,7 @@ BEGIN OptimizeScopeBlock (sb) ; IF IsProcedure (scope) THEN - IF DisplayQuadruples + IF TraceQuadruples THEN n := GetSymName(scope) ; printf1('before coding procedure %a\n', n) ; @@ -484,7 +461,7 @@ BEGIN ForeachScopeBlockDo2 (sb, ConvertQuadsToTree) ELSIF IsModuleWithinProcedure(scope) THEN - IF DisplayQuadruples + IF TraceQuadruples THEN n := GetSymName(scope) ; printf1('before coding module %a within procedure\n', n) ; @@ -494,7 +471,7 @@ BEGIN ForeachScopeBlockDo2 (sb, ConvertQuadsToTree) ; ForeachProcedureDo(scope, CodeBlock) ELSE - IF DisplayQuadruples + IF TraceQuadruples THEN n := GetSymName(scope) ; printf1('before coding module %a\n', n) ; diff --git a/gcc/m2/gm2-compiler/M2GCCDeclare.def b/gcc/m2/gm2-compiler/M2GCCDeclare.def index 2e77695678ca..28bbb1a41b58 100644 --- a/gcc/m2/gm2-compiler/M2GCCDeclare.def +++ b/gcc/m2/gm2-compiler/M2GCCDeclare.def @@ -223,6 +223,27 @@ PROCEDURE GetTypeMax (type: CARDINAL) : CARDINAL ; PROCEDURE PrintSym (sym: CARDINAL) ; +(* + IncludeDumpSymbol - include sym into the watch list and all syms dependants. +*) + +PROCEDURE IncludeDumpSymbol (sym: CARDINAL) ; + + +(* + DumpFilteredResolver - dumps the gimple or tree representation of all watched symbols. +*) + +PROCEDURE DumpFilteredResolver ; + + +(* + DumpFilteredDefinitive - dumps the gimple or tree representation of all watched symbols. +*) + +PROCEDURE DumpFilteredDefinitive ; + + (* InitDeclarations - initializes default types and the source filename. *) diff --git a/gcc/m2/gm2-compiler/M2GCCDeclare.mod b/gcc/m2/gm2-compiler/M2GCCDeclare.mod index 6f0a749c5263..9607085b9674 100644 --- a/gcc/m2/gm2-compiler/M2GCCDeclare.mod +++ b/gcc/m2/gm2-compiler/M2GCCDeclare.mod @@ -35,11 +35,11 @@ FROM ASCII IMPORT nul ; FROM Storage IMPORT ALLOCATE ; FROM M2Debug IMPORT Assert ; FROM M2Quads IMPORT DisplayQuadRange ; +FROM m2pp IMPORT DumpGimpleFd ; IMPORT FIO ; -FROM M2Options IMPORT DisplayQuadruples, - GenerateDebugging, GenerateLineDebug, Iso, Optimizing, WholeProgram, +FROM M2Options IMPORT GenerateDebugging, GenerateLineDebug, Iso, Optimizing, WholeProgram, ScaffoldStatic, GetRuntimeModuleOverride ; FROM M2AsmUtil IMPORT GetFullSymName, GetFullScopeAsmName ; @@ -52,7 +52,10 @@ FROM FormatStrings IMPORT Sprintf1 ; FROM M2LexBuf IMPORT TokenToLineNo, FindFileNameFromToken, TokenToLocation, UnknownTokenNo, BuiltinTokenNo ; FROM M2MetaError IMPORT MetaError1, MetaError2, MetaError3 ; FROM M2Error IMPORT FlushErrors, InternalError ; -FROM M2Printf IMPORT printf0, printf1, printf2, printf3 ; +FROM M2LangDump IMPORT GetDumpFile ; + +FROM M2Printf IMPORT printf0, printf1, printf2, printf3, + fprintf0, fprintf1, fprintf2, fprintf3 ; FROM Indexing IMPORT Index, InitIndex, PutIndice, GetIndice, InBounds, IncludeIndiceIntoIndex, HighIndice, @@ -206,14 +209,12 @@ TYPE tobesolvedbyquads, finishedsetarray) ; doDeclareProcedure = PROCEDURE (CARDINAL, CARDINAL) ; - - CONST - Debugging = FALSE ; - Progress = FALSE ; - EnableSSA = FALSE ; - EnableWatch = FALSE ; - + Debugging = FALSE ; + Progress = FALSE ; + EnableSSA = FALSE ; + EnableWatch = TRUE ; + TraceQuadruples = FALSE ; TYPE Group = POINTER TO RECORD @@ -256,6 +257,7 @@ VAR PROCEDURE mystop ; BEGIN END mystop ; + (* *************************************************** *) (* PrintNum - @@ -340,8 +342,7 @@ BEGIN THEN IncludeElementIntoSet (WatchList, sym) ; WalkDependants (sym, AddSymToWatch) ; - printf1 ("watching symbol %d\n", sym) ; - FIO.FlushBuffer (FIO.StdOut) + fprintf1 (GetDumpFile (), "%d, ", sym) END END AddSymToWatch ; @@ -377,12 +378,11 @@ PROCEDURE doInclude (l: Set; a: ARRAY OF CHAR; sym: CARDINAL) ; BEGIN IF NOT IsElementInSet(l, sym) THEN - printf0('rule: ') ; + fprintf0 (GetDumpFile (), 'rule: ') ; WriteRule ; - printf0(' ') ; - printf1(a, sym) ; - FIO.FlushBuffer(FIO.StdOut) ; - IncludeElementIntoSet(l, sym) + fprintf0 (GetDumpFile (), ' ') ; + fprintf1 (GetDumpFile (), a, sym) ; + IncludeElementIntoSet (l, sym) END END doInclude ; @@ -420,11 +420,7 @@ BEGIN partiallydeclared : IncludeElementIntoSet (GlobalGroup^.PartiallyDeclared, sym) | heldbyalignment : IncludeElementIntoSet (GlobalGroup^.HeldByAlignment, sym) | finishedalignment : IncludeElementIntoSet (GlobalGroup^.FinishedAlignment, sym) | - todolist : IncludeElementIntoSet (GlobalGroup^.ToDoList, sym) ; - IF EnableWatch AND (sym = 919) - THEN - IncludeElementIntoSet (WatchList, 919) - END | + todolist : IncludeElementIntoSet (GlobalGroup^.ToDoList, sym) | niltypedarrays : IncludeElementIntoSet (GlobalGroup^.NilTypedArrays, sym) | finishedsetarray : IncludeElementIntoSet (GlobalGroup^.FinishedSetArray, sym) @@ -443,11 +439,10 @@ PROCEDURE doExclude (l: Set; a: ARRAY OF CHAR; sym: CARDINAL) ; BEGIN IF IsElementInSet (l, sym) THEN - printf0 ('rule: ') ; + fprintf0 (GetDumpFile (), 'rule: ') ; WriteRule ; - printf0 (' ') ; - printf1 (a, sym) ; - FIO.FlushBuffer (FIO.StdOut) ; + fprintf0 (GetDumpFile (), ' ') ; + fprintf1 (GetDumpFile (), a, sym) ; ExcludeElementFromSet (l, sym) END END doExclude ; @@ -2784,7 +2779,7 @@ VAR copy: Group ; loop: CARDINAL ; BEGIN - IF DisplayQuadruples + IF TraceQuadruples THEN DisplayQuadRange (scope, start, end) END ; @@ -2800,7 +2795,7 @@ BEGIN END ; IF loop = DebugLoop THEN - IF DisplayQuadruples + IF TraceQuadruples THEN DisplayQuadRange (scope, start, end) END ; @@ -3052,41 +3047,6 @@ PROCEDURE StartDeclareScope (scope: CARDINAL) ; VAR n: Name ; BEGIN - (* AddSymToWatch (8821) ; *) - (* AddSymToWatch (1157) ; *) (* watch goes here *) - (* AddSymToWatch(TryFindSymbol('IOLink', 'DeviceId')) ; *) - (* AddSymToWatch(819) ; *) - (* - AddSymToWatch(2125) ; (* watch goes here *) - DebugSets ; - *) - (* - AddSymToWatch(2125) ; (* watch goes here *) - *) - (* - IncludeElementIntoSet(WatchList, 369) ; - IncludeElementIntoSet(WatchList, 709) ; - *) - (* - IncludeElementIntoSet(WatchList, 1006) ; - *) - (* AddSymToWatch(8) ; *) - (* IncludeElementIntoSet(WatchList, 4188) ; *) - (* AddSymToWatch(1420) ; *) - (* AddSymToWatch(5889) ; *) - (* IncludeElementIntoSet(WatchList, 717) ; *) - (* IncludeElementIntoSet(WatchList, 829) ; *) - (* IncludeElementIntoSet(WatchList, 2714) ; *) - (* IncludeElementIntoSet(WatchList, 23222) ; *) - (* IncludeElementIntoSet(WatchList, 1104) ; *) - (* IncludeElementIntoSet(WatchList, 859) ; *) - (* IncludeElementIntoSet(WatchList, 858) ; *) - - (* IncludeElementIntoSet(WatchList, 720) ; *) - (* IncludeElementIntoSet(WatchList, 706) ; *) - (* IncludeElementIntoSet(WatchList, 1948) ; *) - (* IncludeElementIntoSet(WatchList, 865) ; *) - IF Debugging THEN n := GetSymName (scope) ; @@ -3117,15 +3077,83 @@ END EndDeclareScope ; (* - PreAddModGcc - adds a relationship between sym and t. - It also determines whether an unbounded - for sym is required and if so this is also - created. + IncludeDumpSymbol - include sym into the watch list and all syms dependants. +*) + +PROCEDURE IncludeDumpSymbol (sym: CARDINAL) ; +BEGIN + IF sym # NulSym + THEN + AddSymToWatch (sym) + (* + fprintf0 (GetDumpFile (), "\n") ; + PrintVerbose (sym) ; + fprintf0 (GetDumpFile (), "\n") + *) + END +END IncludeDumpSymbol ; + + +(* + DumpResolver - dumps the m2 representation of sym. +*) + +PROCEDURE DumpResolver (sym: CARDINAL) ; +BEGIN + fprintf1 (GetDumpFile (), "dump filtered symbol %d and dependants\n", sym) ; + PrintVerbose (sym) ; +END DumpResolver ; + + +(* + DumpFilteredResolver - dumps the gimple or tree representation of all watched symbols. +*) + +PROCEDURE DumpFilteredResolver ; +BEGIN + ForeachElementInSetDo (WatchList, DumpResolver) +END DumpFilteredResolver ; + + +(* + DumpDefinitive - dumps the m2 and m2 gimple representation of sym. +*) + +PROCEDURE DumpDefinitive (sym: CARDINAL) ; +VAR + fd: INTEGER ; +BEGIN + fprintf1 (GetDumpFile (), "\nm2 symbol synopsis: %d\n", sym) ; + PrintVerbose (sym) ; + IF GccKnowsAbout (sym) + THEN + fprintf1 (GetDumpFile (), "\nm2 gimple: %d", sym) ; + FIO.FlushBuffer (GetDumpFile ()) ; + fd := FIO.GetUnixFileDescriptor (GetDumpFile ()) ; + DumpGimpleFd (fd, Mod2Gcc (sym)) + ELSE + fprintf1 (GetDumpFile (), "\nno m2 gimple for %d\n", sym) + END +END DumpDefinitive ; + + +(* + DumpFilteredDefinitive - dumps the gimple or tree representation of all watched symbols. +*) + +PROCEDURE DumpFilteredDefinitive ; +BEGIN + ForeachElementInSetDo (WatchList, DumpDefinitive) +END DumpFilteredDefinitive ; + + +(* + PreAddModGcc - adds a relationship between sym and tree. *) -PROCEDURE PreAddModGcc (sym: CARDINAL; t: Tree) ; +PROCEDURE PreAddModGcc (sym: CARDINAL; tree: Tree) ; BEGIN - AddModGcc(sym, t) + AddModGcc (sym, tree) END PreAddModGcc ; @@ -3829,18 +3857,18 @@ PROCEDURE IncludeGetNth (l: List; sym: CARDINAL) ; VAR i: CARDINAL ; BEGIN - printf0 (' ListOfSons [') ; + fprintf0 (GetDumpFile (), ' ListOfSons [') ; i := 1 ; WHILE GetNth (sym, i) # NulSym DO IF i>1 THEN - printf0 (', ') + fprintf0 (GetDumpFile (), ', ') END ; IncludeItemIntoList (l, GetNth(sym, i)) ; PrintTerse (GetNth (sym, i)) ; INC (i) END ; - printf0 (']') + fprintf0 (GetDumpFile (), ']') END IncludeGetNth ; @@ -3855,17 +3883,17 @@ BEGIN t := GetSType(sym) ; IF t#NulSym THEN - printf0(' type [') ; + fprintf0 (GetDumpFile(), ' type [') ; PrintTerse(t) ; IncludeItemIntoList(l, t) ; - printf0(']') ; + fprintf0 (GetDumpFile(), ']') ; t := GetVarBackEndType(sym) ; IF t#NulSym THEN - printf0(' gcc type [') ; + fprintf0 (GetDumpFile(), ' gcc type [') ; PrintTerse(t) ; IncludeItemIntoList(l, t) ; - printf0(']') + fprintf0 (GetDumpFile(), ']') END END END IncludeType ; @@ -3882,10 +3910,10 @@ BEGIN t := GetArraySubscript(sym) ; IF t#NulSym THEN - printf0(' subrange [') ; + fprintf0 (GetDumpFile(), ' subrange [') ; PrintTerse(t) ; IncludeItemIntoList(l, t) ; - printf0(']') ; + fprintf0 (GetDumpFile(), ']') ; END END IncludeSubscript ; @@ -3896,7 +3924,7 @@ END IncludeSubscript ; PROCEDURE PrintLocalSymbol (sym: CARDINAL) ; BEGIN - PrintTerse(sym) ; printf0(', ') + PrintTerse(sym) ; fprintf0 (GetDumpFile(), ', ') END PrintLocalSymbol ; @@ -3906,9 +3934,9 @@ END PrintLocalSymbol ; PROCEDURE PrintLocalSymbols (sym: CARDINAL) ; BEGIN - printf0('Local Symbols {') ; + fprintf0 (GetDumpFile(), 'Local Symbols {') ; ForeachLocalSymDo(sym, PrintLocalSymbol) ; - printf0('}') + fprintf0 (GetDumpFile(), '}') END PrintLocalSymbols ; @@ -3920,9 +3948,9 @@ PROCEDURE IncludeGetVarient (l: List; sym: CARDINAL) ; BEGIN IF GetVarient(sym)#NulSym THEN - printf0(' Varient [') ; + fprintf0 (GetDumpFile(), ' Varient [') ; PrintTerse(GetVarient(sym)) ; - printf0(']') ; + fprintf0 (GetDumpFile(), ']') ; IncludeItemIntoList(l, GetVarient(sym)) END END IncludeGetVarient ; @@ -3967,7 +3995,7 @@ BEGIN tokenno := GetDeclaredMod(sym) ; filename := FindFileNameFromToken(tokenno, 0) ; lineno := TokenToLineNo(tokenno, 0) ; - printf2(" declared in %s:%d", filename, lineno) + fprintf2 (GetDumpFile (), " declared in %s:%d", filename, lineno) END PrintDeclared ; @@ -3984,7 +4012,7 @@ BEGIN align := GetAlignment(sym) ; IF align#NulSym THEN - printf1(" aligned [%d]", align) + fprintf1 (GetDumpFile(), " aligned [%d]", align) END END END PrintAlignment ; @@ -3996,10 +4024,10 @@ END PrintAlignment ; PROCEDURE IncludeGetParent (l: List; sym: CARDINAL) ; BEGIN - printf0(' Parent [') ; + fprintf0 (GetDumpFile(), ' Parent [') ; IncludeItemIntoList(l, GetParent(sym)) ; PrintTerse(GetParent(sym)) ; - printf0(']') + fprintf0 (GetDumpFile(), ']') END IncludeGetParent ; @@ -4013,12 +4041,12 @@ BEGIN THEN IF IsDeclaredPacked(sym) THEN - printf0(' packed') + fprintf0 (GetDumpFile(), ' packed') ELSE - printf0(' unpacked') + fprintf0 (GetDumpFile(), ' unpacked') END ELSE - printf0(' unknown if packed') + fprintf0 (GetDumpFile(), ' unknown if packed') END END PrintDecl ; @@ -4036,7 +4064,7 @@ BEGIN line := TokenToLineNo (GetDeclaredMod (sym), 0) ; scope := GetScope (sym) ; name := GetSymName (scope) ; - printf3 (' scope %a:%d %d', name, line, scope) + fprintf3 (GetDumpFile (), ' scope %a:%d %d', name, line, scope) END PrintScope ; @@ -4049,23 +4077,23 @@ VAR n: Name ; BEGIN n := GetSymName (sym) ; - printf2('sym %d IsProcedure (%a)', sym, n); + fprintf2 (GetDumpFile (), 'sym %d IsProcedure (%a)', sym, n); IF IsProcedureReachable(sym) THEN - printf0(' IsProcedureReachable') + fprintf0 (GetDumpFile(), ' IsProcedureReachable') END ; PrintScope (sym) ; IF IsExtern (sym) THEN - printf0 (' extern') + fprintf0 (GetDumpFile (), ' extern') END ; IF IsPublic (sym) THEN - printf0 (' public') + fprintf0 (GetDumpFile (), ' public') END ; IF IsCtor (sym) THEN - printf0 (' ctor') + fprintf0 (GetDumpFile (), ' ctor') END ; PrintDeclared(sym) END PrintProcedure ; @@ -4084,22 +4112,22 @@ BEGIN THEN IF IsConstStringM2 (sym) THEN - printf0 ('a Modula-2 string') + fprintf0 (GetDumpFile (), 'a Modula-2 string') ELSIF IsConstStringC (sym) THEN - printf0 (' a C string') + fprintf0 (GetDumpFile (), ' a C string') ELSIF IsConstStringM2nul (sym) THEN - printf0 (' a nul terminated Modula-2 string') + fprintf0 (GetDumpFile (), ' a nul terminated Modula-2 string') ELSIF IsConstStringCnul (sym) THEN - printf0 (' a nul terminated C string') + fprintf0 (GetDumpFile (), ' a nul terminated C string') END ; tokenno := GetDeclaredMod (sym) ; len := GetStringLength (tokenno, sym) ; - printf1 (' length %d', len) + fprintf1 (GetDumpFile (), ' length %d', len) ELSE - printf0 ('is not currently known') + fprintf0 (GetDumpFile (), 'is not currently known') END END PrintString ; @@ -4120,35 +4148,35 @@ BEGIN n := GetSymName(sym) ; IF IsError(sym) THEN - printf2('sym %d IsError (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsError (%a)', sym, n) ELSIF IsDefImp(sym) THEN - printf2('sym %d IsDefImp (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsDefImp (%a)', sym, n) ; IF IsDefinitionForC(sym) THEN - printf0('and IsDefinitionForC') + fprintf0 (GetDumpFile(), 'and IsDefinitionForC') END ; IF IsHiddenTypeDeclared(sym) THEN - printf0(' IsHiddenTypeDeclared') + fprintf0 (GetDumpFile(), ' IsHiddenTypeDeclared') END ; ForeachProcedureDo (sym, PrintProcedure) ELSIF IsModule(sym) THEN - printf2('sym %d IsModule (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsModule (%a)', sym, n) ; IF IsModuleWithinProcedure(sym) THEN - printf0(' and IsModuleWithinProcedure') + fprintf0 (GetDumpFile(), ' and IsModuleWithinProcedure') END ELSIF IsInnerModule(sym) THEN - printf2('sym %d IsInnerModule (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsInnerModule (%a)', sym, n) ELSIF IsUnknown(sym) THEN - printf2('sym %d IsUnknown (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsUnknown (%a)', sym, n) ELSIF IsType(sym) THEN - printf2('sym %d IsType (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsType (%a)', sym, n) ; IncludeType(l, sym) ; PrintAlignment(sym) ELSIF IsProcedure(sym) @@ -4156,72 +4184,72 @@ BEGIN PrintProcedure (sym) ELSIF IsParameter(sym) THEN - printf2('sym %d IsParameter (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsParameter (%a)', sym, n) ; IF GetParameterShadowVar(sym)=NulSym THEN - printf0(' no shadow local variable') + fprintf0 (GetDumpFile(), ' no shadow local variable') ELSE - printf0(' shadow ') ; + fprintf0 (GetDumpFile(), ' shadow ') ; IncludeType(l, GetParameterShadowVar(sym)) (* PrintVerboseFromList(l, GetParameterShadowVar(sym)) *) END ; IncludeType(l, sym) ELSIF IsPointer(sym) THEN - printf2('sym %d IsPointer (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsPointer (%a)', sym, n) ; IncludeType(l, sym) ; PrintAlignment(sym) ELSIF IsRecord(sym) THEN - printf2('sym %d IsRecord (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsRecord (%a)', sym, n) ; PrintLocalSymbols(sym) ; IncludeGetNth(l, sym) ; PrintAlignment(sym) ; PrintDecl(sym) ELSIF IsVarient(sym) THEN - printf2('sym %d IsVarient (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsVarient (%a)', sym, n) ; PrintDecl(sym) ; IncludeGetNth(l, sym) ; IncludeGetVarient(l, sym) ; IncludeGetParent(l, sym) ELSIF IsFieldVarient(sym) THEN - printf2('sym %d IsFieldVarient (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsFieldVarient (%a)', sym, n) ; PrintDecl(sym) ; IncludeGetNth(l, sym) ; IncludeGetVarient(l, sym) ; IncludeGetParent(l, sym) ELSIF IsFieldEnumeration(sym) THEN - printf2('sym %d IsFieldEnumeration (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsFieldEnumeration (%a)', sym, n) ELSIF IsArray(sym) THEN - printf2('sym %d IsArray (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsArray (%a)', sym, n) ; IncludeSubscript(l, sym) ; IncludeType(l, sym) ; PrintAlignment(sym) ELSIF IsEnumeration(sym) THEN - printf2('sym %d IsEnumeration (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsEnumeration (%a)', sym, n) ELSIF IsSet(sym) THEN - printf2('sym %d IsSet (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsSet (%a)', sym, n) ; IncludeType(l, sym) ELSIF IsUnbounded(sym) THEN - printf2('sym %d IsUnbounded (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsUnbounded (%a)', sym, n) ; IncludeUnbounded(l, sym) ELSIF IsPartialUnbounded(sym) THEN - printf2('sym %d IsPartialUnbounded (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsPartialUnbounded (%a)', sym, n) ; IncludePartialUnbounded(l, sym) ELSIF IsRecordField(sym) THEN - printf2('sym %d IsRecordField (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsRecordField (%a)', sym, n) ; IF IsRecordFieldAVarientTag(sym) THEN - printf0(' variant tag') + fprintf0 (GetDumpFile(), ' variant tag') END ; IncludeType(l, sym) ; IncludeGetVarient(l, sym) ; @@ -4230,76 +4258,76 @@ BEGIN PrintDecl(sym) ELSIF IsProcType(sym) THEN - printf2('sym %d IsProcType (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsProcType (%a)', sym, n) ELSIF IsVar(sym) THEN - printf2('sym %d IsVar (%a) declared in ', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsVar (%a) declared in ', sym, n) ; PrintScope (sym) ; - printf0 ('mode ') ; + fprintf0 (GetDumpFile (), 'mode ') ; CASE GetMode(sym) OF - LeftValue : printf0('l ') | - RightValue : printf0('r ') | - ImmediateValue: printf0('i ') | - NoValue : printf0('n ') + LeftValue : fprintf0 (GetDumpFile(), 'l ') | + RightValue : fprintf0 (GetDumpFile(), 'r ') | + ImmediateValue: fprintf0 (GetDumpFile(), 'i ') | + NoValue : fprintf0 (GetDumpFile(), 'n ') END ; IF IsTemporary(sym) THEN - printf0('temporary ') + fprintf0 (GetDumpFile(), 'temporary ') END ; IF IsComponent(sym) THEN - printf0('component ') + fprintf0 (GetDumpFile(), 'component ') END ; IF IsVarHeap (sym) THEN - printf0('heap ') + fprintf0 (GetDumpFile(), 'heap ') END ; - printf0 ('\n') ; + fprintf0 (GetDumpFile (), '\n') ; PrintInitialized (sym) ; IncludeType(l, sym) ELSIF IsConst(sym) THEN - printf2('sym %d IsConst (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsConst (%a)', sym, n) ; IF IsConstString(sym) THEN - printf1 (' also IsConstString (%a) ', n) ; + fprintf1 (GetDumpFile(), ' also IsConstString (%a)', n) ; PrintString (sym) ELSIF IsConstructor(sym) THEN - printf0(' constant constructor ') ; + fprintf0 (GetDumpFile(), ' constant constructor ') ; IncludeType(l, sym) ELSIF IsConstSet(sym) THEN - printf0(' constant constructor set ') ; + fprintf0 (GetDumpFile(), ' constant constructor set ') ; IncludeType(l, sym) ELSE IncludeType(l, sym) END ELSIF IsConstructor(sym) THEN - printf2('sym %d IsConstructor (non constant) (%a)', sym, n) ; + fprintf2 (GetDumpFile(), 'sym %d IsConstructor (non constant) (%a)', sym, n) ; IncludeType(l, sym) ELSIF IsConstLit(sym) THEN - printf2('sym %d IsConstLit (%a)', sym, n) + fprintf2 (GetDumpFile(), 'sym %d IsConstLit (%a)', sym, n) ELSIF IsDummy(sym) THEN - printf2('sym %d IsDummy (%a)', sym, n) + fprintf2 (GetDumpFile(), 'sym %d IsDummy (%a)', sym, n) ELSIF IsTemporary(sym) THEN - printf2('sym %d IsTemporary (%a)', sym, n) + fprintf2 (GetDumpFile(), 'sym %d IsTemporary (%a)', sym, n) ELSIF IsVarAParam(sym) THEN - printf2('sym %d IsVarAParam (%a)', sym, n) + fprintf2 (GetDumpFile(), 'sym %d IsVarAParam (%a)', sym, n) ELSIF IsSubscript(sym) THEN - printf2('sym %d IsSubscript (%a)', sym, n) + fprintf2 (GetDumpFile(), 'sym %d IsSubscript (%a)', sym, n) ELSIF IsSubrange(sym) THEN GetSubrange(sym, high, low) ; - printf2('sym %d IsSubrange (%a)', sym, n) ; + fprintf2 (GetDumpFile(), 'sym %d IsSubrange (%a)', sym, n) ; IF (low#NulSym) AND (high#NulSym) THEN type := GetSType(sym) ; @@ -4307,41 +4335,41 @@ BEGIN THEN IncludeType(l, sym) ; n := GetSymName(type) ; - printf1(' %a', n) + fprintf1 (GetDumpFile(), ' %a', n) END ; n := GetSymName(low) ; n2 := GetSymName(high) ; - printf2('[%a..%a]', n, n2) + fprintf2 (GetDumpFile (), '[%a..%a]', n, n2) END ELSIF IsProcedureVariable(sym) THEN - printf2('sym %d IsProcedureVariable (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsProcedureVariable (%a)', sym, n) ELSIF IsProcedureNested(sym) THEN - printf2('sym %d IsProcedureNested (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsProcedureNested (%a)', sym, n) ELSIF IsAModula2Type(sym) THEN - printf2('sym %d IsAModula2Type (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsAModula2Type (%a)', sym, n) ELSIF IsObject(sym) THEN - printf2('sym %d IsObject (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsObject (%a)', sym, n) ELSIF IsTuple(sym) THEN - printf2('sym %d IsTuple (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsTuple (%a)', sym, n) ; low := GetNth(sym, 1) ; high := GetNth(sym, 2) ; - printf2('%d, %d\n', low, high) + fprintf2 (GetDumpFile (), '%d, %d\n', low, high) ELSIF IsGnuAsm(sym) THEN IF IsGnuAsmVolatile(sym) THEN - printf2('sym %d IsGnuAsmVolatile (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsGnuAsmVolatile (%a)', sym, n) ELSE - printf2('sym %d IsGnuAsm (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsGnuAsm (%a)', sym, n) END ELSIF IsComponent(sym) THEN - printf2('sym %d IsComponent (%a) ', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsComponent (%a) ', sym, n) ; i := 1 ; REPEAT type := GetNth(sym, i) ; @@ -4349,7 +4377,7 @@ BEGIN THEN IncludeItemIntoList(l, type) ; n := GetSymName(type) ; - printf2("[%a %d] ", n, type) ; + fprintf2 (GetDumpFile (), "[%a %d] ", n, type) ; INC(i) END ; UNTIL type=NulSym @@ -4357,9 +4385,9 @@ BEGIN IF IsHiddenType(sym) THEN - printf0(' IsHiddenType') + fprintf0 (GetDumpFile(), ' IsHiddenType') END ; - printf0('\n') + fprintf0 (GetDumpFile(), '\n') END PrintVerboseFromList ; @@ -4391,7 +4419,7 @@ END PrintVerbose ; PROCEDURE PrintSym (sym: CARDINAL) ; BEGIN printf1 ('information about symbol: %d\n', sym) ; - printf0 ('==============================\n') ; + fprintf0 (GetDumpFile (), '==============================\n') ; PrintVerbose (sym) END PrintSym ; @@ -4404,7 +4432,7 @@ END PrintSym ; PROCEDURE PrintSymbol (sym: CARDINAL) ; BEGIN PrintTerse(sym) ; - printf0('\n') + fprintf0 (GetDumpFile(), '\n') END PrintSymbol ; ******************************************* *) @@ -4419,127 +4447,127 @@ BEGIN n := GetSymName(sym) ; IF IsError(sym) THEN - printf2('sym %d IsError (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsError (%a)', sym, n) ELSIF IsDefImp(sym) THEN - printf2('sym %d IsDefImp (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsDefImp (%a)', sym, n) ; IF IsDefinitionForC(sym) THEN - printf0('and IsDefinitionForC') + fprintf0 (GetDumpFile(), 'and IsDefinitionForC') END ; IF IsHiddenTypeDeclared(sym) THEN - printf0(' IsHiddenTypeDeclared') + fprintf0 (GetDumpFile(), ' IsHiddenTypeDeclared') END ELSIF IsModule(sym) THEN - printf2('sym %d IsModule (%a)', sym, n) ; + fprintf2 (GetDumpFile (), 'sym %d IsModule (%a)', sym, n) ; IF IsModuleWithinProcedure(sym) THEN - printf0(' and IsModuleWithinProcedure') + fprintf0 (GetDumpFile(), ' and IsModuleWithinProcedure') END ELSIF IsInnerModule(sym) THEN - printf2('sym %d IsInnerModule (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsInnerModule (%a)', sym, n) ELSIF IsUnknown(sym) THEN - printf2('sym %d IsUnknown (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsUnknown (%a)', sym, n) ELSIF IsType(sym) THEN - printf2('sym %d IsType (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsType (%a)', sym, n) ELSIF IsProcedure(sym) THEN - printf2('sym %d IsProcedure (%a)', sym, n); + fprintf2 (GetDumpFile (), 'sym %d IsProcedure (%a)', sym, n); IF IsProcedureReachable(sym) THEN - printf0(' and IsProcedureReachable') + fprintf0 (GetDumpFile(), ' and IsProcedureReachable') END ELSIF IsParameter(sym) THEN - printf2('sym %d IsParameter (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsParameter (%a)', sym, n) ELSIF IsPointer(sym) THEN - printf2('sym %d IsPointer (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsPointer (%a)', sym, n) ELSIF IsRecord(sym) THEN - printf2('sym %d IsRecord (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsRecord (%a)', sym, n) ELSIF IsVarient(sym) THEN - printf2('sym %d IsVarient (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsVarient (%a)', sym, n) ELSIF IsFieldVarient(sym) THEN - printf2('sym %d IsFieldVarient (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsFieldVarient (%a)', sym, n) ELSIF IsFieldEnumeration(sym) THEN - printf2('sym %d IsFieldEnumeration (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsFieldEnumeration (%a)', sym, n) ELSIF IsArray(sym) THEN - printf2('sym %d IsArray (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsArray (%a)', sym, n) ELSIF IsEnumeration(sym) THEN - printf2('sym %d IsEnumeration (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsEnumeration (%a)', sym, n) ELSIF IsSet(sym) THEN - printf2('sym %d IsSet (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsSet (%a)', sym, n) ELSIF IsUnbounded(sym) THEN - printf2('sym %d IsUnbounded (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsUnbounded (%a)', sym, n) ELSIF IsRecordField(sym) THEN - printf2('sym %d IsRecordField (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsRecordField (%a)', sym, n) ELSIF IsProcType(sym) THEN - printf2('sym %d IsProcType (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsProcType (%a)', sym, n) ELSIF IsVar(sym) THEN - printf2('sym %d IsVar (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsVar (%a)', sym, n) ELSIF IsConstString(sym) THEN - printf2('sym %d IsConstString (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsConstString (%a)', sym, n) ELSIF IsConst(sym) THEN - printf2('sym %d IsConst (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsConst (%a)', sym, n) ELSIF IsConstLit(sym) THEN - printf2('sym %d IsConstLit (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsConstLit (%a)', sym, n) ELSIF IsDummy(sym) THEN - printf2('sym %d IsDummy (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsDummy (%a)', sym, n) ELSIF IsTemporary(sym) THEN - printf2('sym %d IsTemporary (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsTemporary (%a)', sym, n) ELSIF IsVarAParam(sym) THEN - printf2('sym %d IsVarAParam (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsVarAParam (%a)', sym, n) ELSIF IsSubscript(sym) THEN - printf2('sym %d IsSubscript (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsSubscript (%a)', sym, n) ELSIF IsSubrange(sym) THEN - printf2('sym %d IsSubrange (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsSubrange (%a)', sym, n) ELSIF IsProcedureVariable(sym) THEN - printf2('sym %d IsProcedureVariable (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsProcedureVariable (%a)', sym, n) ELSIF IsProcedureNested(sym) THEN - printf2('sym %d IsProcedureNested (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsProcedureNested (%a)', sym, n) ELSIF IsAModula2Type(sym) THEN - printf2('sym %d IsAModula2Type (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsAModula2Type (%a)', sym, n) ELSIF IsGnuAsm(sym) THEN - printf2('sym %d IsGnuAsm (%a)', sym, n) + fprintf2 (GetDumpFile (), 'sym %d IsGnuAsm (%a)', sym, n) ELSIF IsImport (sym) THEN - printf1('sym %d IsImport', sym) + fprintf1 (GetDumpFile(), 'sym %d IsImport', sym) ELSIF IsImportStatement (sym) THEN - printf1('sym %d IsImportStatement', sym) + fprintf1 (GetDumpFile(), 'sym %d IsImportStatement', sym) END ; IF IsHiddenType(sym) THEN - printf0(' IsHiddenType') + fprintf0 (GetDumpFile(), ' IsHiddenType') END END PrintTerse ; diff --git a/gcc/m2/gm2-compiler/M2LangDump.def b/gcc/m2/gm2-compiler/M2LangDump.def new file mode 100644 index 000000000000..5d4c9b600a10 --- /dev/null +++ b/gcc/m2/gm2-compiler/M2LangDump.def @@ -0,0 +1,102 @@ +(* M2LangDump.def provides support routines for the -flang-dump. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley <gaiusmod2@gmail.com>. + +This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GNU Modula-2 is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Modula-2; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. *) + +DEFINITION MODULE M2LangDump ; + +FROM m2tree IMPORT Tree ; +FROM DynamicStrings IMPORT String ; +FROM FIO IMPORT File ; + + +(* + IsDumpRequiredTree - return TRUE if the gcc tree should be dumped. + If no filter is specified it will always return default. +*) + +PROCEDURE IsDumpRequiredTree (tree: Tree; default: BOOLEAN) : BOOLEAN ; + + +(* + IsDumpRequired - return TRUE if symbol sym should be dumped + according to the rules of the filter. + If no filter is specified it will always return default. + The filter is a comma separated list. Each element + of the list can specify a symbol three ways. + Firstly by DECL name for example: m2pim_NumberIO_HexToStr + Secondly by qualified scope: [pathname.]NumberIO.HexToStr + Thirdly by filename and scope: NumberIO.mod:HexToStr +*) + +PROCEDURE IsDumpRequired (sym: CARDINAL; default: BOOLEAN) : BOOLEAN ; + + +(* + MakeQuadTemplate - return a template for the quad dump file. +*) + +PROCEDURE MakeQuadTemplate () : String ; + + +(* + MakeGimpleTemplate - return a template for the gimple dump file and assign + len to the max number of characters required to complete + a template. +*) + +PROCEDURE MakeGimpleTemplate (VAR len: CARDINAL) : String ; + + +(* + GetDumpFile - return the dump output file. +*) + +PROCEDURE GetDumpFile () : File ; + + +(* + CreateDumpQuad - create the dump file for a quad dump. +*) + +PROCEDURE CreateDumpQuad (title: ARRAY OF CHAR) ; + + +(* + CloseDumpQuad - close the dump output file. +*) + +PROCEDURE CloseDumpQuad ; + + +(* + CreateDumpDecl - create the dump file for a decl dump. +*) + +PROCEDURE CreateDumpDecl (title: ARRAY OF CHAR) ; + + +(* + CloseDumpDecl - close the dump output file. +*) + +PROCEDURE CloseDumpDecl ; + + +END M2LangDump. diff --git a/gcc/m2/gm2-compiler/M2LangDump.mod b/gcc/m2/gm2-compiler/M2LangDump.mod new file mode 100644 index 000000000000..17fab86bc0b1 --- /dev/null +++ b/gcc/m2/gm2-compiler/M2LangDump.mod @@ -0,0 +1,802 @@ +(* M2LangDump.mod provides support routines for the -flang-dump. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley <gaiusmod2@gmail.com>. + +This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GNU Modula-2 is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Modula-2; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. *) + +IMPLEMENTATION MODULE M2LangDump ; + +FROM SYSTEM IMPORT ADDRESS ; + +FROM DynamicStrings IMPORT String, Length, InitString, Mark, Slice, EqualArray, + InitStringCharStar, ConCatChar, ConCat, KillString, + Dup, string, char, Index, ReverseIndex, RIndex, Equal, + PushAllocation, PopAllocationExemption ; + +FROM SymbolTable IMPORT NulSym, + GetSymName, GetLibName, + GetScope, GetModuleScope, GetMainModule, GetDeclaredMod, + GetLocalSym, + IsInnerModule, + IsVar, + IsProcedure, + IsModule, IsDefImp, + IsExportQualified, IsExportUnQualified, + IsExported, IsPublic, IsExtern, IsMonoName, + IsDefinitionForC ; + +FROM M2Options IMPORT GetM2DumpFilter, GetDumpDir, GetDumpLangQuadFilename, + GetDumpLangDeclFilename, GetDumpLangGimpleFilename ; + +FROM M2GCCDeclare IMPORT IncludeDumpSymbol ; +FROM FormatStrings IMPORT Sprintf0, Sprintf1 ; +FROM NameKey IMPORT Name, GetKey, MakeKey, makekey, KeyToCharStar, NulName ; +FROM SymbolConversion IMPORT Gcc2Mod, Mod2Gcc ; +FROM M2AsmUtil IMPORT GetFullScopeAsmName ; +FROM M2LexBuf IMPORT FindFileNameFromToken ; +FROM M2Printf IMPORT fprintf0, fprintf1, printf0, printf1, printf2 ; +FROM M2Error IMPORT InternalError ; +FROM M2Batch IMPORT Get ; +FROM StrLib IMPORT StrLen ; +FROM libc IMPORT printf ; + +IMPORT FIO, SFIO, DynamicStrings, StdIO ; + + +CONST + Debugging = FALSE ; + +VAR + outputFile : FIO.File ; + declActive, + quadActive, + mustClose : BOOLEAN ; + NoOfQuadDumps, + NoOfDeclDumps: CARDINAL ; + + +(* + Assert - call InternalError is NOT value. +*) + +PROCEDURE Assert (value: BOOLEAN) ; +BEGIN + IF NOT value + THEN + InternalError ('assert failed in M2LangDump') + END +END Assert ; + + +(* + DumpWrite - writes a single ch to the dump output. +*) + +PROCEDURE DumpWrite (ch: CHAR) ; +BEGIN + FIO.WriteChar (outputFile, ch) +END DumpWrite ; + + +(* + CloseDump - close the dump file and pop the default write procedure. +*) + +PROCEDURE CloseDump ; +BEGIN + IF mustClose + THEN + FIO.Close (outputFile) ; + mustClose := FALSE + ELSE + FIO.FlushBuffer (outputFile) + END ; + StdIO.PopOutput ; + outputFile := FIO.StdOut ; +END CloseDump ; + + +(* + OpenDump - open filename as a dump file. The filename '-' is treated as stdout. + It pushes a write procedure to StdIO. +*) + +PROCEDURE OpenDump (filename: String; no: CARDINAL) ; +BEGIN + IF DynamicStrings.EqualArray (filename, '-') + THEN + mustClose := FALSE ; + outputFile := FIO.StdOut + ELSE + filename := Sprintf1 (filename, no) ; + outputFile := SFIO.OpenToWrite (filename) ; + mustClose := FIO.IsNoError (outputFile) + END ; + filename := KillString (filename) ; + StdIO.PushOutput (DumpWrite) +END OpenDump ; + + +(* + CloseDumpDecl - close the dump output file. +*) + +PROCEDURE CloseDumpDecl ; +BEGIN + IF declActive + THEN + CloseDump ; + declActive := FALSE + END +END CloseDumpDecl ; + + +(* + AddRuleTextDump - +*) + +PROCEDURE AddRuleTextDump (rule: String) ; +BEGIN + +END AddRuleTextDump ; + + +(* + AddRuleScopeQualidentDump - +*) + +PROCEDURE AddRuleScopeQualidentDump (rule: String; dot: INTEGER; modsym: CARDINAL) ; +VAR + modstr, + idstr : String ; + start : INTEGER ; + sym : CARDINAL ; +BEGIN + start := dot + 1 ; + dot := Index (rule, '.', start) ; + WHILE dot > 0 DO + modstr := Slice (rule, start, dot) ; + modsym := GetLocalSym (modsym, makekey (string (modstr))) ; + IF (modsym # NulSym) AND IsModule (modsym) + THEN + start := dot + 1 ; + dot := Index (rule, '.', start) + ELSE + modstr := KillString (modstr) ; + RETURN + END + END ; + idstr := Slice (rule, start, 0) ; + sym := GetLocalSym (modsym, makekey (string (idstr))) ; + IF sym # NulSym + THEN + IncludeDumpSymbol (sym) + END +END AddRuleScopeQualidentDump ; + + +(* + AddRuleScopeDump - +*) + +PROCEDURE AddRuleScopeDump (rule: String) ; +VAR + modsym: CARDINAL ; + libstr, + modstr: String ; + start, + dot : INTEGER ; +BEGIN + dot := Index (rule, '.', 0) ; + Assert (dot # -1) ; + libstr := NIL ; + modstr := Slice (rule, 0, dot) ; + modsym := Get (makekey (string (modstr))) ; + IF modsym = NulSym + THEN + libstr := modstr ; + start := dot + 1 ; + dot := Index (rule, '.', start) ; + IF dot > 0 + THEN + modstr := Slice (rule, start, dot) ; + modsym := Get (makekey (string (modstr))) ; + IF (modsym # NulSym) AND (makekey (string (libstr)) = GetLibName (modsym)) + THEN + AddRuleScopeQualidentDump (rule, dot, modsym) + END + END + ELSE + AddRuleScopeQualidentDump (rule, dot, modsym) + END +END AddRuleScopeDump ; + + +(* + AddRuleFilenameDump - +*) + +PROCEDURE AddRuleFilenameDump (rule: String) ; +BEGIN + +END AddRuleFilenameDump ; + + +(* + AddRuleSymToDump - +*) + +PROCEDURE AddRuleSymToDump (rule: String) ; +BEGIN + IF Index (rule, ':', 0) # -1 + THEN + (* Filename and scope rule. *) + AddRuleFilenameDump (rule) + ELSIF Index (rule, '.', 0) # -1 + THEN + (* Modula-2 scoping tests. *) + AddRuleScopeDump (rule) + ELSE + (* Text decl tests. *) + AddRuleTextDump (rule) + END +END AddRuleSymToDump ; + + +(* + AddFilterListToDumpWatch - +*) + +PROCEDURE AddFilterListToDumpWatch (filter: ADDRESS) ; +VAR + rule, + full : String ; + start, + i : INTEGER ; +BEGIN + full := InitStringCharStar (filter) ; + start := 0 ; + REPEAT + i := Index (full, ',', start) ; + IF i = -1 + THEN + rule := Slice (full, start, 0) + ELSE + rule := Slice (full, start, i) + END ; + AddRuleSymToDump (rule) ; + rule := KillString (rule) ; + start := i+1 ; + UNTIL i = -1 ; + full := KillString (full) ; +END AddFilterListToDumpWatch ; + + +(* + CreateDumpTitle - creates the underlined title. +*) + +PROCEDURE CreateDumpTitle (title: ARRAY OF CHAR) ; +VAR + len, + text, + i : CARDINAL ; + s : String ; +BEGIN + s := Sprintf0 (Mark (InitString (title))) ; + s := KillString (SFIO.WriteS (GetDumpFile (), s)) ; + len := StrLen (title) ; + i := 0 ; + text := 0 ; + WHILE i < len DO + IF title[i] = '\' + THEN + INC (i, 2) + ELSE + INC (i) ; + INC (text) + END + END ; + s := DynamicStrings.Mult (Mark (InitString ('=')), text) ; + s := KillString (SFIO.WriteS (GetDumpFile (), s)) ; + fprintf0 (GetDumpFile (), '\n'); +END CreateDumpTitle ; + + +(* + CreateDumpDecl - create the dump file for a decl dump. +*) + +PROCEDURE CreateDumpDecl (title: ARRAY OF CHAR) ; +BEGIN + IF GetM2DumpFilter () # NIL + THEN + Assert (NOT declActive) ; + Assert (NOT quadActive) ; + declActive := TRUE ; + INC (NoOfDeclDumps) ; + OpenDump (MakeDeclTemplate (), NoOfDeclDumps) ; + CreateDumpTitle (title) ; + AddFilterListToDumpWatch (GetM2DumpFilter ()) + END +END CreateDumpDecl ; + + +(* + CloseDumpQuad - close the dump output file. +*) + +PROCEDURE CloseDumpQuad ; +BEGIN + CloseDump ; + quadActive := FALSE +END CloseDumpQuad ; + + +(* + CreateDumpQuad - create the dump file for a quad dump. +*) + +PROCEDURE CreateDumpQuad (title: ARRAY OF CHAR) ; +BEGIN + Assert (NOT declActive) ; + Assert (NOT quadActive) ; + quadActive := TRUE ; + INC (NoOfQuadDumps) ; + OpenDump (MakeQuadTemplate (), NoOfQuadDumps) ; + CreateDumpTitle (title) +END CreateDumpQuad ; + + +(* + GetDumpFile - return the dump output file. +*) + +PROCEDURE GetDumpFile () : File ; +BEGIN + RETURN outputFile +END GetDumpFile ; + + +(* + IsDumpRequiredTree - return TRUE if the gcc tree should be dumped. +*) + +PROCEDURE IsDumpRequiredTree (tree: Tree; default: BOOLEAN) : BOOLEAN ; +VAR + sym: CARDINAL ; +BEGIN + sym := Gcc2Mod (tree) ; + IF sym = NulSym + THEN + RETURN default + ELSE + RETURN IsDumpRequired (sym, default) + END +END IsDumpRequiredTree ; + + +(* + IsDumpRequired - return TRUE if symbol sym should be dumped + according to the rules of the filter. + No filter specified will always return default. + The filter is a comma separated list. Each element + of the list can specify a symbol three ways. + Firstly by DECL name for example: m2pim_NumberIO_HexToStr + Secondly by qualified scope: [pathname.]NumberIO.HexToStr + Thirdly by filename and scope: NumberIO.mod:HexToStr +*) + +PROCEDURE IsDumpRequired (sym: CARDINAL; default: BOOLEAN) : BOOLEAN ; +VAR + filter: String ; +BEGIN + filter := GetM2DumpFilter () ; + IF filter = NIL + THEN + RETURN default + ELSE + RETURN Match (filter, sym) + END +END IsDumpRequired ; + + +(* + Match - return TRUE if sym matches any of the filter rules. +*) + +PROCEDURE Match (filter: ADDRESS; sym: CARDINAL) : BOOLEAN ; +VAR + result: BOOLEAN ; + rule, + full : String ; + start, + i : INTEGER ; +BEGIN + full := InitStringCharStar (filter) ; + start := 0 ; + REPEAT + i := Index (full, ',', start) ; + IF i = -1 + THEN + rule := Slice (full, start, 0) + ELSE + rule := Slice (full, start, i) + END ; + result := MatchRule (rule, sym) ; + rule := KillString (rule) ; + IF result + THEN + full := KillString (full) ; + RETURN TRUE + END ; + start := i+1 ; + UNTIL i = -1 ; + full := KillString (full) ; + RETURN FALSE +END Match ; + + +(* + MatchRule - return TRUE if rule matches sym. +*) + +PROCEDURE MatchRule (rule: String; sym: CARDINAL) : BOOLEAN ; +BEGIN + IF Index (rule, ':', 0) # -1 + THEN + (* Filename and scope qualification tests. *) + RETURN MatchRuleFilenameScope (rule, sym) + ELSIF Index (rule, '.', 0) # -1 + THEN + (* Modula-2 scoping tests. *) + RETURN MatchRuleScope (rule, sym) + ELSE + (* Text decl tests. *) + RETURN MatchRuleText (rule, sym) + END +END MatchRule ; + + +(* + MatchRuleFilenameScope - returns TRUE if rule contains filename.ext:qualident + and it matches sym. +*) + +PROCEDURE MatchRuleFilenameScope (rule: String; sym: CARDINAL) : BOOLEAN ; +VAR + rulefile, + symfile, + subrule : String ; +BEGIN + rulefile := Slice (rule, 0, Index (rule, ':', 0)) ; + (* Do not deallocate symfile. *) + symfile := FindFileNameFromToken (GetDeclaredMod (sym), 0) ; + IF TextMatch (rulefile, symfile) + THEN + subrule := Slice (rule, Index (rule, ':', 0) + 1, 0) ; + IF MatchRuleScope (subrule, sym) + THEN + subrule := KillString (subrule) ; + RETURN TRUE + END + END ; + rulefile := KillString (rulefile) ; + RETURN FALSE +END MatchRuleFilenameScope ; + + +(* + MatchRuleScope - returns TRUE if rule contains a [libname.]qualified.ident + and it matches sym. +*) + +PROCEDURE MatchRuleScope (rule: String; sym: CARDINAL) : BOOLEAN ; +VAR + i : INTEGER ; + name: Name ; +BEGIN + IF Debugging + THEN + name := GetSymName (sym) ; + printf2 ("MatchRuleScope (%s, %a)\n", rule, name) + END ; + (* Compare qualident right to left. *) + i := RIndex (rule, '.', 0) ; + IF i = -1 + THEN + (* No qualification, just the ident. *) + RETURN MatchRuleIdent (rule, sym) + ELSE + RETURN MatchRuleQualident (rule, Slice (rule, i+1, 0), i, sym) + END +END MatchRuleScope ; + + +(* + MatchRuleQualident - returns TRUE if rule matches qualified sym. + PostCondition: subrule will be deallocated upon exit. + TRUE is returned if rule matches qualified sym. +*) + +PROCEDURE MatchRuleQualident (rule, subrule: String; i: INTEGER; sym: CARDINAL) : BOOLEAN ; +VAR + scope: CARDINAL ; +BEGIN + IF TextCompareName (subrule, GetSymName (sym)) + THEN + IF NOT QualifiedScope (rule, sym, i, scope) + THEN + RETURN FALSE + END ; + IF OptionalLibname (rule, sym, i, scope) + THEN + RETURN TRUE + END + END ; + subrule := KillString (subrule) ; + IF Debugging + THEN + printf0 ("MatchRuleQualident FALSE\n") + END ; + RETURN FALSE +END MatchRuleQualident ; + + +(* + QualifiedScope - PostCondition: true is returned is rule matches a qualified sym. + i is -1 if no more qualifications or libname is found. + scope will be the set to the last outer scope seen. +*) + +PROCEDURE QualifiedScope (rule: String; sym: CARDINAL; VAR i: INTEGER; VAR scope: CARDINAL) : BOOLEAN ; +VAR + subrule: String ; + j : INTEGER ; + name : Name ; +BEGIN + IF Debugging + THEN + name := GetSymName (sym) ; + printf2 ("seen ident name, QualifiedScope (rule = %s, %a)\n", rule, name) + END ; + scope := sym ; + subrule := NIL ; + REPEAT + j := i ; + scope := GetScope (scope) ; + i := ReverseIndex (rule, '.', j - 1) ; + IF Debugging + THEN + printf2 (" reverseindex (rule = %s, '.', j = %d)\n", rule, j); + printf1 (" returns i = %d\n", i) + END ; + IF scope # NulSym + THEN + subrule := KillString (subrule) ; + subrule := Slice (rule, i + 1, j) ; + IF Debugging + THEN + name := GetSymName (scope) ; + printf2 ("QualifiedScope (subrule = %s, %a)\n", subrule, name) + END ; + IF NOT TextCompareName (subrule, GetSymName (scope)) + THEN + subrule := KillString (subrule) ; + IF Debugging + THEN + printf0 ("QualifiedScope FALSE\n") + END ; + RETURN FALSE + END + END + UNTIL (i <= 0) OR IsDefImp (scope) OR IsModule (scope) ; + subrule := KillString (subrule) ; + RETURN TRUE +END QualifiedScope ; + + +(* + OptionalLibname - returns TRUE if rule[0..dot] matches syms libname or + if there is no libname the scope is a module or defimp + symbol. +*) + +PROCEDURE OptionalLibname (rule: String; sym: CARDINAL; + dot: INTEGER; scope: CARDINAL) : BOOLEAN ; +VAR + subrule: String ; +BEGIN + IF dot > 0 + THEN + (* Check for optional libname. *) + subrule := Slice (rule, 0, dot) ; + IF Debugging + THEN + printf2 ("checking for optional libname (subrule = %s, '.', dot = %d)\n", + rule, dot) + END ; + IF TextCompareName (subrule, GetLibName (GetModuleScope (sym))) + THEN + subrule := KillString (subrule) ; + IF Debugging + THEN + printf0 ("OptionalLibname TRUE\n") + END ; + RETURN TRUE + END ; + subrule := KillString (subrule) + ELSIF (scope # NulSym) AND (IsModule (scope) OR IsDefImp (scope)) + THEN + IF Debugging + THEN + printf0 ("OptionalLibname TRUE\n") + END ; + RETURN TRUE + END ; + RETURN FALSE +END OptionalLibname ; + + +(* + MatchRuleIdent - return TRUE if ident sym matches rule. + The ident must be in a module or defimp scope. +*) + +PROCEDURE MatchRuleIdent (rule: String; sym: CARDINAL) : BOOLEAN ; +VAR + scope: CARDINAL ; +BEGIN + IF TextCompareName (rule, GetSymName (sym)) + THEN + scope := GetScope (sym) ; + RETURN IsModule (scope) OR IsDefImp (scope) + END ; + RETURN FALSE +END MatchRuleIdent ; + + +(* + MatchRuleText - returns TRUE if rule matches sym. +*) + +PROCEDURE MatchRuleText (rule: String; sym: CARDINAL) : BOOLEAN ; +BEGIN + RETURN TextCompareName (rule, GetFullScopeAsmName (sym)) +END MatchRuleText ; + + +(* + TextCompareName - return TRUE if rule matches name. +*) + +PROCEDURE TextCompareName (rule: String; name: Name) : BOOLEAN ; +VAR + result: BOOLEAN ; + text : String ; +BEGIN + text := InitStringCharStar (KeyToCharStar (name)) ; + result := TextMatch (rule, text) ; + text := KillString (text) ; + RETURN result +END TextCompareName ; + + +(* + TextMatch - returns TRUE if rule matches text. Currently this + is a simple string compare, but could be extended + to implement regexp (seen in the rule). +*) + +PROCEDURE TextMatch (rule, text: String) : BOOLEAN ; +BEGIN + IF Debugging + THEN + printf2 ("TextMatch (%s, %s)\n", rule, text) + END ; + RETURN Equal (rule, text) +END TextMatch ; + + +(* + CreateTemplate - create and return a template filename with extension. + If the user has specified "-" then "-" is returned otherwise + a template is formed from "dumpdir + filename + .%03dl.extension". +*) + +PROCEDURE CreateTemplate (filename, extension: String) : String ; +BEGIN + IF filename = NIL + THEN + (* User has not specified a file. *) + IF GetDumpDir () = NIL + THEN + filename := InitStringCharStar (KeyToCharStar (GetSymName (GetMainModule ()))) + ELSE + filename := Dup (GetDumpDir ()) ; + filename := ConCat (filename, Mark (InitStringCharStar (KeyToCharStar (GetSymName (GetMainModule ()))))) + END ; + filename := ConCat (filename, Mark (InitString ('.mod'))) + ELSE + (* We need to duplicate the filename to create a new string before ConCat + is used later on. *) + filename := Dup (filename) + END ; + IF NOT EqualArray (filename, '-') + THEN + filename := ConCat (ConCat (filename, InitString ('.%03dl.')), extension) + END ; + RETURN filename +END CreateTemplate ; + + +(* + MakeQuadTemplate - return a template for the quad dump file. +*) + +PROCEDURE MakeQuadTemplate () : String ; +BEGIN + RETURN CreateTemplate (GetDumpLangQuadFilename (), InitString ('quad')) +END MakeQuadTemplate ; + + +(* + MakeDeclTemplate - return a template for the decl dump file. +*) + +PROCEDURE MakeDeclTemplate () : String ; +BEGIN + RETURN CreateTemplate (GetDumpLangDeclFilename (), InitString ('decl')) +END MakeDeclTemplate ; + + +(* + MakeGimpleTemplate - return a template for the gimple dump file and assign + len to the max number of characters required to complete + a template (including a nul terminator). +*) + +PROCEDURE MakeGimpleTemplate (VAR len: CARDINAL) : String ; +VAR + filename: String ; +BEGIN + filename := CreateTemplate (GetDumpLangGimpleFilename (), InitString ('gimple')) ; + len := Length (filename) ; (* This is a short cut based on '%03d' format + specifier used above. *) + RETURN filename +END MakeGimpleTemplate ; + + +(* + Init - initialize the module global variables. +*) + +PROCEDURE Init ; +BEGIN + NoOfQuadDumps := 0 ; + NoOfDeclDumps := 0 ; + declActive := FALSE ; + quadActive := FALSE ; + mustClose := FALSE ; + outputFile := FIO.StdOut +END Init ; + + +BEGIN + Init +END M2LangDump. diff --git a/gcc/m2/gm2-compiler/M2Options.def b/gcc/m2/gm2-compiler/M2Options.def index 4e5f4993f82d..90b5178f88a6 100644 --- a/gcc/m2/gm2-compiler/M2Options.def +++ b/gcc/m2/gm2-compiler/M2Options.def @@ -55,7 +55,9 @@ VAR PedanticCast, (* -Wpedantic-cast warns if sizes differ. *) Statistics, (* -fstatistics information about code *) StyleChecking, (* -Wstudents checks for common student errs*) - DisplayQuadruples, (* -Wq option will display quadruples. *) + DumpLangDecl, (* -fdump-lang-decl. *) + DumpLangGimple, (* -fdump-lang-gimple. *) + DumpLangQuad, (* -fq, -fdump-lang-quad dump quadruples. *) UnboundedByReference, (* -funbounded-by-reference *) VerboseUnbounded, (* -Wverbose-unbounded *) OptimizeUncalledProcedures, (* -Ouncalled removes uncalled procedures *) @@ -1002,6 +1004,70 @@ PROCEDURE SetIEEELongDouble (value: BOOLEAN) ; PROCEDURE GetIEEELongDouble () : BOOLEAN ; +(* + GetDumpLangDeclFilename - returns the DumpLangDeclFilename. +*) + +PROCEDURE GetDumpLangDeclFilename () : String ; + + +(* + SetDumpLangDeclFilename - set DumpLangDeclFilename to filename. +*) + +PROCEDURE SetDumpLangDeclFilename (value: BOOLEAN; filename: ADDRESS) ; + + +(* + GetDumpLangQuadFilename - returns the DumpLangQuadFilename. +*) + +PROCEDURE GetDumpLangQuadFilename () : String ; + + +(* + SetDumpLangQuadFilename - set DumpLangQuadFilename to filename. +*) + +PROCEDURE SetDumpLangQuadFilename (value: BOOLEAN; filename: ADDRESS) ; + + +(* + GetDumpLangGimpleFilename - returns the DumpLangGimpleFilename. +*) + +PROCEDURE GetDumpLangGimpleFilename () : String ; + + +(* + SetDumpLangGimpleFilename - set DumpLangGimpleFilename to filename. +*) + +PROCEDURE SetDumpLangGimpleFilename (value: BOOLEAN; filename: ADDRESS) ; + + +(* + SetM2DumpFilter - sets the filter to a comma separated list of procedures + and modules. +*) + +PROCEDURE SetM2DumpFilter (value: BOOLEAN; filter: ADDRESS) ; + + +(* + GetM2DumpFilter - returns the dump filter. +*) + +PROCEDURE GetM2DumpFilter () : ADDRESS ; + + +(* + GetDumpLangGimple - return TRUE if -fdump-lang-gimple is set. +*) + +PROCEDURE GetDumpLangGimple () : BOOLEAN ; + + (* FinaliseOptions - once all options have been parsed we set any inferred values. diff --git a/gcc/m2/gm2-compiler/M2Options.mod b/gcc/m2/gm2-compiler/M2Options.mod index ae4980860b01..30203158e5c3 100644 --- a/gcc/m2/gm2-compiler/M2Options.mod +++ b/gcc/m2/gm2-compiler/M2Options.mod @@ -34,7 +34,6 @@ FROM m2linemap IMPORT location_t ; FROM m2configure IMPORT FullPathCPP, TargetIEEEQuadDefault ; FROM M2Error IMPORT InternalError ; - FROM DynamicStrings IMPORT String, Length, InitString, Mark, Slice, EqualArray, InitStringCharStar, ConCatChar, ConCat, KillString, Dup, string, char, @@ -56,6 +55,10 @@ CONST DefaultRuntimeModuleOverride = "m2iso:RTentity,m2iso:Storage,m2iso:SYSTEM,m2iso:M2RTS,m2iso:RTExceptions,m2iso:IOLink" ; VAR + DumpLangDeclFilename, + DumpLangQuadFilename, + DumpLangGimpleFilename, + M2DumpFilter, M2Prefix, M2PathName, Barg, @@ -1049,7 +1052,9 @@ END SetSwig ; PROCEDURE SetQuadDebugging (value: BOOLEAN) ; BEGIN - DisplayQuadruples := value + DumpLangQuad := value ; + DumpLangQuadFilename := KillString (DumpLangQuadFilename) ; + DumpLangQuadFilename := InitString ('-') END SetQuadDebugging ; @@ -1670,6 +1675,121 @@ BEGIN END InitializeLongDoubleFlags ; +(* + GetDumpLangDeclFilename - returns the DumpLangDeclFilename. +*) + +PROCEDURE GetDumpLangDeclFilename () : String ; +BEGIN + RETURN DumpLangDeclFilename +END GetDumpLangDeclFilename ; + + +(* + SetDumpLangDeclFilename - +*) + +PROCEDURE SetDumpLangDeclFilename (value: BOOLEAN; filename: ADDRESS) ; +BEGIN + DumpLangDecl := value ; + DumpLangDeclFilename := KillString (DumpLangDeclFilename) ; + IF filename # NIL + THEN + DumpLangDeclFilename := InitStringCharStar (filename) + END +END SetDumpLangDeclFilename ; + + +(* + GetDumpLangQuadFilename - returns the DumpLangQuadFilename. +*) + +PROCEDURE GetDumpLangQuadFilename () : String ; +BEGIN + RETURN DumpLangQuadFilename +END GetDumpLangQuadFilename ; + + +(* + SetDumpLangQuadFilename - +*) + +PROCEDURE SetDumpLangQuadFilename (value: BOOLEAN; filename: ADDRESS) ; +BEGIN + DumpLangQuad := value ; + DumpLangQuadFilename := KillString (DumpLangQuadFilename) ; + IF filename # NIL + THEN + DumpLangQuadFilename := InitStringCharStar (filename) + END +END SetDumpLangQuadFilename ; + + +(* + GetDumpLangGimpleFilename - returns the DumpLangGimpleFilename. +*) + +PROCEDURE GetDumpLangGimpleFilename () : String ; +BEGIN + RETURN DumpLangGimpleFilename +END GetDumpLangGimpleFilename ; + + +(* + SetDumpLangGimpleFilename - set DumpLangGimpleFilename to filename. +*) + +PROCEDURE SetDumpLangGimpleFilename (value: BOOLEAN; filename: ADDRESS) ; +BEGIN + DumpLangGimple := value ; + DumpLangGimpleFilename := KillString (DumpLangGimpleFilename) ; + IF value AND (filename # NIL) + THEN + DumpLangGimpleFilename := InitStringCharStar (filename) + END +END SetDumpLangGimpleFilename ; + + +(* + SetM2DumpFilter - sets the filter to a comma separated list of procedures + and modules. +*) + +PROCEDURE SetM2DumpFilter (value: BOOLEAN; filter: ADDRESS) ; +BEGIN + M2DumpFilter := KillString (M2DumpFilter) ; + IF value AND (filter # NIL) + THEN + M2DumpFilter := InitStringCharStar (filter) + END +END SetM2DumpFilter ; + + +(* + GetM2DumpFilter - returns the dump filter. +*) + +PROCEDURE GetM2DumpFilter () : ADDRESS ; +BEGIN + IF M2DumpFilter = NIL + THEN + RETURN NIL + ELSE + RETURN string (M2DumpFilter) + END +END GetM2DumpFilter ; + + +(* + GetDumpLangGimple - return TRUE if -fdump-lang-gimple is set. +*) + +PROCEDURE GetDumpLangGimple () : BOOLEAN ; +BEGIN + RETURN DumpLangGimple +END GetDumpLangGimple ; + + BEGIN cflag := FALSE ; (* -c. *) RuntimeModuleOverride := InitString (DefaultRuntimeModuleOverride) ; @@ -1691,7 +1811,7 @@ BEGIN Quiet := TRUE ; CC1Quiet := TRUE ; Profiling := FALSE ; - DisplayQuadruples := FALSE ; + DumpLangQuad := FALSE ; OptimizeBasicBlock := FALSE ; OptimizeUncalledProcedures := FALSE ; OptimizeCommonSubExpressions := FALSE ; @@ -1751,5 +1871,12 @@ BEGIN MQFlag := NIL ; InitializeLongDoubleFlags ; M2Prefix := InitString ('') ; - M2PathName := InitString ('') + M2PathName := InitString ('') ; + DumpLangQuadFilename := NIL ; + DumpLangGimpleFilename := NIL ; + DumpLangDeclFilename := NIL ; + DumpLangDecl := FALSE ; + DumpLangQuad := FALSE ; + DumpLangGimple := FALSE ; + M2DumpFilter := NIL END M2Options. diff --git a/gcc/m2/gm2-compiler/M2Quads.def b/gcc/m2/gm2-compiler/M2Quads.def index ad2ee8698467..a8ca69b7bc6a 100644 --- a/gcc/m2/gm2-compiler/M2Quads.def +++ b/gcc/m2/gm2-compiler/M2Quads.def @@ -125,7 +125,7 @@ EXPORT QUALIFIED StartBuildDefFile, StartBuildModFile, EndBuildFile, IsDefOrModFile, IsInitialisingConst, - DisplayQuadList, DisplayQuadRange, DisplayQuad, + DumpQuadruples, DisplayQuadRange, DisplayQuad, WriteOperator, BackPatchSubrangesAndOptParam, GetQuad, GetFirstQuad, GetNextQuad, PutQuad, @@ -440,10 +440,12 @@ PROCEDURE IsDefOrModFile (QuadNo: CARDINAL) : BOOLEAN ; (* - DisplayQuadList - displays all quads. + DumpQuadruples - dump all quadruples providing the -fq, -fdump-lang-quad, + -fdump-lang-quad= or -fdump-lang-all were issued to the + command line. *) -PROCEDURE DisplayQuadList ; +PROCEDURE DumpQuadruples (title: ARRAY OF CHAR) ; (* diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 0558c782101d..ac654e89c917 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -27,6 +27,7 @@ FROM M2Debug IMPORT Assert, WriteDebug ; FROM NameKey IMPORT Name, NulName, MakeKey, GetKey, makekey, KeyToCharStar, WriteKey ; FROM FormatStrings IMPORT Sprintf0, Sprintf1, Sprintf2, Sprintf3 ; FROM M2DebugStack IMPORT DebugStack ; +FROM StrLib IMPORT StrLen ; FROM M2Scaffold IMPORT DeclareScaffold, mainFunction, initFunction, finiFunction, linkFunction, PopulateCtorArray, ForeachModuleCallInit, ForeachModuleCallFinish ; @@ -160,7 +161,8 @@ FROM M2Error IMPORT Error, ErrorStringAt, ErrorStringAt2, ErrorStringsAt2, WarnStringAt, WarnStringAt2, WarnStringsAt2 ; -FROM M2Printf IMPORT printf0, printf1, printf2, printf3, printf4 ; +FROM M2Printf IMPORT fprintf0, fprintf1, fprintf2, fprintf3, fprintf4, + printf0, printf1, printf2, printf3, printf4 ; FROM M2Reserved IMPORT PlusTok, MinusTok, TimesTok, DivTok, ModTok, DivideTok, RemTok, @@ -218,8 +220,11 @@ FROM M2Options IMPORT NilChecking, UninitVariableChecking, ScaffoldDynamic, ScaffoldStatic, cflag, ScaffoldMain, SharedFlag, WholeProgram, - GetRuntimeModuleOverride ; + GetDumpDir, GetM2DumpFilter, + GetRuntimeModuleOverride, + DumpLangQuad ; +FROM M2LangDump IMPORT CreateDumpQuad, CloseDumpQuad, GetDumpFile ; FROM M2Pass IMPORT IsPassCodeGeneration, IsNoPass ; FROM M2StackAddress IMPORT StackOfAddress, InitStackAddress, KillStackAddress, @@ -263,8 +268,9 @@ FROM M2Range IMPORT InitAssignmentRangeCheck, FROM M2CaseList IMPORT PushCase, PopCase, AddRange, BeginCaseList, EndCaseList, ElseCase ; FROM PCSymBuild IMPORT SkipConst ; FROM m2builtins IMPORT GetBuiltinTypeInfoType ; +FROM M2LangDump IMPORT IsDumpRequired ; -IMPORT M2Error ; +IMPORT M2Error, FIO, SFIO, DynamicStrings, StdIO ; CONST @@ -5567,9 +5573,9 @@ BEGIN THEN IF i<=ParamTotal THEN - printf0('; ') + printf0 ('; ') ELSE - printf0(' ) ; \n') + printf0 (' ) ; \n') END END END @@ -13324,22 +13330,124 @@ END GenQuadOTypetok ; (* - DisplayQuadList - displays all quads. + DumpUntil - dump all quadruples until we seen the ending quadruple + with procsym in the third operand. + Return the quad number containing the match. *) -PROCEDURE DisplayQuadList ; +PROCEDURE DumpUntil (ending: QuadOperator; + procsym: CARDINAL; quad: CARDINAL) : CARDINAL ; +VAR + op : QuadOperator ; + op1, op2, op3: CARDINAL ; + f : QuadFrame ; +BEGIN + fprintf0 (GetDumpFile (), '\n...\n\n'); + REPEAT + GetQuad (quad, op, op1, op2, op3) ; + DisplayQuad (quad) ; + f := GetQF (quad) ; + quad := f^.Next + UNTIL (op = ending) AND (op3 = procsym) ; + RETURN quad +END DumpUntil ; + + +(* + GetCtorInit - return the init procedure for the module. +*) + +PROCEDURE GetCtorInit (sym: CARDINAL) : CARDINAL ; +VAR + ctor, init, fini, dep: CARDINAL ; +BEGIN + GetModuleCtors (sym, ctor, init, fini, dep) ; + RETURN init +END GetCtorInit ; + + +(* + GetCtorFini - return the fini procedure for the module. +*) + +PROCEDURE GetCtorFini (sym: CARDINAL) : CARDINAL ; +VAR + ctor, init, fini, dep: CARDINAL ; +BEGIN + GetModuleCtors (sym, ctor, init, fini, dep) ; + RETURN fini +END GetCtorFini ; + + +(* + DumpQuadrupleFilter - +*) + +PROCEDURE DumpQuadrupleFilter ; +VAR + f : QuadFrame ; + i : CARDINAL ; + op : QuadOperator ; + op1, op2, op3: CARDINAL ; +BEGIN + i := Head ; + WHILE i # 0 DO + GetQuad (i, op, op1, op2, op3) ; + IF (op = ProcedureScopeOp) AND IsDumpRequired (op3, TRUE) + THEN + i := DumpUntil (KillLocalVarOp, op3, i) + ELSIF (op = InitStartOp) AND IsDumpRequired (GetCtorInit (op3), TRUE) + THEN + i := DumpUntil (InitEndOp, op3, i) + ELSIF (op = FinallyStartOp) AND IsDumpRequired (GetCtorFini (op3), TRUE) + THEN + i := DumpUntil (FinallyEndOp, op3, i) + ELSE + f := GetQF (i) ; + i := f^.Next + END + END +END DumpQuadrupleFilter ; + + +(* + DumpQuadrupleAll - dump all quadruples. +*) + +PROCEDURE DumpQuadrupleAll ; VAR - i: CARDINAL ; f: QuadFrame ; + i: CARDINAL ; BEGIN - printf0('Quadruples:\n') ; i := Head ; - WHILE i#0 DO - DisplayQuad(i) ; - f := GetQF(i) ; + WHILE i # 0 DO + DisplayQuad (i) ; + f := GetQF (i) ; i := f^.Next END -END DisplayQuadList ; +END DumpQuadrupleAll ; + + +(* + DumpQuadruples - dump all quadruples providing the -fq, -fdump-lang-quad, + -fdump-lang-quad= or -fdump-lang-all were issued to the + command line. +*) + +PROCEDURE DumpQuadruples (title: ARRAY OF CHAR) ; +BEGIN + IF DumpLangQuad + THEN + CreateDumpQuad (title) ; + IF GetM2DumpFilter () = NIL + THEN + DumpQuadrupleAll + ELSE + DumpQuadrupleFilter + END ; + CloseDumpQuad + END +END DumpQuadruples ; (* @@ -13350,7 +13458,7 @@ PROCEDURE DisplayQuadRange (scope: CARDINAL; start, end: CARDINAL) ; VAR f: QuadFrame ; BEGIN - printf1 ('Quadruples for scope: %d\n', scope) ; + fprintf1 (GetDumpFile (), 'Quadruples for scope: %d\n', scope) ; WHILE (start <= end) AND (start # 0) DO DisplayQuad (start) ; f := GetQF (start) ; @@ -13482,7 +13590,7 @@ END ds ; PROCEDURE DisplayQuad (QuadNo: CARDINAL) ; BEGIN DSdbEnter ; - printf1('%4d ', QuadNo) ; WriteQuad(QuadNo) ; printf0('\n') ; + fprintf1 (GetDumpFile (), '%4d ', QuadNo) ; WriteQuad(QuadNo) ; fprintf0 (GetDumpFile (), '\n') ; DSdbExit END DisplayQuad ; @@ -13495,19 +13603,19 @@ PROCEDURE DisplayProcedureAttributes (proc: CARDINAL) ; BEGIN IF IsCtor (proc) THEN - printf0 (" (ctor)") + fprintf0 (GetDumpFile (), " (ctor)") END ; IF IsPublic (proc) THEN - printf0 (" (public)") + fprintf0 (GetDumpFile (), " (public)") END ; IF IsExtern (proc) THEN - printf0 (" (extern)") + fprintf0 (GetDumpFile (), " (extern)") END ; IF IsMonoName (proc) THEN - printf0 (" (mononame)") + fprintf0 (GetDumpFile (), " (mononame)") END END DisplayProcedureAttributes ; @@ -13526,11 +13634,11 @@ BEGIN f := GetQF(BufferQuad) ; WITH f^ DO WriteOperator(Operator) ; - printf1(' [%d] ', NoOfTimesReferenced) ; + fprintf1 (GetDumpFile (), ' [%d] ', NoOfTimesReferenced) ; CASE Operator OF HighOp : WriteOperand(Operand1) ; - printf1(' %4d ', Operand2) ; + fprintf1 (GetDumpFile (), ' %4d ', Operand2) ; WriteOperand(Operand3) | InitAddressOp, SavePriorityOp, @@ -13548,7 +13656,7 @@ BEGIN StringConvertCnulOp, StringConvertM2nulOp, StringLengthOp : WriteOperand(Operand1) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand3) | ElementSizeOp, IfInOp, @@ -13559,22 +13667,22 @@ BEGIN IfGreOp, IfLessEquOp, IfGreEquOp : WriteOperand(Operand1) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand2) ; - printf1(' %4d', Operand3) | + fprintf1 (GetDumpFile (), ' %4d', Operand3) | InlineOp, RetryOp, TryOp, - GotoOp : printf1('%4d', Operand3) | + GotoOp : fprintf1 (GetDumpFile (), '%4d', Operand3) | StatementNoteOp : l := TokenToLineNo(Operand3, 0) ; n := GetTokenName (Operand3) ; - printf4('%a:%d:%a (tokenno %d)', Operand1, l, n, Operand3) | - LineNumberOp : printf2('%a:%d', Operand1, Operand3) | + fprintf4 (GetDumpFile (), '%a:%d:%a (tokenno %d)', Operand1, l, n, Operand3) | + LineNumberOp : fprintf2 (GetDumpFile (), '%a:%d', Operand1, Operand3) | EndFileOp : n1 := GetSymName(Operand3) ; - printf1('%a', n1) | + fprintf1 (GetDumpFile (), '%a', n1) | ThrowOp, ReturnOp, @@ -13583,7 +13691,7 @@ BEGIN ProcedureScopeOp : n1 := GetSymName(Operand2) ; n2 := GetSymName(Operand3) ; - printf3(' %4d %a %a', Operand1, n1, n2) ; + fprintf3 (GetDumpFile (), ' %4d %a %a', Operand1, n1, n2) ; DisplayProcedureAttributes (Operand3) | NewLocalVarOp, FinallyStartOp, @@ -13591,19 +13699,19 @@ BEGIN InitEndOp, InitStartOp : n1 := GetSymName(Operand2) ; n2 := GetSymName(Operand3) ; - printf3(' %4d %a %a', Operand1, n1, n2) | + fprintf3 (GetDumpFile (), ' %4d %a %a', Operand1, n1, n2) | ModuleScopeOp, StartModFileOp : n1 := GetSymName(Operand3) ; - printf4('%a:%d %a(%d)', Operand2, Operand1, n1, Operand3) | + fprintf4 (GetDumpFile (), '%a:%d %a(%d)', Operand2, Operand1, n1, Operand3) | StartDefFileOp : n1 := GetSymName(Operand3) ; - printf2(' %4d %a', Operand1, n1) | + fprintf2 (GetDumpFile (), ' %4d %a', Operand1, n1) | OptParamOp, - ParamOp : printf1('%4d ', Operand1) ; + ParamOp : fprintf1 (GetDumpFile (), '%4d ', Operand1) ; WriteOperand(Operand2) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand3) | SizeOp, RecordFieldOp, @@ -13631,9 +13739,9 @@ BEGIN DivFloorOp, ModTruncOp, DivTruncOp : WriteOperand(Operand1) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand2) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand3) | DummyOp, CodeOnOp, @@ -13643,23 +13751,23 @@ BEGIN OptimizeOnOp, OptimizeOffOp : | BuiltinConstOp : WriteOperand(Operand1) ; - printf1(' %a', Operand3) | + fprintf1 (GetDumpFile (), ' %a', Operand3) | BuiltinTypeInfoOp : WriteOperand(Operand1) ; - printf1(' %a', Operand2) ; - printf1(' %a', Operand3) | + fprintf1 (GetDumpFile (), ' %a', Operand2) ; + fprintf1 (GetDumpFile (), ' %a', Operand3) | StandardFunctionOp: WriteOperand(Operand1) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand2) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand3) | CatchBeginOp, CatchEndOp : | RangeCheckOp, - ErrorOp : WriteRangeCheck(Operand3) | + ErrorOp : WriteRangeCheck (Operand3) | SaveExceptionOp, RestoreExceptionOp: WriteOperand(Operand1) ; - printf0(' ') ; + fprintf0 (GetDumpFile (), ' ') ; WriteOperand(Operand3) ELSE @@ -13677,96 +13785,96 @@ PROCEDURE WriteOperator (Operator: QuadOperator) ; BEGIN CASE Operator OF - ArithAddOp : printf0('Arith + ') | - InitAddressOp : printf0('InitAddress ') | - LogicalOrOp : printf0('Or ') | - LogicalAndOp : printf0('And ') | - LogicalXorOp : printf0('Xor ') | - LogicalDiffOp : printf0('Ldiff ') | - LogicalShiftOp : printf0('Shift ') | - LogicalRotateOp : printf0('Rotate ') | - BecomesOp : printf0('Becomes ') | - IndrXOp : printf0('IndrX ') | - XIndrOp : printf0('XIndr ') | - ArrayOp : printf0('Array ') | - ElementSizeOp : printf0('ElementSize ') | - RecordFieldOp : printf0('RecordField ') | - AddrOp : printf0('Addr ') | - SizeOp : printf0('Size ') | - IfInOp : printf0('If IN ') | - IfNotInOp : printf0('If NOT IN ') | - IfNotEquOp : printf0('If <> ') | - IfEquOp : printf0('If = ') | - IfLessEquOp : printf0('If <= ') | - IfGreEquOp : printf0('If >= ') | - IfGreOp : printf0('If > ') | - IfLessOp : printf0('If < ') | - GotoOp : printf0('Goto ') | - DummyOp : printf0('Dummy ') | - ModuleScopeOp : printf0('ModuleScopeOp ') | - StartDefFileOp : printf0('StartDefFile ') | - StartModFileOp : printf0('StartModFile ') | - EndFileOp : printf0('EndFileOp ') | - InitStartOp : printf0('InitStart ') | - InitEndOp : printf0('InitEnd ') | - FinallyStartOp : printf0('FinallyStart ') | - FinallyEndOp : printf0('FinallyEnd ') | - RetryOp : printf0('Retry ') | - TryOp : printf0('Try ') | - ThrowOp : printf0('Throw ') | - CatchBeginOp : printf0('CatchBegin ') | - CatchEndOp : printf0('CatchEnd ') | - AddOp : printf0('+ ') | - SubOp : printf0('- ') | - DivM2Op : printf0('DIV M2 ') | - ModM2Op : printf0('MOD M2 ') | - DivCeilOp : printf0('DIV ceil ') | - ModCeilOp : printf0('MOD ceil ') | - DivFloorOp : printf0('DIV floor ') | - ModFloorOp : printf0('MOD floor ') | - DivTruncOp : printf0('DIV trunc ') | - ModTruncOp : printf0('MOD trunc ') | - MultOp : printf0('* ') | - NegateOp : printf0('Negate ') | - InclOp : printf0('Incl ') | - ExclOp : printf0('Excl ') | - ReturnOp : printf0('Return ') | - ReturnValueOp : printf0('ReturnValue ') | - FunctValueOp : printf0('FunctValue ') | - CallOp : printf0('Call ') | - ParamOp : printf0('Param ') | - OptParamOp : printf0('OptParam ') | - NewLocalVarOp : printf0('NewLocalVar ') | - KillLocalVarOp : printf0('KillLocalVar ') | - ProcedureScopeOp : printf0('ProcedureScope ') | - UnboundedOp : printf0('Unbounded ') | - CoerceOp : printf0('Coerce ') | - ConvertOp : printf0('Convert ') | - CastOp : printf0('Cast ') | - HighOp : printf0('High ') | - CodeOnOp : printf0('CodeOn ') | - CodeOffOp : printf0('CodeOff ') | - ProfileOnOp : printf0('ProfileOn ') | - ProfileOffOp : printf0('ProfileOff ') | - OptimizeOnOp : printf0('OptimizeOn ') | - OptimizeOffOp : printf0('OptimizeOff ') | - InlineOp : printf0('Inline ') | - StatementNoteOp : printf0('StatementNote ') | - LineNumberOp : printf0('LineNumber ') | - BuiltinConstOp : printf0('BuiltinConst ') | - BuiltinTypeInfoOp : printf0('BuiltinTypeInfo ') | - StandardFunctionOp : printf0('StandardFunction ') | - SavePriorityOp : printf0('SavePriority ') | - RestorePriorityOp : printf0('RestorePriority ') | - RangeCheckOp : printf0('RangeCheck ') | - ErrorOp : printf0('Error ') | - SaveExceptionOp : printf0('SaveException ') | - RestoreExceptionOp : printf0('RestoreException ') | - StringConvertCnulOp : printf0('StringConvertCnul ') | - StringConvertM2nulOp : printf0('StringConvertM2nul') | - StringLengthOp : printf0('StringLength ') | - SubrangeHighOp : printf0('SubrangeHigh ') | - SubrangeLowOp : printf0('SubrangeLow ') + ArithAddOp : fprintf0 (GetDumpFile (), 'Arith + ') | + InitAddressOp : fprintf0 (GetDumpFile (), 'InitAddress ') | + LogicalOrOp : fprintf0 (GetDumpFile (), 'Or ') | + LogicalAndOp : fprintf0 (GetDumpFile (), 'And ') | + LogicalXorOp : fprintf0 (GetDumpFile (), 'Xor ') | + LogicalDiffOp : fprintf0 (GetDumpFile (), 'Ldiff ') | + LogicalShiftOp : fprintf0 (GetDumpFile (), 'Shift ') | + LogicalRotateOp : fprintf0 (GetDumpFile (), 'Rotate ') | + BecomesOp : fprintf0 (GetDumpFile (), 'Becomes ') | + IndrXOp : fprintf0 (GetDumpFile (), 'IndrX ') | + XIndrOp : fprintf0 (GetDumpFile (), 'XIndr ') | + ArrayOp : fprintf0 (GetDumpFile (), 'Array ') | + ElementSizeOp : fprintf0 (GetDumpFile (), 'ElementSize ') | + RecordFieldOp : fprintf0 (GetDumpFile (), 'RecordField ') | + AddrOp : fprintf0 (GetDumpFile (), 'Addr ') | + SizeOp : fprintf0 (GetDumpFile (), 'Size ') | + IfInOp : fprintf0 (GetDumpFile (), 'If IN ') | + IfNotInOp : fprintf0 (GetDumpFile (), 'If NOT IN ') | + IfNotEquOp : fprintf0 (GetDumpFile (), 'If <> ') | + IfEquOp : fprintf0 (GetDumpFile (), 'If = ') | + IfLessEquOp : fprintf0 (GetDumpFile (), 'If <= ') | + IfGreEquOp : fprintf0 (GetDumpFile (), 'If >= ') | + IfGreOp : fprintf0 (GetDumpFile (), 'If > ') | + IfLessOp : fprintf0 (GetDumpFile (), 'If < ') | + GotoOp : fprintf0 (GetDumpFile (), 'Goto ') | + DummyOp : fprintf0 (GetDumpFile (), 'Dummy ') | + ModuleScopeOp : fprintf0 (GetDumpFile (), 'ModuleScopeOp ') | + StartDefFileOp : fprintf0 (GetDumpFile (), 'StartDefFile ') | + StartModFileOp : fprintf0 (GetDumpFile (), 'StartModFile ') | + EndFileOp : fprintf0 (GetDumpFile (), 'EndFileOp ') | + InitStartOp : fprintf0 (GetDumpFile (), 'InitStart ') | + InitEndOp : fprintf0 (GetDumpFile (), 'InitEnd ') | + FinallyStartOp : fprintf0 (GetDumpFile (), 'FinallyStart ') | + FinallyEndOp : fprintf0 (GetDumpFile (), 'FinallyEnd ') | + RetryOp : fprintf0 (GetDumpFile (), 'Retry ') | + TryOp : fprintf0 (GetDumpFile (), 'Try ') | + ThrowOp : fprintf0 (GetDumpFile (), 'Throw ') | + CatchBeginOp : fprintf0 (GetDumpFile (), 'CatchBegin ') | + CatchEndOp : fprintf0 (GetDumpFile (), 'CatchEnd ') | + AddOp : fprintf0 (GetDumpFile (), '+ ') | + SubOp : fprintf0 (GetDumpFile (), '- ') | + DivM2Op : fprintf0 (GetDumpFile (), 'DIV M2 ') | + ModM2Op : fprintf0 (GetDumpFile (), 'MOD M2 ') | + DivCeilOp : fprintf0 (GetDumpFile (), 'DIV ceil ') | + ModCeilOp : fprintf0 (GetDumpFile (), 'MOD ceil ') | + DivFloorOp : fprintf0 (GetDumpFile (), 'DIV floor ') | + ModFloorOp : fprintf0 (GetDumpFile (), 'MOD floor ') | + DivTruncOp : fprintf0 (GetDumpFile (), 'DIV trunc ') | + ModTruncOp : fprintf0 (GetDumpFile (), 'MOD trunc ') | + MultOp : fprintf0 (GetDumpFile (), '* ') | + NegateOp : fprintf0 (GetDumpFile (), 'Negate ') | + InclOp : fprintf0 (GetDumpFile (), 'Incl ') | + ExclOp : fprintf0 (GetDumpFile (), 'Excl ') | + ReturnOp : fprintf0 (GetDumpFile (), 'Return ') | + ReturnValueOp : fprintf0 (GetDumpFile (), 'ReturnValue ') | + FunctValueOp : fprintf0 (GetDumpFile (), 'FunctValue ') | + CallOp : fprintf0 (GetDumpFile (), 'Call ') | + ParamOp : fprintf0 (GetDumpFile (), 'Param ') | + OptParamOp : fprintf0 (GetDumpFile (), 'OptParam ') | + NewLocalVarOp : fprintf0 (GetDumpFile (), 'NewLocalVar ') | + KillLocalVarOp : fprintf0 (GetDumpFile (), 'KillLocalVar ') | + ProcedureScopeOp : fprintf0 (GetDumpFile (), 'ProcedureScope ') | + UnboundedOp : fprintf0 (GetDumpFile (), 'Unbounded ') | + CoerceOp : fprintf0 (GetDumpFile (), 'Coerce ') | + ConvertOp : fprintf0 (GetDumpFile (), 'Convert ') | + CastOp : fprintf0 (GetDumpFile (), 'Cast ') | + HighOp : fprintf0 (GetDumpFile (), 'High ') | + CodeOnOp : fprintf0 (GetDumpFile (), 'CodeOn ') | + CodeOffOp : fprintf0 (GetDumpFile (), 'CodeOff ') | + ProfileOnOp : fprintf0 (GetDumpFile (), 'ProfileOn ') | + ProfileOffOp : fprintf0 (GetDumpFile (), 'ProfileOff ') | + OptimizeOnOp : fprintf0 (GetDumpFile (), 'OptimizeOn ') | + OptimizeOffOp : fprintf0 (GetDumpFile (), 'OptimizeOff ') | + InlineOp : fprintf0 (GetDumpFile (), 'Inline ') | + StatementNoteOp : fprintf0 (GetDumpFile (), 'StatementNote ') | + LineNumberOp : fprintf0 (GetDumpFile (), 'LineNumber ') | + BuiltinConstOp : fprintf0 (GetDumpFile (), 'BuiltinConst ') | + BuiltinTypeInfoOp : fprintf0 (GetDumpFile (), 'BuiltinTypeInfo ') | + StandardFunctionOp : fprintf0 (GetDumpFile (), 'StandardFunction ') | + SavePriorityOp : fprintf0 (GetDumpFile (), 'SavePriority ') | + RestorePriorityOp : fprintf0 (GetDumpFile (), 'RestorePriority ') | + RangeCheckOp : fprintf0 (GetDumpFile (), 'RangeCheck ') | + ErrorOp : fprintf0 (GetDumpFile (), 'Error ') | + SaveExceptionOp : fprintf0 (GetDumpFile (), 'SaveException ') | + RestoreExceptionOp : fprintf0 (GetDumpFile (), 'RestoreException ') | + StringConvertCnulOp : fprintf0 (GetDumpFile (), 'StringConvertCnul ') | + StringConvertM2nulOp : fprintf0 (GetDumpFile (), 'StringConvertM2nul') | + StringLengthOp : fprintf0 (GetDumpFile (), 'StringLength ') | + SubrangeHighOp : fprintf0 (GetDumpFile (), 'SubrangeHigh ') | + SubrangeLowOp : fprintf0 (GetDumpFile (), 'SubrangeLow ') ELSE InternalError ('operator not expected') @@ -13784,15 +13892,15 @@ VAR BEGIN IF Sym = NulSym THEN - printf0 ('<nulsym>') + fprintf0 (GetDumpFile (), '<nulsym>') ELSE n := GetSymName (Sym) ; - printf1 ('%a', n) ; + fprintf1 (GetDumpFile (), '%a', n) ; IF IsVar (Sym) OR IsConst (Sym) THEN - printf0 ('[') ; WriteMode (GetMode (Sym)) ; printf0(']') + fprintf0 (GetDumpFile (), '[') ; WriteMode (GetMode (Sym)) ; fprintf0 (GetDumpFile (), ']') END ; - printf1 ('(%d)', Sym) + fprintf1 (GetDumpFile (), '(%d)', Sym) END END WriteOperand ; @@ -13801,10 +13909,10 @@ PROCEDURE WriteMode (Mode: ModeOfAddr) ; BEGIN CASE Mode OF - ImmediateValue: printf0('i') | - NoValue : printf0('n') | - RightValue : printf0('r') | - LeftValue : printf0('l') + ImmediateValue: fprintf0 (GetDumpFile (), 'i') | + NoValue : fprintf0 (GetDumpFile (), 'n') | + RightValue : fprintf0 (GetDumpFile (), 'r') | + LeftValue : fprintf0 (GetDumpFile (), 'l') ELSE InternalError ('unrecognised mode') @@ -15506,7 +15614,7 @@ BEGIN FreeLineList := NIL ; InitList(VarientFields) ; VarientFieldNo := 0 ; - NoOfQuads := 0 + NoOfQuads := 0 ; END Init ; diff --git a/gcc/m2/gm2-compiler/M2Scope.mod b/gcc/m2/gm2-compiler/M2Scope.mod index f157ad42ba6f..2c2ff459d81e 100644 --- a/gcc/m2/gm2-compiler/M2Scope.mod +++ b/gcc/m2/gm2-compiler/M2Scope.mod @@ -29,7 +29,6 @@ FROM SymbolTable IMPORT IsProcedure, IsDefImp, GetProcedureQuads, GetScope, GetProcedureScope, IsModule, IsModuleWithinProcedure, GetSymName, GetErrorScope, NulSym ; -FROM M2Options IMPORT DisplayQuadruples ; FROM M2Printf IMPORT printf0, printf1 ; FROM M2Quads IMPORT QuadOperator, GetFirstQuad, GetNextQuad, GetQuad, DisplayQuadRange ; FROM M2StackWord IMPORT StackOfWord, InitStackWord, KillStackWord, @@ -38,7 +37,8 @@ IMPORT M2Error ; CONST - Debugging = FALSE ; + Debugging = FALSE ; + TraceQuadruples = FALSE ; TYPE scopeKind = (unsetscope, ignorescope, procedurescope, modulescope, definitionscope, implementationscope, programscope) ; @@ -381,7 +381,7 @@ BEGIN ELSE sb := GetGlobalQuads (sb, scope) ; END ; - IF DisplayQuadruples + IF TraceQuadruples THEN DisplayScope (sb) END @@ -416,13 +416,13 @@ END KillScopeBlock ; PROCEDURE ForeachScopeBlockDo2 (sb: ScopeBlock; p: ScopeProcedure2) ; BEGIN - IF DisplayQuadruples + IF TraceQuadruples THEN printf0 ("ForeachScopeBlockDo\n") END ; WHILE sb#NIL DO WITH sb^ DO - IF DisplayQuadruples + IF TraceQuadruples THEN DisplayScope (sb) END ; @@ -435,7 +435,7 @@ BEGIN END ; sb := sb^.next END ; - IF DisplayQuadruples + IF TraceQuadruples THEN printf0 ("end ForeachScopeBlockDo\n\n") END ; @@ -449,13 +449,13 @@ END ForeachScopeBlockDo2 ; PROCEDURE ForeachScopeBlockDo3 (sb: ScopeBlock; p: ScopeProcedure3) ; BEGIN - IF DisplayQuadruples + IF TraceQuadruples THEN printf0 ("ForeachScopeBlockDo\n") END ; WHILE sb#NIL DO WITH sb^ DO - IF DisplayQuadruples + IF TraceQuadruples THEN DisplayScope (sb) END ; @@ -468,7 +468,7 @@ BEGIN END ; sb := sb^.next END ; - IF DisplayQuadruples + IF TraceQuadruples THEN printf0 ("end ForeachScopeBlockDo\n\n") END ; diff --git a/gcc/m2/gm2-compiler/SymbolConversion.def b/gcc/m2/gm2-compiler/SymbolConversion.def index 8f8d4650ce2f..81a52e4aa1ec 100644 --- a/gcc/m2/gm2-compiler/SymbolConversion.def +++ b/gcc/m2/gm2-compiler/SymbolConversion.def @@ -31,8 +31,6 @@ DEFINITION MODULE SymbolConversion ; FROM m2tree IMPORT Tree ; FROM SYSTEM IMPORT WORD ; -EXPORT QUALIFIED Mod2Gcc, AddModGcc, GccKnowsAbout, AddTemporaryKnown, - RemoveTemporaryKnown, Poison, RemoveMod2Gcc ; (* @@ -42,6 +40,13 @@ EXPORT QUALIFIED Mod2Gcc, AddModGcc, GccKnowsAbout, AddTemporaryKnown, PROCEDURE Mod2Gcc (sym: CARDINAL) : Tree ; +(* + Gcc2Mod - given a gcc tree return the modula-2 symbol. +*) + +PROCEDURE Gcc2Mod (tree: Tree) : CARDINAL ; + + (* AddModGcc - adds the tuple [ sym, gcc ] into the database. *) diff --git a/gcc/m2/gm2-compiler/SymbolConversion.mod b/gcc/m2/gm2-compiler/SymbolConversion.mod index b8f0f70b4355..738b40d5be52 100644 --- a/gcc/m2/gm2-compiler/SymbolConversion.mod +++ b/gcc/m2/gm2-compiler/SymbolConversion.mod @@ -24,10 +24,10 @@ IMPLEMENTATION MODULE SymbolConversion ; FROM NameKey IMPORT Name ; FROM Indexing IMPORT Index, InitIndex, PutIndice, GetIndice, InBounds, - DebugIndex, InitIndexTuned ; + DebugIndex, InitIndexTuned, HighIndice ; FROM SymbolTable IMPORT IsConst, PopValue, IsValueSolved, GetSymName, - GetType, SkipType ; + GetType, SkipType, NulSym ; FROM M2Error IMPORT InternalError ; FROM M2ALU IMPORT PushTypeOfTree ; @@ -87,6 +87,27 @@ BEGIN END Mod2Gcc ; +(* + Gcc2Mod - given a gcc tree return the modula-2 symbol. +*) + +PROCEDURE Gcc2Mod (tree: Tree) : CARDINAL ; +VAR + high, i: CARDINAL ; +BEGIN + i := 1 ; + high := HighIndice (mod2gcc) ; + WHILE i <= high DO + IF GetIndice (mod2gcc, i) = tree + THEN + RETURN i + END ; + INC (i) + END ; + RETURN NulSym +END Gcc2Mod ; + + (* AddModGcc - adds the tuple [ sym, gcc ] into the database. *) diff --git a/gcc/m2/gm2-gcc/m2langdump.h b/gcc/m2/gm2-gcc/m2langdump.h new file mode 100644 index 000000000000..4170d8538d95 --- /dev/null +++ b/gcc/m2/gm2-gcc/m2langdump.h @@ -0,0 +1,41 @@ +/* m2langdump.h header file for m2langdump.cc. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley <gaiusmod2@gmail.com>. + +This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GNU Modula-2 is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Modula-2; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +#if !defined(m2langdump_h) +#define m2langdump_h +#if defined(m2langdump_c) +#if defined(__GNUG__) +#define EXTERN extern "C" +#else /* !__GNUG__. */ +#define EXTERN +#endif /* !__GNUG__. */ +#else /* !m2langdump_c. */ +#if defined(__GNUG__) +#define EXTERN extern "C" +#else /* !__GNUG__. */ +#define EXTERN extern +#endif /* !__GNUG__. */ +#endif /* !m2langdump_c. */ + +EXTERN bool M2LangDump_IsDumpRequiredTree (tree fndecl, bool defaultvalue); + +#undef EXTERN +#endif /* m2langdump_h. */ diff --git a/gcc/m2/gm2-gcc/m2misc.cc b/gcc/m2/gm2-gcc/m2misc.cc index d69f33c003da..451abfe14f90 100644 --- a/gcc/m2/gm2-gcc/m2misc.cc +++ b/gcc/m2/gm2-gcc/m2misc.cc @@ -29,7 +29,7 @@ along with GNU Modula-2; see the file COPYING3. If not see #include "m2misc.h" #include "m2tree.h" -/* DebugTree - display the tree, t. */ +/* DebugTree - display the tree t. */ void m2misc_DebugTree (tree t) @@ -37,7 +37,7 @@ m2misc_DebugTree (tree t) debug_tree (t); } -/* DebugTree - display the tree, t. */ +/* DebugTree - display the trees chained in t. */ void m2misc_DebugTreeChain (tree t) @@ -46,7 +46,7 @@ m2misc_DebugTreeChain (tree t) debug_tree (t); } -/* DebugTree - display the tree, t. */ +/* DebugTree - display the current statement list. */ void m2misc_printStmt (void) diff --git a/gcc/m2/gm2-gcc/m2options.h b/gcc/m2/gm2-gcc/m2options.h index 01256a9fc80d..a03fdc5975f0 100644 --- a/gcc/m2/gm2-gcc/m2options.h +++ b/gcc/m2/gm2-gcc/m2options.h @@ -152,6 +152,15 @@ EXTERN void M2Options_SetIBMLongDouble (bool value); EXTERN bool M2Options_GetIBMLongDouble (void); EXTERN void M2Options_SetIEEELongDouble (bool value); EXTERN bool M2Options_GetIEEELongDouble (void); +EXTERN bool M2Options_GetDumpLangDeclFilename (void); +EXTERN void M2Options_SetDumpLangDeclFilename (bool value, const char *arg); +EXTERN bool M2Options_GetDumpLangQuadFilename (void); +EXTERN void M2Options_SetDumpLangQuadFilename (bool value, const char *arg); +EXTERN bool M2Options_GetDumpLangGimpleFilename (void); +EXTERN void M2Options_SetDumpLangGimpleFilename (bool value, const char *arg); +EXTERN bool M2Options_GetDumpLangGimple (void); +EXTERN void M2Options_SetM2DumpFilter (bool value, const char *args); +EXTERN char *M2Options_GetM2DumpFilter (void); #undef EXTERN #endif /* m2options_h. */ diff --git a/gcc/m2/m2pp.cc b/gcc/m2/gm2-gcc/m2pp.cc similarity index 90% rename from gcc/m2/m2pp.cc rename to gcc/m2/gm2-gcc/m2pp.cc index 2f4c45ced141..de8015864e36 100644 --- a/gcc/m2/m2pp.cc +++ b/gcc/m2/gm2-gcc/m2pp.cc @@ -19,28 +19,27 @@ You should have received a copy of the GNU General Public License along with GNU Modula-2; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ -#if defined(GM2) -#include "gm2-gcc/gcc-consolidation.h" +#include "gcc-consolidation.h" -#include "m2-tree.h" -#include "gm2-lang.h" +#include "../m2-tree.h" +#include "../gm2-lang.h" -#include "gm2-gcc/m2tree.h" -#include "gm2-gcc/m2expr.h" -#include "gm2-gcc/m2type.h" -#include "gm2-gcc/m2decl.h" -#else -#include "config.h" -#include "system.h" -#include "coretypes.h" -#include "cp/cp-tree.h" -#include "stringpool.h" -#include "gm2-gcc/gcc-consolidation.h" -#include "../cp/cp-tree.h" -#endif +#include "m2tree.h" +#include "m2expr.h" +#include "m2type.h" +#include "m2decl.h" +#include "m2options.h" +#include "m2langdump.h" #define M2PP_C -#include "m2/m2pp.h" +#include "m2pp.h" + +const char *m2pp_dump_description[M2PP_DUMP_END] = +{ + "interactive user invoked output", + "modula-2 gimple trees pre genercize", + "modula-2 gimple trees post genercize", +}; namespace modula2 { @@ -48,13 +47,14 @@ namespace modula2 { typedef struct pretty_t { - int needs_space; - int needs_indent; + m2pp_dump_kind output; + bool needs_space; + bool needs_indent; int curpos; int indent; - int issued_begin; - int in_vars; - int in_types; + bool issued_begin; + bool in_vars; + bool in_types; tree block; int bits; } pretty; @@ -67,7 +67,7 @@ typedef struct m2stack_t /* Prototypes. */ -static pretty *initPretty (int bits); +static pretty *initPretty (m2pp_dump_kind kind, int bits); static pretty *dupPretty (pretty *s); static int getindent (pretty *s); static void setindent (pretty *s, int n); @@ -153,9 +153,11 @@ static void m2pp_translation (pretty *s, tree t); static void m2pp_module_block (pretty *s, tree t); static void push (tree t); static void pop (void); -static int begin_printed (tree t); +static bool begin_printed (tree t); static void m2pp_decl_list (pretty *s, tree t); static void m2pp_loc (pretty *s, tree t); +static FILE *getoutput (pretty *s); + void pet (tree t); void m2pp_integer (pretty *s, tree t); @@ -163,13 +165,14 @@ void m2pp_integer (pretty *s, tree t); extern void stop (void); static stack *stackPtr = NULL; +static FILE *m2pp_output_file[M2PP_DUMP_END]; /* do_pf helper function for pf. */ void do_pf (tree t, int bits) { - pretty *state = initPretty (bits); + pretty *state = initPretty (M2PP_DUMP_STDOUT, bits); if (TREE_CODE (t) == TRANSLATION_UNIT_DECL) m2pp_translation (state, t); @@ -188,7 +191,7 @@ do_pf (tree t, int bits) void pf (tree t) { - do_pf (t, FALSE); + do_pf (t, false); } /* pe print expression. Expected to be printed interactively from @@ -197,7 +200,7 @@ pf (tree t) void pe (tree t) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); m2pp_expression (state, t); m2pp_needspace (state); @@ -212,7 +215,7 @@ pe (tree t) void pet (tree t) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); m2pp_expression (state, t); m2pp_needspace (state); @@ -228,7 +231,7 @@ pet (tree t) void pt (tree t) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); m2pp_type (state, t); m2pp_needspace (state); m2pp_print (state, ";\n"); @@ -241,7 +244,7 @@ pt (tree t) void ptl (tree t) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); m2pp_type_lowlevel (state, t); m2pp_needspace (state); m2pp_print (state, ";\n"); @@ -253,7 +256,7 @@ ptl (tree t) void ptcl (tree t) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); m2pp_decl_list (state, t); m2pp_print (state, "\n"); @@ -278,7 +281,7 @@ m2pp_loc (pretty *s, tree t) m2pp_print (s, "(* "); m2pp_print (s, l.file); m2pp_print (s, ":"); - printf ("%d", l.line); + fprintf (getoutput (s), "%d", l.line); m2pp_print (s, " *)"); m2pp_print (s, "\n"); } @@ -332,7 +335,7 @@ pv (tree t) if (code == PARM_DECL) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); m2pp_identifier (state, t); m2pp_needspace (state); m2pp_print (state, "<parm_decl context = "); @@ -350,7 +353,7 @@ pv (tree t) } if (code == VAR_DECL) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); m2pp_identifier (state, t); m2pp_needspace (state); m2pp_print (state, "(* <var_decl context = "); @@ -407,9 +410,9 @@ pop (void) free (s); } -/* being_printed returns TRUE if t is held on the stack. */ +/* being_printed returns true if t is held on the stack. */ -static int +static bool begin_printed (tree t) { stack *s = stackPtr; @@ -417,11 +420,11 @@ begin_printed (tree t) while (s != NULL) { if (s->value == t) - return TRUE; + return true; else s = s->next; } - return FALSE; + return false; } /* dupPretty duplicate and return a copy of state s. */ @@ -429,7 +432,7 @@ begin_printed (tree t) static pretty * dupPretty (pretty *s) { - pretty *p = initPretty (s->bits); + pretty *p = initPretty (s->output, s->bits); *p = *s; return p; } @@ -437,16 +440,17 @@ dupPretty (pretty *s) /* initPretty initialise the state of the pretty printer. */ static pretty * -initPretty (int bits) +initPretty (m2pp_dump_kind kind, int bits) { pretty *state = (pretty *)xmalloc (sizeof (pretty)); - state->needs_space = FALSE; - state->needs_indent = FALSE; + state->output = kind; + state->needs_space = false; + state->needs_indent = false; state->curpos = 0; state->indent = 0; - state->issued_begin = FALSE; - state->in_vars = FALSE; - state->in_types = FALSE; + state->issued_begin = false; + state->in_vars = false; + state->in_types = false; state->block = NULL_TREE; state->bits = bits; return state; @@ -457,8 +461,8 @@ initPretty (int bits) static void killPretty (pretty *s) { + fflush (getoutput (s)); free (s); - fflush (stdout); } /* getindent returns the current indent value. */ @@ -488,6 +492,12 @@ getcurpos (pretty *s) return s->curpos; } +static FILE * +getoutput (pretty *s) +{ + return m2pp_output_file[s->output]; +} + /* m2pp_type_lowlevel prints out the low level details of a fundamental type. */ @@ -509,9 +519,10 @@ m2pp_type_lowlevel (pretty *s, tree t) m2pp_needspace (s); m2pp_integer_cst (s, TYPE_SIZE (t)); - printf (", precision %d, mode %d, align %d, user align %d", - TYPE_PRECISION (t), TYPE_MODE (t), TYPE_ALIGN (t), - TYPE_USER_ALIGN (t)); + fprintf (getoutput (s), + ", precision %d, mode %d, align %d, user align %d", + TYPE_PRECISION (t), TYPE_MODE (t), TYPE_ALIGN (t), + TYPE_USER_ALIGN (t)); m2pp_needspace (s); if (TYPE_UNSIGNED (t)) @@ -528,7 +539,7 @@ m2pp_var (pretty *s) { if (!s->in_vars) { - s->in_vars = TRUE; + s->in_vars = true; m2pp_print (s, "VAR\n"); setindent (s, getindent (s) + 3); } @@ -541,7 +552,7 @@ m2pp_types (pretty *s) { if (!s->in_types) { - s->in_types = TRUE; + s->in_types = true; m2pp_print (s, "TYPE\n"); setindent (s, getindent (s) + 3); } @@ -581,7 +592,7 @@ hextree (tree t) } if (VAR_P (t)) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); printf ("(* VAR_DECL %p <", (void *)t); if (DECL_SEEN_IN_BIND_EXPR_P (t)) @@ -598,7 +609,7 @@ hextree (tree t) } if (TREE_CODE (t) == PARM_DECL) { - pretty *state = initPretty (FALSE); + pretty *state = initPretty (M2PP_DUMP_STDOUT, 0); printf ("(* PARM_DECL %p <", (void *)t); printf ("> context = %p*)\n", (void *)decl_function_context (t)); @@ -647,14 +658,14 @@ m2pp_module_block (pretty *s, tree t) if (!DECL_EXTERNAL (t)) { pretty *p = dupPretty (s); - printf ("\n"); - p->in_vars = FALSE; - p->in_types = FALSE; + fprintf (getoutput (s), "\n"); + p->in_vars = false; + p->in_types = false; m2pp_function (p, t); killPretty (p); - printf ("\n"); - s->in_vars = FALSE; - s->in_types = FALSE; + fprintf (getoutput (s), "\n"); + s->in_vars = false; + s->in_types = false; } break; @@ -674,7 +685,7 @@ m2pp_module_block (pretty *s, tree t) setindent (s, o); m2pp_needspace (s); m2pp_print (s, ";\n"); - s->in_vars = FALSE; + s->in_vars = false; } break; @@ -687,11 +698,11 @@ m2pp_module_block (pretty *s, tree t) m2pp_type (s, TREE_TYPE (t)); m2pp_needspace (s); m2pp_print (s, ";\n"); - s->in_types = FALSE; + s->in_types = false; break; case DECL_EXPR: - printf ("is this node legal here? \n"); + fprintf (getoutput (s), "is this node legal here? \n"); m2pp_decl_expr (s, t); break; @@ -719,9 +730,9 @@ m2pp_begin (pretty *s) m2pp_print (s, "BEGIN\n"); setindent (s, getindent (s) + 3); } - s->issued_begin = TRUE; - s->in_vars = FALSE; - s->in_types = FALSE; + s->issued_begin = true; + s->in_vars = false; + s->in_types = false; } } @@ -817,18 +828,18 @@ m2pp_var_list (pretty *s, tree t) if (TREE_CODE (t) == FUNCTION_DECL) { pretty *p = dupPretty (s); - printf ("\n"); - p->in_vars = FALSE; - p->in_types = FALSE; + fprintf (getoutput (s), "\n"); + p->in_vars = false; + p->in_types = false; m2pp_function (p, t); killPretty (p); - printf ("\n"); + fprintf (getoutput (s), "\n"); } else if (TREE_CODE (t) == TYPE_DECL) m2pp_identifier (s, t); else if (TREE_CODE (t) == DECL_EXPR) { - printf ("is this node legal here? \n"); + fprintf (getoutput (s), "is this node legal here? \n"); // is it legal to have a DECL_EXPR here ? m2pp_var_type_decl (s, DECL_EXPR_DECL (t)); } @@ -857,12 +868,12 @@ m2pp_type_list (pretty *s, tree t) } #endif -/* m2pp_needspace sets appropriate flag to TRUE. */ +/* m2pp_needspace sets appropriate flag to true. */ static void m2pp_needspace (pretty *s) { - s->needs_space = TRUE; + s->needs_space = true; } /* m2pp_identifer prints an identifier. */ @@ -957,7 +968,7 @@ m2pp_procedure_type (pretty *s, tree t) { int o = getindent (s); int p; - int first = TRUE; + bool first = true; m2pp_print (s, "("); p = getcurpos (s); @@ -986,7 +997,7 @@ m2pp_procedure_type (pretty *s, tree t) m2pp_param_type (s, TREE_VALUE (i)); } i = TREE_CHAIN (i); - first = FALSE; + first = false; } m2pp_print (s, ")"); setindent (s, o); @@ -1158,8 +1169,8 @@ m2pp_print (pretty *s, const char *p) if (s->needs_space) { - printf (" "); - s->needs_space = FALSE; + fprintf (getoutput (s), " "); + s->needs_space = false; s->curpos++; } @@ -1167,21 +1178,21 @@ m2pp_print (pretty *s, const char *p) { if (p[i] == '\n') { - s->needs_indent = TRUE; + s->needs_indent = true; s->curpos = 0; - printf ("\n"); + fprintf (getoutput (s), "\n"); } else { if (s->needs_indent) { if (s->indent > 0) - printf ("%*c", s->indent, ' '); - s->needs_indent = FALSE; + fprintf (getoutput (s), "%*c", s->indent, ' '); + s->needs_indent = false; s->curpos += s->indent; } s->curpos++; - putchar (p[i]); + fputc (p[i], getoutput (s)); } i++; } @@ -1196,25 +1207,25 @@ m2pp_print_char (pretty *s, char ch) { if (s->needs_space) { - printf (" "); - s->needs_space = FALSE; + fprintf (getoutput (s), " "); + s->needs_space = false; s->curpos++; } if (s->needs_indent) { if (s->indent > 0) - printf ("%*c", s->indent, ' '); - s->needs_indent = FALSE; + fprintf (getoutput (s), "%*c", s->indent, ' '); + s->needs_indent = false; s->curpos += s->indent; } if (ch == '\n') { s->curpos++; - putchar ('\\'); - putchar ('n'); + fputc ('\\', getoutput (s)); + fputc ('n', getoutput (s)); } else - putchar (ch); + fputc (ch, getoutput (s)); s->curpos++; } @@ -1531,7 +1542,7 @@ m2pp_recordfield_alignment (pretty *s, tree t) m2pp_print (s, "<* bytealignment ("); setindent (s, p + 18); - printf ("%d", aligned / BITS_PER_UNIT); + fprintf (getoutput (s), "%d", aligned / BITS_PER_UNIT); m2pp_print (s, ")"); m2pp_needspace (s); @@ -2247,13 +2258,13 @@ m2pp_try_finally_expr (pretty *s, tree t) m2pp_print (s, "(* end try_finally_expr *)\n"); } -#if !defined(GM2) -/* m2pp_if_stmt pretty print a C++ if_stmt. */ +/* m2pp_if_stmt pretty print a if_stmt tree. Modula-2 does not use this to + generate IF THEN ELSE END statements, instead it uses labels and gotos. */ static void m2pp_if_stmt (pretty *s, tree t) { - m2pp_print (s, "(* only C++ uses if_stmt nodes *)\n"); + m2pp_print (s, "(* An if_stmt node. *)\n"); m2pp_print (s, "IF "); m2pp_expression (s, TREE_OPERAND (t, 0)); m2pp_print (s, "\n"); @@ -2267,7 +2278,6 @@ m2pp_if_stmt (pretty *s, tree t) setindent (s, getindent (s) - 3); m2pp_print (s, "END\n"); } -#endif static void m2pp_asm_expr (pretty *state, tree node) @@ -2362,11 +2372,9 @@ m2pp_statement (pretty *s, tree t) case ASM_EXPR: m2pp_asm_expr (s, t); break; -#if defined(CPP) case IF_STMT: m2pp_if_stmt (s, t); break; -#endif case ERROR_MARK: m2pp_print (s, "<ERROR CODE>\n"); break; @@ -2396,9 +2404,9 @@ static void m2pp_cleanup_point_expr (pretty *s, tree t) { m2pp_begin (s); - m2pp_print (s, "(* cleanup point begins *)\n"); + m2pp_print (s, "(* Cleanup point begins. *)\n"); m2pp_expression (s, TREE_OPERAND (t, 0)); - m2pp_print (s, "(* cleanup point ends *)\n"); + m2pp_print (s, "(* Cleanup point ends. *)\n"); } /* m2pp_decl_expr displays a local declaration. */ @@ -2407,7 +2415,7 @@ static void m2pp_decl_expr (pretty *s, tree t) { m2pp_var (s); - m2pp_print (s, "(* variable in decl_expr *)\n"); + m2pp_print (s, "(* Variable in decl_expr. *)\n"); m2pp_var_type_decl (s, DECL_EXPR_DECL (t)); } @@ -2452,11 +2460,11 @@ m2pp_call_expr (pretty *s, tree t) tree call = CALL_EXPR_FN (t); tree args = TREE_OPERAND (t, 1); tree type = TREE_TYPE (t); - int has_return_type = TRUE; + bool has_return_type = true; tree proc; if (type && VOID_TYPE_P (type)) - has_return_type = FALSE; + has_return_type = false; if (TREE_CODE (call) == ADDR_EXPR || TREE_CODE (call) == NON_LVALUE_EXPR) proc = TREE_OPERAND (call, 0); @@ -2738,3 +2746,102 @@ m2pp_component_ref (pretty *s, tree t) } } + +/* Code interface to this module. */ + +/* CreateDumpGimple creates the dump files using the template name. */ + +void +m2pp_CreateDumpGimple (char *template_name, int template_len) +{ + int kind = M2PP_DUMP_STDOUT; + modula2::m2pp_output_file[kind] = stdout; + kind++; + for (; kind < M2PP_DUMP_END; kind++) + { + if (kind == M2PP_DUMP_FD) + modula2::m2pp_output_file[kind] = NULL; + else + { + char *name = (char *)alloca (template_len); + + snprintf (name, template_len, template_name, kind); + modula2::m2pp_output_file[kind] = fopen (name, "w"); + if (modula2::m2pp_output_file[kind] == NULL) + { + fprintf (stderr, "unable to create dump file %s: %s\n", + name, xstrerror (errno)); + exit (1); + } + fprintf (modula2::m2pp_output_file[kind], "%s\n\n", + m2pp_dump_description[kind]); + } + } +} + +/* Close all dump files and fflush stdout. */ + +void +m2pp_CloseDumpGimple (void) +{ + int kind = M2PP_DUMP_STDOUT; + fflush (modula2::m2pp_output_file[kind]); + kind++; + for (; kind < M2PP_DUMP_END; kind++) + if (kind != M2PP_DUMP_FD) + fclose (modula2::m2pp_output_file[kind]); +} + +/* m2pp_dump_gimple_pretty create an initPretty object and print + fndecl to kind output. */ + +void +m2pp_dump_gimple_pretty (m2pp_dump_kind kind, tree fndecl) +{ + modula2::pretty *state = modula2::initPretty (kind, 0); + + modula2::m2pp_print (state, "\n"); + if (TREE_CODE (fndecl) == TRANSLATION_UNIT_DECL) + modula2::m2pp_translation (state, fndecl); + else if (TREE_CODE (fndecl) == BLOCK) + modula2::m2pp_module_block (state, fndecl); + else if (TREE_CODE (fndecl) == FUNCTION_DECL) + modula2::m2pp_function (state, fndecl); + else + modula2::m2pp_statement_sequence (state, fndecl); + modula2::killPretty (state); +} + + +/* Generate modula-2 style gimple for fndecl. */ + +void +m2pp_dump_gimple (m2pp_dump_kind kind, tree fndecl) +{ + if (M2Options_GetDumpLangGimple () + && M2LangDump_IsDumpRequiredTree (fndecl, true)) + m2pp_dump_gimple_pretty (kind, fndecl); +} + + +/* Dump fndecl to a file descriptor. */ + +void +m2pp_DumpGimpleFd (int fd, tree fndecl) +{ + FILE *f = fdopen (fd, "a"); + if (f != NULL) + { +#if 0 + modula2::m2pp_output_file[M2PP_DUMP_FD] = f; + m2pp_dump_gimple_pretty (M2PP_DUMP_FD, fndecl); + fprintf (f, "\n"); +#endif + print_node (f, "m2 tree", fndecl, 1); + fprintf (f, "\n\n"); + fflush (f); +#if 0 + modula2::m2pp_output_file[M2PP_DUMP_FD] = NULL; +#endif + } +} diff --git a/gcc/m2/gm2-gcc/m2pp.def b/gcc/m2/gm2-gcc/m2pp.def new file mode 100644 index 000000000000..20077176da2e --- /dev/null +++ b/gcc/m2/gm2-gcc/m2pp.def @@ -0,0 +1,45 @@ +(* m2pp.def definition module for m2pp.cc. + +Copyright (C) 2024 Free Software Foundation, Inc. +Contributed by Gaius Mulley <gaiusmod2@gmail.com>. + +This file is part of GNU Modula-2. + +GNU Modula-2 is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GNU Modula-2 is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Modula-2; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. *) + +DEFINITION MODULE FOR "C" m2pp ; + +FROM SYSTEM IMPORT ADDRESS ; +FROM m2tree IMPORT Tree ; + + +(* + CreateDumpGimple - create the gimple dump files. +*) + +PROCEDURE CreateDumpGimple (templatename: ADDRESS; templatelen: CARDINAL) ; + + +(* + CloseDumpGimple - close the gimple dump files. +*) + +PROCEDURE CloseDumpGimple ; + + +PROCEDURE DumpGimpleFd (fd: INTEGER; fndecl: Tree) ; + + +END m2pp. diff --git a/gcc/m2/m2pp.h b/gcc/m2/gm2-gcc/m2pp.h similarity index 54% rename from gcc/m2/m2pp.h rename to gcc/m2/gm2-gcc/m2pp.h index e901102fab7c..6391bda59569 100644 --- a/gcc/m2/m2pp.h +++ b/gcc/m2/gm2-gcc/m2pp.h @@ -19,17 +19,39 @@ You should have received a copy of the GNU General Public License along with GNU Modula-2; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ -#if !defined(M2PP_H) -# define M2PP_H +#if !defined(m2pp_h) +#define m2pp_h +#if defined(m2pp_c) +#if defined(__GNUG__) +#define EXTERN extern "C" +#else /* !__GNUG__. */ +#define EXTERN +#endif /* !__GNUG__. */ +#else /* !m2pp_c. */ +#if defined(__GNUG__) +#define EXTERN extern "C" +#else /* !__GNUG__. */ +#define EXTERN extern +#endif /* !__GNUG__. */ +#endif /* !m2pp_c. */ -# if defined(M2PP_C) -# define EXTERN -# else -# define EXTERN extern -# endif +typedef enum +{ + M2PP_DUMP_STDOUT, /* This must remain the first field. */ + M2PP_DUMP_PRE_GENERICIZE, + M2PP_DUMP_POST_GENERICIZE, + M2PP_DUMP_FD, + M2PP_DUMP_END, +} m2pp_dump_kind; + +EXTERN void m2pp_CreateDumpGimple (char *template_name, int template_len); +EXTERN void m2pp_dump_gimple (m2pp_dump_kind kind, tree fndecl); +EXTERN void m2pp_CloseDumpGimple (void); +EXTERN void m2pp_DumpGimpleFd (int fd, tree fndecl); namespace modula2 { -/* These functions allow a maintainer to dump the trees in Modula-2. */ +/* GDB Interactive interface to m2pp. Allow a maintainer to dump + the trees in Modula-2. */ EXTERN void pf (tree t); EXTERN void pe (tree t); diff --git a/gcc/m2/gm2-gcc/m2statement.cc b/gcc/m2/gm2-gcc/m2statement.cc index 3c048d40a99a..dd7f2529f5d3 100644 --- a/gcc/m2/gm2-gcc/m2statement.cc +++ b/gcc/m2/gm2-gcc/m2statement.cc @@ -36,6 +36,7 @@ along with GNU Modula-2; see the file COPYING3. If not see #include "m2treelib.h" #include "m2type.h" #include "m2convert.h" +#include "m2pp.h" static GTY (()) tree param_list = NULL_TREE; /* Ready for the next time we call/define a function. */ @@ -102,11 +103,15 @@ m2statement_BuildEndFunctionCode (location_t location, tree fndecl, bool nested) m2block_finishFunctionCode (fndecl); m2statement_SetEndLocation (location); + m2pp_dump_gimple (M2PP_DUMP_PRE_GENERICIZE, fndecl); gm2_genericize (fndecl); if (nested) (void)cgraph_node::get_create (fndecl); else - cgraph_node::finalize_function (fndecl, false); + { + m2pp_dump_gimple (M2PP_DUMP_POST_GENERICIZE, fndecl); + cgraph_node::finalize_function (fndecl, false); + } m2block_popFunctionScope (); diff --git a/gcc/m2/gm2-lang.cc b/gcc/m2/gm2-lang.cc index 86124df603a4..bde68368e1fc 100644 --- a/gcc/m2/gm2-lang.cc +++ b/gcc/m2/gm2-lang.cc @@ -42,6 +42,8 @@ Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "convert.h" #include "rtegraph.h" +#undef ENABLE_QUAD_DUMP_ALL + static void write_globals (void); static int insideCppArgs = FALSE; @@ -214,8 +216,7 @@ gm2_langhook_init_options (unsigned int decoded_options_count, M2Options_Setc (value); break; case OPT_dumpdir: - if (building_cpp_command) - M2Options_SetDumpDir (arg); + M2Options_SetDumpDir (arg); break; case OPT_save_temps: if (building_cpp_command) @@ -407,6 +408,9 @@ gm2_langhook_handle_option ( switch (code) { + case OPT_dumpdir: + M2Options_SetDumpDir (arg); + return 1; case OPT_I: push_back_Ipath (arg); return 1; @@ -479,6 +483,31 @@ gm2_langhook_handle_option ( case OPT_fdebug_function_line_numbers: M2Options_SetDebugFunctionLineNumbers (value); return 1; +#ifdef ENABLE_QUAD_DUMP_ALL + case OPT_fdump_lang_all: + M2Options_SetDumpLangDeclFilename (value, NULL); + M2Options_SetDumpLangGimpleFilename (value, NULL); + M2Options_SetDumpLangQuadFilename (value, NULL); + return 1; + case OPT_fdump_lang_decl: + M2Options_SetDumpLangDeclFilename (value, NULL); + return 1; + case OPT_fdump_lang_decl_: + M2Options_SetDumpLangDeclFilename (value, arg); + return 1; + case OPT_fdump_lang_gimple: + M2Options_SetDumpLangGimpleFilename (value, NULL); + return 1; + case OPT_fdump_lang_gimple_: + M2Options_SetDumpLangGimpleFilename (value, arg); + return 1; + case OPT_fdump_lang_quad: + M2Options_SetDumpLangQuadFilename (value, NULL); + return 1; + case OPT_fdump_lang_quad_: + M2Options_SetDumpLangQuadFilename (value, arg); + return 1; +#endif case OPT_fauto_init: M2Options_SetAutoInit (value); return 1; @@ -519,6 +548,11 @@ gm2_langhook_handle_option ( case OPT_fm2_strict_type: M2Options_SetStrictTypeChecking (value); return 1; +#ifdef ENABLE_QUAD_DUMP_ALL + case OPT_fm2_dump_filter_: + M2Options_SetM2DumpFilter (value, arg); + return 1; +#endif case OPT_Wall: M2Options_SetWall (value); return 1; diff --git a/gcc/m2/gm2-libs/DynamicStrings.def b/gcc/m2/gm2-libs/DynamicStrings.def index 29f4989b7943..25c27e8a9394 100644 --- a/gcc/m2/gm2-libs/DynamicStrings.def +++ b/gcc/m2/gm2-libs/DynamicStrings.def @@ -29,7 +29,7 @@ DEFINITION MODULE DynamicStrings ; FROM SYSTEM IMPORT ADDRESS ; EXPORT QUALIFIED String, InitString, KillString, Fin, InitStringCharStar, - InitStringChar, Index, RIndex, + InitStringChar, Index, RIndex, ReverseIndex, Mark, Length, ConCat, ConCatChar, Assign, Dup, Add, Equal, EqualCharStar, EqualArray, ToUpper, ToLower, CopyOut, Mult, Slice, ReplaceChar, @@ -201,13 +201,27 @@ PROCEDURE Index (s: String; ch: CHAR; o: CARDINAL) : INTEGER ; (* RIndex - returns the indice of the last occurance of, ch, - in String, s. The search starts at position, o. - -1 is returned if, ch, is not found. + in String, s. The search starts at position, o. + -1 is returned if ch is not found. The search + is performed left to right. *) PROCEDURE RIndex (s: String; ch: CHAR; o: CARDINAL) : INTEGER ; +(* + ReverseIndex - returns the indice of the last occurance of ch + in String s. The search starts at position o + and searches from right to left. The start position + may be indexed negatively from the right (-1 is the + last index). + The return value if ch is found will always be positive. + -1 is returned if ch is not found. +*) + +PROCEDURE ReverseIndex (s: String; ch: CHAR; o: INTEGER) : INTEGER ; + + (* RemoveComment - assuming that, comment, is a comment delimiter which indicates anything to its right is a comment diff --git a/gcc/m2/gm2-libs/DynamicStrings.mod b/gcc/m2/gm2-libs/DynamicStrings.mod index c79e21c12be7..b53f0f285b56 100644 --- a/gcc/m2/gm2-libs/DynamicStrings.mod +++ b/gcc/m2/gm2-libs/DynamicStrings.mod @@ -1466,8 +1466,9 @@ END Index ; (* RIndex - returns the indice of the last occurance of, ch, - in String, s. The search starts at position, o. - -1 is returned if, ch, is not found. + in String, s. The search starts at position, o. + -1 is returned if, ch, is not found. The search + is performed left to right. *) PROCEDURE RIndex (s: String; ch: CHAR; o: CARDINAL) : INTEGER ; @@ -1509,6 +1510,47 @@ BEGIN END RIndex ; +(* + ReverseIndex - returns the indice of the last occurance of ch + in String s. The search starts at position o + and searches from right to left. The start position + may be indexed negatively from the right (-1 is the + last index). + The return value if ch is found will always be positive. + -1 is returned if ch is not found. +*) + +PROCEDURE ReverseIndex (s: String; ch: CHAR; o: INTEGER) : INTEGER ; +VAR + c: CARDINAL ; +BEGIN + IF PoisonOn + THEN + s := CheckPoisoned (s) + END ; + IF o < 0 + THEN + o := VAL (INTEGER, Length (s)) + o ; + IF o < 0 + THEN + RETURN -1 + END + END ; + IF VAL (CARDINAL, o) < Length (s) + THEN + WHILE o >= 0 DO + IF char (s, o) = ch + THEN + RETURN o + ELSE + DEC (o) + END + END + END ; + RETURN -1 +END ReverseIndex ; + + (* RemoveComment - assuming that, comment, is a comment delimiter which indicates anything to its right is a comment From 7a5a4a4467b2e18ff4fe24f565e120280d3e6ba7 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Thu, 21 Mar 2024 17:48:38 -0400 Subject: [PATCH 187/551] analyzer: fix ignored constraints involving casts [PR113619] gcc/analyzer/ChangeLog: PR analyzer/113619 * region-model.cc (region_model::eval_condition): Fix cast-handling from r14-3632-ge7b267444045c5 so that if those give an unknown result, we continue trying the constraint manager. gcc/testsuite/ChangeLog: PR analyzer/113619 * c-c++-common/analyzer/taint-divisor-pr113619.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/region-model.cc | 24 ++++++++++----- .../analyzer/taint-divisor-pr113619.c | 29 +++++++++++++++++++ 2 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/analyzer/taint-divisor-pr113619.c diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index c3a4ec7bcfc5..902b887fc074 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -4704,17 +4704,27 @@ region_model::eval_condition (const svalue *lhs, if (lhs_un_op && CONVERT_EXPR_CODE_P (lhs_un_op->get_op ()) && rhs_un_op && CONVERT_EXPR_CODE_P (rhs_un_op->get_op ()) && lhs_type == rhs_type) - return eval_condition (lhs_un_op->get_arg (), - op, - rhs_un_op->get_arg ()); - + { + tristate res = eval_condition (lhs_un_op->get_arg (), + op, + rhs_un_op->get_arg ()); + if (res.is_known ()) + return res; + } else if (lhs_un_op && CONVERT_EXPR_CODE_P (lhs_un_op->get_op ()) && lhs_type == rhs_type) - return eval_condition (lhs_un_op->get_arg (), op, rhs); - + { + tristate res = eval_condition (lhs_un_op->get_arg (), op, rhs); + if (res.is_known ()) + return res; + } else if (rhs_un_op && CONVERT_EXPR_CODE_P (rhs_un_op->get_op ()) && lhs_type == rhs_type) - return eval_condition (lhs, op, rhs_un_op->get_arg ()); + { + tristate res = eval_condition (lhs, op, rhs_un_op->get_arg ()); + if (res.is_known ()) + return res; + } } /* Otherwise, try constraints. diff --git a/gcc/testsuite/c-c++-common/analyzer/taint-divisor-pr113619.c b/gcc/testsuite/c-c++-common/analyzer/taint-divisor-pr113619.c new file mode 100644 index 000000000000..15c881247ce7 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/taint-divisor-pr113619.c @@ -0,0 +1,29 @@ +/* Reduced from false positive in Linux kernel's fs/ceph/ioctl.c: */ + +__extension__ typedef unsigned long long __u64; + +struct ceph_ioctl_layout +{ + __u64 stripe_unit, object_size; +}; +static long +__validate_layout(struct ceph_ioctl_layout* l) +{ + if ((l->object_size & ~(~(((1UL) << 12) - 1))) || + (l->stripe_unit & ~(~(((1UL) << 12) - 1))) || + ((unsigned)l->stripe_unit != 0 && + ((unsigned)l->object_size % (unsigned)l->stripe_unit))) /* { dg-bogus "use of attacker-controlled value 'l.stripe_unit' as divisor without checking for zero" "PR analyzer/113619" } */ + return -22; + return 0; +} + +long +__attribute__((tainted_args)) +ceph_ioctl_set_layout_policy(struct ceph_ioctl_layout l) +{ + int err; + err = __validate_layout(&l); + if (err) + return err; + return err; +} From 44b79ab691512bb31bb0afd85d9bbda2b9b62575 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Fri, 22 Mar 2024 00:17:13 +0000 Subject: [PATCH 188/551] Daily bump. --- gcc/ChangeLog | 36 ++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 7 +++ gcc/cp/ChangeLog | 6 ++ gcc/fortran/ChangeLog | 8 +++ gcc/m2/ChangeLog | 118 ++++++++++++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 42 ++++++++++++++ libgcc/ChangeLog | 8 +++ 8 files changed, 226 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 776947fb99bf..bf57c846db94 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,39 @@ +2024-03-21 Andrew Stubbs <ams@baylibre.com> + + * config/gcn/gcn.cc (gcn_expand_builtin_1): Comment correction. + +2024-03-21 Andrew Stubbs <ams@baylibre.com> + + * config/gcn/gcn-hsa.h (ASM_SPEC): Pass -mattr=+cumode. + +2024-03-21 Andrew Stubbs <ams@baylibre.com> + + * config/gcn/gcn-run.cc (main): Add an hsa_memory_free calls for each + device_malloc call. + +2024-03-21 liuhongt <hongtao.liu@intel.com> + + PR tree-optimization/114396 + * tree-vect-loop.cc (vect_peel_nonlinear_iv_init): Pass utype + and true to wi::from_mpz. + +2024-03-21 Richard Biener <rguenther@suse.de> + + PR tree-optimization/111736 + * asan.cc (instrument_derefs): Do not instrument accesses + to non-generic address-spaces. + +2024-03-21 Richard Biener <rguenther@suse.de> + + PR tree-optimization/113727 + * tree-sra.cc (analyze_access_subtree): Do not allow + replacements in subtrees when grp_partial_lhs. + +2024-03-21 liuhongt <hongtao.liu@intel.com> + + PR middle-end/114347 + * doc/invoke.texi: Document -fexcess-precision=16. + 2024-03-20 Cupertino Miranda <cupertino.miranda@oracle.com> * config/bpf/core-builtins.cc (bpf_core_get_index): Check if diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 95c7d7a00c23..81064a78fd43 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240321 +20240322 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 7d8bc4ec1098..38efe591d7a7 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,10 @@ +2024-03-21 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/113619 + * region-model.cc (region_model::eval_condition): Fix + cast-handling from r14-3632-ge7b267444045c5 so that if those give + an unknown result, we continue trying the constraint manager. + 2024-03-20 David Malcolm <dmalcolm@redhat.com> PR analyzer/109251 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e7776d303e61..1dc50e00e865 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2024-03-21 Marek Polacek <polacek@redhat.com> + + PR c++/110323 + * decl2.cc (min_vis_expr_r) <case VAR_DECL>: Do nothing for + decl_constant_var_p VAR_DECLs. + 2024-03-20 Jakub Jelinek <jakub@redhat.com> * coroutines.cc (expand_one_await_expression): Use diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a1c1713d93b3..bed34fb427a8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2024-03-21 Harald Anlauf <anlauf@gmx.de> + + PR fortran/30802 + * trans-array.cc (abridged_ref_name): New helper function. + (trans_array_bound_check): Use it. + (array_bound_check_elemental): Likewise. + (gfc_conv_array_ref): Likewise. + 2024-03-20 Jakub Jelinek <jakub@redhat.com> * trans-array.cc (structure_alloc_comps): Use integer_zero_node diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index 6c6675432408..0ffce6b065ed 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,121 @@ +2024-03-21 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/113836 + * Make-lang.in (GM2_C_OBJS): Add m2/gm2-gcc/m2pp.o. + (m2/m2pp.o): Remove rule. + (GM2-COMP-BOOT-DEFS): Add M2LangDump.def. + (GM2-COMP-BOOT-MODS): Add M2LangDump.mod. + (GM2-GCC-DEFS): Add M2LangDump.def. + (GM2-GCC-MODS): Add M2LangDump.mod. + * gm2-compiler/M2CaseList.mod (WriteCase): Rewrite. + * gm2-compiler/M2Code.mod (DoModuleDeclare): Call + DumpFilteredResolver depending upon DumpLangDecl. + (DoCodeBlock): Call CreateDumpGimple depending upon + DumpLangGimple. + (Code): Replace DisplayQuadList blocks with DumpQuadruples. + (DisplayQuadsInScope): Remove. + (DisplayQuadNumbers): Remove. + (CodeBlock): Rewrite. + * gm2-compiler/M2GCCDeclare.def (IncludeDumpSymbol): New procedure. + (DumpFilteredResolver): New procedure. + (DumpFilteredDefinitive): New procedure. + * gm2-compiler/M2GCCDeclare.mod (IncludeDumpSymbol): New procedure. + (DumpFilteredResolver): New procedure. + (DumpFilteredDefinitive): New procedure. + (doInclude): Rewrite to use GetDumpFile. + (WatchIncludeList): Remove fixed debugging value. + (doExclude): Rewrite to use GetDumpFile. + (DeclareTypesConstantsProceduresInRange): Remove fixed debugging + values. + (PreAddModGcc): Rename parameter t as tree. + (IncludeGetNth): Rewrite to use GetDumpFile. + (IncludeType): Ditto. + (IncludeSubscript): Ditto. + (PrintLocalSymbol): Ditto. + (PrintLocalSymbols): Ditto. + (IncludeGetVarient): Ditto. + (PrintDeclared): Ditto. + (PrintAlignment): Ditto. + (PrintDecl): Ditto. + (PrintScope): Ditto. + (PrintProcedure): Ditto. + (PrintSym): Ditto. + (PrintSymbol): Ditto. + (PrintTerse): Ditto. + * gm2-compiler/M2Options.def (GetDumpLangDeclFilename): New + procedure function. + (SetDumpLangDeclFilename): New procedure. + (GetDumpLangQuadFilename): New procedure function. + (SetDumpLangQuadFilename): New procedure. + (GetDumpLangGimpleFilename): New procedure function. + (SetDumpLangGimpleFilename): New procedure. + (SetM2DumpFilter): New procedure. + (GetM2DumpFilter): New procedure function. + (GetDumpLangGimple): New procedure function. + * gm2-compiler/M2Options.mod (GetDumpLangDeclFilename): New + procedure function. + (SetDumpLangDeclFilename): New procedure. + (GetDumpLangQuadFilename): New procedure function. + (SetDumpLangQuadFilename): New procedure. + (GetDumpLangGimpleFilename): New procedure function. + (SetDumpLangGimpleFilename): New procedure. + (SetM2DumpFilter): New procedure. + (GetM2DumpFilter): New procedure function. + (GetDumpLangGimple): New procedure function. + * gm2-compiler/M2Quads.def (DumpQuadruples): New procedure. + * gm2-compiler/M2Quads.mod (DumpUntil): New procedure. + (GetCtorInit): New procedure function. + (GetCtorFini): New procedure function. + (DumpQuadrupleFilter): New procedure function. + (DumpQuadrupleAll): New procedure. + (DisplayQuadList): Remove procedure. + (DumpQuadruples): New procedure. + (DisplayQuadRange): Rewrite. + (DisplayQuad): Ditto. + (DisplayProcedureAttributes): Ditto. + (WriteOperator): Ditto. + (WriteMode): Ditto. + * gm2-compiler/M2Scope.mod (ForeachScopeBlockDo2): Replace + DisplayQuadruples with TraceQuadruples. + (ForeachScopeBlockDo3): Replace DisplayQuadruples with + TraceQuadruples. + * gm2-compiler/SymbolConversion.def (Gcc2Mod): New procedure function. + * gm2-compiler/SymbolConversion.mod: New procedure function. + * gm2-gcc/m2misc.cc (m2misc_DebugTree): New function. + (m2misc_DebugTreeChain): New function. + * gm2-gcc/m2options.h (M2Options_GetDumpLangDeclFilename): New + prototype. + (M2Options_SetDumpLangDeclFilename): New prototype. + (M2Options_GetDumpLangQuadFilename): New prototype. + (M2Options_SetDumpLangQuadFilename): New prototype. + (M2Options_GetDumpLangGimpleFilename): New prototype. + (M2Options_SetDumpLangGimpleFilename): New prototype. + (M2Options_GetDumpLangGimple): New prototype. + (M2Options_SetM2DumpFilter): New prototype. + (M2Options_GetM2DumpFilter): New prototype. + * m2pp.cc: Move to... + * gm2-gcc/m2pp.cc: ...here. + * m2pp.h: Move to... + * gm2-gcc/m2pp.h: ...here. + * gm2-gcc/m2statement.cc (m2statement_BuildEndFunctionCode): Call + m2pp_dump_gimple. + * gm2-lang.cc (ENABLE_QUAD_DUMP_ALL): New define. + (gm2_langhook_init_options): Add switch cases for proposed new + command line options. + * gm2-libs/DynamicStrings.def (ReverseIndex): New procedure + function. + * gm2-libs/DynamicStrings.mod: New procedure function. + * gm2-compiler/M2LangDump.def: New file. + * gm2-compiler/M2LangDump.mod: New file. + * gm2-gcc/m2langdump.h: New file. + * gm2-gcc/m2pp.def: New file. + +2024-03-21 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114418 + * gm2-compiler/PCSymBuild.mod (PushConstFunctionType): Check + func against NulSym and issue an error. + 2024-03-18 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114380 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dfc94e290d08..d7296f65a5fd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,45 @@ +2024-03-21 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/113619 + * c-c++-common/analyzer/taint-divisor-pr113619.c: New test. + +2024-03-21 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114418 + * gm2/pim/fail/missingtsize.mod: New test. + * gm2/pim/fail/missingtsize2.mod: New test. + +2024-03-21 Harald Anlauf <anlauf@gmx.de> + + PR fortran/30802 + * gfortran.dg/bounds_check_17.f90: Adjust pattern. + * gfortran.dg/bounds_check_fail_8.f90: New test. + +2024-03-21 Marek Polacek <polacek@redhat.com> + + PR c++/110323 + * g++.dg/template/explicit-instantiation6.C: New test. + * g++.dg/template/explicit-instantiation7.C: New test. + +2024-03-21 Jakub Jelinek <jakub@redhat.com> + + PR libgcc/114397 + * gcc.dg/torture/bitint-65.c: New test. + +2024-03-21 liuhongt <hongtao.liu@intel.com> + + * gcc.target/i386/pr114396.c: New test. + +2024-03-21 Richard Biener <rguenther@suse.de> + + PR tree-optimization/111736 + * gcc.target/i386/pr111736.c: New testcase. + +2024-03-21 Richard Biener <rguenther@suse.de> + + PR tree-optimization/113727 + * gcc.dg/torture/pr113727.c: New testcase. + 2024-03-20 David Malcolm <dmalcolm@redhat.com> PR analyzer/109251 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index abd3e598869c..f18401e137f2 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2024-03-21 Jakub Jelinek <jakub@redhat.com> + + PR libgcc/114397 + * libgcc2.c (__divmodbitint4): Don't assume un < vn always means + abs(v) > abs(u), check for a special case of un + 1 == vn where + u is non-negative and v negative and after v's negation vn could + be reduced by 1. + 2024-03-20 Flavio Cruz <flaviocruz@gmail.com> * config/i386/gnu-unwind.h: Support unwinding x86_64 signal frames. From 1542e8a44cc35e63233d3557afbf501c5ff84c55 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Fri, 22 Mar 2024 01:47:31 +0000 Subject: [PATCH 189/551] PR modula2/114422 Attempting to declare a set of unknown type causes ICE This patch corrects an error message directive which did not escape the { character. The patch also contains test cases to stress set declaration errors. gcc/m2/ChangeLog: PR modula2/114422 * gm2-compiler/M2Quads.mod (BuildConstructor): Add escape character. gcc/testsuite/ChangeLog: PR modula2/114422 * gm2/iso/fail/badset.mod: New test. * gm2/iso/fail/badset2.mod: New test. * gm2/iso/fail/badset3.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2Quads.mod | 2 +- gcc/testsuite/gm2/iso/fail/badset.mod | 7 +++++++ gcc/testsuite/gm2/iso/fail/badset2.mod | 9 +++++++++ gcc/testsuite/gm2/iso/fail/badset3.mod | 9 +++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gm2/iso/fail/badset.mod create mode 100644 gcc/testsuite/gm2/iso/fail/badset2.mod create mode 100644 gcc/testsuite/gm2/iso/fail/badset3.mod diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index ac654e89c917..52d72f6cd628 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -12172,7 +12172,7 @@ BEGIN IF type = NulSym THEN MetaErrorT0 (tokcbrpos, - '{%E}constructor requires a type before the opening {') + '{%E}constructor requires a type before the opening %{') ELSE ChangeToConstructor (tok, type) ; PutConstructorFrom (constValue, type) ; diff --git a/gcc/testsuite/gm2/iso/fail/badset.mod b/gcc/testsuite/gm2/iso/fail/badset.mod new file mode 100644 index 000000000000..8bfc49f948e3 --- /dev/null +++ b/gcc/testsuite/gm2/iso/fail/badset.mod @@ -0,0 +1,7 @@ +MODULE badset ; + +VAR + set: set ; +BEGIN + +END badset. diff --git a/gcc/testsuite/gm2/iso/fail/badset2.mod b/gcc/testsuite/gm2/iso/fail/badset2.mod new file mode 100644 index 000000000000..d883d1ffe757 --- /dev/null +++ b/gcc/testsuite/gm2/iso/fail/badset2.mod @@ -0,0 +1,9 @@ +MODULE badset2 ; + +TYPE + userset = SET OF CHAR ; +VAR + set: userset ; +BEGIN + set := set {} +END badset2. diff --git a/gcc/testsuite/gm2/iso/fail/badset3.mod b/gcc/testsuite/gm2/iso/fail/badset3.mod new file mode 100644 index 000000000000..29131ff4c5a5 --- /dev/null +++ b/gcc/testsuite/gm2/iso/fail/badset3.mod @@ -0,0 +1,9 @@ +MODULE badset3 ; + +TYPE + userset = SET OF CHAR ; +VAR + set: userset ; +BEGIN + set := unknown {} +END badset3. From 9a6c7aa1b011b77fcd9b19f7b8d7ff0fc823cdb2 Mon Sep 17 00:00:00 2001 From: liuhongt <hongtao.liu@intel.com> Date: Fri, 22 Mar 2024 10:09:43 +0800 Subject: [PATCH 190/551] Move pr114396.c from gcc.target/i386 to gcc.c-torture/execute. Also fixed a typo in the testcase. gcc/testsuite/ChangeLog: PR tree-optimization/114396 * gcc.target/i386/pr114396.c: Move to... * gcc.c-torture/execute/pr114396.c: ...here. --- .../{gcc.target/i386 => gcc.c-torture/execute}/pr114396.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename gcc/testsuite/{gcc.target/i386 => gcc.c-torture/execute}/pr114396.c (92%) diff --git a/gcc/testsuite/gcc.target/i386/pr114396.c b/gcc/testsuite/gcc.c-torture/execute/pr114396.c similarity index 92% rename from gcc/testsuite/gcc.target/i386/pr114396.c rename to gcc/testsuite/gcc.c-torture/execute/pr114396.c index 4c4015f871f3..baf90eafabfe 100644 --- a/gcc/testsuite/gcc.target/i386/pr114396.c +++ b/gcc/testsuite/gcc.c-torture/execute/pr114396.c @@ -1,5 +1,5 @@ -/* { dg-do run } */ -/* { dg-options "-O1 -fwrapv -fno-vect-cost-model" } */ +/* PR tree-optimization/114396 */ +/* { dg-additional-options "-fwrapv -fno-vect-cost-model" } */ short a = 0xF; short b[16]; @@ -88,7 +88,7 @@ int main() { exp = foo1 (a); res = foo1_o3 (a); - if (uexp != ures) + if (exp != res) __builtin_abort (); uexp = foou (a); From d3c24e9e55a7cf18df313a8b32b6de4b3ba81013 Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Mon, 18 Mar 2024 11:21:29 +0800 Subject: [PATCH 191/551] RISC-V: Bugfix ICE for __attribute__((target("arch=+v")) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch would like to fix one ICE for __attribute__((target("arch=+v")) and likewise extension(s). Given we have sample code as below: void __attribute__((target("arch=+v"))) test_2 (int *a, int *b, int *out, unsigned count) { unsigned i; for (i = 0; i < count; i++) out[i] = a[i] + b[i]; } It will have ICE when build with -march=rv64gc -O3. test.c: In function ‘test_2’: test.c:4:1: internal compiler error: Floating point exception 4 | { | ^ 0x1a5891b crash_signal .../__RISC-V_BUILD__/../gcc/toplev.cc:319 0x7f0a7884251f ??? ./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0 0x1f51ba4 riscv_hard_regno_nregs .../__RISC-V_BUILD__/../gcc/config/riscv/riscv.cc:8143 0x1967bb9 init_reg_modes_target() .../__RISC-V_BUILD__/../gcc/reginfo.cc:471 0x13fc029 init_emit_regs() .../__RISC-V_BUILD__/../gcc/emit-rtl.cc:6237 0x1a5b83d target_reinit() .../__RISC-V_BUILD__/../gcc/toplev.cc:1936 0x35e374d save_target_globals() .../__RISC-V_BUILD__/../gcc/target-globals.cc:92 0x35e381f save_target_globals_default_opts() .../__RISC-V_BUILD__/../gcc/target-globals.cc:122 0x1f544cc riscv_save_restore_target_globals(tree_node*) .../__RISC-V_BUILD__/../gcc/config/riscv/riscv.cc:9138 0x1f55c36 riscv_set_current_function ... There are two reasons for this ICE. 1. The implied extension(s) of v are not well handled and the TARGET_MIN_VLEN is 0 which is not reinitialized. Then the size / TARGET_MIN_VLEN will have DivideByZero. 2. The machine modes of the vector types will be vary after the v extension is introduced. This patch passed below testsuite: 1. The riscv fully regression test. PR target/114352 gcc/ChangeLog: * common/config/riscv/riscv-common.cc (riscv_subset_list::parse): Replace implied, combine and check to func finalize. (riscv_subset_list::finalize): New func impl to take care of implied, combine ext and related checks. * config/riscv/riscv-subset.h: Add func decl for finalize. * config/riscv/riscv-target-attr.cc (riscv_target_attr_parser::parse_arch): Finalize the ext before return succeed. * config/riscv/riscv.cc (riscv_set_current_function): Reinit the machine mode before when set cur function. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/pr114352-1.c: New test. * gcc.target/riscv/rvv/base/pr114352-2.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/common/config/riscv/riscv-common.cc | 31 ++++++---- gcc/config/riscv/riscv-subset.h | 2 + gcc/config/riscv/riscv-target-attr.cc | 2 + gcc/config/riscv/riscv.cc | 4 ++ .../gcc.target/riscv/rvv/base/pr114352-1.c | 58 +++++++++++++++++++ .../gcc.target/riscv/rvv/base/pr114352-2.c | 27 +++++++++ 6 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-2.c diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index 440127a2af03..15d44245b3cf 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -1428,16 +1428,7 @@ riscv_subset_list::parse (const char *arch, location_t loc) if (p == NULL) goto fail; - for (itr = subset_list->m_head; itr != NULL; itr = itr->next) - { - subset_list->handle_implied_ext (itr->name.c_str ()); - } - - /* Make sure all implied extensions are included. */ - gcc_assert (subset_list->check_implied_ext ()); - - subset_list->handle_combine_ext (); - subset_list->check_conflict_ext (); + subset_list->finalize (); return subset_list; @@ -1467,6 +1458,26 @@ riscv_subset_list::set_loc (location_t loc) m_loc = loc; } +/* Make sure the implied or combined extension is included after add + a new std extension to subset list or likewise. For exmaple as below, + + void __attribute__((target("arch=+v"))) func () with -march=rv64gc. + + The implied zvl128b and zve64d of the std v should be included. */ +void +riscv_subset_list::finalize () +{ + riscv_subset_t *subset; + + for (subset = m_head; subset != NULL; subset = subset->next) + handle_implied_ext (subset->name.c_str ()); + + gcc_assert (check_implied_ext ()); + + handle_combine_ext (); + check_conflict_ext (); +} + /* Return the current arch string. */ std::string diff --git a/gcc/config/riscv/riscv-subset.h b/gcc/config/riscv/riscv-subset.h index ae849e2a3021..ec979040e8cb 100644 --- a/gcc/config/riscv/riscv-subset.h +++ b/gcc/config/riscv/riscv-subset.h @@ -105,6 +105,8 @@ class riscv_subset_list int match_score (riscv_subset_list *) const; void set_loc (location_t); + + void finalize (); }; extern const riscv_subset_list *riscv_current_subset_list (void); diff --git a/gcc/config/riscv/riscv-target-attr.cc b/gcc/config/riscv/riscv-target-attr.cc index 9dbb78f28cc0..37645adbb202 100644 --- a/gcc/config/riscv/riscv-target-attr.cc +++ b/gcc/config/riscv/riscv-target-attr.cc @@ -136,6 +136,8 @@ riscv_target_attr_parser::parse_arch (const char *str) } token = strtok_r (NULL, ",", &str_to_check); } + + m_subset_list->finalize (); return true; } fail: diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 02a927f96b4a..742974aec336 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -9492,6 +9492,10 @@ riscv_set_current_function (tree decl) cl_target_option_restore (&global_options, &global_options_set, TREE_TARGET_OPTION (new_tree)); + /* The ISA extension can vary based on the function extension like target. + Thus, make sure that the machine modes are reflected correctly here. */ + init_adjust_machine_modes (); + riscv_save_restore_target_globals (new_tree); } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c new file mode 100644 index 000000000000..b3f1f20fb79c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-1.c @@ -0,0 +1,58 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** test_1: +** beq\s+a3,\s*zero,\s*\.L[0-9]+ +** ... +** bne\s+[atx][0-9]+,\s*[atx][0-9]+,\s*\.L[0-9]+ +** ... +** ret +*/ +void +test_1 (int *a, int *b, int *out, unsigned count) +{ + unsigned i; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* +** test_2: +** ... +** vsetvli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*e32,\s*m1,\s*ta,\s*ma +** ... +** vadd\.vv\s+v[0-9]+,\s*v[0-9]+,\s*v[0-9]+ +** ... +*/ +void +__attribute__((target("arch=+v"))) +test_2 (int *a, int *b, int *out, unsigned count) +{ + unsigned i; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* +** test_3: +** beq\s+a3,\s*zero,\s*\.L[0-9]+ +** ... +** bne\s+[atx][0-9]+,\s*[atx][0-9]+,\s*\.L[0-9]+ +** ... +** ret +*/ +void +test_3 (int *a, int *b, int *out, unsigned count) +{ + unsigned i; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0\"" } } */ +/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-2.c new file mode 100644 index 000000000000..3b3d69d27516 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-2.c @@ -0,0 +1,27 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64 -O3" } */ + +#define DEF_ATTR_FUNC(ATTR, ID) \ +void ATTR \ +test_##ID (int *a, int *b, int *out, unsigned count) \ +{ \ + unsigned i; \ + \ + for (i = 0; i < count; i++) \ + out[i] = a[i] + b[i]; \ +} + +DEF_ATTR_FUNC (__attribute__((target("arch=+zve32x"))), 1) +DEF_ATTR_FUNC (__attribute__((target("arch=+zve32f"))), 2) +DEF_ATTR_FUNC (__attribute__((target("arch=+zve64x"))), 3) +DEF_ATTR_FUNC (__attribute__((target("arch=+zve64f"))), 4) +DEF_ATTR_FUNC (__attribute__((target("arch=+zve64d"))), 5) +DEF_ATTR_FUNC (__attribute__((target("arch=+v"))), 6) +DEF_ATTR_FUNC (__attribute__((target("arch=+zvl64b"))), 7) +DEF_ATTR_FUNC (__attribute__((target("arch=+zvl128b"))), 8) +DEF_ATTR_FUNC (__attribute__((target("arch=+zvl256b"))), 9) +DEF_ATTR_FUNC (__attribute__((target("arch=+zvl512b"))), 10) +DEF_ATTR_FUNC (__attribute__((target("arch=+zvl1024b"))), 11) +DEF_ATTR_FUNC (__attribute__((target("arch=+zvl2048b"))), 12) +DEF_ATTR_FUNC (__attribute__((target("arch=+zvl4096b"))), 13) From 9941f0295a14659e25260458efd2e46a68ad0342 Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Tue, 19 Mar 2024 09:43:24 +0800 Subject: [PATCH 192/551] RISC-V: Bugfix function target attribute pollution This patch depends on below ICE fix. https://gcc.gnu.org/pipermail/gcc-patches/2024-March/647915.html The function target attribute should be on a per-function basis. For example, we have 3 function as below: void test_1 () {} void __attribute__((target("arch=+v"))) test_2 () {} void __attribute__((target("arch=+zfh"))) test_3 () {} void test_4 () {} The scope of the target attribute should not extend the function body. Aka, test_3 cannot have the 'v' extension, as well as the test_4 cannot have both the 'v' and 'zfh' extension. Unfortunately, for now the test_4 is able to leverage the 'v' and the 'zfh' extension which is incorrect. This patch would like to fix the sticking attribute by introduce the commandline subset_list. When parse_arch, we always clone from the cmdline_subset_list instead of the current_subset_list. Meanwhile, we correct the print information about arch like below. .option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zbb1p0 The riscv_declare_function_name hook is always after the hook riscv_process_target_attr. Thus, we introduce one hash_map to record the 1:1 mapping from fndel to its' subset_list in advance. And later the riscv_declare_function_name is able to get the right information about the arch. Below test are passed for this patch * The riscv fully regression test. PR target/114352 gcc/ChangeLog: * common/config/riscv/riscv-common.cc (struct riscv_func_target_info): New struct for func decl and target name. (struct riscv_func_target_hasher): New hasher for hash table mapping from the fn_decl to fn_target_name. (riscv_func_decl_hash): New func to compute the hash for fn_decl. (riscv_func_target_hasher::hash): New func to impl hash interface. (riscv_func_target_hasher::equal): New func to impl equal interface. (riscv_cmdline_subset_list): New static var for cmdline subset list. (riscv_func_target_table_lazy_init): New func to lazy init the func target hash table. (riscv_func_target_get): New func to get target name from hash table. (riscv_func_target_put): New func to put target name into hash table. (riscv_func_target_remove_and_destory): New func to remove target info from the hash table and destory it. (riscv_parse_arch_string): Set the static var cmdline_subset_list. * config/riscv/riscv-subset.h (riscv_cmdline_subset_list): New static var for cmdline subset list. (riscv_func_target_get): New func decl. (riscv_func_target_put): Ditto. (riscv_func_target_remove_and_destory): Ditto. * config/riscv/riscv-target-attr.cc (riscv_target_attr_parser::parse_arch): Take cmdline_subset_list instead of current_subset_list when clone. (riscv_process_target_attr): Record the func target info to hash table. (riscv_option_valid_attribute_p): Add new arg tree fndel. * config/riscv/riscv.cc (riscv_declare_function_name): Consume the func target info and print the arch message. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/pr114352-3.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/common/config/riscv/riscv-common.cc | 105 +++++++++++++++- gcc/config/riscv/riscv-subset.h | 4 + gcc/config/riscv/riscv-target-attr.cc | 18 ++- gcc/config/riscv/riscv.cc | 7 +- .../gcc.target/riscv/rvv/base/pr114352-3.c | 113 ++++++++++++++++++ 5 files changed, 240 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index 15d44245b3cf..7095f303cbb1 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -426,11 +426,108 @@ bool riscv_subset_list::parse_failed = false; static riscv_subset_list *current_subset_list = NULL; +static riscv_subset_list *cmdline_subset_list = NULL; + +struct riscv_func_target_info +{ + tree fn_decl; + std::string fn_target_name; + + riscv_func_target_info (const tree &decl, const std::string &target_name) + : fn_decl (decl), fn_target_name (target_name) + { + } +}; + +struct riscv_func_target_hasher : nofree_ptr_hash<struct riscv_func_target_info> +{ + typedef tree compare_type; + + static hashval_t hash (value_type); + static bool equal (value_type, const compare_type &); +}; + +static hash_table<riscv_func_target_hasher> *func_target_table = NULL; + +static inline hashval_t riscv_func_decl_hash (tree fn_decl) +{ + inchash::hash h; + + h.add_ptr (fn_decl); + + return h.end (); +} + +inline hashval_t +riscv_func_target_hasher::hash (value_type value) +{ + return riscv_func_decl_hash (value->fn_decl); +} + +inline bool +riscv_func_target_hasher::equal (value_type value, const compare_type &key) +{ + return value->fn_decl == key; +} + const riscv_subset_list *riscv_current_subset_list () { return current_subset_list; } +const riscv_subset_list * riscv_cmdline_subset_list () +{ + return cmdline_subset_list; +} + +static inline void riscv_func_target_table_lazy_init () +{ + if (func_target_table != NULL) + return; + + func_target_table = new hash_table<riscv_func_target_hasher> (1023); +} + +std::string * riscv_func_target_get (tree fn_decl) +{ + riscv_func_target_table_lazy_init (); + + hashval_t hash = riscv_func_decl_hash (fn_decl); + struct riscv_func_target_info *info + = func_target_table->find_with_hash (fn_decl, hash); + + return info == NULL ? NULL : &info->fn_target_name; +} + +void riscv_func_target_put (tree fn_decl, std::string fn_target_name) +{ + riscv_func_target_table_lazy_init (); + + hashval_t hash = riscv_func_decl_hash (fn_decl); + struct riscv_func_target_info **target_info_slot + = func_target_table->find_slot_with_hash (fn_decl, hash, INSERT); + + gcc_assert (!*target_info_slot); + + struct riscv_func_target_info *info + = new riscv_func_target_info (fn_decl, fn_target_name); + + *target_info_slot = info; +} + +void riscv_func_target_remove_and_destory (tree fn_decl) +{ + hashval_t hash = riscv_func_decl_hash (fn_decl); + struct riscv_func_target_info *info + = func_target_table->find_with_hash (fn_decl, hash); + + if (info) + { + func_target_table->remove_elt_with_hash (fn_decl, hash); + delete info; + } +} + /* struct for recording multi-lib info. */ struct riscv_multi_lib_info_t { std::string path; @@ -1731,10 +1828,14 @@ riscv_parse_arch_string (const char *isa, } } - if (current_subset_list) + /* Avoid double delete if current_subset_list equals cmdline_subset_list. */ + if (current_subset_list && current_subset_list != cmdline_subset_list) delete current_subset_list; - current_subset_list = subset_list; + if (cmdline_subset_list) + delete cmdline_subset_list; + + current_subset_list = cmdline_subset_list = subset_list; } /* Return the riscv_cpu_info entry for CPU, NULL if not found. */ diff --git a/gcc/config/riscv/riscv-subset.h b/gcc/config/riscv/riscv-subset.h index ec979040e8cb..fe7f54d8bc57 100644 --- a/gcc/config/riscv/riscv-subset.h +++ b/gcc/config/riscv/riscv-subset.h @@ -110,6 +110,10 @@ class riscv_subset_list }; extern const riscv_subset_list *riscv_current_subset_list (void); +extern const riscv_subset_list *riscv_cmdline_subset_list (void); +extern std::string * riscv_func_target_get (tree); +extern void riscv_func_target_put (tree, std::string); +extern void riscv_func_target_remove_and_destory (tree); extern void riscv_set_arch_by_subset_list (riscv_subset_list *, struct gcc_options *); diff --git a/gcc/config/riscv/riscv-target-attr.cc b/gcc/config/riscv/riscv-target-attr.cc index 37645adbb202..1a73d69bf50d 100644 --- a/gcc/config/riscv/riscv-target-attr.cc +++ b/gcc/config/riscv/riscv-target-attr.cc @@ -54,6 +54,10 @@ class riscv_target_attr_parser m_loc = loc; } + riscv_subset_list* get_riscv_subset_list () { + return m_subset_list; + } + void update_settings (struct gcc_options *opts) const; private: const char *m_raw_attr_str; @@ -109,7 +113,7 @@ riscv_target_attr_parser::parse_arch (const char *str) char *str_to_check = buf.get (); strcpy (str_to_check, str); const char *token = strtok_r (str_to_check, ",", &str_to_check); - m_subset_list = riscv_current_subset_list ()->clone (); + m_subset_list = riscv_cmdline_subset_list ()->clone (); m_subset_list->set_loc (m_loc); while (token) { @@ -297,7 +301,8 @@ num_occurences_in_str (char c, char *str) and update the global target options space. */ static bool -riscv_process_target_attr (tree args, location_t loc, struct gcc_options *opts) +riscv_process_target_attr (tree fndecl, tree args, location_t loc, + struct gcc_options *opts) { if (TREE_CODE (args) == TREE_LIST) { @@ -306,7 +311,7 @@ riscv_process_target_attr (tree args, location_t loc, struct gcc_options *opts) tree head = TREE_VALUE (args); if (head) { - if (!riscv_process_target_attr (head, loc, opts)) + if (!riscv_process_target_attr (fndecl, head, loc, opts)) return false; } args = TREE_CHAIN (args); @@ -359,6 +364,11 @@ riscv_process_target_attr (tree args, location_t loc, struct gcc_options *opts) /* Apply settings from target attribute. */ attr_parser.update_settings (opts); + /* Add the string of the target attribute to the fndecl hash table. */ + riscv_subset_list *subset_list = attr_parser.get_riscv_subset_list (); + if (subset_list) + riscv_func_target_put (fndecl, subset_list->to_string (true)); + return true; } @@ -376,7 +386,7 @@ riscv_option_valid_attribute_p (tree fndecl, tree, tree args, int) /* Save the current target options to restore at the end. */ cl_target_option_save (&cur_target, &global_options, &global_options_set); - ret = riscv_process_target_attr (args, loc, &global_options); + ret = riscv_process_target_attr (fndecl, args, loc, &global_options); if (ret) { diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 742974aec336..97350b8305eb 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -8691,8 +8691,13 @@ riscv_declare_function_name (FILE *stream, const char *name, tree fndecl) if (DECL_FUNCTION_SPECIFIC_TARGET (fndecl)) { fprintf (stream, "\t.option push\n"); - std::string isa = riscv_current_subset_list ()->to_string (true); + + std::string *target_name = riscv_func_target_get (fndecl); + std::string isa = target_name != NULL + ? *target_name + : riscv_cmdline_subset_list ()->to_string (true); fprintf (stream, "\t.option arch, %s\n", isa.c_str ()); + riscv_func_target_remove_and_destory (fndecl); struct cl_target_option *local_cl_target = TREE_TARGET_OPTION (DECL_FUNCTION_SPECIFIC_TARGET (fndecl)); diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c new file mode 100644 index 000000000000..e7af4223d6a0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114352-3.c @@ -0,0 +1,113 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64 -O3 -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** test_1: +** sext\.w\s+[atx][0-9]+,\s*[atx][0-9]+ +** ... +*/ +void +test_1 (int *a, int *b, int *out, unsigned count) +{ + unsigned i; + + count = count > 128 ? 128 : count; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* +** test_2: +** ... +** vadd\.vv\s+v[0-9]+,\s*v[0-9]+,\s*v[0-9]+ +** ... +*/ +void +__attribute__((target("arch=+v"))) +test_2 (int *a, int *b, int *out, unsigned count) +{ + unsigned i; + + count = count > 128 ? 128 : count; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* +** test_3: +** ... +** minu\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+ +** ... +*/ +void +__attribute__((target("arch=+zbb"))) +test_3 (int *a, int *b, int *out, unsigned count) +{ + unsigned i; + + count = count > 128 ? 128 : count; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* +** test_4: +** sext\.w\s+[atx][0-9]+,\s*[atx][0-9]+ +** ... +*/ +void +test_4 (int *a, int *b, int *out, unsigned count) +{ + unsigned i; + + count = count > 128 ? 128 : count; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* +** test_5: +** ... +** fadd\.h\s+fa[0-9]+,\s*fa[0-9]+,\s*fa[0-9]+ +** ... +*/ +void +__attribute__((target("arch=+zfh"))) +test_5 (_Float16 *a, _Float16 *b, _Float16 *out, unsigned count) +{ + unsigned i; + + count = count > 128 ? 128 : count; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* +** test_6: +** ... +** call\s+__extendhfsf2 +** ... +** call\s+__truncsfhf2 +** ... +*/ +void +test_6 (_Float16 *a, _Float16 *b, _Float16 *out, unsigned count) +{ + unsigned i; + + count = count > 128 ? 128 : count; + + for (i = 0; i < count; i++) + out[i] = a[i] + b[i]; +} + +/* { dg-final { scan-assembler ".attribute arch, \"rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0\"" } } */ +/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_zifencei2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0" } } */ +/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zbb1p0" } } */ +/* { dg-final { scan-assembler ".option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0_zifencei2p0_zfh1p0_zfhmin1p0" } } */ From c65046ff2ef0a9a46e59bc0b3369b2d226f6a239 Mon Sep 17 00:00:00 2001 From: Jeff Law <jlaw@ventanamicro.com> Date: Thu, 21 Mar 2024 20:41:59 -0600 Subject: [PATCH 193/551] [committed] Fix RISC-V missing stack tie As some of you know, Raphael has been working on stack-clash support for the RISC-V port. A little while ago Florian reached out to us with an issue where glibc was failing its smoke test due to referencing an unallocated stack slot. Without diving into the code in detail I (incorrectly) concluded it was a problem with the fallback of using Ada's stack-check paths due to not having stack-clash support. Once enough stack-clash bits were ready I had Raphael review the code generated for Florian's test and we concluded the the original case from Florian was just wrong irrespective of stack clash/stack check. While Raphael's stack-clash work will indirectly fix Florian's case, it really should also work without stack-clash. In particular this code was called out by valgrind: > 000000000003cb5e <realpath@@GLIBC_2.27>: > __GI___realpath(): > 3cb5e: 81010113 addi sp,sp,-2032 > 3cb62: 7d313423 sd s3,1992(sp) > 3cb66: 79fd lui s3,0xfffff > 3cb68: 7e813023 sd s0,2016(sp) > 3cb6c: 7c913c23 sd s1,2008(sp) > 3cb70: 7f010413 addi s0,sp,2032 > 3cb74: 35098793 addi a5,s3,848 # fffffffffffff350 <__libc_initial+0xffffffffffe8946a> > 3cb78: 74fd lui s1,0xfffff > 3cb7a: 008789b3 add s3,a5,s0 > 3cb7e: f9048793 addi a5,s1,-112 # ffffffffffffef90 <__libc_initial+0xffffffffffe890aa> > 3cb82: 008784b3 add s1,a5,s0 > 3cb86: 77fd lui a5,0xfffff > 3cb88: 7d413023 sd s4,1984(sp) > 3cb8c: 7b513c23 sd s5,1976(sp) > 3cb90: 7e113423 sd ra,2024(sp) > 3cb94: 7d213823 sd s2,2000(sp) > 3cb98: 7b613823 sd s6,1968(sp) > 3cb9c: 7b713423 sd s7,1960(sp) > 3cba0: 7b813023 sd s8,1952(sp) > 3cba4: 79913c23 sd s9,1944(sp) > 3cba8: 79a13823 sd s10,1936(sp) > 3cbac: 79b13423 sd s11,1928(sp) > 3cbb0: 34878793 addi a5,a5,840 # fffffffffffff348 <__libc_initial+0xffffffffffe89462> > 3cbb4: 40000713 li a4,1024 > 3cbb8: 00132a17 auipc s4,0x132 > 3cbbc: ae0a3a03 ld s4,-1312(s4) # 16e698 <__stack_chk_guard> > 3cbc0: 01098893 addi a7,s3,16 > 3cbc4: 42098693 addi a3,s3,1056 > 3cbc8: b8040a93 addi s5,s0,-1152 > 3cbcc: 97a2 add a5,a5,s0 > 3cbce: 000a3603 ld a2,0(s4) > 3cbd2: f8c43423 sd a2,-120(s0) > 3cbd6: 4601 li a2,0 > 3cbd8: 3d14b023 sd a7,960(s1) > 3cbdc: 3ce4b423 sd a4,968(s1) > 3cbe0: 7cd4b823 sd a3,2000(s1) > 3cbe4: 7ce4bc23 sd a4,2008(s1) > 3cbe8: b7543823 sd s5,-1168(s0) > 3cbec: b6e43c23 sd a4,-1160(s0) > 3cbf0: e38c sd a1,0(a5) > 3cbf2: b0010113 addi sp,sp,-1280 In particular note the store at 0x3cbd8. That's hitting (s1 + 960). If you chase the values around, you'll find it's a bit more than 1k into unallocated stack space. It's also worth noting the final stack adjustment at 0x3cbf2. While I haven't reproduced Florian's code exactly, I was able to get reasonably close and verify my suspicion that everything was fine before sched2 and incorrect after sched2. It was also obvious at that point what had gone wrong -- we were missing a stack tie after the final stack pointer adjustment. This patch adds the missing stack tie. While not technically a regression, I shudder at the thought of chasing one of these issues down again in the wild. Been there, done that. Regression tested on rv64gc. Verified the scheduler no longer mucked up realpath by hand. Pushing to the trunk. gcc/ * config/riscv/riscv.cc (riscv_expand_prologue): Add missing stack tie for scalable and final stack adjustment if needed. Co-authored-by: Raphael Zinsly <rzinsly@ventanamicro.com> --- gcc/config/riscv/riscv.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 97350b8305eb..1358c243898a 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -7365,7 +7365,15 @@ riscv_expand_prologue (void) /* Second step for constant frame. */ HOST_WIDE_INT constant_frame = remaining_size.to_constant (); if (constant_frame == 0) - return; + { + /* We must have allocated stack space for the scalable frame. + Emit a stack tie if we have a frame pointer so that the + allocation is ordered WRT fp setup and subsequent writes + into the frame. */ + if (frame_pointer_needed) + riscv_emit_stack_tie (); + return; + } if (SMALL_OPERAND (-constant_frame)) { @@ -7385,6 +7393,13 @@ riscv_expand_prologue (void) insn = gen_rtx_SET (stack_pointer_rtx, insn); riscv_set_frame_expr (insn); } + + /* We must have allocated the remainder of the stack frame. + Emit a stack tie if we have a frame pointer so that the + allocation is ordered WRT fp setup and subsequent writes + into the frame. */ + if (frame_pointer_needed) + riscv_emit_stack_tie (); } } From fd5e5dda8d79d62396f56d4fdd628b4bc5f9fa24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20M=C3=BCllner?= <christoph.muellner@vrull.eu> Date: Thu, 21 Mar 2024 15:40:49 +0100 Subject: [PATCH 194/551] RISC-V: Don't add fractional LMUL types to V_VLS for XTheadVector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The expansion of `memset` (via expand_builtin_memset_args()) uses clear_by_pieces() and store_by_pieces() to avoid calls to the C runtime. To check if a type can be used for that purpose the function by_pieces_mode_supported_p() tests if a `mov` and a `vec_duplicate` INSN can be expaned by the backend. The `vec_duplicate` expansion takes arguments of type `V_VLS`. The `mov` expansions take arguments of type `V`, `VB`, `VT`, `VLS_AVL_IMM`, and `VLS_AVL_REG`. Some of these types (in fact not types but type iterators) include fractional LMUL types. E.g. `V_VLS` includes `V`, which includes `VI`, which includes `RVVMF2QI`. This results in an attempt to use fractional LMUL-types for the `memset` expansion resulting in an ICE for XTheadVector, because that extension cannot handle fractional LMULs. This patch addresses this issue by splitting the definition of the `VI` mode itereator into `VI_NOFRAC` (without fractional LMUL types) and `VI_FRAC` (only fractional LMUL types). Further, it defines `V_VLS` such, that `VI_FRAC` types are only included if XTheadVector is not enabled. The effect is demonstrated by a new test case that shows that the by-pieces framework now emits `sb` instructions instead of triggering an ICE. Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu> PR target/114194 gcc/ChangeLog: * config/riscv/vector-iterators.md: Split VI into VI_FRAC and VI_NOFRAC. Only include VI_NOFRAC in V_VLS without TARGET_XTHEADVECTOR. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/xtheadvector/pr114194.c: New test. Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu> --- gcc/config/riscv/vector-iterators.md | 19 +++++-- .../riscv/rvv/xtheadvector/pr114194.c | 56 +++++++++++++++++++ 2 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194.c diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector-iterators.md index c2ea7e8b10ac..a24e1bf078fb 100644 --- a/gcc/config/riscv/vector-iterators.md +++ b/gcc/config/riscv/vector-iterators.md @@ -108,17 +108,24 @@ UNSPECV_FRM_RESTORE_EXIT ]) -(define_mode_iterator VI [ - RVVM8QI RVVM4QI RVVM2QI RVVM1QI RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") - - RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") - - RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVMF2SI "TARGET_MIN_VLEN > 32") +;; Subset of VI with fractional LMUL types +(define_mode_iterator VI_FRAC [ + RVVMF2QI RVVMF4QI (RVVMF8QI "TARGET_MIN_VLEN > 32") + RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") + (RVVMF2SI "TARGET_MIN_VLEN > 32") +]) +;; Subset of VI with non-fractional LMUL types +(define_mode_iterator VI_NOFRAC [ + RVVM8QI RVVM4QI RVVM2QI RVVM1QI + RVVM8HI RVVM4HI RVVM2HI RVVM1HI + RVVM8SI RVVM4SI RVVM2SI RVVM1SI (RVVM8DI "TARGET_VECTOR_ELEN_64") (RVVM4DI "TARGET_VECTOR_ELEN_64") (RVVM2DI "TARGET_VECTOR_ELEN_64") (RVVM1DI "TARGET_VECTOR_ELEN_64") ]) +(define_mode_iterator VI [ VI_NOFRAC (VI_FRAC "!TARGET_XTHEADVECTOR") ]) + ;; This iterator is the same as above but with TARGET_VECTOR_ELEN_FP_16 ;; changed to TARGET_ZVFH. TARGET_VECTOR_ELEN_FP_16 is also true for ;; TARGET_ZVFHMIN while we actually want to disable all instructions apart diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194.c new file mode 100644 index 000000000000..fc2d13494256 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr114194.c @@ -0,0 +1,56 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gc_xtheadvector" { target { rv32 } } } */ +/* { dg-options "-march=rv64gc_xtheadvector" { target { rv64 } } } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +/* +** foo0_1: +** sb\tzero,0([a-x0-9]+) +** ret +*/ +void foo0_1 (void *p) +{ + __builtin_memset (p, 0, 1); +} + +/* +** foo0_7: +** sb\tzero,0([a-x0-9]+) +** sb\tzero,1([a-x0-9]+) +** sb\tzero,2([a-x0-9]+) +** sb\tzero,3([a-x0-9]+) +** sb\tzero,4([a-x0-9]+) +** sb\tzero,5([a-x0-9]+) +** sb\tzero,6([a-x0-9]+) +** ret +*/ +void foo0_7 (void *p) +{ + __builtin_memset (p, 0, 7); +} + +/* +** foo1_1: +** li\t[a-x0-9]+,1 +** sb\t[a-x0-9]+,0([a-x0-9]+) +** ret +*/ +void foo1_1 (void *p) +{ + __builtin_memset (p, 1, 1); +} + +/* +** foo1_5: +** li\t[a-x0-9]+,1 +** sb\t[a-x0-9]+,0([a-x0-9]+) +** sb\t[a-x0-9]+,1([a-x0-9]+) +** sb\t[a-x0-9]+,2([a-x0-9]+) +** sb\t[a-x0-9]+,3([a-x0-9]+) +** sb\t[a-x0-9]+,4([a-x0-9]+) +** ret +*/ +void foo1_5 (void *p) +{ + __builtin_memset (p, 1, 5); +} From d4ad99b0355bce23524aa0ecb5100b987279de96 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Fri, 22 Mar 2024 08:41:39 +0100 Subject: [PATCH 195/551] s390: testsuite: Fix abs-4.c gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/abs-4.c: On s390 we also have a copysign optab for long double. Thus, scan 3 instead of 2 times for it. --- gcc/testsuite/gcc.dg/tree-ssa/abs-4.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c b/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c index 80fa448df125..4144d1cd954a 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c @@ -10,8 +10,9 @@ long double abs_ld(long double x) { return __builtin_signbit(x) ? x : -x; } /* __builtin_signbit(x) ? x : -x. Should be convert into - ABS_EXP<x> */ /* { dg-final { scan-tree-dump-not "signbit" "optimized"} } */ -/* { dg-final { scan-tree-dump-times "= ABS_EXPR" 1 "optimized" { target ifn_copysign } } } */ -/* { dg-final { scan-tree-dump-times "= -" 1 "optimized" { target ifn_copysign } } } */ -/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 2 "optimized" { target ifn_copysign } } } */ +/* { dg-final { scan-tree-dump-times "= ABS_EXPR" 1 "optimized" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times "= -" 1 "optimized" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 2 "optimized" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 3 "optimized" { target { ifn_copysign && s390*-*-* } } } } */ /* { dg-final { scan-tree-dump-times "= ABS_EXPR" 3 "optimized" { target { ! ifn_copysign } } } } */ /* { dg-final { scan-tree-dump-times "= -" 3 "optimized" { target { ! ifn_copysign } } } } */ From 982250b230967776f0da708a1572b78a38561e08 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 22 Mar 2024 09:22:04 +0100 Subject: [PATCH 196/551] bitint: Some bitint store fixes [PR114405] The following patch fixes some bugs in the handling of stores to large/huge _BitInt bitfields. In the first 2 hunks we are processing the most significant limb of the actual type (not necessarily limb in the storage), and so we know it is either partial or full limb, so [1, limb_prec] bits rather than [0, limb_prec - 1] bits as the code actually assumed. So, those 2 spots are fixed by making sure if tprec is a multiple of limb_prec we actually use limb_prec bits rather than 0. Otherwise, it e.g. happily could create and use 0 precision INTEGER_TYPE even when it actually should have processed 64 bits, or for non-zero bo_bit could handle just say 1 bit rather than 64 bits plus 1 bit in the last hunk spot. In the last hunk we are dealing with the extra bits in the last storage limb, and the code was e.g. happily creating 65 bit precision INTEGER_TYPE, even when we really should use 1 bit precision in that case. Also, it used a wrong offset in that case. The large testcase covers all these cases. 2024-03-22 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114405 * gimple-lower-bitint.cc (bitint_large_huge::lower_mergeable_stmt): Set rprec to limb_prec rather than 0 if tprec is divisible by limb_prec. In the last bf_cur handling, set rprec to (tprec + bo_bit) % limb_prec rather than tprec % limb_prec and use just rprec instead of rprec + bo_bit. For build_bit_field_ref offset, divide (tprec + bo_bit) by limb_prec rather than just tprec. * gcc.dg/torture/bitint-66.c: New test. --- gcc/gimple-lower-bitint.cc | 12 +- gcc/testsuite/gcc.dg/torture/bitint-66.c | 187 +++++++++++++++++++++++ 2 files changed, 193 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-66.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 1ce13ca25799..8c268005dfd0 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -2737,7 +2737,7 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, && tree_fits_uhwi_p (idx)) { unsigned int tprec = TYPE_PRECISION (type); - unsigned int rprec = tprec % limb_prec; + unsigned int rprec = (tprec - 1) % limb_prec + 1; if (rprec + bo_bit < (unsigned) limb_prec) { tree ftype @@ -2882,7 +2882,7 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, if (nlhs && i == cnt - 1) { unsigned int tprec = TYPE_PRECISION (type); - unsigned int rprec = tprec % limb_prec; + unsigned int rprec = (tprec - 1) % limb_prec + 1; if (rprec + bo_bit < (unsigned) limb_prec) { tree ftype @@ -2934,11 +2934,11 @@ bitint_large_huge::lower_mergeable_stmt (gimple *stmt, tree_code &cmp_code, if (bf_cur != NULL_TREE) { unsigned int tprec = TYPE_PRECISION (type); - unsigned int rprec = tprec % limb_prec; - tree ftype = build_nonstandard_integer_type (rprec + bo_bit, 1); + unsigned int rprec = (tprec + bo_bit) % limb_prec; + tree ftype = build_nonstandard_integer_type (rprec, 1); tree bfr = build_bit_field_ref (ftype, unshare_expr (nlhs), - rprec + bo_bit, - (bo_idx + tprec / limb_prec) + rprec, + (bo_idx + (tprec + bo_bit) / limb_prec) * limb_prec); rhs1 = bf_cur; if (bf_cur != ext) diff --git a/gcc/testsuite/gcc.dg/torture/bitint-66.c b/gcc/testsuite/gcc.dg/torture/bitint-66.c new file mode 100644 index 000000000000..8fb88d216d7d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-66.c @@ -0,0 +1,187 @@ +/* PR tree-optimization/114405 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c23" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 22658 +struct S1 { unsigned _BitInt(22592) b : 22592; } s1; +struct S2 { unsigned _BitInt(22656) b : 22656; } s2; +struct S3 { unsigned _BitInt(22656) a : 1; unsigned _BitInt(22656) b : 22592; } s3; +struct S4 { unsigned _BitInt(22720) a : 1; unsigned _BitInt(22720) b : 22656; } s4; +struct S5 { unsigned _BitInt(22656) a : 63; unsigned _BitInt(22656) b : 22592; } s5; +struct S6 { unsigned _BitInt(22720) a : 63; unsigned _BitInt(22720) b : 22656; } s6; +struct S7 { unsigned _BitInt(22656) a : 63; unsigned _BitInt(22656) b : 22593; } s7; +struct S8 { unsigned _BitInt(22720) a : 63; unsigned _BitInt(22720) b : 22657; } s8; +struct S9 { unsigned _BitInt(22720) a : 63; unsigned _BitInt(22720) b : 22594; } s9; +struct S10 { unsigned _BitInt(22784) a : 63; unsigned _BitInt(22784) b : 22658; } s10; + +void +f1 () +{ + s1.b -= 1; +} + +void +f2 () +{ + s2.b -= 2; +} + +void +f3 () +{ + s3.b -= 3; +} + +void +f4 () +{ + s4.b -= 4; +} + +void +f5 () +{ + s5.b -= 5; +} + +void +f6 () +{ + s6.b -= 6; +} + +void +f7 () +{ + s7.b -= 7; +} + +void +f8 () +{ + s8.b -= 8; +} + +void +f9 () +{ + s9.b -= 9; +} + +void +f10 () +{ + s10.b -= 10; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 22658 + unsigned _BitInt (22658) x = 35015800338050537498653008975574777488471087113295678194599504786371118710585944764484319821814068677490527864655685471191270812376315187006362917616576927111302865447983015739707543894301812327613134303841120826906790799707945571940353679717992456618228475528547510586897749233526180762796715338576474162208482247579501472751564244280666467759098306130591470559699084354910294882192723651841592393926757180305195950024774564220025030563292947354781759299194966498726876479688077238921483110994054027510847144042281753290386826921891349089652533212847637539203663944291864735754172352890834426862632126961163985046972025301399018684566740785996326722076659400941893788960122749623916485601415360002274675377030245228431275643589886668085292950399276178821803582907976934018711232293574702988204897189390955663390781810969523555013492735686957152905365370309275409263670885337914087790049584201395109754919697465084425517224980533087781850980467009812856730696074297910828639377203631339464675255240105642870755676377580847320171721410474552064279926175805508159289600278139657791849436955572980238115099785715087280249620991823931002767709388014969775014532212905291917079945444559149155885537869443203998149528921864913273054936504913012987390968722761436324692074211426577825330615158003561217398156744067970380132500886173138375004010286681801118436837157169356000174611385663795085963585748604221595275406157579119331428498714316454502878707144485541046851763795055069716380454650877888082099155307604956585565750095456844726339707735735457306818630192757960862820008907032696106990880643682877297054778560972681289475676822120960274032924190097299892650196374738015462740789768656492119706888461868600641030840748136350368218121335079547275823933746794720376649284092875982043181284314358557128707984260557357154662378677928178190735268683492714017854629967153014231157377885091064447831201063510650297385915804287319939506628451435721208364052433627434988729866237807202969467835254010038134458240638537208900261071474543301726397124628778009813885844516116875814757951712204725755866073002681855066543296947579858825103198060954359453660770400428464367183262945659741442129886496782750203291436130782872835833210931632788692244249384390726841766304668343729453316125242663035845457840953337688285031237708574070672758470607188306503291550138232031426679939617451739589817112669177611683906458764129736114273328542188257601463679042157104326452743228219904706515617554527404048486259443988771977512551077861016524071064966970245017842256022606252061533848052435944977075011683626924927864280265758204665377061594059017099850979465876532419313486240717486906824159353605563308622625101457788519462541166177560281487799503798108588440825426607303000287409968420712049604991695790921639810867480138128306445418986912743800521671354614532833872265863112799715535687739478987679787018336970919695660390682264636150577566966764721802539998608991596596546556960417641758069978309886615055065702687053645693124995478332454146800359894015089378783326036961147850317605896348313726625553781061923378718687650420049383163990299220462014901150975723976343990790739809356547239169873123203257078485635203722205187613294672585706712476042677590110639030069113837888415438005484344127768780921085274935619874173948989715840193896849220392368104518514031409179052524585070596066277001819910990553597508786540274520042981022543179426692284115768847300760319798602782719502711479977841874279930256816314452366331024645465785170800967984915770274302056373288589848483586271102816058353828602154848694512984885871790942162082427238005581376556754035790091155513425741055471166143834525319986952226318009226219401664653842860255680448070664407513672458449782074739011365473358229650988748472490629370744022391466625361113054412612574678134216032856556863642265414398411935273804108044993783269249262310916343278917698138611714061112393373897185388882146571186794769300914631780033370026907455350009100991398234230544005707225639911199001521060556494353269734418926976543883020167814965921931535096716826458262250189637748592376073865192810054352613051207327474619337934761146663426134935118503413825504082424332977262179190227449970171913254842194017309504632878985906186166214692140433429536009075713610528721894447986767468896884878765453610651622692341168938373665683970274583865449382798823150851403509730677053140708625595483245639618740574210653530198624859276131133783495033522802696413029101559426339050058584932631815922210413946199510350852865446812403106276713939581929546785460511137593419056060306250217029285811803013980616801841304694722011435758766177962049701664613512583182049260761144544863256467186213830060851829683883752577265078689385674617164146035435092588247318322733523567283845432256120837686647944780078580265417701923133121360511602219094764926277534354807040327859447719471002245844782328492039359603459083181436222097669007774554756731268016051487933312972616137658853650317461494196070488717404975633548685934461815467879673043738028501662385765726339447319024260930739951505693992826178343374149857545719100281434407604507469945111545032437656099424412573336369079168862003094855689600545933448699263081128774135084325432935970025160634165357145443378006220662160445647943128195352561425127099417647196668384335109349031134696463855906874865675419780741981139645587274839419864230821395469418683636935930834609291353227775312716176266653441965834697927579160177680186708970308315749650687662459599387055171808726719664673659254693742629742210875019198336374705508371903093542410995253013501601426016328214864707009534388699971539616972918925748729111792476147132099151408067415671771268758562336472333173561377424856607016076217345813200209837622293261269296049102357129259291847303310788402335473055104793925018108266365566334144957977011022080954274483513076181095572139673622797279076831219272711108256081425991375813518135442665798185129409104195642582574005698068543758814799878628816260575002894250723437469293380754329373751478069967151946701724550270952583590048204731437620446357611597703063140065615278014456977266371201795995646459704425842307781189527028486070466105764495249910844961272734411722090576328496690678921549811732110098855139371357058264972132635004768261508328436120677484741464226299067993312922923316398805257936717699519222213192533192746600829048907097046462066206043987729487350920474035219484795840791105847762753227958460953129122508970162044661061074090561192446511631511339514682638233698374095743691902757648070625949939841339410289027899541368321851192767145693326883564251857041615916159616490433637711319076039315762942426225728417924096927156791836747462094823404471357021596544260573448601630171546391583358297381573516226814145190492133449221202013592319137021uwb; + unsigned _BitInt (22658) y = ~x, a; + a = x >> (22658 - 22592); + s1.b = a; + f1 (); + if (s1.b != a - 1) + __builtin_abort (); + a = y >> (22658 - 22592); + s1.b = a; + f1 (); + if (s1.b != a - 1) + __builtin_abort (); + a = x >> (22658 - 22656); + s2.b = a; + f2 (); + if (s2.b != a - 2) + __builtin_abort (); + a = y >> (22658 - 22656); + s2.b = a; + f2 (); + if (s2.b != a - 2) + __builtin_abort (); + a = x >> (22658 - 22592); + s3.b = a; + f3 (); + if (s3.b != a - 3) + __builtin_abort (); + a = y >> (22658 - 22592); + s3.b = a; + f3 (); + if (s3.b != a - 3) + __builtin_abort (); + a = x >> (22658 - 22656); + s4.b = a; + f4 (); + if (s4.b != a - 4) + __builtin_abort (); + a = y >> (22658 - 22656); + s4.b = a; + f4 (); + if (s4.b != a - 4) + __builtin_abort (); + a = x >> (22658 - 22592); + s5.b = a; + f5 (); + if (s5.b != a - 5) + __builtin_abort (); + a = y >> (22658 - 22592); + s5.b = a; + f5 (); + if (s5.b != a - 5) + __builtin_abort (); + a = x >> (22658 - 22656); + s6.b = a; + f6 (); + if (s6.b != a - 6) + __builtin_abort (); + a = y >> (22658 - 22656); + s6.b = a; + f6 (); + if (s6.b != a - 6) + __builtin_abort (); + a = x >> (22658 - 22593); + s7.b = a; + f7 (); + if (s7.b != a - 7) + __builtin_abort (); + a = y >> (22658 - 22593); + s7.b = a; + f7 (); + if (s7.b != a - 7) + __builtin_abort (); + a = x >> (22658 - 22657); + s8.b = a; + f8 (); + if (s8.b != a - 8) + __builtin_abort (); + a = y >> (22658 - 22657); + s8.b = a; + f8 (); + if (s8.b != a - 8) + __builtin_abort (); + a = x >> (22658 - 22594); + s9.b = a; + f9 (); + if (s9.b != a - 9) + __builtin_abort (); + a = y >> (22658 - 22594); + s9.b = a; + f9 (); + if (s9.b != a - 9) + __builtin_abort (); + a = x >> (22658 - 22658); + s10.b = a; + f10 (); + if (s10.b != a - 10) + __builtin_abort (); + a = y >> (22658 - 22658); + s10.b = a; + f10 (); + if (s10.b != a - 10) + __builtin_abort (); +#endif +} From ddd4a3ca87410886b039cc225907b4f6e650082e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 22 Mar 2024 09:23:44 +0100 Subject: [PATCH 197/551] ubsan: Don't -fsanitize=null instrument __seg_fs/gs pointers [PR111736] On x86 and avr some address spaces allow 0 pointers (on avr actually even generic as, but libsanitizer isn't ported to it and I'm not convinced we should completely kill -fsanitize=null in that case). The following patch makes sure those aren't diagnosed for -fsanitize=null, though they are still sanitized for -fsanitize=alignment. 2024-03-22 Jakub Jelinek <jakub@redhat.com> PR sanitizer/111736 * ubsan.cc (ubsan_expand_null_ifn, instrument_mem_ref): Avoid SANITIZE_NULL instrumentation for non-generic address spaces for which targetm.addr_space.zero_address_valid (as) is true. * gcc.dg/ubsan/pr111736.c: New test. --- gcc/testsuite/gcc.dg/ubsan/pr111736.c | 23 +++++++++++++++++++++++ gcc/ubsan.cc | 18 ++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/ubsan/pr111736.c diff --git a/gcc/testsuite/gcc.dg/ubsan/pr111736.c b/gcc/testsuite/gcc.dg/ubsan/pr111736.c new file mode 100644 index 000000000000..359b31828f0f --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr111736.c @@ -0,0 +1,23 @@ +/* PR sanitizer/111736 */ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-fsanitize=null,alignment -fdump-tree-optimized -ffat-lto-objects" } */ +/* { dg-final { scan-tree-dump-times "__ubsan_handle_type_mismatch" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-not "p_\[0-9]*.D. \[=!]= 0" "optimized" } } */ + +#ifdef __x86_64__ +#define SEG __seg_fs +#else +#define SEG __seg_gs +#endif + +int +foo (int SEG *p, int *q) +{ + return *p; +} + +__attribute__((no_sanitize("alignment"))) int +bar (int SEG *p, int *q) +{ + return *p; +} diff --git a/gcc/ubsan.cc b/gcc/ubsan.cc index e17d7091408a..fb00dc24bf60 100644 --- a/gcc/ubsan.cc +++ b/gcc/ubsan.cc @@ -858,6 +858,13 @@ ubsan_expand_null_ifn (gimple_stmt_iterator *gsip) } } check_null = sanitize_flags_p (SANITIZE_NULL); + if (check_null && POINTER_TYPE_P (TREE_TYPE (ptr))) + { + addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (ptr))); + if (!ADDR_SPACE_GENERIC_P (as) + && targetm.addr_space.zero_address_valid (as)) + check_null = false; + } if (check_align == NULL_TREE && !check_null) { @@ -1447,8 +1454,15 @@ instrument_mem_ref (tree mem, tree base, gimple_stmt_iterator *iter, if (align <= 1) align = 0; } - if (align == 0 && !sanitize_flags_p (SANITIZE_NULL)) - return; + if (align == 0) + { + if (!sanitize_flags_p (SANITIZE_NULL)) + return; + addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (base)); + if (!ADDR_SPACE_GENERIC_P (as) + && targetm.addr_space.zero_address_valid (as)) + return; + } tree t = TREE_OPERAND (base, 0); if (!POINTER_TYPE_P (TREE_TYPE (t))) return; From 3d406af2008a19914305966dddbc02ae980b8cd7 Mon Sep 17 00:00:00 2001 From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> Date: Fri, 22 Mar 2024 09:55:03 +0100 Subject: [PATCH 198/551] testsuite: i386: Skip gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c etc. with Solaris as [PR114150] Two avx512cd tests FAIL to assemble with the Solaris/x86 assembler: FAIL: gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c (test for excess errors) UNRESOLVED: gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c compilation failed to produce executable FAIL: gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c (test for excess errors) UNRESOLVED: gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c compilation failed to produce executable Excess errors: Assembler: avx512cd-vpbroadcastmb2q-2.c "/var/tmp//ccs_9lod.s", line 42 : Invalid instruction argument Near line: " vpbroadcastmb2q %k0, %zmm0" Assembler: avx512cd-vpbroadcastmw2d-2.c "/var/tmp//ccevT6Rd.s", line 35 : Invalid instruction argument Near line: " vpbroadcastmw2d %k0, %zmm0" This seems to be an as bug, but given that this rarely if ever gets any fixes these days, this test just skips the affected tests. Adjuststing check_effective_target_avx512cd instead doesn't seem sensible since it would disable quite a number of working tests. Tested on i386-pc-solaris2.11 (as and gas) and x86_64-pc-linux-gnu. 2024-03-19 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: PR target/114150 * gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c: Skip on Solaris/x86 with as. * gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c: Likewise. --- gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c | 1 + gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c | 1 + 2 files changed, 2 insertions(+) diff --git a/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c b/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c index 2e0a082c13aa..b2266beed68a 100644 --- a/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ /* { dg-options "-O2 -mavx512cd" } */ /* { dg-require-effective-target avx512cd } */ +/* { dg-skip-if "PR target/114150" { *-*-solaris2.* && { ! gas } } } */ #define HAVE_512 #define AVX512CD diff --git a/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c b/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c index f4bd7e7a60e9..56397646a272 100644 --- a/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ /* { dg-options "-O2 -mavx512cd" } */ /* { dg-require-effective-target avx512cd } */ +/* { dg-skip-if "PR target/114150" { *-*-solaris2.* && { ! gas } } } */ #define HAVE_512 #define AVX512CD From 644a7033cc09b79a5cfefe1fe9b307d835009b17 Mon Sep 17 00:00:00 2001 From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> Date: Fri, 22 Mar 2024 10:07:05 +0100 Subject: [PATCH 199/551] testsuite: vect: Remove dg-final in gcc.dg/vect/bb-slp-32.c [PR96147] gcc.dg/vect/bb-slp-32.c currently XPASSes on 32 and 64-bit Solaris/SPARC: XPASS: gcc.dg/vect/bb-slp-32.c -flto -ffat-lto-objects scan-tree-dump slp2 "vectorization is not profitable" XPASS: gcc.dg/vect/bb-slp-32.c scan-tree-dump slp2 "vectorization is not profitable" Richard suggested to remove the dg-final, so this is what the patch does. Tested on sparc-sun-solaris2.11 and i386-pc-solaris2.11. 2024-03-19 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: PR tree-optimization/96147 * gcc.dg/vect/bb-slp-32.c (dg-final): Remove. --- gcc/testsuite/gcc.dg/vect/bb-slp-32.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-32.c b/gcc/testsuite/gcc.dg/vect/bb-slp-32.c index 84cc4370f091..f10442e6d568 100644 --- a/gcc/testsuite/gcc.dg/vect/bb-slp-32.c +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-32.c @@ -24,5 +24,3 @@ int foo (int *p, int a, int b) bar (x); return sum; } - -/* { dg-final { scan-tree-dump "vectorization is not profitable" "slp2" { xfail { vect_no_align && { ! vect_hw_misalign } } } } } */ From dbe9062ce070c861cd3fa6435187618413b1b3d1 Mon Sep 17 00:00:00 2001 From: Andrew Pinski <quic_apinski@quicinc.com> Date: Thu, 21 Mar 2024 16:29:20 -0700 Subject: [PATCH 200/551] Another ICE after conflicting types of redeclaration [PR109619] This another one of these ICE after error issues with the gimplifier and a fallout from r12-3278-g823685221de986af. This case happens when we are trying to fold memcpy/memmove. There is already code to try to catch ERROR_MARKs as arguments to the builtins so just need to change them to use error_operand_p which checks the type of the expression to see if it was an error mark also. Bootstrapped and tested on x86_64-linux-gnu with no regressions. gcc/ChangeLog: PR c/109619 * builtins.cc (fold_builtin_1): Use error_operand_p instead of checking against ERROR_MARK. (fold_builtin_2): Likewise. (fold_builtin_3): Likewise. gcc/testsuite/ChangeLog: PR c/109619 * gcc.dg/redecl-26.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> --- gcc/builtins.cc | 12 ++++++------ gcc/testsuite/gcc.dg/redecl-26.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/redecl-26.c diff --git a/gcc/builtins.cc b/gcc/builtins.cc index eda8bea9c4be..bb74b5cbcd6f 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -10461,7 +10461,7 @@ fold_builtin_1 (location_t loc, tree expr, tree fndecl, tree arg0) tree type = TREE_TYPE (TREE_TYPE (fndecl)); enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl); - if (TREE_CODE (arg0) == ERROR_MARK) + if (error_operand_p (arg0)) return NULL_TREE; if (tree ret = fold_const_call (as_combined_fn (fcode), type, arg0)) @@ -10601,8 +10601,8 @@ fold_builtin_2 (location_t loc, tree expr, tree fndecl, tree arg0, tree arg1) tree type = TREE_TYPE (TREE_TYPE (fndecl)); enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl); - if (TREE_CODE (arg0) == ERROR_MARK - || TREE_CODE (arg1) == ERROR_MARK) + if (error_operand_p (arg0) + || error_operand_p (arg1)) return NULL_TREE; if (tree ret = fold_const_call (as_combined_fn (fcode), type, arg0, arg1)) @@ -10693,9 +10693,9 @@ fold_builtin_3 (location_t loc, tree fndecl, tree type = TREE_TYPE (TREE_TYPE (fndecl)); enum built_in_function fcode = DECL_FUNCTION_CODE (fndecl); - if (TREE_CODE (arg0) == ERROR_MARK - || TREE_CODE (arg1) == ERROR_MARK - || TREE_CODE (arg2) == ERROR_MARK) + if (error_operand_p (arg0) + || error_operand_p (arg1) + || error_operand_p (arg2)) return NULL_TREE; if (tree ret = fold_const_call (as_combined_fn (fcode), type, diff --git a/gcc/testsuite/gcc.dg/redecl-26.c b/gcc/testsuite/gcc.dg/redecl-26.c new file mode 100644 index 000000000000..5f8889c4c396 --- /dev/null +++ b/gcc/testsuite/gcc.dg/redecl-26.c @@ -0,0 +1,14 @@ +/* We used to ICE while folding memcpy and memmove. + PR c/109619. */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +int *a1, *a2; + +void foo(__SIZE_TYPE__ a3) /* { dg-note "" } */ +{ + __builtin_memcpy(a1, a2, a3); + __builtin_memmove(a1, a2, a3); + int *a3; /* { dg-error "redeclared as different kind of symbol" } */ +} + From ca27c3b3a09fa051c0112769ba680e43b197aa97 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 22 Mar 2024 10:20:11 +0100 Subject: [PATCH 201/551] testsuite: Fix up depobj-3.c test on i686-linux [PR112724] While I've posted a patch to handle EXCESS_PRECISION_EXPR in C/C++ pretty printing, still we'd need to handle (a + (float)5) and (float)(((long double)a) + (long double)5) and possibly (float)(((double)a) + (double)5) too for s390?, so the following patch just uses -fexcess-precision=fast, so that the expression is always the same. 2024-03-22 Jakub Jelinek <jakub@redhat.com> PR c++/112724 * c-c++-common/gomp/depobj-3.c: Add -fexcess-precision=fast as dg-additional-options. --- gcc/testsuite/c-c++-common/gomp/depobj-3.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/testsuite/c-c++-common/gomp/depobj-3.c b/gcc/testsuite/c-c++-common/gomp/depobj-3.c index a5017a40b47e..526c4293ed34 100644 --- a/gcc/testsuite/c-c++-common/gomp/depobj-3.c +++ b/gcc/testsuite/c-c++-common/gomp/depobj-3.c @@ -1,3 +1,5 @@ +/* { dg-additional-options "-fexcess-precision=fast" } */ + typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t { char __omp_depend_t__[2 * sizeof (void *)]; } omp_depend_t; From e0a7233e1d2e617e1913b9873599e7a50bfe1c8f Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Fri, 22 Mar 2024 11:23:24 +0100 Subject: [PATCH 202/551] s390: testsuite: Fix backprop-6.c gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/backprop-6.c: On s390 we also have a copysign optab for long double. Thus, scan 3 instead of 2 times for it. --- gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c b/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c index 4087ba93018b..dbde681e3832 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c @@ -27,8 +27,9 @@ TEST_FUNCTION (float, f) TEST_FUNCTION (double, ) TEST_FUNCTION (long double, l) -/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = -} 4 "backprop" { target ifn_copysign } } } */ -/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 2 "backprop" { target ifn_copysign } } } */ -/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = ABS_EXPR <} 1 "backprop" { target ifn_copysign } } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = -} 4 "backprop" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 2 "backprop" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = ABS_EXPR <} 1 "backprop" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 3 "backprop" { target { ifn_copysign && s390*-*-* } } } } */ /* { dg-final { scan-tree-dump-times {Deleting[^\n]* = -} 6 "backprop" { target { ! ifn_copysign } } } } */ /* { dg-final { scan-tree-dump-times {Deleting[^\n]* = ABS_EXPR <} 3 "backprop" { target { ! ifn_copysign } } } } */ From 47de95d801c6899033c303b1fe642feb0489994f Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Fri, 22 Mar 2024 14:43:47 +0800 Subject: [PATCH 203/551] RISC-V: Introduce gcc attribute riscv_rvv_vector_bits for RVV This patch would like to introduce one new gcc attribute for RVV. This attribute is used to define fixed-length variants of one existing sizeless RVV types. This attribute is valid if and only if the mrvv-vector-bits=zvl, the only one args should be the integer constant and its' value is terminated by the LMUL and the vector register bits in zvl*b. For example: typedef vint32m2_t fixed_vint32m2_t __attribute__((riscv_rvv_vector_bits(128))); The above type define is valid when -march=rv64gc_zve64d_zvl64b (aka 2(m2) * 64 = 128 for vin32m2_t), and will report error when -march=rv64gcv_zvl128b similar to below. "error: invalid RVV vector size '128', expected size is '256' based on LMUL of type and '-mrvv-vector-bits=zvl'" Meanwhile, a pre-define macro __riscv_v_fixed_vlen is introduced to represent the fixed vlen in a RVV vector register. For the vint*m*_t below operations are allowed. * The sizeof. * The global variable(s). * The element of union and struct. * The cast to other equalities. * CMP: >, <, ==, !=, <=, >= * ALU: +, -, *, /, %, &, |, ^, >>, <<, ~, - The CMP will return vint*m*_t the same as aarch64 sve. For example: typedef vint32m1_t fixed_vint32m1_t __attribute__((riscv_rvv_vector_bits(128))); fixed_vint32m1_t less_than (fixed_vint32m1_t a, fixed_vint32m1_t b) { return a < b; } For the vfloat*m*_t below operations are allowed. * The sizeof. * The global variable(s). * The element of union and struct. * The cast to other equalities. * CMP: >, <, ==, !=, <=, >= * ALU: +, -, *, /, - The CMP will return vfloat*m*_t the same as aarch64 sve. For example: typedef vfloat32m1_t fixed_vfloat32m1_t __attribute__((riscv_rvv_vector_bits(128))); fixed_vfloat32m1_t less_than (fixed_vfloat32m1_t a, fixed_vfloat32m1_t b) { return a < b; } For the vbool*_t types only below operations are allowed except the CMP and ALU. The CMP and ALU operations on vbool*_t is not well defined currently. * The sizeof. * The global variable(s). * The element of union and struct. * The cast to other equalities. For the vint*x*m*_t tuple types are not suppored in this patch which is compatible with clang. This patch passed the below testsuites. * The riscv fully regression tests. gcc/ChangeLog: * config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): Add pre-define macro __riscv_v_fixed_vlen when zvl. * config/riscv/riscv.cc (riscv_handle_rvv_vector_bits_attribute): New static func to take care of the RVV types decorated by the attributes. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-1.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-10.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-11.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-12.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-13.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-14.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-15.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-16.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-17.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-18.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-2.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-3.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-4.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-5.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-6.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-7.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-8.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-9.c: New test. * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits.h: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv-c.cc | 3 + gcc/config/riscv/riscv.cc | 87 +++++++++++++- .../riscv/rvv/base/riscv_rvv_vector_bits-1.c | 6 + .../riscv/rvv/base/riscv_rvv_vector_bits-10.c | 53 +++++++++ .../riscv/rvv/base/riscv_rvv_vector_bits-11.c | 76 ++++++++++++ .../riscv/rvv/base/riscv_rvv_vector_bits-12.c | 14 +++ .../riscv/rvv/base/riscv_rvv_vector_bits-13.c | 10 ++ .../riscv/rvv/base/riscv_rvv_vector_bits-14.c | 10 ++ .../riscv/rvv/base/riscv_rvv_vector_bits-15.c | 10 ++ .../riscv/rvv/base/riscv_rvv_vector_bits-16.c | 11 ++ .../riscv/rvv/base/riscv_rvv_vector_bits-17.c | 10 ++ .../riscv/rvv/base/riscv_rvv_vector_bits-18.c | 45 ++++++++ .../riscv/rvv/base/riscv_rvv_vector_bits-2.c | 6 + .../riscv/rvv/base/riscv_rvv_vector_bits-3.c | 6 + .../riscv/rvv/base/riscv_rvv_vector_bits-4.c | 6 + .../riscv/rvv/base/riscv_rvv_vector_bits-5.c | 6 + .../riscv/rvv/base/riscv_rvv_vector_bits-6.c | 6 + .../riscv/rvv/base/riscv_rvv_vector_bits-7.c | 76 ++++++++++++ .../riscv/rvv/base/riscv_rvv_vector_bits-8.c | 75 ++++++++++++ .../riscv/rvv/base/riscv_rvv_vector_bits-9.c | 76 ++++++++++++ .../riscv/rvv/base/riscv_rvv_vector_bits.h | 108 ++++++++++++++++++ 21 files changed, 698 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-10.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-11.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-12.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-13.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-14.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-15.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-16.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-17.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-18.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-3.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-4.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-5.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-6.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-7.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-8.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-9.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits.h diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc index 7029ba881869..edb866d51e40 100644 --- a/gcc/config/riscv/riscv-c.cc +++ b/gcc/config/riscv/riscv-c.cc @@ -140,6 +140,9 @@ riscv_cpu_cpp_builtins (cpp_reader *pfile) builtin_define ("__riscv_vector"); builtin_define_with_int_value ("__riscv_v_intrinsic", riscv_ext_version_value (0, 12)); + + if (rvv_vector_bits == RVV_VECTOR_BITS_ZVL) + builtin_define_with_int_value ("__riscv_v_fixed_vlen", TARGET_MIN_VLEN); } if (TARGET_XTHEADVECTOR) diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 1358c243898a..6d11576a8fd7 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -552,6 +552,8 @@ static const struct riscv_tune_param optimize_size_tune_info = { static bool riscv_avoid_shrink_wrapping_separate (); static tree riscv_handle_fndecl_attribute (tree *, tree, tree, int, bool *); static tree riscv_handle_type_attribute (tree *, tree, tree, int, bool *); +static tree riscv_handle_rvv_vector_bits_attribute (tree *, tree, tree, int, + bool *); /* Defining target-specific uses of __attribute__. */ static const attribute_spec riscv_gnu_attributes[] = @@ -574,7 +576,17 @@ static const attribute_spec riscv_gnu_attributes[] = /* This attribute is used to declare a function, forcing it to use the standard vector calling convention variant. Syntax: __attribute__((riscv_vector_cc)). */ - {"riscv_vector_cc", 0, 0, false, true, true, true, NULL, NULL} + {"riscv_vector_cc", 0, 0, false, true, true, true, NULL, NULL}, + /* This attribute is used to declare a new type, to appoint the exactly + bits size of the type. For example: + + typedef vint8m1_t f_vint8m1_t __attribute__((riscv_rvv_vector_bits(256))); + + The new created type f_vint8m1_t will be exactly 256 bits. It can be + be used in globals, structs, unions, and arrays instead of sizeless + types. */ + {"riscv_rvv_vector_bits", 1, 1, false, true, false, true, + riscv_handle_rvv_vector_bits_attribute, NULL}, }; static const scoped_attribute_specs riscv_gnu_attribute_table = @@ -587,7 +599,17 @@ static const attribute_spec riscv_attributes[] = /* This attribute is used to declare a function, forcing it to use the standard vector calling convention variant. Syntax: [[riscv::vector_cc]]. */ - {"vector_cc", 0, 0, false, true, true, true, NULL, NULL} + {"vector_cc", 0, 0, false, true, true, true, NULL, NULL}, + /* This attribute is used to declare a new type, to appoint the exactly + bits size of the type. For example: + + typedef vint8m1_t f_vint8m1_t __attribute__((riscv_rvv_vector_bits(256))); + + The new created type f_vint8m1_t will be exactly 256 bits. It can be + be used in globals, structs, unions, and arrays instead of sizeless + types. */ + {"rvv_vector_bits", 1, 1, false, true, false, true, + riscv_handle_rvv_vector_bits_attribute, NULL}, }; static const scoped_attribute_specs riscv_nongnu_attribute_table = @@ -5573,6 +5595,67 @@ riscv_handle_type_attribute (tree *node ATTRIBUTE_UNUSED, tree name, tree args, return NULL_TREE; } +static tree +riscv_handle_rvv_vector_bits_attribute (tree *node, tree name, tree args, + ATTRIBUTE_UNUSED int flags, + bool *no_add_attrs) +{ + if (!is_attribute_p ("riscv_rvv_vector_bits", name)) + return NULL_TREE; + + *no_add_attrs = true; + + if (rvv_vector_bits != RVV_VECTOR_BITS_ZVL) + { + error ( + "%qs is only supported when %<-mrvv-vector-bits=zvl%> is specified", + "riscv_rvv_vector_bits"); + return NULL_TREE; + } + + tree type = *node; + + if (!VECTOR_TYPE_P (type) || !riscv_vector::builtin_type_p (type)) + { + error ("%qs applied to non-RVV type %qT", "riscv_rvv_vector_bits", type); + return NULL_TREE; + } + + tree size = TREE_VALUE (args); + + if (TREE_CODE (size) != INTEGER_CST) + { + error ("%qs requires an integer constant", "riscv_rvv_vector_bits"); + return NULL_TREE; + } + + unsigned HOST_WIDE_INT args_in_bits = tree_to_uhwi (size); + unsigned HOST_WIDE_INT type_mode_bits + = GET_MODE_PRECISION (TYPE_MODE (type)).to_constant (); + + if (args_in_bits != type_mode_bits) + { + error ("invalid RVV vector size %qd, " + "expected size is %qd based on LMUL of type and %qs", + (int)args_in_bits, (int)type_mode_bits, "-mrvv-vector-bits=zvl"); + return NULL_TREE; + } + + type = build_distinct_type_copy (type); + TYPE_ATTRIBUTES (type) + = remove_attribute ("RVV sizeless type", + copy_list (TYPE_ATTRIBUTES (type))); + + /* The operations like alu/cmp on vbool*_t is not well defined, + continue to treat vbool*_t as indivisible. */ + if (!VECTOR_BOOLEAN_TYPE_P (type)) + TYPE_INDIVISIBLE_P (type) = 0; + + *node = type; + + return NULL_TREE; +} + /* Return true if function TYPE is an interrupt function. */ static bool riscv_interrupt_type_p (tree type) diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-1.c new file mode 100644 index 000000000000..8b08ba281307 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-1.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_vector.h" + +typedef int fixed_vint32m1_t __attribute__((riscv_rvv_vector_bits(128))); /* { dg-error "'riscv_rvv_vector_bits' applied to non-RVV type 'int'" } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-10.c new file mode 100644 index 000000000000..0ff48a29f7e2 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-10.c @@ -0,0 +1,53 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32f_zvl32b_zfh_zvfh -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_rvv_vector_bits.h" + +TEST_FIXED_TYPE_INT_ALL (vint8mf4_t, 8, v1qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf2_t, 16, v2qi) +TEST_FIXED_TYPE_INT_ALL (vint8m1_t, 32, v4qi) +TEST_FIXED_TYPE_INT_ALL (vint8m2_t, 64, v8qi) +TEST_FIXED_TYPE_INT_ALL (vint8m4_t, 128, v16qi) +TEST_FIXED_TYPE_INT_ALL (vint8m8_t, 256, v32qi) + +TEST_FIXED_TYPE_INT_ALL (vint16mf2_t, 16, v1hi) +TEST_FIXED_TYPE_INT_ALL (vint16m1_t, 32, v2hi) +TEST_FIXED_TYPE_INT_ALL (vint16m2_t, 64, v4hi) +TEST_FIXED_TYPE_INT_ALL (vint16m4_t, 128, v8hi) +TEST_FIXED_TYPE_INT_ALL (vint16m8_t, 256, v16hi) + +TEST_FIXED_TYPE_INT_ALL (vint32m1_t, 32, v1si) +TEST_FIXED_TYPE_INT_ALL (vint32m2_t, 64, v2si) +TEST_FIXED_TYPE_INT_ALL (vint32m4_t, 128, v4si) +TEST_FIXED_TYPE_INT_ALL (vint32m8_t, 256, v8si) + +TEST_FIXED_TYPE_INT_ALL (vuint8mf4_t, 8, v1uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf2_t, 16, v2uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m1_t, 32, v4uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m2_t, 64, v8uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m4_t, 128, v16uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m8_t, 256, v32uqi) + +TEST_FIXED_TYPE_INT_ALL (vuint16mf2_t, 16, v1uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m1_t, 32, v2uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m2_t, 64, v4uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m4_t, 128, v8uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m8_t, 256, v16uhi) + +TEST_FIXED_TYPE_INT_ALL (vuint32m1_t, 32, v1usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m2_t, 64, v2usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m4_t, 128, v4usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m8_t, 256, v8usi) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf2_t, 16, v1hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m1_t, 32, v2hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m2_t, 64, v4hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m4_t, 128, v8hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m8_t, 256, v16hf) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m1_t, 32, v1sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m2_t, 64, v2sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m4_t, 128, v4sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m8_t, 256, v8sf) + +/* { dg-final { scan-assembler-not {csrr\s+[atx][0-9]+,\s*vlenb} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-11.c new file mode 100644 index 000000000000..726c56b4a7ea --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-11.c @@ -0,0 +1,76 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl4096b_zfh_zvfh -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_rvv_vector_bits.h" + +TEST_FIXED_TYPE_INT_ALL (vint8mf8_t, 512, v64qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf4_t, 1024, v128qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf2_t, 2048, v256qi) +TEST_FIXED_TYPE_INT_ALL (vint8m1_t, 4096, v512qi) +TEST_FIXED_TYPE_INT_ALL (vint8m2_t, 8192, v1024qi) +TEST_FIXED_TYPE_INT_ALL (vint8m4_t, 16384, v2048qi) +TEST_FIXED_TYPE_INT_ALL (vint8m8_t, 32768, v4096qi) + +TEST_FIXED_TYPE_INT_ALL (vint16mf4_t, 1024, v64hi) +TEST_FIXED_TYPE_INT_ALL (vint16mf2_t, 2048, v128hi) +TEST_FIXED_TYPE_INT_ALL (vint16m1_t, 4096, v256hi) +TEST_FIXED_TYPE_INT_ALL (vint16m2_t, 8192, v512hi) +TEST_FIXED_TYPE_INT_ALL (vint16m4_t, 16384, v1024hi) +TEST_FIXED_TYPE_INT_ALL (vint16m8_t, 32768, v2048hi) + +TEST_FIXED_TYPE_INT_ALL (vint32mf2_t, 2048, v64si) +TEST_FIXED_TYPE_INT_ALL (vint32m1_t, 4096, v128si) +TEST_FIXED_TYPE_INT_ALL (vint32m2_t, 8192, v256si) +TEST_FIXED_TYPE_INT_ALL (vint32m4_t, 16384, v512si) +TEST_FIXED_TYPE_INT_ALL (vint32m8_t, 32768, v1024si) + +TEST_FIXED_TYPE_INT_ALL (vint64m1_t, 4096, v64di) +TEST_FIXED_TYPE_INT_ALL (vint64m2_t, 8192, v128di) +TEST_FIXED_TYPE_INT_ALL (vint64m4_t, 16384, v256di) +TEST_FIXED_TYPE_INT_ALL (vint64m8_t, 32768, v512di) + +TEST_FIXED_TYPE_INT_ALL (vuint8mf8_t, 512, v64uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf4_t, 1024, v128uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf2_t, 2048, v256uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m1_t, 4096, v512uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m2_t, 8192, v1024uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m4_t, 16384, v2048uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m8_t, 32768, v4096uqi) + +TEST_FIXED_TYPE_INT_ALL (vuint16mf4_t, 1024, v64uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16mf2_t, 2048, v128uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m1_t, 4096, v256uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m2_t, 8192, v512uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m4_t, 16384, v1024uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m8_t, 32768, v2048uhi) + +TEST_FIXED_TYPE_INT_ALL (vuint32mf2_t, 2048, v64usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m1_t, 4096, v128usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m2_t, 8192, v256usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m4_t, 16384, v512usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m8_t, 32768, v1024usi) + +TEST_FIXED_TYPE_INT_ALL (vuint64m1_t, 4096, v64udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m2_t, 8192, v128udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m4_t, 16384, v256udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m8_t, 32768, v512udi) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf4_t, 1024, v64hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf2_t, 2048, v128hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m1_t, 4096, v256hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m2_t, 8192, v512hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m4_t, 16384, v1024hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m8_t, 32768, v2048hf) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32mf2_t, 2048, v64sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m1_t, 4096, v128sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m2_t, 8192, v256sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m4_t, 16384, v512sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m8_t, 32768, v1024sf) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m1_t, 4096, v64df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m2_t, 8192, v128df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m4_t, 16384, v256df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m8_t, 32768, v512df) + +/* { dg-final { scan-assembler-not {csrr\s+[atx][0-9]+,\s*vlenb} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-12.c new file mode 100644 index 000000000000..5c2346dff3e9 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-12.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_rvv_vector_bits.h" + +TEST_FIXED_TYPE_BOOL_ALL (vbool1_t, 128, v16qi) +TEST_FIXED_TYPE_BOOL_ALL (vbool2_t, 64, v8qi) +TEST_FIXED_TYPE_BOOL_ALL (vbool4_t, 32, v4qi) +TEST_FIXED_TYPE_BOOL_ALL (vbool8_t, 16, v2qi) +TEST_FIXED_TYPE_BOOL_ALL (vbool16_t, 8, v1qi) +TEST_FIXED_TYPE_BOOL_ALL (vbool32_t, 4, v1qi) +TEST_FIXED_TYPE_BOOL_ALL (vbool64_t, 2, v1qi) + +/* { dg-final { scan-assembler-not {csrr\s+[atx][0-9]+,\s*vlenb} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-13.c new file mode 100644 index 000000000000..71d8b597da02 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-13.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +void test () { + +#if defined __riscv_v_fixed_vlen +#error "__riscv_v_fixed_vlen should not be defined" +#endif + +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-14.c new file mode 100644 index 000000000000..b60ae4d20ff6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-14.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ + +void test () { + +#if __riscv_v_fixed_vlen != 128 +#error "__riscv_v_fixed_vlen should be 128" +#endif + +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-15.c new file mode 100644 index 000000000000..95edbbbd38d3 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-15.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl512b -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ + +void test () { + +#if __riscv_v_fixed_vlen != 512 +#error "__riscv_v_fixed_vlen should be 512" +#endif + +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-16.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-16.c new file mode 100644 index 000000000000..df73f203791e --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-16.c @@ -0,0 +1,11 @@ + +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -mrvv-vector-bits=scalable -O3" } */ + +void test () { + +#if defined __riscv_v_fixed_vlen +#error "__riscv_v_fixed_vlen should not be defined" +#endif + +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-17.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-17.c new file mode 100644 index 000000000000..fa39a18d47c7 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-17.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl4096b -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ + +void test () { + +#if __riscv_v_fixed_vlen != 4096 +#error "__riscv_v_fixed_vlen should be 4096" +#endif + +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-18.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-18.c new file mode 100644 index 000000000000..a7530e27d8f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-18.c @@ -0,0 +1,45 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ + +#include "riscv_rvv_vector_bits.h" + +DEF_FIXED_TYPE (vint32m1_t, 256) +DEF_FIXED_TYPE (vfloat32m1_t, 256) +DEF_FIXED_TYPE (vbool1_t, 256) +DEF_FIXED_TYPE (vbool2_t, 128) + +fixed_vint32m1_t +test_1 (fixed_vint32m1_t a, fixed_vint32m1_t b) +{ + return a == b; +} + +fixed_vbool1_t +test_2 (fixed_vint32m1_t a, fixed_vint32m1_t b) +{ + return a == b; +} + +fixed_vfloat32m1_t +test_3 (fixed_vfloat32m1_t a, fixed_vfloat32m1_t b) +{ + return a == b; +} + +fixed_vbool1_t +test_4 (fixed_vfloat32m1_t a, fixed_vfloat32m1_t b) +{ + return a == b; +} + +fixed_vbool2_t +test_5 (fixed_vint32m1_t a, fixed_vint32m1_t b) +{ + return a == b; /* { dg-error {incompatible types when returning type '__vector\(8\) int' but 'fixed_vbool2_t' {aka 'vbool2_t'} was expected} } */ +} + +fixed_vbool2_t +test_6 (fixed_vfloat32m1_t a, fixed_vfloat32m1_t b) +{ + return a == b; /* { dg-error {incompatible types when returning type '__vector\(8\) int' but 'fixed_vbool2_t' {aka 'vbool2_t'} was expected} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-2.c new file mode 100644 index 000000000000..6b841d7b1d4f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_vector.h" + +typedef vint32m1_t fixed_vint32m1_t __attribute__((riscv_rvv_vector_bits("123"))); /* { dg-error "'riscv_rvv_vector_bits' requires an integer constant" } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-3.c new file mode 100644 index 000000000000..e1b0664eacb0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-3.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */ + +#include "riscv_vector.h" + +typedef vint32m1_t fixed_vint32m1_t __attribute__((riscv_rvv_vector_bits(128))); /* { dg-error "'riscv_rvv_vector_bits' is only supported when '-mrvv-vector-bits=zvl' is specified" } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-4.c new file mode 100644 index 000000000000..eef15654110e --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-4.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_vector.h" + +typedef vint32m1_t fixed_vint32m1_t __attribute__((riscv_rvv_vector_bits(128))); /* { dg-error "invalid RVV vector size '128', expected size is '256' based on LMUL of type and '-mrvv-vector-bits=zvl'" } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-5.c new file mode 100644 index 000000000000..6b4f19cd9f2b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-5.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl128b -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_vector.h" + +typedef vint32m2_t fixed_vint32m2_t __attribute__((riscv_rvv_vector_bits(128))); /* { dg-error "invalid RVV vector size '128', expected size is '256' based on LMUL of type and '-mrvv-vector-bits=zvl'" } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-6.c new file mode 100644 index 000000000000..bc346917fe52 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-6.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl256b -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_vector.h" + +typedef vint32mf2_t fixed_vint32mf2_t __attribute__((riscv_rvv_vector_bits(256))); /* { dg-error "invalid RVV vector size '256', expected size is '128' based on LMUL of type and '-mrvv-vector-bits=zvl'" } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-7.c new file mode 100644 index 000000000000..611a4bb88baf --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-7.c @@ -0,0 +1,76 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl128b_zfh_zvfh -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_rvv_vector_bits.h" + +TEST_FIXED_TYPE_INT_ALL (vint8mf8_t, 16, v2qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf4_t, 32, v4qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf2_t, 64, v8qi) +TEST_FIXED_TYPE_INT_ALL (vint8m1_t, 128, v16qi) +TEST_FIXED_TYPE_INT_ALL (vint8m2_t, 256, v32qi) +TEST_FIXED_TYPE_INT_ALL (vint8m4_t, 512, v64qi) +TEST_FIXED_TYPE_INT_ALL (vint8m8_t, 1024, v128qi) + +TEST_FIXED_TYPE_INT_ALL (vint16mf4_t, 32, v2hi) +TEST_FIXED_TYPE_INT_ALL (vint16mf2_t, 64, v4hi) +TEST_FIXED_TYPE_INT_ALL (vint16m1_t, 128, v8hi) +TEST_FIXED_TYPE_INT_ALL (vint16m2_t, 256, v16hi) +TEST_FIXED_TYPE_INT_ALL (vint16m4_t, 512, v32hi) +TEST_FIXED_TYPE_INT_ALL (vint16m8_t, 1024, v64hi) + +TEST_FIXED_TYPE_INT_ALL (vint32mf2_t, 64, v2si) +TEST_FIXED_TYPE_INT_ALL (vint32m1_t, 128, v4si) +TEST_FIXED_TYPE_INT_ALL (vint32m2_t, 256, v8si) +TEST_FIXED_TYPE_INT_ALL (vint32m4_t, 512, v16si) +TEST_FIXED_TYPE_INT_ALL (vint32m8_t, 1024, v32si) + +TEST_FIXED_TYPE_INT_ALL (vint64m1_t, 128, v2di) +TEST_FIXED_TYPE_INT_ALL (vint64m2_t, 256, v4di) +TEST_FIXED_TYPE_INT_ALL (vint64m4_t, 512, v8di) +TEST_FIXED_TYPE_INT_ALL (vint64m8_t, 1024, v16di) + +TEST_FIXED_TYPE_INT_ALL (vuint8mf8_t, 16, v2uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf4_t, 32, v4uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf2_t, 64, v8uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m1_t, 128, v16uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m2_t, 256, v32uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m4_t, 512, v64uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m8_t, 1024, v128uqi) + +TEST_FIXED_TYPE_INT_ALL (vuint16mf4_t, 32, v2uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16mf2_t, 64, v4uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m1_t, 128, v8uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m2_t, 256, v16uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m4_t, 512, v32uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m8_t, 1024, v64uhi) + +TEST_FIXED_TYPE_INT_ALL (vuint32mf2_t, 64, v2usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m1_t, 128, v4usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m2_t, 256, v8usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m4_t, 512, v16usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m8_t, 1024, v32usi) + +TEST_FIXED_TYPE_INT_ALL (vuint64m1_t, 128, v2udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m2_t, 256, v4udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m4_t, 512, v8udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m8_t, 1024, v16udi) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf4_t, 32, v2hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf2_t, 64, v4hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m1_t, 128, v8hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m2_t, 256, v16hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m4_t, 512, v32hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m8_t, 1024, v64hf) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32mf2_t, 64, v2sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m1_t, 128, v4sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m2_t, 256, v8sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m4_t, 512, v16sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m8_t, 1024, v32sf) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m1_t, 128, v2df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m2_t, 256, v4df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m4_t, 512, v8df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m8_t, 1024, v16df) + +/* { dg-final { scan-assembler-not {csrr\s+[atx][0-9]+,\s*vlenb} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-8.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-8.c new file mode 100644 index 000000000000..bb8d1da72b2f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-8.c @@ -0,0 +1,75 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvl256b_zfh_zvfh -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_rvv_vector_bits.h" + +TEST_FIXED_TYPE_INT_ALL (vint8mf8_t, 32, v4qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf4_t, 64, v8qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf2_t, 128, v16qi) +TEST_FIXED_TYPE_INT_ALL (vint8m1_t, 256, v32qi) +TEST_FIXED_TYPE_INT_ALL (vint8m2_t, 512, v64qi) +TEST_FIXED_TYPE_INT_ALL (vint8m4_t, 1024, v128qi) +TEST_FIXED_TYPE_INT_ALL (vint8m8_t, 2048, v256qi) + +TEST_FIXED_TYPE_INT_ALL (vint16mf4_t, 64, v4hi) +TEST_FIXED_TYPE_INT_ALL (vint16mf2_t, 128, v8hi) +TEST_FIXED_TYPE_INT_ALL (vint16m1_t, 256, v16hi) +TEST_FIXED_TYPE_INT_ALL (vint16m2_t, 512, v32hi) +TEST_FIXED_TYPE_INT_ALL (vint16m4_t, 1024, v64hi) +TEST_FIXED_TYPE_INT_ALL (vint16m8_t, 2048, v128hi) + +TEST_FIXED_TYPE_INT_ALL (vint32mf2_t, 128, v4si) +TEST_FIXED_TYPE_INT_ALL (vint32m1_t, 256, v8si) +TEST_FIXED_TYPE_INT_ALL (vint32m2_t, 512, v16si) +TEST_FIXED_TYPE_INT_ALL (vint32m4_t, 1024, v32si) +TEST_FIXED_TYPE_INT_ALL (vint32m8_t, 2048, v64si) + +TEST_FIXED_TYPE_INT_ALL (vint64m1_t, 256, v4di) +TEST_FIXED_TYPE_INT_ALL (vint64m2_t, 512, v8di) +TEST_FIXED_TYPE_INT_ALL (vint64m4_t, 1024, v16di) +TEST_FIXED_TYPE_INT_ALL (vint64m8_t, 2048, v32di) + +TEST_FIXED_TYPE_INT_ALL (vuint8mf4_t, 64, v8uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf2_t, 128, v16uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m1_t, 256, v32uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m2_t, 512, v64uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m4_t, 1024, v128uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m8_t, 2048, v256uqi) + +TEST_FIXED_TYPE_INT_ALL (vuint16mf4_t, 64, v4uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16mf2_t, 128, v8uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m1_t, 256, v16uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m2_t, 512, v32uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m4_t, 1024, v64uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m8_t, 2048, v128uhi) + +TEST_FIXED_TYPE_INT_ALL (vuint32mf2_t, 128, v4usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m1_t, 256, v8usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m2_t, 512, v16usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m4_t, 1024, v32usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m8_t, 2048, v64usi) + +TEST_FIXED_TYPE_INT_ALL (vuint64m1_t, 256, v4udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m2_t, 512, v8udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m4_t, 1024, v16udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m8_t, 2048, v32udi) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf4_t, 64, v4hi) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf2_t, 128, v8hi) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m1_t, 256, v16hi) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m2_t, 512, v32hi) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m4_t, 1024, v64hi) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m8_t, 2048, v128hi) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32mf2_t, 128, v4si) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m1_t, 256, v8si) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m2_t, 512, v16si) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m4_t, 1024, v32si) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m8_t, 2048, v64si) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m1_t, 256, v4di) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m2_t, 512, v8di) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m4_t, 1024, v16di) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m8_t, 2048, v32di) + +/* { dg-final { scan-assembler-not {csrr\s+[atx][0-9]+,\s*vlenb} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-9.c new file mode 100644 index 000000000000..701f833b41b4 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-9.c @@ -0,0 +1,76 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve64d_zvl64b_zfh_zvfh -mabi=lp64 -mrvv-vector-bits=zvl -O3" } */ + +#include "riscv_rvv_vector_bits.h" + +TEST_FIXED_TYPE_INT_ALL (vint8mf8_t, 8, v1qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf4_t, 16, v2qi) +TEST_FIXED_TYPE_INT_ALL (vint8mf2_t, 32, v4qi) +TEST_FIXED_TYPE_INT_ALL (vint8m1_t, 64, v8qi) +TEST_FIXED_TYPE_INT_ALL (vint8m2_t, 128, v16qi) +TEST_FIXED_TYPE_INT_ALL (vint8m4_t, 256, v32qi) +TEST_FIXED_TYPE_INT_ALL (vint8m8_t, 512, v64qi) + +TEST_FIXED_TYPE_INT_ALL (vint16mf4_t, 16, v1hi) +TEST_FIXED_TYPE_INT_ALL (vint16mf2_t, 32, v2hi) +TEST_FIXED_TYPE_INT_ALL (vint16m1_t, 64, v4hi) +TEST_FIXED_TYPE_INT_ALL (vint16m2_t, 128, v8hi) +TEST_FIXED_TYPE_INT_ALL (vint16m4_t, 256, v16hi) +TEST_FIXED_TYPE_INT_ALL (vint16m8_t, 512, v32hi) + +TEST_FIXED_TYPE_INT_ALL (vint32mf2_t, 32, v1si) +TEST_FIXED_TYPE_INT_ALL (vint32m1_t, 64, v2si) +TEST_FIXED_TYPE_INT_ALL (vint32m2_t, 128, v4si) +TEST_FIXED_TYPE_INT_ALL (vint32m4_t, 256, v8si) +TEST_FIXED_TYPE_INT_ALL (vint32m8_t, 512, v16si) + +TEST_FIXED_TYPE_INT_ALL (vint64m1_t, 64, v1di) +TEST_FIXED_TYPE_INT_ALL (vint64m2_t, 128, v2di) +TEST_FIXED_TYPE_INT_ALL (vint64m4_t, 256, v4di) +TEST_FIXED_TYPE_INT_ALL (vint64m8_t, 512, v8di) + +TEST_FIXED_TYPE_INT_ALL (vuint8mf8_t, 8, v1uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf4_t, 16, v2uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8mf2_t, 32, v4uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m1_t, 64, v8uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m2_t, 128, v16uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m4_t, 256, v32uqi) +TEST_FIXED_TYPE_INT_ALL (vuint8m8_t, 512, v64uqi) + +TEST_FIXED_TYPE_INT_ALL (vuint16mf4_t, 16, v1uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16mf2_t, 32, v2uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m1_t, 64, v4uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m2_t, 128, v8uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m4_t, 256, v16uhi) +TEST_FIXED_TYPE_INT_ALL (vuint16m8_t, 512, v32uhi) + +TEST_FIXED_TYPE_INT_ALL (vuint32mf2_t, 32, v1usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m1_t, 64, v2usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m2_t, 128, v4usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m4_t, 256, v8usi) +TEST_FIXED_TYPE_INT_ALL (vuint32m8_t, 512, v16usi) + +TEST_FIXED_TYPE_INT_ALL (vuint64m1_t, 64, v1udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m2_t, 128, v2udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m4_t, 256, v4udi) +TEST_FIXED_TYPE_INT_ALL (vuint64m8_t, 512, v8udi) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf4_t, 16, v1hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16mf2_t, 32, v2hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m1_t, 64, v4hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m2_t, 128, v8hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m4_t, 256, v16hf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat16m8_t, 512, v32hf) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32mf2_t, 32, v1sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m1_t, 64, v2sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m2_t, 128, v4sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m4_t, 256, v8sf) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat32m8_t, 512, v16sf) + +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m1_t, 64, v1df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m2_t, 128, v2df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m4_t, 256, v4df) +TEST_FIXED_TYPE_FLOAT_ALL (vfloat64m8_t, 512, v8df) + +/* { dg-final { scan-assembler-not {csrr\s+[atx][0-9]+,\s*vlenb} } } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits.h b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits.h new file mode 100644 index 000000000000..fd2d352d3e1f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/riscv_rvv_vector_bits.h @@ -0,0 +1,108 @@ +#ifndef HAVE_DEF_RISCV_RVV_VECTOR_BITS_H +#define HAVE_DEF_RISCV_RVV_VECTOR_BITS_H + +#include "riscv_vector.h" +#include "../autovec/vls/def.h" + +#define DEF_FIXED_TYPE(T, N) \ + typedef T fixed_##T __attribute__((riscv_rvv_vector_bits(N))); + +#define DEF_FIXED_GLOBAL_VAR(T, N) \ + fixed_##T global_fixed_##T##_##N##_bits_var; + +#define DEF_FIXED_STRUCT_TYPE(T, N) \ + struct fixed_##T##_##N##_bits_struct \ + { \ + fixed_##T a, b[2]; \ + }; + +#define DEF_FIXED_UNION_TYPE(T, N) \ + union fixed_##T##_##N##_bits_union \ + { \ + fixed_##T a, b[3]; \ + }; + +#define DEF_FIXED_TYPE_SIZE(T, N) \ + void test_fixed_##T##_##N##_bits_size () \ + { \ + _Static_assert (sizeof (fixed_##T) * 8 == (N < 8 ? 8 : N), \ + "Fixed RVV register types should be equal."); \ + } + +#define DEF_FIXED_TYPE_CVT(T, N, NEW_TYPE) \ + NEW_TYPE test_fixed_##T##_##N##_bits_cvt (fixed_##T a) \ + { \ + return (NEW_TYPE) a; \ + } + +#define DEF_FIXED_BINARY(T, N, OP, NAME) \ + fixed_##T test_fixed_##T##_##N##_bits_binary_##NAME (fixed_##T a, \ + fixed_##T b) \ + { \ + return a OP b; \ + } + +#define DEF_FIXED_UNARY(T, N, OP, NAME) \ + fixed_##T test_fixed_##T##_##N##_bits_unary_##NAME (fixed_##T a) \ + { \ + return OP a; \ + } + +#define DEF_FIXED_TYPE_CMP(T, N) \ + DEF_FIXED_BINARY(T, N, ==, eq) \ + DEF_FIXED_BINARY(T, N, !=, ne) \ + DEF_FIXED_BINARY(T, N, >, gt) \ + DEF_FIXED_BINARY(T, N, <, lt) \ + DEF_FIXED_BINARY(T, N, >=, ge) \ + DEF_FIXED_BINARY(T, N, <=, le) + +#define DEF_FIXED_TYPE_INT_ALU(T, N) \ + DEF_FIXED_BINARY(T, N, +, add) \ + DEF_FIXED_BINARY(T, N, -, sub) \ + DEF_FIXED_BINARY(T, N, *, mul) \ + DEF_FIXED_BINARY(T, N, /, div) \ + DEF_FIXED_BINARY(T, N, %, mod) \ + DEF_FIXED_BINARY(T, N, &, and) \ + DEF_FIXED_BINARY(T, N, |, ior) \ + DEF_FIXED_BINARY(T, N, ^, xor) \ + DEF_FIXED_BINARY(T, N, >>, rsh) \ + DEF_FIXED_BINARY(T, N, <<, lsh) \ + DEF_FIXED_UNARY(T, N, ~, not) \ + DEF_FIXED_UNARY(T, N, -, neg) + +#define DEF_FIXED_TYPE_FLOAT_ALU(T, N) \ + DEF_FIXED_BINARY(T, N, +, add) \ + DEF_FIXED_BINARY(T, N, -, sub) \ + DEF_FIXED_BINARY(T, N, *, mul) \ + DEF_FIXED_BINARY(T, N, /, div) \ + DEF_FIXED_UNARY(T, N, -, neg) + +#define TEST_FIXED_TYPE_INT_ALL(T, N, NEW_TYPE) \ + DEF_FIXED_TYPE (T, N) \ + DEF_FIXED_TYPE_SIZE (T, N) \ + DEF_FIXED_GLOBAL_VAR (T, N) \ + DEF_FIXED_STRUCT_TYPE (T, N) \ + DEF_FIXED_UNION_TYPE (T, N) \ + DEF_FIXED_TYPE_CVT (T, N, NEW_TYPE) \ + DEF_FIXED_TYPE_CMP (T, N) \ + DEF_FIXED_TYPE_INT_ALU (T, N) \ + +#define TEST_FIXED_TYPE_FLOAT_ALL(T, N, NEW_TYPE) \ + DEF_FIXED_TYPE (T, N) \ + DEF_FIXED_TYPE_SIZE (T, N) \ + DEF_FIXED_GLOBAL_VAR (T, N) \ + DEF_FIXED_STRUCT_TYPE (T, N) \ + DEF_FIXED_UNION_TYPE (T, N) \ + DEF_FIXED_TYPE_CVT (T, N, NEW_TYPE) \ + DEF_FIXED_TYPE_CMP (T, N) \ + DEF_FIXED_TYPE_FLOAT_ALU (T, N) \ + +#define TEST_FIXED_TYPE_BOOL_ALL(T, N, NEW_TYPE) \ + DEF_FIXED_TYPE (T, N) \ + DEF_FIXED_TYPE_SIZE (T, N) \ + DEF_FIXED_GLOBAL_VAR (T, N) \ + DEF_FIXED_STRUCT_TYPE (T, N) \ + DEF_FIXED_UNION_TYPE (T, N) \ + DEF_FIXED_TYPE_CVT (T, N, NEW_TYPE) + +#endif From ebace32a26424884789ccf585a24ac6a5703a323 Mon Sep 17 00:00:00 2001 From: Mikael Morin <mikael@gcc.gnu.org> Date: Fri, 22 Mar 2024 12:32:17 +0100 Subject: [PATCH 204/551] testsuite: Declare fortran array bound variables This fixes invalid undeclared fortran array bound variables in the testsuite. gcc/testsuite/ChangeLog: * gfortran.dg/graphite/pr107865.f90: Declare array bound variable(s) as dummy argument(s). * gfortran.dg/pr101267.f90: Likewise. * gfortran.dg/pr112404.f90: Likewise. * gfortran.dg/pr78061.f: Likewise. * gfortran.dg/pr79315.f90: Likewise. * gfortran.dg/vect/pr90681.f: Likewise. * gfortran.dg/vect/pr97761.f90: Likewise. * gfortran.dg/vect/pr99746.f90: Likewise. --- gcc/testsuite/gfortran.dg/graphite/pr107865.f90 | 2 +- gcc/testsuite/gfortran.dg/pr101267.f90 | 2 +- gcc/testsuite/gfortran.dg/pr112404.f90 | 2 +- gcc/testsuite/gfortran.dg/pr78061.f | 2 +- gcc/testsuite/gfortran.dg/pr79315.f90 | 6 +++++- gcc/testsuite/gfortran.dg/vect/pr90681.f | 2 +- gcc/testsuite/gfortran.dg/vect/pr97761.f90 | 2 +- gcc/testsuite/gfortran.dg/vect/pr99746.f90 | 2 +- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/gcc/testsuite/gfortran.dg/graphite/pr107865.f90 b/gcc/testsuite/gfortran.dg/graphite/pr107865.f90 index 6bddb17a1be5..323d8092ad25 100644 --- a/gcc/testsuite/gfortran.dg/graphite/pr107865.f90 +++ b/gcc/testsuite/gfortran.dg/graphite/pr107865.f90 @@ -1,7 +1,7 @@ ! { dg-do compile } ! { dg-options "-O1 -floop-parallelize-all -ftree-parallelize-loops=2" } - SUBROUTINE FNC (F) + SUBROUTINE FNC (F,N) IMPLICIT REAL (A-H) DIMENSION F(N) diff --git a/gcc/testsuite/gfortran.dg/pr101267.f90 b/gcc/testsuite/gfortran.dg/pr101267.f90 index 12723cf9c221..99a6dcfa3425 100644 --- a/gcc/testsuite/gfortran.dg/pr101267.f90 +++ b/gcc/testsuite/gfortran.dg/pr101267.f90 @@ -1,7 +1,7 @@ ! { dg-do compile } ! { dg-options "-Ofast" } ! { dg-additional-options "-march=znver2" { target x86_64-*-* i?86-*-* } } - SUBROUTINE sfddagd( regime, znt,ite ,jte ) + SUBROUTINE sfddagd( regime, znt,ite ,jte, ime, IN ) REAL, DIMENSION( ime, IN) :: regime, znt REAL, DIMENSION( ite, jte) :: wndcor_u LOGICAL wrf_dm_on_monitor diff --git a/gcc/testsuite/gfortran.dg/pr112404.f90 b/gcc/testsuite/gfortran.dg/pr112404.f90 index 573fa28164a1..4508bbc87389 100644 --- a/gcc/testsuite/gfortran.dg/pr112404.f90 +++ b/gcc/testsuite/gfortran.dg/pr112404.f90 @@ -1,7 +1,7 @@ ! { dg-do compile } ! { dg-options "-Ofast" } ! { dg-additional-options "-mavx2" { target avx2 } } - SUBROUTINE sfddagd( regime, znt, ite, jte ) + SUBROUTINE sfddagd( regime, znt, ite, jte, ime, IN ) REAL, DIMENSION( ime, IN) :: regime, znt REAL, DIMENSION( ite, jte) :: wndcor_u LOGICAL wrf_dm_on_monitor diff --git a/gcc/testsuite/gfortran.dg/pr78061.f b/gcc/testsuite/gfortran.dg/pr78061.f index 7e4dd3de8b5c..9061dea74daa 100644 --- a/gcc/testsuite/gfortran.dg/pr78061.f +++ b/gcc/testsuite/gfortran.dg/pr78061.f @@ -1,6 +1,6 @@ ! { dg-do compile } ! { dg-options "-O3 -fsplit-loops" } - SUBROUTINE SSYMM(C) + SUBROUTINE SSYMM(C,LDC) REAL C(LDC,*) LOGICAL LSAME LOGICAL UPPER diff --git a/gcc/testsuite/gfortran.dg/pr79315.f90 b/gcc/testsuite/gfortran.dg/pr79315.f90 index 8cd89691ce9a..b754a2b32748 100644 --- a/gcc/testsuite/gfortran.dg/pr79315.f90 +++ b/gcc/testsuite/gfortran.dg/pr79315.f90 @@ -10,7 +10,11 @@ SUBROUTINE wsm32D(t, & its,& ite, & kts, & - kte & + kte, & + ims, & + ime, & + kms, & + kme & ) REAL, DIMENSION( its:ite , kts:kte ), & INTENT(INOUT) :: & diff --git a/gcc/testsuite/gfortran.dg/vect/pr90681.f b/gcc/testsuite/gfortran.dg/vect/pr90681.f index 03d3987b146d..49f1d50ab8fd 100644 --- a/gcc/testsuite/gfortran.dg/vect/pr90681.f +++ b/gcc/testsuite/gfortran.dg/vect/pr90681.f @@ -1,6 +1,6 @@ C { dg-do compile } C { dg-additional-options "-march=armv8.2-a+sve" { target { aarch64*-*-* } } } - SUBROUTINE HMU (H1) + SUBROUTINE HMU (H1,NORBS) COMMON DD(107) DIMENSION H1(NORBS,*) DO 70 J1 = IA,I1 diff --git a/gcc/testsuite/gfortran.dg/vect/pr97761.f90 b/gcc/testsuite/gfortran.dg/vect/pr97761.f90 index 250e2bf016e6..401ef06e422b 100644 --- a/gcc/testsuite/gfortran.dg/vect/pr97761.f90 +++ b/gcc/testsuite/gfortran.dg/vect/pr97761.f90 @@ -1,7 +1,7 @@ ! { dg-do compile } ! { dg-additional-options "-O1" } -subroutine ni (ps) +subroutine ni (ps, inout) type vector real x, y end type diff --git a/gcc/testsuite/gfortran.dg/vect/pr99746.f90 b/gcc/testsuite/gfortran.dg/vect/pr99746.f90 index fe947ae7ccfe..121d67d564de 100644 --- a/gcc/testsuite/gfortran.dg/vect/pr99746.f90 +++ b/gcc/testsuite/gfortran.dg/vect/pr99746.f90 @@ -1,6 +1,6 @@ ! { dg-do compile } ! { dg-additional-options "-march=armv8.3-a" { target aarch64-*-* } } -SUBROUTINE CLAREF(A, WANTZ, Z, ICOL1, ITMP1, ITMP2, T1, T2, V2) +SUBROUTINE CLAREF(A, WANTZ, Z, ICOL1, ITMP1, ITMP2, T1, T2, V2, LDA) LOGICAL BLOCK, WANTZ COMPLEX T1, T2, V2 COMPLEX A(LDA, *), VECS, Z(LDA, *) From 44c0398e65347def316700911a51ca8b4ec0a411 Mon Sep 17 00:00:00 2001 From: Mikael Morin <mikael@gcc.gnu.org> Date: Fri, 22 Mar 2024 12:32:34 +0100 Subject: [PATCH 205/551] fortran: Fix specification expression error with dummy procedures [PR111781] This fixes a spurious invalid variable in specification expression error. The error was caused on the testcase from the PR by two different bugs. First, the call to is_parent_of_current_ns was unable to recognize correct host association and returned false. Second, an ad-hoc condition coming next was using a global variable previously improperly restored to false (instead of restoring it to its initial value). The latter happened on the testcase because one dummy argument was a procedure, and checking that argument what causing a check of all its arguments with the (improper) reset of the flag at the end, and that preceded the check of the next argument. For the first bug, the wrong result of is_parent_of_current_ns is fixed by correcting the namespaces that function deals with, both the one passed as argument and the current one tracked in the gfc_current_ns global. Two new functions are introduced to select the right namespace. Regarding the second bug, the problematic condition is removed, together with the formal_arg_flag associated with it. Indeed, that condition was (wrongly) allowing local variables to be used in array bounds of dummy arguments. PR fortran/111781 gcc/fortran/ChangeLog: * symbol.cc (gfc_get_procedure_ns, gfc_get_spec_ns): New functions. * gfortran.h (gfc_get_procedure_ns, gfc_get_spec ns): Declare them. (gfc_is_formal_arg): Remove. * expr.cc (check_restricted): Remove special case allowing local variable in dummy argument bound expressions. Use gfc_get_spec_ns to get the right namespace. * resolve.cc (gfc_is_formal_arg, formal_arg_flag): Remove. (gfc_resolve_formal_arglist): Set gfc_current_ns. Quit loop and restore gfc_current_ns instead of early returning. (resolve_symbol): Factor common array spec resolution code to... (resolve_symbol_array_spec): ... this new function. Additionnally set and restore gfc_current_ns. gcc/testsuite/ChangeLog: * gfortran.dg/spec_expr_8.f90: New test. * gfortran.dg/spec_expr_9.f90: New test. --- gcc/fortran/expr.cc | 8 +-- gcc/fortran/gfortran.h | 4 +- gcc/fortran/resolve.cc | 77 +++++++++++------------ gcc/fortran/symbol.cc | 58 +++++++++++++++++ gcc/testsuite/gfortran.dg/spec_expr_8.f90 | 24 +++++++ gcc/testsuite/gfortran.dg/spec_expr_9.f90 | 19 ++++++ 6 files changed, 140 insertions(+), 50 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/spec_expr_8.f90 create mode 100644 gcc/testsuite/gfortran.dg/spec_expr_9.f90 diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index e4b1e8307e34..9a042cd7040c 100644 --- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -3514,19 +3514,13 @@ check_restricted (gfc_expr *e) if (!check_references (e->ref, &check_restricted)) break; - /* gfc_is_formal_arg broadcasts that a formal argument list is being - processed in resolve.cc(resolve_formal_arglist). This is done so - that host associated dummy array indices are accepted (PR23446). - This mechanism also does the same for the specification expressions - of array-valued functions. */ if (e->error || sym->attr.in_common || sym->attr.use_assoc || sym->attr.dummy || sym->attr.implied_index || sym->attr.flavor == FL_PARAMETER - || is_parent_of_current_ns (sym->ns) - || (gfc_is_formal_arg () && (sym->ns == gfc_current_ns))) + || is_parent_of_current_ns (gfc_get_spec_ns (sym))) { t = true; break; diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index c7039730fad9..26aa56b3358a 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -3612,6 +3612,9 @@ bool gfc_is_associate_pointer (gfc_symbol*); gfc_symbol * gfc_find_dt_in_generic (gfc_symbol *); gfc_formal_arglist *gfc_sym_get_dummy_args (gfc_symbol *); +gfc_namespace * gfc_get_procedure_ns (gfc_symbol *); +gfc_namespace * gfc_get_spec_ns (gfc_symbol *); + /* intrinsic.cc -- true if working in an init-expr, false otherwise. */ extern bool gfc_init_expr_flag; @@ -3821,7 +3824,6 @@ bool gfc_resolve_iterator (gfc_iterator *, bool, bool); bool find_forall_index (gfc_expr *, gfc_symbol *, int); bool gfc_resolve_index (gfc_expr *, int); bool gfc_resolve_dim_arg (gfc_expr *); -bool gfc_is_formal_arg (void); bool gfc_resolve_substring (gfc_ref *, bool *); void gfc_resolve_substring_charlen (gfc_expr *); gfc_expr *gfc_expr_to_initialize (gfc_expr *); diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index c5ae826bd6e8..50d51b06c928 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -72,9 +72,6 @@ static bool first_actual_arg = false; static int omp_workshare_flag; -/* True if we are processing a formal arglist. The corresponding function - resets the flag each time that it is read. */ -static bool formal_arg_flag = false; /* True if we are resolving a specification expression. */ static bool specification_expr = false; @@ -89,12 +86,6 @@ static bitmap_obstack labels_obstack; static bool inquiry_argument = false; -bool -gfc_is_formal_arg (void) -{ - return formal_arg_flag; -} - /* Is the symbol host associated? */ static bool is_sym_host_assoc (gfc_symbol *sym, gfc_namespace *ns) @@ -285,7 +276,8 @@ gfc_resolve_formal_arglist (gfc_symbol *proc) sym->attr.always_explicit = 1; } - formal_arg_flag = true; + gfc_namespace *orig_current_ns = gfc_current_ns; + gfc_current_ns = gfc_get_procedure_ns (proc); for (f = proc->formal; f; f = f->next) { @@ -306,17 +298,18 @@ gfc_resolve_formal_arglist (gfc_symbol *proc) &proc->declared_at); continue; } - else if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL + + if (sym->attr.procedure && sym->attr.if_source != IFSRC_DECL && !resolve_procedure_interface (sym)) - return; + break; if (strcmp (proc->name, sym->name) == 0) - { - gfc_error ("Self-referential argument " - "%qs at %L is not allowed", sym->name, - &proc->declared_at); - return; - } + { + gfc_error ("Self-referential argument " + "%qs at %L is not allowed", sym->name, + &proc->declared_at); + break; + } if (sym->attr.if_source != IFSRC_UNKNOWN) gfc_resolve_formal_arglist (sym); @@ -533,7 +526,8 @@ gfc_resolve_formal_arglist (gfc_symbol *proc) } } } - formal_arg_flag = false; + + gfc_current_ns = orig_current_ns; } @@ -16206,6 +16200,26 @@ resolve_pdt (gfc_symbol* sym) } +/* Resolve the symbol's array spec. */ + +static bool +resolve_symbol_array_spec (gfc_symbol *sym, int check_constant) +{ + gfc_namespace *orig_current_ns = gfc_current_ns; + gfc_current_ns = gfc_get_spec_ns (sym); + + bool saved_specification_expr = specification_expr; + specification_expr = true; + + bool result = gfc_resolve_array_spec (sym->as, check_constant); + + specification_expr = saved_specification_expr; + gfc_current_ns = orig_current_ns; + + return result; +} + + /* Do anything necessary to resolve a symbol. Right now, we just assume that an otherwise unknown symbol is a variable. This sort of thing commonly happens for symbols in module. */ @@ -16220,7 +16234,6 @@ resolve_symbol (gfc_symbol *sym) gfc_component *c; symbol_attribute class_attr; gfc_array_spec *as; - bool saved_specification_expr; if (sym->resolve_symbol_called >= 1) return; @@ -16385,16 +16398,7 @@ resolve_symbol (gfc_symbol *sym) } } else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function) - { - bool saved_specification_expr = specification_expr; - bool saved_formal_arg_flag = formal_arg_flag; - - specification_expr = true; - formal_arg_flag = true; - gfc_resolve_array_spec (sym->result->as, false); - formal_arg_flag = saved_formal_arg_flag; - specification_expr = saved_specification_expr; - } + resolve_symbol_array_spec (sym->result, false); /* For a CLASS-valued function with a result variable, affirm that it has been resolved also when looking at the symbol 'sym'. */ @@ -16961,18 +16965,7 @@ resolve_symbol (gfc_symbol *sym) check_constant = sym->attr.in_common && !sym->attr.pointer && !sym->error; - /* Set the formal_arg_flag so that check_conflict will not throw - an error for host associated variables in the specification - expression for an array_valued function. */ - if ((sym->attr.function || sym->attr.result) && sym->as) - formal_arg_flag = true; - - saved_specification_expr = specification_expr; - specification_expr = true; - gfc_resolve_array_spec (sym->as, check_constant); - specification_expr = saved_specification_expr; - - formal_arg_flag = false; + resolve_symbol_array_spec (sym, check_constant); /* Resolve formal namespaces. */ if (sym->formal_ns && sym->formal_ns != gfc_current_ns diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc index 16adb2a7efb2..3a3b6de5cece 100644 --- a/gcc/fortran/symbol.cc +++ b/gcc/fortran/symbol.cc @@ -5408,3 +5408,61 @@ gfc_sym_get_dummy_args (gfc_symbol *sym) return dummies; } + + +/* Given a procedure, returns the associated namespace. + The resulting NS should match the condition NS->PROC_NAME == SYM. */ + +gfc_namespace * +gfc_get_procedure_ns (gfc_symbol *sym) +{ + if (sym->formal_ns + && sym->formal_ns->proc_name == sym) + return sym->formal_ns; + + /* The above should have worked in most cases. If it hasn't, try some other + heuristics, eventually returning SYM->NS. */ + if (gfc_current_ns->proc_name == sym) + return gfc_current_ns; + + /* For contained procedures, the symbol's NS field is the + hosting namespace, not the procedure namespace. */ + if (sym->attr.flavor == FL_PROCEDURE && sym->attr.contained) + for (gfc_namespace *ns = sym->ns->contained; ns; ns = ns->sibling) + if (ns->proc_name == sym) + return ns; + + if (sym->formal) + for (gfc_formal_arglist *f = sym->formal; f != nullptr; f = f->next) + if (f->sym) + { + gfc_namespace *ns = f->sym->ns; + if (ns && ns->proc_name == sym) + return ns; + } + + return sym->ns; +} + + +/* Given a symbol, returns the namespace in which the symbol is specified. + In most cases, it is the namespace hosting the symbol. This is the case + for variables. For functions, however, it is the function namespace + itself. This specification namespace is used to check conformance of + array spec bound expressions. */ + +gfc_namespace * +gfc_get_spec_ns (gfc_symbol *sym) +{ + if (sym->attr.flavor == FL_PROCEDURE + && sym->attr.function) + { + if (sym->result == sym) + return gfc_get_procedure_ns (sym); + /* Generic and intrinsic functions can have a null result. */ + else if (sym->result != nullptr) + return sym->result->ns; + } + + return sym->ns; +} diff --git a/gcc/testsuite/gfortran.dg/spec_expr_8.f90 b/gcc/testsuite/gfortran.dg/spec_expr_8.f90 new file mode 100644 index 000000000000..77e141564971 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/spec_expr_8.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! +! PR fortran/111781 +! We used to reject the example below because the dummy procedure g was +! setting the current namespace without properly restoring it, which broke +! the specification expression check for the dimension of A later on. +! +! Contributed by Rasmus Vikhamar-Sandberg <rasmus.vikhamar-sandberg@uit.no> + +program example + implicit none + integer :: n + +contains + + subroutine f(g,A) + real, intent(out) :: A(n) + interface + pure real(8) function g(x) + real(8), intent(in) :: x + end function + end interface + end subroutine +end program diff --git a/gcc/testsuite/gfortran.dg/spec_expr_9.f90 b/gcc/testsuite/gfortran.dg/spec_expr_9.f90 new file mode 100644 index 000000000000..9024909b4e9d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/spec_expr_9.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! +! PR fortran/111781 +! Used to fail with Error: Variable ‘n’ cannot appear in the +! expression at (1) for line 16. +! +program is_it_valid + dimension y(3) + integer :: n = 3 + interface + function func(x) + import + dimension func(n) + end function + end interface + y=func(1.0) + print *, y + stop +end From a44d7e8a52007c2d45217709ca02947c6600de87 Mon Sep 17 00:00:00 2001 From: Mikael Morin <mikael@gcc.gnu.org> Date: Thu, 21 Mar 2024 17:27:54 +0100 Subject: [PATCH 206/551] fortran: Ignore use statements on error [PR107426] This fixes an access to freed memory on the testcase from the PR. The problem comes from an invalid subroutine statement in an interface, which is ignored and causes the following statements forming the procedure body to be rejected. One of them use-associates the intrinsic ISO_C_BINDING module, which imports new symbols in a namespace that is freed at the time the statement is rejected. However, this creates dangling pointers as ISO_C_BINDING is special and its import creates a reference to the imported C_PTR symbol in the return type of the global intrinsic symbol for C_LOC (see the function create_intrinsic_function). This change saves and restores the list of use statements, so that rejected use statements are removed before they have a chance to be applied to the current namespace and create dangling pointers. PR fortran/107426 gcc/fortran/ChangeLog: * gfortran.h (gfc_save_module_list, gfc_restore_old_module_list): New declarations. * module.cc (old_module_list_tail): New global variable. (gfc_save_module_list, gfc_restore_old_module_list): New functions. (gfc_use_modules): Set module_list and old_module_list_tail. * parse.cc (next_statement): Save module_list before doing any work. (reject_statement): Restore module_list to its saved value. gcc/testsuite/ChangeLog: * gfortran.dg/pr89943_3.f90: Update error pattern. * gfortran.dg/pr89943_4.f90: Likewise. * gfortran.dg/use_31.f90: New test. --- gcc/fortran/gfortran.h | 2 ++ gcc/fortran/module.cc | 31 +++++++++++++++++++++++++ gcc/fortran/parse.cc | 4 ++++ gcc/testsuite/gfortran.dg/pr89943_3.f90 | 2 +- gcc/testsuite/gfortran.dg/pr89943_4.f90 | 2 +- gcc/testsuite/gfortran.dg/use_31.f90 | 26 +++++++++++++++++++++ 6 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/use_31.f90 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 26aa56b3358a..58505446bac5 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -3928,6 +3928,8 @@ void gfc_module_done_2 (void); void gfc_dump_module (const char *, int); bool gfc_check_symbol_access (gfc_symbol *); void gfc_free_use_stmts (gfc_use_list *); +void gfc_save_module_list (); +void gfc_restore_old_module_list (); const char *gfc_dt_lower_string (const char *); const char *gfc_dt_upper_string (const char *); diff --git a/gcc/fortran/module.cc b/gcc/fortran/module.cc index d1de53cbdb44..c565b84d61b7 100644 --- a/gcc/fortran/module.cc +++ b/gcc/fortran/module.cc @@ -195,7 +195,12 @@ static const char *module_name; /* The name of the .smod file that the submodule will write to. */ static const char *submodule_name; +/* The list of use statements to apply to the current namespace + before parsing the non-use statements. */ static gfc_use_list *module_list; +/* The end of the MODULE_LIST list above at the time the recognition + of the current statement started. */ +static gfc_use_list **old_module_list_tail; /* If we're reading an intrinsic module, this is its ID. */ static intmod_id current_intmod; @@ -7561,6 +7566,8 @@ gfc_use_modules (void) gfc_use_module (module_list); free (module_list); } + module_list = NULL; + old_module_list_tail = &module_list; gfc_rename_list = NULL; } @@ -7584,6 +7591,30 @@ gfc_free_use_stmts (gfc_use_list *use_stmts) } +/* Remember the end of the MODULE_LIST list, so that the list can be restored + to its previous state if the current statement is erroneous. */ + +void +gfc_save_module_list () +{ + gfc_use_list **tail = &module_list; + while (*tail != NULL) + tail = &(*tail)->next; + old_module_list_tail = tail; +} + + +/* Restore the MODULE_LIST list to its previous value and free the use + statements that are no longer part of the list. */ + +void +gfc_restore_old_module_list () +{ + gfc_free_use_stmts (*old_module_list_tail); + *old_module_list_tail = NULL; +} + + void gfc_module_init_2 (void) { diff --git a/gcc/fortran/parse.cc b/gcc/fortran/parse.cc index a2bf328f681d..79c810c86ba1 100644 --- a/gcc/fortran/parse.cc +++ b/gcc/fortran/parse.cc @@ -1800,6 +1800,7 @@ next_statement (void) locus old_locus; gfc_enforce_clean_symbol_state (); + gfc_save_module_list (); gfc_new_block = NULL; @@ -3104,6 +3105,9 @@ reject_statement (void) gfc_reject_data (gfc_current_ns); + /* Don't queue use-association of a module if we reject the use statement. */ + gfc_restore_old_module_list (); + gfc_new_block = NULL; gfc_undo_symbols (); gfc_clear_warning (); diff --git a/gcc/testsuite/gfortran.dg/pr89943_3.f90 b/gcc/testsuite/gfortran.dg/pr89943_3.f90 index 38b723e24585..84a9fb747417 100644 --- a/gcc/testsuite/gfortran.dg/pr89943_3.f90 +++ b/gcc/testsuite/gfortran.dg/pr89943_3.f90 @@ -22,7 +22,7 @@ end module Foo_mod module subroutine runFoo4C(ndim) bind(C, name="runFu") ! { dg-error "Mismatch in BIND" } use, intrinsic :: iso_c_binding ! { dg-error "Unexpected USE statement" } implicit none ! { dg-error "Unexpected IMPLICIT NONE statement" } - integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Unexpected data declaration" } + integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Symbol 'c_int32_t' at .1. has no IMPLICIT type" } end subroutine runFoo4C ! { dg-error " Expecting END SUBMODULE" } end submodule Foo_smod diff --git a/gcc/testsuite/gfortran.dg/pr89943_4.f90 b/gcc/testsuite/gfortran.dg/pr89943_4.f90 index 8eba2eda1718..cb955d01c88a 100644 --- a/gcc/testsuite/gfortran.dg/pr89943_4.f90 +++ b/gcc/testsuite/gfortran.dg/pr89943_4.f90 @@ -23,7 +23,7 @@ end module Foo_mod module function runFoo4C(ndim) bind(C, name="runFu") ! { dg-error "Mismatch in BIND" } use, intrinsic :: iso_c_binding ! { dg-error "Unexpected USE statement in" } implicit none ! { dg-error "Unexpected IMPLICIT NONE statement" } - integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Unexpected data declaration" } + integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Symbol 'c_int32_t' at .1. has no IMPLICIT type" } end function runFoo4C ! { dg-error "Expecting END SUBMODULE" } end submodule Foo_smod diff --git a/gcc/testsuite/gfortran.dg/use_31.f90 b/gcc/testsuite/gfortran.dg/use_31.f90 new file mode 100644 index 000000000000..89a9ab30d112 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_31.f90 @@ -0,0 +1,26 @@ +! { dg-do compile } +! +! PR fortran/107426 +! This example used to generate an ICE, caused by the use stmt from the nested +! procedure declaration setting the result of the C_LOC global intrinsic symbol +! to the symbol of C_PTR from ISO_C_BINDING being imported, before freeing the +! latter symbol because of the rejection of the use statement. +! +! Contributed by Gerhard Steinmetz <gscfq@t-online.de> + +module m +contains + subroutine p() bind(c) + use, intrinsic :: iso_c_binding + integer, target :: a = 1 + type(c_ptr) :: z + interface + subroutine s(x) bind(cc) ! { dg-error "Missing closing paren" } + use, intrinsic :: iso_c_binding ! { dg-error "Unexpected USE statement in INTERFACE block" } + integer(c_int), value :: x ! { dg-error "Parameter 'c_int' at .1. has not been declared" } + end ! { dg-error "END INTERFACE statement expected" } + end interface + z = c_loc(a) + call s(z) + end +end From a364148530c28645ce87adbc58a66c9f32a325ab Mon Sep 17 00:00:00 2001 From: Thomas Neumann <tneumann@users.sourceforge.net> Date: Mon, 11 Mar 2024 14:35:20 +0100 Subject: [PATCH 207/551] handle unwind tables that are embedded within unwinding code [PR111731] Original bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111731 The unwinding mechanism registers both the code range and the unwind table itself within a b-tree lookup structure. That data structure assumes that is consists of non-overlappping intervals. This becomes a problem if the unwinding table is embedded within the code itself, as now the intervals do overlap. To fix this problem we now keep the unwind tables in a separate b-tree, which prevents the overlap. libgcc/ChangeLog: PR libgcc/111731 * unwind-dw2-fde.c: Split unwind ranges if they contain the unwind table. --- libgcc/unwind-dw2-fde.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/libgcc/unwind-dw2-fde.c b/libgcc/unwind-dw2-fde.c index 61a578d097eb..9d503545677a 100644 --- a/libgcc/unwind-dw2-fde.c +++ b/libgcc/unwind-dw2-fde.c @@ -48,6 +48,7 @@ typedef __UINTPTR_TYPE__ uintptr_type; #include "unwind-dw2-btree.h" static struct btree registered_frames; +static struct btree registered_objects; static bool in_shutdown; static void @@ -58,6 +59,7 @@ release_registered_frames (void) /* Release the b-tree and all frames. Frame releases that happen later are * silently ignored */ btree_destroy (®istered_frames); + btree_destroy (®istered_objects); in_shutdown = true; } @@ -103,6 +105,21 @@ static __gthread_mutex_t object_mutex; #endif #endif +#ifdef ATOMIC_FDE_FAST_PATH +// Register the pc range for a given object in the lookup structure. +static void +register_pc_range_for_object (uintptr_type begin, struct object *ob) +{ + // Register the object itself to know the base pointer on deregistration. + btree_insert (®istered_objects, begin, 1, ob); + + // Register the frame in the b-tree + uintptr_type range[2]; + get_pc_range (ob, range); + btree_insert (®istered_frames, range[0], range[1] - range[0], ob); +} +#endif + /* Called from crtbegin.o to register the unwind info for an object. */ void @@ -124,13 +141,7 @@ __register_frame_info_bases (const void *begin, struct object *ob, #endif #ifdef ATOMIC_FDE_FAST_PATH - // Register the object itself to know the base pointer on deregistration. - btree_insert (®istered_frames, (uintptr_type) begin, 1, ob); - - // Register the frame in the b-tree - uintptr_type range[2]; - get_pc_range (ob, range); - btree_insert (®istered_frames, range[0], range[1] - range[0], ob); + register_pc_range_for_object ((uintptr_type) begin, ob); #else init_object_mutex_once (); __gthread_mutex_lock (&object_mutex); @@ -178,13 +189,7 @@ __register_frame_info_table_bases (void *begin, struct object *ob, ob->s.b.encoding = DW_EH_PE_omit; #ifdef ATOMIC_FDE_FAST_PATH - // Register the object itself to know the base pointer on deregistration. - btree_insert (®istered_frames, (uintptr_type) begin, 1, ob); - - // Register the frame in the b-tree - uintptr_type range[2]; - get_pc_range (ob, range); - btree_insert (®istered_frames, range[0], range[1] - range[0], ob); + register_pc_range_for_object ((uintptr_type) begin, ob); #else init_object_mutex_once (); __gthread_mutex_lock (&object_mutex); @@ -232,7 +237,7 @@ __deregister_frame_info_bases (const void *begin) #ifdef ATOMIC_FDE_FAST_PATH // Find the originally registered object to get the base pointer. - ob = btree_remove (®istered_frames, (uintptr_type) begin); + ob = btree_remove (®istered_objects, (uintptr_type) begin); // Remove the corresponding PC range. if (ob) @@ -240,7 +245,7 @@ __deregister_frame_info_bases (const void *begin) uintptr_type range[2]; get_pc_range (ob, range); if (range[0] != range[1]) - btree_remove (®istered_frames, range[0]); + btree_remove (®istered_frames, range[0]); } // Deallocate the sort array if any. From e4e02c07d93559a037608c73e8153549b5104fbb Mon Sep 17 00:00:00 2001 From: Andrew Stubbs <ams@baylibre.com> Date: Fri, 15 Mar 2024 14:21:15 +0000 Subject: [PATCH 208/551] vect: more oversized bitmask fixups These patches fix up a failure in testcase vect/tsvc/vect-tsvc-s278.c when configured to use V32 instead of V64 (I plan to do this for RDNA devices). The problem was that a "not" operation on the mask inadvertently enabled inactive lanes 31-63 and corrupted the output. The fix is to adjust the mask when calling internal functions (in this case COND_MINUS), when doing masked loads and stores, and when doing conditional jumps (some cases were already handled). gcc/ChangeLog: * dojump.cc (do_compare_rtx_and_jump): Clear excess bits in vector bitmasks. (do_compare_and_jump): Remove now-redundant similar code. * internal-fn.cc (expand_fn_using_insn): Clear excess bits in vector bitmasks. (add_mask_and_len_args): Likewise. --- gcc/dojump.cc | 34 ++++++++++++++++++---------------- gcc/internal-fn.cc | 26 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/gcc/dojump.cc b/gcc/dojump.cc index 88600cb42d3d..5f74b696b41d 100644 --- a/gcc/dojump.cc +++ b/gcc/dojump.cc @@ -1235,6 +1235,24 @@ do_compare_rtx_and_jump (rtx op0, rtx op1, enum rtx_code code, int unsignedp, } } + /* For boolean vectors with less than mode precision + make sure to fill padding with consistent values. */ + if (val + && VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (val)) + && SCALAR_INT_MODE_P (mode)) + { + auto nunits = TYPE_VECTOR_SUBPARTS (TREE_TYPE (val)).to_constant (); + if (maybe_ne (GET_MODE_PRECISION (mode), nunits)) + { + op0 = expand_binop (mode, and_optab, op0, + GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1), + NULL_RTX, true, OPTAB_WIDEN); + op1 = expand_binop (mode, and_optab, op1, + GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1), + NULL_RTX, true, OPTAB_WIDEN); + } + } + emit_cmp_and_jump_insns (op0, op1, code, size, mode, unsignedp, val, if_true_label, prob); } @@ -1266,7 +1284,6 @@ do_compare_and_jump (tree treeop0, tree treeop1, enum rtx_code signed_code, machine_mode mode; int unsignedp; enum rtx_code code; - unsigned HOST_WIDE_INT nunits; /* Don't crash if the comparison was erroneous. */ op0 = expand_normal (treeop0); @@ -1309,21 +1326,6 @@ do_compare_and_jump (tree treeop0, tree treeop1, enum rtx_code signed_code, emit_insn (targetm.gen_canonicalize_funcptr_for_compare (new_op1, op1)); op1 = new_op1; } - /* For boolean vectors with less than mode precision - make sure to fill padding with consistent values. */ - else if (VECTOR_BOOLEAN_TYPE_P (type) - && SCALAR_INT_MODE_P (mode) - && TYPE_VECTOR_SUBPARTS (type).is_constant (&nunits) - && maybe_ne (GET_MODE_PRECISION (mode), nunits)) - { - gcc_assert (code == EQ || code == NE); - op0 = expand_binop (mode, and_optab, op0, - GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1), NULL_RTX, - true, OPTAB_WIDEN); - op1 = expand_binop (mode, and_optab, op1, - GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1), NULL_RTX, - true, OPTAB_WIDEN); - } do_compare_rtx_and_jump (op0, op1, code, unsignedp, treeop0, mode, ((mode == BLKmode) diff --git a/gcc/internal-fn.cc b/gcc/internal-fn.cc index fcf47c7fa128..5269f0ac528e 100644 --- a/gcc/internal-fn.cc +++ b/gcc/internal-fn.cc @@ -245,6 +245,18 @@ expand_fn_using_insn (gcall *stmt, insn_code icode, unsigned int noutputs, && SSA_NAME_IS_DEFAULT_DEF (rhs) && VAR_P (SSA_NAME_VAR (rhs))) create_undefined_input_operand (&ops[opno], TYPE_MODE (rhs_type)); + else if (VECTOR_BOOLEAN_TYPE_P (rhs_type) + && SCALAR_INT_MODE_P (TYPE_MODE (rhs_type)) + && maybe_ne (GET_MODE_PRECISION (TYPE_MODE (rhs_type)), + TYPE_VECTOR_SUBPARTS (rhs_type).to_constant ())) + { + /* Ensure that the vector bitmasks do not have excess bits. */ + int nunits = TYPE_VECTOR_SUBPARTS (rhs_type).to_constant (); + rtx tmp = expand_binop (TYPE_MODE (rhs_type), and_optab, rhs_rtx, + GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1), + NULL_RTX, true, OPTAB_WIDEN); + create_input_operand (&ops[opno], tmp, TYPE_MODE (rhs_type)); + } else create_input_operand (&ops[opno], rhs_rtx, TYPE_MODE (rhs_type)); opno += 1; @@ -312,6 +324,20 @@ add_mask_and_len_args (expand_operand *ops, unsigned int opno, gcall *stmt) { tree mask = gimple_call_arg (stmt, mask_index); rtx mask_rtx = expand_normal (mask); + + tree mask_type = TREE_TYPE (mask); + if (VECTOR_BOOLEAN_TYPE_P (mask_type) + && SCALAR_INT_MODE_P (TYPE_MODE (mask_type)) + && maybe_ne (GET_MODE_PRECISION (TYPE_MODE (mask_type)), + TYPE_VECTOR_SUBPARTS (mask_type).to_constant ())) + { + /* Ensure that the vector bitmasks do not have excess bits. */ + int nunits = TYPE_VECTOR_SUBPARTS (mask_type).to_constant (); + mask_rtx = expand_binop (TYPE_MODE (mask_type), and_optab, mask_rtx, + GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1), + NULL_RTX, true, OPTAB_WIDEN); + } + create_input_operand (&ops[opno++], mask_rtx, TYPE_MODE (TREE_TYPE (mask))); } From d1d8fd2884b44598d80de1038b086eec41519d4b Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Thu, 22 Feb 2024 18:49:08 -0500 Subject: [PATCH 209/551] c++: direct-init of an array of class type [PR59465] ...from another array in a mem-initializer should not be accepted. We already reject struct string {} a[1]; string x[1](a); but struct pair { string s[1]; pair() : s(a) {} }; is wrongly accepted. It started to be accepted with r0-110915-ga034826198b771: <https://gcc.gnu.org/pipermail/gcc-patches/2011-August/320236.html> which was supposed to be a cleanup, not a deliberate change to start accepting the code. The build_vec_init_expr code was added in r165976: <https://gcc.gnu.org/pipermail/gcc-patches/2010-October/297582.html>. It appears that we do the magic copy array when we have a defaulted constructor and we generate code for its mem-initializer which initializes an array. I also see that we go that path for compound literals. So when initializing an array member, we can limit building up a VEC_INIT_EXPR to those special cases. PR c++/59465 gcc/cp/ChangeLog: * init.cc (can_init_array_with_p): New. (perform_member_init): Check it. gcc/testsuite/ChangeLog: * g++.dg/init/array62.C: New test. * g++.dg/init/array63.C: New test. * g++.dg/init/array64.C: New test. --- gcc/cp/init.cc | 31 ++++++++++++++++++++++++++--- gcc/testsuite/g++.dg/init/array62.C | 19 ++++++++++++++++++ gcc/testsuite/g++.dg/init/array63.C | 13 ++++++++++++ gcc/testsuite/g++.dg/init/array64.C | 22 ++++++++++++++++++++ 4 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/init/array62.C create mode 100644 gcc/testsuite/g++.dg/init/array63.C create mode 100644 gcc/testsuite/g++.dg/init/array64.C diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index d2586fad86b1..dbd37d47cbf5 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -934,6 +934,33 @@ find_uninit_fields (tree *t, hash_set<tree> *uninitialized, tree member) } } +/* Return true if it's OK to initialize an array TYPE from INIT. Mere mortals + can't copy arrays, but the compiler can do so with a VEC_INIT_EXPR in + certain cases. */ + +static bool +can_init_array_with_p (tree type, tree init) +{ + if (!init) + /* Value-init, OK. */ + return true; + if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))) + return false; + /* We're called from synthesize_method, and we're processing the + mem-initializers of a constructor. */ + if (DECL_DEFAULTED_FN (current_function_decl)) + return true; + /* As an extension, we allow copying from a compound literal. */ + if (TREE_CODE (init) == TARGET_EXPR) + { + init = TARGET_EXPR_INITIAL (init); + if (TREE_CODE (init) == CONSTRUCTOR) + return CONSTRUCTOR_C99_COMPOUND_LITERAL (init); + } + + return false; +} + /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of arguments. If TREE_LIST is void_type_node, an empty initializer list was given; if NULL_TREE no initializer was given. UNINITIALIZED @@ -1087,9 +1114,7 @@ perform_member_init (tree member, tree init, hash_set<tree> &uninitialized) { if (TREE_CODE (type) == ARRAY_TYPE) { - if (init == NULL_TREE - || same_type_ignoring_top_level_qualifiers_p (type, - TREE_TYPE (init))) + if (can_init_array_with_p (type, init)) { if (TYPE_DOMAIN (type) && TYPE_MAX_VALUE (TYPE_DOMAIN (type))) { diff --git a/gcc/testsuite/g++.dg/init/array62.C b/gcc/testsuite/g++.dg/init/array62.C new file mode 100644 index 000000000000..2a786a36e4e8 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array62.C @@ -0,0 +1,19 @@ +// PR c++/59465 +// { dg-do compile } + +struct string {} a[1]; +struct pair { + string s[1]; + pair() : s(a) {} // { dg-error "invalid initializer for array member" } +}; + +struct S { + char s[10]; + S() : s("aaa") {} +}; + +void +g () +{ + string x[1](a); // { dg-error "array must be initialized" } +} diff --git a/gcc/testsuite/g++.dg/init/array63.C b/gcc/testsuite/g++.dg/init/array63.C new file mode 100644 index 000000000000..57e980561680 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array63.C @@ -0,0 +1,13 @@ +// PR c++/59465 +// { dg-do compile } + +struct I { + const bool b; +}; +struct O { + I a[2]; + static I const data[2]; + O() : a(data){} // { dg-error "invalid initializer for array member" } +}; + +I const O::data[2] = {true, false}; diff --git a/gcc/testsuite/g++.dg/init/array64.C b/gcc/testsuite/g++.dg/init/array64.C new file mode 100644 index 000000000000..e0afdfab39a5 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array64.C @@ -0,0 +1,22 @@ +// PR c++/59465 +// { dg-do compile } + +static const int my_size = 10; + +class UserType +{ +public: + UserType(): f_(){} +private: +int f_; +}; + +typedef UserType Array[my_size]; + +class Foo +{ +public: + Foo(Array& m) : m_(m) {}; // { dg-error "invalid initializer for array member" } +private: + Array m_; +}; From 1bf18629c54adf4893c8db5227a36e1952ee69a3 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs <ams@baylibre.com> Date: Fri, 15 Mar 2024 14:26:15 +0000 Subject: [PATCH 210/551] amdgcn: Add gfx1103 target Add support for the gfx1103 RDNA3 APU integrated graphics devices. The ROCm documentation warns that these may not be supported, but it seems to work at least partially. gcc/ChangeLog: * config.gcc (amdgcn): Add gfx1103 entries. * config/gcn/gcn-hsa.h (NO_XNACK): Likewise. (gcn_local_sym_hash): Likewise. * config/gcn/gcn-opts.h (enum processor_type): Likewise. (TARGET_GFX1103): New macro. * config/gcn/gcn.cc (gcn_option_override): Handle gfx1103. (gcn_omp_device_kind_arch_isa): Likewise. (output_file_start): Likewise. (gcn_hsa_declare_function_name): Use TARGET_RDNA3, not just gfx1100. * config/gcn/gcn.h (TARGET_CPU_CPP_BUILTINS): Add __gfx1103__. * config/gcn/gcn.opt: Add gfx1103. * config/gcn/mkoffload.cc (EF_AMDGPU_MACH_AMDGCN_GFX1103): New. (main): Handle gfx1103. * config/gcn/t-omp-device: Add gfx1103 isa. * doc/install.texi (amdgcn): Add gfx1103. * doc/invoke.texi (-march): Likewise. libgomp/ChangeLog: * plugin/plugin-gcn.c (EF_AMDGPU_MACH): GFX1103. (gcn_gfx1103_s): New. (isa_hsa_name): Handle gfx1103. (isa_code): Likewise. (max_isa_vgprs): Likewise. --- gcc/config.gcc | 4 ++-- gcc/config/gcn/gcn-hsa.h | 6 +++--- gcc/config/gcn/gcn-opts.h | 4 +++- gcc/config/gcn/gcn.cc | 14 ++++++++++++-- gcc/config/gcn/gcn.h | 2 ++ gcc/config/gcn/gcn.opt | 3 +++ gcc/config/gcn/mkoffload.cc | 5 +++++ gcc/config/gcn/t-omp-device | 2 +- gcc/doc/install.texi | 13 +++++++------ gcc/doc/invoke.texi | 3 +++ libgomp/plugin/plugin-gcn.c | 10 +++++++++- 11 files changed, 50 insertions(+), 16 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 040afabd9ece..87a5c92b6e3b 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4560,7 +4560,7 @@ case "${target}" in for which in arch tune; do eval "val=\$with_$which" case ${val} in - "" | fiji | gfx900 | gfx906 | gfx908 | gfx90a | gfx1030 | gfx1100) + "" | fiji | gfx900 | gfx906 | gfx908 | gfx90a | gfx1030 | gfx1100 | gfx1103) # OK ;; *) @@ -4576,7 +4576,7 @@ case "${target}" in TM_MULTILIB_CONFIG= ;; xdefault | xyes) - TM_MULTILIB_CONFIG=`echo "gfx900,gfx906,gfx908,gfx90a,gfx1030,gfx1100" | sed "s/${with_arch},\?//;s/,$//"` + TM_MULTILIB_CONFIG=`echo "gfx900,gfx906,gfx908,gfx90a,gfx1030,gfx1100,gfx1103" | sed "s/${with_arch},\?//;s/,$//"` ;; *) TM_MULTILIB_CONFIG="${with_multilib_list}" diff --git a/gcc/config/gcn/gcn-hsa.h b/gcc/config/gcn/gcn-hsa.h index c75256dbac37..ac32b8a328fa 100644 --- a/gcc/config/gcn/gcn-hsa.h +++ b/gcc/config/gcn/gcn-hsa.h @@ -90,7 +90,7 @@ extern unsigned int gcn_local_sym_hash (const char *name); the ELF flags (e_flags) of that generated file must be identical to those generated by the compiler. */ -#define NO_XNACK "march=fiji:;march=gfx1030:;march=gfx1100:;" \ +#define NO_XNACK "march=fiji:;march=gfx1030:;march=gfx1100:;march=gfx1103:;" \ /* These match the defaults set in gcn.cc. */ \ "!mxnack*|mxnack=default:%{march=gfx900|march=gfx906|march=gfx908:-mattr=-xnack};" #define NO_SRAM_ECC "!march=*:;march=fiji:;march=gfx900:;march=gfx906:;" @@ -106,8 +106,8 @@ extern unsigned int gcn_local_sym_hash (const char *name); "%{" ABI_VERSION_SPEC "} " \ "%{" NO_XNACK XNACKOPT "} " \ "%{" NO_SRAM_ECC SRAMOPT "} " \ - "%{march=gfx1030|march=gfx1100:-mattr=+wavefrontsize64} " \ - "%{march=gfx1030|march=gfx1100:-mattr=+cumode} " \ + "%{march=gfx1030|march=gfx1100|march=gfx1103:-mattr=+wavefrontsize64} " \ + "%{march=gfx1030|march=gfx1100|march=gfx1103:-mattr=+cumode} " \ "-filetype=obj" #define LINK_SPEC "--pie --export-dynamic" #define LIB_SPEC "-lc" diff --git a/gcc/config/gcn/gcn-opts.h b/gcc/config/gcn/gcn-opts.h index 6be2c9204fa9..285746f7f4dd 100644 --- a/gcc/config/gcn/gcn-opts.h +++ b/gcc/config/gcn/gcn-opts.h @@ -26,7 +26,8 @@ enum processor_type PROCESSOR_GFX908, PROCESSOR_GFX90a, PROCESSOR_GFX1030, - PROCESSOR_GFX1100 + PROCESSOR_GFX1100, + PROCESSOR_GFX1103 }; #define TARGET_FIJI (gcn_arch == PROCESSOR_FIJI) @@ -36,6 +37,7 @@ enum processor_type #define TARGET_GFX90a (gcn_arch == PROCESSOR_GFX90a) #define TARGET_GFX1030 (gcn_arch == PROCESSOR_GFX1030) #define TARGET_GFX1100 (gcn_arch == PROCESSOR_GFX1100) +#define TARGET_GFX1103 (gcn_arch == PROCESSOR_GFX1103) /* Set in gcn_option_override. */ extern enum gcn_isa { diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index fca001811e5d..498146dcde94 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -140,6 +140,7 @@ gcn_option_override (void) : gcn_arch == PROCESSOR_GFX90a ? ISA_CDNA2 : gcn_arch == PROCESSOR_GFX1030 ? ISA_RDNA2 : gcn_arch == PROCESSOR_GFX1100 ? ISA_RDNA3 + : gcn_arch == PROCESSOR_GFX1103 ? ISA_RDNA3 : ISA_UNKNOWN); gcc_assert (gcn_isa != ISA_UNKNOWN); @@ -164,13 +165,15 @@ gcn_option_override (void) /* gfx803 "Fiji", gfx1030 and gfx1100 do not support XNACK. */ if (gcn_arch == PROCESSOR_FIJI || gcn_arch == PROCESSOR_GFX1030 - || gcn_arch == PROCESSOR_GFX1100) + || gcn_arch == PROCESSOR_GFX1100 + || gcn_arch == PROCESSOR_GFX1103) { if (flag_xnack == HSACO_ATTR_ON) error ("%<-mxnack=on%> is incompatible with %<-march=%s%>", (gcn_arch == PROCESSOR_FIJI ? "fiji" : gcn_arch == PROCESSOR_GFX1030 ? "gfx1030" : gcn_arch == PROCESSOR_GFX1100 ? "gfx1100" + : gcn_arch == PROCESSOR_GFX1103 ? "gfx1103" : NULL)); /* Allow HSACO_ATTR_ANY silently because that's the default. */ flag_xnack = HSACO_ATTR_OFF; @@ -3048,6 +3051,8 @@ gcn_omp_device_kind_arch_isa (enum omp_device_kind_arch_isa trait, return gcn_arch == PROCESSOR_GFX1030; if (strcmp (name, "gfx1100") == 0) return gcn_arch == PROCESSOR_GFX1100; + if (strcmp (name, "gfx1103") == 0) + return gcn_arch == PROCESSOR_GFX1103; return 0; default: gcc_unreachable (); @@ -6558,6 +6563,11 @@ output_file_start (void) xnack = ""; sram_ecc = ""; break; + case PROCESSOR_GFX1103: + cpu = "gfx1103"; + xnack = ""; + sram_ecc = ""; + break; default: gcc_unreachable (); } @@ -6705,7 +6715,7 @@ gcn_hsa_declare_function_name (FILE *file, const char *name, xnack_enabled, LDS_SIZE); /* Not supported with 'architected flat scratch'. */ - if (gcn_arch != PROCESSOR_GFX1100) + if (!TARGET_RDNA3) fprintf (file, "\t .amdhsa_reserve_flat_scratch\t0\n"); if (gcn_arch == PROCESSOR_GFX90a) diff --git a/gcc/config/gcn/gcn.h b/gcc/config/gcn/gcn.h index c314c7b4ae8e..b003db6cd26d 100644 --- a/gcc/config/gcn/gcn.h +++ b/gcc/config/gcn/gcn.h @@ -51,6 +51,8 @@ builtin_define ("__gfx1030"); \ else if (TARGET_GFX1100) \ builtin_define ("__gfx1100__"); \ + else if (TARGET_GFX1103) \ + builtin_define ("__gfx1103__"); \ else \ gcc_unreachable (); \ } while (0) diff --git a/gcc/config/gcn/gcn.opt b/gcc/config/gcn/gcn.opt index 842fd36d25c9..e06a2849d909 100644 --- a/gcc/config/gcn/gcn.opt +++ b/gcc/config/gcn/gcn.opt @@ -46,6 +46,9 @@ Enum(gpu_type) String(gfx1030) Value(PROCESSOR_GFX1030) EnumValue Enum(gpu_type) String(gfx1100) Value(PROCESSOR_GFX1100) +EnumValue +Enum(gpu_type) String(gfx1103) Value(PROCESSOR_GFX1103) + march= Target RejectNegative Negative(march=) Joined ToLower Enum(gpu_type) Var(gcn_arch) Init(PROCESSOR_FIJI) Specify the name of the target GPU. diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc index fe443abba217..58eeada82958 100644 --- a/gcc/config/gcn/mkoffload.cc +++ b/gcc/config/gcn/mkoffload.cc @@ -61,6 +61,8 @@ #define EF_AMDGPU_MACH_AMDGCN_GFX1030 0x36 #undef EF_AMDGPU_MACH_AMDGCN_GFX1100 #define EF_AMDGPU_MACH_AMDGCN_GFX1100 0x41 +#undef EF_AMDGPU_MACH_AMDGCN_GFX1103 +#define EF_AMDGPU_MACH_AMDGCN_GFX1103 0x44 #define EF_AMDGPU_FEATURE_XNACK_V4 0x300 /* Mask. */ #define EF_AMDGPU_FEATURE_XNACK_UNSUPPORTED_V4 0x000 @@ -971,6 +973,8 @@ main (int argc, char **argv) elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1030; else if (strcmp (argv[i], "-march=gfx1100") == 0) elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1100; + else if (strcmp (argv[i], "-march=gfx1103") == 0) + elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1103; #define STR "-mstack-size=" else if (startswith (argv[i], STR)) gcn_stack_size = atoi (argv[i] + strlen (STR)); @@ -1013,6 +1017,7 @@ main (int argc, char **argv) case EF_AMDGPU_MACH_AMDGCN_GFX803: case EF_AMDGPU_MACH_AMDGCN_GFX1030: case EF_AMDGPU_MACH_AMDGCN_GFX1100: + case EF_AMDGPU_MACH_AMDGCN_GFX1103: SET_XNACK_UNSET (elf_flags); SET_SRAM_ECC_UNSET (elf_flags); break; diff --git a/gcc/config/gcn/t-omp-device b/gcc/config/gcn/t-omp-device index 2315ad594a38..037df2657ccf 100644 --- a/gcc/config/gcn/t-omp-device +++ b/gcc/config/gcn/t-omp-device @@ -1,4 +1,4 @@ omp-device-properties-gcn: $(srcdir)/config/gcn/gcn.cc echo kind: gpu > $@ echo arch: amdgcn gcn >> $@ - echo isa: fiji gfx803 gfx900 gfx906 gfx908 gfx90a gfx1030 gfx1100 >> $@ + echo isa: fiji gfx803 gfx900 gfx906 gfx908 gfx90a gfx1030 gfx1100 gfx1103 >> $@ diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 014ca25aa628..a9872e86beef 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1266,11 +1266,11 @@ default set of libraries is selected based on the value of @item amdgcn*-*-* @var{list} is a comma separated list of ISA names (allowed values: @code{fiji}, @code{gfx900}, @code{gfx906}, @code{gfx908}, @code{gfx90a}, @code{gfx1030}, -@code{gfx1100}). It ought not include the name of the default ISA, specified -via @option{--with-arch}. If @var{list} is empty, then there will be no -multilibs and only the default run-time library will be built. If @var{list} -is @code{default} or @option{--with-multilib-list=} is not specified, then -the default set of libraries is selected. +@code{gfx1100}, @code{gfx1103}). It ought not include the name of the default +ISA, specified via @option{--with-arch}. If @var{list} is empty, then there +will be no multilibs and only the default run-time library will be built. If +@var{list} is @code{default} or @option{--with-multilib-list=} is not +specified, then the default set of libraries is selected. @item arm*-*-* @var{list} is a comma separated list of @code{aprofile} and @@ -3940,7 +3940,8 @@ Instead of GNU Binutils, you will need to install LLVM 15, or later, and copy @file{bin/llvm-nm} to @file{amdgcn-amdhsa/bin/nm}, and @file{bin/llvm-ar} to both @file{bin/amdgcn-amdhsa-ar} and @file{bin/amdgcn-amdhsa-ranlib}. Note that LLVM 13.0.1 or LLVM 14 can be used -by specifying a @code{--with-multilib-list=} that does not list @code{gfx1100}. +by specifying a @code{--with-multilib-list=} that does not list @code{gfx1100} +and @code{gfx1103}. Use Newlib (4.3.0 or newer; 4.4.0 or later is recommended). diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e0950ca5dc2a..e7b962123544 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -21795,6 +21795,9 @@ Compile for RDNA2 gfx1030 devices (GFX10 series). @item gfx1100 Compile for RDNA3 gfx1100 devices (GFX11 series). +@item gfx1103 +Compile for RDNA3 gfx1103 devices (GFX11 series). + @end table @opindex msram-ecc diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 7e141a85f310..53dc1c7d23ad 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -391,7 +391,8 @@ typedef enum { EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030, EF_AMDGPU_MACH_AMDGCN_GFX90a = 0x03f, EF_AMDGPU_MACH_AMDGCN_GFX1030 = 0x036, - EF_AMDGPU_MACH_AMDGCN_GFX1100 = 0x041 + EF_AMDGPU_MACH_AMDGCN_GFX1100 = 0x041, + EF_AMDGPU_MACH_AMDGCN_GFX1103 = 0x044 } EF_AMDGPU_MACH; const static int EF_AMDGPU_MACH_MASK = 0x000000ff; @@ -1677,6 +1678,7 @@ const static char *gcn_gfx908_s = "gfx908"; const static char *gcn_gfx90a_s = "gfx90a"; const static char *gcn_gfx1030_s = "gfx1030"; const static char *gcn_gfx1100_s = "gfx1100"; +const static char *gcn_gfx1103_s = "gfx1103"; const static int gcn_isa_name_len = 7; /* Returns the name that the HSA runtime uses for the ISA or NULL if we do not @@ -1700,6 +1702,8 @@ isa_hsa_name (int isa) { return gcn_gfx1030_s; case EF_AMDGPU_MACH_AMDGCN_GFX1100: return gcn_gfx1100_s; + case EF_AMDGPU_MACH_AMDGCN_GFX1103: + return gcn_gfx1103_s; } return NULL; } @@ -1745,6 +1749,9 @@ isa_code(const char *isa) { if (!strncmp (isa, gcn_gfx1100_s, gcn_isa_name_len)) return EF_AMDGPU_MACH_AMDGCN_GFX1100; + if (!strncmp (isa, gcn_gfx1103_s, gcn_isa_name_len)) + return EF_AMDGPU_MACH_AMDGCN_GFX1103; + return EF_AMDGPU_MACH_UNSUPPORTED; } @@ -1765,6 +1772,7 @@ max_isa_vgprs (int isa) case EF_AMDGPU_MACH_AMDGCN_GFX1030: return 512; /* 512 SIMD32 = 256 wavefrontsize64. */ case EF_AMDGPU_MACH_AMDGCN_GFX1100: + case EF_AMDGPU_MACH_AMDGCN_GFX1103: return 1536; /* 1536 SIMD32 = 768 wavefrontsize64. */ } GOMP_PLUGIN_fatal ("unhandled ISA in max_isa_vgprs"); From d475a4571ef310a727a1023856b070f195910140 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Fri, 22 Mar 2024 10:57:20 -0400 Subject: [PATCH 211/551] analyzer: add SARIF property bags to taint diagnostics Another followup to r14-6057-g12b67d1e13b3cf to make it easier to debug the analyzer. gcc/analyzer/ChangeLog: * sm-taint.cc: Include "diagnostic-format-sarif.h". (bounds_to_str): New. (taint_diagnostic::maybe_add_sarif_properties): New. (tainted_offset::tainted_offset): Add "offset" param. (tainted_offset::maybe_add_sarif_properties): New. (tainted_offset::m_offset): New. (region_model::check_region_for_taint): Pass offset to tainted_offset ctor. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/sm-taint.cc | 50 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/gcc/analyzer/sm-taint.cc b/gcc/analyzer/sm-taint.cc index bbf683f82efc..c873c9ebd333 100644 --- a/gcc/analyzer/sm-taint.cc +++ b/gcc/analyzer/sm-taint.cc @@ -50,6 +50,7 @@ along with GCC; see the file COPYING3. If not see #include "analyzer/program-state.h" #include "analyzer/pending-diagnostic.h" #include "analyzer/constraint-manager.h" +#include "diagnostic-format-sarif.h" #if ENABLE_ANALYZER @@ -71,6 +72,22 @@ enum bounds BOUNDS_LOWER }; +static const char * +bounds_to_str (enum bounds b) +{ + switch (b) + { + default: + gcc_unreachable (); + case BOUNDS_NONE: + return "BOUNDS_NONE"; + case BOUNDS_UPPER: + return "BOUNDS_UPPER"; + case BOUNDS_LOWER: + return "BOUNDS_LOWER"; + } +} + /* An experimental state machine, for tracking "taint": unsanitized uses of data potentially under an attacker's control. */ @@ -193,6 +210,17 @@ class taint_diagnostic : public pending_diagnostic return diagnostic_event::meaning (); } + void maybe_add_sarif_properties (sarif_object &result_obj) + const override + { + sarif_property_bag &props = result_obj.get_or_create_properties (); +#define PROPERTY_PREFIX "gcc/analyzer/taint_diagnostic/" + props.set (PROPERTY_PREFIX "arg", tree_to_json (m_arg)); + props.set_string (PROPERTY_PREFIX "has_bounds", + bounds_to_str (m_has_bounds)); +#undef PROPERTY_PREFIX + } + protected: const taint_state_machine &m_sm; tree m_arg; @@ -315,8 +343,10 @@ class tainted_offset : public taint_diagnostic { public: tainted_offset (const taint_state_machine &sm, tree arg, - enum bounds has_bounds) - : taint_diagnostic (sm, arg, has_bounds) + enum bounds has_bounds, + const svalue *offset) + : taint_diagnostic (sm, arg, has_bounds), + m_offset (offset) {} const char *get_kind () const final override { return "tainted_offset"; } @@ -409,6 +439,19 @@ class tainted_offset : public taint_diagnostic " checking"); } } + + void maybe_add_sarif_properties (sarif_object &result_obj) + const final override + { + taint_diagnostic::maybe_add_sarif_properties (result_obj); + sarif_property_bag &props = result_obj.get_or_create_properties (); +#define PROPERTY_PREFIX "gcc/analyzer/tainted_offset/" + props.set (PROPERTY_PREFIX "offset", m_offset->to_json ()); +#undef PROPERTY_PREFIX + } + +private: + const svalue *m_offset; }; /* Concrete taint_diagnostic subclass for reporting attacker-controlled @@ -1554,7 +1597,8 @@ region_model::check_region_for_taint (const region *reg, if (taint_sm.get_taint (state, effective_type, &b)) { tree arg = get_representative_tree (offset); - ctxt->warn (make_unique<tainted_offset> (taint_sm, arg, b)); + ctxt->warn (make_unique<tainted_offset> (taint_sm, arg, b, + offset)); } } break; From c6cf5789135236c5639075c8f235e7dd461b6ff6 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Fri, 22 Mar 2024 10:57:25 -0400 Subject: [PATCH 212/551] analyzer: look through casts in taint sanitization [PR112974,PR112975] PR analyzer/112974 and PR analyzer/112975 record false positives from the analyzer's taint detection where sanitization of the form if (VALUE CMP VALUE-OF-WIDER-TYPE) happens, but wasn't being "noticed" by the taint checker, due to the test being: (WIDER_TYPE)VALUE CMP VALUE-OF-WIDER-TYPE at the gimple level, and thus taint_state_machine recording sanitization of (WIDER_TYPE)VALUE, but not of VALUE. Fix by stripping casts in taint_state_machine::on_condition so that the state machine records sanitization of the underlying value. gcc/analyzer/ChangeLog: PR analyzer/112974 PR analyzer/112975 * sm-taint.cc (taint_state_machine::on_condition): Strip away casts before considering LHS and RHS, to increase the chance of detecting places where sanitization of a value may have happened. gcc/testsuite/ChangeLog: PR analyzer/112974 PR analyzer/112975 * gcc.dg/plugin/plugin.exp (plugin_test_list): Add taint-pr112974.c and taint-pr112975.c to analyzer_kernel_plugin.c. * gcc.dg/plugin/taint-pr112974.c: New test. * gcc.dg/plugin/taint-pr112975.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/sm-taint.cc | 8 +++ gcc/testsuite/gcc.dg/plugin/plugin.exp | 2 + gcc/testsuite/gcc.dg/plugin/taint-pr112974.c | 59 ++++++++++++++++++++ gcc/testsuite/gcc.dg/plugin/taint-pr112975.c | 53 ++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/plugin/taint-pr112974.c create mode 100644 gcc/testsuite/gcc.dg/plugin/taint-pr112975.c diff --git a/gcc/analyzer/sm-taint.cc b/gcc/analyzer/sm-taint.cc index c873c9ebd333..1d1e208fdf49 100644 --- a/gcc/analyzer/sm-taint.cc +++ b/gcc/analyzer/sm-taint.cc @@ -1109,6 +1109,14 @@ taint_state_machine::on_condition (sm_context *sm_ctxt, return; } + /* Strip away casts before considering LHS and RHS, to increase the + chance of detecting places where sanitization of a value may have + happened. */ + if (const svalue *inner = lhs->maybe_undo_cast ()) + lhs = inner; + if (const svalue *inner = rhs->maybe_undo_cast ()) + rhs = inner; + // TODO switch (op) { diff --git a/gcc/testsuite/gcc.dg/plugin/plugin.exp b/gcc/testsuite/gcc.dg/plugin/plugin.exp index c26dda1f324b..933f9a5850bc 100644 --- a/gcc/testsuite/gcc.dg/plugin/plugin.exp +++ b/gcc/testsuite/gcc.dg/plugin/plugin.exp @@ -172,6 +172,8 @@ set plugin_test_list [list \ taint-pr112850-too-complex.c \ taint-pr112850-unsanitized.c \ taint-pr112927.c \ + taint-pr112974.c \ + taint-pr112975.c \ taint-pr112977.c } \ { analyzer_cpython_plugin.c \ cpython-plugin-test-no-Python-h.c \ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-pr112974.c b/gcc/testsuite/gcc.dg/plugin/taint-pr112974.c new file mode 100644 index 000000000000..1af505326c78 --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/taint-pr112974.c @@ -0,0 +1,59 @@ +/* Reduced from false positive in Linux kernel in + drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c. */ + +/* { dg-do compile } */ +/* { dg-options "-fanalyzer" } */ +/* { dg-require-effective-target analyzer } */ + +typedef unsigned char __u8; +typedef unsigned short __u16; +extern unsigned int __max_logical_packages; +extern unsigned long +copy_from_user(void* to, const void* from, unsigned long n); +extern unsigned long +copy_to_user(void* to, const void* from, unsigned long n); +struct isst_tpmi_instance_count +{ + __u8 socket_id; + __u8 count; + __u16 valid_mask; +}; +struct tpmi_per_power_domain_info +{ + void* sst_base; +}; +struct tpmi_sst_struct +{ + int number_of_power_domains; + struct tpmi_per_power_domain_info* power_domain_info; +}; +struct tpmi_sst_common_struct +{ + int max_index; + struct tpmi_sst_struct** sst_inst; +}; +static struct tpmi_sst_common_struct isst_common; +int +isst_if_get_tpmi_instance_count(void* argp) +{ + struct isst_tpmi_instance_count tpmi_inst; + struct tpmi_sst_struct* sst_inst; + int i; + if (copy_from_user(&tpmi_inst, argp, sizeof(tpmi_inst))) + return -14; + if (tpmi_inst.socket_id >= (__max_logical_packages)) + return -22; + tpmi_inst.count = + isst_common.sst_inst[tpmi_inst.socket_id]->number_of_power_domains; /* { dg-bogus "use of attacker-controlled value as offset without upper-bounds checking" } */ + sst_inst = isst_common.sst_inst[tpmi_inst.socket_id]; + tpmi_inst.valid_mask = 0; + for (i = 0; i < sst_inst->number_of_power_domains; ++i) { + struct tpmi_per_power_domain_info* pd_info; + pd_info = &sst_inst->power_domain_info[i]; + if (pd_info->sst_base) + tpmi_inst.valid_mask |= ((((1UL))) << (i)); + } + if (copy_to_user(argp, &tpmi_inst, sizeof(tpmi_inst))) + return -14; + return 0; +} diff --git a/gcc/testsuite/gcc.dg/plugin/taint-pr112975.c b/gcc/testsuite/gcc.dg/plugin/taint-pr112975.c new file mode 100644 index 000000000000..9f312cb33487 --- /dev/null +++ b/gcc/testsuite/gcc.dg/plugin/taint-pr112975.c @@ -0,0 +1,53 @@ +/* Reduced from false positive in Linux kernel in + drivers/xen/privcmd.c. */ + +/* { dg-do compile } */ +/* { dg-options "-fanalyzer" } */ +/* { dg-require-effective-target analyzer } */ + +typedef __SIZE_TYPE__ size_t; +typedef unsigned short __u16; +typedef unsigned int gfp_t; +void +kfree(const void* objp); + +extern void * +__attribute__((__alloc_size__(1, 2))) +__attribute__((__malloc__)) +kcalloc(size_t n, size_t size, gfp_t flags); + +extern unsigned long +copy_from_user(void*, const void*, unsigned long); + +typedef __u16 domid_t; +struct privcmd_dm_op_buf +{ + void* uptr; + size_t size; +}; +struct privcmd_dm_op +{ + domid_t dom; + __u16 num; +}; +static unsigned int privcmd_dm_op_max_num = 16; +long +privcmd_ioctl_dm_op(void* udata) +{ + struct privcmd_dm_op kdata; + struct privcmd_dm_op_buf* kbufs; + if (copy_from_user(&kdata, udata, sizeof(kdata))) + return -14; + if (kdata.num == 0) + return 0; + if (kdata.num > privcmd_dm_op_max_num) + return -7; + kbufs = + kcalloc(kdata.num, /* { dg-bogus "attacker-controlled value" } */ + sizeof(*kbufs), + (((gfp_t)(0x400u | 0x800u)) | ((gfp_t)0x40u) | ((gfp_t)0x80u))); + if (!kbufs) + return -12; + kfree(kbufs); + return 0; +} From 6dedafe166cc02ae87b6a0699ad61ce3ffc46803 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs <ams@baylibre.com> Date: Thu, 22 Feb 2024 11:41:19 +0000 Subject: [PATCH 213/551] amdgcn: Prefer V32 on RDNA devices We run these devices in wavefrontsize64 for compatibility, but they actually only have 32-lane vectors, natively. If the upper part of a V64 is masked off (as it is in V32) then RDNA devices will skip execution of the upper part for most operations, so this adjustment shouldn't leave too much performance on the table. One exception is memory instructions, so full wavefrontsize32 support would be better. The advantage is that we avoid the missing V64 operations (such as permute and vec_extract). gcc/ChangeLog: * config/gcn/gcn.cc (gcn_vectorize_preferred_simd_mode): Prefer V32 on RDNA devices. --- gcc/config/gcn/gcn.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index 498146dcde94..efb73af50c44 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -5226,6 +5226,32 @@ gcn_vector_mode_supported_p (machine_mode mode) static machine_mode gcn_vectorize_preferred_simd_mode (scalar_mode mode) { + /* RDNA devices have 32-lane vectors with limited support for 64-bit vectors + (in particular, permute operations are only available for cases that don't + span the 32-lane boundary). + + From the RDNA3 manual: "Hardware may choose to skip either half if the + EXEC mask for that half is all zeros...". This means that preferring + 32-lanes is a good stop-gap until we have proper wave32 support. */ + if (TARGET_RDNA2_PLUS) + switch (mode) + { + case E_QImode: + return V32QImode; + case E_HImode: + return V32HImode; + case E_SImode: + return V32SImode; + case E_DImode: + return V32DImode; + case E_SFmode: + return V32SFmode; + case E_DFmode: + return V32DFmode; + default: + return word_mode; + } + switch (mode) { case E_QImode: From e194503b6f2cf5f1b819f4a8af9d16311a07e4f5 Mon Sep 17 00:00:00 2001 From: Andrew Stubbs <ams@baylibre.com> Date: Wed, 6 Mar 2024 15:54:46 +0000 Subject: [PATCH 214/551] amdgcn: Adjust GFX10/GFX11 cache coherency The RDNA devices have different cache architectures to the CDNA devices, and the differences go deeper than just the assembler mnemonics. I believe this patch is correct according to the documentation in the LLVM AMDGPU user guide (the ISA manual is less instructive), but I hadn't observed any real problems before (or after). gcc/ChangeLog: * config/gcn/gcn.md (*memory_barrier): Split into RDNA and !RDNA. (atomic_load<mode>): Adjust RDNA cache settings. (atomic_store<mode>): Likewise. (atomic_exchange<mode>): Likewise. --- gcc/config/gcn/gcn.md | 86 +++++++++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 31 deletions(-) diff --git a/gcc/config/gcn/gcn.md b/gcc/config/gcn/gcn.md index 3b51453aacaa..574c2f87e8c9 100644 --- a/gcc/config/gcn/gcn.md +++ b/gcc/config/gcn/gcn.md @@ -1960,11 +1960,19 @@ (define_insn "*memory_barrier" [(set (match_operand:BLK 0) (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))] - "" - "{buffer_wbinvl1_vol|buffer_gl0_inv}" + "!TARGET_RDNA2_PLUS" + "buffer_wbinvl1_vol" [(set_attr "type" "mubuf") (set_attr "length" "4")]) +(define_insn "*memory_barrier" + [(set (match_operand:BLK 0) + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))] + "TARGET_RDNA2_PLUS" + "buffer_gl1_inv\;buffer_gl0_inv" + [(set_attr "type" "mult") + (set_attr "length" "8")]) + ; FIXME: These patterns have been disabled as they do not seem to work ; reliably - they can cause hangs or incorrect results. ; TODO: flush caches according to memory model @@ -2094,9 +2102,13 @@ case 0: return "s_load%o0\t%0, %A1 glc\;s_waitcnt\tlgkmcnt(0)"; case 1: - return "flat_load%o0\t%0, %A1%O1 glc\;s_waitcnt\t0"; + return (TARGET_RDNA2 /* Not GFX11. */ + ? "flat_load%o0\t%0, %A1%O1 glc dlc\;s_waitcnt\t0" + : "flat_load%o0\t%0, %A1%O1 glc\;s_waitcnt\t0"); case 2: - return "global_load%o0\t%0, %A1%O1 glc\;s_waitcnt\tvmcnt(0)"; + return (TARGET_RDNA2 /* Not GFX11. */ + ? "global_load%o0\t%0, %A1%O1 glc dlc\;s_waitcnt\tvmcnt(0)" + : "global_load%o0\t%0, %A1%O1 glc\;s_waitcnt\tvmcnt(0)"); } break; case MEMMODEL_CONSUME: @@ -2108,15 +2120,21 @@ return "s_load%o0\t%0, %A1 glc\;s_waitcnt\tlgkmcnt(0)\;" "s_dcache_wb_vol"; case 1: - return (TARGET_RDNA2_PLUS + return (TARGET_RDNA2 + ? "flat_load%o0\t%0, %A1%O1 glc dlc\;s_waitcnt\t0\;" + "buffer_gl1_inv\;buffer_gl0_inv" + : TARGET_RDNA3 ? "flat_load%o0\t%0, %A1%O1 glc\;s_waitcnt\t0\;" - "buffer_gl0_inv" + "buffer_gl1_inv\;buffer_gl0_inv" : "flat_load%o0\t%0, %A1%O1 glc\;s_waitcnt\t0\;" "buffer_wbinvl1_vol"); case 2: - return (TARGET_RDNA2_PLUS + return (TARGET_RDNA2 + ? "global_load%o0\t%0, %A1%O1 glc dlc\;s_waitcnt\tvmcnt(0)\;" + "buffer_gl1_inv\;buffer_gl0_inv" + : TARGET_RDNA3 ? "global_load%o0\t%0, %A1%O1 glc\;s_waitcnt\tvmcnt(0)\;" - "buffer_gl0_inv" + "buffer_gl1_inv\;buffer_gl0_inv" : "global_load%o0\t%0, %A1%O1 glc\;s_waitcnt\tvmcnt(0)\;" "buffer_wbinvl1_vol"); } @@ -2130,15 +2148,21 @@ return "s_dcache_wb_vol\;s_load%o0\t%0, %A1 glc\;" "s_waitcnt\tlgkmcnt(0)\;s_dcache_inv_vol"; case 1: - return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;flat_load%o0\t%0, %A1%O1 glc\;" - "s_waitcnt\t0\;buffer_gl0_inv" + return (TARGET_RDNA2 + ? "buffer_gl1_inv\;buffer_gl0_inv\;flat_load%o0\t%0, %A1%O1 glc dlc\;" + "s_waitcnt\t0\;buffer_gl1_inv\;buffer_gl0_inv" + : TARGET_RDNA3 + ? "buffer_gl1_inv\;buffer_gl0_inv\;flat_load%o0\t%0, %A1%O1 glc\;" + "s_waitcnt\t0\;buffer_gl1_inv\;buffer_gl0_inv" : "buffer_wbinvl1_vol\;flat_load%o0\t%0, %A1%O1 glc\;" "s_waitcnt\t0\;buffer_wbinvl1_vol"); case 2: - return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;global_load%o0\t%0, %A1%O1 glc\;" - "s_waitcnt\tvmcnt(0)\;buffer_gl0_inv" + return (TARGET_RDNA2 + ? "buffer_gl1_inv\;buffer_gl0_inv\;global_load%o0\t%0, %A1%O1 glc dlc\;" + "s_waitcnt\tvmcnt(0)\;buffer_gl1_inv\;buffer_gl0_inv" + : TARGET_RDNA3 + ? "buffer_gl1_inv\;buffer_gl0_inv\;global_load%o0\t%0, %A1%O1 glc\;" + "s_waitcnt\tvmcnt(0)\;buffer_gl1_inv\;buffer_gl0_inv" : "buffer_wbinvl1_vol\;global_load%o0\t%0, %A1%O1 glc\;" "s_waitcnt\tvmcnt(0)\;buffer_wbinvl1_vol"); } @@ -2147,7 +2171,7 @@ gcc_unreachable (); } [(set_attr "type" "smem,flat,flat") - (set_attr "length" "20") + (set_attr "length" "28") (set_attr "gcn_version" "gcn5,*,gcn5") (set_attr "rdna" "no,*,*")]) @@ -2180,11 +2204,11 @@ return "s_dcache_wb_vol\;s_store%o1\t%1, %A0 glc"; case 1: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;flat_store%o1\t%A0, %1%O0 glc" + ? "buffer_gl1_inv\;buffer_gl0_inv\;flat_store%o1\t%A0, %1%O0 glc" : "buffer_wbinvl1_vol\;flat_store%o1\t%A0, %1%O0 glc"); case 2: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;global_store%o1\t%A0, %1%O0 glc" + ? "buffer_gl1_inv\;buffer_gl0_inv\;global_store%o1\t%A0, %1%O0 glc" : "buffer_wbinvl1_vol\;global_store%o1\t%A0, %1%O0 glc"); } break; @@ -2198,14 +2222,14 @@ "s_waitcnt\tlgkmcnt(0)\;s_dcache_inv_vol"; case 1: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;flat_store%o1\t%A0, %1%O0 glc\;" - "s_waitcnt\t0\;buffer_gl0_inv" + ? "buffer_gl1_inv\;buffer_gl0_inv\;flat_store%o1\t%A0, %1%O0 glc\;" + "s_waitcnt\t0\;buffer_gl1_inv\;buffer_gl0_inv" : "buffer_wbinvl1_vol\;flat_store%o1\t%A0, %1%O0 glc\;" "s_waitcnt\t0\;buffer_wbinvl1_vol"); case 2: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;global_store%o1\t%A0, %1%O0 glc\;" - "s_waitcnt\tvmcnt(0)\;buffer_gl0_inv" + ? "buffer_gl1_inv\;buffer_gl0_inv\;global_store%o1\t%A0, %1%O0 glc\;" + "s_waitcnt\tvmcnt(0)\;buffer_gl1_inv\;buffer_gl0_inv" : "buffer_wbinvl1_vol\;global_store%o1\t%A0, %1%O0 glc\;" "s_waitcnt\tvmcnt(0)\;buffer_wbinvl1_vol"); } @@ -2214,7 +2238,7 @@ gcc_unreachable (); } [(set_attr "type" "smem,flat,flat") - (set_attr "length" "20") + (set_attr "length" "28") (set_attr "gcn_version" "gcn5,*,gcn5") (set_attr "rdna" "no,*,*")]) @@ -2253,13 +2277,13 @@ case 1: return (TARGET_RDNA2_PLUS ? "flat_atomic_swap<X>\t%0, %1, %2 glc\;s_waitcnt\t0\;" - "buffer_gl0_inv" + "buffer_gl1_inv\;buffer_gl0_inv" : "flat_atomic_swap<X>\t%0, %1, %2 glc\;s_waitcnt\t0\;" "buffer_wbinvl1_vol"); case 2: return (TARGET_RDNA2_PLUS ? "global_atomic_swap<X>\t%0, %A1, %2%O1 glc\;" - "s_waitcnt\tvmcnt(0)\;buffer_gl0_inv" + "s_waitcnt\tvmcnt(0)\;buffer_gl1_inv\;buffer_gl0_inv" : "global_atomic_swap<X>\t%0, %A1, %2%O1 glc\;" "s_waitcnt\tvmcnt(0)\;buffer_wbinvl1_vol"); } @@ -2273,13 +2297,13 @@ "s_waitcnt\tlgkmcnt(0)"; case 1: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;flat_atomic_swap<X>\t%0, %1, %2 glc\;" + ? "buffer_gl1_inv\;buffer_gl0_inv\;flat_atomic_swap<X>\t%0, %1, %2 glc\;" "s_waitcnt\t0" : "buffer_wbinvl1_vol\;flat_atomic_swap<X>\t%0, %1, %2 glc\;" "s_waitcnt\t0"); case 2: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;" + ? "buffer_gl1_inv\;buffer_gl0_inv\;" "global_atomic_swap<X>\t%0, %A1, %2%O1 glc\;" "s_waitcnt\tvmcnt(0)" : "buffer_wbinvl1_vol\;" @@ -2297,15 +2321,15 @@ "s_waitcnt\tlgkmcnt(0)\;s_dcache_inv_vol"; case 1: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;flat_atomic_swap<X>\t%0, %1, %2 glc\;" - "s_waitcnt\t0\;buffer_gl0_inv" + ? "buffer_gl1_inv\;buffer_gl0_inv\;flat_atomic_swap<X>\t%0, %1, %2 glc\;" + "s_waitcnt\t0\;buffer_gl1_inv\;buffer_gl0_inv" : "buffer_wbinvl1_vol\;flat_atomic_swap<X>\t%0, %1, %2 glc\;" "s_waitcnt\t0\;buffer_wbinvl1_vol"); case 2: return (TARGET_RDNA2_PLUS - ? "buffer_gl0_inv\;" + ? "buffer_gl1_inv\;buffer_gl0_inv\;" "global_atomic_swap<X>\t%0, %A1, %2%O1 glc\;" - "s_waitcnt\tvmcnt(0)\;buffer_gl0_inv" + "s_waitcnt\tvmcnt(0)\;buffer_gl1_inv\;buffer_gl0_inv" : "buffer_wbinvl1_vol\;" "global_atomic_swap<X>\t%0, %A1, %2%O1 glc\;" "s_waitcnt\tvmcnt(0)\;buffer_wbinvl1_vol"); @@ -2315,7 +2339,7 @@ gcc_unreachable (); } [(set_attr "type" "smem,flat,flat") - (set_attr "length" "20") + (set_attr "length" "28") (set_attr "gcn_version" "gcn5,*,gcn5") (set_attr "rdna" "no,*,*")]) From 65107faad79354a75844d8dba053be6509200504 Mon Sep 17 00:00:00 2001 From: Patrick O'Neill <patrick@rivosinc.com> Date: Thu, 21 Mar 2024 09:47:21 -0700 Subject: [PATCH 215/551] RISC-V: Require a extension for ztso testcases with atomic insns Use dg_add_options riscv_a to add atomic extension when running compile tests on non-a targets. gcc/testsuite/ChangeLog: * gcc.target/riscv/amo-table-ztso-amo-add-1.c: Add dg_add_options riscv_a * gcc.target/riscv/amo-table-ztso-amo-add-2.c: Ditto. * gcc.target/riscv/amo-table-ztso-amo-add-3.c: Ditto. * gcc.target/riscv/amo-table-ztso-amo-add-4.c: Ditto. * gcc.target/riscv/amo-table-ztso-amo-add-5.c: Ditto. * gcc.target/riscv/amo-table-ztso-compare-exchange-1.c: Ditto. * gcc.target/riscv/amo-table-ztso-compare-exchange-2.c: Ditto. * gcc.target/riscv/amo-table-ztso-compare-exchange-3.c: Ditto. * gcc.target/riscv/amo-table-ztso-compare-exchange-4.c: Ditto. * gcc.target/riscv/amo-table-ztso-compare-exchange-5.c: Ditto. * gcc.target/riscv/amo-table-ztso-compare-exchange-6.c: Ditto. * gcc.target/riscv/amo-table-ztso-compare-exchange-7.c: Ditto. * gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c: Ditto. * gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c: Ditto. * gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c: Ditto. * gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c: Ditto. * gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c: Ditto. Signed-off-by: Patrick O'Neill <patrick@rivosinc.com> --- gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-1.c | 1 + gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-2.c | 1 + gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-3.c | 1 + gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-4.c | 1 + gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-5.c | 1 + .../gcc.target/riscv/amo-table-ztso-compare-exchange-1.c | 1 + .../gcc.target/riscv/amo-table-ztso-compare-exchange-2.c | 1 + .../gcc.target/riscv/amo-table-ztso-compare-exchange-3.c | 1 + .../gcc.target/riscv/amo-table-ztso-compare-exchange-4.c | 1 + .../gcc.target/riscv/amo-table-ztso-compare-exchange-5.c | 1 + .../gcc.target/riscv/amo-table-ztso-compare-exchange-6.c | 1 + .../gcc.target/riscv/amo-table-ztso-compare-exchange-7.c | 1 + .../gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c | 1 + .../gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c | 1 + .../gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c | 1 + .../gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c | 1 + .../gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c | 1 + 17 files changed, 17 insertions(+) diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-1.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-1.c index 65a4351025d5..a9edc33ff39d 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-1.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-1.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* Verify that atomic op mappings match the Ztso suggested mapping. */ /* { dg-options "-O3" } */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */ /* { dg-final { check-function-bodies "**" "" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-2.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-2.c index 03da6b04de09..ad843402bcc7 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-2.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-2.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* Verify that atomic op mappings the Ztso suggested mapping. */ /* { dg-options "-O3" } */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */ /* { dg-final { check-function-bodies "**" "" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-3.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-3.c index 695306e9d6f3..bdae5bb83a60 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-3.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-3.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* Verify that atomic op mappings match the Ztso suggested mapping. */ /* { dg-options "-O3" } */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */ /* { dg-final { check-function-bodies "**" "" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-4.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-4.c index e7e5ac7cc88f..815a72f1e564 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-4.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-4.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* Verify that atomic op mappings match the Ztso suggested mapping. */ /* { dg-options "-O3" } */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */ /* { dg-final { check-function-bodies "**" "" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-5.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-5.c index 457d0b12fbe6..eda6f01096ea 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-5.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-amo-add-5.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* Verify that atomic op mappings match the Ztso suggested mapping. */ /* { dg-options "-O3" } */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */ /* { dg-final { check-function-bodies "**" "" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-1.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-1.c index dd6b5c24aa01..b6315c45e85e 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-1.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that compare exchange mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-2.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-2.c index b0bafa3296e2..e487184f6cf9 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-2.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-2.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that compare exchange mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-3.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-3.c index 78cb8aa9748a..e9c925f0923c 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-3.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-3.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that compare exchange mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-4.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-4.c index 0656b84c7873..6b4545596339 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-4.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-4.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that compare exchange mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-5.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-5.c index 33d486c26cac..02c9f0ada778 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-5.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-5.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that compare exchange mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w.aqrl\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w.rl\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-6.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-6.c index f8331bfcd0d4..75abd5d3dfbd 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-6.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-6.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that compare exchange mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-7.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-7.c index b5c42e1df1df..33928c0eac41 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-7.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-compare-exchange-7.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that compare exchange mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w.aqrl\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w.rl\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c index 3ba69ebc3253..2a40d6b13761 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that subword atomic op mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c index 4f38ed3015c0..c79380f26117 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that subword atomic op mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c index e5bcb1275521..d1a94eccfa83 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that subword atomic op mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c index 316183c268b5..3d65bc2f64aa 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that subword atomic op mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w\t" 1 } } */ diff --git a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c index fc1aa8d94f13..10354387a137 100644 --- a/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c +++ b/gcc/testsuite/gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c @@ -1,5 +1,6 @@ /* { dg-do compile } */ /* Verify that subword atomic op mappings match the Ztso suggested mapping. */ +/* { dg-add-options riscv_a } */ /* { dg-add-options riscv_ztso } */ /* { dg-final { scan-assembler-times "lr.w.aqrl\t" 1 } } */ /* { dg-final { scan-assembler-times "sc.w.rl\t" 1 } } */ From 637e76b90e8b045c5e25206a41e3be55deace8d5 Mon Sep 17 00:00:00 2001 From: Kwok Cheung Yeung <kcyeung@baylibre.com> Date: Fri, 22 Mar 2024 18:07:43 +0000 Subject: [PATCH 216/551] openmp: Change to using a hashtab to lookup offload target addresses for indirect function calls A splay-tree was previously used to lookup equivalent target addresses for a given host address on offload targets. However, as splay-trees can modify their structure on lookup, they are not suitable for concurrent access from separate teams/threads without some form of locking. This patch changes the lookup data structure to a hashtab instead, which does not have these issues. The call to build_indirect_map to initialize the data structure is now called from just the first thread of the first team to avoid redundant calls to this function. 2024-03-22 Kwok Cheung Yeung <kcyeung@baylibre.com> libgomp/ * config/accel/target-indirect.c: Include string.h and hashtab.h. Remove include of splay-tree.h. Update comments. (splay_tree_prefix, splay_tree_c): Delete. (struct indirect_map_t): New. (hash_entry_type, htab_alloc, htab_free, htab_hash, htab_eq): New. (GOMP_INDIRECT_ADD_MAP): Remove volatile qualifier. (USE_SPLAY_TREE_LOOKUP): Rename to... (USE_HASHTAB_LOOKUP): ..this. (indirect_map, indirect_array): Delete. (indirect_htab): New. (build_indirect_map): Remove locking. Build indirect map using hashtab. (GOMP_target_map_indirect_ptr): Use indirect_htab to lookup target address. (GOMP_target_map_indirect_ptr): Remove volatile qualifier. * config/gcn/team.c (gomp_gcn_enter_kernel): Call build_indirect_map from first thread of first team only. * config/nvptx/team.c (gomp_nvptx_main): Likewise. * testsuite/libgomp.c-c++-common/declare-target-indirect-2.c (main): Add missing break statements. * testsuite/libgomp.fortran/declare-target-indirect-2.f90: Remove xfail. --- libgomp/config/accel/target-indirect.c | 83 ++++++++++--------- libgomp/config/gcn/team.c | 7 +- libgomp/config/nvptx/team.c | 9 +- .../declare-target-indirect-2.c | 14 ++-- .../declare-target-indirect-2.f90 | 1 - 5 files changed, 63 insertions(+), 51 deletions(-) diff --git a/libgomp/config/accel/target-indirect.c b/libgomp/config/accel/target-indirect.c index c60fd547cb67..cfef1ddbc495 100644 --- a/libgomp/config/accel/target-indirect.c +++ b/libgomp/config/accel/target-indirect.c @@ -25,60 +25,73 @@ <http://www.gnu.org/licenses/>. */ #include <assert.h> +#include <string.h> #include "libgomp.h" -#define splay_tree_prefix indirect -#define splay_tree_c -#include "splay-tree.h" +struct indirect_map_t +{ + void *host_addr; + void *target_addr; +}; + +typedef struct indirect_map_t *hash_entry_type; + +static inline void * htab_alloc (size_t size) { return gomp_malloc (size); } +static inline void htab_free (void *ptr) { free (ptr); } + +#include "hashtab.h" + +static inline hashval_t +htab_hash (hash_entry_type element) +{ + return hash_pointer (element->host_addr); +} -volatile void **GOMP_INDIRECT_ADDR_MAP = NULL; +static inline bool +htab_eq (hash_entry_type x, hash_entry_type y) +{ + return x->host_addr == y->host_addr; +} -/* Use a splay tree to lookup the target address instead of using a - linear search. */ -#define USE_SPLAY_TREE_LOOKUP +void **GOMP_INDIRECT_ADDR_MAP = NULL; -#ifdef USE_SPLAY_TREE_LOOKUP +/* Use a hashtab to lookup the target address instead of using a linear + search. */ +#define USE_HASHTAB_LOOKUP -static struct indirect_splay_tree_s indirect_map; -static indirect_splay_tree_node indirect_array = NULL; +#ifdef USE_HASHTAB_LOOKUP -/* Build the splay tree used for host->target address lookups. */ +static htab_t indirect_htab = NULL; + +/* Build the hashtab used for host->target address lookups. */ void build_indirect_map (void) { size_t num_ind_funcs = 0; - volatile void **map_entry; - static int lock = 0; /* == gomp_mutex_t lock; gomp_mutex_init (&lock); */ + void **map_entry; if (!GOMP_INDIRECT_ADDR_MAP) return; - gomp_mutex_lock (&lock); - - if (!indirect_array) + if (!indirect_htab) { /* Count the number of entries in the NULL-terminated address map. */ for (map_entry = GOMP_INDIRECT_ADDR_MAP; *map_entry; map_entry += 2, num_ind_funcs++); - /* Build splay tree for address lookup. */ - indirect_array = gomp_malloc (num_ind_funcs * sizeof (*indirect_array)); - indirect_splay_tree_node array = indirect_array; + /* Build hashtab for address lookup. */ + indirect_htab = htab_create (num_ind_funcs); map_entry = GOMP_INDIRECT_ADDR_MAP; - for (int i = 0; i < num_ind_funcs; i++, array++) + for (int i = 0; i < num_ind_funcs; i++, map_entry += 2) { - indirect_splay_tree_key k = &array->key; - k->host_addr = (uint64_t) *map_entry++; - k->target_addr = (uint64_t) *map_entry++; - array->left = NULL; - array->right = NULL; - indirect_splay_tree_insert (&indirect_map, array); + struct indirect_map_t element = { *map_entry, NULL }; + hash_entry_type *slot = htab_find_slot (&indirect_htab, &element, + INSERT); + *slot = (hash_entry_type) map_entry; } } - - gomp_mutex_unlock (&lock); } void * @@ -88,15 +101,11 @@ GOMP_target_map_indirect_ptr (void *ptr) if (!ptr) return ptr; - assert (indirect_array); - - struct indirect_splay_tree_key_s k; - indirect_splay_tree_key node = NULL; - - k.host_addr = (uint64_t) ptr; - node = indirect_splay_tree_lookup (&indirect_map, &k); + assert (indirect_htab); - return node ? (void *) node->target_addr : ptr; + struct indirect_map_t element = { ptr, NULL }; + hash_entry_type entry = htab_find (indirect_htab, &element); + return entry ? entry->target_addr : ptr; } #else @@ -115,7 +124,7 @@ GOMP_target_map_indirect_ptr (void *ptr) assert (GOMP_INDIRECT_ADDR_MAP); - for (volatile void **map_entry = GOMP_INDIRECT_ADDR_MAP; *map_entry; + for (void **map_entry = GOMP_INDIRECT_ADDR_MAP; *map_entry; map_entry += 2) if (*map_entry == ptr) return (void *) *(map_entry + 1); diff --git a/libgomp/config/gcn/team.c b/libgomp/config/gcn/team.c index 61e9c616b678..bd3df448b522 100644 --- a/libgomp/config/gcn/team.c +++ b/libgomp/config/gcn/team.c @@ -52,14 +52,15 @@ gomp_gcn_enter_kernel (void) { int threadid = __builtin_gcn_dim_pos (1); - /* Initialize indirect function support. */ - build_indirect_map (); - if (threadid == 0) { int numthreads = __builtin_gcn_dim_size (1); int teamid = __builtin_gcn_dim_pos(0); + /* Initialize indirect function support. */ + if (teamid == 0) + build_indirect_map (); + /* Set up the global state. Every team will do this, but that should be harmless. */ gomp_global_icv.nthreads_var = 16; diff --git a/libgomp/config/nvptx/team.c b/libgomp/config/nvptx/team.c index 0cf5dad39cac..d5361917a24d 100644 --- a/libgomp/config/nvptx/team.c +++ b/libgomp/config/nvptx/team.c @@ -60,9 +60,6 @@ gomp_nvptx_main (void (*fn) (void *), void *fn_data) asm ("mov.u32 %0, %%tid.y;" : "=r" (tid)); asm ("mov.u32 %0, %%ntid.y;" : "=r" (ntids)); - /* Initialize indirect function support. */ - build_indirect_map (); - if (tid == 0) { gomp_global_icv.nthreads_var = ntids; @@ -74,6 +71,12 @@ gomp_nvptx_main (void (*fn) (void *), void *fn_data) nvptx_thrs = alloca (ntids * sizeof (*nvptx_thrs)); memset (nvptx_thrs, 0, ntids * sizeof (*nvptx_thrs)); + /* Initialize indirect function support. */ + unsigned int block_id; + asm ("mov.u32 %0, %%ctaid.x;" : "=r" (block_id)); + if (block_id == 0) + build_indirect_map (); + /* Find the low-latency heap details .... */ uint32_t *shared_pool; uint32_t shared_pool_size = 0; diff --git a/libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-2.c b/libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-2.c index 9fe190efce8f..545f1a9fcbff 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-2.c +++ b/libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-2.c @@ -17,17 +17,17 @@ int main (void) { switch (i % 3) { - case 0: fn_ptr[i] = &foo; - case 1: fn_ptr[i] = &bar; - case 2: fn_ptr[i] = &baz; + case 0: fn_ptr[i] = &foo; break; + case 1: fn_ptr[i] = &bar; break; + case 2: fn_ptr[i] = &baz; break; } expected += (*fn_ptr[i]) (); } -#pragma omp target teams distribute parallel for reduction(+: x) \ - map (to: fn_ptr) map (tofrom: x) - for (int i = 0; i < N; i++) - x += (*fn_ptr[i]) (); + #pragma omp target teams distribute parallel for \ + reduction (+: x) map (to: fn_ptr) map (tofrom: x) + for (int i = 0; i < N; i++) + x += (*fn_ptr[i]) (); return x - expected; } diff --git a/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90 b/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90 index 34dd27788931..d3baa81dd079 100644 --- a/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90 +++ b/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90 @@ -1,5 +1,4 @@ ! { dg-do run } -! { dg-xfail-run-if "Requires libgomp bug fix pending review" { offload_device } } module m contains From 65b7d1862e11784a0ce67ab758e06dd8aa65b181 Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay <avr@gjlay.de> Date: Fri, 22 Mar 2024 17:29:21 +0100 Subject: [PATCH 217/551] AVR: Adjust message for SIGNAL and INTERRUPT usage gcc/ * config/avr/avr.cc (avr_set_current_function): Adjust diagnostic for deprecated SIGNAL and INTERRUPT usage without respective header. --- gcc/config/avr/avr.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/config/avr/avr.cc b/gcc/config/avr/avr.cc index 12c59668b4c8..4a5a921107bb 100644 --- a/gcc/config/avr/avr.cc +++ b/gcc/config/avr/avr.cc @@ -1495,14 +1495,20 @@ avr_set_current_function (tree decl) // Common problem is using "ISR" without first including avr/interrupt.h. const char *name = IDENTIFIER_POINTER (DECL_NAME (decl)); name = default_strip_name_encoding (name); - if (strcmp ("ISR", name) == 0 - || strcmp ("INTERRUPT", name) == 0 - || strcmp ("SIGNAL", name) == 0) + if (strcmp ("ISR", name) == 0) { warning_at (loc, OPT_Wmisspelled_isr, "%qs is a reserved identifier" " in AVR-LibC. Consider %<#include <avr/interrupt.h>%>" " before using the %qs macro", name, name); } + if (strcmp ("INTERRUPT", name) == 0 + || strcmp ("SIGNAL", name) == 0) + { + warning_at (loc, OPT_Wmisspelled_isr, "%qs is a deprecated identifier" + " in AVR-LibC. Consider %<#include <avr/interrupt.h>%>" + " or %<#include <compat/deprecated.h>%>" + " before using the %qs macro", name, name); + } #endif // AVR-LibC naming conventions /* Don't print the above diagnostics more than once. */ From c083a453dbe51853e26e02edd8b9346fb8618292 Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Fri, 22 Mar 2024 18:17:15 +0100 Subject: [PATCH 218/551] Fortran: no size check passing NULL() without MOLD argument [PR55978] gcc/fortran/ChangeLog: PR fortran/55978 * interface.cc (gfc_compare_actual_formal): Skip size check for NULL() actual without MOLD argument. gcc/testsuite/ChangeLog: PR fortran/55978 * gfortran.dg/null_actual_5.f90: New test. --- gcc/fortran/interface.cc | 4 ++ gcc/testsuite/gfortran.dg/null_actual_5.f90 | 76 +++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/null_actual_5.f90 diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc index 64b90550be2a..7b86a338bc15 100644 --- a/gcc/fortran/interface.cc +++ b/gcc/fortran/interface.cc @@ -3439,6 +3439,10 @@ gfc_compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal, if (f->sym->ts.type == BT_CLASS) goto skip_size_check; + /* Skip size check for NULL() actual without MOLD argument. */ + if (a->expr->expr_type == EXPR_NULL && a->expr->ts.type == BT_UNKNOWN) + goto skip_size_check; + actual_size = get_expr_storage_size (a->expr); formal_size = get_sym_storage_size (f->sym); if (actual_size != 0 && actual_size < formal_size diff --git a/gcc/testsuite/gfortran.dg/null_actual_5.f90 b/gcc/testsuite/gfortran.dg/null_actual_5.f90 new file mode 100644 index 000000000000..1198715b7c8d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/null_actual_5.f90 @@ -0,0 +1,76 @@ +! { dg-do compile } +! PR fortran/55978 +! +! Passing of NULL() with and without MOLD as actual argument +! +! Testcase derived from pr55978 comment#16 + +program pr55978_c16 + implicit none + + integer, pointer :: p(:) + integer, allocatable :: a(:) + character(10), pointer :: c + character(10), pointer :: cp(:) + + type t + integer, pointer :: p(:) + integer, allocatable :: a(:) + end type + + type(t) :: d + + ! (1) pointer + p => null() + call sub (p) + + ! (2) allocatable + call sub (a) + call sub (d%a) + + ! (3) pointer component + d%p => null () + call sub (d%p) + + ! (4) NULL + call sub (null (a)) ! OK + call sub (null (p)) ! OK + call sub (null (d%a)) ! OK + call sub (null (d%p)) ! OK + call sub (null ()) ! was erroneously rejected with: + ! Actual argument contains too few elements for dummy argument 'x' (1/4) + + call bla (null(c)) + call bla (null()) ! was erroneously rejected with: + ! Actual argument contains too few elements for dummy argument 'x' (1/10) + + call foo (null(cp)) + call foo (null()) + + call bar (null(cp)) + call bar (null()) ! was erroneously rejected with: + ! Actual argument contains too few elements for dummy argument 'x' (1/70) + +contains + + subroutine sub(x) + integer, intent(in), optional :: x(4) + if (present (x)) stop 1 + end + + subroutine bla(x) + character(len=10), intent(in), optional :: x + if (present (x)) stop 2 + end + + subroutine foo(x) + character(len=10), intent(in), optional :: x(:) + if (present (x)) stop 3 + end + + subroutine bar(x) + character(len=10), intent(in), optional :: x(7) + if (present (x)) stop 4 + end + +end From 31ef58b18da930b09ea0dfc1d6533c5ef97d8446 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Tue, 19 Mar 2024 14:02:06 +0000 Subject: [PATCH 219/551] libstdc++: Replace std::result_of with __invoke_result_t [PR114394] Replace std::result_of with std::invoke_result, as specified in the standard since C++17, to avoid deprecated warnings for std::result_of. We don't have __invoke_result_t in C++11 mode, so add it as an alias template for __invoke_result<>::type (which is what std::result_of uses as its base class, so there's no change in functionality). This fixes warnings given by Clang 18. libstdc++-v3/ChangeLog: PR libstdc++/114394 * include/std/functional (bind): Use __invoke_result_t instead of result_of::type. * include/std/type_traits (__invoke_result_t): New alias template. * testsuite/20_util/bind/ref_neg.cc: Adjust prune pattern. --- libstdc++-v3/include/std/functional | 2 +- libstdc++-v3/include/std/type_traits | 4 ++++ libstdc++-v3/testsuite/20_util/bind/ref_neg.cc | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index e02be00abe55..766558b3ce0e 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -556,7 +556,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Fn, typename _CallArgs, typename... _BArgs> using _Res_type_impl - = typename result_of< _Fn&(_Mu_type<_BArgs, _CallArgs>&&...) >::type; + = __invoke_result_t<_Fn&, _Mu_type<_BArgs, _CallArgs>&&...>; template<typename _CallArgs> using _Res_type = _Res_type_impl<_Functor, _CallArgs, _Bound_args...>; diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits index 21402fd8c132..b441bf9908f7 100644 --- a/libstdc++-v3/include/std/type_traits +++ b/libstdc++-v3/include/std/type_traits @@ -2664,6 +2664,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Functor, _ArgTypes... >::type { }; + + // __invoke_result_t (std::invoke_result_t for C++11) + template<typename _Fn, typename... _Args> + using __invoke_result_t = typename __invoke_result<_Fn, _Args...>::type; /// @endcond template<typename _Functor, typename... _ArgTypes> diff --git a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc index 4a1ed8dda5f7..2db9fa8276a6 100644 --- a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc +++ b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc @@ -50,7 +50,7 @@ void test02() // Ignore the reasons for deduction/substitution failure in the headers. // Arrange for the match to work on installed trees as well as build trees. -// { dg-prune-output "no type named 'type' in 'struct std::result_of" } +// { dg-prune-output "no type named 'type' in 'struct std::__invoke_result" } int main() { From ff773ac3d9c2bec21fa1a56cad99d63a1cf2a74f Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Fri, 22 Mar 2024 10:51:01 +0000 Subject: [PATCH 220/551] libstdc++: Reorder feature test macro definitions Put the C++23 generator and tuple_like ones before the C++26 ones. libstdc++-v3/ChangeLog: * include/bits/version.def (generator, tuple_like): Move earlier in the file. * include/bits/version.h: Regenerate. --- libstdc++-v3/include/bits/version.def | 34 +++++++++++------------ libstdc++-v3/include/bits/version.h | 40 +++++++++++++-------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 26e62c6a9b2a..5ad44941bff0 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1637,6 +1637,15 @@ ftms = { }; }; +ftms = { + name = generator; + values = { + v = 202207; + cxxmin = 23; + extra_cond = "__glibcxx_coroutine"; + }; +}; + ftms = { name = ios_noreplace; values = { @@ -1718,6 +1727,14 @@ ftms = { }; }; +ftms = { + name = tuple_like; + values = { + v = 202207; + cxxmin = 23; + }; +}; + ftms = { name = unreachable; values = { @@ -1771,23 +1788,6 @@ ftms = { }; }; -ftms = { - name = generator; - values = { - v = 202207; - cxxmin = 23; - extra_cond = "__glibcxx_coroutine"; - }; -}; - -ftms = { - name = tuple_like; - values = { - v = 202207; - cxxmin = 23; - }; -}; - // Standard test specifications. stds[97] = ">= 199711L"; stds[03] = ">= 199711L"; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index 23c8c09ab4bf..460a3e0116af 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -1823,6 +1823,16 @@ #endif /* !defined(__cpp_lib_forward_like) && defined(__glibcxx_want_forward_like) */ #undef __glibcxx_want_forward_like +#if !defined(__cpp_lib_generator) +# if (__cplusplus >= 202100L) && (__glibcxx_coroutine) +# define __glibcxx_generator 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator) +# define __cpp_lib_generator 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_generator) && defined(__glibcxx_want_generator) */ +#undef __glibcxx_want_generator + #if !defined(__cpp_lib_ios_noreplace) # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED # define __glibcxx_ios_noreplace 202207L @@ -1913,6 +1923,16 @@ #endif /* !defined(__cpp_lib_to_underlying) && defined(__glibcxx_want_to_underlying) */ #undef __glibcxx_want_to_underlying +#if !defined(__cpp_lib_tuple_like) +# if (__cplusplus >= 202100L) +# define __glibcxx_tuple_like 202207L +# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like) +# define __cpp_lib_tuple_like 202207L +# endif +# endif +#endif /* !defined(__cpp_lib_tuple_like) && defined(__glibcxx_want_tuple_like) */ +#undef __glibcxx_want_tuple_like + #if !defined(__cpp_lib_unreachable) # if (__cplusplus >= 202100L) # define __glibcxx_unreachable 202202L @@ -1973,24 +1993,4 @@ #endif /* !defined(__cpp_lib_to_string) && defined(__glibcxx_want_to_string) */ #undef __glibcxx_want_to_string -#if !defined(__cpp_lib_generator) -# if (__cplusplus >= 202100L) && (__glibcxx_coroutine) -# define __glibcxx_generator 202207L -# if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator) -# define __cpp_lib_generator 202207L -# endif -# endif -#endif /* !defined(__cpp_lib_generator) && defined(__glibcxx_want_generator) */ -#undef __glibcxx_want_generator - -#if !defined(__cpp_lib_tuple_like) -# if (__cplusplus >= 202100L) -# define __glibcxx_tuple_like 202207L -# if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like) -# define __cpp_lib_tuple_like 202207L -# endif -# endif -#endif /* !defined(__cpp_lib_tuple_like) && defined(__glibcxx_want_tuple_like) */ -#undef __glibcxx_want_tuple_like - #undef __glibcxx_want_all From 8539c5610a7c36099af2ea756d8bbfa398a40e0b Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Mon, 18 Mar 2024 13:09:52 +0000 Subject: [PATCH 221/551] libstdc++: Use feature test macros in <bits/stl_construct.h> The preprocessor checks for __cplusplus in <bits/stl_construct.h> should use the appropriate feature test macros instead of __cplusplus, namely __glibcxx_raw_memory_algorithms and __cpp_constexpr_dynamic_alloc. For the latter, we want to check the compiler macro not the library's __cpp_lib_constexpr_dynamic_alloc, because the latter is not defined for freestanding but std::construct_at needs to be. libstdc++-v3/ChangeLog: * include/bits/stl_construct.h (destroy_at, construct_at): Guard with feature test macros instead of just __cplusplus. --- libstdc++-v3/include/bits/stl_construct.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/include/bits/stl_construct.h b/libstdc++-v3/include/bits/stl_construct.h index 7c394072b50e..dc08fb7ea33d 100644 --- a/libstdc++-v3/include/bits/stl_construct.h +++ b/libstdc++-v3/include/bits/stl_construct.h @@ -74,7 +74,7 @@ namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION -#if __cplusplus >= 201703L +#if __glibcxx_raw_memory_algorithms // >= C++17 template <typename _Tp> _GLIBCXX20_CONSTEXPR inline void destroy_at(_Tp* __location) @@ -88,7 +88,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __location->~_Tp(); } -#if __cplusplus >= 202002L +#if __cpp_constexpr_dynamic_alloc // >= C++20 template<typename _Tp, typename... _Args> constexpr auto construct_at(_Tp* __location, _Args&&... __args) @@ -108,7 +108,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION inline void _Construct(_Tp* __p, _Args&&... __args) { -#if __cplusplus >= 202002L +#if __cpp_constexpr_dynamic_alloc // >= C++20 if (std::__is_constant_evaluated()) { // Allow std::_Construct to be used in constant expressions. @@ -145,7 +145,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _GLIBCXX14_CONSTEXPR inline void _Destroy(_Tp* __pointer) { -#if __cplusplus > 201703L +#if __cpp_constexpr_dynamic_alloc // >= C++20 std::destroy_at(__pointer); #else __pointer->~_Tp(); @@ -188,7 +188,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static_assert(is_destructible<_Value_type>::value, "value type is destructible"); #endif -#if __cplusplus >= 202002L +#if __cpp_constexpr_dynamic_alloc // >= C++20 if (std::__is_constant_evaluated()) return std::_Destroy_aux<false>::__destroy(__first, __last); #endif @@ -237,7 +237,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static_assert(is_destructible<_Value_type>::value, "value type is destructible"); #endif -#if __cplusplus >= 202002L +#if __cpp_constexpr_dynamic_alloc // >= C++20 if (std::__is_constant_evaluated()) return std::_Destroy_n_aux<false>::__destroy_n(__first, __count); #endif @@ -245,7 +245,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __destroy_n(__first, __count); } -#if __cplusplus >= 201703L +#if __glibcxx_raw_memory_algorithms // >= C++17 template <typename _ForwardIterator> _GLIBCXX20_CONSTEXPR inline void destroy(_ForwardIterator __first, _ForwardIterator __last) From 142cc4c223d695e515ed2504501b91d8a7ac6eb8 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Fri, 9 Feb 2024 17:06:20 +0000 Subject: [PATCH 222/551] libstdc++: Constrain std::vector default constructor [PR113841] This is needed to avoid errors outside the immediate context when evaluating is_default_constructible_v<vector<T, A>> when A is not default constructible. To avoid diagnostic regressions for 23_containers/vector/48101_neg.cc we need to make the std::allocator<cv T> partial specializations default constructible, which they probably should have been anyway. libstdc++-v3/ChangeLog: PR libstdc++/113841 * include/bits/allocator.h (allocator<cv T>): Add default constructor to partial specializations for cv-qualified types. * include/bits/stl_vector.h (_Vector_impl::_Vector_impl()): Constrain so that it's only present if the allocator is default constructible. * include/bits/stl_bvector.h (_Bvector_impl::_Bvector_impl()): Likewise. * testsuite/23_containers/vector/cons/113841.cc: New test. --- libstdc++-v3/include/bits/allocator.h | 3 ++ libstdc++-v3/include/bits/stl_bvector.h | 3 ++ libstdc++-v3/include/bits/stl_vector.h | 3 ++ .../23_containers/vector/cons/113841.cc | 34 +++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h index ff4f5b9137bf..9e75b37fce7f 100644 --- a/libstdc++-v3/include/bits/allocator.h +++ b/libstdc++-v3/include/bits/allocator.h @@ -254,6 +254,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { public: typedef _Tp value_type; + allocator() { } template<typename _Up> allocator(const allocator<_Up>&) { } }; @@ -262,6 +263,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { public: typedef _Tp value_type; + allocator() { } template<typename _Up> allocator(const allocator<_Up>&) { } }; @@ -270,6 +272,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { public: typedef _Tp value_type; + allocator() { } template<typename _Up> allocator(const allocator<_Up>&) { } }; /// @endcond diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index a3343d95b368..d567e26f4e43 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -593,6 +593,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _GLIBCXX20_CONSTEXPR _Bvector_impl() _GLIBCXX_NOEXCEPT_IF( is_nothrow_default_constructible<_Bit_alloc_type>::value) +#if __cpp_concepts + requires is_default_constructible_v<_Bit_alloc_type> +#endif : _Bit_alloc_type() { } diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index a8d387f40a19..31169711a489 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -135,6 +135,9 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _GLIBCXX20_CONSTEXPR _Vector_impl() _GLIBCXX_NOEXCEPT_IF( is_nothrow_default_constructible<_Tp_alloc_type>::value) +#if __cpp_lib_concepts + requires is_default_constructible_v<_Tp_alloc_type> +#endif : _Tp_alloc_type() { } diff --git a/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc b/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc new file mode 100644 index 000000000000..a7721d27f796 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/cons/113841.cc @@ -0,0 +1,34 @@ +// { dg-do compile { target c++20 } } + +#include <vector> + +template<typename T> +struct Alloc +{ + using value_type = T; + + Alloc(int) { } // not default constructible + + template<typename U> Alloc(const Alloc<U>&) { } + + T* allocate(std::size_t n) { return std::allocator<T>().allocate(n); } + void deallocate(T* p, std::size_t n) { std::allocator<T>().deallocate(p, n); } +}; + +template<typename T> struct wrap { T t; }; + +template<typename T> void do_adl(T&) { } + +void test_pr113841() +{ + using test_type = std::vector<int, Alloc<int>>; + std::pair<const int, wrap<test_type>>* h = nullptr; + do_adl(h); +} + +void test_pr113841_bool() +{ + using test_type = std::vector<bool, Alloc<bool>>; + std::pair<const int, wrap<test_type>>* h = nullptr; + do_adl(h); +} From c2e28df90a1640cebadef6c6c8ab5ea964071bb1 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 21 Mar 2024 13:25:15 +0000 Subject: [PATCH 223/551] libstdc++: Destroy allocators in re-inserted container nodes [PR114401] The allocator objects in container node handles were not being destroyed after the node was re-inserted into a container. They are stored in a union and so need to be explicitly destroyed when the node becomes empty. The containers were zeroing the node handle's pointer, which makes it empty, causing the handle's destructor to think there's nothign to clean up. Add a new member function to the node handle which destroys the allocator and zeros the pointer. Change the containers to call that instead of just changing the pointer manually. We can also remove the _M_empty member of the union which is not necessary. libstdc++-v3/ChangeLog: PR libstdc++/114401 * include/bits/hashtable.h (_Hashtable::_M_reinsert_node): Call release() on node handle instead of just zeroing its pointer. (_Hashtable::_M_reinsert_node_multi): Likewise. (_Hashtable::_M_merge_unique): Likewise. (_Hashtable::_M_merge_multi): Likewise. * include/bits/node_handle.h (_Node_handle_common::release()): New member function. (_Node_handle_common::_Optional_alloc::_M_empty): Remove unnecessary union member. (_Node_handle_common): Declare _Hashtable as a friend. * include/bits/stl_tree.h (_Rb_tree::_M_reinsert_node_unique): Call release() on node handle instead of just zeroing its pointer. (_Rb_tree::_M_reinsert_node_equal): Likewise. (_Rb_tree::_M_reinsert_node_hint_unique): Likewise. (_Rb_tree::_M_reinsert_node_hint_equal): Likewise. * testsuite/23_containers/multiset/modifiers/114401.cc: New test. * testsuite/23_containers/set/modifiers/114401.cc: New test. * testsuite/23_containers/unordered_multiset/modifiers/114401.cc: New test. * testsuite/23_containers/unordered_set/modifiers/114401.cc: New test. --- libstdc++-v3/include/bits/hashtable.h | 12 +- libstdc++-v3/include/bits/node_handle.h | 19 ++- libstdc++-v3/include/bits/stl_tree.h | 12 +- .../multiset/modifiers/114401.cc | 125 +++++++++++++++++ .../23_containers/set/modifiers/114401.cc | 125 +++++++++++++++++ .../unordered_multiset/modifiers/114401.cc | 126 ++++++++++++++++++ .../unordered_set/modifiers/114401.cc | 126 ++++++++++++++++++ 7 files changed, 530 insertions(+), 15 deletions(-) create mode 100644 libstdc++-v3/testsuite/23_containers/multiset/modifiers/114401.cc create mode 100644 libstdc++-v3/testsuite/23_containers/set/modifiers/114401.cc create mode 100644 libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/114401.cc create mode 100644 libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/114401.cc diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h index c3ef7a0a3d5a..cd3e1ac297c5 100644 --- a/libstdc++-v3/include/bits/hashtable.h +++ b/libstdc++-v3/include/bits/hashtable.h @@ -1036,7 +1036,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // DR 1189. // reserve, if present, comes from _Rehash_base. -#if __cplusplus > 201402L +#if __glibcxx_node_extract // >= C++17 /// Re-insert an extracted node into a container with unique keys. insert_return_type _M_reinsert_node(node_type&& __nh) @@ -1078,7 +1078,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __ret.position = _M_insert_unique_node(__bkt, __code, __nh._M_ptr); - __nh._M_ptr = nullptr; + __nh.release(); __ret.inserted = true; } } @@ -1098,7 +1098,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION auto __code = this->_M_hash_code(__k); auto __ret = _M_insert_multi_node(__hint._M_cur, __code, __nh._M_ptr); - __nh._M_ptr = nullptr; + __nh.release(); return __ret; } @@ -1200,7 +1200,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { auto __nh = __src.extract(__pos); _M_insert_unique_node(__bkt, __code, __nh._M_ptr, __n_elt); - __nh._M_ptr = nullptr; + __nh.release(); __n_elt = 1; } else if (__n_elt != 1) @@ -1227,10 +1227,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION = _M_src_hash_code(__src.hash_function(), __k, *__pos._M_cur); auto __nh = __src.extract(__pos); __hint = _M_insert_multi_node(__hint, __code, __nh._M_ptr)._M_cur; - __nh._M_ptr = nullptr; + __nh.release(); } } -#endif // C++17 +#endif // C++17 __glibcxx_node_extract private: // Helper rehash method used when keys are unique. diff --git a/libstdc++-v3/include/bits/node_handle.h b/libstdc++-v3/include/bits/node_handle.h index bd9b1afc8d7b..2d8e47c50621 100644 --- a/libstdc++-v3/include/bits/node_handle.h +++ b/libstdc++-v3/include/bits/node_handle.h @@ -169,6 +169,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_ptr = nullptr; } + // Destroys the allocator. Does not deallocate or destroy the node. + // Precondition: !empty() + // Postcondition: empty() + void + release() noexcept + { + _M_alloc.release(); + _M_ptr = nullptr; + } + protected: typename _AllocTraits::pointer _M_ptr; @@ -220,9 +230,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __tmp; } - struct _Empty { }; - - [[__no_unique_address__]] _Empty _M_empty; [[__no_unique_address__]] _NodeAlloc _M_alloc; }; @@ -232,6 +239,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename _Compare, typename _ValueAlloc> friend class _Rb_tree; + template<typename _Key2, typename _Value2, typename _ValueAlloc, + typename _ExtractKey, typename _Equal, + typename _Hash, typename _RangeHash, typename _Unused, + typename _RehashPolicy, typename _Traits> + friend class _Hashtable; + /// @endcond }; diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h index 6f470f04f6ab..978093fc5877 100644 --- a/libstdc++-v3/include/bits/stl_tree.h +++ b/libstdc++-v3/include/bits/stl_tree.h @@ -1431,7 +1431,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_move_assign(_Rb_tree&, false_type); #endif -#if __cplusplus > 201402L +#if __glibcxx_node_extract // >= C++17 public: /// Re-insert an extracted node. insert_return_type @@ -1449,7 +1449,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { __ret.position = _M_insert_node(__res.first, __res.second, __nh._M_ptr); - __nh._M_ptr = nullptr; + __nh.release(); __ret.inserted = true; } else @@ -1477,7 +1477,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); else __ret = _M_insert_equal_lower_node(__nh._M_ptr); - __nh._M_ptr = nullptr; + __nh.release(); } return __ret; } @@ -1496,7 +1496,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__res.second) { __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); - __nh._M_ptr = nullptr; + __nh.release(); } else __ret = iterator(__res.first); @@ -1519,7 +1519,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __ret = _M_insert_node(__res.first, __res.second, __nh._M_ptr); else __ret = _M_insert_equal_lower_node(__nh._M_ptr); - __nh._M_ptr = nullptr; + __nh.release(); } return __ret; } @@ -1595,7 +1595,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } } } -#endif // C++17 +#endif // C++17 node_extract friend bool operator==(const _Rb_tree& __x, const _Rb_tree& __y) diff --git a/libstdc++-v3/testsuite/23_containers/multiset/modifiers/114401.cc b/libstdc++-v3/testsuite/23_containers/multiset/modifiers/114401.cc new file mode 100644 index 000000000000..630e18e287c6 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/multiset/modifiers/114401.cc @@ -0,0 +1,125 @@ +// { dg-do run { target c++17 } } + +// PR libstdc++/114401 allocator destructor omitted when reinserting node_handle + +#include <set> +#include <memory> +#include <testsuite_hooks.h> + +template<typename T> +struct Alloc +{ + using value_type = T; + using propagate_on_container_copy_assignment = std::true_type; + using propagate_on_container_move_assignment = std::true_type; + using propagate_on_container_swap = std::true_type; + + Alloc(int identity) : id(std::make_shared<int>(identity)) { } + + template<typename U> + Alloc(const Alloc<U> a) : id(a.id) { } + + T* allocate(std::size_t n) { return std::allocator<T>().allocate(n); } + void deallocate(T* p, std::size_t n) { std::allocator<T>().deallocate(p, n); } + + template<typename U> + friend bool + operator==(const Alloc& a, const Alloc<U>& a2) + { return a.id == a2.id; } + + template<typename U> + friend bool + operator!=(const Alloc& a, const Alloc<U>& a2) + { return !(a == a2); } + + std::shared_ptr<int> id; +}; + +using test_type = std::multiset<int, std::less<int>, Alloc<int>>; + +void +test_node_ops() +{ + test_type s1({1,3,5}, Alloc<int>(1)); + test_type s2({2,4,6,8}, Alloc<int>(2)); + VERIFY( s1.get_allocator() != s2.get_allocator() ); + + auto node_a = s1.extract(1); + VERIFY( ! node_a.empty() ); + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + + node_a = std::move(node_a); // self-move + VERIFY( node_a.empty() ); + + swap(node_a, node_a); // self-swap + VERIFY( node_a.empty() ); + + auto node_b = s2.extract(2); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + node_a = std::move(node_b); // empty = !empty + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(!empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + node_a = s1.extract(3); // !empty = !empty + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + node_b = s2.extract(0); // empty = empty + VERIFY( node_b.empty() ); + node_b = s2.extract(6); // empty = !empty + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(!empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.get_allocator() == s1.get_allocator() ); + + node_a = {}; + node_b = std::move(node_a); // !empty = empty + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); +} + +void +test_alloc_lifetime() +{ + Alloc<int> a(1); + test_type s({1,2,3}, a); + VERIFY( a.id.use_count() == 2 ); // a and the copy in s + + s.insert(s.extract(1)); + VERIFY( a.id.use_count() == 2 ); + + s.insert(s.begin(), s.extract(2)); + VERIFY( a.id.use_count() == 2 ); + + auto node = s.extract(1); + VERIFY( a.id.use_count() == 3 ); + node = s.extract(0); + VERIFY( a.id.use_count() == 2 ); + + s.insert(std::move(node)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type(s)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type({4,5,6}, a)); + VERIFY( a.id.use_count() == 2 ); +} + +int main() +{ + test_node_ops(); + test_alloc_lifetime(); +} diff --git a/libstdc++-v3/testsuite/23_containers/set/modifiers/114401.cc b/libstdc++-v3/testsuite/23_containers/set/modifiers/114401.cc new file mode 100644 index 000000000000..f0a06a8c1a28 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/set/modifiers/114401.cc @@ -0,0 +1,125 @@ +// { dg-do run { target c++17 } } + +// PR libstdc++/114401 allocator destructor omitted when reinserting node_handle + +#include <set> +#include <memory> +#include <testsuite_hooks.h> + +template<typename T> +struct Alloc +{ + using value_type = T; + using propagate_on_container_copy_assignment = std::true_type; + using propagate_on_container_move_assignment = std::true_type; + using propagate_on_container_swap = std::true_type; + + Alloc(int identity) : id(std::make_shared<int>(identity)) { } + + template<typename U> + Alloc(const Alloc<U> a) : id(a.id) { } + + T* allocate(std::size_t n) { return std::allocator<T>().allocate(n); } + void deallocate(T* p, std::size_t n) { std::allocator<T>().deallocate(p, n); } + + template<typename U> + friend bool + operator==(const Alloc& a, const Alloc<U>& a2) + { return a.id == a2.id; } + + template<typename U> + friend bool + operator!=(const Alloc& a, const Alloc<U>& a2) + { return !(a == a2); } + + std::shared_ptr<int> id; +}; + +using test_type = std::set<int, std::less<int>, Alloc<int>>; + +void +test_node_ops() +{ + test_type s1({1,3,5}, Alloc<int>(1)); + test_type s2({2,4,6,8}, Alloc<int>(2)); + VERIFY( s1.get_allocator() != s2.get_allocator() ); + + auto node_a = s1.extract(1); + VERIFY( ! node_a.empty() ); + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + + node_a = std::move(node_a); // self-move + VERIFY( node_a.empty() ); + + swap(node_a, node_a); // self-swap + VERIFY( node_a.empty() ); + + auto node_b = s2.extract(2); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + node_a = std::move(node_b); // empty = !empty + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(!empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + node_a = s1.extract(3); // !empty = !empty + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + node_b = s2.extract(0); // empty = empty + VERIFY( node_b.empty() ); + node_b = s2.extract(6); // empty = !empty + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(!empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.get_allocator() == s1.get_allocator() ); + + node_a = {}; + node_b = std::move(node_a); // !empty = empty + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); +} + +void +test_alloc_lifetime() +{ + Alloc<int> a(1); + test_type s({1,2,3}, a); + VERIFY( a.id.use_count() == 2 ); // a and the copy in s + + s.insert(s.extract(1)); + VERIFY( a.id.use_count() == 2 ); + + s.insert(s.begin(), s.extract(2)); + VERIFY( a.id.use_count() == 2 ); + + auto node = s.extract(1); + VERIFY( a.id.use_count() == 3 ); + node = s.extract(0); + VERIFY( a.id.use_count() == 2 ); + + s.insert(std::move(node)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type(s)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type({4,5,6}, a)); + VERIFY( a.id.use_count() == 2 ); +} + +int main() +{ + test_node_ops(); + test_alloc_lifetime(); +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/114401.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/114401.cc new file mode 100644 index 000000000000..0a6ea77bf317 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/modifiers/114401.cc @@ -0,0 +1,126 @@ +// { dg-do run { target c++17 } } + +// PR libstdc++/114401 allocator destructor omitted when reinserting node_handle + +#include <unordered_set> +#include <memory> +#include <testsuite_hooks.h> + +template<typename T> +struct Alloc +{ + using value_type = T; + using propagate_on_container_copy_assignment = std::true_type; + using propagate_on_container_move_assignment = std::true_type; + using propagate_on_container_swap = std::true_type; + + Alloc(int identity) : id(std::make_shared<int>(identity)) { } + + template<typename U> + Alloc(const Alloc<U> a) : id(a.id) { } + + T* allocate(std::size_t n) { return std::allocator<T>().allocate(n); } + void deallocate(T* p, std::size_t n) { std::allocator<T>().deallocate(p, n); } + + template<typename U> + friend bool + operator==(const Alloc& a, const Alloc<U>& a2) + { return a.id == a2.id; } + + template<typename U> + friend bool + operator!=(const Alloc& a, const Alloc<U>& a2) + { return !(a == a2); } + + std::shared_ptr<int> id; +}; + +using test_type + = std::unordered_multiset<int, std::hash<int>, std::equal_to<int>, Alloc<int>>; + +void +test_node_ops() +{ + test_type s1({1,3,5}, 3, Alloc<int>(1)); + test_type s2({2,4,6,8}, 4, Alloc<int>(2)); + VERIFY( s1.get_allocator() != s2.get_allocator() ); + + auto node_a = s1.extract(1); + VERIFY( ! node_a.empty() ); + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + + node_a = std::move(node_a); // self-move + VERIFY( node_a.empty() ); + + swap(node_a, node_a); // self-swap + VERIFY( node_a.empty() ); + + auto node_b = s2.extract(2); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + node_a = std::move(node_b); // empty = !empty + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(!empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + node_a = s1.extract(3); // !empty = !empty + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + node_b = s2.extract(0); // empty = empty + VERIFY( node_b.empty() ); + node_b = s2.extract(6); // empty = !empty + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(!empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.get_allocator() == s1.get_allocator() ); + + node_a = {}; + node_b = std::move(node_a); // !empty = empty + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); +} + +void +test_alloc_lifetime() +{ + Alloc<int> a(1); + test_type s({1,2,3}, 3, a); + VERIFY( a.id.use_count() == 2 ); // a and the copy in s + + s.insert(s.extract(1)); + VERIFY( a.id.use_count() == 2 ); + + s.insert(s.begin(), s.extract(2)); + VERIFY( a.id.use_count() == 2 ); + + auto node = s.extract(1); + VERIFY( a.id.use_count() == 3 ); + node = s.extract(0); + VERIFY( a.id.use_count() == 2 ); + + s.insert(std::move(node)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type(s)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type({4,5,6}, 3, a)); + VERIFY( a.id.use_count() == 2 ); +} + +int main() +{ + test_node_ops(); + test_alloc_lifetime(); +} diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/114401.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/114401.cc new file mode 100644 index 000000000000..3ae2f2d5b5c3 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/114401.cc @@ -0,0 +1,126 @@ +// { dg-do run { target c++17 } } + +// PR libstdc++/114401 allocator destructor omitted when reinserting node_handle + +#include <unordered_set> +#include <memory> +#include <testsuite_hooks.h> + +template<typename T> +struct Alloc +{ + using value_type = T; + using propagate_on_container_copy_assignment = std::true_type; + using propagate_on_container_move_assignment = std::true_type; + using propagate_on_container_swap = std::true_type; + + Alloc(int identity) : id(std::make_shared<int>(identity)) { } + + template<typename U> + Alloc(const Alloc<U> a) : id(a.id) { } + + T* allocate(std::size_t n) { return std::allocator<T>().allocate(n); } + void deallocate(T* p, std::size_t n) { std::allocator<T>().deallocate(p, n); } + + template<typename U> + friend bool + operator==(const Alloc& a, const Alloc<U>& a2) + { return a.id == a2.id; } + + template<typename U> + friend bool + operator!=(const Alloc& a, const Alloc<U>& a2) + { return !(a == a2); } + + std::shared_ptr<int> id; +}; + +using test_type + = std::unordered_set<int, std::hash<int>, std::equal_to<int>, Alloc<int>>; + +void +test_node_ops() +{ + test_type s1({1,3,5}, 3, Alloc<int>(1)); + test_type s2({2,4,6,8}, 4, Alloc<int>(2)); + VERIFY( s1.get_allocator() != s2.get_allocator() ); + + auto node_a = s1.extract(1); + VERIFY( ! node_a.empty() ); + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + + node_a = std::move(node_a); // self-move + VERIFY( node_a.empty() ); + + swap(node_a, node_a); // self-swap + VERIFY( node_a.empty() ); + + auto node_b = s2.extract(2); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + node_a = std::move(node_b); // empty = !empty + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(!empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.empty() ); + + node_a = s1.extract(3); // !empty = !empty + VERIFY( node_a.get_allocator() == s1.get_allocator() ); + node_b = s2.extract(0); // empty = empty + VERIFY( node_b.empty() ); + node_b = s2.extract(6); // empty = !empty + VERIFY( node_b.get_allocator() == s2.get_allocator() ); + + swap(node_a, node_b); // swap(!empty, !empty) + VERIFY( node_a.get_allocator() == s2.get_allocator() ); + VERIFY( node_b.get_allocator() == s1.get_allocator() ); + + node_a = {}; + node_b = std::move(node_a); // !empty = empty + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); + + swap(node_a, node_b); // swap(empty, empty) + VERIFY( node_a.empty() ); + VERIFY( node_b.empty() ); +} + +void +test_alloc_lifetime() +{ + Alloc<int> a(1); + test_type s({1,2,3}, 3, a); + VERIFY( a.id.use_count() == 2 ); // a and the copy in s + + s.insert(s.extract(1)); + VERIFY( a.id.use_count() == 2 ); + + s.insert(s.begin(), s.extract(2)); + VERIFY( a.id.use_count() == 2 ); + + auto node = s.extract(1); + VERIFY( a.id.use_count() == 3 ); + node = s.extract(0); + VERIFY( a.id.use_count() == 2 ); + + s.insert(std::move(node)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type(s)); + VERIFY( a.id.use_count() == 2 ); + + s.merge(test_type({4,5,6}, 3, a)); + VERIFY( a.id.use_count() == 2 ); +} + +int main() +{ + test_node_ops(); + test_alloc_lifetime(); +} From e8985864a385992aa26e7c8373faa190e2ced17d Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sat, 23 Mar 2024 00:17:26 +0000 Subject: [PATCH 224/551] Daily bump. --- gcc/ChangeLog | 133 +++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 19 +++++ gcc/cp/ChangeLog | 6 ++ gcc/fortran/ChangeLog | 33 ++++++++ gcc/m2/ChangeLog | 6 ++ gcc/testsuite/ChangeLog | 161 ++++++++++++++++++++++++++++++++++++++++ libgcc/ChangeLog | 6 ++ libgomp/ChangeLog | 33 ++++++++ libstdc++-v3/ChangeLog | 56 ++++++++++++++ 10 files changed, 454 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bf57c846db94..ec40a1f919c1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,136 @@ +2024-03-22 Georg-Johann Lay <avr@gjlay.de> + + * config/avr/avr.cc (avr_set_current_function): Adjust diagnostic + for deprecated SIGNAL and INTERRUPT usage without respective header. + +2024-03-22 Andrew Stubbs <ams@baylibre.com> + + * config/gcn/gcn.md (*memory_barrier): Split into RDNA and !RDNA. + (atomic_load<mode>): Adjust RDNA cache settings. + (atomic_store<mode>): Likewise. + (atomic_exchange<mode>): Likewise. + +2024-03-22 Andrew Stubbs <ams@baylibre.com> + + * config/gcn/gcn.cc (gcn_vectorize_preferred_simd_mode): Prefer V32 on + RDNA devices. + +2024-03-22 Andrew Stubbs <ams@baylibre.com> + + * config.gcc (amdgcn): Add gfx1103 entries. + * config/gcn/gcn-hsa.h (NO_XNACK): Likewise. + (gcn_local_sym_hash): Likewise. + * config/gcn/gcn-opts.h (enum processor_type): Likewise. + (TARGET_GFX1103): New macro. + * config/gcn/gcn.cc (gcn_option_override): Handle gfx1103. + (gcn_omp_device_kind_arch_isa): Likewise. + (output_file_start): Likewise. + (gcn_hsa_declare_function_name): Use TARGET_RDNA3, not just gfx1100. + * config/gcn/gcn.h (TARGET_CPU_CPP_BUILTINS): Add __gfx1103__. + * config/gcn/gcn.opt: Add gfx1103. + * config/gcn/mkoffload.cc (EF_AMDGPU_MACH_AMDGCN_GFX1103): New. + (main): Handle gfx1103. + * config/gcn/t-omp-device: Add gfx1103 isa. + * doc/install.texi (amdgcn): Add gfx1103. + * doc/invoke.texi (-march): Likewise. + +2024-03-22 Andrew Stubbs <ams@baylibre.com> + + * dojump.cc (do_compare_rtx_and_jump): Clear excess bits in vector + bitmasks. + (do_compare_and_jump): Remove now-redundant similar code. + * internal-fn.cc (expand_fn_using_insn): Clear excess bits in vector + bitmasks. + (add_mask_and_len_args): Likewise. + +2024-03-22 Pan Li <pan2.li@intel.com> + + * config/riscv/riscv-c.cc (riscv_cpu_cpp_builtins): Add pre-define + macro __riscv_v_fixed_vlen when zvl. + * config/riscv/riscv.cc (riscv_handle_rvv_vector_bits_attribute): + New static func to take care of the RVV types decorated by + the attributes. + +2024-03-22 Andrew Pinski <quic_apinski@quicinc.com> + + PR c/109619 + * builtins.cc (fold_builtin_1): Use error_operand_p + instead of checking against ERROR_MARK. + (fold_builtin_2): Likewise. + (fold_builtin_3): Likewise. + +2024-03-22 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/111736 + * ubsan.cc (ubsan_expand_null_ifn, instrument_mem_ref): Avoid + SANITIZE_NULL instrumentation for non-generic address spaces + for which targetm.addr_space.zero_address_valid (as) is true. + +2024-03-22 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114405 + * gimple-lower-bitint.cc (bitint_large_huge::lower_mergeable_stmt): + Set rprec to limb_prec rather than 0 if tprec is divisible by + limb_prec. In the last bf_cur handling, set rprec to (tprec + bo_bit) + % limb_prec rather than tprec % limb_prec and use just rprec instead + of rprec + bo_bit. For build_bit_field_ref offset, divide + (tprec + bo_bit) by limb_prec rather than just tprec. + +2024-03-22 Christoph Müllner <christoph.muellner@vrull.eu> + + PR target/114194 + * config/riscv/vector-iterators.md: Split VI into VI_FRAC and VI_NOFRAC. + Only include VI_NOFRAC in V_VLS without TARGET_XTHEADVECTOR. + +2024-03-22 Jeff Law <jlaw@ventanamicro.com> + + * config/riscv/riscv.cc (riscv_expand_prologue): Add missing stack + tie for scalable and final stack adjustment if needed. + Co-authored-by: Raphael Zinsly <rzinsly@ventanamicro.com> + +2024-03-22 Pan Li <pan2.li@intel.com> + + PR target/114352 + * common/config/riscv/riscv-common.cc (struct riscv_func_target_info): + New struct for func decl and target name. + (struct riscv_func_target_hasher): New hasher for hash table mapping + from the fn_decl to fn_target_name. + (riscv_func_decl_hash): New func to compute the hash for fn_decl. + (riscv_func_target_hasher::hash): New func to impl hash interface. + (riscv_func_target_hasher::equal): New func to impl equal interface. + (riscv_cmdline_subset_list): New static var for cmdline subset list. + (riscv_func_target_table_lazy_init): New func to lazy init the func + target hash table. + (riscv_func_target_get): New func to get target name from hash table. + (riscv_func_target_put): New func to put target name into hash table. + (riscv_func_target_remove_and_destory): New func to remove target + info from the hash table and destory it. + (riscv_parse_arch_string): Set the static var cmdline_subset_list. + * config/riscv/riscv-subset.h (riscv_cmdline_subset_list): New static + var for cmdline subset list. + (riscv_func_target_get): New func decl. + (riscv_func_target_put): Ditto. + (riscv_func_target_remove_and_destory): Ditto. + * config/riscv/riscv-target-attr.cc (riscv_target_attr_parser::parse_arch): + Take cmdline_subset_list instead of current_subset_list when clone. + (riscv_process_target_attr): Record the func target info to hash table. + (riscv_option_valid_attribute_p): Add new arg tree fndel. + * config/riscv/riscv.cc (riscv_declare_function_name): Consume the + func target info and print the arch message. + +2024-03-22 Pan Li <pan2.li@intel.com> + + PR target/114352 + * common/config/riscv/riscv-common.cc (riscv_subset_list::parse): + Replace implied, combine and check to func finalize. + (riscv_subset_list::finalize): New func impl to take care of + implied, combine ext and related checks. + * config/riscv/riscv-subset.h: Add func decl for finalize. + * config/riscv/riscv-target-attr.cc (riscv_target_attr_parser::parse_arch): + Finalize the ext before return succeed. + * config/riscv/riscv.cc (riscv_set_current_function): Reinit the + machine mode before when set cur function. + 2024-03-21 Andrew Stubbs <ams@baylibre.com> * config/gcn/gcn.cc (gcn_expand_builtin_1): Comment correction. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 81064a78fd43..18f6e74bb9b4 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240322 +20240323 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 38efe591d7a7..1468d2a6dc22 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,22 @@ +2024-03-22 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/112974 + PR analyzer/112975 + * sm-taint.cc (taint_state_machine::on_condition): Strip away + casts before considering LHS and RHS, to increase the chance of + detecting places where sanitization of a value may have happened. + +2024-03-22 David Malcolm <dmalcolm@redhat.com> + + * sm-taint.cc: Include "diagnostic-format-sarif.h". + (bounds_to_str): New. + (taint_diagnostic::maybe_add_sarif_properties): New. + (tainted_offset::tainted_offset): Add "offset" param. + (tainted_offset::maybe_add_sarif_properties): New. + (tainted_offset::m_offset): New. + (region_model::check_region_for_taint): Pass offset to + tainted_offset ctor. + 2024-03-21 David Malcolm <dmalcolm@redhat.com> PR analyzer/113619 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1dc50e00e865..9d49e8f64e7e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2024-03-22 Marek Polacek <polacek@redhat.com> + + PR c++/59465 + * init.cc (can_init_array_with_p): New. + (perform_member_init): Check it. + 2024-03-21 Marek Polacek <polacek@redhat.com> PR c++/110323 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index bed34fb427a8..8efc457f896b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,36 @@ +2024-03-22 Harald Anlauf <anlauf@gmx.de> + + PR fortran/55978 + * interface.cc (gfc_compare_actual_formal): Skip size check for + NULL() actual without MOLD argument. + +2024-03-22 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/107426 + * gfortran.h (gfc_save_module_list, gfc_restore_old_module_list): + New declarations. + * module.cc (old_module_list_tail): New global variable. + (gfc_save_module_list, gfc_restore_old_module_list): New functions. + (gfc_use_modules): Set module_list and old_module_list_tail. + * parse.cc (next_statement): Save module_list before doing any work. + (reject_statement): Restore module_list to its saved value. + +2024-03-22 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/111781 + * symbol.cc (gfc_get_procedure_ns, gfc_get_spec_ns): New functions. + * gfortran.h (gfc_get_procedure_ns, gfc_get_spec ns): Declare them. + (gfc_is_formal_arg): Remove. + * expr.cc (check_restricted): Remove special case allowing local + variable in dummy argument bound expressions. Use gfc_get_spec_ns + to get the right namespace. + * resolve.cc (gfc_is_formal_arg, formal_arg_flag): Remove. + (gfc_resolve_formal_arglist): Set gfc_current_ns. Quit loop and + restore gfc_current_ns instead of early returning. + (resolve_symbol): Factor common array spec resolution code to... + (resolve_symbol_array_spec): ... this new function. Additionnally + set and restore gfc_current_ns. + 2024-03-21 Harald Anlauf <anlauf@gmx.de> PR fortran/30802 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index 0ffce6b065ed..f0b0616d3d26 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,9 @@ +2024-03-22 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114422 + * gm2-compiler/M2Quads.mod (BuildConstructor): Add escape + character. + 2024-03-21 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/113836 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d7296f65a5fd..31d82e7cda84 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,164 @@ +2024-03-22 Harald Anlauf <anlauf@gmx.de> + + PR fortran/55978 + * gfortran.dg/null_actual_5.f90: New test. + +2024-03-22 Patrick O'Neill <patrick@rivosinc.com> + + * gcc.target/riscv/amo-table-ztso-amo-add-1.c: Add + dg_add_options riscv_a + * gcc.target/riscv/amo-table-ztso-amo-add-2.c: Ditto. + * gcc.target/riscv/amo-table-ztso-amo-add-3.c: Ditto. + * gcc.target/riscv/amo-table-ztso-amo-add-4.c: Ditto. + * gcc.target/riscv/amo-table-ztso-amo-add-5.c: Ditto. + * gcc.target/riscv/amo-table-ztso-compare-exchange-1.c: Ditto. + * gcc.target/riscv/amo-table-ztso-compare-exchange-2.c: Ditto. + * gcc.target/riscv/amo-table-ztso-compare-exchange-3.c: Ditto. + * gcc.target/riscv/amo-table-ztso-compare-exchange-4.c: Ditto. + * gcc.target/riscv/amo-table-ztso-compare-exchange-5.c: Ditto. + * gcc.target/riscv/amo-table-ztso-compare-exchange-6.c: Ditto. + * gcc.target/riscv/amo-table-ztso-compare-exchange-7.c: Ditto. + * gcc.target/riscv/amo-table-ztso-subword-amo-add-1.c: Ditto. + * gcc.target/riscv/amo-table-ztso-subword-amo-add-2.c: Ditto. + * gcc.target/riscv/amo-table-ztso-subword-amo-add-3.c: Ditto. + * gcc.target/riscv/amo-table-ztso-subword-amo-add-4.c: Ditto. + * gcc.target/riscv/amo-table-ztso-subword-amo-add-5.c: Ditto. + +2024-03-22 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/112974 + PR analyzer/112975 + * gcc.dg/plugin/plugin.exp (plugin_test_list): Add + taint-pr112974.c and taint-pr112975.c to analyzer_kernel_plugin.c. + * gcc.dg/plugin/taint-pr112974.c: New test. + * gcc.dg/plugin/taint-pr112975.c: New test. + +2024-03-22 Marek Polacek <polacek@redhat.com> + + PR c++/59465 + * g++.dg/init/array62.C: New test. + * g++.dg/init/array63.C: New test. + * g++.dg/init/array64.C: New test. + +2024-03-22 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/107426 + * gfortran.dg/pr89943_3.f90: Update error pattern. + * gfortran.dg/pr89943_4.f90: Likewise. + * gfortran.dg/use_31.f90: New test. + +2024-03-22 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/111781 + * gfortran.dg/spec_expr_8.f90: New test. + * gfortran.dg/spec_expr_9.f90: New test. + +2024-03-22 Mikael Morin <mikael@gcc.gnu.org> + + * gfortran.dg/graphite/pr107865.f90: Declare array bound variable(s) + as dummy argument(s). + * gfortran.dg/pr101267.f90: Likewise. + * gfortran.dg/pr112404.f90: Likewise. + * gfortran.dg/pr78061.f: Likewise. + * gfortran.dg/pr79315.f90: Likewise. + * gfortran.dg/vect/pr90681.f: Likewise. + * gfortran.dg/vect/pr97761.f90: Likewise. + * gfortran.dg/vect/pr99746.f90: Likewise. + +2024-03-22 Pan Li <pan2.li@intel.com> + + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-1.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-10.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-11.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-12.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-13.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-14.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-15.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-16.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-17.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-18.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-2.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-3.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-4.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-5.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-6.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-7.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-8.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits-9.c: New test. + * gcc.target/riscv/rvv/base/riscv_rvv_vector_bits.h: New test. + +2024-03-22 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * gcc.dg/tree-ssa/backprop-6.c: On s390 we also have a copysign + optab for long double. Thus, scan 3 instead of 2 times for it. + +2024-03-22 Jakub Jelinek <jakub@redhat.com> + + PR c++/112724 + * c-c++-common/gomp/depobj-3.c: Add -fexcess-precision=fast as + dg-additional-options. + +2024-03-22 Andrew Pinski <quic_apinski@quicinc.com> + + PR c/109619 + * gcc.dg/redecl-26.c: New test. + +2024-03-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR tree-optimization/96147 + * gcc.dg/vect/bb-slp-32.c (dg-final): Remove. + +2024-03-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR target/114150 + * gcc.target/i386/avx512cd-vpbroadcastmb2q-2.c: Skip on + Solaris/x86 with as. + * gcc.target/i386/avx512cd-vpbroadcastmw2d-2.c: Likewise. + +2024-03-22 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/111736 + * gcc.dg/ubsan/pr111736.c: New test. + +2024-03-22 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114405 + * gcc.dg/torture/bitint-66.c: New test. + +2024-03-22 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * gcc.dg/tree-ssa/abs-4.c: On s390 we also have a copysign optab + for long double. Thus, scan 3 instead of 2 times for it. + +2024-03-22 Christoph Müllner <christoph.muellner@vrull.eu> + + PR target/114194 + * gcc.target/riscv/rvv/xtheadvector/pr114194.c: New test. + +2024-03-22 Pan Li <pan2.li@intel.com> + + PR target/114352 + * gcc.target/riscv/rvv/base/pr114352-3.c: New test. + +2024-03-22 Pan Li <pan2.li@intel.com> + + PR target/114352 + * gcc.target/riscv/rvv/base/pr114352-1.c: New test. + * gcc.target/riscv/rvv/base/pr114352-2.c: New test. + +2024-03-22 liuhongt <hongtao.liu@intel.com> + + PR tree-optimization/114396 + * gcc.target/i386/pr114396.c: Move to... + * gcc.c-torture/execute/pr114396.c: ...here. + +2024-03-22 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114422 + * gm2/iso/fail/badset.mod: New test. + * gm2/iso/fail/badset2.mod: New test. + * gm2/iso/fail/badset3.mod: New test. + 2024-03-21 David Malcolm <dmalcolm@redhat.com> PR analyzer/113619 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index f18401e137f2..4e8c3b3c8477 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2024-03-22 Thomas Neumann <tneumann@users.sourceforge.net> + + PR libgcc/111731 + * unwind-dw2-fde.c: Split unwind ranges if they contain the + unwind table. + 2024-03-21 Jakub Jelinek <jakub@redhat.com> PR libgcc/114397 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 09bc8bdc97da..49949fc790ba 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,36 @@ +2024-03-22 Kwok Cheung Yeung <kcyeung@baylibre.com> + + * config/accel/target-indirect.c: Include string.h and hashtab.h. + Remove include of splay-tree.h. Update comments. + (splay_tree_prefix, splay_tree_c): Delete. + (struct indirect_map_t): New. + (hash_entry_type, htab_alloc, htab_free, htab_hash, htab_eq): New. + (GOMP_INDIRECT_ADD_MAP): Remove volatile qualifier. + (USE_SPLAY_TREE_LOOKUP): Rename to... + (USE_HASHTAB_LOOKUP): ..this. + (indirect_map, indirect_array): Delete. + (indirect_htab): New. + (build_indirect_map): Remove locking. Build indirect map using + hashtab. + (GOMP_target_map_indirect_ptr): Use indirect_htab to lookup target + address. + (GOMP_target_map_indirect_ptr): Remove volatile qualifier. + * config/gcn/team.c (gomp_gcn_enter_kernel): Call build_indirect_map + from first thread of first team only. + * config/nvptx/team.c (gomp_nvptx_main): Likewise. + * testsuite/libgomp.c-c++-common/declare-target-indirect-2.c (main): + Add missing break statements. + * testsuite/libgomp.fortran/declare-target-indirect-2.f90: Remove + xfail. + +2024-03-22 Andrew Stubbs <ams@baylibre.com> + + * plugin/plugin-gcn.c (EF_AMDGPU_MACH): GFX1103. + (gcn_gfx1103_s): New. + (isa_hsa_name): Handle gfx1103. + (isa_code): Likewise. + (max_isa_vgprs): Likewise. + 2024-03-14 Thomas Schwinge <tschwinge@baylibre.com> * testsuite/libgomp.oacc-fortran/acc-memcpy.f90: Fix 'char' diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 6aeab3a7e62a..51fede8ddb1d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,59 @@ +2024-03-22 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114401 + * include/bits/hashtable.h (_Hashtable::_M_reinsert_node): Call + release() on node handle instead of just zeroing its pointer. + (_Hashtable::_M_reinsert_node_multi): Likewise. + (_Hashtable::_M_merge_unique): Likewise. + (_Hashtable::_M_merge_multi): Likewise. + * include/bits/node_handle.h (_Node_handle_common::release()): + New member function. + (_Node_handle_common::_Optional_alloc::_M_empty): Remove + unnecessary union member. + (_Node_handle_common): Declare _Hashtable as a friend. + * include/bits/stl_tree.h (_Rb_tree::_M_reinsert_node_unique): + Call release() on node handle instead of just zeroing its + pointer. + (_Rb_tree::_M_reinsert_node_equal): Likewise. + (_Rb_tree::_M_reinsert_node_hint_unique): Likewise. + (_Rb_tree::_M_reinsert_node_hint_equal): Likewise. + * testsuite/23_containers/multiset/modifiers/114401.cc: New test. + * testsuite/23_containers/set/modifiers/114401.cc: New test. + * testsuite/23_containers/unordered_multiset/modifiers/114401.cc: New test. + * testsuite/23_containers/unordered_set/modifiers/114401.cc: New test. + +2024-03-22 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/113841 + * include/bits/allocator.h (allocator<cv T>): Add default + constructor to partial specializations for cv-qualified types. + * include/bits/stl_vector.h (_Vector_impl::_Vector_impl()): + Constrain so that it's only present if the allocator is default + constructible. + * include/bits/stl_bvector.h (_Bvector_impl::_Bvector_impl()): + Likewise. + * testsuite/23_containers/vector/cons/113841.cc: New test. + +2024-03-22 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/stl_construct.h (destroy_at, construct_at): Guard + with feature test macros instead of just __cplusplus. + +2024-03-22 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/version.def (generator, tuple_like): Move earlier + in the file. + * include/bits/version.h: Regenerate. + +2024-03-22 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114394 + * include/std/functional (bind): Use __invoke_result_t instead + of result_of::type. + * include/std/type_traits (__invoke_result_t): New alias + template. + * testsuite/20_util/bind/ref_neg.cc: Adjust prune pattern. + 2024-03-20 François Dumont <fdumont@gcc.gnu.org> * include/bits/version.def (null_iterators): Remove extra_cond. From 7a01cc711f33530436712a5bfd18f8457a68ea1f Mon Sep 17 00:00:00 2001 From: Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp> Date: Fri, 22 Mar 2024 08:36:30 +0900 Subject: [PATCH 225/551] xtensa: Add supplementary split pattern for "*addsubx" int test(int a) { return a * 4 + 30000; } In the example above, since Xtensa has instructions to add register value scaled by 2, 4 or 8 (and corresponding define_insns), we would expect them to be used but not, because it is transformed before reaching the RTL generation pass as below: int test(int a) { return (a + 7500) * 4; } Fortunately, the RTL combination pass tries a splitting pattern that matches the first example, so it is easy to solve by defining that pattern. gcc/ChangeLog: * config/xtensa/xtensa.md: Add new split pattern described above. --- gcc/config/xtensa/xtensa.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gcc/config/xtensa/xtensa.md b/gcc/config/xtensa/xtensa.md index 5cdf4dffe700..fbe40ec671ad 100644 --- a/gcc/config/xtensa/xtensa.md +++ b/gcc/config/xtensa/xtensa.md @@ -194,6 +194,20 @@ (set_attr "mode" "SI") (set_attr "length" "3")]) +(define_split + [(set (match_operand:SI 0 "register_operand") + (plus:SI (ashift:SI (match_operand:SI 1 "register_operand") + (match_operand:SI 3 "addsubx_operand")) + (match_operand:SI 2 "const_int_operand")))] + "TARGET_ADDX && can_create_pseudo_p ()" + [(set (match_dup 0) + (plus:SI (ashift:SI (match_dup 1) + (match_dup 3)) + (match_dup 2)))] +{ + operands[2] = force_reg (SImode, operands[2]); +}) + (define_expand "adddi3" [(set (match_operand:DI 0 "register_operand") (plus:DI (match_operand:DI 1 "register_operand") From 8fc5593df8e0d36cc5bd8ea21097a491a634a866 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Sat, 23 Mar 2024 11:17:44 +0100 Subject: [PATCH 226/551] predcom: Punt for steps which aren't multiples of access size [PR111683] On the following testcases, there is no overlap between data references within a single iteration, but the data references have size which is twice as large as the step, which means the data references overlap with the next iteration which predcom doesn't take into account. As discussed in the PR, even if the reference size is smaller than step, if step isn't a multiple of the reference size, there could be overlaps with some other iteration later on. The initial version of the patch regressed (test still passed, but predcom didn't optimize anymore) pr71083.c which has a packed char, short structure and was reading/writing the short 2 bytes in there with step 3. The following patch deals with that by retrying for COMPONENT_REFs also the aggregate sizes etc., so that it then compares 3 bytes against step 3. In make check-gcc/check-g++ this patch I believe affects code generation for only the 2 new testcases according to statistics I've gathered. 2024-03-23 Jakub Jelinek <jakub@redhat.com> PR middle-end/111683 * tree-predcom.cc (pcom_worker::suitable_component_p): If has_write and comp_step is RS_NONZERO, return false if any reference in the component doesn't have DR_STEP a multiple of access size. * gcc.dg/pr111683-1.c: New test. * gcc.dg/pr111683-2.c: New test. --- gcc/testsuite/gcc.dg/pr111683-1.c | 22 +++++++++++++++++++++ gcc/testsuite/gcc.dg/pr111683-2.c | 27 +++++++++++++++++++++++++ gcc/tree-predcom.cc | 33 ++++++++++++++++++++++++++++++- 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr111683-1.c create mode 100644 gcc/testsuite/gcc.dg/pr111683-2.c diff --git a/gcc/testsuite/gcc.dg/pr111683-1.c b/gcc/testsuite/gcc.dg/pr111683-1.c new file mode 100644 index 000000000000..e0dc189a91a6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr111683-1.c @@ -0,0 +1,22 @@ +/* PR middle-end/111683 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +long long b[6] = { 3, 4, 5, 6, 7, 8 }, c[16]; +long long d[9] = { 3, 7, 12, 18, 22, 26, 21, 15, 8 }; +typedef long long U __attribute__ ((vector_size(16), may_alias, aligned(1))); +typedef long long V __attribute__ ((vector_size(16), may_alias)); + +int +main () +{ + for (int f = 0; f < 6; f++) + { + *(U *) &c[f] = *(U *) &c[f] + (V) { b[f], b[f] }; + *(U *) &c[f + 2] = *(U *) &c[f + 2] + (V) { b[f], b[f] }; + } + for (int f = 0; f < 9; f++) + if (c[f] != d[f]) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr111683-2.c b/gcc/testsuite/gcc.dg/pr111683-2.c new file mode 100644 index 000000000000..6861d157e55f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr111683-2.c @@ -0,0 +1,27 @@ +/* PR middle-end/111683 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +int b[6] = { 3, 4, 5, 6, 7, 8 }, c[12]; +int d[16] = { 0, 1, 3, 6, 10, 14, 12, 9, 5, 0, 0, 0 }; + +int +main () +{ + int i; + if (sizeof (int) * 2 != sizeof (long long)) + return 0; + for (i = 0; i < 6; i++) + { + long long a; + __builtin_memcpy (&a, &c[i], sizeof (a)); + a += (((long long) i) << (sizeof (int) * __CHAR_BIT__)) + i; + __builtin_memcpy (&c[i], &a, sizeof (a)); + __builtin_memcpy (&a, &c[i + 2], sizeof (a)); + a += (((long long) i) << (sizeof (int) * __CHAR_BIT__)) + i; + __builtin_memcpy (&c[i + 2], &a, sizeof (a)); + } + if (__builtin_memcmp (&c[0], &d[0], sizeof (c))) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-predcom.cc b/gcc/tree-predcom.cc index 3e1e1090e82c..75a4c85164c7 100644 --- a/gcc/tree-predcom.cc +++ b/gcc/tree-predcom.cc @@ -1102,8 +1102,39 @@ pcom_worker::suitable_component_p (struct component *comp) gcc_assert (ok); first->offset = 0; - for (i = 1; comp->refs.iterate (i, &a); i++) + FOR_EACH_VEC_ELT (comp->refs, i, a) { + if (has_write && comp->comp_step == RS_NONZERO) + { + /* Punt for non-invariant references where step isn't a multiple + of reference size. If step is smaller than reference size, + it overlaps the access in next iteration, if step is larger, + but not multiple of the access size, there could be overlap + in some later iteration. There might be more latent issues + about this in predcom or data reference analysis. If the + reference is a COMPONENT_REF, also check if step isn't a + multiple of the containg aggregate size. See PR111683. */ + tree ref = DR_REF (a->ref); + tree step = DR_STEP (a->ref); + if (TREE_CODE (ref) == COMPONENT_REF + && DECL_BIT_FIELD (TREE_OPERAND (ref, 1))) + ref = TREE_OPERAND (ref, 0); + do + { + tree sz = TYPE_SIZE_UNIT (TREE_TYPE (ref)); + if (TREE_CODE (sz) != INTEGER_CST) + return false; + if (wi::multiple_of_p (wi::to_offset (step), + wi::to_offset (sz), SIGNED)) + break; + if (TREE_CODE (ref) != COMPONENT_REF) + return false; + ref = TREE_OPERAND (ref, 0); + } + while (1); + } + if (i == 0) + continue; /* Polynomial offsets are no use, since we need to know the gap between iteration numbers at compile time. */ poly_widest_int offset; From f92cf8cbbe199bda70d0dd7893e8c8836777e2d0 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Sat, 23 Mar 2024 11:19:09 +0100 Subject: [PATCH 227/551] bitint: Handle complex types in build_bitint_stmt_ssa_conflicts [PR114425] The task of the build_bitint_stmt_ssa_conflicts hook for tree-ssa-coalesce.cc next to special casing the multiplication/division/modulo is to ignore statements with large/huge _BitInt lhs which isn't in names bitmap and on the other side pretend all uses of the stmt are used in a later stmt (single user of that SSA_NAME or perhaps single user of lhs of the single user etc.) where the lowering will actually emit the code. Unfortunately the function wasn't handling COMPLEX_TYPE of the large/huge BITINT_TYPE, while the FE doesn't really support such types, they are used under the hood for __builtin_{add,sub,mul}_overflow{,_p}, they are also present or absent from the names bitmap and should be treated the same. Without this patch, the operands of .ADD_OVERFLOW were incorrectly pretended to be used right in that call statement rather than on the cast stmt from IMAGPART_EXPR of .ADD_OVERFLOW return value to some integral type. 2024-03-23 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114425 * gimple-lower-bitint.cc (build_bitint_stmt_ssa_conflicts): Handle _Complex large/huge _BitInt types like the large/huge _BitInt types. * gcc.dg/torture/bitint-67.c: New test. --- gcc/gimple-lower-bitint.cc | 71 ++++++++++++++---------- gcc/testsuite/gcc.dg/torture/bitint-67.c | 29 ++++++++++ 2 files changed, 72 insertions(+), 28 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-67.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 8c268005dfd0..6f13c657c6b8 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -5902,20 +5902,25 @@ build_bitint_stmt_ssa_conflicts (gimple *stmt, live_track *live, if (is_gimple_assign (stmt)) { lhs = gimple_assign_lhs (stmt); - if (TREE_CODE (lhs) == SSA_NAME - && TREE_CODE (TREE_TYPE (lhs)) == BITINT_TYPE - && bitint_precision_kind (TREE_TYPE (lhs)) >= bitint_prec_large) + if (TREE_CODE (lhs) == SSA_NAME) { - if (!bitmap_bit_p (names, SSA_NAME_VERSION (lhs))) - return; - switch (gimple_assign_rhs_code (stmt)) + tree type = TREE_TYPE (lhs); + if (TREE_CODE (type) == COMPLEX_TYPE) + type = TREE_TYPE (type); + if (TREE_CODE (type) == BITINT_TYPE + && bitint_precision_kind (type) >= bitint_prec_large) { - case MULT_EXPR: - case TRUNC_DIV_EXPR: - case TRUNC_MOD_EXPR: - muldiv_p = true; - default: - break; + if (!bitmap_bit_p (names, SSA_NAME_VERSION (lhs))) + return; + switch (gimple_assign_rhs_code (stmt)) + { + case MULT_EXPR: + case TRUNC_DIV_EXPR: + case TRUNC_MOD_EXPR: + muldiv_p = true; + default: + break; + } } } } @@ -5947,27 +5952,37 @@ build_bitint_stmt_ssa_conflicts (gimple *stmt, live_track *live, auto_vec<tree, 16> worklist; FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_USE) - if (TREE_CODE (TREE_TYPE (var)) == BITINT_TYPE - && bitint_precision_kind (TREE_TYPE (var)) >= bitint_prec_large) - { - if (bitmap_bit_p (names, SSA_NAME_VERSION (var))) - use (live, var); - else - worklist.safe_push (var); - } + { + tree type = TREE_TYPE (var); + if (TREE_CODE (type) == COMPLEX_TYPE) + type = TREE_TYPE (type); + if (TREE_CODE (type) == BITINT_TYPE + && bitint_precision_kind (type) >= bitint_prec_large) + { + if (bitmap_bit_p (names, SSA_NAME_VERSION (var))) + use (live, var); + else + worklist.safe_push (var); + } + } while (worklist.length () > 0) { tree s = worklist.pop (); FOR_EACH_SSA_TREE_OPERAND (var, SSA_NAME_DEF_STMT (s), iter, SSA_OP_USE) - if (TREE_CODE (TREE_TYPE (var)) == BITINT_TYPE - && bitint_precision_kind (TREE_TYPE (var)) >= bitint_prec_large) - { - if (bitmap_bit_p (names, SSA_NAME_VERSION (var))) - use (live, var); - else - worklist.safe_push (var); - } + { + tree type = TREE_TYPE (var); + if (TREE_CODE (type) == COMPLEX_TYPE) + type = TREE_TYPE (type); + if (TREE_CODE (type) == BITINT_TYPE + && bitint_precision_kind (type) >= bitint_prec_large) + { + if (bitmap_bit_p (names, SSA_NAME_VERSION (var))) + use (live, var); + else + worklist.safe_push (var); + } + } } if (muldiv_p) diff --git a/gcc/testsuite/gcc.dg/torture/bitint-67.c b/gcc/testsuite/gcc.dg/torture/bitint-67.c new file mode 100644 index 000000000000..b5621e1b21b5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-67.c @@ -0,0 +1,29 @@ +/* PR tree-optimization/114425 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c23" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 2000 +_BitInt(8) a; +_BitInt(300) b; +_BitInt(2000) c; + +__attribute__((noipa)) unsigned +foo (_BitInt(2000) d) +{ + int o = __builtin_add_overflow_p (d, 0, b); + _BitInt(2000) m = c * a; + unsigned u = m; + return u + o; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 2000 + if (foo (0xfa7ac16f2613255eeb217e871c1f02221e26ce11f82d6a33206ec0ad5d4414722019933c0e2wb) != 1) + __builtin_abort (); +#endif +} From 4a46a48ebc7b7b3976af49f6f8dabd65c6ddf64b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Sat, 23 Mar 2024 11:20:00 +0100 Subject: [PATCH 228/551] bitint: Fix bitfield loads in handle_cast [PR114433] We ICE on the following testcase, because handle_cast was incorrectly testing !m_first to see whether it should use m_data[m_bitfld_load + 1] or fresh SSA_NAME for a PHI result. Now, m_first is in the routine sometimes temporarily cleared in between doing prepare_data_in_out and the !m_first check and only before returning restored from the save_first copy. Without this patch, we try to use the same SSA_NAME (_12 here) in 2 different PHI results which is obviously invalid IL and ICEs very quickly. 2024-03-23 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114433 * gimple-lower-bitint.cc (bitint_large_huge::handle_cast): For m_bitfld_load check save_first rather than m_first. * gcc.dg/torture/bitint-68.c: New test. --- gcc/gimple-lower-bitint.cc | 2 +- gcc/testsuite/gcc.dg/torture/bitint-68.c | 28 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/bitint-68.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 6f13c657c6b8..40a1084afb3b 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -1506,7 +1506,7 @@ bitint_large_huge::handle_cast (tree lhs_type, tree rhs1, tree idx) if (m_bitfld_load) { tree t4; - if (!m_first) + if (!save_first) t4 = m_data[m_bitfld_load + 1]; else t4 = make_ssa_name (m_limb_type); diff --git a/gcc/testsuite/gcc.dg/torture/bitint-68.c b/gcc/testsuite/gcc.dg/torture/bitint-68.c new file mode 100644 index 000000000000..8320e8ea6e35 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/bitint-68.c @@ -0,0 +1,28 @@ +/* PR tree-optimization/114433 */ +/* { dg-do run { target bitint } } */ +/* { dg-options "-std=c23" } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } } */ +/* { dg-skip-if "" { ! run_expensive_tests } { "-flto" } { "" } } */ + +#if __BITINT_MAXWIDTH__ >= 511 +struct S { int : 31; _BitInt(511) b : 300; } s; + +__attribute__((noipa)) _BitInt(511) +foo (void) +{ + return s.b << 1; +} +#endif + +int +main () +{ +#if __BITINT_MAXWIDTH__ >= 511 + s.b = 642460398785925402356009598661384732715767737595497615767135001949421105426024498988100867wb; + if (foo () != ((_BitInt(511)) 642460398785925402356009598661384732715767737595497615767135001949421105426024498988100867wb) << 1) + __builtin_abort (); + s.b = 2655156766298562299560755420298083843774074962786295887660222690220887wb; + if (foo () != ((_BitInt(511)) 2655156766298562299560755420298083843774074962786295887660222690220887wb) << 1) + __builtin_abort (); +#endif +} From f4605c53ea2eeafc13e14dd1ad00a0caf80057e2 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Wed, 20 Mar 2024 11:07:56 +0000 Subject: [PATCH 229/551] libstdc++: Use std::type_identity_t in <string_view> as per LWG 3950 [PR114400] The difference between __type_identity_t and std::type_identity_t is observable, as demonstrated in the PR. Nobody in LWG seems to think this an example we should really care about, but it seems easy and harmless to change this. libstdc++-v3/ChangeLog: PR libstdc++/114400 * include/std/string_view (operator==): Use std::type_identity_t in C++20 instead of our own __type_identity_t. --- libstdc++-v3/include/std/string_view | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view index e30a9c1768e0..a7c5a1264613 100644 --- a/libstdc++-v3/include/std/string_view +++ b/libstdc++-v3/include/std/string_view @@ -602,15 +602,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // deduction and the other argument gets implicitly converted to the deduced // type (see N3766). +#if __cpp_lib_three_way_comparison template<typename _CharT, typename _Traits> [[nodiscard]] constexpr bool operator==(basic_string_view<_CharT, _Traits> __x, - __type_identity_t<basic_string_view<_CharT, _Traits>> __y) + type_identity_t<basic_string_view<_CharT, _Traits>> __y) noexcept { return __x.size() == __y.size() && __x.compare(__y) == 0; } -#if __cpp_lib_three_way_comparison template<typename _CharT, typename _Traits> [[nodiscard]] constexpr auto @@ -620,6 +620,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION -> decltype(__detail::__char_traits_cmp_cat<_Traits>(0)) { return __detail::__char_traits_cmp_cat<_Traits>(__x.compare(__y)); } #else + template<typename _CharT, typename _Traits> + [[nodiscard]] + constexpr bool + operator==(basic_string_view<_CharT, _Traits> __x, + __type_identity_t<basic_string_view<_CharT, _Traits>> __y) + noexcept + { return __x.size() == __y.size() && __x.compare(__y) == 0; } + template<typename _CharT, typename _Traits> [[nodiscard]] constexpr bool From 3763fb8970d7515a4a3be2152604140965303031 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Fri, 22 Mar 2024 11:47:44 +0000 Subject: [PATCH 230/551] libstdc++: Add __is_in_place_index_v helper and use it in <variant> We already have __is_in_place_type_v for in_place_type_t so adding an equivalent for in_place_index_t allows us avoid a class template instantiation for the __not_in_place_tag constraint on the most commonly-used std::variant::variant(T&&) constructor. For in_place_type_t we also have a __is_in_place_type class template defined in terms of the variable template, but that isn't actually used anywhere. I'm not adding an equivalent for the new variable template, because that wouldn't be used either. For GCC 15 we should remove the unused __is_in_place_tag and __is_in_place_type class templates. libstdc++-v3/ChangeLog: * include/bits/utility.h (__is_in_place_index_v): New variable template. * include/std/variant (__not_in_place_tag): Define in terms of variable templates not a class template. --- libstdc++-v3/include/bits/utility.h | 6 ++++++ libstdc++-v3/include/std/variant | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/utility.h b/libstdc++-v3/include/bits/utility.h index 2a741bf70006..9f3b99231b3c 100644 --- a/libstdc++-v3/include/bits/utility.h +++ b/libstdc++-v3/include/bits/utility.h @@ -223,6 +223,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Tp> using __is_in_place_type = bool_constant<__is_in_place_type_v<_Tp>>; + template<typename> + inline constexpr bool __is_in_place_index_v = false; + + template<size_t _Nm> + inline constexpr bool __is_in_place_index_v<in_place_index_t<_Nm>> = true; + #endif // C++17 #if _GLIBCXX_USE_BUILTIN_TRAIT(__type_pack_element) diff --git a/libstdc++-v3/include/std/variant b/libstdc++-v3/include/std/variant index 4b9002e0917c..f79d95db7a83 100644 --- a/libstdc++-v3/include/std/variant +++ b/libstdc++-v3/include/std/variant @@ -1414,7 +1414,8 @@ namespace __variant template<typename _Tp> static constexpr bool __not_in_place_tag - = !__is_in_place_tag<__remove_cvref_t<_Tp>>::value; + = !__is_in_place_type_v<__remove_cvref_t<_Tp>> + && !__is_in_place_index_v<__remove_cvref_t<_Tp>>; public: #if __cpp_concepts From 543585046d17add37c0108b06d2884d0e03cedde Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 21 Mar 2024 11:15:06 +0000 Subject: [PATCH 231/551] libstdc++: Disable std::formatter specializations (LWG 3944) This was just approved in Tokyo as a DR for C++23. It doesn't affect us yet, because we don't implement the __cpp_lib_format_ranges features. We can add the disabled specializations and add a testcase now though. libstdc++-v3/ChangeLog: * include/std/format (formatter): Disable specializations that would allow sequences of narrow characters to be formatted as wchar_t without conversion, as per LWG 3944. * testsuite/std/format/formatter/lwg3944.cc: New test. --- libstdc++-v3/include/std/format | 23 ++++++++++++++ .../testsuite/std/format/formatter/lwg3944.cc | 31 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format index 613016d1a107..22dcb5f24bd7 100644 --- a/libstdc++-v3/include/std/format +++ b/libstdc++-v3/include/std/format @@ -2478,6 +2478,29 @@ namespace __format }; /// @} +#if defined _GLIBCXX_USE_WCHAR_T && __cpp_lib_format_ranges + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 3944. Formatters converting sequences of char to sequences of wchar_t + + namespace __format { struct __disabled; } + + // std::formatter<__disabled, C> uses the primary template, which is disabled. + template<> + struct formatter<char*, wchar_t> + : private formatter<__format::__disabled, wchar_t> { }; + template<> + struct formatter<const char*, wchar_t> + : private formatter<__format::__disabled, wchar_t> { }; + template<size_t _Nm> + struct formatter<char[_Nm], wchar_t> + : private formatter<__format::__disabled, wchar_t> { }; + template<class _Traits, class _Allocator> + struct formatter<basic_string<char, _Traits, _Allocator>, wchar_t> + : private formatter<__format::__disabled, wchar_t> { }; + template<class _Traits> + struct formatter<basic_string_view<char, _Traits>, wchar_t> + : private formatter<__format::__disabled, wchar_t> { }; +#endif /// @cond undocumented namespace __format diff --git a/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc b/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc new file mode 100644 index 000000000000..ff5f075bcc8b --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc @@ -0,0 +1,31 @@ +// { dg-do compile { target c++20 } } +// { dg-options "-Wno-unused-result" } + +// LWG 3944. Formatters converting sequences of char to sequences of wchar_t + +#include <format> + +void test_lwg3944() +{ + // Ill-formed in C++20 and C++23 + const char* cstr = "hello"; + char* str = const_cast<char*>(cstr); + std::format(L"{}", str); // { dg-error "here" } + std::format(L"{}",cstr); // { dg-error "here" } + + // Ill-formed in C++20 + // In C++23 they give L"['h', 'e', 'l', 'l', 'o']" + std::format(L"{}", "hello"); // { dg-error "here" } + std::format(L"{}", std::string_view("hello")); // { dg-error "here" } + std::format(L"{}", std::string("hello")); // { dg-error "here" } +#ifdef __cpp_lib_format_ranges + // LWG 3944 does not change this, it's still valid. + std::format(L"{}", std::vector{'h', 'e', 'l', 'l', 'o'}); +#endif +} + +// { dg-error "std::formatter must be specialized" "" { target *-*-* } 0 } +// { dg-prune-output "use of deleted function" } +// { dg-prune-output "no matching function" } +// { dg-prune-output "has no member named 'parse'" } +// { dg-prune-output "not a constant expression" } From 2e4b3374cb7af10e188bb5100526ad3150b9b272 Mon Sep 17 00:00:00 2001 From: John David Anglin <danglin@gcc.gnu.org> Date: Sat, 23 Mar 2024 13:47:31 +0000 Subject: [PATCH 232/551] hppa: Fix LO_SUM DLTIND14R address support in PRINT_OPERAND_ADDRESS This bug was hidden since LO_SUM DLTIND14R addresses are normally handled by the A constraint in the move patterns. 2024-03-23 John David Anglin <danglin@gcc.gnu.org> gcc/ChangeLog: * config/pa/pa.cc (pa_output_global_address): Handle UNSPEC_DLTIND14R addresses. * config/pa/pa.h (PRINT_OPERAND_ADDRESS): Output "RT'" for UNSPEC_DLTIND14R address. --- gcc/config/pa/pa.cc | 7 ++++++- gcc/config/pa/pa.h | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gcc/config/pa/pa.cc b/gcc/config/pa/pa.cc index d7666103de8f..a7af6b8c121f 100644 --- a/gcc/config/pa/pa.cc +++ b/gcc/config/pa/pa.cc @@ -5784,7 +5784,12 @@ pa_output_global_address (FILE *file, rtx x, int round_constant) if (GET_CODE (x) == HIGH) x = XEXP (x, 0); - if (GET_CODE (x) == SYMBOL_REF && read_only_operand (x, VOIDmode)) + if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_DLTIND14R) + { + x = XVECEXP (x, 0, 0); + output_addr_const (file, x); + } + else if (GET_CODE (x) == SYMBOL_REF && read_only_operand (x, VOIDmode)) output_addr_const (file, x); else if (GET_CODE (x) == SYMBOL_REF && !flag_pic) { diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 403f16c5cb59..127a0d1966d2 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1247,12 +1247,15 @@ do { \ reg_names [REGNO (XEXP (addr, 0))]); \ break; \ case LO_SUM: \ - if (!symbolic_operand (XEXP (addr, 1), VOIDmode)) \ + if (GET_CODE (XEXP (addr, 1)) == UNSPEC \ + && XINT (XEXP (addr, 1), 1) == UNSPEC_DLTIND14R) \ + fputs ("RT'", FILE); \ + else if (!symbolic_operand (XEXP (addr, 1), VOIDmode)) \ fputs ("R'", FILE); \ else if (flag_pic == 0) \ fputs ("RR'", FILE); \ else \ - fputs ("RT'", FILE); \ + gcc_unreachable (); \ pa_output_global_address (FILE, XEXP (addr, 1), 0); \ fputs ("(", FILE); \ output_operand (XEXP (addr, 0), 0); \ From 80a0cb37456c49dbc25cca7cd554f78bc504373e Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Sat, 23 Mar 2024 09:52:38 -0400 Subject: [PATCH 233/551] analyzer: fix ICE and false positive with -Wanalyzer-deref-before-check [PR114408] gcc/analyzer/ChangeLog: PR analyzer/114408 * engine.cc (impl_run_checkers): Free up any dominance info that we may have created. * kf.cc (class kf_ubsan_handler): New. (register_sanitizer_builtins): New. (register_known_functions): Call register_sanitizer_builtins. gcc/testsuite/ChangeLog: PR analyzer/114408 * c-c++-common/analyzer/deref-before-check-pr114408.c: New test. * c-c++-common/ubsan/analyzer-ice-pr114408.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/engine.cc | 7 ++++++ gcc/analyzer/kf.cc | 22 +++++++++++++++++++ .../analyzer/deref-before-check-pr114408.c | 22 +++++++++++++++++++ .../ubsan/analyzer-ice-pr114408.c | 9 ++++++++ 4 files changed, 60 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr114408.c create mode 100644 gcc/testsuite/c-c++-common/ubsan/analyzer-ice-pr114408.c diff --git a/gcc/analyzer/engine.cc b/gcc/analyzer/engine.cc index ad310b4d8731..e0dc0e66e88c 100644 --- a/gcc/analyzer/engine.cc +++ b/gcc/analyzer/engine.cc @@ -6251,6 +6251,13 @@ impl_run_checkers (logger *logger) eng.get_model_manager ()->dump_untracked_regions (); delete purge_map; + + /* Free up any dominance info that we may have created. */ + FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node) + { + function *fun = node->get_fun (); + free_dominance_info (fun, CDI_DOMINATORS); + } } /* Handle -fdump-analyzer and -fdump-analyzer-stderr. */ diff --git a/gcc/analyzer/kf.cc b/gcc/analyzer/kf.cc index d197ccbd0f05..6931f07bd75e 100644 --- a/gcc/analyzer/kf.cc +++ b/gcc/analyzer/kf.cc @@ -2198,6 +2198,27 @@ register_atomic_builtins (known_function_manager &kfm) make_unique<kf_atomic_fetch_op> (BIT_IOR_EXPR)); } +/* Handle calls to the various __builtin___ubsan_handle_*. + These can return, but continuing after such a return + isn't likely to be interesting to the user of the analyzer. + Hence we terminate the analysis path at one of these calls. */ + +class kf_ubsan_handler : public internal_known_function +{ + void impl_call_post (const call_details &cd) const final override + { + if (cd.get_ctxt ()) + cd.get_ctxt ()->terminate_path (); + } +}; + +static void +register_sanitizer_builtins (known_function_manager &kfm) +{ + kfm.add (BUILT_IN_UBSAN_HANDLE_NONNULL_ARG, + make_unique<kf_ubsan_handler> ()); +} + /* Populate KFM with instances of known functions supported by the core of the analyzer (as opposed to plugins). */ @@ -2224,6 +2245,7 @@ register_known_functions (known_function_manager &kfm, kfm.add (BUILT_IN_STACK_SAVE, make_unique<kf_stack_save> ()); register_atomic_builtins (kfm); + register_sanitizer_builtins (kfm); register_varargs_builtins (kfm); } diff --git a/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr114408.c b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr114408.c new file mode 100644 index 000000000000..d55720271d0f --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr114408.c @@ -0,0 +1,22 @@ +extern void unknown_returns (const char *p); +extern void unknown_noreturn (const char *p) __attribute__((__noreturn__)); + +void test_1 (const char *p) +{ + if (p) + unknown_returns (p); + __builtin_strcmp ("a", p); /* { dg-message "pointer 'p' is dereferenced here" "" { target c } } */ + if (p) /* { dg-warning "check of 'p' for NULL after already dereferencing it" "" { target c } } */ + unknown_returns (p); + __builtin_strcmp ("a", p); +} + +void test_2 (const char *p) +{ + if (p) + unknown_noreturn (p); + __builtin_strcmp ("a", p); + if (p) /* { dg-bogus "check of 'p' for NULL after already dereferencing it" } */ + unknown_noreturn (p); + __builtin_strcmp ("a", p); +} diff --git a/gcc/testsuite/c-c++-common/ubsan/analyzer-ice-pr114408.c b/gcc/testsuite/c-c++-common/ubsan/analyzer-ice-pr114408.c new file mode 100644 index 000000000000..55f918726eed --- /dev/null +++ b/gcc/testsuite/c-c++-common/ubsan/analyzer-ice-pr114408.c @@ -0,0 +1,9 @@ +/* { dg-do run } */ +/* { dg-require-effective-target analyzer } */ +/* { dg-options "-fanalyzer -fsanitize=undefined" } */ + +int main(){} + +int HMAP_unset_copy(const char *key) { + return __builtin_strcmp("a", key) + __builtin_strcmp("a", key); +} From c8a343f9f8602f4e6c1b385ddbeb58572234d447 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Sat, 23 Mar 2024 15:49:23 +0000 Subject: [PATCH 234/551] PR modula2/114443 missing quote cause ICE This patch inserts a missing quotation at the end of a line if required (after an appropiate error message is generated). gcc/m2/ChangeLog: PR modula2/114443 * m2.flex: Call AddTokCharStar with a stringtok if end of line is reached without a closing quote. gcc/testsuite/ChangeLog: PR modula2/114443 * gm2/pim/fail/missingquote.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/m2.flex | 2 ++ gcc/testsuite/gm2/pim/fail/missingquote.mod | 8 ++++++++ 2 files changed, 10 insertions(+) create mode 100644 gcc/testsuite/gm2/pim/fail/missingquote.mod diff --git a/gcc/m2/m2.flex b/gcc/m2/m2.flex index f8f5ce64ad36..e8ee383878e4 100644 --- a/gcc/m2/m2.flex +++ b/gcc/m2/m2.flex @@ -188,12 +188,14 @@ extern void yylex (void); \"[^\"\n]*\" { updatepos(); M2LexBuf_AddTokCharStar(M2Reserved_stringtok, yytext); return; } \"[^\"\n]*$ { updatepos(); m2flex_M2Error("missing terminating quote, \""); + M2LexBuf_AddTokCharStar(M2Reserved_stringtok, yytext); resetpos(); return; } '[^'\n]*' { updatepos(); M2LexBuf_AddTokCharStar(M2Reserved_stringtok, yytext); return; } '[^'\n]*$ { updatepos(); m2flex_M2Error("missing terminating quote, '"); + M2LexBuf_AddTokCharStar(M2Reserved_stringtok, yytext); resetpos(); return; } diff --git a/gcc/testsuite/gm2/pim/fail/missingquote.mod b/gcc/testsuite/gm2/pim/fail/missingquote.mod new file mode 100644 index 000000000000..e78f0e339ac9 --- /dev/null +++ b/gcc/testsuite/gm2/pim/fail/missingquote.mod @@ -0,0 +1,8 @@ +MODULE missingquote ; + +CONST + MyConst = 'foobar + +BEGIN + +END missingquote. From a68458187d4c889dc11b2b95f08a61adf087f69d Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Sat, 23 Mar 2024 16:04:23 +0000 Subject: [PATCH 235/551] PR modula2/114444 trunc float malformed error cause ICE This patch corrects two error format specifiers. gcc/m2/ChangeLog: PR modula2/114444 * gm2-compiler/M2Quads.mod (BuildTruncFunction): Correct error format specifier. (BuildFloatFunction): Correct error format specifier. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2Quads.mod | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 52d72f6cd628..891a76b4660e 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -9840,12 +9840,12 @@ BEGIN BuildConvertFunction ELSE MetaErrorT1 (functok, - 'argument to {%1E%ad} must be a float point type', Sym) ; + 'argument to {%1Ead} must be a float point type', Sym) ; PushTFtok (MakeConstLit (functok, MakeKey('0'), Type), Type, functok) END ELSE MetaErrorT2 (vartok, - 'argument to {%1E%ad} must be a variable or constant, seen {%2ad}', + 'argument to {%1Ead} must be a variable or constant, seen {%2ad}', Sym, Var) ; PushTFtok (MakeConstLit (functok, MakeKey('0'), Type), Type, functok) END @@ -9924,7 +9924,7 @@ BEGIN BuildConvertFunction ELSE MetaErrorT1 (vartok, - 'argument to {%1E%ad} must be a variable or constant', ProcSym) ; + 'argument to {%1Ead} must be a variable or constant', ProcSym) ; PushTFtok (MakeConstLit (functok, MakeKey('0.0'), Type), Type, functok) END ELSE From bb04a11418f54c4c062802d491ff2c3720b7313e Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sun, 24 Mar 2024 00:16:50 +0000 Subject: [PATCH 236/551] Daily bump. --- gcc/ChangeLog | 30 ++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 9 +++++++++ gcc/m2/ChangeLog | 13 +++++++++++++ gcc/testsuite/ChangeLog | 27 +++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 20 ++++++++++++++++++++ 6 files changed, 100 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ec40a1f919c1..e5f2943b7645 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,33 @@ +2024-03-23 John David Anglin <danglin@gcc.gnu.org> + + * config/pa/pa.cc (pa_output_global_address): Handle + UNSPEC_DLTIND14R addresses. + * config/pa/pa.h (PRINT_OPERAND_ADDRESS): Output "RT'" for + UNSPEC_DLTIND14R address. + +2024-03-23 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114433 + * gimple-lower-bitint.cc (bitint_large_huge::handle_cast): For + m_bitfld_load check save_first rather than m_first. + +2024-03-23 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114425 + * gimple-lower-bitint.cc (build_bitint_stmt_ssa_conflicts): Handle + _Complex large/huge _BitInt types like the large/huge _BitInt types. + +2024-03-23 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/111683 + * tree-predcom.cc (pcom_worker::suitable_component_p): If has_write + and comp_step is RS_NONZERO, return false if any reference in the + component doesn't have DR_STEP a multiple of access size. + +2024-03-23 Takayuki 'January June' Suwa <jjsuwa_sys3175@yahoo.co.jp> + + * config/xtensa/xtensa.md: Add new split pattern described above. + 2024-03-22 Georg-Johann Lay <avr@gjlay.de> * config/avr/avr.cc (avr_set_current_function): Adjust diagnostic diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 18f6e74bb9b4..a8598e00bc52 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240323 +20240324 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 1468d2a6dc22..20c0357d864f 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,12 @@ +2024-03-23 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114408 + * engine.cc (impl_run_checkers): Free up any dominance info that + we may have created. + * kf.cc (class kf_ubsan_handler): New. + (register_sanitizer_builtins): New. + (register_known_functions): Call register_sanitizer_builtins. + 2024-03-22 David Malcolm <dmalcolm@redhat.com> PR analyzer/112974 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index f0b0616d3d26..7934bcd77765 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,16 @@ +2024-03-23 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114444 + * gm2-compiler/M2Quads.mod (BuildTruncFunction): Correct + error format specifier. + (BuildFloatFunction): Correct error format specifier. + +2024-03-23 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114443 + * m2.flex: Call AddTokCharStar with a stringtok if + end of line is reached without a closing quote. + 2024-03-22 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114422 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 31d82e7cda84..e7939febd1e9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,30 @@ +2024-03-23 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114443 + * gm2/pim/fail/missingquote.mod: New test. + +2024-03-23 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114408 + * c-c++-common/analyzer/deref-before-check-pr114408.c: New test. + * c-c++-common/ubsan/analyzer-ice-pr114408.c: New test. + +2024-03-23 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114433 + * gcc.dg/torture/bitint-68.c: New test. + +2024-03-23 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114425 + * gcc.dg/torture/bitint-67.c: New test. + +2024-03-23 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/111683 + * gcc.dg/pr111683-1.c: New test. + * gcc.dg/pr111683-2.c: New test. + 2024-03-22 Harald Anlauf <anlauf@gmx.de> PR fortran/55978 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 51fede8ddb1d..8e3368d8065f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,23 @@ +2024-03-23 Jonathan Wakely <jwakely@redhat.com> + + * include/std/format (formatter): Disable specializations that + would allow sequences of narrow characters to be formatted as + wchar_t without conversion, as per LWG 3944. + * testsuite/std/format/formatter/lwg3944.cc: New test. + +2024-03-23 Jonathan Wakely <jwakely@redhat.com> + + * include/bits/utility.h (__is_in_place_index_v): New variable + template. + * include/std/variant (__not_in_place_tag): Define in terms of + variable templates not a class template. + +2024-03-23 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114400 + * include/std/string_view (operator==): Use std::type_identity_t + in C++20 instead of our own __type_identity_t. + 2024-03-22 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/114401 From ecd2c373720af214f20671f9e7d760548b51ef4a Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Mon, 25 Mar 2024 00:16:24 +0000 Subject: [PATCH 237/551] Daily bump. --- gcc/DATESTAMP | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index a8598e00bc52..2f662196fa7b 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240324 +20240325 From 5cab64a9cfb93fb0e246a25e3fdc7b664afb774e Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Mon, 25 Mar 2024 14:22:31 +0800 Subject: [PATCH 238/551] RISC-V: Allow RVV intrinsic when function target("arch=+v") This patch would like to allow the RVV intrinsic when function is attributed as target("arch=+v") and build with rv64gc. For example: vint32m1_t __attribute__((target("arch=+v"))) test_1 (vint32m1_t a, vint32m1_t b, size_t vl) { return __riscv_vadd_vv_i32m1 (a, b, vl); } build with -march=rv64gc -mabi=lp64d -O3, we will have asm like below: test_1: .option push .option arch, rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_v1p0_zicsr2p0_\ zifencei2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0 vsetvli zero,a0,e32,m1,ta,ma vadd.vv v8,v8,v9 ret The riscv_vector.h must be included when leverage intrinisc type(s) and API(s). And the scope of this attribute should not excced the function body. Meanwhile, to make rvv types and API(s) available for this attribute, include riscv_vector.h will not report error for now if v is not present in march. Below test are passed for this patch: * The riscv fully regression test. gcc/ChangeLog: * config/riscv/riscv-c.cc (riscv_pragma_intrinsic): Remove error when V is disabled and init the RVV types and intrinic APIs. * config/riscv/riscv-vector-builtins.cc (expand_builtin): Report error if V ext is disabled. * config/riscv/riscv.cc (riscv_return_value_is_vector_type_p): Ditto. (riscv_arguments_is_vector_type_p): Ditto. (riscv_vector_cc_function_p): Ditto. * config/riscv/riscv_vector.h: Remove error if V is disable. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/pragma-1.c: Remove. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-2.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-3.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-4.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-5.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-6.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv-c.cc | 18 +++++++---- gcc/config/riscv/riscv-vector-builtins.cc | 5 ++++ gcc/config/riscv/riscv.cc | 30 ++++++++++++++++--- gcc/config/riscv/riscv_vector.h | 4 --- .../gcc.target/riscv/rvv/base/pragma-1.c | 4 --- .../target_attribute_v_with_intrinsic-1.c | 5 ++++ .../target_attribute_v_with_intrinsic-2.c | 18 +++++++++++ .../target_attribute_v_with_intrinsic-3.c | 13 ++++++++ .../target_attribute_v_with_intrinsic-4.c | 10 +++++++ .../target_attribute_v_with_intrinsic-5.c | 12 ++++++++ .../target_attribute_v_with_intrinsic-6.c | 12 ++++++++ .../target_attribute_v_with_intrinsic-7.c | 9 ++++++ .../target_attribute_v_with_intrinsic-8.c | 23 ++++++++++++++ 13 files changed, 145 insertions(+), 18 deletions(-) delete mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-3.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-4.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-5.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-6.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc index edb866d51e40..01314037461e 100644 --- a/gcc/config/riscv/riscv-c.cc +++ b/gcc/config/riscv/riscv-c.cc @@ -201,14 +201,20 @@ riscv_pragma_intrinsic (cpp_reader *) if (strcmp (name, "vector") == 0 || strcmp (name, "xtheadvector") == 0) { - if (!TARGET_VECTOR) + if (TARGET_VECTOR) + riscv_vector::handle_pragma_vector (); + else /* Indicates riscv_vector.h is included but v is missing in arch */ { - error ("%<#pragma riscv intrinsic%> option %qs needs 'V' or " - "'XTHEADVECTOR' extension enabled", - name); - return; + /* To make the the rvv types and intrinsic API available for the + target("arch=+v") attribute, we need to temporally enable the + TARGET_VECTOR, and disable it after all initialized. */ + target_flags |= MASK_VECTOR; + + riscv_vector::init_builtins (); + riscv_vector::handle_pragma_vector (); + + target_flags &= ~MASK_VECTOR; } - riscv_vector::handle_pragma_vector (); } else error ("unknown %<#pragma riscv intrinsic%> option %qs", name); diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc index c5881a501d13..e07373d8b575 100644 --- a/gcc/config/riscv/riscv-vector-builtins.cc +++ b/gcc/config/riscv/riscv-vector-builtins.cc @@ -4586,6 +4586,11 @@ rtx expand_builtin (unsigned int code, tree exp, rtx target) { registered_function &rfn = *(*registered_functions)[code]; + + if (!TARGET_VECTOR) + error_at (EXPR_LOCATION (exp), + "builtin function %qE requires the V ISA extension", exp); + return function_expander (rfn.instance, rfn.decl, exp, target).expand (); } diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 6d11576a8fd7..fe9976bfffe9 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -5467,7 +5467,15 @@ riscv_return_value_is_vector_type_p (const_tree fntype) { tree return_type = TREE_TYPE (fntype); - return riscv_vector_type_p (return_type); + if (riscv_vector_type_p (return_type)) + { + if (!TARGET_VECTOR) + error_at (input_location, + "return type %qT requires the V ISA extension", return_type); + return true; + } + else + return false; } /* Return true if a function with type FNTYPE takes arguments in @@ -5481,7 +5489,13 @@ riscv_arguments_is_vector_type_p (const_tree fntype) { tree arg_type = TREE_VALUE (chain); if (riscv_vector_type_p (arg_type)) - return true; + { + if (!TARGET_VECTOR) + error_at (input_location, + "argument type %qT requires the V ISA extension", + arg_type); + return true; + } } return false; @@ -5493,8 +5507,16 @@ riscv_arguments_is_vector_type_p (const_tree fntype) static bool riscv_vector_cc_function_p (const_tree fntype) { - return lookup_attribute ("vector_cc", TYPE_ATTRIBUTES (fntype)) != NULL_TREE - || lookup_attribute ("riscv_vector_cc", TYPE_ATTRIBUTES (fntype)) != NULL_TREE; + tree attr = TYPE_ATTRIBUTES (fntype); + bool vector_cc_p = lookup_attribute ("vector_cc", attr) != NULL_TREE + || lookup_attribute ("riscv_vector_cc", attr) != NULL_TREE; + + if (vector_cc_p && !TARGET_VECTOR) + error_at (input_location, + "function attribute %qs requires the V ISA extension", + "riscv_vector_cc"); + + return vector_cc_p; } /* Implement TARGET_FNTYPE_ABI. */ diff --git a/gcc/config/riscv/riscv_vector.h b/gcc/config/riscv/riscv_vector.h index c2fc4b35242e..aa0c3aa69c08 100644 --- a/gcc/config/riscv/riscv_vector.h +++ b/gcc/config/riscv/riscv_vector.h @@ -28,9 +28,6 @@ #include <stdint.h> #include <stddef.h> -#ifndef __riscv_vector -#error "Vector intrinsics require the vector extension." -#else #ifdef __cplusplus extern "C" { #endif @@ -45,5 +42,4 @@ extern "C" { #ifdef __cplusplus } #endif // __cplusplus -#endif // __riscv_vector #endif // __RISCV_VECTOR_H diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c deleted file mode 100644 index ef329e30785f..000000000000 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pragma-1.c +++ /dev/null @@ -1,4 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-O3 -march=rv32gc -mabi=ilp32d" } */ - -#pragma riscv intrinsic "vector" /* { dg-error {#pragma riscv intrinsic' option 'vector' needs 'V' or 'XTHEADVECTOR' extension enabled} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c new file mode 100644 index 000000000000..dfe8191021e4 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c @@ -0,0 +1,5 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-2.c new file mode 100644 index 000000000000..9992347fe6ba --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-2.c @@ -0,0 +1,18 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} + +void +test_2 () +{ + vint32m1_t a; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-3.c new file mode 100644 index 000000000000..590343ddbfde --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-3.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3 -Wno-implicit-int" } */ + +#include "riscv_vector.h" + +vint32m1_t +__attribute__((target("arch=+zbb"))) +test_1 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} + +/* { dg-error "return type 'vint32m1_t' requires the V ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-4.c new file mode 100644 index 000000000000..0acece7640c8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-4.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +void +test_1 (vint32m1_t a) /* { dg-error {argument type 'vint32m1_t' requires the V ISA extension} } */ +{ + return; +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-5.c new file mode 100644 index 000000000000..2dc4217ff323 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-5.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint32m1_t test_1 () +{ + vint32m1_t a; + return a; +} + +/* { dg-error "return type 'vint32m1_t' requires the V ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-6.c new file mode 100644 index 000000000000..562bb509e9ed --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-6.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +int +__attribute__((riscv_vector_cc)) +test_1 (int a) +{ + return a + 1; +} +/* { dg-error "function attribute 'riscv_vector_cc' requires the V ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c new file mode 100644 index 000000000000..520b2e59fae5 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +size_t test_1 (size_t vl) +{ + return __riscv_vsetvl_e8m4 (vl); /* { dg-error {builtin function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c new file mode 100644 index 000000000000..9032d9d0b43f --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} + +void +test_2 () +{ + vint32m1_t a; +} + +size_t +test_3 (size_t vl) +{ + return __riscv_vsetvl_e8m4 (vl); /* { dg-error {builtin function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ +} From cf3fc6f414f52a99f2dfc71c2e72e96fe60d2b6f Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Sat, 23 Mar 2024 00:19:55 +0000 Subject: [PATCH 239/551] libstdc++: Fix incorrect macro used in #undef in test This was a copy & paste error. libstdc++-v3/ChangeLog: * testsuite/std/text_encoding/requirements.cc: #undef the correct macro. --- libstdc++-v3/testsuite/std/text_encoding/requirements.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libstdc++-v3/testsuite/std/text_encoding/requirements.cc b/libstdc++-v3/testsuite/std/text_encoding/requirements.cc index a1d5d6baee19..6cd71b682253 100644 --- a/libstdc++-v3/testsuite/std/text_encoding/requirements.cc +++ b/libstdc++-v3/testsuite/std/text_encoding/requirements.cc @@ -8,7 +8,7 @@ # error "Feature-test macro for text_encoding has wrong value in <text_encoding>" #endif -#undef __cpp_lib_expected +#undef __cpp_lib_text_encoding #include <version> #ifndef __cpp_lib_text_encoding # error "Feature-test macro for text_encoding missing in <version>" From 44863af22d2c3168fb73d00cc58f393a35d3070d Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Mon, 25 Mar 2024 14:33:54 +0000 Subject: [PATCH 240/551] modula2: Rebuild documentation sections for target independent libs This patch rebuilds the documentation for the target independent library sections. gcc/m2/ChangeLog: * Make-lang.in (doc/m2.pdf): Add line break. * target-independent/m2/Builtins.texi: Rebuilt. * target-independent/m2/gm2-libs.texi: Rebuilt. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/Make-lang.in | 3 +- gcc/m2/target-independent/m2/Builtins.texi | 11 +- gcc/m2/target-independent/m2/gm2-libs.texi | 599 +++++++++++++++++++-- 3 files changed, 574 insertions(+), 39 deletions(-) diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in index 49ec168b2058..ef6990ce617b 100644 --- a/gcc/m2/Make-lang.in +++ b/gcc/m2/Make-lang.in @@ -168,7 +168,8 @@ doc/m2.ps: doc/m2.dvi m2.pdf: doc/m2.pdf doc/m2.pdf: $(TEXISRC) $(objdir)/m2/images/gnu.eps - $(TEXI2PDF) -I $(objdir)/m2 -I $(srcdir)/doc/include $(srcdir)/doc/gm2.texi -o $@ + $(TEXI2PDF) -I $(objdir)/m2 -I $(srcdir)/doc/include \ + $(srcdir)/doc/gm2.texi -o $@ M2_PDFFILES = doc/m2.pdf diff --git a/gcc/m2/target-independent/m2/Builtins.texi b/gcc/m2/target-independent/m2/Builtins.texi index 6f50bfa338e4..b6903215293d 100644 --- a/gcc/m2/target-independent/m2/Builtins.texi +++ b/gcc/m2/target-independent/m2/Builtins.texi @@ -6,6 +6,13 @@ FROM SYSTEM IMPORT ADDRESS ; (* floating point intrinsic procedure functions *) +@findex isnanf +PROCEDURE __BUILTIN__ isnanf (x: SHORTREAL) : INTEGER ; +@findex isnan +PROCEDURE __BUILTIN__ isnan (x: REAL) : INTEGER ; +@findex isnanl +PROCEDURE __BUILTIN__ isnanl (x: LONGREAL) : INTEGER ; + @findex isfinitef PROCEDURE __BUILTIN__ isfinitef (x: SHORTREAL) : INTEGER ; @findex isfinite @@ -113,9 +120,9 @@ PROCEDURE __BUILTIN__ nextafterf (x, y: SHORTREAL) : SHORTREAL ; PROCEDURE __BUILTIN__ nextafterl (x, y: LONGREAL) : LONGREAL ; @findex nexttoward -PROCEDURE __BUILTIN__ nexttoward (x, y: REAL) : LONGREAL ; +PROCEDURE __BUILTIN__ nexttoward (x: REAL; y: LONGREAL) : REAL ; @findex nexttowardf -PROCEDURE __BUILTIN__ nexttowardf (x, y: SHORTREAL) : LONGREAL ; +PROCEDURE __BUILTIN__ nexttowardf (x: SHORTREAL; y: LONGREAL) : SHORTREAL ; @findex nexttowardl PROCEDURE __BUILTIN__ nexttowardl (x, y: LONGREAL) : LONGREAL ; diff --git a/gcc/m2/target-independent/m2/gm2-libs.texi b/gcc/m2/target-independent/m2/gm2-libs.texi index 0531a4a1753a..db8189f40598 100644 --- a/gcc/m2/target-independent/m2/gm2-libs.texi +++ b/gcc/m2/target-independent/m2/gm2-libs.texi @@ -242,6 +242,13 @@ FROM SYSTEM IMPORT ADDRESS ; (* floating point intrinsic procedure functions *) +@findex isnanf +PROCEDURE __BUILTIN__ isnanf (x: SHORTREAL) : INTEGER ; +@findex isnan +PROCEDURE __BUILTIN__ isnan (x: REAL) : INTEGER ; +@findex isnanl +PROCEDURE __BUILTIN__ isnanl (x: LONGREAL) : INTEGER ; + @findex isfinitef PROCEDURE __BUILTIN__ isfinitef (x: SHORTREAL) : INTEGER ; @findex isfinite @@ -349,9 +356,9 @@ PROCEDURE __BUILTIN__ nextafterf (x, y: SHORTREAL) : SHORTREAL ; PROCEDURE __BUILTIN__ nextafterl (x, y: LONGREAL) : LONGREAL ; @findex nexttoward -PROCEDURE __BUILTIN__ nexttoward (x, y: REAL) : LONGREAL ; +PROCEDURE __BUILTIN__ nexttoward (x: REAL; y: LONGREAL) : REAL ; @findex nexttowardf -PROCEDURE __BUILTIN__ nexttowardf (x, y: SHORTREAL) : LONGREAL ; +PROCEDURE __BUILTIN__ nexttowardf (x: SHORTREAL; y: LONGREAL) : SHORTREAL ; @findex nexttowardl PROCEDURE __BUILTIN__ nexttowardl (x, y: LONGREAL) : LONGREAL ; @@ -662,10 +669,10 @@ DEFINITION MODULE DynamicStrings ; FROM SYSTEM IMPORT ADDRESS ; EXPORT QUALIFIED String, InitString, KillString, Fin, InitStringCharStar, - InitStringChar, Index, RIndex, + InitStringChar, Index, RIndex, ReverseIndex, Mark, Length, ConCat, ConCatChar, Assign, Dup, Add, Equal, EqualCharStar, EqualArray, ToUpper, ToLower, - CopyOut, Mult, Slice, + CopyOut, Mult, Slice, ReplaceChar, RemoveWhitePrefix, RemoveWhitePostfix, RemoveComment, char, string, InitStringDB, InitStringCharStarDB, InitStringCharDB, @@ -766,6 +773,15 @@ PROCEDURE ConCatChar (a: String; ch: CHAR) : String ; PROCEDURE Assign (a, b: String) : String ; +(* + ReplaceChar - returns string s after it has changed all + occurances of from to to. +*) + +@findex ReplaceChar +PROCEDURE ReplaceChar (s: String; from, to: CHAR) : String ; + + (* Dup - duplicate a String, s, returning the copy of s. *) @@ -845,14 +861,29 @@ PROCEDURE Index (s: String; ch: CHAR; o: CARDINAL) : INTEGER ; (* RIndex - returns the indice of the last occurance of, ch, - in String, s. The search starts at position, o. - -1 is returned if, ch, is not found. + in String, s. The search starts at position, o. + -1 is returned if ch is not found. The search + is performed left to right. *) @findex RIndex PROCEDURE RIndex (s: String; ch: CHAR; o: CARDINAL) : INTEGER ; +(* + ReverseIndex - returns the indice of the last occurance of ch + in String s. The search starts at position o + and searches from right to left. The start position + may be indexed negatively from the right (-1 is the + last index). + The return value if ch is found will always be positive. + -1 is returned if ch is not found. +*) + +@findex ReverseIndex +PROCEDURE ReverseIndex (s: String; ch: CHAR; o: INTEGER) : INTEGER ; + + (* RemoveComment - assuming that, comment, is a comment delimiter which indicates anything to its right is a comment @@ -1241,7 +1272,7 @@ PROCEDURE ReadNBytes (f: File; nBytes: CARDINAL; (* - ReadAny - reads HIGH(a) bytes into, a. All input + ReadAny - reads HIGH (a) + 1 bytes into, a. All input is fully buffered, unlike ReadNBytes and thus is more suited to small reads. *) @@ -1264,7 +1295,7 @@ PROCEDURE WriteNBytes (f: File; nBytes: CARDINAL; (* - WriteAny - writes HIGH(a) bytes onto, file, f. All output + WriteAny - writes HIGH (a) + 1 bytes onto, file, f. All output is fully buffered, unlike WriteNBytes and thus is more suited to small writes. *) @@ -1593,7 +1624,7 @@ TYPE (* GetOpt - call C getopt and fill in the parameters: - optarg, optind, opterr and optop. + optarg, optind, opterr and optopt. *) @findex GetOpt @@ -1638,14 +1669,13 @@ PROCEDURE InitLongOptions () : LongOptions ; val is the value to return, or to load into the variable pointed to by flag. - The last element of the array has to be filled with zeros. + The last element of the array must be filled with zeros. *) @findex AddLongOption -PROCEDURE AddLongOption (lo: LongOptions; +PROCEDURE AddLongOption (lo: LongOptions; index: CARDINAL; name: String; has_arg: INTEGER; - flag: PtrToInteger; - val: INTEGER) : LongOptions ; + VAR flag: INTEGER; val: INTEGER) : LongOptions ; (* @@ -1664,8 +1694,8 @@ PROCEDURE KillLongOptions (lo: LongOptions) : LongOptions ; *) @findex GetOptLong -PROCEDURE GetOptLong (argc: INTEGER; argv: ADDRESS; optstring: String; - longopts: LongOptions; +PROCEDURE GetOptLong (argc: INTEGER; argv: ADDRESS; + optstring: String; longopts: LongOptions; VAR longindex: INTEGER) : INTEGER ; @@ -1759,10 +1789,7 @@ END IO. DEFINITION MODULE Indexing ; FROM SYSTEM IMPORT ADDRESS ; -EXPORT QUALIFIED Index, InitIndex, KillIndex, GetIndice, PutIndice, - HighIndice, LowIndice, InBounds, IsIndiceInIndex, - RemoveIndiceFromIndex, IncludeIndiceIntoIndex, - ForeachIndiceInIndexDo, DeleteIndice, DebugIndex ; + TYPE @findex Index (type) @@ -1771,6 +1798,17 @@ TYPE IndexProcedure = PROCEDURE (ADDRESS) ; +(* + InitIndexTuned - creates a dynamic array with low indice. + minsize is the initial number of elements the + array is allocated and growfactor determines how + it will be resized once it becomes full. +*) + +@findex InitIndexTuned +PROCEDURE InitIndexTuned (low, minsize, growfactor: CARDINAL) : Index ; + + (* InitIndex - creates and returns an Index. *) @@ -1877,6 +1915,14 @@ PROCEDURE IncludeIndiceIntoIndex (i: Index; a: ADDRESS) ; PROCEDURE ForeachIndiceInIndexDo (i: Index; p: IndexProcedure) ; +(* + IsEmpty - return TRUE if the array has no entries it. +*) + +@findex IsEmpty +PROCEDURE IsEmpty (i: Index) : BOOLEAN ; + + END Indexing. @end example @page @@ -1975,6 +2021,46 @@ PROCEDURE RequestDependant (modulename, libname, dependantmodule, dependantlibname: ADDRESS) ; +(* + InstallTerminationProcedure - installs a procedure, p, which will + be called when the procedure + ExecuteTerminationProcedures + is invoked. It returns TRUE is the + procedure is installed. +*) + +@findex InstallTerminationProcedure +PROCEDURE InstallTerminationProcedure (p: PROC) : BOOLEAN ; + + +(* + ExecuteInitialProcedures - executes the initial procedures installed + by InstallInitialProcedure. +*) + +@findex ExecuteInitialProcedures +PROCEDURE ExecuteInitialProcedures ; + + +(* + InstallInitialProcedure - installs a procedure to be executed just + before the BEGIN code section of the main + program module. +*) + +@findex InstallInitialProcedure +PROCEDURE InstallInitialProcedure (p: PROC) : BOOLEAN ; + + +(* + ExecuteTerminationProcedures - calls each installed termination procedure + in reverse order. +*) + +@findex ExecuteTerminationProcedures +PROCEDURE ExecuteTerminationProcedures ; + + END M2Dependent. @end example @page @@ -4428,9 +4514,9 @@ PROCEDURE nextafterf (x, y: SHORTREAL) : SHORTREAL ; PROCEDURE nextafterl (x, y: LONGREAL) : LONGREAL ; @findex nexttoward -PROCEDURE nexttoward (x, y: REAL) : REAL ; +PROCEDURE nexttoward (x: REAL; y: LONGREAL) : REAL ; @findex nexttowardf -PROCEDURE nexttowardf (x, y: SHORTREAL) : SHORTREAL ; +PROCEDURE nexttowardf (x: SHORTREAL; y: LONGREAL) : SHORTREAL ; @findex nexttowardl PROCEDURE nexttowardl (x, y: LONGREAL) : LONGREAL ; @@ -4595,7 +4681,6 @@ DEFINITION MODULE cgetopt ; FROM SYSTEM IMPORT ADDRESS ; - TYPE @findex Options (type) Options = ADDRESS ; @@ -4670,7 +4755,7 @@ PROCEDURE KillOptions (o: Options) : Options ; @findex SetOption PROCEDURE SetOption (o: Options; index: CARDINAL; - name: ADDRESS; has_arg: BOOLEAN; + name: ADDRESS; has_arg: INTEGER; VAR flag: INTEGER; val: INTEGER) ; @@ -5092,7 +5177,7 @@ PROCEDURE creat (filename: ADDRESS; mode: CARDINAL) : INTEGER; *) @findex lseek -PROCEDURE lseek (fd: INTEGER; offset: LONGINT; whence: INTEGER) : LONGINT ; +PROCEDURE lseek (fd: INTEGER; offset: CSSIZE_T; whence: INTEGER) : [ CSSIZE_T ] ; (* @@ -5902,11 +5987,6 @@ DEFINITION MODULE wrapc ; FROM SYSTEM IMPORT ADDRESS ; -EXPORT QUALIFIED strtime, filesize, fileinode, - getrand, getusername, filemtime, - getnameuidgid, signbit, signbitf, signbitl, - isfinite, isfinitel, isfinitef ; - (* strtime - returns the C string for the equivalent C asctime @@ -6008,6 +6088,65 @@ PROCEDURE isfinitef (x: SHORTREAL) : INTEGER ; PROCEDURE isfinitel (x: LONGREAL) : INTEGER ; +(* + isnan - provide non builtin alternative to the gcc builtin isnan. + Returns 1 if x is a NaN otherwise return 0. +*) + +@findex isnan +PROCEDURE isnan (x: REAL) : INTEGER ; + + +(* + isnanf - provide non builtin alternative to the gcc builtin isnanf. + Returns 1 if x is a NaN otherwise return 0. +*) + +@findex isnanf +PROCEDURE isnanf (x: SHORTREAL) : INTEGER ; + + +(* + isnanl - provide non builtin alternative to the gcc builtin isnanl. + Returns 1 if x is a NaN otherwise return 0. +*) + +@findex isnanl +PROCEDURE isnanl (x: LONGREAL) : INTEGER ; + + +(* + SeekSet - return the system libc SEEK_SET value. +*) + +@findex SeekSet +PROCEDURE SeekSet () : INTEGER ; + + +(* + SeekEnd - return the system libc SEEK_END value. +*) + +@findex SeekEnd +PROCEDURE SeekEnd () : INTEGER ; + + +(* + ReadOnly - return the system value of O_RDONLY. +*) + +@findex ReadOnly +PROCEDURE ReadOnly () : BITSET ; + + +(* + WriteOnly - return the system value of O_WRONLY. +*) + +@findex WriteOnly +PROCEDURE WriteOnly () : BITSET ; + + END wrapc. @end example @page @@ -8869,6 +9008,7 @@ coexist with their PIM counterparts. * gm2-libs-iso/ComplexMath::ComplexMath.def * gm2-libs-iso/ConvStringLong::ConvStringLong.def * gm2-libs-iso/ConvStringReal::ConvStringReal.def +* gm2-libs-iso/ConvStringShort::ConvStringShort.def * gm2-libs-iso/ConvTypes::ConvTypes.def * gm2-libs-iso/EXCEPTIONS::EXCEPTIONS.def * gm2-libs-iso/ErrnoCategory::ErrnoCategory.def @@ -8919,7 +9059,10 @@ coexist with their PIM counterparts. * gm2-libs-iso/Semaphores::Semaphores.def * gm2-libs-iso/SeqFile::SeqFile.def * gm2-libs-iso/ShortComplexMath::ShortComplexMath.def +* gm2-libs-iso/ShortConv::ShortConv.def * gm2-libs-iso/ShortIO::ShortIO.def +* gm2-libs-iso/ShortMath::ShortMath.def +* gm2-libs-iso/ShortStr::ShortStr.def * gm2-libs-iso/ShortWholeIO::ShortWholeIO.def * gm2-libs-iso/SimpleCipher::SimpleCipher.def * gm2-libs-iso/StdChans::StdChans.def @@ -8935,6 +9078,7 @@ coexist with their PIM counterparts. * gm2-libs-iso/WholeConv::WholeConv.def * gm2-libs-iso/WholeIO::WholeIO.def * gm2-libs-iso/WholeStr::WholeStr.def +* gm2-libs-iso/wrapclock::wrapclock.def * gm2-libs-iso/wrapsock::wrapsock.def * gm2-libs-iso/wraptime::wraptime.def @end menu @@ -9345,7 +9489,7 @@ END ConvStringLong. @end example @page -@node gm2-libs-iso/ConvStringReal, gm2-libs-iso/ConvTypes, gm2-libs-iso/ConvStringLong, M2 ISO Libraries +@node gm2-libs-iso/ConvStringReal, gm2-libs-iso/ConvStringShort, gm2-libs-iso/ConvStringLong, M2 ISO Libraries @subsection gm2-libs-iso/ConvStringReal @example @@ -9389,7 +9533,51 @@ END ConvStringReal. @end example @page -@node gm2-libs-iso/ConvTypes, gm2-libs-iso/EXCEPTIONS, gm2-libs-iso/ConvStringReal, M2 ISO Libraries +@node gm2-libs-iso/ConvStringShort, gm2-libs-iso/ConvTypes, gm2-libs-iso/ConvStringReal, M2 ISO Libraries +@subsection gm2-libs-iso/ConvStringShort + +@example +DEFINITION MODULE ConvStringShort ; + +FROM DynamicStrings IMPORT String ; + + +(* + RealToFloatString - converts a real with, sigFigs, into a string + and returns the result as a string. +*) + +@findex RealToFloatString +PROCEDURE RealToFloatString (real: SHORTREAL; sigFigs: CARDINAL) : String ; + + +(* + RealToEngString - converts the value of real to floating-point + string form, with sigFigs significant figures. + The number is scaled with one to three digits + in the whole number part and with an exponent + that is a multiple of three. +*) + +@findex RealToEngString +PROCEDURE RealToEngString (real: SHORTREAL; sigFigs: CARDINAL) : String ; + + +(* + RealToFixedString - returns the number of characters in the fixed-point + string representation of real rounded to the given + place relative to the decimal point. +*) + +@findex RealToFixedString +PROCEDURE RealToFixedString (real: SHORTREAL; place: INTEGER) : String ; + + +END ConvStringShort. +@end example +@page + +@node gm2-libs-iso/ConvTypes, gm2-libs-iso/EXCEPTIONS, gm2-libs-iso/ConvStringShort, M2 ISO Libraries @subsection gm2-libs-iso/ConvTypes @example @@ -13492,7 +13680,7 @@ END SeqFile. @end example @page -@node gm2-libs-iso/ShortComplexMath, gm2-libs-iso/ShortIO, gm2-libs-iso/SeqFile, M2 ISO Libraries +@node gm2-libs-iso/ShortComplexMath, gm2-libs-iso/ShortConv, gm2-libs-iso/SeqFile, M2 ISO Libraries @subsection gm2-libs-iso/ShortComplexMath @example @@ -13580,7 +13768,69 @@ END ShortComplexMath. @end example @page -@node gm2-libs-iso/ShortIO, gm2-libs-iso/ShortWholeIO, gm2-libs-iso/ShortComplexMath, M2 ISO Libraries +@node gm2-libs-iso/ShortConv, gm2-libs-iso/ShortIO, gm2-libs-iso/ShortComplexMath, M2 ISO Libraries +@subsection gm2-libs-iso/ShortConv + +@example +DEFINITION MODULE ShortConv; + +IMPORT + ConvTypes; + +TYPE +@findex ConvResults (type) + ConvResults = ConvTypes.ConvResults; (* strAllRight, strOutOfRange, + strWrongFormat, strEmpty *) + +@findex ScanReal +PROCEDURE ScanReal (inputCh: CHAR; VAR chClass: ConvTypes.ScanClass; + VAR nextState: ConvTypes.ScanState); + (* Represents the start state of a finite state scanner for real + numbers - assigns class of inputCh to chClass and a procedure + representing the next state to nextState. + *) + +@findex FormatReal +PROCEDURE FormatReal (str: ARRAY OF CHAR): ConvResults; + (* Returns the format of the string value for conversion to LONGREAL. *) + +@findex ValueReal +PROCEDURE ValueReal (str: ARRAY OF CHAR): SHORTREAL; + (* Returns the value corresponding to the real number string value + str if str is well-formed; otherwise raises the ShortConv exception. + *) + +@findex LengthFloatReal +PROCEDURE LengthFloatReal (real: SHORTREAL; sigFigs: CARDINAL): CARDINAL; + (* Returns the number of characters in the floating-point string + representation of real with sigFigs significant figures. + *) + +@findex LengthEngReal +PROCEDURE LengthEngReal (real: SHORTREAL; sigFigs: CARDINAL): CARDINAL; + (* Returns the number of characters in the floating-point engineering + string representation of real with sigFigs significant figures. + *) + +@findex LengthFixedReal +PROCEDURE LengthFixedReal (real: SHORTREAL; place: INTEGER): CARDINAL; + (* Returns the number of characters in the fixed-point string + representation of real rounded to the given place relative to the + decimal point. + *) + +@findex IsRConvException +PROCEDURE IsRConvException (): BOOLEAN; + (* Returns TRUE if the current coroutine is in the exceptional + execution state because of the raising of an exception in a + routine from this module; otherwise returns FALSE. + *) + +END ShortConv. +@end example +@page + +@node gm2-libs-iso/ShortIO, gm2-libs-iso/ShortMath, gm2-libs-iso/ShortConv, M2 ISO Libraries @subsection gm2-libs-iso/ShortIO @example @@ -13648,7 +13898,152 @@ END ShortIO. @end example @page -@node gm2-libs-iso/ShortWholeIO, gm2-libs-iso/SimpleCipher, gm2-libs-iso/ShortIO, M2 ISO Libraries +@node gm2-libs-iso/ShortMath, gm2-libs-iso/ShortStr, gm2-libs-iso/ShortIO, M2 ISO Libraries +@subsection gm2-libs-iso/ShortMath + +@example +DEFINITION MODULE ShortMath; + + (* Mathematical functions for the type LONGREAL *) + +CONST +@findex pi (const) + pi = 3.1415926535897932384626433832795028841972; +@findex exp1 (const) + exp1 = 2.7182818284590452353602874713526624977572; + +@findex sqrt +PROCEDURE __BUILTIN__ sqrt (x: SHORTREAL): SHORTREAL; + (* Returns the positive square root of x *) + +@findex exp +PROCEDURE __BUILTIN__ exp (x: SHORTREAL): SHORTREAL; + (* Returns the exponential of x *) + +@findex ln +PROCEDURE __BUILTIN__ ln (x: SHORTREAL): SHORTREAL; + (* Returns the natural logarithm of x *) + + (* The angle in all trigonometric functions is measured in radians *) + +@findex sin +PROCEDURE __BUILTIN__ sin (x: SHORTREAL): SHORTREAL; + (* Returns the sine of x *) + +@findex cos +PROCEDURE __BUILTIN__ cos (x: SHORTREAL): SHORTREAL; + (* Returns the cosine of x *) + +@findex tan +PROCEDURE tan (x: SHORTREAL): SHORTREAL; + (* Returns the tangent of x *) + +@findex arcsin +PROCEDURE arcsin (x: SHORTREAL): SHORTREAL; + (* Returns the arcsine of x *) + +@findex arccos +PROCEDURE arccos (x: SHORTREAL): SHORTREAL; + (* Returns the arccosine of x *) + +@findex arctan +PROCEDURE arctan (x: SHORTREAL): SHORTREAL; + (* Returns the arctangent of x *) + +@findex power +PROCEDURE power (base, exponent: SHORTREAL): SHORTREAL; + (* Returns the value of the number base raised to the power exponent *) + +@findex round +PROCEDURE round (x: SHORTREAL): INTEGER; + (* Returns the value of x rounded to the nearest integer *) + +@findex IsRMathException +PROCEDURE IsRMathException (): BOOLEAN; + (* Returns TRUE if the current coroutine is in the exceptional + execution state because of the raising of an exception in a + routine from this module; otherwise returns FALSE. + *) + +END ShortMath. +@end example +@page + +@node gm2-libs-iso/ShortStr, gm2-libs-iso/ShortWholeIO, gm2-libs-iso/ShortMath, M2 ISO Libraries +@subsection gm2-libs-iso/ShortStr + +@example +DEFINITION MODULE ShortStr; + + (* SHORTREAL/string conversions *) + +IMPORT + ConvTypes; + +TYPE + (* strAllRight, strOutOfRange, strWrongFormat, strEmpty *) +@findex ConvResults (type) + ConvResults = ConvTypes.ConvResults; + +(* the string form of a signed fixed-point real number is + ["+" | "-"], decimal digit, @{decimal digit@}, [".", + @{decimal digit@}] +*) + +(* the string form of a signed floating-point real number is + signed fixed-point real number, "E", ["+" | "-"], + decimal digit, @{decimal digit@} +*) + +@findex StrToReal +PROCEDURE StrToReal (str: ARRAY OF CHAR; VAR real: SHORTREAL; + VAR res: ConvResults); + (* Ignores any leading spaces in str. If the subsequent characters + in str are in the format of a signed real number, assigns a + corresponding value to real. Assigns a value indicating the + format of str to res. + *) + +@findex RealToFloat +PROCEDURE RealToFloat (real: SHORTREAL; sigFigs: CARDINAL; + VAR str: ARRAY OF CHAR); + (* Converts the value of real to floating-point string form, with + sigFigs significant figures, and copies the possibly truncated + result to str. + *) + +@findex RealToEng +PROCEDURE RealToEng (real: SHORTREAL; sigFigs: CARDINAL; + VAR str: ARRAY OF CHAR); + (* Converts the value of real to floating-point string form, with + sigFigs significant figures, and copies the possibly truncated + result to str. The number is scaled with one to three digits + in the whole number part and with an exponent that is a + multiple of three. + *) + +@findex RealToFixed +PROCEDURE RealToFixed (real: SHORTREAL; place: INTEGER; + VAR str: ARRAY OF CHAR); + (* Converts the value of real to fixed-point string form, rounded + to the given place relative to the decimal point, and copies + the possibly truncated result to str. + *) + +@findex RealToStr +PROCEDURE RealToStr (real: SHORTREAL; VAR str: ARRAY OF CHAR); + (* Converts the value of real as RealToFixed if the sign and + magnitude can be shown within the capacity of str, or + otherwise as RealToFloat, and copies the possibly truncated + result to str. The number of places or significant digits + depend on the capacity of str. + *) + +END ShortStr. +@end example +@page + +@node gm2-libs-iso/ShortWholeIO, gm2-libs-iso/SimpleCipher, gm2-libs-iso/ShortStr, M2 ISO Libraries @subsection gm2-libs-iso/ShortWholeIO @example @@ -14567,7 +14962,7 @@ END WholeIO. @end example @page -@node gm2-libs-iso/WholeStr, gm2-libs-iso/wrapsock, gm2-libs-iso/WholeIO, M2 ISO Libraries +@node gm2-libs-iso/WholeStr, gm2-libs-iso/wrapclock, gm2-libs-iso/WholeIO, M2 ISO Libraries @subsection gm2-libs-iso/WholeStr @example @@ -14624,7 +15019,139 @@ END WholeStr. @end example @page -@node gm2-libs-iso/wrapsock, gm2-libs-iso/wraptime, gm2-libs-iso/WholeStr, M2 ISO Libraries +@node gm2-libs-iso/wrapclock, gm2-libs-iso/wrapsock, gm2-libs-iso/WholeStr, M2 ISO Libraries +@subsection gm2-libs-iso/wrapclock + +@example +DEFINITION MODULE wrapclock ; + +FROM SYSTEM IMPORT ADDRESS ; + +TYPE +@findex timespec (type) + timespec = ADDRESS ; + + +(* + timezone - return the glibc timezone value. + This contains the difference between UTC and the latest + local standard time, in seconds west of UTC. + If the underlying timezone is unavailable and + clock_gettime, localtime_r, tm_gmtoff + is unavailable then 0 is returned. +*) + +@findex timezone +PROCEDURE timezone () : LONGINT ; + + +(* + istimezone returns 1 if timezone in wrapclock.cc can resolve the + timezone value using the timezone C library call or by using + clock_gettime, localtime_r and tm_gmtoff. +*) + +@findex istimezone +PROCEDURE istimezone () : INTEGER ; + + +(* + daylight - return the glibc daylight value. + This variable has a nonzero value if Daylight Saving + Time rules apply. + A nonzero value does not necessarily mean that Daylight + Saving Time is now in effect; it means only that Daylight + Saving Time is sometimes in effect. +*) + +@findex daylight +PROCEDURE daylight () : INTEGER ; + + +(* + isdst - returns 1 if daylight saving time is currently in effect and + returns 0 if it is not. +*) + +@findex isdst +PROCEDURE isdst () : INTEGER ; + + +(* + tzname - returns the string associated with the local timezone. + The daylight value is 0 or 1. The value 0 returns the non + daylight saving timezone string and the value of 1 returns + the daylight saving timezone string. +*) + +@findex tzname +PROCEDURE tzname (daylight: INTEGER) : ADDRESS ; + + +(* + InitTimespec - returns a newly created opaque type. +*) + +@findex InitTimespec +PROCEDURE InitTimespec () : timespec ; + + +(* + KillTimespec - deallocates the memory associated with an + opaque type. +*) + +@findex KillTimespec +PROCEDURE KillTimespec (tv: timespec) : timespec ; + + +(* + GetTimespec - retrieves the number of seconds and nanoseconds + from the timespec. A return value of 0 means timespec + is unavailable and a return value of 1 indicates success. +*) + +@findex GetTimespec +PROCEDURE GetTimespec (ts: timespec; VAR sec, nano: LONGCARD) : INTEGER ; + + +(* + SetTimespec - sets the number of seconds and nanoseconds + into timespec. A return value of 0 means timespec + is unavailable and a return value of 1 indicates success. +*) + +@findex SetTimespec +PROCEDURE SetTimespec (ts: timespec; sec, nano: LONGCARD) : INTEGER ; + + +(* + GetTimeRealtime - performs return gettime (CLOCK_REALTIME, ts). + gettime returns 0 on success and -1 on failure. + If the underlying system does not have gettime + then GetTimeRealtime returns 1. +*) + +@findex GetTimeRealtime +PROCEDURE GetTimeRealtime (ts: timespec) : INTEGER ; + + +(* + SetTimeRealtime - performs return settime (CLOCK_REALTIME, ts). + gettime returns 0 on success and -1 on failure. + If the underlying system does not have gettime + then SetTimeRealtime returns 1. +*) + +@findex SetTimeRealtime +PROCEDURE SetTimeRealtime (ts: timespec) : INTEGER ; + + +END wrapclock. +@end example +@page + +@node gm2-libs-iso/wrapsock, gm2-libs-iso/wraptime, gm2-libs-iso/wrapclock, M2 ISO Libraries @subsection gm2-libs-iso/wrapsock @example From 78b56a12dd028b9b4051422c6bad6260055e4465 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Mon, 25 Mar 2024 11:24:08 +0100 Subject: [PATCH 241/551] amdgcn: Add gfx1036 target Add support for the gfx1036 RDNA2 APU integrated graphics devices. The ROCm documentation warns that these may not be supported, but it seems to work at least partially. gcc/ChangeLog: * config.gcc (amdgcn): Add gfx1036 entries. * config/gcn/gcn-hsa.h (NO_XNACK): Likewise. (gcn_local_sym_hash): Likewise. * config/gcn/gcn-opts.h (enum processor_type): Likewise. (TARGET_GFX1036): New macro. * config/gcn/gcn.cc (gcn_option_override): Handle gfx1036. (gcn_omp_device_kind_arch_isa): Likewise. (output_file_start): Likewise. * config/gcn/gcn.h (TARGET_CPU_CPP_BUILTINS): Add __gfx1036__. (TARGET_CPU_CPP_BUILTINS): Rename __gfx1030 to __gfx1030__. * config/gcn/gcn.opt: Add gfx1036. * config/gcn/mkoffload.cc (EF_AMDGPU_MACH_AMDGCN_GFX1036): New. (main): Handle gfx1036. * config/gcn/t-omp-device: Add gfx1036 isa. * doc/install.texi (amdgcn): Add gfx1036. * doc/invoke.texi (-march): Likewise. libgomp/ChangeLog: * plugin/plugin-gcn.c (EF_AMDGPU_MACH): GFX1036. (gcn_gfx1103_s): New. (isa_hsa_name): Handle gfx1036. (isa_code): Likewise. (max_isa_vgprs): Likewise. --- gcc/config.gcc | 4 ++-- gcc/config/gcn/gcn-hsa.h | 6 +++--- gcc/config/gcn/gcn-opts.h | 2 ++ gcc/config/gcn/gcn.cc | 10 ++++++++++ gcc/config/gcn/gcn.h | 4 +++- gcc/config/gcn/gcn.opt | 3 +++ gcc/config/gcn/mkoffload.cc | 5 +++++ gcc/config/gcn/t-omp-device | 2 +- gcc/doc/install.texi | 3 ++- gcc/doc/invoke.texi | 3 +++ libgomp/plugin/plugin-gcn.c | 8 ++++++++ 11 files changed, 42 insertions(+), 8 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index 87a5c92b6e3b..17873ac21039 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4560,7 +4560,7 @@ case "${target}" in for which in arch tune; do eval "val=\$with_$which" case ${val} in - "" | fiji | gfx900 | gfx906 | gfx908 | gfx90a | gfx1030 | gfx1100 | gfx1103) + "" | fiji | gfx900 | gfx906 | gfx908 | gfx90a | gfx1030 | gfx1036 | gfx1100 | gfx1103) # OK ;; *) @@ -4576,7 +4576,7 @@ case "${target}" in TM_MULTILIB_CONFIG= ;; xdefault | xyes) - TM_MULTILIB_CONFIG=`echo "gfx900,gfx906,gfx908,gfx90a,gfx1030,gfx1100,gfx1103" | sed "s/${with_arch},\?//;s/,$//"` + TM_MULTILIB_CONFIG=`echo "gfx900,gfx906,gfx908,gfx90a,gfx1030,gfx1036,gfx1100,gfx1103" | sed "s/${with_arch},\?//;s/,$//"` ;; *) TM_MULTILIB_CONFIG="${with_multilib_list}" diff --git a/gcc/config/gcn/gcn-hsa.h b/gcc/config/gcn/gcn-hsa.h index ac32b8a328fa..7d6e3141cea1 100644 --- a/gcc/config/gcn/gcn-hsa.h +++ b/gcc/config/gcn/gcn-hsa.h @@ -90,7 +90,7 @@ extern unsigned int gcn_local_sym_hash (const char *name); the ELF flags (e_flags) of that generated file must be identical to those generated by the compiler. */ -#define NO_XNACK "march=fiji:;march=gfx1030:;march=gfx1100:;march=gfx1103:;" \ +#define NO_XNACK "march=fiji:;march=gfx1030:;march=gfx1036:;march=gfx1100:;march=gfx1103:;" \ /* These match the defaults set in gcn.cc. */ \ "!mxnack*|mxnack=default:%{march=gfx900|march=gfx906|march=gfx908:-mattr=-xnack};" #define NO_SRAM_ECC "!march=*:;march=fiji:;march=gfx900:;march=gfx906:;" @@ -106,8 +106,8 @@ extern unsigned int gcn_local_sym_hash (const char *name); "%{" ABI_VERSION_SPEC "} " \ "%{" NO_XNACK XNACKOPT "} " \ "%{" NO_SRAM_ECC SRAMOPT "} " \ - "%{march=gfx1030|march=gfx1100|march=gfx1103:-mattr=+wavefrontsize64} " \ - "%{march=gfx1030|march=gfx1100|march=gfx1103:-mattr=+cumode} " \ + "%{march=gfx1030|march=gfx1036|march=gfx1100|march=gfx1103:-mattr=+wavefrontsize64} " \ + "%{march=gfx1030|march=gfx1036|march=gfx1100|march=gfx1103:-mattr=+cumode} " \ "-filetype=obj" #define LINK_SPEC "--pie --export-dynamic" #define LIB_SPEC "-lc" diff --git a/gcc/config/gcn/gcn-opts.h b/gcc/config/gcn/gcn-opts.h index 285746f7f4dd..49099bad7e72 100644 --- a/gcc/config/gcn/gcn-opts.h +++ b/gcc/config/gcn/gcn-opts.h @@ -26,6 +26,7 @@ enum processor_type PROCESSOR_GFX908, PROCESSOR_GFX90a, PROCESSOR_GFX1030, + PROCESSOR_GFX1036, PROCESSOR_GFX1100, PROCESSOR_GFX1103 }; @@ -36,6 +37,7 @@ enum processor_type #define TARGET_GFX908 (gcn_arch == PROCESSOR_GFX908) #define TARGET_GFX90a (gcn_arch == PROCESSOR_GFX90a) #define TARGET_GFX1030 (gcn_arch == PROCESSOR_GFX1030) +#define TARGET_GFX1036 (gcn_arch == PROCESSOR_GFX1036) #define TARGET_GFX1100 (gcn_arch == PROCESSOR_GFX1100) #define TARGET_GFX1103 (gcn_arch == PROCESSOR_GFX1103) diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index efb73af50c44..700e554855e5 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -139,6 +139,7 @@ gcn_option_override (void) : gcn_arch == PROCESSOR_GFX908 ? ISA_CDNA1 : gcn_arch == PROCESSOR_GFX90a ? ISA_CDNA2 : gcn_arch == PROCESSOR_GFX1030 ? ISA_RDNA2 + : gcn_arch == PROCESSOR_GFX1036 ? ISA_RDNA2 : gcn_arch == PROCESSOR_GFX1100 ? ISA_RDNA3 : gcn_arch == PROCESSOR_GFX1103 ? ISA_RDNA3 : ISA_UNKNOWN); @@ -165,6 +166,7 @@ gcn_option_override (void) /* gfx803 "Fiji", gfx1030 and gfx1100 do not support XNACK. */ if (gcn_arch == PROCESSOR_FIJI || gcn_arch == PROCESSOR_GFX1030 + || gcn_arch == PROCESSOR_GFX1036 || gcn_arch == PROCESSOR_GFX1100 || gcn_arch == PROCESSOR_GFX1103) { @@ -172,6 +174,7 @@ gcn_option_override (void) error ("%<-mxnack=on%> is incompatible with %<-march=%s%>", (gcn_arch == PROCESSOR_FIJI ? "fiji" : gcn_arch == PROCESSOR_GFX1030 ? "gfx1030" + : gcn_arch == PROCESSOR_GFX1036 ? "gfx1036" : gcn_arch == PROCESSOR_GFX1100 ? "gfx1100" : gcn_arch == PROCESSOR_GFX1103 ? "gfx1103" : NULL)); @@ -3049,6 +3052,8 @@ gcn_omp_device_kind_arch_isa (enum omp_device_kind_arch_isa trait, return gcn_arch == PROCESSOR_GFX90a; if (strcmp (name, "gfx1030") == 0) return gcn_arch == PROCESSOR_GFX1030; + if (strcmp (name, "gfx1036") == 0) + return gcn_arch == PROCESSOR_GFX1036; if (strcmp (name, "gfx1100") == 0) return gcn_arch == PROCESSOR_GFX1100; if (strcmp (name, "gfx1103") == 0) @@ -6584,6 +6589,11 @@ output_file_start (void) xnack = ""; sram_ecc = ""; break; + case PROCESSOR_GFX1036: + cpu = "gfx1036"; + xnack = ""; + sram_ecc = ""; + break; case PROCESSOR_GFX1100: cpu = "gfx1100"; xnack = ""; diff --git a/gcc/config/gcn/gcn.h b/gcc/config/gcn/gcn.h index b003db6cd26d..4148ceaf5828 100644 --- a/gcc/config/gcn/gcn.h +++ b/gcc/config/gcn/gcn.h @@ -48,7 +48,9 @@ else if (TARGET_GFX90a) \ builtin_define ("__gfx90a__"); \ else if (TARGET_GFX1030) \ - builtin_define ("__gfx1030"); \ + builtin_define ("__gfx1030__"); \ + else if (TARGET_GFX1036) \ + builtin_define ("__gfx1036__"); \ else if (TARGET_GFX1100) \ builtin_define ("__gfx1100__"); \ else if (TARGET_GFX1103) \ diff --git a/gcc/config/gcn/gcn.opt b/gcc/config/gcn/gcn.opt index e06a2849d909..1067b45f2947 100644 --- a/gcc/config/gcn/gcn.opt +++ b/gcc/config/gcn/gcn.opt @@ -43,6 +43,9 @@ Enum(gpu_type) String(gfx90a) Value(PROCESSOR_GFX90a) EnumValue Enum(gpu_type) String(gfx1030) Value(PROCESSOR_GFX1030) +EnumValue +Enum(gpu_type) String(gfx1036) Value(PROCESSOR_GFX1036) + EnumValue Enum(gpu_type) String(gfx1100) Value(PROCESSOR_GFX1100) diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc index 58eeada82958..04356b861957 100644 --- a/gcc/config/gcn/mkoffload.cc +++ b/gcc/config/gcn/mkoffload.cc @@ -59,6 +59,8 @@ #define EF_AMDGPU_MACH_AMDGCN_GFX90a 0x3f #undef EF_AMDGPU_MACH_AMDGCN_GFX1030 #define EF_AMDGPU_MACH_AMDGCN_GFX1030 0x36 +#undef EF_AMDGPU_MACH_AMDGCN_GFX1036 +#define EF_AMDGPU_MACH_AMDGCN_GFX1036 0x45 #undef EF_AMDGPU_MACH_AMDGCN_GFX1100 #define EF_AMDGPU_MACH_AMDGCN_GFX1100 0x41 #undef EF_AMDGPU_MACH_AMDGCN_GFX1103 @@ -971,6 +973,8 @@ main (int argc, char **argv) elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX90a; else if (strcmp (argv[i], "-march=gfx1030") == 0) elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1030; + else if (strcmp (argv[i], "-march=gfx1036") == 0) + elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1036; else if (strcmp (argv[i], "-march=gfx1100") == 0) elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1100; else if (strcmp (argv[i], "-march=gfx1103") == 0) @@ -1016,6 +1020,7 @@ main (int argc, char **argv) { case EF_AMDGPU_MACH_AMDGCN_GFX803: case EF_AMDGPU_MACH_AMDGCN_GFX1030: + case EF_AMDGPU_MACH_AMDGCN_GFX1036: case EF_AMDGPU_MACH_AMDGCN_GFX1100: case EF_AMDGPU_MACH_AMDGCN_GFX1103: SET_XNACK_UNSET (elf_flags); diff --git a/gcc/config/gcn/t-omp-device b/gcc/config/gcn/t-omp-device index 037df2657ccf..7bcf910cbd0f 100644 --- a/gcc/config/gcn/t-omp-device +++ b/gcc/config/gcn/t-omp-device @@ -1,4 +1,4 @@ omp-device-properties-gcn: $(srcdir)/config/gcn/gcn.cc echo kind: gpu > $@ echo arch: amdgcn gcn >> $@ - echo isa: fiji gfx803 gfx900 gfx906 gfx908 gfx90a gfx1030 gfx1100 gfx1103 >> $@ + echo isa: fiji gfx803 gfx900 gfx906 gfx908 gfx90a gfx1030 gfx1036 gfx1100 gfx1103 >> $@ diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index a9872e86beef..269fe7ec8701 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1266,7 +1266,8 @@ default set of libraries is selected based on the value of @item amdgcn*-*-* @var{list} is a comma separated list of ISA names (allowed values: @code{fiji}, @code{gfx900}, @code{gfx906}, @code{gfx908}, @code{gfx90a}, @code{gfx1030}, -@code{gfx1100}, @code{gfx1103}). It ought not include the name of the default +@code{gfx1036}, @code{gfx1100}, @code{gfx1103}). +It ought not include the name of the default ISA, specified via @option{--with-arch}. If @var{list} is empty, then there will be no multilibs and only the default run-time library will be built. If @var{list} is @code{default} or @option{--with-multilib-list=} is not diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e7b962123544..d09074e13de4 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -21792,6 +21792,9 @@ Compile for CDNA2 Instinct MI200 series devices (gfx90a). @item gfx1030 Compile for RDNA2 gfx1030 devices (GFX10 series). +@item gfx1036 +Compile for RDNA2 gfx1036 devices (GFX10 series). + @item gfx1100 Compile for RDNA3 gfx1100 devices (GFX11 series). diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 53dc1c7d23ad..1d183b61ca4f 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -391,6 +391,7 @@ typedef enum { EF_AMDGPU_MACH_AMDGCN_GFX908 = 0x030, EF_AMDGPU_MACH_AMDGCN_GFX90a = 0x03f, EF_AMDGPU_MACH_AMDGCN_GFX1030 = 0x036, + EF_AMDGPU_MACH_AMDGCN_GFX1036 = 0x045, EF_AMDGPU_MACH_AMDGCN_GFX1100 = 0x041, EF_AMDGPU_MACH_AMDGCN_GFX1103 = 0x044 } EF_AMDGPU_MACH; @@ -1677,6 +1678,7 @@ const static char *gcn_gfx906_s = "gfx906"; const static char *gcn_gfx908_s = "gfx908"; const static char *gcn_gfx90a_s = "gfx90a"; const static char *gcn_gfx1030_s = "gfx1030"; +const static char *gcn_gfx1036_s = "gfx1036"; const static char *gcn_gfx1100_s = "gfx1100"; const static char *gcn_gfx1103_s = "gfx1103"; const static int gcn_isa_name_len = 7; @@ -1700,6 +1702,8 @@ isa_hsa_name (int isa) { return gcn_gfx90a_s; case EF_AMDGPU_MACH_AMDGCN_GFX1030: return gcn_gfx1030_s; + case EF_AMDGPU_MACH_AMDGCN_GFX1036: + return gcn_gfx1036_s; case EF_AMDGPU_MACH_AMDGCN_GFX1100: return gcn_gfx1100_s; case EF_AMDGPU_MACH_AMDGCN_GFX1103: @@ -1746,6 +1750,9 @@ isa_code(const char *isa) { if (!strncmp (isa, gcn_gfx1030_s, gcn_isa_name_len)) return EF_AMDGPU_MACH_AMDGCN_GFX1030; + if (!strncmp (isa, gcn_gfx1036_s, gcn_isa_name_len)) + return EF_AMDGPU_MACH_AMDGCN_GFX1036; + if (!strncmp (isa, gcn_gfx1100_s, gcn_isa_name_len)) return EF_AMDGPU_MACH_AMDGCN_GFX1100; @@ -1770,6 +1777,7 @@ max_isa_vgprs (int isa) case EF_AMDGPU_MACH_AMDGCN_GFX90a: return 512; case EF_AMDGPU_MACH_AMDGCN_GFX1030: + case EF_AMDGPU_MACH_AMDGCN_GFX1036: return 512; /* 512 SIMD32 = 256 wavefrontsize64. */ case EF_AMDGPU_MACH_AMDGCN_GFX1100: case EF_AMDGPU_MACH_AMDGCN_GFX1103: From c2e68ff9edd5da7a55ba6574b4ce49ce6495b18d Mon Sep 17 00:00:00 2001 From: Max Filippov <jcmvbkbc@gmail.com> Date: Fri, 22 Mar 2024 13:03:46 -0700 Subject: [PATCH 242/551] libgcc: arm: fix build for FDPIC target libgcc/ * unwind-arm-common.inc (__gnu_personality_sigframe_fdpic): Cast last argument of _Unwind_VRS_Set to void *. --- libgcc/unwind-arm-common.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libgcc/unwind-arm-common.inc b/libgcc/unwind-arm-common.inc index 5453f38186b5..576f7e93e8a8 100644 --- a/libgcc/unwind-arm-common.inc +++ b/libgcc/unwind-arm-common.inc @@ -248,7 +248,7 @@ __gnu_personality_sigframe_fdpic (_Unwind_State state, + ARM_SIGCONTEXT_R0; /* Restore regs saved on stack by the kernel. */ for (i = 0; i < 16; i++) - _Unwind_VRS_Set (context, _UVRSC_CORE, i, _UVRSD_UINT32, sp + 4 * i); + _Unwind_VRS_Set (context, _UVRSC_CORE, i, _UVRSD_UINT32, (void *)(sp + 4 * i)); return _URC_CONTINUE_UNWIND; } From 18555b914316e8c1fb11ee821f2ee839d834e58e Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Mon, 25 Mar 2024 18:28:48 +0000 Subject: [PATCH 243/551] Update gcc sv.po * sv.po: Update. --- gcc/po/sv.po | 700 ++++++++++++++++++++------------------------------- 1 file changed, 279 insertions(+), 421 deletions(-) diff --git a/gcc/po/sv.po b/gcc/po/sv.po index 072bedbd9d5a..514eb7c764aa 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -32,7 +32,7 @@ msgstr "" "Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2024-03-17 20:14+0100\n" +"PO-Revision-Date: 2024-03-24 12:59+0100\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -40363,16 +40363,14 @@ msgid "either %<-fopenacc%> or %<-fopenmp%> must be set" msgstr "antingen %<-fopenacc%> eller %<-fopenmp%> måste vara satt" #: config/gcn/mkoffload.cc:1039 -#, fuzzy, gcc-internal-format -#| msgid "unhandled expression" +#, gcc-internal-format msgid "unhandled architecture" -msgstr "ohanterat uttryck" +msgstr "ohanterad arkitektur" #: config/gcn/mkoffload.cc:1079 config/gcn/mkoffload.cc:1231 -#, fuzzy, gcc-internal-format -#| msgid "cannot open %s" +#, gcc-internal-format msgid "cannot open %qs" -msgstr "kan inte öppna %s" +msgstr "kan inte öppna %qs" #: config/gcn/mkoffload.cc:1217 config/nvptx/mkoffload.cc:841 #, gcc-internal-format @@ -40729,16 +40727,14 @@ msgid "%<-mstringop-strategy=rep_8byte%> not supported for 32-bit code" msgstr "%<-mstringop-strategy=rep_8byte%> stödjs inte för 32-bitarskod" #: config/i386/i386-options.cc:2143 -#, fuzzy, gcc-internal-format -#| msgid "%<-muintr%> not supported for 32-bit code" +#, gcc-internal-format msgid "%<-mapxf%> is not supported for 32-bit code" -msgstr "%<-muintr%> stödjs inte för 32-bitarskod" +msgstr "%<-mapxf%> stödjs inte för 32-bitarskod" #: config/i386/i386-options.cc:2145 -#, fuzzy, gcc-internal-format -#| msgid "%<-mlam=%> option: [u48|u57] not supported for 32-bit code" +#, gcc-internal-format msgid "%<-mapx-features=%> option is not supported for 32-bit code" -msgstr "%<-mlam=%> flaggan: [u48|u57] stödjs inte för 32-bitarskod" +msgstr "flaggan %<-mapx-features=%>- stödjs inte för 32-bitarskod" #: config/i386/i386-options.cc:2148 #, gcc-internal-format @@ -41318,10 +41314,9 @@ msgid "the ABI of passing C structures with zero-width bit-fields has changed in msgstr "ABI:et för att skicka C-poster med bitfält med nollbredd har ändrats i GCC %{12.1%}" #: config/i386/i386.cc:2722 config/i386/i386.cc:4091 config/i386/i386.cc:4101 -#, fuzzy, gcc-internal-format -#| msgid "SSE register return with SSE disabled" +#, gcc-internal-format msgid "SSE register return with SSE2 disabled" -msgstr "SSE-registerretur med SSE avaktiverat" +msgstr "SSE-registerretur med SSE2 avaktiverat" #: config/i386/i386.cc:2724 #, gcc-internal-format @@ -41329,10 +41324,9 @@ msgid "SSE register return with SSE disabled" msgstr "SSE-registerretur med SSE avaktiverat" #: config/i386/i386.cc:2731 -#, fuzzy, gcc-internal-format -#| msgid "SSE register argument with SSE disabled" +#, gcc-internal-format msgid "SSE register argument with SSE2 disabled" -msgstr "SSE-registerargument med SSE avaktiverat" +msgstr "SSE-registerargument med SSE2 avaktiverat" #: config/i386/i386.cc:2733 #, gcc-internal-format @@ -41436,10 +41430,9 @@ msgid "the alignment of %<_Atomic %T%> fields changed in %{GCC 11.1%}" msgstr "justeringen av %<_Atomic %T%>-fält ändrades i %{GCC 11.1%}" #: config/i386/i386.cc:22794 -#, fuzzy, gcc-internal-format -#| msgid "no low registers available for popping high registers" +#, gcc-internal-format msgid "no register available for profiling %<-mcmodel=large%s%>" -msgstr "inga låga register tillgängliga för att poppa höga register" +msgstr "inga register tillgängliga för profilering %<-mcmodel=large%s%>" #: config/i386/i386.cc:22890 #, gcc-internal-format @@ -41447,10 +41440,9 @@ msgid "profiling %<-mcmodel=large%> with PIC is not supported" msgstr "profileringen %<-mcmodel=large%> med PIC stödjs inte" #: config/i386/i386.cc:23603 -#, fuzzy, gcc-internal-format -#| msgid "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since GCC V13, be careful of implicit conversion between %<__bf16%> and %<short%>; a explicit bitcast may be needed here" +#, gcc-internal-format msgid "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since GCC 13.1, be careful of implicit conversion between %<__bf16%> and %<short%>; an explicit bitcast may be needed here" -msgstr "%<__bfloat16%> är omdefinierat från typedef %<short%> till reell %<__bf16%> sedan GCC V13, var vaksam på implicita konverteringar mellan %<__bf16%> och %<short%>; en explicit bittypkonvertering kan behövas här" +msgstr "%<__bfloat16%> är omdefinierat från typedef %<short%> till reell %<__bf16%> sedan GCC 13.1, var vaksam på implicita konverteringar mellan %<__bf16%> och %<short%>; en explicit bittypkonvertering kan behövas här" #: config/i386/i386.cc:25052 #, gcc-internal-format @@ -41559,16 +41551,14 @@ msgid "unknown processor ID %<0x%x%>, some tuning parameters will fall back to d msgstr "okänd processor-ID %<0x%x%>, några trimningsparametrar kommer återställas till standardvärden" #: config/loongarch/loongarch-cpu.cc:141 -#, fuzzy, gcc-internal-format -#| msgid "unknown base architecture %<0x%x%>, %qs failed" +#, gcc-internal-format msgid "unknown native base architecture %<0x%x%>, %qs failed" -msgstr "okänd basarkitektur %<0x%x%>, %qs misslyckades" +msgstr "okänd nativ basarkitektur %<0x%x%>, %qs misslyckades" #: config/loongarch/loongarch-cpu.cc:170 -#, fuzzy, gcc-internal-format -#| msgid "unknown FPU type %<0x%x%>, %qs failed" +#, gcc-internal-format msgid "unknown native FPU type %<0x%x%>, %qs failed" -msgstr "okänd FPU-typ %<0x%x%>, %qs misslyckades" +msgstr "okänd nativ FPU-typ %<0x%x%>, %qs misslyckades" #: config/loongarch/loongarch-cpu.cc:177 #, gcc-internal-format @@ -41612,10 +41602,9 @@ msgid "%qs is disabled by %<-m%s%>, because it requires %<%s%s%>" msgstr "%qs avaktiveras av %<-m%s%> eftersom det kräver %<%s%s%>" #: config/loongarch/loongarch-opts.cc:389 -#, fuzzy, gcc-internal-format -#| msgid "switch %<-mcpu=%s%> conflicts with switch %<-march=%s%>" +#, gcc-internal-format msgid "%<-m%s=%s%> conflicts with %qs, which requires %<%s%s%>" -msgstr "flaggan %<-mcpu=%s%> står i konflikt med flaggan %<-march=%s%>" +msgstr "%<-m%s=%s%> står i konflikt med %qs, vilken kräver %<%s%s%>" #: config/loongarch/loongarch-opts.cc:433 #, gcc-internal-format @@ -41835,10 +41824,9 @@ msgid "%qE attribute requires a string argument" msgstr "attributet %qE behöver ett strängargument" #: config/mips/mips.cc:1340 -#, fuzzy, gcc-internal-format -#| msgid "argument to %qE attribute is neither zero, nor one" +#, gcc-internal-format msgid "argument to %qE attribute is neither no, pcrel nor yes" -msgstr "argumentet till attributet %qE är varken noll eller ett" +msgstr "argumentet till attributet %qE är varken no, pcrel eller yes" #: config/mips/mips.cc:1506 config/mips/mips.cc:1510 #, gcc-internal-format @@ -41933,10 +41921,9 @@ msgid "MSA MIPS16 code" msgstr "MSA MIPS16-kod" #: config/mips/mips.cc:20067 -#, fuzzy, gcc-internal-format -#| msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" +#, gcc-internal-format msgid "MIPS16 requires %<-mexplicit-relocs%>" -msgstr "%<-mno-gpopt%> behöver %<-mexplicit-relocs%>" +msgstr "MIPS16 behöver %<-mexplicit-relocs%>" #: config/mips/mips.cc:20258 config/mips/mips.cc:20263 #: config/mips/mips.cc:20353 config/mips/mips.cc:20355 @@ -42802,10 +42789,9 @@ msgid "PTX version (%<-mptx%>) needs to be at least %s to support selected %<-mi msgstr "PTX-version (%<-mptx%>) behöver vara åtminstone %s för att stödja vald %<-misa%> (sm_%s)" #: config/nvptx/nvptx.cc:340 -#, fuzzy, gcc-internal-format -#| msgid "multiple %<-mcpu=%> options specified" +#, gcc-internal-format msgid "%<-march=%> must be specified" -msgstr "flera %<-mcpu=%>-flaggor angivna" +msgstr "%<-march=%> måste anges" #: config/nvptx/nvptx.cc:363 #, gcc-internal-format @@ -42984,10 +42970,9 @@ msgid "%<#pragma riscv intrinsic%> requires a string parameter" msgstr "%<#pragma riscv intrinsic%> kräver en strängparameter" #: config/riscv/riscv-c.cc:203 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma riscv intrinsic%> option %qs needs 'V' extension enabled" +#, gcc-internal-format msgid "%<#pragma riscv intrinsic%> option %qs needs 'V' or 'XTHEADVECTOR' extension enabled" -msgstr "%<#pragma riscv intrinsic%>-alternativet %qs behöver ha utvidgningen ”V” aktiverad" +msgstr "%<#pragma riscv intrinsic%>-alternativet %qs behöver ha utvidgningen ”V” eller ”XTHEADVECTOR” aktiverad" #: config/riscv/riscv-c.cc:211 #, gcc-internal-format @@ -43020,10 +43005,9 @@ msgid "%<target()%> attribute: unknown CPU %qs" msgstr "attributet %<target()%>: okänd CPU %qs" #: config/riscv/riscv-target-attr.cc:195 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target()%> attribute: tune appears more than once" -msgstr "målattribut stödjs inte på denna maskin" +msgstr "attributet %<target()%>: trimning förekommer mer än en gång" #: config/riscv/riscv-target-attr.cc:201 #, gcc-internal-format @@ -43031,34 +43015,29 @@ msgid "%<target()%> attribute: unknown TUNE %qs" msgstr "attributet %<target()%>: okänd TUNE %qs" #: config/riscv/riscv-target-attr.cc:240 -#, fuzzy, gcc-internal-format -#| msgid "malformed %<target()%> pragma or attribute" +#, gcc-internal-format msgid "malformed %<target()%> attribute" -msgstr "felformaterat pragma eller attribut %<target()%>" +msgstr "felformaterat attribut %<target()%>" #: config/riscv/riscv-target-attr.cc:254 -#, fuzzy, gcc-internal-format -#| msgid "pragma or attribute %<target(\"%s\")%> does not accept an argument" +#, gcc-internal-format msgid "attribute %<target(\"%s\")%> does not accept an argument" -msgstr "pragmat eller attributet %<target(\"%s\")%> tar inte något argument" +msgstr "attributet %<target(\"%s\")%> tar inte något argument" #: config/riscv/riscv-target-attr.cc:271 -#, fuzzy, gcc-internal-format -#| msgid "unknown attribute %qs" +#, gcc-internal-format msgid "Got unknown attribute %<target(\"%s\")%>" -msgstr "okänt attribut %qs" +msgstr "Fick ett okänt attribut %<target(\"%s\")%>" #: config/riscv/riscv-target-attr.cc:352 -#, fuzzy, gcc-internal-format -#| msgid "malformed %<target(\"%s\")%> pragma or attribute" +#, gcc-internal-format msgid "malformed %<target(\"%s\")%> attribute" -msgstr "felformaterat pragma eller attribut %<target(\"%s\")%>" +msgstr "felformaterat attribut %<target(\"%s\")%>" #: config/riscv/riscv-vector-builtins.cc:4239 -#, fuzzy, gcc-internal-format -#| msgid "passing %wd to argument %d of %qE, which expects a value in the range [%wd, %wd]" +#, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects a value in the range [%wd, %wd] or %wd" -msgstr "skickar %wd som argument %d till %qE, vilken förväntar sig ett värdet i intervallet [%wd, %wd]" +msgstr "skickar %wd som argument %d till %qE, vilken förväntar sig ett värdet i intervallet [%wd, %wd] eller %wd" #: config/riscv/riscv-vector-builtins.cc:4435 #, gcc-internal-format @@ -43111,10 +43090,9 @@ msgid "capture by copy of RVV type %qT" msgstr "fångst av kopia av RVV-typen %qT" #: config/riscv/riscv-vector-builtins.cc:4633 -#, fuzzy, gcc-internal-format -#| msgid "no matching function for call to %<%s(%A)%>" +#, gcc-internal-format msgid "no matching function call to %qE with empty arguments" -msgstr "ingen funktion som stämmer för anrop av %<%s(%A)%>" +msgstr "ingen funktion som stämmer för anrop av %qE med tomma argument" #: config/riscv/riscv.cc:647 #, gcc-internal-format @@ -43137,10 +43115,9 @@ msgid "ABI for flattened struct with zero-length bit-fields changed in GCC 10" msgstr "ABI:et för en tillplattad post med nollängds bitfält ändrades i GCC 10" #: config/riscv/riscv.cc:5237 -#, fuzzy, gcc-internal-format -#| msgid "SVE type %qT cannot be passed to an unprototyped function" +#, gcc-internal-format msgid "RVV type %qT cannot be passed to an unprototyped function" -msgstr "SVE-typen %qT kan inte skickas till en funktion utan prototyp" +msgstr "RVV-typen %qT kan inte skickas till en funktion utan prototyp" #: config/riscv/riscv.cc:5515 #, gcc-internal-format @@ -43158,16 +43135,14 @@ msgid "Current RISC-V GCC does not support VLEN greater than 4096bit for 'V' Ext msgstr "Aktuell RISC-V GCC stödjer inte VLEN större än 4096 bitar till utökningen ”V”" #: config/riscv/riscv.cc:8923 -#, fuzzy, gcc-internal-format -#| msgid "target CPU does not support ARM mode" +#, gcc-internal-format msgid "Current RISC-V GCC does not support RVV in big-endian mode" -msgstr "målprocessorn stödjer inte ARM-läge" +msgstr "Nuvarande RISC-V GCC stödjer inte RVV i läget rak byteordning" #: config/riscv/riscv.cc:8949 config/riscv/riscv.cc:8952 -#, fuzzy, gcc-internal-format -#| msgid "code model %qs with %<-f%s%>" +#, gcc-internal-format msgid "code model %qs with %qs" -msgstr "kodmodell %qs med %<-f%s%>" +msgstr "kodmodell %qs med %qs" #: config/riscv/riscv.cc:8981 #, gcc-internal-format @@ -43180,16 +43155,14 @@ msgid "rv32e requires ilp32e ABI" msgstr "rv32e kräver ABI:et ilp32e" #: config/riscv/riscv.cc:8990 -#, fuzzy, gcc-internal-format -#| msgid "rv32e requires ilp32e ABI" +#, gcc-internal-format msgid "rv64e requires lp64e ABI" -msgstr "rv32e kräver ABI:et ilp32e" +msgstr "rv64e kräver ABI:et lp64e" #: config/riscv/riscv.cc:8997 -#, fuzzy, gcc-internal-format -#| msgid "z*inx requires ABI ilp32, ilp32e or lp64" +#, gcc-internal-format msgid "z*inx requires ABI ilp32, ilp32e, lp64 or lp64e" -msgstr "z*inx kräver ABI ilp32, ilp32e eller lp64" +msgstr "z*inx kräver ABI:et ilp32, ilp32e, lp64 eller lp64" #: config/riscv/riscv.cc:9001 #, gcc-internal-format @@ -44104,28 +44077,24 @@ msgid "value %qs is not supported by attribute %<target%>" msgstr "värdet %qs stödjs inte av attributet %<target%>" #: config/s390/s390.cc:17531 -#, fuzzy, gcc-internal-format -#| msgid "invalid constraints" +#, gcc-internal-format msgid "invalid cc output constraint: %qs" -msgstr "ogiltiga begränsningar" +msgstr "ogiltig cc-utmatningsbegränsning: %qs" #: config/s390/s390.cc:17536 -#, fuzzy, gcc-internal-format -#| msgid "double constants not supported" +#, gcc-internal-format msgid "multiple cc output constraints not supported" -msgstr "double-konstanter stödjs inte" +msgstr "flera cc-utmatningsbegränsningar stödjs inte" #: config/s390/s390.cc:17541 -#, fuzzy, gcc-internal-format -#| msgid "%<asm%> specifier for variable %qE conflicts with %<asm%> clobber list" +#, gcc-internal-format msgid "%<asm%> specifier for cc output conflicts with %<asm%> clobber list" -msgstr "%<asm%>-specificerare för variabeln %qE står i konflikt med %<asm%>-överskrivningslista" +msgstr "%<asm%>-specificerare för cc-utmatning står i konflikt med %<asm%>-överskrivningslista" #: config/s390/s390.cc:17547 -#, fuzzy, gcc-internal-format -#| msgid "invalid type for make function" +#, gcc-internal-format msgid "invalid type for cc output constraint" -msgstr "ogiltig typ för make-funktion" +msgstr "ogiltig typ för cc-utmatningsbegränsning" #: config/sh/sh.cc:936 #, gcc-internal-format @@ -44692,10 +44661,9 @@ msgid "declaration of %q+D shadows a built-in function" msgstr "deklaration av %q+D skuggar en inbyggd funktion" #: c/c-decl.cc:2153 -#, fuzzy, gcc-internal-format -#| msgid "redeclaration of enumerator %q+D" +#, gcc-internal-format msgid "conflicting redeclaration of enumerator %q+D" -msgstr "omdeklaration av uppräkningstyp %q+D" +msgstr "omdeklaration av uppräkningstyp %q+D som står i konflikt" #: c/c-decl.cc:2160 #, gcc-internal-format @@ -44979,10 +44947,9 @@ msgid "traditional C lacks a separate namespace for labels, identifier %qE confl msgstr "traditionell C saknar en separat namnrymd för etiketter, identifierare %qE står i konflikt" #: c/c-decl.cc:4379 -#, fuzzy, gcc-internal-format -#| msgid "switch jumps over variable initialization" +#, gcc-internal-format msgid "switch jumps over OpenMP %<allocate%> allocation" -msgstr "switch hoppar över variabelinitieringar" +msgstr "switch hoppar över en OpenMP %<allocate%>-allokering" #: c/c-decl.cc:4385 #, gcc-internal-format @@ -45152,10 +45119,9 @@ msgid "%<[*]%> not allowed in other than function prototype scope" msgstr "%<[*]%> är inte tillåtet annat än inom en funktionsprototyp" #: c/c-decl.cc:5475 cp/decl2.cc:1852 cp/name-lookup.cc:8767 -#, fuzzy, gcc-internal-format -#| msgid "%<omp::%E%> not allowed to be specified in this context" +#, gcc-internal-format msgid "%<omp::%s%> not allowed to be specified in this context" -msgstr "%<omp::%E%> är inte tillåtet att anges i detta sammanhang" +msgstr "%<omp::%s%> är inte tillåtet att anges i detta sammanhang" #: c/c-decl.cc:5555 #, gcc-internal-format @@ -45780,10 +45746,9 @@ msgid "ISO C90 does not support %<_Noreturn%>" msgstr "ISO C90 stödjer inte %<_Noreturn%>" #: c/c-decl.cc:8204 -#, fuzzy, gcc-internal-format -#| msgid "variable previously declared %<static%> redeclared %<extern%>" +#, gcc-internal-format msgid "function previously declared %<static%> redeclared %<extern%>" -msgstr "variabel tidigare deklarerad %<static%> omdeklarerad som %<extern%>" +msgstr "funktionen tidigare deklarerad %<static%> omdeklarerad som %<extern%>" #: c/c-decl.cc:8222 #, gcc-internal-format @@ -45991,10 +45956,9 @@ msgid "flexible array member in a struct with no named members" msgstr "flexibel vektormedlem i struct utan namngivna medlemmar" #: c/c-decl.cc:9519 -#, fuzzy, gcc-internal-format -#| msgid "flexible array member not at end of struct" +#, gcc-internal-format msgid "structure containing a flexible array member is not at the end of another structure" -msgstr "flexibel vektormedlem inte vid slutet av post" +msgstr "posten som innehåller en flexibel vektormedlem inte vid slutet av annan post" #: c/c-decl.cc:9542 #, gcc-internal-format @@ -46012,16 +45976,14 @@ msgid "union cannot be made transparent" msgstr "unionen kan inte göras transparent" #: c/c-decl.cc:9686 -#, fuzzy, gcc-internal-format -#| msgid "redefinition of typedef %q+D with variably modified type" +#, gcc-internal-format msgid "redefinition of struct or union %qT with variably modified type" -msgstr "omdefinition av typedef %q+D med variabelt modifierad typ" +msgstr "omdefinition av posten eller unionen %qT med variabelt modifierad typ" #: c/c-decl.cc:9689 -#, fuzzy, gcc-internal-format -#| msgid "redefinition of %<struct %E%>" +#, gcc-internal-format msgid "redefinition of struct or union %qT" -msgstr "omdefinition av %<struct %E%>" +msgstr "omdefinition av posten eller unionen %qT" #: c/c-decl.cc:9852 #, gcc-internal-format @@ -46054,10 +46016,9 @@ msgid "enumeration values exceed range of %qs" msgstr "uppräkningsvärden överskrider gränsen på %qs" #: c/c-decl.cc:10133 -#, fuzzy, gcc-internal-format -#| msgid "nested redefinition of %<enum %E%>" +#, gcc-internal-format msgid "conflicting redefinition of enum %qT" -msgstr "nästad omdefinition av %<enum %E%>" +msgstr "omdefinition av enum %qT som står i konflikt" #: c/c-decl.cc:10165 c/c-decl.cc:10181 #, gcc-internal-format @@ -46085,10 +46046,9 @@ msgid "enumerator value outside the range of %qs" msgstr "uppräkningsvärdet är utanför intervallet för %qs" #: c/c-decl.cc:10241 -#, fuzzy, gcc-internal-format -#| msgid "ISO C restricts enumerator values to range of %<int%> before C2X" +#, gcc-internal-format msgid "ISO C restricts enumerator values to range of %<int%> before C23" -msgstr "ISO C begränsar uppräkningsvärden till intervallet hos %<int%> före C2X" +msgstr "ISO C begränsar uppräkningsvärden till intervallet hos %<int%> före C23" #: c/c-decl.cc:10442 cp/decl.cc:5981 cp/decl.cc:17785 #, gcc-internal-format @@ -46151,10 +46111,9 @@ msgid "traditional C rejects ISO C style function definitions" msgstr "traditionell C tillåter inte ISO C:s stil av funktionsdefinitioner" #: c/c-decl.cc:10696 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support omitting parameter names in function definitions before C2X" +#, gcc-internal-format msgid "ISO C does not support omitting parameter names in function definitions before C23" -msgstr "ISO C stödjer inte att utelämna parameternamn i funktionsdefinitioner före C2X" +msgstr "ISO C stödjer inte att utelämna parameternamn i funktionsdefinitioner före C23" #: c/c-decl.cc:10736 c/c-decl.cc:10740 #, gcc-internal-format @@ -46359,10 +46318,9 @@ msgid "ISO C90 does not support boolean types" msgstr "ISO C90 stödjer inte booleska typer" #: c/c-decl.cc:12451 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support the %<_Float%d%s%> type" +#, gcc-internal-format msgid "ISO C does not support the %<_Float%d%s%> type before C23" -msgstr "ISO C stödjer inte typen %<_Float%d%s%>" +msgstr "ISO C stödjer inte typen %<_Float%d%s%> före C23" #: c/c-decl.cc:12502 cp/parser.cc:20288 #, gcc-internal-format @@ -46370,10 +46328,9 @@ msgid "%<_Float%d%s%> is not supported on this target" msgstr "%<_Float%d%s%> stödjs inte för denna målarkitektur" #: c/c-decl.cc:12573 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support decimal floating-point before C2X" +#, gcc-internal-format msgid "ISO C does not support decimal floating-point before C23" -msgstr "ISO C stödjer inte decimala flyttal före C2X" +msgstr "ISO C stödjer inte decimala flyttal före C23" #: c/c-decl.cc:12597 c/c-decl.cc:12974 c/c-parser.cc:10628 #, gcc-internal-format @@ -46386,16 +46343,14 @@ msgid "ISO C does not support fixed-point types" msgstr "ISO C stödjer inte fixdecimaltyper" #: c/c-decl.cc:12628 -#, fuzzy, gcc-internal-format -#| msgid "case label is not an integer constant expression" +#, gcc-internal-format msgid "%<_BitInt%> argument is not an integer constant expression" -msgstr "case-etikett är inte ett konstant heltalsuttryck" +msgstr "argumentet till %<_BitInt%> är inte ett konstant heltalsuttryck" #: c/c-decl.cc:12634 -#, fuzzy, gcc-internal-format -#| msgid "enumerator value for %qE is not an integer constant expression" +#, gcc-internal-format msgid "%<_BitInt%> argument %qE is not a positive integer constant expression" -msgstr "uppräkningsvärde för %qE är inte ett konstant heltalsuttryck" +msgstr "argumentet %qE till %<_BitInt%> är inte ett konstant positivt heltalsuttryck" #: c/c-decl.cc:12641 #, gcc-internal-format @@ -46500,10 +46455,9 @@ msgid "ISO C does not support plain %<complex%> meaning %<double complex%>" msgstr "ISO C stödjer inte bara %<complex%> i meningen %<double complex%>" #: c/c-decl.cc:12997 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %<auto%> type deduction before C2X" +#, gcc-internal-format msgid "ISO C does not support %<auto%> type deduction before C23" -msgstr "ISO C stödjer inte %<auto%>-attribut före C2X" +msgstr "ISO C stödjer inte %<auto%>-attribut före C23" #: c/c-decl.cc:13026 #, gcc-internal-format @@ -46516,16 +46470,14 @@ msgid "ISO C does not support complex integer types" msgstr "ISO C stödjer inte komplexa heltalstyper" #: c/c-decl.cc:13237 -#, fuzzy, gcc-internal-format -#| msgid "Fixed line length must be at least seven" +#, gcc-internal-format msgid "%<signed _BitInt%> argument must be at least 2" -msgstr "Fast radlängd måste vara minst sju" +msgstr "argumentet till %<signed _BitInt%> måste vara åtminstone 2" #: c/c-decl.cc:13246 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ does not support %<__int%d%> for %qs" +#, gcc-internal-format msgid "ISO C does not support %<%s_BitInt(%d)%> before C23" -msgstr "ISO C++ stödjer inte %<__int%d%> för %qs" +msgstr "ISO C stödjer inte %<%s_BitInt(%d)%> före C23" #: c/c-decl.cc:13545 cp/semantics.cc:6316 #, gcc-internal-format @@ -46812,10 +46764,9 @@ msgid "%<__GIMPLE%> only valid with %<-fgimple%>" msgstr "%<__GIMPLE%> är endast giltigt med %<-fgimple%>" #: c/c-parser.cc:3699 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support specifying %<enum%> underlying types before C2X" +#, gcc-internal-format msgid "ISO C does not support specifying %<enum%> underlying types before C23" -msgstr "ISO C stödjer inte att ange underliggande typer för %<enum%> före C2X" +msgstr "ISO C stödjer inte att ange underliggande typer för %<enum%> före C23" #: c/c-parser.cc:3708 #, gcc-internal-format @@ -46922,10 +46873,9 @@ msgid "expected identifier or %<(%>" msgstr "identifierare eller %<(%> förväntades" #: c/c-parser.cc:4920 -#, fuzzy, gcc-internal-format -#| msgid "ISO C requires a named argument before %<...%> before C2X" +#, gcc-internal-format msgid "ISO C requires a named argument before %<...%> before C23" -msgstr "ISO C kräver ett namngivet argument före %<...%> före C2X" +msgstr "ISO C kräver ett namngivet argument före %<...%> före C23" #: c/c-parser.cc:5045 #, gcc-internal-format @@ -46958,10 +46908,9 @@ msgid "%qE attribute does not take any arguments" msgstr "attributet %qE tar inga argument" #: c/c-parser.cc:5893 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %<[[]]%> attributes before C2X" +#, gcc-internal-format msgid "ISO C does not support %<[[]]%> attributes before C23" -msgstr "ISO C stödjer inte %<[[]]%>-attribut före C2X" +msgstr "ISO C stödjer inte %<[[]]%>-attribut före C23" #: c/c-parser.cc:6106 c/c-parser.cc:6169 c/c-typeck.cc:8822 #, gcc-internal-format @@ -46969,10 +46918,9 @@ msgid "variable-sized object may not be initialized except with an empty initial msgstr "objekt med variabel storlek kan inte initieras utom med en tom initierare" #: c/c-parser.cc:6163 -#, fuzzy, gcc-internal-format -#| msgid "ISO C forbids empty initializer braces before C2X" +#, gcc-internal-format msgid "ISO C forbids empty initializer braces before C23" -msgstr "ISO C förbjuder tomma klamrar som initierare före C2X" +msgstr "ISO C förbjuder tomma klamrar som initierare före C23" #: c/c-parser.cc:6227 #, gcc-internal-format @@ -46995,22 +46943,19 @@ msgid "obsolete use of designated initializer without %<=%>" msgstr "föråldrad användning av designerade initierare utan %<=%>" #: c/c-parser.cc:6567 cp/parser.cc:13308 -#, fuzzy, gcc-internal-format -#| msgid "no valid clauses specified in %<#pragma acc declare%>" +#, gcc-internal-format msgid "inner loops must be perfectly nested in %<#pragma acc loop%>" -msgstr "inga giltiga klausuler angivna i %<#pragma acc declare%>" +msgstr "inre slingor måste vara perfekt nästade i %<#pragma acc loop%>" #: c/c-parser.cc:6574 cp/parser.cc:13315 -#, fuzzy, gcc-internal-format -#| msgid "%<ordered%> region must be closely nested inside a loop region with an %<ordered%> clause" +#, gcc-internal-format msgid "inner loops must be perfectly nested with %<ordered%> clause" -msgstr "en %<ordered%> region måste vara nära innesluten inuti en slingaregion med en %<ordered%>-klausul" +msgstr "inre slingor måste vara perfekt nästade med en %<ordered%>-klausul" #: c/c-parser.cc:6581 cp/parser.cc:13322 -#, fuzzy, gcc-internal-format -#| msgid "%<nogroup%> clause must not be used together with %<reduction%> clause" +#, gcc-internal-format msgid "inner loops must be perfectly nested with %<reduction%> %<inscan%> clause" -msgstr "en %<nogroup%>-klausul får inte användas tillsammans med en %<reduction%>-klausul" +msgstr "inre slingor måste vara perfekt nästade med en %<reduction%> %<inscan%>-klausul" #: c/c-parser.cc:6638 c/c-parser.cc:6793 cp/parser.cc:12240 cp/parser.cc:12390 #: cp/parser.cc:48555 @@ -47019,17 +46964,15 @@ msgid "mixing OpenMP directives with attribute and pragma syntax on the same sta msgstr "OpenMP-direktiv blandas med attribut- och pragma-syntax på samma sats" #: c/c-parser.cc:6646 cp/parser.cc:12248 -#, fuzzy, gcc-internal-format -#| msgid "%<omp::%E%> attribute requires argument" +#, gcc-internal-format msgid "OpenMP %<omp::decl%> attribute on a statement" -msgstr "attributet %<omp::%E%> behöver argument" +msgstr "OpenMP %<omp::decl%>-attribut på en sats" #: c/c-parser.cc:6670 c/c-parser.cc:6889 c/c-parser.cc:25015 cp/parser.cc:12272 #: cp/parser.cc:48535 cp/parser.cc:48675 -#, fuzzy, gcc-internal-format -#| msgid "unknown OpenMP directive name in %qs clause argument" +#, gcc-internal-format msgid "unknown OpenMP directive name in %qs attribute argument" -msgstr "okänt OpenMP-direktivnamn i attributargumentet %qs" +msgstr "okänt OpenMP-direktivnamn i klausulargumentet %qs" #: c/c-parser.cc:6762 cp/parser.cc:12359 #, gcc-internal-format @@ -47498,16 +47441,14 @@ msgid "wrong number of arguments to %<__builtin_shuffle%>" msgstr "fel antal argument till %<__builtin_shuffle%>" #: c/c-parser.cc:11851 -#, fuzzy, gcc-internal-format -#| msgid "wrong number of arguments" +#, gcc-internal-format msgid "wrong number of arguments to %qs" -msgstr "fel antal argument" +msgstr "fel antal argument till %qs" #: c/c-parser.cc:11860 -#, fuzzy, gcc-internal-format -#| msgid "%qD does not have integral type" +#, gcc-internal-format msgid "%qs operand not an integral type" -msgstr "%qD har inte heltalstyp" +msgstr "operanden %qs är inte en heltalstyp" #: c/c-parser.cc:12123 cp/parser.cc:6134 #, gcc-internal-format @@ -47515,10 +47456,9 @@ msgid "%<omp_all_memory%> may only be used in OpenMP %<depend%> clause" msgstr "%<omp_all_memory%> kan bara användas i en OpenMP %<depend%>-klausul" #: c/c-parser.cc:12133 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %qs before C2X" +#, gcc-internal-format msgid "ISO C does not support %qs before C23" -msgstr "ISO C stödjer inte %qs före C2X" +msgstr "ISO C stödjer inte %qs före C23" #: c/c-parser.cc:12221 #, gcc-internal-format @@ -47551,10 +47491,9 @@ msgid "ISO C90 forbids compound literals" msgstr "ISO C90 förbjuder sammansatta litteraler" #: c/c-parser.cc:12284 -#, fuzzy, gcc-internal-format -#| msgid "ISO C forbids storage class specifiers in compound literals before C2X" +#, gcc-internal-format msgid "ISO C forbids storage class specifiers in compound literals before C23" -msgstr "ISO C förbjuder lagringsklasspecificerare i sammansatta litteraler före C2X" +msgstr "ISO C förbjuder lagringsklasspecificerare i sammansatta litteraler före C23" #: c/c-parser.cc:12298 #, gcc-internal-format @@ -47795,10 +47734,9 @@ msgid "expected %<none%>, %<shared%>, %<private%> or %<firstprivate%>" msgstr "%<none%>, %<shared%>, %<private%> eller %<firstprivate%> förväntades" #: c/c-parser.cc:15925 cp/parser.cc:39100 -#, fuzzy, gcc-internal-format -#| msgid "expected goto expression" +#, gcc-internal-format msgid "expected constant logical expression" -msgstr "goto-uttryck förväntades" +msgstr "ett konstant logiskt uttryck förväntades" #: c/c-parser.cc:16002 cp/parser.cc:39182 #, gcc-internal-format @@ -47870,10 +47808,9 @@ msgid "expected %<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<non msgstr "%<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<none%> eller %<default%> förväntades" #: c/c-parser.cc:16552 -#, fuzzy, gcc-internal-format -#| msgid "expected %<scalar%>, %<aggregate%> or %<pointer%>" +#, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<pointer%> or %<all%>" -msgstr "%<scalar%>, %<aggregate%> eller %<pointer%> förväntades" +msgstr "%<scalar%>, %<aggregate%>, %<pointer%> eller %<all%> förväntades" #: c/c-parser.cc:16629 cp/parser.cc:39718 #, gcc-internal-format @@ -47912,10 +47849,9 @@ msgid "%<tile%> argument needs positive integral constant" msgstr "argumentet till %<tile%> behöver en positiv heltalskonstant" #: c/c-parser.cc:17059 cp/parser.cc:41829 -#, fuzzy, gcc-internal-format -#| msgid "too many %<if%> clauses" +#, gcc-internal-format msgid "too many %<self%> clauses" -msgstr "för många %<if%>-klausuler" +msgstr "för många %<self%>-klausuler" #: c/c-parser.cc:17101 cp/parser.cc:39771 #, gcc-internal-format @@ -48059,16 +47995,14 @@ msgid "too many %<close%> modifiers" msgstr "för många %<close%>-modifierare" #: c/c-parser.cc:18792 cp/parser.cc:41456 -#, fuzzy, gcc-internal-format -#| msgid "too many %<close%> modifiers" +#, gcc-internal-format msgid "too many %<present%> modifiers" -msgstr "för många %<close%>-modifierare" +msgstr "för många %<present%>-modifierare" #: c/c-parser.cc:18800 cp/parser.cc:41467 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp target%> with modifier other than %<always%> or %<close%> on %<map%> clause" +#, gcc-internal-format msgid "%<map%> clause with map-type modifier other than %<always%>, %<close%> or %<present%>" -msgstr "%<#pragma omp target%> med en annan modifierare än en %<always%> eller %<close%> på en %<map%>-klausul" +msgstr "en klausul %<map%> med en annan avbildningstypsmodifierare än %<always%>, %<close%> eller %<present%>" #: c/c-parser.cc:18838 cp/parser.cc:41507 #, gcc-internal-format @@ -48111,10 +48045,9 @@ msgid "%<detach%> clause event handle has type %qT rather than %<omp_event_handl msgstr "%<detach%>-klausulens händelsehandtag har typen %qT istället för %<omp_event_handle_t%>" #: c/c-parser.cc:19391 cp/parser.cc:42045 -#, fuzzy, gcc-internal-format -#| msgid "expected assumption clause" +#, gcc-internal-format msgid "expected an OpenACC clause" -msgstr "assumption-klausul förväntades" +msgstr "en OpenACC-klausul förväntades" #: c/c-parser.cc:19402 c/c-parser.cc:19767 cp/parser.cc:42056 #: cp/parser.cc:42464 @@ -48133,10 +48066,9 @@ msgid "%qs must be the first clause of %qs" msgstr "%qs måste vara den första klausulen i %qs" #: c/c-parser.cc:19756 cp/parser.cc:42453 -#, fuzzy, gcc-internal-format -#| msgid "expected assumption clause" +#, gcc-internal-format msgid "expected an OpenMP clause" -msgstr "assumption-klausul förväntades" +msgstr "en OpenMP-klausul förväntades" #: c/c-parser.cc:19891 cp/parser.cc:47284 #, gcc-internal-format @@ -48234,16 +48166,14 @@ msgid "%<#pragma acc update%> must contain at least one %<device%> or %<host%> o msgstr "%<#pragma acc update%> måste innehålla åtminstone en %<device%>- eller %<host%>- eller %<self%>-klausul" #: c/c-parser.cc:20558 -#, fuzzy, gcc-internal-format -#| msgid "variables in %<__regio_symbol%> address space must be declared %<extern%>" +#, gcc-internal-format msgid "variable %qD used in the %<allocator%> clause must be declared before %qD" -msgstr "variabler i adressrymden %<__regio_symbol%> måste deklareras %<extern%>" +msgstr "variabeln %qD i %<allocator%>-klausulen måste deklareras före %qD" #: c/c-parser.cc:20562 c/c-parser.cc:20585 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "to be allocated variable declared here" -msgstr "mallparametern %qD deklarerad här" +msgstr "variabeln att allokera deklarerad här" #: c/c-parser.cc:20580 #, gcc-internal-format @@ -48251,10 +48181,9 @@ msgid "variable %qD used in the %<allocator%> clause must not be modified betwee msgstr "variabeln %qD använd i klausulen %<allocator%> får inte ändras mellan deklarationen av %qD och dess direktiv %<allocate%>" #: c/c-parser.cc:20583 -#, fuzzy, gcc-internal-format -#| msgid "defined here" +#, gcc-internal-format msgid "modified here" -msgstr "definierad här" +msgstr "modifierad här" #: c/c-parser.cc:20651 cp/parser.cc:42578 cp/parser.cc:42593 #, gcc-internal-format @@ -48267,22 +48196,19 @@ msgid "%<allocator%> clause allocator expression has type %qT rather than %<omp_ msgstr "%<allocator%>-klausulens allokeraruttryck har typen %qT istället för %<omp_allocator_handle_t%>" #: c/c-parser.cc:20692 -#, fuzzy, gcc-internal-format -#| msgid "parameter %qD may not appear in this context" +#, gcc-internal-format msgid "function parameter %qD may not appear as list item in an %<allocate%> directive" -msgstr "parametern %qD får inte förekomma i detta sammanhang" +msgstr "funktionsparametern %qD får inte förekomma som listposter i ett %<allocate%>-direktiv" #: c/c-parser.cc:20699 -#, fuzzy, gcc-internal-format -#| msgid "deduction guide %qD must be declared in the same scope as %qT" +#, gcc-internal-format msgid "%<allocate%> directive must be in the same scope as %qD" -msgstr "härledningsguiden %qD måste deklareras med i samma räckvidd som %qT" +msgstr "direktivet %<allocate%> måste vara i samma räckvidd som %qD" #: c/c-parser.cc:20707 -#, fuzzy, gcc-internal-format -#| msgid "%qD appears more than once in %<allocate%> clauses" +#, gcc-internal-format msgid "%qD already appeared as list item in an %<allocate%> directive" -msgstr "%qD förekommer mer än en gång i %<allocate%>-klausuler" +msgstr "%qD förekom redan som ett listelement i ett %<allocate%>-direktiv" #: c/c-parser.cc:20714 #, gcc-internal-format @@ -48290,16 +48216,14 @@ msgid "%<allocator%> clause required for static variable %qD" msgstr "klausulen %<allocator%> krävs för den statiska variabeln %qD" #: c/c-parser.cc:20721 -#, fuzzy, gcc-internal-format -#| msgid "%<allocate%> clause must specify an allocator here" +#, gcc-internal-format msgid "%<allocator%> clause requires a predefined allocator as %qD is static" -msgstr "%<allocate%>-klausulen måste ange en allokerare här" +msgstr "%<allocate%>-klausulen kräver en fördefinierad allokerare eftersom %qD är statisk" #: c/c-parser.cc:20725 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp allocate%> not yet supported" +#, gcc-internal-format msgid "%<#pragma omp allocate%> for static variables like %qD not yet supported" -msgstr "%<#pragma omp allocate%> stödjs inte ännu" +msgstr "%<#pragma omp allocate%> för statiska variabler som %qD stödjs inte ännu" #: c/c-parser.cc:20876 cp/parser.cc:42758 #, gcc-internal-format @@ -48339,16 +48263,14 @@ msgid "%qs clause requires %qs clause" msgstr "en %qs-klausul behöver en %qs-klausul" #: c/c-parser.cc:21040 cp/parser.cc:42927 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause" +#, gcc-internal-format msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause implicitly provided by a %<requires%> directive" -msgstr "%<#pragma omp atomic write%> är inkompatibelt en %<acquire%>-klausul" +msgstr "%<#pragma omp atomic write%> är inkompatibelt med en %<acquire%>-klausul implicit tillhandahållen av ett %<requires%>-direktiv" #: c/c-parser.cc:21051 cp/parser.cc:42938 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause" +#, gcc-internal-format msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause implicitly provided by a %<requires%> directive" -msgstr "%<#pragma omp atomic read%> är inkompatibelt med en %<release%>-klausul" +msgstr "%<#pragma omp atomic read%> är inkompatibelt med en %<release%>-klausul implicit tillhandahållen av ett %<requires%>-direktiv" #: c/c-parser.cc:21083 cp/parser.cc:42970 #, gcc-internal-format @@ -48412,10 +48334,9 @@ msgid "%<depobj%> expression is not lvalue expression" msgstr "uttrycket %<depobj%> är inte ett l-värde-uttryck" #: c/c-parser.cc:21845 -#, fuzzy, gcc-internal-format -#| msgid "%<depobj%> expression is not lvalue expression" +#, gcc-internal-format msgid "%<destroy%> expression is not lvalue expression" -msgstr "uttrycket %<depobj%> är inte ett l-värde-uttryck" +msgstr "uttrycket %<destroy%> är inte ett l-värde-uttryck" #: c/c-parser.cc:21851 cp/parser.cc:43744 #, gcc-internal-format @@ -48453,10 +48374,9 @@ msgid "%<[[omp::directive(%s)]]%> must be the only specified attribute on a stat msgstr "%<[[omp::directive(%s)]]%> måste vara det enda angivna attributet på en sats" #: c/c-parser.cc:22086 cp/parser.cc:44617 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp ordered%> with %qs clause may only be used in compound statements" +#, gcc-internal-format msgid "%<#pragma omp scan%> with zero preceding executable statements" -msgstr "%<#pragma omp ordered%> med %qs-klausul får bara användas i sammansatta satser" +msgstr "%<#pragma omp scan%> med noll föregående körbara satser" #: c/c-parser.cc:22120 cp/parser.cc:44650 #, gcc-internal-format @@ -48469,10 +48389,9 @@ msgid "expected %<#pragma omp scan%>" msgstr "%<#pragma omp scan%> förväntades" #: c/c-parser.cc:22134 cp/parser.cc:44665 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp ordered%> with %qs clause may only be used in compound statements" +#, gcc-internal-format msgid "%<#pragma omp scan%> with zero succeeding executable statements" -msgstr "%<#pragma omp ordered%> med %qs-klausul får bara användas i sammansatta satser" +msgstr "%<#pragma omp scan%> med noll flöljande körbara satser" #: c/c-parser.cc:22252 cp/semantics.cc:10734 cp/semantics.cc:10819 #, gcc-internal-format @@ -48481,10 +48400,9 @@ msgstr "iterationsdeklaration eller initiering förväntades" #: c/c-parser.cc:22340 c/c-parser.cc:22355 cp/parser.cc:45012 #: cp/parser.cc:45027 -#, fuzzy, gcc-internal-format -#| msgid "not enough perfectly nested loops" +#, gcc-internal-format msgid "not enough nested loops" -msgstr "för få perfekt nästade slingor" +msgstr "inte tillräckligt med nästade slingor" #: c/c-parser.cc:22455 cp/parser.cc:45299 #, gcc-internal-format @@ -48572,10 +48490,9 @@ msgid "expected trait selector name" msgstr "trait-väljarnamn förväntades" #: c/c-parser.cc:24542 cp/parser.cc:47860 -#, fuzzy, gcc-internal-format -#| msgid "selector %qs not allowed for context selector set %qs" +#, gcc-internal-format msgid "unknown selector %qs for context selector set %qs" -msgstr "selektorn %qs är inte tillåten för kontextselektormängd %qs" +msgstr "okänd selektor %qs för kontextselektormängden %qs" #: c/c-parser.cc:24570 cp/parser.cc:47889 #, gcc-internal-format @@ -48583,22 +48500,19 @@ msgid "selector %qs does not accept any properties" msgstr "väljaren %qs tar inte några egenskaper" #: c/c-parser.cc:24592 cp/parser.cc:47921 -#, fuzzy, gcc-internal-format -#| msgid "%<friend%> can only be specified inside a class" +#, gcc-internal-format msgid "%<score%> cannot be specified in traits in the %qs trait-selector-set" -msgstr "%<friend%> kan endast anges inuti en klass" +msgstr "%<score%> kan inte anges i egenskaper i trait-selector-set %qs" #: c/c-parser.cc:24601 cp/parser.cc:47931 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be constant integer expression" +#, gcc-internal-format msgid "%<score%> argument must be constant integer expression" -msgstr "värdesargument måste vara ett konstant heltalsuttryck" +msgstr "argumentet till %<score%> måste vara ett konstant heltalsuttryck" #: c/c-parser.cc:24604 cp/parser.cc:47934 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be non-negative" +#, gcc-internal-format msgid "%<score%> argument must be non-negative" -msgstr "värdesargumentet måste vara ickenegativt" +msgstr "argumentet till %<score%> måste vara ickenegativt" #: c/c-parser.cc:24645 cp/parser.cc:47980 #, gcc-internal-format @@ -48619,16 +48533,14 @@ msgstr "egenskaper för %<simd%>-väljare får inte anges i %<metadirective%>" #. Currently only the now-deprecated syntax #. from OpenMP 5.0 is supported. #: c/c-parser.cc:24705 cp/parser.cc:48035 fortran/openmp.cc:5891 -#, fuzzy, gcc-internal-format -#| msgid "%<-fpie%> is not supported" +#, gcc-internal-format msgid "%<requires%> selector is not supported yet" -msgstr "%<-fpie%> stödjs inte" +msgstr "selektorn %<requires%> stödjs inte ännu" #: c/c-parser.cc:24764 cp/parser.cc:48098 -#, fuzzy, gcc-internal-format -#| msgid "expected trait selector name" +#, gcc-internal-format msgid "expected context selector set name" -msgstr "trait-väljarnamn förväntades" +msgstr "namn på kontextväljare förväntades" #: c/c-parser.cc:24841 cp/parser.cc:48413 #, gcc-internal-format @@ -48671,16 +48583,14 @@ msgid "%qD specified both in declare target %<link%> and %<to%> or %<enter%> cla msgstr "%qD angivet både i deklarationsmålets %<link%>- och %<to%>- eller %<enter%>-klausuler" #: c/c-parser.cc:25199 cp/parser.cc:48882 -#, fuzzy, gcc-internal-format -#| msgid "directive with only %<device_type%> clause" +#, gcc-internal-format msgid "directive with only %<device_type%> or %<indirect%> clauses" -msgstr "direktiv med endast %<device_type%>-klausul" +msgstr "direktiv med endast %<device_type%>- eller %<indirect%>-klausul" #: c/c-parser.cc:25202 cp/parser.cc:48885 -#, fuzzy, gcc-internal-format -#| msgid "%<detach%> clause must not be used together with %<mergeable%> clause" +#, gcc-internal-format msgid "%<device_type%> clause must specify 'any' when used with an %<indirect%> clause" -msgstr "en %<detach%>-klausul får inte användas tillsammans med en %<mergeable%>-klausul" +msgstr "klausulen %<device_type%> måste ange ”any” när den används med en %<indirect%>-klausul" #: c/c-parser.cc:25251 c/c-parser.cc:25293 cp/parser.cc:48940 #: cp/parser.cc:48987 @@ -48771,10 +48681,9 @@ msgid "expected %<simd%>, %<reduction%>, %<target%> or %<variant%>" msgstr "%<simd%>, %<reduction%>, %<target%> eller %<variant%> förväntades" #: c/c-parser.cc:25837 cp/parser.cc:49589 -#, fuzzy, gcc-internal-format -#| msgid "expected %<seq_cst%>, %<acq_rel%>, %<release%> or %<acquire%>" +#, gcc-internal-format msgid "expected %<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> or %<seq_cst%>" -msgstr "%<seq_cst%>, %<acq_rel%>, %<release%> eller %<acquire%> förväntades" +msgstr "%<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> eller %<seq_cst%> förväntades" #: c/c-parser.cc:25866 cp/parser.cc:49624 #, gcc-internal-format @@ -48978,10 +48887,9 @@ msgid "%<_Complex _BitInt(%d)%> unsupported" msgstr "%<_Complex _BitInt(%d)%> stödjs inte" #: c/c-typeck.cc:1472 -#, fuzzy, gcc-internal-format -#| msgid "invalid use of pointers to arrays with different qualifiers in ISO C before C2X" +#, gcc-internal-format msgid "invalid use of pointers to arrays with different qualifiers in ISO C before C23" -msgstr "otillåten användning av pekare till vektorer med olika kvalificerare i ISO C före C2X" +msgstr "otillåten användning av pekare till vektorer med olika kvalificerare i ISO C före C23" #: c/c-typeck.cc:1476 #, gcc-internal-format @@ -48999,10 +48907,9 @@ msgid "function return types not compatible due to %<volatile%>" msgstr "funktionsreturtyper är inte kompatibla på grund av %<volatile%>" #: c/c-typeck.cc:1905 -#, fuzzy, gcc-internal-format -#| msgid "converting an array compound literal to a pointer is ill-formed in C++" +#, gcc-internal-format msgid "converting an array compound literal to a pointer leads to a dangling pointer in C++" -msgstr "konvertering av en sammansatt vektorlitteral till en pekare är felaktigt i C++" +msgstr "konvertering av en sammansatt vektorlitteral till en pekare medför en hängande pekare i C++" #: c/c-typeck.cc:2599 c/c-typeck.cc:9852 #, gcc-internal-format @@ -49378,10 +49285,9 @@ msgid "pointer to array loses qualifier in conditional expression" msgstr "pekare till vektor tappar kvalificerare i villkorsuttryck" #: c/c-typeck.cc:5665 -#, fuzzy, gcc-internal-format -#| msgid "pointer to array loses qualifier in conditional expression in ISO C before C2X" +#, gcc-internal-format msgid "pointer to array loses qualifier in conditional expression in ISO C before C23" -msgstr "pekare till vektor tappar kvalificerare i villkorsuttryck i ISO C före C2X" +msgstr "pekare till vektor tappar kvalificerare i villkorsuttryck i ISO C före C23" #: c/c-typeck.cc:5670 #, gcc-internal-format @@ -49394,16 +49300,14 @@ msgid "pointer type mismatch in conditional expression" msgstr "pekartyper stämmer inte i villkorsuttryck" #: c/c-typeck.cc:5695 -#, fuzzy, gcc-internal-format -#| msgid "Expected expression type" +#, gcc-internal-format msgid "first expression has type %qT" -msgstr "Uttryckstyp förväntades" +msgstr "första uttrycket har typen %qT" #: c/c-typeck.cc:5696 -#, fuzzy, gcc-internal-format -#| msgid "Expected expression type" +#, gcc-internal-format msgid "second expression has type %qT" -msgstr "Uttryckstyp förväntades" +msgstr "andra uttrycket har typen %qT" #: c/c-typeck.cc:5707 c/c-typeck.cc:5720 #, gcc-internal-format @@ -49479,10 +49383,9 @@ msgid "ISO C forbids casting nonscalar to the same type" msgstr "ISO C förbjuder typkonvertering av ickeskalärer till samma typ" #: c/c-typeck.cc:6199 -#, fuzzy, gcc-internal-format -#| msgid "useless cast to type %q#T" +#, gcc-internal-format msgid "useless cast to type %qT" -msgstr "oanvändbar konvertering till typen %q#T" +msgstr "oanvändbar konvertering till typen %qT" #: c/c-typeck.cc:6219 #, gcc-internal-format @@ -49742,10 +49645,9 @@ msgid "ISO C forbids return between function pointer and %<void *%>" msgstr "ISO C förbjuder retur mellan funktionspekare och %<void *%>" #: c/c-typeck.cc:7769 -#, fuzzy, gcc-internal-format -#| msgid "array with qualifier on the element is not qualified before C2X" +#, gcc-internal-format msgid "array with qualifier on the element is not qualified before C23" -msgstr "vektorer med kvalificerare på elementet är inte kvalificerat före C2X" +msgstr "vektorer med kvalificerare på elementet är inte kvalificerat före C23" #: c/c-typeck.cc:7786 #, gcc-internal-format @@ -50034,10 +49936,9 @@ msgid "enum conversion in initialization is invalid in C++" msgstr "enum-konvertering i initiering är ogiltigt i C++" #: c/c-typeck.cc:10834 -#, fuzzy, gcc-internal-format -#| msgid "excess elements in union initializer" +#, gcc-internal-format msgid "excess elements in %qT initializer" -msgstr "överflödiga element i unioninitierare" +msgstr "överflödiga element i initieraren %qT" #: c/c-typeck.cc:10846 c/c-typeck.cc:10923 #, gcc-internal-format @@ -50638,10 +50539,9 @@ msgstr "vektorsektionen har inte en avbildbar typ i %qs-klausulen" #: c/c-typeck.cc:15565 c/c-typeck.cc:15641 c/c-typeck.cc:15677 #: cp/semantics.cc:8326 cp/semantics.cc:8405 cp/semantics.cc:8441 -#, fuzzy, gcc-internal-format -#| msgid "unsupported memory expression:" +#, gcc-internal-format msgid "unsupported map expression %qE" -msgstr "ej stött minnesuttryck:" +msgstr "ej stött avbildningsuttryck %qE" #: c/c-typeck.cc:15605 c/c-typeck.cc:15782 cp/semantics.cc:8367 #: cp/semantics.cc:8585 @@ -50903,16 +50803,14 @@ msgid "invalid type of %<__MEM%> operand" msgstr "ogiltig typ av %<__MEM%>-operand" #: c/gimple-parser.cc:1563 -#, fuzzy, gcc-internal-format -#| msgid "expected constant offset" +#, gcc-internal-format msgid "expected constant offset for %<__MEM%> operand" -msgstr "ett konstant avstånd förväntades" +msgstr "ett konstant avstånd förväntades för operanden till %<__MEM%>" #: c/gimple-parser.cc:1574 -#, fuzzy, gcc-internal-format -#| msgid "invalid type of %<__MEM%> operand" +#, gcc-internal-format msgid "expected constant step for %<__MEM%> operand" -msgstr "ogiltig typ av %<__MEM%>-operand" +msgstr "ett konstant steg som operand till %<__MEM%> förväntades" #: c/gimple-parser.cc:1627 #, gcc-internal-format @@ -51049,10 +50947,9 @@ msgid "%s%#qD (near match)" msgstr "%s%#qD (nära träff)" #: cp/call.cc:3954 -#, fuzzy, gcc-internal-format -#| msgid "%s%#qD (reversed)" +#, gcc-internal-format msgid "%s%#qD (ignored)" -msgstr "%s%#qD (omvänd)" +msgstr "%s%#qD (ignorerad)" #: cp/call.cc:3956 #, gcc-internal-format @@ -51302,16 +51199,14 @@ msgid "enumerated mismatch in conditional expression: %qT vs %qT" msgstr "uppräkningsmissmatch i villkorsuttryck: %qT kontra %qT" #: cp/call.cc:6263 -#, fuzzy, gcc-internal-format -#| msgid "conditional expression between enumeration type %qT and floating-point type %qT is deprecated" +#, gcc-internal-format msgid "conditional expression between enumeration type %qT and floating-point type %qT" -msgstr "villkorsuttryck mellan uppräkningstypen %qT och flyttalstypen %qT bör undvikas" +msgstr "villkorsuttryck mellan uppräkningstypen %qT och flyttalstypen %qT" #: cp/call.cc:6267 -#, fuzzy, gcc-internal-format -#| msgid "conditional expression between floating-point type %qT and enumeration type %qT is deprecated" +#, gcc-internal-format msgid "conditional expression between floating-point type %qT and enumeration type %qT" -msgstr "villkorsuttryck mellan flyttalstypen %qT och uppräkningstypen %qT bör undvikas" +msgstr "villkorsuttryck mellan flyttalstypen %qT och uppräkningstypen %qT" #: cp/call.cc:6271 #, gcc-internal-format @@ -51469,16 +51364,12 @@ msgid "converting to %qH from %qI requires direct-initialization" msgstr "konvertering till %qH från %qI behöver en direktinitiering" #: cp/call.cc:8447 -#, fuzzy -#| msgid "converting to %qH from %qI with greater conversion rank" msgid "ISO C++ does not allow converting to %qH from %qI with greater conversion rank" -msgstr "konvertering till %qH från %qI med en större konverteringsordning" +msgstr "ISO C++ tillåter inte konvertering till %qH från %qI med en större konverteringsordning" #: cp/call.cc:8455 -#, fuzzy -#| msgid "converting to %qH from %qI with unordered conversion ranks" msgid "ISO C++ does not allow converting to %qH from %qI with unordered conversion rank" -msgstr "konvertering till %qH från %qI med oordnad konverteringsordningar" +msgstr "ISO C++ tillåter inte konvertering till %qH från %qI med oordnad konverteringsordningar" #: cp/call.cc:8471 msgid "invalid user-defined conversion from %qH to %qI" @@ -52408,16 +52299,14 @@ msgid "converting overloaded function %qD to type %q#T is ambiguous" msgstr "konvertering av överlagrad funktion %qD till typ %q#T är tvetydig" #: cp/class.cc:8979 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say %<&%T::%D%>" +#, gcc-internal-format msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to explicit object member function." -msgstr "ISO C++ förbjuder att ta adressen till en okvalificerad eller parentetiserad icke-statisk medlemsfunktion för att skapa en pekare till en medlemsfunktion. Säg %<&%T::%D%>" +msgstr "ISO C++ förbjuder att ta adressen till en okvalificerad eller parentetiserad icke-statisk medlemsfunktion för att skapa en pekare till en explicit objektmedlemsfunktion." #: cp/class.cc:8984 -#, fuzzy, gcc-internal-format -#| msgid "(a pointer to member can only be formed with %<&%E%>)" +#, gcc-internal-format msgid "a pointer to explicit object member function can only be formed with %<&%E%>" -msgstr "(en pekare på medlem kan bara skapas med %<&%E%>)" +msgstr "en pekare på en explicit objektmedlemsfunktion kan bara skapas med %<&%E%>)" #: cp/class.cc:8994 #, gcc-internal-format @@ -52676,16 +52565,14 @@ msgid "%<constexpr%> evaluation depth exceeds maximum of %d (use %<-fconstexpr-d msgstr "beräkning av %<constexpr%> överskrider maxvärdet på %d (använd %<-fconstexpr-depth=%> för att öka maxvärdet)" #: cp/constexpr.cc:3538 -#, fuzzy, gcc-internal-format -#| msgid "expression %qE is not a constant expression" +#, gcc-internal-format msgid "reference to %qD is not a constant expression" -msgstr "uttrycket %qE är inte ett konstant uttryck" +msgstr "referensen till %qD är inte ett konstant uttryck" #: cp/constexpr.cc:3541 -#, fuzzy, gcc-internal-format -#| msgid "%qE is not a constant expression" +#, gcc-internal-format msgid "pointer to %qD is not a constant expression" -msgstr "%qE är inte ett konstant uttryck" +msgstr "pekaren på %qD är inte ett konstant uttryck" #: cp/constexpr.cc:3547 #, gcc-internal-format @@ -52866,10 +52753,9 @@ msgid "allocated here" msgstr "allokerad här" #: cp/constexpr.cc:5981 -#, fuzzy, gcc-internal-format -#| msgid "Access terminates outside of its parent" +#, gcc-internal-format msgid "accessing %qE outside its lifetime" -msgstr "Åtkomsten slutar utanför sin förälder" +msgstr "åtkomst av %qE utanför sin livstid" #: cp/constexpr.cc:6001 #, gcc-internal-format @@ -52912,34 +52798,29 @@ msgid "%qD does not have integral or enumeration type" msgstr "%qD har inte heltals- eller uppräkningstyp" #: cp/constexpr.cc:6342 -#, fuzzy, gcc-internal-format -#| msgid "use of allocated storage after deallocation in a constant expression" +#, gcc-internal-format msgid "modification of allocated storage after deallocation is not a constant expression" -msgstr "användning av allokerad lagring efter deallokering i ett konstant uttryck" +msgstr "ändring av allokerad lagring efter deallokering är inte ett konstant uttryck" #: cp/constexpr.cc:6351 -#, fuzzy, gcc-internal-format -#| msgid "modification of %qE is not a constant expression" +#, gcc-internal-format msgid "modification of %qE outside its lifetime is not a constant expression" -msgstr "ändring av %qE är inte ett konstant uttryck" +msgstr "ändring av %qE utanför sin livstid är inte ett konstant uttryck" #: cp/constexpr.cc:6358 -#, fuzzy, gcc-internal-format -#| msgid "%<reinterpret_cast%> is not a constant expression" +#, gcc-internal-format msgid "destroying %qE from outside current evaluation is not a constant expression" -msgstr "en %<reinterpret_cast%> är inte ett konstant uttryck" +msgstr "att förstöra %qE utanför den nuvarande beräkningen är inte ett konstant uttryck" #: cp/constexpr.cc:6361 -#, fuzzy, gcc-internal-format -#| msgid "modification of %qE is not a constant expression" +#, gcc-internal-format msgid "modification of %qE from outside current evaluation is not a constant expression" -msgstr "ändring av %qE är inte ett konstant uttryck" +msgstr "ändring av %qE från utanför den nuvarande beräkningen är inte ett konstant uttryck" #: cp/constexpr.cc:6488 -#, fuzzy, gcc-internal-format -#| msgid "change of the active member of a union from %qD to %qD during initialization" +#, gcc-internal-format msgid "change of the active member of a union from %qD to %qD is not a constant expression before C++20" -msgstr "ändring av den aktiva medlemmen av en union %qD till %qD under initiering" +msgstr "ändring av den aktiva medlemmen av en union %qD till %qD är inte ett konstant uttryck före C++20" #: cp/constexpr.cc:6517 #, gcc-internal-format @@ -53039,28 +52920,24 @@ msgid "conversion from pointer type %qT to arithmetic type %qT in a constant exp msgstr "konvertering från pekartypen %qT till den aritmetiska typen %qT i ett konstant uttryck" #: cp/constexpr.cc:8153 -#, fuzzy, gcc-internal-format -#| msgid "%qE is not a constant expression because it refers to mutable subobjects of %qT" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression because pointed-to type %qT is not similar to %qT" -msgstr "%qE är inte ett konstant uttryck eftersom det har referenser till muterbara delobjekt av %qT" +msgstr "typkonvertering från %qT är inte tillåtet i ett konstant uttryck eftersom den utpekade typen %qT inte liknar %qT" #: cp/constexpr.cc:8160 -#, fuzzy, gcc-internal-format -#| msgid "pointer member %q+D declared here" +#, gcc-internal-format msgid "pointed-to object declared here" -msgstr "pekarmedlemmen %q+D är deklarerad här" +msgstr "utpekat objekt är deklarerat här" #: cp/constexpr.cc:8165 -#, fuzzy, gcc-internal-format -#| msgid "%qs is not a constant expression because %qT is a pointer to member type" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression because %qE does not point to an object" -msgstr "%qs är inte ett konstant uttryck eftersom %qT är en pekare-till-medlem-typ" +msgstr "typkonvertering från %qT är inte tillåtet i ett konstant uttryck eftersom %qE inte pekar på ett objekt" #: cp/constexpr.cc:8177 -#, fuzzy, gcc-internal-format -#| msgid "modifying a const object %qE is not allowed in a constant expression" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression before C++26" -msgstr "ändring av ett const-objekt %qE är inte tillåten i ett konstant uttryck" +msgstr "typkonvertering från %qT är inte tillåtet i ett konstant uttryck före C++26" #: cp/constexpr.cc:8191 #, gcc-internal-format @@ -53134,10 +53011,9 @@ msgid "immediate evaluation returns address of immediate function %qD" msgstr "omedelbar evaluering returnerar adressen till en omedelbar funktion %qD" #: cp/constexpr.cc:8913 -#, fuzzy, gcc-internal-format -#| msgid "immediate evaluation returns address of immediate function %qD" +#, gcc-internal-format msgid "constant evaluation returns address of immediate function %qD" -msgstr "omedelbar evaluering returnerar adressen till en omedelbar funktion %qD" +msgstr "konstantevaluering returnerar adressen till en omedelbar funktion %qD" #: cp/constexpr.cc:9551 rust/backend/rust-constexpr.cc:5667 #, gcc-internal-format @@ -53448,10 +53324,9 @@ msgid " %qT is not an aggregate" msgstr " %qT är inte ett aggregat" #: cp/constraint.cc:3755 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an aggregate" +#, gcc-internal-format msgid " %qT is not an array" -msgstr " %qT är inte ett aggregat" +msgstr " %qT är inte en vektor" #: cp/constraint.cc:3758 #, gcc-internal-format @@ -53464,10 +53339,9 @@ msgid " %qT is not a base of %qT" msgstr " %qT är inte en bas till %qT" #: cp/constraint.cc:3764 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an aggregate" +#, gcc-internal-format msgid " %qT is not a bounded array" -msgstr " %qT är inte ett aggregat" +msgstr " %qT är inte en begränsad vektor" #: cp/constraint.cc:3767 #, gcc-internal-format @@ -53505,10 +53379,9 @@ msgid " %qT is not a final class" msgstr " %qT är inte en slutlig klass" #: cp/constraint.cc:3788 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not a union" +#, gcc-internal-format msgid " %qT is not a function" -msgstr " %qT är inte en union" +msgstr " %qT är inte en funktion" #: cp/constraint.cc:3791 #, gcc-internal-format @@ -53521,22 +53394,19 @@ msgid " %qT is not a literal type" msgstr " %qT är inte en literal typ" #: cp/constraint.cc:3797 -#, fuzzy, gcc-internal-format -#| msgid "%qD is not a member template function" +#, gcc-internal-format msgid " %qT is not a member function pointer" -msgstr "%qD är inte en medlemsmallfunktion" +msgstr " %qT är inte en medlemsfunktionspekare" #: cp/constraint.cc:3800 -#, fuzzy, gcc-internal-format -#| msgid "%qT is not a member of %qT" +#, gcc-internal-format msgid " %qT is not a member object pointer" -msgstr "%qT är inte en medlem av %qT" +msgstr " %qT är inte en medlemsobjektspekare" #: cp/constraint.cc:3803 -#, fuzzy, gcc-internal-format -#| msgid "%qT is not a member of %qT" +#, gcc-internal-format msgid " %qT is not a member pointer" -msgstr "%qT är inte en medlem av %qT" +msgstr " %qT är inte en medlemspekare" #: cp/constraint.cc:3806 #, gcc-internal-format @@ -53554,10 +53424,9 @@ msgid " %qT is not nothrow convertible from %qE" msgstr " %qT är inte nothrow-konvertibel från %qE" #: cp/constraint.cc:3818 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not a POD type" +#, gcc-internal-format msgid " %qT is not an object type" -msgstr " %qT är inte en POD-typ" +msgstr " %qT är inte en objekttyp" #: cp/constraint.cc:3821 #, gcc-internal-format @@ -53575,10 +53444,9 @@ msgid " %qT is not a polymorphic type" msgstr " %qT är inte en polymorf typ" #: cp/constraint.cc:3831 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an enum" +#, gcc-internal-format msgid " %qT is not a reference" -msgstr " %qT är inte en uppräkningstyp" +msgstr " %qT är inte en referens" #: cp/constraint.cc:3834 #, gcc-internal-format @@ -53586,10 +53454,9 @@ msgid " %qT is not the same as %qT" msgstr " %qT är inte en detsamma som %qT" #: cp/constraint.cc:3837 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an enum" +#, gcc-internal-format msgid " %qT is not a scoped enum" -msgstr " %qT är inte en uppräkningstyp" +msgstr " %qT är inte en enum med räckvidd" #: cp/constraint.cc:3840 #, gcc-internal-format @@ -54001,10 +53868,9 @@ msgid "%qD was promoted to an immediate function because its body contains an im msgstr "%qD befordrades till en omedelbar funktion eftersom dess kropp innehåller ett uttryck %qE som omedelbareskalerar" #: cp/cp-gimplify.cc:539 -#, fuzzy, gcc-internal-format -#| msgid "%qD is not a template function" +#, gcc-internal-format msgid "%qD was promoted to an immediate function" -msgstr "%qD är inte en mallfunktion" +msgstr "%qD befordrades till en omedelbar funktion" #: cp/cp-gimplify.cc:1164 #, gcc-internal-format @@ -54012,10 +53878,9 @@ msgid "taking address of an immediate function %qD" msgstr "tar adressen till en omedelbar funktion %qD" #: cp/cp-gimplify.cc:1263 -#, fuzzy, gcc-internal-format -#| msgid "address of a call to %qs is not a constant expression" +#, gcc-internal-format msgid "call to consteval function %qE is not a constant expression" -msgstr "adressen för ett anrop av %qs är inte ett konstant uttryck" +msgstr "anrop av consteval-funktionen %qE är inte ett konstant uttryck" #: cp/cp-gimplify.cc:2002 #, gcc-internal-format @@ -54639,34 +54504,29 @@ msgid "%q#D previously declared here" msgstr "%q#D tidigare deklarerad här" #: cp/decl.cc:2097 -#, fuzzy, gcc-internal-format -#| msgid "method declaration not in @interface context" +#, gcc-internal-format msgid "parameter declaration is not name-independent" -msgstr "metoddeklaration som inte är i @interface-kontext" +msgstr "parameterdeklarationen är inte namnoberoende" #: cp/decl.cc:2102 -#, fuzzy, gcc-internal-format -#| msgid "structured binding declaration set but not used" +#, gcc-internal-format msgid "structured binding at namespace scope is not name-independent" -msgstr "strukturerad bindningsdeklaration satt men inte använd" +msgstr "strukturerad bindning vid namnrymdsräckvidd är inte namnoberoende" #: cp/decl.cc:2106 -#, fuzzy, gcc-internal-format -#| msgid "structured binding has incomplete type %qT" +#, gcc-internal-format msgid "static structured binding is not name-independent" -msgstr "strukturerad bindning har en ofullständig typ %qT" +msgstr "statisk strukturerad bindning är inte namnoberoende" #: cp/decl.cc:2110 -#, fuzzy, gcc-internal-format -#| msgid "structured binding has incomplete type %qT" +#, gcc-internal-format msgid "extern structured binding is not name-independent" -msgstr "strukturerad bindning har en ofullständig typ %qT" +msgstr "extern strukturerad bindning är inte namnoberoende" #: cp/decl.cc:2117 -#, fuzzy, gcc-internal-format -#| msgid "static data member %qD in unnamed class" +#, gcc-internal-format msgid "static data member is not name-independent" -msgstr "statisk datamedlem %qD i namnlös klass" +msgstr "statisk datamedlem är inte namnoberoende" #: cp/decl.cc:2120 #, gcc-internal-format @@ -54674,16 +54534,14 @@ msgid "variable at namespace scope is not name-independent" msgstr "en variabel i namnrymdsräckvidd är inte namnoberoende" #: cp/decl.cc:2123 -#, fuzzy, gcc-internal-format -#| msgid "%qs variable is not a pointer" +#, gcc-internal-format msgid "static variable is not name-independent" -msgstr "variabeln %qs är inte en pekare" +msgstr "statisk variabel är inte namnoberoende" #: cp/decl.cc:2126 -#, fuzzy, gcc-internal-format -#| msgid "environment variable %qs not defined" +#, gcc-internal-format msgid "extern variable is not name-independent" -msgstr "miljövariabeln %qs är inte definierad" +msgstr "extern variabel är inte namnoberoende" #: cp/decl.cc:2138 #, gcc-internal-format From a89fb3ae7bb56d4674fb9fdd0c73bb2667ad51a9 Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Mon, 25 Mar 2024 20:52:01 +0000 Subject: [PATCH 244/551] Update gcc de.po * de.po: Update. --- gcc/po/de.po | 1380 +++++++++++++++++++++----------------------------- 1 file changed, 568 insertions(+), 812 deletions(-) diff --git a/gcc/po/de.po b/gcc/po/de.po index ed087b43e318..db42d7191ff8 100644 --- a/gcc/po/de.po +++ b/gcc/po/de.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2024-03-19 21:07+0100\n" +"PO-Revision-Date: 2024-03-25 21:26+0100\n" "Last-Translator: Roland Illig <roland.illig@gmx.de>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -41667,12 +41667,12 @@ msgstr "Gleitkommaeinheit %qs weicht von PRID-Voreinstellung %qs ab" #: config/loongarch/loongarch-cpu.cc:201 #, gcc-internal-format msgid "unknown SIMD extension (%qs disabled while %qs is enabled), disabling SIMD" -msgstr "" +msgstr "unbekannte SIMD-Erweiterung (%qs ist ausgeschaltet, während %qs eingeschaltet ist), SIMD wird ausgeschaltet" #: config/loongarch/loongarch-cpu.cc:239 #, gcc-internal-format msgid "detected base architecture %qs, but some of its features are not detected; the detected base architecture may be unreliable, only detected features will be enabled" -msgstr "" +msgstr "Basisarchitektur %qs erkannt, aber einige ihrer Merkmale werden nicht erkannt; die erkannte Basisarchitektur kann unzuverlässig sein, nur erkannte Merkmale werden eingeschaltet" #: config/loongarch/loongarch-opts.cc:225 #, gcc-internal-format @@ -41693,18 +41693,17 @@ msgstr "%qs funktioniert nicht auf einem Cross-Compiler" #: config/loongarch/loongarch-opts.cc:365 #, gcc-internal-format msgid "enabing %qs promotes %<%s%s%> to %<%s%s%>" -msgstr "" +msgstr "Einschalten von %qs befördert %<%s%s%> zu %<%s%s%>" #: config/loongarch/loongarch-opts.cc:377 #, gcc-internal-format msgid "%qs is disabled by %<-m%s%>, because it requires %<%s%s%>" -msgstr "" +msgstr "%qs wird durch %<-m%s%> ausgeschaltet, da es %<%s%s%> erfordert" #: config/loongarch/loongarch-opts.cc:389 -#, fuzzy, gcc-internal-format -#| msgid "switch %<-mcpu=%s%> conflicts with switch %<-march=%s%>" +#, gcc-internal-format msgid "%<-m%s=%s%> conflicts with %qs, which requires %<%s%s%>" -msgstr "Schalter %<-mcpu=%s%> steht mit dem Schalter %<-march=%s%> in Konflikt" +msgstr "%<-m%s=%s%> steht im Konflikt mit %qs, das %<%s%s%> erfordert" #: config/loongarch/loongarch-opts.cc:433 #, gcc-internal-format @@ -41924,10 +41923,9 @@ msgid "%qE attribute requires a string argument" msgstr "Attribut %qE erfordert eine Zeichenkettenkonstante als Argument" #: config/mips/mips.cc:1340 -#, fuzzy, gcc-internal-format -#| msgid "argument to %qE attribute is neither zero, nor one" +#, gcc-internal-format msgid "argument to %qE attribute is neither no, pcrel nor yes" -msgstr "Argument des Attributes %qE ist weder Null noch Eins" +msgstr "Argument des Attributes %qE ist keins von »no«, »pcrel« oder »yes«" #: config/mips/mips.cc:1506 config/mips/mips.cc:1510 #, gcc-internal-format @@ -42022,10 +42020,9 @@ msgid "MSA MIPS16 code" msgstr "MSA-MIPS16-Code" #: config/mips/mips.cc:20067 -#, fuzzy, gcc-internal-format -#| msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" +#, gcc-internal-format msgid "MIPS16 requires %<-mexplicit-relocs%>" -msgstr "%<-mno-gpopt%> erfordert %<-mexplicit-relocs%>" +msgstr "MIPS16 erfordert %<-mexplicit-relocs%>" #: config/mips/mips.cc:20258 config/mips/mips.cc:20263 #: config/mips/mips.cc:20353 config/mips/mips.cc:20355 @@ -42895,10 +42892,9 @@ msgid "PTX version (%<-mptx%>) needs to be at least %s to support selected %<-mi msgstr "PTX-Version %<-mptx%> muss mindestens %s sein, um die ausgewählte %<-misa%> (sm_%s) zu unterstützen" #: config/nvptx/nvptx.cc:340 -#, fuzzy, gcc-internal-format -#| msgid "multiple %<-mcpu=%> options specified" +#, gcc-internal-format msgid "%<-march=%> must be specified" -msgstr "mehrere %<-mcpu=%>-Optionen angegeben" +msgstr "%<-march=%> muss angegeben werden" #: config/nvptx/nvptx.cc:363 #, gcc-internal-format @@ -43077,10 +43073,9 @@ msgid "%<#pragma riscv intrinsic%> requires a string parameter" msgstr "%<#pragma riscv intrinsic%> erfordert eine Zeichenkette als Parameter" #: config/riscv/riscv-c.cc:203 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma riscv intrinsic%> option %qs needs 'V' extension enabled" +#, gcc-internal-format msgid "%<#pragma riscv intrinsic%> option %qs needs 'V' or 'XTHEADVECTOR' extension enabled" -msgstr "%<#pragma riscv intrinsic%>-Option %qs erfordert, dass die Erweiterung 'V' eingeschaltet ist" +msgstr "%<#pragma riscv intrinsic%>-Option %qs erfordert, dass eine der Erweiterungen »V« oder »XTHEADVECTOR« eingeschaltet ist" #: config/riscv/riscv-c.cc:211 #, gcc-internal-format @@ -43090,70 +43085,64 @@ msgstr "unbekannte Option %qs für %<#pragma riscv intrinsic%>" #: config/riscv/riscv-target-attr.cc:120 #, gcc-internal-format msgid "unexpected arch for %<target()%> attribute: must start with + or rv" -msgstr "" +msgstr "unerwartete Architektur für %<target()%>-Attribut: muss mit + oder rv beginnen" #: config/riscv/riscv-target-attr.cc:132 #, gcc-internal-format msgid "unexpected arch for %<target()%> attribute: bad string found %<%s%>" -msgstr "" +msgstr "unerwartete Architektur für %<target()%>-Attribut: Fehlerhafte Zeichenfolge %<%s%> gefunden" #: config/riscv/riscv-target-attr.cc:156 #, gcc-internal-format msgid "%<target()%> attribute: arch appears more than once" -msgstr "" +msgstr "%<target()%>-Attribut: Architektur erscheint mehr als einmal" #: config/riscv/riscv-target-attr.cc:167 #, gcc-internal-format msgid "%<target()%> attribute: cpu appears more than once" -msgstr "" +msgstr "%<target()%>-Attribut: CPU erscheint mehr als einmal" #: config/riscv/riscv-target-attr.cc:174 #, gcc-internal-format msgid "%<target()%> attribute: unknown CPU %qs" -msgstr "" +msgstr "%<target()%>-Attribut: unbekannte CPU %qs" #: config/riscv/riscv-target-attr.cc:195 -#, fuzzy, gcc-internal-format -#| msgid "target attribute is not supported on this machine" +#, gcc-internal-format msgid "%<target()%> attribute: tune appears more than once" -msgstr "Ziel-Attribut wird auf dieser Maschine nicht unterstützt" +msgstr "%<target()%>-Attribut: tune erscheint mehr als einmal" #: config/riscv/riscv-target-attr.cc:201 #, gcc-internal-format msgid "%<target()%> attribute: unknown TUNE %qs" -msgstr "" +msgstr "%<Ziel()%>-Attribut: unbekanntes TUNE %qs" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79868 #: config/riscv/riscv-target-attr.cc:240 -#, fuzzy, gcc-internal-format -#| msgid "malformed %<target()%> pragma or attribute" +#, gcc-internal-format msgid "malformed %<target()%> attribute" -msgstr "falsch geformtes Pragma oder Attribut %<target()%>" +msgstr "falsch geformtes %<target()%>-Attribut" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79868 #: config/riscv/riscv-target-attr.cc:254 -#, fuzzy, gcc-internal-format -#| msgid "pragma or attribute %<target(\"%s\")%> does not accept an argument" +#, gcc-internal-format msgid "attribute %<target(\"%s\")%> does not accept an argument" -msgstr "Pragma oder Attribut %<target(\"%s\")%> akzeptiert keine Argumente" +msgstr "Attribut %<target(\"%s\")%> akzeptiert keine Argumente" #: config/riscv/riscv-target-attr.cc:271 -#, fuzzy, gcc-internal-format -#| msgid "unknown attribute %qs" +#, gcc-internal-format msgid "Got unknown attribute %<target(\"%s\")%>" -msgstr "unbekanntes Attribut %qs" +msgstr "Unbekanntes Attribut %<target(\"%s\")%>" #: config/riscv/riscv-target-attr.cc:352 -#, fuzzy, gcc-internal-format -#| msgid "malformed %<target(\"%s\")%> pragma or attribute" +#, gcc-internal-format msgid "malformed %<target(\"%s\")%> attribute" -msgstr "falsch geformtes Pragma oder Attribut %<target(\"%s\")%>" +msgstr "falsch geformtes Attribut %<target(\"%s\")%>" #: config/riscv/riscv-vector-builtins.cc:4239 -#, fuzzy, gcc-internal-format -#| msgid "passing %wd to argument %d of %qE, which expects a value in the range [%wd, %wd]" +#, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects a value in the range [%wd, %wd] or %wd" -msgstr "Übergabe von %wd an das Argument %d von %qE, das einen Wert im Bereich [%wd, %wd] erwartet" +msgstr "Übergabe von %wd an das Argument %d von %qE, das einen Wert im Bereich [%wd, %wd] oder %wd erwartet" #: config/riscv/riscv-vector-builtins.cc:4435 #, gcc-internal-format @@ -43206,10 +43195,9 @@ msgid "capture by copy of RVV type %qT" msgstr "der RVV-Typ %qT kann nicht durch Kopieren gefangen werden" #: config/riscv/riscv-vector-builtins.cc:4633 -#, fuzzy, gcc-internal-format -#| msgid "no matching function for call to %<%s(%A)%>" +#, gcc-internal-format msgid "no matching function call to %qE with empty arguments" -msgstr "keine passende Funktion für Aufruf von %<%s(%A)%>" +msgstr "kein passender Funktionsaufruf für %qE mit leeren Argumenten" #: config/riscv/riscv.cc:647 #, gcc-internal-format @@ -43232,10 +43220,9 @@ msgid "ABI for flattened struct with zero-length bit-fields changed in GCC 10" msgstr "ABI für abgeflachte Struktur mit Bit-Feldern der Länge 0 hat wurde mit GCC 10 geändert" #: config/riscv/riscv.cc:5237 -#, fuzzy, gcc-internal-format -#| msgid "SVE type %qT cannot be passed to an unprototyped function" +#, gcc-internal-format msgid "RVV type %qT cannot be passed to an unprototyped function" -msgstr "der SVE-Typ %qT kann nur an prototypisierte Funktionen übergeben werden" +msgstr "der RVV-Typ %qT kann nur an prototypisierte Funktionen übergeben werden" #: config/riscv/riscv.cc:5515 #, gcc-internal-format @@ -43250,19 +43237,17 @@ msgstr "%<-mdiv%> erfordert %<-march%>, um die %<M%>-Erweiterung zu ermitteln" #: config/riscv/riscv.cc:8917 #, gcc-internal-format msgid "Current RISC-V GCC does not support VLEN greater than 4096bit for 'V' Extension" -msgstr "" +msgstr "Der aktuelle RISC-V-GCC unterstützt keine VLEN größer als 4096bit für die Erweiterung »V«" #: config/riscv/riscv.cc:8923 -#, fuzzy, gcc-internal-format -#| msgid "target CPU does not support ARM mode" +#, gcc-internal-format msgid "Current RISC-V GCC does not support RVV in big-endian mode" -msgstr "Ziel-CPU unterstützt nicht ARM-Modus" +msgstr "Der aktuelle RISC-V-GCC unterstützt RVV im Big-Endian-Modus nicht" #: config/riscv/riscv.cc:8949 config/riscv/riscv.cc:8952 -#, fuzzy, gcc-internal-format -#| msgid "code model %qs with %<-f%s%>" +#, gcc-internal-format msgid "code model %qs with %qs" -msgstr "Codemodell %qs mit %<-f%s%>" +msgstr "Codemodell %qs mit %qs" #: config/riscv/riscv.cc:8981 #, gcc-internal-format @@ -43275,16 +43260,14 @@ msgid "rv32e requires ilp32e ABI" msgstr "rv32e erfordert die ilp32e-ABI" #: config/riscv/riscv.cc:8990 -#, fuzzy, gcc-internal-format -#| msgid "rv32e requires ilp32e ABI" +#, gcc-internal-format msgid "rv64e requires lp64e ABI" -msgstr "rv32e erfordert die ilp32e-ABI" +msgstr "rv64e erfordert lp64e-ABI" #: config/riscv/riscv.cc:8997 -#, fuzzy, gcc-internal-format -#| msgid "z*inx requires ABI ilp32, ilp32e or lp64" +#, gcc-internal-format msgid "z*inx requires ABI ilp32, ilp32e, lp64 or lp64e" -msgstr "z*inx erfordert ABI ilp32, ilp32e oder lp64" +msgstr "z*inx erfordert ABI ilp32, ilp32e, lp64 oder lp64e" #: config/riscv/riscv.cc:9001 #, gcc-internal-format @@ -44203,28 +44186,24 @@ msgid "value %qs is not supported by attribute %<target%>" msgstr "Wert %qs wird von Attribut %<target%> nicht unterstützt" #: config/s390/s390.cc:17531 -#, fuzzy, gcc-internal-format -#| msgid "invalid constraints" +#, gcc-internal-format msgid "invalid cc output constraint: %qs" -msgstr "ungültige Einschränkungen" +msgstr "ungültige cc-Ausgabebeschränkung: %qs" #: config/s390/s390.cc:17536 -#, fuzzy, gcc-internal-format -#| msgid "double constants not supported" +#, gcc-internal-format msgid "multiple cc output constraints not supported" -msgstr "double-Konstanten werden nicht unterstützt" +msgstr "mehrere cc-Ausgabebeschränkungen nicht unterstützt" #: config/s390/s390.cc:17541 -#, fuzzy, gcc-internal-format -#| msgid "%<asm%> specifier for variable %qE conflicts with %<asm%> clobber list" +#, gcc-internal-format msgid "%<asm%> specifier for cc output conflicts with %<asm%> clobber list" -msgstr "%<asm%>-Spezifizierer für Variable %qE steht in Konflikt mit %<asm%>-Bestrafungs-Liste" +msgstr "%<asm%>-Spezifizierer für cc-Ausgabe steht in Konflikt mit %<asm%>-Clobber-Liste" #: config/s390/s390.cc:17547 -#, fuzzy, gcc-internal-format -#| msgid "invalid type for pointer diff" +#, gcc-internal-format msgid "invalid type for cc output constraint" -msgstr "ungültiger Typ für Zeiger-Differenz" +msgstr "ungültiger Typ für cc-Ausgabebeschränkung" #: config/sh/sh.cc:936 #, gcc-internal-format @@ -44787,10 +44766,9 @@ msgid "declaration of %q+D shadows a built-in function" msgstr "Deklaration von %q+D überdeckt eine eingebaute Funktion" #: c/c-decl.cc:2153 -#, fuzzy, gcc-internal-format -#| msgid "redeclaration of enumerator %q+D" +#, gcc-internal-format msgid "conflicting redeclaration of enumerator %q+D" -msgstr "Redeklaration von Aufzählung %q+D" +msgstr "widersprüchliche Neudeklaration des Aufzählungswerts %q+D" #: c/c-decl.cc:2160 #, gcc-internal-format @@ -45040,7 +45018,7 @@ msgstr "in Gültigkeitsbereich des Bezeichners mit variabel modifiziertem Typen #: c/c-decl.cc:4093 #, gcc-internal-format msgid "jump skips OpenMP %<allocate%> allocation" -msgstr "" +msgstr "Sprung überspringt OpenMP-%<allocate%>" #: c/c-decl.cc:4096 #, gcc-internal-format @@ -45073,10 +45051,9 @@ msgid "traditional C lacks a separate namespace for labels, identifier %qE confl msgstr "traditionelles C bietet keinen separaten Namensraum für Marken an, Bezeichner %qE steht in Konflikt" #: c/c-decl.cc:4379 -#, fuzzy, gcc-internal-format -#| msgid "switch jumps over variable initialization" +#, gcc-internal-format msgid "switch jumps over OpenMP %<allocate%> allocation" -msgstr "switch springt über Variableninitialisierung" +msgstr "switch springt über OpenMP-%<allocate%>" #: c/c-decl.cc:4385 #, gcc-internal-format @@ -45246,10 +45223,9 @@ msgid "%<[*]%> not allowed in other than function prototype scope" msgstr "%<[*]%> außerhalb des Bereichs des Funktionsprototypen nicht erlaubt" #: c/c-decl.cc:5475 cp/decl2.cc:1852 cp/name-lookup.cc:8767 -#, fuzzy, gcc-internal-format -#| msgid "%<omp::%E%> not allowed to be specified in this context" +#, gcc-internal-format msgid "%<omp::%s%> not allowed to be specified in this context" -msgstr "%<omp::%E%> darf in diesem Kontext nicht angegeben werden" +msgstr "%<omp::%s%> darf in diesem Kontext nicht angegeben werden" #: c/c-decl.cc:5555 #, gcc-internal-format @@ -45874,10 +45850,9 @@ msgid "ISO C90 does not support %<_Noreturn%>" msgstr "ISO-C90 unterstützt nicht %<_Noreturn%>" #: c/c-decl.cc:8204 -#, fuzzy, gcc-internal-format -#| msgid "variable previously declared %<static%> redeclared %<extern%>" +#, gcc-internal-format msgid "function previously declared %<static%> redeclared %<extern%>" -msgstr "als %<extern%> redeklarierte Variable war bereits als %<static%> deklariert" +msgstr "Funktion, die bereits als %<static%> deklariert war, wird als %<extern%> neudeklariert" #: c/c-decl.cc:8222 #, gcc-internal-format @@ -46085,10 +46060,9 @@ msgid "flexible array member in a struct with no named members" msgstr "flexibles Arrayelement in einer Struktur ohne benannte Elemente" #: c/c-decl.cc:9519 -#, fuzzy, gcc-internal-format -#| msgid "flexible array member not at end of struct" +#, gcc-internal-format msgid "structure containing a flexible array member is not at the end of another structure" -msgstr "flexibles Arrayelement nicht am Ende von struct" +msgstr "Struktur, die ein flexibles Arrayelement enthält, ist nicht am Ende einer anderen Struktur" #: c/c-decl.cc:9542 #, gcc-internal-format @@ -46106,16 +46080,14 @@ msgid "union cannot be made transparent" msgstr "union kann nicht transparent gemacht werden" #: c/c-decl.cc:9686 -#, fuzzy, gcc-internal-format -#| msgid "redefinition of typedef %q+D with variably modified type" +#, gcc-internal-format msgid "redefinition of struct or union %qT with variably modified type" -msgstr "Redefinition des typedef %q+D mit variabel modifiziertem Typ" +msgstr "Redefinition des Struktur- oder Vereinigungstyps %qT mit variabel modifiziertem Typ" #: c/c-decl.cc:9689 -#, fuzzy, gcc-internal-format -#| msgid "redefinition of %<struct %E%>" +#, gcc-internal-format msgid "redefinition of struct or union %qT" -msgstr "Redefinition von %<struct %E%>" +msgstr "Redefinition von Struktur- oder Vereinigungstyp %qT" #: c/c-decl.cc:9852 #, gcc-internal-format @@ -46148,10 +46120,9 @@ msgid "enumeration values exceed range of %qs" msgstr "Aufzählungswerte überschreiten Wertebereich von %qs" #: c/c-decl.cc:10133 -#, fuzzy, gcc-internal-format -#| msgid "nested redefinition of %<enum %E%>" +#, gcc-internal-format msgid "conflicting redefinition of enum %qT" -msgstr "Verschachtelte Redefinition von %<enum %E%>" +msgstr "widersprüchliche Redefinition des Aufzählungstyps %qT" #: c/c-decl.cc:10165 c/c-decl.cc:10181 #, gcc-internal-format @@ -46179,10 +46150,9 @@ msgid "enumerator value outside the range of %qs" msgstr "Aufzählungswert ist außerhalb des Gültigkeitsbereichs von %qs" #: c/c-decl.cc:10241 -#, fuzzy, gcc-internal-format -#| msgid "ISO C restricts enumerator values to range of %<int%> before C2X" +#, gcc-internal-format msgid "ISO C restricts enumerator values to range of %<int%> before C23" -msgstr "ISO C vor C2X beschränkt Aufzählungswerte auf den Bereich von %<int%>" +msgstr "ISO C vor C23 beschränkt Aufzählungswerte auf den Bereich von %<int%>" #: c/c-decl.cc:10442 cp/decl.cc:5981 cp/decl.cc:17785 #, gcc-internal-format @@ -46245,10 +46215,9 @@ msgid "traditional C rejects ISO C style function definitions" msgstr "traditionelles C weist Funktionsdefinitionen im ISO-C-Stil zurück" #: c/c-decl.cc:10696 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support omitting parameter names in function definitions before C2X" +#, gcc-internal-format msgid "ISO C does not support omitting parameter names in function definitions before C23" -msgstr "ISO-C unterstützt das Weglassen von Parameternamen in Funktionsdefinitionen erst ab C2X" +msgstr "ISO-C unterstützt das Weglassen von Parameternamen in Funktionsdefinitionen erst ab C23" #: c/c-decl.cc:10736 c/c-decl.cc:10740 #, gcc-internal-format @@ -46453,10 +46422,9 @@ msgid "ISO C90 does not support boolean types" msgstr "ISO-C90 unterstützt keine booleschen Typen" #: c/c-decl.cc:12451 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support the %<_Float%d%s%> type" +#, gcc-internal-format msgid "ISO C does not support the %<_Float%d%s%> type before C23" -msgstr "ISO-C unterstützt den Typen %<_Float%d%s%> nicht" +msgstr "ISO-C unterstützt den Typen %<_Float%d%s%> erst ab C23" #: c/c-decl.cc:12502 cp/parser.cc:20288 #, gcc-internal-format @@ -46464,10 +46432,9 @@ msgid "%<_Float%d%s%> is not supported on this target" msgstr "%<_Float%d%s%> wird für dieses Ziel nicht unterstützt" #: c/c-decl.cc:12573 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support decimal floating-point before C2X" +#, gcc-internal-format msgid "ISO C does not support decimal floating-point before C23" -msgstr "ISO-C unterstützt dezimale Gleitkommazahlen erst ab C2X" +msgstr "ISO-C unterstützt dezimale Gleitkommazahlen erst ab C23" #: c/c-decl.cc:12597 c/c-decl.cc:12974 c/c-parser.cc:10628 #, gcc-internal-format @@ -46480,21 +46447,19 @@ msgid "ISO C does not support fixed-point types" msgstr "ISO-C unterstützt keine Ganzzahltypen" #: c/c-decl.cc:12628 -#, fuzzy, gcc-internal-format -#| msgid "case label is not an integer constant expression" +#, gcc-internal-format msgid "%<_BitInt%> argument is not an integer constant expression" -msgstr "»case«-Marke ist kein konstanter Ganzzahlausdruck" +msgstr "%<_BitInt%>-Argument ist kein konstanter Ganzzahlausdruck" #: c/c-decl.cc:12634 -#, fuzzy, gcc-internal-format -#| msgid "enumerator value for %qE is not an integer constant expression" +#, gcc-internal-format msgid "%<_BitInt%> argument %qE is not a positive integer constant expression" -msgstr "Aufzählungswert für %qE ist kein Ganzzahlkonstantenausdruck" +msgstr "%<_BitInt%>-Argument %qE ist kein positiver konstanter Ganzzahlausdruck" #: c/c-decl.cc:12641 #, gcc-internal-format msgid "%<_BitInt%> argument %qE is larger than %<BITINT_MAXWIDTH%> %qd" -msgstr "" +msgstr "%<_BitInt%>-Argument %qE ist größer als %<BITINT_MAXWIDTH%> %qd" #: c/c-decl.cc:12689 #, gcc-internal-format @@ -46594,10 +46559,9 @@ msgid "ISO C does not support plain %<complex%> meaning %<double complex%>" msgstr "ISO-C unterstützt nicht %<double complex%> bedeutendes einfaches %<complex%>" #: c/c-decl.cc:12997 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %<auto%> type deduction before C2X" +#, gcc-internal-format msgid "ISO C does not support %<auto%> type deduction before C23" -msgstr "ISO C unterstützt %<auto%>-Typinferenz erst ab C2X" +msgstr "ISO C unterstützt %<auto%>-Typinferenz erst ab C23" #: c/c-decl.cc:13026 #, gcc-internal-format @@ -46610,16 +46574,14 @@ msgid "ISO C does not support complex integer types" msgstr "ISO-C unterstützt keine komplexen Ganzzahltypen" #: c/c-decl.cc:13237 -#, fuzzy, gcc-internal-format -#| msgid "Fixed line length must be at least seven" +#, gcc-internal-format msgid "%<signed _BitInt%> argument must be at least 2" -msgstr "Feste Zeilenlänge muss mindestens sieben sein" +msgstr "Argument für %<signed _BitInt%> muss mindestens 2 sein" #: c/c-decl.cc:13246 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ does not support %<__int%d%> for %qs" +#, gcc-internal-format msgid "ISO C does not support %<%s_BitInt(%d)%> before C23" -msgstr "ISO-C++ unterstützt %<__int%d%> für %qs nicht" +msgstr "ISO-C unterstützt %<%s_BitInt(%d)%> erst ab C23" #: c/c-decl.cc:13545 cp/semantics.cc:6316 #, gcc-internal-format @@ -46906,10 +46868,9 @@ msgid "%<__GIMPLE%> only valid with %<-fgimple%>" msgstr "%<__GIMPLE%> ist nur mit %<-fgimple%> gültig" #: c/c-parser.cc:3699 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support specifying %<enum%> underlying types before C2X" +#, gcc-internal-format msgid "ISO C does not support specifying %<enum%> underlying types before C23" -msgstr "ISO C unterstützt auf %<enum%> basierende Typen erst ab C2X" +msgstr "ISO C unterstützt die Angabe eines Basistyps für %<enum%> erst ab C23" #: c/c-parser.cc:3708 #, gcc-internal-format @@ -47016,10 +46977,9 @@ msgid "expected identifier or %<(%>" msgstr "Bezeichner oder %<(%> erwartet" #: c/c-parser.cc:4920 -#, fuzzy, gcc-internal-format -#| msgid "ISO C requires a named argument before %<...%> before C2X" +#, gcc-internal-format msgid "ISO C requires a named argument before %<...%> before C23" -msgstr "ISO-C erfordert ein benanntes Argument vor %<...%>, vor C2X" +msgstr "ISO-C erfordert ein benanntes Argument vor %<...%>, vor C23" #: c/c-parser.cc:5045 #, gcc-internal-format @@ -47052,10 +47012,9 @@ msgid "%qE attribute does not take any arguments" msgstr "Attribut %qE akzeptiert keine Argumente" #: c/c-parser.cc:5893 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %<[[]]%> attributes before C2X" +#, gcc-internal-format msgid "ISO C does not support %<[[]]%> attributes before C23" -msgstr "ISO-C unterstützt %<[[]]%>-Attribute erst ab C2X" +msgstr "ISO-C unterstützt %<[[]]%>-Attribute erst ab C23" #: c/c-parser.cc:6106 c/c-parser.cc:6169 c/c-typeck.cc:8822 #, gcc-internal-format @@ -47063,10 +47022,9 @@ msgid "variable-sized object may not be initialized except with an empty initial msgstr "Objekt variabler Größe darf nicht initialisiert werden, außer mit einem leeren Initialisierer" #: c/c-parser.cc:6163 -#, fuzzy, gcc-internal-format -#| msgid "ISO C forbids empty initializer braces before C2X" +#, gcc-internal-format msgid "ISO C forbids empty initializer braces before C23" -msgstr "ISO-C unterstützt leere Initialisierungsklammern erst ab C2X" +msgstr "ISO-C unterstützt leere Initialisierungsklammern erst ab C23" #: c/c-parser.cc:6227 #, gcc-internal-format @@ -47089,22 +47047,19 @@ msgid "obsolete use of designated initializer without %<=%>" msgstr "veraltete Verwendung einer bestimmten Initialisierung ohne %<=%>" #: c/c-parser.cc:6567 cp/parser.cc:13308 -#, fuzzy, gcc-internal-format -#| msgid "no valid clauses specified in %<#pragma acc declare%>" +#, gcc-internal-format msgid "inner loops must be perfectly nested in %<#pragma acc loop%>" -msgstr "keine gültigen Klauseln in %<#pragma acc declare%> angegeben" +msgstr "innere Schleifen müssen in %<#pragma acc loop%> perfekt geschachtelt sein" #: c/c-parser.cc:6574 cp/parser.cc:13315 -#, fuzzy, gcc-internal-format -#| msgid "%<ordered%> region must be closely nested inside a loop region with an %<ordered%> clause" +#, gcc-internal-format msgid "inner loops must be perfectly nested with %<ordered%> clause" -msgstr "%<ordered%>-Region muss eng geschachtelt sein, wenn sie innerhalb einer Schleifenregion mit %<ordered%>-Klausel auftritt" +msgstr "innere Schleifen müssen mit der %<ordered%>-Klausel perfekt geschachtelt sein" #: c/c-parser.cc:6581 cp/parser.cc:13322 -#, fuzzy, gcc-internal-format -#| msgid "%<nogroup%> clause must not be used together with %<reduction%> clause" +#, gcc-internal-format msgid "inner loops must be perfectly nested with %<reduction%> %<inscan%> clause" -msgstr "%<nogroup%>-Klausel darf nicht zusammen mit %<reduction%>-Klausel verwendet werden" +msgstr "innere Schleifen müssen mit der %<reduction%>-%<inscan%>-Klausel perfekt verschachtelt sein" #: c/c-parser.cc:6638 c/c-parser.cc:6793 cp/parser.cc:12240 cp/parser.cc:12390 #: cp/parser.cc:48555 @@ -47113,17 +47068,15 @@ msgid "mixing OpenMP directives with attribute and pragma syntax on the same sta msgstr "Vermischung von OpenMP-Direktiven mit Attribut- und Pragma-Syntax in ein und derselben Anweisung" #: c/c-parser.cc:6646 cp/parser.cc:12248 -#, fuzzy, gcc-internal-format -#| msgid "%<omp::%E%> attribute requires argument" +#, gcc-internal-format msgid "OpenMP %<omp::decl%> attribute on a statement" -msgstr "Attribut %<omp::%E%> erfordert Argument" +msgstr "OpenMP-Attribut %<omp::decl%> an einer Anweisung" #: c/c-parser.cc:6670 c/c-parser.cc:6889 c/c-parser.cc:25015 cp/parser.cc:12272 #: cp/parser.cc:48535 cp/parser.cc:48675 -#, fuzzy, gcc-internal-format -#| msgid "unknown OpenMP directive name in %qs clause argument" +#, gcc-internal-format msgid "unknown OpenMP directive name in %qs attribute argument" -msgstr "unbekannter OpenMP-Direktiven-Name im Argument der %qs-Klausel" +msgstr "unbekannter OpenMP-Direktiven-Name im Argument des Attributs %qs" #: c/c-parser.cc:6762 cp/parser.cc:12359 #, gcc-internal-format @@ -47229,7 +47182,7 @@ msgstr "es wird empfohlen, explizite geschweifte Klammern zu setzen, um mehrdeut #: c/c-parser.cc:8122 c/c-parser.cc:8187 c/c-parser.cc:8306 cp/parser.cc:14614 #, gcc-internal-format msgid "loop not permitted in intervening code in OpenMP loop body" -msgstr "" +msgstr "Schleife in dazwischenliegendem Code im OpenMP-Schleifenkörper nicht erlaubt" #: c/c-parser.cc:8195 #, gcc-internal-format @@ -47592,16 +47545,14 @@ msgid "wrong number of arguments to %<__builtin_shuffle%>" msgstr "falsche Anzahl der Argumente für %<__builtin_shuffle%>" #: c/c-parser.cc:11851 -#, fuzzy, gcc-internal-format -#| msgid "wrong number of arguments" +#, gcc-internal-format msgid "wrong number of arguments to %qs" -msgstr "falsche Anzahl an Argumenten" +msgstr "falsche Anzahl an Argumenten für %qs" #: c/c-parser.cc:11860 -#, fuzzy, gcc-internal-format -#| msgid "%qD does not have integral type" +#, gcc-internal-format msgid "%qs operand not an integral type" -msgstr "%qD hat keinen Ganzzahltyp" +msgstr "Operand für %qs hat keinen Ganzzahltyp" #: c/c-parser.cc:12123 cp/parser.cc:6134 #, gcc-internal-format @@ -47609,10 +47560,9 @@ msgid "%<omp_all_memory%> may only be used in OpenMP %<depend%> clause" msgstr "%<omp_all_memory%> darf nur in OpenMP-%<depend%>-Klausel verwendet werden" #: c/c-parser.cc:12133 -#, fuzzy, gcc-internal-format -#| msgid "ISO C does not support %qs before C2X" +#, gcc-internal-format msgid "ISO C does not support %qs before C23" -msgstr "ISO-C unterstützt %qs erst ab C2X" +msgstr "ISO-C unterstützt %qs erst ab C23" #: c/c-parser.cc:12221 #, gcc-internal-format @@ -47645,10 +47595,9 @@ msgid "ISO C90 forbids compound literals" msgstr "ISO-C90 verbietet zusammengesetzte Literale" #: c/c-parser.cc:12284 -#, fuzzy, gcc-internal-format -#| msgid "ISO C forbids storage class specifiers in compound literals before C2X" +#, gcc-internal-format msgid "ISO C forbids storage class specifiers in compound literals before C23" -msgstr "ISO-C erlaubt Speicherklassenangaben in zusammengesetzten Literalen erst ab C2X" +msgstr "ISO-C erlaubt Speicherklassenangaben in zusammengesetzten Literalen erst ab C23" #: c/c-parser.cc:12298 #, gcc-internal-format @@ -47718,7 +47667,7 @@ msgstr "die Betragsfunktion %qD bekommt hier ein Argument vom Typ %qT, erwartet #: c/c-parser.cc:12606 cp/parser.cc:8164 #, gcc-internal-format msgid "calls to the OpenMP runtime API are not permitted in intervening code" -msgstr "" +msgstr "Aufrufe an die OpenMP-Laufzeit-API sind in dazwischenliegendem Code nicht zulässig" #: c/c-parser.cc:12980 #, gcc-internal-format @@ -47798,7 +47747,7 @@ msgstr "%<#pragma GCC unroll%> erfordert einen Zuweisungsausdruck, der zu einer #: c/c-parser.cc:14470 cp/parser.cc:50733 #, gcc-internal-format msgid "intervening code must not contain OpenMP directives" -msgstr "" +msgstr "dazwischenliegender Code darf keine OpenMP-Direktiven enthalten" #: c/c-parser.cc:14490 c/c-parser.cc:23558 c/c-parser.cc:23867 #: c/c-parser.cc:23930 c/c-parser.cc:24040 cp/parser.cc:46383 @@ -47889,10 +47838,9 @@ msgid "expected %<none%>, %<shared%>, %<private%> or %<firstprivate%>" msgstr "%<none%>, %<shared%>, %<private%> oder %<firstprivate%> erwartet" #: c/c-parser.cc:15925 cp/parser.cc:39100 -#, fuzzy, gcc-internal-format -#| msgid "expected goto expression" +#, gcc-internal-format msgid "expected constant logical expression" -msgstr "Interner Fehler: expected goto expression" +msgstr "Interner Fehler: expected constant logical expression" #: c/c-parser.cc:16002 cp/parser.cc:39182 #, gcc-internal-format @@ -47964,10 +47912,9 @@ msgid "expected %<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<non msgstr "%<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<none%> oder %<default%> erwartet" #: c/c-parser.cc:16552 -#, fuzzy, gcc-internal-format -#| msgid "expected %<scalar%>, %<aggregate%> or %<pointer%>" +#, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<pointer%> or %<all%>" -msgstr "%<scalar%>, %<aggregate%> oder %<pointer%> erwartet" +msgstr "%<scalar%>, %<aggregate%>, %<pointer%> oder %<all%> erwartet" #: c/c-parser.cc:16629 cp/parser.cc:39718 #, gcc-internal-format @@ -48006,10 +47953,9 @@ msgid "%<tile%> argument needs positive integral constant" msgstr "%<tile%>-Argument muss eine positive, ganzzahlige Konstante sein" #: c/c-parser.cc:17059 cp/parser.cc:41829 -#, fuzzy, gcc-internal-format -#| msgid "too many %<if%> clauses" +#, gcc-internal-format msgid "too many %<self%> clauses" -msgstr "zu viele %<if%>-Klauseln" +msgstr "zu viele %<self%>-Klauseln" #: c/c-parser.cc:17101 cp/parser.cc:39771 #, gcc-internal-format @@ -48154,16 +48100,14 @@ msgid "too many %<close%> modifiers" msgstr "zu viele %<close%>-Modifizierer" #: c/c-parser.cc:18792 cp/parser.cc:41456 -#, fuzzy, gcc-internal-format -#| msgid "too many %<close%> modifiers" +#, gcc-internal-format msgid "too many %<present%> modifiers" -msgstr "zu viele %<close%>-Modifizierer" +msgstr "zu viele %<present%>-Modifizierer" #: c/c-parser.cc:18800 cp/parser.cc:41467 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp target%> with modifier other than %<always%> or %<close%> on %<map%> clause" +#, gcc-internal-format msgid "%<map%> clause with map-type modifier other than %<always%>, %<close%> or %<present%>" -msgstr "%<#pragma omp target%> mit Modifizierer außer %<always%> oder %<close%> an %<map%>-Klausel" +msgstr "%<map%>-Klausel mit einem anderen map-type-Modifikator als %<always%>, %<close%> oder %<present%>" #: c/c-parser.cc:18838 cp/parser.cc:41507 #, gcc-internal-format @@ -48206,10 +48150,9 @@ msgid "%<detach%> clause event handle has type %qT rather than %<omp_event_handl msgstr "Ereignishandle in %<detach%>-Klausel ist vom Typ %qT statt des erwarteten %<omp_event_handle_t%>" #: c/c-parser.cc:19391 cp/parser.cc:42045 -#, fuzzy, gcc-internal-format -#| msgid "expected assumption clause" +#, gcc-internal-format msgid "expected an OpenACC clause" -msgstr "Annahme-Klausel erwartet" +msgstr "OpenACC-Klausel erwartet" #: c/c-parser.cc:19402 c/c-parser.cc:19767 cp/parser.cc:42056 #: cp/parser.cc:42464 @@ -48228,10 +48171,9 @@ msgid "%qs must be the first clause of %qs" msgstr "%qs muss die erste Klausel von %qs sein" #: c/c-parser.cc:19756 cp/parser.cc:42453 -#, fuzzy, gcc-internal-format -#| msgid "expected assumption clause" +#, gcc-internal-format msgid "expected an OpenMP clause" -msgstr "Annahme-Klausel erwartet" +msgstr "OpenMP-Klausel erwartet" #: c/c-parser.cc:19891 cp/parser.cc:47284 #, gcc-internal-format @@ -48286,7 +48228,7 @@ msgstr "%<#pragma acc %s data%> hat keine Datenverschiebeklausel" #: c/c-parser.cc:20109 cp/parser.cc:47244 #, gcc-internal-format msgid "%<host_data%> construct requires %<use_device%> clause" -msgstr "" +msgstr "das %<host_data%>-Konstrukt erfordert eine %<use_device%>-Klausel" #: c/c-parser.cc:20338 cp/parser.cc:3367 #, gcc-internal-format @@ -48329,27 +48271,24 @@ msgid "%<#pragma acc update%> must contain at least one %<device%> or %<host%> o msgstr "%<#pragma acc update%> muss mindestens eine %<device%>- oder %<host%>- or %<self%>-Klausel enthalten" #: c/c-parser.cc:20558 -#, fuzzy, gcc-internal-format -#| msgid "variables in %<__regio_symbol%> address space must be declared %<extern%>" +#, gcc-internal-format msgid "variable %qD used in the %<allocator%> clause must be declared before %qD" -msgstr "Variablen im Adressraum %<__regio_symbol%> müssen als %<extern%> deklariert werden" +msgstr "die in der %<allocator%>-Klausel verwendete Variable %qD muss vor %qD deklariert werden" #: c/c-parser.cc:20562 c/c-parser.cc:20585 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "to be allocated variable declared here" -msgstr "Templateparameter %qD hier deklariert" +msgstr "die zu allozierende Variable ist hier deklariert" #: c/c-parser.cc:20580 #, gcc-internal-format msgid "variable %qD used in the %<allocator%> clause must not be modified between declaration of %qD and its %<allocate%> directive" -msgstr "" +msgstr "die in der %<allocator%>-Klausel verwendete Variable %qD darf zwischen der Deklaration von %qD und der %<allocate%>-Direktive nicht verändert werden" #: c/c-parser.cc:20583 -#, fuzzy, gcc-internal-format -#| msgid "defined here" +#, gcc-internal-format msgid "modified here" -msgstr "hier definiert" +msgstr "hier verändert" #: c/c-parser.cc:20651 cp/parser.cc:42578 cp/parser.cc:42593 #, gcc-internal-format @@ -48362,39 +48301,34 @@ msgid "%<allocator%> clause allocator expression has type %qT rather than %<omp_ msgstr "Allokationsausdruck in %<allocator%>-Klausel ist vom Typ %qT statt des erwarteten %<omp_allocator_handle_t%>" #: c/c-parser.cc:20692 -#, fuzzy, gcc-internal-format -#| msgid "parameter %qD may not appear in this context" +#, gcc-internal-format msgid "function parameter %qD may not appear as list item in an %<allocate%> directive" -msgstr "Parameter %qD darf in diesem Kontext nicht auftauchen" +msgstr "Funktionsparameter %qD darf nicht als Listenelement in einer %<allocate%>-Direktive erscheinen" #: c/c-parser.cc:20699 -#, fuzzy, gcc-internal-format -#| msgid "deduction guide %qD must be declared in the same scope as %qT" +#, gcc-internal-format msgid "%<allocate%> directive must be in the same scope as %qD" -msgstr "Herleitungshinweis %qD muss im selben Gültigkeitsbereich wie %qT deklariert sein" +msgstr "die %<allocate%>-Direktive muss sich im selben Bereich wie %qD befinden" #: c/c-parser.cc:20707 -#, fuzzy, gcc-internal-format -#| msgid "%qD appears more than once in %<allocate%> clauses" +#, gcc-internal-format msgid "%qD already appeared as list item in an %<allocate%> directive" -msgstr "%qD kommt in %<allocate%>-Klausel mehrfach vor" +msgstr "%qD erschien bereits als Listenelement in einer %<allocate%>-Direktive" #: c/c-parser.cc:20714 #, gcc-internal-format msgid "%<allocator%> clause required for static variable %qD" -msgstr "" +msgstr "%<allocator%>-Klausel für statische Variable %qD erforderlich" #: c/c-parser.cc:20721 -#, fuzzy, gcc-internal-format -#| msgid "%<allocate%> clause must specify an allocator here" +#, gcc-internal-format msgid "%<allocator%> clause requires a predefined allocator as %qD is static" -msgstr "%<allocate%>-Klausel muss hier einen Allozierer angeben" +msgstr "die %<allocator%>-Klausel erfordert einen vordefinierten Allokator, da %qD statisch ist" #: c/c-parser.cc:20725 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp allocate%> not yet supported" +#, gcc-internal-format msgid "%<#pragma omp allocate%> for static variables like %qD not yet supported" -msgstr "%<#pragma omp allocate%> wird nicht mehr unterstützt" +msgstr "%<#pragma omp allocate%> wird für statische Variablen wie %qD noch nicht unterstützt" #: c/c-parser.cc:20876 cp/parser.cc:42758 #, gcc-internal-format @@ -48434,16 +48368,14 @@ msgid "%qs clause requires %qs clause" msgstr "%qs-Klausel erfordert %qs-Klausel" #: c/c-parser.cc:21040 cp/parser.cc:42927 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause" +#, gcc-internal-format msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause implicitly provided by a %<requires%> directive" -msgstr "%<#pragma omp atomic write%> ist unverträglich mit der Klausel %<acquire%>" +msgstr "%<#pragma omp atomic write%> inkompatibel mit %<acquire%>-Klausel, die implizit von einer %<requires%>-Direktive bereitgestellt wird" #: c/c-parser.cc:21051 cp/parser.cc:42938 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause" +#, gcc-internal-format msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause implicitly provided by a %<requires%> directive" -msgstr "%<#pragma omp atomic read%> ist unverträglich mit der Klausel %<release%>" +msgstr "%<#pragma omp atomic read%> inkompatibel mit %<release%>-Klausel, die implizit von einer %<requires%>-Direktive bereitgestellt wird" #: c/c-parser.cc:21083 cp/parser.cc:42970 #, gcc-internal-format @@ -48507,15 +48439,14 @@ msgid "%<depobj%> expression is not lvalue expression" msgstr "Ausdruck %<depobj%> ist kein lvalue-Ausdruck" #: c/c-parser.cc:21845 -#, fuzzy, gcc-internal-format -#| msgid "%<depobj%> expression is not lvalue expression" +#, gcc-internal-format msgid "%<destroy%> expression is not lvalue expression" -msgstr "Ausdruck %<depobj%> ist kein lvalue-Ausdruck" +msgstr "%<destroy%>-Ausdruck ist kein Lvalue-Ausdruck" #: c/c-parser.cc:21851 cp/parser.cc:43744 #, gcc-internal-format msgid "the %<destroy%> expression %qE should be the same as the %<depobj%> argument %qE" -msgstr "" +msgstr "der %<destroy%>-Ausdruck %qE sollte mit dem %<depobj%>-Argument %qE identisch sein" #: c/c-parser.cc:21882 cp/parser.cc:43780 #, gcc-internal-format @@ -48548,10 +48479,9 @@ msgid "%<[[omp::directive(%s)]]%> must be the only specified attribute on a stat msgstr "%<[[omp::directive(%s)]]%> muss das einzige angegebene Attribut in einer Anweisung sein" #: c/c-parser.cc:22086 cp/parser.cc:44617 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp taskwait%> may only be used in compound statements" +#, gcc-internal-format msgid "%<#pragma omp scan%> with zero preceding executable statements" -msgstr "%<#pragma omp taskwait%> darf nur in Verbundanweisungen verwendet werden" +msgstr "%<#pragma omp scan%> mit 0 vorhergehenden ausführbaren Anweisungen" #: c/c-parser.cc:22120 cp/parser.cc:44650 #, gcc-internal-format @@ -48564,10 +48494,9 @@ msgid "expected %<#pragma omp scan%>" msgstr "%<#pragma omp scan%> erwartet" #: c/c-parser.cc:22134 cp/parser.cc:44665 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma omp taskwait%> may only be used in compound statements" +#, gcc-internal-format msgid "%<#pragma omp scan%> with zero succeeding executable statements" -msgstr "%<#pragma omp taskwait%> darf nur in Verbundanweisungen verwendet werden" +msgstr "%<#pragma omp scan%> mit 0 nachfolgenden ausführbaren Anweisungen" #: c/c-parser.cc:22252 cp/semantics.cc:10734 cp/semantics.cc:10819 #, gcc-internal-format @@ -48576,10 +48505,9 @@ msgstr "Schleifendeklaration oder Initialisierung erwartet" #: c/c-parser.cc:22340 c/c-parser.cc:22355 cp/parser.cc:45012 #: cp/parser.cc:45027 -#, fuzzy, gcc-internal-format -#| msgid "not enough perfectly nested loops" +#, gcc-internal-format msgid "not enough nested loops" -msgstr "nicht genügend perfekt geschachtelte Schleifen" +msgstr "nicht genügend geschachtelte Schleifen" #: c/c-parser.cc:22455 cp/parser.cc:45299 #, gcc-internal-format @@ -48667,10 +48595,9 @@ msgid "expected trait selector name" msgstr "Name des Merkmalsselektors erwartet" #: c/c-parser.cc:24542 cp/parser.cc:47860 -#, fuzzy, gcc-internal-format -#| msgid "selector %qs not allowed for context selector set %qs" +#, gcc-internal-format msgid "unknown selector %qs for context selector set %qs" -msgstr "Selektor %qs nicht erlaubt für Kontext-Selektorsatz %qs" +msgstr "unbekannter Selektor %qs für Kontextselektormenge %qs" #: c/c-parser.cc:24570 cp/parser.cc:47889 #, gcc-internal-format @@ -48678,22 +48605,19 @@ msgid "selector %qs does not accept any properties" msgstr "Selektor %qs akzeptiert keine Eigenschaften" #: c/c-parser.cc:24592 cp/parser.cc:47921 -#, fuzzy, gcc-internal-format -#| msgid "%<friend%> can only be specified inside a class" +#, gcc-internal-format msgid "%<score%> cannot be specified in traits in the %qs trait-selector-set" -msgstr "%<friend%> kann nur innerhalb einer Klasse angegeben werden" +msgstr "%<score%> kann nicht in Traits in der Trait-Selektor-Menge %qs angegeben werden" #: c/c-parser.cc:24601 cp/parser.cc:47931 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be constant integer expression" +#, gcc-internal-format msgid "%<score%> argument must be constant integer expression" -msgstr "das Score-Argument muss ein konstanter ganzzahliger Ausdruck sein" +msgstr "das %<score%>-Argument muss ein konstanter ganzzahliger Ausdruck sein" #: c/c-parser.cc:24604 cp/parser.cc:47934 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be non-negative" +#, gcc-internal-format msgid "%<score%> argument must be non-negative" -msgstr "das Score-Argument darf nicht negativ sein" +msgstr "das %<score%>-Argument darf nicht negativ sein" #: c/c-parser.cc:24645 cp/parser.cc:47980 #, gcc-internal-format @@ -48714,16 +48638,14 @@ msgstr "Eigenschaften für %<simd%>-Selektor dürfen nicht in %<metadirective%> #. Currently only the now-deprecated syntax #. from OpenMP 5.0 is supported. #: c/c-parser.cc:24705 cp/parser.cc:48035 fortran/openmp.cc:5891 -#, fuzzy, gcc-internal-format -#| msgid "%qs clause on %<requires%> directive not supported yet" +#, gcc-internal-format msgid "%<requires%> selector is not supported yet" -msgstr "die %qs-Klausel wird in der %<requires%>-Direktive noch nicht unterstützt" +msgstr "der %<requires%>-Selektor wird noch nicht unterstützt" #: c/c-parser.cc:24764 cp/parser.cc:48098 -#, fuzzy, gcc-internal-format -#| msgid "expected trait selector name" +#, gcc-internal-format msgid "expected context selector set name" -msgstr "Name des Merkmalsselektors erwartet" +msgstr "Name der Kontextselektormenge erwartet" #: c/c-parser.cc:24841 cp/parser.cc:48413 #, gcc-internal-format @@ -48766,16 +48688,14 @@ msgid "%qD specified both in declare target %<link%> and %<to%> or %<enter%> cla msgstr "%qD ist sowohl im Deklarationsziel %<link%> als auch in %<to%>- oder %<enter%>-Klauseln angegeben" #: c/c-parser.cc:25199 cp/parser.cc:48882 -#, fuzzy, gcc-internal-format -#| msgid "directive with only %<device_type%> clause" +#, gcc-internal-format msgid "directive with only %<device_type%> or %<indirect%> clauses" -msgstr "Direktive mit nur %<device_type%>-Klausel" +msgstr "Direktive mit nur %<device_type%>- oder %<indirect%>-Klauseln" #: c/c-parser.cc:25202 cp/parser.cc:48885 -#, fuzzy, gcc-internal-format -#| msgid "%<detach%> clause must not be used together with %<mergeable%> clause" +#, gcc-internal-format msgid "%<device_type%> clause must specify 'any' when used with an %<indirect%> clause" -msgstr "%<detach%>-Klausel darf nicht zusammen mit %<mergeable%>-Klausel verwendet werden" +msgstr "die %<device_type%>-Klausel muss 'any' angeben, wenn sie mit einer %<indirect%>-Klausel verwendet wird" #: c/c-parser.cc:25251 c/c-parser.cc:25293 cp/parser.cc:48940 #: cp/parser.cc:48987 @@ -48866,10 +48786,9 @@ msgid "expected %<simd%>, %<reduction%>, %<target%> or %<variant%>" msgstr "%<simd%>, %<reduction%>, %<target%> oder %<variant%> erwartet" #: c/c-parser.cc:25837 cp/parser.cc:49589 -#, fuzzy, gcc-internal-format -#| msgid "expected %<seq_cst%>, %<acq_rel%>, %<release%> or %<acquire%>" +#, gcc-internal-format msgid "expected %<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> or %<seq_cst%>" -msgstr "%<seq_cst%>, %<acq_rel%>, %<release%> oder %<acquire%> erwartet" +msgstr "%<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> oder %<seq_cst%> erwartet" #: c/c-parser.cc:25866 cp/parser.cc:49624 #, gcc-internal-format @@ -49071,13 +48990,12 @@ msgstr "Operanden von dezimalen und anderen Gleitkommatypen können nicht gemisc #: c/c-typeck.cc:926 #, gcc-internal-format msgid "%<_Complex _BitInt(%d)%> unsupported" -msgstr "" +msgstr "%<_Complex _BitInt(%d)%> wird nicht unterstützt" #: c/c-typeck.cc:1472 -#, fuzzy, gcc-internal-format -#| msgid "invalid use of pointers to arrays with different qualifiers in ISO C before C2X" +#, gcc-internal-format msgid "invalid use of pointers to arrays with different qualifiers in ISO C before C23" -msgstr "ungültige Verwendung von Zeigern auf Arrays mit unterschiedlichen Qualifizierern in ISO C vor C2X" +msgstr "ungültige Verwendung von Zeigern auf Arrays mit unterschiedlichen Qualifizierern in ISO C vor C23" #: c/c-typeck.cc:1476 #, gcc-internal-format @@ -49095,10 +49013,9 @@ msgid "function return types not compatible due to %<volatile%>" msgstr "Funktionsrückgabetypen nicht kompatibel wegen %<volatile%>" #: c/c-typeck.cc:1905 -#, fuzzy, gcc-internal-format -#| msgid "converting an array compound literal to a pointer is ill-formed in C++" +#, gcc-internal-format msgid "converting an array compound literal to a pointer leads to a dangling pointer in C++" -msgstr "Umwandlung eines zusammengesetzten Arrayliterals ist in C++ ungültig" +msgstr "Umwandlung eines zusammengesetzten Arrayliterals in einen Zeiger führt in C++ zu einem baumelnden Zeiger" #: c/c-typeck.cc:2599 c/c-typeck.cc:9852 #, gcc-internal-format @@ -49474,10 +49391,9 @@ msgid "pointer to array loses qualifier in conditional expression" msgstr "Zeiger auf Array verliert durch den Bedingungsausdruck Qualifizierer" #: c/c-typeck.cc:5665 -#, fuzzy, gcc-internal-format -#| msgid "pointer to array loses qualifier in conditional expression in ISO C before C2X" +#, gcc-internal-format msgid "pointer to array loses qualifier in conditional expression in ISO C before C23" -msgstr "Zeiger auf Array verliert durch den Bedingungsausdruck Qualifizierer, in ISO C vor C2X" +msgstr "Zeiger auf Array verliert durch den Bedingungsausdruck Qualifizierer, in ISO C vor C23" #: c/c-typeck.cc:5670 #, gcc-internal-format @@ -49490,16 +49406,14 @@ msgid "pointer type mismatch in conditional expression" msgstr "Zeigertyp passt nicht in bedingtem Ausdruck" #: c/c-typeck.cc:5695 -#, fuzzy, gcc-internal-format -#| msgid "Expected expression type" +#, gcc-internal-format msgid "first expression has type %qT" -msgstr "Ausdruckstyp erwartet" +msgstr "der erste Ausdruck hat den Typ %qT" #: c/c-typeck.cc:5696 -#, fuzzy, gcc-internal-format -#| msgid "Expected expression type" +#, gcc-internal-format msgid "second expression has type %qT" -msgstr "Ausdruckstyp erwartet" +msgstr "der zweite Ausdruck hat den Typ %qT" #: c/c-typeck.cc:5707 c/c-typeck.cc:5720 #, gcc-internal-format @@ -49575,10 +49489,9 @@ msgid "ISO C forbids casting nonscalar to the same type" msgstr "ISO-C verbietet Typkonvertierung von Nicht-Skalar auf selben Typen" #: c/c-typeck.cc:6199 -#, fuzzy, gcc-internal-format -#| msgid "useless cast to type %q#T" +#, gcc-internal-format msgid "useless cast to type %qT" -msgstr "nutzlose Umwandlung in Typ %q#T" +msgstr "nutzlose Umwandlung in Typ %qT" #: c/c-typeck.cc:6219 #, gcc-internal-format @@ -49838,10 +49751,9 @@ msgid "ISO C forbids return between function pointer and %<void *%>" msgstr "ISO-C verbietet return zwischen Funktionszeiger und %<void *%>" #: c/c-typeck.cc:7769 -#, fuzzy, gcc-internal-format -#| msgid "array with qualifier on the element is not qualified before C2X" +#, gcc-internal-format msgid "array with qualifier on the element is not qualified before C23" -msgstr "Array mit Qualifizierer auf dem Element wird vor C2X nicht qualifiziert" +msgstr "Array mit Qualifizierer auf dem Element wird vor C23 nicht qualifiziert" #: c/c-typeck.cc:7786 #, gcc-internal-format @@ -50130,10 +50042,9 @@ msgid "enum conversion in initialization is invalid in C++" msgstr "enum-Umwandlung in Initialisierung ist in C++ ungültig" #: c/c-typeck.cc:10834 -#, fuzzy, gcc-internal-format -#| msgid "excess elements in union initializer" +#, gcc-internal-format msgid "excess elements in %qT initializer" -msgstr "Elementüberschreitung in union-Initialisierung" +msgstr "überzählige Elemente in %qT-Initialisierer" #: c/c-typeck.cc:10846 c/c-typeck.cc:10923 #, gcc-internal-format @@ -50734,10 +50645,9 @@ msgstr "Arrayabschnitt in %qs-Klausel hat keinen zuordenbaren Typ" #: c/c-typeck.cc:15565 c/c-typeck.cc:15641 c/c-typeck.cc:15677 #: cp/semantics.cc:8326 cp/semantics.cc:8405 cp/semantics.cc:8441 -#, fuzzy, gcc-internal-format -#| msgid "unsupported memory expression:" +#, gcc-internal-format msgid "unsupported map expression %qE" -msgstr "nicht unterstützter Speicherausdruck:" +msgstr "nicht unterstützter Map-Ausdruck %qE" #: c/c-typeck.cc:15605 c/c-typeck.cc:15782 cp/semantics.cc:8367 #: cp/semantics.cc:8585 @@ -51000,16 +50910,14 @@ msgid "invalid type of %<__MEM%> operand" msgstr "Interner Fehler: invalid type of %<__MEM%> operand" #: c/gimple-parser.cc:1563 -#, fuzzy, gcc-internal-format -#| msgid "expected constant offset" +#, gcc-internal-format msgid "expected constant offset for %<__MEM%> operand" -msgstr "konstanter Offset erwartet" +msgstr "Interner Fehler: expected constant offset for %<__MEM%> operand" #: c/gimple-parser.cc:1574 -#, fuzzy, gcc-internal-format -#| msgid "invalid type of %<__MEM%> operand" +#, gcc-internal-format msgid "expected constant step for %<__MEM%> operand" -msgstr "Interner Fehler: invalid type of %<__MEM%> operand" +msgstr "Interner Fehler: expected constant step for %<__MEM%> operand" #: c/gimple-parser.cc:1627 #, gcc-internal-format @@ -51147,10 +51055,9 @@ msgstr "%s%#qD (in der Nähe der Übereinstimmung)" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93880 #: cp/call.cc:3954 -#, fuzzy, gcc-internal-format -#| msgid "%s%#qD (reversed)" +#, gcc-internal-format msgid "%s%#qD (ignored)" -msgstr "%s%#qD (umgekehrt)" +msgstr "%s%#qD (ignoriert)" #: cp/call.cc:3956 #, gcc-internal-format @@ -51212,7 +51119,7 @@ msgstr " ein geerbter Konstruktor ist kein Kandidat für Initialisierung aus ei #: cp/call.cc:4109 #, gcc-internal-format msgid "some candidates omitted; use %<-fdiagnostics-all-candidates%> to display them" -msgstr "" +msgstr "einige Kandidaten wurden ausgelassen; verwenden Sie %<-fdiagnostics-all-candidates%>, um sie anzuzeigen" #: cp/call.cc:4190 cp/call.cc:4735 #, gcc-internal-format @@ -51401,16 +51308,14 @@ msgid "enumerated mismatch in conditional expression: %qT vs %qT" msgstr "bedingter Ausdruck enthält unverträgliche Aufzählungswerte der Typen %qT und %qT" #: cp/call.cc:6263 -#, fuzzy, gcc-internal-format -#| msgid "conditional expression between enumeration type %qT and floating-point type %qT is deprecated" +#, gcc-internal-format msgid "conditional expression between enumeration type %qT and floating-point type %qT" -msgstr "Bedingungsausdruck zwischen Aufzählungstyp %qT und Gleitkommatyp %qT ist veraltet" +msgstr "Bedingungsausdruck zwischen Aufzählungstyp %qT und Gleitkommatyp %qT" #: cp/call.cc:6267 -#, fuzzy, gcc-internal-format -#| msgid "conditional expression between floating-point type %qT and enumeration type %qT is deprecated" +#, gcc-internal-format msgid "conditional expression between floating-point type %qT and enumeration type %qT" -msgstr "Bedingungsausdruck zwischen Gleitkommatyp %qT und Aufzählungstyp %qT ist veraltet" +msgstr "Bedingungsausdruck zwischen Gleitkommatyp %qT und Aufzählungstyp %qT" #: cp/call.cc:6271 #, gcc-internal-format @@ -51568,16 +51473,12 @@ msgid "converting to %qH from %qI requires direct-initialization" msgstr "Umwandlung von %qH nach %qI erfordert direkte Initialisierung" #: cp/call.cc:8447 -#, fuzzy -#| msgid "converting to %qH from %qI with greater conversion rank" msgid "ISO C++ does not allow converting to %qH from %qI with greater conversion rank" -msgstr "Umwandlung nach %qH von %qI mit größerem Konvertierungsrang" +msgstr "ISO C++ erlaubt keine Konvertierung in %qH von %qI mit größerem Konvertierungsrang" #: cp/call.cc:8455 -#, fuzzy -#| msgid "converting to %qH from %qI with unordered conversion ranks" msgid "ISO C++ does not allow converting to %qH from %qI with unordered conversion rank" -msgstr "Umwandlung nach %qH von %qI mit ungeordneten Konvertierungsrängen" +msgstr "ISO C++ erlaubt keine Konvertierung in %qH aus %qI mit ungeordnetem Konvertierungsrang" #: cp/call.cc:8471 msgid "invalid user-defined conversion from %qH to %qI" @@ -51684,7 +51585,7 @@ msgstr "Verwendung einer multiversionierten Funktion ohne Standardargument" #: cp/call.cc:10002 #, gcc-internal-format msgid "use %<-fdiagnostics-all-candidates%> to display considered candidates" -msgstr "" +msgstr "verwenden Sie %<-fdiagnostics-all-candidates%>, um die in Frage kommenden Kandidaten anzuzeigen" #: cp/call.cc:10125 #, gcc-internal-format @@ -51980,7 +51881,7 @@ msgstr "das temporäre Objekt wurde am Ende des vollständigen Ausdrucks %qE zer #: cp/call.cc:14550 #, gcc-internal-format msgid "explicit conversion function was not considered" -msgstr "" +msgstr "explizite Umwandlungsfunktion wurde nicht berücksichtigt" #: cp/class.cc:322 #, gcc-internal-format @@ -52272,7 +52173,7 @@ msgstr "das Zeigerelement %q+D wurde hier deklariert" #: cp/class.cc:4316 #, gcc-internal-format msgid "layout of %qs member of type %qT changes in %qs" -msgstr "" +msgstr "das Layout des Members %qs vom Typ %qT ändert sich in %qs" #: cp/class.cc:4709 #, gcc-internal-format @@ -52505,16 +52406,14 @@ msgid "converting overloaded function %qD to type %q#T is ambiguous" msgstr "Umwandung der überladenen Funktion %qD in den Typ %q#T ist mehrdeutig" #: cp/class.cc:8979 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say %<&%T::%D%>" +#, gcc-internal-format msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to explicit object member function." -msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer nicht qualifizierten oder geklammerten nicht-statischen Elementfunktion, um einen Zeiger auf Elementfunktion zu erzeugen. Stattdessen %<&%T::%D%> verwenden" +msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer nicht qualifizierten oder geklammerten nicht-statischen Elementfunktion, um einen Zeiger auf Elementfunktion zu erzeugen." #: cp/class.cc:8984 -#, fuzzy, gcc-internal-format -#| msgid "(a pointer to member can only be formed with %<&%E%>)" +#, gcc-internal-format msgid "a pointer to explicit object member function can only be formed with %<&%E%>" -msgstr "(ein Zeiger auf ein Element kann nur mit %<»&%E%> erzeugt werden)" +msgstr "ein Zeiger auf eine explizite Objekt-Member-Funktion kann nur mit %<&%E%> gebildet werden" #: cp/class.cc:8994 #, gcc-internal-format @@ -52621,7 +52520,7 @@ msgstr "%qD ist nicht als %<constexpr%>-Funktion verwendbar, denn:" #: cp/constexpr.cc:1320 cp/constexpr.cc:6349 #, gcc-internal-format msgid "destroying %qE outside its lifetime" -msgstr "" +msgstr "%qE wird außerhalb seiner Lebensdauer zerstört" #: cp/constexpr.cc:1611 cp/constexpr.cc:3308 #: rust/backend/rust-constexpr.cc:3326 rust/backend/rust-constexpr.cc:3589 @@ -52773,21 +52672,19 @@ msgid "%<constexpr%> evaluation depth exceeds maximum of %d (use %<-fconstexpr-d msgstr "Auswertungstiefe von %<constexpr%> überschreitet Höchstwert %d (%<-fconstexpr-depth=%> verwenden, um dies zu erhöhen)" #: cp/constexpr.cc:3538 -#, fuzzy, gcc-internal-format -#| msgid "expression %qE is not a constant expression" +#, gcc-internal-format msgid "reference to %qD is not a constant expression" -msgstr "Ausdruck %qE ist kein Konstantenausdruck" +msgstr "Referenz auf %qD ist kein Konstantenausdruck" #: cp/constexpr.cc:3541 -#, fuzzy, gcc-internal-format -#| msgid "%qE is not a constant expression" +#, gcc-internal-format msgid "pointer to %qD is not a constant expression" -msgstr "%qE ist kein Konstantenausdruck" +msgstr "Zeiger auf %qD ist kein Konstantenausdruck" #: cp/constexpr.cc:3547 #, gcc-internal-format msgid "address of non-static constexpr variable %qD may differ on each invocation of the enclosing function; add %<static%> to give it a constant address" -msgstr "" +msgstr "die Adresse der nicht-statischen constexpr-Variablen %qD kann sich bei jedem Aufruf der umschließenden Funktion ändern; fügen Sie %<static%> hinzu, um ihr eine konstante Adresse zu geben" #: cp/constexpr.cc:3623 #, gcc-internal-format @@ -52963,10 +52860,9 @@ msgid "allocated here" msgstr "wurde hier deklariert" #: cp/constexpr.cc:5981 -#, fuzzy, gcc-internal-format -#| msgid "Access terminates outside of its parent" +#, gcc-internal-format msgid "accessing %qE outside its lifetime" -msgstr "Zugriff endet außerhalb des Elternteils" +msgstr "Zugriff auf %qE außerhalb seiner Lebensdauer" #: cp/constexpr.cc:6001 #, gcc-internal-format @@ -53009,44 +52905,39 @@ msgid "%qD does not have integral or enumeration type" msgstr "%qD hat keinen Ganzzahl- oder Aufzählungstyp" #: cp/constexpr.cc:6342 -#, fuzzy, gcc-internal-format -#| msgid "use of allocated storage after deallocation in a constant expression" +#, gcc-internal-format msgid "modification of allocated storage after deallocation is not a constant expression" -msgstr "angeforderter Speicher wird in konstantem Ausdruck verwendet, nachdem er wieder freigegeben wurde" +msgstr "die Änderung des zugewiesenen Speichers nach der Freigabe ist kein konstanter Ausdruck" #: cp/constexpr.cc:6351 -#, fuzzy, gcc-internal-format -#| msgid "modification of %qE is not a constant expression" +#, gcc-internal-format msgid "modification of %qE outside its lifetime is not a constant expression" -msgstr "Modifikation von %qE ist kein konstanter Ausdruck" +msgstr "Modifikation von %qE außerhalb seiner Lebenszeit ist kein konstanter Ausdruck" #: cp/constexpr.cc:6358 -#, fuzzy, gcc-internal-format -#| msgid "%<reinterpret_cast%> is not a constant expression" +#, gcc-internal-format msgid "destroying %qE from outside current evaluation is not a constant expression" -msgstr "Ein %<reinterpret_cast%> ist kein konstanter Ausdruck" +msgstr "das Zerstören von %qE außerhalb der aktuellen Auswertung ist kein konstanter Ausdruck" #: cp/constexpr.cc:6361 -#, fuzzy, gcc-internal-format -#| msgid "modification of %qE is not a constant expression" +#, gcc-internal-format msgid "modification of %qE from outside current evaluation is not a constant expression" -msgstr "Modifikation von %qE ist kein konstanter Ausdruck" +msgstr "Modifikation von %qE von außerhalb der aktuellen Auswertung ist kein konstanter Ausdruck" #: cp/constexpr.cc:6488 -#, fuzzy, gcc-internal-format -#| msgid "change of the active member of a union from %qD to %qD during initialization" +#, gcc-internal-format msgid "change of the active member of a union from %qD to %qD is not a constant expression before C++20" -msgstr "Änderung des aktiven Elements einer union von %qD zu %qD während der Initialisierung" +msgstr "Änderung des aktiven Elements einer union von %qD zu %qD ist vor C++20 kein konstanter Ausdruck" #: cp/constexpr.cc:6517 #, gcc-internal-format msgid "%qD does not implicitly begin its lifetime because %qT does not have a non-deleted trivial default constructor, use %<std::construct_at%> instead" -msgstr "" +msgstr "%qD beginnt seine Lebensdauer nicht implizit, da %qT keinen nicht gelöschten trivialen Standardkonstruktor hat; verwenden Sie stattdessen %<std::construct_at%>" #: cp/constexpr.cc:6524 #, gcc-internal-format msgid "initializing %qD requires a member access expression as the left operand of the assignment" -msgstr "" +msgstr "die Initialisierung von %qD erfordert einen Ausdruck für den Memberzugriff als linken Operanden der Zuweisung" #: cp/constexpr.cc:6536 rust/backend/rust-constexpr.cc:2822 #, gcc-internal-format @@ -53136,28 +53027,24 @@ msgid "conversion from pointer type %qT to arithmetic type %qT in a constant exp msgstr "Umwandlung von Zeigertyp %qT in arithmetischen Typ %qT in Konstantenausdruck" #: cp/constexpr.cc:8153 -#, fuzzy, gcc-internal-format -#| msgid "%qE is not a constant expression because it refers to mutable subobjects of %qT" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression because pointed-to type %qT is not similar to %qT" -msgstr "%qE ist kein Konstantenausdruck, da er auf veränderliche Teilobjekte von %qT verweist" +msgstr "der Cast von %qT ist in einem konstanten Ausdruck nicht zulässig, da der Typ %qT, auf den gezeigt wird, %qT nicht ähnlich ist" #: cp/constexpr.cc:8160 -#, fuzzy, gcc-internal-format -#| msgid "pointer member %q+D declared here" +#, gcc-internal-format msgid "pointed-to object declared here" -msgstr "das Zeigerelement %q+D wurde hier deklariert" +msgstr "der Typ, auf den gezeigt wird, ist hier deklariert" #: cp/constexpr.cc:8165 -#, fuzzy, gcc-internal-format -#| msgid "%qs is not a constant expression because %qT is a pointer to member type" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression because %qE does not point to an object" -msgstr "%qs ist kein konstanter Ausdruck, da %qT ein Zeiger-auf-Element-Typ ist" +msgstr "der Cast von %qT ist in einem konstanten Ausdruck nicht zulässig, da %qE nicht auf ein Objekt zeigt" #: cp/constexpr.cc:8177 -#, fuzzy, gcc-internal-format -#| msgid "modifying a const object %qE is not allowed in a constant expression" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression before C++26" -msgstr "in einem konstanten Ausdruck ist es nicht erlaubt, das %<const%>-Objekt %qE zu verändern" +msgstr "der Cast von %qT ist in einem konstanten Ausdruck vor C++26 nicht erlaubt" #: cp/constexpr.cc:8191 #, gcc-internal-format @@ -53231,10 +53118,9 @@ msgid "immediate evaluation returns address of immediate function %qD" msgstr "unmittelbare Auswertung liefert die Adresse der unmittelbaren Funktion %qD" #: cp/constexpr.cc:8913 -#, fuzzy, gcc-internal-format -#| msgid "immediate evaluation returns address of immediate function %qD" +#, gcc-internal-format msgid "constant evaluation returns address of immediate function %qD" -msgstr "unmittelbare Auswertung liefert die Adresse der unmittelbaren Funktion %qD" +msgstr "Konstantenauswertung liefert Adresse der unmittelbaren Funktion %qD" #: cp/constexpr.cc:9551 rust/backend/rust-constexpr.cc:5667 #, gcc-internal-format @@ -53546,10 +53432,9 @@ msgid " %qT is not an aggregate" msgstr " %qT kein Aggregat ist" #: cp/constraint.cc:3755 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an aggregate" +#, gcc-internal-format msgid " %qT is not an array" -msgstr " %qT kein Aggregat ist" +msgstr " %qT kein Array ist" #: cp/constraint.cc:3758 #, gcc-internal-format @@ -53562,10 +53447,9 @@ msgid " %qT is not a base of %qT" msgstr " %qT keine Basis von %qT ist" #: cp/constraint.cc:3764 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an aggregate" +#, gcc-internal-format msgid " %qT is not a bounded array" -msgstr " %qT kein Aggregat ist" +msgstr " %qT kein begrenztes Array ist" #: cp/constraint.cc:3767 #, gcc-internal-format @@ -53603,10 +53487,9 @@ msgid " %qT is not a final class" msgstr " %qT keine finale Klasse ist" #: cp/constraint.cc:3788 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not a union" +#, gcc-internal-format msgid " %qT is not a function" -msgstr " %qT kein Vereinigungstyp ist" +msgstr " %qT keine Funktion ist" #: cp/constraint.cc:3791 #, gcc-internal-format @@ -53619,22 +53502,19 @@ msgid " %qT is not a literal type" msgstr " %qT kein literaler Typ ist" #: cp/constraint.cc:3797 -#, fuzzy, gcc-internal-format -#| msgid "%qD is not a member template function" +#, gcc-internal-format msgid " %qT is not a member function pointer" -msgstr "%qD ist keine Elementtemplatefunktion" +msgstr " %qT kein Member-Funktionszeiger ist" #: cp/constraint.cc:3800 -#, fuzzy, gcc-internal-format -#| msgid "%qT is not a member of %qT" +#, gcc-internal-format msgid " %qT is not a member object pointer" -msgstr "%qT ist kein Element von %qT" +msgstr " %qT kein Member-Objektzeiger ist" #: cp/constraint.cc:3803 -#, fuzzy, gcc-internal-format -#| msgid "%qT is not a member of %qT" +#, gcc-internal-format msgid " %qT is not a member pointer" -msgstr "%qT ist kein Element von %qT" +msgstr " %qT kein Member-Zeiger ist" #: cp/constraint.cc:3806 #, gcc-internal-format @@ -53652,10 +53532,9 @@ msgid " %qT is not nothrow convertible from %qE" msgstr " %qT kann nicht per %<nothrow%> von %qE umgewandelt werden" #: cp/constraint.cc:3818 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not a POD type" +#, gcc-internal-format msgid " %qT is not an object type" -msgstr " %qT kein POD-Typ ist" +msgstr " %qT kein Objekttyp ist" #: cp/constraint.cc:3821 #, gcc-internal-format @@ -53673,10 +53552,9 @@ msgid " %qT is not a polymorphic type" msgstr " %qT kein polymorpher Typ ist" #: cp/constraint.cc:3831 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an enum" +#, gcc-internal-format msgid " %qT is not a reference" -msgstr " %qT keine Aufzählung ist" +msgstr " %qT keine Referenz ist" #: cp/constraint.cc:3834 #, gcc-internal-format @@ -53684,10 +53562,9 @@ msgid " %qT is not the same as %qT" msgstr " %qT nicht derselbe Typ wie %qT ist" #: cp/constraint.cc:3837 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an enum" +#, gcc-internal-format msgid " %qT is not a scoped enum" -msgstr " %qT keine Aufzählung ist" +msgstr " %qT keine Aufzählung mit Gültigkeitsbereich ist" #: cp/constraint.cc:3840 #, gcc-internal-format @@ -54096,13 +53973,12 @@ msgstr "beide Zweige der %<if%>-Anweisung als %qs markiert" #: cp/cp-gimplify.cc:536 #, gcc-internal-format msgid "%qD was promoted to an immediate function because its body contains an immediate-escalating expression %qE" -msgstr "" +msgstr "%qD wurde in eine unmittelbare Funktion umgewandelt, da ihr Rumpf einen unmittelbar-eskalierenden Ausdruck %qE enthält" #: cp/cp-gimplify.cc:539 -#, fuzzy, gcc-internal-format -#| msgid "%qD is not a template function" +#, gcc-internal-format msgid "%qD was promoted to an immediate function" -msgstr "%qD ist keine Templatefunktion" +msgstr "%qD wurde zu einer unmittelbaren Funktion befördert" #: cp/cp-gimplify.cc:1164 #, gcc-internal-format @@ -54110,10 +53986,9 @@ msgid "taking address of an immediate function %qD" msgstr "Adresse der direkten Funktion %qD wird genommen" #: cp/cp-gimplify.cc:1263 -#, fuzzy, gcc-internal-format -#| msgid "address of a call to %qs is not a constant expression" +#, gcc-internal-format msgid "call to consteval function %qE is not a constant expression" -msgstr "Adresse des Aufrufs von %qs ist kein konstanter Ausdruck" +msgstr "Aufruf der consteval-Funktion %qE ist kein konstanter Ausdruck" #: cp/cp-gimplify.cc:2002 #, gcc-internal-format @@ -54738,51 +54613,44 @@ msgid "%q#D previously declared here" msgstr "%q#D wurde bereits hier deklariert" #: cp/decl.cc:2097 -#, fuzzy, gcc-internal-format -#| msgid "method declaration not in @interface context" +#, gcc-internal-format msgid "parameter declaration is not name-independent" -msgstr "Methodendeklaration nicht im @interface-Kontext" +msgstr "Parameterdeklaration ist nicht namensunabhängig" #: cp/decl.cc:2102 -#, fuzzy, gcc-internal-format -#| msgid "structured binding declaration set but not used" +#, gcc-internal-format msgid "structured binding at namespace scope is not name-independent" -msgstr "Deklaration für strukturierte Bindung festgelegt, aber nicht verwendet" +msgstr "die strukturierte Bindung im Namespace-Bereich ist nicht namenunabhängig" #: cp/decl.cc:2106 -#, fuzzy, gcc-internal-format -#| msgid "structured binding has incomplete type %qT" +#, gcc-internal-format msgid "static structured binding is not name-independent" -msgstr "Strukturierte Bindung hat unvollständigen Typen %qT" +msgstr "statische strukturierte Bindung ist nicht namenunabhängig" #: cp/decl.cc:2110 -#, fuzzy, gcc-internal-format -#| msgid "structured binding has incomplete type %qT" +#, gcc-internal-format msgid "extern structured binding is not name-independent" -msgstr "Strukturierte Bindung hat unvollständigen Typen %qT" +msgstr "extern strukturierte Bindung ist nicht namenunabhängig" #: cp/decl.cc:2117 -#, fuzzy, gcc-internal-format -#| msgid "static data member %qD in unnamed class" +#, gcc-internal-format msgid "static data member is not name-independent" -msgstr "statisches Datenelement %qD in unbenannter Klasse" +msgstr "statisches Datenelement ist nicht namenunabhängig" #: cp/decl.cc:2120 #, gcc-internal-format msgid "variable at namespace scope is not name-independent" -msgstr "" +msgstr "variable im Namensraumbereich ist nicht namenunabhängig" #: cp/decl.cc:2123 -#, fuzzy, gcc-internal-format -#| msgid "%qs variable is not a pointer" +#, gcc-internal-format msgid "static variable is not name-independent" -msgstr "Variable %qs muss ein Zeiger sein" +msgstr "statische Variable ist nicht namensunabhängig" #: cp/decl.cc:2126 -#, fuzzy, gcc-internal-format -#| msgid "environment variable %qs not defined" +#, gcc-internal-format msgid "extern variable is not name-independent" -msgstr "Umgebungsvariable %qs nicht definiert" +msgstr "externe Variable ist nicht namenunabhängig" #: cp/decl.cc:2138 #, gcc-internal-format @@ -54830,16 +54698,14 @@ msgid "import declared %q#D here" msgstr "der Import hat %q#D hier deklariert" #: cp/decl.cc:2306 cp/decl.cc:16628 -#, fuzzy, gcc-internal-format -#| msgid "conflicting exporting declaration %qD" +#, gcc-internal-format msgid "conflicting exporting for declaration %qD" -msgstr "in Konflikt stehende Export-Deklaration %qD" +msgstr "in Konflikt stehender Export für Deklaration %qD" #: cp/decl.cc:2308 cp/decl.cc:16630 -#, fuzzy, gcc-internal-format -#| msgid "previously declared here" +#, gcc-internal-format msgid "previously declared here without exporting" -msgstr "vorher hier deklariert" +msgstr "vorher hier ohne Export deklariert" #: cp/decl.cc:2335 #, gcc-internal-format @@ -54969,7 +54835,7 @@ msgstr "Sprung zur case-Marke" #: cp/decl.cc:3694 #, gcc-internal-format msgid " as a possible target of computed goto" -msgstr "" +msgstr " als ein mögliches Ziel des berechneten goto" #: cp/decl.cc:3696 #, gcc-internal-format @@ -55022,16 +54888,14 @@ msgid " enters %<consteval if%> statement" msgstr " betritt %<consteval if%>-Anweisung" #: cp/decl.cc:3829 cp/decl.cc:4003 -#, fuzzy, gcc-internal-format -#| msgid "ISO C99 does not support %qE" +#, gcc-internal-format msgid " does not destroy %qD" -msgstr "ISO-C99 unterstützt nicht %qE" +msgstr " zerstört %qD nicht" #: cp/decl.cc:3831 cp/decl.cc:3986 -#, fuzzy, gcc-internal-format -#| msgid "%s does not take any feature options" +#, gcc-internal-format msgid " does not clean up handled exception" -msgstr "%s akzeptiert keine Featureoptionen" +msgstr " bereinigt die behandelte Ausnahme nicht" #: cp/decl.cc:3922 #, gcc-internal-format @@ -55873,15 +55737,14 @@ msgid "constraints on a non-templated function" msgstr "Einschränkungen auf einer Funktion, die kein Template hat" #: cp/decl.cc:10590 -#, fuzzy, gcc-internal-format -#| msgid "friend declaration not in class definition" +#, gcc-internal-format msgid "constrained non-template friend declaration must be a definition" -msgstr "friend-Deklaration nicht in Klassendefinition" +msgstr "eingeschränkte Nicht-Template-friend-Deklaration muss eine Definition sein" #: cp/decl.cc:10597 #, gcc-internal-format msgid "friend function template with constraints that depend on outer template parameters must be a definition" -msgstr "" +msgstr "friend-Funktionstemplate mit Einschränkungen, die von äußeren Templateparametern abhängen, muss eine Definition sein" #: cp/decl.cc:10646 #, gcc-internal-format @@ -55939,10 +55802,9 @@ msgid "static member function %qD cannot have cv-qualifier" msgstr "statische Elementfunktion %qD kann nicht CV-Qualifizierer haben" #: cp/decl.cc:10818 -#, fuzzy, gcc-internal-format -#| msgid "static member function %qD cannot have cv-qualifier" +#, gcc-internal-format msgid "explicit object member function %qD cannot have cv-qualifier" -msgstr "statische Elementfunktion %qD kann nicht CV-Qualifizierer haben" +msgstr "explizite Objekt-Member-Funktion %qD kann keine CV-Qualifizierer haben" #: cp/decl.cc:10823 #, gcc-internal-format @@ -55955,16 +55817,14 @@ msgid "static member function %qD cannot have ref-qualifier" msgstr "statische Elementfunktion %qD kann keinen ref-Qualifizierer haben" #: cp/decl.cc:10826 -#, fuzzy, gcc-internal-format -#| msgid "static member function %qD cannot have ref-qualifier" +#, gcc-internal-format msgid "explicit object member function %qD cannot have ref-qualifier" -msgstr "statische Elementfunktion %qD kann keinen ref-Qualifizierer haben" +msgstr "explizite Objekt-Member-Funktion %qD kann keinen ref-qualifier haben" #: cp/decl.cc:10832 cp/decl.cc:13715 cp/decl.cc:13725 cp/parser.cc:11972 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "explicit object parameter declared here" -msgstr "Templateparameter %qD hier deklariert" +msgstr "expliziter Objektparameter wird hier deklariert" #: cp/decl.cc:10844 #, gcc-internal-format @@ -56549,50 +56409,44 @@ msgid "remove parentheses" msgstr "entfernen Sie die Klammern" #: cp/decl.cc:13345 -#, fuzzy, gcc-internal-format -#| msgid "alias template deduction only available with %<-std=c++20%> or %<-std=gnu++20%>" +#, gcc-internal-format msgid "explicit object member function only available with %<-std=c++23%> or %<-std=gnu++23%>" -msgstr "Alias-Template-Herleitung ist erst ab %<-std=c++20%> oder %<-std=gnu++20%> verfügbar" +msgstr "explizite Objekt-Member-Funktion ist erst ab %<-std=c++23%> oder %<-std=gnu++23%> verfügbar" #: cp/decl.cc:13359 -#, fuzzy, gcc-internal-format -#| msgid "Function %qs at %L cannot have an initializer" +#, gcc-internal-format msgid "a function type cannot have an explicit object parameter" -msgstr "Funktion %qs bei %L darf keinen Initialisierer haben" +msgstr "ein Funktionstyp kann keinen expliziten Objektparameter haben" #: cp/decl.cc:13365 -#, fuzzy, gcc-internal-format -#| msgid "a conversion function cannot have a trailing return type" +#, gcc-internal-format msgid "a pointer to function type cannot have an explicit object parameter" -msgstr "eine Umwandlungsfunktion darf keinen angehängten Rückgabetyp haben" +msgstr "ein Zeiger auf einen Funktionstyp kann keinen expliziten Objektparameter haben" #: cp/decl.cc:13369 -#, fuzzy, gcc-internal-format -#| msgid " member function type %qT is not a valid template argument" +#, gcc-internal-format msgid "a pointer to member function type cannot have an explicit object parameter" -msgstr " Typ %qT von Elementfunktion ist kein gültiges Templateargument" +msgstr "ein Zeiger auf einen Memberfunktionstyp kann keinen expliziten Objektparameter haben" #: cp/decl.cc:13377 #, gcc-internal-format msgid "the type of a pointer to explicit object member function is a regular pointer to function type" -msgstr "" +msgstr "der Typ eines Zeigers auf eine explizite Objekt-Member-Funktion ist ein normaler Funktionszeiger-Typ" #: cp/decl.cc:13381 -#, fuzzy, gcc-internal-format -#| msgid "typedef may not be a member function definition" +#, gcc-internal-format msgid "the type of an explicit object member function is a regular function type" -msgstr "mit %<typedef%> definierte Elementfunktion darf keinen Rumpf %<{ … }%> haben" +msgstr "der Typ einer expliziten Objekt-Member-Funktion ist ein normaler Funktionstyp" #: cp/decl.cc:13402 #, gcc-internal-format msgid "only the first parameter of a member function can be declared as an explicit object parameter" -msgstr "" +msgstr "nur der erste Parameter einer Memberfunktion kann als expliziter Objektparameter deklariert werden" #: cp/decl.cc:13407 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "valid explicit object parameter declared here" -msgstr "Templateparameter %qD hier deklariert" +msgstr "gültiger expliziter Objektparameter wird hier deklariert" #: cp/decl.cc:13411 #, gcc-internal-format @@ -56740,22 +56594,19 @@ msgid "friend function definition %qs cannot have a name qualified with %<%D::%> msgstr "Definition der Freundfunktion %qs kann keinen Namen haben, der mit %<%D::%> qualifiziert ist" #: cp/decl.cc:13704 -#, fuzzy, gcc-internal-format -#| msgid "non-member function %qD cannot have cv-qualifier" +#, gcc-internal-format msgid "a non-member function cannot have an explicit object parameter" -msgstr "Nicht-Elementfunktion %qD kann nicht CV-Qualifizierer haben" +msgstr "eine Funktion, die kein Member ist, kann keinen expliziten Objektparameter haben" #: cp/decl.cc:13712 -#, fuzzy, gcc-internal-format -#| msgid "implicit templates may not be %<virtual%>" +#, gcc-internal-format msgid "an explicit object member function cannot be %<virtual%>" -msgstr "Implizite Templates dürfen nicht %<virtual%> sein" +msgstr "eine explizite Objekt-Member-Funktion kann nicht %<virtual%> sein" #: cp/decl.cc:13722 -#, fuzzy, gcc-internal-format -#| msgid "structured binding declaration cannot be %<static%>" +#, gcc-internal-format msgid "an explicit object member function cannot be %<static%>" -msgstr "Deklaration für strukturierte Bindung darf nicht als %<static%> deklariert werden" +msgstr "eine explizite Objekt-Member-Funktion kann nicht %<static%> sein" #: cp/decl.cc:13748 #, gcc-internal-format @@ -57139,10 +56990,9 @@ msgid "storage class %<thread_local%> invalid for function %qs" msgstr "Speicherklasse %<thread_local%> ungültig für Funktion %qs" #: cp/decl.cc:15015 -#, fuzzy, gcc-internal-format -#| msgid "alignment specified for function %qE" +#, gcc-internal-format msgid "%<constinit%> specifier invalid for function %qs" -msgstr "Ausrichtung für Funktion %qE angegeben" +msgstr "%<constinit%>-Angabe ungültig für Funktion %qs" #: cp/decl.cc:15018 #, gcc-internal-format @@ -57520,8 +57370,7 @@ msgid "duplicate base type %qT invalid" msgstr "doppelter Basistyp %qT ungültig" #: cp/decl.cc:16969 -#, fuzzy, gcc-internal-format -#| msgid "cannot declare %qD in a different module" +#, gcc-internal-format msgid "cannot declare %qD in different module" msgstr "%qD kann nicht in einem anderen Modul deklariert sein" @@ -59449,10 +59298,9 @@ msgid "unknown header kind %qs" msgstr "unbekannte Header-Art %qs" #: cp/name-lookup.cc:2856 cp/name-lookup.cc:3932 cp/name-lookup.cc:4029 -#, fuzzy, gcc-internal-format -#| msgid "alias template deduction only available with %<-std=c++20%> or %<-std=gnu++20%>" +#, gcc-internal-format msgid "name-independent declarations only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "Alias-Template-Herleitung ist erst ab %<-std=c++20%> oder %<-std=gnu++20%> verfügbar" +msgstr "namensunabhängige Deklarationen sind erst ab %<-std=c++2c%> oder %<-std=gnu++2c%> verfügbar" #: cp/name-lookup.cc:2887 #, gcc-internal-format @@ -59510,28 +59358,24 @@ msgid "%s %s %p %d" msgstr "%s %s %p %d" #: cp/name-lookup.cc:5101 -#, fuzzy, gcc-internal-format -#| msgid "%q#D does not have external linkage" +#, gcc-internal-format msgid "exporting %q#D that does not have external linkage" -msgstr "%q#D hat keine externe Bindung" +msgstr "%q#D wird exportiert, hat jedoch keine externe Bindung" #: cp/name-lookup.cc:5106 -#, fuzzy, gcc-internal-format -#| msgid "%q#D declared here" +#, gcc-internal-format msgid "%q#D declared here with no linkage" -msgstr "%q#D hier deklariert" +msgstr "%q#D wird hier ohne Bindung deklariert" #: cp/name-lookup.cc:5109 -#, fuzzy, gcc-internal-format -#| msgid "%q#D does not have external linkage" +#, gcc-internal-format msgid "%q#D declared here with internal linkage" -msgstr "%q#D hat keine externe Bindung" +msgstr "%q#D wird hier mit interner Bindung deklariert" #: cp/name-lookup.cc:5112 -#, fuzzy, gcc-internal-format -#| msgid "%q#D declared here" +#, gcc-internal-format msgid "%q#D declared here with module linkage" -msgstr "%q#D hier deklariert" +msgstr "%q#D wird hier mit Modulbindung deklariert" #: cp/name-lookup.cc:5877 #, gcc-internal-format @@ -59656,10 +59500,9 @@ msgid " %qE" msgstr " %qE" #: cp/name-lookup.cc:7085 -#, fuzzy, gcc-internal-format -#| msgid "%<std::%s%> is defined in header %qs; did you forget to %<#include %s%>?" +#, gcc-internal-format msgid "%<std::%s%> is defined in header %qs; this is probably fixable by adding %<#include %s%>" -msgstr "%<std::%s%> ist im Header %qs definiert; haben Sie vergessen, %<#include %s%> zu schreiben?" +msgstr "%<std::%s%> ist im Header %qs definiert; um das zu beheben, könnten Sie %<#include %s%> hinzufügen" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79869 #: cp/name-lookup.cc:7091 @@ -60241,16 +60084,14 @@ msgid "%<~auto%> only available with %<-std=c++14%> or %<-std=gnu++14%>" msgstr "%<~auto%> ist nur mit %<-std=c++14%> oder %<-std=gnu++14%> verfügbar" #: cp/parser.cc:6729 cp/parser.cc:6733 -#, fuzzy, gcc-internal-format -#| msgid "template-id not allowed for destructor" +#, gcc-internal-format msgid "template-id not allowed for destructor in C++20" -msgstr "Template-ID ist für Destruktor nicht erlaubt" +msgstr "template-id für Destruktor ist in C++20 nicht erlaubt" #: cp/parser.cc:6735 cp/parser.cc:32577 -#, fuzzy, gcc-internal-format -#| msgid "remove parentheses" +#, gcc-internal-format msgid "remove the %qs" -msgstr "entfernen Sie die Klammern" +msgstr "entfernen Sie %qs" #: cp/parser.cc:6843 #, gcc-internal-format @@ -60343,15 +60184,14 @@ msgid "two consecutive %<[%> shall only introduce an attribute" msgstr "zwei aufeinander folgende %<[%> dürfen nur ein Attribut einführen" #: cp/parser.cc:8017 -#, fuzzy, gcc-internal-format -#| msgid "types may not be defined within %<__builtin_offsetof%>" +#, gcc-internal-format msgid "types may not be defined in %<__builtin_classify_type%> calls" -msgstr "Typen dürfen nicht innerhalb von %<__builtin_offsetof%> definiert werden" +msgstr "Typen dürfen nicht innerhalb von %<__builtin_classify_type%>-Aufrufen definiert werden" #: cp/parser.cc:8400 cp/parser.cc:8429 #, gcc-internal-format msgid "cannot use multidimensional subscript in OpenMP array section" -msgstr "" +msgstr "in einem OpenMP-Arrayabschnitt können keine mehrdimensionalen Arrayindizes verwendet werden" #: cp/parser.cc:8687 cp/typeck.cc:3052 #, gcc-internal-format @@ -60456,7 +60296,7 @@ msgstr "Typen dürfen nicht innerhalb von %<__builtin_offsetof%> definiert werde #: cp/parser.cc:11229 #, gcc-internal-format msgid "trailing argument to %<__type_pack_element%> is not a type" -msgstr "" +msgstr "das letzte Argument von %<__type_pack_element%> ist kein Typ" #: cp/parser.cc:11329 #, gcc-internal-format @@ -60572,34 +60412,32 @@ msgstr "Parameterdeklaration vor Lambdadeklarationsangaben ist erst ab %<-std=c+ #: cp/parser.cc:11932 cp/pt.cc:14718 #, gcc-internal-format msgid "a lambda with captures may not have an explicit object parameter of an unrelated type" -msgstr "" +msgstr "ein Lambda mit Captures darf keinen expliziten Objektparameter eines nicht verwandten Typs haben" #: cp/parser.cc:11945 -#, fuzzy, gcc-internal-format -#| msgid "%<static%> lambda specifier with lambda capture" +#, gcc-internal-format msgid "%<mutable%> lambda specifier with explicit object parameter" -msgstr "Lambda-Spezifizierer %<static%> mit Lambda-Fang" +msgstr "%<mutable%>-Lambdaangabe mit explizitem Objektparameter" #: cp/parser.cc:11954 #, gcc-internal-format msgid "the passed in closure object will not be mutated because it is taken by value" -msgstr "" +msgstr "das hereingereichte Closureobjekt wird nicht verändert, da es als Wert übernommen wird" #: cp/parser.cc:11958 #, gcc-internal-format msgid "declare the explicit object parameter as non-const reference instead" -msgstr "" +msgstr "deklarieren Sie den expliziten Objektparameter stattdessen als Nicht-const-Referenz" #: cp/parser.cc:11962 #, gcc-internal-format msgid "explicit object parameter is already a mutable reference" -msgstr "" +msgstr "der explizite Objektparameter ist bereits eine veränderbare Referenz" #: cp/parser.cc:11969 -#, fuzzy, gcc-internal-format -#| msgid "%<static%> lambda specifier with lambda capture" +#, gcc-internal-format msgid "%<static%> lambda specifier with explicit object parameter" -msgstr "Lambda-Spezifizierer %<static%> mit Lambda-Fang" +msgstr "Lambda-Spezifizierer %<static%> mit explizitem Objektparameter" #: cp/parser.cc:11987 #, gcc-internal-format @@ -60791,10 +60629,9 @@ msgid "expected jump-statement" msgstr "Sprunganweisung erwartet" #: cp/parser.cc:15090 -#, fuzzy, gcc-internal-format -#| msgid "expected module-name" +#, gcc-internal-format msgid "expected module-partition" -msgstr "Modulname erwartet" +msgstr "module-partition erwartet" #: cp/parser.cc:15092 #, gcc-internal-format @@ -60840,7 +60677,7 @@ msgstr "Import-Deklaration muss im globalen Gültigkeitsbereich sein" #: cp/parser.cc:15241 #, gcc-internal-format msgid "import specifying a module-partition must appear after a named module-declaration" -msgstr "" +msgstr "ein Import, der eine Modulpartition angibt, muss nach einer benannten Moduldeklaration erscheinen" #: cp/parser.cc:15253 #, gcc-internal-format @@ -60938,10 +60775,9 @@ msgid "invalid initializer for structured binding declaration" msgstr "ungültige Initialisierung für strukturierte Bindungsdeklaration" #: cp/parser.cc:16371 -#, fuzzy, gcc-internal-format -#| msgid "storage class specifiers invalid in parameter declarations" +#, gcc-internal-format msgid "%<this%> must be the first specifier in a parameter declaration" -msgstr "Speicherklassenangaben sind in Parameterdeklarationen ungültig" +msgstr "%<this%> muss der erste Spezifizierer in einer Parameterdeklaration sein" #: cp/parser.cc:16394 #, gcc-internal-format @@ -65635,10 +65471,9 @@ msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer nicht qualifizierten oder geklammerten nicht-statischen Elementfunktion, um einen Zeiger auf Elementfunktion zu erzeugen. Stattdessen %<&%T::%D%> verwenden" #: cp/typeck.cc:7154 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say %<&%T::%D%>" +#, gcc-internal-format msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to explicit object member function" -msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer nicht qualifizierten oder geklammerten nicht-statischen Elementfunktion, um einen Zeiger auf Elementfunktion zu erzeugen. Stattdessen %<&%T::%D%> verwenden" +msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer nicht qualifizierten oder geklammerten nicht-statischen Memberfunktion, um einen Zeiger auf eine explizite Memberfunktion zu erzeugen" #: cp/typeck.cc:7160 #, gcc-internal-format @@ -65646,10 +65481,9 @@ msgid "ISO C++ forbids taking the address of a bound member function to form a p msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer gebundenen Elementfunktion, um einen Zeiger auf Elementfunktion zu erzeugen. Stattdessen %<&%T::%D%> verwenden" #: cp/typeck.cc:7166 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say %<&%T::%D%>" +#, gcc-internal-format msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to explicit object member function" -msgstr "ISO-C++ verbietet das Ermitteln der Adresse einer gebundenen Elementfunktion, um einen Zeiger auf Elementfunktion zu erzeugen. Stattdessen %<&%T::%D%> verwenden" +msgstr "ISO-C++ verbietet es, die Adresse einer gebundenen Memberfunktion zu nehmen, um einen Zeiger auf eine explizite Objekt-Memberfunktion zu bilden" #: cp/typeck.cc:7171 #, gcc-internal-format @@ -66094,15 +65928,14 @@ msgid "%<operator new%> must not return NULL unless it is declared %<throw()%> ( msgstr "%<operator new%> darf nicht NULL zurückgeben, außer er ist mit %<throw%> deklariert (oder %<-fcheck-new%> ist eingeschaltet)" #: cp/typeck.cc:11299 -#, fuzzy, gcc-internal-format -#| msgid "invalid covariant return type for %q#D" +#, gcc-internal-format msgid "not eliding copy on return from %qD" -msgstr "ungültiger kovarianter Rückgabetyp für %q#D" +msgstr "bei der Rückkehr von %qD wird das Kopieren nicht eingespart" #: cp/typeck.cc:11311 #, gcc-internal-format msgid "not eliding copy on return in %qD" -msgstr "" +msgstr "bei der Rückkehr in %qD wird das Kopieren nicht eingespart" #: cp/typeck.cc:11898 #, gcc-internal-format @@ -66643,28 +66476,24 @@ msgid "bad argument for %<-fversion%>: %qs" msgstr "falsches Argument für %<-fversion%>: %qs" #: d/d-lang.cc:968 -#, fuzzy, gcc-internal-format -#| msgid "error: unable to open '%s' for writing: %s\n" +#, gcc-internal-format msgid "unable to open %s for writing: %m" -msgstr "Fehler: »%s« kann nicht zum Schreiben geöffnet werden: %s\n" +msgstr "»%s« kann nicht zum Schreiben geöffnet werden: %m" #: d/d-lang.cc:975 -#, fuzzy, gcc-internal-format -#| msgid "opening output file %s: %m" +#, gcc-internal-format msgid "writing output file %s: %m" -msgstr "Ausgabedatei »%s« kann nicht geöffnet werden: %m" +msgstr "beim Schreiben in »%s«: %m" #: d/d-lang.cc:995 -#, fuzzy, gcc-internal-format -#| msgid "error: unable to open '%s' for writing: %s\n" +#, gcc-internal-format msgid "unable to open %s for reading: %m" -msgstr "Fehler: »%s« kann nicht zum Schreiben geöffnet werden: %s\n" +msgstr "»%s« kann nicht zum Lesen geöffnet werden: %m" #: d/d-lang.cc:1020 -#, fuzzy, gcc-internal-format -#| msgid "opening json file %s: %m" +#, gcc-internal-format msgid "reading ddoc file %s: %m" -msgstr "Fehler beim Öffnen der JSON-Datei %s: %m" +msgstr "beim Lesen der ddoc-Datei »%s«: %m" #: d/d-lang.cc:1079 #, gcc-internal-format @@ -66743,16 +66572,14 @@ msgid "cannot handle comparison of type %<%s == %s%>" msgstr "Vergleich vom Typ %<%s == %s%> kann nicht verarbeitet werden" #: d/expr.cc:717 -#, fuzzy, gcc-internal-format -#| msgid "expression %qs requires %<object.TypeInfo%> and cannot be used with %<-fno-rtti%>" +#, gcc-internal-format msgid "array concatenation of expression %qs requires the GC and cannot be used with %<-fno-druntime%>" -msgstr "Ausdruck %qs erfordert %<object.TypeInfo%> und kann nicht mit %<-fno-rtti%> verwendet werden" +msgstr "die Array-Verkettung des Ausdrucks %qs erfordert den GC und kann nicht mit %<-fno-druntime%> verwendet werden" #: d/expr.cc:811 -#, fuzzy, gcc-internal-format -#| msgid "expression %qs requires %<object.TypeInfo%> and cannot be used with %<-fno-rtti%>" +#, gcc-internal-format msgid "appending to array in %qs requires the GC and cannot be used with %<-fno-druntime%>" -msgstr "Ausdruck %qs erfordert %<object.TypeInfo%> und kann nicht mit %<-fno-rtti%> verwendet werden" +msgstr "das Anhängen an ein Array in %qs erfordert den GC und kann nicht mit %<-fno-druntime%> verwendet werden" #. Static arrays have already been handled by the front-end. #: d/expr.cc:1285 @@ -66837,10 +66664,9 @@ msgstr "Unstimmigkeit in Aufruf der eingebauten Funktion %qD" #. It's a D language intrinsic with no library implementation. #: d/intrinsics.cc:1479 -#, fuzzy, gcc-internal-format -#| msgid "built-in function %qE must be directly called" +#, gcc-internal-format msgid "intrinsic function %qE must be directly called" -msgstr "eingebaute Funktion %qE muss direkt aufgerufen werden" +msgstr "intrinsische Funktion %qE muss direkt aufgerufen werden" #: d/modules.cc:417 #, gcc-internal-format @@ -66850,7 +66676,7 @@ msgstr "%<-fmoduleinfo%> wird von diesem Ziel nicht unterstützt" #: d/toir.cc:245 #, gcc-internal-format msgid "calling %qE without side effects discards return value of type %qT; prepend a %<cast(void)%> if intentional" -msgstr "" +msgstr "Aufruf von %qE ohne Nebenwirkungen verwirft Rückgabewert vom Typ %qT; falls der Aufruf beabsichtigt ist, stellen Sie ein %<cast(void)%> voran" #: d/toir.cc:419 d/toir.cc:444 #, gcc-internal-format @@ -67416,10 +67242,9 @@ msgid "Array constructor value at %L shall not be unlimited polymorphic [F2008: msgstr "Wert für Feldkonstruktor bei %L darf nicht unbegrenzt polymorph sein [F2008: C4106]" #: fortran/array.cc:2215 -#, fuzzy, gcc-internal-format -#| msgid "Different CHARACTER lengths (%ld/%ld) in array constructor at %L" +#, gcc-internal-format msgid "Different CHARACTER lengths (%wd/%wd) in array constructor at %L" -msgstr "Unterschiedliche CHARACTER-Längen (%ld, %ld) in Feldkonstruktor bei %L" +msgstr "Unterschiedliche CHARACTER-Längen (%wd/%wd) in Feldkonstruktor bei %L" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79596 #: fortran/array.cc:2333 @@ -67650,10 +67475,9 @@ msgid "Unequal character lengths (%ld/%ld) in %s at %L" msgstr "Ungleiche Zeichenlängen (%ld, %ld) in %s bei %L" #: fortran/check.cc:1269 -#, fuzzy, gcc-internal-format -#| msgid "Size of %qs argument of %qs intrinsic at %L too small (%i/%i)" +#, gcc-internal-format msgid "Size of %qs argument of %qs intrinsic at %L too small (%wd/%ld)" -msgstr "Größe des Arguments %qs des intrinsischen %qs bei %L ist zu klein (%i/%i)" +msgstr "Größe des Arguments %qs des intrinsischen %qs bei %L ist zu klein (%wd/%ld)" #: fortran/check.cc:1332 #, gcc-internal-format, gfc-internal-format @@ -68463,10 +68287,8 @@ msgid "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be %s" msgstr "Argument %<MOLD%> des intrinsischen %<TRANSFER%> bei %L darf nicht %s sein" #: fortran/check.cc:6300 -#, fuzzy -#| msgid "Intrinsic TRANSFER at %L has partly undefined result: source size %ld < result size %ld" msgid "Intrinsic TRANSFER at %L has partly undefined result: source size %zd < result size %zd" -msgstr "Intrinsisches TRANSFER bei %L hat teilweise undefiniertes Ergebnis: Quellgröße %ld < Ergebnisgröße %ld" +msgstr "Intrinsisches TRANSFER bei %L hat teilweise undefiniertes Ergebnis: Quellgröße %zd < Ergebnisgröße %zd" #: fortran/check.cc:6424 #, gcc-internal-format @@ -68479,16 +68301,14 @@ msgid "%qs and %qs arguments of %qs intrinsic at %L must have identical shape." msgstr "Argumente %qs und %qs des intrinsischen %qs bei %L müssen gleiche Form haben." #: fortran/check.cc:6573 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "VALUES argument of DATE_AND_TIME at %L has non-default kind" -msgstr "Das COUNT-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" +msgstr "Das VALUES-Argument für DATE_AND_TIME bei %L hat nicht-Standard-Art" #: fortran/check.cc:6585 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Argument of ATANH at %L must be inside the range -1 to 1" +#, gcc-internal-format, gfc-internal-format msgid "VALUES argument of DATE_AND_TIME at %L must have a decimal exponent range of at least four" -msgstr "Argument von ATANH bei %L muss im Bereich -1 bis 1 liegen" +msgstr "Das VALUES-Argument von DATE_AND_TIME bei %L muss einen dezimalen Exponentenbereich von mindestens 4 haben" #: fortran/check.cc:6724 fortran/check.cc:6756 #, gcc-internal-format @@ -68517,10 +68337,9 @@ msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "Das COUNT-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" #: fortran/check.cc:6843 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "COUNT argument to SYSTEM_CLOCK at %L with kind smaller than default integer" -msgstr "Das COUNT-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" +msgstr "Das COUNT-Argument für SYSTEM_CLOCK bei %L hat eine Ganzzahl, die kleiner als der Standard ist" #: fortran/check.cc:6864 #, gcc-internal-format, gfc-internal-format @@ -68533,10 +68352,9 @@ msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "Das COUNT_RATE-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" #: fortran/check.cc:6881 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L with kind smaller than default integer" -msgstr "Das COUNT_RATE-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" +msgstr "Das COUNT_RATE-Argument für SYSTEM_CLOCK bei %L hat eine Art, die kleiner als die Standard-Ganzzahl ist" #: fortran/check.cc:6901 #, gcc-internal-format, gfc-internal-format @@ -68544,16 +68362,14 @@ msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "Das COUNT_MAX-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" #: fortran/check.cc:6911 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L with kind smaller than default integer" -msgstr "Das COUNT_MAX-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" +msgstr "Das COUNT_MAX-Argument für SYSTEM_CLOCK bei %L hat eine Art, die kleiner als die Standard-Ganzzahl ist" #: fortran/check.cc:6926 fortran/check.cc:6933 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "integer arguments to SYSTEM_CLOCK at %L with different kind parameters" -msgstr "Das COUNT-Argument für SYSTEM_CLOCK bei %L hat nicht-Standard-Art" +msgstr "Ganzzahlige Argumente für SYSTEM_CLOCK bei %L mit Parametern unterschiedlicher Art" #: fortran/check.cc:7147 #, gcc-internal-format @@ -68603,21 +68419,19 @@ msgid "non-constant array in DATA statement %L" msgstr "Nichtkonstantes Feld in DATA-Anweisung %L" #: fortran/data.cc:78 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d" +#, gcc-internal-format, gfc-internal-format msgid "Subscript at %L below array lower bound (%ld < %ld) in dimension %d" -msgstr "Feldreferenz bei %L ist außerhalb der Schranken (%ld < %ld) in Dimension %d" +msgstr "Feldindex bei %L ist unterhalb der Schranke (%ld < %ld) in Dimension %d" #: fortran/data.cc:89 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d" +#, gcc-internal-format, gfc-internal-format msgid "Subscript at %L above array upper bound (%ld > %ld) in dimension %d" -msgstr "Untere Feldreferenz bei %L ist außerhalb der Schranken (%ld > %ld) in Dimension %d" +msgstr "Feldindex bei %L ist oberhalb der Schranke (%ld > %ld) in Dimension %d" #: fortran/data.cc:172 #, gcc-internal-format, gfc-internal-format msgid "failure to simplify substring reference in DATA statement at %L" -msgstr "Fehlschlag bei Vereinfachung der Teil-Zeichenketten-Referenz in DATA-Anweisung bei %L" +msgstr "Fehler bei Vereinfachung der Teil-Zeichenketten-Referenz in DATA-Anweisung bei %L" #: fortran/data.cc:205 #, gcc-internal-format, gfc-internal-format @@ -68625,10 +68439,9 @@ msgid "Unused initialization string at %L because variable has zero length" msgstr "Unbenutzte Initialisierungszeichenkette bei %L, da die Variable die Länge 0 hat" #: fortran/data.cc:211 -#, fuzzy, gcc-internal-format -#| msgid "Initialization string at %L was truncated to fit the variable (%ld/%ld)" +#, gcc-internal-format msgid "Initialization string at %L was truncated to fit the variable (%wd/%wd)" -msgstr "Initialisierungszeichenkette bei %L wurde abgeschnitten, um zur Variable zu passen (%ld/%ld)" +msgstr "Initialisierungszeichenkette bei %L wurde abgeschnitten, um zur Variable zu passen (%wd/%wd)" #: fortran/data.cc:220 fortran/resolve.cc:5287 #, gcc-internal-format, gfc-internal-format @@ -69729,15 +69542,14 @@ msgid "Duplicate symbol %qs in formal argument list at %C" msgstr "Doppeltes Symbol %qs in formaler Argumentliste bei %C" #: fortran/decl.cc:6805 -#, fuzzy, gcc-internal-format -#| msgid "Mismatch in MODULE PROCEDURE formal argument names (%s/%s) at %C" +#, gcc-internal-format msgid "MODULE PROCEDURE formal argument %qs conflicts with alternate return at %C" -msgstr "Konflikt in formalen Argumentnamen (%s/%s) von MODULE PROCEDURE bei %C" +msgstr "Formales Argument %qs für MODULE PROCEDURE widerspricht alternativer Rückgabe bei %C" #: fortran/decl.cc:6809 #, gcc-internal-format msgid "MODULE PROCEDURE formal argument is alternate return and conflicts with %qs in the separate declaration at %C" -msgstr "" +msgstr "Formales Argument für MODULE PROCEDURE ist alternative Rückgabe und widerspricht %qs in der separaten Deklaration bei %C" #: fortran/decl.cc:6814 #, gcc-internal-format, gfc-internal-format @@ -71359,10 +71171,9 @@ msgid "%qs at %L associated to expression cannot be used in a variable definitio msgstr "%qs ist bei %L mit Ausdruck verbunden und kann nicht in Variablen-Definitionskontext (%s) verwendet werden" #: fortran/expr.cc:6507 -#, fuzzy, gcc-internal-format -#| msgid "%qs at %L associated to expression cannot be used in a variable definition context (%s)" +#, gcc-internal-format msgid "%qs at %L associated to pointer function target being used in a variable definition context (%s)" -msgstr "%qs ist bei %L mit Ausdruck verbunden und kann nicht in Variablen-Definitionskontext (%s) verwendet werden" +msgstr "%qs bei %L ist mit einer Zeigerfunktion verbunden, die in einem Variablendefinitionskontext verwendet wird (%s)" #: fortran/expr.cc:6526 #, gcc-internal-format @@ -71888,10 +71699,9 @@ msgid "Actual argument at %L to assumed-type dummy has type parameters or is of msgstr "Argument bei %L für den angenommenen Typ des Dummys hat Typparameter oder hat einen abgeleiteten Typ mit typgebundenen oder FINAL-Prozeduren" #: fortran/interface.cc:3355 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Coindexed polymorphic actual argument at %L is passed polymorphic dummy argument %qs" +#, gcc-internal-format, gfc-internal-format msgid "Unlimited polymorphic actual argument at %L is not matched with either an unlimited polymorphic or assumed type dummy argument" -msgstr "Koindiziertem polymorphen effektiven Argument bei %L wird polymorphes Scheinargument %qs übergeben" +msgstr "Unbegrenztes polymorphes Argument bei %L passt weder zu einem unbegrenzt polymorphen oder einem Dummyargument mit angenommenem Typ" #: fortran/interface.cc:3379 #, gcc-internal-format @@ -71986,7 +71796,7 @@ msgstr "Effektives Argument für %qs muss ALLOCATABLE bei %L sein" #: fortran/interface.cc:3693 #, gcc-internal-format msgid "Actual argument for %qs at %L is a function result and the dummy argument is ALLOCATABLE" -msgstr "" +msgstr "Das tatsächliche Argument für %qs bei %L ist ein Funktionsergebnis und das Dummy-Argument ist ALLOCATABLE" #: fortran/interface.cc:3731 #, gcc-internal-format @@ -74028,10 +73838,9 @@ msgid "Symbol %qs in namelist %qs at %C must be declared before the namelist is msgstr "Symbol %qs in Namensliste %qs bei %C muss deklariert sein, bevor die Namensliste deklariert wird." #: fortran/match.cc:5652 -#, fuzzy, gcc-internal-format -#| msgid "Symbol %qs at %L conflicts with the symbol at %L" +#, gcc-internal-format msgid "Derived type %qs at %L conflicts with namelist object %qs at %C" -msgstr "Symbol %qs bei %L steht mit Symbol bei %L in Konflikt" +msgstr "Abgeleiteter Typ %qs bei %L widerspricht namelist-Objekt %qs bei %C" #: fortran/match.cc:5672 #, gcc-internal-format @@ -74581,7 +74390,7 @@ msgstr "Listenelement bei %C darf nicht koindiziert sein" #: fortran/openmp.cc:492 #, gcc-internal-format msgid "%qs at %L is part of the common block %</%s/%> and may only be specificed implicitly via the named common block" -msgstr "" +msgstr "%qs bei %L ist Teil des gemeinsamen Blocks %</%s/%> und kann nur implizit über den genannten gemeinsamen Block spezifiziert werden" #: fortran/openmp.cc:517 fortran/openmp.cc:618 fortran/openmp.cc:948 #: fortran/openmp.cc:6135 @@ -74697,13 +74506,12 @@ msgstr "%qs-Direktive wird sowohl in ABSENT- als auch CONTAINS-Klauseln in %s-Di #: fortran/openmp.cc:1745 #, gcc-internal-format, gfc-internal-format msgid "Duplicate %s modifier at %L in USES_ALLOCATORS clause" -msgstr "" +msgstr "Doppelter %s-Modifikator bei %L in der USES_ALLOCATORS-Klausel" #: fortran/openmp.cc:1779 -#, fuzzy, gcc-internal-format -#| msgid "expected %<(%> at %C" +#, gcc-internal-format msgid "Unexpected %<(%> at %C" -msgstr "%<(%> bei %C erwartet" +msgstr "Unerwartetes %<(%> bei %C" #: fortran/openmp.cc:1826 #, gcc-internal-format @@ -74752,16 +74560,14 @@ msgid "COLLAPSE clause argument not constant positive integer at %C" msgstr "Argument der COLLAPSE-Klausel ist keine konstante positive Ganzzahl bei %C" #: fortran/openmp.cc:2236 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, NONE or DEFAULT at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, PRESENT, NONE or DEFAULT at %C" -msgstr "Eins von ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, NONE oder DEFAULT bei %C erwartet" +msgstr "Eins von ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, PRESENT, NONE oder DEFAULT bei %C erwartet" #: fortran/openmp.cc:2258 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected SCALAR, AGGREGATE, ALLOCATABLE or POINTER at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected SCALAR, AGGREGATE, ALLOCATABLE, POINTER or ALL at %C" -msgstr "Eins von SCALAR, AGGREGATE, ALLOCATABLE oder POINTER bei %C erwartet" +msgstr "Eins von SCALAR, AGGREGATE, ALLOCATABLE, POINTER oder ALL bei %C erwartet" #: fortran/openmp.cc:2291 #, gcc-internal-format, gfc-internal-format @@ -74854,10 +74660,9 @@ msgid "Expected SEQ_CST, ACQUIRE or RELAXED at %C" msgstr "Eins von SEQ_CST, ACQUIRE oder RELAXED erwartet, bei %C" #: fortran/openmp.cc:2816 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "WAIT clause at %L requires a scalar INTEGER expression" +#, gcc-internal-format, gfc-internal-format msgid "INDIRECT clause at %C requires a constant logical expression" -msgstr "WAIT-Klausel bei %L erfordert einen skalaren INTEGER-Ausdruck" +msgstr "INDIRECT-Klausel bei %C erfordert einen konstanten logischen Ausdruck" #: fortran/openmp.cc:3003 #, gcc-internal-format @@ -74875,10 +74680,9 @@ msgid "too many %<close%> modifiers at %L" msgstr "zu viele %<close%>-Modifizierer bei %L" #: fortran/openmp.cc:3125 -#, fuzzy, gcc-internal-format -#| msgid "too many %<close%> modifiers at %L" +#, gcc-internal-format msgid "too many %<present%> modifiers at %L" -msgstr "zu viele %<close%>-Modifizierer bei %L" +msgstr "zu viele %<present%>-Modifizierer bei %L" #: fortran/openmp.cc:3316 #, gcc-internal-format @@ -74986,22 +74790,19 @@ msgid "!$ACC ROUTINE with GANG, WORKER, or VECTOR clause is not permitted in PUR msgstr "!$ACC ROUTINE mit GANG, WORKER oder VECTOR-Klausel ist in PURE-Prozedur bei %C nicht erlaubt" #: fortran/openmp.cc:4568 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected COMPILATION or EXECUTION in AT clause at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected ALIGN or ALLOCATOR clause at %C" -msgstr "Entweder COMPILATION oder EXECUTION erwartet in AT-Klausel bei %C" +msgstr "ALIGN- oder ALLOCATOR-Klausel bei %C erwartet" #: fortran/openmp.cc:4576 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Sorry, %qs clause at %L on REQUIRES directive is not yet supported" +#, gcc-internal-format, gfc-internal-format msgid "Sorry, structure-element list item at %L in ALLOCATE directive is not yet supported" -msgstr "Sorry, die %qs-Klausel bei %L an einer REQUIRES-Direktive wird noch nicht unterstützt" +msgstr "Sorry, das structure-element-Listenelement bei %L in der ALLOCATE-Direktive wird noch nicht unterstützt" #: fortran/openmp.cc:4579 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected expression in %s statement at %C" +#, gcc-internal-format, gfc-internal-format msgid "Unexpected expression as list item at %L in ALLOCATE directive" -msgstr "Ausdruck in %s-Anweisung bei %C erwartet" +msgstr "Unerwarteter Ausdruck als Listenelement bei %L in der ALLOCATE-Direktive" #: fortran/openmp.cc:4650 #, gcc-internal-format, gfc-internal-format @@ -75026,7 +74827,7 @@ msgstr "Eins von IN, OUT, INOUT, INOUTSET oder MUTEXINOUTSET bei %C erwartet, ge #: fortran/openmp.cc:4771 #, gcc-internal-format, gfc-internal-format msgid "The same depend object should be used as DEPOBJ argument at %L and as DESTROY argument at %L" -msgstr "" +msgstr "Dasselbe abhängige Objekt sollte als DEPOBJ-Argument bei %L und als DESTROY-Argument bei %L verwendet werden" #: fortran/openmp.cc:4785 #, gcc-internal-format, gfc-internal-format @@ -75141,7 +74942,7 @@ msgstr "Listenelement %qs bei %L wurde von einer vorhergehenden Direktive OMP DE #: fortran/openmp.cc:5547 fortran/openmp.cc:5601 #, gcc-internal-format, gfc-internal-format msgid "DEVICE_TYPE must be ANY when used with INDIRECT at %L" -msgstr "" +msgstr "DEVICE_TYPE muss ANY sein, wenn es mit INDIRECT bei %L verwendet wird" #: fortran/openmp.cc:5557 #, gcc-internal-format, gfc-internal-format @@ -75164,10 +74965,9 @@ msgid "COMMON at %L set in previous OMP DECLARE TARGET directive to a different msgstr "COMMON bei %L wurde in einer vorangehenden Direktive OMP DECLARE TARGET auf einen abweichenden DEVICE_TYPE festgelegt" #: fortran/openmp.cc:5611 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "OMP DECLARE TARGET directive at %L with only DEVICE_TYPE clause is ignored" +#, gcc-internal-format, gfc-internal-format msgid "OMP DECLARE TARGET directive at %L with only DEVICE_TYPE or INDIRECT clauses is ignored" -msgstr "Direktive OMP DECLARE TARGET bei %L mit nur DEVICE_TYPE-Klausel wird ignoriert" +msgstr "Direktive OMP DECLARE TARGET bei %L mit nur DEVICE_TYPE- oder INDIRECT-Klausel wird ignoriert" #: fortran/openmp.cc:5622 #, gcc-internal-format, gfc-internal-format @@ -75176,10 +74976,9 @@ msgstr "Syntaxfehler in »!$OMP DECLARE TARGET«-Liste bei %C" #. FIXME: constant integer expressions. #: fortran/openmp.cc:5661 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected integer expression at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected trait-property-extension at %C" -msgstr "Ganzzahlausdruck bei %C erwartet" +msgstr "Trait-property-extension bei %C erwartet" #: fortran/openmp.cc:5676 fortran/openmp.cc:5773 fortran/openmp.cc:5904 #: fortran/openmp.cc:6054 fortran/openmp.cc:6082 @@ -75193,10 +74992,9 @@ msgid "expected trait selector name at %C" msgstr "Name des Merkmalsselektors bei %C erwartet" #: fortran/openmp.cc:5717 -#, fuzzy, gcc-internal-format -#| msgid "selector %qs not allowed for context selector set %qs at %C" +#, gcc-internal-format msgid "unknown selector %qs for context selector set %qs at %C" -msgstr "Selektor %qs ist für den Kontext-Selektorsatz %qs nicht erlaubt, bei %C" +msgstr "unbekannter Selektor %qs für Kontext-Selektormenge %qs bei %C" #: fortran/openmp.cc:5735 #, gcc-internal-format @@ -75204,10 +75002,9 @@ msgid "selector %qs does not accept any properties at %C" msgstr "Selektor %qs bei %C akzeptiert keine Eigenschaften" #: fortran/openmp.cc:5744 -#, fuzzy, gcc-internal-format -#| msgid "The %s directive cannot be specified within a %s region at %L" +#, gcc-internal-format msgid "%<score%> cannot be specified in traits in the %qs trait-selector-set at %C" -msgstr "Die %1$s-Direktive bei %3$L darf nicht innerhalb einer %2$s-Region angegeben werden" +msgstr "%<score%> kann nicht in Traits im trait-selector-set %qs bei %C angegeben werden" #: fortran/openmp.cc:5751 fortran/openmp.cc:5914 fortran/openmp.cc:6006 #: fortran/openmp.cc:6073 @@ -75216,16 +75013,14 @@ msgid "expected %<(%> at %C" msgstr "%<(%> bei %C erwartet" #: fortran/openmp.cc:5759 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be constant integer expression at %C" +#, gcc-internal-format msgid "%<score%> argument must be constant integer expression at %C" -msgstr "das Score-Argument bei %C muss ein konstanter ganzzahliger Ausdruck sein" +msgstr "das %<score%>-Argument bei %C muss ein konstanter ganzzahliger Ausdruck sein" #: fortran/openmp.cc:5767 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be non-negative at %C" +#, gcc-internal-format msgid "%<score%> argument must be non-negative at %C" -msgstr "das Score-Argument bei %C darf nicht negativ sein" +msgstr "das %<score%>-Argument bei %C darf nicht negativ sein" #: fortran/openmp.cc:5779 #, gcc-internal-format, gfc-internal-format @@ -75248,22 +75043,19 @@ msgid "expected expression at %C" msgstr "Ausdruck bei %C erwartet" #: fortran/openmp.cc:5853 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "property must be constant integer or logical expression at %C" +#, gcc-internal-format, gfc-internal-format msgid "property must be a constant logical expression at %C" -msgstr "Eigenschaft bei %C muss ein konstanter ganzzahliger oder logischer Ausdruck sein" +msgstr "Eigenschaft bei %C muss ein konstanter logischer Ausdruck sein" #: fortran/openmp.cc:5856 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "property must be constant integer expression" +#, gcc-internal-format, gfc-internal-format msgid "property must be a constant integer expression at %C" -msgstr "Eigenschaft muss ein konstanter ganzzahliger Ausdruck sein" +msgstr "Eigenschaft bei %C muss ein konstanter ganzzahliger Ausdruck sein" #: fortran/openmp.cc:5868 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "property must be constant integer or logical expression at %C" +#, gcc-internal-format, gfc-internal-format msgid "property must be a conforming device number at %C" -msgstr "Eigenschaft bei %C muss ein konstanter ganzzahliger oder logischer Ausdruck sein" +msgstr "Eigenschaft bei %C muss die Nummer eines konformen Geräts sein" #: fortran/openmp.cc:5882 #, gcc-internal-format, gfc-internal-format @@ -75271,10 +75063,9 @@ msgid "expected simd clause at %C" msgstr "SIMD-Klausel bei %C erwartet" #: fortran/openmp.cc:5955 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "expected trait selector name at %C" +#, gcc-internal-format, gfc-internal-format msgid "expected context selector set name at %C" -msgstr "Name des Merkmalsselektors bei %C erwartet" +msgstr "Name der Kontextselektormenge bei %C erwartet" #: fortran/openmp.cc:5962 #, gcc-internal-format @@ -75372,10 +75163,9 @@ msgid "!$OMP REQUIRES at %C must appear in the specification part of a program u msgstr "!$OMP REQUIRES bei %C muss im Spezifikationsteil einer Programmeinheit vorkommen" #: fortran/openmp.cc:6456 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected SEQ_CST, ACQ_REL or RELAXED for ATOMIC_DEFAULT_MEM_ORDER clause at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected ACQ_REL, ACQUIRE, RELAXED, RELEASE or SEQ_CST for ATOMIC_DEFAULT_MEM_ORDER clause at %C" -msgstr "Eins von SEQ_CST, ACQ_REL oder RELAXED erwartet, für ATOMIC_DEFAULT_MEM_ORDER-Klausel bei %C" +msgstr "ACQ_REL, ACQUIRE, RELAXED, RELEASE oder SEQ_CST für ATOMIC_DEFAULT_MEM_ORDER-Klausel bei %C erwartet" #: fortran/openmp.cc:6472 #, gcc-internal-format, gfc-internal-format @@ -75428,16 +75218,14 @@ msgid "!$OMP ATOMIC at %L with %s clause requires %s clause" msgstr "!$OMP ATOMIC bei %L mit %s-Klausel erfordert %s-Klausel" #: fortran/openmp.cc:6907 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "!$OMP ATOMIC WRITE at %L incompatible with ACQUIRE clause" +#, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC WRITE at %L incompatible with ACQUIRES clause implicitly provided by a REQUIRES directive" -msgstr "!$OMP ATOMIC WRITE bei %L ist inkompatibel zur ACQUIRE-Klausel" +msgstr "!$OMP ATOMIC WRITE bei %L inkompatibel mit ACQUIRES-Klausel, die implizit durch eine REQUIRES-Direktive bereitgestellt wird" #: fortran/openmp.cc:6918 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "!$OMP ATOMIC READ at %L incompatible with RELEASE clause" +#, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC READ at %L incompatible with RELEASE clause implicitly provided by a REQUIRES directive" -msgstr "!$OMP ATOMIC READ bei %L ist inkompatibel zur RELEASE-Klausel" +msgstr "!$OMP ATOMIC READ bei %L inkompatibel mit RELEASE-Klausel, die implizit durch eine REQUIRES-Direktive bereitgestellt wird" #: fortran/openmp.cc:6936 #, gcc-internal-format, gfc-internal-format @@ -75562,80 +75350,77 @@ msgstr "Implizit deklariertes Unterprogramm %s wird in !$OMP DECLARE REDUCTION b #: fortran/openmp.cc:7349 #, gcc-internal-format msgid "Unexpected function-result variable %qs at %L in declarative !$OMP ALLOCATE" -msgstr "" +msgstr "Unerwartete function-result-Variable %qs bei %L in deklarativem !$OMP ALLOCATE" #: fortran/openmp.cc:7355 -#, fuzzy, gcc-internal-format -#| msgid "Procedure pointer %qs in %s clause at %L" +#, gcc-internal-format msgid "Procedure pointer %qs not supported with !$OMP ALLOCATE at %L" -msgstr "Prozedurzeiger %qs in %s-Klausel bei %L" +msgstr "Prozedurzeiger %qs nicht unterstützt mit !$OMP ALLOCATE bei %L" #: fortran/openmp.cc:7361 #, gcc-internal-format msgid "Argument %qs at %L to declarative !$OMP ALLOCATE directive must be a variable" -msgstr "" +msgstr "Das Argument %qs bei %L zu der deklarativen Direktive !$OMP ALLOCATE muss eine Variable sein" #: fortran/openmp.cc:7368 #, gcc-internal-format msgid "Argument %qs at %L to declarative !$OMP ALLOCATE shall be in the same scope as the variable declaration" -msgstr "" +msgstr "Das Argument %qs bei %L zu deklarativem !$OMP ALLOCATE muss sich im selben Bereich befinden wie die Variablendeklaration" #: fortran/openmp.cc:7375 -#, fuzzy, gcc-internal-format -#| msgid "Passed-object dummy argument of %qs at %L must not be ALLOCATABLE" +#, gcc-internal-format msgid "Unexpected dummy argument %qs as argument at %L to declarative !$OMP ALLOCATE" -msgstr "Scheinargument von %qs für weitergegebenes Objekt bei %L darf nicht ALLOCATABLE sein" +msgstr "Unerwartetes Dummy-Argument %qs als Argument bei %L zu deklarativem !$OMP ALLOCATE" #: fortran/openmp.cc:7381 #, gcc-internal-format msgid "Unexpected coarray argument %qs as argument at %L to declarative !$OMP ALLOCATE" -msgstr "" +msgstr "Unerwartetes Coarray-Argument %qs als Argument bei %L zu deklarativem !$OMP ALLOCATE" #: fortran/openmp.cc:7389 #, gcc-internal-format msgid "Duplicated common block %</%s/%> in !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Doppelter gemeinsamer Block %</%s/%> in !$OMP ALLOCATE bei %L" #: fortran/openmp.cc:7396 #, gcc-internal-format msgid "Duplicated variable %qs in !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Doppelte Variable %qs in !$OMP ALLOCATE bei %L" #: fortran/openmp.cc:7407 #, gcc-internal-format msgid "Sorry, EQUIVALENCE object %qs not supported with !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Sorry, EQUIVALENCE-Objekt %qs ist nicht unterstützt mit !$OMP ALLOCATE bei %L" #: fortran/openmp.cc:7416 #, gcc-internal-format msgid "Sorry, Cray pointers and pointees such as %qs are not supported with !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Sorry, Cray-Zeiger und Zeigerziele wie %qs werden nicht unterstützt mit !$OMP ALLOCATE bei %L" #: fortran/openmp.cc:7425 #, gcc-internal-format msgid "Unexpected allocatable variable %qs at %L in declarative !$OMP ALLOCATE directive" -msgstr "" +msgstr "Unerwartete allozierte Variable %qs bei %L in der deklarativen Direktive !$OMP ALLOCATE" #: fortran/openmp.cc:7430 #, gcc-internal-format msgid "Unexpected pointer variable %qs at %L in declarative !$OMP ALLOCATE directive" -msgstr "" +msgstr "Unerwartete Zeigervariable %qs bei %L in der deklarativen Direktive !$OMP ALLOCATE" #: fortran/openmp.cc:7441 fortran/openmp.cc:7996 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "ALIGN modifier requires at %L a scalar positive constant integer alignment expression that is a power of two" +#, gcc-internal-format, gfc-internal-format msgid "ALIGN requires a scalar positive constant integer alignment expression at %L that is a power of two" -msgstr "ALIGN-Modifizierer bei %L erfordert einen skalaren, positiven, konstanten Ganzzahlausdruck für die Ausrichtung, der eine Zweierpotenz ist" +msgstr "ALIGN bei %L erfordert einen skalaren, positiven, konstanten Ganzzahlausdruck für die Ausrichtung, der eine Zweierpotenz ist" #: fortran/openmp.cc:7456 #, gcc-internal-format msgid "An ALLOCATOR clause is required as the list item %<%s%s%s%> at %L has the SAVE attribute" -msgstr "" +msgstr "Eine ALLOCATOR-Klausel ist erforderlich, da das Listenelement %<%s%s%s%> bei %L das Attribut SAVE hat" #: fortran/openmp.cc:7461 #, gcc-internal-format msgid "Predefined allocator required in ALLOCATOR clause at %L as the list item %<%s%s%s%> at %L has the SAVE attribute" -msgstr "" +msgstr "Vordefinierter Allokator in ALLOCATOR-Klausel bei %L erforderlich, da das Listenelement %<%s%s%s%> bei %L das Attribut SAVE hat" #: fortran/openmp.cc:7475 fortran/openmp.cc:7980 #, gcc-internal-format @@ -75674,10 +75459,9 @@ msgid "IF clause modifier %s at %L not appropriate for the current OpenMP constr msgstr "IF-Klausel-Modifizierer »%s« bei %L ist dem aktuellen OpenMP-Konstrukt nicht angemessen" #: fortran/openmp.cc:7687 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "IF clause at %L requires a scalar LOGICAL expression" +#, gcc-internal-format, gfc-internal-format msgid "SELF clause at %L requires a scalar LOGICAL expression" -msgstr "IF-Klausel bei %L erfordert einen skalaren LOGICAL-Ausdruck" +msgstr "SELF-Klausel bei %L erfordert einen skalaren LOGICAL-Ausdruck" #: fortran/openmp.cc:7696 #, gcc-internal-format, gfc-internal-format @@ -75763,10 +75547,9 @@ msgid "Symbol %qs present on both data and map clauses at %L" msgstr "Symbol %qs tritt bei %L sowohl in der DATA- als auch in der MAP-Klausel auf" #: fortran/openmp.cc:8021 -#, fuzzy, gcc-internal-format -#| msgid "%qs appears more than once in %<allocate%> clauses at %L" +#, gcc-internal-format msgid "%qs appears more than once in %<allocate%> at %L" -msgstr "%qs kommt mehr als einmal in %<allocate%>-Klauseln bei %L vor" +msgstr "%qs kommt mehr als einmal in %<allocate%> bei %L vor" #: fortran/openmp.cc:8063 #, gcc-internal-format @@ -75774,41 +75557,39 @@ msgid "%qs specified in %<allocate%> clause at %L but not in an explicit privati msgstr "%qs ist in %<allocate%>-Klausel bei %L angegeben, aber nicht in einer expliziten Privatisierungs-Klausel" #: fortran/openmp.cc:8091 -#, fuzzy, gcc-internal-format -#| msgid "Unexpected coarray designator at %C" +#, gcc-internal-format msgid "Unexpected coarray %qs in %<allocate%> at %L" -msgstr "Unerwarteter Coarray-Bezeichner bei %C" +msgstr "Unerwartetes Coarray %qs in %<allocate%> bei %L" #: fortran/openmp.cc:8105 -#, fuzzy, gcc-internal-format -#| msgid "%qs specified in %<allocate%> clause at %L but not in an explicit privatization clause" +#, gcc-internal-format msgid "%qs specified in %<allocate%> at %L but not in the associated ALLOCATE statement" -msgstr "%qs ist in %<allocate%>-Klausel bei %L angegeben, aber nicht in einer expliziten Privatisierungs-Klausel" +msgstr "%qs ist in %<allocate%> bei %L angegeben, aber nicht in der verknüpften ALLOCATE-Anweisung" #: fortran/openmp.cc:8139 #, gcc-internal-format msgid "%qs listed in %<allocate%> statement at %L but it is neither explicitly in listed in the %<!$OMP ALLOCATE%> directive nor exists a directive without argument list" -msgstr "" +msgstr "%qs wird in der Anweisung %<allocate%> bei %L aufgeführt, ist aber weder explizit in der Direktive %<!$OMP ALLOCATE%> aufgeführt noch existiert eine Richtlinie ohne Argumentenliste" #: fortran/openmp.cc:8150 #, gcc-internal-format msgid "Unexpected coarray %qs in %<allocate%> at %L, implicitly listed in %<!$OMP ALLOCATE%> at %L" -msgstr "" +msgstr "Unerwartetes Coarray %qs in %<allocate%> bei %L, implizit aufgeführt in %<!$OMP ALLOCATE%> bei %L" #: fortran/openmp.cc:8175 #, gcc-internal-format msgid "ALLOCATORS directive at %L inside a target region must specify an ALLOCATOR modifier for %qs" -msgstr "" +msgstr "Die ALLOCATORS-Direktive bei %L innerhalb einer Zielregion muss einen ALLOCATOR-Modifikator für %qs angeben" #: fortran/openmp.cc:8179 #, gcc-internal-format msgid "ALLOCATE directive at %L inside a target region must specify an ALLOCATOR clause for %qs" -msgstr "" +msgstr "Die ALLOCATE-Direktive bei %L innerhalb einer Zielregion muss eine ALLOCATOR-Klausel für %qs angeben" #: fortran/openmp.cc:8183 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATE directive at %L inside a target region must specify an ALLOCATOR clause" -msgstr "" +msgstr "Die ALLOCATE-Direktive bei %L innerhalb einer Zielregion muss eine ALLOCATOR-Klausel angeben" #: fortran/openmp.cc:8206 #, gcc-internal-format @@ -75989,28 +75770,27 @@ msgstr "Listenelement %qs in %s-Klausel bei %L muss TYPE(C_PTR) sein" #: fortran/openmp.cc:8709 #, gcc-internal-format msgid "Memspace %qs at %L in USES_ALLOCATORS must be a predefined memory space" -msgstr "" +msgstr "Der Speicherbereich %qs bei %L in USES_ALLOCATORS muss ein vordefinierter Speicherbereich sein" #: fortran/openmp.cc:8717 -#, fuzzy, gcc-internal-format -#| msgid "%qs at %L should be a scalar of type integer(kind=omp_event_handle_kind)" +#, gcc-internal-format msgid "Allocator %qs at %L in USES_ALLOCATORS must be a scalar integer of kind %<omp_allocator_handle_kind%>" -msgstr "%qs bei %L sollte ein Skalar vom Typ integer(kind=omp_event_handle_kind) sein" +msgstr "Allokator %qs bei %L in USES_ALLOCATORS muss eine skalare Ganzzahl der Art %<omp_allocator_handle_kind%> sein" #: fortran/openmp.cc:8725 #, gcc-internal-format msgid "Allocator %qs at %L in USES_ALLOCATORS must either a variable or a predefined allocator" -msgstr "" +msgstr "Allokator %qs bei %L in USES_ALLOCATORS muss entweder eine Variable oder ein vordefinierter Allokator sein" #: fortran/openmp.cc:8730 #, gcc-internal-format msgid "A memory space or traits array may not be specified for predefined allocator %qs at %L" -msgstr "" +msgstr "Für den vordefinierten Allokator %qs bei %L darf kein Speicherbereich oder Traits-Array angegeben werden" #: fortran/openmp.cc:8741 #, gcc-internal-format msgid "Traits array %qs in USES_ALLOCATORS %L must be a one-dimensional named constant array of type %<omp_alloctrait%>" -msgstr "" +msgstr "Traits-Array %qs in USES_ALLOCATORS bei %L muss ein eindimensionales benanntes konstantes Array vom Typ %<omp_alloctrait%> sein" #: fortran/openmp.cc:8771 #, gcc-internal-format @@ -76146,7 +75926,7 @@ msgstr "%<DETACH%>-Klausel bei %L darf nicht zusammen mit %<MERGEABLE%>-Klausel #: fortran/openmp.cc:9226 #, gcc-internal-format msgid "%<host_data%> construct at %L requires %<use_device%> clause" -msgstr "" +msgstr "%<host_data%>-Konstrukt bei %L erfordert %<use_device%>-Klausel" #: fortran/openmp.cc:9380 #, gcc-internal-format, gfc-internal-format @@ -76284,35 +76064,34 @@ msgid "unexpected !$OMP ATOMIC expression at %L" msgstr "Unerwarteter »!$OMP ATOMIC«Ausdruck bei %L" #: fortran/openmp.cc:9948 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "With INSCAN at %L, expected loop body with !$OMP SCAN between two structured-block-sequences" +#, gcc-internal-format, gfc-internal-format msgid "With INSCAN at %L, expected loop body with !$OMP SCAN between two structured block sequences" -msgstr "Aufgrund des INSCAN bei %L wird ein Schleifenrumpf mit !$OMP SCAN zwischen zwei structured-block-sequences erwartet" +msgstr "Aufgrund des INSCAN bei %L wird ein Schleifenrumpf mit !$OMP SCAN zwischen zwei strukturierten Blockfolgen erwartet" #: fortran/openmp.cc:9955 #, gcc-internal-format, gfc-internal-format msgid "!$OMP SCAN at %L with zero executable statements in preceding structured block sequence" -msgstr "" +msgstr "!$OMP SCAN bei %L mit null ausführbaren Anweisungen in der vorangehenden strukturierten Blockfolge" #: fortran/openmp.cc:9962 #, gcc-internal-format, gfc-internal-format msgid "!$OMP SCAN at %L with zero executable statements in succeeding structured block sequence" -msgstr "" +msgstr "!$OMP SCAN bei %L mit null ausführbaren Anweisungen in der darauffolgenden strukturierten Blockfolge" #: fortran/openmp.cc:10176 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain loop in intervening code at %L" -msgstr "" +msgstr "%s kann keine Schleife im dazwischenliegenden Code bei %L enthalten" #: fortran/openmp.cc:10256 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP directive in intervening code at %L" -msgstr "" +msgstr "%s kann keine OpenMP-Direktive im dazwischenliegenden Code bei %L enthalten" #: fortran/openmp.cc:10268 fortran/openmp.cc:10294 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP API call in intervening code at %L" -msgstr "" +msgstr "%s kann keinen OpenMP-API-Aufruf im dazwischenliegenden Code bei %L enthalten" #: fortran/openmp.cc:10822 #, gcc-internal-format, gfc-internal-format @@ -76350,10 +76129,9 @@ msgid "%s iteration variable used in more than one loop at %L" msgstr "%s-Iterationsvariable bei %L wird in mehr als einer Schleife verwendet" #: fortran/openmp.cc:10874 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "iteration variable %qE should not be reduction" +#, gcc-internal-format, gfc-internal-format msgid "%s iteration variable at %L is bound in intervening code" -msgstr "Schleifenvariable %qE sollte nicht Reduktion sein" +msgstr "%s-Iterationsvariable bei %L ist im dazwischenliegenden Code gebunden" #: fortran/openmp.cc:10883 #, gcc-internal-format, gfc-internal-format @@ -76361,10 +76139,9 @@ msgid "%s loop start expression not in canonical form at %L" msgstr "Schleifenstartausdruck %s bei %L hat nicht die kanonische Form" #: fortran/openmp.cc:10890 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%s loop start expression not in canonical form at %L" +#, gcc-internal-format, gfc-internal-format msgid "%s loop start expression at %L uses variable bound in intervening code" -msgstr "Schleifenstartausdruck %s bei %L hat nicht die kanonische Form" +msgstr "%s-Schleifenstartausdruck bei %L verwendet im dazwischenliegenden Code gebundene Variable" #: fortran/openmp.cc:10899 #, gcc-internal-format, gfc-internal-format @@ -76374,7 +76151,7 @@ msgstr "Endausdruck der »%s«-Schleife bei %L ist nicht in kanonischer Form" #: fortran/openmp.cc:10906 #, gcc-internal-format, gfc-internal-format msgid "%s loop end expression at %L uses variable bound in intervening code" -msgstr "" +msgstr "Ausdruck %s bei %L für das Ende der Schleife verwendet eine im dazwischenliegenden Code gebundene Variable" #: fortran/openmp.cc:10913 #, gcc-internal-format, gfc-internal-format @@ -76389,26 +76166,24 @@ msgstr "Schleifeninkrement %s bei %L hat nicht die kanonische Form" #: fortran/openmp.cc:10926 #, gcc-internal-format, gfc-internal-format msgid "%s loop increment expression at %L uses variable bound in intervening code" -msgstr "" +msgstr "%s-Schleifeninkrementausdruck bei %L verwendet eine im dazwischenliegenden Code gebundene Variable" #. Parse error, can't recover from this. #: fortran/openmp.cc:10944 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "not enough DO loops for collapsed %s at %L" +#, gcc-internal-format, gfc-internal-format msgid "not enough DO loops for collapsed %s (level %d) at %L" -msgstr "zu wenige DO-Schleifen für zusammengefallenes %s bei %L" +msgstr "zu wenige DO-Schleifen für zusammengefallenes %s (Stufe %d) bei %L" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79861 #: fortran/openmp.cc:10956 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%s !$ACC LOOP loops not perfectly nested at %L" +#, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested with ORDERED clause at %L" -msgstr "»%s !$ACC LOOP«-Schleifen bei %L nicht perfekt geschachtelt" +msgstr "%s innere Schleifen müssen perfekt verschachtelt sein mit ORDERED-Klausel bei %L" #: fortran/openmp.cc:10963 #, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested with REDUCTION INSCAN clause at %L" -msgstr "" +msgstr "%s innere Schleifen müssen perfekt verschachtelt sein mit REDUCTION-INSCAN-Klausel bei %L" #: fortran/openmp.cc:11190 fortran/openmp.cc:11203 #, gcc-internal-format, gfc-internal-format @@ -76475,12 +76250,12 @@ msgstr "NAME %qs ist in »!$ACC ROUTINE ( NAME )« bei %L ungültig" #: fortran/openmp.cc:11539 #, gcc-internal-format, gfc-internal-format msgid "!$OMP TARGET region at %L with a nested TEAMS at %L may not contain any other statement, declaration or directive outside of the single TEAMS construct" -msgstr "" +msgstr "!$OMP-TARGET-Region bei %L mit einem verschachtelten TEAMS bei %L darf keine andere Anweisung, Deklaration oder Direktive außerhalb des einzelnen TEAMS-Konstrukts enthalten" #: fortran/openmp.cc:11543 #, gcc-internal-format, gfc-internal-format msgid "!$OMP TARGET region at %L with a nested TEAMS may not contain any other statement, declaration or directive outside of the single TEAMS construct" -msgstr "" +msgstr "!$OMP-TARGET-Region bei %L mit einem verschachtelten TEAMS darf keine andere Anweisung, Deklaration oder Direktive außerhalb des einzelnen TEAMS-Konstrukts enthalten" #: fortran/openmp.cc:11637 #, gcc-internal-format, gfc-internal-format @@ -76660,23 +76435,22 @@ msgstr "Nicht klassifizierbare OpenACC-Anweisung bei %C" #: fortran/parse.cc:817 #, gcc-internal-format msgid "%qs directive at %L must either have a variable argument or, if associated with an ALLOCATE stmt, must be preceded by an executable statement or OpenMP construct" -msgstr "" +msgstr "Die %qs-Direktive bei %L muss entweder ein Variablenargument haben oder, wenn sie mit einer ALLOCATE-Anweisung verknüpft ist, muss ihr eine ausführbare Anweisung oder ein OpenMP-Konstrukt vorausgehen" #: fortran/parse.cc:829 #, gcc-internal-format msgid "Structure-component expression at %L in %qs directive not permitted in declarative directive; as directive associated with an ALLOCATE stmt it must be preceded by an executable statement or OpenMP construct" -msgstr "" +msgstr "Strukturkomponenten-Ausdruck bei %L in %qs-Direktive in deklarativer Direktive nicht zulässig; als Richtlinie, die mit einer ALLOCATE-Anweisung verbunden ist, muss ihr eine ausführbare Anweisung oder ein OpenMP-Konstrukt vorausgehen" #: fortran/parse.cc:855 #, gcc-internal-format msgid "%qs directive at %L associated with an ALLOCATE stmt must be preceded by an executable statement or OpenMP construct; note the variables in the list all have the allocatable or pointer attribute" -msgstr "" +msgstr "Die %qs-Direktive bei %L, die mit einer ALLOCATE-Anweisung verbunden ist, muss eine ausführbare Anweisung oder ein OpenMP-Konstrukt vorausgehen; beachten Sie, dass die Variablen in der Liste alle das Attribut allocatable oder pointer haben" #: fortran/parse.cc:1023 fortran/parse.cc:1325 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "OpenACC directives other than ROUTINE may not appear in PURE procedures at %C" +#, gcc-internal-format, gfc-internal-format msgid "OpenMP directive at %C is not pure and thus may not appear in a PURE procedure" -msgstr "OpenACC-Direktiven außer ROUTINE dürfen in PURE-Prozeduren nicht vorkommen, bei %C" +msgstr "OpenMP-Direktive bei %C ist nicht rein und darf daher nicht in einer PURE-Prozedur erscheinen" #: fortran/parse.cc:1296 #, gcc-internal-format, gfc-internal-format @@ -76686,7 +76460,7 @@ msgstr "Nicht klassifizierbare OpenMP-Anweisung bei %C" #: fortran/parse.cc:1312 #, gcc-internal-format msgid "OpenMP ERROR directive at %L with %<at(execution)%> clause in a PURE procedure" -msgstr "" +msgstr "OpenMP ERROR-Direktive bei %L mit %<at(execution)%>-Klausel in einer PURE-Prozedur" #: fortran/parse.cc:1440 #, gcc-internal-format, gfc-internal-format @@ -77097,19 +76871,17 @@ msgstr "Redundantes !$ACC END LOOP bei %C" #: fortran/parse.cc:5809 #, gcc-internal-format, gfc-internal-format msgid "%s statements at %L and %L have both no list item but only one may" -msgstr "" +msgstr "%s-Anweisungen bei %L und %L haben beide kein Listenelement, aber nur eine darf" #: fortran/parse.cc:5829 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected expression at %C in PARAMETER statement" +#, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE or %s statement" -msgstr "Ausdruck bei %C in PARAMETER-Anweisung erwartet" +msgstr "Unerwartetes %s bei %C; ALLOCATE- oder %s-Anweisung erwartet" #: fortran/parse.cc:5832 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Unexpected junk after ELSE statement at %C" +#, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE statement after %s" -msgstr "Unerwartete Zeichen hinter ELSE-Anweisung bei %C" +msgstr "Unerwartetes %s bei %C; ALLOCATE-Anweisung nach %s erwartet" #: fortran/parse.cc:6120 #, gcc-internal-format, gfc-internal-format @@ -77358,14 +77130,10 @@ msgid "match_string_constant(): Delimiter not found" msgstr "match_string_constant(): Delimiter not found" #: fortran/primary.cc:1193 -#, fuzzy -#| msgid "Substring start index (%ld) at %L below 1" msgid "Substring start index (%td) at %L below 1" -msgstr "Anfangs-Index der Teilzeichenkette %ld bei %L muss kleiner als 1 sein" +msgstr "Anfangs-Index %td der Teilzeichenkette bei %L muss mindestens 1 sein" #: fortran/primary.cc:1199 -#, fuzzy -#| msgid "Substring end index (%ld) at %L exceeds string length" msgid "Substring end index (%td) at %L exceeds string length" msgstr "End-Index %ld der Teilzeichenkette bei %L überschreitet Zeichenkettenlänge" @@ -77575,10 +77343,8 @@ msgid "Too many components in structure constructor at %L" msgstr "Zu viele Komponenten in Strukturkonstruktor bei %L" #: fortran/primary.cc:3242 -#, fuzzy -#| msgid "CHARACTER expression will be truncated in constructor (%ld/%ld) at %L" msgid "CHARACTER expression will be truncated in constructor (%td/%td) at %L" -msgstr "CHARACTER-Ausdruck wird in Konstruktor (%ld/%ld) bei %L abgeschnitten" +msgstr "CHARACTER-Ausdruck wird in Konstruktor (%td/%td) bei %L abgeschnitten" #: fortran/primary.cc:3260 #, gcc-internal-format @@ -77898,10 +77664,9 @@ msgid "%qs at %L cannot appear in COMMON [F2008:C5100]" msgstr "%qs bei %L kann nicht in COMMON auftreten [F2008:C5100]" #: fortran/resolve.cc:1016 -#, fuzzy, gcc-internal-format -#| msgid "Global entity %qs at %L cannot appear in a COMMON block at %L" +#, gcc-internal-format msgid "Automatic object %qs at %L cannot appear in COMMON at %L" -msgstr "Globale Entität %qs bei %L kann nicht in einem COMMON-Block bei %L vorkommen" +msgstr "Automatisches Objekt %qs bei %L kann nicht in COMMON bei %L vorkommen" #: fortran/resolve.cc:1028 #, gcc-internal-format @@ -78583,10 +78348,9 @@ msgstr "Variable »%s« vermuteten Ranges bei %L darf keine Referenz auf Subobje # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79596 #: fortran/resolve.cc:5909 -#, fuzzy, gcc-internal-format -#| msgid "gfc_variable_attr(): Bad array reference" +#, gcc-internal-format msgid "Scalar variable %qs has an array reference at %L" -msgstr "gfc_variable_attr(): Bad array reference" +msgstr "Skalare Variable %qs hat eine Array-Referenz bei %L" #: fortran/resolve.cc:6054 #, gcc-internal-format @@ -79211,16 +78975,14 @@ msgid "gfc_resolve_blocks(): Bad block type" msgstr "gfc_resolve_blocks(): Bad block type" #: fortran/resolve.cc:11232 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Data transfer element at %L cannot have procedure pointer components" +#, gcc-internal-format, gfc-internal-format msgid "Variable in the ordinary assignment at %L is a procedure pointer component" -msgstr "Datenübertragungselement bei %L kann keine Prozedurzeiger-Komponenten haben" +msgstr "Die Variable in der gewöhnlichen Zuweisung bei %L ist eine Prozedurzeigerkomponente" #: fortran/resolve.cc:11293 -#, fuzzy, gcc-internal-format -#| msgid "CHARACTER expression will be truncated in assignment (%ld/%ld) at %L" +#, gcc-internal-format msgid "CHARACTER expression will be truncated in assignment (%wd/%wd) at %L" -msgstr "CHARACTER-Ausdruck wird in Zuweisung (%ld/%ld) bei %L abgeschnitten" +msgstr "CHARACTER-Ausdruck wird in Zuweisung (%wd/%wd) bei %L abgeschnitten" #: fortran/resolve.cc:11325 #, gcc-internal-format, gfc-internal-format @@ -80211,10 +79973,9 @@ msgid "DATA statement at %L has more variables than values" msgstr "DATA-Anweisung bei %L hat mehr Variablen als Werte" #: fortran/resolve.cc:17044 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Nonconstant array section at %L in DATA statement" +#, gcc-internal-format, gfc-internal-format msgid "Non-constant character length at %L in DATA statement" -msgstr "Abschnitt eines nicht konstanten Feldes bei %L in DATA-Anweisung" +msgstr "Nichtkonstante Zeichenlänge bei %L in DATA-Anweisung" #: fortran/resolve.cc:17072 #, gcc-internal-format, gfc-internal-format @@ -80789,10 +80550,9 @@ msgid "Result of SCALE overflows its kind at %L" msgstr "Ergebnis von SCALE überschreitet seine Art bei %L" #: fortran/simplify.cc:7634 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%qs argument of %qs intrinsic at %L must be of rank %d" +#, gcc-internal-format, gfc-internal-format msgid "DIM argument (%d) to intrinsic SIZE at %L out of range (1:%d)" -msgstr "Argument %qs des intrinsischen %qs bei %L muss vom Rang %d sein" +msgstr "DIM-Argument (%d) für intrinsisches SIZE bei %L außerhalb des Bereichs (1:%d)" #: fortran/simplify.cc:7759 #, gcc-internal-format @@ -81296,10 +81056,9 @@ msgid "bad expression type during walk (%d)" msgstr "Falscher Ausdruckstyp beim Durchlaufen (%d)" #: fortran/trans-common.cc:411 -#, fuzzy, gcc-internal-format -#| msgid "Named COMMON block %qs at %L shall be of the same size as elsewhere (%lu vs %lu bytes)" +#, gcc-internal-format msgid "Named COMMON block %qs at %L shall be of the same size as elsewhere (%wu vs %wu bytes)" -msgstr "Benannter COMMON-Block %qs bei %L muss die gleiche Größe wie anderswo haben (%lu Bytes gegenüber %lu Bytes)" +msgstr "Benannter COMMON-Block %qs bei %L muss die gleiche Größe wie anderswo haben (%wu Bytes gegenüber %wu Bytes)" # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79596 #: fortran/trans-common.cc:819 @@ -81407,13 +81166,12 @@ msgstr "Parameter aufgeschobenen Typs wird noch nicht unterstützt" #: fortran/trans-decl.cc:5224 #, gcc-internal-format msgid "Sorry, !$OMP allocate for COMMON block variable %qs at %L not supported" -msgstr "" +msgstr "Sorry, !$OMP allocate for COMMON block variable %qs at %L not supported" #: fortran/trans-decl.cc:5231 -#, fuzzy, gcc-internal-format -#| msgid "Character dummy variable %qs at %L with VALUE attribute must have constant length" +#, gcc-internal-format msgid "Sorry, !$OMP allocate for variable %qs at %L with SAVE attribute not yet implemented" -msgstr "Zeichenwertige Scheinvariable %qs bei %L mit VALUE-Attribut muss konstante Länge haben" +msgstr "Sorry, !$OMP allocate for variable %qs at %L with SAVE attribute not yet implemented" #: fortran/trans-decl.cc:5437 #, gcc-internal-format @@ -81574,28 +81332,27 @@ msgstr "unbehandelter Ausdruck" #: fortran/trans-openmp.cc:4100 #, gcc-internal-format msgid "%<uses_allocators%> clause with traits and memory spaces" -msgstr "" +msgstr "%<uses_allocators%>-Klausel mit Traits und Speicherbereichen" #: fortran/trans-openmp.cc:5024 #, gcc-internal-format msgid "%<!$OMP %s%> at %L requires %<-fopenmp-allocators%>" -msgstr "" +msgstr "%<!$OMP %s%> bei %L erfordert %<-fopenmp-allocators%>" #: fortran/trans-openmp.cc:5027 #, gcc-internal-format msgid "All files that might deallocate such a variable must be compiled with %<-fopenmp-allocators%>" -msgstr "" +msgstr "Alle Dateien, die eine solche Variable freigeben könnten, müssen mit %<-fopenmp-allocators%> kompiliert werden" #: fortran/trans-openmp.cc:5030 #, gcc-internal-format msgid "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, INTENT(OUT) for allocatable dummy arguments, and reallocation of allocatable components allocated with an OpenMP allocator" -msgstr "" +msgstr "Dazu gehören explizites DEALLOCATE, Neuzuweisung bei intrinsischer Zuweisung, INTENT(OUT) für allozierbare Dummy-Argumente und Neuzuweisung von allozierbaren Komponenten, die mit einem OpenMP-Allokator alloziert wurden" #: fortran/trans-openmp.cc:5607 fortran/trans-openmp.cc:5627 -#, fuzzy, gcc-internal-format -#| msgid "non-rectangular loop nest with step other than constant 1 or -1 for %qs" +#, gcc-internal-format msgid "non-rectangular loop nest with non-constant step for %qs" -msgstr "Nichtrechteckige Schleifenschachtelung mit Schrittweite ungleich 1 oder -1 für %qs" +msgstr "Nichtrechteckige Schleifenschachtelung mit nichtkonstanter Schrittweite für %qs" #: fortran/trans-openmp.cc:5629 #, gcc-internal-format @@ -82179,24 +81936,22 @@ msgstr "Argument für CAP muss eine Konstante oder eine Variable vom Typ CHAR se #: m2/gm2-gcc/m2expr.cc:4029 #, gcc-internal-format msgid "constant literal %qs exceeds internal ZTYPE range" -msgstr "" +msgstr "Konstantenliteral %qs überschreitet internen ZTYPE-Bereich" #: m2/gm2-gcc/m2expr.cc:3949 #, gcc-internal-format msgid "constant literal %qs contains %qc, expected 0 or 1" -msgstr "" +msgstr "Konstantenliteral %qs enthält %qc, 0 oder 1 erwartet" #: m2/gm2-gcc/m2expr.cc:3964 m2/gm2-gcc/m2expr.cc:3976 -#, fuzzy, gcc-internal-format -#| msgid "language dialect differs %qs, expected %qs" +#, gcc-internal-format msgid "constant literal %qs contains %qc, expected %qs" -msgstr "Sprachdialekt ist %qs, erwartet wird jedoch %qs" +msgstr "Konstantenliteral %qs enthält %qc, %qs erwartet" #: m2/gm2-gcc/m2expr.cc:3995 -#, fuzzy, gcc-internal-format -#| msgid "target & host is %qs:%qs, expected %qs:%qs" +#, gcc-internal-format msgid "constant literal %qs contains %qc, expected %qs or %qs" -msgstr "Ziel und Gastgeber sind %qs:%qs, erwartet werden jedoch %qs:%qs" +msgstr "Konstantenliteral %qs enthält %qc, erwartet wird %qs oder %qs" #: m2/gm2-gcc/m2expr.cc:4061 #, gcc-internal-format @@ -83358,10 +83113,11 @@ msgstr "der Rückgabewert vom Typ %qT wird ignoriert, muss aber verwendet werden msgid "unused name %qE" msgstr "unverwendeter Name %qE" +# Ich teile diesen Humor nicht. -- Roland Illig #: rust/resolve/rust-ast-resolve-expr.cc:167 #, gcc-internal-format, gfc-internal-format msgid "are you trying to break %s? how dare you?" -msgstr "" +msgstr "Wert »%s« kann in diesem Bereich nicht gefunden werden" #~ msgid "to generate dependencies you must specify '-fcpp' " #~ msgstr "um Abhängigkeiten zu erzeugen, müssen Sie %<-fcpp%> angeben" From de0886d48032332d10e4acb5d15c8789b281b6fe Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Mon, 25 Mar 2024 15:32:20 -0400 Subject: [PATCH 245/551] c++: broken direct-init with trailing array member [PR114439] can_init_array_with_p is wrongly saying that the init for 's' here: struct S { int *list = arr; int arr[]; }; struct A { A() {} S s[2]{}; }; is invalid. But as process_init_constructor_array says, for "non-constant initialization of trailing elements with no explicit initializers" we use a VEC_INIT_EXPR wrapped in a TARGET_EXPR, built in process_init_constructor. Unfortunately we didn't have a test for this scenario so I didn't realize can_init_array_with_p must handle it. PR c++/114439 gcc/cp/ChangeLog: * init.cc (can_init_array_with_p): Return true for a VEC_INIT_EXPR wrapped in a TARGET_EXPR. gcc/testsuite/ChangeLog: * g++.dg/init/array65.C: New test. --- gcc/cp/init.cc | 6 ++++- gcc/testsuite/g++.dg/init/array65.C | 38 +++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/init/array65.C diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc index dbd37d47cbf5..a93ce00800c4 100644 --- a/gcc/cp/init.cc +++ b/gcc/cp/init.cc @@ -950,12 +950,16 @@ can_init_array_with_p (tree type, tree init) mem-initializers of a constructor. */ if (DECL_DEFAULTED_FN (current_function_decl)) return true; - /* As an extension, we allow copying from a compound literal. */ if (TREE_CODE (init) == TARGET_EXPR) { init = TARGET_EXPR_INITIAL (init); + /* As an extension, we allow copying from a compound literal. */ if (TREE_CODE (init) == CONSTRUCTOR) return CONSTRUCTOR_C99_COMPOUND_LITERAL (init); + /* VEC_INIT_EXPR is used for non-constant initialization of trailing + elements with no explicit initializers. */ + else if (TREE_CODE (init) == VEC_INIT_EXPR) + return true; } return false; diff --git a/gcc/testsuite/g++.dg/init/array65.C b/gcc/testsuite/g++.dg/init/array65.C new file mode 100644 index 000000000000..0b144f45a9d9 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array65.C @@ -0,0 +1,38 @@ +// PR c++/114439 +// { dg-do compile { target c++11 } } + +struct S { + int *list = arr; + __extension__ int arr[]; +}; + +struct R { + int *list = arr; + int arr[2]; +}; + +struct A { + A() {} + S s[2]{}; +}; + +struct A2 { + A2() {} + S s[2]{ {}, {} }; +}; + +struct B { + B() {} + R r[2]{}; +}; + +struct B2 { + B2() {} + R r[2]{ {}, {} }; +}; + +struct S1 { S1(); }; +struct S2 { + S2() {} + S1 a[1] {}; +}; From 8651991fe2ea90a7276e91673b15b5c3865f14d7 Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Fri, 15 Mar 2024 09:23:28 -0400 Subject: [PATCH 246/551] c++: ICE with noexcept and local specialization, again [PR114349] Patrick noticed that my r14-9339-gdc6c3bfb59baab patch is wrong; we're dealing with a noexcept-spec there, not a noexcept-expr, so setting cp_noexcept_operand et al is incorrect. Back to the drawing board then. To fix noexcept84.C, we should probably avoid doing push_to_top_level in certain cases. maybe_push_to_top_level didn't work here as-is, so I changed it to not push to top level if decl_function_context is non-null, when we are not dealing with a lambda. This also fixes c++/114349, introduced by r14-9339. PR c++/114349 gcc/cp/ChangeLog: * name-lookup.cc (maybe_push_to_top_level): For a non-lambda, don't push to top level if decl_function_context is non-null. * pt.cc (maybe_instantiate_noexcept): Use maybe_push_to_top_level. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/noexcept85.C: New test. * g++.dg/cpp0x/noexcept86.C: New test. --- gcc/cp/name-lookup.cc | 11 ++++++--- gcc/cp/pt.cc | 11 ++------- gcc/testsuite/g++.dg/cpp0x/noexcept85.C | 33 +++++++++++++++++++++++++ gcc/testsuite/g++.dg/cpp0x/noexcept86.C | 25 +++++++++++++++++++ 4 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/noexcept85.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/noexcept86.C diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc index dce4caf89819..7af7f00e34c2 100644 --- a/gcc/cp/name-lookup.cc +++ b/gcc/cp/name-lookup.cc @@ -8664,10 +8664,13 @@ maybe_push_to_top_level (tree d) { /* Push if D isn't function-local, or is a lambda function, for which name resolution is already done. */ - bool push_to_top - = !(current_function_decl - && !LAMBDA_FUNCTION_P (d) - && decl_function_context (d) == current_function_decl); + const bool push_to_top + = (LAMBDA_FUNCTION_P (d) + || (TREE_CODE (d) == TYPE_DECL + && TREE_TYPE (d) + && LAMBDA_TYPE_P (TREE_TYPE (d))) + || !current_function_decl + || !decl_function_context (d)); if (push_to_top) push_to_top_level (); diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 8cf0d5b7a8d8..7b00a8615d28 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -26855,7 +26855,7 @@ maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain) } else if (push_tinst_level (fn)) { - push_to_top_level (); + const bool push_to_top = maybe_push_to_top_level (fn); push_access_scope (fn); push_deferring_access_checks (dk_no_deferred); input_location = DECL_SOURCE_LOCATION (fn); @@ -26878,17 +26878,10 @@ maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain) if (orig_fn) ++processing_template_decl; - ++cp_unevaluated_operand; - ++c_inhibit_evaluation_warnings; - ++cp_noexcept_operand; /* Do deferred instantiation of the noexcept-specifier. */ noex = tsubst_expr (DEFERRED_NOEXCEPT_PATTERN (noex), DEFERRED_NOEXCEPT_ARGS (noex), tf_warning_or_error, fn); - --cp_unevaluated_operand; - --c_inhibit_evaluation_warnings; - --cp_noexcept_operand; - /* Build up the noexcept-specification. */ spec = build_noexcept_spec (noex, tf_warning_or_error); @@ -26898,7 +26891,7 @@ maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain) pop_deferring_access_checks (); pop_access_scope (fn); pop_tinst_level (); - pop_from_top_level (); + maybe_pop_from_top_level (push_to_top); } else spec = noexcept_false_spec; diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept85.C b/gcc/testsuite/g++.dg/cpp0x/noexcept85.C new file mode 100644 index 000000000000..b415bb46bc94 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept85.C @@ -0,0 +1,33 @@ +// PR c++/114349 +// { dg-do compile { target c++11 } } + +using A = struct {}; +template <template <typename> class, typename, typename> +using B = A; +template <typename T> +using C = typename T::D; +struct E { + using D = B<C, int, A>; +}; +template <class> constexpr bool foo (A) { return false; } +template <class T> struct F { + using G = T; + using H = E; + F(const F &); + void operator=(F) noexcept(foo <G> (H::D{})); +}; +template <typename, typename, typename> +using I = F<int>; +template <typename K, typename V, typename H = K> +using J = I<K, V, H>; +struct K { + typedef J<long, char> L; + L k; + K(); +}; +struct M { + bool bar () const; + K::L m; +}; +K n; +bool M::bar () const { n.k = m; return true; } diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept86.C b/gcc/testsuite/g++.dg/cpp0x/noexcept86.C new file mode 100644 index 000000000000..2d040c090f50 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/noexcept86.C @@ -0,0 +1,25 @@ +// PR c++/114349 +// { dg-do compile { target c++14 } } + +struct B +{ + int i; +}; + +template <bool BA> +void +goo () +{ + constexpr bool is_yes = BA; + struct C + { + static auto g(B b) noexcept(is_yes) { } + }; + C::g({}); +} + +void +x () +{ + goo<false>(); +} From 7e6cdec4d3e40c6f29b9198f26d724a3ac6d1555 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Tue, 26 Mar 2024 00:17:13 +0000 Subject: [PATCH 247/551] Daily bump. --- gcc/ChangeLog | 31 +++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 13 +++++++++++++ gcc/m2/ChangeLog | 6 ++++++ gcc/po/ChangeLog | 8 ++++++++ gcc/testsuite/ChangeLog | 23 +++++++++++++++++++++++ libgcc/ChangeLog | 5 +++++ libgomp/ChangeLog | 8 ++++++++ libstdc++-v3/ChangeLog | 5 +++++ 9 files changed, 100 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5f2943b7645..1ae9f0db094e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,34 @@ +2024-03-25 Richard Biener <rguenther@suse.de> + + * config.gcc (amdgcn): Add gfx1036 entries. + * config/gcn/gcn-hsa.h (NO_XNACK): Likewise. + (gcn_local_sym_hash): Likewise. + * config/gcn/gcn-opts.h (enum processor_type): Likewise. + (TARGET_GFX1036): New macro. + * config/gcn/gcn.cc (gcn_option_override): Handle gfx1036. + (gcn_omp_device_kind_arch_isa): Likewise. + (output_file_start): Likewise. + * config/gcn/gcn.h (TARGET_CPU_CPP_BUILTINS): Add __gfx1036__. + (TARGET_CPU_CPP_BUILTINS): Rename __gfx1030 to __gfx1030__. + * config/gcn/gcn.opt: Add gfx1036. + * config/gcn/mkoffload.cc (EF_AMDGPU_MACH_AMDGCN_GFX1036): New. + (main): Handle gfx1036. + * config/gcn/t-omp-device: Add gfx1036 isa. + * doc/install.texi (amdgcn): Add gfx1036. + * doc/invoke.texi (-march): Likewise. + +2024-03-25 Pan Li <pan2.li@intel.com> + + * config/riscv/riscv-c.cc (riscv_pragma_intrinsic): Remove error + when V is disabled and init the RVV types and intrinic APIs. + * config/riscv/riscv-vector-builtins.cc (expand_builtin): Report + error if V ext is disabled. + * config/riscv/riscv.cc (riscv_return_value_is_vector_type_p): + Ditto. + (riscv_arguments_is_vector_type_p): Ditto. + (riscv_vector_cc_function_p): Ditto. + * config/riscv/riscv_vector.h: Remove error if V is disable. + 2024-03-23 John David Anglin <danglin@gcc.gnu.org> * config/pa/pa.cc (pa_output_global_address): Handle diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 2f662196fa7b..e0ed38864a62 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240325 +20240326 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9d49e8f64e7e..d6f6dba585e9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,16 @@ +2024-03-25 Marek Polacek <polacek@redhat.com> + + PR c++/114349 + * name-lookup.cc (maybe_push_to_top_level): For a non-lambda, + don't push to top level if decl_function_context is non-null. + * pt.cc (maybe_instantiate_noexcept): Use maybe_push_to_top_level. + +2024-03-25 Marek Polacek <polacek@redhat.com> + + PR c++/114439 + * init.cc (can_init_array_with_p): Return true for a VEC_INIT_EXPR + wrapped in a TARGET_EXPR. + 2024-03-22 Marek Polacek <polacek@redhat.com> PR c++/59465 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index 7934bcd77765..7771d37e5440 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,9 @@ +2024-03-25 Gaius Mulley <gaiusmod2@gmail.com> + + * Make-lang.in (doc/m2.pdf): Add line break. + * target-independent/m2/Builtins.texi: Rebuilt. + * target-independent/m2/gm2-libs.texi: Rebuilt. + 2024-03-23 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114444 diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 0aab431e323b..2f02ef33aa2b 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,11 @@ +2024-03-25 Joseph Myers <josmyers@redhat.com> + + * de.po: Update. + +2024-03-25 Joseph Myers <josmyers@redhat.com> + + * sv.po: Update. + 2024-03-19 Joseph Myers <josmyers@redhat.com> * de.po: Update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e7939febd1e9..da3dfba321c1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,26 @@ +2024-03-25 Marek Polacek <polacek@redhat.com> + + PR c++/114349 + * g++.dg/cpp0x/noexcept85.C: New test. + * g++.dg/cpp0x/noexcept86.C: New test. + +2024-03-25 Marek Polacek <polacek@redhat.com> + + PR c++/114439 + * g++.dg/init/array65.C: New test. + +2024-03-25 Pan Li <pan2.li@intel.com> + + * gcc.target/riscv/rvv/base/pragma-1.c: Remove. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-1.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-2.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-3.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-4.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-5.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-6.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c: New test. + 2024-03-23 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114443 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 4e8c3b3c8477..ad26c65b7aa0 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2024-03-25 Max Filippov <jcmvbkbc@gmail.com> + + * unwind-arm-common.inc (__gnu_personality_sigframe_fdpic): Cast + last argument of _Unwind_VRS_Set to void *. + 2024-03-22 Thomas Neumann <tneumann@users.sourceforge.net> PR libgcc/111731 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 49949fc790ba..d45be92a8a4c 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,11 @@ +2024-03-25 Richard Biener <rguenther@suse.de> + + * plugin/plugin-gcn.c (EF_AMDGPU_MACH): GFX1036. + (gcn_gfx1103_s): New. + (isa_hsa_name): Handle gfx1036. + (isa_code): Likewise. + (max_isa_vgprs): Likewise. + 2024-03-22 Kwok Cheung Yeung <kcyeung@baylibre.com> * config/accel/target-indirect.c: Include string.h and hashtab.h. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8e3368d8065f..80e3e35a6cd5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2024-03-25 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/std/text_encoding/requirements.cc: #undef the + correct macro. + 2024-03-23 Jonathan Wakely <jwakely@redhat.com> * include/std/format (formatter): Disable specializations that From bb819067b3037dbc847aef6c46b8dc6cd5b50962 Mon Sep 17 00:00:00 2001 From: YunQiang Su <syq@gcc.gnu.org> Date: Wed, 20 Mar 2024 16:25:04 +0800 Subject: [PATCH 248/551] MIPS: Predefine __mips_strict_alignment if STRICT_ALIGNMENT Arm32 predefines __ARM_FEATURE_UNALIGNED if -mno-unaligned-access, and RISC-V predefines __riscv_misaligned_avoid. Let's define __mips_strict_alignment for MIPSr6 and -mstrict-align is used. Note that, this macro is always defined for pre-R6. gcc * config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Predefine __mips_strict_alignment if STRICT_ALIGNMENT. --- gcc/config/mips/mips.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 6444a68dfd58..616a275b918c 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -694,6 +694,9 @@ struct mips_cpu_info { builtin_define ("__mips_compact_branches_always"); \ else \ builtin_define ("__mips_compact_branches_optimal"); \ + \ + if (STRICT_ALIGNMENT) \ + builtin_define ("__mips_strict_alignment"); \ } \ while (0) From 4470611e20f3217ee81647b01fda65b6a62229aa Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 26 Mar 2024 09:46:06 +0100 Subject: [PATCH 249/551] tree-optimization/114027 - fix testcase The following fixes out-of-bounds read in the testcase. PR tree-optimization/114027 * gcc.dg/vect/pr114027.c: Fix iteration count. --- gcc/testsuite/gcc.dg/vect/pr114027.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/vect/pr114027.c b/gcc/testsuite/gcc.dg/vect/pr114027.c index ead9cdd982d7..b3f3e30e15fc 100644 --- a/gcc/testsuite/gcc.dg/vect/pr114027.c +++ b/gcc/testsuite/gcc.dg/vect/pr114027.c @@ -20,7 +20,7 @@ int f[] = { 1, 1, 1, 1, 1, 1, 1, 1, int main () { - if (foo (f, 16) != 2) + if (foo (f, 8) != 2) __builtin_abort (); return 0; } From 10accfde57951db9f726e996f1b0be165df00f5c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 26 Mar 2024 10:03:27 +0100 Subject: [PATCH 250/551] c-family, c++: Handle EXCESS_PRECISION_EXPR in pretty printers [PR112724] I've noticed that the c-c++-common/gomp/depobj-3.c test FAILs on i686-linux: PASS: c-c++-common/gomp/depobj-3.c -std=c++17 at line 17 (test for warnings, line 15) FAIL: c-c++-common/gomp/depobj-3.c -std=c++17 at line 39 (test for warnings, line 37) PASS: c-c++-common/gomp/depobj-3.c -std=c++17 at line 43 (test for errors, line 41) PASS: c-c++-common/gomp/depobj-3.c -std=c++17 (test for warnings, line 45) FAIL: c-c++-common/gomp/depobj-3.c -std=c++17 (test for excess errors) Excess errors: /home/jakub/src/gcc/gcc/testsuite/c-c++-common/gomp/depobj-3.c:37:38: warning: the 'destroy' expression ''excess_precision_expr' not supported by dump_expr<expression error>' should +be the same as the 'depobj' argument 'obj' [-Wopenmp] The following patch replaces that 'excess_precision_expr' not supported by dump_expr<expression error> with (float)(((long double)a) + (long double)5) Still ugly and doesn't actually fix the FAIL (will deal with that incrementally), but at least valid C/C++ and shows the excess precision handling in action. 2024-03-26 Jakub Jelinek <jakub@redhat.com> PR c++/112724 gcc/c-family/ * c-pretty-print.cc (pp_c_cast_expression, c_pretty_printer::expression): Handle EXCESS_PRECISION_EXPR like NOP_EXPR. gcc/cp/ * error.cc (dump_expr): Handle EXCESS_PRECISION_EXPR like NOP_EXPR. --- gcc/c-family/c-pretty-print.cc | 2 ++ gcc/cp/error.cc | 1 + 2 files changed, 3 insertions(+) diff --git a/gcc/c-family/c-pretty-print.cc b/gcc/c-family/c-pretty-print.cc index 45045fb2242f..da7934d783a5 100644 --- a/gcc/c-family/c-pretty-print.cc +++ b/gcc/c-family/c-pretty-print.cc @@ -2327,6 +2327,7 @@ pp_c_cast_expression (c_pretty_printer *pp, tree e) case FIX_TRUNC_EXPR: CASE_CONVERT: case VIEW_CONVERT_EXPR: + case EXCESS_PRECISION_EXPR: if (!location_wrapper_p (e)) pp_c_type_cast (pp, TREE_TYPE (e)); pp_c_cast_expression (pp, TREE_OPERAND (e, 0)); @@ -2753,6 +2754,7 @@ c_pretty_printer::expression (tree e) case FIX_TRUNC_EXPR: CASE_CONVERT: case VIEW_CONVERT_EXPR: + case EXCESS_PRECISION_EXPR: pp_c_cast_expression (this, e); break; diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc index d3fcac70ea17..7074845154e3 100644 --- a/gcc/cp/error.cc +++ b/gcc/cp/error.cc @@ -2662,6 +2662,7 @@ dump_expr (cxx_pretty_printer *pp, tree t, int flags) CASE_CONVERT: case IMPLICIT_CONV_EXPR: case VIEW_CONVERT_EXPR: + case EXCESS_PRECISION_EXPR: { tree op = TREE_OPERAND (t, 0); From 94b91b2786531ed8e2d07a6ad1191b5dfa0141e5 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 26 Mar 2024 10:05:23 +0100 Subject: [PATCH 251/551] cfgloopmanip, i386: Fix comment typos I've noticed a comment typo in x86-tune.def and cfgloopmanip.cc has the same typo as well. 2024-03-26 Jakub Jelinek <jakub@redhat.com> * cfgloopmanip.cc (update_loop_exit_probability_scale_dom_bbs): Fix comment typo - multple -> multiple. * config/i386/x86-tune.def (X86_TUNE_ACCUMULATE_OUTGOING_ARGS): Likewise. --- gcc/cfgloopmanip.cc | 2 +- gcc/config/i386/x86-tune.def | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/cfgloopmanip.cc b/gcc/cfgloopmanip.cc index 946cbe6085cc..3707db2fdb39 100644 --- a/gcc/cfgloopmanip.cc +++ b/gcc/cfgloopmanip.cc @@ -669,7 +669,7 @@ update_loop_exit_probability_scale_dom_bbs (class loop *loop, + old_exit_count - exit_edge->count (); } else - /* If there are multple blocks, just scale. */ + /* If there are multiple blocks, just scale. */ scale_dominated_blocks_in_loop (loop, exit_edge->src, exit_edge->src->count - exit_edge->count (), exit_edge->src->count - old_exit_count); diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def index ae2797b7cc2f..710009712f68 100644 --- a/gcc/config/i386/x86-tune.def +++ b/gcc/config/i386/x86-tune.def @@ -157,7 +157,7 @@ DEF_TUNE (X86_TUNE_FUSE_ALU_AND_BRANCH, "fuse_alu_and_branch", by push/pop instructions. This increase code size by about 5% in 32bit mode, less so in 64bit mode because parameters are passed in registers. It is considerable - win for targets without stack engine that prevents multple push operations + win for targets without stack engine that prevents multiple push operations to happen in parallel. */ DEF_TUNE (X86_TUNE_ACCUMULATE_OUTGOING_ARGS, "accumulate_outgoing_args", From 226a220d0056396e825e12435cc0da52cbd5ac56 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 26 Mar 2024 09:39:30 +0100 Subject: [PATCH 252/551] tree-optimization/114464 - verify types in recurrence vectorization The following adds missing verification of vector type compatibility to recurrence vectorization. PR tree-optimization/114464 * tree-vect-loop.cc (vectorizable_recurr): Verify the latch vector type is compatible with what we chose for the recurrence. * g++.dg/vect/pr114464.cc: New testcase. --- gcc/testsuite/g++.dg/vect/pr114464.cc | 11 +++++++++++ gcc/tree-vect-loop.cc | 22 ++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 gcc/testsuite/g++.dg/vect/pr114464.cc diff --git a/gcc/testsuite/g++.dg/vect/pr114464.cc b/gcc/testsuite/g++.dg/vect/pr114464.cc new file mode 100644 index 000000000000..0d872aae9d4d --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr114464.cc @@ -0,0 +1,11 @@ +// { dg-do compile } + +void h(unsigned char *scratch, bool carry) +{ + for (int i = 0; i < 16; i++) { + bool b = scratch[i] <<= 1; + if (carry) + scratch[i] |= 1; + carry = b; + } +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 2921a9e6aa12..f33629e9b045 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -9197,6 +9197,28 @@ vectorizable_recurr (loop_vec_info loop_vinfo, stmt_vec_info stmt_info, return false; } } + + /* Verify we have set up compatible types. */ + edge le = loop_latch_edge (LOOP_VINFO_LOOP (loop_vinfo)); + tree latch_vectype = NULL_TREE; + if (slp_node) + { + slp_tree latch_def = SLP_TREE_CHILDREN (slp_node)[le->dest_idx]; + latch_vectype = SLP_TREE_VECTYPE (latch_def); + } + else + { + tree latch_def = PHI_ARG_DEF_FROM_EDGE (phi, le); + if (TREE_CODE (latch_def) == SSA_NAME) + { + stmt_vec_info latch_def_info = loop_vinfo->lookup_def (latch_def); + latch_def_info = vect_stmt_to_vectorize (latch_def_info); + latch_vectype = STMT_VINFO_VECTYPE (latch_def_info); + } + } + if (!types_compatible_p (latch_vectype, vectype)) + return false; + /* The recurrence costs the initialization vector and one permute for each copy. */ unsigned prologue_cost = record_stmt_cost (cost_vec, 1, scalar_to_vec, From f4e92d62dccb96ade753f3a8f49be1b5f61c31f1 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 26 Mar 2024 09:11:00 +0100 Subject: [PATCH 253/551] tree-optimization/114471 - ICE with mismatching vector types The following fixes too lax verification of vector type compatibility in vectorizable_operation. When we only have a single vector size then comparing the number of elements is enough but with SLP we mix those and thus for operations like BIT_AND_EXPR we need to verify compatible element types as well. Allow sign changes for ABSU_EXPR though. PR tree-optimization/114471 * tree-vect-stmts.cc (vectorizable_operation): Verify operand types are compatible with the result type. * gcc.dg/vect/pr114471.c: New testcase. --- gcc/testsuite/gcc.dg/vect/pr114471.c | 13 +++++++++++++ gcc/tree-vect-stmts.cc | 11 ++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr114471.c diff --git a/gcc/testsuite/gcc.dg/vect/pr114471.c b/gcc/testsuite/gcc.dg/vect/pr114471.c new file mode 100644 index 000000000000..218c953e45e7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr114471.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ + +float f1, f0, fa[2]; +short sa[2]; +void quantize(short s0) +{ + _Bool ta[2] = {(fa[0] < 0), (fa[1] < 0)}; + _Bool t = ((s0 > 0) & ta[0]); + short x1 = s0 + t; + _Bool t1 = ((x1 > 0) & ta[1]); + sa[0] = x1; + sa[1] = s0 + t1; +} diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index 5a4eb136c6d9..f8d8636b139a 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -6667,7 +6667,8 @@ vectorizable_operation (vec_info *vinfo, nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out); nunits_in = TYPE_VECTOR_SUBPARTS (vectype); - if (maybe_ne (nunits_out, nunits_in)) + if (maybe_ne (nunits_out, nunits_in) + || !tree_nop_conversion_p (TREE_TYPE (vectype_out), TREE_TYPE (vectype))) return false; tree vectype2 = NULL_TREE, vectype3 = NULL_TREE; @@ -6685,7 +6686,9 @@ vectorizable_operation (vec_info *vinfo, is_invariant &= (dt[1] == vect_external_def || dt[1] == vect_constant_def); if (vectype2 - && maybe_ne (nunits_out, TYPE_VECTOR_SUBPARTS (vectype2))) + && (maybe_ne (nunits_out, TYPE_VECTOR_SUBPARTS (vectype2)) + || !tree_nop_conversion_p (TREE_TYPE (vectype_out), + TREE_TYPE (vectype2)))) return false; } if (op_type == ternary_op) @@ -6701,7 +6704,9 @@ vectorizable_operation (vec_info *vinfo, is_invariant &= (dt[2] == vect_external_def || dt[2] == vect_constant_def); if (vectype3 - && maybe_ne (nunits_out, TYPE_VECTOR_SUBPARTS (vectype3))) + && (maybe_ne (nunits_out, TYPE_VECTOR_SUBPARTS (vectype3)) + || !tree_nop_conversion_p (TREE_TYPE (vectype_out), + TREE_TYPE (vectype3)))) return false; } From 471967ab8b4c49338ba77defbe24b06cc51c0093 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 26 Mar 2024 11:06:15 +0100 Subject: [PATCH 254/551] tsan: Don't instrument non-generic AS accesses [PR111736] Similar to the asan and ubsan changes, we shouldn't instrument non-generic address space accesses with tsan, because we just have library functions which take address of the objects as generic address space pointers, so they can't handle anything else. 2024-03-26 Jakub Jelinek <jakub@redhat.com> PR sanitizer/111736 * tsan.cc (instrument_expr): Punt on non-generic address space accesses. * gcc.dg/tsan/pr111736.c: New test. --- gcc/testsuite/gcc.dg/tsan/pr111736.c | 17 +++++++++++++++++ gcc/tsan.cc | 3 +++ 2 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/tsan/pr111736.c diff --git a/gcc/testsuite/gcc.dg/tsan/pr111736.c b/gcc/testsuite/gcc.dg/tsan/pr111736.c new file mode 100644 index 000000000000..34ab88b3d4fa --- /dev/null +++ b/gcc/testsuite/gcc.dg/tsan/pr111736.c @@ -0,0 +1,17 @@ +/* PR sanitizer/111736 */ +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-fsanitize=thread -fdump-tree-optimized -ffat-lto-objects" } */ +/* { dg-final { scan-tree-dump-not "__tsan_read" "optimized" } } */ +/* { dg-final { scan-tree-dump-not "__tsan_write" "optimized" } } */ + +#ifdef __x86_64__ +#define SEG __seg_fs +#else +#define SEG __seg_gs +#endif + +void +foo (int SEG *p, int SEG *q) +{ + *q = *p; +} diff --git a/gcc/tsan.cc b/gcc/tsan.cc index e73e1d371780..590e97d397bd 100644 --- a/gcc/tsan.cc +++ b/gcc/tsan.cc @@ -139,6 +139,9 @@ instrument_expr (gimple_stmt_iterator gsi, tree expr, bool is_write) if (TREE_READONLY (base) || (VAR_P (base) && DECL_HARD_REGISTER (base))) return false; + if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (TREE_TYPE (base)))) + return false; + stmt = gsi_stmt (gsi); loc = gimple_location (stmt); rhs = is_vptr_store (stmt, expr, is_write); From c4f2c84e8fa369856aee76679590eb613724bfb0 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 26 Mar 2024 11:21:38 +0100 Subject: [PATCH 255/551] fold-const: Punt on MULT_EXPR in extract_muldiv MIN/MAX_EXPR case [PR111151] As I've tried to explain in the comments, the extract_muldiv_1 MIN/MAX_EXPR optimization is wrong for code == MULT_EXPR. If the multiplication is done in unsigned type or in signed type with -fwrapv, it is fairly obvious that max (a, b) * c in many cases isn't equivalent to max (a * c, b * c) (or min if c is negative) due to overflows, but even for signed with undefined overflow, the optimization could turn something without UB in it (where say a * c invokes UB, but max (or min) picks the other operand where b * c doesn't). As for division/modulo, I think it is in most cases safe, except if the problematic INT_MIN / -1 case could be triggered, but we can just punt for MAX_EXPR because for MIN_EXPR if one operand is INT_MIN, we'd pick that operand already. It is just for completeness, match.pd already has an optimization which turns x / -1 into -x, so the division by zero is mostly theoretical. That is also why in the testcase the i case isn't actually miscompiled without the patch, while the c and f cases are. 2024-03-26 Jakub Jelinek <jakub@redhat.com> PR middle-end/111151 * fold-const.cc (extract_muldiv_1) <case MAX_EXPR>: Punt for MULT_EXPR altogether, or for MAX_EXPR if c is -1. * gcc.c-torture/execute/pr111151.c: New test. --- gcc/fold-const.cc | 21 +++++++++++++++++++ .../gcc.c-torture/execute/pr111151.c | 21 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr111151.c diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index 299c22bf3911..8960e5289c0b 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -7104,6 +7104,27 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type, if (TYPE_UNSIGNED (ctype) != TYPE_UNSIGNED (type)) break; + /* Punt for multiplication altogether. + MAX (1U + INT_MAX, 1U) * 2U is not equivalent to + MAX ((1U + INT_MAX) * 2U, 1U * 2U), the former is + 0U, the latter is 2U. + MAX (INT_MIN / 2, 0) * -2 is not equivalent to + MIN (INT_MIN / 2 * -2, 0 * -2), the former is + well defined 0, the latter invokes UB. + MAX (INT_MIN / 2, 5) * 5 is not equivalent to + MAX (INT_MIN / 2 * 5, 5 * 5), the former is + well defined 25, the latter invokes UB. */ + if (code == MULT_EXPR) + break; + /* For division/modulo, punt on c being -1 for MAX, as + MAX (INT_MIN, 0) / -1 is not equivalent to + MIN (INT_MIN / -1, 0 / -1), the former is well defined + 0, the latter invokes UB (or for -fwrapv is INT_MIN). + MIN (INT_MIN, 0) / -1 already invokes UB, so the + transformation won't make it worse. */ + else if (tcode == MAX_EXPR && integer_minus_onep (c)) + break; + /* MIN (a, b) / 5 -> MIN (a / 5, b / 5) */ sub_strict_overflow_p = false; if ((t1 = extract_muldiv (op0, c, code, wide_type, diff --git a/gcc/testsuite/gcc.c-torture/execute/pr111151.c b/gcc/testsuite/gcc.c-torture/execute/pr111151.c new file mode 100644 index 000000000000..89255d28054a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr111151.c @@ -0,0 +1,21 @@ +/* PR middle-end/111151 */ + +int +main () +{ + unsigned a = (1U + __INT_MAX__) / 2U; + unsigned b = 1U; + unsigned c = (a * 2U > b * 2U ? a * 2U : b * 2U) * 2U; + if (c != 0U) + __builtin_abort (); + int d = (-__INT_MAX__ - 1) / 2; + int e = 10; + int f = (d * 2 > e * 5 ? d * 2 : e * 5) * 6; + if (f != 120) + __builtin_abort (); + int g = (-__INT_MAX__ - 1) / 2; + int h = 0; + int i = (g * 2 > h * 5 ? g * 2 : h * 5) / -1; + if (i != 0) + __builtin_abort (); +} From 4549b0f67d52b4f042ab89a036249545c3938b45 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 26 Mar 2024 11:25:15 +0100 Subject: [PATCH 256/551] testsuite: Add -Wno-psabi to pr113126.c test I've missed FAIL: gcc.dg/torture/pr113126.c -O0 (test for excess errors) etc. regressions on i686-linux since January. The problem is obvious Excess errors: .../gcc/testsuite/gcc.dg/torture/pr113126.c:11:1: warning: MMX vector return without MMX enabled changes the ABI [-Wpsabi] and I've added -Wno-psabi to dg-additional-options to fix that up. 2024-03-26 Jakub Jelinek <jakub@redhat.com> * gcc.dg/torture/pr113126.c: Add -Wno-psabi as dg-additional-options. --- gcc/testsuite/gcc.dg/torture/pr113126.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/testsuite/gcc.dg/torture/pr113126.c b/gcc/testsuite/gcc.dg/torture/pr113126.c index 4aa38e0a2557..ffe29799d13a 100644 --- a/gcc/testsuite/gcc.dg/torture/pr113126.c +++ b/gcc/testsuite/gcc.dg/torture/pr113126.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-additional-options "-Wno-psabi" } */ typedef float __attribute__((__vector_size__ (8))) F; typedef double __attribute__((__vector_size__ (16))) G; From 4a3a1b6b75f921d35bbfef26619e7b5cece3fcf0 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Fri, 22 Mar 2024 22:01:50 +0000 Subject: [PATCH 257/551] libstdc++: Add dg-require-cpp-feature-test to test feature test macros This adds a new dejagnu directive which can be used to make a test depend on a feature test macro such as __cpp_lib_text_encoding. This is mroe flexible than writing a new dg-require-xxx for each feature. libstdc++-v3/ChangeLog: * testsuite/lib/dg-options.exp (dg-require-cpp-feature-test): New proc. * testsuite/lib/libstdc++.exp (check_v3_target_cpp_feature_test): New proc. * testsuite/std/text_encoding/cons.cc: Use new directive to skip the test if the __cpp_lib_text_encoding feature test macro is not defined. * testsuite/std/text_encoding/requirements.cc: Likewise. --- libstdc++-v3/testsuite/lib/dg-options.exp | 9 +++++++++ libstdc++-v3/testsuite/lib/libstdc++.exp | 15 +++++++++++++++ libstdc++-v3/testsuite/std/text_encoding/cons.cc | 1 + .../testsuite/std/text_encoding/requirements.cc | 1 + 4 files changed, 26 insertions(+) diff --git a/libstdc++-v3/testsuite/lib/dg-options.exp b/libstdc++-v3/testsuite/lib/dg-options.exp index 00ca678a53a9..802bfc0b492b 100644 --- a/libstdc++-v3/testsuite/lib/dg-options.exp +++ b/libstdc++-v3/testsuite/lib/dg-options.exp @@ -277,6 +277,15 @@ proc dg-require-target-fs-lwt { args } { return } +proc dg-require-cpp-feature-test { n args } { + if { ![ check_v3_target_cpp_feature_test $args ] } { + upvar dg-do-what dg-do-what + set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"] + return + } + return +} + proc add_options_for_no_pch { flags } { # Remove any inclusion of bits/stdc++.h from the options. regsub -all -- "-include bits/stdc...h" $flags "" flags diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index 7466fb51c58b..2b31c9508269 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -1134,6 +1134,21 @@ proc v3_check_preprocessor_condition { name cond { inc "" } } { return [v3_try_preprocess name $code $flags] } +# Return 1 if libstdc++ defines macro for the current target, 0 otherwise. +proc check_v3_target_cpp_feature_test { cond } { + global cxxflags + set cxxflags_saved $cxxflags + # Use the latest standard, so that all feature test macros are defined. + # We need to do it here, because this check happens before v3-dg-runtest + # runs its loop to test multiple times with different -std options. + # This should be updated when a new -std is added. + set cxxflags "$cxxflags -std=gnu++26" + set inc "#include <version>" + set result [v3_check_preprocessor_condition cpp_feature_test "$cond" $inc] + set cxxflags $cxxflags_saved + return $result +} + # Return 1 if Debug Mode is active, 0 otherwise. proc check_v3_target_debug_mode { } { global cxxflags diff --git a/libstdc++-v3/testsuite/std/text_encoding/cons.cc b/libstdc++-v3/testsuite/std/text_encoding/cons.cc index 8fcc2ec8c3b9..4196e32ea8b7 100644 --- a/libstdc++-v3/testsuite/std/text_encoding/cons.cc +++ b/libstdc++-v3/testsuite/std/text_encoding/cons.cc @@ -1,4 +1,5 @@ // { dg-do run { target c++26 } } +// { dg-require-cpp-feature-test "__cpp_lib_text_encoding" } #include <text_encoding> #include <string_view> diff --git a/libstdc++-v3/testsuite/std/text_encoding/requirements.cc b/libstdc++-v3/testsuite/std/text_encoding/requirements.cc index 6cd71b682253..3889b2506884 100644 --- a/libstdc++-v3/testsuite/std/text_encoding/requirements.cc +++ b/libstdc++-v3/testsuite/std/text_encoding/requirements.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++26 } } +// { dg-require-cpp-feature-test __cpp_lib_text_encoding } // { dg-add-options no_pch } #include <text_encoding> From 217e778a31d68815b029f5110825cd36caefd908 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Fri, 22 Mar 2024 22:26:10 +0000 Subject: [PATCH 258/551] libstdc++: Replace stacktrace effective target with feature test Rmove the dejagnu code for checking whether std::stacktrace is supported and just use the new dg-require-cpp-feature-test directive to check for __cpp_lib_stacktrace instead. libstdc++-v3/ChangeLog: * testsuite/19_diagnostics/stacktrace/current.cc: Check for __cpp_lib_stacktrace instead of check for stacktrace ET. * testsuite/19_diagnostics/stacktrace/entry.cc: Likewise. * testsuite/19_diagnostics/stacktrace/hash.cc: Likewise. * testsuite/19_diagnostics/stacktrace/output.cc: Likewise. * testsuite/19_diagnostics/stacktrace/stacktrace.cc: Likewise. * testsuite/19_diagnostics/stacktrace/synopsis.cc: Likewise. * testsuite/19_diagnostics/stacktrace/version.cc: Likewise. * testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc: Likewise. * testsuite/lib/libstdc++.exp (check_effective_target_stacktrace): Remove. --- .../testsuite/19_diagnostics/stacktrace/current.cc | 2 +- libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc | 2 +- libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc | 2 +- .../testsuite/19_diagnostics/stacktrace/output.cc | 2 +- .../testsuite/19_diagnostics/stacktrace/stacktrace.cc | 2 +- .../testsuite/19_diagnostics/stacktrace/synopsis.cc | 2 +- .../testsuite/19_diagnostics/stacktrace/version.cc | 2 +- .../23_containers/vector/debug/assign4_backtrace_neg.cc | 2 +- libstdc++-v3/testsuite/lib/libstdc++.exp | 8 -------- 9 files changed, 8 insertions(+), 16 deletions(-) diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc index a27836d27af2..b1af5f74fb2f 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/current.cc @@ -1,6 +1,6 @@ // { dg-options "-lstdc++exp" } // { dg-do run { target c++23 } } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } #include <stacktrace> #include <memory> diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc index ab016d564001..bb348ebef8fd 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/entry.cc @@ -1,6 +1,6 @@ // { dg-options "-lstdc++exp" } // { dg-do run { target c++23 } } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } #include <stacktrace> #include "testsuite_hooks.h" diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc index 21705098ff0f..2176596ae5c9 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/hash.cc @@ -1,6 +1,6 @@ // { dg-options "-lstdc++exp" } // { dg-do run { target c++23 } } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } #include <stacktrace> #include <testsuite_allocator.h> diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc index 67f1e0cebaf9..e27aea1f5089 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/output.cc @@ -1,6 +1,6 @@ // { dg-options "-lstdc++exp" } // { dg-do run { target c++23 } } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } // { dg-add-options no_pch } #include <stacktrace> diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc index 5dfa76951df5..070c4157471c 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/stacktrace.cc @@ -1,6 +1,6 @@ // { dg-options "-lstdc++exp" } // { dg-do run { target c++23 } } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } #include <stacktrace> #include "testsuite_allocator.h" diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc index 9e775b86ac97..b99d382ec267 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/synopsis.cc @@ -1,5 +1,5 @@ // { dg-do compile { target c++23 } } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } // { dg-require-normal-namespace "" } // { dg-add-options no_pch } diff --git a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc index 21c2d48b7b50..1fc7722a6f40 100644 --- a/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc +++ b/libstdc++-v3/testsuite/19_diagnostics/stacktrace/version.cc @@ -1,5 +1,5 @@ // { dg-do preprocess { target c++23 } } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } // { dg-add-options no_pch } #include <version> diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc index 43a82fb12010..2f7238c590c3 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc @@ -1,6 +1,6 @@ // { dg-do run { xfail *-*-* } } // { dg-options "-D_GLIBCXX_DEBUG_BACKTRACE -lstdc++exp" } -// { dg-require-effective-target stacktrace } +// { dg-require-cpp-feature-test __cpp_lib_stacktrace } #include <debug/vector> #include <debug/checks.h> diff --git a/libstdc++-v3/testsuite/lib/libstdc++.exp b/libstdc++-v3/testsuite/lib/libstdc++.exp index 2b31c9508269..67a63f5b5f39 100644 --- a/libstdc++-v3/testsuite/lib/libstdc++.exp +++ b/libstdc++-v3/testsuite/lib/libstdc++.exp @@ -1570,14 +1570,6 @@ proc check_effective_target_std_allocator_new { } { }] } -# Return 1 if libstdc++ was built as --enable-libstdcxx-backtrace -proc check_effective_target_stacktrace { } { - return [check_v3_target_prop_cached et_stacktrace { - set cond "_GLIBCXX_HAVE_STACKTRACE && _GLIBCXX_HOSTED" - return [v3_check_preprocessor_condition stacktrace $cond] - }] -} - # Return 1 if RTTI is enabled by the current test flags. proc check_effective_target_rtti { } { return [check_v3_target_prop_cached et_rtti { From cab53aae43cf94171b01320c08302e47a5daa391 Mon Sep 17 00:00:00 2001 From: Richard Ball <richard.ball@arm.com> Date: Tue, 26 Mar 2024 13:54:31 +0000 Subject: [PATCH 259/551] aarch64: Fix SCHEDULER_IDENT for Cortex-A510 and Cortex-A520 The SCHEDULER_IDENT for these two CPUs was incorrectly set to cortexa55. This can cause sub-optimal asm to be generated. gcc/ChangeLog: PR target/114272 * config/aarch64/aarch64-cores.def (AARCH64_CORE): Change SCHEDULER_IDENT from cortexa55 to cortexa53 for Cortex-A510 and Cortex-A520. --- gcc/config/aarch64/aarch64-cores.def | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def index 7ebefcf543b6..f69fc212d564 100644 --- a/gcc/config/aarch64/aarch64-cores.def +++ b/gcc/config/aarch64/aarch64-cores.def @@ -169,9 +169,9 @@ AARCH64_CORE("cortex-r82", cortexr82, cortexa53, V8R, (), cortexa53, 0x41, 0xd15 /* Armv9.0-A Architecture Processors. */ /* Arm ('A') cores. */ -AARCH64_CORE("cortex-a510", cortexa510, cortexa55, V9A, (SVE2_BITPERM, MEMTAG, I8MM, BF16), cortexa53, 0x41, 0xd46, -1) +AARCH64_CORE("cortex-a510", cortexa510, cortexa53, V9A, (SVE2_BITPERM, MEMTAG, I8MM, BF16), cortexa53, 0x41, 0xd46, -1) -AARCH64_CORE("cortex-a520", cortexa520, cortexa55, V9_2A, (SVE2_BITPERM, MEMTAG), cortexa53, 0x41, 0xd80, -1) +AARCH64_CORE("cortex-a520", cortexa520, cortexa53, V9_2A, (SVE2_BITPERM, MEMTAG), cortexa53, 0x41, 0xd80, -1) AARCH64_CORE("cortex-a710", cortexa710, cortexa57, V9A, (SVE2_BITPERM, MEMTAG, I8MM, BF16), neoversen2, 0x41, 0xd47, -1) From 2f47ca046eecf8f2fcae23df3ccee44d943ef512 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Tue, 26 Mar 2024 10:21:53 -0400 Subject: [PATCH 260/551] c++/modules testsuite: fix a couple of dg-module-do directives gcc/testsuite/ChangeLog: * g++.dg/modules/decltype-1_a.C: Add missing } to dg-module-do directive. * g++.dg/modules/lambda-5_a.C: Likewise. --- gcc/testsuite/g++.dg/modules/decltype-1_a.C | 2 +- gcc/testsuite/g++.dg/modules/lambda-5_a.C | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/g++.dg/modules/decltype-1_a.C b/gcc/testsuite/g++.dg/modules/decltype-1_a.C index ca66e8b598a7..e4202a26de4d 100644 --- a/gcc/testsuite/g++.dg/modules/decltype-1_a.C +++ b/gcc/testsuite/g++.dg/modules/decltype-1_a.C @@ -1,5 +1,5 @@ // PR c++/105322 -// { dg-module-do link +// { dg-module-do link } // { dg-additional-options -fmodules-ts } // { dg-module-cmi pr105322.Decltype } diff --git a/gcc/testsuite/g++.dg/modules/lambda-5_a.C b/gcc/testsuite/g++.dg/modules/lambda-5_a.C index 6b589d4965cf..37d0e77b1e1e 100644 --- a/gcc/testsuite/g++.dg/modules/lambda-5_a.C +++ b/gcc/testsuite/g++.dg/modules/lambda-5_a.C @@ -1,5 +1,5 @@ // PR c++/105322 -// { dg-module-do link +// { dg-module-do link } // { dg-additional-options -fmodules-ts } // { dg-module-cmi pr105322.Lambda } From c0e199e4dbe652cd16d7248f0bfe166540f5d95b Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Tue, 26 Mar 2024 10:39:48 -0400 Subject: [PATCH 261/551] c++: add fixed test [PR100557] We used to hit the "Error reporting routines re-entered." ICE here but it was fixed by Patrick's r14-3809. PR c++/100557 gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-pr100557.C: New test. --- .../g++.dg/cpp2a/concepts-pr100557.C | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-pr100557.C diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr100557.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr100557.C new file mode 100644 index 000000000000..8dcd0eaca517 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr100557.C @@ -0,0 +1,21 @@ +// PR c++/100557 +// { dg-do compile { target c++20 } } + +template <typename _Tp> _Tp declval(); + +struct print_tag_; + +bool tag_invoke(print_tag_, auto); +bool tag_invoke(print_tag_, auto obj) requires requires { *obj; }; + +template <typename CPO, typename... Args> +auto try_tag_invoke() noexcept(tag_invoke(declval<CPO>, declval<Args>()...)) // { dg-error "no matching function for call" } + -> decltype(tag_invoke(CPO(), declval<Args>()...)); + +struct print_tag_ { + void operator()(auto... args) noexcept(noexcept( try_tag_invoke<print_tag_, decltype(args)...>())); +} print; + +void foo() { + print(0); +} From b1af867d22e3108402c62f97d8fcd1df303c9dab Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Tue, 26 Mar 2024 15:33:52 +0000 Subject: [PATCH 262/551] PR modula2/114478 isnormal builtin unavailable from m2 This patch adds isnormal (and isgreater, isless, isgreaterequal, islessequal, islessgreater, isunordered) c99 macro similar prototyped builtins to m2. gcc/m2/ChangeLog: PR modula2/114478 * gm2-gcc/m2builtins.cc (struct builtin_macro_definition): New struct. (lookup_builtin_macro): New function. (m2builtins_BuildBuiltinTree): Rewrite to lookup builtin function and builtin macro. (lookup_builtin_function): New function. (define_builtin): Rename parameter type to prototype push macro definition to builtin_macros vector. (define_builtin_ext): New function. (define_builtin_math): New function. (m2builtins_init): Add isgreater, isless, isgreaterequal, islessequal, islessgreater, isunordered, isnormal to macro definitions. * gm2-libs/Builtins.def (isgreater): New procedure function. (isgreaterf): Ditto. (isgreaterl): Ditto. (isgreaterequal): Ditto. (isgreaterequalf): Ditto. (isgreaterequall): Ditto. (isless): Ditto. (islessf): Ditto. (islessl): Ditto. (islessequal): Ditto. (islessequalf): Ditto. (islessequall): Ditto. (islessgreater): Ditto. (islessgreaterf): Ditto. (islessgreaterl): Ditto. (isunordered): Ditto. (isunorderedf): Ditto. (isunorderedl): Ditto. (iseqsig): Ditto. (iseqsigf): Ditto. (iseqsigl): Ditto. (isnormal): Ditto. (isnormalf): Ditto. (isnormall): Ditto. (isinf_sign): Ditto. (isinf_signf): Ditto. (isinf_signl): Ditto. * gm2-libs/Builtins.mod (isgreater): New procedure function. (isgreaterf): Ditto. (isgreaterl): Ditto. (isgreaterequal): Ditto. (isgreaterequalf): Ditto. (isgreaterequall): Ditto. (isless): Ditto. (islessf): Ditto. (islessl): Ditto. (islessequal): Ditto. (islessequalf): Ditto. (islessequall): Ditto. (islessgreater): Ditto. (islessgreaterf): Ditto. (islessgreaterl): Ditto. (isunordered): Ditto. (isunorderedf): Ditto. (isunorderedl): Ditto. (iseqsig): Ditto. (iseqsigf): Ditto. (iseqsigl): Ditto. (isnormal): Ditto. (isnormalf): Ditto. (isnormall): Ditto. (isinf_sign): Ditto. (isinf_signf): Ditto. (isinf_signl): Ditto. gcc/testsuite/ChangeLog: PR modula2/114478 * gm2/builtins/run/pass/builtins-run-pass.exp: New test. * gm2/builtins/run/pass/testcomparisons.mod: New test. * gm2/builtins/run/pass/testisnormal.mod: New test. * gm2/pimlib/run/pass/testchar.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-gcc/m2builtins.cc | 147 +++++++++++++--- gcc/m2/gm2-libs/Builtins.def | 40 ++++- gcc/m2/gm2-libs/Builtins.mod | 161 ++++++++++++++++-- .../builtins/run/pass/builtins-run-pass.exp | 36 ++++ .../gm2/builtins/run/pass/testcomparisons.mod | 77 +++++++++ .../gm2/builtins/run/pass/testisnormal.mod | 49 ++++++ .../gm2/pimlib/run/pass/testchar.mod | 71 ++++++++ 7 files changed, 539 insertions(+), 42 deletions(-) create mode 100644 gcc/testsuite/gm2/builtins/run/pass/builtins-run-pass.exp create mode 100644 gcc/testsuite/gm2/builtins/run/pass/testcomparisons.mod create mode 100644 gcc/testsuite/gm2/builtins/run/pass/testisnormal.mod create mode 100644 gcc/testsuite/gm2/pimlib/run/pass/testchar.mod diff --git a/gcc/m2/gm2-gcc/m2builtins.cc b/gcc/m2/gm2-gcc/m2builtins.cc index e4fc6a50c1cc..cfb4751e15ae 100644 --- a/gcc/m2/gm2-gcc/m2builtins.cc +++ b/gcc/m2/gm2-gcc/m2builtins.cc @@ -393,6 +393,13 @@ struct builtin_type_info tree (*functionHandler) (location_t, tree); }; +struct GTY(()) builtin_macro_definition +{ + const char *name; + tree function_node; + tree return_node; +}; + static GTY (()) tree sizetype_endlink; static GTY (()) tree unsigned_endlink; static GTY (()) tree endlink; @@ -418,6 +425,7 @@ static GTY (()) tree long_doubleptr_type_node; static GTY (()) tree doubleptr_type_node; static GTY (()) tree floatptr_type_node; static GTY (()) tree builtin_ftype_int_var; +static GTY (()) vec<builtin_macro_definition, va_gc> *builtin_macros; /* Prototypes for locally defined functions. */ static tree DoBuiltinAlloca (location_t location, tree n); @@ -916,21 +924,45 @@ m2builtins_BuiltinExists (char *name) if (strcmp (name, fe->name) == 0) return true; // return target_support_exists (fe); - + int length = vec_safe_length (builtin_macros); + for (int idx = 0; idx < length; idx++) + if (strcmp ((*builtin_macros)[idx].name, name) == 0) + return true; return false; } +/* lookup_builtin_function returns a builtin macro. */ -/* BuildBuiltinTree - returns a Tree containing the builtin function, - name. */ +static +tree +lookup_builtin_macro (location_t location, char *name) +{ + int length = vec_safe_length (builtin_macros); + for (int idx = 0; idx < length; idx++) + if (strcmp ((*builtin_macros)[idx].name, name) == 0) + { + tree functype = TREE_TYPE ((*builtin_macros)[idx].function_node); + tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), + (*builtin_macros)[idx].function_node); + tree call = m2treelib_DoCall ( + location, (*builtin_macros)[idx].return_node, + funcptr, m2statement_GetParamList ()); + m2statement_SetLastFunction (call); + m2statement_SetParamList (NULL_TREE); + if ((*builtin_macros)[idx].return_node == void_type_node) + m2statement_SetLastFunction (NULL_TREE); + return call; + } + return NULL_TREE; +} + +/* lookup_builtin_function returns a builtin function. */ +static tree -m2builtins_BuildBuiltinTree (location_t location, char *name) +lookup_builtin_function (location_t location, char *name) { struct builtin_function_entry *fe; - tree call; - - m2statement_SetLastFunction (NULL_TREE); for (fe = &list_of_builtins[0]; fe->name != NULL; fe++) if ((strcmp (name, fe->name) == 0) && target_support_exists (fe)) @@ -938,7 +970,7 @@ m2builtins_BuildBuiltinTree (location_t location, char *name) tree functype = TREE_TYPE (fe->function_node); tree funcptr = build1 (ADDR_EXPR, build_pointer_type (functype), fe->function_node); - call = m2treelib_DoCall ( + tree call = m2treelib_DoCall ( location, fe->return_node, funcptr, m2statement_GetParamList ()); m2statement_SetLastFunction (call); m2statement_SetParamList (NULL_TREE); @@ -946,9 +978,29 @@ m2builtins_BuildBuiltinTree (location_t location, char *name) m2statement_SetLastFunction (NULL_TREE); return call; } + return NULL_TREE; +} + +/* BuildBuiltinTree - returns a Tree containing the builtin function, + name. */ + +tree +m2builtins_BuildBuiltinTree (location_t location, char *name) +{ + tree call; + m2statement_SetLastFunction (NULL_TREE); - m2statement_SetParamList (NULL_TREE); - return m2statement_GetLastFunction (); + call = lookup_builtin_function (location, name); + if (call == NULL_TREE) + { + call = lookup_builtin_macro (location, name); + if (call == NULL_TREE) + { + m2statement_SetParamList (NULL_TREE); + return m2statement_GetLastFunction (); + } + } + return call; } static tree @@ -1347,14 +1399,16 @@ set_decl_function_code (tree decl, built_in_function f) } /* Define a single builtin. */ + static void -define_builtin (enum built_in_function val, const char *name, tree type, +define_builtin (enum built_in_function val, const char *name, tree prototype, const char *libname, int flags) { tree decl; + builtin_macro_definition bmd; decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL, get_identifier (name), - type); + prototype); DECL_EXTERNAL (decl) = 1; TREE_PUBLIC (decl) = 1; SET_DECL_ASSEMBLER_NAME (decl, get_identifier (libname)); @@ -1362,8 +1416,43 @@ define_builtin (enum built_in_function val, const char *name, tree type, set_decl_built_in_class (decl, BUILT_IN_NORMAL); set_decl_function_code (decl, val); set_call_expr_flags (decl, flags); - set_builtin_decl (val, decl, true); + bmd.name = name; + bmd.function_node = decl; + bmd.return_node = TREE_TYPE (prototype); + vec_safe_push (builtin_macros, bmd); +} + +/* Define a math type variant of the builtin function. */ + +static +void +define_builtin_ext (enum built_in_function val, const char *name, tree type, + const char *libname, int flags, const char *ext) +{ + char *newname = (char *) xmalloc (strlen (name) + strlen (ext) + 1); + char *newlibname = (char *) xmalloc (strlen (libname) + strlen (ext) + 1); + strcpy (newname, name); + strcat (newname, ext); + strcpy (newlibname, libname); + strcat (newlibname, ext); + define_builtin (val, newname, type, newlibname, flags); +} + +/* Define all support math type versions of this builtin. */ + +static void +define_builtin_math (enum built_in_function val, const char *name, tree type, + const char *libname, int flags) +{ + /* SHORTREAL version. */ + define_builtin_ext (val, name, type, libname, flags, "f"); + /* LONGREAL version. */ + define_builtin_ext (val, name, type, libname, flags, "l"); + /* REAL version. */ + define_builtin (val, name, type, libname, flags); + /* Perhaps it should declare SYSTEM.def types size floating point + versions as well? */ } void @@ -1408,20 +1497,24 @@ m2builtins_init (location_t location) define_builtin (BUILT_IN_TRAP, "__builtin_trap", build_function_type_list (void_type_node, NULL_TREE), "__builtin_trap", ECF_NOTHROW | ECF_LEAF | ECF_NORETURN); - define_builtin (BUILT_IN_ISGREATER, "isgreater", builtin_ftype_int_var, - "__builtin_isgreater", ECF_CONST | ECF_NOTHROW | ECF_LEAF); - define_builtin (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", - builtin_ftype_int_var, "__builtin_isgreaterequal", - ECF_CONST | ECF_NOTHROW | ECF_LEAF); - define_builtin (BUILT_IN_ISLESS, "isless", builtin_ftype_int_var, - "__builtin_isless", ECF_CONST | ECF_NOTHROW | ECF_LEAF); - define_builtin (BUILT_IN_ISLESSEQUAL, "islessequal", builtin_ftype_int_var, - "__builtin_islessequal", ECF_CONST | ECF_NOTHROW | ECF_LEAF); - define_builtin (BUILT_IN_ISLESSGREATER, "islessgreater", - builtin_ftype_int_var, "__builtin_islessgreater", - ECF_CONST | ECF_NOTHROW | ECF_LEAF); - define_builtin (BUILT_IN_ISUNORDERED, "isunordered", builtin_ftype_int_var, - "__builtin_isunordered", ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISGREATER, "isgreater", builtin_ftype_int_var, + "__builtin_isgreater", ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", + builtin_ftype_int_var, "__builtin_isgreaterequal", + ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISLESS, "isless", builtin_ftype_int_var, + "__builtin_isless", ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISLESSEQUAL, "islessequal", builtin_ftype_int_var, + "__builtin_islessequal", ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISLESSGREATER, "islessgreater", + builtin_ftype_int_var, "__builtin_islessgreater", + ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISUNORDERED, "isunordered", builtin_ftype_int_var, + "__builtin_isunordered", ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISNORMAL, "isnormal", builtin_ftype_int_var, + "__builtin_isnormal", ECF_CONST | ECF_NOTHROW | ECF_LEAF); + define_builtin_math (BUILT_IN_ISINF_SIGN, "isinf_sign", builtin_ftype_int_var, + "__builtin_isinf_sign", ECF_CONST | ECF_NOTHROW | ECF_LEAF); gm2_alloca_node = find_builtin_tree ("__builtin_alloca"); gm2_memcpy_node = find_builtin_tree ("__builtin_memcpy"); diff --git a/gcc/m2/gm2-libs/Builtins.def b/gcc/m2/gm2-libs/Builtins.def index 3e1cb29d1578..2ad66030e392 100644 --- a/gcc/m2/gm2-libs/Builtins.def +++ b/gcc/m2/gm2-libs/Builtins.def @@ -28,7 +28,7 @@ DEFINITION MODULE Builtins ; FROM SYSTEM IMPORT ADDRESS ; -(* floating point intrinsic procedure functions *) +(* Floating point intrinsic procedure functions. *) PROCEDURE __BUILTIN__ isnanf (x: SHORTREAL) : INTEGER ; PROCEDURE __BUILTIN__ isnan (x: REAL) : INTEGER ; @@ -107,7 +107,43 @@ PROCEDURE __BUILTIN__ scalbn (x: REAL; n: INTEGER) : REAL ; PROCEDURE __BUILTIN__ scalbnf (x: SHORTREAL; n: INTEGER) : SHORTREAL ; PROCEDURE __BUILTIN__ scalbnl (x: LONGREAL; n: INTEGER) : LONGREAL ; -(* complex arithmetic intrincic procedure functions *) +PROCEDURE __BUILTIN__ isgreater (x, y: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ isgreaterf (x, y: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ isgreaterl (x, y: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ isgreaterequal (x, y: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ isgreaterequalf (x, y: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ isgreaterequall (x, y: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ isless (x, y: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ islessf (x, y: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ islessl (x, y: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ islessequal (x, y: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ islessequalf (x, y: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ islessequall (x, y: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ islessgreater (x, y: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ islessgreaterf (x, y: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ islessgreaterl (x, y: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ isunordered (x, y: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ isunorderedf (x, y: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ isunorderedl (x, y: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ iseqsig (x, y: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ iseqsigf (x, y: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ iseqsigl (x, y: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ isnormal (r: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ isnormalf (s: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ isnormall (l: LONGREAL) : INTEGER ; + +PROCEDURE __BUILTIN__ isinf_sign (r: REAL) : INTEGER ; +PROCEDURE __BUILTIN__ isinf_signf (s: SHORTREAL) : INTEGER ; +PROCEDURE __BUILTIN__ isinf_signl (l: LONGREAL) : INTEGER ; + +(* Complex arithmetic intrincic procedure functions. *) PROCEDURE __BUILTIN__ cabsf (z: SHORTCOMPLEX) : SHORTREAL ; PROCEDURE __BUILTIN__ cabs (z: COMPLEX) : REAL ; diff --git a/gcc/m2/gm2-libs/Builtins.mod b/gcc/m2/gm2-libs/Builtins.mod index 457ee92c2826..8079dc135651 100644 --- a/gcc/m2/gm2-libs/Builtins.mod +++ b/gcc/m2/gm2-libs/Builtins.mod @@ -33,7 +33,7 @@ PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_alloca)) alloca (i: CARDINAL) : BEGIN (* This routine will never be called as it allocates memory on top of the current stack frame, which is automatically - deallocated upon its return. *) + deallocated upon its return. *) HALT ; RETURN NIL END alloca ; @@ -43,18 +43,17 @@ BEGIN (* this routine is only called if -fdebug-builtins is supplied on the command line. The purpose of this routine is to allow a developer to single step into this routine and inspect the - value of, nBytes, and, returned. - *) + value of nBytes and returned. *) RETURN returned END alloca_trace ; -PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_memcpy)) memcpy (dest, src: ADDRESS; nbytes: CARDINAL) : ADDRESS ; +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_memcpy)) + memcpy (dest, src: ADDRESS; nbytes: CARDINAL) : ADDRESS ; BEGIN - (* hopefully the compiler will choose to use the __builtin_memcpy function within GCC. - This call is here just in case it cannot. Ie if the user sets a procedure variable to - memcpy, then clearly the compiler cannot inline such a call and thus it will - be forced into calling this function. - *) + (* Hopefully the compiler will choose to use the __builtin_memcpy + function within GCC. This call is here just in case it cannot. + If the user sets a procedure variable to memcpy then the + code below could be run instead. *) RETURN cbuiltin.memcpy (dest, src, nbytes) END memcpy ; @@ -629,18 +628,154 @@ BEGIN RETURN -1.0 END huge_valf ; +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isgreater)) isgreater (x, y: REAL) : INTEGER ; +BEGIN + RETURN 1 +END isgreater ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isgreaterf)) isgreaterf (x, y: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END isgreaterf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isgreaterl)) isgreaterl (x, y: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END isgreaterl ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isgreaterequal)) isgreaterequal (x, y: REAL) : INTEGER ; +BEGIN + RETURN 1 +END isgreaterequal ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isgreaterequalf)) isgreaterequalf (x, y: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END isgreaterequalf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isgreaterequall)) isgreaterequall (x, y: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END isgreaterequall ; + + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isless)) isless (x, y: REAL) : INTEGER ; +BEGIN + RETURN 1 +END isless ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessf)) islessf (x, y: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END islessf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessl)) islessl (x, y: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END islessl ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessequal)) islessequal (x, y: REAL) : INTEGER ; +BEGIN + RETURN 1 +END islessequal ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessequalf)) islessequalf (x, y: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END islessequalf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessequall)) islessequall (x, y: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END islessequall ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessgreater)) islessgreater (x, y: REAL) : INTEGER ; +BEGIN + RETURN 1 +END islessgreater ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessgreaterf)) islessgreaterf (x, y: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END islessgreaterf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_islessgreaterl)) islessgreaterl (x, y: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END islessgreaterl ; + + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isunordered)) isunordered (x, y: REAL) : INTEGER ; +BEGIN + RETURN 1 +END isunordered ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isunorderedf)) isunorderedf (x, y: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END isunorderedf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isunorderedl)) isunorderedl (x, y: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END isunorderedl ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_iseqsig)) iseqsig (x, y: REAL) : INTEGER ; +BEGIN + RETURN 1 +END iseqsig ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_iseqsigf)) iseqsigf (x, y: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END iseqsigf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_iseqsigl)) iseqsigl (x, y: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END iseqsigl ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isnormal)) isnormal (r: REAL) : INTEGER ; +BEGIN + RETURN 1 +END isnormal ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isnormalf)) isnormalf (s: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END isnormalf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isnormall)) isnormall (l: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END isnormall ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isinf)) isinf_sign (r: REAL) : INTEGER ; +BEGIN + RETURN 1 +END isinf_sign ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isinf_signf)) isinf_signf (s: SHORTREAL) : INTEGER ; +BEGIN + RETURN 1 +END isinf_signf ; + +PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_isinf)) isinf_signl (l: LONGREAL) : INTEGER ; +BEGIN + RETURN 1 +END isinf_signl ; + PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_longjmp)) longjmp (env: ADDRESS; val: INTEGER) ; BEGIN - (* empty, replaced internally by gcc *) + (* Empty, replaced internally by gcc. *) END longjmp ; PROCEDURE __ATTRIBUTE__ __BUILTIN__ ((__builtin_setjmp)) setjmp (env: ADDRESS) : INTEGER ; BEGIN - (* empty, replaced internally by gcc *) - RETURN 0 (* keeps gm2 happy *) + (* Empty, replaced internally by gcc. *) + RETURN 0 (* Keep -Wreturn-type happy. *) END setjmp ; - (* frame_address - returns the address of the frame. The current frame is obtained if level is 0, diff --git a/gcc/testsuite/gm2/builtins/run/pass/builtins-run-pass.exp b/gcc/testsuite/gm2/builtins/run/pass/builtins-run-pass.exp new file mode 100644 index 000000000000..7efea06e30e4 --- /dev/null +++ b/gcc/testsuite/gm2/builtins/run/pass/builtins-run-pass.exp @@ -0,0 +1,36 @@ +# Copyright (C) 2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# This file was written by Gaius Mulley (gaiusmod2@gmail.com) +# for GNU Modula-2. + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib gm2-torture.exp + +gm2_init_pim "${srcdir}/gm2/builtins/run/pass" + +foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + gm2-torture-execute $testcase "" "pass" +} diff --git a/gcc/testsuite/gm2/builtins/run/pass/testcomparisons.mod b/gcc/testsuite/gm2/builtins/run/pass/testcomparisons.mod new file mode 100644 index 000000000000..85f81fc7b82c --- /dev/null +++ b/gcc/testsuite/gm2/builtins/run/pass/testcomparisons.mod @@ -0,0 +1,77 @@ +MODULE testcomparisons ; + + +FROM libc IMPORT printf, exit ; +FROM Builtins IMPORT isgreater, isless, islessequal, isgreaterequal ; +FROM SYSTEM IMPORT ADR ; + + +(* + assert - +*) + +PROCEDURE assert (value: BOOLEAN; message: ARRAY OF CHAR) ; +BEGIN + IF NOT value + THEN + printf ("test failed: %s\n", ADR (message)) ; + code := 1 + END +END assert ; + + +(* + test - +*) + +PROCEDURE test ; +VAR + result: INTEGER ; +BEGIN + result := isgreater (2.0, 1.0) ; + printf ("isgreater (2.0, 1.0) = %d\n", result) ; + assert (result = 1, "isgreater (2.0, 1.0) # 1") ; + + result := isless (1.0, 2.0) ; + printf ("isless (1.0, 2.0) = %d\n", result) ; + assert (result = 1, "isless (1.0, 2.0) # 1") ; + + result := islessequal (1.0, 2.0) ; + printf ("islessequal (1.0, 2.0) = %d\n", result) ; + assert (result = 1, "islessequal (1.0, 2.0) # 1") ; + + result := isgreaterequal (2.0, 1.0) ; + printf ("isgreaterequal (2.0, 1.0) = %d\n", result) ; + assert (result = 1, "isgreatereequal (2.0, 1.0) # 1") ; + + result := isgreater (1.0, 2.0) ; + printf ("isgreater (1.0, 2.0) = %d\n", result) ; + assert (result = 0, "isgreater (1.0, 2.0) # 0") ; + + result := isless (2.0, 1.0) ; + printf ("isless (2.0, 1.0) = %d\n", result) ; + assert (result = 0, "isless (2.0, 1.0) # 0") ; + + result := islessequal (2.0, 1.0) ; + printf ("islessequal (2.0, 1.0) = %d\n", result) ; + assert (result = 0, "islessequal (2.0, 1.0) # 0") ; + + result := isgreaterequal (1.0, 2.0) ; + printf ("isgreaterequal (1.0, 2.0) = %d\n", result) ; + assert (result = 0, "isgreatereequal (1.0, 2.0) # 1") +END test ; + + +VAR + code: INTEGER ; +BEGIN + code := 0 ; + test ; + IF code = 0 + THEN + printf ("all tests pass\n") + ELSE + printf ("some tests failed\n") + END ; + exit (code) +END testcomparisons. diff --git a/gcc/testsuite/gm2/builtins/run/pass/testisnormal.mod b/gcc/testsuite/gm2/builtins/run/pass/testisnormal.mod new file mode 100644 index 000000000000..6b65a7b9b122 --- /dev/null +++ b/gcc/testsuite/gm2/builtins/run/pass/testisnormal.mod @@ -0,0 +1,49 @@ +MODULE testisnormal ; + +FROM libc IMPORT printf, exit ; +FROM Builtins IMPORT isnormal ; +FROM SYSTEM IMPORT ADR ; + + +(* + assert - +*) + +PROCEDURE assert (value: BOOLEAN; message: ARRAY OF CHAR) ; +BEGIN + IF NOT value + THEN + printf ("test failed: %s\n", ADR (message)) ; + code := 1 + END +END assert ; + + + +(* + test - +*) + +PROCEDURE test ; +VAR + result: INTEGER ; +BEGIN + result := isnormal (1.0) ; + printf ("isnormal (1.0) = %d\n", result) ; + assert (result = 1, "isnormal (1.0) # 1") +END test ; + + +VAR + code: INTEGER ; +BEGIN + code := 0 ; + test ; + IF code = 0 + THEN + printf ("all tests pass\n") + ELSE + printf ("some tests failed\n") + END ; + exit (code) +END testisnormal. diff --git a/gcc/testsuite/gm2/pimlib/run/pass/testchar.mod b/gcc/testsuite/gm2/pimlib/run/pass/testchar.mod new file mode 100644 index 000000000000..31dfd5f661f6 --- /dev/null +++ b/gcc/testsuite/gm2/pimlib/run/pass/testchar.mod @@ -0,0 +1,71 @@ +MODULE testchar ; + +FROM FIO IMPORT File, OpenToWrite, OpenToRead, + Close, WriteChar, ReadChar, IsNoError ; + +FROM libc IMPORT printf, exit ; + + +(* + createFile - +*) + +PROCEDURE createFile ; +VAR + fo: File ; + ch: CHAR ; +BEGIN + fo := OpenToWrite ("test.txt") ; + FOR ch := MIN (CHAR) TO MAX (CHAR) DO + WriteChar (fo, ch) ; + IF NOT IsNoError (fo) + THEN + printf ("failure to write: %c\n", ch); + exit (1) + END + END ; + Close (fo) +END createFile ; + + +(* + readFile - +*) + +PROCEDURE readFile ; +VAR + fi : File ; + ch, in: CHAR ; +BEGIN + fi := OpenToRead ("test.txt") ; + FOR ch := MIN (CHAR) TO MAX (CHAR) DO + in := ReadChar (fi) ; + IF NOT IsNoError (fi) + THEN + printf ("failure to read: %c\n", ch); + exit (1) + END ; + IF ch # in + THEN + printf ("failure to verify: %c\n", ch); + exit (1) + END + END ; + Close (fi) +END readFile ; + + +(* + init - +*) + +PROCEDURE init ; +BEGIN + createFile ; + readFile +END init ; + + +BEGIN + init +END testchar. From f536ea9cc3226793dc156952340f21e55b60c04e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 26 Mar 2024 16:40:53 +0100 Subject: [PATCH 263/551] testsuite: Fix up pr111151.c testcase [PR114486] Apparently I've somehow screwed up the adjustments of the originally tested testcase, tweaked it so that in the second/third cases it actually see a MAX_EXPR rather than COND_EXPR the MAX_EXPR has been optimized into, and didn't update the expected value. 2024-03-26 Jakub Jelinek <jakub@redhat.com> PR middle-end/111151 PR testsuite/114486 * gcc.c-torture/execute/pr111151.c (main): Fix up expected value for f. --- gcc/testsuite/gcc.c-torture/execute/pr111151.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.c-torture/execute/pr111151.c b/gcc/testsuite/gcc.c-torture/execute/pr111151.c index 89255d28054a..063617f5b9c1 100644 --- a/gcc/testsuite/gcc.c-torture/execute/pr111151.c +++ b/gcc/testsuite/gcc.c-torture/execute/pr111151.c @@ -11,7 +11,7 @@ main () int d = (-__INT_MAX__ - 1) / 2; int e = 10; int f = (d * 2 > e * 5 ? d * 2 : e * 5) * 6; - if (f != 120) + if (f != 300) __builtin_abort (); int g = (-__INT_MAX__ - 1) / 2; int h = 0; From fa60ac549649655a3f55e69f83d2e97423d3eb5c Mon Sep 17 00:00:00 2001 From: Cupertino Miranda <cupertino.miranda@oracle.com> Date: Tue, 26 Mar 2024 11:59:47 +0000 Subject: [PATCH 264/551] btf: Emit labels in DATASEC bts_offset entries. GCC was defining bts_offset entry to always contain 0. When comparing with clang, the same entry is instead a label to the respective variable or function. The assembler emits relocations for those labels. gcc/ChangeLog: PR target/114431 * btfout.cc (get_name_for_datasec_entry): Add function. (btf_asm_datasec_entry): Print label when possible. gcc/testsuite/ChangeLog: * gcc.dg/debug/btf/btf-datasec-1.c: Correct for new implementation. * gcc.dg/debug/btf/btf-datasec-2.c: Likewise * gcc.dg/debug/btf/btf-pr106773.c: Likewise --- gcc/btfout.cc | 30 ++++++++++++++++++- .../gcc.dg/debug/btf/btf-datasec-1.c | 6 ++-- .../gcc.dg/debug/btf/btf-datasec-2.c | 7 +++-- gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c | 2 +- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/gcc/btfout.cc b/gcc/btfout.cc index 7aabd99f3e7c..2e2b3524e835 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -1014,13 +1014,41 @@ btf_asm_func_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, ctf_id_t id) btf_asm_type_ref ("btt_type", ctfc, get_btf_id (ref_id)); } +/* Collect the name for the DATASEC reference required to be output as a + symbol. */ + +static const char * +get_name_for_datasec_entry (ctf_container_ref ctfc, ctf_id_t ref_id) +{ + if (ref_id >= num_types_added + 1 + && ref_id < num_types_added + num_vars_added + 1) + { + /* Ref to a variable. Should only appear in DATASEC entries. */ + ctf_id_t var_id = btf_relative_var_id (ref_id); + ctf_dvdef_ref dvd = ctfc->ctfc_vars_list[var_id]; + return dvd->dvd_name; + } + else if (ref_id >= num_types_added + num_vars_added + 1) + { + /* Ref to a FUNC record. */ + size_t func_id = btf_relative_func_id (ref_id); + ctf_dtdef_ref ref_type = (*funcs)[func_id]; + return get_btf_type_name (ref_type); + } + return NULL; +} + /* Asm'out a variable entry following a BTF_KIND_DATASEC. */ static void btf_asm_datasec_entry (ctf_container_ref ctfc, struct btf_var_secinfo info) { + const char *symbol_name = get_name_for_datasec_entry (ctfc, info.type); btf_asm_type_ref ("bts_type", ctfc, info.type); - dw2_asm_output_data (4, info.offset, "bts_offset"); + if (symbol_name == NULL) + dw2_asm_output_data (4, info.offset, "bts_offset"); + else + dw2_asm_output_offset (4, symbol_name, NULL, "bts_offset"); dw2_asm_output_data (4, info.size, "bts_size"); } diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c index 77df88648c54..8557c38c20d8 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c @@ -19,8 +19,10 @@ /* { dg-final { scan-assembler-times "0xf000003\[\t \]+\[^\n\]*btt_info" 2 } } */ /* { dg-final { scan-assembler-times "0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */ -/* The offset entry for each variable in a DATSEC should be 0 at compile time. */ -/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 7 } } */ +/* The offset entry for each variable in a DATSEC should contain a label. */ +/* { dg-final { scan-assembler-times ".4byte\[\t \]\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 } } */ +/* { dg-final { scan-assembler-times "my_cstruct\[\t \]+\[^\n\]*bts_offset" 1 } } */ +/* { dg-final { scan-assembler-times "bigarr\[\t \]+\[^\n\]*bts_offset" 1 } } */ /* Check that strings for each DATASEC have been added to the BTF string table. */ /* { dg-final { scan-assembler-times "ascii \".data.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c index d6f3358d6fb0..857d830e4465 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c @@ -9,8 +9,11 @@ /* { dg-final { scan-assembler-times " BTF_KIND_DATASEC '.foo_sec'\[\\r\\n\]+\[^\\r\\n\]*0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */ /* { dg-final { scan-assembler-times " BTF_KIND_DATASEC '.bar_sec'\[\\r\\n\]+\[^\\r\\n\]*0xf000002\[\t \]+\[^\n\]*btt_info" 1 } } */ -/* Function entries should have offset and size of 0 at compile time. */ -/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 3 } } */ +/* Function entries should have offset with a label and size of 0 at compile time. */ +/* { dg-final { scan-assembler-times "chacha\[\t \]+\[^\n\]*bts_offset" 1 } } */ +/* { dg-final { scan-assembler-times "bar\[\t \]+\[^\n\]*bts_offset" 1 } } */ +/* { dg-final { scan-assembler-times "foo\[\t \]+\[^\n\]*bts_offset" 1 } } */ + /* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_size" 3 } } */ extern int foo (int a) __attribute__((section(".foo_sec"))); diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c index 940f129408dc..c06220eb5204 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c @@ -11,7 +11,7 @@ /* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ -/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 1 } } */ +/* { dg-final { scan-assembler-times "foo\[\t \]+\[^\n\]*bts_offset" 1 } } */ /* { dg-final { scan-assembler-times "1\[\t \]+\[^\n\]*bts_size" 1 } } */ extern const void foo __attribute__((weak)) __attribute__((section (".ksyms"))); From 5be2313bceea7b482c17ee730efe604b910800bd Mon Sep 17 00:00:00 2001 From: Richard Sandiford <richard.sandiford@arm.com> Date: Tue, 26 Mar 2024 17:27:56 +0000 Subject: [PATCH 265/551] aarch64: Use constexpr for out-of-line statics GCC 4.8 complained about the use of const rather than constexpr for out-of-line static constexprs. gcc/ * config/aarch64/aarch64-feature-deps.h: Use constexpr for out-of-line statics. --- gcc/config/aarch64/aarch64-feature-deps.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/config/aarch64/aarch64-feature-deps.h b/gcc/config/aarch64/aarch64-feature-deps.h index 3641badb82f5..79126db88254 100644 --- a/gcc/config/aarch64/aarch64-feature-deps.h +++ b/gcc/config/aarch64/aarch64-feature-deps.h @@ -71,9 +71,9 @@ template<aarch64_feature> struct info; static constexpr auto enable = flag | get_enable REQUIRES; \ static constexpr auto explicit_on = enable | get_enable EXPLICIT_ON; \ }; \ - const aarch64_feature_flags info<aarch64_feature::IDENT>::flag; \ - const aarch64_feature_flags info<aarch64_feature::IDENT>::enable; \ - const aarch64_feature_flags info<aarch64_feature::IDENT>::explicit_on; \ + constexpr aarch64_feature_flags info<aarch64_feature::IDENT>::flag; \ + constexpr aarch64_feature_flags info<aarch64_feature::IDENT>::enable; \ + constexpr aarch64_feature_flags info<aarch64_feature::IDENT>::explicit_on; \ constexpr info<aarch64_feature::IDENT> IDENT () \ { \ return info<aarch64_feature::IDENT> (); \ From ac5d63a46d78cded2cd4c41a615728b8e46b540f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me> Date: Sat, 23 Mar 2024 16:14:33 +0100 Subject: [PATCH 266/551] libstdc++: fix _V badname in <generator> libstdc++-v3/ChangeLog: * include/std/generator: Fix _V badname. --- libstdc++-v3/include/std/generator | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/libstdc++-v3/include/std/generator b/libstdc++-v3/include/std/generator index 87983ee5e7c6..2d1dcced1e57 100644 --- a/libstdc++-v3/include/std/generator +++ b/libstdc++-v3/include/std/generator @@ -76,14 +76,14 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * @headerfile generator * @since C++23 */ - template<typename _Ref, typename _V = void, typename _Alloc = void> + template<typename _Ref, typename _Val = void, typename _Alloc = void> class generator; /// @cond undocumented namespace __gen { /// _Reference type for a generator whose reference (first argument) and - /// value (second argument) types are _Ref and _V. + /// value (second argument) types are _Ref and _Val. template<typename _Ref, typename _Val> using _Reference_t = __conditional_t<is_void_v<_Val>, _Ref&&, _Ref>; @@ -642,14 +642,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } // namespace __gen /// @endcond - template<typename _Ref, typename _V, typename _Alloc> + template<typename _Ref, typename _Val, typename _Alloc> class generator - : public ranges::view_interface<generator<_Ref, _V, _Alloc>> + : public ranges::view_interface<generator<_Ref, _Val, _Alloc>> { - using _Value = __conditional_t<is_void_v<_V>, remove_cvref_t<_Ref>, _V>; + using _Value = __conditional_t<is_void_v<_Val>, + remove_cvref_t<_Ref>, + _Val>; static_assert(__gen::_Cv_unqualified_object<_Value>, "Generator value must be a cv-unqualified object type"); - using _Reference = __gen::_Reference_t<_Ref, _V>; + using _Reference = __gen::_Reference_t<_Ref, _Val>; static_assert(is_reference_v<_Reference> || (__gen::_Cv_unqualified_object<_Reference> && copy_constructible<_Reference>), @@ -737,8 +739,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION bool _M_began = false; }; - template<class _Ref, class _V, class _Alloc> - struct generator<_Ref, _V, _Alloc>::_Iterator + template<class _Ref, class _Val, class _Alloc> + struct generator<_Ref, _Val, _Alloc>::_Iterator { using value_type = _Value; using difference_type = ptrdiff_t; From fb1d50e1f6e07c146999b1b773043c140fdc72b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me> Date: Sat, 23 Mar 2024 16:15:25 +0100 Subject: [PATCH 267/551] libstdc++: fix generator iterator operator* return type Per the standard, the return type of a generators ranges iterator op* should be the reference type rather than the yielded type. The yielded type was used here by mistake. libstdc++-v3/ChangeLog: * include/std/generator (generator::_Iterator::operator*): Fix return type. * testsuite/24_iterators/range_generators/iter_deref_return.cc: New test. --- libstdc++-v3/include/std/generator | 4 +-- .../range_generators/iter_deref_return.cc | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc diff --git a/libstdc++-v3/include/std/generator b/libstdc++-v3/include/std/generator index 2d1dcced1e57..789016b5a883 100644 --- a/libstdc++-v3/include/std/generator +++ b/libstdc++-v3/include/std/generator @@ -773,12 +773,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION operator++(int) { this->operator++(); } - yielded + _Reference operator*() const noexcept(is_nothrow_move_constructible_v<_Reference>) { auto& __p = this->_M_coro.promise(); - return static_cast<yielded>(*__p._M_value()); + return static_cast<_Reference>(*__p._M_value()); } private: diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc new file mode 100644 index 000000000000..75471952e76c --- /dev/null +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc @@ -0,0 +1,25 @@ +// { dg-do compile { target c++23 } } +// Copyright (C) 2024 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +#include <generator> + +// Check that the return type of iterator::operator* is the reference type. +// Pre-op* return type fix, this'd have resulted in a op* return type of const +// bool&. + +std::generator<bool, bool> +foo(); + +static_assert(std::is_same_v<decltype(*foo().begin()), bool>); +static_assert(std::is_same_v<typename decltype(foo())::yielded, const bool&>); From 41e767c482fc903ca5d54014b034c7526dbf8f1c Mon Sep 17 00:00:00 2001 From: Jerry DeLisle <jvdelisle@gcc.gnu.org> Date: Tue, 26 Mar 2024 16:44:17 -0700 Subject: [PATCH 268/551] libgfortran: Fix file position after ENDFILE statement. PR libfortran/107031 libgfortran/ChangeLog: * io/file_pos.c (st_endfile): Remove call to next_record(). gcc/testsuite/ChangeLog: * gfortran.dg/endfile_5.f90: New test. --- gcc/testsuite/gfortran.dg/endfile_5.f90 | 30 +++++++++++++++++++++++++ libgfortran/io/file_pos.c | 1 - 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/endfile_5.f90 diff --git a/gcc/testsuite/gfortran.dg/endfile_5.f90 b/gcc/testsuite/gfortran.dg/endfile_5.f90 new file mode 100644 index 000000000000..90eaa6b2e5b9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/endfile_5.f90 @@ -0,0 +1,30 @@ +! { dg-do run } +! PR107031 Check that endfile truncates at end of record 5. +program test_truncate + integer :: num_rec, tmp, i, nr, j + open(10, file="in.dat", action='readwrite') + + do i=1,10 + write(10, *) i + end do + + rewind (10) + + num_rec = 5 + i = 1 + ioerr = 0 + do while (i <= num_rec .and. ioerr == 0) + read(10, *, iostat=ioerr) tmp + i = i + 1 + enddo + endfile(10) + rewind (10) + i = 0 + ioerr = 0 + do while (i <= num_rec + 1 .and. ioerr == 0) + read(10, *, iostat=ioerr) j + i = i + 1 + end do + close(10, status='delete') + if (i - 1 /= 5) stop 1 +end program test_truncate diff --git a/libgfortran/io/file_pos.c b/libgfortran/io/file_pos.c index 2bc05b293f8c..d169961f9971 100644 --- a/libgfortran/io/file_pos.c +++ b/libgfortran/io/file_pos.c @@ -352,7 +352,6 @@ st_endfile (st_parameter_filepos *fpp) dtp.common = fpp->common; memset (&dtp.u.p, 0, sizeof (dtp.u.p)); dtp.u.p.current_unit = u; - next_record (&dtp, 1); } unit_truncate (u, stell (u->s), &fpp->common); From 4b8e7b57d952a1031b0fe11533ef76b9821432c0 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Wed, 27 Mar 2024 00:18:06 +0000 Subject: [PATCH 269/551] Daily bump. --- gcc/ChangeLog | 54 ++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/c-family/ChangeLog | 7 +++++ gcc/cp/ChangeLog | 5 +++ gcc/m2/ChangeLog | 69 +++++++++++++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 67 +++++++++++++++++++++++++++++++++++++++ libgfortran/ChangeLog | 5 +++ libstdc++-v3/ChangeLog | 37 ++++++++++++++++++++++ 8 files changed, 245 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1ae9f0db094e..108d1186690a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,57 @@ +2024-03-26 Richard Sandiford <richard.sandiford@arm.com> + + * config/aarch64/aarch64-feature-deps.h: Use constexpr for + out-of-line statics. + +2024-03-26 Cupertino Miranda <cupertino.miranda@oracle.com> + + PR target/114431 + * btfout.cc (get_name_for_datasec_entry): Add function. + (btf_asm_datasec_entry): Print label when possible. + +2024-03-26 Richard Ball <richard.ball@arm.com> + + PR target/114272 + * config/aarch64/aarch64-cores.def (AARCH64_CORE): + Change SCHEDULER_IDENT from cortexa55 to cortexa53 + for Cortex-A510 and Cortex-A520. + +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/111151 + * fold-const.cc (extract_muldiv_1) <case MAX_EXPR>: Punt for + MULT_EXPR altogether, or for MAX_EXPR if c is -1. + +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/111736 + * tsan.cc (instrument_expr): Punt on non-generic address space + accesses. + +2024-03-26 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114471 + * tree-vect-stmts.cc (vectorizable_operation): Verify operand + types are compatible with the result type. + +2024-03-26 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114464 + * tree-vect-loop.cc (vectorizable_recurr): Verify the latch + vector type is compatible with what we chose for the recurrence. + +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + * cfgloopmanip.cc (update_loop_exit_probability_scale_dom_bbs): + Fix comment typo - multple -> multiple. + * config/i386/x86-tune.def (X86_TUNE_ACCUMULATE_OUTGOING_ARGS): + Likewise. + +2024-03-26 YunQiang Su <syq@gcc.gnu.org> + + * config/mips/mips.h (TARGET_CPU_CPP_BUILTINS): Predefine + __mips_strict_alignment if STRICT_ALIGNMENT. + 2024-03-25 Richard Biener <rguenther@suse.de> * config.gcc (amdgcn): Add gfx1036 entries. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index e0ed38864a62..4597046e092c 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240326 +20240327 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 78b7dbe7f89f..e6530ead5136 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,10 @@ +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + PR c++/112724 + * c-pretty-print.cc (pp_c_cast_expression, + c_pretty_printer::expression): Handle EXCESS_PRECISION_EXPR like + NOP_EXPR. + 2024-03-19 Jakub Jelinek <jakub@redhat.com> PR c/114364 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d6f6dba585e9..07d0c83089d6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + PR c++/112724 + * error.cc (dump_expr): Handle EXCESS_PRECISION_EXPR like NOP_EXPR. + 2024-03-25 Marek Polacek <polacek@redhat.com> PR c++/114349 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index 7771d37e5440..c9cf62887225 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,72 @@ +2024-03-26 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114478 + * gm2-gcc/m2builtins.cc (struct builtin_macro_definition): New struct. + (lookup_builtin_macro): New function. + (m2builtins_BuildBuiltinTree): Rewrite to lookup builtin function + and builtin macro. + (lookup_builtin_function): New function. + (define_builtin): Rename parameter type to prototype push macro + definition to builtin_macros vector. + (define_builtin_ext): New function. + (define_builtin_math): New function. + (m2builtins_init): Add isgreater, isless, isgreaterequal, + islessequal, islessgreater, isunordered, isnormal to macro definitions. + * gm2-libs/Builtins.def (isgreater): New procedure function. + (isgreaterf): Ditto. + (isgreaterl): Ditto. + (isgreaterequal): Ditto. + (isgreaterequalf): Ditto. + (isgreaterequall): Ditto. + (isless): Ditto. + (islessf): Ditto. + (islessl): Ditto. + (islessequal): Ditto. + (islessequalf): Ditto. + (islessequall): Ditto. + (islessgreater): Ditto. + (islessgreaterf): Ditto. + (islessgreaterl): Ditto. + (isunordered): Ditto. + (isunorderedf): Ditto. + (isunorderedl): Ditto. + (iseqsig): Ditto. + (iseqsigf): Ditto. + (iseqsigl): Ditto. + (isnormal): Ditto. + (isnormalf): Ditto. + (isnormall): Ditto. + (isinf_sign): Ditto. + (isinf_signf): Ditto. + (isinf_signl): Ditto. + * gm2-libs/Builtins.mod (isgreater): New procedure function. + (isgreaterf): Ditto. + (isgreaterl): Ditto. + (isgreaterequal): Ditto. + (isgreaterequalf): Ditto. + (isgreaterequall): Ditto. + (isless): Ditto. + (islessf): Ditto. + (islessl): Ditto. + (islessequal): Ditto. + (islessequalf): Ditto. + (islessequall): Ditto. + (islessgreater): Ditto. + (islessgreaterf): Ditto. + (islessgreaterl): Ditto. + (isunordered): Ditto. + (isunorderedf): Ditto. + (isunorderedl): Ditto. + (iseqsig): Ditto. + (iseqsigf): Ditto. + (iseqsigl): Ditto. + (isnormal): Ditto. + (isnormalf): Ditto. + (isnormall): Ditto. + (isinf_sign): Ditto. + (isinf_signf): Ditto. + (isinf_signl): Ditto. + 2024-03-25 Gaius Mulley <gaiusmod2@gmail.com> * Make-lang.in (doc/m2.pdf): Add line break. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index da3dfba321c1..a27b61326b01 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,70 @@ +2024-03-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/107031 + * gfortran.dg/endfile_5.f90: New test. + +2024-03-26 Cupertino Miranda <cupertino.miranda@oracle.com> + + * gcc.dg/debug/btf/btf-datasec-1.c: Correct for new + implementation. + * gcc.dg/debug/btf/btf-datasec-2.c: Likewise + * gcc.dg/debug/btf/btf-pr106773.c: Likewise + +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/111151 + PR testsuite/114486 + * gcc.c-torture/execute/pr111151.c (main): Fix up expected value for + f. + +2024-03-26 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114478 + * gm2/builtins/run/pass/builtins-run-pass.exp: New test. + * gm2/builtins/run/pass/testcomparisons.mod: New test. + * gm2/builtins/run/pass/testisnormal.mod: New test. + * gm2/pimlib/run/pass/testchar.mod: New test. + +2024-03-26 Marek Polacek <polacek@redhat.com> + + PR c++/100557 + * g++.dg/cpp2a/concepts-pr100557.C: New test. + +2024-03-26 Patrick Palka <ppalka@redhat.com> + + * g++.dg/modules/decltype-1_a.C: Add missing } to dg-module-do + directive. + * g++.dg/modules/lambda-5_a.C: Likewise. + +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/torture/pr113126.c: Add -Wno-psabi as dg-additional-options. + +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/111151 + * gcc.c-torture/execute/pr111151.c: New test. + +2024-03-26 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/111736 + * gcc.dg/tsan/pr111736.c: New test. + +2024-03-26 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114471 + * gcc.dg/vect/pr114471.c: New testcase. + +2024-03-26 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114464 + * g++.dg/vect/pr114464.cc: New testcase. + +2024-03-26 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114027 + * gcc.dg/vect/pr114027.c: Fix iteration count. + 2024-03-25 Marek Polacek <polacek@redhat.com> PR c++/114349 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index f32771ee64d8..f2d3865617f6 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2024-03-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/107031 + * io/file_pos.c (st_endfile): Remove call to next_record(). + 2024-03-11 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/105437 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 80e3e35a6cd5..3dd519f5a758 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,40 @@ +2024-03-26 Arsen Arsenović <arsen@aarsen.me> + + * include/std/generator (generator::_Iterator::operator*): Fix + return type. + * testsuite/24_iterators/range_generators/iter_deref_return.cc: + New test. + +2024-03-26 Arsen Arsenović <arsen@aarsen.me> + + * include/std/generator: Fix _V badname. + +2024-03-26 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/19_diagnostics/stacktrace/current.cc: Check for + __cpp_lib_stacktrace instead of check for stacktrace ET. + * testsuite/19_diagnostics/stacktrace/entry.cc: Likewise. + * testsuite/19_diagnostics/stacktrace/hash.cc: Likewise. + * testsuite/19_diagnostics/stacktrace/output.cc: Likewise. + * testsuite/19_diagnostics/stacktrace/stacktrace.cc: Likewise. + * testsuite/19_diagnostics/stacktrace/synopsis.cc: Likewise. + * testsuite/19_diagnostics/stacktrace/version.cc: Likewise. + * testsuite/23_containers/vector/debug/assign4_backtrace_neg.cc: + Likewise. + * testsuite/lib/libstdc++.exp (check_effective_target_stacktrace): + Remove. + +2024-03-26 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/lib/dg-options.exp (dg-require-cpp-feature-test): + New proc. + * testsuite/lib/libstdc++.exp (check_v3_target_cpp_feature_test): + New proc. + * testsuite/std/text_encoding/cons.cc: Use new directive to skip + the test if the __cpp_lib_text_encoding feature test macro is + not defined. + * testsuite/std/text_encoding/requirements.cc: Likewise. + 2024-03-25 Jonathan Wakely <jwakely@redhat.com> * testsuite/std/text_encoding/requirements.cc: #undef the From 291c46a3f0d0355680f94280e955f4faf1cae6f9 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Wed, 27 Mar 2024 08:50:47 +0100 Subject: [PATCH 270/551] testsuite: Fix copy-headers-8.c For targets where LOGICAL_OP_NON_SHORT_CIRCUIT evaluates to false, two conditional jumps are emitted instead of a combined conditional which this test is all about. Thus, set it to true. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/copy-headers-8.c: Set LOGICAL_OP_NON_SHORT_CIRCUIT to true. --- gcc/testsuite/gcc.dg/tree-ssa/copy-headers-8.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-8.c b/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-8.c index 8b4b5e7ea81e..e35aaf93da81 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-8.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-8.c @@ -1,5 +1,8 @@ +/* For targets where LOGICAL_OP_NON_SHORT_CIRCUIT evaluates to false, two + conditional jumps are emitted instead of a combined conditional which this + test is all about. Thus, set it to true. */ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-ch2-details" } */ +/* { dg-options "-O2 -fdump-tree-ch2-details --param logical-op-non-short-circuit=1" } */ int is_sorted(int *a, int n, int m, int k) { From d9ea5181800fee3c0c21c33a463d8ca90b004ff6 Mon Sep 17 00:00:00 2001 From: Victor Do Nascimento <victor.donascimento@arm.com> Date: Tue, 5 Mar 2024 20:38:26 +0000 Subject: [PATCH 271/551] aarch64: Add +lse128 architectural extension command-line flag Given how, at present, the choice of using LSE128 atomic instructions by the toolchain is delegated to run-time selection in the form of Libatomic ifuncs, responsible for querying target support, the `+lse128' target architecture compile-time flag is absent from GCC. This, however, contrasts with the Binutils implementation, which gates LSE128 instructions behind the `+lse128' flag. This can lead to problems in GCC for certain use-cases. One such example is in the use of inline assembly, whereby the inability of enabling the feature in the command-line prevents the compiler from automatically issuing the necessary LSE128 `.arch' directive. This patch therefore brings GCC into alignment with LLVM and Binutils in adding support for the `+lse128' architectural extension flag. gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def: Add LSE128 AARCH64_OPT_EXTENSION, adding it as a dependency for the D128 feature. * doc/invoke.texi (AArch64 Options): Document +lse128. gcc/testsuite/ChangeLog: * gcc.target/aarch64/lse128-flag.c: New. * gcc.target/aarch64/cpunative/info_23: Likewise. * gcc.target/aarch64/cpunative/native_cpu_23.c: Likewise. --- gcc/config/aarch64/aarch64-option-extensions.def | 4 +++- gcc/doc/invoke.texi | 4 ++++ gcc/testsuite/gcc.target/aarch64/cpunative/info_23 | 8 ++++++++ .../gcc.target/aarch64/cpunative/native_cpu_23.c | 11 +++++++++++ gcc/testsuite/gcc.target/aarch64/lse128-flag.c | 10 ++++++++++ 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/cpunative/info_23 create mode 100644 gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_23.c create mode 100644 gcc/testsuite/gcc.target/aarch64/lse128-flag.c diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 1a3b91c68cf8..ac54b899a06f 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -275,7 +275,9 @@ AARCH64_OPT_EXTENSION("mops", MOPS, (), (), (), "") AARCH64_OPT_EXTENSION("cssc", CSSC, (), (), (), "cssc") -AARCH64_OPT_EXTENSION("d128", D128, (), (), (), "d128") +AARCH64_OPT_EXTENSION("lse128", LSE128, (LSE), (), (), "lse128") + +AARCH64_OPT_EXTENSION("d128", D128, (LSE128), (), (), "d128") AARCH64_OPT_EXTENSION("the", THE, (), (), (), "the") diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index d09074e13de4..f6c8d6fc0e18 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -21578,8 +21578,12 @@ Enable the FEAT_SME_I16I64 extension to SME. Enable the FEAT_SME_F64F64 extension to SME. +@item sme2 Enable the Scalable Matrix Extension 2. This also enables SME instructions. +@item lse128 +Enable the LSE128 128-bit atomic instructions extension. This also +enables LSE instructions. @item d128 Enable support for 128-bit system register read/write instructions. +This also enables the LSE128 extension. @item gcs Enable support for Armv9.4-a Guarded Control Stack extension. @item the diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_23 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_23 new file mode 100644 index 000000000000..0ca69d0a9077 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_23 @@ -0,0 +1,8 @@ +processor : 0 +BogoMIPS : 100.00 +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp atomics lse128 +CPU implementer : 0xfe +CPU architecture: 8 +CPU variant : 0x0 +CPU part : 0xd08 +CPU revision : 2 diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_23.c b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_23.c new file mode 100644 index 000000000000..8a1e235d8ab2 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_23.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target { { aarch64*-*-linux*} && native } } } */ +/* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/aarch64/cpunative/info_23" } */ +/* { dg-additional-options "-mcpu=native" } */ + +int main() +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8-a\+dotprod\+crc\+crypto\+lse128} } } */ +/* Test one where lse128 is available and so should be emitted. */ diff --git a/gcc/testsuite/gcc.target/aarch64/lse128-flag.c b/gcc/testsuite/gcc.target/aarch64/lse128-flag.c new file mode 100644 index 000000000000..71339c3af6d6 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/lse128-flag.c @@ -0,0 +1,10 @@ +/* { dg-do compile { target { aarch64*-*-*} } } */ +/* { dg-additional-options "-march=armv9.4-a+lse128" } */ + +int main() +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv9\.4-a\+crc\+lse128} } } */ +/* Test a normal looking procinfo. */ From 258defbdee985c8f27c33e9f533c19d059941972 Mon Sep 17 00:00:00 2001 From: Victor Do Nascimento <victor.donascimento@arm.com> Date: Tue, 5 Mar 2024 20:38:26 +0000 Subject: [PATCH 272/551] aarch64: Align lrcpc3 FEAT_STRING with /proc/cpuinfo 'Features' entry Due to the Linux kernel exposing the lrcpc3 architectural feature as "lrcpc3", this patch corrects the relevant FEATURE_STRING entry in the "rcpc3" AARCH64_OPT_FMV_EXTENSION macro, such that the feature can be correctly detected when doing native compilation on rcpc3-enabled targets. gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def (rcpc3): Fix FEATURE_STRING field to "lrcpc3". gcc/testsuite/ChangeLog: * gcc.target/aarch64/cpunative/info_24: New. * gcc.target/aarch64/cpunative/native_cpu_24.c: Likewise. --- gcc/config/aarch64/aarch64-option-extensions.def | 2 +- gcc/testsuite/gcc.target/aarch64/cpunative/info_24 | 8 ++++++++ .../gcc.target/aarch64/cpunative/native_cpu_24.c | 11 +++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/cpunative/info_24 create mode 100644 gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index ac54b899a06f..061a145e9e79 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -174,7 +174,7 @@ AARCH64_OPT_FMV_EXTENSION("rcpc", RCPC, (), (), (), "lrcpc") AARCH64_FMV_FEATURE("rcpc2", RCPC2, (RCPC)) -AARCH64_OPT_FMV_EXTENSION("rcpc3", RCPC3, (), (), (), "rcpc3") +AARCH64_OPT_FMV_EXTENSION("rcpc3", RCPC3, (), (), (), "lrcpc3") AARCH64_FMV_FEATURE("frintts", FRINTTS, ()) diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_24 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_24 new file mode 100644 index 000000000000..8d3c16a10910 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_24 @@ -0,0 +1,8 @@ +processor : 0 +BogoMIPS : 100.00 +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp lrcpc3 +CPU implementer : 0xfe +CPU architecture: 8 +CPU variant : 0x0 +CPU part : 0xd08 +CPU revision : 2 \ No newline at end of file diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c new file mode 100644 index 000000000000..05dc870885f4 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target { { aarch64*-*-linux*} && native } } } */ +/* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/aarch64/cpunative/info_23" } */ +/* { dg-additional-options "-mcpu=native --save-temps " } */ + +int main() +{ + return 0; +} + +/* { dg-final { scan-assembler {\.arch armv8-a\+dotprod\+crc\+crypto\+rcpc3} } } */ +/* Test one where rcpc3 is available and so should be emitted. */ From aac30f8416e992c524b86eaa40f35f30fe04b755 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 27 Mar 2024 12:00:58 +0100 Subject: [PATCH 273/551] testsuite: Fix up ext-floating{3,12}.C on i686-linux These tests FAIL for quite a while on i686-linux since July last year, likely r14-2628 . Since that patch gcc claims _Float16 and __bf16 support even without -msse2 because some functions could be using target attribute. Later r14-2691 added -msse2 to add_options_for_float16, but didn't do that for bfloat16, plus ext-floating{3,12}.C tests need the added dg-add-options, so that float16 and bfloat16 effective targets match the __STDCPP_FLOAT16_T__ or __STDCPP_BFLOAT16_T__ macros. Fixes -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++23 (test for errors, line 144) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++23 (test for errors, line 146) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++23 (test for errors, line 148) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++23 (test for errors, line 150) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++23 (test for errors, line 152) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++23 (test for errors, line 154) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++26 (test for errors, line 144) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++26 (test for errors, line 146) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++26 (test for errors, line 148) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++26 (test for errors, line 150) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++26 (test for errors, line 152) -FAIL: g++.dg/cpp23/ext-floating12.C -std=gnu++26 (test for errors, line 154) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for errors, line 107) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for errors, line 114) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for errors, line 126) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for errors, line 79) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for errors, line 86) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for errors, line 98) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for warnings, line 22) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for warnings, line 23) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for warnings, line 24) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++23 (test for warnings, line 25) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for errors, line 107) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for errors, line 114) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for errors, line 126) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for errors, line 79) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for errors, line 86) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for errors, line 98) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for warnings, line 22) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for warnings, line 23) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for warnings, line 24) -FAIL: g++.dg/cpp23/ext-floating3.C -std=gnu++26 (test for warnings, line 25) on the latter and changes nothing on the former. 2024-03-27 Jakub Jelinek <jakub@redhat.com> * lib/target-supports.exp (add_options_for_bfloat16): Add -msse2 on i?86/x86_64. * g++.dg/cpp23/ext-floating3.C: Add dg-add-options float16. * g++.dg/cpp23/ext-floating12.C: Add dg-add-options float16 and bfloat16. --- gcc/testsuite/g++.dg/cpp23/ext-floating12.C | 2 ++ gcc/testsuite/g++.dg/cpp23/ext-floating3.C | 1 + gcc/testsuite/lib/target-supports.exp | 3 +++ 3 files changed, 6 insertions(+) diff --git a/gcc/testsuite/g++.dg/cpp23/ext-floating12.C b/gcc/testsuite/g++.dg/cpp23/ext-floating12.C index 77ee4c70a93b..a09c3fc10c4e 100644 --- a/gcc/testsuite/g++.dg/cpp23/ext-floating12.C +++ b/gcc/testsuite/g++.dg/cpp23/ext-floating12.C @@ -1,6 +1,8 @@ // P1467R9 - Extended floating-point types and standard names. // { dg-do compile { target { c++23 && { i?86-*-linux* x86_64-*-linux* } } } } // { dg-options "" } +// { dg-add-options float16 } +// { dg-add-options bfloat16 } #include <complex> #include <stdfloat> diff --git a/gcc/testsuite/g++.dg/cpp23/ext-floating3.C b/gcc/testsuite/g++.dg/cpp23/ext-floating3.C index ca9399fccd2a..803a057e7efb 100644 --- a/gcc/testsuite/g++.dg/cpp23/ext-floating3.C +++ b/gcc/testsuite/g++.dg/cpp23/ext-floating3.C @@ -4,6 +4,7 @@ // And some further tests. // { dg-do compile { target { c++23 && { i?86-*-linux* x86_64-*-linux* } } } } // { dg-options "" } +// { dg-add-options float16 } #include "ext-floating.h" diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 3262104b5fd9..843515f69d78 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3829,6 +3829,9 @@ proc check_effective_target_bfloat16_runtime {} { } proc add_options_for_bfloat16 { flags } { + if { [istarget i?86-*-*] || [istarget x86_64-*-*] } { + return "$flags -msse2" + } return "$flags" } From 0b02da5b99e89347f5f8bf875ec8318f84adff18 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Wed, 27 Mar 2024 11:37:16 +0100 Subject: [PATCH 274/551] tree-optimization/114057 - handle BB reduction remain defs as LIVE The following makes sure to record the scalars we add to the BB reduction vectorization result as scalar uses for the purpose of computing live lanes. This restores vectorization in the bondfree.c TU of 435.gromacs. PR tree-optimization/114057 * tree-vect-slp.cc (vect_bb_slp_mark_live_stmts): Mark BB reduction remain defs as scalar uses. --- gcc/tree-vect-slp.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 23f9593191ad..f57684ca6856 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -6646,8 +6646,14 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo) auto_vec<slp_tree> worklist; for (slp_instance instance : bb_vinfo->slp_instances) - if (!visited.add (SLP_INSTANCE_TREE (instance))) - worklist.safe_push (SLP_INSTANCE_TREE (instance)); + { + if (SLP_INSTANCE_KIND (instance) == slp_inst_kind_bb_reduc) + for (tree op : SLP_INSTANCE_REMAIN_DEFS (instance)) + if (TREE_CODE (op) == SSA_NAME) + scalar_use_map.put (op, 1); + if (!visited.add (SLP_INSTANCE_TREE (instance))) + worklist.safe_push (SLP_INSTANCE_TREE (instance)); + } do { @@ -6665,7 +6671,8 @@ vect_bb_slp_mark_live_stmts (bb_vec_info bb_vinfo) if (child && !visited.add (child)) worklist.safe_push (child); } - } while (!worklist.is_empty ()); + } + while (!worklist.is_empty ()); visited.empty (); From 9ac3119fec81fb64d11dee8f853145f937389366 Mon Sep 17 00:00:00 2001 From: Srinivas Yadav Singanaboina <vasu.srinivasvasu.14@gmail.com> Date: Sat, 16 Mar 2024 19:04:35 +0000 Subject: [PATCH 275/551] libstdc++: add ARM SVE support to std::experimental::simd libstdc++-v3/ChangeLog: * include/Makefile.am: Add simd_sve.h. * include/Makefile.in: Add simd_sve.h. * include/experimental/bits/simd.h: Add new SveAbi. * include/experimental/bits/simd_builtin.h: Use __no_sve_deduce_t to support existing Neon Abi. * include/experimental/bits/simd_converter.h: Convert sequentially when sve is available. * include/experimental/bits/simd_detail.h: Define sve specific macro. * include/experimental/bits/simd_math.h: Fallback frexp to execute sequntially when sve is available, to handle fixed_size_simd return type that always uses sve. * include/experimental/simd: Include bits/simd_sve.h. * testsuite/experimental/simd/tests/bits/main.h: Enable testing for sve128, sve256, sve512. * include/experimental/bits/simd_sve.h: New file. Signed-off-by: Srinivas Yadav Singanaboina <vasu.srinivasvasu.14@gmail.com> --- libstdc++-v3/include/Makefile.am | 1 + libstdc++-v3/include/Makefile.in | 1 + libstdc++-v3/include/experimental/bits/simd.h | 135 +- .../include/experimental/bits/simd_builtin.h | 180 +- .../experimental/bits/simd_converter.h | 57 +- .../include/experimental/bits/simd_detail.h | 12 +- .../include/experimental/bits/simd_math.h | 15 +- .../include/experimental/bits/simd_sve.h | 1852 +++++++++++++++++ libstdc++-v3/include/experimental/simd | 3 + .../experimental/simd/tests/bits/main.h | 3 + 10 files changed, 2155 insertions(+), 104 deletions(-) create mode 100644 libstdc++-v3/include/experimental/bits/simd_sve.h diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index cb902de36aed..422a0f4bd0a8 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -835,6 +835,7 @@ experimental_bits_headers = \ ${experimental_bits_srcdir}/simd_neon.h \ ${experimental_bits_srcdir}/simd_ppc.h \ ${experimental_bits_srcdir}/simd_scalar.h \ + ${experimental_bits_srcdir}/simd_sve.h \ ${experimental_bits_srcdir}/simd_x86.h \ ${experimental_bits_srcdir}/simd_x86_conversions.h \ ${experimental_bits_srcdir}/string_view.tcc \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 9357087acb4d..9fd4ab4848c3 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -1181,6 +1181,7 @@ experimental_bits_headers = \ ${experimental_bits_srcdir}/simd_neon.h \ ${experimental_bits_srcdir}/simd_ppc.h \ ${experimental_bits_srcdir}/simd_scalar.h \ + ${experimental_bits_srcdir}/simd_sve.h \ ${experimental_bits_srcdir}/simd_x86.h \ ${experimental_bits_srcdir}/simd_x86_conversions.h \ ${experimental_bits_srcdir}/string_view.tcc \ diff --git a/libstdc++-v3/include/experimental/bits/simd.h b/libstdc++-v3/include/experimental/bits/simd.h index 974377c67980..03c2e17a3265 100644 --- a/libstdc++-v3/include/experimental/bits/simd.h +++ b/libstdc++-v3/include/experimental/bits/simd.h @@ -39,12 +39,16 @@ #include <functional> #include <iosfwd> #include <utility> +#include <algorithm> #if _GLIBCXX_SIMD_X86INTRIN #include <x86intrin.h> #elif _GLIBCXX_SIMD_HAVE_NEON #include <arm_neon.h> #endif +#if _GLIBCXX_SIMD_HAVE_SVE +#include <arm_sve.h> +#endif /** @ingroup ts_simd * @{ @@ -83,6 +87,12 @@ using __m512d [[__gnu__::__vector_size__(64)]] = double; using __m512i [[__gnu__::__vector_size__(64)]] = long long; #endif +#if _GLIBCXX_SIMD_HAVE_SVE +constexpr inline int __sve_vectorized_size_bytes = __ARM_FEATURE_SVE_BITS / 8; +#else +constexpr inline int __sve_vectorized_size_bytes = 0; +#endif + namespace simd_abi { // simd_abi forward declarations {{{ // implementation details: @@ -108,6 +118,9 @@ template <int _UsedBytes> template <int _UsedBytes> struct _VecBltnBtmsk; +template <int _UsedBytes, int _TotalBytes = __sve_vectorized_size_bytes> + struct _SveAbi; + template <typename _Tp, int _Np> using _VecN = _VecBuiltin<sizeof(_Tp) * _Np>; @@ -123,6 +136,9 @@ template <int _UsedBytes = 64> template <int _UsedBytes = 16> using _Neon = _VecBuiltin<_UsedBytes>; +template <int _UsedBytes = __sve_vectorized_size_bytes> + using _Sve = _SveAbi<_UsedBytes, __sve_vectorized_size_bytes>; + // implementation-defined: using __sse = _Sse<>; using __avx = _Avx<>; @@ -130,6 +146,7 @@ using __avx512 = _Avx512<>; using __neon = _Neon<>; using __neon128 = _Neon<16>; using __neon64 = _Neon<8>; +using __sve = _Sve<>; // standard: template <typename _Tp, size_t _Np, typename...> @@ -250,6 +267,9 @@ constexpr inline bool __support_neon_float = false; #endif +constexpr inline bool __have_sve = _GLIBCXX_SIMD_HAVE_SVE; +constexpr inline bool __have_sve2 = _GLIBCXX_SIMD_HAVE_SVE2; + #ifdef _ARCH_PWR10 constexpr inline bool __have_power10vec = true; #else @@ -356,12 +376,14 @@ namespace __detail | (__have_avx512vnni << 27) | (__have_avx512vpopcntdq << 28) | (__have_avx512vp2intersect << 29); - else if constexpr (__have_neon) + else if constexpr (__have_neon || __have_sve) return __have_neon | (__have_neon_a32 << 1) | (__have_neon_a64 << 2) | (__have_neon_a64 << 2) - | (__support_neon_float << 3); + | (__support_neon_float << 3) + | (__have_sve << 4) + | (__have_sve2 << 5); else if constexpr (__have_power_vmx) return __have_power_vmx | (__have_power_vsx << 1) @@ -733,6 +755,16 @@ template <typename _Abi> return _Bytes <= 16 && is_same_v<simd_abi::_VecBuiltin<_Bytes>, _Abi>; } +// }}} +// __is_sve_abi {{{ +template <typename _Abi> + constexpr bool + __is_sve_abi() + { + constexpr auto _Bytes = __abi_bytes_v<_Abi>; + return _Bytes <= __sve_vectorized_size_bytes && is_same_v<simd_abi::_Sve<_Bytes>, _Abi>; + } + // }}} // __make_dependent_t {{{ template <typename, typename _Up> @@ -998,6 +1030,9 @@ template <typename _Tp> template <typename _Tp> using _SimdWrapper64 = _SimdWrapper<_Tp, 64 / sizeof(_Tp)>; +template <typename _Tp, size_t _Width> + struct _SveSimdWrapper; + // }}} // __is_simd_wrapper {{{ template <typename _Tp> @@ -2830,7 +2865,8 @@ namespace simd_abi { // most of simd_abi is defined in simd_detail.h template <typename _Tp> inline constexpr int max_fixed_size - = (__have_avx512bw && sizeof(_Tp) == 1) ? 64 : 32; + = ((__have_avx512bw && sizeof(_Tp) == 1) + || (__have_sve && __sve_vectorized_size_bytes/sizeof(_Tp) >= 64)) ? 64 : 32; // compatible {{{ #if defined __x86_64__ || defined __aarch64__ @@ -2858,6 +2894,8 @@ template <typename _Tp> constexpr size_t __bytes = __vectorized_sizeof<_Tp>(); if constexpr (__bytes == sizeof(_Tp)) return static_cast<scalar*>(nullptr); + else if constexpr (__have_sve) + return static_cast<_SveAbi<__sve_vectorized_size_bytes>*>(nullptr); else if constexpr (__have_avx512vl || (__have_avx512f && __bytes == 64)) return static_cast<_VecBltnBtmsk<__bytes>*>(nullptr); else @@ -2951,6 +2989,9 @@ template <typename _Tp, typename _Abi = simd_abi::__default_abi<_Tp>> template <typename _Tp, size_t _Np, typename = void> struct __deduce_impl; +template <typename _Tp, size_t _Np, typename = void> + struct __no_sve_deduce_impl; + namespace simd_abi { /** * @tparam _Tp The requested `value_type` for the elements. @@ -2965,6 +3006,12 @@ template <typename _Tp, size_t _Np, typename...> template <typename _Tp, size_t _Np, typename... _Abis> using deduce_t = typename deduce<_Tp, _Np, _Abis...>::type; + +template <typename _Tp, size_t _Np, typename...> + struct __no_sve_deduce : __no_sve_deduce_impl<_Tp, _Np> {}; + +template <typename _Tp, size_t _Np, typename... _Abis> + using __no_sve_deduce_t = typename __no_sve_deduce<_Tp, _Np, _Abis...>::type; } // namespace simd_abi // }}}2 @@ -2974,13 +3021,27 @@ template <typename _Tp, typename _V, typename = void> template <typename _Tp, typename _Up, typename _Abi> struct rebind_simd<_Tp, simd<_Up, _Abi>, - void_t<simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>> - { using type = simd<_Tp, simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>; }; + void_t<std::conditional_t<!__is_sve_abi<_Abi>(), + simd_abi::__no_sve_deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>, + simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>>> + { + using type = simd<_Tp, std::conditional_t< + !__is_sve_abi<_Abi>(), + simd_abi::__no_sve_deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>, + simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>>; + }; template <typename _Tp, typename _Up, typename _Abi> struct rebind_simd<_Tp, simd_mask<_Up, _Abi>, - void_t<simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>> - { using type = simd_mask<_Tp, simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>; }; + void_t<std::conditional_t<!__is_sve_abi<_Abi>(), + simd_abi::__no_sve_deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>, + simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>>> + { + using type = simd_mask<_Tp, std::conditional_t< + !__is_sve_abi<_Abi>(), + simd_abi::__no_sve_deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>, + simd_abi::deduce_t<_Tp, simd_size_v<_Up, _Abi>, _Abi>>>; + }; template <typename _Tp, typename _V> using rebind_simd_t = typename rebind_simd<_Tp, _V>::type; @@ -3243,7 +3304,7 @@ template <typename _Tp, typename _Up, typename _Ap> else if constexpr (_Tp::size() == 1) return __x[0]; else if constexpr (sizeof(_Tp) == sizeof(__x) - && !__is_fixed_size_abi_v<_Ap>) + && !__is_fixed_size_abi_v<_Ap> && !__is_sve_abi<_Ap>()) return {__private_init, __vector_bitcast<typename _Tp::value_type, _Tp::size()>( _Ap::_S_masked(__data(__x))._M_data)}; @@ -4004,18 +4065,29 @@ template <typename _V, typename _Ap, split(const simd<typename _V::value_type, _Ap>& __x) { using _Tp = typename _V::value_type; + + auto __gen_fallback = [&]() constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return __generate_from_n_evaluations<_Parts, array<_V, _Parts>>( + [&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return _V([&](auto __j) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA + { return __x[__i * _V::size() + __j]; }); + }); + }; + if constexpr (_Parts == 1) { return {simd_cast<_V>(__x)}; } else if (__x._M_is_constprop()) { - return __generate_from_n_evaluations<_Parts, array<_V, _Parts>>( - [&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { - return _V([&](auto __j) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA - { return __x[__i * _V::size() + __j]; }); - }); + return __gen_fallback(); } +#if _GLIBCXX_SIMD_HAVE_SVE + else if constexpr(__is_sve_abi<_Ap>) + { + return __gen_fallback(); + } +#endif else if constexpr ( __is_fixed_size_abi_v<_Ap> && (is_same_v<typename _V::abi_type, simd_abi::scalar> @@ -4115,7 +4187,8 @@ template <size_t... _Sizes, typename _Tp, typename _Ap, typename> constexpr size_t _N0 = _SL::template _S_at<0>(); using _V = __deduced_simd<_Tp, _N0>; - if (__x._M_is_constprop()) + auto __gen_fallback = [&]() constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA + { return __generate_from_n_evaluations<sizeof...(_Sizes), _Tuple>( [&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { using _Vi = __deduced_simd<_Tp, _SL::_S_at(__i)>; @@ -4124,6 +4197,14 @@ template <size_t... _Sizes, typename _Tp, typename _Ap, typename> return __x[__offset + __j]; }); }); + }; + + if (__x._M_is_constprop()) + __gen_fallback(); +#if _GLIBCXX_SIMD_HAVE_SVE + else if constexpr (__have_sve) + __gen_fallback(); +#endif else if constexpr (_Np == _N0) { static_assert(sizeof...(_Sizes) == 1); @@ -4510,8 +4591,11 @@ template <template <int> class _A0, template <int> class... _Rest> // 1. The ABI tag is valid for _Tp // 2. The storage overhead is no more than padding to fill the next // power-of-2 number of bytes - if constexpr (_A0<_Bytes>::template _S_is_valid_v< - _Tp> && __fullsize / 2 < _Np) + if constexpr (_A0<_Bytes>::template _S_is_valid_v<_Tp> + && ((__is_sve_abi<_A0<_Bytes>>() && __have_sve + && (_Np <= __sve_vectorized_size_bytes/sizeof(_Tp))) + || (__fullsize / 2 < _Np)) + ) return typename __decay_abi<_A0<_Bytes>>::type{}; else { @@ -4536,7 +4620,13 @@ template <template <int> class _A0, template <int> class... _Rest> // the following lists all native ABIs, which makes them accessible to // simd_abi::deduce and select_best_vector_type_t (for fixed_size). Order // matters: Whatever comes first has higher priority. -using _AllNativeAbis = _AbiList<simd_abi::_VecBltnBtmsk, simd_abi::_VecBuiltin, +using _AllNativeAbis = _AbiList< +#if _GLIBCXX_SIMD_HAVE_SVE + simd_abi::_SveAbi, +#endif + simd_abi::_VecBltnBtmsk, simd_abi::_VecBuiltin, __scalar_abi_wrapper>; + +using _NoSveAllNativeAbis = _AbiList<simd_abi::_VecBltnBtmsk, simd_abi::_VecBuiltin, __scalar_abi_wrapper>; // valid _SimdTraits specialization {{{1 @@ -4551,6 +4641,11 @@ template <typename _Tp, size_t _Np> _Tp, _Np, enable_if_t<_AllNativeAbis::template _S_has_valid_abi<_Tp, _Np>>> { using type = _AllNativeAbis::_FirstValidAbi<_Tp, _Np>; }; +template <typename _Tp, size_t _Np> + struct __no_sve_deduce_impl< + _Tp, _Np, enable_if_t<_NoSveAllNativeAbis::template _S_has_valid_abi<_Tp, _Np>>> + { using type = _NoSveAllNativeAbis::_FirstValidAbi<_Tp, _Np>; }; + // fall back to fixed_size only if scalar and native ABIs don't match template <typename _Tp, size_t _Np, typename = void> struct __deduce_fixed_size_fallback {}; @@ -4563,6 +4658,12 @@ template <typename _Tp, size_t _Np> template <typename _Tp, size_t _Np, typename> struct __deduce_impl : public __deduce_fixed_size_fallback<_Tp, _Np> {}; +template <typename _Tp, size_t _Np, typename> + struct __no_sve_deduce_impl + : public __deduce_fixed_size_fallback<_Tp, _Np> + {}; + + //}}}1 /// @endcond diff --git a/libstdc++-v3/include/experimental/bits/simd_builtin.h b/libstdc++-v3/include/experimental/bits/simd_builtin.h index 1a716f2dbb7c..28227a5d97f4 100644 --- a/libstdc++-v3/include/experimental/bits/simd_builtin.h +++ b/libstdc++-v3/include/experimental/bits/simd_builtin.h @@ -1614,7 +1614,7 @@ template <typename _Abi, typename> static_assert(_UW_size <= _TV_size); using _UW = _SimdWrapper<_Up, _UW_size>; using _UV = __vector_type_t<_Up, _UW_size>; - using _UAbi = simd_abi::deduce_t<_Up, _UW_size>; + using _UAbi = simd_abi::__no_sve_deduce_t<_Up, _UW_size>; if constexpr (_UW_size == _TV_size) // one convert+store { const _UW __converted = __convert<_UW>(__v); @@ -1857,7 +1857,7 @@ template <typename _Abi, typename> else if constexpr (is_same_v<__remove_cvref_t<_BinaryOperation>, plus<>>) { - using _Ap = simd_abi::deduce_t<_Tp, __full_size>; + using _Ap = simd_abi::__no_sve_deduce_t<_Tp, __full_size>; return _Ap::_SimdImpl::_S_reduce( simd<_Tp, _Ap>(__private_init, _Abi::_S_masked(__as_vector(__x))), @@ -1866,7 +1866,7 @@ template <typename _Abi, typename> else if constexpr (is_same_v<__remove_cvref_t<_BinaryOperation>, multiplies<>>) { - using _Ap = simd_abi::deduce_t<_Tp, __full_size>; + using _Ap = simd_abi::__no_sve_deduce_t<_Tp, __full_size>; using _TW = _SimdWrapper<_Tp, __full_size>; _GLIBCXX_SIMD_USE_CONSTEXPR auto __implicit_mask_full = _Abi::template _S_implicit_mask<_Tp>().__as_full_vector(); @@ -1882,7 +1882,7 @@ template <typename _Abi, typename> } else if constexpr (_Np & 1) { - using _Ap = simd_abi::deduce_t<_Tp, _Np - 1>; + using _Ap = simd_abi::__no_sve_deduce_t<_Tp, _Np - 1>; return __binary_op( simd<_Tp, simd_abi::scalar>(_Ap::_SimdImpl::_S_reduce( simd<_Tp, _Ap>( @@ -1936,7 +1936,7 @@ template <typename _Abi, typename> { static_assert(sizeof(__x) > __min_vector_size<_Tp>); static_assert((_Np & (_Np - 1)) == 0); // _Np must be a power of 2 - using _Ap = simd_abi::deduce_t<_Tp, _Np / 2>; + using _Ap = simd_abi::__no_sve_deduce_t<_Tp, _Np / 2>; using _V = simd<_Tp, _Ap>; return _Ap::_SimdImpl::_S_reduce( __binary_op(_V(__private_init, __extract<0, 2>(__as_vector(__x))), @@ -2376,83 +2376,95 @@ template <typename _Abi, typename> _GLIBCXX_SIMD_INTRINSIC static __fixed_size_storage_t<int, _Np> _S_fpclassify(_SimdWrapper<_Tp, _Np> __x) { - using _I = __int_for_sizeof_t<_Tp>; - const auto __xn - = __vector_bitcast<_I>(__to_intrin(_SuperImpl::_S_abs(__x))); - constexpr size_t _NI = sizeof(__xn) / sizeof(_I); - _GLIBCXX_SIMD_USE_CONSTEXPR auto __minn - = __vector_bitcast<_I>(__vector_broadcast<_NI>(__norm_min_v<_Tp>)); - - _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_normal - = __vector_broadcast<_NI, _I>(FP_NORMAL); + if constexpr(__have_sve) + { + __fixed_size_storage_t<int, _Np> __r{}; + __execute_n_times<_Np>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __r._M_set(__i, std::fpclassify(__x[__i])); + }); + return __r; + } + else + { + using _I = __int_for_sizeof_t<_Tp>; + const auto __xn + = __vector_bitcast<_I>(__to_intrin(_SuperImpl::_S_abs(__x))); + constexpr size_t _NI = sizeof(__xn) / sizeof(_I); + _GLIBCXX_SIMD_USE_CONSTEXPR auto __minn + = __vector_bitcast<_I>(__vector_broadcast<_NI>(__norm_min_v<_Tp>)); + + _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_normal + = __vector_broadcast<_NI, _I>(FP_NORMAL); #if !__FINITE_MATH_ONLY__ - _GLIBCXX_SIMD_USE_CONSTEXPR auto __infn - = __vector_bitcast<_I>(__vector_broadcast<_NI>(__infinity_v<_Tp>)); - _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_nan - = __vector_broadcast<_NI, _I>(FP_NAN); - _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_infinite - = __vector_broadcast<_NI, _I>(FP_INFINITE); + _GLIBCXX_SIMD_USE_CONSTEXPR auto __infn + = __vector_bitcast<_I>(__vector_broadcast<_NI>(__infinity_v<_Tp>)); + _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_nan + = __vector_broadcast<_NI, _I>(FP_NAN); + _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_infinite + = __vector_broadcast<_NI, _I>(FP_INFINITE); #endif #ifndef __FAST_MATH__ - _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_subnormal - = __vector_broadcast<_NI, _I>(FP_SUBNORMAL); + _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_subnormal + = __vector_broadcast<_NI, _I>(FP_SUBNORMAL); #endif - _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_zero - = __vector_broadcast<_NI, _I>(FP_ZERO); + _GLIBCXX_SIMD_USE_CONSTEXPR auto __fp_zero + = __vector_broadcast<_NI, _I>(FP_ZERO); - __vector_type_t<_I, _NI> - __tmp = __xn < __minn - #ifdef __FAST_MATH__ - ? __fp_zero - #else - ? (__xn == 0 ? __fp_zero : __fp_subnormal) - #endif - #if __FINITE_MATH_ONLY__ - : __fp_normal; - #else - : (__xn < __infn ? __fp_normal - : (__xn == __infn ? __fp_infinite : __fp_nan)); - #endif + __vector_type_t<_I, _NI> + __tmp = __xn < __minn +#ifdef __FAST_MATH__ + ? __fp_zero +#else + ? (__xn == 0 ? __fp_zero : __fp_subnormal) +#endif +#if __FINITE_MATH_ONLY__ + : __fp_normal; +#else + : (__xn < __infn ? __fp_normal + : (__xn == __infn ? __fp_infinite : __fp_nan)); +#endif - if constexpr (sizeof(_I) == sizeof(int)) - { - using _FixedInt = __fixed_size_storage_t<int, _Np>; - const auto __as_int = __vector_bitcast<int, _Np>(__tmp); - if constexpr (_FixedInt::_S_tuple_size == 1) - return {__as_int}; - else if constexpr (_FixedInt::_S_tuple_size == 2 - && is_same_v< - typename _FixedInt::_SecondType::_FirstAbi, - simd_abi::scalar>) - return {__extract<0, 2>(__as_int), __as_int[_Np - 1]}; - else if constexpr (_FixedInt::_S_tuple_size == 2) - return {__extract<0, 2>(__as_int), - __auto_bitcast(__extract<1, 2>(__as_int))}; + if constexpr (sizeof(_I) == sizeof(int)) + { + using _FixedInt = __fixed_size_storage_t<int, _Np>; + const auto __as_int = __vector_bitcast<int, _Np>(__tmp); + if constexpr (_FixedInt::_S_tuple_size == 1) + return {__as_int}; + else if constexpr (_FixedInt::_S_tuple_size == 2 + && is_same_v< + typename _FixedInt::_SecondType::_FirstAbi, + simd_abi::scalar>) + return {__extract<0, 2>(__as_int), __as_int[_Np - 1]}; + else if constexpr (_FixedInt::_S_tuple_size == 2) + return {__extract<0, 2>(__as_int), + __auto_bitcast(__extract<1, 2>(__as_int))}; + else + __assert_unreachable<_Tp>(); + } + else if constexpr (_Np == 2 && sizeof(_I) == 8 + && __fixed_size_storage_t<int, _Np>::_S_tuple_size == 2) + { + const auto __aslong = __vector_bitcast<_LLong>(__tmp); + return {int(__aslong[0]), {int(__aslong[1])}}; + } +#if _GLIBCXX_SIMD_X86INTRIN + else if constexpr (sizeof(_Tp) == 8 && sizeof(__tmp) == 32 + && __fixed_size_storage_t<int, _Np>::_S_tuple_size == 1) + return {_mm_packs_epi32(__to_intrin(__lo128(__tmp)), + __to_intrin(__hi128(__tmp)))}; + else if constexpr (sizeof(_Tp) == 8 && sizeof(__tmp) == 64 + && __fixed_size_storage_t<int, _Np>::_S_tuple_size == 1) + return {_mm512_cvtepi64_epi32(__to_intrin(__tmp))}; +#endif // _GLIBCXX_SIMD_X86INTRIN + else if constexpr (__fixed_size_storage_t<int, _Np>::_S_tuple_size == 1) + return {__call_with_subscripts<_Np>(__vector_bitcast<_LLong>(__tmp), + [](auto... __l) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return __make_wrapper<int>(__l...); + })}; else __assert_unreachable<_Tp>(); } - else if constexpr (_Np == 2 && sizeof(_I) == 8 - && __fixed_size_storage_t<int, _Np>::_S_tuple_size == 2) - { - const auto __aslong = __vector_bitcast<_LLong>(__tmp); - return {int(__aslong[0]), {int(__aslong[1])}}; - } -#if _GLIBCXX_SIMD_X86INTRIN - else if constexpr (sizeof(_Tp) == 8 && sizeof(__tmp) == 32 - && __fixed_size_storage_t<int, _Np>::_S_tuple_size == 1) - return {_mm_packs_epi32(__to_intrin(__lo128(__tmp)), - __to_intrin(__hi128(__tmp)))}; - else if constexpr (sizeof(_Tp) == 8 && sizeof(__tmp) == 64 - && __fixed_size_storage_t<int, _Np>::_S_tuple_size == 1) - return {_mm512_cvtepi64_epi32(__to_intrin(__tmp))}; -#endif // _GLIBCXX_SIMD_X86INTRIN - else if constexpr (__fixed_size_storage_t<int, _Np>::_S_tuple_size == 1) - return {__call_with_subscripts<_Np>(__vector_bitcast<_LLong>(__tmp), - [](auto... __l) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { - return __make_wrapper<int>(__l...); - })}; - else - __assert_unreachable<_Tp>(); } // _S_increment & _S_decrement{{{2 @@ -2785,11 +2797,23 @@ template <typename _Abi, typename> return _R(_UAbi::_MaskImpl::_S_to_bits(__data(__x))._M_to_bits()); } else - return _SuperImpl::template _S_to_maskvector<__int_for_sizeof_t<_Tp>, - _S_size<_Tp>>( - __data(__x)); - } - + { + if constexpr(__is_sve_abi<_UAbi>()) + { + simd_mask<_Tp> __r(false); + constexpr size_t __min_size = std::min(__r.size(), __x.size()); + __execute_n_times<__min_size>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __r[__i] = __x[__i]; + }); + return __data(__r); + } + else + return _SuperImpl::template _S_to_maskvector<__int_for_sizeof_t<_Tp>, + _S_size<_Tp>>( + __data(__x)); + } + } // }}} // _S_masked_load {{{2 template <typename _Tp, size_t _Np> diff --git a/libstdc++-v3/include/experimental/bits/simd_converter.h b/libstdc++-v3/include/experimental/bits/simd_converter.h index 82da9facbf87..03fb3d28ab12 100644 --- a/libstdc++-v3/include/experimental/bits/simd_converter.h +++ b/libstdc++-v3/include/experimental/bits/simd_converter.h @@ -28,6 +28,18 @@ #if __cplusplus >= 201703L _GLIBCXX_SIMD_BEGIN_NAMESPACE + +template <typename _Arg, typename _Ret, typename _To, size_t _Np> + _Ret __converter_fallback(_Arg __a) + { + _Ret __ret{}; + __execute_n_times<_Np>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __ret._M_set(__i, static_cast<_To>(__a[__i])); + }); + return __ret; + } + // _SimdConverter scalar -> scalar {{{ template <typename _From, typename _To> struct _SimdConverter<_From, simd_abi::scalar, _To, simd_abi::scalar, @@ -56,14 +68,15 @@ template <typename _From, typename _To, typename _Abi> }; // }}} -// _SimdConverter "native 1" -> "native 2" {{{ +// _SimdConverter "native non-sve 1" -> "native non-sve 2" {{{ template <typename _From, typename _To, typename _AFrom, typename _ATo> struct _SimdConverter< _From, _AFrom, _To, _ATo, enable_if_t<!disjunction_v< __is_fixed_size_abi<_AFrom>, __is_fixed_size_abi<_ATo>, is_same<_AFrom, simd_abi::scalar>, is_same<_ATo, simd_abi::scalar>, - conjunction<is_same<_From, _To>, is_same<_AFrom, _ATo>>>>> + conjunction<is_same<_From, _To>, is_same<_AFrom, _ATo>>> + && !(__is_sve_abi<_AFrom>() || __is_sve_abi<_ATo>())>> { using _Arg = typename _AFrom::template __traits<_From>::_SimdMember; using _Ret = typename _ATo::template __traits<_To>::_SimdMember; @@ -75,6 +88,26 @@ template <typename _From, typename _To, typename _AFrom, typename _ATo> { return __vector_convert<_V>(__a, __more...); } }; +// }}} +// _SimdConverter "native 1" -> "native 2" {{{ +template <typename _From, typename _To, typename _AFrom, typename _ATo> + struct _SimdConverter< + _From, _AFrom, _To, _ATo, + enable_if_t<!disjunction_v< + __is_fixed_size_abi<_AFrom>, __is_fixed_size_abi<_ATo>, + is_same<_AFrom, simd_abi::scalar>, is_same<_ATo, simd_abi::scalar>, + conjunction<is_same<_From, _To>, is_same<_AFrom, _ATo>>> + && (__is_sve_abi<_AFrom>() || __is_sve_abi<_ATo>()) + >> + { + using _Arg = typename _AFrom::template __traits<_From>::_SimdMember; + using _Ret = typename _ATo::template __traits<_To>::_SimdMember; + + _GLIBCXX_SIMD_INTRINSIC constexpr _Ret + operator()(_Arg __x) const noexcept + { return __converter_fallback<_Arg, _Ret, _To, simd_size_v<_To, _ATo>>(__x); } + }; + // }}} // _SimdConverter scalar -> fixed_size<1> {{{1 template <typename _From, typename _To> @@ -111,6 +144,10 @@ template <typename _From, typename _To, int _Np> if constexpr (is_same_v<_From, _To>) return __x; + // fallback to sequential when sve is available + else if constexpr (__have_sve) + return __converter_fallback<_Arg, _Ret, _To, _Np>(__x); + // special case (optimize) int signedness casts else if constexpr (sizeof(_From) == sizeof(_To) && is_integral_v<_From> && is_integral_v<_To>) @@ -275,11 +312,14 @@ template <typename _From, typename _Ap, typename _To, int _Np> "_SimdConverter to fixed_size only works for equal element counts"); using _Ret = __fixed_size_storage_t<_To, _Np>; + using _Arg = typename _SimdTraits<_From, _Ap>::_SimdMember; _GLIBCXX_SIMD_INTRINSIC constexpr _Ret - operator()(typename _SimdTraits<_From, _Ap>::_SimdMember __x) const noexcept + operator()(_Arg __x) const noexcept { - if constexpr (_Ret::_S_tuple_size == 1) + if constexpr (__have_sve) + return __converter_fallback<_Arg, _Ret, _To, _Np>(__x); + else if constexpr (_Ret::_S_tuple_size == 1) return {__vector_convert<typename _Ret::_FirstType::_BuiltinType>(__x)}; else { @@ -316,12 +356,15 @@ template <typename _From, int _Np, typename _To, typename _Ap> "_SimdConverter to fixed_size only works for equal element counts"); using _Arg = __fixed_size_storage_t<_From, _Np>; + using _Ret = typename _SimdTraits<_To, _Ap>::_SimdMember; _GLIBCXX_SIMD_INTRINSIC constexpr - typename _SimdTraits<_To, _Ap>::_SimdMember - operator()(const _Arg& __x) const noexcept + _Ret + operator()(const _Arg& __x) const noexcept { - if constexpr (_Arg::_S_tuple_size == 1) + if constexpr(__have_sve) + return __converter_fallback<_Arg, _Ret, _To, _Np>(__x); + else if constexpr (_Arg::_S_tuple_size == 1) return __vector_convert<__vector_type_t<_To, _Np>>(__x.first); else if constexpr (_Arg::_S_is_homogeneous) return __call_with_n_evaluations<_Arg::_S_tuple_size>( diff --git a/libstdc++-v3/include/experimental/bits/simd_detail.h b/libstdc++-v3/include/experimental/bits/simd_detail.h index 214ae0da9e4e..51e130bd36a5 100644 --- a/libstdc++-v3/include/experimental/bits/simd_detail.h +++ b/libstdc++-v3/include/experimental/bits/simd_detail.h @@ -61,6 +61,16 @@ #else #define _GLIBCXX_SIMD_HAVE_NEON_A64 0 #endif +#if (__ARM_FEATURE_SVE_BITS > 0 && __ARM_FEATURE_SVE_VECTOR_OPERATORS==1) +#define _GLIBCXX_SIMD_HAVE_SVE 1 +#else +#define _GLIBCXX_SIMD_HAVE_SVE 0 +#endif +#ifdef __ARM_FEATURE_SVE2 +#define _GLIBCXX_SIMD_HAVE_SVE2 1 +#else +#define _GLIBCXX_SIMD_HAVE_SVE2 0 +#endif //}}} // x86{{{ #ifdef __MMX__ @@ -267,7 +277,7 @@ #define _GLIBCXX_SIMD_IS_UNLIKELY(__x) __builtin_expect(__x, 0) #define _GLIBCXX_SIMD_IS_LIKELY(__x) __builtin_expect(__x, 1) -#if __STRICT_ANSI__ || defined __clang__ +#if _GLIBCXX_SIMD_HAVE_SVE || __STRICT_ANSI__ || defined __clang__ #define _GLIBCXX_SIMD_CONSTEXPR #define _GLIBCXX_SIMD_USE_CONSTEXPR_API const #else diff --git a/libstdc++-v3/include/experimental/bits/simd_math.h b/libstdc++-v3/include/experimental/bits/simd_math.h index 06e7b4496f99..bf515e5145de 100644 --- a/libstdc++-v3/include/experimental/bits/simd_math.h +++ b/libstdc++-v3/include/experimental/bits/simd_math.h @@ -652,6 +652,18 @@ template <typename _Tp, typename _Abi, typename = __detail::__odr_helper> (*__exp)[0] = __tmp; return __r; } + else if constexpr (__is_sve_abi<_Abi>()) + { + simd<_Tp, _Abi> __r; + __execute_n_times<simd_size_v<_Tp, _Abi>>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + int __tmp; + const auto __ri = std::frexp(__x[__i], &__tmp); + (*__exp)[__i] = __tmp; + __r[__i] = __ri; + }); + return __r; + } else if constexpr (__is_fixed_size_abi_v<_Abi>) return {__private_init, _Abi::_SimdImpl::_S_frexp(__data(__x), __data(*__exp))}; #if _GLIBCXX_SIMD_X86INTRIN @@ -1135,7 +1147,8 @@ _GLIBCXX_SIMD_CVTING2(hypot) _GLIBCXX_SIMD_USE_CONSTEXPR_API _V __inf(__infinity_v<_Tp>); #ifndef __FAST_MATH__ - if constexpr (_V::size() > 1 && __have_neon && !__have_neon_a32) + if constexpr (_V::size() > 1 + && __is_neon_abi<_Abi>() && __have_neon && !__have_neon_a32) { // With ARMv7 NEON, we have no subnormals and must use slightly // different strategy const _V __hi_exp = __hi & __inf; diff --git a/libstdc++-v3/include/experimental/bits/simd_sve.h b/libstdc++-v3/include/experimental/bits/simd_sve.h new file mode 100644 index 000000000000..4635911f1fa1 --- /dev/null +++ b/libstdc++-v3/include/experimental/bits/simd_sve.h @@ -0,0 +1,1852 @@ +// Simd SVE specific implementations -*- C++ -*- + +// Copyright The GNU Toolchain Authors. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// <http://www.gnu.org/licenses/>. + + +#ifndef _GLIBCXX_EXPERIMENTAL_SIMD_SVE_H_ +#define _GLIBCXX_EXPERIMENTAL_SIMD_SVE_H_ + +#if __cplusplus >= 201703L + +#if !_GLIBCXX_SIMD_HAVE_SVE +#error "simd_sve.h may only be included when SVE on ARM is available" +#endif + +_GLIBCXX_SIMD_BEGIN_NAMESPACE + +// Helper function mapping to sve supported types +template <typename _Tp> + constexpr auto + __get_sve_value_type() + { + if constexpr (is_integral_v<_Tp>) + { + if constexpr (is_signed_v<_Tp>) + { + if constexpr (sizeof(_Tp) == 1) + return int8_t{}; + else if constexpr (sizeof(_Tp) == 2) + return int16_t{}; + else if constexpr (sizeof(_Tp) == 4) + return int32_t{}; + else if constexpr (sizeof(_Tp) == 8) + return int64_t{}; + else + return _Tp{}; + } + else + { + if constexpr (sizeof(_Tp) == 1) + return uint8_t{}; + else if constexpr (sizeof(_Tp) == 2) + return uint16_t{}; + else if constexpr (sizeof(_Tp) == 4) + return uint32_t{}; + else if constexpr (sizeof(_Tp) == 8) + return uint64_t{}; + else + return _Tp{}; + } + } + else + { + if constexpr (is_floating_point_v<_Tp>) + { + if constexpr (sizeof(_Tp) == 4) + return float32_t{}; + else if constexpr (sizeof(_Tp) == 8) + return float64_t{}; + else + return _Tp{}; + } + } + } + +template <typename _Tp> + using __get_sve_value_type_t = decltype(__get_sve_value_type<_Tp>()); + +typedef svbool_t __sve_bool_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + +template <typename _Tp, size_t _Np> + struct __sve_vector_type; + +template <typename _Tp, size_t _Np> + using __sve_vector_type_t = typename __sve_vector_type<_Tp, _Np>::type; + +template <size_t _Np> + struct __sve_vector_type<int8_t, _Np> + { + typedef svint8_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(int8_t __dup) + { return svdup_s8(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b8(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<uint8_t, _Np> + { + typedef svuint8_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(uint8_t __dup) + { return svdup_u8(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b8(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<int16_t, _Np> + { + typedef svint16_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(int16_t __dup) + { return svdup_s16(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b16(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<uint16_t, _Np> + { + typedef svuint16_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(uint16_t __dup) + { return svdup_u16(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b16(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<int32_t, _Np> + { + typedef svint32_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(int32_t __dup) + { return svdup_s32(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b32(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<uint32_t, _Np> + { + typedef svuint32_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(uint32_t __dup) + { return svdup_u32(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b32(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<int64_t, _Np> + { + typedef svint64_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(int64_t __dup) + { return svdup_s64(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b64(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<uint64_t, _Np> + { + typedef svuint64_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(uint64_t __dup) + { return svdup_u64(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b64(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<float, _Np> + { + typedef svfloat32_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(float __dup) + { return svdup_f32(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b32(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <size_t _Np> + struct __sve_vector_type<double, _Np> + { + typedef svfloat64_t __sve_vlst_type __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static __sve_vlst_type + __sve_broadcast(double __dup) + { return svdup_f64(__dup); } + + inline static __sve_bool_type + __sve_active_mask() + { return svwhilelt_b64(size_t(0), _Np); }; + + using type = __sve_vlst_type; + }; + +template <typename _Tp, size_t _Np> + struct __sve_vector_type + : __sve_vector_type<__get_sve_value_type_t<_Tp>, _Np> + {}; + +template <size_t _Size> + struct __sve_mask_type + { + static_assert((_Size & (_Size - 1)) != 0, "This trait may only be used for non-power-of-2 " + "sizes. Power-of-2 sizes must be specialized."); + + using type = typename __sve_mask_type<std::__bit_ceil(_Size)>::type; + }; + +template <size_t _Size> + using __sve_mask_type_t = typename __sve_mask_type<_Size>::type; + +template <> + struct __sve_mask_type<1> + { + using type = __sve_bool_type; + + using __sve_mask_uint_type = uint8_t; + + typedef svuint8_t __sve_mask_vector_type + __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static auto + __sve_mask_active_count(type __active_mask, type __pred) + { return svcntp_b8(__active_mask, __pred); } + + inline static type + __sve_mask_first_true() + { return svptrue_pat_b8(SV_VL1); } + + inline static type + __sve_mask_next_true(type __active_mask, type __pred) + { return svpnext_b8(__active_mask, __pred); } + + inline static bool + __sve_mask_get(type __active_mask, size_t __i) + { return __sve_mask_vector_type(svdup_u8_z(__active_mask, 1))[__i] != 0;} + + inline static const __sve_mask_vector_type __index0123 = svindex_u8(0, 1); + }; + +template <> + struct __sve_mask_type<2> + { + using type = __sve_bool_type; + + using __sve_mask_uint_type = uint16_t; + + typedef svuint16_t __sve_mask_vector_type + __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static auto + __sve_mask_active_count(type __active_mask, type __pred) + { return svcntp_b16(__active_mask, __pred); } + + inline static type + __sve_mask_first_true() + { return svptrue_pat_b16(SV_VL1); } + + inline static type + __sve_mask_next_true(type __active_mask, type __pred) + { return svpnext_b16(__active_mask, __pred); } + + inline static bool + __sve_mask_get(type __active_mask, size_t __i) + { return __sve_mask_vector_type(svdup_u16_z(__active_mask, 1))[__i] != 0;} + + inline static const __sve_mask_vector_type __index0123 = svindex_u16(0, 1); + }; + +template <> + struct __sve_mask_type<4> + { + using type = __sve_bool_type; + + using __sve_mask_uint_type = uint32_t; + + typedef svuint32_t __sve_mask_vector_type + __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static auto + __sve_mask_active_count(type __active_mask, type __pred) + { return svcntp_b32(__active_mask, __pred); } + + inline static type + __sve_mask_first_true() + { return svptrue_pat_b32(SV_VL1); } + + inline static type + __sve_mask_next_true(type __active_mask, type __pred) + { return svpnext_b32(__active_mask, __pred); } + + inline static bool + __sve_mask_get(type __active_mask, size_t __i) + { return __sve_mask_vector_type(svdup_u32_z(__active_mask, 1))[__i] != 0;} + + inline static const __sve_mask_vector_type __index0123 = svindex_u32(0, 1); + }; + +template <> + struct __sve_mask_type<8> + { + using type = __sve_bool_type; + + using __sve_mask_uint_type = uint64_t; + + typedef svuint64_t __sve_mask_vector_type + __attribute__((arm_sve_vector_bits(__ARM_FEATURE_SVE_BITS))); + + inline static auto + __sve_mask_active_count(type __active_mask, type __pred) + { return svcntp_b64(__active_mask, __pred); } + + inline static type + __sve_mask_first_true() + { return svptrue_pat_b64(SV_VL1); } + + inline static type + __sve_mask_next_true(type __active_mask, type __pred) + { return svpnext_b64(__active_mask, __pred); } + + inline static bool + __sve_mask_get(type __active_mask, size_t __i) + { return __sve_mask_vector_type(svdup_u64_z(__active_mask, 1))[__i] != 0;} + + inline static const __sve_mask_vector_type __index0123 = svindex_u64(0, 1); + }; + +template <typename _To, typename _From> + _GLIBCXX_SIMD_INTRINSIC constexpr auto + __sve_reinterpret_cast(_From __v) + { + if constexpr (std::is_same_v<_To, int32_t>) + return svreinterpret_s32(__v); + else if constexpr (std::is_same_v<_To, int64_t>) + return svreinterpret_s64(__v); + else if constexpr (std::is_same_v<_To, float32_t>) + return svreinterpret_f32(__v); + else if constexpr (std::is_same_v<_To, float64_t>) + return svreinterpret_f64(__v); + else + __assert_unreachable<_To>(); // add more cases if needed. + } + +template <typename _Tp, size_t _Width> + struct _SveSimdWrapper + { + static_assert(__is_vectorizable_v<_Tp>); + + static_assert(_Width >= 2); // 1 doesn't make sense, use _Tp directly then + + using _BuiltinType = __sve_vector_type_t<_Tp, _Width>; + + using value_type = _Tp; + + static inline constexpr size_t _S_full_size = sizeof(_BuiltinType) / sizeof(value_type); + + static inline constexpr int _S_size = _Width; + + static inline constexpr bool _S_is_partial = _S_full_size != _S_size; + + _BuiltinType _M_data; + + _GLIBCXX_SIMD_INTRINSIC constexpr _SveSimdWrapper<_Tp, _S_full_size> + __as_full_vector() const + { return _M_data; } + + _GLIBCXX_SIMD_INTRINSIC constexpr + _SveSimdWrapper(initializer_list<_Tp> __init) + : _M_data(__generate_from_n_evaluations<_Width, _BuiltinType>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return __init.begin()[__i.value]; + })) + {} + + _GLIBCXX_SIMD_INTRINSIC constexpr + _SveSimdWrapper() = default; + + _GLIBCXX_SIMD_INTRINSIC constexpr + _SveSimdWrapper(const _SveSimdWrapper&) = default; + + _GLIBCXX_SIMD_INTRINSIC constexpr + _SveSimdWrapper(_SveSimdWrapper&&) = default; + + _GLIBCXX_SIMD_INTRINSIC constexpr _SveSimdWrapper& + operator=(const _SveSimdWrapper&) = default; + + _GLIBCXX_SIMD_INTRINSIC constexpr _SveSimdWrapper& + operator=(_SveSimdWrapper&&) = default; + + _GLIBCXX_SIMD_INTRINSIC constexpr + _SveSimdWrapper(__sve_vector_type_t<_Tp, _Width> __x) + : _M_data(__x) + {} + + template <typename... _As, typename = enable_if_t<((is_same_v<simd_abi::scalar, _As> && ...) + && sizeof...(_As) <= _Width)>> + _GLIBCXX_SIMD_INTRINSIC constexpr + operator _SimdTuple<_Tp, _As...>() const + { + return __generate_from_n_evaluations<sizeof...(_As), _SimdTuple<_Tp, _As...>>( + [&](auto __i) constexpr _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return _M_data[int(__i)]; + }); + } + + _GLIBCXX_SIMD_INTRINSIC constexpr + operator const _BuiltinType&() const + { return _M_data; } + + _GLIBCXX_SIMD_INTRINSIC constexpr + operator _BuiltinType&() + { return _M_data; } + + _GLIBCXX_SIMD_INTRINSIC constexpr _Tp + operator[](size_t __i) const + { return _M_data[__i]; } + + template <size_t __i> + _GLIBCXX_SIMD_INTRINSIC constexpr _Tp + operator[](_SizeConstant<__i>) const + { return _M_data[__i]; } + + _GLIBCXX_SIMD_INTRINSIC constexpr void + _M_set(size_t __i, _Tp __x) + { + _M_data[__i] = __x; + } + + _GLIBCXX_SIMD_INTRINSIC constexpr bool + _M_is_constprop() const + { return false; } + + _GLIBCXX_SIMD_INTRINSIC constexpr bool + _M_is_constprop_none_of() const + { return false; } + + _GLIBCXX_SIMD_INTRINSIC constexpr bool + _M_is_constprop_all_of() const + { return false; } + }; + +template <size_t _Bits, size_t _Width> + struct _SveMaskWrapper + { + using _BuiltinSveMaskType = __sve_mask_type<_Bits>; + + using _BuiltinSveVectorType = __sve_vector_type<__int_with_sizeof_t<_Bits>, _Width>; + + using _BuiltinType = typename _BuiltinSveMaskType::type; + + using value_type = bool; + + static constexpr size_t _S_full_size = sizeof(_BuiltinType); + + _GLIBCXX_SIMD_INTRINSIC constexpr _SveMaskWrapper<_Bits, _S_full_size> + __as_full_vector() const + { return _M_data; } + + _GLIBCXX_SIMD_INTRINSIC constexpr + _SveMaskWrapper() = default; + + _GLIBCXX_SIMD_INTRINSIC constexpr + _SveMaskWrapper(_BuiltinType __k) + : _M_data(__k) + {}; + + _GLIBCXX_SIMD_INTRINSIC + operator const _BuiltinType&() const + { return _M_data; } + + _GLIBCXX_SIMD_INTRINSIC + operator _BuiltinType&() + { return _M_data; } + + _GLIBCXX_SIMD_INTRINSIC _BuiltinType + __intrin() const + { return _M_data; } + + _GLIBCXX_SIMD_INTRINSIC constexpr value_type + operator[](size_t __i) const + { + return _BuiltinSveMaskType::__sve_mask_get(_M_data, __i); + } + + template <size_t __i> + _GLIBCXX_SIMD_INTRINSIC constexpr value_type + operator[](_SizeConstant<__i>) const + { + return _BuiltinSveMaskType::__sve_mask_get(_M_data, __i); + } + + _GLIBCXX_SIMD_INTRINSIC constexpr void + _M_set(size_t __i, value_type __x) + { + _BuiltinType __index + = svcmpeq(_BuiltinSveVectorType::__sve_active_mask(), _BuiltinSveMaskType::__index0123, + typename _BuiltinSveMaskType::__sve_mask_uint_type(__i)); + + if (__x) + _M_data = svorr_z(_BuiltinSveVectorType::__sve_active_mask(), _M_data, __index); + else + _M_data = svbic_z(_BuiltinSveVectorType::__sve_active_mask(), _M_data, __index); + } + + _GLIBCXX_SIMD_INTRINSIC constexpr bool + _M_is_constprop() const + { return false; } + + _GLIBCXX_SIMD_INTRINSIC constexpr bool + _M_is_constprop_none_of() const + { return false; } + + _GLIBCXX_SIMD_INTRINSIC constexpr bool + _M_is_constprop_all_of() const + { return false; } + + _BuiltinType _M_data; + }; + +struct _CommonImplSve; + +template <typename _Abi, typename = __detail::__odr_helper> + struct _SimdImplSve; + +template <typename _Abi, typename = __detail::__odr_helper> + struct _MaskImplSve; + +template <int _UsedBytes, int> + struct simd_abi::_SveAbi + { + template <typename _Tp> + static constexpr size_t _S_size = _UsedBytes / sizeof(_Tp); + + struct _IsValidAbiTag + : __bool_constant<(_UsedBytes > 1)> + {}; + + template <typename _Tp> + struct _IsValidSizeFor + : __bool_constant<(_UsedBytes / sizeof(_Tp) > 1 && _UsedBytes % sizeof(_Tp) == 0 + && _UsedBytes <= __sve_vectorized_size_bytes)> + {}; + + template <typename _Tp> + struct _IsValid + : conjunction<_IsValidAbiTag, __bool_constant<__have_sve>, + __bool_constant<(__vectorized_sizeof<_Tp>() > sizeof(_Tp))>, + _IsValidSizeFor<_Tp>> + {}; + + template <typename _Tp> + static constexpr bool _S_is_valid_v = _IsValid<_Tp>::value; + + using _CommonImpl = _CommonImplSve; + + using _SimdImpl = _SimdImplSve<_SveAbi<_UsedBytes>>; + + using _MaskImpl = _MaskImplSve<_SveAbi<_UsedBytes>>; + + template <typename _Tp> + using _MaskMember = _SveMaskWrapper<sizeof(_Tp), _S_size<_Tp>>; + + template <typename _Tp, bool = _S_is_valid_v<_Tp>> + struct __traits : _InvalidTraits + {}; + + template <typename _Tp> + struct __traits<_Tp, true> + { + using _IsValid = true_type; + using _SimdImpl = _SimdImplSve<_SveAbi<_UsedBytes>>; + using _MaskImpl = _MaskImplSve<_SveAbi<_UsedBytes>>; + + using _SimdMember = _SveSimdWrapper<_Tp, _S_size<_Tp>>; // sve vector type + using _MaskMember = _SveMaskWrapper<sizeof(_Tp), _S_size<_Tp>>; // sve mask type + + static constexpr size_t _S_simd_align = alignof(_SimdMember); + static constexpr size_t _S_mask_align = alignof(_MaskMember); + + static constexpr size_t _S_full_size = _SimdMember::_S_full_size; + static constexpr bool _S_is_partial = _SimdMember::_S_is_partial; + + struct _SimdBase + { + _GLIBCXX_SIMD_ALWAYS_INLINE explicit + operator __sve_vector_type_t<_Tp, _S_size<_Tp>>() const + { return __data(*static_cast<const simd<_Tp, _SveAbi<_UsedBytes>>*>(this)); } + }; + + class _SimdCastType + { + using _Ap = __sve_vector_type_t<_Tp, _S_size<_Tp>>; + + _SimdMember _M_data; + + public: + _GLIBCXX_SIMD_ALWAYS_INLINE constexpr + _SimdCastType(_Ap __a) + : _M_data(__a) + {} + + _GLIBCXX_SIMD_ALWAYS_INLINE constexpr + operator _SimdMember() const + { return _M_data; } + }; + + struct _MaskBase + { + _GLIBCXX_SIMD_ALWAYS_INLINE explicit + operator __sve_mask_type_t<sizeof(_Tp)>() const + { + return __data(*static_cast<const simd_mask<_Tp, _SveAbi<_UsedBytes>>*>(this)); + } + }; + + class _MaskCastType + { + using _Ap = __sve_mask_type_t<sizeof(_Tp)>; + + _Ap _M_data; + + public: + _GLIBCXX_SIMD_ALWAYS_INLINE constexpr + _MaskCastType(_Ap __a) + : _M_data(__a) + {} + + _GLIBCXX_SIMD_ALWAYS_INLINE constexpr + operator _MaskMember() const + { return _M_data; } + }; + }; + + template <typename _Tp> + static constexpr size_t _S_full_size = __traits<_Tp>::_S_full_size; + + template <typename _Tp> + static constexpr bool _S_is_partial = __traits<_Tp>::_S_is_partial; + }; + +template <typename _Tp, size_t _Np> + using __sve_mask = __sve_mask_type<sizeof(_Tp)>; + +struct _CommonImplSve +{ + // _S_converts_via_decomposition + // This lists all cases where a __vector_convert needs to fall back to + // conversion of individual scalars (i.e. decompose the input vector into + // scalars, convert, compose output vector). In those cases, _S_masked_load & + // _S_masked_store prefer to use the _S_bit_iteration implementation. + template <typename _From, typename _To, size_t _ToSize> + static inline constexpr bool __converts_via_decomposition_v = sizeof(_From) != sizeof(_To); + + template <typename _Tp, typename _Up, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_load(const _Up* __p, _SveMaskWrapper<sizeof(_Tp), _Np> __k) + { + using _STp = __get_sve_value_type_t<_Tp>; + using _SUp = __get_sve_value_type_t<_Up>; + using _V = __sve_vector_type_t<_Tp, _Np>; + const _SUp* __up = reinterpret_cast<const _SUp*>(__p); + + if constexpr (std::is_same_v<_Tp, _Up>) + return _V(svld1(__k._M_data, __up)); + if constexpr (std::is_integral_v<_Tp> && std::is_integral_v<_Up> + && (sizeof(_Tp) > sizeof(_Up))) + { + if constexpr (std::is_same_v<_SUp, int8_t>) + { + if constexpr (std::is_same_v<_STp, int16_t>) + return _V(svld1sb_s16(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint16_t>) + return _V(svld1sb_u16(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, int32_t>) + return _V(svld1sb_s32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint32_t>) + return _V(svld1sb_u32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, int64_t>) + return _V(svld1sb_s64(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint64_t>) + return _V(svld1sb_u64(__k._M_data, __up)); + } + if constexpr (std::is_same_v<_SUp, uint8_t>) + { + if constexpr (std::is_same_v<_STp, int16_t>) + return _V(svld1ub_s16(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint16_t>) + return _V(svld1ub_u16(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, int32_t>) + return _V(svld1ub_s32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint32_t>) + return _V(svld1ub_u32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, int64_t>) + return _V(svld1ub_s64(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint64_t>) + return _V(svld1ub_u64(__k._M_data, __up)); + } + if constexpr (std::is_same_v<_SUp, int16_t>) + { + if constexpr (std::is_same_v<_STp, int32_t>) + return _V(svld1sh_s32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint32_t>) + return _V(svld1sh_u32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, int64_t>) + return _V(svld1sh_s64(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint64_t>) + return _V(svld1sh_u64(__k._M_data, __up)); + } + if constexpr (std::is_same_v<_SUp, uint16_t>) + { + if constexpr (std::is_same_v<_STp, int32_t>) + return _V(svld1uh_s32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint32_t>) + return _V(svld1uh_u32(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, int64_t>) + return _V(svld1uh_s64(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint64_t>) + return _V(svld1uh_u64(__k._M_data, __up)); + } + if constexpr (std::is_same_v<_SUp, int32_t>) + { + if constexpr (std::is_same_v<_STp, int64_t>) + return _V(svld1sw_s64(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint64_t>) + return _V(svld1sw_u64(__k._M_data, __up)); + } + if constexpr (std::is_same_v<_SUp, uint32_t>) + { + if constexpr (std::is_same_v<_STp, int64_t>) + return _V(svld1uw_s64(__k._M_data, __up)); + if constexpr (std::is_same_v<_STp, uint64_t>) + return _V(svld1uw_u64(__k._M_data, __up)); + } + } + return __generate_from_n_evaluations<_Np, __sve_vector_type_t<_Tp, _Np>>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + return __k[__i] ? static_cast<_Tp>(__p[__i]) : _Tp{}; + }); + } + + template <typename _Tp, typename _Up, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_store(_Up* __p, _SveSimdWrapper<_Tp, _Np> __x, _SveMaskWrapper<sizeof(_Tp), _Np> __k) + { + using _SUp = __get_sve_value_type_t<_Up>; + using _STp = __get_sve_value_type_t<_Tp>; + + _SUp* __up = reinterpret_cast<_SUp*>(__p); + + if constexpr (std::is_same_v<_Tp, _Up>) + return svst1(__k._M_data, __up, __x); + if constexpr (std::is_integral_v<_Tp> && std::is_integral_v<_Up> + && (sizeof(_Tp) > sizeof(_Up))) + { + if constexpr (std::is_same_v<_SUp, int8_t> && std::is_signed_v<_STp>) + return svst1b(__k._M_data, __up, __x); + if constexpr (std::is_same_v<_SUp, uint8_t> && std::is_unsigned_v<_STp>) + return svst1b(__k._M_data, __up, __x); + if constexpr (std::is_same_v<_SUp, int16_t> && std::is_signed_v<_STp>) + return svst1h(__k._M_data, __up, __x); + if constexpr (std::is_same_v<_SUp, uint16_t> && std::is_unsigned_v<_STp>) + return svst1h(__k._M_data, __up, __x); + if constexpr (std::is_same_v<_SUp, int32_t> && std::is_signed_v<_STp>) + return svst1w(__k._M_data, __up, __x); + if constexpr (std::is_same_v<_SUp, uint32_t> && std::is_unsigned_v<_STp>) + return svst1w(__k._M_data, __up, __x); + } + + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + if (__k[__i]) + __p[__i] = static_cast<_Up>(__x[__i]); + }); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_blend(_SveMaskWrapper<sizeof(_Tp), _Np> __k, _SveSimdWrapper<_Tp, _Np> __at0, + _SveSimdWrapper<_Tp, _Np> __at1) + { return svsel(__k._M_data, __at1._M_data, __at0._M_data); } + + template <size_t _Np, bool _Sanitized> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_store_bool_array(_BitMask<_Np, _Sanitized> __x, bool* __mem) + { + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __mem[__i] = __x[__i]; + }); + } +}; + +template <typename _Abi, typename> + struct _SimdImplSve + { + template <typename _Tp> + using _MaskMember = typename _Abi::template _MaskMember<_Tp>; + + template <typename _Tp> + using _SimdMember = typename _Abi::template __traits<_Tp>::_SimdMember; + + using _CommonImpl = typename _Abi::_CommonImpl; + using _SuperImpl = typename _Abi::_SimdImpl; + using _MaskImpl = typename _Abi::_MaskImpl; + + template <typename _Tp> + static constexpr size_t _S_full_size = _Abi::template _S_full_size<_Tp>; + + template <typename _Tp> + static constexpr size_t _S_size = _Abi::template _S_size<_Tp>; + + template <typename _Tp> + using _TypeTag = _Tp*; + + using abi_type = _Abi; + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr auto + _S_broadcast(_Tp __x) noexcept + { + return __sve_vector_type<_Tp, __sve_vectorized_size_bytes / sizeof(_Tp)> + ::__sve_broadcast(__x); + } + + template <typename _Fp, typename _Tp> + inline static constexpr _SimdMember<_Tp> + _S_generator(_Fp&& __gen, _TypeTag<_Tp>) + { + constexpr size_t _Np = _S_size<_Tp>; + _SveSimdWrapper<_Tp, _Np> __ret; + __execute_n_times<_S_size<_Tp>>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { __ret._M_set(__i, __gen(__i)); }); + return __ret; + } + + template <typename _Tp, typename _Up> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SimdMember<_Tp> + _S_load(const _Up* __mem, _TypeTag<_Tp>) noexcept + { + constexpr size_t _Np = _S_size<_Tp>; + _SimdMember<_Tp> __ret = _CommonImpl::template _S_load<_Tp, _Up, _Np>( + __mem, _SveMaskWrapper<sizeof(_Tp), _Np>{ + __sve_vector_type<_Tp, _Np>::__sve_active_mask()}); + return __ret; + } + + template <typename _Tp, size_t _Np, typename _Up> + static constexpr inline _SveSimdWrapper<_Tp, _Np> + _S_masked_load(_SveSimdWrapper<_Tp, _Np> __merge, _MaskMember<_Tp> __k, const _Up* __mem) + noexcept + { + __sve_vector_type_t<_Tp, _Np> __v + = _CommonImpl::template _S_load<_Tp, _Up, _Np>(__mem, __k); + __sve_vector_type_t<_Tp, _Np> __ret = svsel(__k._M_data, __v, __merge._M_data); + return __ret; + } + + template <typename _Tp, typename _Up> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_store(_SimdMember<_Tp> __v, _Up* __mem, _TypeTag<_Tp>) noexcept + { + constexpr size_t _Np = _S_size<_Tp>; + _CommonImpl::template _S_store<_Tp, _Up, _Np>( + __mem, __v, __sve_vector_type<_Tp, _Np>::__sve_active_mask()); + } + + template <typename _Tp, typename _Up, size_t _Np> + static constexpr inline void + _S_masked_store(const _SveSimdWrapper<_Tp, _Np> __v, _Up* __mem, + const _SveMaskWrapper<sizeof(_Tp), _Np> __k) noexcept + { _CommonImpl::template _S_store<_Tp, _Up, _Np>(__mem, __v, __k); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_negate(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { + return svcmpeq(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, + __sve_vector_type<_Tp, _Np>::__sve_broadcast(_Tp{})); + } + + template <typename _Tp, typename _BinaryOperation> + _GLIBCXX_SIMD_INTRINSIC static constexpr _Tp + _S_reduce(simd<_Tp, _Abi> __x, _BinaryOperation&& __binary_op) + { + auto __x_data = __x._M_data; + constexpr size_t _Np = simd_size_v<_Tp, _Abi>; + using __sve_vec_t = __sve_vector_type_t<_Tp, _Np>; + std::size_t __i = __x.size(); + for (; (__i % 2) != 1; __i /= 2) + { + __x_data = __binary_op(simd<_Tp, _Abi>( + __private_init, _SveSimdWrapper<_Tp, _Np>( + __sve_vec_t(svuzp1(__x_data, __x_data)))), + simd<_Tp, _Abi>( + __private_init, _SveSimdWrapper<_Tp, _Np>( + __sve_vec_t(svuzp2(__x_data, __x_data)))) + )._M_data; + } + _Tp __res = __x_data[0]; + for (size_t __ri = 1; __ri != __i; __ri++) + __res = __binary_op(__x_data[__ri], __res); + return __res; + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _Tp + _S_reduce(simd<_Tp, _Abi> __x, plus<>) + { + return svaddv(__sve_vector_type<_Tp, _S_size<_Tp>>::__sve_active_mask(), __x._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _Tp + _S_reduce(simd<_Tp, _Abi> __x, bit_and<>) + { + return svandv(__sve_vector_type<_Tp, _S_size<_Tp>>::__sve_active_mask(), __x._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _Tp + _S_reduce(simd<_Tp, _Abi> __x, bit_or<>) + { + return svorv(__sve_vector_type<_Tp, _S_size<_Tp>>::__sve_active_mask(), __x._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _Tp + _S_reduce(simd<_Tp, _Abi> __x, bit_xor<>) + { + return sveorv(__sve_vector_type<_Tp, _S_size<_Tp>>::__sve_active_mask(), __x._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _Tp + _S_reduce(simd<_Tp, _Abi> __x, __detail::_Maximum()) + { + return svmaxv(__sve_vector_type<_Tp, _S_size<_Tp>>::__sve_active_mask(), __x._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _Tp + _S_reduce(simd<_Tp, _Abi> __x, __detail::_Minimum()) + { + return svminv(__sve_vector_type<_Tp, _S_size<_Tp>>::__sve_active_mask(), __x._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_NORMAL_MATH _GLIBCXX_SIMD_INTRINSIC static constexpr + __sve_vector_type_t<_Tp, _Np> + _S_min(_SveSimdWrapper<_Tp, _Np> __a, _SveSimdWrapper<_Tp, _Np> __b) + { + return svmin_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __a._M_data, __b._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_NORMAL_MATH _GLIBCXX_SIMD_INTRINSIC static constexpr + __sve_vector_type_t<_Tp, _Np> + _S_max(_SveSimdWrapper<_Tp, _Np> __a, _SveSimdWrapper<_Tp, _Np> __b) + { + return svmax_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __a._M_data, __b._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_NORMAL_MATH _GLIBCXX_SIMD_INTRINSIC static constexpr + pair<_SveSimdWrapper<_Tp, _Np>, _SveSimdWrapper<_Tp, _Np>> + _S_minmax(_SveSimdWrapper<_Tp, _Np> __a, _SveSimdWrapper<_Tp, _Np> __b) + { + return { + svmin_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __a._M_data, __b._M_data), + svmax_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __a._M_data, __b._M_data) + }; + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_complement(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { + if constexpr (is_floating_point_v<_Tp>) + { + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + return __sve_reinterpret_cast<_Tp>( + svnot_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __sve_reinterpret_cast<_Ip>(__x))); + } + else + return svnot_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveSimdWrapper<_Tp, _Np> + _S_unary_minus(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { + return svmul_x(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, + static_cast<_Tp>(-1)); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_plus(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { return __x._M_data + __y._M_data; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_minus(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { return __x._M_data - __y._M_data; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_multiplies(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { return __x._M_data * __y._M_data; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_divides(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + __sve_vector_type_t<_Tp, _Np> __y_padded + = svsel(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __y._M_data, __sve_vector_type<_Tp, _Np>::__sve_broadcast(1)); + return __x._M_data / __y_padded; + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_modulus(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + __sve_vector_type_t<_Tp, _Np> __y_padded + = svsel(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __y._M_data, __sve_vector_type<_Tp, _Np>::__sve_broadcast(1)); + return __x._M_data % __y_padded; + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_bit_and(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + if constexpr (is_floating_point_v<_Tp>) + { + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + return __sve_reinterpret_cast<_Tp>( + svand_x(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __sve_reinterpret_cast<_Ip>(__x), __sve_reinterpret_cast<_Ip>(__y))); + } + else + return svand_x(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_bit_or(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + if constexpr (is_floating_point_v<_Tp>) + { + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + return __sve_reinterpret_cast<_Tp>( + svorr_x(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __sve_reinterpret_cast<_Ip>(__x), __sve_reinterpret_cast<_Ip>(__y))); + } + else + return svorr_x(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_bit_xor(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + if constexpr (is_floating_point_v<_Tp>) + { + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + return __sve_reinterpret_cast<_Tp>( + sveor_x(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __sve_reinterpret_cast<_Ip>(__x), __sve_reinterpret_cast<_Ip>(__y))); + } + else + return sveor_x(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static __sve_vector_type_t<_Tp, _Np> + _S_bit_shift_left(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { return __x._M_data << __y._M_data; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static __sve_vector_type_t<_Tp, _Np> + _S_bit_shift_right(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { return __x._M_data >> __y._M_data; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_bit_shift_left(_SveSimdWrapper<_Tp, _Np> __x, int __y) + { return __x._M_data << __y; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr __sve_vector_type_t<_Tp, _Np> + _S_bit_shift_right(_SveSimdWrapper<_Tp, _Np> __x, int __y) + { return __x._M_data >> __y; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_increment(_SveSimdWrapper<_Tp, _Np>& __x) + { __x = __x._M_data + 1; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_decrement(_SveSimdWrapper<_Tp, _Np>& __x) + { __x = __x._M_data - 1; } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_equal_to(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + return svcmpeq(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_not_equal_to(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + return svcmpne(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_less(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + return svcmplt(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_less_equal(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + return svcmple(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data); + } + + // simd.math +#define _GLIBCXX_SIMD_MATH_FALLBACK(__name) \ + template <typename _Tp, size_t _Np, typename... _More> \ + static _SveSimdWrapper<_Tp, _Np> _S_##__name(const _SveSimdWrapper<_Tp, _Np>& __x, \ + const _More&... __more) \ + { \ + _SveSimdWrapper<_Tp, _Np> __r; \ + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { \ + __r._M_set(__i, __name(__x[__i], __more[__i]...)); \ + }); \ + return __r; \ + } + +#define _GLIBCXX_SIMD_MATH_FALLBACK_FIXEDRET(_RetTp, __name) \ + template <typename _Tp, typename... _More> \ + static auto _S_##__name(const _Tp& __x, const _More&... __more) \ + { \ + return __fixed_size_storage_t<_RetTp, _Tp::_S_size>::_S_generate( \ + [&](auto __meta) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { \ + return __meta._S_generator( \ + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { \ + return __name(__x[__meta._S_offset + __i], \ + __more[__meta._S_offset + __i]...); \ + }, static_cast<_RetTp*>(nullptr)); \ + }); \ + } + + _GLIBCXX_SIMD_MATH_FALLBACK(acos) + _GLIBCXX_SIMD_MATH_FALLBACK(asin) + _GLIBCXX_SIMD_MATH_FALLBACK(atan) + _GLIBCXX_SIMD_MATH_FALLBACK(atan2) + _GLIBCXX_SIMD_MATH_FALLBACK(cos) + _GLIBCXX_SIMD_MATH_FALLBACK(sin) + _GLIBCXX_SIMD_MATH_FALLBACK(tan) + _GLIBCXX_SIMD_MATH_FALLBACK(acosh) + _GLIBCXX_SIMD_MATH_FALLBACK(asinh) + _GLIBCXX_SIMD_MATH_FALLBACK(atanh) + _GLIBCXX_SIMD_MATH_FALLBACK(cosh) + _GLIBCXX_SIMD_MATH_FALLBACK(sinh) + _GLIBCXX_SIMD_MATH_FALLBACK(tanh) + _GLIBCXX_SIMD_MATH_FALLBACK(exp) + _GLIBCXX_SIMD_MATH_FALLBACK(exp2) + _GLIBCXX_SIMD_MATH_FALLBACK(expm1) + _GLIBCXX_SIMD_MATH_FALLBACK_FIXEDRET(int, ilogb) + _GLIBCXX_SIMD_MATH_FALLBACK(log) + _GLIBCXX_SIMD_MATH_FALLBACK(log10) + _GLIBCXX_SIMD_MATH_FALLBACK(log1p) + _GLIBCXX_SIMD_MATH_FALLBACK(log2) + _GLIBCXX_SIMD_MATH_FALLBACK(logb) + + // modf implemented in simd_math.h + _GLIBCXX_SIMD_MATH_FALLBACK(scalbn) + _GLIBCXX_SIMD_MATH_FALLBACK(scalbln) + _GLIBCXX_SIMD_MATH_FALLBACK(cbrt) + _GLIBCXX_SIMD_MATH_FALLBACK(pow) + _GLIBCXX_SIMD_MATH_FALLBACK(erf) + _GLIBCXX_SIMD_MATH_FALLBACK(erfc) + _GLIBCXX_SIMD_MATH_FALLBACK(lgamma) + _GLIBCXX_SIMD_MATH_FALLBACK(tgamma) + + _GLIBCXX_SIMD_MATH_FALLBACK_FIXEDRET(long, lrint) + _GLIBCXX_SIMD_MATH_FALLBACK_FIXEDRET(long long, llrint) + + _GLIBCXX_SIMD_MATH_FALLBACK_FIXEDRET(long, lround) + _GLIBCXX_SIMD_MATH_FALLBACK_FIXEDRET(long long, llround) + + _GLIBCXX_SIMD_MATH_FALLBACK(fmod) + _GLIBCXX_SIMD_MATH_FALLBACK(remainder) + + template <typename _Tp, size_t _Np> + static _SveSimdWrapper<_Tp, _Np> + _S_remquo(const _SveSimdWrapper<_Tp, _Np> __x, const _SveSimdWrapper<_Tp, _Np> __y, + __fixed_size_storage_t<int, _Np>* __z) + { + _SveSimdWrapper<_Tp, _Np> __r{}; + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + int __tmp; + __r._M_set(__i, remquo(__x[__i], __y[__i], &__tmp)); + __z->_M_set(__i, __tmp); + }); + return __r; + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static __fixed_size_storage_t<int, _Np> + _S_fpclassify(_SveSimdWrapper<_Tp, _Np> __x) + { + __fixed_size_storage_t<int, _Np> __r{}; + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __r._M_set(__i, std::fpclassify(__x[__i])); + }); + return __r; + } + + // copysign in simd_math.h + _GLIBCXX_SIMD_MATH_FALLBACK(nextafter) + _GLIBCXX_SIMD_MATH_FALLBACK(fdim) + +#undef _GLIBCXX_SIMD_MATH_FALLBACK +#undef _GLIBCXX_SIMD_MATH_FALLBACK_FIXEDRET + + template <typename _Tp, size_t _Np, typename _Op> + static constexpr _MaskMember<_Tp> + __fp_cmp(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y, _Op __op) + { + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + using _VI = __sve_vector_type_t<_Ip, _Np>; + using _WI = _SveSimdWrapper<_Ip, _Np>; + const _WI __fmv = __sve_vector_type<_Ip, _Np>::__sve_broadcast(__finite_max_v<_Ip>); + const _WI __zerov = __sve_vector_type<_Ip, _Np>::__sve_broadcast(0); + const _WI __xn = _VI(__sve_reinterpret_cast<_Ip>(__x)); + const _WI __yn = _VI(__sve_reinterpret_cast<_Ip>(__y)); + + const _WI __xp + = svsel(_S_less(__xn, __zerov), _S_unary_minus(_WI(_S_bit_and(__xn, __fmv))), __xn); + const _WI __yp + = svsel(_S_less(__yn, __zerov), _S_unary_minus(_WI(_S_bit_and(__yn, __fmv))), __yn); + return svbic_z(__sve_vector_type<_Ip, _Np>::__sve_active_mask(), __op(__xp, __yp)._M_data, + _SuperImpl::_S_isunordered(__x, __y)._M_data); + } + + template <typename _Tp, size_t _Np> + static constexpr _MaskMember<_Tp> + _S_isgreater(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) noexcept + { return __fp_cmp(__x, __y, [](auto __xp, auto __yp) { return _S_less(__yp, __xp); }); } + + template <typename _Tp, size_t _Np> + static constexpr _MaskMember<_Tp> + _S_isgreaterequal(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) noexcept + { return __fp_cmp(__x, __y, [](auto __xp, auto __yp) { return _S_less_equal(__yp, __xp); }); } + + template <typename _Tp, size_t _Np> + static constexpr _MaskMember<_Tp> + _S_isless(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) noexcept + { return __fp_cmp(__x, __y, [](auto __xp, auto __yp) { return _S_less(__xp, __yp); }); } + + template <typename _Tp, size_t _Np> + static constexpr _MaskMember<_Tp> + _S_islessequal(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) noexcept + { return __fp_cmp(__x, __y, [](auto __xp, auto __yp) { return _S_less_equal(__xp, __yp); }); } + + template <typename _Tp, size_t _Np> + static constexpr _MaskMember<_Tp> + _S_islessgreater(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) noexcept + { + return svbic_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), + _SuperImpl::_S_not_equal_to(__x, __y)._M_data, + _SuperImpl::_S_isunordered(__x, __y)._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_abs(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svabs_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_fabs(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svabs_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_sqrt(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svsqrt_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_ldexp(_SveSimdWrapper<_Tp, _Np> __x, __fixed_size_storage_t<int, _Np> __y) noexcept + { + auto __sve_register = __y.first; + if constexpr (std::is_same_v<_Tp, float>) + return svscale_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, + __sve_register._M_data); + else + { + __sve_vector_type_t<int64_t, _Np> __sve_d_register = svunpklo(__sve_register); + return svscale_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, + __sve_d_register); + } + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_fma(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y, + _SveSimdWrapper<_Tp, _Np> __z) + { + return svmad_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data, + __z._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_fmax(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + return svmaxnm_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_fmin(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + return svminnm_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _MaskMember<_Tp> + _S_isfinite([[maybe_unused]] _SveSimdWrapper<_Tp, _Np> __x) + { +#if __FINITE_MATH_ONLY__ + return __sve_vector_type_t<_Tp, _Np>::__sve_all_true_mask(); +#else + // if all exponent bits are set, __x is either inf or NaN + + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + const __sve_vector_type_t<_Ip, _Np> __absn = __sve_reinterpret_cast<_Ip>(_S_abs(__x)); + const __sve_vector_type_t<_Ip, _Np> __maxn + = __sve_reinterpret_cast<_Ip>( + __sve_vector_type<_Tp, _Np>::__sve_broadcast(__finite_max_v<_Tp>)); + + return _S_less_equal(_SveSimdWrapper<_Ip, _Np>{__absn}, _SveSimdWrapper<_Ip, _Np>{__maxn}); +#endif + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _MaskMember<_Tp> + _S_isinf([[maybe_unused]] _SveSimdWrapper<_Tp, _Np> __x) + { +#if __FINITE_MATH_ONLY__ + return {}; // false +#else + return _S_equal_to<_Tp, _Np>(_S_abs(__x), _S_broadcast(__infinity_v<_Tp>)); +#endif + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _MaskMember<_Tp> + _S_isnan([[maybe_unused]] _SveSimdWrapper<_Tp, _Np> __x) + { +#if __FINITE_MATH_ONLY__ + return {}; // false +#else + return svcmpuo(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __x._M_data); +#endif + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _MaskMember<_Tp> + _S_isnormal(_SveSimdWrapper<_Tp, _Np> __x) + { + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + using _V = __sve_vector_type_t<_Ip, _Np>; + using _VW = _SveSimdWrapper<_Ip, _Np>; + + const _V __absn = __sve_reinterpret_cast<_Ip>(_S_abs(__x)); + const _V __minn = __sve_reinterpret_cast<_Ip>( + __sve_vector_type<_Tp, _Np>::__sve_broadcast(__norm_min_v<_Tp>)); +#if __FINITE_MATH_ONLY__ + return _S_greater_equal(_VW{__absn}, _VW{__minn}); +#else + const _V __maxn = __sve_reinterpret_cast<_Ip>( + __sve_vector_type<_Tp, _Np>::__sve_broadcast(__finite_max_v<_Tp>)); + return _MaskImpl::_S_bit_and(_S_less_equal(_VW{__minn}, _VW{__absn}), + _S_less_equal(_VW{__absn}, _VW{__maxn})); +#endif + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _MaskMember<_Tp> + _S_signbit(_SveSimdWrapper<_Tp, _Np> __x) + { + using _Ip = __get_sve_value_type_t<__int_for_sizeof_t<_Tp>>; + using _V = __sve_vector_type_t<_Ip, _Np>; + using _VW = _SveSimdWrapper<_Ip, _Np>; + + const _V __xn = __sve_reinterpret_cast<_Ip>(__x); + const _V __zeron = __sve_vector_type<_Ip, _Np>::__sve_broadcast(0); + return _S_less(_VW{__xn}, _VW{__zeron}); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _MaskMember<_Tp> + _S_isunordered(_SveSimdWrapper<_Tp, _Np> __x, _SveSimdWrapper<_Tp, _Np> __y) + { + return svcmpuo(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data, __y._M_data); + } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_nearbyint(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svrinti_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_rint(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return _SuperImpl::_S_nearbyint(__x); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_trunc(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svrintz_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_round(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svrinta_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_floor(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svrintm_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static _SveSimdWrapper<_Tp, _Np> + _S_ceil(_SveSimdWrapper<_Tp, _Np> __x) noexcept + { return svrintp_z(__sve_vector_type<_Tp, _Np>::__sve_active_mask(), __x._M_data); } + + template <typename _Tp, size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_masked_assign(_SveMaskWrapper<_Bits, _Np> __k, _SveSimdWrapper<_Tp, _Np>& __lhs, + __type_identity_t<_SveSimdWrapper<_Tp, _Np>> __rhs) + { __lhs = _CommonImpl::_S_blend(__k, __lhs, __rhs); } + + template <typename _Tp, size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_masked_assign(_SveMaskWrapper<_Bits, _Np> __k, _SveSimdWrapper<_Tp, _Np>& __lhs, + __type_identity_t<_Tp> __rhs) + { __lhs = _CommonImpl::_S_blend(__k, __lhs, __data(simd<_Tp, _Abi>(__rhs))); } + + template <typename _Op, typename _Tp, size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_masked_cassign(const _SveMaskWrapper<_Bits, _Np> __k, _SveSimdWrapper<_Tp, _Np>& __lhs, + const __type_identity_t<_SveSimdWrapper<_Tp, _Np>> __rhs, _Op __op) + { + __lhs = _CommonImpl::_S_blend(__k, __lhs, + _SveSimdWrapper<_Tp, _Np>(__op(_SuperImpl{}, __lhs, __rhs))); + } + + template <typename _Op, typename _Tp, size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_masked_cassign(const _SveMaskWrapper<_Bits, _Np> __k, _SveSimdWrapper<_Tp, _Np>& __lhs, + const __type_identity_t<_Tp> __rhs, _Op __op) + { _S_masked_cassign(__k, __lhs, _S_broadcast(__rhs), __op); } + + template <typename _Tp, size_t _Np, typename _Up> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_set(_SveSimdWrapper<_Tp, _Np>& __v, int __i, _Up&& __x) noexcept + { __v._M_set(__i, static_cast<_Up&&>(__x)); } + + template <template <typename> class _Op, typename _Tp, size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveSimdWrapper<_Tp, _Np> + _S_masked_unary(const _SveMaskWrapper<_Bits, _Np> __k, const _SveSimdWrapper<_Tp, _Np> __v) + { + auto __vv = simd<_Tp, _Abi>{__private_init, __v}; + _Op<decltype(__vv)> __op; + return _CommonImpl::_S_blend(__k, __v, __data(__op(__vv))); + } + }; + +template <typename _Abi, typename> + struct _MaskImplSve + { + template <typename _Tp> + using _MaskMember = typename _Abi::template _MaskMember<_Tp>; + + template <typename _Tp> + using _TypeTag = _Tp*; + + template <typename _Tp> + static constexpr size_t _S_size = simd_size_v<_Tp, _Abi>; + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_broadcast(bool __x) + { + constexpr size_t _Np = simd_size_v<_Tp, _Abi>; + __sve_bool_type __tr = __sve_vector_type<_Tp, _Np>::__sve_active_mask(); + __sve_bool_type __fl = svpfalse_b(); + return __x ? __tr : __fl; + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_load(const bool* __mem) + { + constexpr size_t _Np = simd_size_v<_Tp, _Abi>; + const uint8_t* __p = reinterpret_cast<const uint8_t*>(__mem); + __sve_bool_type __u8_active_mask = __sve_vector_type<uint8_t, _Np>::__sve_active_mask(); + __sve_vector_type_t<uint8_t, _Np> __u8_vec_mask_load = svld1(__u8_active_mask, __p); + __sve_bool_type __u8_mask = svcmpne(__u8_active_mask, __u8_vec_mask_load, 0); + + __sve_bool_type __tp_mask = __u8_mask; + for (size_t __up_size = 1; __up_size != sizeof(_Tp); __up_size *= 2) + { + __tp_mask = svunpklo(__tp_mask); + } + + _SveMaskWrapper<sizeof(_Tp), simd_size_v<_Tp, _Abi>> __r{__tp_mask}; + return __r; + } + + template <size_t _Bits, size_t _Np> + static inline _SveMaskWrapper<_Bits, _Np> + _S_masked_load(_SveMaskWrapper<_Bits, _Np> __merge, _SveMaskWrapper<_Bits, _Np> __mask, + const bool* __mem) noexcept + { + _SveMaskWrapper<_Bits, _Np> __r; + + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + if (__mask[__i]) + __r._M_set(__i, __mem[__i]); + else + __r._M_set(__i, __merge[__i]); + }); + + return __r; + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_store(_SveMaskWrapper<_Bits, _Np> __v, bool* __mem) noexcept + { + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __mem[__i] = __v[__i]; + }); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr void + _S_masked_store(const _SveMaskWrapper<_Bits, _Np> __v, bool* __mem, + const _SveMaskWrapper<_Bits, _Np> __k) noexcept + { + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + if (__k[__i]) + __mem[__i] = __v[__i]; + }); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SanitizedBitMask<_Np> + _S_to_bits(_SveMaskWrapper<_Bits, _Np> __x) + { + _ULLong __r = 0; + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __r |= _ULLong(__x[__i]) << __i; + }); + return __r; + } + + template <size_t _Np, typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static _MaskMember<_Tp> + _S_from_bitmask(_SanitizedBitMask<_Np> __bits, _TypeTag<_Tp>) + { + _SveMaskWrapper<sizeof(_Tp), _Np> __r; + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __r._M_set(__i, __bits[__i]); + }); + return __r; + } + + template <typename _Tp, typename _Up, typename _UAbi> + _GLIBCXX_SIMD_INTRINSIC static constexpr auto + _S_convert(simd_mask<_Up, _UAbi> __x) + { + using _R = _SveMaskWrapper<sizeof(_Tp), simd_size_v<_Tp, _Abi>>; + if constexpr (__is_scalar_abi<_UAbi>()) + { + _R __r{__sve_bool_type(svpfalse())}; + __r._M_set(0, __data(__x)); + return __r; + } + if constexpr (__is_sve_abi<_UAbi>()) + { + if constexpr (sizeof(_Up) == sizeof(_Tp)) + return __data(__x); + if constexpr (sizeof(_Up) < sizeof(_Tp)) + { + __sve_bool_type __xmdata = __data(__x)._M_data; + __sve_bool_type __r = __xmdata; + for (size_t __up_size = sizeof(_Up); __up_size != sizeof(_Tp); __up_size *= 2) + { + __r = svunpklo(__r); + } + return _R{__r}; + } + else + { + _R __r{__sve_bool_type(svpfalse())}; + constexpr size_t __min_size + = std::min(simd_size_v<_Tp, _Abi>, simd_mask<_Up, _UAbi>::size()); + __execute_n_times<__min_size>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { __r._M_set(__i, __x[__i]); }); + return __r; + } + } + if constexpr (__is_neon_abi<_UAbi>()) + { + _R __r{__sve_bool_type(svpfalse())}; + constexpr size_t __min_size + = std::min(simd_size_v<_Tp, _Abi>, simd_mask<_Up, _UAbi>::size()); + __execute_n_times<__min_size>( + [&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { __r._M_set(__i, __x[__i]); }); + return __r; + } + if constexpr (__is_fixed_size_abi<_UAbi>()) + { + return _S_convert<_Tp>(__data(__x)); + } + return _R{}; + } + + template <typename _Tp, size_t _Np, bool _Sanitized> + _GLIBCXX_SIMD_INTRINSIC static constexpr _MaskMember<_Tp> + _S_convert(_BitMask<_Np, _Sanitized> __x) + { + _MaskMember<_Tp> __r{}; + __execute_n_times<_Np>([&](auto __i) _GLIBCXX_SIMD_ALWAYS_INLINE_LAMBDA { + __r._M_set(__i, __x[__i]); + }); + return __r; + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveMaskWrapper<_Bits, _Np> + _S_logical_and(const _SveMaskWrapper<_Bits, _Np>& __x, const _SveMaskWrapper<_Bits, _Np>& __y) + { + return svand_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveMaskWrapper<_Bits, _Np> + _S_logical_or(const _SveMaskWrapper<_Bits, _Np>& __x, const _SveMaskWrapper<_Bits, _Np>& __y) + { + return svorr_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveMaskWrapper<_Bits, _Np> + _S_bit_not(const _SveMaskWrapper<_Bits, _Np>& __x) + { + return svnot_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __x._M_data); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveMaskWrapper<_Bits, _Np> + _S_bit_and(const _SveMaskWrapper<_Bits, _Np>& __x, const _SveMaskWrapper<_Bits, _Np>& __y) + { + return svand_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveMaskWrapper<_Bits, _Np> + _S_bit_or(const _SveMaskWrapper<_Bits, _Np>& __x, const _SveMaskWrapper<_Bits, _Np>& __y) + { + return svorr_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static constexpr _SveMaskWrapper<_Bits, _Np> + _S_bit_xor(const _SveMaskWrapper<_Bits, _Np>& __x, const _SveMaskWrapper<_Bits, _Np>& __y) + { + return sveor_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __x._M_data, __y._M_data); + } + + template <size_t _Bits, size_t _Np> + static constexpr void + _S_set(_SveMaskWrapper<_Bits, _Np>& __k, int __i, bool __x) noexcept + { + auto __index = svcmpeq(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __sve_mask_type<_Bits>::__index0123, + typename __sve_mask_type<_Bits>::__sve_mask_uint_type(__i)); + if (__x) + __k._M_data = svorr_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __k._M_data, __index); + else + __k._M_data = svbic_z(_SveMaskWrapper<_Bits, _Np>::_BuiltinSveVectorType::__sve_active_mask(), + __k._M_data, __index); + } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static void + _S_masked_assign(_SveMaskWrapper<_Bits, _Np> __k, _SveMaskWrapper<_Bits, _Np>& __lhs, + _SveMaskWrapper<_Bits, _Np> __rhs) + { __lhs._M_data = svsel(__k._M_data, __rhs._M_data, __lhs._M_data); } + + template <size_t _Bits, size_t _Np> + _GLIBCXX_SIMD_INTRINSIC static void + _S_masked_assign(_SveMaskWrapper<_Bits, _Np> __k, _SveMaskWrapper<_Bits, _Np>& __lhs, + bool __rhs) + { + __lhs._M_data + = svsel(__k._M_data, _S_broadcast<__int_with_sizeof_t<_Bits>>(__rhs), __lhs._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static int + _S_popcount(simd_mask<_Tp, _Abi> __k) + { + constexpr size_t _Np = simd_size_v<_Tp, _Abi>; + + return __sve_mask_type<sizeof(_Tp)>::__sve_mask_active_count( + __sve_vector_type<_Tp, _Np>::__sve_active_mask(), __k._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static bool + _S_all_of(simd_mask<_Tp, _Abi> __k) + { return _S_popcount(__k) == simd_size_v<_Tp, _Abi>; } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static bool + _S_any_of(simd_mask<_Tp, _Abi> __k) + { + return svptest_any(__sve_vector_type<_Tp, simd_size_v<_Tp, _Abi>>::__sve_active_mask(), + __k._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static bool + _S_none_of(simd_mask<_Tp, _Abi> __k) + { + return !svptest_any(__sve_vector_type<_Tp, simd_size_v<_Tp, _Abi>>::__sve_active_mask(), + __k._M_data); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static bool + _S_some_of(simd_mask<_Tp, _Abi> __k) + { + int __msk_count = _S_popcount(__k); + return (__msk_count > 0) && (__msk_count < (int) simd_size_v<_Tp, _Abi>); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static int + _S_find_first_set(simd_mask<_Tp, _Abi> __k) + { + return svclastb(svpfirst(__k._M_data, svpfalse()), + -1, __sve_mask_type<sizeof(_Tp)>::__index0123); + } + + template <typename _Tp> + _GLIBCXX_SIMD_INTRINSIC static int + _S_find_last_set(simd_mask<_Tp, _Abi> __k) + { return svclastb(__k._M_data, -1, __sve_mask_type<sizeof(_Tp)>::__index0123); } + }; + +_GLIBCXX_SIMD_END_NAMESPACE +#endif // __cplusplus >= 201703L +#endif // _GLIBCXX_EXPERIMENTAL_SIMD_SVE_H_ +// vim: sw=2 noet ts=8 sts=2 tw=100 diff --git a/libstdc++-v3/include/experimental/simd b/libstdc++-v3/include/experimental/simd index e3288aa341fe..f45ad4ed2e6c 100644 --- a/libstdc++-v3/include/experimental/simd +++ b/libstdc++-v3/include/experimental/simd @@ -80,6 +80,9 @@ #include "bits/simd_x86.h" #elif _GLIBCXX_SIMD_HAVE_NEON #include "bits/simd_neon.h" +#if _GLIBCXX_SIMD_HAVE_SVE +#include "bits/simd_sve.h" +#endif #elif __ALTIVEC__ #include "bits/simd_ppc.h" #endif diff --git a/libstdc++-v3/testsuite/experimental/simd/tests/bits/main.h b/libstdc++-v3/testsuite/experimental/simd/tests/bits/main.h index 594c562d5414..a9c354e0c722 100644 --- a/libstdc++-v3/testsuite/experimental/simd/tests/bits/main.h +++ b/libstdc++-v3/testsuite/experimental/simd/tests/bits/main.h @@ -29,6 +29,9 @@ template <class T> invoke_test<simd<T, simd_abi::scalar>>(int()); invoke_test<simd<T, simd_abi::_VecBuiltin<16>>>(int()); invoke_test<simd<T, simd_abi::_VecBltnBtmsk<64>>>(int()); + invoke_test<simd<T, simd_abi::_SveAbi<16>>>(int()); + invoke_test<simd<T, simd_abi::_SveAbi<32>>>(int()); + invoke_test<simd<T, simd_abi::_SveAbi<64>>>(int()); #elif EXTENDEDTESTS == 0 invoke_test<simd<T, simd_abi::_VecBuiltin<8>>>(int()); invoke_test<simd<T, simd_abi::_VecBuiltin<12>>>(int()); From 0ac2c0f0687b321ab54de271d788b4e0a287b4e2 Mon Sep 17 00:00:00 2001 From: Matthias Kretz <m.kretz@gsi.de> Date: Wed, 27 Mar 2024 08:49:43 +0100 Subject: [PATCH 276/551] libstdc++: Fix call signature of builtins from masked ++/-- This resolves failures in the "expensive" where-* test of check-simd when targeting AVX-512. Signed-off-by: Matthias Kretz <m.kretz@gsi.de> libstdc++-v3/ChangeLog: * include/experimental/bits/simd_x86.h (_S_masked_unary): Call the 4- and 8-byte variants of __builtin_ia32_subp[ds] without rounding direction argument. --- libstdc++-v3/include/experimental/bits/simd_x86.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/include/experimental/bits/simd_x86.h b/libstdc++-v3/include/experimental/bits/simd_x86.h index 16b207be2a32..6b414486fee9 100644 --- a/libstdc++-v3/include/experimental/bits/simd_x86.h +++ b/libstdc++-v3/include/experimental/bits/simd_x86.h @@ -3538,17 +3538,23 @@ template <typename _Abi, typename> } else { -#define _GLIBCXX_SIMD_MASK_SUB(_Sizeof, _Width, _Instr) \ +#define _GLIBCXX_SIMD_MASK_SUB_512(_Sizeof, _Width, _Instr) \ if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__v) == _Width) \ return __builtin_ia32_##_Instr##_mask( \ __v._M_data, __vector_broadcast<_Np>(_Tp(__pm_one)), __v._M_data, \ __k._M_data, _MM_FROUND_CUR_DIRECTION) - _GLIBCXX_SIMD_MASK_SUB(4, 64, subps512); +#define _GLIBCXX_SIMD_MASK_SUB(_Sizeof, _Width, _Instr) \ + if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__v) == _Width) \ + return __builtin_ia32_##_Instr##_mask( \ + __v._M_data, __vector_broadcast<_Np>(_Tp(__pm_one)), __v._M_data, \ + __k._M_data) + _GLIBCXX_SIMD_MASK_SUB_512(4, 64, subps512); _GLIBCXX_SIMD_MASK_SUB(4, 32, subps256); _GLIBCXX_SIMD_MASK_SUB(4, 16, subps128); - _GLIBCXX_SIMD_MASK_SUB(8, 64, subpd512); + _GLIBCXX_SIMD_MASK_SUB_512(8, 64, subpd512); _GLIBCXX_SIMD_MASK_SUB(8, 32, subpd256); _GLIBCXX_SIMD_MASK_SUB(8, 16, subpd128); +#undef _GLIBCXX_SIMD_MASK_SUB_512 #undef _GLIBCXX_SIMD_MASK_SUB } #endif // __clang__ From a6c630c314b099f64d79055964d88b257459cf13 Mon Sep 17 00:00:00 2001 From: Matthias Kretz <m.kretz@gsi.de> Date: Wed, 27 Mar 2024 13:41:25 +0100 Subject: [PATCH 277/551] libstdc++: Add masked ++/-- implementation for sizeof < 16 This resolves further failures (-Wreturn-type warnings) and test failures for where-* tests targeting AVX-512. Signed-off-by: Matthias Kretz <m.kretz@gsi.de> libstdc++-v3/ChangeLog: * include/experimental/bits/simd_x86.h (_S_masked_unary): Cast inputs < 16 bytes to 16 byte vectors before calling the right subtraction builtin. Before returning, truncate to the return vector type. --- .../include/experimental/bits/simd_x86.h | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libstdc++-v3/include/experimental/bits/simd_x86.h b/libstdc++-v3/include/experimental/bits/simd_x86.h index 6b414486fee9..517c4b4a5bec 100644 --- a/libstdc++-v3/include/experimental/bits/simd_x86.h +++ b/libstdc++-v3/include/experimental/bits/simd_x86.h @@ -3508,6 +3508,9 @@ template <typename _Abi, typename> #ifdef __clang__ return __movm<_Np, _Tp>(__k._M_data) ? __v._M_data - __pm_one : __v._M_data; #else // __clang__ + using _TV = __vector_type_t<_Tp, _Np>; + constexpr size_t __bytes = sizeof(__v) < 16 ? 16 : sizeof(__v); + constexpr size_t __width = __bytes / sizeof(_Tp); if constexpr (is_integral_v<_Tp>) { constexpr bool __lp64 = sizeof(long) == sizeof(long long); @@ -3517,11 +3520,11 @@ template <typename _Abi, typename> std::conditional_t<__lp64, long long, int>, std::conditional_t< std::is_same_v<_Ip, signed char>, char, _Ip>>; - const auto __value = __vector_bitcast<_Up>(__v._M_data); + const auto __value = __intrin_bitcast<__vector_type_t<_Up, __width>>(__v._M_data); #define _GLIBCXX_SIMD_MASK_SUB(_Sizeof, _Width, _Instr) \ - if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__v) == _Width) \ - return __vector_bitcast<_Tp>(__builtin_ia32_##_Instr##_mask(__value, \ - __vector_broadcast<_Np>(_Up(__pm_one)), __value, __k._M_data)) + if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__value) == _Width) \ + return __intrin_bitcast<_TV>(__builtin_ia32_##_Instr##_mask(__value, \ + __vector_broadcast<__width>(_Up(__pm_one)), __value, __k._M_data)) _GLIBCXX_SIMD_MASK_SUB(1, 64, psubb512); _GLIBCXX_SIMD_MASK_SUB(1, 32, psubb256); _GLIBCXX_SIMD_MASK_SUB(1, 16, psubb128); @@ -3538,16 +3541,17 @@ template <typename _Abi, typename> } else { + const auto __value = __intrin_bitcast<__vector_type_t<_Tp, __width>>(__v._M_data); #define _GLIBCXX_SIMD_MASK_SUB_512(_Sizeof, _Width, _Instr) \ - if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__v) == _Width) \ + if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__value) == _Width) \ return __builtin_ia32_##_Instr##_mask( \ - __v._M_data, __vector_broadcast<_Np>(_Tp(__pm_one)), __v._M_data, \ + __value, __vector_broadcast<__width>(_Tp(__pm_one)), __value, \ __k._M_data, _MM_FROUND_CUR_DIRECTION) #define _GLIBCXX_SIMD_MASK_SUB(_Sizeof, _Width, _Instr) \ - if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__v) == _Width) \ - return __builtin_ia32_##_Instr##_mask( \ - __v._M_data, __vector_broadcast<_Np>(_Tp(__pm_one)), __v._M_data, \ - __k._M_data) + if constexpr (sizeof(_Tp) == _Sizeof && sizeof(__value) == _Width) \ + return __intrin_bitcast<_TV>(__builtin_ia32_##_Instr##_mask( \ + __value, __vector_broadcast<__width>(_Tp(__pm_one)), __value, \ + __k._M_data)) _GLIBCXX_SIMD_MASK_SUB_512(4, 64, subps512); _GLIBCXX_SIMD_MASK_SUB(4, 32, subps256); _GLIBCXX_SIMD_MASK_SUB(4, 16, subps128); From db41057a94fe6cd556b3beedc0f5088ea485f950 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 27 Mar 2024 15:41:59 +0100 Subject: [PATCH 278/551] docs: Use @var{S} etc. in Spec File invoke.texi documentation We got internally a question about the Spec File syntax, misunderstanding what is the literal syntax and what are the placeholder variables in the syntax descriptions. The following patch attempts to use @var{S} etc. instead of just S to clarify it stands for any option (or start of option etc.) rather than literal S, say in %{S:X}. At least in HTML documentation it then uses italics. 2024-03-27 Jakub Jelinek <jakub@redhat.com> * doc/invoke.texi (Spec Files): Use @var{S} instead of S, @var{X} instead of X etc. for other placeholders. --- gcc/doc/invoke.texi | 94 ++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index f6c8d6fc0e18..c584664e1688 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -36798,17 +36798,17 @@ Substitute the variable part of a matched option. See below. Note that each comma in the substituted string is replaced by a single space. -@item %<S -Remove all occurrences of @code{-S} from the command line. Note---this +@item %<@var{S} +Remove all occurrences of @code{-@var{S}} from the command line. Note---this command is position dependent. @samp{%} commands in the spec string -before this one see @code{-S}, @samp{%} commands in the spec string +before this one see @code{-@var{S}}, @samp{%} commands in the spec string after this one do not. -@item %<S* -Similar to @samp{%<S}, but match all switches beginning with @code{-S}. +@item %<@var{S}* +Similar to @samp{%<@var{S}}, but match all switches beginning with @code{-@var{S}}. -@item %>S -Similar to @samp{%<S}, but keep @code{-S} in the GCC command line. +@item %>@var{S} +Similar to @samp{%<@var{S}}, but keep @code{-@var{S}} in the GCC command line. @item %:@var{function}(@var{args}) Call the named function @var{function}, passing it @var{args}. @@ -36992,47 +36992,47 @@ otherwise. @end smallexample @end table -@item %@{S@} -Substitutes the @code{-S} switch, if that switch is given to GCC@. +@item %@{@var{S}@} +Substitutes the @code{-@var{S}} switch, if that switch is given to GCC@. If that switch is not specified, this substitutes nothing. Note that the leading dash is omitted when specifying this option, and it is automatically inserted if the substitution is performed. Thus the spec string @samp{%@{foo@}} matches the command-line option @option{-foo} and outputs the command-line option @option{-foo}. -@item %W@{S@} -Like %@{@code{S}@} but mark last argument supplied within as a file to be +@item %W@{@var{S}@} +Like %@{@code{@var{S}}@} but mark last argument supplied within as a file to be deleted on failure. -@item %@@@{S@} -Like %@{@code{S}@} but puts the result into a @code{FILE} and substitutes +@item %@@@{@var{S}@} +Like %@{@code{@var{S}}@} but puts the result into a @code{FILE} and substitutes @code{@@FILE} if an @code{@@file} argument has been supplied. -@item %@{S*@} +@item %@{@var{S}*@} Substitutes all the switches specified to GCC whose names start -with @code{-S}, but which also take an argument. This is used for +with @code{-@var{S}}, but which also take an argument. This is used for switches like @option{-o}, @option{-D}, @option{-I}, etc. GCC considers @option{-o foo} as being one switch whose name starts with @samp{o}. %@{o*@} substitutes this text, including the space. Thus two arguments are generated. -@item %@{S*&T*@} -Like %@{@code{S}*@}, but preserve order of @code{S} and @code{T} options -(the order of @code{S} and @code{T} in the spec is not significant). +@item %@{@var{S}*&@var{T}*@} +Like %@{@code{@var{S}}*@}, but preserve order of @code{@var{S}} and @code{@var{T}} options +(the order of @code{@var{S}} and @code{@var{T}} in the spec is not significant). There can be any number of ampersand-separated variables; for each the wild card is optional. Useful for CPP as @samp{%@{D*&U*&A*@}}. -@item %@{S:X@} -Substitutes @code{X}, if the @option{-S} switch is given to GCC@. +@item %@{@var{S}:@var{X}@} +Substitutes @code{@var{X}}, if the @option{-@var{S}} switch is given to GCC@. -@item %@{!S:X@} -Substitutes @code{X}, if the @option{-S} switch is @emph{not} given to GCC@. +@item %@{!@var{S}:@var{X}@} +Substitutes @code{@var{X}}, if the @option{-@var{S}} switch is @emph{not} given to GCC@. -@item %@{S*:X@} -Substitutes @code{X} if one or more switches whose names start with -@code{-S} are specified to GCC@. Normally @code{X} is substituted only +@item %@{@var{S}*:@var{X}@} +Substitutes @code{@var{X}} if one or more switches whose names start with +@code{-@var{S}} are specified to GCC@. Normally @code{@var{X}} is substituted only once, no matter how many such switches appeared. However, if @code{%*} -appears somewhere in @code{X}, then @code{X} is substituted once +appears somewhere in @code{@var{X}}, then @code{@var{X}} is substituted once for each matching switch, with the @code{%*} replaced by the part of that switch matching the @code{*}. @@ -37053,23 +37053,23 @@ when matching an option like @option{-mcu=newchip} produces: --script=newchip/memory.ld @end smallexample -@item %@{.S:X@} -Substitutes @code{X}, if processing a file with suffix @code{S}. +@item %@{.@var{S}:@var{X}@} +Substitutes @code{@var{X}}, if processing a file with suffix @code{@var{S}}. -@item %@{!.S:X@} -Substitutes @code{X}, if @emph{not} processing a file with suffix @code{S}. +@item %@{!.@var{S}:@var{X}@} +Substitutes @code{@var{X}}, if @emph{not} processing a file with suffix @code{@var{S}}. -@item %@{,S:X@} -Substitutes @code{X}, if processing a file for language @code{S}. +@item %@{,@var{S}:@var{X}@} +Substitutes @code{@var{X}}, if processing a file for language @code{@var{S}}. -@item %@{!,S:X@} -Substitutes @code{X}, if not processing a file for language @code{S}. +@item %@{!,@var{S}:@var{X}@} +Substitutes @code{@var{X}}, if not processing a file for language @code{@var{S}}. -@item %@{S|P:X@} -Substitutes @code{X} if either @code{-S} or @code{-P} is given to +@item %@{@var{S}|@var{P}:@var{X}@} +Substitutes @code{@var{X}} if either @code{-@var{S}} or @code{-@var{P}} is given to GCC@. This may be combined with @samp{!}, @samp{.}, @samp{,}, and @code{*} sequences as well, although they have a stronger binding than -the @samp{|}. If @code{%*} appears in @code{X}, all of the +the @samp{|}. If @code{%*} appears in @code{@var{X}}, all of the alternatives must be starred, and only the first matching alternative is substituted. @@ -37090,33 +37090,33 @@ jim.d -bar -boggle -d jim.d -bar -baz -boggle @end smallexample -@item %@{%:@var{function}(@var{args}):X@} +@item %@{%:@var{function}(@var{args}):@var{X}@} Call function named @var{function} with args @var{args}. If the -function returns non-NULL, then @code{X} is substituted, if it returns +function returns non-NULL, then @code{@var{X}} is substituted, if it returns NULL, it isn't substituted. -@item %@{S:X; T:Y; :D@} +@item %@{@var{S}:@var{X}; @var{T}:@var{Y}; :@var{D}@} -If @code{S} is given to GCC, substitutes @code{X}; else if @code{T} is -given to GCC, substitutes @code{Y}; else substitutes @code{D}. There can +If @code{@var{S}} is given to GCC, substitutes @code{@var{X}}; else if @code{@var{T}} is +given to GCC, substitutes @code{@var{Y}}; else substitutes @code{@var{D}}. There can be as many clauses as you need. This may be combined with @code{.}, @code{,}, @code{!}, @code{|}, and @code{*} as needed. @end table -The switch matching text @code{S} in a @samp{%@{S@}}, @samp{%@{S:X@}} +The switch matching text @code{@var{S}} in a @samp{%@{@var{S}@}}, @samp{%@{@var{S}:@var{X}@}} or similar construct can use a backslash to ignore the special meaning of the character following it, thus allowing literal matching of a character that is otherwise specially treated. For example, -@samp{%@{std=iso9899\:1999:X@}} substitutes @code{X} if the +@samp{%@{std=iso9899\:1999:@var{X}@}} substitutes @code{@var{X}} if the @option{-std=iso9899:1999} option is given. -The conditional text @code{X} in a @samp{%@{S:X@}} or similar +The conditional text @code{@var{X}} in a @samp{%@{@var{S}:@var{X}@}} or similar construct may contain other nested @samp{%} constructs or spaces, or even newlines. They are processed as usual, as described above. -Trailing white space in @code{X} is ignored. White space may also +Trailing white space in @code{@var{X}} is ignored. White space may also appear anywhere on the left side of the colon in these constructs, except between @code{.} or @code{*} and the corresponding word. @@ -37124,7 +37124,7 @@ The @option{-O}, @option{-f}, @option{-m}, and @option{-W} switches are handled specifically in these constructs. If another value of @option{-O} or the negated form of a @option{-f}, @option{-m}, or @option{-W} switch is found later in the command line, the earlier -switch value is ignored, except with @{@code{S}*@} where @code{S} is +switch value is ignored, except with @{@code{@var{S}}*@} where @code{@var{S}} is just one letter, which passes all matching options. The character @samp{|} at the beginning of the predicate text is used to From 839bc42772ba7af66af3bd16efed4a69511312ae Mon Sep 17 00:00:00 2001 From: Segher Boessenkool <segher@kernel.crashing.org> Date: Wed, 27 Mar 2024 14:09:52 +0000 Subject: [PATCH 279/551] combine: Don't combine if I2 does not change In some cases combine will "combine" an I2 and I3, but end up putting exactly the same thing back as I2 as was there before. This is never progress, so we shouldn't do it, it will lead to oscillating behaviour and the like. If we want to canonicalise things, that's fine, but this is not the way to do it. 2024-03-27 Segher Boessenkool <segher@kernel.crashing.org> PR rtl-optimization/101523 * combine.cc (try_combine): Don't do a 2-insn combination if it does not in fact change I2. --- gcc/combine.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gcc/combine.cc b/gcc/combine.cc index a4479f8d8364..745391016d04 100644 --- a/gcc/combine.cc +++ b/gcc/combine.cc @@ -4186,6 +4186,17 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, adjust_for_new_dest (i3); } + /* If I2 didn't change, this is not a combination (but a simplification or + canonicalisation with context), which should not be done here. Doing + it here explodes the algorithm. Don't. */ + if (rtx_equal_p (newi2pat, PATTERN (i2))) + { + if (dump_file) + fprintf (dump_file, "i2 didn't change, not doing this\n"); + undo_all (); + return 0; + } + /* We now know that we can do this combination. Merge the insns and update the status of registers and LOG_LINKS. */ From f85d3362cdb4bab611508dd9a38d9015c02ff7ca Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor <iant@golang.org> Date: Tue, 26 Mar 2024 13:00:03 -0700 Subject: [PATCH 280/551] compiler: initialize local variable in lower_method_expression Fixes PR go/114463 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/574476 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/expressions.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 73cb095322ce..de6e21fb3b53 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -e15a14e410b8fc5d28012d5b313cb6c8476c7df9 +3f597287b6b858794dabdfe1bf83b386aad18102 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 51ff02061295..8429e553eac9 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -9059,7 +9059,7 @@ Selector_expression::lower_method_expression(Gogo* gogo) Named_type* nt = type->named_type(); Struct_type* st = type->struct_type(); - bool is_ambiguous; + bool is_ambiguous = false; Method* method = NULL; if (nt != NULL) method = nt->method_function(name, &is_ambiguous); From 4b0443361a82ef89d519c9ae6d4d3bec74376e8f Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 27 Mar 2024 19:38:06 +0100 Subject: [PATCH 281/551] c-family: Cast __atomic_load_*/__atomic_exchange_* result to _BitInt rather then VCE it [PR114469] As written in the PR, torture/bitint-64.c test fails with -O2 -flto and the reason is that on _BitInt arches where the padding bits are undefined, the padding bits in the _Atomic vars are also undefined, but when __atomic_load or __atomic_exchange on a _BitInt _Atomic variable with some padding bits is lowered into __atomic_load_{1,2,4,8,16} or __atomic_exchange_*, the mode precision unsigned result is VIEW_CONVERT_EXPR converted to _BitInt and because of the VCE nothing actually sign/zero extends it as needed for later uses - the var is no longer addressable and expansion assumes such automatic vars are properly extended. The following patch fixes that by using NOP_EXPR on it (the VIEW_CONVERT_EXPR after it will then be optimized away during gimplification, didn't want to repeat it in the code as else result = build1 (VIEW_CONVERT_EXPR, ...); twice. 2024-03-27 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114469 * c-common.cc (resolve_overloaded_builtin): For _BitInt result on !extended targets convert result to the _BitInt type before using VIEW_CONVERT_EXPR. --- gcc/c-family/c-common.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index 48844b17f77a..6fa8243b02b5 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -8461,7 +8461,19 @@ resolve_overloaded_builtin (location_t loc, tree function, if (new_return) { /* Cast function result from I{1,2,4,8,16} to the required type. */ - result = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (new_return), result); + if (TREE_CODE (TREE_TYPE (new_return)) == BITINT_TYPE) + { + struct bitint_info info; + unsigned prec = TYPE_PRECISION (TREE_TYPE (new_return)); + targetm.c.bitint_type_info (prec, &info); + if (!info.extended) + /* For _BitInt which has the padding bits undefined + convert to the _BitInt type rather than VCE to force + zero or sign extension. */ + result = build1 (NOP_EXPR, TREE_TYPE (new_return), result); + } + result + = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (new_return), result); result = build2 (MODIFY_EXPR, TREE_TYPE (new_return), new_return, result); TREE_SIDE_EFFECTS (result) = 1; From 9ff034fcff8ccab6eb82bf2cd36e2d24b2df9b78 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor <iant@golang.org> Date: Wed, 27 Mar 2024 11:44:42 -0700 Subject: [PATCH 282/551] gcc/testsuite/go.test: update issue16016 This backports https://go.dev/cl/574536 into the GCC testsuite. Fixes PR go/114453 --- .../go.test/test/fixedbugs/issue16016.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/go.test/test/fixedbugs/issue16016.go b/gcc/testsuite/go.test/test/fixedbugs/issue16016.go index e738e1dba0e9..b1947f5548de 100644 --- a/gcc/testsuite/go.test/test/fixedbugs/issue16016.go +++ b/gcc/testsuite/go.test/test/fixedbugs/issue16016.go @@ -6,7 +6,10 @@ package main -import "time" +import ( + "runtime" + "time" +) type T struct{} @@ -24,8 +27,19 @@ type Q interface { } func main() { + var count = 10000 + if runtime.Compiler == "gccgo" { + // On targets without split-stack libgo allocates + // a large stack for each goroutine. On 32-bit + // systems this test can run out of memory. + const intSize = 32 << (^uint(0) >> 63) // 32 or 64 + if intSize < 64 { + count = 100 + } + } + var q Q = &R{&T{}} - for i := 0; i < 10000; i++ { + for i := 0; i < count; i++ { go func() { defer q.Foo([]interface{}{"meow"}) time.Sleep(100 * time.Millisecond) From f89c83aa139521804241d21e006557ac5a421f51 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 27 Mar 2024 20:22:02 +0100 Subject: [PATCH 283/551] btf: Fix up btf-datasec-1.c test on x86 > -/* The offset entry for each variable in a DATSEC should be 0 at compile time. */ > -/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 7 } } */ > +/* The offset entry for each variable in a DATSEC should contain a label. */ > +/* { dg-final { scan-assembler-times ".4byte\[\t \]\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 } } */ 4byte is used only on some targets, what exact assembler directive is used for 4byte unaligned data is heavily target dependent. 2024-03-27 Jakub Jelinek <jakub@redhat.com> * gcc.dg/debug/btf/btf-cvr-quals-1.c: Use dg-additional-options instead of multiple dg-options. * gcc.dg/debug/btf/btf-datasec-1.c: Likewise. Accept all supported unaligned 4 byte assembler directives rather than assuming it must be .4byte. --- gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c | 2 +- gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c index 33e2f649935e..b7c99bf475a4 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-cvr-quals-1.c @@ -23,7 +23,7 @@ /* { dg-do compile } */ /* { dg-options "-O0 -gbtf -dA" } */ -/* { dg-options "-O0 -gbtf -gdwarf-4 -dA" { target { *-*-darwin* } } } */ +/* { dg-additional-options "-gdwarf-4" { target { *-*-darwin* } } } */ /* { dg-final { scan-assembler-times "ascii \"int.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c index 8557c38c20d8..782216d3cb12 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c @@ -11,16 +11,16 @@ /* { dg-do compile ) */ /* { dg-options "-O0 -gbtf -dA" } */ -/* { dg-options "-O0 -gbtf -dA -msdata=none" { target { { powerpc*-*-* } && ilp32 } } } */ -/* { dg-options "-O0 -gbtf -dA -msmall-data-limit=0" { target { riscv*-*-* } } } */ -/* { dg-options "-O0 -gbtf -dA -G0" { target { nios2-*-* } } } */ +/* { dg-additional-options "-msdata=none" { target { { powerpc*-*-* } && ilp32 } } } */ +/* { dg-additional-options "-msmall-data-limit=0" { target { riscv*-*-* } } } */ +/* { dg-additional-options "-G0" { target { nios2-*-* } } } */ /* Check for two DATASEC entries with vlen 3, and one with vlen 1. */ /* { dg-final { scan-assembler-times "0xf000003\[\t \]+\[^\n\]*btt_info" 2 } } */ /* { dg-final { scan-assembler-times "0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */ /* The offset entry for each variable in a DATSEC should contain a label. */ -/* { dg-final { scan-assembler-times ".4byte\[\t \]\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 } } */ +/* { dg-final { scan-assembler-times "(?:(?:\\.4byte|\\.long|data4\\.ua|\\.ualong|\\.uaword|\\.dword|long|dc\\.l|\\.word)\[\t \]|\\.vbyte\t4,\[\t \]?)\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 } } */ /* { dg-final { scan-assembler-times "my_cstruct\[\t \]+\[^\n\]*bts_offset" 1 } } */ /* { dg-final { scan-assembler-times "bigarr\[\t \]+\[^\n\]*bts_offset" 1 } } */ From fdd59818e2abf6043f4d45aeb157e95956c71088 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 27 Mar 2024 18:26:51 -0400 Subject: [PATCH 284/551] analyzer: fix ICE due to type mismatch when replaying call summary [PR114473] gcc/analyzer/ChangeLog: PR analyzer/114473 * call-summary.cc (call_summary_replay::convert_svalue_from_summary): Assert that the types match. (call_summary_replay::convert_region_from_summary): Likewise. (call_summary_replay::convert_region_from_summary_1): Add missing cast for the deref of RK_SYMBOLIC case. gcc/testsuite/ChangeLog: PR analyzer/114473 * gcc.dg/analyzer/call-summaries-pr114473.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/call-summary.cc | 12 +++++++ .../gcc.dg/analyzer/call-summaries-pr114473.c | 31 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/analyzer/call-summaries-pr114473.c diff --git a/gcc/analyzer/call-summary.cc b/gcc/analyzer/call-summary.cc index a569bb94cec5..c2c9c71f79b4 100644 --- a/gcc/analyzer/call-summary.cc +++ b/gcc/analyzer/call-summary.cc @@ -235,6 +235,11 @@ call_summary_replay::convert_svalue_from_summary (const svalue *summary_sval) const svalue *caller_sval = convert_svalue_from_summary_1 (summary_sval); + if (caller_sval) + if (summary_sval->get_type () && caller_sval->get_type ()) + gcc_assert (types_compatible_p (summary_sval->get_type (), + caller_sval->get_type ())); + /* Add to cache. */ add_svalue_mapping (summary_sval, caller_sval); @@ -552,6 +557,11 @@ call_summary_replay::convert_region_from_summary (const region *summary_reg) const region *caller_reg = convert_region_from_summary_1 (summary_reg); + if (caller_reg) + if (summary_reg->get_type () && caller_reg->get_type ()) + gcc_assert (types_compatible_p (summary_reg->get_type (), + caller_reg->get_type ())); + /* Add to cache. */ add_region_mapping (summary_reg, caller_reg); @@ -603,6 +613,8 @@ call_summary_replay::convert_region_from_summary_1 (const region *summary_reg) = get_caller_model ()->deref_rvalue (caller_ptr_sval, NULL_TREE, get_ctxt ()); + caller_reg = mgr->get_cast_region (caller_reg, + summary_reg->get_type ()); return caller_reg; } break; diff --git a/gcc/testsuite/gcc.dg/analyzer/call-summaries-pr114473.c b/gcc/testsuite/gcc.dg/analyzer/call-summaries-pr114473.c new file mode 100644 index 000000000000..4598840f0dff --- /dev/null +++ b/gcc/testsuite/gcc.dg/analyzer/call-summaries-pr114473.c @@ -0,0 +1,31 @@ +/* { dg-additional-options "-fanalyzer-call-summaries" } */ + +int a; +extern int *q[]; + +int * +baz (int *src) +{ + while (a) + { + src && a; + return src; + } +} + +void +bar (int **src) +{ + for (unsigned j = 0; j;) + a = 0; + while (a) + baz (src[0]); +} + +void +foo (void) +{ + bar (q); + baz (&a); + bar (q); +} From bd8a3eecc4edffad6e5091ae42c1cb1c1730b2ab Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor <iant@golang.org> Date: Wed, 27 Mar 2024 13:37:45 -0700 Subject: [PATCH 285/551] compiler: use correct size and comparison in index value overflow check This has apparently been wrong since I introduced the code ten years ago. Fixes PR go/114500 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/574835 --- gcc/go/gofrontend/MERGE | 2 +- gcc/go/gofrontend/expressions.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index de6e21fb3b53..50d430d50343 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -3f597287b6b858794dabdfe1bf83b386aad18102 +98e92493db2ab7857a5934a950a830fc1f95a4e5 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 8429e553eac9..238d5a56ca2a 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -18790,7 +18790,7 @@ Composite_literal_expression::lower_array(Type* type) Named_type* ntype = Type::lookup_integer_type("int"); Integer_type* inttype = ntype->integer_type(); - if (sizeof(index) <= static_cast<size_t>(inttype->bits() * 8) + if (sizeof(index) >= static_cast<size_t>(inttype->bits() / 8) && index >> (inttype->bits() - 1) != 0) { go_error_at(index_expr->location(), "index value overflow"); From feafff0494281795cce01e93b36aa88806b74907 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Thu, 28 Mar 2024 00:17:52 +0000 Subject: [PATCH 286/551] Daily bump. --- gcc/ChangeLog | 29 +++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 10 ++++++++++ gcc/c-family/ChangeLog | 7 +++++++ gcc/testsuite/ChangeLog | 37 +++++++++++++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 116 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 108d1186690a..5f1c9db9247b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,32 @@ +2024-03-27 Segher Boessenkool <segher@kernel.crashing.org> + + PR rtl-optimization/101523 + * combine.cc (try_combine): Don't do a 2-insn combination if + it does not in fact change I2. + +2024-03-27 Jakub Jelinek <jakub@redhat.com> + + * doc/invoke.texi (Spec Files): Use @var{S} instead of S, + @var{X} instead of X etc. for other placeholders. + +2024-03-27 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114057 + * tree-vect-slp.cc (vect_bb_slp_mark_live_stmts): Mark + BB reduction remain defs as scalar uses. + +2024-03-27 Victor Do Nascimento <victor.donascimento@arm.com> + + * config/aarch64/aarch64-option-extensions.def (rcpc3): + Fix FEATURE_STRING field to "lrcpc3". + +2024-03-27 Victor Do Nascimento <victor.donascimento@arm.com> + + * config/aarch64/aarch64-option-extensions.def: Add LSE128 + AARCH64_OPT_EXTENSION, adding it as a dependency for the D128 + feature. + * doc/invoke.texi (AArch64 Options): Document +lse128. + 2024-03-26 Richard Sandiford <richard.sandiford@arm.com> * config/aarch64/aarch64-feature-deps.h: Use constexpr for diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 4597046e092c..aab2708ffddd 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240327 +20240328 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 20c0357d864f..42fe1801790a 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,13 @@ +2024-03-27 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114473 + * call-summary.cc + (call_summary_replay::convert_svalue_from_summary): Assert that + the types match. + (call_summary_replay::convert_region_from_summary): Likewise. + (call_summary_replay::convert_region_from_summary_1): Add missing + cast for the deref of RK_SYMBOLIC case. + 2024-03-23 David Malcolm <dmalcolm@redhat.com> PR analyzer/114408 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index e6530ead5136..21698b519249 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,10 @@ +2024-03-27 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114469 + * c-common.cc (resolve_overloaded_builtin): For _BitInt result + on !extended targets convert result to the _BitInt type before + using VIEW_CONVERT_EXPR. + 2024-03-26 Jakub Jelinek <jakub@redhat.com> PR c++/112724 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a27b61326b01..5c333d5c5e19 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,40 @@ +2024-03-27 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114473 + * gcc.dg/analyzer/call-summaries-pr114473.c: New test. + +2024-03-27 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/debug/btf/btf-cvr-quals-1.c: Use dg-additional-options + instead of multiple dg-options. + * gcc.dg/debug/btf/btf-datasec-1.c: Likewise. Accept all supported + unaligned 4 byte assembler directives rather than assuming it must + be .4byte. + +2024-03-27 Jakub Jelinek <jakub@redhat.com> + + * lib/target-supports.exp (add_options_for_bfloat16): Add -msse2 on + i?86/x86_64. + * g++.dg/cpp23/ext-floating3.C: Add dg-add-options float16. + * g++.dg/cpp23/ext-floating12.C: Add dg-add-options float16 and + bfloat16. + +2024-03-27 Victor Do Nascimento <victor.donascimento@arm.com> + + * gcc.target/aarch64/cpunative/info_24: New. + * gcc.target/aarch64/cpunative/native_cpu_24.c: Likewise. + +2024-03-27 Victor Do Nascimento <victor.donascimento@arm.com> + + * gcc.target/aarch64/lse128-flag.c: New. + * gcc.target/aarch64/cpunative/info_23: Likewise. + * gcc.target/aarch64/cpunative/native_cpu_23.c: Likewise. + +2024-03-27 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * gcc.dg/tree-ssa/copy-headers-8.c: Set + LOGICAL_OP_NON_SHORT_CIRCUIT to true. + 2024-03-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/107031 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3dd519f5a758..0949344b94bc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,35 @@ +2024-03-27 Matthias Kretz <m.kretz@gsi.de> + + * include/experimental/bits/simd_x86.h (_S_masked_unary): + Cast inputs < 16 bytes to 16 byte vectors before calling the + right subtraction builtin. Before returning, truncate to the + return vector type. + +2024-03-27 Matthias Kretz <m.kretz@gsi.de> + + * include/experimental/bits/simd_x86.h (_S_masked_unary): Call + the 4- and 8-byte variants of __builtin_ia32_subp[ds] without + rounding direction argument. + +2024-03-27 Srinivas Yadav Singanaboina <vasu.srinivasvasu.14@gmail.com> + + * include/Makefile.am: Add simd_sve.h. + * include/Makefile.in: Add simd_sve.h. + * include/experimental/bits/simd.h: Add new SveAbi. + * include/experimental/bits/simd_builtin.h: Use + __no_sve_deduce_t to support existing Neon Abi. + * include/experimental/bits/simd_converter.h: Convert + sequentially when sve is available. + * include/experimental/bits/simd_detail.h: Define sve + specific macro. + * include/experimental/bits/simd_math.h: Fallback frexp + to execute sequntially when sve is available, to handle + fixed_size_simd return type that always uses sve. + * include/experimental/simd: Include bits/simd_sve.h. + * testsuite/experimental/simd/tests/bits/main.h: Enable + testing for sve128, sve256, sve512. + * include/experimental/bits/simd_sve.h: New file. + 2024-03-26 Arsen Arsenović <arsen@aarsen.me> * include/std/generator (generator::_Iterator::operator*): Fix From f6d7ff4796709c0639317bfd8fa58a2957a1e299 Mon Sep 17 00:00:00 2001 From: Palmer Dabbelt <palmer@rivosinc.com> Date: Wed, 27 Mar 2024 12:54:04 -0700 Subject: [PATCH 287/551] RISC-V: Add vxsat as a register We aren't doing anything with vxsat right now, but I'd like to add it as an accepted register to the clobber list. If we get this into GCC-14 then we'll avoid some preprocessor-based twiddling if we ever start using vxsat in the future. gcc/ChangeLog: * config/riscv/riscv.h (REGISTER_NAMES): Add vxsat. --- gcc/config/riscv/riscv.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index da089a03e9d1..d5779512994d 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -933,7 +933,7 @@ extern enum riscv_cc get_riscv_cc (const rtx use); "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", \ "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", \ "fs8", "fs9", "fs10","fs11","ft8", "ft9", "ft10","ft11", \ - "arg", "frame", "vl", "vtype", "vxrm", "frm", "N/A", "N/A", \ + "arg", "frame", "vl", "vtype", "vxrm", "frm", "vxsat", "N/A", \ "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", \ "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", \ "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", "N/A", \ From 0bad303944a1d2311c07d59912b4dfa7bff988c8 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Wed, 27 Mar 2024 16:19:01 +0100 Subject: [PATCH 288/551] middle-end/114480 - IDF compute is slow The testcase in this PR shows very slow IDF compute: tree SSA rewrite : 76.99 ( 31%) 24.78% 243663 cc1plus cc1plus [.] compute_idf which can be mitigated to some extent by refactoring the bitmap operations to simpler variants. With the patch below this becomes tree SSA rewrite : 15.23 ( 8%) when not optimizing and in addition to that tree SSA incremental : 181.52 ( 30%) to tree SSA incremental : 24.09 ( 6%) when optimizing. PR middle-end/114480 * cfganal.cc (compute_idf): Use simpler bitmap iteration, touch work_set only when phi_insertion_points changed. --- gcc/cfganal.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/gcc/cfganal.cc b/gcc/cfganal.cc index 432775decf1c..35c59f3f5d26 100644 --- a/gcc/cfganal.cc +++ b/gcc/cfganal.cc @@ -1701,8 +1701,7 @@ compute_idf (bitmap def_blocks, bitmap_head *dfs) on earlier blocks first is better. ??? Basic blocks are by no means guaranteed to be ordered in optimal order for this iteration. */ - bb_index = bitmap_first_set_bit (work_set); - bitmap_clear_bit (work_set, bb_index); + bb_index = bitmap_clear_first_set_bit (work_set); /* Since the registration of NEW -> OLD name mappings is done separately from the call to update_ssa, when updating the SSA @@ -1712,12 +1711,14 @@ compute_idf (bitmap def_blocks, bitmap_head *dfs) gcc_checking_assert (bb_index < (unsigned) last_basic_block_for_fn (cfun)); - EXECUTE_IF_AND_COMPL_IN_BITMAP (&dfs[bb_index], phi_insertion_points, - 0, i, bi) - { + /* The population counts of the dominance frontiers is low + compared to that of phi_insertion_points which approaches + the IDF and of work_set which is at most that of the IDF + as well. That makes iterating over the DFS bitmap preferential + to whole bitmap operations involving also phi_insertion_points. */ + EXECUTE_IF_SET_IN_BITMAP (&dfs[bb_index], 0, i, bi) + if (bitmap_set_bit (phi_insertion_points, i)) bitmap_set_bit (work_set, i); - bitmap_set_bit (phi_insertion_points, i); - } } return phi_insertion_points; From 7907ff2bcb50d1d88dc8d22e740de33ab151d00c Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 28 Mar 2024 08:31:06 +0000 Subject: [PATCH 289/551] modula2: Rebuild documentation sections for target independent libs This patch rebuilds the documentation for the target independent library sections. gcc/m2/ChangeLog: * target-independent/m2/Builtins.texi: Rebuilt. * target-independent/m2/gm2-libs.texi: Rebuilt. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/target-independent/m2/Builtins.texi | 67 +++++++++++++++++++++- gcc/m2/target-independent/m2/gm2-libs.texi | 67 +++++++++++++++++++++- 2 files changed, 130 insertions(+), 4 deletions(-) diff --git a/gcc/m2/target-independent/m2/Builtins.texi b/gcc/m2/target-independent/m2/Builtins.texi index b6903215293d..4ebad46b96a3 100644 --- a/gcc/m2/target-independent/m2/Builtins.texi +++ b/gcc/m2/target-independent/m2/Builtins.texi @@ -4,7 +4,7 @@ DEFINITION MODULE Builtins ; FROM SYSTEM IMPORT ADDRESS ; -(* floating point intrinsic procedure functions *) +(* Floating point intrinsic procedure functions. *) @findex isnanf PROCEDURE __BUILTIN__ isnanf (x: SHORTREAL) : INTEGER ; @@ -140,7 +140,70 @@ PROCEDURE __BUILTIN__ scalbnf (x: SHORTREAL; n: INTEGER) : SHORTREAL ; @findex scalbnl PROCEDURE __BUILTIN__ scalbnl (x: LONGREAL; n: INTEGER) : LONGREAL ; -(* complex arithmetic intrincic procedure functions *) +@findex isgreater +PROCEDURE __BUILTIN__ isgreater (x, y: REAL) : INTEGER ; +@findex isgreaterf +PROCEDURE __BUILTIN__ isgreaterf (x, y: SHORTREAL) : INTEGER ; +@findex isgreaterl +PROCEDURE __BUILTIN__ isgreaterl (x, y: LONGREAL) : INTEGER ; + +@findex isgreaterequal +PROCEDURE __BUILTIN__ isgreaterequal (x, y: REAL) : INTEGER ; +@findex isgreaterequalf +PROCEDURE __BUILTIN__ isgreaterequalf (x, y: SHORTREAL) : INTEGER ; +@findex isgreaterequall +PROCEDURE __BUILTIN__ isgreaterequall (x, y: LONGREAL) : INTEGER ; + +@findex isless +PROCEDURE __BUILTIN__ isless (x, y: REAL) : INTEGER ; +@findex islessf +PROCEDURE __BUILTIN__ islessf (x, y: SHORTREAL) : INTEGER ; +@findex islessl +PROCEDURE __BUILTIN__ islessl (x, y: LONGREAL) : INTEGER ; + +@findex islessequal +PROCEDURE __BUILTIN__ islessequal (x, y: REAL) : INTEGER ; +@findex islessequalf +PROCEDURE __BUILTIN__ islessequalf (x, y: SHORTREAL) : INTEGER ; +@findex islessequall +PROCEDURE __BUILTIN__ islessequall (x, y: LONGREAL) : INTEGER ; + +@findex islessgreater +PROCEDURE __BUILTIN__ islessgreater (x, y: REAL) : INTEGER ; +@findex islessgreaterf +PROCEDURE __BUILTIN__ islessgreaterf (x, y: SHORTREAL) : INTEGER ; +@findex islessgreaterl +PROCEDURE __BUILTIN__ islessgreaterl (x, y: LONGREAL) : INTEGER ; + +@findex isunordered +PROCEDURE __BUILTIN__ isunordered (x, y: REAL) : INTEGER ; +@findex isunorderedf +PROCEDURE __BUILTIN__ isunorderedf (x, y: SHORTREAL) : INTEGER ; +@findex isunorderedl +PROCEDURE __BUILTIN__ isunorderedl (x, y: LONGREAL) : INTEGER ; + +@findex iseqsig +PROCEDURE __BUILTIN__ iseqsig (x, y: REAL) : INTEGER ; +@findex iseqsigf +PROCEDURE __BUILTIN__ iseqsigf (x, y: SHORTREAL) : INTEGER ; +@findex iseqsigl +PROCEDURE __BUILTIN__ iseqsigl (x, y: LONGREAL) : INTEGER ; + +@findex isnormal +PROCEDURE __BUILTIN__ isnormal (r: REAL) : INTEGER ; +@findex isnormalf +PROCEDURE __BUILTIN__ isnormalf (s: SHORTREAL) : INTEGER ; +@findex isnormall +PROCEDURE __BUILTIN__ isnormall (l: LONGREAL) : INTEGER ; + +@findex isinf_sign +PROCEDURE __BUILTIN__ isinf_sign (r: REAL) : INTEGER ; +@findex isinf_signf +PROCEDURE __BUILTIN__ isinf_signf (s: SHORTREAL) : INTEGER ; +@findex isinf_signl +PROCEDURE __BUILTIN__ isinf_signl (l: LONGREAL) : INTEGER ; + +(* Complex arithmetic intrincic procedure functions. *) @findex cabsf PROCEDURE __BUILTIN__ cabsf (z: SHORTCOMPLEX) : SHORTREAL ; diff --git a/gcc/m2/target-independent/m2/gm2-libs.texi b/gcc/m2/target-independent/m2/gm2-libs.texi index db8189f40598..10b466811c13 100644 --- a/gcc/m2/target-independent/m2/gm2-libs.texi +++ b/gcc/m2/target-independent/m2/gm2-libs.texi @@ -240,7 +240,7 @@ DEFINITION MODULE Builtins ; FROM SYSTEM IMPORT ADDRESS ; -(* floating point intrinsic procedure functions *) +(* Floating point intrinsic procedure functions. *) @findex isnanf PROCEDURE __BUILTIN__ isnanf (x: SHORTREAL) : INTEGER ; @@ -376,7 +376,70 @@ PROCEDURE __BUILTIN__ scalbnf (x: SHORTREAL; n: INTEGER) : SHORTREAL ; @findex scalbnl PROCEDURE __BUILTIN__ scalbnl (x: LONGREAL; n: INTEGER) : LONGREAL ; -(* complex arithmetic intrincic procedure functions *) +@findex isgreater +PROCEDURE __BUILTIN__ isgreater (x, y: REAL) : INTEGER ; +@findex isgreaterf +PROCEDURE __BUILTIN__ isgreaterf (x, y: SHORTREAL) : INTEGER ; +@findex isgreaterl +PROCEDURE __BUILTIN__ isgreaterl (x, y: LONGREAL) : INTEGER ; + +@findex isgreaterequal +PROCEDURE __BUILTIN__ isgreaterequal (x, y: REAL) : INTEGER ; +@findex isgreaterequalf +PROCEDURE __BUILTIN__ isgreaterequalf (x, y: SHORTREAL) : INTEGER ; +@findex isgreaterequall +PROCEDURE __BUILTIN__ isgreaterequall (x, y: LONGREAL) : INTEGER ; + +@findex isless +PROCEDURE __BUILTIN__ isless (x, y: REAL) : INTEGER ; +@findex islessf +PROCEDURE __BUILTIN__ islessf (x, y: SHORTREAL) : INTEGER ; +@findex islessl +PROCEDURE __BUILTIN__ islessl (x, y: LONGREAL) : INTEGER ; + +@findex islessequal +PROCEDURE __BUILTIN__ islessequal (x, y: REAL) : INTEGER ; +@findex islessequalf +PROCEDURE __BUILTIN__ islessequalf (x, y: SHORTREAL) : INTEGER ; +@findex islessequall +PROCEDURE __BUILTIN__ islessequall (x, y: LONGREAL) : INTEGER ; + +@findex islessgreater +PROCEDURE __BUILTIN__ islessgreater (x, y: REAL) : INTEGER ; +@findex islessgreaterf +PROCEDURE __BUILTIN__ islessgreaterf (x, y: SHORTREAL) : INTEGER ; +@findex islessgreaterl +PROCEDURE __BUILTIN__ islessgreaterl (x, y: LONGREAL) : INTEGER ; + +@findex isunordered +PROCEDURE __BUILTIN__ isunordered (x, y: REAL) : INTEGER ; +@findex isunorderedf +PROCEDURE __BUILTIN__ isunorderedf (x, y: SHORTREAL) : INTEGER ; +@findex isunorderedl +PROCEDURE __BUILTIN__ isunorderedl (x, y: LONGREAL) : INTEGER ; + +@findex iseqsig +PROCEDURE __BUILTIN__ iseqsig (x, y: REAL) : INTEGER ; +@findex iseqsigf +PROCEDURE __BUILTIN__ iseqsigf (x, y: SHORTREAL) : INTEGER ; +@findex iseqsigl +PROCEDURE __BUILTIN__ iseqsigl (x, y: LONGREAL) : INTEGER ; + +@findex isnormal +PROCEDURE __BUILTIN__ isnormal (r: REAL) : INTEGER ; +@findex isnormalf +PROCEDURE __BUILTIN__ isnormalf (s: SHORTREAL) : INTEGER ; +@findex isnormall +PROCEDURE __BUILTIN__ isnormall (l: LONGREAL) : INTEGER ; + +@findex isinf_sign +PROCEDURE __BUILTIN__ isinf_sign (r: REAL) : INTEGER ; +@findex isinf_signf +PROCEDURE __BUILTIN__ isinf_signf (s: SHORTREAL) : INTEGER ; +@findex isinf_signl +PROCEDURE __BUILTIN__ isinf_signl (l: LONGREAL) : INTEGER ; + +(* Complex arithmetic intrincic procedure functions. *) @findex cabsf PROCEDURE __BUILTIN__ cabsf (z: SHORTCOMPLEX) : SHORTREAL ; From 7f233feafd657250340be3b3500d2697948ae3ed Mon Sep 17 00:00:00 2001 From: Mikael Morin <mikael@gcc.gnu.org> Date: Wed, 27 Mar 2024 16:30:42 +0100 Subject: [PATCH 290/551] fortran: Fix specification expression check in submodules [PR114475] The patch fixing PR111781 made the check of specification expressions more restrictive, disallowing local variables in specification expressions of dummy arguments. PR114475 showed an example where that change regressed, disallowing in submodules expressions that had been allowed in the parent module. In submodules indeed, the hierarchy of namespaces inherited from the parent module is not reproduced so the host-association of symbols can't be recognized by checking the nesting of namespaces. This change fixes the problem by allowing in specification expressions all the symbols in a submodule that are inherited from the parent module. PR fortran/111781 PR fortran/114475 gcc/fortran/ChangeLog: * expr.cc (check_restricted): In submodules, allow variables host- associated from the parent module. gcc/testsuite/ChangeLog: * gfortran.dg/spec_expr_10.f90: New test. Co-authored-by: Harald Anlauf <anlauf@gmx.de> --- gcc/fortran/expr.cc | 1 + gcc/testsuite/gfortran.dg/spec_expr_10.f90 | 46 ++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/spec_expr_10.f90 diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index 9a042cd7040c..09d1ebd95d2b 100644 --- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -3517,6 +3517,7 @@ check_restricted (gfc_expr *e) if (e->error || sym->attr.in_common || sym->attr.use_assoc + || sym->attr.used_in_submodule || sym->attr.dummy || sym->attr.implied_index || sym->attr.flavor == FL_PARAMETER diff --git a/gcc/testsuite/gfortran.dg/spec_expr_10.f90 b/gcc/testsuite/gfortran.dg/spec_expr_10.f90 new file mode 100644 index 000000000000..287b5a8d6ccc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/spec_expr_10.f90 @@ -0,0 +1,46 @@ +! { dg-do compile } +! +! PR fortran/114475 +! The array specification of PP in OL_EVAL used to be rejected in the submodule +! because the compiler was not able to see the host-association of N_EXTERNAL +! there. +! +! Contributed by Jürgen Reuter <juergen.reuter@desy.de>. + +module t1 + use, intrinsic :: iso_c_binding + implicit none + private + public :: t1_t + integer :: N_EXTERNAL = 0 + + type :: t1_t + contains + procedure :: set_n_external => t1_set_n_external + end type t1_t + + abstract interface + subroutine ol_eval (id, pp, emitter) bind(C) + import + real(kind = c_double), intent(in) :: pp(5 * N_EXTERNAL) + end subroutine ol_eval + end interface + interface + module subroutine t1_set_n_external (object, n) + class(t1_t), intent(inout) :: object + integer, intent(in) :: n + end subroutine t1_set_n_external + end interface + +end module t1 + +submodule (t1) t1_s + implicit none +contains + module subroutine t1_set_n_external (object, n) + class(t1_t), intent(inout) :: object + integer, intent(in) :: n + N_EXTERNAL = n + end subroutine t1_set_n_external + +end submodule t1_s From 7942558f27038461f948ca10140a156ae678cdf8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 28 Mar 2024 11:58:26 +0100 Subject: [PATCH 291/551] testsuite: Add testcase for already fixed PR [PR109925] This testcase was made latent by r14-4089 and got fixed both on the trunk and 13 branch with PR113372 fix. Adding testcase to the testsuite and will close the PR as a dup. 2024-03-28 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/109925 * gcc.c-torture/execute/pr109925.c: New test. --- .../gcc.c-torture/execute/pr109925.c | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr109925.c diff --git a/gcc/testsuite/gcc.c-torture/execute/pr109925.c b/gcc/testsuite/gcc.c-torture/execute/pr109925.c new file mode 100644 index 000000000000..929673b6b631 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr109925.c @@ -0,0 +1,30 @@ +/* PR tree-optimization/109925 */ + +int a, c, f; + +int +main () +{ + int g[2]; + for (c = 0; c < 2; c++) + { + { + char h[20], *b = h; + int d = 48, e = 0; + while (d && e < 5) + b[e++] = d /= 10; + f = e; + } + g[f - 2 + c] = 0; + } + for (;;) + { + for (; a <= 4; a++) + if (g[0]) + break; + break; + } + if (a != 5) + __builtin_abort (); + return 0; +} From 0923fe2d4808c16b72c1d1bfe28220dd326d8b76 Mon Sep 17 00:00:00 2001 From: Jan Hubicka <jh@suse.cz> Date: Thu, 28 Mar 2024 13:24:54 +0100 Subject: [PATCH 292/551] Hash operands of PHI in ipa-icf This patch fixes cache colision on function whose body differs only by constants at PHI operands. As for if (test) a = cst1; else a = cst2; gcc/ChangeLog: PR middle-end/113907 * ipa-icf.cc (sem_function::init): Hash PHI operands (sem_function::compare_phi_node): Add argument about preserving order --- gcc/ipa-icf.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gcc/ipa-icf.cc b/gcc/ipa-icf.cc index 120d85449882..e84922c3ef87 100644 --- a/gcc/ipa-icf.cc +++ b/gcc/ipa-icf.cc @@ -1387,6 +1387,23 @@ sem_function::init (ipa_icf_gimple::func_checker *checker) cfg_checksum = iterative_hash_host_wide_int (e->flags, cfg_checksum); + /* TODO: We should be able to match PHIs with different order of + parameters. This needs to be also updated in + sem_function::compare_phi_node. */ + gphi_iterator si; + for (si = gsi_start_nonvirtual_phis (bb); !gsi_end_p (si); + gsi_next_nonvirtual_phi (&si)) + { + hstate.add_int (GIMPLE_PHI); + gphi *phi = si.phi (); + m_checker->hash_operand (gimple_phi_result (phi), hstate, 0, + func_checker::OP_NORMAL); + hstate.add_int (gimple_phi_num_args (phi)); + for (unsigned int i = 0; i < gimple_phi_num_args (phi); i++) + m_checker->hash_operand (gimple_phi_arg_def (phi, i), + hstate, 0, func_checker::OP_NORMAL); + } + for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { @@ -1579,6 +1596,8 @@ sem_function::compare_phi_node (basic_block bb1, basic_block bb2) if (size1 != size2) return return_false (); + /* TODO: We should be able to match PHIs with different order of + parameters. This needs to be also updated in sem_function::init. */ for (i = 0; i < size1; ++i) { t1 = gimple_phi_arg (phi1, i)->def; From b8e7aaaf350a4584d9b76e8dd69daa2203bac339 Mon Sep 17 00:00:00 2001 From: Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> Date: Wed, 13 Mar 2024 06:48:47 +0000 Subject: [PATCH 293/551] [testsuite] Fixup dg-options in {gcc,g++,gfortran}.dg/vect.exp tests Testsuites driven by vect.exp rely on check_vect_support_and_set_flags to set appropriate DEFAULT_VECTFLAGS for a given target (e.g., add -mfpu=neon for arm-linux-gnueabi). Unfortunately, these flags are overwritten by dg-options directive, which can cause tests to fail. Behavior of dg-options is documented in vect.exp files, but not all developers look at the .exp file when adding a new testcase. This caused a few dg-options directives to be used instead of the more appropriate dg-additional-options. This patch changes target-independent dg-options into dg-additional-options. This patch does not touch target-specific dg-options and target-specific tests to avoid disturbing the gentle balance of target-specific vectorization. This patch also removes a couple of unneeded "dg-do run" directives to avoid failures on compile-only targets. Default action is, again, set by check_vect_support_and_set_flags. Lastly, I avoided renaming tests that use -O<n> options to O<n>-* filename format because this support is not consistent between gcc.dg/vect/, g++.dg/vect/, and gfortran.dg/vect/ testsuites. It seems dg-additional-options is cleaner. This patch does the following, 1. do not change target-specific tests, e.g., gcc.dg/vect/costmodel/riscv/*; 2. do not change { dg-options FOO { target { target-*-pattern } } }; 3. do not remove { dg-do run { target { target-*-pattern } } }; 4. change { dg-options FOO } to { dg-additional-options FOO }; 5. remove { dg-do run } in several tests, where it is clearly not needed. gcc/testsuite/ChangeLog: PR testsuite/114307 * gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c: Remove dg-run. * gcc.dg/vect/complex/complex-operations-run.c: Likewise. * gcc.dg/vect/pr113576.c: Remove dg-run. Use dg-additional-options for test-specific flags. * gcc.dg/vect/gimplefe-40.c: Use dg-additional-options for test-specific flags. * gcc.dg/vect/gimplefe-41.c: Likewise. * gcc.dg/vect/pr101145inf.c: Likewise. * gcc.dg/vect/pr101145inf_1.c: Likewise. * gcc.dg/vect/pr108316.c: Likewise. * gcc.dg/vect/pr109011-1.c: Likewise. * gcc.dg/vect/pr109011-2.c: Likewise. * gcc.dg/vect/pr109011-3.c: Likewise. * gcc.dg/vect/pr109011-4.c: Likewise. * gcc.dg/vect/pr109011-5.c: Likewise. * gcc.dg/vect/pr111846.c: Likewise. * gcc.dg/vect/pr111860-2.c: Likewise. * gcc.dg/vect/pr111860-3.c: Likewise. * gcc.dg/vect/pr113002.c: Likewise. * gcc.dg/vect/pr84711.c: Likewise. * gcc.dg/vect/pr85597.c: Likewise. * gcc.dg/vect/pr88497-1.c: Likewise. * gcc.dg/vect/pr88497-2.c: Likewise. * gcc.dg/vect/pr88497-3.c: Likewise. * gcc.dg/vect/pr88497-4.c: Likewise. * gcc.dg/vect/pr88497-5.c: Likewise. * gcc.dg/vect/pr88497-7.c: Likewise. * gcc.dg/vect/pr92347.c: Likewise. * gcc.dg/vect/pr93069.c: Likewise. * gcc.dg/vect/pr97241.c: Likewise. * gcc.dg/vect/pr99102.c: Likewise. * gcc.dg/vect/vect-early-break_65.c: Likewise. * gcc.dg/vect/vect-fold-1.c: Likewise. * gcc.dg/vect/vect-ifcvt-19.c: Likewise. * gcc.dg/vect/vect-ifcvt-20.c: Likewise. * gcc.dg/vect/vect-reduc-epilogue-gaps.c: Likewise. * gcc.dg/vect/vect-singleton_1.c: Likewise. * g++.dg/vect/pr84556.cc: Likewise. * gfortran.dg/vect/fast-math-mgrid-resid.f: Likewise. * gfortran.dg/vect/pr77848.f: Likewise. * gfortran.dg/vect/pr90913.f90: Likewise. --- gcc/testsuite/g++.dg/vect/pr84556.cc | 2 +- gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c | 1 - gcc/testsuite/gcc.dg/vect/gimplefe-40.c | 2 +- gcc/testsuite/gcc.dg/vect/gimplefe-41.c | 2 +- gcc/testsuite/gcc.dg/vect/pr101145inf.c | 2 +- gcc/testsuite/gcc.dg/vect/pr101145inf_1.c | 2 +- gcc/testsuite/gcc.dg/vect/pr108316.c | 2 +- gcc/testsuite/gcc.dg/vect/pr109011-1.c | 2 +- gcc/testsuite/gcc.dg/vect/pr109011-2.c | 2 +- gcc/testsuite/gcc.dg/vect/pr109011-3.c | 2 +- gcc/testsuite/gcc.dg/vect/pr109011-4.c | 2 +- gcc/testsuite/gcc.dg/vect/pr109011-5.c | 2 +- gcc/testsuite/gcc.dg/vect/pr111846.c | 2 +- gcc/testsuite/gcc.dg/vect/pr111860-2.c | 2 +- gcc/testsuite/gcc.dg/vect/pr111860-3.c | 2 +- gcc/testsuite/gcc.dg/vect/pr113002.c | 2 +- gcc/testsuite/gcc.dg/vect/pr113576.c | 3 +-- gcc/testsuite/gcc.dg/vect/pr84711.c | 2 +- gcc/testsuite/gcc.dg/vect/pr85597.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88497-1.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88497-2.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88497-3.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88497-4.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88497-5.c | 2 +- gcc/testsuite/gcc.dg/vect/pr88497-7.c | 2 +- gcc/testsuite/gcc.dg/vect/pr92347.c | 2 +- gcc/testsuite/gcc.dg/vect/pr93069.c | 2 +- gcc/testsuite/gcc.dg/vect/pr97241.c | 2 +- gcc/testsuite/gcc.dg/vect/pr99102.c | 2 +- .../gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c | 1 - gcc/testsuite/gcc.dg/vect/vect-early-break_65.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-fold-1.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-ifcvt-19.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-ifcvt-20.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-reduc-epilogue-gaps.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-singleton_1.c | 2 +- gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f | 2 +- gcc/testsuite/gfortran.dg/vect/pr77848.f | 2 +- gcc/testsuite/gfortran.dg/vect/pr90913.f90 | 2 +- 39 files changed, 37 insertions(+), 40 deletions(-) diff --git a/gcc/testsuite/g++.dg/vect/pr84556.cc b/gcc/testsuite/g++.dg/vect/pr84556.cc index e2c97e917bed..6b1c9cec515a 100644 --- a/gcc/testsuite/g++.dg/vect/pr84556.cc +++ b/gcc/testsuite/g++.dg/vect/pr84556.cc @@ -1,6 +1,6 @@ // PR c++/84556 // { dg-do run { target c++11 } } -// { dg-options "-O2 -fopenmp-simd" } +// { dg-additional-options "-O2 -fopenmp-simd" } // { dg-additional-options "-mavx" { target avx_runtime } } int diff --git a/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c b/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c index 14ac512a8efa..5a68ff029514 100644 --- a/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c +++ b/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c @@ -1,4 +1,3 @@ -/* { dg-do run } */ /* { dg-require-effective-target vect_complex_add_double } */ /* { dg-add-options arm_v8_3a_complex_neon } */ /* { dg-add-options arm_v8_3a_complex_neon } */ diff --git a/gcc/testsuite/gcc.dg/vect/gimplefe-40.c b/gcc/testsuite/gcc.dg/vect/gimplefe-40.c index 3c5bb4cf6e51..4e37a7980fc9 100644 --- a/gcc/testsuite/gcc.dg/vect/gimplefe-40.c +++ b/gcc/testsuite/gcc.dg/vect/gimplefe-40.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { int128 && vect_float } } } */ -/* { dg-options "-fgimple -Wno-psabi -w" } */ +/* { dg-additional-options "-fgimple -Wno-psabi -w" } */ /* { dg-additional-options "-maltivec" { target { powerpc*-*-* && powerpc_altivec_ok } } } */ typedef float v4sf __attribute__((vector_size(16))); diff --git a/gcc/testsuite/gcc.dg/vect/gimplefe-41.c b/gcc/testsuite/gcc.dg/vect/gimplefe-41.c index e52a3a559a99..650bb2b5bd5e 100644 --- a/gcc/testsuite/gcc.dg/vect/gimplefe-41.c +++ b/gcc/testsuite/gcc.dg/vect/gimplefe-41.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { vect_double && vect_long_long } } } */ -/* { dg-options "-fgimple -Wno-psabi -w" } */ +/* { dg-additional-options "-fgimple -Wno-psabi -w" } */ /* { dg-additional-options "-msse2" { target x86_64-*-* i?86-*-* } } */ typedef double __v2df __attribute__ ((__vector_size__ (16))); diff --git a/gcc/testsuite/gcc.dg/vect/pr101145inf.c b/gcc/testsuite/gcc.dg/vect/pr101145inf.c index ed49f5670b5b..3ad8c1a2dd7b 100644 --- a/gcc/testsuite/gcc.dg/vect/pr101145inf.c +++ b/gcc/testsuite/gcc.dg/vect/pr101145inf.c @@ -1,5 +1,5 @@ /* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */ -/* { dg-options "-O3" } */ +/* { dg-additional-options "-O3" } */ #include <limits.h> #include "pr101145inf.inc" diff --git a/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c b/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c index 4ee3e31c7fe9..e3e9dd46d10a 100644 --- a/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c +++ b/gcc/testsuite/gcc.dg/vect/pr101145inf_1.c @@ -1,5 +1,5 @@ /* { dg-do run { target *-*-linux* *-*-gnu* *-*-uclinux* } } */ -/* { dg-options "-O3" } */ +/* { dg-additional-options "-O3" } */ #include <limits.h> #include "pr101145inf.inc" diff --git a/gcc/testsuite/gcc.dg/vect/pr108316.c b/gcc/testsuite/gcc.dg/vect/pr108316.c index 540b7f2aed46..6888ae50d9e7 100644 --- a/gcc/testsuite/gcc.dg/vect/pr108316.c +++ b/gcc/testsuite/gcc.dg/vect/pr108316.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3" } */ +/* { dg-additional-options "-O3" } */ extern _Bool a[]; diff --git a/gcc/testsuite/gcc.dg/vect/pr109011-1.c b/gcc/testsuite/gcc.dg/vect/pr109011-1.c index 98362d6bc407..28f1288648b1 100644 --- a/gcc/testsuite/gcc.dg/vect/pr109011-1.c +++ b/gcc/testsuite/gcc.dg/vect/pr109011-1.c @@ -1,6 +1,6 @@ /* PR tree-optimization/109011 */ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ +/* { dg-additional-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ /* { dg-additional-options "-mavx512cd" { target { { i?86-*-* x86_64-*-* } && avx512cd } } } */ /* { dg-additional-options "-mavx512vpopcntdq" { target { { i?86-*-* x86_64-*-* } && avx512vpopcntdq } } } */ /* { dg-additional-options "-mvsx" { target { powerpc_vsx_ok && has_arch_pwr8 } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr109011-2.c b/gcc/testsuite/gcc.dg/vect/pr109011-2.c index a737e3fa03ae..0219019edf18 100644 --- a/gcc/testsuite/gcc.dg/vect/pr109011-2.c +++ b/gcc/testsuite/gcc.dg/vect/pr109011-2.c @@ -1,6 +1,6 @@ /* PR tree-optimization/109011 */ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ +/* { dg-additional-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ /* { dg-additional-options "-mavx512cd -mbmi -mlzcnt -mno-avx512vpopcntdq" { target { { { { i?86-*-* x86_64-*-* } && avx512cd } && lzcnt } && bmi } } } */ /* { dg-additional-options "-mvsx" { target { powerpc_vsx_ok && has_arch_pwr9 } } } */ /* { dg-additional-options "-mdejagnu-cpu=power9 -mvsx" { target { powerpc_vsx_ok && { ! has_arch_pwr9 } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr109011-3.c b/gcc/testsuite/gcc.dg/vect/pr109011-3.c index 21c364dfdfd9..eda0d3aa978b 100644 --- a/gcc/testsuite/gcc.dg/vect/pr109011-3.c +++ b/gcc/testsuite/gcc.dg/vect/pr109011-3.c @@ -1,6 +1,6 @@ /* PR tree-optimization/109011 */ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ +/* { dg-additional-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ /* { dg-additional-options "-mno-avx512cd -mbmi -mlzcnt -mavx512vpopcntdq" { target { { { { i?86-*-* x86_64-*-* } && avx512vpopcntdq } && lzcnt } && bmi } } } */ /* { dg-additional-options "-mdejagnu-cpu=power8 -mvsx" { target powerpc_vsx_ok } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr109011-4.c b/gcc/testsuite/gcc.dg/vect/pr109011-4.c index 76af78842248..da7810d62b5a 100644 --- a/gcc/testsuite/gcc.dg/vect/pr109011-4.c +++ b/gcc/testsuite/gcc.dg/vect/pr109011-4.c @@ -1,6 +1,6 @@ /* PR tree-optimization/109011 */ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ +/* { dg-additional-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ /* { dg-additional-options "-mavx512cd -mbmi -mlzcnt -mno-avx512vpopcntdq" { target { { { { i?86-*-* x86_64-*-* } && avx512cd } && lzcnt } && bmi } } } */ /* { dg-additional-options "-mvsx" { target { powerpc_vsx_ok && has_arch_pwr9 } } } */ /* { dg-additional-options "-mdejagnu-cpu=power9 -mvsx" { target { powerpc_vsx_ok && { ! has_arch_pwr9 } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr109011-5.c b/gcc/testsuite/gcc.dg/vect/pr109011-5.c index 19dbfb3356a6..f2119aebcfd4 100644 --- a/gcc/testsuite/gcc.dg/vect/pr109011-5.c +++ b/gcc/testsuite/gcc.dg/vect/pr109011-5.c @@ -1,6 +1,6 @@ /* PR tree-optimization/109011 */ /* { dg-do compile } */ -/* { dg-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ +/* { dg-additional-options "-O3 -fno-unroll-loops --param=vect-epilogues-nomask=0 -fdump-tree-optimized" } */ /* { dg-additional-options "-mno-avx512cd -mbmi -mlzcnt -mavx512vpopcntdq" { target { { { { i?86-*-* x86_64-*-* } && avx512vpopcntdq } && lzcnt } && bmi } } } */ /* { dg-additional-options "-mdejagnu-cpu=power8 -mvsx" { target powerpc_vsx_ok } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr111846.c b/gcc/testsuite/gcc.dg/vect/pr111846.c index d283882f2614..c4d1da6d22b7 100644 --- a/gcc/testsuite/gcc.dg/vect/pr111846.c +++ b/gcc/testsuite/gcc.dg/vect/pr111846.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -ffast-math" } */ +/* { dg-additional-options "-O3 -ffast-math" } */ /* { dg-additional-options "-mavx2" { target { x86_64-*-* i?86-*-* } } } */ extern __attribute__((__simd__)) float powf(float, float); diff --git a/gcc/testsuite/gcc.dg/vect/pr111860-2.c b/gcc/testsuite/gcc.dg/vect/pr111860-2.c index 07f64ffb5318..e205d2c3c9fe 100644 --- a/gcc/testsuite/gcc.dg/vect/pr111860-2.c +++ b/gcc/testsuite/gcc.dg/vect/pr111860-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sink -ftree-vectorize" } */ +/* { dg-additional-options "-O -fno-tree-sink -ftree-vectorize" } */ int buffer_ctrl_ctx_0, buffer_ctrl_p1, buffer_ctrl_cmd; int diff --git a/gcc/testsuite/gcc.dg/vect/pr111860-3.c b/gcc/testsuite/gcc.dg/vect/pr111860-3.c index 07f64ffb5318..e205d2c3c9fe 100644 --- a/gcc/testsuite/gcc.dg/vect/pr111860-3.c +++ b/gcc/testsuite/gcc.dg/vect/pr111860-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -fno-tree-sink -ftree-vectorize" } */ +/* { dg-additional-options "-O -fno-tree-sink -ftree-vectorize" } */ int buffer_ctrl_ctx_0, buffer_ctrl_p1, buffer_ctrl_cmd; int diff --git a/gcc/testsuite/gcc.dg/vect/pr113002.c b/gcc/testsuite/gcc.dg/vect/pr113002.c index 186710f64b42..ad6e5835985e 100644 --- a/gcc/testsuite/gcc.dg/vect/pr113002.c +++ b/gcc/testsuite/gcc.dg/vect/pr113002.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target int128 } */ -/* { dg-options "-finline-stringops -Os" } */ +/* { dg-additional-options "-finline-stringops -Os" } */ typedef __int128 v64u128 __attribute__((vector_size(64))); int c; diff --git a/gcc/testsuite/gcc.dg/vect/pr113576.c b/gcc/testsuite/gcc.dg/vect/pr113576.c index b6edde6f8e2c..ba171b7c1f2c 100644 --- a/gcc/testsuite/gcc.dg/vect/pr113576.c +++ b/gcc/testsuite/gcc.dg/vect/pr113576.c @@ -1,5 +1,4 @@ -/* { dg-do run } */ -/* { dg-options "-O3" } */ +/* { dg-additional-options "-O3" } */ /* { dg-additional-options "-march=skylake-avx512" { target avx512f } } */ #include "tree-vect.h" diff --git a/gcc/testsuite/gcc.dg/vect/pr84711.c b/gcc/testsuite/gcc.dg/vect/pr84711.c index 12e9f60114a5..350f9010be7a 100644 --- a/gcc/testsuite/gcc.dg/vect/pr84711.c +++ b/gcc/testsuite/gcc.dg/vect/pr84711.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_int } */ -/* { dg-options "-O2 -Wno-psabi" } */ +/* { dg-additional-options "-O2 -Wno-psabi" } */ /* { dg-additional-options "-msse" { target i?86-*-* x86_64-*-* } } */ typedef int v4si diff --git a/gcc/testsuite/gcc.dg/vect/pr85597.c b/gcc/testsuite/gcc.dg/vect/pr85597.c index cf615f9c4645..71cc3615d636 100644 --- a/gcc/testsuite/gcc.dg/vect/pr85597.c +++ b/gcc/testsuite/gcc.dg/vect/pr85597.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3" } */ +/* { dg-additional-options "-O3" } */ /* { dg-additional-options "-mfma" { target { x86_64-*-* i?86-*-* } } } */ extern double fma (double, double, double); diff --git a/gcc/testsuite/gcc.dg/vect/pr88497-1.c b/gcc/testsuite/gcc.dg/vect/pr88497-1.c index 885ec7094282..8f9a14af1d34 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88497-1.c +++ b/gcc/testsuite/gcc.dg/vect/pr88497-1.c @@ -1,7 +1,7 @@ /* { dg-require-effective-target vect_double } */ /* { dg-require-effective-target vsx_hw { target { powerpc*-*-* } } } */ /* { dg-require-effective-target sse2_runtime { target { i?86-*-* x86_64-*-* } } } */ -/* { dg-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ +/* { dg-additional-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ /* { dg-additional-options "-mvsx" { target { powerpc*-*-* } } } */ /* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88497-2.c b/gcc/testsuite/gcc.dg/vect/pr88497-2.c index 8da5920903c5..34528ce9aa40 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88497-2.c +++ b/gcc/testsuite/gcc.dg/vect/pr88497-2.c @@ -2,7 +2,7 @@ /* { dg-require-effective-target vect_float } */ /* { dg-require-effective-target powerpc_altivec_ok { target { powerpc*-*-* } } } */ /* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */ -/* { dg-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ +/* { dg-additional-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ /* { dg-additional-options "-maltivec" { target { powerpc*-*-* } } } */ /* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88497-3.c b/gcc/testsuite/gcc.dg/vect/pr88497-3.c index 449f282e85cd..1489dbcc59ab 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88497-3.c +++ b/gcc/testsuite/gcc.dg/vect/pr88497-3.c @@ -2,7 +2,7 @@ /* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target powerpc_altivec_ok { target { powerpc*-*-* } } } */ /* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */ -/* { dg-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ +/* { dg-additional-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ /* { dg-additional-options "-maltivec" { target { powerpc*-*-* } } } */ /* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88497-4.c b/gcc/testsuite/gcc.dg/vect/pr88497-4.c index f7b6c91c911d..e7b20509cbbf 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88497-4.c +++ b/gcc/testsuite/gcc.dg/vect/pr88497-4.c @@ -2,7 +2,7 @@ /* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target powerpc_altivec_ok { target { powerpc*-*-* } } } */ /* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */ -/* { dg-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ +/* { dg-additional-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ /* { dg-additional-options "-maltivec" { target { powerpc*-*-* } } } */ /* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88497-5.c b/gcc/testsuite/gcc.dg/vect/pr88497-5.c index cbd12241c760..c3e34c229626 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88497-5.c +++ b/gcc/testsuite/gcc.dg/vect/pr88497-5.c @@ -2,7 +2,7 @@ /* { dg-require-effective-target vect_int } */ /* { dg-require-effective-target powerpc_altivec_ok { target { powerpc*-*-* } } } */ /* { dg-require-effective-target sse2 { target { i?86-*-* x86_64-*-* } } } */ -/* { dg-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ +/* { dg-additional-options "-O2 -ffast-math -fdump-tree-reassoc1" } */ /* { dg-additional-options "-maltivec" { target { powerpc*-*-* } } } */ /* { dg-additional-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr88497-7.c b/gcc/testsuite/gcc.dg/vect/pr88497-7.c index d20ed71284e2..e94907b34265 100644 --- a/gcc/testsuite/gcc.dg/vect/pr88497-7.c +++ b/gcc/testsuite/gcc.dg/vect/pr88497-7.c @@ -1,5 +1,5 @@ /* { dg-require-effective-target avx512f_runtime } */ -/* { dg-options "-O2 -mavx512f -ffast-math -fdump-tree-reassoc1" } */ +/* { dg-additional-options "-O2 -mavx512f -ffast-math -fdump-tree-reassoc1" } */ /* To test reassoc can undistribute vector bit_field_ref on multiple vector machine modes, bypass those modes with only one candidate. diff --git a/gcc/testsuite/gcc.dg/vect/pr92347.c b/gcc/testsuite/gcc.dg/vect/pr92347.c index f75b2596a260..13d16551b5ce 100644 --- a/gcc/testsuite/gcc.dg/vect/pr92347.c +++ b/gcc/testsuite/gcc.dg/vect/pr92347.c @@ -1,6 +1,6 @@ /* Copied from PR 92347. */ /* { dg-do compile } */ -/* { dg-options "-O1 -fopenmp-simd" } */ +/* { dg-additional-options "-O1 -fopenmp-simd" } */ /* { dg-additional-options "-mavx" { target { i?86-*-* x86_64-*-* } } } */ int by; diff --git a/gcc/testsuite/gcc.dg/vect/pr93069.c b/gcc/testsuite/gcc.dg/vect/pr93069.c index 45c740dbe9e7..a46fa437aa94 100644 --- a/gcc/testsuite/gcc.dg/vect/pr93069.c +++ b/gcc/testsuite/gcc.dg/vect/pr93069.c @@ -1,6 +1,6 @@ /* PR target/93069 */ /* { dg-do assemble { target vect_simd_clones } } */ -/* { dg-options "-O2 -fopenmp-simd" } */ +/* { dg-additional-options "-O2 -fopenmp-simd" } */ #pragma omp declare simd int diff --git a/gcc/testsuite/gcc.dg/vect/pr97241.c b/gcc/testsuite/gcc.dg/vect/pr97241.c index d4be8f609400..f9b3d6d8337c 100644 --- a/gcc/testsuite/gcc.dg/vect/pr97241.c +++ b/gcc/testsuite/gcc.dg/vect/pr97241.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 --param max-loop-header-insns=2" } */ +/* { dg-additional-options "-O3 --param max-loop-header-insns=2" } */ short int *ev; int l4; diff --git a/gcc/testsuite/gcc.dg/vect/pr99102.c b/gcc/testsuite/gcc.dg/vect/pr99102.c index 0d030d15c86d..071741f5e48a 100644 --- a/gcc/testsuite/gcc.dg/vect/pr99102.c +++ b/gcc/testsuite/gcc.dg/vect/pr99102.c @@ -1,4 +1,4 @@ -/* { dg-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */ +/* { dg-additional-options "-O2 -ftree-vectorize -fno-vect-cost-model -fdump-tree-vect-details" } */ /* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */ long a[44]; short d, e = -7; diff --git a/gcc/testsuite/gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c b/gcc/testsuite/gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c index 7b46e7d8a2a6..155ce477103e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c +++ b/gcc/testsuite/gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c @@ -1,5 +1,4 @@ /* Make sure a -0 stays -0 when we perform a conditional reduction. */ -/* { dg-do run } */ /* { dg-require-effective-target vect_double } */ /* { dg-add-options ieee } */ /* { dg-additional-options "-std=gnu99 -fno-fast-math" } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-early-break_65.c b/gcc/testsuite/gcc.dg/vect/vect-early-break_65.c index 23a8341b529d..fa87999dcd4c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-early-break_65.c +++ b/gcc/testsuite/gcc.dg/vect/vect-early-break_65.c @@ -2,7 +2,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_early_break } */ /* { dg-require-effective-target vect_int } */ -/* { dg-options "-Ofast -fno-vect-cost-model -fdump-tree-vect-details" } */ +/* { dg-additional-options "-Ofast -fno-vect-cost-model -fdump-tree-vect-details" } */ enum a { b }; diff --git a/gcc/testsuite/gcc.dg/vect/vect-fold-1.c b/gcc/testsuite/gcc.dg/vect/vect-fold-1.c index 2bd21a47a0ba..cc1349e7d787 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-fold-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-fold-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fdump-tree-ccp1" } */ +/* { dg-additional-options "-O2 -fdump-tree-ccp1" } */ typedef unsigned char v4qi __attribute__ ((vector_size (4))); diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-19.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-19.c index b10147298d30..27cc5427f889 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-19.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-19.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-fgimple -Ofast -fdump-tree-ifcvt-raw" } */ +/* { dg-additional-options "-fgimple -Ofast -fdump-tree-ifcvt-raw" } */ void __GIMPLE (ssa,guessed_local(10737414), startwith ("fix_loops")) foo (int * f, int d, int e) diff --git a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-20.c b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-20.c index 96c5f5a92938..0a4a8087d2c9 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-ifcvt-20.c +++ b/gcc/testsuite/gcc.dg/vect/vect-ifcvt-20.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-fgimple -fopenmp-simd -Ofast -fdump-tree-ifcvt-raw" } */ +/* { dg-additional-options "-fgimple -fopenmp-simd -Ofast -fdump-tree-ifcvt-raw" } */ void foo (int * restrict p, int * restrict q, int * restrict r, int * restrict s, int * restrict t, int * restrict u) { diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-epilogue-gaps.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-epilogue-gaps.c index dc5704f5607f..5e7bfd5d81d9 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-reduc-epilogue-gaps.c +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-epilogue-gaps.c @@ -1,4 +1,4 @@ -/* { dg-options "-O3 -fno-vect-cost-model" } */ +/* { dg-additional-options "-O3 -fno-vect-cost-model" } */ struct { float real; float img; diff --git a/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c b/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c index 6c2ff49cdab3..bd243f805b7c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c @@ -1,7 +1,7 @@ /* PR target/59843 ICE on function taking/returning vector of one float64_t. */ /* { dg-do compile } */ -/* { dg-options "-Warray-bounds -O2 -fno-inline -std=c99" } */ +/* { dg-additional-options "-Warray-bounds -O2 -fno-inline -std=c99" } */ #define TEST(BASETYPE, VECTYPE, SUFFIX) \ typedef BASETYPE VECTYPE \ diff --git a/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f b/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f index 97b888217310..2e5487482963 100644 --- a/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f +++ b/gcc/testsuite/gfortran.dg/vect/fast-math-mgrid-resid.f @@ -1,6 +1,6 @@ ! { dg-do compile } ! { dg-require-effective-target vect_double } -! { dg-options "-O3 --param vect-max-peeling-for-alignment=0 -fpredictive-commoning -fdump-tree-pcom-details -std=legacy" } +! { dg-additional-options "-O3 --param vect-max-peeling-for-alignment=0 -fpredictive-commoning -fdump-tree-pcom-details -std=legacy" } ! { dg-additional-options "-mprefer-avx128" { target { i?86-*-* x86_64-*-* } } } ! { dg-additional-options "-mlsx" { target { loongarch*-*-* } } } ! { dg-additional-options "-mzarch" { target { s390*-*-* } } } diff --git a/gcc/testsuite/gfortran.dg/vect/pr77848.f b/gcc/testsuite/gfortran.dg/vect/pr77848.f index 4752205f5d2b..2a5e5bfea542 100644 --- a/gcc/testsuite/gfortran.dg/vect/pr77848.f +++ b/gcc/testsuite/gfortran.dg/vect/pr77848.f @@ -1,6 +1,6 @@ ! PR 77848: Verify versioning is on when vectorization fails ! { dg-do compile } -! { dg-options "-O3 -ffast-math -fdump-tree-ifcvt -fdump-tree-vect-details" } +! { dg-additional-options "-O3 -ffast-math -fdump-tree-ifcvt -fdump-tree-vect-details" } ! { dg-additional-options "-mzarch" { target { s390*-*-* } } } subroutine sub(x,a,n,m) diff --git a/gcc/testsuite/gfortran.dg/vect/pr90913.f90 b/gcc/testsuite/gfortran.dg/vect/pr90913.f90 index d0f225159ccc..1529cee3757f 100644 --- a/gcc/testsuite/gfortran.dg/vect/pr90913.f90 +++ b/gcc/testsuite/gfortran.dg/vect/pr90913.f90 @@ -1,5 +1,5 @@ ! { dg-do compile } -! { dg-options "-O3 -ffast-math" } +! { dg-additional-options "-O3 -ffast-math" } ! { dg-additional-options "-mavx -mveclibabi=svml" { target i?86-*-* x86_64-*-* } } subroutine foo (a, b, c, d, e, f, g, h, k, l) implicit none From d5a3b4afcdf4d517334a2717dbb65ae0d2c26507 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 28 Mar 2024 15:00:44 +0100 Subject: [PATCH 294/551] profile-count: Avoid overflows into uninitialized [PR112303] The testcase in the patch ICEs with --- gcc/tree-scalar-evolution.cc +++ gcc/tree-scalar-evolution.cc @@ -3881,7 +3881,7 @@ final_value_replacement_loop (class loop *loop) /* Propagate constants immediately, but leave an unused initialization around to avoid invalidating the SCEV cache. */ - if (CONSTANT_CLASS_P (def) && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rslt)) + if (0 && CONSTANT_CLASS_P (def) && !SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rslt)) replace_uses_by (rslt, def); /* Create the replacement statements. */ (the addition of the above made the ICE latent), because profile_count addition doesn't check for overflows and if unlucky, we can even overflow into the uninitialized value. Getting really huge profile counts is very easy even when not using recursive inlining in loops, e.g. __attribute__((noipa)) void bar (void) { __builtin_exit (0); } __attribute__((noipa)) void foo (void) { for (int i = 0; i < 1000; ++i) for (int j = 0; j < 1000; ++j) for (int k = 0; k < 1000; ++k) for (int l = 0; l < 1000; ++l) for (int m = 0; m < 1000; ++m) for (int n = 0; n < 1000; ++n) for (int o = 0; o < 1000; ++o) for (int p = 0; p < 1000; ++p) for (int q = 0; q < 1000; ++q) for (int r = 0; r < 1000; ++r) for (int s = 0; s < 1000; ++s) for (int t = 0; t < 1000; ++t) for (int u = 0; u < 1000; ++u) for (int v = 0; v < 1000; ++v) for (int w = 0; w < 1000; ++w) for (int x = 0; x < 1000; ++x) for (int y = 0; y < 1000; ++y) for (int z = 0; z < 1000; ++z) for (int a = 0; a < 1000; ++a) for (int b = 0; b < 1000; ++b) bar (); } int main () { foo (); } reaches the maximum count already on the 11th loop. Some other methods of profile_count like apply_scale already do use MIN (val, max_count) before assignment to m_val, this patch just extends that to operator{+,+=} methods. Furthermore, one overload of apply_probability wasn't using safe_scale_64bit and so could very easily overflow as well - prob is required to be [0, 10000] and if m_val is near the max_count, it can overflow even with multiplications by 8. 2024-03-28 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/112303 * profile-count.h (profile_count::operator+): Perform addition in uint64_t variable and set m_val to MIN of that val and max_count. (profile_count::operator+=): Likewise. (profile_count::operator-=): Formatting fix. (profile_count::apply_probability): Use safe_scale_64bit even in the int overload. * gcc.c-torture/compile/pr112303.c: New test. --- gcc/profile-count.h | 12 ++++++--- .../gcc.c-torture/compile/pr112303.c | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr112303.c diff --git a/gcc/profile-count.h b/gcc/profile-count.h index b3d776475e2c..6bbd476cb7fe 100644 --- a/gcc/profile-count.h +++ b/gcc/profile-count.h @@ -910,7 +910,8 @@ struct GTY(()) profile_count profile_count ret; gcc_checking_assert (compatible_p (other)); - ret.m_val = m_val + other.m_val; + uint64_t ret_val = m_val + other.m_val; + ret.m_val = MIN (ret_val, max_count); ret.m_quality = MIN (m_quality, other.m_quality); return ret; } @@ -929,7 +930,8 @@ struct GTY(()) profile_count else { gcc_checking_assert (compatible_p (other)); - m_val += other.m_val; + uint64_t ret_val = m_val + other.m_val; + m_val = MIN (ret_val, max_count); m_quality = MIN (m_quality, other.m_quality); } return *this; @@ -957,7 +959,7 @@ struct GTY(()) profile_count else { gcc_checking_assert (compatible_p (other)); - m_val = m_val >= other.m_val ? m_val - other.m_val: 0; + m_val = m_val >= other.m_val ? m_val - other.m_val : 0; m_quality = MIN (m_quality, other.m_quality); } return *this; @@ -1127,7 +1129,9 @@ struct GTY(()) profile_count if (!initialized_p ()) return uninitialized (); profile_count ret; - ret.m_val = RDIV (m_val * prob, REG_BR_PROB_BASE); + uint64_t tmp; + safe_scale_64bit (m_val, prob, REG_BR_PROB_BASE, &tmp); + ret.m_val = tmp; ret.m_quality = MIN (m_quality, ADJUSTED); return ret; } diff --git a/gcc/testsuite/gcc.c-torture/compile/pr112303.c b/gcc/testsuite/gcc.c-torture/compile/pr112303.c new file mode 100644 index 000000000000..01937da53cfb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr112303.c @@ -0,0 +1,25 @@ +/* PR tree-optimization/112303 */ + +int a, b, d, e, f, **g, h; +char c; + +int * +foo (void) +{ + for (int i = 0; i < 3; i++) + { + for (h = 0; h < 2; h++) + ; + if (!b) + break; + } + while (f) + while (e) + { + c = 0; + while (d) + while (a) + *g = foo (); + } + return 0; +} From 44ab31419cf366e889a019a2fe31638c6f093729 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 28 Mar 2024 15:12:08 +0100 Subject: [PATCH 295/551] predict: Fix comment typo I've noticed a typo in a comment. 2024-03-28 Jakub Jelinek <jakub@redhat.com> * predict.cc (estimate_bb_frequencies): Fix comment typo, scalling -> scaling. --- gcc/predict.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/predict.cc b/gcc/predict.cc index c1c48bf3df1e..43e3694cb420 100644 --- a/gcc/predict.cc +++ b/gcc/predict.cc @@ -4035,7 +4035,7 @@ estimate_bb_frequencies () /* Scaling frequencies up to maximal profile count may result in frequent overflows especially when inlining loops. - Small scalling results in unnecesary precision loss. Stay in + Small scaling results in unnecesary precision loss. Stay in the half of the (exponential) range. */ freq_max = (sreal (1) << (profile_count::n_bits / 2)) / freq_max; if (freq_max < 16) From 04799f03e8d01b903295ef3a100a0117b7ddbf5e Mon Sep 17 00:00:00 2001 From: Gaius Mulley <(no_default)> Date: Thu, 28 Mar 2024 14:57:49 +0000 Subject: [PATCH 296/551] PR modula2/114517 gm2 does not allow comparison operator hash in column one This patch allows -fno-cpp to be supplied to gm2. Without this patch it causes an ICE. The patch allows -fno-cpp to turn off cpp flags. These are tested in m2.flex to decide whether a change of state is allowed (enabling handling of #line directives). gcc/ChangeLog: PR modula2/114517 * doc/gm2.texi: Mention gm2 treats a # in the first column as a preprocessor directive unless -fno-cpp is supplied. gcc/m2/ChangeLog: PR modula2/114517 * gm2-compiler/M2Options.def (SetCpp): Add comment. (GetCpp): Move after SetCpp. (GetLineDirectives): New procedure function. * gm2-compiler/M2Options.mod (GetLineDirectives): New procedure function. * gm2-gcc/m2options.h (M2Options_GetLineDirectives): New prototype. * gm2-lang.cc (gm2_langhook_init_options): OPT_fcpp only assert if !value. * m2.flex: Test GetLineDirectives before changing to LINE0 state. gcc/testsuite/ChangeLog: PR modula2/114517 * gm2/cpp/fail/hashfirstcolumn2.mod: New test. * gm2/imports/fail/imports-fail.exp: New test. * gm2/imports/fail/localmodule2.mod: New test. * gm2/imports/run/pass/localmodule.mod: New test. Signed-off-by: Gaius Mulley <(no_default)> --- gcc/doc/gm2.texi | 3 +- gcc/m2/gm2-compiler/M2Options.def | 36 +++++++++++-------- gcc/m2/gm2-compiler/M2Options.mod | 10 ++++++ gcc/m2/gm2-gcc/m2options.h | 1 + gcc/m2/gm2-lang.cc | 3 +- gcc/m2/m2.flex | 10 ++++-- .../gm2/cpp/fail/hashfirstcolumn2.mod | 18 ++++++++++ .../gm2/imports/fail/imports-fail.exp | 36 +++++++++++++++++++ .../gm2/imports/fail/localmodule2.mod | 27 ++++++++++++++ .../gm2/imports/run/pass/localmodule.mod | 27 ++++++++++++++ 10 files changed, 153 insertions(+), 18 deletions(-) create mode 100644 gcc/testsuite/gm2/cpp/fail/hashfirstcolumn2.mod create mode 100644 gcc/testsuite/gm2/imports/fail/imports-fail.exp create mode 100644 gcc/testsuite/gm2/imports/fail/localmodule2.mod create mode 100644 gcc/testsuite/gm2/imports/run/pass/localmodule.mod diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi index 028a0715f64b..9f6d4140e427 100644 --- a/gcc/doc/gm2.texi +++ b/gcc/doc/gm2.texi @@ -1657,7 +1657,8 @@ The preprocessor @samp{cpp} can be invoked via the @samp{-fcpp} command line option. This in turn invokes @samp{cpp} with the following arguments @samp{-traditional -lang-asm}. These options preserve comments and all quotations. @samp{gm2} treats a @samp{#} -character in the first column as a preprocessor directive. +character in the first column as a preprocessor directive unless +@samp{-fno-cpp} is supplied. For example here is a module which calls @code{FatalError} via the macro @code{ERROR}. diff --git a/gcc/m2/gm2-compiler/M2Options.def b/gcc/m2/gm2-compiler/M2Options.def index 90b5178f88a6..e4ebf41802f4 100644 --- a/gcc/m2/gm2-compiler/M2Options.def +++ b/gcc/m2/gm2-compiler/M2Options.def @@ -328,6 +328,28 @@ PROCEDURE SetObj (arg: ADDRESS) ; PROCEDURE GetObj () : ADDRESS ; +(* + SetCpp - enables the source to be preprocessed and enables the + recognition of C preprocessor line directives. +*) + +PROCEDURE SetCpp (value: BOOLEAN) : BOOLEAN ; + + +(* + GetCpp - returns TRUE if the C preprocessor was used. +*) + +PROCEDURE GetCpp () : BOOLEAN ; + + +(* + GetLineDirectives - returns TRUE if line directives are allowed. +*) + +PROCEDURE GetLineDirectives () : BOOLEAN ; + + (* SetScaffoldDynamic - set the -fscaffold-dynamic flag. *) @@ -467,20 +489,6 @@ PROCEDURE SetQuiet (value: BOOLEAN) : BOOLEAN ; PROCEDURE SetCC1Quiet (value: BOOLEAN) ; -(* - SetCpp - -*) - -PROCEDURE SetCpp (value: BOOLEAN) : BOOLEAN ; - - -(* - GetCpp - returns TRUE if the C preprocessor was used. -*) - -PROCEDURE GetCpp () : BOOLEAN ; - - (* SetM2g - set the -fm2-g flag. *) diff --git a/gcc/m2/gm2-compiler/M2Options.mod b/gcc/m2/gm2-compiler/M2Options.mod index 30203158e5c3..b0de8cdfe824 100644 --- a/gcc/m2/gm2-compiler/M2Options.mod +++ b/gcc/m2/gm2-compiler/M2Options.mod @@ -672,6 +672,16 @@ BEGIN END GetCpp ; +(* + GetLineDirectives - returns TRUE if line directives are allowed. +*) + +PROCEDURE GetLineDirectives () : BOOLEAN ; +BEGIN + RETURN LineDirectives +END GetLineDirectives ; + + (* SetPPOnly - set the PPonly (preprocess only) to value. *) diff --git a/gcc/m2/gm2-gcc/m2options.h b/gcc/m2/gm2-gcc/m2options.h index a03fdc5975f0..4b3a23f18db5 100644 --- a/gcc/m2/gm2-gcc/m2options.h +++ b/gcc/m2/gm2-gcc/m2options.h @@ -104,6 +104,7 @@ EXTERN void M2Options_FinaliseOptions (void); EXTERN void M2Options_SetDebugFunctionLineNumbers (bool value); EXTERN void M2Options_SetGenerateStatementNote (bool value); EXTERN bool M2Options_GetCpp (void); +EXTERN bool M2Options_GetLineDirectives (void); EXTERN bool M2Options_GetM2g (void); EXTERN bool M2Options_SetM2g (bool value); EXTERN bool M2Options_SetLowerCaseKeywords (bool value); diff --git a/gcc/m2/gm2-lang.cc b/gcc/m2/gm2-lang.cc index bde68368e1fc..fc70fbb50bfd 100644 --- a/gcc/m2/gm2-lang.cc +++ b/gcc/m2/gm2-lang.cc @@ -193,7 +193,8 @@ gm2_langhook_init_options (unsigned int decoded_options_count, switch (code) { case OPT_fcpp: - gcc_checking_assert (building_cpp_command); + if (value) + gcc_checking_assert (building_cpp_command); break; case OPT_fcpp_begin: in_cpp_args = true; diff --git a/gcc/m2/m2.flex b/gcc/m2/m2.flex index e8ee383878e4..d874db9dae2d 100644 --- a/gcc/m2/m2.flex +++ b/gcc/m2/m2.flex @@ -160,8 +160,14 @@ extern void yylex (void); <COMMENTC>. { updatepos(); skippos(); } <COMMENTC>\n.* { consumeLine(); } <COMMENTC>"*/" { endOfCComment(); } -^\#.* { consumeLine(); /* printf("found: %s\n", currentLine->linebuf); */ BEGIN LINE0; } -\n\#.* { consumeLine(); /* printf("found: %s\n", currentLine->linebuf); */ BEGIN LINE0; } +^\#.* { consumeLine(); /* printf("found: %s\n", currentLine->linebuf); */ + if (M2Options_GetLineDirectives ()) + BEGIN LINE0; + } +\n\#.* { consumeLine(); /* printf("found: %s\n", currentLine->linebuf); */ + if (M2Options_GetLineDirectives ()) + BEGIN LINE0; + } <LINE0>\#[ \t]* { updatepos(); } <LINE0>[0-9]+[ \t]*\" { updatepos(); lineno=atoi(yytext); BEGIN LINE1; } <LINE0>\n { m2flex_M2Error("missing initial quote after #line directive"); resetpos(); BEGIN INITIAL; } diff --git a/gcc/testsuite/gm2/cpp/fail/hashfirstcolumn2.mod b/gcc/testsuite/gm2/cpp/fail/hashfirstcolumn2.mod new file mode 100644 index 000000000000..34f63c96827c --- /dev/null +++ b/gcc/testsuite/gm2/cpp/fail/hashfirstcolumn2.mod @@ -0,0 +1,18 @@ +MODULE hashfirstcolumn2 ; + +FROM libc IMPORT printf, exit ; + +VAR + x, y: CARDINAL ; +BEGIN + x := 1 ; + y := 2 ; + IF x +# y + THEN + printf ("success\n"); + ELSE + printf ("failure\n"); + exit (1) + END +END hashfirstcolumn2. diff --git a/gcc/testsuite/gm2/imports/fail/imports-fail.exp b/gcc/testsuite/gm2/imports/fail/imports-fail.exp new file mode 100644 index 000000000000..0ba5e0c66409 --- /dev/null +++ b/gcc/testsuite/gm2/imports/fail/imports-fail.exp @@ -0,0 +1,36 @@ +# Copyright (C) 2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# This file was written by Gaius Mulley (gaius.mulley@southwales.ac.uk) +# for GNU Modula-2. + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib gm2-torture.exp + +gm2_init_pim "${srcdir}/gm2/pim/fail ${srcdir}/gm2/imports/fail" + +foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + gm2-torture-fail $testcase +} diff --git a/gcc/testsuite/gm2/imports/fail/localmodule2.mod b/gcc/testsuite/gm2/imports/fail/localmodule2.mod new file mode 100644 index 000000000000..469965ace8dd --- /dev/null +++ b/gcc/testsuite/gm2/imports/fail/localmodule2.mod @@ -0,0 +1,27 @@ +MODULE localmodule2 ; + +FROM libc IMPORT printf ; + +PROCEDURE mult2 (n: CARDINAL) : CARDINAL ; +BEGIN + RETURN 2*n +END mult2 ; + +MODULE local ; + + EXPORT mysqr ; + IMPORT mult2 ; + + PROCEDURE mysqr (n: CARDINAL) : CARDINAL ; + BEGIN + RETURN mult2 (n) * mult2 (n) + END mysqr ; + +END local ; + +VAR + d: CARDINAL ; +BEGIN + d := mysqr (3) ; + printf ("sqr (3 * 2) = %d\n", d) +END localmodule2. diff --git a/gcc/testsuite/gm2/imports/run/pass/localmodule.mod b/gcc/testsuite/gm2/imports/run/pass/localmodule.mod new file mode 100644 index 000000000000..07c5cc11c7b3 --- /dev/null +++ b/gcc/testsuite/gm2/imports/run/pass/localmodule.mod @@ -0,0 +1,27 @@ +MODULE localmodule ; + +FROM libc IMPORT printf ; + +PROCEDURE mult2 (n: CARDINAL) : CARDINAL ; +BEGIN + RETURN 2*n +END mult2 ; + +MODULE local ; + + IMPORT mult2 ; + EXPORT mysqr ; + + PROCEDURE mysqr (n: CARDINAL) : CARDINAL ; + BEGIN + RETURN mult2 (n) * mult2 (n) + END mysqr ; + +END local ; + +VAR + d: CARDINAL ; +BEGIN + d := mysqr (3) ; + printf ("sqr (3 * 2) = %d\n", d) +END localmodule. From aeee63ffbf4f4fbc4d90d8aae808d6b67f0148a3 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 28 Mar 2024 16:49:44 +0000 Subject: [PATCH 297/551] PR modula2/114520 Incorrect ordering of import/export statements cause confusion The error recovery causes misleading error messages to appear if an EXPORT and IMPORT statement are in the wrong order. This patch detects the incorrect order and issues an error message and prevents error recovery. The fix should be improved and made more general if another similar case is required. gcc/m2/ChangeLog: PR modula2/114520 * gm2-compiler/P0SyntaxCheck.bnf (DetectImport): New procedure. (EnableImportCheck): New boolean. (Expect): Call DetectImport. (Export): Set EnableImportCheck TRUE before ';' and FALSE afterwards. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/P0SyntaxCheck.bnf | 31 +++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/gcc/m2/gm2-compiler/P0SyntaxCheck.bnf b/gcc/m2/gm2-compiler/P0SyntaxCheck.bnf index c1c86c1827dc..07f861adac9c 100644 --- a/gcc/m2/gm2-compiler/P0SyntaxCheck.bnf +++ b/gcc/m2/gm2-compiler/P0SyntaxCheck.bnf @@ -82,9 +82,10 @@ CONST (* giving up. *) VAR - seenError : BOOLEAN ; - LastIdent : Name ; - InsertCount: CARDINAL ; + EnableImportCheck, + seenError : BOOLEAN ; + LastIdent : Name ; + InsertCount : CARDINAL ; PROCEDURE ErrorString (s: String) ; @@ -319,6 +320,21 @@ BEGIN END PeepToken ; +(* + DetectImport - checks whether the next token is an import or from and if so + generates an error message. This is called after an export + statement to notify the user that the ordering is incorrect. +*) + +PROCEDURE DetectImport ; +BEGIN + IF (currenttoken = importtok) OR (currenttoken = fromtok) + THEN + ErrorArray ('an {%AkIMPORT} statement must preceed an {%kEXPORT} statement') + END +END DetectImport ; + + (* Expect - *) @@ -328,6 +344,10 @@ BEGIN IF currenttoken=t THEN GetToken ; + IF EnableImportCheck + THEN + DetectImport + END ; IF Pass0 THEN PeepToken (stopset0, stopset1, stopset2) @@ -347,6 +367,7 @@ END Expect ; PROCEDURE CompilationUnit () : BOOLEAN ; BEGIN seenError := FALSE ; + EnableImportCheck := FALSE ; InsertCount := 0 ; FileUnit (SetOfStop0{eoftok}, SetOfStop1{}, SetOfStop2{}) ; RETURN NOT seenError @@ -883,7 +904,9 @@ Priority := "[" ConstExpression "]" =: Export := "EXPORT" ( "QUALIFIED" IdentList | "UNQUALIFIED" IdentList | IdentList - ) ";" =: + ) % EnableImportCheck := TRUE % + ";" % EnableImportCheck := FALSE % + =: Import := "FROM" Ident "IMPORT" IdentList ";" | "IMPORT" % PushTtok (ImportTok, GetTokenNo () -1) From c1424628dc95829408882f01cbf0dd61566dc312 Mon Sep 17 00:00:00 2001 From: Vineet Gupta <vineetg@rivosinc.com> Date: Wed, 27 Mar 2024 14:55:04 -0700 Subject: [PATCH 298/551] RISC-V: testsuite: ensure vtype is call clobbered Per classic Vector calling convention ABI, vtype is call clobbered, so ensure gcc regenerates a VSETVLI in following cases: - after a function call. - after an inline asm fragment which clobbers vtype. ATM gcc seems to be doing the right thing, but a test can never hurt. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vtype-call-clobbered.c: New Test. Signed-off-by: Vineet Gupta <vineetg@rivosinc.com> --- .../riscv/rvv/vtype-call-clobbered.c | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/vtype-call-clobbered.c diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vtype-call-clobbered.c b/gcc/testsuite/gcc.target/riscv/rvv/vtype-call-clobbered.c new file mode 100644 index 000000000000..be9f312aa508 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/vtype-call-clobbered.c @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64 -O2" } */ +/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */ + +#include "riscv_vector.h" + +extern void can_clobber_vtype(); + +static inline void v_loop (void * restrict in, void * restrict out, int n) +{ + for (int i = 0; i < n; i++) + { + vuint8mf8_t v = *(vuint8mf8_t*)(in + i); + *(vuint8mf8_t*)(out + i) = v; + } +} + +/* Two V instructions back-back. + Only 1 vsetvli insn. */ +void +vec1 (void * restrict in, void * restrict out1, void * restrict out2, int n) +{ + v_loop(in, out1, n); + v_loop(in, out2, n); +} + +/* Two V instructions seperated by a function call. + Both need to have a corresponding vsetvli insn. */ +void +vec2 (void * restrict in, void * restrict out1, void * restrict out2, int n) +{ + v_loop(in, out1, n); + can_clobber_vtype(); + v_loop(in, out2, n); +} + +/* Two V instructions seperated by an inline asm with vtype clobber. + Both need to have a corresponding vsetvli insn. */ +void +vec3 (void * restrict in, void * restrict out1, void * restrict out2, int n) +{ + v_loop(in, out1, n); + asm volatile("":::"vtype"); + v_loop(in, out2, n); +} + +/* { dg-final { scan-assembler-times {vsetvli} 5 } } */ From bbb7c513dddc5c9b2d5e9b78bc1c2f85a0cfe07e Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Wed, 27 Mar 2024 21:18:04 +0100 Subject: [PATCH 299/551] Fortran: fix DATA and derived types with pointer components [PR114474] When matching actual arguments in match_actual_arg, these are initially treated as a possible dummy procedure, assuming that the correct type is determined later. This resolution could fail when the procedure is a derived type constructor with a pointer component and appears in a DATA statement, where the pointer shall be associated with an initial data target. Check for those cases where the type obviously has not been resolved yet, and which were missed because there was no component reference. gcc/fortran/ChangeLog: PR fortran/114474 * primary.cc (gfc_variable_attr): Catch variables used in structure constructors within DATA statements that are still tagged with a temporary type BT_PROCEDURE from match_actual_arg and which have the target attribute, and fix their typespec. gcc/testsuite/ChangeLog: PR fortran/114474 * gfortran.dg/data_pointer_3.f90: New test. --- gcc/fortran/primary.cc | 12 +++ gcc/testsuite/gfortran.dg/data_pointer_3.f90 | 77 ++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/data_pointer_3.f90 diff --git a/gcc/fortran/primary.cc b/gcc/fortran/primary.cc index 0ab69bb9dcea..5dd6875a4a68 100644 --- a/gcc/fortran/primary.cc +++ b/gcc/fortran/primary.cc @@ -2804,6 +2804,18 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts) if (ts != NULL && expr->ts.type == BT_UNKNOWN) *ts = sym->ts; + /* Catch left-overs from match_actual_arg, where an actual argument of a + procedure is given a temporary ts.type == BT_PROCEDURE. The fixup is + needed for structure constructors in DATA statements, where a pointer + is associated with a data target, and the argument has not been fully + resolved yet. Components references are dealt with further below. */ + if (ts != NULL + && expr->ts.type == BT_PROCEDURE + && expr->ref == NULL + && attr.flavor != FL_PROCEDURE + && attr.target) + *ts = sym->ts; + has_inquiry_part = false; for (ref = expr->ref; ref; ref = ref->next) if (ref->type == REF_INQUIRY) diff --git a/gcc/testsuite/gfortran.dg/data_pointer_3.f90 b/gcc/testsuite/gfortran.dg/data_pointer_3.f90 new file mode 100644 index 000000000000..49c288e93b9b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/data_pointer_3.f90 @@ -0,0 +1,77 @@ +! { dg-do compile } +! PR fortran/114474 - DATA and derived types with pointer components + +program pr114474 + implicit none + integer, target :: ii = 42 ! initial data target + + integer, target :: jj = 24 + integer, pointer :: qq => jj + ! ii and jj resolve slightly differently when the data statement below + ! is reached, as jj is resolved outside the structure constructor first + + type t + integer, pointer :: h + end type t + + integer, target :: kk(7) = 23 + integer, pointer :: ll(:) => kk + + type t1 + integer :: m(7) + end type t1 + + type(t) :: x1, x2, x3, x4, x5 + type(t), parameter :: z1 = t(null()) + + type(t1), target :: tt = t1([1,2,3,4,5,6,7]) + type(t1), parameter :: vv = t1(22) + type(t1) :: w1, w2 + integer, pointer :: p1(:) => tt% m + + data x1 / t(null()) / + data x2 / t(ii) / ! ii is initial data target + data x3 / t(jj) / ! jj is resolved differently... + data x4 / t(tt%m(3)) / ! pointer association with 3rd element + + data w1 / t1(12) / + data w2 / t1(vv%m) / + + if ( associated (x1% h)) stop 1 + if (.not. associated (x2% h)) stop 2 + if (.not. associated (x3% h)) stop 3 + if (.not. associated (x4% h)) stop 4 + if (x2% h /= 42) stop 5 + if (x3% h /= 24) stop 6 + if (x4% h /= 3) stop 7 + + if (any (w1%m /= 12 )) stop 8 + if (any (w2%m /= vv%m)) stop 9 +end + + +subroutine sub + implicit none + + interface + real function myfun (x) + real, intent(in) :: x + end function myfun + end interface + + type u + procedure(myfun), pointer, nopass :: p + end type u + + type(u) :: u3 = u(null()) + type(u), parameter :: u4 = u(null()) + type(u) :: u1, u2 + + data u1 / u(null()) / + data u2 / u(myfun) / +end + +real function myfun (x) + real, intent(in) :: x + myfun = x +end function myfun From 8bb3ef3f6e335e8794590fb712a2661d11d21973 Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Wed, 27 Mar 2024 16:14:01 -0400 Subject: [PATCH 300/551] c++: __is_constructible ref binding [PR100667] The requirement that a type argument be complete is excessive in the case of direct reference binding to the same type, which does not rely on any properties of the type. This is LWG 2939. PR c++/100667 gcc/cp/ChangeLog: * semantics.cc (same_type_ref_bind_p): New. (finish_trait_expr): Use it. gcc/testsuite/ChangeLog: * g++.dg/ext/is_constructible8.C: New test. --- gcc/cp/semantics.cc | 54 +++++++++++++++++--- gcc/testsuite/g++.dg/ext/is_constructible8.C | 31 +++++++++++ 2 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/is_constructible8.C diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index adb1ba48d299..9838331d2a9d 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -12607,6 +12607,45 @@ check_trait_type (tree type, int kind = 1) return true; } +/* True iff the conversion (if any) would be a direct reference + binding, not requiring complete types. This is LWG2939. */ + +static bool +same_type_ref_bind_p (cp_trait_kind kind, tree type1, tree type2) +{ + tree from, to; + switch (kind) + { + /* These put the target type first. */ + case CPTK_IS_CONSTRUCTIBLE: + case CPTK_IS_NOTHROW_CONSTRUCTIBLE: + case CPTK_IS_TRIVIALLY_CONSTRUCTIBLE: + case CPTK_REF_CONSTRUCTS_FROM_TEMPORARY: + case CPTK_REF_CONVERTS_FROM_TEMPORARY: + to = type1; + from = type2; + break; + + /* These put it second. */ + case CPTK_IS_CONVERTIBLE: + case CPTK_IS_NOTHROW_CONVERTIBLE: + to = type2; + from = type1; + break; + + default: + gcc_unreachable (); + } + + if (TREE_CODE (to) != REFERENCE_TYPE || !from) + return false; + if (TREE_CODE (from) == TREE_VEC && TREE_VEC_LENGTH (from) == 1) + from = TREE_VEC_ELT (from, 0); + return (TYPE_P (from) + && (same_type_ignoring_top_level_qualifiers_p + (non_reference (to), non_reference (from)))); +} + /* Process a trait expression. */ tree @@ -12666,20 +12705,21 @@ finish_trait_expr (location_t loc, cp_trait_kind kind, tree type1, tree type2) return error_mark_node; break; - case CPTK_IS_ASSIGNABLE: case CPTK_IS_CONSTRUCTIBLE: - if (!check_trait_type (type1)) - return error_mark_node; - break; - case CPTK_IS_CONVERTIBLE: - case CPTK_IS_NOTHROW_ASSIGNABLE: case CPTK_IS_NOTHROW_CONSTRUCTIBLE: case CPTK_IS_NOTHROW_CONVERTIBLE: - case CPTK_IS_TRIVIALLY_ASSIGNABLE: case CPTK_IS_TRIVIALLY_CONSTRUCTIBLE: case CPTK_REF_CONSTRUCTS_FROM_TEMPORARY: case CPTK_REF_CONVERTS_FROM_TEMPORARY: + /* Don't check completeness for direct reference binding. */; + if (same_type_ref_bind_p (kind, type1, type2)) + break; + gcc_fallthrough (); + + case CPTK_IS_ASSIGNABLE: + case CPTK_IS_NOTHROW_ASSIGNABLE: + case CPTK_IS_TRIVIALLY_ASSIGNABLE: if (!check_trait_type (type1) || !check_trait_type (type2)) return error_mark_node; diff --git a/gcc/testsuite/g++.dg/ext/is_constructible8.C b/gcc/testsuite/g++.dg/ext/is_constructible8.C new file mode 100644 index 000000000000..a27ec6eddd7c --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_constructible8.C @@ -0,0 +1,31 @@ +// PR c++/100667 +// { dg-do compile { target c++11 } } + +struct T; + +#define SA(X) static_assert ((X), #X); + +SA (__is_constructible(T&&, T)); +SA (__is_constructible(const T&, T)); +SA (!__is_constructible(T&, T)); +SA (__is_nothrow_constructible(T&&, T)); +SA (__is_nothrow_constructible(const T&, T)); +SA (!__is_nothrow_constructible(T&, T)); +SA (__is_trivially_constructible(T&&, T)); +SA (__is_trivially_constructible(const T&, T)); +SA (!__is_trivially_constructible(T&, T)); + +SA (__is_convertible(T, T&&)); +SA (__is_convertible(T, const T&)); +SA (!__is_convertible(T, T&)); +SA (__is_nothrow_convertible(T, T&&)); +SA (__is_nothrow_convertible(T, const T&)); +SA (!__is_nothrow_convertible(T, T&)); + +// All false because either the conversion fails or it doesn't bind a temporary +SA (!__reference_constructs_from_temporary (T&&, T)); +SA (!__reference_constructs_from_temporary (const T&, T)); +SA (!__reference_constructs_from_temporary (T&, T)); +SA (!__reference_converts_from_temporary (T&&, T)); +SA (!__reference_converts_from_temporary (const T&, T)); +SA (!__reference_converts_from_temporary (T&, T)); From 86b0b1bec6790f84b7a56fcef2a0a6c8cd91ffef Mon Sep 17 00:00:00 2001 From: John David Anglin <danglin@gcc.gnu.org> Date: Thu, 28 Mar 2024 18:32:12 +0000 Subject: [PATCH 301/551] Fix failure of c-c++-common/analyzer/stdarg-pr111289-int.c on hpux 2024-03-28 John David Anglin <danglin@gcc.gnu.org> gcc/testsuite/ChangeLog: PR analyzer/111289 * c-c++-common/analyzer/stdarg-pr111289-int.c: Don't include <limits.h>. --- gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c | 1 - 1 file changed, 1 deletion(-) diff --git a/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c b/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c index 33d83169c3e0..8faa58c94805 100644 --- a/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c +++ b/gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c @@ -1,6 +1,5 @@ #include <stdarg.h> #include <stdint.h> -#include <limits.h> typedef unsigned int mode_t; From c1e66532cbb424bd7ea8c3b2c1ffea4bb5233309 Mon Sep 17 00:00:00 2001 From: Jeff Law <jlaw@ventanamicro.com> Date: Thu, 28 Mar 2024 16:56:53 -0600 Subject: [PATCH 302/551] [committed] Provide suitable output template for zero_extendqihi2 on H8 Segher's recent combine change, quite unexpectedly, triggered a regression on the H8 port. It failed to build newlib. The zero_extendqihi2 pattern provided two alternatives. One where the source and destination matched. That turns into a suitable instruction trivially. The second alternative was actually meant to capture cases where the value is coming from memory. What was missing here was the reg->reg case where the source and destination do not match. That fell into the second case which was requested to be split by the pattern's output template. The splitter had a suitable condition to make sure it only triggered in the right cases. Unfortunately with the pattern requiring a split in a case where the splitter was going to fail led to the fault. So regardless of what's going on in the combiner, this code was just wrong. Fixed thusly by providing a suitable output template for the reg->reg case. Regression tested on h8300-elf. Pushing to the trunk. gcc/ * config/h8300/extensions.md (zero_extendqihi*): Add output template for reg->reg case where the regs don't match. --- gcc/config/h8300/extensions.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/gcc/config/h8300/extensions.md b/gcc/config/h8300/extensions.md index 7149dc0ac52e..a1e8c4abd37e 100644 --- a/gcc/config/h8300/extensions.md +++ b/gcc/config/h8300/extensions.md @@ -12,8 +12,8 @@ }) (define_insn_and_split "*zero_extendqihi2" - [(set (match_operand:HI 0 "register_operand" "=r,r") - (zero_extend:HI (match_operand:QI 1 "general_operand_src" "0,g>")))] + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (zero_extend:HI (match_operand:QI 1 "general_operand_src" "0,r,g>")))] "" "#" "&& reload_completed" @@ -21,14 +21,15 @@ (clobber (reg:CC CC_REG))])]) (define_insn "*zero_extendqihi2<cczn>" - [(set (match_operand:HI 0 "register_operand" "=r,r") - (zero_extend:HI (match_operand:QI 1 "general_operand_src" "0,g>"))) + [(set (match_operand:HI 0 "register_operand" "=r,r,r") + (zero_extend:HI (match_operand:QI 1 "general_operand_src" "0,r,g>"))) (clobber (reg:CC CC_REG))] "" "@ extu.w %T0 + mov.b\t%X1,%R0\;extu.w\t%T0 #" - [(set_attr "length" "2,10")]) + [(set_attr "length" "2,4,10")]) ;; Split the zero extension of a general operand (actually a memory ;; operand) into a load of the operand and the actual zero extension From 63e6ec5333da26c591d7ee42c76a5fb86489ee45 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Fri, 29 Mar 2024 00:17:27 +0000 Subject: [PATCH 303/551] Daily bump. --- gcc/ChangeLog | 43 ++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 6 +++ gcc/fortran/ChangeLog | 16 ++++++++ gcc/m2/ChangeLog | 30 ++++++++++++++ gcc/testsuite/ChangeLog | 90 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 186 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f1c9db9247b..ecaf370fd707 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,46 @@ +2024-03-28 Jeff Law <jlaw@ventanamicro.com> + + * config/h8300/extensions.md (zero_extendqihi*): Add output + template for reg->reg case where the regs don't match. + +2024-03-28 Gaius Mulley <(no_default)> + + PR modula2/114517 + * doc/gm2.texi: Mention gm2 treats a # in the first column + as a preprocessor directive unless -fno-cpp is supplied. + +2024-03-28 Jakub Jelinek <jakub@redhat.com> + + * predict.cc (estimate_bb_frequencies): Fix comment typo, + scalling -> scaling. + +2024-03-28 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/112303 + * profile-count.h (profile_count::operator+): Perform + addition in uint64_t variable and set m_val to MIN of that + val and max_count. + (profile_count::operator+=): Likewise. + (profile_count::operator-=): Formatting fix. + (profile_count::apply_probability): Use safe_scale_64bit + even in the int overload. + +2024-03-28 Jan Hubicka <jh@suse.cz> + + PR middle-end/113907 + * ipa-icf.cc (sem_function::init): Hash PHI operands + (sem_function::compare_phi_node): Add argument about preserving order + +2024-03-28 Richard Biener <rguenther@suse.de> + + PR middle-end/114480 + * cfganal.cc (compute_idf): Use simpler bitmap iteration, + touch work_set only when phi_insertion_points changed. + +2024-03-28 Palmer Dabbelt <palmer@rivosinc.com> + + * config/riscv/riscv.h (REGISTER_NAMES): Add vxsat. + 2024-03-27 Segher Boessenkool <segher@kernel.crashing.org> PR rtl-optimization/101523 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index aab2708ffddd..3a5da16206f1 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240328 +20240329 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 07d0c83089d6..55e55268b5a2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2024-03-28 Jason Merrill <jason@redhat.com> + + PR c++/100667 + * semantics.cc (same_type_ref_bind_p): New. + (finish_trait_expr): Use it. + 2024-03-26 Jakub Jelinek <jakub@redhat.com> PR c++/112724 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 8efc457f896b..221fc63db63b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,19 @@ +2024-03-28 Harald Anlauf <anlauf@gmx.de> + + PR fortran/114474 + * primary.cc (gfc_variable_attr): Catch variables used in structure + constructors within DATA statements that are still tagged with a + temporary type BT_PROCEDURE from match_actual_arg and which have the + target attribute, and fix their typespec. + +2024-03-28 Mikael Morin <mikael@gcc.gnu.org> + Harald Anlauf <anlauf@gmx.de> + + PR fortran/111781 + PR fortran/114475 + * expr.cc (check_restricted): In submodules, allow variables host- + associated from the parent module. + 2024-03-22 Harald Anlauf <anlauf@gmx.de> PR fortran/55978 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index c9cf62887225..f425751358a0 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,33 @@ +2024-03-28 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114520 + * gm2-compiler/P0SyntaxCheck.bnf (DetectImport): New + procedure. + (EnableImportCheck): New boolean. + (Expect): Call DetectImport. + (Export): Set EnableImportCheck TRUE before ';' and FALSE + afterwards. + +2024-03-28 Gaius Mulley <(no_default)> + + PR modula2/114517 + * gm2-compiler/M2Options.def (SetCpp): Add comment. + (GetCpp): Move after SetCpp. + (GetLineDirectives): New procedure function. + * gm2-compiler/M2Options.mod (GetLineDirectives): New + procedure function. + * gm2-gcc/m2options.h (M2Options_GetLineDirectives): New + prototype. + * gm2-lang.cc (gm2_langhook_init_options): OPT_fcpp only + assert if !value. + * m2.flex: Test GetLineDirectives before changing to LINE0 + state. + +2024-03-28 Gaius Mulley <gaiusmod2@gmail.com> + + * target-independent/m2/Builtins.texi: Rebuilt. + * target-independent/m2/gm2-libs.texi: Rebuilt. + 2024-03-26 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114478 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5c333d5c5e19..3298291e11ad 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,93 @@ +2024-03-28 John David Anglin <danglin@gcc.gnu.org> + + PR analyzer/111289 + * c-c++-common/analyzer/stdarg-pr111289-int.c: Don't include + <limits.h>. + +2024-03-28 Jason Merrill <jason@redhat.com> + + PR c++/100667 + * g++.dg/ext/is_constructible8.C: New test. + +2024-03-28 Harald Anlauf <anlauf@gmx.de> + + PR fortran/114474 + * gfortran.dg/data_pointer_3.f90: New test. + +2024-03-28 Vineet Gupta <vineetg@rivosinc.com> + + * gcc.target/riscv/rvv/vtype-call-clobbered.c: New Test. + +2024-03-28 Gaius Mulley <(no_default)> + + PR modula2/114517 + * gm2/cpp/fail/hashfirstcolumn2.mod: New test. + * gm2/imports/fail/imports-fail.exp: New test. + * gm2/imports/fail/localmodule2.mod: New test. + * gm2/imports/run/pass/localmodule.mod: New test. + +2024-03-28 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/112303 + * gcc.c-torture/compile/pr112303.c: New test. + +2024-03-28 Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org> + + PR testsuite/114307 + * gcc.dg/vect/vect-cond-reduc-in-order-2-signed-zero.c: Remove dg-run. + * gcc.dg/vect/complex/complex-operations-run.c: Likewise. + * gcc.dg/vect/pr113576.c: Remove dg-run. Use dg-additional-options for + test-specific flags. + * gcc.dg/vect/gimplefe-40.c: Use dg-additional-options for + test-specific flags. + * gcc.dg/vect/gimplefe-41.c: Likewise. + * gcc.dg/vect/pr101145inf.c: Likewise. + * gcc.dg/vect/pr101145inf_1.c: Likewise. + * gcc.dg/vect/pr108316.c: Likewise. + * gcc.dg/vect/pr109011-1.c: Likewise. + * gcc.dg/vect/pr109011-2.c: Likewise. + * gcc.dg/vect/pr109011-3.c: Likewise. + * gcc.dg/vect/pr109011-4.c: Likewise. + * gcc.dg/vect/pr109011-5.c: Likewise. + * gcc.dg/vect/pr111846.c: Likewise. + * gcc.dg/vect/pr111860-2.c: Likewise. + * gcc.dg/vect/pr111860-3.c: Likewise. + * gcc.dg/vect/pr113002.c: Likewise. + * gcc.dg/vect/pr84711.c: Likewise. + * gcc.dg/vect/pr85597.c: Likewise. + * gcc.dg/vect/pr88497-1.c: Likewise. + * gcc.dg/vect/pr88497-2.c: Likewise. + * gcc.dg/vect/pr88497-3.c: Likewise. + * gcc.dg/vect/pr88497-4.c: Likewise. + * gcc.dg/vect/pr88497-5.c: Likewise. + * gcc.dg/vect/pr88497-7.c: Likewise. + * gcc.dg/vect/pr92347.c: Likewise. + * gcc.dg/vect/pr93069.c: Likewise. + * gcc.dg/vect/pr97241.c: Likewise. + * gcc.dg/vect/pr99102.c: Likewise. + * gcc.dg/vect/vect-early-break_65.c: Likewise. + * gcc.dg/vect/vect-fold-1.c: Likewise. + * gcc.dg/vect/vect-ifcvt-19.c: Likewise. + * gcc.dg/vect/vect-ifcvt-20.c: Likewise. + * gcc.dg/vect/vect-reduc-epilogue-gaps.c: Likewise. + * gcc.dg/vect/vect-singleton_1.c: Likewise. + * g++.dg/vect/pr84556.cc: Likewise. + * gfortran.dg/vect/fast-math-mgrid-resid.f: Likewise. + * gfortran.dg/vect/pr77848.f: Likewise. + * gfortran.dg/vect/pr90913.f90: Likewise. + +2024-03-28 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/109925 + * gcc.c-torture/execute/pr109925.c: New test. + +2024-03-28 Mikael Morin <mikael@gcc.gnu.org> + Harald Anlauf <anlauf@gmx.de> + + PR fortran/111781 + PR fortran/114475 + * gfortran.dg/spec_expr_10.f90: New test. + 2024-03-27 David Malcolm <dmalcolm@redhat.com> PR analyzer/114473 From 26a723625bb63e42b8c78bbce52ba0286eefda1c Mon Sep 17 00:00:00 2001 From: Xi Ruoyao <xry111@xry111.site> Date: Tue, 6 Feb 2024 17:49:50 +0800 Subject: [PATCH 304/551] testsuite: Add a test case for negating FP vectors containing zeros Recently I've fixed two wrong FP vector negate implementation which caused wrong sign bits in zeros in targets (r14-8786 and r14-8801). To prevent a similar issue from happening again, add a test case. Tested on x86_64 (with SSE2, AVX, AVX2, and AVX512F), AArch64, MIPS (with MSA), LoongArch (with LSX and LASX). gcc/testsuite: * gcc.dg/vect/vect-neg-zero.c: New test. --- gcc/testsuite/gcc.dg/vect/vect-neg-zero.c | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/vect/vect-neg-zero.c diff --git a/gcc/testsuite/gcc.dg/vect/vect-neg-zero.c b/gcc/testsuite/gcc.dg/vect/vect-neg-zero.c new file mode 100644 index 000000000000..21fa00cfa155 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-neg-zero.c @@ -0,0 +1,38 @@ +/* { dg-add-options ieee } */ +/* { dg-additional-options "-fno-associative-math -fsigned-zeros" } */ + +double x[4] = {-0.0, 0.0, -0.0, 0.0}; +float y[8] = {-0.0, 0.0, -0.0, 0.0, -0.0, -0.0, 0.0, 0.0}; + +static __attribute__ ((always_inline)) inline void +test (int factor) +{ + double a[4]; + float b[8]; + + asm ("" ::: "memory"); + + for (int i = 0; i < 2 * factor; i++) + a[i] = -x[i]; + + for (int i = 0; i < 4 * factor; i++) + b[i] = -y[i]; + +#pragma GCC novector + for (int i = 0; i < 2 * factor; i++) + if (__builtin_signbit (a[i]) == __builtin_signbit (x[i])) + __builtin_abort (); + +#pragma GCC novector + for (int i = 0; i < 4 * factor; i++) + if (__builtin_signbit (b[i]) == __builtin_signbit (y[i])) + __builtin_abort (); +} + +int +main (void) +{ + test (1); + test (2); + return 0; +} From 22f48d78f033922fd2fbf9252041cd97ce201052 Mon Sep 17 00:00:00 2001 From: Andrew Pinski <quic_apinski@quicinc.com> Date: Thu, 28 Mar 2024 16:46:33 -0700 Subject: [PATCH 305/551] Use fatal_error instead of internal_error for when ZSTD is not enabled This changes an internal error to be a fatal error for when the ZSTD is not enabled but the section was compressed as ZSTD. Committed as approved after bootstrap/test on x86_64-linux-gnu. gcc/ChangeLog: * lto-compress.cc (lto_end_uncompression): Use fatal_error instead of internal_error when ZSTD is not enabled. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> --- gcc/lto-compress.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/lto-compress.cc b/gcc/lto-compress.cc index c167ac967aa2..bebf0277ef67 100644 --- a/gcc/lto-compress.cc +++ b/gcc/lto-compress.cc @@ -408,7 +408,7 @@ lto_end_uncompression (struct lto_compression_stream *stream, } #endif if (compression == ZSTD) - internal_error ("compiler does not support ZSTD LTO compression"); + fatal_error (UNKNOWN_LOCATION, "compiler does not support ZSTD LTO compression"); lto_uncompression_zlib (stream); } From 3c793f0361bc66d2a6bf0b3e1fb3234fc511e2a6 Mon Sep 17 00:00:00 2001 From: Paul Thomas <pault@gcc.gnu.org> Date: Fri, 29 Mar 2024 07:23:19 +0000 Subject: [PATCH 306/551] Fortran: Fix a gimplifier ICE/wrong result with finalization [PR36337] 2024-03-29 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/36337 PR fortran/110987 PR fortran/113885 * trans-expr.cc (gfc_trans_assignment_1): Place finalization block before rhs post block for elemental rhs. * trans.cc (gfc_finalize_tree_expr): Check directly if a type has no components, rather than the zero components attribute. Treat elemental zero component expressions in the same way as scalars. gcc/testsuite/ PR fortran/113885 * gfortran.dg/finalize_54.f90: New test. * gfortran.dg/finalize_55.f90: New test. gcc/testsuite/ PR fortran/110987 * gfortran.dg/finalize_56.f90: New test. --- gcc/fortran/trans-expr.cc | 9 +- gcc/fortran/trans.cc | 6 +- gcc/testsuite/gfortran.dg/finalize_54.f90 | 47 ++++++ gcc/testsuite/gfortran.dg/finalize_55.f90 | 89 ++++++++++++ gcc/testsuite/gfortran.dg/finalize_56.f90 | 168 ++++++++++++++++++++++ 5 files changed, 313 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/finalize_54.f90 create mode 100644 gcc/testsuite/gfortran.dg/finalize_55.f90 create mode 100644 gcc/testsuite/gfortran.dg/finalize_56.f90 diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 76bed9830c43..079ac93aa8a4 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -12511,11 +12511,14 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * expr2, bool init_flag, gfc_add_block_to_block (&body, &lse.pre); gfc_add_expr_to_block (&body, tmp); - /* Add the post blocks to the body. */ - if (!l_is_temp) + /* Add the post blocks to the body. Scalar finalization must appear before + the post block in case any dellocations are done. */ + if (rse.finalblock.head + && (!l_is_temp || (expr2->expr_type == EXPR_FUNCTION + && gfc_expr_attr (expr2).elemental))) { - gfc_add_block_to_block (&rse.finalblock, &rse.post); gfc_add_block_to_block (&body, &rse.finalblock); + gfc_add_block_to_block (&body, &rse.post); } else gfc_add_block_to_block (&body, &rse.post); diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc index 7f50b16aee9d..badad6ae8927 100644 --- a/gcc/fortran/trans.cc +++ b/gcc/fortran/trans.cc @@ -1624,7 +1624,7 @@ gfc_finalize_tree_expr (gfc_se *se, gfc_symbol *derived, } else if (derived && gfc_is_finalizable (derived, NULL)) { - if (derived->attr.zero_comp && !rank) + if (!derived->components && (!rank || attr.elemental)) { /* Any attempt to assign zero length entities, causes the gimplifier all manner of problems. Instead, a variable is created to act as @@ -1675,7 +1675,7 @@ gfc_finalize_tree_expr (gfc_se *se, gfc_symbol *derived, final_fndecl); if (!GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc))) { - if (is_class) + if (is_class || attr.elemental) desc = gfc_conv_scalar_to_descriptor (se, desc, attr); else { @@ -1685,7 +1685,7 @@ gfc_finalize_tree_expr (gfc_se *se, gfc_symbol *derived, } } - if (derived && derived->attr.zero_comp) + if (derived && !derived->components) { /* All the conditions below break down for zero length derived types. */ tmp = build_call_expr_loc (input_location, final_fndecl, 3, diff --git a/gcc/testsuite/gfortran.dg/finalize_54.f90 b/gcc/testsuite/gfortran.dg/finalize_54.f90 new file mode 100644 index 000000000000..73d32b1b3334 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/finalize_54.f90 @@ -0,0 +1,47 @@ +! { dg-do compile } +! Test the fix for PR113885, where not only was there a gimplifier ICE +! for a derived type 't' with no components but, with a component, gfortran +! gave wrong results. +! Contributed by David Binderman <dcb314@hotmail.com> +! +module types + type t + contains + final :: finalize + end type t +contains + pure subroutine finalize(x) + type(t), intent(inout) :: x + end subroutine finalize +end module types + +subroutine test1(x) + use types + interface + elemental function elem(x) + use types + type(t), intent(in) :: x + type(t) :: elem + end function elem + end interface + type(t) :: x(:) + x = elem(x) +end subroutine test1 + +subroutine test2(x) + use types + interface + elemental function elem(x) + use types + type(t), intent(in) :: x + type(t) :: elem + end function elem + elemental function elem2(x, y) + use types + type(t), intent(in) :: x, y + type(t) :: elem2 + end function elem2 + end interface + type(t) :: x(:) + x = elem2(elem(x), elem(x)) +end subroutine test2 diff --git a/gcc/testsuite/gfortran.dg/finalize_55.f90 b/gcc/testsuite/gfortran.dg/finalize_55.f90 new file mode 100644 index 000000000000..fa7e552eea54 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/finalize_55.f90 @@ -0,0 +1,89 @@ +! { dg-do run } +! Test the fix for PR113885, where not only was there a gimplifier ICE +! for a derived type 't' with no components but this version gave wrong +! results. +! Contributed by David Binderman <dcb314@hotmail.com> +! +module types + type t + integer :: i + contains + final :: finalize + end type t + integer :: ctr = 0 +contains + impure elemental subroutine finalize(x) + type(t), intent(inout) :: x + ctr = ctr + 1 + end subroutine finalize +end module types + +impure elemental function elem(x) + use types + type(t), intent(in) :: x + type(t) :: elem + elem%i = x%i + 1 +end function elem + +impure elemental function elem2(x, y) + use types + type(t), intent(in) :: x, y + type(t) :: elem2 + elem2%i = x%i + y%i +end function elem2 + +subroutine test1(x) + use types + interface + impure elemental function elem(x) + use types + type(t), intent(in) :: x + type(t) :: elem + end function elem + end interface + type(t) :: x(:) + type(t), allocatable :: y(:) + y = x + x = elem(y) +end subroutine test1 + +subroutine test2(x) + use types + interface + impure elemental function elem(x) + use types + type(t), intent(in) :: x + type(t) :: elem + end function elem + impure elemental function elem2(x, y) + use types + type(t), intent(in) :: x, y + type(t) :: elem2 + end function elem2 + end interface + type(t) :: x(:) + type(t), allocatable :: y(:) + y = x + x = elem2(elem(y), elem(y)) +end subroutine test2 + +program test113885 + use types + interface + subroutine test1(x) + use types + type(t) :: x(:) + end subroutine + subroutine test2(x) + use types + type(t) :: x(:) + end subroutine + end interface + type(t) :: x(2) = [t(1),t(2)] + call test1 (x) + if (any (x%i .ne. [2,3])) stop 1 + if (ctr .ne. 6) stop 2 + call test2 (x) + if (any (x%i .ne. [6,8])) stop 3 + if (ctr .ne. 16) stop 4 +end diff --git a/gcc/testsuite/gfortran.dg/finalize_56.f90 b/gcc/testsuite/gfortran.dg/finalize_56.f90 new file mode 100644 index 000000000000..bd350a3bc1cf --- /dev/null +++ b/gcc/testsuite/gfortran.dg/finalize_56.f90 @@ -0,0 +1,168 @@ +! { dg-do run } +! Test the fix for PR110987 +! Segfaulted in runtime, as shown below. +! Contributed by Kirill Chankin <chilikin.k@gmail.com> +! and John Haiducek <jhaiduce@gmail.com> (comment 5) +! +MODULE original_mod + IMPLICIT NONE + + TYPE T1_POINTER + CLASS(T1), POINTER :: T1 + END TYPE + + TYPE T1 + INTEGER N_NEXT + CLASS(T1_POINTER), ALLOCATABLE :: NEXT(:) + CONTAINS + FINAL :: T1_DESTRUCTOR + PROCEDURE :: SET_N_NEXT => T1_SET_N_NEXT + PROCEDURE :: GET_NEXT => T1_GET_NEXT + END TYPE + + INTERFACE T1 + PROCEDURE T1_CONSTRUCTOR + END INTERFACE + + TYPE, EXTENDS(T1) :: T2 + REAL X + CONTAINS + END TYPE + + INTERFACE T2 + PROCEDURE T2_CONSTRUCTOR + END INTERFACE + + TYPE, EXTENDS(T1) :: T3 + CONTAINS + FINAL :: T3_DESTRUCTOR + END TYPE + + INTERFACE T3 + PROCEDURE T3_CONSTRUCTOR + END INTERFACE + + INTEGER :: COUNTS = 0 + +CONTAINS + + TYPE(T1) FUNCTION T1_CONSTRUCTOR() RESULT(L) + IMPLICIT NONE + L%N_NEXT = 0 + END FUNCTION + + SUBROUTINE T1_DESTRUCTOR(SELF) + IMPLICIT NONE + TYPE(T1), INTENT(INOUT) :: SELF + IF (ALLOCATED(SELF%NEXT)) THEN + DEALLOCATE(SELF%NEXT) + ENDIF + END SUBROUTINE + + SUBROUTINE T3_DESTRUCTOR(SELF) + IMPLICIT NONE + TYPE(T3), INTENT(IN) :: SELF + if (.NOT.ALLOCATED (SELF%NEXT)) COUNTS = COUNTS + 1 + END SUBROUTINE + + SUBROUTINE T1_SET_N_NEXT(SELF, N_NEXT) + IMPLICIT NONE + CLASS(T1), INTENT(INOUT) :: SELF + INTEGER, INTENT(IN) :: N_NEXT + INTEGER I + SELF%N_NEXT = N_NEXT + ALLOCATE(SELF%NEXT(N_NEXT)) + DO I = 1, N_NEXT + NULLIFY(SELF%NEXT(I)%T1) + ENDDO + END SUBROUTINE + + FUNCTION T1_GET_NEXT(SELF) RESULT(NEXT) + IMPLICIT NONE + CLASS(T1), TARGET, INTENT(IN) :: SELF + CLASS(T1), POINTER :: NEXT + CLASS(T1), POINTER :: L + INTEGER I + IF (SELF%N_NEXT .GE. 1) THEN + NEXT => SELF%NEXT(1)%T1 + RETURN + ENDIF + NULLIFY(NEXT) + END FUNCTION + + TYPE(T2) FUNCTION T2_CONSTRUCTOR() RESULT(L) + IMPLICIT NONE + L%T1 = T1() + CALL L%T1%SET_N_NEXT(1) + END FUNCTION + + TYPE(T3) FUNCTION T3_CONSTRUCTOR() RESULT(L) + IMPLICIT NONE + L%T1 = T1() + END FUNCTION + +END MODULE original_mod + +module comment5_mod + type::parent + character(:), allocatable::name + end type parent + type, extends(parent)::child + contains + final::child_finalize + end type child + interface child + module procedure new_child + end interface child + integer :: counts = 0 + +contains + + type(child) function new_child(name) + character(*)::name + new_child%name=name + end function new_child + + subroutine child_finalize(this) + type(child), intent(in)::this + counts = counts + 1 + end subroutine child_finalize +end module comment5_mod + +PROGRAM TEST_PROGRAM + call original + call comment5 +contains + subroutine original + USE original_mod + IMPLICIT NONE + TYPE(T1), TARGET :: X1 + TYPE(T2), TARGET :: X2 + TYPE(T3), TARGET :: X3 + CLASS(T1), POINTER :: L + X1 = T1() + X2 = T2() + X2%NEXT(1)%T1 => X1 + X3 = T3() + CALL X3%SET_N_NEXT(1) + X3%NEXT(1)%T1 => X2 + L => X3 + DO WHILE (.TRUE.) + L => L%GET_NEXT() ! Used to segfault here in runtime + IF (.NOT. ASSOCIATED(L)) EXIT + COUNTS = COUNTS + 1 + ENDDO +! Two for T3 finalization and two for associated 'L's + IF (COUNTS .NE. 4) STOP 1 + end subroutine original + + subroutine comment5 + use comment5_mod, only: child, counts + implicit none + type(child)::kid + kid = child("Name") + if (.not.allocated (kid%name)) stop 2 + if (kid%name .ne. "Name") stop 3 + if (counts .ne. 2) stop 4 + end subroutine comment5 +END PROGRAM From 6fb253a25dff13253d63553f02e0fe72c5e3ab4e Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Thu, 28 Mar 2024 22:34:40 +0100 Subject: [PATCH 307/551] Fortran: fix NULL pointer dereference on overlapping initialization [PR50410] gcc/fortran/ChangeLog: PR fortran/50410 * trans-expr.cc (gfc_conv_structure): Check for NULL pointer. gcc/testsuite/ChangeLog: PR fortran/50410 * gfortran.dg/data_initialized_4.f90: New test. --- gcc/fortran/trans-expr.cc | 2 +- gcc/testsuite/gfortran.dg/data_initialized_4.f90 | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/data_initialized_4.f90 diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index 079ac93aa8a4..d21e3956d6e7 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -9650,7 +9650,7 @@ gfc_conv_structure (gfc_se * se, gfc_expr * expr, int init) cm = expr->ts.u.derived->components; for (c = gfc_constructor_first (expr->value.constructor); - c; c = gfc_constructor_next (c), cm = cm->next) + c && cm; c = gfc_constructor_next (c), cm = cm->next) { /* Skip absent members in default initializers and allocatable components. Although the latter have a default initializer diff --git a/gcc/testsuite/gfortran.dg/data_initialized_4.f90 b/gcc/testsuite/gfortran.dg/data_initialized_4.f90 new file mode 100644 index 000000000000..156b6607edff --- /dev/null +++ b/gcc/testsuite/gfortran.dg/data_initialized_4.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-additional-options "-std=legacy" } +! +! PR fortran/50410 +! +! Silently allow overlapping initialization in legacy mode (used to ICE) + +program p + implicit none + type t + integer :: g = 1 + end type t + type(t) :: u = t(2) + data u%g /3/ + print *, u ! this might print "2" +end From ec8e3dbdc3befa22b25da975b03d80443f5d938c Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <thomas@codesourcery.com> Date: Tue, 9 Jan 2024 10:25:48 +0100 Subject: [PATCH 308/551] GCN: Enable effective-target 'vect_early_break', 'vect_early_break_hw' Via XPASSing test cases after commit a657c7e3518fcfc796f223d47385cad5e97dc9a5 "testsuite: un-xfail TSVC loops that check for exit control flow vectorization": PASS: gcc.dg/vect/tsvc/vect-tsvc-s332.c (test for excess errors) PASS: gcc.dg/vect/tsvc/vect-tsvc-s332.c execution test [-XFAIL:-]{+XPASS:+} gcc.dg/vect/tsvc/vect-tsvc-s332.c scan-tree-dump vect "vectorized 1 loops" PASS: gcc.dg/vect/tsvc/vect-tsvc-s481.c (test for excess errors) PASS: gcc.dg/vect/tsvc/vect-tsvc-s481.c execution test [-XFAIL:-]{+XPASS:+} gcc.dg/vect/tsvc/vect-tsvc-s481.c scan-tree-dump vect "vectorized 1 loops" PASS: gcc.dg/vect/tsvc/vect-tsvc-s482.c (test for excess errors) PASS: gcc.dg/vect/tsvc/vect-tsvc-s482.c execution test [-XFAIL:-]{+XPASS:+} gcc.dg/vect/tsvc/vect-tsvc-s482.c scan-tree-dump vect "vectorized 1 loops" ..., it became apparent that GCN, too, does support vectorization of loops with early breaks. The relevant test cases are all-PASS with just the following exceptions, to be looked into individually, later on: PASS: gcc.dg/vect/vect-early-break_25.c (test for excess errors) PASS: gcc.dg/vect/vect-early-break_25.c scan-tree-dump-times vect "vectorized 1 loops" 1 FAIL: gcc.dg/vect/vect-early-break_25.c scan-tree-dump-times vect "Alignment of access forced using peeling" 1 PASS: gcc.dg/vect/vect-early-break_56.c (test for excess errors) PASS: gcc.dg/vect/vect-early-break_56.c execution test XPASS: gcc.dg/vect/vect-early-break_56.c scan-tree-dump-times vect "vectorized 2 loops" 2 gcc/testsuite/ * lib/target-supports.exp (check_effective_target_vect_early_break) (check_effective_target_vect_early_break_hw): Enable for GCN. --- gcc/testsuite/lib/target-supports.exp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 843515f69d78..9b3bf57d86d1 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -4104,6 +4104,7 @@ proc check_effective_target_vect_early_break { } { [istarget aarch64*-*-*] || [check_effective_target_arm_v8_neon_ok] || [check_effective_target_sse4] + || [istarget amdgcn-*-*] }}] } @@ -4118,6 +4119,7 @@ proc check_effective_target_vect_early_break_hw { } { [istarget aarch64*-*-*] || [check_effective_target_arm_v8_neon_hw] || [check_sse4_hw_available] + || [istarget amdgcn-*-*] }}] } From 7cc68c48633ea92fd294193fbc1f9c4fbf4a5c6f Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Wed, 20 Mar 2024 23:52:26 +0100 Subject: [PATCH 309/551] GCN: Enable effective-target 'vect_hw_misalign' ... as made apparent by commit 4e1fcf44bdc582e71408175d75e025f5be8b0e55 "testsuite: vect: Require vect_hw_misalign in gcc.dg/vect/vect-cost-model-1.c etc. [PR98238]" causing: PASS: gcc.dg/vect/vect-cost-model-1.c (test for excess errors) -PASS: gcc.dg/vect/vect-cost-model-1.c scan-tree-dump vect "LOOP VECTORIZED" PASS: gcc.dg/vect/vect-cost-model-3.c (test for excess errors) -PASS: gcc.dg/vect/vect-cost-model-3.c scan-tree-dump vect "LOOP VECTORIZED" PASS: gcc.dg/vect/vect-cost-model-5.c (test for excess errors) -PASS: gcc.dg/vect/vect-cost-model-5.c scan-tree-dump vect "LOOP VECTORIZED" ..., and similarly commit ffd47fb63ddc024db847daa07f8ae27fffdfcb28 "testsuite: Fix pr113431.c FAIL on sparc* [PR113431]" causing: PASS: gcc.dg/vect/pr113431.c (test for excess errors) PASS: gcc.dg/vect/pr113431.c execution test -PASS: gcc.dg/vect/pr113431.c scan-tree-dump-times slp1 "optimized: basic block part vectorized" 2 ..., which this commit all restores, and also enables a good number of further FAIL -> PASS, UNSUPPORTED -> PASS, etc. progressions. There are also a small number of regressions, mostly in the SLP area apparently: PASS: gcc.dg/vect/bb-slp-layout-12.c (test for excess errors) +XPASS: gcc.dg/vect/bb-slp-layout-12.c scan-tree-dump-not slp1 "duplicating permutation node" +XFAIL: gcc.dg/vect/bb-slp-layout-12.c scan-tree-dump-times slp1 "add new stmt: [^\\n\\r]* = VEC_PERM_EXPR" 3 PASS: gcc.dg/vect/bb-slp-layout-6.c (test for excess errors) +FAIL: gcc.dg/vect/bb-slp-layout-6.c scan-tree-dump slp2 "absorbing input layouts" PASS: gcc.dg/vect/pr97428.c (test for excess errors) PASS: gcc.dg/vect/pr97428.c scan-tree-dump vect "Detected interleaving load of size 8" PASS: gcc.dg/vect/pr97428.c scan-tree-dump vect "Detected interleaving store of size 16" PASS: gcc.dg/vect/pr97428.c scan-tree-dump-not vect "gap of 6 elements" -XFAIL: gcc.dg/vect/pr97428.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 +FAIL: gcc.dg/vect/pr97428.c scan-tree-dump-times vect "vectorizing stmts using SLP" 2 PASS: gcc.dg/vect/vect-33.c (test for excess errors) +FAIL: gcc.dg/vect/vect-33.c scan-tree-dump vect "Vectorizing an unaligned access" PASS: gcc.dg/vect/vect-33.c scan-tree-dump-not optimized "Invalid sum" PASS: gcc.dg/vect/vect-33.c scan-tree-dump-times vect "vectorized 1 loops" 1 ..., so some further conditionalizing etc. seems necessary. These seem to mostly appear next to pre-existing similar FAILs in related test cases. (Overall, way more PASS than FAIL.) gcc/testsuite/ * lib/target-supports.exp (check_effective_target_vect_hw_misalign): Enable for GCN. (check_effective_target_vect_element_align): Adjust. --- gcc/testsuite/lib/target-supports.exp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 9b3bf57d86d1..ab60a2d81951 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -8312,7 +8312,8 @@ proc check_effective_target_vect_hw_misalign { } { || ([istarget s390*-*-*] && [check_effective_target_s390_vx]) || ([istarget riscv*-*-*]) - || ([istarget loongarch*-*-*]) } { + || ([istarget loongarch*-*-*]) + || [istarget amdgcn*-*-*] } { return 1 } if { [istarget arm*-*-*] @@ -8876,8 +8877,7 @@ proc check_effective_target_vect_element_align { } { return [check_cached_effective_target_indexed vect_element_align { expr { ([istarget arm*-*-*] && ![check_effective_target_arm_vect_no_misalign]) - || [check_effective_target_vect_hw_misalign] - || [istarget amdgcn-*-*] }}] + || [check_effective_target_vect_hw_misalign] }}] } # Return 1 if we expect to see unaligned accesses in at least some From e162228e0baebc836c74c82521d1c7a3c46d9ab1 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Wed, 20 Mar 2024 23:56:58 +0100 Subject: [PATCH 310/551] GCN: Enable effective-target 'vect_long_mult' ... as made apparent by commit bfd6b36f08021f023e0e9223f5aea315b74a5c56 "testsuite/vect: Fix pr25413a.c expectations [PR109705]" causing: PASS: gcc.dg/vect/pr25413a.c (test for excess errors) PASS: gcc.dg/vect/pr25413a.c execution test -PASS: gcc.dg/vect/pr25413a.c scan-tree-dump-times vect "vectorized 2 loops" 1 +FAIL: gcc.dg/vect/pr25413a.c scan-tree-dump-times vect "vectorized 1 loops" 1 ..., which this commit resolves. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_vect_long_mult): Enable for GCN. --- gcc/testsuite/lib/target-supports.exp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index ab60a2d81951..45435586de21 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -9059,7 +9059,8 @@ proc check_effective_target_vect_long_mult { } { || ([istarget riscv*-*-*] && [check_effective_target_riscv_v]) || ([istarget loongarch*-*-*] - && [check_effective_target_loongarch_sx]) } { + && [check_effective_target_loongarch_sx]) + || [istarget amdgcn-*-*] } { set answer 1 } else { set answer 0 From f15cea16cc98912bf0ed14d388510d6c2618ba90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me> Date: Fri, 29 Mar 2024 12:42:19 +0100 Subject: [PATCH 311/551] libstdc++-v3: drop GCC Runtime Library Exception from gen tests It was mistakenly added to these files. libstdc++-v3/ChangeLog: * testsuite/24_iterators/range_generators/01.cc: Drop GCC Runtime Library Exception. * testsuite/24_iterators/range_generators/02.cc: Drop GCC Runtime Library Exception. * testsuite/24_iterators/range_generators/copy.cc: Drop GCC Runtime Library Exception. * testsuite/24_iterators/range_generators/except.cc: Drop GCC Runtime Library Exception. * testsuite/24_iterators/range_generators/subrange.cc: Drop GCC Runtime Library Exception. * testsuite/24_iterators/range_generators/synopsis.cc: Drop GCC Runtime Library Exception. * testsuite/24_iterators/range_generators/iter_deref_return.cc: Drop GCC Runtime Library Exception from the "You should have received a copy" paragraph. --- .../testsuite/24_iterators/range_generators/01.cc | 9 ++------- .../testsuite/24_iterators/range_generators/02.cc | 9 ++------- .../testsuite/24_iterators/range_generators/copy.cc | 9 ++------- .../testsuite/24_iterators/range_generators/except.cc | 9 ++------- .../24_iterators/range_generators/iter_deref_return.cc | 4 ++++ .../testsuite/24_iterators/range_generators/subrange.cc | 9 ++------- .../testsuite/24_iterators/range_generators/synopsis.cc | 9 ++------- 7 files changed, 16 insertions(+), 42 deletions(-) diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/01.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/01.cc index 2af5ed1895ae..81837e156fe1 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_generators/01.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/01.cc @@ -12,13 +12,8 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. #include <generator> diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/02.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/02.cc index 8e23a9c4933c..da2d2d42f04f 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_generators/02.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/02.cc @@ -12,13 +12,8 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. #include <iostream> diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/copy.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/copy.cc index c74fb0cf09e1..7ceec33dd787 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_generators/copy.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/copy.cc @@ -12,13 +12,8 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/except.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/except.cc index 82f6e4e45f60..87d8cebb185e 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_generators/except.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/except.cc @@ -12,13 +12,8 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. #include <testsuite_hooks.h> diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc index 75471952e76c..a39f769b29ef 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/iter_deref_return.cc @@ -12,6 +12,10 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + #include <generator> // Check that the return type of iterator::operator* is the reference type. diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/subrange.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/subrange.cc index 93d7126cafe8..106d604cd473 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_generators/subrange.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/subrange.cc @@ -12,13 +12,8 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. #include <generator> diff --git a/libstdc++-v3/testsuite/24_iterators/range_generators/synopsis.cc b/libstdc++-v3/testsuite/24_iterators/range_generators/synopsis.cc index d031f1d0c941..7eb77b4bb721 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_generators/synopsis.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_generators/synopsis.cc @@ -13,13 +13,8 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. #include <generator> From 28dca4be504dda29f55eafe958cdf299ec89b94e Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Fri, 29 Mar 2024 14:19:59 +0000 Subject: [PATCH 312/551] Fix lrcpc3 testcase There was a typo in the testcase, with GCC_CPUINFO pointing to the wrong file. 2024-03-29 Christophe Lyon <christophe.lyon@linaro.org> gcc/testsuite/ * gcc.target/aarch64/cpunative/native_cpu_24.c: Fix GCC_CPUINFO. --- gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c index 05dc870885f4..3a720cc85521 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_24.c @@ -1,5 +1,5 @@ /* { dg-do compile { target { { aarch64*-*-linux*} && native } } } */ -/* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/aarch64/cpunative/info_23" } */ +/* { dg-set-compiler-env-var GCC_CPUINFO "$srcdir/gcc.target/aarch64/cpunative/info_24" } */ /* { dg-additional-options "-mcpu=native --save-temps " } */ int main() From 4c18ace1cb69a31af4ac719850a66de79ed12e93 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez <guillaume1.gomez@gmail.com> Date: Fri, 29 Mar 2024 18:56:33 +0100 Subject: [PATCH 313/551] [PATCH] Allow `gcc_jit_type_get_size` to work with pointers gcc/jit/ChangeLog: * libgccjit.cc (gcc_jit_type_get_size): Add pointer support --- gcc/jit/libgccjit.cc | 4 ++-- gcc/testsuite/jit.dg/test-pointer_size.c | 27 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/jit.dg/test-pointer_size.c diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index f40a97814051..445c0d0e0e39 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -560,8 +560,8 @@ gcc_jit_type_get_size (gcc_jit_type *type) { RETURN_VAL_IF_FAIL (type, -1, NULL, NULL, "NULL type"); RETURN_VAL_IF_FAIL - (type->is_int () || type->is_float (), -1, NULL, NULL, - "only getting the size of integer or floating-point types is supported for now"); + (type->is_int () || type->is_float () || type->is_pointer (), -1, NULL, NULL, + "only getting the size of integer or floating-point or pointer types is supported for now"); return type->get_size (); } diff --git a/gcc/testsuite/jit.dg/test-pointer_size.c b/gcc/testsuite/jit.dg/test-pointer_size.c new file mode 100644 index 000000000000..337796acc2ad --- /dev/null +++ b/gcc/testsuite/jit.dg/test-pointer_size.c @@ -0,0 +1,27 @@ +/* { dg-do compile { target x86_64-*-* } } */ + +#include <assert.h> +#include "libgccjit.h" + +#include "harness.h" + +void +create_code (gcc_jit_context *ctxt, void *user_data) +{} + +void +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) +{ + gcc_jit_type *int_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_INT); + gcc_jit_type *int_ptr_type = gcc_jit_type_get_pointer (int_type); + + int int_ptr_size = gcc_jit_type_get_size (int_ptr_type); + CHECK_VALUE (int_ptr_size, 8); + + gcc_jit_type *void_type = + gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_VOID); + gcc_jit_type *void_ptr_type = gcc_jit_type_get_pointer (void_type); + + CHECK_VALUE (int_ptr_size, gcc_jit_type_get_size (void_ptr_type)); +} From 4921bd8cf2536903a1f78911ee52a2e58242b097 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sat, 30 Mar 2024 00:16:42 +0000 Subject: [PATCH 314/551] Daily bump. --- gcc/ChangeLog | 6 ++++++ gcc/DATESTAMP | 2 +- gcc/fortran/ChangeLog | 17 ++++++++++++++++ gcc/jit/ChangeLog | 4 ++++ gcc/testsuite/ChangeLog | 45 +++++++++++++++++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 18 +++++++++++++++++ 6 files changed, 91 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ecaf370fd707..baab8ab5746f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2024-03-29 Andrew Pinski <quic_apinski@quicinc.com> + + * lto-compress.cc (lto_end_uncompression): Use + fatal_error instead of internal_error when ZSTD + is not enabled. + 2024-03-28 Jeff Law <jlaw@ventanamicro.com> * config/h8300/extensions.md (zero_extendqihi*): Add output diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 3a5da16206f1..5e27b15791d3 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240329 +20240330 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 221fc63db63b..e0c571ecb29e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,20 @@ +2024-03-29 Harald Anlauf <anlauf@gmx.de> + + PR fortran/50410 + * trans-expr.cc (gfc_conv_structure): Check for NULL pointer. + +2024-03-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/36337 + PR fortran/110987 + PR fortran/113885 + * trans-expr.cc (gfc_trans_assignment_1): Place finalization + block before rhs post block for elemental rhs. + * trans.cc (gfc_finalize_tree_expr): Check directly if a type + has no components, rather than the zero components attribute. + Treat elemental zero component expressions in the same way as + scalars. + 2024-03-28 Harald Anlauf <anlauf@gmx.de> PR fortran/114474 diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index 111acf8a29f3..48bd036390c2 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,7 @@ +2024-03-29 Guillaume Gomez <guillaume1.gomez@gmail.com> + + * libgccjit.cc (gcc_jit_type_get_size): Add pointer support + 2024-02-10 Jakub Jelinek <jakub@redhat.com> * jit-playback.cc (new_bitcast): Use HOST_WIDE_INT_PRINT_DEC instead diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3298291e11ad..ddad777e8ff6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,48 @@ +2024-03-29 Guillaume Gomez <guillaume1.gomez@gmail.com> + + * jit.dg/test-pointer_size.c: New file. + +2024-03-29 Christophe Lyon <christophe.lyon@linaro.org> + + * gcc.target/aarch64/cpunative/native_cpu_24.c: Fix GCC_CPUINFO. + +2024-03-29 Thomas Schwinge <tschwinge@baylibre.com> + + * lib/target-supports.exp (check_effective_target_vect_long_mult): + Enable for GCN. + +2024-03-29 Thomas Schwinge <tschwinge@baylibre.com> + + * lib/target-supports.exp + (check_effective_target_vect_hw_misalign): Enable for GCN. + (check_effective_target_vect_element_align): Adjust. + +2024-03-29 Thomas Schwinge <thomas@codesourcery.com> + + * lib/target-supports.exp + (check_effective_target_vect_early_break) + (check_effective_target_vect_early_break_hw): Enable for GCN. + +2024-03-29 Harald Anlauf <anlauf@gmx.de> + + PR fortran/50410 + * gfortran.dg/data_initialized_4.f90: New test. + +2024-03-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/110987 + * gfortran.dg/finalize_56.f90: New test. + +2024-03-29 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/113885 + * gfortran.dg/finalize_54.f90: New test. + * gfortran.dg/finalize_55.f90: New test. + +2024-03-29 Xi Ruoyao <xry111@xry111.site> + + * gcc.dg/vect/vect-neg-zero.c: New test. + 2024-03-28 John David Anglin <danglin@gcc.gnu.org> PR analyzer/111289 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0949344b94bc..9460ea2b9c3d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,21 @@ +2024-03-29 Arsen Arsenović <arsen@aarsen.me> + + * testsuite/24_iterators/range_generators/01.cc: Drop GCC + Runtime Library Exception. + * testsuite/24_iterators/range_generators/02.cc: Drop GCC + Runtime Library Exception. + * testsuite/24_iterators/range_generators/copy.cc: Drop GCC + Runtime Library Exception. + * testsuite/24_iterators/range_generators/except.cc: Drop GCC + Runtime Library Exception. + * testsuite/24_iterators/range_generators/subrange.cc: Drop GCC + Runtime Library Exception. + * testsuite/24_iterators/range_generators/synopsis.cc: Drop GCC + Runtime Library Exception. + * testsuite/24_iterators/range_generators/iter_deref_return.cc: + Drop GCC Runtime Library Exception from the "You should have + received a copy" paragraph. + 2024-03-27 Matthias Kretz <m.kretz@gsi.de> * include/experimental/bits/simd_x86.h (_S_masked_unary): From 6fc84f680d098f82c1c43435fdb206099f0df4df Mon Sep 17 00:00:00 2001 From: Xi Ruoyao <xry111@xry111.site> Date: Wed, 20 Mar 2024 15:09:21 +0800 Subject: [PATCH 315/551] mips: Fix C23 (...) functions returning large aggregates [PR114175] We were assuming TYPE_NO_NAMED_ARGS_STDARG_P don't have any named arguments and there is nothing to advance, but that is not the case for (...) functions returning by hidden reference which have one such artificial argument. This is causing gcc.dg/c23-stdarg-{6,8,9}.c to fail. Fix the issue by checking if arg.type is NULL, as r14-9503 explains. gcc/ChangeLog: PR target/114175 * config/mips/mips.cc (mips_setup_incoming_varargs): Only skip mips_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P functions if arg.type is NULL. --- gcc/config/mips/mips.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc index 68e2ae8d8fab..ce764a5cb359 100644 --- a/gcc/config/mips/mips.cc +++ b/gcc/config/mips/mips.cc @@ -6834,7 +6834,13 @@ mips_setup_incoming_varargs (cumulative_args_t cum, argument. Advance a local copy of CUM past the last "real" named argument, to find out how many registers are left over. */ local_cum = *get_cumulative_args (cum); - if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl))) + + /* For a C23 variadic function w/o any named argument, and w/o an + artifical argument for large return value, skip advancing args. + There is such an artifical argument iff. arg.type is non-NULL + (PR 114175). */ + if (!TYPE_NO_NAMED_ARGS_STDARG_P (TREE_TYPE (current_function_decl)) + || arg.type != NULL_TREE) mips_function_arg_advance (pack_cumulative_args (&local_cum), arg); /* Found out how many registers we need to save. */ From 86d83ff4e46aac0cc6570b2e5d1e273f0837fb00 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sun, 31 Mar 2024 00:16:32 +0000 Subject: [PATCH 316/551] Daily bump. --- gcc/ChangeLog | 7 +++++++ gcc/DATESTAMP | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index baab8ab5746f..93492b80349d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2024-03-30 Xi Ruoyao <xry111@xry111.site> + + PR target/114175 + * config/mips/mips.cc (mips_setup_incoming_varargs): Only skip + mips_function_arg_advance for TYPE_NO_NAMED_ARGS_STDARG_P + functions if arg.type is NULL. + 2024-03-29 Andrew Pinski <quic_apinski@quicinc.com> * lto-compress.cc (lto_end_uncompression): Use diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 5e27b15791d3..bba4e6d66bc9 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240330 +20240331 From 46eb34a75a9d004ce776bba382fe8af0978cace7 Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Sat, 30 Mar 2024 21:32:06 +0800 Subject: [PATCH 317/551] RISC-V: Fix one unused varable in riscv_subset_list::parse This patch would like to fix one unused variable as below: ../../gcc/common/config/riscv/riscv-common.cc: In static member function 'static riscv_subset_list* riscv_subset_list::parse(const char*, location_t)': ../../gcc/common/config/riscv/riscv-common.cc:1501:19: error: unused variable 'itr' [-Werror=unused-variable] 1501 | riscv_subset_t *itr; The variable consume code was removed but missed the var itself in previous. Thus, we have unused variable here. gcc/ChangeLog: * common/config/riscv/riscv-common.cc (riscv_subset_list::parse): Remove unused var decl. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/common/config/riscv/riscv-common.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index 7095f303cbb1..43b7549e3ec5 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -1498,7 +1498,6 @@ riscv_subset_list::parse (const char *arch, location_t loc) return NULL; riscv_subset_list *subset_list = new riscv_subset_list (arch, loc); - riscv_subset_t *itr; const char *p = arch; p = subset_list->parse_base_ext (p); if (p == NULL) From b313baba57f7e09f66b603e1e30dd4b48800693f Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Sat, 30 Mar 2024 20:03:18 +0800 Subject: [PATCH 318/551] RISC-V: Fix misspelled term builtin in error message This patch would like to fix below misspelled term in error message. ../../gcc/config/riscv/riscv-vector-builtins.cc:4592:16: error: misspelled term 'builtin function' in format; use 'built-in function' instead [-Werror=format-diag] 4592 | "builtin function %qE requires the V ISA extension", exp); The below tests are passed for this patch. * The riscv regression test on rvv.exp and riscv.exp. gcc/ChangeLog: * config/riscv/riscv-vector-builtins.cc (expand_builtin): Take the term built-in over builtin. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: Adjust test dg-error. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c: Ditto. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv-vector-builtins.cc | 2 +- .../riscv/rvv/base/target_attribute_v_with_intrinsic-7.c | 2 +- .../riscv/rvv/base/target_attribute_v_with_intrinsic-8.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc index e07373d8b575..db9246eed2d5 100644 --- a/gcc/config/riscv/riscv-vector-builtins.cc +++ b/gcc/config/riscv/riscv-vector-builtins.cc @@ -4589,7 +4589,7 @@ expand_builtin (unsigned int code, tree exp, rtx target) if (!TARGET_VECTOR) error_at (EXPR_LOCATION (exp), - "builtin function %qE requires the V ISA extension", exp); + "built-in function %qE requires the V ISA extension", exp); return function_expander (rfn.instance, rfn.decl, exp, target).expand (); } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c index 520b2e59fae5..a4cd67f4f95c 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c @@ -5,5 +5,5 @@ size_t test_1 (size_t vl) { - return __riscv_vsetvl_e8m4 (vl); /* { dg-error {builtin function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ + return __riscv_vsetvl_e8m4 (vl); /* { dg-error {built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c index 9032d9d0b43f..06ed9a9eddc9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c @@ -19,5 +19,5 @@ test_2 () size_t test_3 (size_t vl) { - return __riscv_vsetvl_e8m4 (vl); /* { dg-error {builtin function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ + return __riscv_vsetvl_e8m4 (vl); /* { dg-error {built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ } From 08eaafadd5beaa56beb2d1fceca9f97eeb0219ba Mon Sep 17 00:00:00 2001 From: Jeff Law <jlaw@ventanamicro.com> Date: Sun, 31 Mar 2024 10:51:17 -0600 Subject: [PATCH 319/551] [committed] RISC-V: Add missing insn types to XiangShan Nanhu scheduler model The test for the recently added XiangShan Nanhu microarchitecture is failing because the scheduler description does not have entries for certain insn types. I'm adding branch, jalr, ret and sfb_alu to the scheduler description, that's enough to get the trivial test to pass. However, I strongly suspect running any significant code through the compiler when scheduling for this microarchitecture will trigger faults. Basically we have checking now that will fault if we have an insn in the IL without an associated type or if we have an insn in the IL that does not map to an insn reservation in the scheduler model. We were tripping the latter assertion for one of those branch types. My suspicion is many insn types aren't handled by that DFA. The branch insns were pretty obvious and easy to fix. But someone with more experience with the uarch needs to do an audit to ensure that all insn types map to an insn reservation. gcc/ * config/riscv/xiangshan.md (xiangshan_jump): Add branch, jalr, ret and sfb_alu. --- gcc/config/riscv/xiangshan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/riscv/xiangshan.md b/gcc/config/riscv/xiangshan.md index 381c3ce14283..76539d332b82 100644 --- a/gcc/config/riscv/xiangshan.md +++ b/gcc/config/riscv/xiangshan.md @@ -70,7 +70,7 @@ (define_insn_reservation "xiangshan_jump" 1 (and (eq_attr "tune" "xiangshan") - (eq_attr "type" "jump,call,auipc,unknown")) + (eq_attr "type" "jump,call,auipc,unknown,branch,jalr,ret,sfb_alu")) "xs_jmp_rs") (define_insn_reservation "xiangshan_i2f" 3 From ec2c15f14f2278d431756f3d05e6ab7f436bea5e Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Fri, 29 Mar 2024 17:10:36 +0000 Subject: [PATCH 320/551] modula2: Add m2.install-html rule to gcc/m2/Make-lang.in This rule was missing, and 'make install-html' was failing. It is copied from the corresponding one in fortran. 2024-03-29 Christophe Lyon <christophe.lyon@linaro.org> gcc/m2/ * Make-lang.in (install-html): New rule. --- gcc/m2/Make-lang.in | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in index ef6990ce617b..2d8a47a1b1fc 100644 --- a/gcc/m2/Make-lang.in +++ b/gcc/m2/Make-lang.in @@ -206,6 +206,25 @@ $(build_htmldir)/m2/index.html: $(TEXISRC) $(objdir)/m2/images/gnu.eps rm -f $(@D)/* $(TEXI2HTML) -I $(objdir)/m2 -I $(srcdir)/m2 -I $(gcc_docdir)/include -o $(@D) $< +M2_HTMLFILES = $(build_htmldir)/m2 + +m2.install-html: $(M2_HTMLFILES) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)" + @list='$(M2_HTMLFILES)'; for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ + f=$(html__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(mkinstalldirs) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(mkinstalldirs) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ + else \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ + fi; \ + done + # gm2-libs.texi m2/gm2-libs.texi: gm2-libs.texi-check; @true From 14d0c863aa9415f5d78047910233d67d91f4ecf5 Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Fri, 29 Mar 2024 17:59:38 +0000 Subject: [PATCH 321/551] modula2: Fix m2.install-info in gcc/m2/Make-lang.in Fix a few typos: the generated filename is m2.info (not gm2.info, and gm2$(exeext) is a file not a directory (so test -d would always fail). 2024-03-29 Christophe Lyon <christophe.lyon@linaro.org> gcc/m2/ * Make-lang.in (m2.install-info): Fix rule. --- gcc/m2/Make-lang.in | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in index 2d8a47a1b1fc..e56240b4c440 100644 --- a/gcc/m2/Make-lang.in +++ b/gcc/m2/Make-lang.in @@ -400,20 +400,20 @@ m2.install-common: installdirs done m2.install-info: installdirs - if [ -d gm2$(exeext) ] ; then \ - if [ -f $(objdir)/doc/gm2.info ]; then \ - rm -f $(DESTDIR)$(infodir)/gm2.info*; \ - for f in $(objdir)/doc/gm2.info*; do \ + if [ -f gm2$(exeext) ] ; then \ + if [ -f $(objdir)/doc/m2.info ]; then \ + rm -f $(DESTDIR)$(infodir)/m2.info*; \ + for f in $(objdir)/doc/m2.info*; do \ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ rm -f $(DESTDIR)$(infodir)/`basename $$realfile`; \ $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/`basename $$realfile`; \ done; \ - chmod a-x $(DESTDIR)$(infodir)/gm2.info*; \ + chmod a-x $(DESTDIR)$(infodir)/m2.info*; \ else true; fi; \ else true; fi - -if [ -f gm2$(exeext) ] && [ -f $(DESTDIR)$(infodir)/gm2.info ]; then \ + -if [ -f gm2$(exeext) ] && [ -f $(DESTDIR)$(infodir)/m2.info ]; then \ if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ - install-info --dir-file=$(infodir)/dir $(DESTDIR)$(infodir)/gm2.info; \ + install-info --dir-file=$(infodir)/dir $(DESTDIR)$(infodir)/m2.info; \ else true; fi; \ else true; fi From 1831a5e13b321d6f687a4f643320dd97896a374f Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Mon, 1 Apr 2024 00:16:45 +0000 Subject: [PATCH 322/551] Daily bump. --- gcc/ChangeLog | 15 +++++++++++++++ gcc/DATESTAMP | 2 +- gcc/m2/ChangeLog | 8 ++++++++ gcc/testsuite/ChangeLog | 7 +++++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 93492b80349d..63330b2ff9fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2024-03-31 Jeff Law <jlaw@ventanamicro.com> + + * config/riscv/xiangshan.md (xiangshan_jump): Add branch, jalr, ret + and sfb_alu. + +2024-03-31 Pan Li <pan2.li@intel.com> + + * config/riscv/riscv-vector-builtins.cc (expand_builtin): Take + the term built-in over builtin. + +2024-03-31 Pan Li <pan2.li@intel.com> + + * common/config/riscv/riscv-common.cc (riscv_subset_list::parse): + Remove unused var decl. + 2024-03-30 Xi Ruoyao <xry111@xry111.site> PR target/114175 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index bba4e6d66bc9..6a6c7bc89804 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240331 +20240401 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index f425751358a0..eec432643417 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,11 @@ +2024-03-31 Christophe Lyon <christophe.lyon@linaro.org> + + * Make-lang.in (m2.install-info): Fix rule. + +2024-03-31 Christophe Lyon <christophe.lyon@linaro.org> + + * Make-lang.in (install-html): New rule. + 2024-03-28 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114520 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ddad777e8ff6..a3797468bfb7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2024-03-31 Pan Li <pan2.li@intel.com> + + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: + Adjust test dg-error. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c: + Ditto. + 2024-03-29 Guillaume Gomez <guillaume1.gomez@gmail.com> * jit.dg/test-pointer_size.c: New file. From 7f424c3167b72db1ecd661ccb71559bf27cbcfc1 Mon Sep 17 00:00:00 2001 From: Lulu Cheng <chenglulu@loongson.cn> Date: Sat, 30 Mar 2024 15:14:14 +0800 Subject: [PATCH 323/551] LoongArch: Add descriptions of the compilation options. Add descriptions for the compilation options '-mfrecipe' '-mdiv32' '-mlam-bh' '-mlamcas' and '-mld-seq-sa'. gcc/ChangeLog: * doc/invoke.texi: Add descriptions for the compilation options. --- gcc/doc/invoke.texi | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index c584664e1688..942103c23f54 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1058,8 +1058,9 @@ Objective-C and Objective-C++ Dialects}. -mmax-inline-memcpy-size=@var{n} -mexplicit-relocs=@var{style} -mexplicit-relocs -mno-explicit-relocs -mdirect-extern-access -mno-direct-extern-access --mcmodel=@var{code-model} -mrelax -mpass-mrelax-to-as} --mrecip -mrecip=@var{opt} +-mcmodel=@var{code-model} -mrelax -mpass-mrelax-to-as +-mrecip -mrecip=@var{opt} -mfrecipe -mno-frecipe -mdiv32 -mno-div32 +-mlam-bh -mno-lam-bh -mlamcas -mno-lamcas -mld-seq-sa -mno-ld-seq-sa} @emph{M32R/D Options} @gccoptlist{-m32r2 -m32rx -m32r @@ -27095,6 +27096,46 @@ Enable the approximation for vectorized reciprocal square root. So, for example, @option{-mrecip=all,!sqrt} enables all of the reciprocal approximations, except for scalar square root. +@opindex mfrecipe +@opindex mno-frecipe +@item -mfrecipe +@itemx -mno-frecipe +Use (do not use) @code{frecipe.@{s/d@}} and @code{frsqrte.@{s/d@}} +instructions. When build with @option{-march=la664}, it is enabled by default. +The default is @option{-mno-frecipe}. + +@opindex mdiv32 +@opindex mno-div32 +@item -mdiv32 +@itemx -mno-div32 +Use (do not use) @code{div.w[u]} and @code{mod.w[u]} instructions with input +not sign-extended. When build with @option{-march=la664}, it is enabled by +default. The default is @option{-mno-div32}. + +@opindex mlam-bh +@opindex mno-lam-bh +@item -mlam-bh +@itemx -mno-lam-bh +Use (do not use) @code{am@{swap/add@}[_db].@{b/h@}} instructions. When build +with @option{-march=la664}, it is enabled by default. The default is +@option{-mno-lam-bh}. + +@opindex mlamcas +@opindex mno-lamcas +@item -mlamcas +@itemx -mno-lamcas +Use (do not use) @code{amcas[_db].@{b/h/w/d@}} instructions. When build with +@option{-march=la664}, it is enabled by default. The default is +@option{-mno-lamcas}. + +@opindex mld-seq-sa +@opindex mno-ld-seq-sa +@item -mld-seq-sa +@itemx -mno-ld-seq-sa +Whether a load-load barrier (@code{dbar 0x700}) is needed. When build with +@option{-march=la664}, it is enabled by default. The default is +@option{-mno-ld-seq-sa}, the load-load barrier is needed. + @item loongarch-vect-unroll-limit The vectorizer will use available tuning information to determine whether it would be beneficial to unroll the main vectorized loop and by how much. This From d28ea8e5a70474cf9d28bf0c008092c936ad1358 Mon Sep 17 00:00:00 2001 From: Yang Yujie <yangyujie@loongson.cn> Date: Sat, 30 Mar 2024 16:43:14 +0800 Subject: [PATCH 324/551] LoongArch: Split loongarch_option_override_internal into smaller procedures gcc/ChangeLog: * config/loongarch/genopts/loongarch.opt.in: Mark -m[no-]recip as aliases to -mrecip={all,none}, respectively. * config/loongarch/loongarch.opt: Regenerate. * config/loongarch/loongarch-def.h (ABI_FPU_64): Rename to... (ABI_FPU64_P): ...this. (ABI_FPU_32): Rename to... (ABI_FPU32_P): ...this. (ABI_FPU_NONE): Rename to... (ABI_NOFPU_P): ...this. (ABI_LP64_P): Define. * config/loongarch/loongarch.cc (loongarch_init_print_operand_punct): Merged into loongarch_global_init. (loongarch_cpu_option_override): Renamed to loongarch_target_option_override. (loongarch_option_override_internal): Move the work after loongarch_config_target into loongarch_target_option_override. (loongarch_global_init): Define. (INIT_TARGET_FLAG): Move to loongarch-opts.cc. (loongarch_option_override): Call loongarch_global_init separately. * config/loongarch/loongarch-opts.cc (loongarch_parse_mrecip_scheme): Split the parsing of -mrecip=<string> from loongarch_option_override_internal. (loongarch_generate_mrecip_scheme): Define. Split from loongarch_option_override_internal. (loongarch_target_option_override): Define. Renamed from loongarch_cpu_option_override. (loongarch_init_misc_options): Define. Split from loongarch_option_override_internal. (INIT_TARGET_FLAG): Move from loongarch.cc. * config/loongarch/loongarch-opts.h (loongarch_target_option_override): New prototype. (loongarch_parse_mrecip_scheme): New prototype. (loongarch_init_misc_options): New prototype. (TARGET_ABI_LP64): Simplify with ABI_LP64_P. * config/loongarch/loongarch.h (TARGET_RECIP_DIV): Simplify. Do not reference specific CPU architecture (LA664). (TARGET_RECIP_SQRT): Same. (TARGET_RECIP_RSQRT): Same. (TARGET_RECIP_VEC_DIV): Same. (TARGET_RECIP_VEC_SQRT): Same. (TARGET_RECIP_VEC_RSQRT): Same. --- gcc/config/loongarch/genopts/loongarch.opt.in | 8 +- gcc/config/loongarch/loongarch-def.h | 11 +- gcc/config/loongarch/loongarch-opts.cc | 253 ++++++++++++++++++ gcc/config/loongarch/loongarch-opts.h | 27 +- gcc/config/loongarch/loongarch.cc | 253 +++--------------- gcc/config/loongarch/loongarch.h | 18 +- gcc/config/loongarch/loongarch.opt | 8 +- 7 files changed, 342 insertions(+), 236 deletions(-) diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in b/gcc/config/loongarch/genopts/loongarch.opt.in index 02f918053f55..a77893d31d99 100644 --- a/gcc/config/loongarch/genopts/loongarch.opt.in +++ b/gcc/config/loongarch/genopts/loongarch.opt.in @@ -197,14 +197,14 @@ mexplicit-relocs Target Alias(mexplicit-relocs=, always, none) Use %reloc() assembly operators (for backward compatibility). -mrecip -Target RejectNegative Var(la_recip) Save -Generate approximate reciprocal divide and square root for better throughput. - mrecip= Target RejectNegative Joined Var(la_recip_name) Save Control generation of reciprocal estimates. +mrecip +Target Alias(mrecip=, all, none) +Generate approximate reciprocal divide and square root for better throughput. + ; The code model option names for -mcmodel. Enum Name(cmodel) Type(int) diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h index 2dbf006d013c..0cbf94766907 100644 --- a/gcc/config/loongarch/loongarch-def.h +++ b/gcc/config/loongarch/loongarch-def.h @@ -90,11 +90,16 @@ extern loongarch_def_array<const char *, N_ABI_BASE_TYPES> #define TO_LP64_ABI_BASE(C) (C) -#define ABI_FPU_64(abi_base) \ +#define ABI_LP64_P(abi_base) \ + (abi_base == ABI_BASE_LP64D \ + || abi_base == ABI_BASE_LP64F \ + || abi_base == ABI_BASE_LP64S) + +#define ABI_FPU64_P(abi_base) \ (abi_base == ABI_BASE_LP64D) -#define ABI_FPU_32(abi_base) \ +#define ABI_FPU32_P(abi_base) \ (abi_base == ABI_BASE_LP64F) -#define ABI_FPU_NONE(abi_base) \ +#define ABI_NOFPU_P(abi_base) \ (abi_base == ABI_BASE_LP64S) diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc index 627f9148adf3..e600f08f03b2 100644 --- a/gcc/config/loongarch/loongarch-opts.cc +++ b/gcc/config/loongarch/loongarch-opts.cc @@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see #include "coretypes.h" #include "tm.h" #include "obstack.h" +#include "opts.h" #include "diagnostic-core.h" #include "loongarch-cpu.h" @@ -32,8 +33,12 @@ along with GCC; see the file COPYING3. If not see #include "loongarch-str.h" #include "loongarch-def.h" +/* Target configuration */ struct loongarch_target la_target; +/* RTL cost information */ +const struct loongarch_rtx_cost_data *loongarch_cost; + /* ABI-related configuration. */ #define ABI_COUNT (sizeof(abi_priority_list)/sizeof(struct loongarch_abi)) static const struct loongarch_abi @@ -795,3 +800,251 @@ loongarch_update_gcc_opt_status (struct loongarch_target *target, /* ISA evolution features */ opts->x_la_isa_evolution = target->isa.evolution; } + +/* -mrecip=<str> handling */ +static struct + { + const char *string; /* option name. */ + unsigned int mask; /* mask bits to set. */ + } +const recip_options[] = { + { "all", RECIP_MASK_ALL }, + { "none", RECIP_MASK_NONE }, + { "div", RECIP_MASK_DIV }, + { "sqrt", RECIP_MASK_SQRT }, + { "rsqrt", RECIP_MASK_RSQRT }, + { "vec-div", RECIP_MASK_VEC_DIV }, + { "vec-sqrt", RECIP_MASK_VEC_SQRT }, + { "vec-rsqrt", RECIP_MASK_VEC_RSQRT }, +}; + +/* Parser for -mrecip=<recip_string>. */ +unsigned int +loongarch_parse_mrecip_scheme (const char *recip_string) +{ + unsigned int result_mask = RECIP_MASK_NONE; + + if (recip_string) + { + char *p = ASTRDUP (recip_string); + char *q; + unsigned int mask, i; + bool invert; + + while ((q = strtok (p, ",")) != NULL) + { + p = NULL; + if (*q == '!') + { + invert = true; + q++; + } + else + invert = false; + + if (!strcmp (q, "default")) + mask = RECIP_MASK_ALL; + else + { + for (i = 0; i < ARRAY_SIZE (recip_options); i++) + if (!strcmp (q, recip_options[i].string)) + { + mask = recip_options[i].mask; + break; + } + + if (i == ARRAY_SIZE (recip_options)) + { + error ("unknown option for %<-mrecip=%s%>", q); + invert = false; + mask = RECIP_MASK_NONE; + } + } + + if (invert) + result_mask &= ~mask; + else + result_mask |= mask; + } + } + return result_mask; +} + +/* Generate -mrecip= argument based on the mask. */ +const char* +loongarch_generate_mrecip_scheme (unsigned int mask) +{ + static char recip_scheme_str[128]; + int p = 0, tmp; + + switch (mask) + { + case RECIP_MASK_ALL: + return "all"; + + case RECIP_MASK_NONE: + return "none"; + } + + for (unsigned long i = 2; i < ARRAY_SIZE (recip_options); i++) + { + if (mask & recip_options[i].mask) + { + if ((tmp = strlen (recip_options[i].string) + 1) >= 127 - p) + gcc_unreachable (); + + recip_scheme_str[p] = ','; + strcpy (recip_scheme_str + p + 1, recip_options[i].string); + p += tmp; + } + } + recip_scheme_str[p] = '\0'; + return recip_scheme_str + 1; +} + + + +/* Refresh the switches acccording to the resolved loongarch_target struct. */ +void +loongarch_target_option_override (struct loongarch_target *target, + struct gcc_options *opts, + struct gcc_options *opts_set) +{ + loongarch_update_gcc_opt_status (target, opts, opts_set); + + /* alignments */ + if (opts->x_flag_align_functions && !opts->x_str_align_functions) + opts->x_str_align_functions + = loongarch_cpu_align[target->cpu_tune].function; + + if (opts->x_flag_align_labels && !opts->x_str_align_labels) + opts->x_str_align_labels = loongarch_cpu_align[target->cpu_tune].label; + + /* Set up parameters to be used in prefetching algorithm. */ + int simultaneous_prefetches + = loongarch_cpu_cache[target->cpu_tune].simultaneous_prefetches; + + SET_OPTION_IF_UNSET (opts, opts_set, param_simultaneous_prefetches, + simultaneous_prefetches); + + SET_OPTION_IF_UNSET (opts, opts_set, param_l1_cache_line_size, + loongarch_cpu_cache[target->cpu_tune].l1d_line_size); + + SET_OPTION_IF_UNSET (opts, opts_set, param_l1_cache_size, + loongarch_cpu_cache[target->cpu_tune].l1d_size); + + SET_OPTION_IF_UNSET (opts, opts_set, param_l2_cache_size, + loongarch_cpu_cache[target->cpu_tune].l2d_size); + + /* Other arch-specific overrides. */ + switch (target->cpu_arch) + { + case CPU_LA664: + /* Enable -mrecipe=all for LA664 by default. */ + if (!opts_set->x_recip_mask) + { + opts->x_recip_mask = RECIP_MASK_ALL; + opts_set->x_recip_mask = 1; + } + } + + /* -mrecip= */ + opts->x_la_recip_name + = loongarch_generate_mrecip_scheme (opts->x_recip_mask); + + /* Decide which rtx_costs structure to use. */ + if (opts->x_optimize_size) + loongarch_cost = &loongarch_rtx_cost_optimize_size; + else + loongarch_cost = &loongarch_cpu_rtx_cost_data[target->cpu_tune]; + + /* If the user hasn't specified a branch cost, use the processor's + default. */ + if (!opts_set->x_la_branch_cost) + opts->x_la_branch_cost = loongarch_cost->branch_cost; + + /* other stuff */ + if (ABI_LP64_P (target->abi.base)) + opts->x_flag_pcc_struct_return = 0; + + switch (target->cmodel) + { + case CMODEL_EXTREME: + if (opts->x_flag_plt) + { + if (opts_set->x_flag_plt) + error ("code model %qs is not compatible with %s", + "extreme", "-fplt"); + opts->x_flag_plt = 0; + } + break; + + case CMODEL_TINY_STATIC: + case CMODEL_MEDIUM: + case CMODEL_NORMAL: + case CMODEL_TINY: + case CMODEL_LARGE: + break; + + default: + gcc_unreachable (); + } +} + + +/* Resolve options that's not covered by la_target. */ +void +loongarch_init_misc_options (struct gcc_options *opts, + struct gcc_options *opts_set) +{ + if (opts->x_flag_pic) + opts->x_g_switch_value = 0; + + /* -mrecip options. */ + opts->x_recip_mask = loongarch_parse_mrecip_scheme (opts->x_la_recip_name); + +#define INIT_TARGET_FLAG(NAME, INIT) \ + { \ + if (!(opts_set->x_target_flags & MASK_##NAME)) \ + { \ + if (INIT) \ + opts->x_target_flags |= MASK_##NAME; \ + else \ + opts->x_target_flags &= ~MASK_##NAME; \ + } \ + } + + /* Enable conditional moves for int and float by default. */ + INIT_TARGET_FLAG (COND_MOVE_INT, 1) + INIT_TARGET_FLAG (COND_MOVE_FLOAT, 1) + + /* Set mrelax default. */ + INIT_TARGET_FLAG (LINKER_RELAXATION, + HAVE_AS_MRELAX_OPTION && HAVE_AS_COND_BRANCH_RELAXATION) + +#undef INIT_TARGET_FLAG + + /* Set mexplicit-relocs default. */ + if (opts->x_la_opt_explicit_relocs == M_OPT_UNSET) + opts->x_la_opt_explicit_relocs = (HAVE_AS_EXPLICIT_RELOCS + ? (TARGET_LINKER_RELAXATION + ? EXPLICIT_RELOCS_AUTO + : EXPLICIT_RELOCS_ALWAYS) + : EXPLICIT_RELOCS_NONE); + + /* Enable sw prefetching at -O3 and higher. */ + if (opts->x_flag_prefetch_loop_arrays < 0 + && (opts->x_optimize >= 3 || opts->x_flag_profile_use) + && !opts->x_optimize_size) + opts->x_flag_prefetch_loop_arrays = 1; + + if (TARGET_DIRECT_EXTERN_ACCESS_OPTS_P (opts) && opts->x_flag_shlib) + error ("%qs cannot be used for compiling a shared library", + "-mdirect-extern-access"); + + /* Enforce that interval is the same size as size so the mid-end does the + right thing. */ + SET_OPTION_IF_UNSET (opts, opts_set, + param_stack_clash_protection_probe_interval, + param_stack_clash_protection_guard_size); +} diff --git a/gcc/config/loongarch/loongarch-opts.h b/gcc/config/loongarch/loongarch-opts.h index 586e67e65ee1..2d9f59296e70 100644 --- a/gcc/config/loongarch/loongarch-opts.h +++ b/gcc/config/loongarch/loongarch-opts.h @@ -30,6 +30,10 @@ along with GCC; see the file COPYING3. If not see /* Target configuration */ extern struct loongarch_target la_target; +/* RTL cost information */ +extern const struct loongarch_rtx_cost_data *loongarch_cost; + + /* Initialize loongarch_target from separate option variables. */ void loongarch_init_target (struct loongarch_target *target, @@ -46,11 +50,30 @@ loongarch_config_target (struct loongarch_target *target, struct loongarch_flags *flags, int follow_multilib_list_p); + +/* Refresh the switches acccording to the resolved loongarch_target struct. */ +void +loongarch_target_option_override (struct loongarch_target *target, + struct gcc_options *opts, + struct gcc_options *opts_set); + + /* option status feedback for "gcc --help=target -Q" */ void loongarch_update_gcc_opt_status (struct loongarch_target *target, struct gcc_options *opts, struct gcc_options *opts_set); + + +/* Parser for -mrecip=<recip_string>. */ +unsigned int +loongarch_parse_mrecip_scheme (const char *recip_string); + + +/* Resolve options that's not covered by la_target. */ +void +loongarch_init_misc_options (struct gcc_options *opts, + struct gcc_options *opts_set); #endif /* Flag status */ @@ -80,9 +103,7 @@ struct loongarch_flags { #define TARGET_DOUBLE_FLOAT_ABI (la_target.abi.base == ABI_BASE_LP64D) #define TARGET_64BIT (la_target.isa.base == ISA_BASE_LA64) -#define TARGET_ABI_LP64 (la_target.abi.base == ABI_BASE_LP64D \ - || la_target.abi.base == ABI_BASE_LP64F \ - || la_target.abi.base == ABI_BASE_LP64S) +#define TARGET_ABI_LP64 ABI_LP64_P(la_target.abi.base) #define ISA_HAS_LSX \ (la_target.isa.simd == ISA_EXT_SIMD_LSX \ diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index 030957db4e72..a69a203fbe68 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -208,9 +208,6 @@ const enum reg_class loongarch_regno_to_class[FIRST_PSEUDO_REGISTER] = { FRAME_REGS, FRAME_REGS }; -/* Which cost information to use. */ -static const struct loongarch_rtx_cost_data *loongarch_cost; - /* Information about a single argument. */ struct loongarch_arg_info { @@ -5911,17 +5908,6 @@ loongarch_print_operand_punctuation (FILE *file, int ch) } } -/* Initialize loongarch_print_operand_punct. */ - -static void -loongarch_init_print_operand_punct (void) -{ - const char *p; - - for (p = ".$"; *p; p++) - loongarch_print_operand_punct[(unsigned char) *p] = true; -} - /* PRINT_OPERAND prefix LETTER refers to the integer branch instruction associated with condition CODE. Print the condition part of the opcode to FILE. */ @@ -7625,118 +7611,15 @@ loongarch_init_machine_status (void) } static void -loongarch_cpu_option_override (struct loongarch_target *target, - struct gcc_options *opts, - struct gcc_options *opts_set) -{ - /* alignments */ - if (opts->x_flag_align_functions && !opts->x_str_align_functions) - opts->x_str_align_functions - = loongarch_cpu_align[target->cpu_tune].function; - - if (opts->x_flag_align_labels && !opts->x_str_align_labels) - opts->x_str_align_labels = loongarch_cpu_align[target->cpu_tune].label; - - /* Set up parameters to be used in prefetching algorithm. */ - int simultaneous_prefetches - = loongarch_cpu_cache[target->cpu_tune].simultaneous_prefetches; - - SET_OPTION_IF_UNSET (opts, opts_set, param_simultaneous_prefetches, - simultaneous_prefetches); - - SET_OPTION_IF_UNSET (opts, opts_set, param_l1_cache_line_size, - loongarch_cpu_cache[target->cpu_tune].l1d_line_size); - - SET_OPTION_IF_UNSET (opts, opts_set, param_l1_cache_size, - loongarch_cpu_cache[target->cpu_tune].l1d_size); - - SET_OPTION_IF_UNSET (opts, opts_set, param_l2_cache_size, - loongarch_cpu_cache[target->cpu_tune].l2d_size); -} - -static void -loongarch_option_override_internal (struct gcc_options *opts, - struct gcc_options *opts_set) +loongarch_global_init (void) { - int i, regno, mode; - - if (flag_pic) - g_switch_value = 0; - - loongarch_init_target (&la_target, - la_opt_cpu_arch, la_opt_cpu_tune, la_opt_fpu, - la_opt_simd, la_opt_abi_base, la_opt_abi_ext, - la_opt_cmodel, opts->x_la_isa_evolution, - opts_set->x_la_isa_evolution); - - /* Handle target-specific options: compute defaults/conflicts etc. */ - loongarch_config_target (&la_target, NULL, 0); - - loongarch_update_gcc_opt_status (&la_target, opts, opts_set); - loongarch_cpu_option_override (&la_target, opts, opts_set); - - if (TARGET_ABI_LP64) - flag_pcc_struct_return = 0; - - /* Decide which rtx_costs structure to use. */ - if (optimize_size) - loongarch_cost = &loongarch_rtx_cost_optimize_size; - else - loongarch_cost = &loongarch_cpu_rtx_cost_data[la_target.cpu_tune]; - - /* If the user hasn't specified a branch cost, use the processor's - default. */ - if (la_branch_cost == 0) - la_branch_cost = loongarch_cost->branch_cost; - - /* Enable sw prefetching at -O3 and higher. */ - if (opts->x_flag_prefetch_loop_arrays < 0 - && (opts->x_optimize >= 3 || opts->x_flag_profile_use) - && !opts->x_optimize_size) - opts->x_flag_prefetch_loop_arrays = 1; - - if (TARGET_DIRECT_EXTERN_ACCESS && flag_shlib) - error ("%qs cannot be used for compiling a shared library", - "-mdirect-extern-access"); - - switch (la_target.cmodel) - { - case CMODEL_EXTREME: - if (opts->x_flag_plt) - { - if (global_options_set.x_flag_plt) - error ("code model %qs is not compatible with %s", - "extreme", "-fplt"); - opts->x_flag_plt = 0; - } - break; - - case CMODEL_TINY_STATIC: - case CMODEL_MEDIUM: - case CMODEL_NORMAL: - case CMODEL_TINY: - case CMODEL_LARGE: - break; - - default: - gcc_unreachable (); - } - - /* Validate the guard size. */ - int guard_size = param_stack_clash_protection_guard_size; - - /* Enforce that interval is the same size as size so the mid-end does the - right thing. */ - SET_OPTION_IF_UNSET (opts, &global_options_set, - param_stack_clash_protection_probe_interval, - guard_size); - - loongarch_init_print_operand_punct (); + /* Initialize loongarch_print_operand_punct. */ + for (const char *p = ".$"; *p; p++) + loongarch_print_operand_punct[(unsigned char) *p] = true; /* Set up array to map GCC register number to debug register number. Ignore the special purpose register numbers. */ - - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++) { if (GP_REG_P (i) || FP_REG_P (i)) loongarch_dwarf_regno[i] = i; @@ -7745,115 +7628,53 @@ loongarch_option_override_internal (struct gcc_options *opts, } /* Set up loongarch_hard_regno_mode_ok. */ - for (mode = 0; mode < MAX_MACHINE_MODE; mode++) - for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) + for (int mode = 0; mode < MAX_MACHINE_MODE; mode++) + for (int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) loongarch_hard_regno_mode_ok_p[mode][regno] = loongarch_hard_regno_mode_ok_uncached (regno, (machine_mode) mode); /* Function to allocate machine-dependent function status. */ init_machine_status = &loongarch_init_machine_status; +}; - /* -mrecip options. */ - static struct - { - const char *string; /* option name. */ - unsigned int mask; /* mask bits to set. */ - } - const recip_options[] = { - { "all", RECIP_MASK_ALL }, - { "none", RECIP_MASK_NONE }, - { "div", RECIP_MASK_DIV }, - { "sqrt", RECIP_MASK_SQRT }, - { "rsqrt", RECIP_MASK_RSQRT }, - { "vec-div", RECIP_MASK_VEC_DIV }, - { "vec-sqrt", RECIP_MASK_VEC_SQRT }, - { "vec-rsqrt", RECIP_MASK_VEC_RSQRT }, - }; - - if (la_recip_name) - { - char *p = ASTRDUP (la_recip_name); - char *q; - unsigned int mask, i; - bool invert; - - while ((q = strtok (p, ",")) != NULL) - { - p = NULL; - if (*q == '!') - { - invert = true; - q++; - } - else - invert = false; - - if (!strcmp (q, "default")) - mask = RECIP_MASK_ALL; - else - { - for (i = 0; i < ARRAY_SIZE (recip_options); i++) - if (!strcmp (q, recip_options[i].string)) - { - mask = recip_options[i].mask; - break; - } - - if (i == ARRAY_SIZE (recip_options)) - { - error ("unknown option for %<-mrecip=%s%>", q); - invert = false; - mask = RECIP_MASK_NONE; - } - } - - if (invert) - recip_mask &= ~mask; - else - recip_mask |= mask; - } - } - if (la_recip) - recip_mask |= RECIP_MASK_ALL; - if (!ISA_HAS_FRECIPE) - recip_mask = RECIP_MASK_NONE; - -#define INIT_TARGET_FLAG(NAME, INIT) \ - { \ - if (!(target_flags_explicit & MASK_##NAME)) \ - { \ - if (INIT) \ - target_flags |= MASK_##NAME; \ - else \ - target_flags &= ~MASK_##NAME; \ - } \ - } - - /* Enable conditional moves for int and float by default. */ - INIT_TARGET_FLAG (COND_MOVE_INT, 1) - INIT_TARGET_FLAG (COND_MOVE_FLOAT, 1) - - /* Set mrelax default. */ - INIT_TARGET_FLAG (LINKER_RELAXATION, - HAVE_AS_MRELAX_OPTION && HAVE_AS_COND_BRANCH_RELAXATION) +static void +loongarch_option_override_internal (struct loongarch_target *target, + struct gcc_options *opts, + struct gcc_options *opts_set) +{ + /* Handle options not covered by struct loongarch_target. */ + loongarch_init_misc_options (opts, opts_set); + + /* Resolve the target struct. */ + loongarch_init_target (target, + opts->x_la_opt_cpu_arch, + opts->x_la_opt_cpu_tune, + opts->x_la_opt_fpu, + opts->x_la_opt_simd, + opts->x_la_opt_abi_base, + opts->x_la_opt_abi_ext, + opts->x_la_opt_cmodel, + opts->x_la_isa_evolution, + opts_set->x_la_isa_evolution); -#undef INIT_TARGET_FLAG + loongarch_config_target (target, NULL, 0); - if (la_opt_explicit_relocs == M_OPT_UNSET) - la_opt_explicit_relocs = (HAVE_AS_EXPLICIT_RELOCS - ? (TARGET_LINKER_RELAXATION - ? EXPLICIT_RELOCS_AUTO - : EXPLICIT_RELOCS_ALWAYS) - : EXPLICIT_RELOCS_NONE); + /* Override some options according to the resolved target. */ + loongarch_target_option_override (target, opts, opts_set); } - /* Implement TARGET_OPTION_OVERRIDE. */ static void loongarch_option_override (void) { - loongarch_option_override_internal (&global_options, &global_options_set); + /* Setting up the target configuration. */ + loongarch_option_override_internal (&la_target, + &global_options, + &global_options_set); + + /* Global initializations. */ + loongarch_global_init (); } /* Implement TARGET_OPTION_SAVE. */ diff --git a/gcc/config/loongarch/loongarch.h b/gcc/config/loongarch/loongarch.h index 888a633961dc..23bb32548831 100644 --- a/gcc/config/loongarch/loongarch.h +++ b/gcc/config/loongarch/loongarch.h @@ -710,12 +710,18 @@ enum reg_class | RECIP_MASK_RSQRT | RECIP_MASK_VEC_SQRT \ | RECIP_MASK_VEC_DIV | RECIP_MASK_VEC_RSQRT) -#define TARGET_RECIP_DIV ((recip_mask & RECIP_MASK_DIV) != 0 || TARGET_uARCH_LA664) -#define TARGET_RECIP_SQRT ((recip_mask & RECIP_MASK_SQRT) != 0 || TARGET_uARCH_LA664) -#define TARGET_RECIP_RSQRT ((recip_mask & RECIP_MASK_RSQRT) != 0 || TARGET_uARCH_LA664) -#define TARGET_RECIP_VEC_DIV ((recip_mask & RECIP_MASK_VEC_DIV) != 0 || TARGET_uARCH_LA664) -#define TARGET_RECIP_VEC_SQRT ((recip_mask & RECIP_MASK_VEC_SQRT) != 0 || TARGET_uARCH_LA664) -#define TARGET_RECIP_VEC_RSQRT ((recip_mask & RECIP_MASK_VEC_RSQRT) != 0 || TARGET_uARCH_LA664) +#define TARGET_RECIP_DIV \ + ((recip_mask & RECIP_MASK_DIV) != 0 && ISA_HAS_FRECIPE) +#define TARGET_RECIP_SQRT \ + ((recip_mask & RECIP_MASK_SQRT) != 0 && ISA_HAS_FRECIPE) +#define TARGET_RECIP_RSQRT \ + ((recip_mask & RECIP_MASK_RSQRT) != 0 && ISA_HAS_FRECIPE) +#define TARGET_RECIP_VEC_DIV \ + ((recip_mask & RECIP_MASK_VEC_DIV) != 0 && ISA_HAS_FRECIPE) +#define TARGET_RECIP_VEC_SQRT \ + ((recip_mask & RECIP_MASK_VEC_SQRT) != 0 && ISA_HAS_FRECIPE) +#define TARGET_RECIP_VEC_RSQRT \ + ((recip_mask & RECIP_MASK_VEC_RSQRT) != 0 && ISA_HAS_FRECIPE) /* 1 if N is a possible register number for function argument passing. We have no FP argument registers when soft-float. */ diff --git a/gcc/config/loongarch/loongarch.opt b/gcc/config/loongarch/loongarch.opt index f10fcdd968cb..317cd11a67ca 100644 --- a/gcc/config/loongarch/loongarch.opt +++ b/gcc/config/loongarch/loongarch.opt @@ -205,14 +205,14 @@ mexplicit-relocs Target Alias(mexplicit-relocs=, always, none) Use %reloc() assembly operators (for backward compatibility). -mrecip -Target RejectNegative Var(la_recip) Save -Generate approximate reciprocal divide and square root for better throughput. - mrecip= Target RejectNegative Joined Var(la_recip_name) Save Control generation of reciprocal estimates. +mrecip +Target Alias(mrecip=, all, none) +Generate approximate reciprocal divide and square root for better throughput. + ; The code model option names for -mcmodel. Enum Name(cmodel) Type(int) From bba118db3f63cb1e3953a014aa3ac2ad89908950 Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Thu, 28 Mar 2024 21:33:57 -0400 Subject: [PATCH 325/551] c++: C++26 returning reference to temporary P2748R5 makes it ill-formed to return a reference to temporary in C++26; implementing this is a simple matter of changing the existing warning to a permerror. For most of the tests I just changed dg-warning to dg-message to accept both; I test the specific diagnostic type in Wreturn-local-addr-5.C. gcc/cp/ChangeLog: * typeck.cc (maybe_warn_about_returning_address_of_local): Permerror in C++26. gcc/testsuite/ChangeLog: * g++.dg/conversion/pr16333.C: Change dg-warning to dg-message. * g++.dg/cpp0x/constexpr-48324.C * g++.dg/other/pr94326.C * g++.dg/warn/Wreturn-local-addr-2.C * g++.old-deja/g++.jason/warning8.C: Likewise. * g++.dg/cpp1y/auto-fn6.C: Check that others don't complain. * g++.dg/warn/Wreturn-local-addr-5.C: Expect error in C++26. --- gcc/cp/typeck.cc | 6 ++++-- gcc/testsuite/g++.dg/conversion/pr16333.C | 2 +- gcc/testsuite/g++.dg/cpp0x/constexpr-48324.C | 2 +- gcc/testsuite/g++.dg/cpp1y/auto-fn6.C | 8 ++++---- gcc/testsuite/g++.dg/other/pr94326.C | 2 +- gcc/testsuite/g++.dg/warn/Wreturn-local-addr-2.C | 4 ++-- gcc/testsuite/g++.dg/warn/Wreturn-local-addr-5.C | 3 ++- gcc/testsuite/g++.old-deja/g++.jason/warning8.C | 2 +- 8 files changed, 16 insertions(+), 13 deletions(-) diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc index f5a0a2273be2..88ed38e4f30c 100644 --- a/gcc/cp/typeck.cc +++ b/gcc/cp/typeck.cc @@ -10626,8 +10626,10 @@ maybe_warn_about_returning_address_of_local (tree retval, location_t loc) || TREE_CODE (whats_returned) == TARGET_EXPR) { if (TYPE_REF_P (valtype)) - warning_at (loc, OPT_Wreturn_local_addr, - "returning reference to temporary"); + /* P2748 made this an error in C++26. */ + emit_diagnostic (cxx_dialect >= cxx26 ? DK_PERMERROR : DK_WARNING, + loc, OPT_Wreturn_local_addr, + "returning reference to temporary"); else if (TYPE_PTR_P (valtype)) warning_at (loc, OPT_Wreturn_local_addr, "returning pointer to temporary"); diff --git a/gcc/testsuite/g++.dg/conversion/pr16333.C b/gcc/testsuite/g++.dg/conversion/pr16333.C index a00bc5c167c4..d00493047903 100644 --- a/gcc/testsuite/g++.dg/conversion/pr16333.C +++ b/gcc/testsuite/g++.dg/conversion/pr16333.C @@ -6,5 +6,5 @@ struct X { int a[3]; X foo1 () { return a; } -const X &foo2 () { return a; } // { dg-warning "returning reference to temporary" } +const X &foo2 () { return a; } // { dg-message "returning reference to temporary" } X &foo3 () { return a; } // { dg-error "cannot bind non-const lvalue ref" } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-48324.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-48324.C index 37ed0e1d163c..f53fd4ddbd3a 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-48324.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-48324.C @@ -7,7 +7,7 @@ struct S { }; constexpr const int& to_ref(int i) { - return S(i).val; // { dg-warning "reference to temporary" } + return S(i).val; // { dg-message "reference to temporary" } } constexpr int ary[to_ref(98)] = { }; // { dg-error "25:size of array .ary. is not an integral" } diff --git a/gcc/testsuite/g++.dg/cpp1y/auto-fn6.C b/gcc/testsuite/g++.dg/cpp1y/auto-fn6.C index 17ca6f22c50e..7fada1808413 100644 --- a/gcc/testsuite/g++.dg/cpp1y/auto-fn6.C +++ b/gcc/testsuite/g++.dg/cpp1y/auto-fn6.C @@ -8,11 +8,11 @@ char& g(char); double&& g(double); template <class T> auto&& f(T t) -{ return g(t); } // { dg-warning "reference to temporary" } +{ return g(t); } // { dg-message "reference to temporary" } int main() { - ST<decltype(f(1)),int&&>(); - ST<decltype(f('\0')),char&>(); - ST<decltype(f(1.0)),double&&>(); + ST<decltype(f(1)),int&&>(); // { dg-message "required from here" } + ST<decltype(f('\0')),char&>(); // { dg-bogus "required from here" } + ST<decltype(f(1.0)),double&&>(); // { dg-bogus "required from here" } } diff --git a/gcc/testsuite/g++.dg/other/pr94326.C b/gcc/testsuite/g++.dg/other/pr94326.C index 4069c038d529..5df72a648fd9 100644 --- a/gcc/testsuite/g++.dg/other/pr94326.C +++ b/gcc/testsuite/g++.dg/other/pr94326.C @@ -3,7 +3,7 @@ // { dg-options "-fcompare-debug" } template <typename = int> struct A { - const int &foo() { return 0; } // { dg-warning "returning reference to temporary" } + const int &foo() { return 0; } // { dg-message "returning reference to temporary" } template <typename _Kt> void bar(_Kt) { foo(); } }; struct B { diff --git a/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-2.C b/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-2.C index c483601e6b23..a9f984c153d7 100644 --- a/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-2.C +++ b/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-2.C @@ -3,9 +3,9 @@ struct Base2 { int m_foo; }; struct Derived2 : public Base2 {}; -const Base2& f8() { return Derived2(); } // { dg-warning "reference to temporary" } +const Base2& f8() { return Derived2(); } // { dg-message "reference to temporary" } struct foo { }; struct bar { foo base; }; -const foo& f9() { return bar().base; } // { dg-warning "reference to temporary" } +const foo& f9() { return bar().base; } // { dg-message "reference to temporary" } diff --git a/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-5.C b/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-5.C index 76096279a641..69f1e6823639 100644 --- a/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-5.C +++ b/gcc/testsuite/g++.dg/warn/Wreturn-local-addr-5.C @@ -5,4 +5,5 @@ int&& f() { int i = 0; return std::move(i); } // { dg-warning "reference to local variable" } int&& g() { int i = 0; return std::forward<int>(i); } // { dg-warning "reference to local variable" } -int&& h() { long l = 0; return std::forward<int>(l); } // { dg-warning "reference to temporary" } +int&& h() { long l = 0; return std::forward<int>(l); } // { dg-warning "reference to temporary" "" { target { ! c++26 } } } +// { dg-error "reference to temporary" "" { target c++26 } .-1 } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning8.C b/gcc/testsuite/g++.old-deja/g++.jason/warning8.C index b5ff3f3de604..23830716ab46 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/warning8.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning8.C @@ -13,5 +13,5 @@ struct B { const B& f () { A a; - return a; // { dg-warning "" } returning reference to temporary + return a; // { dg-message "" } returning reference to temporary } From 4bd2f59af4a78cdc80039cffa51c1d9ad91081a3 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Mon, 1 Apr 2024 19:18:36 +0100 Subject: [PATCH 326/551] PR modula2/114548 gm2 fails to identify variable in a const expression This patch introduces stricter checking within standard procedure functions which detect whether paramaters are variable when used in a const expression. gcc/m2/ChangeLog: PR modula2/114548 * gm2-compiler/M2Quads.mod (ConvertToAddress): Pass procedure, false parameters to BuildConvertFunction. (PushOne): Pass procedure, true parameters to BuildConvertFunction. Remove usused parameter internal. (BuildPseudoBy): Remove parameter to PushOne. (BuildIncProcedure): Ditto. (BuildDecProcedure): Ditto. (BuildFunctionCall): Add ConstExpr parameter to BuildPseudoFunctionCall. (BuildConstFunctionCall): Add procedure and true to BuildConvertFunction. (BuildPseudoFunctionCall): Add ConstExpr parameter. Pass ProcSym and ConstExpr to BuildLengthFunction, BuildConvertFunction, BuildOddFunction, BuildAbsFunction, BuildCapFunction, BuildValFunction, BuildChrFunction, BuildOrdFunction, BuildIntFunction, BuildTruncFunction, BuildFloatFunction, BuildAddAdrFunction, BuildSubAdrFunction, BuildDifAdrFunction, BuildCastFunction, BuildReFunction, BuildImFunction and BuildCmplxFunction. (BuildAddAdrFunction): Add ProcSym, ConstExpr parameters and check for constant parameters. (BuildSubAdrFunction): Ditto. (BuildDifAdrFunction): Ditto. (ConstExprError): Ditto. (BuildLengthFunction): Ditto. (BuildOddFunction): Ditto. (BuildAbsFunction): Ditto. (BuildCapFunction): Ditto. (BuildChrFunction): Ditto. (BuildOrdFunction): Ditto. (BuildIntFunction): Ditto. (BuildValFunction): Ditto. (BuildCastFunction): Ditto. (BuildConvertFunction): Ditto. (BuildTruncFunction): Ditto. (BuildFloatFunction): Ditto. (BuildReFunction): Ditto. (BuildImFunction): Ditto. (BuildCmplxFunction): Ditto. gcc/testsuite/ChangeLog: PR modula2/114548 * gm2/iso/const/fail/expression.mod: New test. * gm2/iso/const/fail/iso-const-fail.exp: New test. * gm2/iso/const/fail/testabs.mod: New test. * gm2/iso/const/fail/testaddadr.mod: New test. * gm2/iso/const/fail/testcap.mod: New test. * gm2/iso/const/fail/testcap2.mod: New test. * gm2/iso/const/fail/testchr.mod: New test. * gm2/iso/const/fail/testchr2.mod: New test. * gm2/iso/const/fail/testcmplx.mod: New test. * gm2/iso/const/fail/testfloat.mod: New test. * gm2/iso/const/fail/testim.mod: New test. * gm2/iso/const/fail/testint.mod: New test. * gm2/iso/const/fail/testlength.mod: New test. * gm2/iso/const/fail/testodd.mod: New test. * gm2/iso/const/fail/testord.mod: New test. * gm2/iso/const/fail/testre.mod: New test. * gm2/iso/const/fail/testtrunc.mod: New test. * gm2/iso/const/fail/testval.mod: New test. * gm2/iso/const/pass/constbool.mod: New test. * gm2/iso/const/pass/constbool2.mod: New test. * gm2/iso/const/pass/constbool3.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2Quads.mod | 454 ++++++++++++------ .../gm2/iso/const/fail/expression.mod | 10 + .../gm2/iso/const/fail/iso-const-fail.exp | 36 ++ gcc/testsuite/gm2/iso/const/fail/testabs.mod | 10 + .../gm2/iso/const/fail/testaddadr.mod | 12 + gcc/testsuite/gm2/iso/const/fail/testcap.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testcap2.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testchr.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testchr2.mod | 10 + .../gm2/iso/const/fail/testcmplx.mod | 10 + .../gm2/iso/const/fail/testfloat.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testim.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testint.mod | 10 + .../gm2/iso/const/fail/testlength.mod | 11 + gcc/testsuite/gm2/iso/const/fail/testodd.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testord.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testre.mod | 10 + .../gm2/iso/const/fail/testtrunc.mod | 10 + gcc/testsuite/gm2/iso/const/fail/testval.mod | 10 + .../gm2/iso/const/pass/constbool.mod | 14 + .../gm2/iso/const/pass/constbool2.mod | 12 + .../gm2/iso/const/pass/constbool3.mod | 12 + 22 files changed, 553 insertions(+), 148 deletions(-) create mode 100644 gcc/testsuite/gm2/iso/const/fail/expression.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/iso-const-fail.exp create mode 100644 gcc/testsuite/gm2/iso/const/fail/testabs.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testaddadr.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testcap.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testcap2.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testchr.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testchr2.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testcmplx.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testfloat.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testim.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testint.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testlength.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testodd.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testord.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testre.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testtrunc.mod create mode 100644 gcc/testsuite/gm2/iso/const/fail/testval.mod create mode 100644 gcc/testsuite/gm2/iso/const/pass/constbool.mod create mode 100644 gcc/testsuite/gm2/iso/const/pass/constbool2.mod create mode 100644 gcc/testsuite/gm2/iso/const/pass/constbool3.mod diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 891a76b4660e..f2dfc8390ac2 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -3326,7 +3326,7 @@ BEGIN PushT (SkipType(type)) ; PushT (expr) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction ; + BuildConvertFunction (Convert, FALSE) ; PopT (expr) END ; RETURN( expr ) @@ -4356,7 +4356,7 @@ END BuildElsif2 ; *) PROCEDURE PushOne (tok: CARDINAL; type: CARDINAL; - message: ARRAY OF CHAR; internal: BOOLEAN) ; + message: ARRAY OF CHAR) ; VAR const: CARDINAL ; BEGIN @@ -4378,7 +4378,7 @@ BEGIN PushT (type) ; PushTFtok (MakeConstLit (tok, MakeKey ('1'), ZType), ZType, tok) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, TRUE) END ELSE const := MakeConstLit (tok, MakeKey ('1'), type) ; @@ -4413,7 +4413,7 @@ BEGIN PushTtok (type, tok) ; PushTtok (MakeConstLit (tok, MakeKey ('0'), ZType), tok) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, TRUE) ELSE PushTFtok (MakeConstLit (tok, MakeKey ('0'), type), type, tok) END @@ -4456,7 +4456,7 @@ BEGIN type := ZType END ; PushOne (dotok, type, - 'the implied {%kFOR} loop increment will cause an overflow {%1ad}', TRUE) + 'the implied {%kFOR} loop increment will cause an overflow {%1ad}') END BuildPseudoBy ; @@ -7246,7 +7246,7 @@ BEGIN PushT (dtype) ; PushT (expr) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction ; + BuildConvertFunction (Convert, FALSE) ; doBuildBinaryOp (FALSE, TRUE) ELSE IF tok=PlusTok @@ -7313,7 +7313,7 @@ BEGIN OperandSym := DereferenceLValue (OperandTok (1), OperandT (1)) ELSE PushOne (proctok, dtype, - 'the {%EkINC} will cause an overflow {%1ad}', FALSE) ; + 'the {%EkINC} will cause an overflow {%1ad}') ; PopT (OperandSym) END ; @@ -7386,7 +7386,7 @@ BEGIN OperandSym := DereferenceLValue (OperandTok (1), OperandT (1)) ELSE PushOne (proctok, dtype, - 'the {%EkDEC} will cause an overflow {%1ad}', FALSE) ; + 'the {%EkDEC} will cause an overflow {%1ad}') ; PopT (OperandSym) END ; @@ -7680,7 +7680,7 @@ BEGIN IF IsUnknown (ProcSym) THEN paramtok := OperandTtok (1) ; - combinedtok := MakeVirtualTok (functok, functok, paramtok) ; + combinedtok := MakeVirtual2Tok (functok, paramtok) ; MetaErrorT1 (functok, 'procedure function {%1Ea} is undefined', ProcSym) ; PopN (NoOfParam + 2) ; (* Fake return value to continue compiling. *) @@ -7693,7 +7693,7 @@ BEGIN IsPseudoBaseFunction (ProcSym) THEN ManipulatePseudoCallParameters ; - BuildPseudoFunctionCall + BuildPseudoFunctionCall (ConstExpr) ELSE BuildRealFunctionCall (functok, ConstExpr) END @@ -7767,7 +7767,7 @@ BEGIN PushTtok (ProcSym, functok) ; PushTtok (ConstExpression, paramtok) ; PushT (2) ; (* Two parameters. *) - BuildConvertFunction + BuildConvertFunction (Convert, TRUE) ELSE MetaErrorT0 (functok, '{%E}a constant type conversion can only have one argument') END @@ -7952,7 +7952,7 @@ END BuildRealFunctionCall ; *) -PROCEDURE BuildPseudoFunctionCall ; +PROCEDURE BuildPseudoFunctionCall (ConstExpr: BOOLEAN) ; VAR NoOfParam, ProcSym : CARDINAL ; @@ -7961,13 +7961,13 @@ BEGIN ProcSym := OperandT (NoOfParam+1) ; ProcSym := SkipConst (ProcSym) ; PushT (NoOfParam) ; - (* Compile time stack restored to entry state *) + (* Compile time stack restored to entry state. *) IF ProcSym = High THEN BuildHighFunction ELSIF ProcSym = LengthS THEN - BuildLengthFunction + BuildLengthFunction (ProcSym, ConstExpr) ELSIF ProcSym = Adr THEN BuildAdrFunction @@ -7982,34 +7982,34 @@ BEGIN BuildTBitSizeFunction ELSIF ProcSym = Convert THEN - BuildConvertFunction + BuildConvertFunction (ProcSym, ConstExpr) ELSIF ProcSym = Odd THEN - BuildOddFunction + BuildOddFunction (ProcSym, ConstExpr) ELSIF ProcSym = Abs THEN - BuildAbsFunction + BuildAbsFunction (ProcSym, ConstExpr) ELSIF ProcSym = Cap THEN - BuildCapFunction + BuildCapFunction (ProcSym, ConstExpr) ELSIF ProcSym = Val THEN - BuildValFunction + BuildValFunction (ProcSym, ConstExpr) ELSIF ProcSym = Chr THEN - BuildChrFunction + BuildChrFunction (ProcSym, ConstExpr) ELSIF IsOrd (ProcSym) THEN - BuildOrdFunction (ProcSym) + BuildOrdFunction (ProcSym, ConstExpr) ELSIF IsInt (ProcSym) THEN - BuildIntFunction (ProcSym) + BuildIntFunction (ProcSym, ConstExpr) ELSIF IsTrunc (ProcSym) THEN - BuildTruncFunction (ProcSym) + BuildTruncFunction (ProcSym, ConstExpr) ELSIF IsFloat (ProcSym) THEN - BuildFloatFunction (ProcSym) + BuildFloatFunction (ProcSym, ConstExpr) ELSIF ProcSym = Min THEN BuildMinFunction @@ -8018,16 +8018,16 @@ BEGIN BuildMaxFunction ELSIF ProcSym = AddAdr THEN - BuildAddAdrFunction + BuildAddAdrFunction (ProcSym, ConstExpr) ELSIF ProcSym = SubAdr THEN - BuildSubAdrFunction + BuildSubAdrFunction (ProcSym, ConstExpr) ELSIF ProcSym = DifAdr THEN - BuildDifAdrFunction + BuildDifAdrFunction (ProcSym, ConstExpr) ELSIF ProcSym = Cast THEN - BuildCastFunction + BuildCastFunction (ProcSym, ConstExpr) ELSIF ProcSym = Shift THEN BuildShiftFunction @@ -8039,13 +8039,13 @@ BEGIN BuildMakeAdrFunction ELSIF ProcSym = Re THEN - BuildReFunction + BuildReFunction (ProcSym, ConstExpr) ELSIF ProcSym = Im THEN - BuildImFunction + BuildImFunction (ProcSym, ConstExpr) ELSIF ProcSym = Cmplx THEN - BuildCmplxFunction + BuildCmplxFunction (ProcSym, ConstExpr) ELSE InternalError ('pseudo function not implemented yet') END @@ -8078,10 +8078,11 @@ END BuildPseudoFunctionCall ; |----------------| |------------| *) -PROCEDURE BuildAddAdrFunction ; +PROCEDURE BuildAddAdrFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR combinedtok, functok, + vartok, optok : CARDINAL ; opa, ReturnVar, @@ -8094,11 +8095,18 @@ BEGIN IF NoOfParam=2 THEN VarSym := OperandT (2) ; + vartok := OperandTok (2) ; OperandSym := OperandT (1) ; optok := OperandTok (1) ; - combinedtok := MakeVirtualTok (functok, functok, optok) ; + combinedtok := MakeVirtual2Tok (functok, optok) ; PopN (NoOfParam + 1) ; - IF IsVar (VarSym) + IF ConstExprError (ProcSym, VarSym, vartok, ConstExpr) OR + ConstExprError (ProcSym, OperandSym, optok, ConstExpr) + THEN + (* Fake return result. *) + PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Address), + Address, combinedtok) + ELSIF IsVar (VarSym) THEN IF IsReallyPointer (VarSym) OR (GetSType (VarSym) = Address) THEN @@ -8119,9 +8127,10 @@ BEGIN PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Address), Address, combinedtok) END ELSE - MetaErrorT0 (functok, '{%E}SYSTEM procedure ADDADR expects 2 parameters') ; - PopN (NoOfParam + 1) ; - PushTFtok (MakeConstLit (functok, MakeKey ('0'), Address), Address, functok) + MetaErrorT0 (functok, + '{%E}SYSTEM procedure {%EkADDADR} expects 2 parameters') ; + PopN (NoOfParam+1) ; + PushTFtok (MakeConstLit (functok, MakeKey('0'), Address), Address, functok) END END BuildAddAdrFunction ; @@ -8152,7 +8161,7 @@ END BuildAddAdrFunction ; |----------------| |------------| *) -PROCEDURE BuildSubAdrFunction ; +PROCEDURE BuildSubAdrFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR functok, combinedtok, @@ -8166,15 +8175,21 @@ VAR BEGIN PopT (NoOfParam) ; functok := OperandTtok (NoOfParam + 1) ; - OperandSym := OperandT (1) ; - optok := OperandTok (1) ; IF NoOfParam = 2 THEN + optok := OperandTok (1) ; + OperandSym := OperandT (1) ; VarSym := OperandT (2) ; vartok := OperandTok (2) ; combinedtok := MakeVirtualTok (functok, functok, optok) ; PopN (NoOfParam + 1) ; - IF IsVar (VarSym) + IF ConstExprError (ProcSym, VarSym, vartok, ConstExpr) OR + ConstExprError (ProcSym, OperandSym, optok, ConstExpr) + THEN + (* Fake return result. *) + PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Address), + Address, combinedtok) + ELSIF IsVar (VarSym) THEN IF IsReallyPointer (VarSym) OR (GetSType (VarSym) = Address) THEN @@ -8197,11 +8212,10 @@ BEGIN PushTFtok (MakeConstLit (combinedtok, MakeKey ('0'), Address), Address, combinedtok) END ELSE - combinedtok := MakeVirtualTok (functok, functok, optok) ; MetaErrorT0 (functok, '{%E}SYSTEM procedure {%EkSUBADR} expects 2 parameters') ; PopN (NoOfParam+1) ; - PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Address), Address, combinedtok) + PushTFtok (MakeConstLit (functok, MakeKey('0'), Address), Address, functok) END END BuildSubAdrFunction ; @@ -8233,7 +8247,7 @@ END BuildSubAdrFunction ; |----------------| |------------| *) -PROCEDURE BuildDifAdrFunction ; +PROCEDURE BuildDifAdrFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR functok, optok, @@ -8247,15 +8261,26 @@ VAR BEGIN PopT (NoOfParam) ; functok := OperandTtok (NoOfParam + 1) ; - OperandSym := OperandT (1) ; - optok := OperandTok (1) ; + IF NoOfParam >= 1 + THEN + OperandSym := OperandT (1) ; + optok := OperandTok (1) + ELSE + optok := functok + END ; IF NoOfParam = 2 THEN VarSym := OperandT (2) ; vartok := OperandTok (2) ; combinedtok := MakeVirtualTok (functok, functok, optok) ; PopN (NoOfParam + 1) ; - IF IsVar (VarSym) + IF ConstExprError (ProcSym, VarSym, vartok, ConstExpr) OR + ConstExprError (ProcSym, OperandSym, optok, ConstExpr) + THEN + (* Fake return result. *) + PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Integer), + Integer, combinedtok) + ELSIF IsVar (VarSym) THEN IF IsReallyPointer (VarSym) OR (GetSType (VarSym) = Address) THEN @@ -8273,7 +8298,7 @@ BEGIN PushTtok (Integer, functok) ; PushTtok (TempVar, vartok) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, ConstExpr) ELSE MetaError1 ('the second parameter to {%EkDIFADR} {%1Ea} must be a variable of type ADDRESS or a {%EkPOINTER}, rather than a {%1Etsd}', OperandSym) ; @@ -8290,8 +8315,8 @@ BEGIN PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Integer), Integer, combinedtok) END ELSE - combinedtok := MakeVirtualTok (functok, functok, optok) ; - MetaErrorT0 (functok, '{%E}SYSTEM procedure {%EkDIFADR} expects 2 parameters') ; + combinedtok := MakeVirtual2Tok (functok, optok) ; + MetaErrorT0 (combinedtok, '{%E}SYSTEM procedure {%EkDIFADR} expects 2 parameters') ; PopN (NoOfParam+1) ; PushTFtok (MakeConstLit (combinedtok, MakeKey('0'), Integer), Integer, combinedtok) END @@ -8487,6 +8512,24 @@ BEGIN END GetQualidentImport ; +(* + ConstExprError - return TRUE if a constant expression is being built and Var is a variable. +*) + +PROCEDURE ConstExprError (Func, Var: CARDINAL; optok: CARDINAL; ConstExpr: BOOLEAN) : BOOLEAN ; +BEGIN + IF ConstExpr AND IsVar (Var) + THEN + MetaErrorT2 (optok, + 'the procedure function {%1Ea} is being called from within a constant expression and therefore the parameter {%2a} must be a constant, seen a {%2da}', + Func, Var) ; + RETURN TRUE + ELSE + RETURN FALSE + END +END ConstExprError ; + + (* DeferMakeLengthConst - creates a constant which contains the length of string, sym. *) @@ -8521,7 +8564,7 @@ END DeferMakeLengthConst ; *) -PROCEDURE BuildLengthFunction ; +PROCEDURE BuildLengthFunction (Function: CARDINAL; ConstExpr: BOOLEAN) ; VAR combinedtok, paramtok, @@ -8545,7 +8588,7 @@ BEGIN END ; IF NoOfParam >= 1 THEN - combinedtok := MakeVirtualTok (paramtok, functok, paramtok) ; + combinedtok := MakeVirtual2Tok (functok, paramtok) ; IF IsConst (Param) AND (GetSType (Param) = Char) THEN PopT (NoOfParam) ; @@ -8563,16 +8606,22 @@ BEGIN IF (ProcSym # NulSym) AND IsProcedure (ProcSym) THEN PopT (NoOfParam) ; - IF IsConst (OperandT (1)) + IF IsConst (Param) THEN - (* we can fold this in M2GenGCC. *) + (* This can be folded in M2GenGCC. *) ReturnVar := MakeTemporary (combinedtok, ImmediateValue) ; PutVar (ReturnVar, Cardinal) ; - GenQuad (StandardFunctionOp, ReturnVar, ProcSym, OperandT (1)) ; + GenQuad (StandardFunctionOp, ReturnVar, ProcSym, Param) ; PopN (NoOfParam + 1) ; PushTtok (ReturnVar, combinedtok) + ELSIF ConstExprError (Function, Param, paramtok, ConstExpr) + THEN + (* Fake a result as we have detected and reported an error. *) + PopN (NoOfParam + 1) ; + ReturnVar := MakeConstLit (combinedtok, MakeKey ('1'), Cardinal) ; + PushTtok (ReturnVar, combinedtok) ELSE - (* no we must resolve this at runtime or in the GCC optimizer. *) + (* We must resolve this at runtime or in the GCC optimizer. *) PopTF (Param, Type); PopN (NoOfParam) ; PushTtok (ProcSym, functok) ; @@ -8627,7 +8676,7 @@ END BuildLengthFunction ; |----------------| *) -PROCEDURE BuildOddFunction ; +PROCEDURE BuildOddFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR combinedtok, optok, @@ -8642,7 +8691,11 @@ BEGIN Var := OperandT (1) ; optok := OperandTok (1) ; combinedtok := MakeVirtualTok (functok, functok, optok) ; - IF IsVar(Var) OR IsConst(Var) + IF ConstExprError (ProcSym, Var, optok, ConstExpr) + THEN + (* Nothing to do. *) + PushTtok (False, combinedtok) + ELSIF IsVar(Var) OR IsConst(Var) THEN PopN (NoOfParam + 1) ; (* @@ -8726,13 +8779,12 @@ END BuildOddFunction ; |----------------| *) -PROCEDURE BuildAbsFunction ; +PROCEDURE BuildAbsFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR vartok, functok, combinedtok: CARDINAL ; NoOfParam, - ProcSym, Res, Var : CARDINAL ; BEGIN PopT (NoOfParam) ; @@ -8741,12 +8793,16 @@ BEGIN THEN Var := OperandT (1) ; vartok := OperandTok (1) ; + PopN (NoOfParam + 1) ; combinedtok := MakeVirtualTok (functok, functok, vartok) ; - IF IsVar(Var) OR IsConst(Var) + IF ConstExprError (ProcSym, Var, vartok, ConstExpr) + THEN + (* Create fake result. *) + Res := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (Res, GetSType (Var)) ; + PushTFtok (Res, GetSType (Var), combinedtok) + ELSIF IsVar(Var) OR IsConst(Var) THEN - ProcSym := OperandT (NoOfParam + 1) ; - PopN (NoOfParam + 1) ; - Res := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; PutVar (Res, GetSType (Var)) ; @@ -8787,13 +8843,12 @@ END BuildAbsFunction ; |----------------| |-------------| *) -PROCEDURE BuildCapFunction ; +PROCEDURE BuildCapFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR optok, functok, combinedtok: CARDINAL ; NoOfParam, - ProcSym, Res, Var : CARDINAL ; BEGIN PopT (NoOfParam) ; @@ -8802,12 +8857,17 @@ BEGIN THEN Var := OperandT (1) ; optok := OperandTok (1) ; - IF IsVar (Var) OR IsConst (Var) + PopN (NoOfParam + 1) ; + IF ConstExprError (ProcSym, Var, optok, ConstExpr) THEN - ProcSym := OperandT (NoOfParam + 1) ; - PopN (NoOfParam + 1) ; - - combinedtok := MakeVirtualTok (functok, functok, optok) ; + (* Create fake result. *) + combinedtok := MakeVirtual2Tok (functok, optok) ; + Res := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (Res, Char) ; + PushTFtok (Res, Char, combinedtok) + ELSIF IsVar (Var) OR IsConst (Var) + THEN + combinedtok := MakeVirtual2Tok (functok, optok) ; Res := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; PutVar (Res, Char) ; GenQuadO (combinedtok, StandardFunctionOp, Res, ProcSym, Var, FALSE) ; @@ -8858,10 +8918,12 @@ END BuildCapFunction ; |----------------| *) -PROCEDURE BuildChrFunction ; +PROCEDURE BuildChrFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR functok, + combinedtok, optok : CARDINAL ; + ReturnVar, NoOfParam, Var : CARDINAL ; BEGIN @@ -8871,9 +8933,16 @@ BEGIN THEN Var := OperandT (1) ; optok := OperandTok (1) ; - IF IsVar (Var) OR IsConst (Var) + PopN (NoOfParam + 1) ; + IF ConstExprError (ProcSym, Var, optok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtual2Tok (functok, optok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (ReturnVar, Char) ; + PushTFtok (ReturnVar, Char, combinedtok) + ELSIF IsVar (Var) OR IsConst (Var) THEN - PopN (NoOfParam + 1) ; (* Build macro: CONVERT( CHAR, Var ) *) @@ -8881,7 +8950,7 @@ BEGIN PushTtok (Char, functok) ; PushTtok (Var, optok) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, ConstExpr) ELSE MetaErrorT1 (optok, 'the parameter to {%AkCHR} must be a variable or constant, seen {%1ad}', @@ -8928,12 +8997,14 @@ END BuildChrFunction ; |----------------| *) -PROCEDURE BuildOrdFunction (Sym: CARDINAL) ; +PROCEDURE BuildOrdFunction (Sym: CARDINAL; ConstExpr: BOOLEAN) ; VAR + combinedtok, functok, - optok : CARDINAL ; + optok : CARDINAL ; + ReturnVar, NoOfParam, - Type, Var: CARDINAL ; + Type, Var : CARDINAL ; BEGIN PopT (NoOfParam) ; functok := OperandTok (NoOfParam + 1) ; @@ -8941,10 +9012,17 @@ BEGIN THEN Var := OperandT (1) ; optok := OperandTok (1) ; - IF IsVar (Var) OR IsConst (Var) + PopN (NoOfParam + 1) ; + IF ConstExprError (Sym, Var, optok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtual2Tok (functok, optok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (ReturnVar, Cardinal) ; + PushTFtok (ReturnVar, Cardinal, combinedtok) + ELSIF IsVar (Var) OR IsConst (Var) THEN Type := GetSType (Sym) ; - PopN (NoOfParam + 1) ; (* Build macro: CONVERT( CARDINAL, Var ) *) @@ -8952,7 +9030,7 @@ BEGIN PushTtok (Type, optok) ; PushTtok (Var, optok) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, ConstExpr) ELSE MetaErrorT2 (optok, 'the parameter to {%1Aa} must be a variable or constant, seen {%2ad}', @@ -8999,11 +9077,12 @@ END BuildOrdFunction ; |----------------| *) -PROCEDURE BuildIntFunction (Sym: CARDINAL) ; +PROCEDURE BuildIntFunction (Sym: CARDINAL; ConstExpr: BOOLEAN) ; VAR combinedtok, functok, optok : CARDINAL ; + ReturnVar, NoOfParam, Type, Var : CARDINAL ; BEGIN @@ -9013,16 +9092,23 @@ BEGIN THEN Var := OperandT (1) ; optok := OperandTok (1) ; - IF IsVar (Var) OR IsConst (Var) + PopN (NoOfParam + 1) ; + IF ConstExprError (Sym, Var, optok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtual2Tok (functok, optok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (ReturnVar, Integer) ; + PushTFtok (ReturnVar, Integer, combinedtok) + ELSIF IsVar (Var) OR IsConst (Var) THEN Type := GetSType (Sym) ; (* return type of function *) - PopN (NoOfParam + 1) ; (* Build macro: CONVERT( CARDINAL, Var ). *) PushTFtok (Convert, NulSym, functok) ; PushTtok (Type, functok) ; PushTtok (Var, optok) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, ConstExpr) ELSE combinedtok := MakeVirtualTok (functok, optok, optok) ; MetaErrorT2 (optok, @@ -9305,15 +9391,16 @@ END BuildRotateFunction ; |----------------| *) -PROCEDURE BuildValFunction ; +PROCEDURE BuildValFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR - functok : CARDINAL ; + combinedtok, + functok : CARDINAL ; + ReturnVar, NoOfParam, - ProcSym, - Exp, Type: CARDINAL ; + Exp, Type : CARDINAL ; tok, r, typetok, - exptok : CARDINAL ; + exptok : CARDINAL ; BEGIN PopT (NoOfParam) ; functok := OperandTok (NoOfParam + 1) ; @@ -9330,6 +9417,13 @@ BEGIN 'undeclared type found in builtin procedure function {%AkVAL} {%1ad}', Type) (* non recoverable error. *) + ELSIF ConstExprError (ProcSym, Exp, exptok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtualTok (functok, functok, exptok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Exp))) ; + PutVar (ReturnVar, Type) ; + PushTFtok (ReturnVar, Type, combinedtok) ELSIF (IsSet (Type) OR IsEnumeration (Type) OR IsSubrange (Type) OR IsType (Type) OR IsPointer (Type) OR IsProcType (Type)) AND (IsVar (Exp) OR IsConst (Exp) OR IsProcedure (Exp)) @@ -9341,7 +9435,7 @@ BEGIN PushTtok (Type, typetok) ; PushTtok (Exp, exptok) ; PushT (2) ; (* Two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, ConstExpr) ELSE (* not sensible to try and recover when we dont know the return type. *) MetaErrorT0 (functok, @@ -9390,16 +9484,15 @@ END BuildValFunction ; |----------------| *) -PROCEDURE BuildCastFunction ; +PROCEDURE BuildCastFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR combinedtok, + exptok, typetok, - functok, - vartok : CARDINAL ; - n : Name ; + functok : CARDINAL ; ReturnVar, NoOfParam, - Var, Type : CARDINAL ; + Exp, Type : CARDINAL ; BEGIN PopT (NoOfParam) ; functok := OperandTok (NoOfParam + 1) ; @@ -9407,32 +9500,40 @@ BEGIN THEN Type := OperandT (2) ; typetok := OperandTok (2) ; - Var := OperandT (1) ; - vartok := OperandTok (1) ; + Exp := OperandT (1) ; + exptok := OperandTok (1) ; IF IsUnknown (Type) THEN - n := GetSymName (Type) ; - WriteFormat1 ('undeclared type found in CAST (%a)', n) + (* we cannot recover if we dont have a type. *) + MetaErrorT1 (typetok, 'undeclared type {%1Aad} found in {%kCAST}', Type) + (* non recoverable error. *) + ELSIF ConstExprError (ProcSym, Exp, exptok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtualTok (functok, functok, exptok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Exp))) ; + PutVar (ReturnVar, Type) ; + PushTFtok (ReturnVar, Type, combinedtok) ELSIF IsSet (Type) OR IsEnumeration (Type) OR IsSubrange (Type) OR IsType (Type) OR IsPointer (Type) OR IsArray (Type) OR IsProcType (Type) THEN - IF IsConst (Var) + IF IsConst (Exp) THEN PopN (NoOfParam+1) ; (* Build macro: Type( Var ) *) PushTFtok (Type, NulSym, typetok) ; - PushTtok (Var, vartok) ; + PushTtok (Exp, exptok) ; PushT (1) ; (* one parameter *) BuildTypeCoercion - ELSIF IsVar (Var) OR IsProcedure (Var) + ELSIF IsVar (Exp) OR IsProcedure (Exp) THEN PopN (NoOfParam + 1) ; - combinedtok := MakeVirtualTok (functok, functok, vartok) ; + combinedtok := MakeVirtual2Tok (functok, exptok) ; ReturnVar := MakeTemporary (combinedtok, RightValue) ; PutVar (ReturnVar, Type) ; - GenQuadO (combinedtok, CastOp, ReturnVar, Type, Var, FALSE) ; + GenQuadO (combinedtok, CastOp, ReturnVar, Type, Exp, FALSE) ; PushTFtok (ReturnVar, Type, combinedtok) ELSE (* not sensible to try and recover when we dont know the return type. *) @@ -9489,7 +9590,7 @@ END BuildCastFunction ; with a type Param1. *) -PROCEDURE BuildConvertFunction ; +PROCEDURE BuildConvertFunction (ProcSym: CARDINAL; ConstExpr: BOOLEAN) ; VAR combinedtok, functok, @@ -9497,7 +9598,6 @@ VAR exptok : CARDINAL ; t, r, Exp, Type, - ProcSym, NoOfParam, ReturnVar : CARDINAL ; BEGIN @@ -9519,6 +9619,13 @@ BEGIN (* we cannot recover if we dont have a type. *) MetaErrorT1 (typetok, 'unknown {%1Ad} {%1ad} found in {%kCONVERT}', Exp) (* non recoverable error. *) + ELSIF ConstExprError (ProcSym, Exp, exptok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtualTok (functok, functok, exptok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Exp))) ; + PutVar (ReturnVar, Type) ; + PushTFtok (ReturnVar, Type, combinedtok) ELSIF (IsSet (Type) OR IsEnumeration (Type) OR IsSubrange (Type) OR IsType (Type) OR IsPointer (Type) OR IsProcType (Type) OR IsRecord (Type)) AND (IsVar (Exp) OR IsConst (Exp) OR IsProcedure (Exp)) @@ -9807,14 +9914,16 @@ END BuildMaxFunction ; |----------------| *) -PROCEDURE BuildTruncFunction (Sym: CARDINAL) ; +PROCEDURE BuildTruncFunction (Sym: CARDINAL; ConstExpr: BOOLEAN) ; VAR + combinedtok, vartok, - functok : CARDINAL ; - NoOfParam: CARDINAL ; + functok : CARDINAL ; + NoOfParam : CARDINAL ; + ReturnVar, ProcSym, Type, - Var : CARDINAL ; + Var : CARDINAL ; BEGIN PopT (NoOfParam) ; Assert (IsTrunc (OperandT (NoOfParam+1))) ; @@ -9828,7 +9937,14 @@ BEGIN vartok := OperandTtok (1) ; Type := GetSType (Sym) ; PopN (NoOfParam + 1) ; (* destroy arguments to this function *) - IF IsVar (Var) OR IsConst (Var) + IF ConstExprError (Sym, Var, vartok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtual2Tok (functok, vartok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (ReturnVar, Type) ; + PushTFtok (ReturnVar, Type, combinedtok) + ELSIF IsVar (Var) OR IsConst (Var) THEN IF IsRealType (GetSType (Var)) THEN @@ -9837,7 +9953,7 @@ BEGIN PushTtok (Type, functok) ; PushTtok (Var, vartok) ; PushT (2) ; (* two parameters *) - BuildConvertFunction + BuildConvertFunction (Convert, ConstExpr) ELSE MetaErrorT1 (functok, 'argument to {%1Ead} must be a float point type', Sym) ; @@ -9894,14 +10010,16 @@ END BuildTruncFunction ; |----------------| *) -PROCEDURE BuildFloatFunction (Sym: CARDINAL) ; +PROCEDURE BuildFloatFunction (Sym: CARDINAL; ConstExpr: BOOLEAN) ; VAR + combinedtok, vartok, - functok : CARDINAL ; - NoOfParam: CARDINAL ; + functok : CARDINAL ; + NoOfParam : CARDINAL ; + ReturnVar, Type, Var, - ProcSym : CARDINAL ; + ProcSym : CARDINAL ; BEGIN PopT (NoOfParam) ; functok := OperandTtok (NoOfParam + 1) ; @@ -9913,15 +10031,22 @@ BEGIN THEN Var := OperandT (1) ; vartok := OperandTtok (1) ; - IF IsVar (Var) OR IsConst (Var) + PopN (NoOfParam + 1) ; (* destroy arguments to this function. *) + IF ConstExprError (Sym, Var, vartok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtual2Tok (functok, vartok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (ReturnVar, Type) ; + PushTFtok (ReturnVar, Type, combinedtok) + ELSIF IsVar (Var) OR IsConst (Var) THEN - PopN (NoOfParam + 1) ; (* destroy arguments to this function. *) (* build macro: CONVERT (REAL, Var). *) PushTFtok (ProcSym, NulSym, functok) ; PushTtok (Type, functok) ; PushTtok (Var, vartok) ; PushT(2) ; (* two parameters. *) - BuildConvertFunction + BuildConvertFunction (ProcSym, ConstExpr) ELSE MetaErrorT1 (vartok, 'argument to {%1Ead} must be a variable or constant', ProcSym) ; @@ -9931,6 +10056,7 @@ BEGIN InternalError ('CONVERT procedure not found for FLOAT substitution') END ELSE + PopN (NoOfParam + 1) ; (* destroy arguments to this function. *) MetaErrorT1 (functok, 'the builtin procedure function {%1Ead} only has one parameter', Sym) ; @@ -9965,7 +10091,7 @@ END BuildFloatFunction ; |----------------| *) -PROCEDURE BuildReFunction ; +PROCEDURE BuildReFunction (Sym: CARDINAL; ConstExpr: BOOLEAN) ; VAR func, combinedtok, @@ -9973,6 +10099,7 @@ VAR functok : CARDINAL ; NoOfParam : CARDINAL ; ReturnVar, + Type, Var : CARDINAL ; BEGIN PopT (NoOfParam) ; @@ -9983,15 +10110,22 @@ BEGIN Var := OperandT (1) ; vartok := OperandTok (1) ; combinedtok := MakeVirtualTok (functok, functok, vartok) ; - IF IsVar(Var) OR IsConst(Var) + Type := ComplexToScalar (GetDType (Var)) ; + PopN (NoOfParam+1) ; (* destroy arguments to this function *) + IF ConstExprError (Sym, Var, vartok, ConstExpr) THEN + (* Generate fake result. *) + combinedtok := MakeVirtual2Tok (functok, vartok) ; ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; - PutVar (ReturnVar, ComplexToScalar (GetDType (Var))) ; + PutVar (ReturnVar, Type) ; + PushTFtok (ReturnVar, Type, combinedtok) + ELSIF IsVar(Var) OR IsConst(Var) + THEN + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (ReturnVar, Type) ; GenQuadO (combinedtok, StandardFunctionOp, ReturnVar, Re, Var, FALSE) ; - PopN (NoOfParam+1) ; (* destroy arguments to this function *) - PushTFtok (ReturnVar, GetSType (ReturnVar), combinedtok) + PushTFtok (ReturnVar, Type, combinedtok) ELSE - PopN (NoOfParam+1) ; (* destroy arguments to this function *) PushTFtok (MakeConstLit (combinedtok, MakeKey ('1.0'), RType), RType, combinedtok) ; MetaErrorT2 (vartok, 'the parameter to the builtin procedure function {%1Ead} must be a constant or a variable, seen {%2ad}', @@ -10033,7 +10167,7 @@ END BuildReFunction ; |----------------| *) -PROCEDURE BuildImFunction ; +PROCEDURE BuildImFunction (Sym: CARDINAL; ConstExpr: BOOLEAN) ; VAR func, combinedtok, @@ -10041,6 +10175,7 @@ VAR functok : CARDINAL ; NoOfParam : CARDINAL ; ReturnVar, + Type, Var : CARDINAL ; BEGIN PopT (NoOfParam) ; @@ -10050,16 +10185,23 @@ BEGIN THEN Var := OperandT (1) ; vartok := OperandTok (1) ; + Type := ComplexToScalar (GetDType (Var)) ; combinedtok := MakeVirtualTok (functok, functok, vartok) ; - IF IsVar(Var) OR IsConst(Var) + PopN (NoOfParam+1) ; (* destroy arguments to this function *) + IF ConstExprError (Sym, Var, vartok, ConstExpr) + THEN + (* Generate fake result. *) + combinedtok := MakeVirtual2Tok (functok, vartok) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; + PutVar (ReturnVar, Type) ; + PushTFtok (ReturnVar, Type, combinedtok) + ELSIF IsVar(Var) OR IsConst(Var) THEN ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (Var))) ; PutVar (ReturnVar, ComplexToScalar (GetDType (Var))) ; GenQuadO (combinedtok, StandardFunctionOp, ReturnVar, Im, Var, FALSE) ; - PopN (NoOfParam+1) ; (* destroy arguments to this function *) PushTFtok (ReturnVar, GetSType (ReturnVar), combinedtok) ELSE - PopN (NoOfParam+1) ; (* destroy arguments to this function *) PushTFtok (MakeConstLit (combinedtok, MakeKey ('1.0'), RType), RType, combinedtok) ; MetaErrorT2 (vartok, 'the parameter to the builtin procedure function {%1Ead} must be a constant or a variable, seen {%2ad}', @@ -10101,34 +10243,53 @@ END BuildImFunction ; |----------------| *) -PROCEDURE BuildCmplxFunction ; +PROCEDURE BuildCmplxFunction (func: CARDINAL; ConstExpr: BOOLEAN) ; VAR + failure : BOOLEAN ; functok, - endtok, + rtok, ltok, combinedtok: CARDINAL ; NoOfParam : CARDINAL ; - func, + type, ReturnVar, l, r : CARDINAL ; BEGIN PopT (NoOfParam) ; functok := OperandTtok (NoOfParam + 1) ; - func := OperandT (NoOfParam + 1) ; IF NoOfParam = 2 THEN l := OperandT (2) ; + ltok := OperandTtok (2) ; r := OperandT (1) ; - endtok := OperandTok (1) ; - combinedtok := MakeVirtualTok (functok, functok, endtok) ; - IF (IsVar(l) OR IsConst(l)) AND - (IsVar(r) OR IsConst(r)) + rtok := OperandTtok (1) ; + combinedtok := MakeVirtual2Tok (functok, rtok) ; + PopN (NoOfParam+1) ; (* Destroy arguments to this function. *) + type := GetCmplxReturnType (GetDType (l), GetDType (r)) ; + ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (l) AND IsConst (r))) ; + PutVar (ReturnVar, type) ; + failure := FALSE ; + IF ConstExprError (func, l, ltok, ConstExpr) + THEN + (* ConstExprError has generated an error message we will fall through + and check the right operand. *) + failure := TRUE + END ; + IF ConstExprError (func, r, rtok, ConstExpr) + THEN + (* Right operand is in error as a variable. *) + failure := TRUE + END ; + IF failure + THEN + (* Generate a fake result if either operand was a variable (and we + are in a const expression). *) + PushTFtok (ReturnVar, type, combinedtok) + ELSIF (IsVar (l) OR IsConst (l)) AND + (IsVar (r) OR IsConst (r)) THEN CheckExpressionCompatible (combinedtok, GetSType(l), GetSType(r)) ; - ReturnVar := MakeTemporary (combinedtok, AreConstant (IsConst (l) AND IsConst (r))) ; - PutVar (ReturnVar, GetCmplxReturnType (GetDType (l), GetDType (r))) ; GenQuadO (combinedtok, StandardFunctionOp, ReturnVar, Cmplx, Make2Tuple (l, r), TRUE) ; - PopN (NoOfParam+1) ; (* destroy arguments to this function *) - PushTFtok (ReturnVar, GetSType (ReturnVar), combinedtok) + PushTFtok (ReturnVar, type, combinedtok) ELSE IF IsVar (l) OR IsConst (l) THEN @@ -10140,7 +10301,6 @@ BEGIN 'the builtin procedure {%1Ead} requires two parameters, both must be variables or constants but the first parameter is {%2d}', func, l) END ; - PopN (NoOfParam+1) ; (* destroy arguments to this function *) PushTFtok (MakeConstLit (combinedtok, MakeKey ('1.0'), CType), CType, combinedtok) END ELSE @@ -11374,7 +11534,7 @@ BEGIN PushT (Address) ; PushTtok (sym, tokpos) ; PushT(2) ; (* Two parameters *) - BuildConvertFunction ; + BuildConvertFunction (Convert, FALSE) ; PopT (adr) ; RETURN adr END @@ -11487,7 +11647,7 @@ BEGIN PushT (Cardinal) ; PushTtok (idx, indexTok) ; PushT(2) ; (* Two parameters *) - BuildConvertFunction ; + BuildConvertFunction (Convert, FALSE) ; PopT (idx) END ; PutVar (tj, Cardinal) ; @@ -11941,7 +12101,6 @@ VAR typepos, Type : CARDINAL ; NulSet : CARDINAL ; - tok : CARDINAL ; BEGIN PopTtok (Type, typepos) ; (* type of set we are building *) IF (Type = NulSym) AND Pim @@ -12244,7 +12403,6 @@ END BuildConstructorStart ; PROCEDURE BuildConstructorEnd (startpos, cbratokpos: CARDINAL) ; VAR - typetok, value, valtok: CARDINAL ; BEGIN IF DebugTokPos @@ -12510,7 +12668,7 @@ BEGIN PushT(type) ; PushT(sym) ; PushT(2) ; (* Two parameters *) - BuildConvertFunction ; + BuildConvertFunction (Convert, FALSE) ; PopT(sym) END ; RETURN( sym ) diff --git a/gcc/testsuite/gm2/iso/const/fail/expression.mod b/gcc/testsuite/gm2/iso/const/fail/expression.mod new file mode 100644 index 000000000000..121d7f4ff08e --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/expression.mod @@ -0,0 +1,10 @@ +MODULE expression ; + +CONST + foo = ABS (i) + 2 + ABS (-100) ; + +VAR + i: INTEGER ; +BEGIN + +END expression. diff --git a/gcc/testsuite/gm2/iso/const/fail/iso-const-fail.exp b/gcc/testsuite/gm2/iso/const/fail/iso-const-fail.exp new file mode 100644 index 000000000000..59b6b29a5ddf --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/iso-const-fail.exp @@ -0,0 +1,36 @@ +# Copyright (C) 2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# This file was written by Gaius Mulley (gaius.mulley@southwales.ac.uk) +# for GNU Modula-2. + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib gm2-torture.exp + +gm2_init_iso "${srcdir}/gm2/iso/const/fail" + +foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + gm2-torture-fail $testcase +} diff --git a/gcc/testsuite/gm2/iso/const/fail/testabs.mod b/gcc/testsuite/gm2/iso/const/fail/testabs.mod new file mode 100644 index 000000000000..561688b403f7 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testabs.mod @@ -0,0 +1,10 @@ +MODULE testabs ; + +CONST + foo = ABS (i + 1) ; + +VAR + i: INTEGER ; +BEGIN + +END testabs. diff --git a/gcc/testsuite/gm2/iso/const/fail/testaddadr.mod b/gcc/testsuite/gm2/iso/const/fail/testaddadr.mod new file mode 100644 index 000000000000..a9ebe8ad49e6 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testaddadr.mod @@ -0,0 +1,12 @@ +MODULE testaddadr ; + +IMPORT SYSTEM ; + +CONST + foo = SYSTEM.ADDADR (ADR (a) + ADR (b)) ; + +VAR + a, b: CARDINAL ; +BEGIN + +END testaddadr. diff --git a/gcc/testsuite/gm2/iso/const/fail/testcap.mod b/gcc/testsuite/gm2/iso/const/fail/testcap.mod new file mode 100644 index 000000000000..e6d983d74712 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testcap.mod @@ -0,0 +1,10 @@ +MODULE testcap ; + +CONST + foo = CAP (ch) ; + +VAR + ch: CHAR ; +BEGIN + +END testcap. diff --git a/gcc/testsuite/gm2/iso/const/fail/testcap2.mod b/gcc/testsuite/gm2/iso/const/fail/testcap2.mod new file mode 100644 index 000000000000..239472b62c2e --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testcap2.mod @@ -0,0 +1,10 @@ +MODULE testcap2 ; + +CONST + foo = CAP (ch + '8' - '1') ; + +VAR + ch: CHAR ; +BEGIN + +END testcap2. diff --git a/gcc/testsuite/gm2/iso/const/fail/testchr.mod b/gcc/testsuite/gm2/iso/const/fail/testchr.mod new file mode 100644 index 000000000000..cf3b5b85b4ca --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testchr.mod @@ -0,0 +1,10 @@ +MODULE testchr ; + +CONST + foo = ORD (CHR (c)) ; + +VAR + c: CARDINAL ; +BEGIN + +END testchr. diff --git a/gcc/testsuite/gm2/iso/const/fail/testchr2.mod b/gcc/testsuite/gm2/iso/const/fail/testchr2.mod new file mode 100644 index 000000000000..73e2d230d1b6 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testchr2.mod @@ -0,0 +1,10 @@ +MODULE testchr2 ; + +CONST + foo = CHR (c) ; + +VAR + c: CARDINAL ; +BEGIN + +END testchr2. diff --git a/gcc/testsuite/gm2/iso/const/fail/testcmplx.mod b/gcc/testsuite/gm2/iso/const/fail/testcmplx.mod new file mode 100644 index 000000000000..e9e22c0485ed --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testcmplx.mod @@ -0,0 +1,10 @@ +MODULE testcmplx ; + +CONST + foo = CMPLX (r, i) ; + +VAR + r, i: REAL ; +BEGIN + +END testcmplx. diff --git a/gcc/testsuite/gm2/iso/const/fail/testfloat.mod b/gcc/testsuite/gm2/iso/const/fail/testfloat.mod new file mode 100644 index 000000000000..371e7fbc38cc --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testfloat.mod @@ -0,0 +1,10 @@ +MODULE testfloat ; + +CONST + foo = FLOAT (c) ; + +VAR + c: CARDINAL ; +BEGIN + +END testfloat. diff --git a/gcc/testsuite/gm2/iso/const/fail/testim.mod b/gcc/testsuite/gm2/iso/const/fail/testim.mod new file mode 100644 index 000000000000..02cc2e43c3eb --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testim.mod @@ -0,0 +1,10 @@ +MODULE testim ; + +CONST + foo = IM (cmplx) ; + +VAR + cmplx: COMPLEX ; +BEGIN + +END testim. diff --git a/gcc/testsuite/gm2/iso/const/fail/testint.mod b/gcc/testsuite/gm2/iso/const/fail/testint.mod new file mode 100644 index 000000000000..d241a13d3b8f --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testint.mod @@ -0,0 +1,10 @@ +MODULE testint ; + +CONST + foo = INT (r) ; + +VAR + r: REAL ; +BEGIN + +END testint. diff --git a/gcc/testsuite/gm2/iso/const/fail/testlength.mod b/gcc/testsuite/gm2/iso/const/fail/testlength.mod new file mode 100644 index 000000000000..c3f126b0079d --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testlength.mod @@ -0,0 +1,11 @@ +MODULE testlength ; + +PROCEDURE bar (a: ARRAY OF CHAR) ; +CONST + foo = LENGTH (a) ; +BEGIN +END bar ; + +BEGIN + bar ("hello") +END testlength. diff --git a/gcc/testsuite/gm2/iso/const/fail/testodd.mod b/gcc/testsuite/gm2/iso/const/fail/testodd.mod new file mode 100644 index 000000000000..d293e0cb3723 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testodd.mod @@ -0,0 +1,10 @@ +MODULE testodd ; + +CONST + foo = ODD (x) ; + +VAR + x: CARDINAL ; +BEGIN + +END testodd. diff --git a/gcc/testsuite/gm2/iso/const/fail/testord.mod b/gcc/testsuite/gm2/iso/const/fail/testord.mod new file mode 100644 index 000000000000..d862da1d652a --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testord.mod @@ -0,0 +1,10 @@ +MODULE testord ; + +CONST + foo = ORD (ch) ; + +VAR + ch: CHAR ; +BEGIN + +END testord. diff --git a/gcc/testsuite/gm2/iso/const/fail/testre.mod b/gcc/testsuite/gm2/iso/const/fail/testre.mod new file mode 100644 index 000000000000..60ecde5e6ae5 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testre.mod @@ -0,0 +1,10 @@ +MODULE testre ; + +CONST + foo = RE (cmplx) ; + +VAR + cmplx: COMPLEX ; +BEGIN + +END testre. diff --git a/gcc/testsuite/gm2/iso/const/fail/testtrunc.mod b/gcc/testsuite/gm2/iso/const/fail/testtrunc.mod new file mode 100644 index 000000000000..6dcde30d83e7 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testtrunc.mod @@ -0,0 +1,10 @@ +MODULE testtrunc ; + +CONST + foo = TRUNC (r) ; + +VAR + r: REAL ; +BEGIN + +END testtrunc. diff --git a/gcc/testsuite/gm2/iso/const/fail/testval.mod b/gcc/testsuite/gm2/iso/const/fail/testval.mod new file mode 100644 index 000000000000..438955c57f17 --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/fail/testval.mod @@ -0,0 +1,10 @@ +MODULE testval ; + +CONST + foo = VAL (INTEGER, c) ; + +VAR + c: CARDINAL ; +BEGIN + +END testval. diff --git a/gcc/testsuite/gm2/iso/const/pass/constbool.mod b/gcc/testsuite/gm2/iso/const/pass/constbool.mod new file mode 100644 index 000000000000..1be96cceaeef --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/pass/constbool.mod @@ -0,0 +1,14 @@ +MODULE constbool ; + + +CONST + AddressableBits = 32 ; + MaxBits = 32 ; + + BitsInUse = + ORD(AddressableBits > MaxBits) * MaxBits + + ORD(AddressableBits <= MaxBits) * AddressableBits; + +BEGIN + +END constbool. diff --git a/gcc/testsuite/gm2/iso/const/pass/constbool2.mod b/gcc/testsuite/gm2/iso/const/pass/constbool2.mod new file mode 100644 index 000000000000..f8e294b5867f --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/pass/constbool2.mod @@ -0,0 +1,12 @@ +MODULE constbool2 ; + + +CONST + AddressableBits = 32 ; + MaxBits = 32 ; + + BitsInUse = ORD(AddressableBits > MaxBits) * MaxBits + ORD(AddressableBits <= MaxBits) * AddressableBits; + +BEGIN + +END constbool2. diff --git a/gcc/testsuite/gm2/iso/const/pass/constbool3.mod b/gcc/testsuite/gm2/iso/const/pass/constbool3.mod new file mode 100644 index 000000000000..e63ffc4d0b3f --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/pass/constbool3.mod @@ -0,0 +1,12 @@ +MODULE constbool3 ; + + +CONST + AddressableBits = 32 ; + MaxBits = 16 ; + + BitsInUse = ORD(AddressableBits > MaxBits) * MaxBits + ORD(AddressableBits <= MaxBits) * AddressableBits; + +BEGIN + +END constbool3. From 0454eec362dd9b62ed1fe1df02590bd60af75ed9 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Tue, 2 Apr 2024 00:17:27 +0000 Subject: [PATCH 327/551] Daily bump. --- gcc/ChangeLog | 50 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 5 +++++ gcc/m2/ChangeLog | 44 ++++++++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 35 +++++++++++++++++++++++++++++ 5 files changed, 135 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 63330b2ff9fb..bc10edf32581 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,53 @@ +2024-04-01 Yang Yujie <yangyujie@loongson.cn> + + * config/loongarch/genopts/loongarch.opt.in: Mark -m[no-]recip as + aliases to -mrecip={all,none}, respectively. + * config/loongarch/loongarch.opt: Regenerate. + * config/loongarch/loongarch-def.h (ABI_FPU_64): Rename to... + (ABI_FPU64_P): ...this. + (ABI_FPU_32): Rename to... + (ABI_FPU32_P): ...this. + (ABI_FPU_NONE): Rename to... + (ABI_NOFPU_P): ...this. + (ABI_LP64_P): Define. + * config/loongarch/loongarch.cc (loongarch_init_print_operand_punct): + Merged into loongarch_global_init. + (loongarch_cpu_option_override): Renamed to + loongarch_target_option_override. + (loongarch_option_override_internal): Move the work after + loongarch_config_target into loongarch_target_option_override. + (loongarch_global_init): Define. + (INIT_TARGET_FLAG): Move to loongarch-opts.cc. + (loongarch_option_override): Call loongarch_global_init + separately. + * config/loongarch/loongarch-opts.cc (loongarch_parse_mrecip_scheme): + Split the parsing of -mrecip=<string> from + loongarch_option_override_internal. + (loongarch_generate_mrecip_scheme): Define. Split from + loongarch_option_override_internal. + (loongarch_target_option_override): Define. Renamed from + loongarch_cpu_option_override. + (loongarch_init_misc_options): Define. Split from + loongarch_option_override_internal. + (INIT_TARGET_FLAG): Move from loongarch.cc. + * config/loongarch/loongarch-opts.h (loongarch_target_option_override): + New prototype. + (loongarch_parse_mrecip_scheme): New prototype. + (loongarch_init_misc_options): New prototype. + (TARGET_ABI_LP64): Simplify with ABI_LP64_P. + * config/loongarch/loongarch.h (TARGET_RECIP_DIV): Simplify. + Do not reference specific CPU architecture (LA664). + (TARGET_RECIP_SQRT): Same. + (TARGET_RECIP_RSQRT): Same. + (TARGET_RECIP_VEC_DIV): Same. + (TARGET_RECIP_VEC_SQRT): Same. + (TARGET_RECIP_VEC_RSQRT): Same. + +2024-04-01 Lulu Cheng <chenglulu@loongson.cn> + + * doc/invoke.texi: Add descriptions for the compilation + options. + 2024-03-31 Jeff Law <jlaw@ventanamicro.com> * config/riscv/xiangshan.md (xiangshan_jump): Add branch, jalr, ret diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 6a6c7bc89804..2edad605e1d4 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240401 +20240402 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 55e55268b5a2..b64f127aad61 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2024-04-01 Jason Merrill <jason@redhat.com> + + * typeck.cc (maybe_warn_about_returning_address_of_local): + Permerror in C++26. + 2024-03-28 Jason Merrill <jason@redhat.com> PR c++/100667 diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index eec432643417..1c5fc2e71bec 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,47 @@ +2024-04-01 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114548 + * gm2-compiler/M2Quads.mod (ConvertToAddress): Pass + procedure, false parameters to BuildConvertFunction. + (PushOne): Pass procedure, true parameters to + BuildConvertFunction. + Remove usused parameter internal. + (BuildPseudoBy): Remove parameter to PushOne. + (BuildIncProcedure): Ditto. + (BuildDecProcedure): Ditto. + (BuildFunctionCall): Add ConstExpr parameter to + BuildPseudoFunctionCall. + (BuildConstFunctionCall): Add procedure and true to + BuildConvertFunction. + (BuildPseudoFunctionCall): Add ConstExpr parameter. + Pass ProcSym and ConstExpr to BuildLengthFunction, + BuildConvertFunction, BuildOddFunction, BuildAbsFunction, + BuildCapFunction, BuildValFunction, BuildChrFunction, + BuildOrdFunction, BuildIntFunction, BuildTruncFunction, + BuildFloatFunction, BuildAddAdrFunction, BuildSubAdrFunction, + BuildDifAdrFunction, BuildCastFunction, BuildReFunction, + BuildImFunction and BuildCmplxFunction. + (BuildAddAdrFunction): Add ProcSym, ConstExpr parameters and + check for constant parameters. + (BuildSubAdrFunction): Ditto. + (BuildDifAdrFunction): Ditto. + (ConstExprError): Ditto. + (BuildLengthFunction): Ditto. + (BuildOddFunction): Ditto. + (BuildAbsFunction): Ditto. + (BuildCapFunction): Ditto. + (BuildChrFunction): Ditto. + (BuildOrdFunction): Ditto. + (BuildIntFunction): Ditto. + (BuildValFunction): Ditto. + (BuildCastFunction): Ditto. + (BuildConvertFunction): Ditto. + (BuildTruncFunction): Ditto. + (BuildFloatFunction): Ditto. + (BuildReFunction): Ditto. + (BuildImFunction): Ditto. + (BuildCmplxFunction): Ditto. + 2024-03-31 Christophe Lyon <christophe.lyon@linaro.org> * Make-lang.in (m2.install-info): Fix rule. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a3797468bfb7..b87da1dcc001 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,38 @@ +2024-04-01 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114548 + * gm2/iso/const/fail/expression.mod: New test. + * gm2/iso/const/fail/iso-const-fail.exp: New test. + * gm2/iso/const/fail/testabs.mod: New test. + * gm2/iso/const/fail/testaddadr.mod: New test. + * gm2/iso/const/fail/testcap.mod: New test. + * gm2/iso/const/fail/testcap2.mod: New test. + * gm2/iso/const/fail/testchr.mod: New test. + * gm2/iso/const/fail/testchr2.mod: New test. + * gm2/iso/const/fail/testcmplx.mod: New test. + * gm2/iso/const/fail/testfloat.mod: New test. + * gm2/iso/const/fail/testim.mod: New test. + * gm2/iso/const/fail/testint.mod: New test. + * gm2/iso/const/fail/testlength.mod: New test. + * gm2/iso/const/fail/testodd.mod: New test. + * gm2/iso/const/fail/testord.mod: New test. + * gm2/iso/const/fail/testre.mod: New test. + * gm2/iso/const/fail/testtrunc.mod: New test. + * gm2/iso/const/fail/testval.mod: New test. + * gm2/iso/const/pass/constbool.mod: New test. + * gm2/iso/const/pass/constbool2.mod: New test. + * gm2/iso/const/pass/constbool3.mod: New test. + +2024-04-01 Jason Merrill <jason@redhat.com> + + * g++.dg/conversion/pr16333.C: Change dg-warning to dg-message. + * g++.dg/cpp0x/constexpr-48324.C + * g++.dg/other/pr94326.C + * g++.dg/warn/Wreturn-local-addr-2.C + * g++.old-deja/g++.jason/warning8.C: Likewise. + * g++.dg/cpp1y/auto-fn6.C: Check that others don't complain. + * g++.dg/warn/Wreturn-local-addr-5.C: Expect error in C++26. + 2024-03-31 Pan Li <pan2.li@intel.com> * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: From 6f9ba3ea55477cf1bd3d37e40ad116150c06a75e Mon Sep 17 00:00:00 2001 From: Lulu Cheng <chenglulu@loongson.cn> Date: Mon, 1 Apr 2024 11:00:21 +0800 Subject: [PATCH 328/551] LoongArch: Regenerate loongarch.opt.urls. Fixes: d28ea8e5a704 ("LoongArch: Split loongarch_option_override_internal into smaller procedures") gcc/ChangeLog: * config/loongarch/loongarch.opt.urls: Regenerate. --- gcc/config/loongarch/loongarch.opt.urls | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/config/loongarch/loongarch.opt.urls b/gcc/config/loongarch/loongarch.opt.urls index c78bbfea2da8..8e16304b66a0 100644 --- a/gcc/config/loongarch/loongarch.opt.urls +++ b/gcc/config/loongarch/loongarch.opt.urls @@ -51,10 +51,10 @@ UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1) mexplicit-relocs UrlSuffix(gcc/LoongArch-Options.html#index-mexplicit-relocs-1) -mrecip +mrecip= UrlSuffix(gcc/LoongArch-Options.html#index-mrecip) -mrecip= +mrecip UrlSuffix(gcc/LoongArch-Options.html#index-mrecip) ; skipping UrlSuffix for 'mcmodel=' due to finding no URLs @@ -64,3 +64,18 @@ UrlSuffix(gcc/LoongArch-Options.html#index-mdirect-extern-access) ; skipping UrlSuffix for 'mrelax' due to finding no URLs +mfrecipe +UrlSuffix(gcc/LoongArch-Options.html#index-mfrecipe) + +mdiv32 +UrlSuffix(gcc/LoongArch-Options.html#index-mdiv32) + +mlam-bh +UrlSuffix(gcc/LoongArch-Options.html#index-mlam-bh) + +mlamcas +UrlSuffix(gcc/LoongArch-Options.html#index-mlamcas) + +mld-seq-sa +UrlSuffix(gcc/LoongArch-Options.html#index-mld-seq-sa) + From b253b4695ddac43301bb572895095b9569165ff4 Mon Sep 17 00:00:00 2001 From: mengqinggang <mengqinggang@loongson.cn> Date: Tue, 2 Apr 2024 09:57:20 +0800 Subject: [PATCH 329/551] LoongArch: Add support for TLS descriptors. Add support for TLS descriptors on normal code model and extreme code model. Normal code model instruction sequence: -mno-explicit-relocs: la.tls.desc $r4, s add.d $r12, $r4, $r2 -mexplicit-relocs: pcalau12i $r4,%desc_pc_hi20(s) addi.d $r4,$r4,%desc_pc_lo12(s) ld.d $r1,$r4,%desc_ld(s) jirl $r1,$r1,%desc_call(s) add.d $r12, $r4, $r2 Extreme code model instruction sequence: -mno-explicit-relocs: la.tls.desc $r4, $r12, s add.d $r12, $r4, $r2 -mexplicit-relocs: pcalau12i $r4,%desc_pc_hi20(s) addi.d $r12,$r0,%desc_pc_lo12(s) lu32i.d $r12,%desc64_pc_lo20(s) lu52i.d $r12,$r12,%desc64_pc_hi12(s) add.d $r4,$r4,$r12 ld.d $r1,$r4,%desc_ld(s) jirl $r1,$r1,%desc_call(s) add.d $r12, $r4, $r2 The default is still traditional TLS model, but can be configured with --with-tls={trad,desc}. The default can change to TLS descriptors once libc and LLVM support this. gcc/ChangeLog: * config.gcc: Add --with-tls option to change TLS flavor. * config/loongarch/genopts/loongarch.opt.in: Add -mtls-dialect to configure TLS flavor. * config/loongarch/loongarch-def.h (struct loongarch_target): Add tls_dialect. * config/loongarch/loongarch-driver.cc (la_driver_init): Add tls flavor. * config/loongarch/loongarch-opts.cc (loongarch_init_target): Add tls_dialect. (loongarch_config_target): Ditto. (loongarch_update_gcc_opt_status): Ditto. * config/loongarch/loongarch-opts.h (loongarch_init_target): Ditto. (TARGET_TLS_DESC): New define. * config/loongarch/loongarch.cc (loongarch_symbol_insns): Add TLS DESC instructions sequence length. (loongarch_legitimize_tls_address): New TLS DESC instruction sequence. (loongarch_option_override_internal): Add la_opt_tls_dialect. (loongarch_option_restore): Add la_target.tls_dialect. * config/loongarch/loongarch.md (@got_load_tls_desc<mode>): Normal code model for TLS DESC. (got_load_tls_desc_off64): Extreme cmode model for TLS DESC. * config/loongarch/loongarch.opt: Regenerate. * config/loongarch/loongarch.opt.urls: Ditto. * doc/invoke.texi: Add a description of the compilation option '-mtls-dialect={trad,desc}'. gcc/testsuite/ChangeLog: * gcc.target/loongarch/cmodel-extreme-1.c: Add -mtls-dialect=trad. * gcc.target/loongarch/cmodel-extreme-2.c: Ditto. * gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c: Ditto. * gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c: Ditto. * gcc.target/loongarch/func-call-medium-1.c: Ditto. * gcc.target/loongarch/func-call-medium-2.c: Ditto. * gcc.target/loongarch/func-call-medium-3.c: Ditto. * gcc.target/loongarch/func-call-medium-4.c: Ditto. * gcc.target/loongarch/tls-extreme-macro.c: Ditto. * gcc.target/loongarch/tls-gd-noplt.c: Ditto. * gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c: New test. * gcc.target/loongarch/explicit-relocs-auto-tls-desc.c: New test. * gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c: New test. * gcc.target/loongarch/explicit-relocs-tls-desc.c: New test. Co-authored-by: Lulu Cheng <chenglulu@loongson.cn> Co-authored-by: Xi Ruoyao <xry111@xry111.site> --- gcc/config.gcc | 19 +++++- gcc/config/loongarch/genopts/loongarch.opt.in | 14 ++++ gcc/config/loongarch/loongarch-def.h | 7 ++ gcc/config/loongarch/loongarch-driver.cc | 2 +- gcc/config/loongarch/loongarch-opts.cc | 12 +++- gcc/config/loongarch/loongarch-opts.h | 3 + gcc/config/loongarch/loongarch.cc | 45 ++++++++---- gcc/config/loongarch/loongarch.md | 68 +++++++++++++++++++ gcc/config/loongarch/loongarch.opt | 14 ++++ gcc/config/loongarch/loongarch.opt.urls | 3 + gcc/doc/invoke.texi | 16 ++++- .../gcc.target/loongarch/cmodel-extreme-1.c | 2 +- .../gcc.target/loongarch/cmodel-extreme-2.c | 2 +- .../explicit-relocs-auto-extreme-tls-desc.c | 10 +++ .../loongarch/explicit-relocs-auto-tls-desc.c | 10 +++ .../explicit-relocs-auto-tls-ld-gd.c | 2 +- .../explicit-relocs-extreme-tls-desc.c | 16 +++++ ...icit-relocs-medium-call36-auto-tls-ld-gd.c | 2 +- .../loongarch/explicit-relocs-tls-desc.c | 13 ++++ .../gcc.target/loongarch/func-call-medium-1.c | 2 +- .../gcc.target/loongarch/func-call-medium-2.c | 2 +- .../gcc.target/loongarch/func-call-medium-3.c | 2 +- .../gcc.target/loongarch/func-call-medium-4.c | 2 +- .../gcc.target/loongarch/tls-extreme-macro.c | 2 +- .../gcc.target/loongarch/tls-gd-noplt.c | 2 +- 25 files changed, 246 insertions(+), 26 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c create mode 100644 gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c create mode 100644 gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c create mode 100644 gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c diff --git a/gcc/config.gcc b/gcc/config.gcc index 17873ac21039..e62f98e93f47 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4999,7 +4999,7 @@ case "${target}" in ;; loongarch*-*) - supported_defaults="abi arch tune fpu simd multilib-default strict-align-lib" + supported_defaults="abi arch tune fpu simd multilib-default strict-align-lib tls" # Local variables unset \ @@ -5257,6 +5257,18 @@ case "${target}" in with_multilib_list="${abi_base}/${abi_ext}" fi + # Handle --with-tls. + case "$with_tls" in + "" \ + | trad | desc) + # OK + ;; + *) + echo "Unknown TLS method used in --with-tls=$with_tls" 1>&2 + exit 1 + ;; + esac + # Check if the configured default ABI combination is included in # ${with_multilib_list}. loongarch_multilib_list_sane=no @@ -5922,6 +5934,11 @@ case ${target} in lasx) tm_defines="$tm_defines DEFAULT_ISA_EXT_SIMD=ISA_EXT_SIMD_LASX" ;; esac + case ${with_tls} in + "" | trad) tm_defines="$tm_defines DEFAULT_TLS_TYPE=TLS_TRADITIONAL" ;; + desc) tm_defines="$tm_defines DEFAULT_TLS_TYPE=TLS_DESCRIPTORS" ;; + esac + tmake_file="loongarch/t-loongarch $tmake_file" ;; diff --git a/gcc/config/loongarch/genopts/loongarch.opt.in b/gcc/config/loongarch/genopts/loongarch.opt.in index a77893d31d99..50ea47a161f2 100644 --- a/gcc/config/loongarch/genopts/loongarch.opt.in +++ b/gcc/config/loongarch/genopts/loongarch.opt.in @@ -245,6 +245,20 @@ mpass-mrelax-to-as Driver Var(la_pass_mrelax_to_as) Init(HAVE_AS_MRELAX_OPTION) Pass -mrelax or -mno-relax option to the assembler. +Enum +Name(tls_type) Type(int) +The possible TLS dialects: + +EnumValue +Enum(tls_type) String(trad) Value(TLS_TRADITIONAL) + +EnumValue +Enum(tls_type) String(desc) Value(TLS_DESCRIPTORS) + +mtls-dialect= +Target RejectNegative Joined Enum(tls_type) Var(la_opt_tls_dialect) Init(M_OPT_UNSET) Save +Specify TLS dialect. + -param=loongarch-vect-unroll-limit= Target Joined UInteger Var(la_vect_unroll_limit) Init(6) IntegerRange(1, 64) Param Used to limit unroll factor which indicates how much the autovectorizer may diff --git a/gcc/config/loongarch/loongarch-def.h b/gcc/config/loongarch/loongarch-def.h index 0cbf94766907..60ce3e230f12 100644 --- a/gcc/config/loongarch/loongarch-def.h +++ b/gcc/config/loongarch/loongarch-def.h @@ -180,6 +180,7 @@ struct loongarch_target int cpu_arch; /* CPU_ */ int cpu_tune; /* same */ int cmodel; /* CMODEL_ */ + int tls_dialect; /* TLS_ */ }; /* CPU model */ @@ -193,6 +194,12 @@ enum { N_TUNE_TYPES = 5 }; +/* TLS types. */ +enum { + TLS_TRADITIONAL = 0, + TLS_DESCRIPTORS = 1 +}; + /* CPU model properties */ extern loongarch_def_array<const char *, N_ARCH_TYPES> loongarch_cpu_strings; diff --git a/gcc/config/loongarch/loongarch-driver.cc b/gcc/config/loongarch/loongarch-driver.cc index 62658f531ad5..8c4ed34698bb 100644 --- a/gcc/config/loongarch/loongarch-driver.cc +++ b/gcc/config/loongarch/loongarch-driver.cc @@ -45,7 +45,7 @@ la_driver_init (int argc ATTRIBUTE_UNUSED, const char **argv ATTRIBUTE_UNUSED) /* Initialize all fields of la_target. */ loongarch_init_target (&la_target, M_OPT_UNSET, M_OPT_UNSET, M_OPT_UNSET, M_OPT_UNSET, M_OPT_UNSET, M_OPT_UNSET, M_OPT_UNSET, - 0, 0); + M_OPT_UNSET, 0, 0); return ""; } diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc index e600f08f03b2..2a6fc41b247e 100644 --- a/gcc/config/loongarch/loongarch-opts.cc +++ b/gcc/config/loongarch/loongarch-opts.cc @@ -144,6 +144,7 @@ void loongarch_init_target (struct loongarch_target *target, int cpu_arch, int cpu_tune, int fpu, int simd, int abi_base, int abi_ext, int cmodel, + int tls_dialect, HOST_WIDE_INT isa_evolution, HOST_WIDE_INT isa_evolution_set) { @@ -158,6 +159,7 @@ loongarch_init_target (struct loongarch_target *target, target->abi.base = abi_base; target->abi.ext = abi_ext; target->cmodel = cmodel; + target->tls_dialect = tls_dialect; } @@ -179,7 +181,8 @@ loongarch_config_target (struct loongarch_target *target, obstack_init (&msg_obstack); struct { - int arch, tune, fpu, simd, abi_base, abi_ext, cmodel, abi_flt; + int arch, tune, fpu, simd, abi_base, abi_ext, cmodel, + tls_dialect, abi_flt; } constrained = { M_OPT_ABSENT (target->cpu_arch) ? 0 : 1, M_OPT_ABSENT (target->cpu_tune) ? 0 : 1, @@ -188,6 +191,7 @@ loongarch_config_target (struct loongarch_target *target, M_OPT_ABSENT (target->abi.base) ? 0 : 1, M_OPT_ABSENT (target->abi.ext) ? 0 : 1, M_OPT_ABSENT (target->cmodel) ? 0 : 1, + M_OPT_ABSENT (target->tls_dialect) ? 0 : 1, M_OPT_ABSENT (target->abi.base) ? 0 : 1, }; @@ -556,6 +560,9 @@ loongarch_config_target (struct loongarch_target *target, gcc_unreachable (); } + t.tls_dialect = constrained.tls_dialect ? target->tls_dialect + : DEFAULT_TLS_TYPE; + /* Cleanup and return. */ obstack_free (&msg_obstack, NULL); *target = t; @@ -791,6 +798,9 @@ loongarch_update_gcc_opt_status (struct loongarch_target *target, /* status of -mcmodel */ opts->x_la_opt_cmodel = target->cmodel; + /* status of -mtls-dialect */ + opts->x_la_opt_tls_dialect = target->tls_dialect; + /* status of -mfpu */ opts->x_la_opt_fpu = target->isa.fpu; diff --git a/gcc/config/loongarch/loongarch-opts.h b/gcc/config/loongarch/loongarch-opts.h index 2d9f59296e70..9844b27ed270 100644 --- a/gcc/config/loongarch/loongarch-opts.h +++ b/gcc/config/loongarch/loongarch-opts.h @@ -39,6 +39,7 @@ void loongarch_init_target (struct loongarch_target *target, int cpu_arch, int cpu_tune, int fpu, int simd, int abi_base, int abi_ext, int cmodel, + int tls_dialect, HOST_WIDE_INT isa_evolutions, HOST_WIDE_INT isa_evolutions_set); @@ -105,6 +106,8 @@ struct loongarch_flags { #define TARGET_64BIT (la_target.isa.base == ISA_BASE_LA64) #define TARGET_ABI_LP64 ABI_LP64_P(la_target.abi.base) +#define TARGET_TLS_DESC (la_target.tls_dialect == TLS_DESCRIPTORS) + #define ISA_HAS_LSX \ (la_target.isa.simd == ISA_EXT_SIMD_LSX \ || la_target.isa.simd == ISA_EXT_SIMD_LASX) diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index a69a203fbe68..cbc91c94d9d6 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -2031,7 +2031,7 @@ loongarch_symbol_insns (enum loongarch_symbol_type type, machine_mode mode) case SYMBOL_TLSGD: case SYMBOL_TLSLDM: - return 3; + return TARGET_TLS_DESC ? 4 : 3; case SYMBOL_PCREL64: return 5; @@ -2933,24 +2933,43 @@ loongarch_call_tls_get_addr (rtx sym, enum loongarch_symbol_type type, rtx v0) static rtx loongarch_legitimize_tls_address (rtx loc) { - rtx dest, tp, tmp, tmp1, tmp2, tmp3; + rtx dest, tp, tmp, tmp1, tmp2, tmp3, a0; enum tls_model model = SYMBOL_REF_TLS_MODEL (loc); rtx_insn *insn; switch (model) { case TLS_MODEL_LOCAL_DYNAMIC: - tmp = gen_rtx_REG (Pmode, GP_RETURN); - dest = gen_reg_rtx (Pmode); - insn = loongarch_call_tls_get_addr (loc, SYMBOL_TLSLDM, tmp); - emit_libcall_block (insn, dest, tmp, loc); - break; - + if (!TARGET_TLS_DESC) + { + tmp = gen_rtx_REG (Pmode, GP_RETURN); + dest = gen_reg_rtx (Pmode); + insn = loongarch_call_tls_get_addr (loc, SYMBOL_TLSLDM, tmp); + emit_libcall_block (insn, dest, tmp, loc); + break; + } + /* Fall through. */ case TLS_MODEL_GLOBAL_DYNAMIC: - tmp = gen_rtx_REG (Pmode, GP_RETURN); - dest = gen_reg_rtx (Pmode); - insn = loongarch_call_tls_get_addr (loc, SYMBOL_TLSGD, tmp); - emit_libcall_block (insn, dest, tmp, loc); + if (TARGET_TLS_DESC) + { + a0 = gen_rtx_REG (Pmode, GP_ARG_FIRST); + dest = gen_reg_rtx (Pmode); + tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM); + + if (TARGET_CMODEL_EXTREME) + emit_insn (gen_got_load_tls_desc_off64 (loc, gen_reg_rtx (DImode))); + else + emit_insn (gen_got_load_tls_desc (Pmode, loc)); + + emit_insn (gen_add3_insn (dest, a0, tp)); + } + else + { + tmp = gen_rtx_REG (Pmode, GP_RETURN); + dest = gen_reg_rtx (Pmode); + insn = loongarch_call_tls_get_addr (loc, SYMBOL_TLSGD, tmp); + emit_libcall_block (insn, dest, tmp, loc); + } break; case TLS_MODEL_INITIAL_EXEC: @@ -7654,6 +7673,7 @@ loongarch_option_override_internal (struct loongarch_target *target, opts->x_la_opt_abi_base, opts->x_la_opt_abi_ext, opts->x_la_opt_cmodel, + opts->x_la_opt_tls_dialect, opts->x_la_isa_evolution, opts_set->x_la_isa_evolution); @@ -7700,6 +7720,7 @@ loongarch_option_restore (struct gcc_options *, la_target.isa.evolution = ptr->x_la_isa_evolution; la_target.cmodel = ptr->x_la_opt_cmodel; + la_target.tls_dialect = ptr->x_la_opt_tls_dialect; } /* Implement TARGET_CONDITIONAL_REGISTER_USAGE. */ diff --git a/gcc/config/loongarch/loongarch.md b/gcc/config/loongarch/loongarch.md index 18fd9c1e7d5c..a316c8fb8207 100644 --- a/gcc/config/loongarch/loongarch.md +++ b/gcc/config/loongarch/loongarch.md @@ -52,6 +52,8 @@ ;; TLS UNSPEC_TLS + UNSPEC_TLS_DESC + UNSPEC_TLS_DESC_OFF64 ;; Stack tie UNSPEC_TIE @@ -127,6 +129,15 @@ (T1_REGNUM 13) (S0_REGNUM 23) + (FCC0_REGNUM 64) + (FCC1_REGNUM 65) + (FCC2_REGNUM 66) + (FCC3_REGNUM 67) + (FCC4_REGNUM 68) + (FCC5_REGNUM 69) + (FCC6_REGNUM 70) + (FCC7_REGNUM 71) + ;; Return path styles (NORMAL_RETURN 0) (SIBCALL_RETURN 1) @@ -2759,6 +2770,63 @@ ;; Thread-Local Storage +(define_insn "@got_load_tls_desc<mode>" + [(set (reg:P 4) + (unspec:P + [(match_operand:P 0 "symbolic_operand" "")] + UNSPEC_TLS_DESC)) + (clobber (reg:SI FCC0_REGNUM)) + (clobber (reg:SI FCC1_REGNUM)) + (clobber (reg:SI FCC2_REGNUM)) + (clobber (reg:SI FCC3_REGNUM)) + (clobber (reg:SI FCC4_REGNUM)) + (clobber (reg:SI FCC5_REGNUM)) + (clobber (reg:SI FCC6_REGNUM)) + (clobber (reg:SI FCC7_REGNUM)) + (clobber (reg:SI RETURN_ADDR_REGNUM))] + "TARGET_TLS_DESC" +{ + return TARGET_EXPLICIT_RELOCS + ? "pcalau12i\t$r4,%%desc_pc_hi20(%0)\n\t" + "addi.d\t$r4,$r4,%%desc_pc_lo12(%0)\n\t" + "ld.d\t$r1,$r4,%%desc_ld(%0)\n\t" + "jirl\t$r1,$r1,%%desc_call(%0)" + : "la.tls.desc\t$r4,%0"; +} + [(set_attr "got" "load") + (set_attr "mode" "<MODE>") + (set_attr "length" "16")]) + +(define_insn "got_load_tls_desc_off64" + [(set (reg:DI 4) + (unspec:DI + [(match_operand:DI 0 "symbolic_operand" "")] + UNSPEC_TLS_DESC_OFF64)) + (clobber (reg:SI FCC0_REGNUM)) + (clobber (reg:SI FCC1_REGNUM)) + (clobber (reg:SI FCC2_REGNUM)) + (clobber (reg:SI FCC3_REGNUM)) + (clobber (reg:SI FCC4_REGNUM)) + (clobber (reg:SI FCC5_REGNUM)) + (clobber (reg:SI FCC6_REGNUM)) + (clobber (reg:SI FCC7_REGNUM)) + (clobber (reg:SI RETURN_ADDR_REGNUM)) + (clobber (match_operand:DI 1 "register_operand" "=&r"))] + "TARGET_TLS_DESC && TARGET_CMODEL_EXTREME" +{ + return TARGET_EXPLICIT_RELOCS + ? "pcalau12i\t$r4,%%desc_pc_hi20(%0)\n\t" + "addi.d\t%1,$r0,%%desc_pc_lo12(%0)\n\t" + "lu32i.d\t%1,%%desc64_pc_lo20(%0)\n\t" + "lu52i.d\t%1,%1,%%desc64_pc_hi12(%0)\n\t" + "add.d\t$r4,$r4,%1\n\t" + "ld.d\t$r1,$r4,%%desc_ld(%0)\n\t" + "jirl\t$r1,$r1,%%desc_call(%0)" + : "la.tls.desc\t$r4,%1,%0"; +} + [(set_attr "got" "load") + (set_attr "length" "28")]) + (define_insn "@load_tls<mode>" [(set (match_operand:P 0 "register_operand" "=r") (unspec:P diff --git a/gcc/config/loongarch/loongarch.opt b/gcc/config/loongarch/loongarch.opt index 317cd11a67ca..773747f2addd 100644 --- a/gcc/config/loongarch/loongarch.opt +++ b/gcc/config/loongarch/loongarch.opt @@ -253,6 +253,20 @@ mpass-mrelax-to-as Driver Var(la_pass_mrelax_to_as) Init(HAVE_AS_MRELAX_OPTION) Pass -mrelax or -mno-relax option to the assembler. +Enum +Name(tls_type) Type(int) +The possible TLS dialects: + +EnumValue +Enum(tls_type) String(trad) Value(TLS_TRADITIONAL) + +EnumValue +Enum(tls_type) String(desc) Value(TLS_DESCRIPTORS) + +mtls-dialect= +Target RejectNegative Joined Enum(tls_type) Var(la_opt_tls_dialect) Init(M_OPT_UNSET) Save +Specify TLS dialect. + -param=loongarch-vect-unroll-limit= Target Joined UInteger Var(la_vect_unroll_limit) Init(6) IntegerRange(1, 64) Param Used to limit unroll factor which indicates how much the autovectorizer may diff --git a/gcc/config/loongarch/loongarch.opt.urls b/gcc/config/loongarch/loongarch.opt.urls index 8e16304b66a0..88f0bb0f96fa 100644 --- a/gcc/config/loongarch/loongarch.opt.urls +++ b/gcc/config/loongarch/loongarch.opt.urls @@ -64,6 +64,9 @@ UrlSuffix(gcc/LoongArch-Options.html#index-mdirect-extern-access) ; skipping UrlSuffix for 'mrelax' due to finding no URLs +mtls-dialect= +UrlSuffix(gcc/LoongArch-Options.html#index-mtls-dialect-1) + mfrecipe UrlSuffix(gcc/LoongArch-Options.html#index-mfrecipe) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 942103c23f54..3257563ee867 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1060,7 +1060,8 @@ Objective-C and Objective-C++ Dialects}. -mdirect-extern-access -mno-direct-extern-access -mcmodel=@var{code-model} -mrelax -mpass-mrelax-to-as -mrecip -mrecip=@var{opt} -mfrecipe -mno-frecipe -mdiv32 -mno-div32 --mlam-bh -mno-lam-bh -mlamcas -mno-lamcas -mld-seq-sa -mno-ld-seq-sa} +-mlam-bh -mno-lam-bh -mlamcas -mno-lamcas -mld-seq-sa -mno-ld-seq-sa +-mtls-dialect=@var{opt}} @emph{M32R/D Options} @gccoptlist{-m32r2 -m32rx -m32r @@ -27136,6 +27137,19 @@ Whether a load-load barrier (@code{dbar 0x700}) is needed. When build with @option{-march=la664}, it is enabled by default. The default is @option{-mno-ld-seq-sa}, the load-load barrier is needed. +@opindex mtls-dialect +@item -mtls-dialect=@var{opt} +This option controls which tls dialect may be used for general dynamic and +local dynamic TLS models. + +@table @samp +@item trad +Use traditional TLS. This is the default. + +@item desc +Use TLS descriptors. +@end table + @item loongarch-vect-unroll-limit The vectorizer will use available tuning information to determine whether it would be beneficial to unroll the main vectorized loop and by how much. This diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c index 564ee4017f74..6269607e7df3 100644 --- a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c +++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -fno-plt -mexplicit-relocs=always -fdump-rtl-final" } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=always -fdump-rtl-final" } */ int a; extern int b; diff --git a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c index ce834805f384..35f6ee0bb301 100644 --- a/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c +++ b/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -fno-plt -mexplicit-relocs=auto -fdump-rtl-final" } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=auto -fdump-rtl-final" } */ #include "cmodel-extreme-1.c" diff --git a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c new file mode 100644 index 000000000000..0fc7a1a51176 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fPIC -mcmodel=extreme -mexplicit-relocs=auto -mtls-dialect=desc" } */ + +__thread int a __attribute__((visibility("hidden"))); +extern __thread int b __attribute__((visibility("default"))); + +int test() { return a + b; } + +/* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\\$r12,\\.LANCHOR0" { target tls_native } } } */ +/* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\\$r12,\\.LANCHOR0" { target tls_native } } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c new file mode 100644 index 000000000000..37947ecfdc81 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=desc" } */ + +__thread int a __attribute__((visibility("hidden"))); +extern __thread int b __attribute__((visibility("default"))); + +int test() { return a + b; } + +/* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\.LANCHOR0" { target tls_native } } } */ +/* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\.LANCHOR0" { target tls_native } } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c index ca55fcfc53e9..b47e37c822cb 100644 --- a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c +++ b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fPIC -mexplicit-relocs=auto" } */ +/* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=trad" } */ __thread int a __attribute__((visibility("hidden"))); extern __thread int b __attribute__((visibility("default"))); diff --git a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c new file mode 100644 index 000000000000..3797556e1e6f --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fPIC -mexplicit-relocs -mtls-dialect=desc -mcmodel=extreme" } */ + +__thread int a __attribute__((visibility("hidden"))); +extern __thread int b __attribute__((visibility("default"))); + +int test() { return a + b; } + +/* { dg-final { scan-assembler "pcalau12i\t\\\$r4,%desc_pc_hi20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "addi.d\t\\\$r12,\\\$r0,%desc_pc_lo12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "lu32i.d\t\\\$r12,%desc64_pc_lo20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "lu52i.d\t\\\$r12,\\\$r12,%desc64_pc_hi12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "add.d\t\\\$r4,\\\$r4,\\\$r12" { target tls_native } } } */ +/* { dg-final { scan-assembler "ld.d\t\\\$r1,\\\$r4,%desc_ld\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "jirl\t\\\$r1,\\\$r1,%desc_call\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "add.d\t\\\$r12,\\\$r4,\\\$r2" { target tls_native } } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c index d1a4820834c9..cfb8553236a7 100644 --- a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c +++ b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mcmodel=medium -fplt" } */ +/* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=trad -mcmodel=medium -fplt" } */ /* { dg-final { scan-assembler "pcaddu18i\t\\\$r1,%call36\\\(__tls_get_addr\\\)" { target { tls_native && loongarch_call36_support } } } } */ #include "./explicit-relocs-auto-tls-ld-gd.c" diff --git a/gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c new file mode 100644 index 000000000000..f66903091569 --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fPIC -mexplicit-relocs -mtls-dialect=desc" } */ + +__thread int a __attribute__((visibility("hidden"))); +extern __thread int b __attribute__((visibility("default"))); + +int test() { return a + b; } + +/* { dg-final { scan-assembler "pcalau12i\t\\\$r4,%desc_pc_hi20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "addi.d\t\\\$r4,\\\$r4,%desc_pc_lo12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "ld.d\t\\\$r1,\\\$r4,%desc_ld\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "jirl\t\\\$r1,\\\$r1,%desc_call\\\(\\.LANCHOR0\\\)" { target tls_native } } } */ +/* { dg-final { scan-assembler "add.d\t\\\$r12,\\\$r4,\\\$r2" { target tls_native } } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c index 6339e832fe58..5e81df55207b 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mno-explicit-relocs -mcmodel=medium" } */ +/* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */ /* { dg-final { scan-assembler "test1:.*la\.global\t.*f\n\tjirl" } } */ /* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c index a53e75e0bf92..d73df2dd8c25 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mno-explicit-relocs -mcmodel=medium" } */ +/* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */ /* { dg-final { scan-assembler "test1:.*la\.local\t.*f\n\tjirl" } } */ /* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c index 0da7bf98e3c2..88a66745070e 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mno-explicit-relocs -mcmodel=medium" } */ +/* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */ /* { dg-final { scan-assembler "test1:.*la\.global\t.*f\n\tjirl" } } */ /* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/func-call-medium-4.c b/gcc/testsuite/gcc.target/loongarch/func-call-medium-4.c index 0219688ae804..f9dc12feaf54 100644 --- a/gcc/testsuite/gcc.target/loongarch/func-call-medium-4.c +++ b/gcc/testsuite/gcc.target/loongarch/func-call-medium-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mno-explicit-relocs -mcmodel=medium" } */ +/* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */ /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */ /* { dg-final { scan-assembler "test1:.*la\.local\t.*f\n\tjirl" } } */ /* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c b/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c index 4341f82129ce..4adda4202fdd 100644 --- a/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c +++ b/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -fno-plt -mexplicit-relocs=none" } */ +/* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=none" } */ /* { dg-final { scan-assembler "test_le:.*la.tls.le\t\\\$r\[0-9\]+,\\\.L" { target tls_native } } } */ /* { dg-final { scan-assembler "test_ie:.*la.tls.ie\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,\\\.L" { target tls_native } } } */ /* { dg-final { scan-assembler "test_ld:.*la.tls.ld\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,\\\.L.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */ diff --git a/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c b/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c index 9432c477e9d6..dfa1bf53c92e 100644 --- a/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c +++ b/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O0 -fno-plt -mcmodel=normal -mexplicit-relocs" } */ +/* { dg-options "-O0 -fno-plt -mcmodel=normal -mtls-dialect=trad -mexplicit-relocs" } */ /* { dg-final { scan-assembler "pcalau12i\t.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */ __attribute__ ((tls_model ("global-dynamic"))) __thread int a; From 078f4a958cd2267d5b1dccda838785836ac19b79 Mon Sep 17 00:00:00 2001 From: Yang Yujie <yangyujie@loongson.cn> Date: Tue, 2 Apr 2024 09:20:32 +0800 Subject: [PATCH 330/551] LoongArch: Fix missing plugin header gcc/ChangeLog: * config/loongarch/t-loongarch: Add loongarch-def-arrays.h to OPTION_H_EXTRA. --- gcc/config/loongarch/t-loongarch | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/config/loongarch/t-loongarch b/gcc/config/loongarch/t-loongarch index 3dd7c4b031e6..acf5da953103 100644 --- a/gcc/config/loongarch/t-loongarch +++ b/gcc/config/loongarch/t-loongarch @@ -18,8 +18,9 @@ GTM_H += loongarch-multilib.h -OPTIONS_H_EXTRA += $(srcdir)/config/loongarch/loongarch-def.h \ - $(srcdir)/config/loongarch/loongarch-tune.h \ +OPTIONS_H_EXTRA += $(srcdir)/config/loongarch/loongarch-def.h \ + $(srcdir)/config/loongarch/loongarch-def-array.h \ + $(srcdir)/config/loongarch/loongarch-tune.h \ $(srcdir)/config/loongarch/loongarch-cpucfg-map.h # Canonical target triplet from config.gcc From c85c2e26b8de2781ac22e7687e8c9652a56b0a07 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Fri, 8 Mar 2024 09:21:39 +0000 Subject: [PATCH 331/551] testsuite, Darwin: Update bad-mapper-1 after libiberty changes. A recent change to libiberty has improved the process spawning on older Darwin platforms. This patch updates the expected test output after the changes. gcc/testsuite/ChangeLog: * g++.dg/modules/bad-mapper-1.C: Update expected test output for earlier Darwin. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/testsuite/g++.dg/modules/bad-mapper-1.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/g++.dg/modules/bad-mapper-1.C b/gcc/testsuite/g++.dg/modules/bad-mapper-1.C index b0b0b86c9cda..3dfb5a6073ef 100644 --- a/gcc/testsuite/g++.dg/modules/bad-mapper-1.C +++ b/gcc/testsuite/g++.dg/modules/bad-mapper-1.C @@ -1,9 +1,9 @@ // { dg-additional-options "-fmodules-ts -fmodule-mapper=|this-will-not-work" } import unique1.bob; -// { dg-error "-:failed (exec|CreateProcess|posix_spawn).*mapper.* .*this-will-not-work" "" { target { ! { *-*-darwin[89]* *-*-darwin10* hppa*-*-hpux* } } } 0 } +// { dg-error "-:failed (exec|CreateProcess|posix_spawn).*mapper.* .*this-will-not-work" "" { target { ! { hppa*-*-hpux* } } } 0 } // { dg-prune-output "fatal error:" } // { dg-prune-output "failed to read" } // { dg-prune-output "compilation terminated" } -// { dg-error "-:failed mapper handshake communication" "" { target { *-*-darwin[89]* *-*-darwin10* hppa*-*-hpux* } } 0 } +// { dg-error "-:failed mapper handshake communication" "" { target { hppa*-*-hpux* } } 0 } // { dg-prune-output "trying to exec .this-will-not-work." } // { dg-prune-output "unknown Compiled Module Interface" } From 3c499f8f6f7d19b21d7047efabbe6396ee1c2cac Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Sun, 31 Mar 2024 23:25:31 +0100 Subject: [PATCH 332/551] Darwin: Do not emit .macinfo when dsymutil cannot consume it. Some verions of dsymutil do not ignore .macinfo sections, but instead ignore the entire debug in the file. To avoid this total loss of debug, when we detect that the debug level is g3 and the dsymutil version cannot support it, we reduce the level to g2 and issue a note. This behaviour can be overidden by -gstrict-dwarf (although the objects will contain macinfo; dsymutil will not produce a .dSYM with it). gcc/ChangeLog: * config/darwin.cc (darwin_override_options): Reduce the debug level to 2 if dsymutil cannot handle .macinfo sections. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/config/darwin.cc | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc index 9e5d64e6f32c..c37a1a4756f2 100644 --- a/gcc/config/darwin.cc +++ b/gcc/config/darwin.cc @@ -3415,11 +3415,6 @@ darwin_override_options (void) global_options.x_flag_objc_abi); } - /* Limit DWARF to the chosen version, the linker and debug linker might not - be able to consume newer structures. */ - if (!OPTION_SET_P (dwarf_strict)) - dwarf_strict = 1; - if (!OPTION_SET_P (dwarf_version)) { /* External toolchains based on LLVM or clang 7+ have support for @@ -3442,6 +3437,24 @@ darwin_override_options (void) OPTION_SET_P (dwarf_split_debug_info) = 0; } + /* Cases where dsymutil will exclude files with .macinfo sections; we are + better off forcing the debug level to 2 than completely excluding the + files. If strict dwarf is set, then emit the macinfo anyway. */ + if (debug_info_level == DINFO_LEVEL_VERBOSE + && (!OPTION_SET_P (dwarf_strict) || dwarf_strict == 0) + && ((dsymutil_version.kind == CLANG && dsymutil_version.major >= 1500) + || (dsymutil_version.kind == LLVM && dsymutil_version.major >= 15))) + { + inform (input_location, + "%<-g3%> is not supported by the debug linker in use (set to 2)"); + debug_info_level = DINFO_LEVEL_NORMAL; + } + + /* Limit DWARF to the chosen version, the linker and debug linker might not + be able to consume newer structures. */ + if (!OPTION_SET_P (dwarf_strict)) + dwarf_strict = 1; + /* Do not allow unwind tables to be generated by default for m32. fnon-call-exceptions will override this, regardless of what we do. */ if (generating_for_darwin_version < 10 From 451bb0b9262d2f54173937569a29d7f1ad234e30 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Mon, 1 Apr 2024 20:47:25 +0100 Subject: [PATCH 333/551] Darwin: Correct a version check. When the version for dsymutil comes from a clang build, it is of the form NNmm.pp.qq where NN and mm are the major and minor LLVM version components. We need to check for a major version greater than or equal to 7 - so use 700 in the check. gcc/ChangeLog: * config/darwin.cc (darwin_override_options): Update the clang major version value in the dsymutil check. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/config/darwin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc index c37a1a4756f2..63b8c509405d 100644 --- a/gcc/config/darwin.cc +++ b/gcc/config/darwin.cc @@ -3420,7 +3420,7 @@ darwin_override_options (void) /* External toolchains based on LLVM or clang 7+ have support for dwarf-4. */ if ((dsymutil_version.kind == LLVM && dsymutil_version.major >= 7) - || (dsymutil_version.kind == CLANG && dsymutil_version.major >= 7)) + || (dsymutil_version.kind == CLANG && dsymutil_version.major >= 700)) dwarf_version = 4; else if (dsymutil_version.kind == DWARFUTILS && dsymutil_version.major >= 121) From ad8e34eaa870608e2b07b4e7147e6ef2944bb8b5 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Sun, 31 Mar 2024 11:27:53 +0100 Subject: [PATCH 334/551] testsuite, Darwin: Allow for an undefined symbol [PR114036]. Darwin's linker defaults to requiring all symbols to be defined at static link time (unless specifically noted or dynamic lookuo is enabled). For this test, we just need to note that the symbol is expected to be undefined. PR testsuite/114036 gcc/testsuite/ChangeLog: * gcc.misc-tests/gcov-14.c: Allow for 'Foo' to be undefined on Darwin link lines. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/testsuite/gcc.misc-tests/gcov-14.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.misc-tests/gcov-14.c b/gcc/testsuite/gcc.misc-tests/gcov-14.c index 2bebf7e4a939..61a9191c0687 100644 --- a/gcc/testsuite/gcc.misc-tests/gcov-14.c +++ b/gcc/testsuite/gcc.misc-tests/gcov-14.c @@ -3,7 +3,7 @@ /* { dg-do run { target native } } */ /* { dg-options "-O2 -fprofile-arcs -ftest-coverage -fgnu89-inline" } */ /* The following line arranges that Darwin has behavior like elf weak import. */ -/* { dg-additional-options "-flat_namespace -undefined suppress" { target *-*-darwin* } } */ +/* { dg-additional-options "-Wl,-U,_Foo" { target *-*-darwin* } } */ /* { dg-require-weak "" } */ /* { dg-skip-if "undefined weak not supported" { { hppa*-*-hpux* } && { ! lp64 } } } */ /* { dg-skip-if "undefined weak not supported" { powerpc-ibm-aix* } } */ From 799a056cf804f433ce0050a5a6bf900f7a01ecb1 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Sun, 31 Mar 2024 11:22:58 +0100 Subject: [PATCH 335/551] testsuite: Remove duplicate -lgcov [PR114034] Duplicate library entries now cause linker warnings with newer linker versions on Darwin which leads to these tests regressing. The library is already added by the test flags so there is no need to put an extra one in the options. PR testsuite/114034 gcc/testsuite/ChangeLog: * g++.dg/gcov/gcov-dump-1.C: Remove extra -lgcov. * g++.dg/gcov/gcov-dump-2.C: Likewise. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/testsuite/g++.dg/gcov/gcov-dump-1.C | 2 +- gcc/testsuite/g++.dg/gcov/gcov-dump-2.C | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C b/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C index f0e81e9b0425..774a7269ff2c 100644 --- a/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C +++ b/gcc/testsuite/g++.dg/gcov/gcov-dump-1.C @@ -1,4 +1,4 @@ -/* { dg-options "-fprofile-generate -ftest-coverage -lgcov" } */ +/* { dg-options "-fprofile-generate -ftest-coverage " } */ /* { dg-do run { target native } } */ int value; diff --git a/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C b/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C index 6234a81a5868..e748989d2c0b 100644 --- a/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C +++ b/gcc/testsuite/g++.dg/gcov/gcov-dump-2.C @@ -1,4 +1,4 @@ -/* { dg-options "-fprofile-generate -ftest-coverage -lgcov" } */ +/* { dg-options "-fprofile-generate -ftest-coverage " } */ /* { dg-do run { target native } } */ int value; From b120e355e59142bd15d6b010461d07236288d843 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Sat, 13 Jan 2024 17:20:47 +0000 Subject: [PATCH 336/551] jit, Darwin: Implement library exports list. Currently, we have no exports list for libgccjit, which means that all symbols are exported, including those from libstdc++ which is linked statically into the lib. This causes failures when the shared libstdc++ is used but some c++ symbols are satisfied from libgccjit. This implements an export file for Darwin (which is currently manually created by cross-checking libgccjit.map). Ideally we'd script this, at some point. Update libtool current and age to reflect the current ABI version (we are not bumping the SO name at this stage). This fixes a number of new failures in jit testing. gcc/jit/ChangeLog: * Make-lang.in: Implement exports list, and use a shared libgcc. * libgccjit.exports: New file. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/jit/Make-lang.in | 47 +++++--- gcc/jit/libgccjit.exports | 233 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 263 insertions(+), 17 deletions(-) create mode 100644 gcc/jit/libgccjit.exports diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in index b1f0ce73e124..99b3d549d5d4 100644 --- a/gcc/jit/Make-lang.in +++ b/gcc/jit/Make-lang.in @@ -55,7 +55,17 @@ else ifneq (,$(findstring darwin,$(host))) -LIBGCCJIT_AGE = 1 +# NOTE that we are building here for the host, and so tests for target- +# specific functionality will only work when host == target. This causes +# fails when building cross-compilers with different object formats (at +# least when the respective linkers do not accept the same command line +# options). Fortunately, for Darwin we can safely hard-code the relevant +# host options, since all usable linkers support them). + +LIBGCCJIT_CURRENT = 26 +LIBGCCJIT_REVISION = 0 +LIBGCCJIT_AGE = 26 +LIBGCCJIT_COMPAT = 0 LIBGCCJIT_BASENAME = libgccjit LIBGCCJIT_SONAME = \ @@ -63,18 +73,18 @@ LIBGCCJIT_SONAME = \ LIBGCCJIT_FILENAME = $(LIBGCCJIT_BASENAME).$(LIBGCCJIT_VERSION_NUM).dylib LIBGCCJIT_LINKER_NAME = $(LIBGCCJIT_BASENAME).dylib -# Conditionalize the use of the LD_VERSION_SCRIPT_OPTION and -# LD_SONAME_OPTION depending if configure found them, using $(if) -# We have to define a COMMA here, otherwise the commas in the "true" -# result are treated as separators by the $(if). +# Darwin does not have a version script option. Exported symbols are controlled +# by the following, and library versioning is done using libtool. +# We have to define a COMMA here, otherwise the commas are treated as +# separators. COMMA := , LIBGCCJIT_VERSION_SCRIPT_OPTION = \ - $(if $(LD_VERSION_SCRIPT_OPTION),\ - -Wl$(COMMA)$(LD_VERSION_SCRIPT_OPTION)$(COMMA)$(srcdir)/jit/libgccjit.map) + -Wl$(COMMA)-exported_symbols_list$(COMMA)$(srcdir)/jit/libgccjit.exports +# For Darwin host, we need a l64 or ld64-compatible linker, that uses +# -install_name to introduce this. LIBGCCJIT_SONAME_OPTION = \ - $(if $(LD_SONAME_OPTION), \ - -Wl$(COMMA)$(LD_SONAME_OPTION)$(COMMA)$(LIBGCCJIT_SONAME)) + -Wl$(COMMA)-install_name$(COMMA)$(LIBGCCJIT_SONAME) LIBGCCJIT_SONAME_SYMLINK = $(LIBGCCJIT_FILENAME) LIBGCCJIT_LINKER_NAME_SYMLINK = $(LIBGCCJIT_LINKER_NAME) @@ -143,15 +153,18 @@ ifneq (,$(findstring mingw,$(target))) # Create import library LIBGCCJIT_EXTRA_OPTS = -Wl,--out-implib,$(LIBGCCJIT_IMPORT_LIB) else - ifneq (,$(findstring darwin,$(host))) -# TODO : Construct a Darwin-style symbol export file. -LIBGCCJIT_EXTRA_OPTS = -Wl,-compatibility_version,$(LIBGCCJIT_VERSION_NUM) \ - -Wl,-current_version,$(LIBGCCJIT_VERSION_NUM).$(LIBGCCJIT_MINOR_NUM).$(LIBGCCJIT_AGE) \ - $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \ - $(LIBGCCJIT_SONAME_OPTION) +LIBGCCJIT_VERS = $(LIBGCCJIT_CURRENT).$(LIBGCCJIT_REVISION).$(LIBGCCJIT_AGE) +LIBGCCJIT_EXTRA_OPTS = -Wl,-current_version,$(LIBGCCJIT_VERS) \ + -Wl,-compatibility_version,$(LIBGCCJIT_COMPAT) \ + $(LIBGCCJIT_VERSION_SCRIPT_OPTION) $(LIBGCCJIT_SONAME_OPTION) +# Use the default (shared) libgcc. +JIT_LDFLAGS = $(filter-out -static-libgcc, $(LDFLAGS)) +ifeq (,$(findstring darwin8,$(host))) +JIT_LDFLAGS += -Wl,-rpath,@loader_path +endif else - +JIT_LDFLAGS = $(LDFLAGS) LIBGCCJIT_EXTRA_OPTS = $(LIBGCCJIT_VERSION_SCRIPT_OPTION) \ $(LIBGCCJIT_SONAME_OPTION) endif @@ -170,7 +183,7 @@ $(LIBGCCJIT_FILENAME): $(jit_OBJS) \ $(LIBDEPS) $(srcdir)/jit/libgccjit.map \ $(EXTRA_GCC_OBJS_EXCLUSIVE) $(jit.prev) @$(call LINK_PROGRESS,$(INDEX.jit),start) - +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ -shared \ + +$(LLINKER) $(ALL_LINKERFLAGS) $(JIT_LDFLAGS) -o $@ -shared \ $(jit_OBJS) libbackend.a libcommon-target.a libcommon.a \ $(CPPLIB) $(LIBDECNUMBER) $(EXTRA_GCC_LIBS) $(LIBS) $(BACKENDLIBS) \ $(EXTRA_GCC_OBJS_EXCLUSIVE) \ diff --git a/gcc/jit/libgccjit.exports b/gcc/jit/libgccjit.exports new file mode 100644 index 000000000000..e32bbe2fd408 --- /dev/null +++ b/gcc/jit/libgccjit.exports @@ -0,0 +1,233 @@ +# Linker export list for Darwin libgccjit.dylib + +# Contributed by Iain Sandoe <iain@sandoe.co.uk>. +# +# This file is part of GCC. +# +# GCC is free software you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. */ + +# The initial release of the library. +# Keep this list sorted alphabetically: +_gcc_jit_block_add_assignment +_gcc_jit_block_add_assignment_op +_gcc_jit_block_add_comment +_gcc_jit_block_add_eval +_gcc_jit_block_as_object +_gcc_jit_block_end_with_conditional +_gcc_jit_block_end_with_jump +_gcc_jit_block_end_with_return +_gcc_jit_block_end_with_void_return +_gcc_jit_block_get_function +_gcc_jit_context_acquire +_gcc_jit_context_compile +_gcc_jit_context_compile_to_file +_gcc_jit_context_dump_to_file +_gcc_jit_context_dump_reproducer_to_file +_gcc_jit_context_enable_dump +_gcc_jit_context_get_builtin_function +_gcc_jit_context_get_first_error +_gcc_jit_context_get_last_error +_gcc_jit_context_get_type +_gcc_jit_context_get_int_type +_gcc_jit_context_new_array_access +_gcc_jit_context_new_array_type +_gcc_jit_context_new_binary_op +_gcc_jit_context_new_call +_gcc_jit_context_new_call_through_ptr +_gcc_jit_context_new_cast +_gcc_jit_context_new_child_context +_gcc_jit_context_new_comparison +_gcc_jit_context_new_field +_gcc_jit_context_new_function +_gcc_jit_context_new_function_ptr_type +_gcc_jit_context_new_global +_gcc_jit_context_new_location +_gcc_jit_context_new_opaque_struct +_gcc_jit_context_new_param +_gcc_jit_context_new_rvalue_from_double +_gcc_jit_context_new_rvalue_from_int +_gcc_jit_context_new_rvalue_from_long +_gcc_jit_context_new_rvalue_from_ptr +_gcc_jit_context_new_string_literal +_gcc_jit_context_new_struct_type +_gcc_jit_context_new_unary_op +_gcc_jit_context_new_union_type +_gcc_jit_context_null +_gcc_jit_context_one +_gcc_jit_context_release +_gcc_jit_context_set_bool_option +_gcc_jit_context_set_int_option +_gcc_jit_context_set_logfile +_gcc_jit_context_set_str_option +_gcc_jit_context_zero +_gcc_jit_field_as_object +_gcc_jit_function_as_object +_gcc_jit_function_dump_to_dot +_gcc_jit_function_get_param +_gcc_jit_function_new_block +_gcc_jit_function_new_local +_gcc_jit_location_as_object +_gcc_jit_lvalue_as_object +_gcc_jit_lvalue_as_rvalue +_gcc_jit_lvalue_access_field +_gcc_jit_lvalue_get_address +_gcc_jit_object_get_context +_gcc_jit_object_get_debug_string +_gcc_jit_param_as_lvalue +_gcc_jit_param_as_object +_gcc_jit_param_as_rvalue +_gcc_jit_result_get_code +_gcc_jit_result_get_global +_gcc_jit_result_release +_gcc_jit_rvalue_access_field +_gcc_jit_rvalue_as_object +_gcc_jit_rvalue_dereference +_gcc_jit_rvalue_dereference_field +_gcc_jit_rvalue_get_type +_gcc_jit_struct_as_type +_gcc_jit_struct_set_fields +_gcc_jit_type_as_object +_gcc_jit_type_get_const +_gcc_jit_type_get_pointer +_gcc_jit_type_get_volatile + +# Add support for adding arbitrary command-line options (PR jit/66628). +# LIBGCCJIT_ABI_1 +_gcc_jit_context_add_command_line_option + +# Add support for disabling the check for unreachable blocks (PR jit/66546). +# LIBGCCJIT_ABI_2 +_gcc_jit_context_set_bool_allow_unreachable_blocks + +# Add support for switch statements. +# LIBGCCJIT_ABI_3 +_gcc_jit_block_end_with_switch +_gcc_jit_case_as_object +_gcc_jit_context_new_case + +# Add timing API. +#LIBGCCJIT_ABI_4 +_gcc_jit_context_get_timer +_gcc_jit_context_set_timer +_gcc_jit_timer_new +_gcc_jit_timer_release +_gcc_jit_timer_push +_gcc_jit_timer_pop +_gcc_jit_timer_print + +# LIBGCCJIT_ABI_5 +_gcc_jit_context_set_bool_use_external_driver + +# LIBGCCJIT_ABI_6 +_gcc_jit_rvalue_set_bool_require_tail_call + +# LIBGCCJIT_ABI_7 +_gcc_jit_type_get_aligned + +# LIBGCCJIT_ABI_8 +_gcc_jit_type_get_vector + +# LIBGCCJIT_ABI_9 +_gcc_jit_function_get_address + +# LIBGCCJIT_ABI_10 +_gcc_jit_context_new_rvalue_from_vector + +# LIBGCCJIT_ABI_11 +_gcc_jit_context_add_driver_option + +# LIBGCCJIT_ABI_12 +_gcc_jit_context_new_bitfield + +# LIBGCCJIT_ABI_13 +_gcc_jit_version_major +_gcc_jit_version_minor +_gcc_jit_version_patchlevel + +# LIBGCCJIT_ABI_14 +_gcc_jit_global_set_initializer + +# LIBGCCJIT_ABI_15 +_gcc_jit_block_add_extended_asm +_gcc_jit_block_end_with_extended_asm_goto +_gcc_jit_extended_asm_as_object +_gcc_jit_extended_asm_set_volatile_flag +_gcc_jit_extended_asm_set_inline_flag +_gcc_jit_extended_asm_add_output_operand +_gcc_jit_extended_asm_add_input_operand +_gcc_jit_extended_asm_add_clobber +_gcc_jit_context_add_top_level_asm + +# LIBGCCJIT_ABI_16 +_gcc_jit_function_get_return_type +_gcc_jit_function_get_param_count +_gcc_jit_function_type_get_return_type +_gcc_jit_function_type_get_param_count +_gcc_jit_function_type_get_param_type +_gcc_jit_type_unqualified +_gcc_jit_type_dyncast_array +_gcc_jit_type_is_bool +_gcc_jit_type_dyncast_function_ptr_type +_gcc_jit_type_is_integral +_gcc_jit_type_is_pointer +_gcc_jit_type_dyncast_vector +_gcc_jit_vector_type_get_element_type +_gcc_jit_vector_type_get_num_units +_gcc_jit_struct_get_field +_gcc_jit_type_is_struct +_gcc_jit_struct_get_field_count + +# LIBGCCJIT_ABI_17 +_gcc_jit_lvalue_set_tls_model + +# LIBGCCJIT_ABI_18 +_gcc_jit_lvalue_set_link_section + +#LIBGCCJIT_ABI_19 +_gcc_jit_context_new_array_constructor +_gcc_jit_context_new_struct_constructor +_gcc_jit_context_new_union_constructor +_gcc_jit_global_set_initializer_rvalue + +# LIBGCCJIT_ABI_20 +_gcc_jit_compatible_types +_gcc_jit_type_get_size + +# LIBGCCJIT_ABI_21 +_gcc_jit_context_new_bitcast + +# LIBGCCJIT_ABI_22 +_gcc_jit_lvalue_set_register_name + +# LIBGCCJIT_ABI_23 +_gcc_jit_context_set_bool_print_errors_to_stderr + +# LIBGCCJIT_ABI_24 +_gcc_jit_lvalue_set_alignment +_gcc_jit_lvalue_get_alignment + +# LIBGCCJIT_ABI_25 +_gcc_jit_type_get_restrict + +# LIBGCCJIT_ABI_26 +_gcc_jit_function_add_attribute +_gcc_jit_function_add_string_attribute +_gcc_jit_lvalue_add_string_attribute +_gcc_jit_function_add_integer_array_attribute + +# LIBGCCJIT_ABI_27 +_gcc_jit_context_new_sizeof + + From 94792057ad4a81bb10cdd20085c31df3ca59177e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 2 Apr 2024 13:39:11 +0200 Subject: [PATCH 337/551] Fix up duplicated words mostly in comments, part 1 Like in r12-7519-g027e30414492d50feb2854aff38227b14300dc4b, I've done git grep -v 'long long\|optab optab\|template template\|double double' | grep ' \([a-zA-Z]\+\) \1 ' This is just part of the changes, mostly for non-gcc directories. I'll try to get to the rest soon. Obviously, the above command also finds cases which are correct as is and shouldn't be changed, so one needs to manually inspect everything. I'd hope most of it is pretty obvious, but the config/ and libstdc++-v3/ hunks include a tweak in a license wording, though other copies of the similar license have the wording right. 2024-04-02 Jakub Jelinek <jakub@redhat.com> * Makefile.tpl: Fix duplicated words; returns returns -> returns. config/ * lcmessage.m4: Fix duplicated words; can can -> can, package package -> package. libdecnumber/ * decCommon.c (decFinalize): Fix duplicated words in comment; the the -> the. libgcc/ * unwind-dw2-fde.c (struct fde_accumulator): Fix duplicated words in comment; is is -> is. libgfortran/ * configure.host: Fix duplicated words; the the -> the. libgm2/ * configure.host: Fix duplicated words; the the -> the. libgomp/ * libgomp.texi (OpenMP 5.2): Fix duplicated words; with with -> with. (omp_target_associate_ptr): Fix duplicated words; either either -> either. (omp_init_allocator): Fix duplicated words; be be -> be. (omp_realloc): Fix duplicated words; is is -> is. (OMP_ALLOCATOR): Fix duplicated words; other other -> other. * priority_queue.h (priority_queue_multi_p): Fix duplicated words; to to -> to. libiberty/ * regex.c (byte_re_match_2_internal): Fix duplicated words in comment; next next -> next. * dyn-string.c (dyn_string_init): Fix duplicated words in comment; of of -> of. libitm/ * beginend.cc (GTM::gtm_thread::begin_transaction): Fix duplicated words in comment; not not -> not to. libobjc/ * init.c (duplicate_classes): Fix duplicated words in comment; in in -> in. * sendmsg.c (__objc_prepare_dtable_for_class): Fix duplicated words in comment; the the -> the. * encoding.c (objc_layout_structure): Likewise. libstdc++-v3/ * acinclude.m4: Fix duplicated words; file file -> file can. * configure.host: Fix duplicated words; the the -> the. libvtv/ * vtv_rts.cc (vtv_fail): Fix duplicated words; to to -> to. * vtv_fail.cc (vtv_fail): Likewise. --- Makefile.tpl | 2 +- config/lcmessage.m4 | 4 ++-- libdecnumber/decCommon.c | 2 +- libgcc/unwind-dw2-fde.c | 2 +- libgfortran/configure.host | 2 +- libgm2/configure.host | 2 +- libgomp/libgomp.texi | 10 +++++----- libgomp/priority_queue.h | 2 +- libiberty/dyn-string.c | 2 +- libiberty/regex.c | 2 +- libitm/beginend.cc | 2 +- libobjc/encoding.c | 2 +- libobjc/init.c | 2 +- libobjc/sendmsg.c | 2 +- libstdc++-v3/acinclude.m4 | 2 +- libstdc++-v3/configure.host | 2 +- libvtv/vtv_fail.cc | 2 +- libvtv/vtv_rts.cc | 2 +- 18 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Makefile.tpl b/Makefile.tpl index adbcbdd1d572..0d5f0a1b9b09 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -1976,7 +1976,7 @@ configure-target-[+module+]: maybe-all-gcc[+ (define dep-maybe (lambda () (if (exist? "hard") "" "maybe-"))) - ;; dep-kind returns returns "prebootstrap" for configure or build + ;; dep-kind returns "prebootstrap" for configure or build ;; dependencies of bootstrapped modules on a build module ;; (e.g. all-gcc on all-build-bison); "normal" if the dependency is ;; on an "install" target, or if the dependence module is not diff --git a/config/lcmessage.m4 b/config/lcmessage.m4 index ffd4008b8252..62a9186af2f1 100644 --- a/config/lcmessage.m4 +++ b/config/lcmessage.m4 @@ -6,13 +6,13 @@ dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl -dnl This file can can be used in projects which are not available under +dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package package is covered by the GNU General Public License. +dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: diff --git a/libdecnumber/decCommon.c b/libdecnumber/decCommon.c index 6f7563de6e6d..b899263aca99 100644 --- a/libdecnumber/decCommon.c +++ b/libdecnumber/decCommon.c @@ -388,7 +388,7 @@ static decFloat * decFinalize(decFloat *df, bcdnum *num, UBFROMUI(ub-3, 0); /* to 00000000 */ } /* [note ub could now be to left of msd, and it is not safe */ - /* to write to the the left of the msd] */ + /* to write to the left of the msd] */ /* now at most 3 digits left to non-9 (usually just the one) */ for (; ub>=umsd; *ub=0, ub--) { if (*ub==9) continue; /* carry */ diff --git a/libgcc/unwind-dw2-fde.c b/libgcc/unwind-dw2-fde.c index 9d503545677a..eb8f69e62457 100644 --- a/libgcc/unwind-dw2-fde.c +++ b/libgcc/unwind-dw2-fde.c @@ -501,7 +501,7 @@ fde_mixed_encoding_extract (struct object *ob, _Unwind_Ptr *target, typedef void (*fde_extractor_t) (struct object *, _Unwind_Ptr *, const fde **, int); -// Data is is sorted using radix sort if possible, using an temporary +// Data is sorted using radix sort if possible, using an temporary // auxiliary data structure of the same size as the input. When running // out of memory do in-place heap sort. diff --git a/libgfortran/configure.host b/libgfortran/configure.host index 3d6c2db7772e..b15969f0e65a 100644 --- a/libgfortran/configure.host +++ b/libgfortran/configure.host @@ -1,7 +1,7 @@ # configure.host # # This shell script handles all host based configuration for libgfortran. -# It sets various shell variables based on the the host triplet. +# It sets various shell variables based on the host triplet. # You can modify this shell script without rerunning autoconf/aclocal/etc. # This file is "sourced", not executed. # diff --git a/libgm2/configure.host b/libgm2/configure.host index 633678cb3b2c..2806fd6872b3 100644 --- a/libgm2/configure.host +++ b/libgm2/configure.host @@ -1,7 +1,7 @@ # configure.host # # This shell script handles all host based configuration for libstdc++. -# It sets various shell variables based on the the host and the +# It sets various shell variables based on the host and the # configuration options. You can modify this shell script without needing # to rerun autoconf/aclocal/etc. This file is "sourced" not executed. # diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi index 57165e0e9813..1ae0f01ccdc2 100644 --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi @@ -385,7 +385,7 @@ to address of matching mapped list item per 5.1, Sect. 2.21.7.2 @tab N @tab @code{-Wunknown-pragmas} (implied by @code{-Wall}) and @code{-Wattributes} (enabled by default), respectively; for Fortran free-source code, there is a warning enabled by default and, for fixed-source code, the @code{omx} - sentinel is warned for with with @code{-Wsurprising} (enabled by + sentinel is warned for with @code{-Wsurprising} (enabled by @code{-Wall}). Unknown clauses are always rejected with an error.} @item Clauses on @code{end} directive can be on directive @tab Y @tab @item @code{destroy} clause with destroy-var argument on @code{depobj} @@ -2218,7 +2218,7 @@ in the @code{to} and @code{from} clauses of the @code{target update} directive to transfer data between the associated pointers. The reference count of such associated storage is infinite. The association can be removed by calling @code{omp_target_disassociate_ptr} which should be done before the lifetime -of either either storage ends. +of either storage ends. The routine returns nonzero (@code{EINVAL}) when the @var{device_num} invalid, for when the initial device or the associated device shares memory with the @@ -2815,7 +2815,7 @@ traits; if an allocator that fulfills the requirements cannot be created, @code{omp_null_allocator} is returned. The predefined memory spaces and available traits can be found at -@ref{OMP_ALLOCATOR}, where the trait names have to be be prefixed by +@ref{OMP_ALLOCATOR}, where the trait names have to be prefixed by @code{omp_atk_} (e.g. @code{omp_atk_pinned}) and the named trait values by @code{omp_atv_} (e.g. @code{omp_atv_true}); additionally, @code{omp_atv_default} may be used as trait value to specify that the default value should be used. @@ -3210,7 +3210,7 @@ The @var{allocator} and @var{free_allocator} arguments must be a predefined allocator, an allocator handle or @code{omp_null_allocator}. If @var{free_allocator} is @code{omp_null_allocator}, the implementation automatically determines the allocator used for the allocation of @var{ptr}. -If @var{allocator} is @code{omp_null_allocator} and @var{ptr} is is not a +If @var{allocator} is @code{omp_null_allocator} and @var{ptr} is not a null pointer, the same allocator as @code{free_allocator} is used and when @var{ptr} is a null pointer the allocator specified by the @var{def-allocator-var} ICV is used. @@ -3468,7 +3468,7 @@ as listed below. Except that the last three allocators have the For the @code{fallback} trait, the default value is @code{null_fb} for the @code{omp_default_mem_alloc} allocator and any allocator that is associated -with device memory; for all other other allocators, it is @code{default_mem_fb} +with device memory; for all other allocators, it is @code{default_mem_fb} by default. Examples: diff --git a/libgomp/priority_queue.h b/libgomp/priority_queue.h index 17f440b558b1..f0c51de6d1cf 100644 --- a/libgomp/priority_queue.h +++ b/libgomp/priority_queue.h @@ -137,7 +137,7 @@ extern struct gomp_task *priority_tree_next_task (enum priority_queue_type, bool *); /* Return TRUE if there is more than one priority in HEAD. This is - used throughout to to choose between the fast path (priority 0 only + used throughout to choose between the fast path (priority 0 only items) and a world with multiple priorities. */ static inline bool diff --git a/libiberty/dyn-string.c b/libiberty/dyn-string.c index ecd8c0699846..5805c0b4ff8c 100644 --- a/libiberty/dyn-string.c +++ b/libiberty/dyn-string.c @@ -47,7 +47,7 @@ Boston, MA 02110-1301, USA. */ /* Performs in-place initialization of a dyn_string struct. This function can be used with a dyn_string struct on the stack or - embedded in another object. The contents of of the string itself + embedded in another object. The contents of the string itself are still dynamically allocated. The string initially is capable of holding at least SPACE characeters, including the terminating NUL. If SPACE is 0, it will silently be increated to 1. diff --git a/libiberty/regex.c b/libiberty/regex.c index 4841c5a08f97..67747e6ce5a1 100644 --- a/libiberty/regex.c +++ b/libiberty/regex.c @@ -5597,7 +5597,7 @@ byte_re_match_2_internal (struct re_pattern_buffer *bufp, to resume scanning the pattern; the second one is where to resume scanning the strings. If the latter is zero, the failure point is a ``dummy''; if a failure happens and the failure point is a dummy, - it gets discarded and the next next one is tried. */ + it gets discarded and the next one is tried. */ #ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */ PREFIX(fail_stack_type) fail_stack; #endif diff --git a/libitm/beginend.cc b/libitm/beginend.cc index 51480f22a9a6..5ae0fba987cb 100644 --- a/libitm/beginend.cc +++ b/libitm/beginend.cc @@ -200,7 +200,7 @@ GTM::gtm_thread::begin_transaction (uint32_t prop, const gtm_jmpbuf *jb) { // Note that the snapshot of htm_fastpath that we take here could be // outdated, and a different method group than dispatch_htm may have - // been chosen in the meantime. Therefore, take care not not touch + // been chosen in the meantime. Therefore, take care not to touch // anything besides the serial lock, which is independent of method // groups. for (uint32_t t = serial_lock.get_htm_fastpath(); t; t--) diff --git a/libobjc/encoding.c b/libobjc/encoding.c index 789f1bf807c9..7a2d2abe6d14 100644 --- a/libobjc/encoding.c +++ b/libobjc/encoding.c @@ -1088,7 +1088,7 @@ objc_layout_structure (const char *type, && *ntype++ != '=') /* do nothing */; - /* If there's a "<name>=", ntype - 1 points to '='; skip the the name */ + /* If there's a "<name>=", ntype - 1 points to '='; skip the name. */ if (*(ntype - 1) == '=') type = ntype; diff --git a/libobjc/init.c b/libobjc/init.c index 6124764a2e12..6216546084b8 100644 --- a/libobjc/init.c +++ b/libobjc/init.c @@ -63,7 +63,7 @@ static struct objc_list *uninitialized_statics = 0; /* !T:MUTEX */ a class twice, we ignore it the second time. On some platforms, where the order in which modules are loaded is well defined, this allows you to replace a class in a shared library by linking in a - new implementation which is loaded in in the right order, and which + new implementation which is loaded in the right order, and which overrides the existing one. Protected by __objc_runtime_mutex. */ diff --git a/libobjc/sendmsg.c b/libobjc/sendmsg.c index b6307216881f..e781b2a9e505 100644 --- a/libobjc/sendmsg.c +++ b/libobjc/sendmsg.c @@ -1047,7 +1047,7 @@ __objc_prepare_dtable_for_class (Class cls) /* This table could be initialized in init.c. We cannot use the class name since the class maintains the instance methods and the - meta class maintains the the class methods yet both share the + meta class maintains the class methods yet both share the same name. Classes should be unique in any program. */ if (! prepared_dtable_table) prepared_dtable_table diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index f72bd0f45b8b..51a08bcc8b1d 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -4493,7 +4493,7 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [ # Check whether LC_MESSAGES is available in <locale.h>. # Ulrich Drepper <drepper@cygnus.com>, 1995. # -# This file file be copied and used freely without restrictions. It can +# This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host index 9dc42ad3edb5..7bc430716168 100644 --- a/libstdc++-v3/configure.host +++ b/libstdc++-v3/configure.host @@ -1,7 +1,7 @@ # configure.host # # This shell script handles all host based configuration for libstdc++. -# It sets various shell variables based on the the host and the +# It sets various shell variables based on the host and the # configuration options. You can modify this shell script without needing # to rerun autoconf/aclocal/etc. This file is "sourced" not executed. # diff --git a/libvtv/vtv_fail.cc b/libvtv/vtv_fail.cc index d8d9c4bb1d4b..d8b066c1eb0d 100644 --- a/libvtv/vtv_fail.cc +++ b/libvtv/vtv_fail.cc @@ -201,7 +201,7 @@ vtv_fail (const char *msg, void **data_set_ptr, const void *vtbl_ptr) ptr_from_set_handle_handle (*data_set_ptr) : *data_set_ptr); buf_len = strlen (buffer); - /* Send this to to stderr. */ + /* Send this to stderr. */ write (2, buffer, buf_len); if (!vtv_no_abort) diff --git a/libvtv/vtv_rts.cc b/libvtv/vtv_rts.cc index f43a259aa6e8..5524df40e262 100644 --- a/libvtv/vtv_rts.cc +++ b/libvtv/vtv_rts.cc @@ -1791,7 +1791,7 @@ vtv_fail (const char *msg, void **data_set_ptr, const void *vtbl_ptr) ptr_from_set_handle_handle (*data_set_ptr) : *data_set_ptr); buf_len = strlen (buffer); - /* Send this to to stderr. */ + /* Send this to stderr. */ write (2, buffer, buf_len); #ifndef VTV_NO_ABORT From 9a5e4aade2b847c5262577a1490ce6f3df9a9841 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 2 Apr 2024 13:40:27 +0200 Subject: [PATCH 338/551] Fix up postboot dependencies [PR106472] On Wed, Mar 13, 2024 at 10:13:37AM +0100, Jakub Jelinek wrote: > While the first Makefile.tpl hunk looks obviously ok, the others look > completely wrong to me. > There is nothing special about libgo vs. libbacktrace/libatomic > compared to any other target library which is not bootstrapped vs. any > of its dependencies which are in the bootstrapped set. > So, Makefile.tpl shouldn't hardcode such dependencies. Here is my version of the fix. The dependencies in the toplevel Makefile simply didn't take into account that some target modules could be in a bootstrapped build built in some configurations as bootstrap modules (typically as dependencies of other target bootstrap modules), while in other configurations just as dependencies of non-bootstrap target modules and so not built during the bootstrap, but after it. Makefile.tpl arranges for those postboot target module -> target module dependencies to be emitted only inside of an @unless gcc-bootstrap block, while for @if gcc-bootstrap it just emits configure-target-whatever: stage_last dependencies which ensure those postbootstrap target modules are only built after everything that is bootstrapped has been. Now, the libbacktrace/libatomic target modules have bootstrap=true target_modules = { module= libbacktrace; bootstrap=true; }; target_modules = { module= libatomic; bootstrap=true; lib_path=.libs; }; because those modules are dependencies of libphobos target module, so when d is included among bootstrapped languages, those are all bootstrapped and everything works correctly. While if d is not included, libphobos target module is disabled, libbacktrace/libatomic target modules aren't bootstrapped, nothing during bootstrap needs them, but post bootstrap libgo target module depends on the libatomic and libbacktrace target modules, libgfortran target module depends on the libbacktrace target module and libgm2 target module depends on the libatomic target module, but those dependencies were emitted only @unless gcc-bootstrap. There is a similar theoretical problem for zlib target module if GCJ would be ressurected, libphobos as bootstrap target module depends on the zlib target module, but if d is not configured, fastjar also depends on it. The following patch arranges for the @if gcc-bootstrap case to emit also target module -> target module dependencies, but conditionally on the on dependency not being bootstrapped. In the generated Makefile.in you can see what the Makefile.tpl change produces and that it just adds extra dependencies which weren't there before in the @if gcc-bootstrap case. I've bootstrapped without this patch with ../configure --enable-languages=c,c++,go; make on x86_64-linux (note, make -j2 or higher usually worked) which failed as described in the PR, then with this patch with the same command which built fine and the Makefile difference between the two builds being diff -up obj40{a,b}/Makefile --- obj40a/Makefile 2024-03-31 00:35:22.243791499 +0100 +++ obj40b/Makefile 2024-03-31 22:40:38.143299144 +0200 @@ -29376,6 +29376,14 @@ configure-bison: stage_last configure-flex: stage_last configure-m4: stage_last +configure-target-fastjar: maybe-configure-target-zlib +all-target-fastjar: maybe-all-target-zlib +all-target-libgo: maybe-all-target-libbacktrace +all-target-libgo: maybe-all-target-libatomic +all-target-libgm2: maybe-all-target-libatomic +configure-target-libgfortran: maybe-all-target-libbacktrace +configure-target-libgo: maybe-all-target-libbacktrace + # Dependencies for target modules on other target modules are # described by lang_env_dependencies; the defaults apply to anything which I believe are exactly the extra dependencies we want. Plus I've done normal x86_64-linux and i686-linux bootstraps/regtests which in my case include --enable-languages=default,ada,obj-c++,lto,go,d,rust,m2 for x86_64 and the same except ada for i686; those with my usual make -j32. The Makefile difference in those builds vs. unpatched case is just an extra empty line. 2024-04-02 Jakub Jelinek <jakub@redhat.com> PR bootstrap/106472 * Makefile.tpl (make-postboot-target-dep): New lambda. Use it to add --enable-bootstrap dependencies of target modules on other target modules if the latter aren't bootstrapped. * Makefile.in: Regenerate. --- Makefile.in | 33 +++++++++++++++++++++++++++++++++ Makefile.tpl | 24 ++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/Makefile.in b/Makefile.in index edb0c8a9a427..db4fa6c62605 100644 --- a/Makefile.in +++ b/Makefile.in @@ -68677,6 +68677,39 @@ configure-flex: stage_last configure-m4: stage_last @endif gcc-bootstrap +@if gcc-bootstrap +@unless target-zlib-bootstrap +configure-target-fastjar: maybe-configure-target-zlib +@endunless target-zlib-bootstrap +@unless target-zlib-bootstrap +all-target-fastjar: maybe-all-target-zlib +@endunless target-zlib-bootstrap +@unless target-libstdc++-v3-bootstrap +configure-target-libgo: maybe-all-target-libstdc++-v3 +@endunless target-libstdc++-v3-bootstrap +@unless target-libbacktrace-bootstrap +all-target-libgo: maybe-all-target-libbacktrace +@endunless target-libbacktrace-bootstrap +@unless target-libatomic-bootstrap +all-target-libgo: maybe-all-target-libatomic +@endunless target-libatomic-bootstrap +@unless target-libstdc++-v3-bootstrap +configure-target-libgm2: maybe-all-target-libstdc++-v3 +@endunless target-libstdc++-v3-bootstrap +@unless target-libatomic-bootstrap +all-target-libgm2: maybe-all-target-libatomic +@endunless target-libatomic-bootstrap +@unless target-libstdc++-v3-bootstrap +configure-target-libgrust: maybe-all-target-libstdc++-v3 +@endunless target-libstdc++-v3-bootstrap +@unless target-libbacktrace-bootstrap +configure-target-libgfortran: maybe-all-target-libbacktrace +@endunless target-libbacktrace-bootstrap +@unless target-libbacktrace-bootstrap +configure-target-libgo: maybe-all-target-libbacktrace +@endunless target-libbacktrace-bootstrap +@endif gcc-bootstrap + @unless gcc-bootstrap all-gnattools: maybe-all-target-libstdc++-v3 configure-libcc1: maybe-configure-gcc diff --git a/Makefile.tpl b/Makefile.tpl index 0d5f0a1b9b09..1d5813cd5695 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -2013,6 +2013,25 @@ configure-target-[+module+]: maybe-all-gcc[+ (unless (=* target "target-") (string-append "configure-" target ": " dep "\n")))))) + ;; Dependencies in between target modules if the dependencies + ;; are bootstrap target modules and the target modules which + ;; depend on them are emitted inside of @unless gcc-bootstrap. + ;; Unfortunately, some target modules like libatomic or libbacktrace + ;; have bootstrap flag set, but whether they are actually built + ;; during bootstrap or after bootstrap depends on e.g. enabled languages; + ;; if d is enabled, libphobos is built as target module and depends + ;; on libatomic and libbacktrace, which are therefore also built as + ;; bootstrap modules. If d is not enabled but go is, libatomic and + ;; libbacktrace are just dependencies of libgo which is not a bootstrap + ;; target module, but we need dependencies on libatomic and libbacktrace + ;; in that case even when gcc-bootstrap. This lambda emits those. + (define make-postboot-target-dep (lambda () + (let ((target (dep-module "module")) (on (dep-module "on"))) + (when (=* on "target-") + (when (=* target "target-") + (string-append "@unless " on "-bootstrap\n" (make-dep "" "") + "\n@endunless " on "-bootstrap\n")))))) + ;; We now build the hash table that is used by dep-kind. (define boot-modules (make-hash-table 113)) (define postboot-targets (make-hash-table 113)) @@ -2045,6 +2064,11 @@ configure-target-[+module+]: maybe-all-gcc[+ [+ == "postbootstrap" +][+ (make-postboot-dep) +][+ ESAC +][+ ENDFOR dependencies +]@endif gcc-bootstrap +@if gcc-bootstrap +[+ FOR dependencies +][+ CASE (dep-kind) +] +[+ == "postbootstrap" +][+ (make-postboot-target-dep) +][+ ESAC +][+ +ENDFOR dependencies +]@endif gcc-bootstrap + @unless gcc-bootstrap [+ FOR dependencies +][+ CASE (dep-kind) +] [+ == "postbootstrap" +][+ (make-dep "" "") +] From 35408b3669fac104cd380582b32e32c64a603d8b Mon Sep 17 00:00:00 2001 From: Paul Thomas <pault@gcc.gnu.org> Date: Tue, 2 Apr 2024 14:19:09 +0100 Subject: [PATCH 339/551] Fortran: Fix wrong recursive errors and class initialization [PR112407] 2024-04-02 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/112407 * resolve.cc (resolve_procedure_expression): Change the test for for recursion in the case of hidden procedures from modules. (resolve_typebound_static): Add warning for possible recursive calls to typebound procedures. * trans-expr.cc (gfc_trans_class_init_assign): Do not apply default initializer to class dummy where component initializers are all null. gcc/testsuite/ PR fortran/112407 * gfortran.dg/pr112407a.f90: New test. * gfortran.dg/pr112407b.f90: New test. --- gcc/fortran/resolve.cc | 23 ++++++-- gcc/fortran/trans-expr.cc | 16 ++++++ gcc/testsuite/gfortran.dg/pr112407a.f90 | 71 +++++++++++++++++++++++++ gcc/testsuite/gfortran.dg/pr112407b.f90 | 58 ++++++++++++++++++++ 4 files changed, 164 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr112407a.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr112407b.f90 diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 50d51b06c928..43315a6a550e 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -1963,12 +1963,20 @@ resolve_procedure_expression (gfc_expr* expr) || (sym->attr.function && sym->result == sym)) return true; - /* A non-RECURSIVE procedure that is used as procedure expression within its + /* A non-RECURSIVE procedure that is used as procedure expression within its own body is in danger of being called recursively. */ if (is_illegal_recursion (sym, gfc_current_ns)) - gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling" - " itself recursively. Declare it RECURSIVE or use" - " %<-frecursive%>", sym->name, &expr->where); + { + if (sym->attr.use_assoc && expr->symtree->name[0] == '@') + gfc_warning (0, "Non-RECURSIVE procedure %qs from module %qs is " + " possibly calling itself recursively in procedure %qs. " + " Declare it RECURSIVE or use %<-frecursive%>", + sym->name, sym->module, gfc_current_ns->proc_name->name); + else + gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling" + " itself recursively. Declare it RECURSIVE or use" + " %<-frecursive%>", sym->name, &expr->where); + } return true; } @@ -6820,6 +6828,13 @@ resolve_typebound_static (gfc_expr* e, gfc_symtree** target, if (st) *target = st; } + + if (is_illegal_recursion ((*target)->n.sym, gfc_current_ns) + && !e->value.compcall.tbp->deferred) + gfc_warning (0, "Non-RECURSIVE procedure %qs at %L is possibly calling" + " itself recursively. Declare it RECURSIVE or use" + " %<-frecursive%>", (*target)->n.sym->name, &e->where); + return true; } diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index d21e3956d6e7..f4c4724e1c3e 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -1719,6 +1719,7 @@ gfc_trans_class_init_assign (gfc_code *code) tree tmp; gfc_se dst,src,memsz; gfc_expr *lhs, *rhs, *sz; + gfc_component *cmp; gfc_start_block (&block); @@ -1735,6 +1736,21 @@ gfc_trans_class_init_assign (gfc_code *code) /* The _def_init is always scalar. */ rhs->rank = 0; + /* Check def_init for initializers. If this is a dummy with all default + initializer components NULL, return NULL_TREE and use the passed value as + required by F2018(8.5.10). */ + if (!lhs->ref && lhs->symtree->n.sym->attr.dummy) + { + cmp = rhs->ref->next->u.c.component->ts.u.derived->components; + for (; cmp; cmp = cmp->next) + { + if (cmp->initializer) + break; + else if (!cmp->next) + return build_empty_stmt (input_location); + } + } + if (code->expr1->ts.type == BT_CLASS && CLASS_DATA (code->expr1)->attr.dimension) { diff --git a/gcc/testsuite/gfortran.dg/pr112407a.f90 b/gcc/testsuite/gfortran.dg/pr112407a.f90 new file mode 100644 index 000000000000..470f41916110 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr112407a.f90 @@ -0,0 +1,71 @@ +! { dg-do run } +! Test of an issue found in the investigation of PR112407 +! Contributed by Tomas Trnka <trnka@scm.com> +! +module m + private new_t + + type s + procedure(),pointer,nopass :: op + end type + + type :: t + integer :: i + type (s) :: s + contains + procedure :: new_t + procedure :: bar + procedure :: add_t + generic :: new => new_t, bar + generic, public :: assignment(=) => add_t + final :: final_t + end type + + integer :: i = 0, finals = 0 + +contains + recursive subroutine new_t (arg1, arg2) + class(t), intent(out) :: arg1 + type(t), intent(in) :: arg2 + i = i + 1 + + print "(a,2i4)", "new_t", arg1%i, arg2%i + if (i .ge. 10) return + +! According to F2018(8.5.10), arg1 should be undefined on invocation, unless +! any sub-components are default initialised. gfc used to set arg1%i = 0. + if (arg1%i .ne. arg2%i) then + arg1%i = arg2%i + call arg1%new(arg2) + endif + end + + subroutine bar(arg) + class(t), intent(out) :: arg + call arg%new(t(42, s(new_t))) + end + + subroutine add_t (arg1, arg2) + class(t), intent(out) :: arg1 + type(t), intent(in) :: arg2 + call arg1%new (arg2) + end + + impure elemental subroutine final_t (arg1) + type(t), intent(in) :: arg1 + finals = finals + 1 + end +end + + use m + class(t), allocatable :: x + allocate(x) + x%i = 0 + call x%new() ! gfortran used to output 10*'new_t' + print "(3i4)", x%i, i, finals ! -||- 0 10 11 +! +! The other brands output 2*'new_t' + 42 2 3 and now so does gfc :-) + if (x%i .ne. 42) stop 1 + if (i .ne. 2) stop 2 + if (finals .ne. 3) stop 3 +end diff --git a/gcc/testsuite/gfortran.dg/pr112407b.f90 b/gcc/testsuite/gfortran.dg/pr112407b.f90 new file mode 100644 index 000000000000..b4653f808829 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr112407b.f90 @@ -0,0 +1,58 @@ +! { dg-do compile } +! { dg-options "-std=f2008" } +! Test of an issue found in the investigation of PR112407. The dg-option is +! set to avoid regression once the F2018 RECURSIVE by default in implemented. +! Contributed by Tomas Trnka <trnka@scm.com> +! +module m + private new_t + + type s + procedure(),pointer,nopass :: op + end type + + type :: t + integer :: i + type (s) :: s + contains + procedure :: new_t + procedure :: bar + procedure :: add_t + generic :: new => new_t, bar + generic, public :: assignment(=) => add_t + final :: final_t + end type + + integer :: i = 0, finals = 0 + +contains + subroutine new_t (arg1, arg2) ! gfortran didn't detect the recursion + class(t), intent(out) :: arg1 + type(t), intent(in) :: arg2 + i = i + 1 + + print *, "new_t", arg1%i, arg2%i + if (i .ge. 10) return + + if (arg1%i .ne. arg2%i) then + arg1%i = arg2%i + call arg1%new(arg2) ! { dg-warning "possibly calling itself recursively" } + endif + end + + subroutine bar(arg) + class(t), intent(out) :: arg + call arg%new(t(42, s(new_t))) + end + + subroutine add_t (arg1, arg2) + class(t), intent(out) :: arg1 + type(t), intent(in) :: arg2 + call arg1%new (arg2) + end + + impure elemental subroutine final_t (arg1) + type(t), intent(in) :: arg1 + finals = finals + 1 + end +end From a7aa9455a8b9cb080649a7357b7360f2d99bcbf1 Mon Sep 17 00:00:00 2001 From: Paul Thomas <pault@gcc.gnu.org> Date: Tue, 2 Apr 2024 15:53:29 +0100 Subject: [PATCH 340/551] Fortran: Add error for subroutine passed to a variable dummy [PR106999] 2024-04-02 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/106999 * interface.cc (gfc_compare_interfaces): Add error for a subroutine proc pointer passed to a variable formal. (compare_parameter): If a procedure pointer is being passed to a non-procedure formal arg, and there is an an interface, use gfc_compare_interfaces to check and provide a more useful error message. gcc/testsuite/ PR fortran/106999 * gfortran.dg/pr106999.f90: New test. --- gcc/fortran/interface.cc | 20 +++++++++++++++- gcc/testsuite/gfortran.dg/pr106999.f90 | 33 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr106999.f90 diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc index 7b86a338bc15..bf151dae7439 100644 --- a/gcc/fortran/interface.cc +++ b/gcc/fortran/interface.cc @@ -1789,6 +1789,14 @@ gfc_compare_interfaces (gfc_symbol *s1, gfc_symbol *s2, const char *name2, return false; } + if (s2->attr.subroutine && s1->attr.flavor == FL_VARIABLE) + { + if (errmsg != NULL) + snprintf (errmsg, err_len, "subroutine proc pointer '%s' passed " + "to dummy variable '%s'", name2, s1->name); + return false; + } + /* Do strict checks on all characteristics (for dummy procedures and procedure pointer assignments). */ if (!generic_flag && strict_flag) @@ -2425,12 +2433,22 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, { gfc_symbol *act_sym = actual->symtree->n.sym; - if (formal->attr.flavor != FL_PROCEDURE) + if (formal->attr.flavor != FL_PROCEDURE && !act_sym->ts.interface) { if (where) gfc_error ("Invalid procedure argument at %L", &actual->where); return false; } + else if (act_sym->ts.interface + && !gfc_compare_interfaces (formal, act_sym->ts.interface, + act_sym->name, 0, 1, err, + sizeof(err),NULL, NULL)) + { + if (where) + gfc_error_opt (0, "Interface mismatch in dummy procedure %qs at %L:" + " %s", formal->name, &actual->where, err); + return false; + } if (!gfc_compare_interfaces (formal, act_sym, act_sym->name, 0, 1, err, sizeof(err), NULL, NULL)) diff --git a/gcc/testsuite/gfortran.dg/pr106999.f90 b/gcc/testsuite/gfortran.dg/pr106999.f90 new file mode 100644 index 000000000000..f05a27006f68 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr106999.f90 @@ -0,0 +1,33 @@ +! { dg-do compile } +! Test the fix for PR106999 +! Contributed by Gerhard Steinmetz <gscfq@t-online.de> +program p + type t + integer :: i + procedure(g), pointer :: f + end type + class(t), allocatable :: y, z + procedure(g), pointer :: ff + allocate (z) + z%i = 42 + z%f => g + ff => g + call r(z%f) + call s(z%f) ! { dg-error "Interface mismatch in dummy procedure" } + call s(ff) ! { dg-error "Interface mismatch in dummy procedure" } +contains + subroutine g(x) + class(t) :: x + x%i = 84 + end + subroutine r(x) + procedure(g) :: x + print *, "in r" + allocate (y) + call x(y) + print *, y%i + end + subroutine s(x) + class(*) :: x + end subroutine +end From 1e459e6625ff86babc461f8ceada0a63aee5b7a5 Mon Sep 17 00:00:00 2001 From: Tom Tromey <tromey@adacore.com> Date: Thu, 28 Mar 2024 13:22:34 -0600 Subject: [PATCH 341/551] Prettify output of debug_dwarf_die When debugging gcc, I tried calling debug_dwarf_die and I saw this output: DW_AT_location: location descriptor: (0x7fffe9c2e870) DW_OP_dup 0, 0 (0x7fffe9c2e8c0) DW_OP_bra location descriptor (0x7fffe9c2e640) , 0 (0x7fffe9c2e820) DW_OP_lit4 4, 0 (0x7fffe9c2e910) DW_OP_skip location descriptor (0x7fffe9c2e9b0) , 0 (0x7fffe9c2e640) DW_OP_dup 0, 0 I think those ", 0" should not appear on their own lines. The issue seems to be that print_dw_val should not generally emit a newline, except when recursing. gcc/ChangeLog * dwarf2out.cc (print_dw_val) <dw_val_class_loc>: Don't print newline when not recursing. --- gcc/dwarf2out.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc index 8f18bc4fe64b..1b0e8b5a5b29 100644 --- a/gcc/dwarf2out.cc +++ b/gcc/dwarf2out.cc @@ -6651,7 +6651,7 @@ print_dw_val (dw_val_node *val, bool recurse, FILE *outfile) case dw_val_class_loc: fprintf (outfile, "location descriptor"); if (val->v.val_loc == NULL) - fprintf (outfile, " -> <null>\n"); + fprintf (outfile, " -> <null>"); else if (recurse) { fprintf (outfile, ":\n"); @@ -6662,9 +6662,9 @@ print_dw_val (dw_val_node *val, bool recurse, FILE *outfile) else { if (flag_dump_noaddr || flag_dump_unnumbered) - fprintf (outfile, " #\n"); + fprintf (outfile, " #"); else - fprintf (outfile, " (%p)\n", (void *) val->v.val_loc); + fprintf (outfile, " (%p)", (void *) val->v.val_loc); } break; case dw_val_class_loc_list: From d5aa2ca06aa7a6a2f826c4da19204b6db1402995 Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Fri, 29 Mar 2024 14:25:05 +0000 Subject: [PATCH 342/551] aarch64: Fix typo in comment about FEATURE_STRING Fix the comment to document FEATURE_STRING instead of FEAT_STRING. 2024-03-29 Christophe Lyon <christophe.lyon@linaro.org> gcc/ * config/aarch64/aarch64-option-extensions.def: Fix comment. --- gcc/config/aarch64/aarch64-option-extensions.def | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 061a145e9e79..aa3cd99f791c 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -54,14 +54,14 @@ If a feature A appears in this list then the list implicitly includes any features that are transitively dependent on A (according to REQUIRES). - - FEAT_STRING is a string containing the entries in the 'Features' field of - /proc/cpuinfo on a GNU/Linux system that correspond to this architecture - extension being available. Sometimes multiple entries are needed to enable - the extension (for example, the 'crypto' extension depends on four - entries: aes, pmull, sha1, sha2 being present). In that case this field - should contain a space (" ") separated list of the strings in 'Features' - that are required. Their order is not important. An empty string means - do not detect this feature during auto detection. + - FEATURE_STRING is a string containing the entries in the 'Features' field + of /proc/cpuinfo on a GNU/Linux system that correspond to this + architecture extension being available. Sometimes multiple entries are + needed to enable the extension (for example, the 'crypto' extension + depends on four entries: aes, pmull, sha1, sha2 being present). In that + case this field should contain a space (" ") separated list of the strings + in 'Features' that are required. Their order is not important. An empty + string means do not detect this feature during auto detection. - OPT_FLAGS is a list of feature IDENTS that should be enabled (along with their transitive dependencies) when the specified FMV feature is present. From 0e64bbb8823f7b3757befc878ed177dfb59943d1 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Tue, 2 Apr 2024 13:07:07 -0400 Subject: [PATCH 343/551] libstdc++: Allow adjacent __maybe_present_t<false, ...> fields to overlap Currently __maybe_present_t<false, T> maps to the same empty class type independent of T. This is suboptimal because it means adjacent __maybe_present_t<false, ...> members with the [[no_unique_address]] attribute can't overlap even if the conditionally present types are different. This patch turns this empty class type into a template parameterized by the conditionally present type, so that [[no_unique_address]] __maybe_present_t<false, T> _M_a; [[no_unique_address]] __maybe_present_t<false, U> _M_b; now overlap if T and U are different. This patch goes a step further and also adds an optional integer discriminator parameter to allow for overlapping when T and U are the same. libstdc++-v3/ChangeLog: * include/std/ranges (ranges::__detail::_Empty): Rename to ... (ranges::__detail::_Absent): ... this. Turn into a template parameterized by the absent type _Tp and discriminator _Disc. (ranges::__detail::__maybe_present_t): Add an optional discriminator parameter. (slide_view::_M_cached_begin): Pass a discriminator argument to __maybe_present_t. (slide_view::_M_cached_end): Likewise. * testsuite/std/ranges/adaptors/sizeof.cc: Verify the size of slide_view<V> is 3 instead 4 pointers. Reviewed-by: Jonathan Wakely <jwakely@redhat.com> --- libstdc++-v3/include/std/ranges | 13 ++++++++----- .../testsuite/std/ranges/adaptors/sizeof.cc | 4 ++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 7d739852677b..afce818376bb 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -886,14 +886,17 @@ namespace views namespace __detail { - struct _Empty { }; + template<typename _Tp, int _Disc> + struct _Absent { }; // Alias for a type that is conditionally present // (and is an empty type otherwise). // Data members using this alias should use [[no_unique_address]] so that // they take no space when not needed. - template<bool _Present, typename _Tp> - using __maybe_present_t = __conditional_t<_Present, _Tp, _Empty>; + // The optional template parameter _Disc is for discriminating two otherwise + // equivalent absent types so that even they can overlap. + template<bool _Present, typename _Tp, int _Disc = 0> + using __maybe_present_t = __conditional_t<_Present, _Tp, _Absent<_Tp, _Disc>>; // Alias for a type that is conditionally const. template<bool _Const, typename _Tp> @@ -6553,10 +6556,10 @@ namespace views::__adaptor range_difference_t<_Vp> _M_n; [[no_unique_address]] __detail::__maybe_present_t<__detail::__slide_caches_first<_Vp>, - __detail::_CachedPosition<_Vp>> _M_cached_begin; + __detail::_CachedPosition<_Vp>, 0> _M_cached_begin; [[no_unique_address]] __detail::__maybe_present_t<__detail::__slide_caches_last<_Vp>, - __detail::_CachedPosition<_Vp>> _M_cached_end; + __detail::_CachedPosition<_Vp>, 1> _M_cached_end; template<bool> class _Iterator; class _Sentinel; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/sizeof.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/sizeof.cc index 12a9da3181d7..08c01704d10b 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/sizeof.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/sizeof.cc @@ -49,3 +49,7 @@ static_assert(sizeof(ranges::lazy_split_view<V, std::string_view>) == 4*ptr); static_assert (sizeof(ranges::reverse_view<ranges::filter_view<V, decltype(pred_l)>>) == 3*ptr); + +#if __cpp_lib_ranges_slide +static_assert(sizeof(ranges::slide_view<V>) == 3*ptr); +#endif From 5d7e9a35024f065b25f61747859c7cb7a770c92b Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Tue, 2 Apr 2024 10:52:28 -0400 Subject: [PATCH 344/551] c++: binding reference to comma expr [PR114561] We represent a reference binding where the referent type is more qualified by a ck_ref_bind around a ck_qual. We performed the ck_qual and then tried to undo it with STRIP_NOPS, but that doesn't work if the conversion is buried in COMPOUND_EXPR. So instead let's avoid performing that fake conversion in the first place. PR c++/114561 PR c++/114562 gcc/cp/ChangeLog: * call.cc (convert_like_internal): Avoid adding qualification conversion in direct reference binding. gcc/testsuite/ChangeLog: * g++.dg/conversion/ref10.C: New test. * g++.dg/conversion/ref11.C: New test. --- gcc/cp/call.cc | 23 +++++++---------- gcc/testsuite/g++.dg/conversion/ref10.C | 5 ++++ gcc/testsuite/g++.dg/conversion/ref11.C | 33 +++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 gcc/testsuite/g++.dg/conversion/ref10.C create mode 100644 gcc/testsuite/g++.dg/conversion/ref11.C diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 9e4c80736007..9568b5eb2c44 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -8742,7 +8742,15 @@ convert_like_internal (conversion *convs, tree expr, tree fn, int argnum, break; }; - expr = convert_like (next_conversion (convs), expr, fn, argnum, + conversion *nc = next_conversion (convs); + if (convs->kind == ck_ref_bind && nc->kind == ck_qual + && !convs->need_temporary_p) + /* direct_reference_binding might have inserted a ck_qual under + this ck_ref_bind for the benefit of conversion sequence ranking. + Don't actually perform that conversion. */ + nc = next_conversion (nc); + + expr = convert_like (nc, expr, fn, argnum, convs->kind == ck_ref_bind ? issue_conversion_warnings : false, c_cast_p, /*nested_p=*/true, complain & ~tf_no_cleanup); @@ -8820,19 +8828,6 @@ convert_like_internal (conversion *convs, tree expr, tree fn, int argnum, { tree ref_type = totype; - /* direct_reference_binding might have inserted a ck_qual under - this ck_ref_bind for the benefit of conversion sequence ranking. - Ignore the conversion; we'll create our own below. */ - if (next_conversion (convs)->kind == ck_qual - && !convs->need_temporary_p) - { - gcc_assert (same_type_p (TREE_TYPE (expr), - next_conversion (convs)->type)); - /* Strip the cast created by the ck_qual; cp_build_addr_expr - below expects an lvalue. */ - STRIP_NOPS (expr); - } - if (convs->bad_p && !next_conversion (convs)->bad_p) { tree extype = TREE_TYPE (expr); diff --git a/gcc/testsuite/g++.dg/conversion/ref10.C b/gcc/testsuite/g++.dg/conversion/ref10.C new file mode 100644 index 000000000000..1913f733a6b4 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/ref10.C @@ -0,0 +1,5 @@ +// PR c++/114561 + +void create(void* u) { + const void* const& r = ( (void)0, u ); +} diff --git a/gcc/testsuite/g++.dg/conversion/ref11.C b/gcc/testsuite/g++.dg/conversion/ref11.C new file mode 100644 index 000000000000..bb9b835034c7 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/ref11.C @@ -0,0 +1,33 @@ +// PR c++/114562 +// { dg-do compile { target c++11 } } + +template <typename T> +struct Optional { + Optional(T&&); +}; + +struct MyClass { + MyClass(Optional<const void*>); +}; + +// const void* NONE = nullptr; // Correct Error +void* NONE = nullptr; // Crash + +void beforeParam(); + +template<typename T> +struct Create { + template <typename U> static T create(U &&) noexcept; +}; + + +template <typename T> +template<typename U> +T Create<T>::create(U && u) noexcept { + return T( ( (beforeParam()), (u) ) ); // { dg-error "cannot bind rvalue reference" } + // return T( (u) ); // Correct Error +} + +void test_func() { + Create<MyClass>::create(NONE); +} From daa2e7c7ffe49b788357f7f2c9ef1c9b125c1f8c Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Fri, 29 Mar 2024 16:59:37 -0400 Subject: [PATCH 345/551] c++: ICE with scoped enum in switch condition [PR103825] Here we ICE when gimplifying enum class Type { Pawn }; struct Piece { Type type : 4; }; void foo() { switch (Piece().type) case Type::Pawn:; } because we ended up with TYPE_PRECISION (cond) < TYPE_PRECISION (case). That's because the case expr type here is the unlowered type Type, whereas the conditional's type is the lowered <unnamed-signed:4>. This is not supposed to happen: see the comment in pop_switch around the is_bitfield_expr_with_lowered_type check. But here we did not revert to the lowered SWITCH_STMT_TYPE, because the conditional contains a TARGET_EXPR, which has side-effects, which means that finish_switch_cond -> maybe_cleanup_point_expr wraps it in a CLEANUP_POINT_EXPR. And is_bitfield_expr_with_lowered_type does not see through those. PR c++/103825 gcc/cp/ChangeLog: * typeck.cc (is_bitfield_expr_with_lowered_type): Handle CLEANUP_POINT_EXPR. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/enum44.C: New test. --- gcc/cp/typeck.cc | 1 + gcc/testsuite/g++.dg/cpp0x/enum44.C | 30 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/enum44.C diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc index 88ed38e4f30c..e5a52dc2b39a 100644 --- a/gcc/cp/typeck.cc +++ b/gcc/cp/typeck.cc @@ -2400,6 +2400,7 @@ is_bitfield_expr_with_lowered_type (const_tree exp) case NEGATE_EXPR: case NON_LVALUE_EXPR: case BIT_NOT_EXPR: + case CLEANUP_POINT_EXPR: return is_bitfield_expr_with_lowered_type (TREE_OPERAND (exp, 0)); case COMPONENT_REF: diff --git a/gcc/testsuite/g++.dg/cpp0x/enum44.C b/gcc/testsuite/g++.dg/cpp0x/enum44.C new file mode 100644 index 000000000000..92408c922171 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/enum44.C @@ -0,0 +1,30 @@ +// PR c++/103825 +// { dg-do compile { target c++11 } } + +enum class Type { Pawn }; +struct Piece { + Type type : 4; +}; + +void +foo () +{ + switch (Piece().type) + case Type::Pawn:; + + auto x = Piece().type; + switch (x) + case Type::Pawn:; +} + +enum class En {A}; +struct St {En field :1;}; + +void +bar () +{ + volatile St s = {En::A}; + switch(s.field) { + case En::A : break; + } +} From 2f2924078ce51c2a0da3ad8f958f2d1de533969a Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Mon, 1 Apr 2024 12:55:46 -0400 Subject: [PATCH 346/551] c++: make __is_array return false for T[0] [PR114479] When we switched to using the __is_array built-in trait to implement std::is_array in r14-6623-g7fd9c349e45534, we started saying that T[0] is an array. There are various opinions as to whether that is the best answer, but it seems prudent to keep the GCC 13 result. PR c++/114479 gcc/cp/ChangeLog: * semantics.cc (trait_expr_value) <case CPTK_IS_ARRAY>: Return false for zero-sized arrays. gcc/testsuite/ChangeLog: * g++.dg/ext/is_array.C: Extend. --- gcc/cp/semantics.cc | 8 +++++++- gcc/testsuite/g++.dg/ext/is_array.C | 12 ++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 9838331d2a9d..0015ff4fb62d 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -12439,7 +12439,13 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) return CP_AGGREGATE_TYPE_P (type1); case CPTK_IS_ARRAY: - return type_code1 == ARRAY_TYPE; + return (type_code1 == ARRAY_TYPE + /* We don't want to report T[0] as being an array type. + This is for compatibility with an implementation of + std::is_array by template argument deduction, because + compute_array_index_type_loc rejects a zero-size array + in SFINAE context. */ + && !(TYPE_SIZE (type1) && integer_zerop (TYPE_SIZE (type1)))); case CPTK_IS_ASSIGNABLE: return is_xible (MODIFY_EXPR, type1, type2); diff --git a/gcc/testsuite/g++.dg/ext/is_array.C b/gcc/testsuite/g++.dg/ext/is_array.C index f1a6e08b87a2..84993266629d 100644 --- a/gcc/testsuite/g++.dg/ext/is_array.C +++ b/gcc/testsuite/g++.dg/ext/is_array.C @@ -1,4 +1,5 @@ // { dg-do compile { target c++11 } } +// { dg-options "" } #define SA(X) static_assert((X),#X) @@ -10,18 +11,29 @@ class ClassType { }; +constexpr int sz0 = 0; +constexpr int sz2 = 2; + SA_TEST_CATEGORY(__is_array, int[2], true); SA_TEST_CATEGORY(__is_array, int[], true); +SA_TEST_CATEGORY(__is_array, int[0], false); SA_TEST_CATEGORY(__is_array, int[2][3], true); SA_TEST_CATEGORY(__is_array, int[][3], true); +SA_TEST_CATEGORY(__is_array, int[0][3], false); +SA_TEST_CATEGORY(__is_array, int[3][0], false); SA_TEST_CATEGORY(__is_array, float*[2], true); SA_TEST_CATEGORY(__is_array, float*[], true); SA_TEST_CATEGORY(__is_array, float*[2][3], true); SA_TEST_CATEGORY(__is_array, float*[][3], true); SA_TEST_CATEGORY(__is_array, ClassType[2], true); SA_TEST_CATEGORY(__is_array, ClassType[], true); +SA_TEST_CATEGORY(__is_array, ClassType[0], false); SA_TEST_CATEGORY(__is_array, ClassType[2][3], true); SA_TEST_CATEGORY(__is_array, ClassType[][3], true); +SA_TEST_CATEGORY(__is_array, ClassType[0][3], false); +SA_TEST_CATEGORY(__is_array, ClassType[2][0], false); +SA_TEST_CATEGORY(__is_array, int[sz2], true); +SA_TEST_CATEGORY(__is_array, int[sz0], false); // Sanity check. SA_TEST_CATEGORY(__is_array, ClassType, false); From ca2f7c84927f85b95f0f48f82b93f1460c372db4 Mon Sep 17 00:00:00 2001 From: Tom Tromey <tom@tromey.com> Date: Sat, 30 Mar 2024 13:48:30 -0600 Subject: [PATCH 347/551] libiberty: Invoke D demangler when --format=auto Investigating GDB PR d/31580 showed that the libiberty demangler doesn't automatically demangle D mangled names. However, I think it should -- like C++ and Rust (new-style), D mangled names are readily distinguished by the leading "_D", and so the likelihood of confusion is low. The other non-"auto" cases in this code are Ada (where the encoded form could more easily be confused by ordinary programs) and Java (which is long gone, but which also shared the C++ mangling and thus was just an output style preference). This patch also fixed another GDB bug, though of course that part won't apply to the GCC repository. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31580 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30276 libiberty * cplus-dem.c (cplus_demangle): Try the D demangler with "auto" format. * testsuite/d-demangle-expected: Add --format=auto test. --- libiberty/cplus-dem.c | 2 +- libiberty/testsuite/d-demangle-expected | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c index 8b92946981fd..ee9e84f5d6b1 100644 --- a/libiberty/cplus-dem.c +++ b/libiberty/cplus-dem.c @@ -186,7 +186,7 @@ cplus_demangle (const char *mangled, int options) if (GNAT_DEMANGLING) return ada_demangle (mangled, options); - if (DLANG_DEMANGLING) + if (DLANG_DEMANGLING || AUTO_DEMANGLING) { ret = dlang_demangle (mangled, options); if (ret) diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index 47b059c4298c..cfbdf2a52cb2 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -1470,3 +1470,8 @@ demangle.anonymous --format=dlang _D8demangle9anonymous03fooZ demangle.anonymous.foo +# +# Test that 'auto' works. +--format=auto +_D8demangle9anonymous03fooZ +demangle.anonymous.foo From 21aa57e73b820395b7b01843d61ef5b84cd20d02 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 28 Mar 2024 21:29:17 +0000 Subject: [PATCH 348/551] libstdc++: Guard uses of char8_t with __cpp_char8_t [PR114519] libstdc++-v3/ChangeLog: PR libstdc++/114519 * include/bits/unicode.h (_Utf8_view): Guard with check for char8_t being enabled. (__literal_encoding_is_unicode): Guard use of char8_t with check for it being enabled. * testsuite/std/format/functions/114519.cc: New test. --- libstdc++-v3/include/bits/unicode.h | 10 +++++++--- libstdc++-v3/testsuite/std/format/functions/114519.cc | 3 +++ 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 libstdc++-v3/testsuite/std/format/functions/114519.cc diff --git a/libstdc++-v3/include/bits/unicode.h b/libstdc++-v3/include/bits/unicode.h index 51bf02e927fc..0e95c86a0b00 100644 --- a/libstdc++-v3/include/bits/unicode.h +++ b/libstdc++-v3/include/bits/unicode.h @@ -578,8 +578,10 @@ namespace __unicode constexpr bool empty() const { return ranges::empty(_M_base); } }; +#ifdef __cpp_char8_t template<typename _View> using _Utf8_view = _Utf_view<char8_t, _View>; +#endif template<typename _View> using _Utf16_view = _Utf_view<char16_t, _View>; template<typename _View> @@ -991,12 +993,14 @@ inline namespace __v15_1_0 consteval bool __literal_encoding_is_unicode() { - if constexpr (is_same_v<_CharT, char8_t>) - return true; - else if constexpr (is_same_v<_CharT, char16_t>) + if constexpr (is_same_v<_CharT, char16_t>) return true; else if constexpr (is_same_v<_CharT, char32_t>) return true; +#ifdef __cpp_char8_t + else if constexpr (is_same_v<_CharT, char8_t>) + return true; +#endif const char* __enc = ""; diff --git a/libstdc++-v3/testsuite/std/format/functions/114519.cc b/libstdc++-v3/testsuite/std/format/functions/114519.cc new file mode 100644 index 000000000000..25a112a954e5 --- /dev/null +++ b/libstdc++-v3/testsuite/std/format/functions/114519.cc @@ -0,0 +1,3 @@ +// { dg-do compile { target c++20 } } +// { dg-options "-fno-char8_t" } +#include <format> From e945d322fcbc68f91388b1d1297bdf6a6c6fcbaa Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Tue, 2 Apr 2024 17:42:16 -0400 Subject: [PATCH 349/551] analyzer: prevent ICEs with null types Fixes some ICEs seen analyzing the Linux kernel. gcc/analyzer/ChangeLog: * region-model-manager.cc (maybe_undo_optimize_bit_field_compare): Guard against null types. * region-model.cc (apply_constraints_for_gswitch): Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/region-model-manager.cc | 2 ++ gcc/analyzer/region-model.cc | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc index 4feb349c9142..f155eeb87c0d 100644 --- a/gcc/analyzer/region-model-manager.cc +++ b/gcc/analyzer/region-model-manager.cc @@ -616,6 +616,8 @@ maybe_undo_optimize_bit_field_compare (tree type, tree cst, const svalue *arg1) { + if (!type) + return nullptr; if (!INTEGRAL_TYPE_P (type)) return NULL; diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 902b887fc074..98f287145c6c 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -5781,7 +5781,8 @@ apply_constraints_for_gswitch (const switch_cfg_superedge &edge, && is_a <const initial_svalue *> (unaryop->get_arg ())) if (const initial_svalue *initvalop = (as_a <const initial_svalue *> (unaryop->get_arg ()))) - if (TREE_CODE (initvalop->get_type ()) == ENUMERAL_TYPE) + if (initvalop->get_type () + && TREE_CODE (initvalop->get_type ()) == ENUMERAL_TYPE) { index_sval = initvalop; check_index_type = false; From 871bb5ad2dd56343d80b6a6d269e85efdc9999e5 Mon Sep 17 00:00:00 2001 From: Martin Uecker <uecker@tugraz.at> Date: Thu, 28 Mar 2024 19:15:40 +0100 Subject: [PATCH 350/551] Fix ICE with -g and -std=c23 related to incomplete types [PR114361] We did not copy TYPE_CANONICAL to the incomplete variants when completing a structure. PR c/114361 gcc/c/ * c-decl.cc (finish_struct): Set TYPE_CANONICAL when completing strucute types. gcc/testsuite/ * gcc.dg/pr114361.c: New test. * gcc.dg/c23-tag-incomplete-1.c: New test. * gcc.dg/c23-tag-incomplete-2.c: New test. --- gcc/c/c-decl.cc | 1 + gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c | 14 ++++++++++++++ gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c | 13 +++++++++++++ gcc/testsuite/gcc.dg/pr114361.c | 11 +++++++++++ 4 files changed, 39 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c create mode 100644 gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c create mode 100644 gcc/testsuite/gcc.dg/pr114361.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index c747abe9f4ef..f2083b9d96fb 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -9722,6 +9722,7 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t); C_TYPE_VARIABLY_MODIFIED (x) = C_TYPE_VARIABLY_MODIFIED (t); C_TYPE_INCOMPLETE_VARS (x) = NULL_TREE; + TYPE_CANONICAL (x) = TYPE_CANONICAL (t); } /* Update type location to the one of the definition, instead of e.g. diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c new file mode 100644 index 000000000000..82d652569e93 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } + * { dg-options "-std=c23 -g" } */ + +struct a; +typedef struct a b; + +void g() { + struct a { b* x; }; +} + +struct a { b* x; }; + + + diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c new file mode 100644 index 000000000000..bc47a04ece53 --- /dev/null +++ b/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c @@ -0,0 +1,13 @@ +/* { dg-do compile } + * { dg-options "-std=c23 -g" } */ + +struct a; +typedef struct a b; + +void f() { + extern struct a { b* x; } t; +} + +extern struct a { b* x; } t; + + diff --git a/gcc/testsuite/gcc.dg/pr114361.c b/gcc/testsuite/gcc.dg/pr114361.c new file mode 100644 index 000000000000..0f3feb53566b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr114361.c @@ -0,0 +1,11 @@ +/* PR c/114361 */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu23 -g" } */ + +void f() +{ + typedef struct foo bar; + typedef __typeof( ({ (struct foo { bar *x; }){ }; }) ) wuz; + struct foo { wuz *x; }; +} + From 1bafa6a3fdbb53651ffa5d854c2341c487bf3269 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Tue, 2 Apr 2024 23:47:42 +0100 Subject: [PATCH 351/551] PR modula2/114565 progress trace would be useful to isolate ICE for users This patch introduces the internal option -fm2-debug-trace= which can be given a comma separated list of filter terms. Currently it allows: all,line,token,quad. The patch allows users to trace the progress of cc1gm2 so that source which causes an ICE can be reduced. Once PR113836 is complete it is expected that the trace information will be written to file. gcc/m2/ChangeLog: PR modula2/114565 * gm2-compiler/M2GenGCC.mod (CodeStatement): Test GetDebugTraceQuad before calling DisplayQuad. * gm2-compiler/M2LexBuf.mod (NumberIO): Import CardToStr. (GetToken): Test GetDebugTraceToken before writing the token number or token line. * gm2-compiler/M2Options.def (SetDebugTraceQuad): Rename to (SetM2DebugTraceFilter): ...this. (SetDebugTraceAPI): Remove. (GetDebugTraceQuad): New procedure function. (GetDebugTraceTree): Ditto. (GetDebugTraceToken): Ditto. (GetDebugTraceLine): Ditto. (GetDebugFunctionLineNumbers): Ditto. * gm2-compiler/M2Options.mod (DebugFunctionLineNumbers): New boolean variable. (DebugTraceQuad): Ditto. (DebugTraceTree): Ditto. (DebugTraceLine): Ditto. (DebugTraceToken): Ditto. (errors1): New procedure. (SetDebugTraceQuad): Remove. (SetM2DebugTraceFilter): New procedure implemented. (SetM2DebugTrace): Ditto. (GetDebugTraceQuad): Ditto. (GetDebugTraceToken ): Ditto. (GetDebugTraceLine): Ditto. (SetDebugTraceLine): Remove. * gm2-compiler/M2Quads.mod (GenQuadOTrash): Test GetDebugTraceQuad and call DisplayQuad. (GenQuadOTypetok): Ditto. * gm2-compiler/SymbolTable.mod: Replace DebugFunctionLineNumbers with GetDebugFunctionLineNumbers. * gm2-gcc/init.cc (_M2_M2LangDump_init): Add prototype. (init_PerCompilationInit): Add call. * gm2-gcc/m2misc.cc (m2misc_cerror): New function. (m2misc_error): Ditto. * gm2-gcc/m2misc.def (error): New procedure. (cerror): Ditto. * gm2-gcc/m2misc.h (m2misc_cerror): New prototype. (m2misc_error): Ditto. * gm2-gcc/m2options.h (M2Options_SetDebugTraceQuad): New prototype. (M2Options_SetDebugTraceAPI): Remove. (M2Options_GetDebugTraceToken): New prototype. (M2Options_GetDebugTraceLine): Ditto. (M2Options_SetDebugFunctionLineNumbers): Ditto. (M2Options_GetDebugFunctionLineNumbers): Ditto. (M2Options_SetM2DebugTraceFilter): Ditto. * gm2-lang.cc (gm2_langhook_init_options): Remove OPT_fdebug_trace_quad case. Remove OPT_fdebug_trace_api case. Add OPT_fm2_debug_trace_ case. * lang.opt (fm2-debug-trace): New option. (fdebug-trace-api): Remove. (fdebug-trace-quad): Remove. * m2.flex (m2flex_M2Error): Check s for NULL. (skipnewline): New function. (consumeLine): Call traceline. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2GenGCC.mod | 5 +- gcc/m2/gm2-compiler/M2LexBuf.mod | 24 ++++- gcc/m2/gm2-compiler/M2Options.def | 54 +++++++--- gcc/m2/gm2-compiler/M2Options.mod | 154 ++++++++++++++++++++++++---- gcc/m2/gm2-compiler/M2Quads.mod | 18 +++- gcc/m2/gm2-compiler/SymbolTable.mod | 6 +- gcc/m2/gm2-gcc/init.cc | 2 + gcc/m2/gm2-gcc/m2misc.cc | 16 +++ gcc/m2/gm2-gcc/m2misc.def | 4 + gcc/m2/gm2-gcc/m2misc.h | 2 + gcc/m2/gm2-gcc/m2options.h | 7 +- gcc/m2/gm2-lang.cc | 9 +- gcc/m2/lang.opt | 14 +-- gcc/m2/m2.flex | 35 ++++++- 14 files changed, 285 insertions(+), 65 deletions(-) diff --git a/gcc/m2/gm2-compiler/M2GenGCC.mod b/gcc/m2/gm2-compiler/M2GenGCC.mod index 7e27373a6ac1..60f58cc2d1b8 100644 --- a/gcc/m2/gm2-compiler/M2GenGCC.mod +++ b/gcc/m2/gm2-compiler/M2GenGCC.mod @@ -96,8 +96,7 @@ FROM M2MetaError IMPORT MetaErrorT0, MetaErrorT1, MetaErrorT2, MetaErrorT3, FROM M2Options IMPORT UnboundedByReference, PedanticCast, VerboseUnbounded, Iso, Pim, DebugBuiltins, WholeProgram, StrictTypeChecking, AutoInit, cflag, ScaffoldMain, - ScaffoldDynamic, ScaffoldStatic, - DebugTraceQuad, DebugTraceAPI ; + ScaffoldDynamic, ScaffoldStatic, GetDebugTraceQuad ; FROM M2Printf IMPORT printf0, printf1, printf2, printf4 ; FROM M2Quiet IMPORT qprintf0 ; @@ -459,7 +458,7 @@ BEGIN END ; location := TokenToLocation (CurrentQuadToken) ; CheckReferenced(q, op) ; - IF DebugTraceQuad + IF GetDebugTraceQuad () THEN printf0('building: ') ; DisplayQuad(q) diff --git a/gcc/m2/gm2-compiler/M2LexBuf.mod b/gcc/m2/gm2-compiler/M2LexBuf.mod index df073630bc16..fd2373fa5019 100644 --- a/gcc/m2/gm2-compiler/M2LexBuf.mod +++ b/gcc/m2/gm2-compiler/M2LexBuf.mod @@ -22,9 +22,10 @@ along with GNU Modula-2; see the file COPYING3. If not see IMPLEMENTATION MODULE M2LexBuf ; IMPORT m2flex ; +IMPORT FIO ; FROM libc IMPORT strlen ; -FROM SYSTEM IMPORT ADDRESS ; +FROM SYSTEM IMPORT ADDRESS, ADR ; FROM Storage IMPORT ALLOCATE, DEALLOCATE ; FROM DynamicStrings IMPORT string, InitString, InitStringCharStar, Equal, Mark, KillString ; FROM FormatStrings IMPORT Sprintf1 ; @@ -33,10 +34,13 @@ FROM M2Reserved IMPORT toktype, tokToTok ; FROM M2Printf IMPORT printf0, printf1, printf2, printf3 ; FROM M2Debug IMPORT Assert ; FROM NameKey IMPORT makekey ; +FROM NumberIO IMPORT CardToStr ; FROM m2linemap IMPORT location_t, GetLocationBinary ; FROM M2Emit IMPORT UnknownLocation, BuiltinsLocation ; FROM M2Error IMPORT WarnStringAt ; FROM M2MetaError IMPORT MetaErrorT0 ; +FROM M2Options IMPORT GetDebugTraceToken ; +FROM M2LangDump IMPORT GetDumpFile ; FROM Indexing IMPORT Index, InitIndex, GetIndice, PutIndice, KillIndex, ForeachIndiceInIndexDo, @@ -659,16 +663,30 @@ END GetTokenFiltered ; *) PROCEDURE GetToken ; +VAR + buf: ARRAY [0..20] OF CHAR ; BEGIN IF UseBufferedTokens THEN - UpdateToken (ListOfTokens, CurrentTokNo) + UpdateToken (ListOfTokens, CurrentTokNo) ; + IF GetDebugTraceToken () + THEN + CardToStr (CurrentTokNo, 0, buf) ; + FIO.WriteString (GetDumpFile (), 'token: ') ; + FIO.WriteString (GetDumpFile (), buf) ; + FIO.WriteLine (GetDumpFile ()) + END ELSE IF NOT InBounds (ListOfTokens, CurrentTokNo) THEN GetTokenFiltered (FALSE) END ; - UpdateToken (ListOfTokens, CurrentTokNo) + UpdateToken (ListOfTokens, CurrentTokNo) ; + IF GetDebugTraceToken () + THEN + CardToStr (CurrentTokNo, 0, buf) ; + m2flex.M2Error (ADR (buf)) + END END END GetToken ; diff --git a/gcc/m2/gm2-compiler/M2Options.def b/gcc/m2/gm2-compiler/M2Options.def index e4ebf41802f4..50504d088b69 100644 --- a/gcc/m2/gm2-compiler/M2Options.def +++ b/gcc/m2/gm2-compiler/M2Options.def @@ -45,8 +45,6 @@ VAR Pim4, (* -fpim4 use strict rules. *) PositiveModFloorDiv, (* Force PIM4 behaviour for DIV and MOD *) CompilerDebugging, (* -fd internal debugging messages *) - DebugTraceQuad, (* -fdebug-trace-quad *) - DebugTraceAPI, (* -fdebug-trace-api *) GenerateDebugging, (* -g option to generate info for gdb/dbx *) GenerateLineDebug, (* -gline to generate line debugging. *) Verbose, (* -verbose produce verbose error messages. *) @@ -119,7 +117,6 @@ VAR (* the shared library version of the *) (* scaffold. *) ForcedLocation, - DebugFunctionLineNumbers, GenerateStatementNote, Optimizing, Coding, @@ -672,22 +669,16 @@ PROCEDURE SetQuadDebugging (value: BOOLEAN) ; (* - SetDebugTraceQuad - + SetM2DebugTraceFilter - set internal debug flags. The flags should be + specified as a comma separated list. The full + list allowed is quad,line,token,tree. *) -PROCEDURE SetDebugTraceQuad (value: BOOLEAN) ; +PROCEDURE SetM2DebugTraceFilter (value: BOOLEAN; filter: ADDRESS) ; (* - SetDebugTraceAPI - -*) - -PROCEDURE SetDebugTraceAPI (value: BOOLEAN) ; - - -(* - SetDebugFunctionLineNumbers - turn DebugFunctionLineNumbers on/off - (used internally for debugging). + SetDebugFunctionLineNumbers - set DebugFunctionLineNumbers. *) PROCEDURE SetDebugFunctionLineNumbers (value: BOOLEAN) ; @@ -1076,6 +1067,41 @@ PROCEDURE GetM2DumpFilter () : ADDRESS ; PROCEDURE GetDumpLangGimple () : BOOLEAN ; +(* + GetDebugTraceQuad - return DebugTraceQuad. +*) + +PROCEDURE GetDebugTraceQuad () : BOOLEAN ; + + +(* + GetDebugTraceTree - return DebugTraceTree. +*) + +PROCEDURE GetDebugTraceTree () : BOOLEAN ; + + +(* + GetDebugTraceToken - return DebugTraceToken. +*) + +PROCEDURE GetDebugTraceToken () : BOOLEAN ; + + +(* + GetDebugTraceLine - return DebugTraceLine. +*) + +PROCEDURE GetDebugTraceLine () : BOOLEAN ; + + +(* + GetDebugFunctionLineNumbers - return DebugFunctionLineNumbers. +*) + +PROCEDURE GetDebugFunctionLineNumbers () : BOOLEAN ; + + (* FinaliseOptions - once all options have been parsed we set any inferred values. diff --git a/gcc/m2/gm2-compiler/M2Options.mod b/gcc/m2/gm2-compiler/M2Options.mod index b0de8cdfe824..09d62cbc732c 100644 --- a/gcc/m2/gm2-compiler/M2Options.mod +++ b/gcc/m2/gm2-compiler/M2Options.mod @@ -33,10 +33,12 @@ FROM Debug IMPORT Halt ; FROM m2linemap IMPORT location_t ; FROM m2configure IMPORT FullPathCPP, TargetIEEEQuadDefault ; FROM M2Error IMPORT InternalError ; +FROM FormatStrings IMPORT Sprintf1 ; +FROM m2misc IMPORT cerror ; FROM DynamicStrings IMPORT String, Length, InitString, Mark, Slice, EqualArray, InitStringCharStar, ConCatChar, ConCat, KillString, - Dup, string, char, + Dup, string, char, Index, PushAllocation, PopAllocationExemption, InitStringDB, InitStringCharStarDB, InitStringCharDB, MultDB, DupDB, SliceDB ; @@ -73,6 +75,11 @@ VAR UselistFilename, RuntimeModuleOverride, CppArgs : String ; + DebugFunctionLineNumbers, + DebugTraceQuad, (* -fdebug-trace-quad. *) + DebugTraceTree, (* -fdebug-trace-tree. *) + DebugTraceLine, (* -fdebug-trace-line. *) + DebugTraceToken, (* -fdebug-trace-token. *) MFlag, MMFlag, MPFlag, @@ -317,6 +324,22 @@ BEGIN END GetMP ; +(* + errors1 - +*) + +PROCEDURE errors1 (format: ARRAY OF CHAR; arg: String) ; +VAR + message: String ; + cstr : ADDRESS ; +BEGIN + message := Sprintf1 (InitString (format), arg) ; + cstr := string (message) ; + cerror (cstr) ; + exit (1) +END errors1 ; + + (* AddWord - concats a word to sentence inserting a space if necessary. sentence is returned. sentence will be created if it is NIL. @@ -1079,23 +1102,121 @@ END SetCompilerDebugging ; (* - SetDebugTraceQuad - + SetM2DebugTraceFilter - set internal debug flags. The flags should be + specified as a comma separated list. The full + list allowed is quad,line,token,all. +*) + +PROCEDURE SetM2DebugTraceFilter (value: BOOLEAN; filter: ADDRESS) ; +VAR + word, + full : String ; + start, + i : INTEGER ; +BEGIN + full := InitStringCharStar (filter) ; + start := 0 ; + REPEAT + i := Index (full, ',', start) ; + IF i = -1 + THEN + word := Slice (full, start, 0) + ELSE + word := Slice (full, start, i) + END ; + SetM2DebugTrace (word, value) ; + word := KillString (word) ; + start := i+1 ; + UNTIL i = -1 ; + full := KillString (full) ; +END SetM2DebugTraceFilter ; + + +(* + SetM2DebugTrace - +*) + +PROCEDURE SetM2DebugTrace (word: String; value: BOOLEAN) ; +BEGIN + IF EqualArray (word, 'all') + THEN + (* DebugTraceTree := value *) + DebugTraceQuad := value ; + DebugTraceToken := value ; + DebugTraceLine := value + ELSIF EqualArray (word, 'quad') + THEN + DebugTraceQuad := value + ELSIF EqualArray (word, 'token') + THEN + DebugTraceToken := value + ELSIF EqualArray (word, 'line') + THEN + DebugTraceLine := value + ELSE + errors1 ("unrecognized filter %s seen in -fm2-debug-trace= option\n", word) + END +END SetM2DebugTrace ; + + +(* + SetDebugFunctionLineNumbers - set DebugFunctionLineNumbers. +*) + +PROCEDURE SetDebugFunctionLineNumbers (value: BOOLEAN) ; +BEGIN + DebugFunctionLineNumbers := value +END SetDebugFunctionLineNumbers ; + + +(* + GetDebugTraceQuad - return DebugTraceQuad. +*) + +PROCEDURE GetDebugTraceQuad () : BOOLEAN ; +BEGIN + RETURN DebugTraceQuad +END GetDebugTraceQuad ; + + +(* + GetDebugTraceTree - return DebugTraceTree. +*) + +PROCEDURE GetDebugTraceTree () : BOOLEAN ; +BEGIN + RETURN DebugTraceTree +END GetDebugTraceTree ; + + +(* + GetDebugTraceToken - return DebugTraceToken. +*) + +PROCEDURE GetDebugTraceToken () : BOOLEAN ; +BEGIN + RETURN DebugTraceToken +END GetDebugTraceToken ; + + +(* + GetDebugTraceLine - return DebugTraceLine. *) -PROCEDURE SetDebugTraceQuad (value: BOOLEAN) ; +PROCEDURE GetDebugTraceLine () : BOOLEAN ; BEGIN - DebugTraceQuad := value -END SetDebugTraceQuad ; + RETURN DebugTraceLine +END GetDebugTraceLine ; (* - SetDebugTraceAPI - + GetDebugFunctionLineNumbers - return DebugFunctionLineNumbers. *) -PROCEDURE SetDebugTraceAPI (value: BOOLEAN) ; +PROCEDURE GetDebugFunctionLineNumbers () : BOOLEAN ; BEGIN - DebugTraceAPI := value -END SetDebugTraceAPI ; + RETURN DebugFunctionLineNumbers +END GetDebugFunctionLineNumbers ; (* @@ -1236,17 +1357,6 @@ BEGIN END OverrideLocation ; -(* - SetDebugFunctionLineNumbers - turn DebugFunctionLineNumbers on/off - (used internally for debugging). -*) - -PROCEDURE SetDebugFunctionLineNumbers (value: BOOLEAN) ; -BEGIN - DebugFunctionLineNumbers := value -END SetDebugFunctionLineNumbers ; - - (* SetGenerateStatementNote - turn on generation of nops if necessary to generate pedalogical single stepping. @@ -1848,7 +1958,9 @@ BEGIN ForcedLocation := FALSE ; WholeProgram := FALSE ; DebugTraceQuad := FALSE ; - DebugTraceAPI := FALSE ; + DebugTraceTree := FALSE ; + DebugTraceLine := FALSE ; + DebugTraceToken := FALSE ; DebugFunctionLineNumbers := FALSE ; GenerateStatementNote := FALSE ; LowerCaseKeywords := FALSE ; diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index f2dfc8390ac2..12bc5494996d 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -221,7 +221,7 @@ FROM M2Options IMPORT NilChecking, ScaffoldDynamic, ScaffoldStatic, cflag, ScaffoldMain, SharedFlag, WholeProgram, GetDumpDir, GetM2DumpFilter, - GetRuntimeModuleOverride, + GetRuntimeModuleOverride, GetDebugTraceQuad, DumpLangQuad ; FROM M2LangDump IMPORT CreateDumpQuad, CloseDumpQuad, GetDumpFile ; @@ -13390,13 +13390,18 @@ BEGIN TokenNo := GetTokenNo () ELSE TokenNo := TokPos + END ; + IF GetDebugTraceQuad () + THEN + printf0('generating: ') ; + DisplayQuad (NextQuad) ; + (* MetaErrorT1 (TokenNo, '{%1On}', NextQuad) *) END END ; IF NextQuad=BreakAtQuad THEN stop END ; - (* DisplayQuad(NextQuad) ; *) NewQuad (NextQuad) END END GenQuadOTrash ; @@ -13475,13 +13480,18 @@ BEGIN END ; op1pos := Op1Pos ; op2pos := Op2Pos ; - op3pos := Op3Pos + op3pos := Op3Pos ; + IF GetDebugTraceQuad () + THEN + printf0('generating: ') ; + DisplayQuad (NextQuad) ; + (* MetaErrorT1 (TokenNo, '{%1On}', NextQuad) *) + END END ; IF NextQuad=BreakAtQuad THEN stop END ; - (* DisplayQuad(NextQuad) ; *) NewQuad (NextQuad) END END GenQuadOTypetok ; diff --git a/gcc/m2/gm2-compiler/SymbolTable.mod b/gcc/m2/gm2-compiler/SymbolTable.mod index 9d572cff19cd..fc1cb74c8665 100644 --- a/gcc/m2/gm2-compiler/SymbolTable.mod +++ b/gcc/m2/gm2-compiler/SymbolTable.mod @@ -35,7 +35,9 @@ FROM Indexing IMPORT InitIndex, InBounds, LowIndice, HighIndice, FROM Sets IMPORT Set, InitSet, IncludeElementIntoSet, IsElementInSet ; FROM m2linemap IMPORT location_t ; -FROM M2Options IMPORT Pedantic, ExtendedOpaque, DebugFunctionLineNumbers, ScaffoldDynamic, DebugBuiltins ; +FROM M2Options IMPORT Pedantic, ExtendedOpaque, + GetDebugFunctionLineNumbers, ScaffoldDynamic, + DebugBuiltins ; FROM M2LexBuf IMPORT UnknownTokenNo, TokenToLineNo, FindFileNameFromToken, TokenToLocation ; @@ -1375,7 +1377,7 @@ END DebugProcedureLineNumber ; PROCEDURE DebugLineNumbers (sym: CARDINAL) ; BEGIN - IF DebugFunctionLineNumbers + IF GetDebugFunctionLineNumbers () THEN printf0 ('<lines>\n') ; ForeachProcedureDo(sym, DebugProcedureLineNumber) ; diff --git a/gcc/m2/gm2-gcc/init.cc b/gcc/m2/gm2-gcc/init.cc index 479e06f90978..17ca9189f10c 100644 --- a/gcc/m2/gm2-gcc/init.cc +++ b/gcc/m2/gm2-gcc/init.cc @@ -78,6 +78,7 @@ EXTERN void _M2_SymbolKey_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_FifoQueue_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_M2Reserved_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_M2Const_init (int argc, char *argv[], char *envp[]); +EXTERN void _M2_M2LangDump_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_P1SymBuild_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_P2SymBuild_init (int argc, char *argv[], char *envp[]); EXTERN void _M2_P3SymBuild_init (int argc, char *argv[], char *envp[]); @@ -198,5 +199,6 @@ init_PerCompilationInit (const char *filename) _M2_M2SSA_init (0, NULL, NULL); _M2_M2SymInit_init (0, NULL, NULL); _M2_M2Check_init (0, NULL, NULL); + _M2_M2LangDump_init (0, NULL, NULL); M2Comp_compile (filename); } diff --git a/gcc/m2/gm2-gcc/m2misc.cc b/gcc/m2/gm2-gcc/m2misc.cc index 451abfe14f90..df77f32b58dc 100644 --- a/gcc/m2/gm2-gcc/m2misc.cc +++ b/gcc/m2/gm2-gcc/m2misc.cc @@ -29,6 +29,22 @@ along with GNU Modula-2; see the file COPYING3. If not see #include "m2misc.h" #include "m2tree.h" +/* C error entry to error. */ + +void +m2misc_cerror (const char *message) +{ + error (message); +} + +/* modula2 entry for cerror. */ + +void +m2misc_error (const char *message) +{ + m2misc_cerror (message); +} + /* DebugTree - display the tree t. */ void diff --git a/gcc/m2/gm2-gcc/m2misc.def b/gcc/m2/gm2-gcc/m2misc.def index 41b8751e6350..26b0e4448f39 100644 --- a/gcc/m2/gm2-gcc/m2misc.def +++ b/gcc/m2/gm2-gcc/m2misc.def @@ -22,8 +22,12 @@ along with GNU Modula-2; see the file COPYING3. If not see DEFINITION MODULE FOR "C" m2misc ; FROM m2tree IMPORT Tree ; +FROM SYSTEM IMPORT ADDRESS ; + PROCEDURE DebugTree (t: Tree) ; +PROCEDURE error (message: ARRAY OF CHAR) ; +PROCEDURE cerror (message: ADDRESS) ; END m2misc. diff --git a/gcc/m2/gm2-gcc/m2misc.h b/gcc/m2/gm2-gcc/m2misc.h index 8fe08c7b8a42..f0aa82e2eeda 100644 --- a/gcc/m2/gm2-gcc/m2misc.h +++ b/gcc/m2/gm2-gcc/m2misc.h @@ -39,6 +39,8 @@ along with GNU Modula-2; see the file COPYING3. If not see EXTERN void m2misc_DebugTree (tree t); EXTERN void m2misc_printStmt (void); EXTERN void m2misc_DebugTreeChain (tree t); +EXTERN void m2misc_cerror (const char *message); +EXTERN void m2misc_error (const char *message); #undef EXTERN #endif /* m2misc_h. */ diff --git a/gcc/m2/gm2-gcc/m2options.h b/gcc/m2/gm2-gcc/m2options.h index 4b3a23f18db5..363b2605e9e4 100644 --- a/gcc/m2/gm2-gcc/m2options.h +++ b/gcc/m2/gm2-gcc/m2options.h @@ -84,8 +84,10 @@ EXTERN bool M2Options_SetVerboseUnbounded (bool value); EXTERN void M2Options_SetXCode (bool value); EXTERN void M2Options_SetCompilerDebugging (bool value); EXTERN void M2Options_SetQuadDebugging (bool value); -EXTERN void M2Options_SetDebugTraceQuad (bool value); -EXTERN void M2Options_SetDebugTraceAPI (bool value); +EXTERN bool M2Options_GetDebugTraceToken (void); +EXTERN bool M2Options_GetDebugTraceLine (void); +EXTERN void M2Options_SetDebugFunctionLineNumbers (bool value); +EXTERN bool M2Options_GetDebugFunctionLineNumbers (void); EXTERN void M2Options_SetSources (bool value); EXTERN bool M2Options_SetUnboundedByReference (bool value); EXTERN void M2Options_SetDumpSystemExports (bool value); @@ -162,6 +164,7 @@ EXTERN void M2Options_SetDumpLangGimpleFilename (bool value, const char *arg); EXTERN bool M2Options_GetDumpLangGimple (void); EXTERN void M2Options_SetM2DumpFilter (bool value, const char *args); EXTERN char *M2Options_GetM2DumpFilter (void); +EXTERN void M2Options_SetM2DebugTraceFilter (bool value, const char *arg); #undef EXTERN #endif /* m2options_h. */ diff --git a/gcc/m2/gm2-lang.cc b/gcc/m2/gm2-lang.cc index fc70fbb50bfd..f7ab8b807d39 100644 --- a/gcc/m2/gm2-lang.cc +++ b/gcc/m2/gm2-lang.cc @@ -475,12 +475,6 @@ gm2_langhook_handle_option ( case OPT_fdebug_builtins: M2Options_SetDebugBuiltins (value); return 1; - case OPT_fdebug_trace_quad: - M2Options_SetDebugTraceQuad (value); - return 1; - case OPT_fdebug_trace_api: - M2Options_SetDebugTraceAPI (value); - return 1; case OPT_fdebug_function_line_numbers: M2Options_SetDebugFunctionLineNumbers (value); return 1; @@ -549,6 +543,9 @@ gm2_langhook_handle_option ( case OPT_fm2_strict_type: M2Options_SetStrictTypeChecking (value); return 1; + case OPT_fm2_debug_trace_: + M2Options_SetM2DebugTraceFilter (value, arg); + return 1; #ifdef ENABLE_QUAD_DUMP_ALL case OPT_fm2_dump_filter_: M2Options_SetM2DumpFilter (value, arg); diff --git a/gcc/m2/lang.opt b/gcc/m2/lang.opt index 505f4b56e8a9..206bd03d09f6 100644 --- a/gcc/m2/lang.opt +++ b/gcc/m2/lang.opt @@ -90,17 +90,9 @@ fd Modula-2 turn on internal debugging of the compiler (internal switch) -fdebug-trace-quad -Modula-2 -turn on quadruple tracing (internal switch) - -fdebug-trace-api -Modula-2 -turn on the Modula-2 api tracing (internal switch) - fdebug-function-line-numbers Modula-2 -turn on the Modula-2 function line number generation (internal switch) +turn on tracing of procedure line numbers (internal switch) fdef= Modula-2 Joined @@ -138,6 +130,10 @@ flocation= Modula-2 Joined set all location values to a specific value (internal switch) +fm2-debug-trace= +Modula-2 Joined +turn on internal debug tracing for quad,token,line,all (internal switch) + fm2-g Modula-2 generate extra nops to improve debugging, producing an instruction for every code related keyword diff --git a/gcc/m2/m2.flex b/gcc/m2/m2.flex index d874db9dae2d..2483b282d486 100644 --- a/gcc/m2/m2.flex +++ b/gcc/m2/m2.flex @@ -491,7 +491,10 @@ EXTERN void m2flex_M2Error (const char *s) } putchar('\n'); } - printf("%s:%d:%s\n", filename, currentLine->lineno, s); + if (s == NULL) + printf("%s:%d\n", filename, currentLine->lineno); + else + printf("%s:%d:%s\n", filename, currentLine->lineno, s); } static void poperrorskip (const char *s) @@ -507,6 +510,35 @@ static void poperrorskip (const char *s) } } +/* skipnewline skips all '\n' at the start of the line and returns + the new position. */ + +static +char * +skipnewline (char *line) +{ + while (((*line) != (char)0) && ((*line) == '\n')) + line++; + return line; +} + +/* traceLine display the source line providing -fdebug-trace-line was + enabled. */ + +static +void +traceLine (void) +{ + if (M2Options_GetDebugTraceLine ()) + { + char *line = skipnewline (currentLine->linebuf); + if (filename == NULL) + printf("<stdin>:%d:%s\n", currentLine->lineno, line); + else + printf("%s:%d:%s\n", filename, currentLine->lineno, line); + } +} + /* * consumeLine - reads a line into a buffer, it then pushes back the whole * line except the initial \n. @@ -527,6 +559,7 @@ static void consumeLine (void) currentLine->column=0; START_LINE (lineno, yyleng); yyless(1); /* push back all but the \n */ + traceLine (); } static void assert_location (location_t location ATTRIBUTE_UNUSED) From a1e6798acfaf1356692bcb81f3186ee6a3deb22e Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Wed, 3 Apr 2024 00:17:29 +0000 Subject: [PATCH 352/551] Daily bump. --- ChangeLog | 13 ++++++++ config/ChangeLog | 5 +++ gcc/ChangeLog | 58 +++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 6 ++++ gcc/c/ChangeLog | 6 ++++ gcc/cp/ChangeLog | 19 +++++++++++ gcc/fortran/ChangeLog | 21 ++++++++++++ gcc/jit/ChangeLog | 6 ++++ gcc/m2/ChangeLog | 62 +++++++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 72 +++++++++++++++++++++++++++++++++++++++++ libdecnumber/ChangeLog | 5 +++ libgcc/ChangeLog | 5 +++ libgfortran/ChangeLog | 4 +++ libgm2/ChangeLog | 4 +++ libgomp/ChangeLog | 12 +++++++ libiberty/ChangeLog | 13 ++++++++ libitm/ChangeLog | 5 +++ libobjc/ChangeLog | 8 +++++ libstdc++-v3/ChangeLog | 27 ++++++++++++++++ libvtv/ChangeLog | 5 +++ 21 files changed, 357 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index da4aeb9d0478..347646d6ea8b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + PR bootstrap/106472 + * Makefile.tpl (make-postboot-target-dep): New lambda. + Use it to add --enable-bootstrap dependencies of target modules + on other target modules if the latter aren't bootstrapped. + * Makefile.in: Regenerate. + +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * Makefile.tpl: Fix duplicated words; returns returns -> + returns. + 2024-03-08 Filip Kastl <fkastl@suse.cz> * MAINTAINERS: Fix order of names in Write After Aproval diff --git a/config/ChangeLog b/config/ChangeLog index 5998f095df55..a67f961b69b6 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,8 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * lcmessage.m4: Fix duplicated words; can can -> can, + package package -> package. + 2024-01-11 Mike Frysinger <vapier@gentoo.org> * acinclude.m4 (CYG_AC_PATH_LIBERTY): Delete. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc10edf32581..61eb527951d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,61 @@ +2024-04-02 Christophe Lyon <christophe.lyon@linaro.org> + + * config/aarch64/aarch64-option-extensions.def: Fix comment. + +2024-04-02 Tom Tromey <tromey@adacore.com> + + * dwarf2out.cc (print_dw_val) <dw_val_class_loc>: Don't + print newline when not recursing. + +2024-04-02 Iain Sandoe <iain@sandoe.co.uk> + + * config/darwin.cc (darwin_override_options): Update the + clang major version value in the dsymutil check. + +2024-04-02 Iain Sandoe <iain@sandoe.co.uk> + + * config/darwin.cc (darwin_override_options): Reduce the debug + level to 2 if dsymutil cannot handle .macinfo sections. + +2024-04-02 Yang Yujie <yangyujie@loongson.cn> + + * config/loongarch/t-loongarch: Add loongarch-def-arrays.h + to OPTION_H_EXTRA. + +2024-04-02 mengqinggang <mengqinggang@loongson.cn> + Lulu Cheng <chenglulu@loongson.cn> + Xi Ruoyao <xry111@xry111.site> + + * config.gcc: Add --with-tls option to change TLS flavor. + * config/loongarch/genopts/loongarch.opt.in: Add -mtls-dialect to + configure TLS flavor. + * config/loongarch/loongarch-def.h (struct loongarch_target): Add + tls_dialect. + * config/loongarch/loongarch-driver.cc (la_driver_init): Add tls + flavor. + * config/loongarch/loongarch-opts.cc (loongarch_init_target): Add + tls_dialect. + (loongarch_config_target): Ditto. + (loongarch_update_gcc_opt_status): Ditto. + * config/loongarch/loongarch-opts.h (loongarch_init_target): Ditto. + (TARGET_TLS_DESC): New define. + * config/loongarch/loongarch.cc (loongarch_symbol_insns): Add TLS + DESC instructions sequence length. + (loongarch_legitimize_tls_address): New TLS DESC instruction sequence. + (loongarch_option_override_internal): Add la_opt_tls_dialect. + (loongarch_option_restore): Add la_target.tls_dialect. + * config/loongarch/loongarch.md (@got_load_tls_desc<mode>): Normal + code model for TLS DESC. + (got_load_tls_desc_off64): Extreme cmode model for TLS DESC. + * config/loongarch/loongarch.opt: Regenerate. + * config/loongarch/loongarch.opt.urls: Ditto. + * doc/invoke.texi: Add a description of the compilation option + '-mtls-dialect={trad,desc}'. + +2024-04-02 Lulu Cheng <chenglulu@loongson.cn> + + * config/loongarch/loongarch.opt.urls: Regenerate. + 2024-04-01 Yang Yujie <yangyujie@loongson.cn> * config/loongarch/genopts/loongarch.opt.in: Mark -m[no-]recip as diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 2edad605e1d4..154a306dc5ca 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240402 +20240403 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 42fe1801790a..d33733a91b4c 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,9 @@ +2024-04-02 David Malcolm <dmalcolm@redhat.com> + + * region-model-manager.cc (maybe_undo_optimize_bit_field_compare): + Guard against null types. + * region-model.cc (apply_constraints_for_gswitch): Likewise. + 2024-03-27 David Malcolm <dmalcolm@redhat.com> PR analyzer/114473 diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index b8374c7d7740..3d731f148b27 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2024-04-02 Martin Uecker <uecker@tugraz.at> + + PR c/114361 + * c-decl.cc (finish_struct): Set TYPE_CANONICAL when completing + strucute types. + 2024-03-14 Chung-Lin Tang <cltang@baylibre.com> * c-parser.cc (c_parser_oacc_data_clause): Add parsing support for diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b64f127aad61..d3ee105a0ec3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,22 @@ +2024-04-02 Marek Polacek <polacek@redhat.com> + + PR c++/114479 + * semantics.cc (trait_expr_value) <case CPTK_IS_ARRAY>: Return false + for zero-sized arrays. + +2024-04-02 Marek Polacek <polacek@redhat.com> + + PR c++/103825 + * typeck.cc (is_bitfield_expr_with_lowered_type): Handle + CLEANUP_POINT_EXPR. + +2024-04-02 Jason Merrill <jason@redhat.com> + + PR c++/114561 + PR c++/114562 + * call.cc (convert_like_internal): Avoid adding qualification + conversion in direct reference binding. + 2024-04-01 Jason Merrill <jason@redhat.com> * typeck.cc (maybe_warn_about_returning_address_of_local): diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e0c571ecb29e..962499b8c275 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,24 @@ +2024-04-02 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/106999 + * interface.cc (gfc_compare_interfaces): Add error for a + subroutine proc pointer passed to a variable formal. + (compare_parameter): If a procedure pointer is being passed to + a non-procedure formal arg, and there is an an interface, use + gfc_compare_interfaces to check and provide a more useful error + message. + +2024-04-02 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/112407 + * resolve.cc (resolve_procedure_expression): Change the test for + for recursion in the case of hidden procedures from modules. + (resolve_typebound_static): Add warning for possible recursive + calls to typebound procedures. + * trans-expr.cc (gfc_trans_class_init_assign): Do not apply + default initializer to class dummy where component initializers + are all null. + 2024-03-29 Harald Anlauf <anlauf@gmx.de> PR fortran/50410 diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index 48bd036390c2..11f76a3e3fb7 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,9 @@ +2024-04-02 Iain Sandoe <iain@sandoe.co.uk> + + * Make-lang.in: Implement exports list, and use a shared + libgcc. + * libgccjit.exports: New file. + 2024-03-29 Guillaume Gomez <guillaume1.gomez@gmail.com> * libgccjit.cc (gcc_jit_type_get_size): Add pointer support diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index 1c5fc2e71bec..68d75527acad 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,65 @@ +2024-04-02 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114565 + * gm2-compiler/M2GenGCC.mod (CodeStatement): Test + GetDebugTraceQuad before calling DisplayQuad. + * gm2-compiler/M2LexBuf.mod (NumberIO): Import CardToStr. + (GetToken): Test GetDebugTraceToken before writing the + token number or token line. + * gm2-compiler/M2Options.def (SetDebugTraceQuad): Rename to + (SetM2DebugTraceFilter): ...this. + (SetDebugTraceAPI): Remove. + (GetDebugTraceQuad): New procedure function. + (GetDebugTraceTree): Ditto. + (GetDebugTraceToken): Ditto. + (GetDebugTraceLine): Ditto. + (GetDebugFunctionLineNumbers): Ditto. + * gm2-compiler/M2Options.mod (DebugFunctionLineNumbers): New + boolean variable. + (DebugTraceQuad): Ditto. + (DebugTraceTree): Ditto. + (DebugTraceLine): Ditto. + (DebugTraceToken): Ditto. + (errors1): New procedure. + (SetDebugTraceQuad): Remove. + (SetM2DebugTraceFilter): New procedure implemented. + (SetM2DebugTrace): Ditto. + (GetDebugTraceQuad): Ditto. + (GetDebugTraceToken ): Ditto. + (GetDebugTraceLine): Ditto. + (SetDebugTraceLine): Remove. + * gm2-compiler/M2Quads.mod (GenQuadOTrash): Test + GetDebugTraceQuad and call DisplayQuad. + (GenQuadOTypetok): Ditto. + * gm2-compiler/SymbolTable.mod: Replace + DebugFunctionLineNumbers with GetDebugFunctionLineNumbers. + * gm2-gcc/init.cc (_M2_M2LangDump_init): Add prototype. + (init_PerCompilationInit): Add call. + * gm2-gcc/m2misc.cc (m2misc_cerror): New function. + (m2misc_error): Ditto. + * gm2-gcc/m2misc.def (error): New procedure. + (cerror): Ditto. + * gm2-gcc/m2misc.h (m2misc_cerror): New prototype. + (m2misc_error): Ditto. + * gm2-gcc/m2options.h (M2Options_SetDebugTraceQuad): New + prototype. + (M2Options_SetDebugTraceAPI): Remove. + (M2Options_GetDebugTraceToken): New prototype. + (M2Options_GetDebugTraceLine): Ditto. + (M2Options_SetDebugFunctionLineNumbers): Ditto. + (M2Options_GetDebugFunctionLineNumbers): Ditto. + (M2Options_SetM2DebugTraceFilter): Ditto. + * gm2-lang.cc (gm2_langhook_init_options): Remove + OPT_fdebug_trace_quad case. + Remove OPT_fdebug_trace_api case. + Add OPT_fm2_debug_trace_ case. + * lang.opt (fm2-debug-trace): New option. + (fdebug-trace-api): Remove. + (fdebug-trace-quad): Remove. + * m2.flex (m2flex_M2Error): Check s for NULL. + (skipnewline): New function. + (consumeLine): Call traceline. + 2024-04-01 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114548 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b87da1dcc001..37cdcaea9f78 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,75 @@ +2024-04-02 Martin Uecker <uecker@tugraz.at> + + PR c/114361 + * gcc.dg/pr114361.c: New test. + * gcc.dg/c23-tag-incomplete-1.c: New test. + * gcc.dg/c23-tag-incomplete-2.c: New test. + +2024-04-02 Marek Polacek <polacek@redhat.com> + + PR c++/114479 + * g++.dg/ext/is_array.C: Extend. + +2024-04-02 Marek Polacek <polacek@redhat.com> + + PR c++/103825 + * g++.dg/cpp0x/enum44.C: New test. + +2024-04-02 Jason Merrill <jason@redhat.com> + + PR c++/114561 + PR c++/114562 + * g++.dg/conversion/ref10.C: New test. + * g++.dg/conversion/ref11.C: New test. + +2024-04-02 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/106999 + * gfortran.dg/pr106999.f90: New test. + +2024-04-02 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/112407 + * gfortran.dg/pr112407a.f90: New test. + * gfortran.dg/pr112407b.f90: New test. + +2024-04-02 Iain Sandoe <iain@sandoe.co.uk> + + PR testsuite/114034 + * g++.dg/gcov/gcov-dump-1.C: Remove extra -lgcov. + * g++.dg/gcov/gcov-dump-2.C: Likewise. + +2024-04-02 Iain Sandoe <iain@sandoe.co.uk> + + PR testsuite/114036 + * gcc.misc-tests/gcov-14.c: Allow for 'Foo' to be undefined + on Darwin link lines. + +2024-04-02 Iain Sandoe <iain@sandoe.co.uk> + + * g++.dg/modules/bad-mapper-1.C: Update expected test output + for earlier Darwin. + +2024-04-02 mengqinggang <mengqinggang@loongson.cn> + Lulu Cheng <chenglulu@loongson.cn> + Xi Ruoyao <xry111@xry111.site> + + * gcc.target/loongarch/cmodel-extreme-1.c: Add -mtls-dialect=trad. + * gcc.target/loongarch/cmodel-extreme-2.c: Ditto. + * gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c: Ditto. + * gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c: + Ditto. + * gcc.target/loongarch/func-call-medium-1.c: Ditto. + * gcc.target/loongarch/func-call-medium-2.c: Ditto. + * gcc.target/loongarch/func-call-medium-3.c: Ditto. + * gcc.target/loongarch/func-call-medium-4.c: Ditto. + * gcc.target/loongarch/tls-extreme-macro.c: Ditto. + * gcc.target/loongarch/tls-gd-noplt.c: Ditto. + * gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c: New test. + * gcc.target/loongarch/explicit-relocs-auto-tls-desc.c: New test. + * gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c: New test. + * gcc.target/loongarch/explicit-relocs-tls-desc.c: New test. + 2024-04-01 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114548 diff --git a/libdecnumber/ChangeLog b/libdecnumber/ChangeLog index cfc1d58932f9..ef5ee7c6978d 100644 --- a/libdecnumber/ChangeLog +++ b/libdecnumber/ChangeLog @@ -1,3 +1,8 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * decCommon.c (decFinalize): Fix duplicated words in + comment; the the -> the. + 2023-06-15 Marek Polacek <polacek@redhat.com> * configure.ac (--enable-host-shared): Don't set PICFLAG here. diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index ad26c65b7aa0..04e584424b6d 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * unwind-dw2-fde.c (struct fde_accumulator): Fix duplicated + words in comment; is is -> is. + 2024-03-25 Max Filippov <jcmvbkbc@gmail.com> * unwind-arm-common.inc (__gnu_personality_sigframe_fdpic): Cast diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index f2d3865617f6..423346ccdc34 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,7 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * configure.host: Fix duplicated words; the the -> the. + 2024-03-27 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/107031 diff --git a/libgm2/ChangeLog b/libgm2/ChangeLog index d1bc5acc736e..f2c07799fae4 100644 --- a/libgm2/ChangeLog +++ b/libgm2/ChangeLog @@ -1,3 +1,7 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * configure.host: Fix duplicated words; the the -> the. + 2024-02-25 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/113749 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index d45be92a8a4c..8bf7215b2ae8 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,15 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * libgomp.texi (OpenMP 5.2): Fix duplicated words; with with -> + with. + (omp_target_associate_ptr): Fix duplicated words; either either -> + either. + (omp_init_allocator): Fix duplicated words; be be -> be. + (omp_realloc): Fix duplicated words; is is -> is. + (OMP_ALLOCATOR): Fix duplicated words; other other -> other. + * priority_queue.h (priority_queue_multi_p): Fix duplicated words; + to to -> to. + 2024-03-25 Richard Biener <rguenther@suse.de> * plugin/plugin-gcn.c (EF_AMDGPU_MACH): GFX1036. diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 868f799955b6..cdcd4b3ced8d 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,16 @@ +2024-04-02 Tom Tromey <tom@tromey.com> + + * cplus-dem.c (cplus_demangle): Try the D demangler with + "auto" format. + * testsuite/d-demangle-expected: Add --format=auto test. + +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * regex.c (byte_re_match_2_internal): Fix duplicated words in comment; + next next -> next. + * dyn-string.c (dyn_string_init): Fix duplicated words in comment; + of of -> of. + 2024-02-19 Iain Sandoe <iain@sandoe.co.uk> PR other/113957 diff --git a/libitm/ChangeLog b/libitm/ChangeLog index 5ecca1163724..f1ccb64c404b 100644 --- a/libitm/ChangeLog +++ b/libitm/ChangeLog @@ -1,3 +1,8 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * beginend.cc (GTM::gtm_thread::begin_transaction): Fix duplicated + words in comment; not not -> not to. + 2024-02-05 Marek Polacek <polacek@redhat.com> * containers.h (vector): Remove the template-id in constructors. diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 720c4c59612e..a6a4ad9c0ada 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,11 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * init.c (duplicate_classes): Fix duplicated words in comment; in in + -> in. + * sendmsg.c (__objc_prepare_dtable_for_class): Fix duplicated words + in comment; the the -> the. + * encoding.c (objc_layout_structure): Likewise. + 2023-10-22 Iain Sandoe <iain@sandoe.co.uk> * configure: Regenerate. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9460ea2b9c3d..ea9362adf028 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,30 @@ +2024-04-02 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114519 + * include/bits/unicode.h (_Utf8_view): Guard with check for + char8_t being enabled. + (__literal_encoding_is_unicode): Guard use of char8_t with check + for it being enabled. + * testsuite/std/format/functions/114519.cc: New test. + +2024-04-02 Patrick Palka <ppalka@redhat.com> + + * include/std/ranges (ranges::__detail::_Empty): Rename to ... + (ranges::__detail::_Absent): ... this. Turn into a template + parameterized by the absent type _Tp and discriminator _Disc. + (ranges::__detail::__maybe_present_t): Add an optional + discriminator parameter. + (slide_view::_M_cached_begin): Pass a discriminator argument to + __maybe_present_t. + (slide_view::_M_cached_end): Likewise. + * testsuite/std/ranges/adaptors/sizeof.cc: Verify the size of + slide_view<V> is 3 instead 4 pointers. + +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * acinclude.m4: Fix duplicated words; file file -> file can. + * configure.host: Fix duplicated words; the the -> the. + 2024-03-29 Arsen Arsenović <arsen@aarsen.me> * testsuite/24_iterators/range_generators/01.cc: Drop GCC diff --git a/libvtv/ChangeLog b/libvtv/ChangeLog index 5c93ba9fb5bb..30729d030b06 100644 --- a/libvtv/ChangeLog +++ b/libvtv/ChangeLog @@ -1,3 +1,8 @@ +2024-04-02 Jakub Jelinek <jakub@redhat.com> + + * vtv_rts.cc (vtv_fail): Fix duplicated words; to to -> to. + * vtv_fail.cc (vtv_fail): Likewise. + 2023-10-22 Iain Sandoe <iain@sandoe.co.uk> * configure: Regenerate. From 8677182f32234786fccce25583232ec5181dde75 Mon Sep 17 00:00:00 2001 From: Jiahao Xu <xujiahao@loongson.cn> Date: Wed, 3 Apr 2024 09:38:23 +0800 Subject: [PATCH 353/551] LoongArch: Remove unused code. gcc/ChangeLog: * config/loongarch/lasx.md: Remove unused code. * config/loongarch/loongarch-protos.h (loongarch_split_lsx_copy_d): Remove. (loongarch_split_lsx_insert_d): Ditto. (loongarch_split_lsx_fill_d): Ditto. * config/loongarch/loongarch.cc (loongarch_split_lsx_copy_d): Ditto. (loongarch_split_lsx_insert_d): Ditto. (loongarch_split_lsx_fill_d): Ditto. * config/loongarch/lsx.md (lsx_vpickve2gr_du): Remove splitter. (lsx_vpickve2gr_<lsxfmt_f>): Ditto. (abs<mode>2): Remove expander. (vabs<mode>2): Rename 2 abs<mode>2. gcc/testsuite/ChangeLog: * gcc.target/loongarch/vector/lsx/lsx-abs.c: New test. --- gcc/config/loongarch/lasx.md | 12 +-- gcc/config/loongarch/loongarch-protos.h | 3 - gcc/config/loongarch/loongarch.cc | 76 ---------------- gcc/config/loongarch/lsx.md | 89 ++----------------- .../gcc.target/loongarch/vector/lsx/lsx-abs.c | 26 ++++++ 5 files changed, 35 insertions(+), 171 deletions(-) create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-abs.c diff --git a/gcc/config/loongarch/lasx.md b/gcc/config/loongarch/lasx.md index 2fa5e46c8e8a..7bd61f8ed5b7 100644 --- a/gcc/config/loongarch/lasx.md +++ b/gcc/config/loongarch/lasx.md @@ -572,12 +572,7 @@ (match_operand 3 "const_<bitmask256>_operand" "")))] "ISA_HAS_LASX" { -#if 0 - if (!TARGET_64BIT && (<MODE>mode == V4DImode || <MODE>mode == V4DFmode)) - return "#"; - else -#endif - return "xvinsgr2vr.<lasxfmt>\t%u0,%z1,%y3"; + return "xvinsgr2vr.<lasxfmt>\t%u0,%z1,%y3"; } [(set_attr "type" "simd_insert") (set_attr "mode" "<MODE>")]) @@ -1446,10 +1441,7 @@ if (which_alternative == 1) return "xvldi.b\t%u0,0" ; - if (!TARGET_64BIT && (<MODE>mode == V2DImode || <MODE>mode == V2DFmode)) - return "#"; - else - return "xvreplgr2vr.<lasxfmt>\t%u0,%z1"; + return "xvreplgr2vr.<lasxfmt>\t%u0,%z1"; } [(set_attr "type" "simd_fill") (set_attr "mode" "<MODE>") diff --git a/gcc/config/loongarch/loongarch-protos.h b/gcc/config/loongarch/loongarch-protos.h index e3ed2b912a55..e238d795a738 100644 --- a/gcc/config/loongarch/loongarch-protos.h +++ b/gcc/config/loongarch/loongarch-protos.h @@ -89,9 +89,6 @@ extern void loongarch_split_128bit_move (rtx, rtx); extern bool loongarch_split_128bit_move_p (rtx, rtx); extern void loongarch_split_256bit_move (rtx, rtx); extern bool loongarch_split_256bit_move_p (rtx, rtx); -extern void loongarch_split_lsx_copy_d (rtx, rtx, rtx, rtx (*)(rtx, rtx, rtx)); -extern void loongarch_split_lsx_insert_d (rtx, rtx, rtx, rtx); -extern void loongarch_split_lsx_fill_d (rtx, rtx); extern const char *loongarch_output_move (rtx, rtx); #ifdef RTX_CODE extern void loongarch_expand_scc (rtx *); diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index cbc91c94d9d6..c90b701a5336 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -4775,82 +4775,6 @@ loongarch_split_256bit_move (rtx dest, rtx src) } } - -/* Split a COPY_S.D with operands DEST, SRC and INDEX. GEN is a function - used to generate subregs. */ - -void -loongarch_split_lsx_copy_d (rtx dest, rtx src, rtx index, - rtx (*gen_fn)(rtx, rtx, rtx)) -{ - gcc_assert ((GET_MODE (src) == V2DImode && GET_MODE (dest) == DImode) - || (GET_MODE (src) == V2DFmode && GET_MODE (dest) == DFmode)); - - /* Note that low is always from the lower index, and high is always - from the higher index. */ - rtx low = loongarch_subword (dest, false); - rtx high = loongarch_subword (dest, true); - rtx new_src = simplify_gen_subreg (V4SImode, src, GET_MODE (src), 0); - - emit_insn (gen_fn (low, new_src, GEN_INT (INTVAL (index) * 2))); - emit_insn (gen_fn (high, new_src, GEN_INT (INTVAL (index) * 2 + 1))); -} - -/* Split a INSERT.D with operand DEST, SRC1.INDEX and SRC2. */ - -void -loongarch_split_lsx_insert_d (rtx dest, rtx src1, rtx index, rtx src2) -{ - int i; - gcc_assert (GET_MODE (dest) == GET_MODE (src1)); - gcc_assert ((GET_MODE (dest) == V2DImode - && (GET_MODE (src2) == DImode || src2 == const0_rtx)) - || (GET_MODE (dest) == V2DFmode && GET_MODE (src2) == DFmode)); - - /* Note that low is always from the lower index, and high is always - from the higher index. */ - rtx low = loongarch_subword (src2, false); - rtx high = loongarch_subword (src2, true); - rtx new_dest = simplify_gen_subreg (V4SImode, dest, GET_MODE (dest), 0); - rtx new_src1 = simplify_gen_subreg (V4SImode, src1, GET_MODE (src1), 0); - i = exact_log2 (INTVAL (index)); - gcc_assert (i != -1); - - emit_insn (gen_lsx_vinsgr2vr_w (new_dest, low, new_src1, - GEN_INT (1 << (i * 2)))); - emit_insn (gen_lsx_vinsgr2vr_w (new_dest, high, new_dest, - GEN_INT (1 << (i * 2 + 1)))); -} - -/* Split FILL.D. */ - -void -loongarch_split_lsx_fill_d (rtx dest, rtx src) -{ - gcc_assert ((GET_MODE (dest) == V2DImode - && (GET_MODE (src) == DImode || src == const0_rtx)) - || (GET_MODE (dest) == V2DFmode && GET_MODE (src) == DFmode)); - - /* Note that low is always from the lower index, and high is always - from the higher index. */ - rtx low, high; - if (src == const0_rtx) - { - low = src; - high = src; - } - else - { - low = loongarch_subword (src, false); - high = loongarch_subword (src, true); - } - rtx new_dest = simplify_gen_subreg (V4SImode, dest, GET_MODE (dest), 0); - emit_insn (gen_lsx_vreplgr2vr_w (new_dest, low)); - emit_insn (gen_lsx_vinsgr2vr_w (new_dest, high, new_dest, GEN_INT (1 << 1))); - emit_insn (gen_lsx_vinsgr2vr_w (new_dest, high, new_dest, GEN_INT (1 << 3))); -} - - /* Return the appropriate instructions to move SRC into DEST. Assume that SRC is operand 1 and DEST is operand 0. */ diff --git a/gcc/config/loongarch/lsx.md b/gcc/config/loongarch/lsx.md index 87d3e7c5d9fe..454cda47876b 100644 --- a/gcc/config/loongarch/lsx.md +++ b/gcc/config/loongarch/lsx.md @@ -582,28 +582,11 @@ (match_operand 3 "const_<bitmask>_operand" "")))] "ISA_HAS_LSX" { - if (!TARGET_64BIT && (<MODE>mode == V2DImode || <MODE>mode == V2DFmode)) - return "#"; - else - return "vinsgr2vr.<lsxfmt>\t%w0,%z1,%y3"; + return "vinsgr2vr.<lsxfmt>\t%w0,%z1,%y3"; } [(set_attr "type" "simd_insert") (set_attr "mode" "<MODE>")]) -(define_split - [(set (match_operand:LSX_D 0 "register_operand") - (vec_merge:LSX_D - (vec_duplicate:LSX_D - (match_operand:<UNITMODE> 1 "<LSX_D:lsx_d>_operand")) - (match_operand:LSX_D 2 "register_operand") - (match_operand 3 "const_<bitmask>_operand")))] - "reload_completed && ISA_HAS_LSX && !TARGET_64BIT" - [(const_int 0)] -{ - loongarch_split_lsx_insert_d (operands[0], operands[2], operands[3], operands[1]); - DONE; -}) - (define_insn "lsx_vextrins_<lsxfmt_f>_internal" [(set (match_operand:LSX 0 "register_operand" "=f") (vec_merge:LSX @@ -653,70 +636,26 @@ [(set_attr "type" "simd_copy") (set_attr "mode" "<MODE>")]) -(define_insn_and_split "lsx_vpickve2gr_du" +(define_insn "lsx_vpickve2gr_du" [(set (match_operand:DI 0 "register_operand" "=r") (vec_select:DI (match_operand:V2DI 1 "register_operand" "f") (parallel [(match_operand 2 "const_0_or_1_operand" "")])))] "ISA_HAS_LSX" -{ - if (TARGET_64BIT) - return "vpickve2gr.du\t%0,%w1,%2"; - else - return "#"; -} - "reload_completed && ISA_HAS_LSX && !TARGET_64BIT" - [(const_int 0)] -{ - loongarch_split_lsx_copy_d (operands[0], operands[1], operands[2], - gen_lsx_vpickve2gr_wu); - DONE; -} + "vpickve2gr.du\t%0,%w1,%2" [(set_attr "type" "simd_copy") (set_attr "mode" "V2DI")]) -(define_insn_and_split "lsx_vpickve2gr_<lsxfmt_f>" +(define_insn "lsx_vpickve2gr_<lsxfmt_f>" [(set (match_operand:<UNITMODE> 0 "register_operand" "=r") (vec_select:<UNITMODE> (match_operand:LSX_D 1 "register_operand" "f") (parallel [(match_operand 2 "const_<indeximm>_operand" "")])))] "ISA_HAS_LSX" -{ - if (TARGET_64BIT) - return "vpickve2gr.<lsxfmt>\t%0,%w1,%2"; - else - return "#"; -} - "reload_completed && ISA_HAS_LSX && !TARGET_64BIT" - [(const_int 0)] -{ - loongarch_split_lsx_copy_d (operands[0], operands[1], operands[2], - gen_lsx_vpickve2gr_w); - DONE; -} + "vpickve2gr.<lsxfmt>\t%0,%w1,%2" [(set_attr "type" "simd_copy") (set_attr "mode" "<MODE>")]) - -(define_expand "abs<mode>2" - [(match_operand:ILSX 0 "register_operand" "=f") - (abs:ILSX (match_operand:ILSX 1 "register_operand" "f"))] - "ISA_HAS_LSX" -{ - if (ISA_HAS_LSX) - { - emit_insn (gen_vabs<mode>2 (operands[0], operands[1])); - DONE; - } - else - { - rtx reg = gen_reg_rtx (<MODE>mode); - emit_move_insn (reg, CONST0_RTX (<MODE>mode)); - emit_insn (gen_lsx_vadda_<lsxfmt> (operands[0], operands[1], reg)); - DONE; - } -}) - (define_expand "neg<mode>2" [(set (match_operand:ILSX 0 "register_operand") (neg:ILSX (match_operand:ILSX 1 "register_operand")))] @@ -1369,25 +1308,11 @@ if (which_alternative == 1) return "vldi.<lsxfmt>\t%w0,0"; - if (!TARGET_64BIT && (<MODE>mode == V2DImode || <MODE>mode == V2DFmode)) - return "#"; - else - return "vreplgr2vr.<lsxfmt>\t%w0,%z1"; + return "vreplgr2vr.<lsxfmt>\t%w0,%z1"; } [(set_attr "type" "simd_fill") (set_attr "mode" "<MODE>")]) -(define_split - [(set (match_operand:LSX_D 0 "register_operand") - (vec_duplicate:LSX_D - (match_operand:<UNITMODE> 1 "register_operand")))] - "reload_completed && ISA_HAS_LSX && !TARGET_64BIT" - [(const_int 0)] -{ - loongarch_split_lsx_fill_d (operands[0], operands[1]); - DONE; -}) - (define_insn "logb<mode>2" [(set (match_operand:FLSX 0 "register_operand" "=f") (unspec:FLSX [(match_operand:FLSX 1 "register_operand" "f")] @@ -2428,7 +2353,7 @@ [(set_attr "type" "simd_logic") (set_attr "mode" "<MODE>")]) -(define_insn "vabs<mode>2" +(define_insn "abs<mode>2" [(set (match_operand:ILSX 0 "register_operand" "=f") (abs:ILSX (match_operand:ILSX 1 "register_operand" "f")))] "ISA_HAS_LSX" diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-abs.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-abs.c new file mode 100644 index 000000000000..cf971badb51e --- /dev/null +++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-abs.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mlsx" } */ +/* { dg-final { scan-assembler-times "vsigncov.w" 1 } } */ +/* { dg-final { scan-assembler-times "vsigncov.d" 1 } } */ + +int a[4], b[4]; + +extern int abs (int); + +void +foo1 (void) +{ + for (int i = 0; i < 4; i++) + a[i] = abs (b[i]); +} + +long la[2], lb[2]; + +extern long labs (long); + +void +foo2 (void) +{ + for (int i = 0; i < 2; i++) + la[i] = labs (lb[i]); +} From e7b7188b1cf8c174f0e890d4ac279ff480b51043 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 2 Apr 2024 12:31:04 +0200 Subject: [PATCH 354/551] tree-optimization/114557 - reduce ehcleanup peak memory use The following reduces peak memory use for the PR114480 testcase at -O1 which is almost exclusively spent by the ehcleanup pass in allocating PHI nodes. The free_phinodes cache we maintain isn't very effective since it has effectively two slots, one for 4 and one for 9 argument PHIs and it is only ever used for allocations up to 9 arguments but we put all larger PHIs in the 9 argument bucket. This proves uneffective resulting in much garbage to be kept when incrementally growing PHI nodes by edge redirection. The mitigation is to rely on the GC freelist for larger sizes and thus immediately return all larger bucket sized PHIs to it via ggc_free. This reduces the peak memory use from 19.8GB to 11.3GB and compile-time from 359s to 168s. PR tree-optimization/114557 PR tree-optimization/114480 * tree-phinodes.cc (release_phi_node): Return PHIs from allocation buckets not covered by free_phinodes to GC. (remove_phi_node): Release the PHI LHS before freeing the PHI node. * tree-vect-loop.cc (vectorizable_live_operation): Get PHI lhs before releasing it. --- gcc/tree-phinodes.cc | 10 +++++++++- gcc/tree-vect-loop.cc | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/tree-phinodes.cc b/gcc/tree-phinodes.cc index ddd731323e13..5a7e4a94e575 100644 --- a/gcc/tree-phinodes.cc +++ b/gcc/tree-phinodes.cc @@ -223,6 +223,14 @@ release_phi_node (gimple *phi) delink_imm_use (imm); } + /* Immediately return the memory to the allocator when we would + only ever re-use it for a smaller size allocation. */ + if (len - 2 >= NUM_BUCKETS - 2) + { + ggc_free (phi); + return; + } + bucket = len > NUM_BUCKETS - 1 ? NUM_BUCKETS - 1 : len; bucket -= 2; vec_safe_push (free_phinodes[bucket], phi); @@ -445,9 +453,9 @@ remove_phi_node (gimple_stmt_iterator *gsi, bool release_lhs_p) /* If we are deleting the PHI node, then we should release the SSA_NAME node so that it can be reused. */ - release_phi_node (phi); if (release_lhs_p) release_ssa_name (gimple_phi_result (phi)); + release_phi_node (phi); } /* Remove all the phi nodes from BB. */ diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index f33629e9b045..984636edbc5f 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -10962,8 +10962,8 @@ vectorizable_live_operation (vec_info *vinfo, stmt_vec_info stmt_info, lhs_type, &exit_gsi); auto gsi = gsi_for_stmt (use_stmt); - remove_phi_node (&gsi, false); tree lhs_phi = gimple_phi_result (use_stmt); + remove_phi_node (&gsi, false); gimple *copy = gimple_build_assign (lhs_phi, new_tree); gsi_insert_before (&exit_gsi, copy, GSI_SAME_STMT); break; From 03039744f368a24a452e4ea8d946e9c2cedaf1aa Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 3 Apr 2024 09:59:45 +0200 Subject: [PATCH 355/551] expr: Fix up emit_push_insn [PR114552] r13-990 added optimizations in multiple spots to optimize during expansion storing of constant initializers into targets. In the load_register_parameters and expand_expr_real_1 cases, it checks it has a tree as the source and so knows we are reading that whole decl's value, so the code is fine as is, but in the emit_push_insn case it checks for a MEM from which something is pushed and checks for SYMBOL_REF as the MEM's address, but still assumes the whole object is copied, which as the following testcase shows might not always be the case. In the testcase, k is 6 bytes, then 2 bytes of padding, then another 4 bytes, while the emit_push_insn wants to store just the 6 bytes. The following patch simply verifies it is the whole initializer that is being stored, I think that is best thing to do so late in GCC 14 cycle as well for backporting. For GCC 15, perhaps the code could stop requiring it must be at offset zero, nor that the size is equal, but could use get_symbol_constant_value/fold_ctor_reference gimple-fold APIs to actually extract just part of the initializer if we e.g. push just some subset (of course, still verify that it is a subset). For sizes which are power of two bytes and we have some integer modes, we could use as type for fold_ctor_reference corresponding integral types, otherwise dunno, punt or use some structure (e.g. try to find one in the initializer?), whatever. But even in the other spots it could perhaps handle loading of COMPONENT_REFs or MEM_REFs from the .rodata vars. 2024-04-03 Jakub Jelinek <jakub@redhat.com> PR middle-end/114552 * expr.cc (emit_push_insn): Only use store_constructor for immediate_const_ctor_p if int_expr_size matches size. * gcc.c-torture/execute/pr114552.c: New test. --- gcc/expr.cc | 9 ++++--- .../gcc.c-torture/execute/pr114552.c | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr114552.c diff --git a/gcc/expr.cc b/gcc/expr.cc index 2918c4697354..8a1875d7809a 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -5466,6 +5466,7 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size, /* If source is a constant VAR_DECL with a simple constructor, store the constructor to the stack instead of moving it. */ const_tree decl; + HOST_WIDE_INT sz; if (partial == 0 && MEM_P (xinner) && SYMBOL_REF_P (XEXP (xinner, 0)) @@ -5473,9 +5474,11 @@ emit_push_insn (rtx x, machine_mode mode, tree type, rtx size, && VAR_P (decl) && TREE_READONLY (decl) && !TREE_SIDE_EFFECTS (decl) - && immediate_const_ctor_p (DECL_INITIAL (decl), 2)) - store_constructor (DECL_INITIAL (decl), target, 0, - int_expr_size (DECL_INITIAL (decl)), false); + && immediate_const_ctor_p (DECL_INITIAL (decl), 2) + && (sz = int_expr_size (DECL_INITIAL (decl))) > 0 + && CONST_INT_P (size) + && INTVAL (size) == sz) + store_constructor (DECL_INITIAL (decl), target, 0, sz, false); else emit_block_move (target, xinner, size, BLOCK_OP_CALL_PARM); } diff --git a/gcc/testsuite/gcc.c-torture/execute/pr114552.c b/gcc/testsuite/gcc.c-torture/execute/pr114552.c new file mode 100644 index 000000000000..22cb4ee351f2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr114552.c @@ -0,0 +1,24 @@ +/* PR middle-end/114552 */ + +struct __attribute__((packed)) S { short b; int c; }; +struct T { struct S b; int e; }; +static const struct T k = { { 1, 0 }, 0 }; + +__attribute__((noinline)) void +foo (void) +{ + asm volatile ("" : : : "memory"); +} + +__attribute__((noinline)) void +bar (struct S n) +{ + foo (); +} + +int +main () +{ + bar (k.b); + return 0; +} From 8455d6f6cd43b7b143ab9ee19437452fceba9cc9 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 3 Apr 2024 10:02:35 +0200 Subject: [PATCH 356/551] libquadmath: Don't assume the storage for __float128 arguments is aligned [PR114533] With the register_printf_type/register_printf_modifier/register_printf_specifier APIs the C library is just told the size of the argument and is provided with a callback to fetch the argument from va_list using va_arg into C library provided memory. The C library isn't told what alignment requirement it has, but we were using direct load of a __float128 value from that memory which assumes __alignof (__float128) alignment. The following patch fixes that by using memcpy instead. I haven't been able to reproduce an actual crash, tried #include <quadmath.h> #include <stdlib.h> #include <stdio.h> int main () { __float128 r; int prec = 20; int width = 46; char buf[128]; r = 2.0q; r = sqrtq (r); int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", width, r); if ((size_t) n < sizeof buf) printf ("%s\n", buf); /* Prints: +1.41421356237309504880e+00 */ quadmath_snprintf (buf, sizeof buf, "%Qa", r); if ((size_t) n < sizeof buf) printf ("%s\n", buf); /* Prints: 0x1.6a09e667f3bcc908b2fb1366ea96p+0 */ n = quadmath_snprintf (NULL, 0, "%+-#46.*Qe", prec, r); if (n > -1) { char *str = malloc (n + 1); if (str) { quadmath_snprintf (str, n + 1, "%+-#46.*Qe", prec, r); printf ("%s\n", str); /* Prints: +1.41421356237309504880e+00 */ } free (str); } printf ("%+-#*.20Qe\n", width, r); printf ("%Qa\n", r); printf ("%+-#46.*Qe\n", prec, r); printf ("%d %Qe %d %Qe %d %Qe\n", 1, r, 2, r, 3, r); return 0; } In any case, I think memcpy for loading from it is right. 2024-04-03 Simon Chopin <simon.chopin@canonical.com> Jakub Jelinek <jakub@redhat.com> PR libquadmath/114533 * printf/printf_fp.c (__quadmath_printf_fp): Use memcpy to copy __float128 out of args. * printf/printf_fphex.c (__quadmath_printf_fphex): Likewise. Signed-off-by: Simon Chopin <simon.chopin@canonical.com> --- libquadmath/printf/printf_fp.c | 2 +- libquadmath/printf/printf_fphex.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libquadmath/printf/printf_fp.c b/libquadmath/printf/printf_fp.c index 8effcee88faa..9968aa5307cc 100644 --- a/libquadmath/printf/printf_fp.c +++ b/libquadmath/printf/printf_fp.c @@ -363,7 +363,7 @@ __quadmath_printf_fp (struct __quadmath_printf_file *fp, /* Fetch the argument value. */ { - fpnum = **(const __float128 **) args[0]; + memcpy (&fpnum, *(const void *const *) args[0], sizeof (fpnum)); /* Check for special values: not a number or infinity. */ if (isnanq (fpnum)) diff --git a/libquadmath/printf/printf_fphex.c b/libquadmath/printf/printf_fphex.c index a40a6b009456..ddb413563c67 100644 --- a/libquadmath/printf/printf_fphex.c +++ b/libquadmath/printf/printf_fphex.c @@ -163,7 +163,8 @@ __quadmath_printf_fphex (struct __quadmath_printf_file *fp, /* Fetch the argument value. */ { - fpnum.value = **(const __float128 **) args[0]; + memcpy (&fpnum.value, *(const void *const *) args[0], + sizeof (fpnum.value)); /* Check for special values: not a number or infinity. */ if (isnanq (fpnum.value)) From b2460d621efe740bd95ad41afef6d806ec1bd9c7 Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Wed, 3 Apr 2024 12:37:39 +0200 Subject: [PATCH 357/551] GCN: Fix --with-arch= handling in mkoffload [PR111966] The default -march= setting used in mkoffload did not reflect the modified default set by GCC's configure-time --with-arch=, causing issues when generating debug code. gcc/ChangeLog: PR other/111966 * config/gcn/mkoffload.cc (get_arch): New; moved -march= flag handling from ... (main): ... here; call it to handle --with-arch config option and -march= commandline. --- gcc/config/gcn/mkoffload.cc | 90 +++++++++++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 18 deletions(-) diff --git a/gcc/config/gcn/mkoffload.cc b/gcc/config/gcn/mkoffload.cc index 04356b861957..9a438de331ad 100644 --- a/gcc/config/gcn/mkoffload.cc +++ b/gcc/config/gcn/mkoffload.cc @@ -35,6 +35,8 @@ #include "gomp-constants.h" #include "simple-object.h" #include "elf.h" +#include "configargs.h" /* For configure_default_options. */ +#include "multilib.h" /* For multilib_options. */ /* These probably won't (all) be in elf.h for a while. */ #undef EM_AMDGPU @@ -846,6 +848,62 @@ compile_native (const char *infile, const char *outfile, const char *compiler, obstack_free (&argv_obstack, NULL); } +static int +get_arch (const char *str, const char *with_arch_str) +{ + if (strcmp (str, "fiji") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX803; + else if (strcmp (str, "gfx900") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX900; + else if (strcmp (str, "gfx906") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX906; + else if (strcmp (str, "gfx908") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX908; + else if (strcmp (str, "gfx90a") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX90a; + else if (strcmp (str, "gfx1030") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX1030; + else if (strcmp (str, "gfx1036") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX1036; + else if (strcmp (str, "gfx1100") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX1100; + else if (strcmp (str, "gfx1103") == 0) + return EF_AMDGPU_MACH_AMDGCN_GFX1103; + + error ("unrecognized argument in option %<-march=%s%>", str); + + /* The suggestions are based on the configured multilib support; the compiler + itself might support more. */ + if (multilib_options[0] != '\0') + { + /* Example: "march=gfx900/march=gfx906" */ + char *args = (char *) alloca (strlen (multilib_options)); + const char *p = multilib_options, *q = NULL; + args[0] = '\0'; + while (true) + { + p = strchr (p, '='); + if (!p) + break; + if (q) + strcat (args, ", "); + ++p; + q = strchr (p, '/'); + if (q) + strncat (args, p, q-p); + else + strcat (args, p); + } + inform (UNKNOWN_LOCATION, "valid arguments to %<-march=%> are: %s", args); + } + else if (with_arch_str) + inform (UNKNOWN_LOCATION, "valid argument to %<-march=%> is %qs", with_arch_str); + + exit (FATAL_EXIT_CODE); + + return 0; +} + int main (int argc, char **argv) { @@ -853,9 +911,21 @@ main (int argc, char **argv) FILE *out = stdout; FILE *cfile = stdout; const char *outname = 0; + const char *with_arch_str = NULL; progname = tool_name; + gcc_init_libintl (); diagnostic_initialize (global_dc, 0); + diagnostic_color_init (global_dc); + + for (size_t i = 0; i < ARRAY_SIZE (configure_default_options); i++) + if (configure_default_options[i].name != NULL + && strcmp (configure_default_options[i].name, "arch") == 0) + { + with_arch_str = configure_default_options[0].value; + elf_arch = get_arch (configure_default_options[0].value, NULL); + break; + } obstack_init (&files_to_cleanup); if (atexit (mkoffload_cleanup) != 0) @@ -961,24 +1031,8 @@ main (int argc, char **argv) else if (strcmp (argv[i], "-dumpbase") == 0 && i + 1 < argc) dumppfx = argv[++i]; - else if (strcmp (argv[i], "-march=fiji") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX803; - else if (strcmp (argv[i], "-march=gfx900") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX900; - else if (strcmp (argv[i], "-march=gfx906") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX906; - else if (strcmp (argv[i], "-march=gfx908") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX908; - else if (strcmp (argv[i], "-march=gfx90a") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX90a; - else if (strcmp (argv[i], "-march=gfx1030") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1030; - else if (strcmp (argv[i], "-march=gfx1036") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1036; - else if (strcmp (argv[i], "-march=gfx1100") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1100; - else if (strcmp (argv[i], "-march=gfx1103") == 0) - elf_arch = EF_AMDGPU_MACH_AMDGCN_GFX1103; + else if (startswith (argv[i], "-march=")) + elf_arch = get_arch (argv[i] + strlen ("-march="), with_arch_str); #define STR "-mstack-size=" else if (startswith (argv[i], STR)) gcn_stack_size = atoi (argv[i] + strlen (STR)); From 7f65d8267fbfd19cf21a3dc71d27e989e75044a3 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Wed, 27 Mar 2024 21:51:13 +0000 Subject: [PATCH 358/551] libstdc++: Reverse arguments in constraint for std::optional's <=> [PR104606] This is a workaround for a possible compiler bug that causes constraint recursion in the operator<=>(const optional<T>&, const U&) overload. libstdc++-v3/ChangeLog: PR libstdc++/104606 * include/std/optional (operator<=>(const optional<T>&, const U&)): Reverse order of three_way_comparable_with template arguments. * testsuite/20_util/optional/relops/104606.cc: New test. --- libstdc++-v3/include/std/optional | 2 +- .../20_util/optional/relops/104606.cc | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/20_util/optional/relops/104606.cc diff --git a/libstdc++-v3/include/std/optional b/libstdc++-v3/include/std/optional index 1e88e8b8880d..3507c36a4d82 100644 --- a/libstdc++-v3/include/std/optional +++ b/libstdc++-v3/include/std/optional @@ -1430,7 +1430,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #ifdef __cpp_lib_three_way_comparison template<typename _Tp, typename _Up> requires (!__is_optional_v<_Up>) - && three_way_comparable_with<_Tp, _Up> + && three_way_comparable_with<_Up, _Tp> constexpr compare_three_way_result_t<_Tp, _Up> operator<=>(const optional<_Tp>& __x, const _Up& __v) { return bool(__x) ? *__x <=> __v : strong_ordering::less; } diff --git a/libstdc++-v3/testsuite/20_util/optional/relops/104606.cc b/libstdc++-v3/testsuite/20_util/optional/relops/104606.cc new file mode 100644 index 000000000000..2b8df2452199 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/optional/relops/104606.cc @@ -0,0 +1,18 @@ +// { dg-do compile { target c++17 } } + +// Bug 104606 comparison operator resolution with std::optional and -std=c++20 + +#include <optional> +#include <variant> +#include <vector> + +struct Value : std::variant<std::vector<Value>> { }; + +struct Comparator { + template <typename T> bool operator<=(const T &) { return true; } +}; + +std::optional<Value> o; +Comparator c; + +auto x = c <= o; From ce7cb109ff429bcdca03fccfc444b610c6cb528b Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Wed, 3 Apr 2024 14:16:41 +0200 Subject: [PATCH 359/551] GCN: install.texi update for Newlib change and LLVM 18 release gcc/ChangeLog: * doc/install.texi (amdgcn-*-amdhsa): Update Newlib recommendation and update wording for LLVM 18 release. --- gcc/doc/install.texi | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 269fe7ec8701..970b1a67e742 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -3944,7 +3944,9 @@ Instead of GNU Binutils, you will need to install LLVM 15, or later, and copy by specifying a @code{--with-multilib-list=} that does not list @code{gfx1100} and @code{gfx1103}. -Use Newlib (4.3.0 or newer; 4.4.0 or later is recommended). +Use Newlib (4.3.0 or newer; 4.4.0 contains some improvements and git commit +7dd4eb1db (2025-03-25, post-4.4.0) fixes device console output for GFX10 and +GFX11 devices). To run the binaries, install the HSA Runtime from the @uref{https://rocm.docs.amd.com/,,ROCm Platform}, and use @@ -3954,8 +3956,8 @@ on the GPU. To enable support for GCN3 Fiji devices (gfx803), GCC has to be configured with @option{--with-arch=@code{fiji}} or @option{--with-multilib-list=@code{fiji},...}. Note that support for Fiji -devices has been removed in ROCm 4.0 and support in LLVM is deprecated and will -be removed in LLVM 18. +devices has been removed in ROCm 4.0 and support in LLVM was deprecated and has +been removed in LLVM 18. @html <hr /> From d60968de6961cef144a5cf8701ea0d3f4ea90f18 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Mon, 1 Apr 2024 13:58:20 +0100 Subject: [PATCH 360/551] libphobos, Darwin: Enable libphobos for most Darwin. Earlier Darwin systems can be made to work too - but they need non- standard 'binutils', so for now these must be enabled specifically. libphobos/ChangeLog: * configure.tgt: Enable libphobos for Darwin >= 12. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- libphobos/configure.tgt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libphobos/configure.tgt b/libphobos/configure.tgt index 138793804163..715964444881 100644 --- a/libphobos/configure.tgt +++ b/libphobos/configure.tgt @@ -27,6 +27,9 @@ case "${target}" in *-*-dragonfly*) LIBPHOBOS_SUPPORTED=yes ;; + aarch64-*-darwin2*) + LIBPHOBOS_SUPPORTED=yes + ;; aarch64*-*-linux*) LIBPHOBOS_SUPPORTED=yes ;; @@ -58,6 +61,12 @@ case "${target}" in sparc*-*-solaris2.11*) LIBPHOBOS_SUPPORTED=yes ;; + *-*-darwin9* | *-*-darwin1[01]*) + LIBDRUNTIME_ONLY=yes + ;; + x86_64-*-darwin1[2-9]* | x86_64-*-darwin2* | i?86-*-darwin1[2-7]) + LIBPHOBOS_SUPPORTED=yes + ;; x86_64-*-freebsd* | i?86-*-freebsd*) LIBPHOBOS_SUPPORTED=yes ;; From 6f91cce9a314cd4bce16fe52a2ffbeb93d59320b Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Wed, 3 Apr 2024 15:47:12 +0200 Subject: [PATCH 361/551] lto-wrapper.cc: Add offload target name to 'offload_args' suffix lto-wrapper.cc's compile_offload_image calls mkoffload with an @./a.offload_args argument ('a.' in case of, e.g., 'a.out'). However, when generating code for both nvptx and gcn, they use the same name with -save-temps. Hence, this commit adds a <target> + '.' before 'offload_args' in line with other offload-target-specific files. gcc/ChangeLog: * lto-wrapper.cc (compile_offload_image): Prefix 'offload_args' suffix by the target name. --- gcc/lto-wrapper.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/lto-wrapper.cc b/gcc/lto-wrapper.cc index ca53e4b462eb..610594cdc2ba 100644 --- a/gcc/lto-wrapper.cc +++ b/gcc/lto-wrapper.cc @@ -993,7 +993,8 @@ compile_offload_image (const char *target, const char *compiler_path, obstack_ptr_grow (&argv_obstack, NULL); argv = XOBFINISH (&argv_obstack, char **); - fork_execute (argv[0], argv, true, "offload_args"); + suffix = concat (target, ".offload_args", NULL); + fork_execute (argv[0], argv, true, suffix); obstack_free (&argv_obstack, NULL); free_array_of_ptrs ((void **) paths, n_paths); From cab32bacaea268ec062b1fb4fc662d90c9d1cfce Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Mon, 26 Feb 2024 08:38:58 -0800 Subject: [PATCH 362/551] tree-profile: Disable indirect call profiling for IFUNC resolvers We can't profile indirect calls to IFUNC resolvers nor their callees as it requires TLS which hasn't been set up yet when the dynamic linker is resolving IFUNC symbols. Add an IFUNC resolver caller marker to cgraph_node and set it if the function is called by an IFUNC resolver. Disable indirect call profiling for IFUNC resolvers and their callees. Tested with profiledbootstrap on Fedora 39/x86-64. gcc/ChangeLog: PR tree-optimization/114115 * cgraph.h (symtab_node): Add check_ifunc_callee_symtab_nodes. (cgraph_node): Add called_by_ifunc_resolver. * cgraphunit.cc (symbol_table::compile): Call symtab_node::check_ifunc_callee_symtab_nodes. * symtab.cc (check_ifunc_resolver): New. (ifunc_ref_map): Likewise. (is_caller_ifunc_resolver): Likewise. (symtab_node::check_ifunc_callee_symtab_nodes): Likewise. * tree-profile.cc (gimple_gen_ic_func_profiler): Disable indirect call profiling for IFUNC resolvers and their callees. gcc/testsuite/ChangeLog: PR tree-optimization/114115 * gcc.dg/pr114115.c: New test. --- gcc/cgraph.h | 6 +++ gcc/cgraphunit.cc | 2 + gcc/symtab.cc | 89 +++++++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/pr114115.c | 24 +++++++++ gcc/tree-profile.cc | 8 ++- 5 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr114115.c diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 47f35e8078df..a8c3224802c1 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -479,6 +479,9 @@ struct GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"), Return NULL if there's no such node. */ static symtab_node *get_for_asmname (const_tree asmname); + /* Check symbol table for callees of IFUNC resolvers. */ + static void check_ifunc_callee_symtab_nodes (void); + /* Verify symbol table for internal consistency. */ static DEBUG_FUNCTION void verify_symtab_nodes (void); @@ -896,6 +899,7 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node redefined_extern_inline (false), tm_may_enter_irr (false), ipcp_clone (false), declare_variant_alt (false), calls_declare_variant_alt (false), gc_candidate (false), + called_by_ifunc_resolver (false), m_uid (uid), m_summary_id (-1) {} @@ -1495,6 +1499,8 @@ struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node is set for local SIMD clones when they are created and cleared if the vectorizer uses them. */ unsigned gc_candidate : 1; + /* Set if the function is called by an IFUNC resolver. */ + unsigned called_by_ifunc_resolver : 1; private: /* Unique id of the node. */ diff --git a/gcc/cgraphunit.cc b/gcc/cgraphunit.cc index d200166f7e93..2bd0289ffba5 100644 --- a/gcc/cgraphunit.cc +++ b/gcc/cgraphunit.cc @@ -2317,6 +2317,8 @@ symbol_table::compile (void) symtab_node::checking_verify_symtab_nodes (); + symtab_node::check_ifunc_callee_symtab_nodes (); + timevar_push (TV_CGRAPHOPT); if (pre_ipa_mem_report) dump_memory_report ("Memory consumption before IPA"); diff --git a/gcc/symtab.cc b/gcc/symtab.cc index 4c7e3c135caf..3256133891da 100644 --- a/gcc/symtab.cc +++ b/gcc/symtab.cc @@ -1369,6 +1369,95 @@ symtab_node::verify (void) timevar_pop (TV_CGRAPH_VERIFY); } +/* Return true and set *DATA to true if NODE is an ifunc resolver. */ + +static bool +check_ifunc_resolver (cgraph_node *node, void *data) +{ + if (node->ifunc_resolver) + { + bool *is_ifunc_resolver = (bool *) data; + *is_ifunc_resolver = true; + return true; + } + return false; +} + +static auto_bitmap ifunc_ref_map; + +/* Return true if any caller of NODE is an ifunc resolver. */ + +static bool +is_caller_ifunc_resolver (cgraph_node *node) +{ + bool is_ifunc_resolver = false; + + for (cgraph_edge *e = node->callers; e; e = e->next_caller) + { + /* Return true if caller is known to be an IFUNC resolver. */ + if (e->caller->called_by_ifunc_resolver) + return true; + + /* Check for recursive call. */ + if (e->caller == node) + continue; + + /* Skip if it has been visited. */ + unsigned int uid = e->caller->get_uid (); + if (bitmap_bit_p (ifunc_ref_map, uid)) + continue; + bitmap_set_bit (ifunc_ref_map, uid); + + if (is_caller_ifunc_resolver (e->caller)) + { + /* Return true if caller is an IFUNC resolver. */ + e->caller->called_by_ifunc_resolver = true; + return true; + } + + /* Check if caller's alias is an IFUNC resolver. */ + e->caller->call_for_symbol_and_aliases (check_ifunc_resolver, + &is_ifunc_resolver, + true); + if (is_ifunc_resolver) + { + /* Return true if caller's alias is an IFUNC resolver. */ + e->caller->called_by_ifunc_resolver = true; + return true; + } + } + + return false; +} + +/* Check symbol table for callees of IFUNC resolvers. */ + +void +symtab_node::check_ifunc_callee_symtab_nodes (void) +{ + symtab_node *node; + + FOR_EACH_SYMBOL (node) + { + cgraph_node *cnode = dyn_cast <cgraph_node *> (node); + if (!cnode) + continue; + + unsigned int uid = cnode->get_uid (); + if (bitmap_bit_p (ifunc_ref_map, uid)) + continue; + bitmap_set_bit (ifunc_ref_map, uid); + + bool is_ifunc_resolver = false; + cnode->call_for_symbol_and_aliases (check_ifunc_resolver, + &is_ifunc_resolver, true); + if (is_ifunc_resolver || is_caller_ifunc_resolver (cnode)) + cnode->called_by_ifunc_resolver = true; + } + + bitmap_clear (ifunc_ref_map); +} + /* Verify symbol table for internal consistency. */ DEBUG_FUNCTION void diff --git a/gcc/testsuite/gcc.dg/pr114115.c b/gcc/testsuite/gcc.dg/pr114115.c new file mode 100644 index 000000000000..2629f5918779 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr114115.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -fprofile-generate -fdump-tree-optimized" } */ +/* { dg-require-profiling "-fprofile-generate" } */ +/* { dg-require-ifunc "" } */ + +void *foo_ifunc2() __attribute__((ifunc("foo_resolver"))); + +void bar(void) +{ +} + +static int f3() +{ + bar (); + return 5; +} + +void (*foo_resolver(void))(void) +{ + f3(); + return bar; +} + +/* { dg-final { scan-tree-dump-not "__gcov_indirect_call_profiler_v" "optimized" } } */ diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index aed13e2b1bc3..625f7e9229ad 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -520,7 +520,13 @@ gimple_gen_ic_func_profiler (void) gcall *stmt1; tree tree_uid, cur_func, void0; - if (c_node->only_called_directly_p ()) + /* Disable indirect call profiling for an IFUNC resolver and its + callees since it requires TLS which hasn't been set up yet when + the dynamic linker is resolving IFUNC symbols. See + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114115 + */ + if (c_node->only_called_directly_p () + || c_node->called_by_ifunc_resolver) return; gimple_init_gcov_profiler (); From 8f9e92eec3230d2f1305d414984e89aaebdfe0c6 Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra <wilco.dijkstra@arm.com> Date: Wed, 27 Mar 2024 16:06:13 +0000 Subject: [PATCH 363/551] libgcc: Add missing HWCAP entries to aarch64/cpuinfo.c A few HWCAP entries are missing from aarch64/cpuinfo.c. This results in build errors on older machines. libgcc/ * config/aarch64/cpuinfo.c: Add HWCAP_EVTSTRM, HWCAP_CRC32, HWCAP_CPUID, HWCAP_PACA and HWCAP_PACG. --- libgcc/config/aarch64/cpuinfo.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/libgcc/config/aarch64/cpuinfo.c b/libgcc/config/aarch64/cpuinfo.c index 3c6fb8a575b4..4b94fca86950 100644 --- a/libgcc/config/aarch64/cpuinfo.c +++ b/libgcc/config/aarch64/cpuinfo.c @@ -52,15 +52,15 @@ struct { #ifndef AT_HWCAP #define AT_HWCAP 16 #endif -#ifndef HWCAP_CPUID -#define HWCAP_CPUID (1 << 11) -#endif #ifndef HWCAP_FP #define HWCAP_FP (1 << 0) #endif #ifndef HWCAP_ASIMD #define HWCAP_ASIMD (1 << 1) #endif +#ifndef HWCAP_EVTSTRM +#define HWCAP_EVTSTRM (1 << 2) +#endif #ifndef HWCAP_AES #define HWCAP_AES (1 << 3) #endif @@ -73,6 +73,9 @@ struct { #ifndef HWCAP_SHA2 #define HWCAP_SHA2 (1 << 6) #endif +#ifndef HWCAP_CRC32 +#define HWCAP_CRC32 (1 << 7) +#endif #ifndef HWCAP_ATOMICS #define HWCAP_ATOMICS (1 << 8) #endif @@ -82,6 +85,9 @@ struct { #ifndef HWCAP_ASIMDHP #define HWCAP_ASIMDHP (1 << 10) #endif +#ifndef HWCAP_CPUID +#define HWCAP_CPUID (1 << 11) +#endif #ifndef HWCAP_ASIMDRDM #define HWCAP_ASIMDRDM (1 << 12) #endif @@ -133,6 +139,12 @@ struct { #ifndef HWCAP_SB #define HWCAP_SB (1 << 29) #endif +#ifndef HWCAP_PACA +#define HWCAP_PACA (1 << 30) +#endif +#ifndef HWCAP_PACG +#define HWCAP_PACG (1UL << 31) +#endif #ifndef HWCAP2_DCPODP #define HWCAP2_DCPODP (1 << 0) From 5c749db15fab032df757b72e8114b89572783a20 Mon Sep 17 00:00:00 2001 From: Mark Wielaard <mark@klomp.org> Date: Wed, 3 Apr 2024 17:35:25 +0200 Subject: [PATCH 364/551] Regenerate i386.opt.urls LoongArch added an -mtls-dialect option, causing the similarly named option for i386 get renumbered. Fixes: b253b4695dda ("LoongArch: Add support for TLS descriptors.") gcc/ChangeLog: * config/i386/i386.opt.urls: Regenerate. --- gcc/config/i386/i386.opt.urls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/i386/i386.opt.urls b/gcc/config/i386/i386.opt.urls index fa821eba2006..81c5bb9a9270 100644 --- a/gcc/config/i386/i386.opt.urls +++ b/gcc/config/i386/i386.opt.urls @@ -128,7 +128,7 @@ mstackrealign UrlSuffix(gcc/x86-Options.html#index-mstackrealign) mtls-dialect= -UrlSuffix(gcc/x86-Options.html#index-mtls-dialect-1) +UrlSuffix(gcc/x86-Options.html#index-mtls-dialect-2) mtls-direct-seg-refs UrlSuffix(gcc/x86-Options.html#index-mtls-direct-seg-refs) From f37555028717cb1454ee258afdf68aea1c7a50e9 Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Wed, 3 Apr 2024 20:47:47 +0000 Subject: [PATCH 365/551] Update gcc sv.po * sv.po: Update. --- gcc/po/sv.po | 203 +++++++++++++++++++++------------------------------ 1 file changed, 82 insertions(+), 121 deletions(-) diff --git a/gcc/po/sv.po b/gcc/po/sv.po index 514eb7c764aa..d8a55cf55d3c 100644 --- a/gcc/po/sv.po +++ b/gcc/po/sv.po @@ -32,7 +32,7 @@ msgstr "" "Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2024-03-24 12:59+0100\n" +"PO-Revision-Date: 2024-04-02 09:51+0200\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -54589,16 +54589,14 @@ msgid "import declared %q#D here" msgstr "importdeklarerad %q#D här" #: cp/decl.cc:2306 cp/decl.cc:16628 -#, fuzzy, gcc-internal-format -#| msgid "conflicting exporting declaration %qD" +#, gcc-internal-format msgid "conflicting exporting for declaration %qD" -msgstr "motstridande exporterande deklaration av %qD" +msgstr "motstridande exporterande för deklaration av %qD" #: cp/decl.cc:2308 cp/decl.cc:16630 -#, fuzzy, gcc-internal-format -#| msgid "previously declared here" +#, gcc-internal-format msgid "previously declared here without exporting" -msgstr "tidigare deklarerad här" +msgstr "tidigare deklarerad här utan att exporteras" #: cp/decl.cc:2335 #, gcc-internal-format @@ -54781,16 +54779,14 @@ msgid " enters %<consteval if%> statement" msgstr " går in i %<consteval if%>-sats" #: cp/decl.cc:3829 cp/decl.cc:4003 -#, fuzzy, gcc-internal-format -#| msgid "ISO C99 does not support %qE" +#, gcc-internal-format msgid " does not destroy %qD" -msgstr "ISO C99 stödjer inte %qE" +msgstr " förstör inte %qD" #: cp/decl.cc:3831 cp/decl.cc:3986 -#, fuzzy, gcc-internal-format -#| msgid "%s does not take any feature options" +#, gcc-internal-format msgid " does not clean up handled exception" -msgstr "%s tar inte några funktionsflaggor" +msgstr " städar inte upp det hanterade undantaget" #: cp/decl.cc:3922 #, gcc-internal-format @@ -55631,10 +55627,9 @@ msgid "constraints on a non-templated function" msgstr "begränsning av en funktion som inte är en mall" #: cp/decl.cc:10590 -#, fuzzy, gcc-internal-format -#| msgid "friend declaration not in class definition" +#, gcc-internal-format msgid "constrained non-template friend declaration must be a definition" -msgstr "vändeklaration är inte i klassdefinition" +msgstr "begränsad vändeklaration som inte är en mall måste vara en definition" #: cp/decl.cc:10597 #, gcc-internal-format @@ -55697,10 +55692,9 @@ msgid "static member function %qD cannot have cv-qualifier" msgstr "statisk medlemsfunktion %qD kan inte ha cv-kvalificerare" #: cp/decl.cc:10818 -#, fuzzy, gcc-internal-format -#| msgid "static member function %qD cannot have cv-qualifier" +#, gcc-internal-format msgid "explicit object member function %qD cannot have cv-qualifier" -msgstr "statisk medlemsfunktion %qD kan inte ha cv-kvalificerare" +msgstr "explicit objektmedlemsfunktion %qD kan inte ha cv-kvalificerare" #: cp/decl.cc:10823 #, gcc-internal-format @@ -55713,16 +55707,14 @@ msgid "static member function %qD cannot have ref-qualifier" msgstr "statisk medlemsfunktion %qD kan inte ha ref-kvalificerare" #: cp/decl.cc:10826 -#, fuzzy, gcc-internal-format -#| msgid "static member function %qD cannot have ref-qualifier" +#, gcc-internal-format msgid "explicit object member function %qD cannot have ref-qualifier" -msgstr "statisk medlemsfunktion %qD kan inte ha ref-kvalificerare" +msgstr "explicit objektmedlemsfunktion %qD kan inte ha ref-kvalificerare" #: cp/decl.cc:10832 cp/decl.cc:13715 cp/decl.cc:13725 cp/parser.cc:11972 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "explicit object parameter declared here" -msgstr "mallparametern %qD deklarerad här" +msgstr "explicit objektparameter deklarerad här" #: cp/decl.cc:10844 #, gcc-internal-format @@ -56304,31 +56296,27 @@ msgstr "onödiga parenteser i deklaration av %qs" #: cp/decl.cc:13277 #, gcc-internal-format msgid "remove parentheses" -msgstr "ta port parenteser" +msgstr "ta bort parenteser" #: cp/decl.cc:13345 -#, fuzzy, gcc-internal-format -#| msgid "alias template deduction only available with %<-std=c++20%> or %<-std=gnu++20%>" +#, gcc-internal-format msgid "explicit object member function only available with %<-std=c++23%> or %<-std=gnu++23%>" -msgstr "aliasmallhärledning är endast tillgängligt med %<-std=c++20%> eller %<-std=gnu++20%>" +msgstr "explicita objektmedlemsfunktioner är endast tillgängliga med %<-std=c++23%> eller %<-std=gnu++23%>" #: cp/decl.cc:13359 -#, fuzzy, gcc-internal-format -#| msgid "Function %qs at %L cannot have an initializer" +#, gcc-internal-format msgid "a function type cannot have an explicit object parameter" -msgstr "Funktion %qs vid %L kan inte ha en initierare" +msgstr "en funktionstyp kan inte ha en explicit objektparameter" #: cp/decl.cc:13365 -#, fuzzy, gcc-internal-format -#| msgid "a conversion function cannot have a trailing return type" +#, gcc-internal-format msgid "a pointer to function type cannot have an explicit object parameter" -msgstr "en konverteringsfunktion kan inte ha en avslutande returtyp" +msgstr "en pekare på en funktionstyp kan inte ha en explicit objektparameter" #: cp/decl.cc:13369 -#, fuzzy, gcc-internal-format -#| msgid " member function type %qT is not a valid template argument" +#, gcc-internal-format msgid "a pointer to member function type cannot have an explicit object parameter" -msgstr " medlemsfunktionstypen %qT är inte ett giltigt mallargument" +msgstr "en pekare på en medlemsfunktionstyp kan inte ha en explicit objektparameter" #: cp/decl.cc:13377 #, gcc-internal-format @@ -56336,10 +56324,9 @@ msgid "the type of a pointer to explicit object member function is a regular poi msgstr "typen på en pekare till en explicit objektmedlemsfunktion är en vanlig pekare på en funktionstyp" #: cp/decl.cc:13381 -#, fuzzy, gcc-internal-format -#| msgid "typedef may not be a member function definition" +#, gcc-internal-format msgid "the type of an explicit object member function is a regular function type" -msgstr "typedef får inte vara en medlemsfunktionsdefinition" +msgstr "type på en explicit objektmedlemsfunktion är en normal funktionstyp" #: cp/decl.cc:13402 #, gcc-internal-format @@ -56347,10 +56334,9 @@ msgid "only the first parameter of a member function can be declared as an expli msgstr "endast den första parametern till en medlemsfunktion kan deklareras som en explicit objektparameter" #: cp/decl.cc:13407 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "valid explicit object parameter declared here" -msgstr "mallparametern %qD deklarerad här" +msgstr "giltig explicit objektparameter deklarerad här" #: cp/decl.cc:13411 #, gcc-internal-format @@ -56498,16 +56484,14 @@ msgid "friend function definition %qs cannot have a name qualified with %<%D::%> msgstr "vänfunktionsdefinitionen %qs får inte ha ett namn kvalificerat med %<%D::%>" #: cp/decl.cc:13704 -#, fuzzy, gcc-internal-format -#| msgid "non-member function %qD cannot have cv-qualifier" +#, gcc-internal-format msgid "a non-member function cannot have an explicit object parameter" -msgstr "icke-medlemsfunktion %qD kan inte ha cv-kvalificerare" +msgstr "en icke-medlemsfunktion kan inte ha en explicit objektparameter" #: cp/decl.cc:13712 -#, fuzzy, gcc-internal-format -#| msgid "implicit templates may not be %<virtual%>" +#, gcc-internal-format msgid "an explicit object member function cannot be %<virtual%>" -msgstr "implicita mallar får inte vara %<virtual%>" +msgstr "en explicit objektmedlemsfunktion får inte vara %<virtual%>" #: cp/decl.cc:13722 #, gcc-internal-format @@ -56896,10 +56880,9 @@ msgid "storage class %<thread_local%> invalid for function %qs" msgstr "lagringsklassen %<thread_local%> är ogiltig för funktionen %qs" #: cp/decl.cc:15015 -#, fuzzy, gcc-internal-format -#| msgid "alignment specified for function %qE" +#, gcc-internal-format msgid "%<constinit%> specifier invalid for function %qs" -msgstr "minnesjustering angiven för funktionen %qE" +msgstr "specificeraren %<constinit%> är ogiltig för funktionen %qs" #: cp/decl.cc:15018 #, gcc-internal-format @@ -57277,8 +57260,7 @@ msgid "duplicate base type %qT invalid" msgstr "upprepat bastyp %qT ogiltig" #: cp/decl.cc:16969 -#, fuzzy, gcc-internal-format -#| msgid "cannot declare %qD in a different module" +#, gcc-internal-format msgid "cannot declare %qD in different module" msgstr "det går inte att deklarera %qD i en annan modul" @@ -59205,10 +59187,9 @@ msgid "unknown header kind %qs" msgstr "okänd huvudsort %qs" #: cp/name-lookup.cc:2856 cp/name-lookup.cc:3932 cp/name-lookup.cc:4029 -#, fuzzy, gcc-internal-format -#| msgid "alias template deduction only available with %<-std=c++20%> or %<-std=gnu++20%>" +#, gcc-internal-format msgid "name-independent declarations only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "aliasmallhärledning är endast tillgängligt med %<-std=c++20%> eller %<-std=gnu++20%>" +msgstr "namnoberoende deklarationer är endast tillgängliga med %<-std=c++2c%> eller %<-std=gnu++2c%>" #: cp/name-lookup.cc:2887 #, gcc-internal-format @@ -59266,28 +59247,24 @@ msgid "%s %s %p %d" msgstr "%s %s %p %d" #: cp/name-lookup.cc:5101 -#, fuzzy, gcc-internal-format -#| msgid "%q#D does not have external linkage" +#, gcc-internal-format msgid "exporting %q#D that does not have external linkage" -msgstr "%q#D har inte extern länkning" +msgstr "exporterar %q#D som inte har extern länkning" #: cp/name-lookup.cc:5106 -#, fuzzy, gcc-internal-format -#| msgid "%q#D declared here" +#, gcc-internal-format msgid "%q#D declared here with no linkage" -msgstr "%q#D är deklarerad här" +msgstr "%q#D är deklarerad här utan någon länkning" #: cp/name-lookup.cc:5109 -#, fuzzy, gcc-internal-format -#| msgid "%q#D does not have external linkage" +#, gcc-internal-format msgid "%q#D declared here with internal linkage" -msgstr "%q#D har inte extern länkning" +msgstr "%q#D är deklarerad här med intern länkning" #: cp/name-lookup.cc:5112 -#, fuzzy, gcc-internal-format -#| msgid "%q#D declared here" +#, gcc-internal-format msgid "%q#D declared here with module linkage" -msgstr "%q#D är deklarerad här" +msgstr "%q#D är deklarerad här med modullänkning" #: cp/name-lookup.cc:5877 #, gcc-internal-format @@ -59412,10 +59389,9 @@ msgid " %qE" msgstr " %qE" #: cp/name-lookup.cc:7085 -#, fuzzy, gcc-internal-format -#| msgid "%<std::%s%> is defined in header %qs; did you forget to %<#include %s%>?" +#, gcc-internal-format msgid "%<std::%s%> is defined in header %qs; this is probably fixable by adding %<#include %s%>" -msgstr "%<std::%s%> är definierad i huvudet %qs; glömde du %<#include %s%>?" +msgstr "%<std::%s%> är definierad i huvudet %qs; detta går förmodligen att lösa genom att lägga till %<#include %s%>" #: cp/name-lookup.cc:7091 #, gcc-internal-format @@ -59995,16 +59971,15 @@ msgid "%<~auto%> only available with %<-std=c++14%> or %<-std=gnu++14%>" msgstr "%<~auto%> är endast tillgängligt med %<-std=c++14%> eller %<-std=gnu++14%>" #: cp/parser.cc:6729 cp/parser.cc:6733 -#, fuzzy, gcc-internal-format -#| msgid "template-id not allowed for destructor" +#, gcc-internal-format msgid "template-id not allowed for destructor in C++20" -msgstr "mall-id är inte tillåtet för destruerare" +msgstr "mall-id är inte tillåtet för destruerare i C++20" +# %qs blir den fixa strängen "< >" #: cp/parser.cc:6735 cp/parser.cc:32577 -#, fuzzy, gcc-internal-format -#| msgid "remove parentheses" +#, gcc-internal-format msgid "remove the %qs" -msgstr "ta port parenteser" +msgstr "ta bort %qs" #: cp/parser.cc:6843 #, gcc-internal-format @@ -60097,10 +60072,9 @@ msgid "two consecutive %<[%> shall only introduce an attribute" msgstr "två på varandra följande %<[%> får bara introducera ett attribut" #: cp/parser.cc:8017 -#, fuzzy, gcc-internal-format -#| msgid "types may not be defined within %<__builtin_offsetof%>" +#, gcc-internal-format msgid "types may not be defined in %<__builtin_classify_type%> calls" -msgstr "typer får inte definieras i %<__builtin_offsetof%>" +msgstr "typer får inte definieras inuti anrop av %<__builtin_classify_type%>" #: cp/parser.cc:8400 cp/parser.cc:8429 #, gcc-internal-format @@ -60329,10 +60303,9 @@ msgid "a lambda with captures may not have an explicit object parameter of an un msgstr "ett lambda med fångster kan inte ha en explicit objektparameter av en orelaterad typ" #: cp/parser.cc:11945 -#, fuzzy, gcc-internal-format -#| msgid "%<static%> lambda specifier with lambda capture" +#, gcc-internal-format msgid "%<mutable%> lambda specifier with explicit object parameter" -msgstr "lambdaspecificeraren %<static%> med lambdafångst" +msgstr "lambdaspecificeraren %<mutable%> med en explicit objektparameter" #: cp/parser.cc:11954 #, gcc-internal-format @@ -60350,10 +60323,9 @@ msgid "explicit object parameter is already a mutable reference" msgstr "explicit objektparameter är redan en muterbar referens" #: cp/parser.cc:11969 -#, fuzzy, gcc-internal-format -#| msgid "%<static%> lambda specifier with lambda capture" +#, gcc-internal-format msgid "%<static%> lambda specifier with explicit object parameter" -msgstr "lambdaspecificeraren %<static%> med lambdafångst" +msgstr "lambdaspecificeraren %<static%> med en explicit objektparameter" #: cp/parser.cc:11987 #, gcc-internal-format @@ -60544,10 +60516,9 @@ msgid "expected jump-statement" msgstr "hoppsats förväntades" #: cp/parser.cc:15090 -#, fuzzy, gcc-internal-format -#| msgid "expected module-name" +#, gcc-internal-format msgid "expected module-partition" -msgstr "modulnamn förväntades" +msgstr "modulpartition förväntades" #: cp/parser.cc:15092 #, gcc-internal-format @@ -60691,10 +60662,9 @@ msgid "invalid initializer for structured binding declaration" msgstr "ogiltig initierare för deklaration av strukturerad bindning" #: cp/parser.cc:16371 -#, fuzzy, gcc-internal-format -#| msgid "DATA array %qs at %L must be specified in a previous declaration" +#, gcc-internal-format msgid "%<this%> must be the first specifier in a parameter declaration" -msgstr "DATA-vektor %qs vid %L måste anges i en tidigare deklaration" +msgstr "%<this%> måste anges vara den första specificeraren i en parameterdeklaration" #: cp/parser.cc:16394 #, gcc-internal-format @@ -60782,10 +60752,9 @@ msgid "%<static_assert%> without a message only available with %<-std=c++17%> or msgstr "%<static_assert%> utan ett meddelande är endast tillgänglig med %<-std=c++17%> eller %<-std=gnu++17%>" #: cp/parser.cc:16974 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> without a message only available with %<-std=c++17%> or %<-std=gnu++17%>" +#, gcc-internal-format msgid "%<static_assert%> with non-string message only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "%<static_assert%> utan ett meddelande är endast tillgänglig med %<-std=c++17%> eller %<-std=gnu++17%>" +msgstr "%<static_assert%> med ett meddelande som inte är en sträng är endast tillgänglig med %<-std=c++2c%> eller %<-std=gnu++2c%>" #: cp/parser.cc:17172 #, gcc-internal-format @@ -61010,10 +60979,9 @@ msgid "use of %<auto%> in lambda parameter declaration only available with %<-st msgstr "användning av %<auto%> i lambdaparameterdeklarationer är endast tillgängligt med %<-std=c++14%> eller %<-std=gnu++14%>" #: cp/parser.cc:20356 -#, fuzzy, gcc-internal-format -#| msgid "use of %<auto%> in parameter declaration only available with %<-std=c++20%> or %<-fconcepts%>" +#, gcc-internal-format msgid "use of %<auto%> in template argument only available with %<-fconcepts-ts%>" -msgstr "användning av %<auto%> i parameterdeklarationer är endast tillgängligt med %<-std=c++20%> eller %<-fconcepts%>" +msgstr "användning av %<auto%> i mallargument är endast tillgängligt med %<-fconcepts-ts%>" #: cp/parser.cc:20360 #, gcc-internal-format @@ -61301,10 +61269,9 @@ msgid "%<asm%> qualifier outside of function body" msgstr "%<asm%>-kvalificerare utanför funktionskropp" #: cp/parser.cc:22948 -#, fuzzy, gcc-internal-format -#| msgid "attribute ignored in declaration of %q#T" +#, gcc-internal-format msgid "attributes ignored on %<asm%> declaration" -msgstr "attribut ignoreras i deklaration av %q#T" +msgstr "attribut ignoreras på en %<asm%>-deklaration" #: cp/parser.cc:23035 #, gcc-internal-format @@ -61499,16 +61466,14 @@ msgid "types may not be defined in parameter types" msgstr "typer får inte definieras i parametertyper" #: cp/parser.cc:25732 -#, fuzzy, gcc-internal-format -#| msgid "too few template parameter lists in declaration of %qD" +#, gcc-internal-format msgid "%<this%> specifier in template parameter declaration" -msgstr "för få mallparameterlistor i deklarationen av %qD" +msgstr "specificeraren %<this%> i en mallparameterdeklaration" #: cp/parser.cc:25746 -#, fuzzy, gcc-internal-format -#| msgid "non-parameter %qs cannot be a parameter pack" +#, gcc-internal-format msgid "an explicit object parameter cannot be a function parameter pack" -msgstr "icke-parameter %qs kan inte vara ett parameterpaket" +msgstr "en explicit objektparameter kan inte vara ett funktionsparameterpaket" #: cp/parser.cc:25838 #, gcc-internal-format @@ -61531,10 +61496,9 @@ msgid "parameter pack cannot have a default argument" msgstr "parameterpaket kan inte ha ett standardargument" #: cp/parser.cc:25887 -#, fuzzy, gcc-internal-format -#| msgid "template parameter pack cannot have a default argument" +#, gcc-internal-format msgid "an explicit object parameter may not have a default argument" -msgstr "mallparameterpaket kan inte ha ett standardargument" +msgstr "en explicit objektparameter får inte ha ett standardargument" #: cp/parser.cc:26011 #, gcc-internal-format @@ -61816,10 +61780,9 @@ msgid "expected attribute before %<...%>" msgstr "attribut förväntades före %<...%>" #: cp/parser.cc:30214 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute without arguments on a non-prototype" +#, gcc-internal-format msgid "attribute with no arguments contains no parameter packs" -msgstr "attributet %qE utan argument på en icke-prototyp" +msgstr "attribut utan några argument innehåller inga parameterpaket" #: cp/parser.cc:30260 #, gcc-internal-format @@ -61902,10 +61865,9 @@ msgid "too many template-parameter-lists" msgstr "för många mallparameterlistor" #: cp/parser.cc:32576 -#, fuzzy, gcc-internal-format -#| msgid "template-id not allowed for destructor" +#, gcc-internal-format msgid "template-id not allowed for constructor in C++20" -msgstr "mall-id är inte tillåtet för destruerare" +msgstr "mall-id är inte tillåtet för konstruerare i C++20" #: cp/parser.cc:32687 #, gcc-internal-format @@ -62319,10 +62281,9 @@ msgid "%<wait%> expression must be integral" msgstr "%<wait%>-uttryck måste vara heltal" #: cp/parser.cc:39638 -#, fuzzy, gcc-internal-format -#| msgid "expected %<scalar%>, %<aggregate%> or %<pointer%>" +#, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<all%>" -msgstr "%<scalar%>, %<aggregate%> eller %<pointer%> förväntades" +msgstr "%<scalar%>, %<aggregate%>, %<all%> förväntades" #: cp/parser.cc:40029 #, gcc-internal-format From 88ce7fbcc7e9a1ffcd684bab53d1f46017860c25 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Thu, 4 Apr 2024 00:16:38 +0000 Subject: [PATCH 366/551] Daily bump. --- gcc/ChangeLog | 69 +++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/po/ChangeLog | 4 +++ gcc/testsuite/ChangeLog | 14 +++++++++ libgcc/ChangeLog | 5 +++ libphobos/ChangeLog | 4 +++ libquadmath/ChangeLog | 8 +++++ libstdc++-v3/ChangeLog | 7 +++++ 8 files changed, 112 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61eb527951d2..4393283f7500 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,72 @@ +2024-04-03 Mark Wielaard <mark@klomp.org> + + * config/i386/i386.opt.urls: Regenerate. + +2024-04-03 H.J. Lu <hjl.tools@gmail.com> + + PR tree-optimization/114115 + * cgraph.h (symtab_node): Add check_ifunc_callee_symtab_nodes. + (cgraph_node): Add called_by_ifunc_resolver. + * cgraphunit.cc (symbol_table::compile): Call + symtab_node::check_ifunc_callee_symtab_nodes. + * symtab.cc (check_ifunc_resolver): New. + (ifunc_ref_map): Likewise. + (is_caller_ifunc_resolver): Likewise. + (symtab_node::check_ifunc_callee_symtab_nodes): Likewise. + * tree-profile.cc (gimple_gen_ic_func_profiler): Disable indirect + call profiling for IFUNC resolvers and their callees. + +2024-04-03 Tobias Burnus <tburnus@baylibre.com> + + * lto-wrapper.cc (compile_offload_image): Prefix 'offload_args' + suffix by the target name. + +2024-04-03 Tobias Burnus <tburnus@baylibre.com> + + * doc/install.texi (amdgcn-*-amdhsa): Update Newlib recommendation + and update wording for LLVM 18 release. + +2024-04-03 Tobias Burnus <tburnus@baylibre.com> + + PR other/111966 + * config/gcn/mkoffload.cc (get_arch): New; moved -march= flag + handling from ... + (main): ... here; call it to handle --with-arch config option + and -march= commandline. + +2024-04-03 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114552 + * expr.cc (emit_push_insn): Only use store_constructor for + immediate_const_ctor_p if int_expr_size matches size. + +2024-04-03 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114557 + PR tree-optimization/114480 + * tree-phinodes.cc (release_phi_node): Return PHIs from + allocation buckets not covered by free_phinodes to GC. + (remove_phi_node): Release the PHI LHS before freeing the + PHI node. + * tree-vect-loop.cc (vectorizable_live_operation): Get PHI lhs + before releasing it. + +2024-04-03 Jiahao Xu <xujiahao@loongson.cn> + + * config/loongarch/lasx.md: Remove unused code. + * config/loongarch/loongarch-protos.h + (loongarch_split_lsx_copy_d): Remove. + (loongarch_split_lsx_insert_d): Ditto. + (loongarch_split_lsx_fill_d): Ditto. + * config/loongarch/loongarch.cc + (loongarch_split_lsx_copy_d): Ditto. + (loongarch_split_lsx_insert_d): Ditto. + (loongarch_split_lsx_fill_d): Ditto. + * config/loongarch/lsx.md (lsx_vpickve2gr_du): Remove splitter. + (lsx_vpickve2gr_<lsxfmt_f>): Ditto. + (abs<mode>2): Remove expander. + (vabs<mode>2): Rename 2 abs<mode>2. + 2024-04-02 Christophe Lyon <christophe.lyon@linaro.org> * config/aarch64/aarch64-option-extensions.def: Fix comment. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 154a306dc5ca..9bcd31d63c92 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240403 +20240404 diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 2f02ef33aa2b..e98b9fb6698d 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2024-04-03 Joseph Myers <josmyers@redhat.com> + + * sv.po: Update. + 2024-03-25 Joseph Myers <josmyers@redhat.com> * de.po: Update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 37cdcaea9f78..2107bf4e83c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2024-04-03 H.J. Lu <hjl.tools@gmail.com> + + PR tree-optimization/114115 + * gcc.dg/pr114115.c: New test. + +2024-04-03 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114552 + * gcc.c-torture/execute/pr114552.c: New test. + +2024-04-03 Jiahao Xu <xujiahao@loongson.cn> + + * gcc.target/loongarch/vector/lsx/lsx-abs.c: New test. + 2024-04-02 Martin Uecker <uecker@tugraz.at> PR c/114361 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 04e584424b6d..0f449e632393 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2024-04-03 Wilco Dijkstra <wilco.dijkstra@arm.com> + + * config/aarch64/cpuinfo.c: Add HWCAP_EVTSTRM, HWCAP_CRC32, HWCAP_CPUID, + HWCAP_PACA and HWCAP_PACG. + 2024-04-02 Jakub Jelinek <jakub@redhat.com> * unwind-dw2-fde.c (struct fde_accumulator): Fix duplicated diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index f728beeb11fc..e3fe44f26215 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,7 @@ +2024-04-03 Iain Sandoe <iain@sandoe.co.uk> + + * configure.tgt: Enable libphobos for Darwin >= 12. + 2024-03-17 Iain Buclaw <ibuclaw@gdcproject.org> * libdruntime/MERGE: Merge upstream druntime 855353a1d9. diff --git a/libquadmath/ChangeLog b/libquadmath/ChangeLog index 43ad9df3b183..2d6c2081ff23 100644 --- a/libquadmath/ChangeLog +++ b/libquadmath/ChangeLog @@ -1,3 +1,11 @@ +2024-04-03 Simon Chopin <simon.chopin@canonical.com> + Jakub Jelinek <jakub@redhat.com> + + PR libquadmath/114533 + * printf/printf_fp.c (__quadmath_printf_fp): Use memcpy to copy + __float128 out of args. + * printf/printf_fphex.c (__quadmath_printf_fphex): Likewise. + 2024-01-03 Jakub Jelinek <jakub@redhat.com> * libquadmath.texi: Bump @copying's copyright year. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index ea9362adf028..7bc687272f3d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2024-04-03 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/104606 + * include/std/optional (operator<=>(const optional<T>&, const U&)): + Reverse order of three_way_comparable_with template arguments. + * testsuite/20_util/optional/relops/104606.cc: New test. + 2024-04-02 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/114519 From fe385c219994f6d5c1ffe00bcaf5a62c3d18caaf Mon Sep 17 00:00:00 2001 From: Eugene Rozenfeld <erozen@microsoft.com> Date: Tue, 26 Mar 2024 16:28:08 -0700 Subject: [PATCH 367/551] Don't set full_profile in auto-profile [PR113765] auto-profile currently doesn't guarantee that it will set probabilities on all edges because of zero basic block counts. Normally those edges just have probabilities set by the preceding profile_estimate pass but under -O0 profile_estimate pass doesn't run. The patch removes setting of full_profile to true in auto-profile. Tested on x86_64-pc-linux-gnu. gcc/ChangeLog: PR gcov-profile/113765 * auto-profile.cc (afdo_annotate_cfg): Don't set full_profile to true --- gcc/auto-profile.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc index e5407d32fbbf..de59b94bcb33 100644 --- a/gcc/auto-profile.cc +++ b/gcc/auto-profile.cc @@ -1580,7 +1580,6 @@ afdo_annotate_cfg (const stmt_set &promoted_stmts) } update_max_bb_count (); profile_status_for_fn (cfun) = PROFILE_READ; - cfun->cfg->full_profile = true; if (flag_value_profile_transformations) { gimple_value_profile_transformations (); From e152177b362143465e2b9d721ea632cae3f13445 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Wed, 3 Apr 2024 14:53:30 +0200 Subject: [PATCH 368/551] tree-optimization/114551 - loop splitting and undefined overflow When loop splitting hoists a guard computation it needs to make sure that can be safely evaluated at this place when it was previously only conditionally evaluated. The following fixes this for the case of undefined overflow. PR tree-optimization/114551 * tree-ssa-loop-split.cc (split_loop): If the guard is only conditionally evaluated rewrite computations with possibly undefined overflow to unsigned arithmetic. * gcc.dg/torture/pr114551.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr114551.c | 18 ++++++++++++++++++ gcc/tree-ssa-loop-split.cc | 22 ++++++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr114551.c diff --git a/gcc/testsuite/gcc.dg/torture/pr114551.c b/gcc/testsuite/gcc.dg/torture/pr114551.c new file mode 100644 index 000000000000..13c15fbc3d98 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr114551.c @@ -0,0 +1,18 @@ +/* { dg-do run } */ + +int a, b[4], c, d, e, f; +int main() +{ + a--; + for (f = 3; f >= 0; f--) + { + for (e = 0; e < 4; e++) + c = 0; + for (; c < 4; c++) + { + d = f && a > 0 && f > (2147483647 - a) ? 0 : b[f]; + continue; + } + } + return 0; +} diff --git a/gcc/tree-ssa-loop-split.cc b/gcc/tree-ssa-loop-split.cc index c0bb1b71d17c..a770ea371a2d 100644 --- a/gcc/tree-ssa-loop-split.cc +++ b/gcc/tree-ssa-loop-split.cc @@ -653,8 +653,26 @@ split_loop (class loop *loop1) gimple_seq stmts2; border = force_gimple_operand (border, &stmts2, true, NULL_TREE); if (stmts2) - gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop1), - stmts2); + { + /* When the split condition is not always evaluated make sure + to rewrite it to defined overflow. */ + if (!dominated_by_p (CDI_DOMINATORS, exit1->src, bbs[i])) + { + gimple_stmt_iterator gsi; + gsi = gsi_start (stmts2); + while (!gsi_end_p (gsi)) + { + gimple *stmt = gsi_stmt (gsi); + if (is_gimple_assign (stmt) + && arith_code_with_undefined_signed_overflow + (gimple_assign_rhs_code (stmt))) + rewrite_to_defined_overflow (&gsi); + gsi_next (&gsi); + } + } + gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop1), + stmts2); + } tree cond = fold_build2 (guard_code, boolean_type_node, guard_init, border); if (!initial_true) From f2ccfb2d0b2698e6b140e4d09e53b701a3193384 Mon Sep 17 00:00:00 2001 From: Kyrylo Tkachov <kyrylo.tkachov@arm.com> Date: Thu, 4 Apr 2024 09:12:28 +0100 Subject: [PATCH 369/551] [MAINTAINERS] Update my email address and step down as arm port maintainer * MAINTAINERS: Update my email details, remove myself as arm maintainer. Add myself to DCO section. --- MAINTAINERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 8f64ee630b45..9a6c41afb12e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -52,7 +52,7 @@ docs, and the testsuite related to that. aarch64 port Richard Earnshaw <richard.earnshaw@arm.com> aarch64 port Richard Sandiford <richard.sandiford@arm.com> aarch64 port Marcus Shawcroft <marcus.shawcroft@arm.com> -aarch64 port Kyrylo Tkachov <kyrylo.tkachov@arm.com> +aarch64 port Kyrylo Tkachov <ktkachov@gcc.gnu.org> alpha port Richard Henderson <rth@gcc.gnu.org> amdgcn port Julian Brown <julian@codesourcery.com> amdgcn port Andrew Stubbs <ams@baylibre.com> @@ -61,7 +61,6 @@ arc port Claudiu Zissulescu <claziss@synopsys.com> arm port Nick Clifton <nickc@redhat.com> arm port Richard Earnshaw <richard.earnshaw@arm.com> arm port Ramana Radhakrishnan <ramana.gcc@gmail.com> -arm port Kyrylo Tkachov <kyrylo.tkachov@arm.com> avr port Denis Chertykov <chertykov@gmail.com> bfin port Jie Zhang <jzhang918@gmail.com> bpf port Jose E. Marchesi <jose.marchesi@oracle.com> @@ -782,6 +781,7 @@ Nathaniel Shead <nathanieloshead@gmail.org> Nathan Sidwell <nathan@acm.org> Edward Smith-Rowland <esmithrowland@gmail.com> Fangrui Song <maskray@gcc.gnu.org> +Kyrylo Tkachov <ktkachov@gcc.gnu.org> Petter Tomner <tomner@bahnhof.se> Martin Uecker <uecker@gcc.gnu.org> Jonathan Wakely <jwakely@redhat.com> From 48530efdcccb154d3ed200246384edc162debc5d Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 4 Apr 2024 10:47:00 +0200 Subject: [PATCH 370/551] bitint: Handle m_bitfld_load cast in outer m_cast_conditional [PR114555] We ICE on the following testcase, because we use result of a PHI node which is only conditional because of a m_cast_conditional on the outermost loops PHI node argument and so is invalid SSA form. The following patch fixes it like similar cases elsewhere by adding needed intervening PHI(s). 2024-04-04 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114555 * gimple-lower-bitint.cc (bitint_large_huge::handle_cast): For m_bitfld_load and save_cast_conditional add any needed PHIs and adjust t4 accordingly. * gcc.dg/bitint-103.c: New test. * gcc.dg/bitint-104.c: New test. --- gcc/gimple-lower-bitint.cc | 20 +++++++++++++++++++- gcc/testsuite/gcc.dg/bitint-103.c | 16 ++++++++++++++++ gcc/testsuite/gcc.dg/bitint-104.c | 17 +++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/bitint-103.c create mode 100644 gcc/testsuite/gcc.dg/bitint-104.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 40a1084afb3b..1afd4de445a3 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -1506,7 +1506,7 @@ bitint_large_huge::handle_cast (tree lhs_type, tree rhs1, tree idx) if (m_bitfld_load) { tree t4; - if (!save_first) + if (!save_first && !save_cast_conditional) t4 = m_data[m_bitfld_load + 1]; else t4 = make_ssa_name (m_limb_type); @@ -1519,6 +1519,24 @@ bitint_large_huge::handle_cast (tree lhs_type, tree rhs1, tree idx) if (edge_true_true) add_phi_arg (phi, m_data[m_bitfld_load], edge_true_true, UNKNOWN_LOCATION); + if (save_cast_conditional) + for (basic_block bb = gsi_bb (m_gsi);;) + { + edge e1 = single_succ_edge (bb); + edge e2 = find_edge (e1->dest, m_bb), e3; + tree t5 = ((e2 && !save_first) ? m_data[m_bitfld_load + 1] + : make_ssa_name (m_limb_type)); + phi = create_phi_node (t5, e1->dest); + edge_iterator ei; + FOR_EACH_EDGE (e3, ei, e1->dest->preds) + add_phi_arg (phi, (e3 == e1 ? t4 + : build_zero_cst (m_limb_type)), + e3, UNKNOWN_LOCATION); + t4 = t5; + if (e2) + break; + bb = e1->dest; + } m_data[m_bitfld_load] = t4; m_data[m_bitfld_load + 2] = t4; m_bitfld_load = 0; diff --git a/gcc/testsuite/gcc.dg/bitint-103.c b/gcc/testsuite/gcc.dg/bitint-103.c new file mode 100644 index 000000000000..4d8104959a16 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-103.c @@ -0,0 +1,16 @@ +/* PR tree-optimization/114555 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-std=c23 -O2" } */ + +#if __BITINT_MAXWIDTH__ >= 1225 +struct S { _BitInt(512) : 98; _BitInt(1225) b : 509; } s; +_BitInt(1225) a; +#endif + +void +foo (void) +{ +#if __BITINT_MAXWIDTH__ >= 1225 + a ^= (unsigned _BitInt(1025)) s.b; +#endif +} diff --git a/gcc/testsuite/gcc.dg/bitint-104.c b/gcc/testsuite/gcc.dg/bitint-104.c new file mode 100644 index 000000000000..b4aac83137be --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-104.c @@ -0,0 +1,17 @@ +/* PR tree-optimization/114555 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-std=c23 -O -fno-tree-forwprop" } */ + +#if __BITINT_MAXWIDTH__ >= 4139 +struct S { _BitInt(31) : 6; _BitInt(513) b : 241; } s; +_BitInt(4139) a; +#endif + +void +foo (void) +{ +#if __BITINT_MAXWIDTH__ >= 4139 + int i = 0; + a -= s.b << i; +#endif +} From 1baec8deb014b8a7da58879a407a4c00cdeb5a09 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 4 Apr 2024 10:47:52 +0200 Subject: [PATCH 371/551] fold-const: Handle NON_LVALUE_EXPR in native_encode_initializer [PR114537] The following testcase is incorrectly rejected. The problem is that for bit-fields native_encode_initializer expects the corresponding CONSTRUCTOR elt value must be INTEGER_CST, but that isn't the case here, it is wrapped into NON_LVALUE_EXPR by maybe_wrap_with_location. We could STRIP_ANY_LOCATION_WRAPPER as well, but as all we are looking for is INTEGER_CST inside, just looking through NON_LVALUE_EXPR seems easier. 2024-04-04 Jakub Jelinek <jakub@redhat.com> PR c++/114537 * fold-const.cc (native_encode_initializer): Look through NON_LVALUE_EXPR if val is INTEGER_CST. * g++.dg/cpp2a/bit-cast16.C: New test. --- gcc/fold-const.cc | 2 ++ gcc/testsuite/g++.dg/cpp2a/bit-cast16.C | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp2a/bit-cast16.C diff --git a/gcc/fold-const.cc b/gcc/fold-const.cc index 8960e5289c0b..7b268964acc4 100644 --- a/gcc/fold-const.cc +++ b/gcc/fold-const.cc @@ -8601,6 +8601,8 @@ native_encode_initializer (tree init, unsigned char *ptr, int len, if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN) return 0; + if (TREE_CODE (val) == NON_LVALUE_EXPR) + val = TREE_OPERAND (val, 0); if (TREE_CODE (val) != INTEGER_CST) return 0; diff --git a/gcc/testsuite/g++.dg/cpp2a/bit-cast16.C b/gcc/testsuite/g++.dg/cpp2a/bit-cast16.C new file mode 100644 index 000000000000..d298af67ef24 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/bit-cast16.C @@ -0,0 +1,16 @@ +// PR c++/114537 +// { dg-do compile { target c++20 } } + +namespace std { +template<typename T, typename F> +constexpr T +bit_cast (const F& f) noexcept +{ + return __builtin_bit_cast (T, f); +} +} + +struct A { signed char b : 1 = 0; signed char c : 7 = 0; }; +struct D { unsigned char e; }; +constexpr unsigned char f = std::bit_cast<D> (A{}).e; +static_assert (f == 0); From 1c89d1b9dc8c4957a4ec3674f691595641fd279b Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Thu, 4 Apr 2024 12:20:48 +0200 Subject: [PATCH 372/551] libgomp.texi: Update entries in OpenMP TR12 implementation status libgomp/ChangeLog: * libgomp.texi (TR12): Honor post-TR12 directive name change; add item about curly braces/BLOCK permitted in canonical loop nests. --- libgomp/libgomp.texi | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi index 1ae0f01ccdc2..71d62105a20e 100644 --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi @@ -515,7 +515,8 @@ Technical Report (TR) 12 is the second preview for OpenMP 6.0. @item @code{strict} modifier keyword to @code{num_threads} @tab N @tab @item @code{atomic} permitted in a construct with @code{order(concurrent)} @tab N @tab -@item @code{coexecute} directive for Fortran @tab N @tab +@item @code{workdistribute} directive for Fortran @tab N + @tab Renamed just after TR12; added in TR12 as @code{coexecute} @item Fortran DO CONCURRENT as associated loop in a @code{loop} construct @tab N @tab @item @code{threadset} clause in task-generating constructs @tab N @tab @@ -539,6 +540,8 @@ Technical Report (TR) 12 is the second preview for OpenMP 6.0. @unnumberedsubsec Other new TR 12 features @multitable @columnfractions .60 .10 .25 +@item Canonical loop nest enclosed in (multiple) curly braces (C/C++) or BLOCK constructs (Fortran) + @tab N @tab @item Relaxed Fortran restrictions to the @code{aligned} clause @tab N @tab @item Mapping lambda captures @tab N @tab @item New @code{omp_pause_stop_tool} constant for omp_pause_resource @tab N @tab From 85621f98d245004a6c9787dde21e0acc17ab2c50 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Thu, 4 Apr 2024 10:00:51 +0200 Subject: [PATCH 373/551] tree-optimization/114485 - neg induction with partial vectors We can't use vect_update_ivs_after_vectorizer for partial vectors, the following fixes vect_can_peel_nonlinear_iv_p accordingly. PR tree-optimization/114485 * tree-vect-loop-manip.cc (vect_can_peel_nonlinear_iv_p): vect_step_op_neg isn't OK for partial vectors but only for unknown niter. * gcc.dg/vect/pr114485.c: New testcase. --- gcc/testsuite/gcc.dg/vect/pr114485.c | 18 ++++++++++++++++++ gcc/tree-vect-loop-manip.cc | 14 +++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr114485.c diff --git a/gcc/testsuite/gcc.dg/vect/pr114485.c b/gcc/testsuite/gcc.dg/vect/pr114485.c new file mode 100644 index 000000000000..6536806e350f --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr114485.c @@ -0,0 +1,18 @@ +#include "tree-vect.h" + +int b, c = 8, d; +int e[23]; +int main() +{ + check_vect (); + + int *h = e; + for (int i = 1; i < b + 21; i += 2) + { + c *= -1; + d = h[i] ? i : 0; + } + if (c != 8) + abort (); + return 0; +} diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc index 56a6d8e4a8dc..8d9b533d50fc 100644 --- a/gcc/tree-vect-loop-manip.cc +++ b/gcc/tree-vect-loop-manip.cc @@ -2128,18 +2128,18 @@ vect_can_peel_nonlinear_iv_p (loop_vec_info loop_vinfo, For shift, when shift mount >= precision, there would be UD. For mult, don't known how to generate init_expr * pow (step, niters) for variable niters. - For neg, it should be ok, since niters of vectorized main loop + For neg unknown niters are ok, since niters of vectorized main loop will always be multiple of 2. - See also PR113163 and PR114196. */ - if ((!LOOP_VINFO_VECT_FACTOR (loop_vinfo).is_constant () - || LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo) - || !LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)) - && induction_type != vect_step_op_neg) + See also PR113163, PR114196 and PR114485. */ + if (!LOOP_VINFO_VECT_FACTOR (loop_vinfo).is_constant () + || LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo) + || (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo) + && induction_type != vect_step_op_neg)) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "Peeling for epilogue is not supported" - " for nonlinear induction except neg" + " for this nonlinear induction" " when iteration count is unknown or" " when using partial vectorization.\n"); return false; From 86dce005a1d440154dbf585dde5a2dd4cfac7a05 Mon Sep 17 00:00:00 2001 From: Richard Sandiford <richard.sandiford@arm.com> Date: Thu, 4 Apr 2024 14:15:49 +0100 Subject: [PATCH 374/551] aarch64: Recognise svundef idiom [PR114577] GCC 14 adds the header file arm_neon_sve_bridge.h to help interface SVE and Advanced SIMD code. One of the defined idioms is: svset_neonq (svundef_TYPE (), advsimd_vector) which simply reinterprets advsimd_vector as an SVE vector without regard for what's in the upper bits. GCC was failing to recognise this idiom, which was likely to significantly hamper adoption. There is (AFAIK) no good way of representing an extension with undefined bits in gimple. We could add an internal-only builtin to represent it, but the current framework makes that somewhat awkward. It also doesn't seem very forward-looking. This patch instead goes for the simpler approach of recognising undefined arguments at expansion time. gcc/ PR target/114577 * config/aarch64/aarch64-sve-builtins.h (aarch64_sve::lookup_fndecl): Declare. * config/aarch64/aarch64-sve-builtins.cc (aarch64_sve::lookup_fndecl): New function. * config/aarch64/aarch64-sve-builtins-base.cc (is_undef): Likewise. (svset_neonq_impl::expand): Optimise expansions whose first argument is undefined. gcc/testsuite/ PR target/114577 * gcc.target/aarch64/sve/acle/general/pr114577_1.c: New test. * gcc.target/aarch64/sve/acle/general/pr114577_2.c: Likewise. --- .../aarch64/aarch64-sve-builtins-base.cc | 27 ++++++ gcc/config/aarch64/aarch64-sve-builtins.cc | 16 ++++ gcc/config/aarch64/aarch64-sve-builtins.h | 1 + .../aarch64/sve/acle/general/pr114577_1.c | 94 +++++++++++++++++++ .../aarch64/sve/acle/general/pr114577_2.c | 46 +++++++++ 5 files changed, 184 insertions(+) create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_2.c diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index a8c3f84a70b5..257ca5bf6adc 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -47,11 +47,31 @@ #include "aarch64-builtins.h" #include "ssa.h" #include "gimple-fold.h" +#include "tree-ssa.h" using namespace aarch64_sve; namespace { +/* Return true if VAL is an undefined value. */ +static bool +is_undef (tree val) +{ + if (TREE_CODE (val) == SSA_NAME) + { + if (ssa_undefined_value_p (val, false)) + return true; + + gimple *def = SSA_NAME_DEF_STMT (val); + if (gcall *call = dyn_cast<gcall *> (def)) + if (tree fndecl = gimple_call_fndecl (call)) + if (const function_instance *instance = lookup_fndecl (fndecl)) + if (instance->base == functions::svundef) + return true; + } + return false; +} + /* Return the UNSPEC_CMLA* unspec for rotation amount ROT. */ static int unspec_cmla (int rot) @@ -1142,6 +1162,13 @@ class svset_neonq_impl : public function_base expand (function_expander &e) const override { machine_mode mode = e.vector_mode (0); + + /* If the SVE argument is undefined, we just need to reinterpret the + Advanced SIMD argument as an SVE vector. */ + if (!BYTES_BIG_ENDIAN + && is_undef (CALL_EXPR_ARG (e.call_expr, 0))) + return simplify_gen_subreg (mode, e.args[1], GET_MODE (e.args[1]), 0); + rtx_vector_builder builder (VNx16BImode, 16, 2); for (unsigned int i = 0; i < 16; i++) builder.quick_push (CONST1_RTX (BImode)); diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 11f5c5c500c8..e124d1f90a58 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -1055,6 +1055,22 @@ get_vector_type (sve_type type) return acle_vector_types[type.num_vectors - 1][vector_type]; } +/* If FNDECL is an SVE builtin, return its function instance, otherwise + return null. */ +const function_instance * +lookup_fndecl (tree fndecl) +{ + if (!fndecl_built_in_p (fndecl, BUILT_IN_MD)) + return nullptr; + + unsigned int code = DECL_MD_FUNCTION_CODE (fndecl); + if ((code & AARCH64_BUILTIN_CLASS) != AARCH64_BUILTIN_SVE) + return nullptr; + + unsigned int subcode = code >> AARCH64_BUILTIN_SHIFT; + return &(*registered_functions)[subcode]->instance; +} + /* Report an error against LOCATION that the user has tried to use function FNDECL when extension EXTENSION is disabled. */ static void diff --git a/gcc/config/aarch64/aarch64-sve-builtins.h b/gcc/config/aarch64/aarch64-sve-builtins.h index e66729ed6353..053006776a98 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.h +++ b/gcc/config/aarch64/aarch64-sve-builtins.h @@ -810,6 +810,7 @@ extern tree acle_svprfop; bool vector_cst_all_same (tree, unsigned int); bool is_ptrue (tree, unsigned int); +const function_instance *lookup_fndecl (tree); /* Try to find a mode with the given mode_suffix_info fields. Return the mode on success or MODE_none on failure. */ diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_1.c new file mode 100644 index 000000000000..2566c2d86c43 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_1.c @@ -0,0 +1,94 @@ +/* { dg-options "-O" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_neon_sve_bridge.h> + +#ifdef __cplusplus +extern "C" { +#endif + +svint32_t svundef_foo (); + +/* +** f1: { target aarch64_little_endian } +** ldr q0, \[x0\] +** ret +*/ +svint32_t +f1 (int *a) +{ + return svset_neonq (svundef_s32 (), vld1q_s32 (a)); +} + +/* +** f2: { target aarch64_little_endian } +** ldr q0, \[x0\] +** ret +*/ +svint32_t +f2 (int *a) +{ + svint32_t undef; + return svset_neonq (undef, vld1q_s32 (a)); +} + +/* +** f3: { target aarch64_little_endian } +** mov [vz]0.[^\n]+, [vz]1.[^\n]+ +** ret +*/ +svint32_t +f3 (int32x4_t v0, int32x4_t v1) +{ + return svset_neonq (svundef_s32 (), v1); +} + +/* +** f4: { target aarch64_little_endian } +** uzp1 z([0-9]+)\.s, z0\.s, z1\.s +** ldr q([0-9]+), \[x0\] +** ptrue p([0-7])\.s, vl4 +** sel z0\.s, p\3, z\2\.s, z\1\.s +** ret +*/ +svint32_t +f4 (int *a, svint32_t x, svint32_t y) +{ + x = svuzp1 (x, y); + int32x4_t z = vld1q_s32 (a); + return svset_neonq (x, z); +} + +/* +** f5: +** ... +** bl svundef_foo +** ... +** sel z0\.s, [^\n]+ +** ... +** ret +*/ +svint32_t +f5 (int *a) +{ + return svset_neonq (svundef_foo (), vld1q_s32 (a)); +} + +/* +** f6: +** ... +** blr x[0-9]+ +** ... +** sel z0\.s, [^\n]+ +** ... +** ret +*/ +svint32_t +f6 (int *a, svint32_t (*svundef_s32) ()) +{ + return svset_neonq (svundef_s32 (), vld1q_s32 (a)); +} + +#ifdef __cplusplus +} +#endif diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_2.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_2.c new file mode 100644 index 000000000000..0775162e6b52 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr114577_2.c @@ -0,0 +1,46 @@ +/* { dg-options "-O -msve-vector-bits=256" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_neon_sve_bridge.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** f1: { target aarch64_little_endian } +** ldr q0, \[x0\] +** ret +*/ +svint32_t +f1 (int *a) +{ + return svset_neonq (svundef_s32 (), vld1q_s32 (a)); +} + +/* +** f2: { target aarch64_little_endian } +** ldr q0, \[x0\] +** ret +*/ +svint32_t +f2 (int *a) +{ + svint32_t undef; + return svset_neonq (undef, vld1q_s32 (a)); +} + +/* +** f3: { target aarch64_little_endian } +** mov [vz]0.[^\n]+, [vz]1.[^\n]+ +** ret +*/ +svint32_t +f3 (int32x4_t v0, int32x4_t v1) +{ + return svset_neonq (svundef_s32 (), v1); +} + +#ifdef __cplusplus +} +#endif From b7bd2ec73d66f7487bc8842b24daecaa802a72e6 Mon Sep 17 00:00:00 2001 From: Paul-Antoine Arras <parras@baylibre.com> Date: Thu, 4 Apr 2024 16:39:52 +0200 Subject: [PATCH 375/551] MAINTAINERS: Update my email address ChangeLog: * MAINTAINERS: Update my email address. --- MAINTAINERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 9a6c41afb12e..27e3872ef936 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -324,7 +324,7 @@ from other maintainers or reviewers. Mark G. Adams <mark.g.adams@sympatico.ca> Ajit Kumar Agarwal <aagarwa1@linux.ibm.com> Pedro Alves <palves@redhat.com> -Paul-Antoine Arras <pa@codesourcery.com> +Paul-Antoine Arras <parras@baylibre.com> Arsen Arsenović <arsen@aarsen.me> Raksit Ashok <raksit@google.com> Matt Austern <austern@google.com> From 08a52331803f66a4aaeaedd278436ca8eac57b50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Kvalsvik?= <j@lambda.is> Date: Tue, 5 Dec 2023 12:59:40 +0100 Subject: [PATCH 376/551] Add condition coverage (MC/DC) This patch adds support in gcc+gcov for modified condition/decision coverage (MC/DC) with the -fcondition-coverage flag. MC/DC is a type of test/code coverage and it is particularly important for safety-critical applicaitons in industries like aviation and automotive. Notably, MC/DC is required or recommended by: * DO-178C for the most critical software (Level A) in avionics. * IEC 61508 for SIL 4. * ISO 26262-6 for ASIL D. From the SQLite webpage: Two methods of measuring test coverage were described above: "statement" and "branch" coverage. There are many other test coverage metrics besides these two. Another popular metric is "Modified Condition/Decision Coverage" or MC/DC. Wikipedia defines MC/DC as follows: * Each decision tries every possible outcome. * Each condition in a decision takes on every possible outcome. * Each entry and exit point is invoked. * Each condition in a decision is shown to independently affect the outcome of the decision. In the C programming language where && and || are "short-circuit" operators, MC/DC and branch coverage are very nearly the same thing. The primary difference is in boolean vector tests. One can test for any of several bits in bit-vector and still obtain 100% branch test coverage even though the second element of MC/DC - the requirement that each condition in a decision take on every possible outcome - might not be satisfied. https://sqlite.org/testing.html#mcdc MC/DC comes in different flavors, the most important being unique cause MC/DC and masking MC/DC. This patch implements masking MC/DC, which is works well with short circuiting semantics, and according to John Chilenski's "An Investigation of Three Forms of the Modified Condition Decision Coverage (MCDC) Criterion" (2001) is as good as unique cause at catching bugs. Whalen, Heimdahl, and De Silva "Efficient Test Coverage Measurement for MC/DC" describes an algorithm for finding the masking table from an AST walk, but my algorithm figures this out by analyzing the control flow graph. The CFG is considered a reduced ordered binary decision diagram and an input vector a path through the BDD, which is recorded. Specific edges will mask ("null out") the contribution from earlier path segments, which can be determined by finding short circuit endpoints. Masking is most easily understood as circuiting of terms in the reverse-ordered Boolean function, and the masked conditions do not affect the decision like short-circuited conditions do not affect the decision. A tag/discriminator mapping from gcond->uid is created during gimplification and made available through the function struct. The values are unimportant as long as basic conditions constructed from a single Boolean expression are given the same identifier. This happens in the breaking down of ANDIF/ORIF trees, so the coverage generally works well for frontends that create such trees. Like Whalen et al this implementation records coverage in fixed-size bitsets which gcov knows how to interpret. Recording conditions only requires a few bitwise operations per condition and is very fast, but comes with a limit on the number of terms in a single boolean expression; the number of bits in a gcov_unsigned_type (which is usually typedef'd to uint64_t). For most practical purposes this is acceptable, and by default a warning will be issued if gcc cannot instrument the expression. This is a practical limitation in the implementation, and not a limitation of the algorithm, so support for more conditions can be supported by introducing arbitrary-sized bitsets. In action it looks pretty similar to the branch coverage. The -g short opt carries no significance, but was chosen because it was an available option with the upper-case free too. gcov --conditions: 3: 17:void fn (int a, int b, int c, int d) { 3: 18: if ((a && (b || c)) && d) conditions covered 3/8 condition 0 not covered (true false) condition 1 not covered (true) condition 2 not covered (true) condition 3 not covered (true) 1: 19: x = 1; -: 20: else 2: 21: x = 2; 3: 22:} gcov --conditions --json-format: "conditions": [ { "not_covered_false": [ 0 ], "count": 8, "covered": 3, "not_covered_true": [ 0, 1, 2, 3 ] } ], Expressions with constants may be heavily rewritten before it reaches the gimplification, so constructs like int x = a ? 0 : 1 becomes _x = (_a == 0). From source you would expect coverage, but it gets neither branch nor condition coverage. The same applies to expressions like int x = 1 || a which are simply replaced by a constant. The test suite contains a lot of small programs and functions. Some of these were designed by hand to test for specific behaviours and graph shapes, and some are previously-failed test cases in other programs adapted into the test suite. gcc/ChangeLog: * builtins.cc (expand_builtin_fork_or_exec): Check condition_coverage_flag. * collect2.cc (main): Add -fno-condition-coverage to OBSTACK. * common.opt: Add new options -fcondition-coverage and -Wcoverage-too-many-conditions. * doc/gcov.texi: Add --conditions documentation. * doc/invoke.texi: Add -fcondition-coverage documentation. * function.cc (free_after_compilation): Free cond_uids. * function.h (struct function): Add cond_uids. * gcc.cc: Link gcov on -fcondition-coverage. * gcov-counter.def (GCOV_COUNTER_CONDS): New. * gcov-dump.cc (tag_conditions): New. * gcov-io.h (GCOV_TAG_CONDS): New. (GCOV_TAG_CONDS_LENGTH): New. (GCOV_TAG_CONDS_NUM): New. * gcov.cc (class condition_info): New. (condition_info::condition_info): New. (condition_info::popcount): New. (struct coverage_info): New. (add_condition_counts): New. (output_conditions): New. (print_usage): Add -g, --conditions. (process_args): Likewise. (output_intermediate_json_line): Output conditions. (read_graph_file): Read condition counters. (read_count_file): Likewise. (file_summary): Print conditions. (accumulate_line_info): Accumulate conditions. (output_line_details): Print conditions. * gimplify.cc (next_cond_uid): New. (reset_cond_uid): New. (shortcut_cond_r): Set condition discriminator. (tag_shortcut_cond): New. (gimple_associate_condition_with_expr): New. (shortcut_cond_expr): Set condition discriminator. (gimplify_cond_expr): Likewise. (gimplify_function_tree): Call reset_cond_uid. * ipa-inline.cc (can_early_inline_edge_p): Check condition_coverage_flag. * ipa-split.cc (pass_split_functions::gate): Likewise. * passes.cc (finish_optimization_passes): Likewise. * profile.cc (struct condcov): New declaration. (cov_length): Likewise. (cov_blocks): Likewise. (cov_masks): Likewise. (cov_maps): Likewise. (cov_free): Likewise. (instrument_decisions): New. (read_thunk_profile): Control output to file. (branch_prob): Call find_conditions, instrument_decisions. (init_branch_prob): Add total_num_conds. (end_branch_prob): Likewise. * tree-core.h (struct tree_exp): Add condition_uid. * tree-profile.cc (struct conds_ctx): New. (CONDITIONS_MAX_TERMS): New. (EDGE_CONDITION): New. (topological_cmp): New. (index_of): New. (single_p): New. (single_edge): New. (contract_edge_up): New. (struct outcomes): New. (conditional_succs): New. (condition_index): New. (condition_uid): New. (masking_vectors): New. (emit_assign): New. (emit_bitwise_op): New. (make_top_index_visit): New. (make_top_index): New. (paths_between): New. (struct condcov): New. (cov_length): New. (cov_blocks): New. (cov_masks): New. (cov_maps): New. (cov_free): New. (find_conditions): New. (struct counters): New. (find_counters): New. (resolve_counter): New. (resolve_counters): New. (instrument_decisions): New. (tree_profiling): Check condition_coverage_flag. (pass_ipa_tree_profile::gate): Likewise. * tree.h (SET_EXPR_UID): New. (EXPR_COND_UID): New. libgcc/ChangeLog: * libgcov-merge.c (__gcov_merge_ior): New. gcc/testsuite/ChangeLog: * lib/gcov.exp: Add condition coverage test function. * g++.dg/gcov/gcov-18.C: New test. * gcc.misc-tests/gcov-19.c: New test. * gcc.misc-tests/gcov-20.c: New test. * gcc.misc-tests/gcov-21.c: New test. * gcc.misc-tests/gcov-22.c: New test. * gcc.misc-tests/gcov-23.c: New test. --- gcc/builtins.cc | 2 +- gcc/collect2.cc | 7 +- gcc/common.opt | 9 + gcc/doc/gcov.texi | 38 + gcc/doc/invoke.texi | 21 + gcc/function.cc | 1 + gcc/function.h | 4 + gcc/gcc.cc | 4 +- gcc/gcov-counter.def | 3 + gcc/gcov-dump.cc | 24 + gcc/gcov-io.h | 3 + gcc/gcov.cc | 209 ++- gcc/gimplify.cc | 123 +- gcc/ipa-inline.cc | 2 +- gcc/ipa-split.cc | 2 +- gcc/passes.cc | 3 +- gcc/profile.cc | 76 +- gcc/testsuite/g++.dg/gcov/gcov-18.C | 282 ++++ gcc/testsuite/gcc.misc-tests/gcov-19.c | 1737 ++++++++++++++++++++++++ gcc/testsuite/gcc.misc-tests/gcov-20.c | 22 + gcc/testsuite/gcc.misc-tests/gcov-21.c | 16 + gcc/testsuite/gcc.misc-tests/gcov-22.c | 103 ++ gcc/testsuite/gcc.misc-tests/gcov-23.c | 361 +++++ gcc/testsuite/lib/gcov.exp | 259 +++- gcc/tree-core.h | 3 + gcc/tree-profile.cc | 1058 ++++++++++++++- gcc/tree.h | 4 + libgcc/libgcov-merge.c | 5 + 28 files changed, 4339 insertions(+), 42 deletions(-) create mode 100644 gcc/testsuite/g++.dg/gcov/gcov-18.C create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-19.c create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-20.c create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-21.c create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-22.c create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-23.c diff --git a/gcc/builtins.cc b/gcc/builtins.cc index bb74b5cbcd6f..f8d94c4b4356 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -6329,7 +6329,7 @@ expand_builtin_fork_or_exec (tree fn, tree exp, rtx target, int ignore) tree call; /* If we are not profiling, just call the function. */ - if (!profile_arc_flag) + if (!profile_arc_flag && !condition_coverage_flag) return NULL_RTX; /* Otherwise call the wrapper. This should be equivalent for the rest of diff --git a/gcc/collect2.cc b/gcc/collect2.cc index 14306f647285..902014a9cc15 100644 --- a/gcc/collect2.cc +++ b/gcc/collect2.cc @@ -1035,9 +1035,9 @@ main (int argc, char **argv) lto_mode = LTO_MODE_LTO; } - /* -fno-profile-arcs -fno-test-coverage -fno-branch-probabilities - -fno-exceptions -w -fno-whole-program */ - num_c_args += 6; + /* -fno-profile-arcs -fno-condition-coverage -fno-test-coverage + -fno-branch-probabilities -fno-exceptions -w -fno-whole-program */ + num_c_args += 7; c_argv = XCNEWVEC (char *, num_c_args); c_ptr = CONST_CAST2 (const char **, char **, c_argv); @@ -1233,6 +1233,7 @@ main (int argc, char **argv) } obstack_free (&temporary_obstack, temporary_firstobj); *c_ptr++ = "-fno-profile-arcs"; + *c_ptr++ = "-fno-condition-coverage"; *c_ptr++ = "-fno-test-coverage"; *c_ptr++ = "-fno-branch-probabilities"; *c_ptr++ = "-fno-exceptions"; diff --git a/gcc/common.opt b/gcc/common.opt index 1ad0169bd6f9..ad3488447752 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -870,6 +870,11 @@ Wcoverage-invalid-line-number Common Var(warn_coverage_invalid_linenum) Init(1) Warning Warn in case a function ends earlier than it begins due to an invalid linenum macros. +Wcoverage-too-many-conditions +Common Var(warn_too_many_conditions) Init(1) Warning +Warn when a conditional has too many terms and condition coverage profiling +gives up instrumenting the expression. + Wmissing-profile Common Var(warn_missing_profile) Init(1) Warning Warn in case profiles in -fprofile-use do not exist. @@ -2464,6 +2469,10 @@ fprofile-arcs Common Var(profile_arc_flag) Insert arc-based program profiling code. +fcondition-coverage +Common Var(condition_coverage_flag) +Insert condition coverage profiling code. + fprofile-dir= Common Joined RejectNegative Var(profile_data_prefix) Set the top-level directory for storing the profile data. diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi index dda3f49f07d8..c118061aed54 100644 --- a/gcc/doc/gcov.texi +++ b/gcc/doc/gcov.texi @@ -124,6 +124,7 @@ gcov [@option{-v}|@option{--version}] [@option{-h}|@option{--help}] [@option{-a}|@option{--all-blocks}] [@option{-b}|@option{--branch-probabilities}] [@option{-c}|@option{--branch-counts}] + [@option{-g}|@option{--conditions}] [@option{-d}|@option{--display-progress}] [@option{-f}|@option{--function-summaries}] [@option{-j}|@option{--json-format}] @@ -169,6 +170,14 @@ be shown, unless the @option{-u} option is given. Write branch frequencies as the number of branches taken, rather than the percentage of branches taken. +@item -g +@itemx --conditions +Write condition coverage to the output file, and write condition summary info +to the standard output. This option allows you to see if the conditions in +your program at least once had an independent effect on the outcome of the +boolean expression (modified condition/decision coverage). This requires you +to compile the source with @option{-fcondition-coverage}. + @item -d @itemx --display-progress Display the progress on the standard output. @@ -301,6 +310,7 @@ Each @var{line} has the following form: "branches": ["$branch"], "calls": ["$call"], "count": 2, + "conditions": ["$condition"], "line_number": 15, "unexecuted_block": false, "function_name": "foo", @@ -384,6 +394,34 @@ to @var{line::count}) @var{destination_block_id}: ID of the basic block this calls continues after return @end itemize +Each @var{condition} has the following form: + +@smallexample +@{ + "count": 4, + "covered": 2, + "not_covered_false": [], + "not_covered_true": [0, 1], +@} + +@end smallexample + +Fields of the @var{condition} element have following semantics: + +@itemize @bullet +@item +@var{count}: number of condition outcomes in this expression + +@item +@var{covered}: number of covered condition outcomes in this expression + +@item +@var{not_covered_true}: terms, by index, not seen as true in this expression + +@item +@var{not_covered_false}: terms, by index, not seen as false in this expression +@end itemize + @item -H @itemx --human-readable Write counts in human readable format (like 24.6k). diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 3257563ee867..e2edf7a6c139 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -640,6 +640,7 @@ Objective-C and Objective-C++ Dialects}. @item Program Instrumentation Options @xref{Instrumentation Options,,Program Instrumentation Options}. @gccoptlist{-p -pg -fprofile-arcs --coverage -ftest-coverage +-fcondition-coverage -fprofile-abs-path -fprofile-dir=@var{path} -fprofile-generate -fprofile-generate=@var{path} -fprofile-info-section -fprofile-info-section=@var{name} @@ -6577,6 +6578,14 @@ poorly optimized code and is useful only in the case of very minor changes such as bug fixes to an existing code-base. Completely disabling the warning is not recommended. +@opindex Wno-coverage-too-many-conditions +@opindex Wcoverage-too-many-conditions +@item -Wno-coverage-too-many-conditions +Warn if @option{-fcondition-coverage} is used and an expression have too many +terms and GCC gives up coverage. Coverage is given up when there are more +terms in the conditional than there are bits in a @code{gcov_type_unsigned}. +This warning is enabled by default. + @opindex Wno-coverage-invalid-line-number @opindex Wcoverage-invalid-line-number @item -Wno-coverage-invalid-line-number @@ -17078,6 +17087,14 @@ Note that if a command line directly links source files, the corresponding E.g. @code{gcc a.c b.c -o binary} would generate @file{binary-a.gcda} and @file{binary-b.gcda} files. +@item -fcondition-coverage +@opindex fcondition-coverage +Add code so that program conditions are instrumented. During execution the +program records what terms in a conditional contributes to a decision, which +can be used to verify that all terms in a Boolean function are tested and have +an independent effect on the outcome of a decision. The result can be read +with @code{gcov --conditions}. + @xref{Cross-profiling}. @cindex @command{gcov} @@ -17140,6 +17157,10 @@ executed. When an arc is the only exit or only entrance to a block, the instrumentation code can be added to the block; otherwise, a new basic block must be created to hold the instrumentation code. +With @option{-fcondition-coverage}, for each conditional in your program GCC +creates a bitset and records the exercised boolean values that have an +independent effect on the outcome of that expression. + @need 2000 @opindex ftest-coverage @item -ftest-coverage diff --git a/gcc/function.cc b/gcc/function.cc index 3cef6c17bce0..4edd4da12474 100644 --- a/gcc/function.cc +++ b/gcc/function.cc @@ -216,6 +216,7 @@ free_after_compilation (struct function *f) f->machine = NULL; f->cfg = NULL; f->curr_properties &= ~PROP_cfg; + delete f->cond_uids; regno_reg_rtx = NULL; } diff --git a/gcc/function.h b/gcc/function.h index 19e15bd63b0a..419d9ffcd0c2 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -270,6 +270,10 @@ struct GTY(()) function { /* Value histograms attached to particular statements. */ htab_t GTY((skip)) value_histograms; + /* Annotated gconds so that basic conditions in the same expression map to + the same same uid. This is used for condition coverage. */ + hash_map <gcond*, unsigned> *GTY((skip)) cond_uids; + /* For function.cc. */ /* Points to the FUNCTION_DECL of this function. */ diff --git a/gcc/gcc.cc b/gcc/gcc.cc index 382417f7308a..728332b81538 100644 --- a/gcc/gcc.cc +++ b/gcc/gcc.cc @@ -1165,7 +1165,7 @@ proper position among the other output files. */ %:include(libgomp.spec)%(link_gomp)}\ %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ " STACK_SPLIT_SPEC "\ - %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \ + %{fprofile-arcs|fcondition-coverage|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \ %{!nostdlib:%{!r:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}}\ %{!nostdlib:%{!r:%{!nostartfiles:%E}}} %{T*} \n%(post_link) }}}}}}" #endif @@ -1288,7 +1288,7 @@ static const char *cc1_options = %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %w%b.s}}}\ %{fsyntax-only:-o %j} %{-param*}\ %{coverage:-fprofile-arcs -ftest-coverage}\ - %{fprofile-arcs|fprofile-generate*|coverage:\ + %{fprofile-arcs|fcondition-coverage|fprofile-generate*|coverage:\ %{!fprofile-update=single:\ %{pthread:-fprofile-update=prefer-atomic}}}"; diff --git a/gcc/gcov-counter.def b/gcc/gcov-counter.def index 0606184b7e7a..45d4b3eb0c84 100644 --- a/gcc/gcov-counter.def +++ b/gcc/gcov-counter.def @@ -49,3 +49,6 @@ DEF_GCOV_COUNTER(GCOV_COUNTER_IOR, "ior", _ior) /* Time profile collecting first run of a function */ DEF_GCOV_COUNTER(GCOV_TIME_PROFILER, "time_profiler", _time_profile) + +/* Conditions. The counter is interpreted as a bit-set. */ +DEF_GCOV_COUNTER(GCOV_COUNTER_CONDS, "conditions", _ior) diff --git a/gcc/gcov-dump.cc b/gcc/gcov-dump.cc index 2ff352bc766a..375058c3c7b7 100644 --- a/gcc/gcov-dump.cc +++ b/gcc/gcov-dump.cc @@ -38,6 +38,7 @@ static void print_version (void); static void tag_function (const char *, unsigned, int, unsigned); static void tag_blocks (const char *, unsigned, int, unsigned); static void tag_arcs (const char *, unsigned, int, unsigned); +static void tag_conditions (const char *, unsigned, int, unsigned); static void tag_lines (const char *, unsigned, int, unsigned); static void tag_counters (const char *, unsigned, int, unsigned); static void tag_summary (const char *, unsigned, int, unsigned); @@ -77,6 +78,7 @@ static const tag_format_t tag_table[] = {GCOV_TAG_FUNCTION, "FUNCTION", tag_function}, {GCOV_TAG_BLOCKS, "BLOCKS", tag_blocks}, {GCOV_TAG_ARCS, "ARCS", tag_arcs}, + {GCOV_TAG_CONDS, "CONDITIONS", tag_conditions}, {GCOV_TAG_LINES, "LINES", tag_lines}, {GCOV_TAG_OBJECT_SUMMARY, "OBJECT_SUMMARY", tag_summary}, {0, NULL, NULL} @@ -392,6 +394,28 @@ tag_arcs (const char *filename ATTRIBUTE_UNUSED, } } +/* Print number of conditions (not outcomes, i.e. if (x && y) is 2, not 4). */ +static void +tag_conditions (const char *filename, unsigned /* tag */, int length, + unsigned depth) +{ + unsigned n_conditions = GCOV_TAG_CONDS_NUM (length); + + printf (" %u conditions", n_conditions); + if (flag_dump_contents) + { + for (unsigned ix = 0; ix != n_conditions; ix++) + { + const unsigned blockno = gcov_read_unsigned (); + const unsigned nterms = gcov_read_unsigned (); + + printf ("\n"); + print_prefix (filename, depth, gcov_position ()); + printf (VALUE_PADDING_PREFIX "block %u:", blockno); + printf (" %u", nterms); + } + } +} static void tag_lines (const char *filename ATTRIBUTE_UNUSED, unsigned tag ATTRIBUTE_UNUSED, int length ATTRIBUTE_UNUSED, diff --git a/gcc/gcov-io.h b/gcc/gcov-io.h index 0a026933f7ff..20f805598f08 100644 --- a/gcc/gcov-io.h +++ b/gcc/gcov-io.h @@ -261,6 +261,9 @@ typedef uint64_t gcov_type_unsigned; #define GCOV_TAG_ARCS ((gcov_unsigned_t)0x01430000) #define GCOV_TAG_ARCS_LENGTH(NUM) (1 + (NUM) * 2 * GCOV_WORD_SIZE) #define GCOV_TAG_ARCS_NUM(LENGTH) (((LENGTH / GCOV_WORD_SIZE) - 1) / 2) +#define GCOV_TAG_CONDS ((gcov_unsigned_t)0x01470000) +#define GCOV_TAG_CONDS_LENGTH(NUM) ((NUM) * 2 * GCOV_WORD_SIZE) +#define GCOV_TAG_CONDS_NUM(LENGTH) (((LENGTH) / GCOV_WORD_SIZE) / 2) #define GCOV_TAG_LINES ((gcov_unsigned_t)0x01450000) #define GCOV_TAG_COUNTER_BASE ((gcov_unsigned_t)0x01a10000) #define GCOV_TAG_COUNTER_LENGTH(NUM) ((NUM) * 2 * GCOV_WORD_SIZE) diff --git a/gcc/gcov.cc b/gcc/gcov.cc index fad704eb7c94..fd4a5cd331dd 100644 --- a/gcc/gcov.cc +++ b/gcc/gcov.cc @@ -46,6 +46,7 @@ along with Gcov; see the file COPYING3. If not see #include "color-macros.h" #include "pretty-print.h" #include "json.h" +#include "hwint.h" #include <zlib.h> #include <getopt.h> @@ -81,6 +82,7 @@ using namespace std; class function_info; class block_info; class source_info; +class condition_info; /* Describes an arc between two basic blocks. */ @@ -134,6 +136,33 @@ class block_location_info vector<unsigned> lines; }; +/* Describes a single conditional expression and the (recorded) conditions + shown to independently affect the outcome. */ +class condition_info +{ +public: + condition_info (); + + int popcount () const; + + /* Bitsets storing the independently significant outcomes for true and false, + respectively. */ + gcov_type_unsigned truev; + gcov_type_unsigned falsev; + + /* Number of terms in the expression; if (x) -> 1, if (x && y) -> 2 etc. */ + unsigned n_terms; +}; + +condition_info::condition_info (): truev (0), falsev (0), n_terms (0) +{ +} + +int condition_info::popcount () const +{ + return popcount_hwi (truev) + popcount_hwi (falsev); +} + /* Describes a basic block. Contains lists of arcs to successor and predecessor blocks. */ @@ -167,6 +196,8 @@ class block_info /* Block is a landing pad for longjmp or throw. */ unsigned is_nonlocal_return : 1; + condition_info conditions; + vector<block_location_info> locations; struct @@ -277,6 +308,8 @@ class function_info vector<block_info> blocks; unsigned blocks_executed; + vector<condition_info*> conditions; + /* Raw arc coverage counts. */ vector<gcov_type> counts; @@ -353,6 +386,9 @@ struct coverage_info int branches_executed; int branches_taken; + int conditions; + int conditions_covered; + int calls; int calls_executed; @@ -552,6 +588,10 @@ static int multiple_files = 0; static int flag_branches = 0; +/* Output conditions (modified condition/decision coverage). */ + +static bool flag_conditions = 0; + /* Show unconditional branches too. */ static int flag_unconditional = 0; @@ -658,6 +698,7 @@ static int read_count_file (void); static void solve_flow_graph (function_info *); static void find_exception_blocks (function_info *); static void add_branch_counts (coverage_info *, const arc_info *); +static void add_condition_counts (coverage_info *, const block_info *); static void add_line_counts (coverage_info *, function_info *); static void executed_summary (unsigned, unsigned); static void function_summary (const coverage_info *); @@ -666,6 +707,7 @@ static const char *format_gcov (gcov_type, gcov_type, int); static void accumulate_line_counts (source_info *); static void output_gcov_file (const char *, source_info *); static int output_branch_count (FILE *, int, const arc_info *); +static void output_conditions (FILE *, const block_info *); static void output_lines (FILE *, const source_info *); static string make_gcov_file_name (const char *, const char *); static char *mangle_name (const char *); @@ -930,6 +972,8 @@ print_usage (int error_p) fnotice (file, " -b, --branch-probabilities Include branch probabilities in output\n"); fnotice (file, " -c, --branch-counts Output counts of branches taken\n\ rather than percentages\n"); + fnotice (file, " -g, --conditions Include modified condition/decision\n\ + coverage in output\n"); fnotice (file, " -d, --display-progress Display progress information\n"); fnotice (file, " -D, --debug Display debugging dumps\n"); fnotice (file, " -f, --function-summaries Output summaries for each function\n"); @@ -983,6 +1027,7 @@ static const struct option options[] = { "all-blocks", no_argument, NULL, 'a' }, { "branch-probabilities", no_argument, NULL, 'b' }, { "branch-counts", no_argument, NULL, 'c' }, + { "conditions", no_argument, NULL, 'g' }, { "json-format", no_argument, NULL, 'j' }, { "human-readable", no_argument, NULL, 'H' }, { "no-output", no_argument, NULL, 'n' }, @@ -1011,7 +1056,7 @@ process_args (int argc, char **argv) { int opt; - const char *opts = "abcdDfhHijklmno:pqrs:tuvwx"; + const char *opts = "abcdDfghHijklmno:pqrs:tuvwx"; while ((opt = getopt_long (argc, argv, opts, options, NULL)) != -1) { switch (opt) @@ -1028,6 +1073,9 @@ process_args (int argc, char **argv) case 'f': flag_function_summary = 1; break; + case 'g': + flag_conditions = 1; + break; case 'h': print_usage (false); /* print_usage will exit. */ @@ -1152,6 +1200,45 @@ output_intermediate_json_line (json::array *object, } } + json::array *conditions = new json::array (); + lineo->set ("conditions", conditions); + if (flag_conditions) + { + vector<block_info *>::const_iterator it; + for (it = line->blocks.begin (); it != line->blocks.end (); it++) + { + const condition_info& info = (*it)->conditions; + if (info.n_terms == 0) + continue; + + const int count = 2 * info.n_terms; + const int covered = info.popcount (); + + json::object *cond = new json::object (); + cond->set ("count", new json::integer_number (count)); + cond->set ("covered", new json::integer_number (covered)); + + json::array *mtrue = new json::array (); + json::array *mfalse = new json::array (); + cond->set ("not_covered_true", mtrue); + cond->set ("not_covered_false", mfalse); + + if (count != covered) + { + for (unsigned i = 0; i < info.n_terms; i++) + { + gcov_type_unsigned index = 1; + index <<= i; + if (!(index & info.truev)) + mtrue->append (new json::integer_number (i)); + if (!(index & info.falsev)) + mfalse->append (new json::integer_number (i)); + } + } + conditions->append (cond); + } + } + object->append (lineo); } @@ -1969,6 +2056,28 @@ read_graph_file (void) } } } + else if (fn && tag == GCOV_TAG_CONDS) + { + unsigned num_dests = GCOV_TAG_CONDS_NUM (length); + + if (!fn->conditions.empty ()) + fnotice (stderr, "%s:already seen conditions for '%s'\n", + bbg_file_name, fn->get_name ()); + else + fn->conditions.resize (num_dests); + + for (unsigned i = 0; i < num_dests; ++i) + { + unsigned idx = gcov_read_unsigned (); + + if (idx >= fn->blocks.size ()) + goto corrupt; + + condition_info *info = &fn->blocks[idx].conditions; + info->n_terms = gcov_read_unsigned (); + fn->conditions[i] = info; + } + } else if (fn && tag == GCOV_TAG_LINES) { unsigned blockno = gcov_read_unsigned (); @@ -2099,6 +2208,21 @@ read_count_file (void) goto cleanup; } } + else if (tag == GCOV_TAG_FOR_COUNTER (GCOV_COUNTER_CONDS) && fn) + { + length = abs (read_length); + if (length != GCOV_TAG_COUNTER_LENGTH (2 * fn->conditions.size ())) + goto mismatch; + + if (read_length > 0) + { + for (ix = 0; ix != fn->conditions.size (); ix++) + { + fn->conditions[ix]->truev |= gcov_read_counter (); + fn->conditions[ix]->falsev |= gcov_read_counter (); + } + } + } else if (tag == GCOV_TAG_FOR_COUNTER (GCOV_COUNTER_ARCS) && fn) { length = abs (read_length); @@ -2443,6 +2567,15 @@ add_branch_counts (coverage_info *coverage, const arc_info *arc) } } +/* Increment totals in COVERAGE according to to block BLOCK. */ + +static void +add_condition_counts (coverage_info *coverage, const block_info *block) +{ + coverage->conditions += 2 * block->conditions.n_terms; + coverage->conditions_covered += block->conditions.popcount (); +} + /* Format COUNT, if flag_human_readable_numbers is set, return it human readable format. */ @@ -2546,6 +2679,18 @@ file_summary (const coverage_info *coverage) coverage->calls); else fnotice (stdout, "No calls\n"); + + } + + if (flag_conditions) + { + if (coverage->conditions) + fnotice (stdout, "Condition outcomes covered:%s of %d\n", + format_gcov (coverage->conditions_covered, + coverage->conditions, 2), + coverage->conditions); + else + fnotice (stdout, "No conditions\n"); } } @@ -2780,6 +2925,12 @@ static void accumulate_line_info (line_info *line, source_info *src, it != line->branches.end (); it++) add_branch_counts (&src->coverage, *it); + if (add_coverage) + for (vector<block_info *>::iterator it = line->blocks.begin (); + it != line->blocks.end (); it++) + add_condition_counts (&src->coverage, *it); + + if (!line->blocks.empty ()) { /* The user expects the line count to be the number of times @@ -2881,6 +3032,37 @@ accumulate_line_counts (source_info *src) } } +/* Output information about the conditions in block BINFO. The output includes + * a summary (n/m outcomes covered) and a list of the missing (uncovered) + * outcomes. */ + +static void +output_conditions (FILE *gcov_file, const block_info *binfo) +{ + const condition_info& info = binfo->conditions; + if (info.n_terms == 0) + return; + + const int expected = 2 * info.n_terms; + const int got = info.popcount (); + + fnotice (gcov_file, "condition outcomes covered %d/%d\n", got, expected); + if (expected == got) + return; + + for (unsigned i = 0; i < info.n_terms; i++) + { + gcov_type_unsigned index = 1; + index <<= i; + if ((index & info.truev & info.falsev)) + continue; + + const char *t = (index & info.truev) ? "" : "true"; + const char *f = (index & info.falsev) ? "" : " false"; + fnotice (gcov_file, "condition %2u not covered (%s%s)\n", i, t, f + !t[0]); + } +} + /* Output information about ARC number IX. Returns nonzero if anything is output. */ @@ -3091,16 +3273,29 @@ output_line_details (FILE *f, const line_info *line, unsigned line_num) if (flag_branches) for (arc = (*it)->succ; arc; arc = arc->succ_next) jx += output_branch_count (f, jx, arc); + + if (flag_conditions) + output_conditions (f, *it); } } - else if (flag_branches) + else { - int ix; + if (flag_branches) + { + int ix; + + ix = 0; + for (vector<arc_info *>::const_iterator it = line->branches.begin (); + it != line->branches.end (); it++) + ix += output_branch_count (f, ix, (*it)); + } - ix = 0; - for (vector<arc_info *>::const_iterator it = line->branches.begin (); - it != line->branches.end (); it++) - ix += output_branch_count (f, ix, (*it)); + if (flag_conditions) + { + for (vector<block_info *>::const_iterator it = line->blocks.begin (); + it != line->blocks.end (); it++) + output_conditions (f, *it); + } } } diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index d64bbf3ffbd7..7b972c093ba4 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -71,6 +71,28 @@ along with GCC; see the file COPYING3. If not see #include "context.h" #include "tree-nested.h" +/* Identifier for a basic condition, mapping it to other basic conditions of + its Boolean expression. Basic conditions given the same uid (in the same + function) are parts of the same ANDIF/ORIF expression. Used for condition + coverage. */ +static unsigned nextuid = 1; +/* Get a fresh identifier for a new condition expression. This is used for + condition coverage. */ +static unsigned +next_cond_uid () +{ + return nextuid++; +} +/* Reset the condition uid to the value it should have when compiling a new + function. 0 is already the default/untouched value, so start at non-zero. + A valid and set id should always be > 0. This is used for condition + coverage. */ +static void +reset_cond_uid () +{ + nextuid = 1; +} + /* Hash set of poisoned variables in a bind expr. */ static hash_set<tree> *asan_poisoned_variables = NULL; @@ -4139,13 +4161,16 @@ gimplify_call_expr (tree *expr_p, gimple_seq *pre_p, bool want_value) LOCUS is the source location of the COND_EXPR. + The condition_uid is a discriminator tag for condition coverage used to map + conditions to its corresponding full Boolean function. + This function is the tree equivalent of do_jump. shortcut_cond_r should only be called by shortcut_cond_expr. */ static tree shortcut_cond_r (tree pred, tree *true_label_p, tree *false_label_p, - location_t locus) + location_t locus, unsigned condition_uid) { tree local_label = NULL_TREE; tree t, expr = NULL; @@ -4167,13 +4192,14 @@ shortcut_cond_r (tree pred, tree *true_label_p, tree *false_label_p, false_label_p = &local_label; /* Keep the original source location on the first 'if'. */ - t = shortcut_cond_r (TREE_OPERAND (pred, 0), NULL, false_label_p, locus); + t = shortcut_cond_r (TREE_OPERAND (pred, 0), NULL, false_label_p, locus, + condition_uid); append_to_statement_list (t, &expr); /* Set the source location of the && on the second 'if'. */ new_locus = rexpr_location (pred, locus); t = shortcut_cond_r (TREE_OPERAND (pred, 1), true_label_p, false_label_p, - new_locus); + new_locus, condition_uid); append_to_statement_list (t, &expr); } else if (TREE_CODE (pred) == TRUTH_ORIF_EXPR) @@ -4190,13 +4216,14 @@ shortcut_cond_r (tree pred, tree *true_label_p, tree *false_label_p, true_label_p = &local_label; /* Keep the original source location on the first 'if'. */ - t = shortcut_cond_r (TREE_OPERAND (pred, 0), true_label_p, NULL, locus); + t = shortcut_cond_r (TREE_OPERAND (pred, 0), true_label_p, NULL, locus, + condition_uid); append_to_statement_list (t, &expr); /* Set the source location of the || on the second 'if'. */ new_locus = rexpr_location (pred, locus); t = shortcut_cond_r (TREE_OPERAND (pred, 1), true_label_p, false_label_p, - new_locus); + new_locus, condition_uid); append_to_statement_list (t, &expr); } else if (TREE_CODE (pred) == COND_EXPR @@ -4219,9 +4246,11 @@ shortcut_cond_r (tree pred, tree *true_label_p, tree *false_label_p, new_locus = rexpr_location (pred, locus); expr = build3 (COND_EXPR, void_type_node, TREE_OPERAND (pred, 0), shortcut_cond_r (TREE_OPERAND (pred, 1), true_label_p, - false_label_p, locus), + false_label_p, locus, condition_uid), shortcut_cond_r (TREE_OPERAND (pred, 2), true_label_p, - false_label_p, new_locus)); + false_label_p, new_locus, + condition_uid)); + SET_EXPR_UID (expr, condition_uid); } else { @@ -4229,6 +4258,7 @@ shortcut_cond_r (tree pred, tree *true_label_p, tree *false_label_p, build_and_jump (true_label_p), build_and_jump (false_label_p)); SET_EXPR_LOCATION (expr, locus); + SET_EXPR_UID (expr, condition_uid); } if (local_label) @@ -4279,12 +4309,44 @@ find_goto_label (tree expr) return NULL_TREE; } + +/* Given a multi-term condition (ANDIF, ORIF), walk the predicate PRED and tag + every basic condition with CONDITION_UID. Two basic conditions share the + CONDITION_UID discriminator when they belong to the same predicate, which is + used by the condition coverage. Doing this as an explicit step makes for a + simpler implementation than weaving it into the splitting code as the + splitting code eventually calls the entry point gimplfiy_expr which makes + bookkeeping complicated. */ +static void +tag_shortcut_cond (tree pred, unsigned condition_uid) +{ + if (TREE_CODE (pred) == TRUTH_ANDIF_EXPR + || TREE_CODE (pred) == TRUTH_ORIF_EXPR) + { + tree fst = TREE_OPERAND (pred, 0); + tree lst = TREE_OPERAND (pred, 1); + + if (TREE_CODE (fst) == TRUTH_ANDIF_EXPR + || TREE_CODE (fst) == TRUTH_ORIF_EXPR) + tag_shortcut_cond (fst, condition_uid); + else if (TREE_CODE (fst) == COND_EXPR) + SET_EXPR_UID (fst, condition_uid); + + if (TREE_CODE (lst) == TRUTH_ANDIF_EXPR + || TREE_CODE (lst) == TRUTH_ORIF_EXPR) + tag_shortcut_cond (lst, condition_uid); + else if (TREE_CODE (lst) == COND_EXPR) + SET_EXPR_UID (lst, condition_uid); + } +} + /* Given a conditional expression EXPR with short-circuit boolean predicates using TRUTH_ANDIF_EXPR or TRUTH_ORIF_EXPR, break the - predicate apart into the equivalent sequence of conditionals. */ - + predicate apart into the equivalent sequence of conditionals. CONDITION_UID + is a the tag/discriminator for this EXPR - all basic conditions in the + expression will be given the same CONDITION_UID. */ static tree -shortcut_cond_expr (tree expr) +shortcut_cond_expr (tree expr, unsigned condition_uid) { tree pred = TREE_OPERAND (expr, 0); tree then_ = TREE_OPERAND (expr, 1); @@ -4296,6 +4358,8 @@ shortcut_cond_expr (tree expr) bool then_se = then_ && TREE_SIDE_EFFECTS (then_); bool else_se = else_ && TREE_SIDE_EFFECTS (else_); + tag_shortcut_cond (pred, condition_uid); + /* First do simple transformations. */ if (!else_se) { @@ -4311,7 +4375,7 @@ shortcut_cond_expr (tree expr) /* Set the source location of the && on the second 'if'. */ if (rexpr_has_location (pred)) SET_EXPR_LOCATION (expr, rexpr_location (pred)); - then_ = shortcut_cond_expr (expr); + then_ = shortcut_cond_expr (expr, condition_uid); then_se = then_ && TREE_SIDE_EFFECTS (then_); pred = TREE_OPERAND (pred, 0); expr = build3 (COND_EXPR, void_type_node, pred, then_, NULL_TREE); @@ -4333,7 +4397,7 @@ shortcut_cond_expr (tree expr) /* Set the source location of the || on the second 'if'. */ if (rexpr_has_location (pred)) SET_EXPR_LOCATION (expr, rexpr_location (pred)); - else_ = shortcut_cond_expr (expr); + else_ = shortcut_cond_expr (expr, condition_uid); else_se = else_ && TREE_SIDE_EFFECTS (else_); pred = TREE_OPERAND (pred, 0); expr = build3 (COND_EXPR, void_type_node, pred, NULL_TREE, else_); @@ -4341,6 +4405,9 @@ shortcut_cond_expr (tree expr) } } + /* The expr tree should also have the expression id set. */ + SET_EXPR_UID (expr, condition_uid); + /* If we're done, great. */ if (TREE_CODE (pred) != TRUTH_ANDIF_EXPR && TREE_CODE (pred) != TRUTH_ORIF_EXPR) @@ -4388,7 +4455,7 @@ shortcut_cond_expr (tree expr) /* If there was nothing else in our arms, just forward the label(s). */ if (!then_se && !else_se) return shortcut_cond_r (pred, true_label_p, false_label_p, - EXPR_LOC_OR_LOC (expr, input_location)); + EXPR_LOC_OR_LOC (expr, input_location), condition_uid); /* If our last subexpression already has a terminal label, reuse it. */ if (else_se) @@ -4420,7 +4487,8 @@ shortcut_cond_expr (tree expr) jump_over_else = block_may_fallthru (then_); pred = shortcut_cond_r (pred, true_label_p, false_label_p, - EXPR_LOC_OR_LOC (expr, input_location)); + EXPR_LOC_OR_LOC (expr, input_location), + condition_uid); expr = NULL; append_to_statement_list (pred, &expr); @@ -4594,6 +4662,24 @@ generic_expr_could_trap_p (tree expr) return false; } +/* Associate the condition STMT with the discriminator UID. STMTs that are + broken down with ANDIF/ORIF from the same Boolean expression should be given + the same UID; 'if (a && b && c) { if (d || e) ... } ...' should yield the + { a: 1, b: 1, c: 1, d: 2, e: 2 } when gimplification is done. This is used + for condition coverage. */ +static void +gimple_associate_condition_with_expr (struct function *fn, gcond *stmt, + unsigned uid) +{ + if (!condition_coverage_flag) + return; + + if (!fn->cond_uids) + fn->cond_uids = new hash_map <gcond*, unsigned> (); + + fn->cond_uids->put (stmt, uid); +} + /* Convert the conditional expression pointed to by EXPR_P '(p) ? a : b;' into @@ -4696,7 +4782,7 @@ gimplify_cond_expr (tree *expr_p, gimple_seq *pre_p, fallback_t fallback) if (TREE_CODE (TREE_OPERAND (expr, 0)) == TRUTH_ANDIF_EXPR || TREE_CODE (TREE_OPERAND (expr, 0)) == TRUTH_ORIF_EXPR) { - expr = shortcut_cond_expr (expr); + expr = shortcut_cond_expr (expr, next_cond_uid ()); if (expr != *expr_p) { @@ -4760,11 +4846,16 @@ gimplify_cond_expr (tree *expr_p, gimple_seq *pre_p, fallback_t fallback) else label_false = create_artificial_label (UNKNOWN_LOCATION); + unsigned cond_uid = EXPR_COND_UID (expr); + if (cond_uid == 0) + cond_uid = next_cond_uid (); + gimple_cond_get_ops_from_tree (COND_EXPR_COND (expr), &pred_code, &arm1, &arm2); cond_stmt = gimple_build_cond (pred_code, arm1, arm2, label_true, label_false); gimple_set_location (cond_stmt, EXPR_LOCATION (expr)); + gimple_associate_condition_with_expr (cfun, cond_stmt, cond_uid); copy_warning (cond_stmt, COND_EXPR_COND (expr)); gimplify_seq_add_stmt (&seq, cond_stmt); gimple_stmt_iterator gsi = gsi_last (seq); @@ -19248,6 +19339,8 @@ gimplify_function_tree (tree fndecl) else push_struct_function (fndecl); + reset_cond_uid (); + /* Tentatively set PROP_gimple_lva here, and reset it in gimplify_va_arg_expr if necessary. */ cfun->curr_properties |= PROP_gimple_lva; diff --git a/gcc/ipa-inline.cc b/gcc/ipa-inline.cc index cc509b0c4a4e..e52757510ce9 100644 --- a/gcc/ipa-inline.cc +++ b/gcc/ipa-inline.cc @@ -689,7 +689,7 @@ can_early_inline_edge_p (struct cgraph_edge *e) } gcc_assert (gimple_in_ssa_p (DECL_STRUCT_FUNCTION (e->caller->decl)) && gimple_in_ssa_p (DECL_STRUCT_FUNCTION (callee->decl))); - if (profile_arc_flag + if ((profile_arc_flag || condition_coverage_flag) && ((lookup_attribute ("no_profile_instrument_function", DECL_ATTRIBUTES (caller->decl)) == NULL_TREE) != (lookup_attribute ("no_profile_instrument_function", diff --git a/gcc/ipa-split.cc b/gcc/ipa-split.cc index 39ad822608b2..caf6279ab218 100644 --- a/gcc/ipa-split.cc +++ b/gcc/ipa-split.cc @@ -1939,7 +1939,7 @@ pass_split_functions::gate (function *) /* When doing profile feedback, we want to execute the pass after profiling is read. So disable one in early optimization. */ return (flag_partial_inlining - && !profile_arc_flag && !flag_branch_probabilities); + && !profile_arc_flag && !flag_branch_probabilities); } } // anon namespace diff --git a/gcc/passes.cc b/gcc/passes.cc index 41e0add06c91..d73f8ba97b64 100644 --- a/gcc/passes.cc +++ b/gcc/passes.cc @@ -352,7 +352,8 @@ finish_optimization_passes (void) gcc::dump_manager *dumps = m_ctxt->get_dumps (); timevar_push (TV_DUMP); - if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities) + if (profile_arc_flag || condition_coverage_flag || flag_test_coverage + || flag_branch_probabilities) { dumps->dump_start (pass_profile_1->static_pass_number, NULL); end_branch_prob (); diff --git a/gcc/profile.cc b/gcc/profile.cc index e256545252e6..2b90e6cc5105 100644 --- a/gcc/profile.cc +++ b/gcc/profile.cc @@ -69,6 +69,17 @@ along with GCC; see the file COPYING3. If not see #include "profile.h" +struct condcov; +struct condcov *find_conditions (struct function*); +size_t cov_length (const struct condcov*); +array_slice<basic_block> cov_blocks (struct condcov*, size_t); +array_slice<uint64_t> cov_masks (struct condcov*, size_t); +array_slice<sbitmap> cov_maps (struct condcov* cov, size_t n); +void cov_free (struct condcov*); +size_t instrument_decisions (array_slice<basic_block>, size_t, + array_slice<sbitmap>, + array_slice<gcov_type_unsigned>); + /* Map from BBs/edges to gcov counters. */ vec<gcov_type> bb_gcov_counts; hash_map<edge,gcov_type> *edge_gcov_counts; @@ -100,6 +111,7 @@ static int total_num_passes; static int total_num_times_called; static int total_hist_br_prob[20]; static int total_num_branches; +static int total_num_conds; /* Forward declarations. */ static void find_spanning_tree (struct edge_list *); @@ -1155,6 +1167,12 @@ read_thunk_profile (struct cgraph_node *node) the flow graph that are needed to reconstruct the dynamic behavior of the flow graph. This data is written to the gcno file for gcov. + When FLAG_PROFILE_CONDITIONS is nonzero, this functions instruments the + edges in the control flow graph to track what conditions are evaluated to in + order to determine what conditions are covered and have an independent + effect on the outcome (modified condition/decision coverage). This data is + written to the gcno file for gcov. + When FLAG_BRANCH_PROBABILITIES is nonzero, this function reads auxiliary information from the gcda file containing edge count information from previous executions of the function being compiled. In this case, the @@ -1173,6 +1191,7 @@ branch_prob (bool thunk) struct edge_list *el; histogram_values values = histogram_values (); unsigned cfg_checksum, lineno_checksum; + bool output_to_file; total_num_times_called++; @@ -1397,10 +1416,18 @@ branch_prob (bool thunk) /* Write the data from which gcov can reconstruct the basic block graph and function line numbers (the gcno file). */ + output_to_file = false; if (coverage_begin_function (lineno_checksum, cfg_checksum)) { gcov_position_t offset; + /* The condition coverage needs a deeper analysis to identify expressions + of conditions, which means it is not yet ready to write to the gcno + file. It will write its entries later, but needs to know if it do it + in the first place, which is controlled by the return value of + coverage_begin_function. */ + output_to_file = true; + /* Basic block flags */ offset = gcov_write_tag (GCOV_TAG_BLOCKS); gcov_write_unsigned (n_basic_blocks_for_fn (cfun)); @@ -1514,29 +1541,65 @@ branch_prob (bool thunk) remove_fake_edges (); + if (condition_coverage_flag || profile_arc_flag) + gimple_init_gcov_profiler (); + + if (condition_coverage_flag) + { + struct condcov *cov = find_conditions (cfun); + gcc_assert (cov); + const size_t nconds = cov_length (cov); + total_num_conds += nconds; + + if (coverage_counter_alloc (GCOV_COUNTER_CONDS, 2 * nconds)) + { + gcov_position_t offset {}; + if (output_to_file) + offset = gcov_write_tag (GCOV_TAG_CONDS); + + for (size_t i = 0; i != nconds; ++i) + { + array_slice<basic_block> expr = cov_blocks (cov, i); + array_slice<uint64_t> masks = cov_masks (cov, i); + array_slice<sbitmap> maps = cov_maps (cov, i); + gcc_assert (expr.is_valid ()); + gcc_assert (masks.is_valid ()); + gcc_assert (maps.is_valid ()); + + size_t terms = instrument_decisions (expr, i, maps, masks); + if (output_to_file) + { + gcov_write_unsigned (expr.front ()->index); + gcov_write_unsigned (terms); + } + } + if (output_to_file) + gcov_write_length (offset); + } + cov_free (cov); + } + /* For each edge not on the spanning tree, add counting code. */ if (profile_arc_flag && coverage_counter_alloc (GCOV_COUNTER_ARCS, num_instrumented)) { unsigned n_instrumented; - gimple_init_gcov_profiler (); - n_instrumented = instrument_edges (el); gcc_assert (n_instrumented == num_instrumented); if (flag_profile_values) instrument_values (values); - - /* Commit changes done by instrumentation. */ - gsi_commit_edge_inserts (); } free_aux_for_edges (); values.release (); free_edge_list (el); + /* Commit changes done by instrumentation. */ + gsi_commit_edge_inserts (); + coverage_end_function (lineno_checksum, cfg_checksum); if (flag_branch_probabilities && (profile_status_for_fn (cfun) == PROFILE_READ)) @@ -1669,6 +1732,7 @@ init_branch_prob (void) total_num_passes = 0; total_num_times_called = 0; total_num_branches = 0; + total_num_conds = 0; for (i = 0; i < 20; i++) total_hist_br_prob[i] = 0; } @@ -1708,5 +1772,7 @@ end_branch_prob (void) (total_hist_br_prob[i] + total_hist_br_prob[19-i]) * 100 / total_num_branches, 5*i, 5*i+5); } + fprintf (dump_file, "Total number of conditions: %d\n", + total_num_conds); } } diff --git a/gcc/testsuite/g++.dg/gcov/gcov-18.C b/gcc/testsuite/g++.dg/gcov/gcov-18.C new file mode 100644 index 000000000000..620aef126995 --- /dev/null +++ b/gcc/testsuite/g++.dg/gcov/gcov-18.C @@ -0,0 +1,282 @@ +/* { dg-options "--coverage -fcondition-coverage -std=c++11" } */ +/* { dg-do run { target native } } */ + +#include <vector> +#include <stdexcept> + +class nontrivial_destructor +{ +public: + explicit nontrivial_destructor (int v) : val (v) {} + ~nontrivial_destructor () {} + + explicit operator bool() const { return bool(val); } + + int val; +}; + +int identity (int x) { return x; } +int throws (int) { throw std::runtime_error("exception"); } + +int +throw_if (int x) +{ + if (x) /* conditions(1/2) true(0) */ + /* conditions(end) */ + throw std::runtime_error("exception"); + return x; +} + +/* Used for side effects to insert nodes in conditional bodies etc. */ +int x = 0; + +/* Conditionals work in the presence of non-trivial destructors. */ +void +mcdc001a (int a) +{ + nontrivial_destructor v (a); + + if (v.val > 0) /* conditions(2/2) */ + x = v.val; + else + x = -v.val; +} + +/* Non-trivial destructor in-loop temporary. */ +nontrivial_destructor +mcdc002a (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + { + nontrivial_destructor tmp (a); + if (tmp.val % b) /* conditions(2/2) */ + return nontrivial_destructor (0); + x += i; + } /* conditions(suppress) */ + /* conditions(end) */ + + return nontrivial_destructor (a * b); +} + +/* Conditional in constructor. */ +void +mcdc003a (int a) +{ + class C + { + public: + explicit C (int e) : v (e) + { + if (e) /* conditions(1/2) false(0) */ + v = x - e; + } + int v; + }; + + C c (a); + if (c.v > 2) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = c.v + a; +} + +/* Conditional in destructor. */ +void +mcdc004a (int a) +{ + class C + { + public: + explicit C (int e) : v (e) {} + ~C () + { + if (v) /* conditions(2/2) */ + x = 2 * v; + } + int v; + }; + + C c (a); + x = 1; // arbitrary action between ctor+dtor +} + +/* Conditional in try. */ +void +mcdc005a (int a) +{ + try + { + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 2 * identity (a); + else + x = 1; + } + catch (...) + { + x = 0; + } +} + +/* Conditional in catch. */ +void +mcdc006a (int a) { + try + { + throws (a); + } + catch (std::exception&) + { + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + x = identity (a); + else + x = 0; + } +} + +void +mcdc006b (int a) +{ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + throws (a); + else + x = 1; +} + +void +mcdc006c (int a) try +{ + throws (a); +} +catch (...) { + if (a) /* conditions(2/2) */ + x = 5; +} + +/* Temporary with destructor as term. */ +void +mcdc007a (int a, int b) +{ + x = a && nontrivial_destructor (b); /* conditions(3/4) false(1) destructor() */ +} + +void +mcdc007b (int a, int b) +{ + if (a || throw_if (b)) /* conditions(3/4) true(1) destructor() */ + x = -1; + else + x = 1; +} + +void +mcdc007c (int a, int b) +{ + if (throw_if (a) || throw_if (b)) /* conditions(2/4) true(0 1) destructor() */ + x = -1; + else + x = 1; +} + +/* Destructor with delete. */ +void +mcdc008a (int a) +{ + class C + { + public: + int size = 5; + int* ptr = nullptr; + + explicit C (int v) : size (v + 5), ptr (new int[size]) /* conditions(suppress) */ + /* conditions(end) */ + { + for (int i = 0; i < size; i++) /* conditions(2/2) */ + ptr[i] = i + 1; + } + ~C() + { + // delete with implicit nullptr check + delete ptr; /* conditions(1/2) false(0) */ + /* conditions(end) */ + } + }; + + C c (a); + if (c.ptr[a + 1]) /* conditions(1/2) false(0) */ + x = a; +} + +/* Templates. */ +template <typename T> +void +mcdc009a (T a) +{ + if (a > 0) /* conditions(1/2) false(0) */ + /* conditions(end) */ + x += 2; +} + +/* constexpr. */ + +/* Compile-time evaluated branches do not contribute to coverage. */ +constexpr int +mcdc010a (int a, int b) +{ + return a > b ? 1 : 2; /* conditions(1/2) true(0) */ + /* conditions(end) */ +} + +/* Compile-time only evaluated functions do not show up in the compiled program + and gets no coverage at all. If this would generate output unexpectedly it + would trigger a test failure ("unexpected output"). */ +constexpr int +mcdc010b (int a, int b) +{ + return a > b ? 1 : 2; +} + +int +main (void) +{ + mcdc001a (0); + mcdc001a (1); + + mcdc002a (1, 1); + mcdc002a (1, 2); + + mcdc003a (1); + + mcdc004a (0); + mcdc004a (1); + + mcdc005a (0); + + mcdc006a (1); + + mcdc006b (0); + + mcdc006c (0); + mcdc006c (1); + + mcdc007a (0, 0); + mcdc007a (1, 1); + + mcdc007b (0, 0); + mcdc007b (1, 0); + + mcdc007c (0, 0); + + mcdc008a (1); + + mcdc009a (1); + + /* Use identity () so that this is not constexpr eval'd. */ + int v1 = mcdc010a (identity (2), 4); + constexpr int v2 = mcdc010a (4, 2); + + constexpr int v3 = mcdc010b (2, 4); +} + +/* { dg-final { run-gcov conditions { --conditions gcov-18.C } } } */ diff --git a/gcc/testsuite/gcc.misc-tests/gcov-19.c b/gcc/testsuite/gcc.misc-tests/gcov-19.c new file mode 100644 index 000000000000..17f1fb4e9230 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-19.c @@ -0,0 +1,1737 @@ +/* { dg-options "-fcondition-coverage -ftest-coverage" } */ +/* { dg-do run { target native } } */ + +/* Some side effect to stop branches from being pruned. */ +int x = 0; + +int id (int x) { return x; } +int inv (int x) { return !x; } + +/* || works. */ +void +mcdc001a (int a, int b) +{ + if (a || b) /* conditions(1/4) true(0) false(0 1) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc001b (int a, int b) +{ + if (a || b) /* conditions(3/4) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc001c (int a, int b) +{ + if (a || b) /* conditions(4/4) */ + x = 1; + else + x = 2; +} + +void +mcdc001d (int a, int b, int c) +{ + if (a || b || c) /* conditions(2/6) false(0 1 2) true(2) */ + /* conditions(end) */ + x = 1; +} + +/* && works */ +void +mcdc002a (int a, int b) +{ + if (a && b) /* conditions(1/4) true(0 1) false(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc002b (int a, int b) +{ + if (a && b) /* conditions(3/4) false(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc002c (int a, int b) +{ + if (a && b) /* conditions(4/4) */ + x = 1; + else + x = 2; +} + +void +mcdc002d (int a, int b, int c) +{ + if (a && b && c) /* conditions(4/6) false(0 2) */ + /* conditions(end) */ + x = 1; +} + +/* Negation works. */ +void +mcdc003a (int a, int b) +{ + if (!a || !b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +/* Single conditionals with and without else. */ +void +mcdc004a (int a) +{ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc004b (int a) +{ + if (a) /* conditions(2/2) */ + x = 1; + else + x = 2; +} + +void +mcdc004c (int a) +{ + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + x = 1; +} + +void +mcdc004d (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + { + if (b || c) /* conditions(1/4) true(1) false(0 1) */ + x = a + b + c; + } +} + +void +mcdc004e (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + { + if (b || c) /* conditions(1/4) true(1) false(0 1) */ + /* conditions(end) */ + x = a + b + c; + } + else + { + x = c; + } +} + +void +mcdc004f (int a, int b, int c) +{ + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + x = 1; + } + else if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + x = 2; + if (c) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + x = 3; + } +} + +/* mixing && and || works */ +void +mcdc005a (int a, int b, int c) +{ + if ((a && b) || c) /* conditions(1/6) true(0 1) false(0 1 2) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc005b (int a, int b, int c, int d) +{ + /* This is where masking MC/DC gets unintuitive: + + 1 1 0 0 => covers 1 (d = 0) as && 0 masks everything to the left + 1 0 0 0 => covers 2 (b = 0, c = 0) as (a && 0) masks a and d is never + evaluated. */ + if ((a && (b || c)) && d) /* conditions(3/8) true(0 1 2 3) false(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc005c (int a, int b, int c, int d) +{ + if (a || (b && c) || d) /* conditions(2/8) true(0 3) false(0 1 2 3) */ + /* conditions(end) */ + x = a + b + c + d; +} + +void +mcdc005d (int a, int b, int c, int d) +{ + /* This test is quite significant - it has a single input + (1, 0, 0, 0) and tests specifically for when a multi-term left operand + is masked. d = 0 should mask a || b and for the input there are no other + sources for masking a (since b = 0). */ + if ((a || b) && (c || d)) /* conditions(2/8) true(0 1 2 3) false(0 1) */ + /* conditions(end) */ + x = a + b; + else + x = c + d; +} + +/* Mixing in constants kills the decision removes the term outright. */ +void +mcdc005e (int a, int b) +{ + x += 0 && a; + x += a && 1; + x += 0 && a && b; + x += a && 1 && b; /* conditions(4/4) */ + x += a && b && 0; + x += 0 && 1; + x += 1 && a; + x += a && 0; + x += 1 || a; + x += a || 0; + x += 1 || a || b; + x += a || 0 || b; /* conditions(4/4) */ + x += a || b || 1; + x += 1 || 0; + x += 0 || a; + x += a || 1; +} + +/* Nested conditionals. */ +void +mcdc006a (int a, int b, int c, int d, int e) +{ + if (a) /* conditions(2/2) */ + { + if (b && c) /* conditions(3/4) false(1) */ + /* conditions(end) */ + x = 1; + else + x = 2; + } + else + { + if (c || d) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + x = 3; + else + x = 4; + } +} + +void +mcdc006b (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + if (b) /* conditions(2/2) */ + if (c) /* conditions(2/2) */ + x = a + b + c; +} + +void +mcdc006c (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + { + if (b) /*conditions(2/2) */ + { + if (c) /* conditions(2/2) */ + { + x = a + b + c; + } + } + else + { + x = b; + } + } + else + { + x = a; + } +} + +void +mcdc006d (int a, int b, int c) +{ + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = a + b; + if (c) /* conditions(2/2) */ + /* conditions(end) */ + x = a + b; + } +} + +void +mcdc006e (int a, int b, int c, int d) +{ + if ((a || b || c) && id (d)) /* conditions(4/8) true(0 1 2 3) false() */ + /* conditions(end) */ + x = 1; +} + +/* else/if. */ +void +mcdc007a (int a, int b, int c, int d) +{ + if (a) /* conditions(2/2) */ + { + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; + } + else if (c) /* conditions(2/2) */ + { + if (d) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 3; + else + x = 4; + } +} + +void +mcdc007b (int a, int b, int c) +{ + goto begin; +then: + x = 1; + return; +begin: + if (a) /* conditions(2/2) */ + goto then; + else if (b) /* conditions(2/2) */ + goto then; + else if (c) /* conditions(1/2) true(0) */ + goto then; +} + +void +mcdc007c (int a, int b, int c) +{ + goto begin; +then1: + x = 1; + return; +then2: + x = 1; + return; +then3: + x = 1; + return; +begin: + if (a) /* conditions(2/2) */ + goto then1; + else if (b) /* conditions(2/2) */ + goto then2; + else if (c) /* conditions(1/2) true(0) */ + /* conditions(end) */ + goto then3; +} + +void +noop () {} + +int +mcdc007d (int a, int b, int c, int d, int e) +{ + noop (); + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b || c) /* conditions(0/4) true(0 1) false(0 1) */ + /* conditions(end) */ + x = 2; + if (d) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 1; + } + if (e) /* conditions(1/2) false(0) */ + /* conditions(end) */ + return 0; + + return 2; +} + +/* while loop. */ +void +mcdc008a (int a) +{ + while (a < 10) /* conditions(2/2) */ + x = a++; +} + +void +mcdc008b (int a) +{ + while (a > 10) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = a--; +} + +void +mcdc008c (int a) +{ + // should work, even with no body + while (a) /* conditions(2/2) */ + break; +} + +/* Multi-term loop conditional. */ +void +mcdc008d (int a, int b, int c, int d) +{ + while ((a && (b || c)) && d) /* conditions(8/8) */ + a = b = c = d = 0; +} + +void +mcdc009a (int a, int b) +{ + while (a > 0 && b > 0) /* conditions(3/4) false(1) */ + /* conditions(end) */ + x = a--; +} + +void +mcdc009b (int a, int b) +{ + while (a-- > 0 && b) {} /* conditions(2/4) true(0 1) */ + /* conditions(end) */ +} + +/* for loop. */ +void +mcdc010a (int a, int b) +{ + for (int i = 0; i < b; i++) /* conditions(2/2) */ + { + if (a < b) /* conditions(2/2) */ + x = 1; + else + x = a += 2; + } +} + +void +mcdc010b () +{ + for (int a = 0; a <= 1; ++a) /* conditions(2/2) */ + { + x = a; + } +} + +int +mcdc010c (int a, int b, int c) +{ + for (;a || b || c;) /* conditions(4/6) true(0 2) */ + /* conditions(end) */ + return 1; + return 0; +} + + +int always (int x) { (void) x; return 1; } + +/* No-condition infinite loops. */ +void +mcdc010d (int a) +{ + for (;;) + { + if (always(a)) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + x = a; + break; + } + x += a + 1; + } +} + +/* Conditionals without control flow constructs work. */ +void +mcdc011a (int a, int b, int c) +{ + x = (a && b) || c; /* conditions(5/6) false(1) */ + /* conditions(end) */ +} + +/* Sequential expressions are handled independently. */ +void +mcdc012a (int a, int b, int c) +{ + if (a || b) /* conditions(3/4) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; + + if (c) /* conditions(2/2) */ + x = 1; +} + +/* Cannot ever satisfy (masking) MC/DC, even with all input combinations, + because not all variables independently affect the decision. */ +void +mcdc013a (int a, int b, int c) +{ + (void)b; + /* Specification: (a && b) || c + The implementation does not match the specification. This has branch + coverage, but not MC/DC. */ + if ((a && !c) || c) /* conditions(5/6) false(1) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc014a () +{ + int conds[64] = { 0 }; + /* conditions(64/128) true(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63) */ + x = conds[ 0] || conds[ 1] || conds[ 2] || conds[ 3] || conds[ 4] || + conds[ 5] || conds[ 6] || conds[ 7] || conds[ 8] || conds[ 9] || + conds[10] || conds[11] || conds[12] || conds[13] || conds[14] || + conds[15] || conds[16] || conds[17] || conds[18] || conds[19] || + conds[20] || conds[21] || conds[22] || conds[23] || conds[24] || + conds[25] || conds[26] || conds[27] || conds[28] || conds[29] || + conds[30] || conds[31] || conds[32] || conds[33] || conds[34] || + conds[35] || conds[36] || conds[37] || conds[38] || conds[39] || + conds[40] || conds[41] || conds[42] || conds[43] || conds[44] || + conds[45] || conds[46] || conds[47] || conds[48] || conds[49] || + conds[50] || conds[51] || conds[52] || conds[53] || conds[54] || + conds[55] || conds[56] || conds[57] || conds[58] || conds[59] || + conds[60] || conds[61] || conds[62] || conds[63] + ; /* conditions(end) */ +} + +/* Early returns. */ +void +mcdc015a (int a, int b) +{ + if (a) /* conditions(2/2) */ + return; + + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 1; +} + +void +mcdc015b (int a, int b) +{ + for (int i = 5; i > a; i--) /* conditions(2/2) */ + { + if (i == b) /* conditions(2/2) */ + return; + x = i; + } +} + +void +mcdc015c (int a, int b) +{ + for (int i = 5; i > a; i--) /* conditions(2/2) */ + { + if (i == b) /* conditions(2/2) */ + { + x = 0; + return; + } + else + { + x = 1; + return; + } + + x = i; + } +} + +/* Early returns, gotos. */ +void +mcdc015d (int a, int b, int c) +{ + if (a) return; /* conditions(1/2) false(0) */ + /* conditions(end) */ + if (id (b)) return; /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + if (id (c)) return; /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ +} + + +/* Nested loops. */ +void +mcdc016a (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + for (int k = 0; k < b; k++) /* conditions(2/2) */ + x = i + k; +} + +void +mcdc016b (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + { + if (a > 5) /* conditions(2/2) */ + break; + + for (int k = 0; k < b; k++) /* conditions(2/2) */ + x = i + k; + } +} + +void +mcdc016c (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + { + if (a > 5) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return; + + for (int k = 0; k < b; k++) /* conditions(2/2) */ + x = i + k; + } +} + +void +mcdc016d (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + { + for (int k = 0; k < 5; k++) /* conditions(2/2) */ + { + if (b > 5) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return; + x = i + k; + } + + } +} + +/* do-while loops */ +void +mcdc017a (int a) +{ + do + { + a--; + } while (a > 0); /* conditions(2/2) */ +} + +void +mcdc017b (int a, int b) +{ + do + { + /* This call is important; it can add more nodes to the body in the + CFG, which changes how close exits and breaks are to the loop + conditional. */ + noop (); + a--; + if (b) /* conditions(2/2) */ + break; + + } while (a > 0); /* conditions(2/2) */ +} + +void +mcdc017c (int a, int b) +{ + int left = 0; + int right = 0; + int n = a + b; + do + { + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + left = a > left ? b : left; /* conditions(2/2) */ + } + if (b) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + right = b > right ? a : right; /* conditions(2/2) */ + } + } while (n-- > 0); /* conditions(2/2) */ +} + +void +mcdc017d (int a, int b, int c) +{ + do + { + a--; + } while (a > 0 && b && c); /* conditions(0/6) true(0 1 2) false(0 1 2) */ + /* conditions(end) */ +} + +/* Collection of odd cases lifted-and-adapted from real-world code. */ +int +mcdc018a (int a, int b, int c, int d, int e, int f, int g, int len) +{ + int n; + /* adapted from zlib/gz_read */ + do + { + n = -1; + if (n > len) /* conditions(2/2) */ + n = len; + + if (b) /* conditions(2/2) */ + { + if (b < 5) /* conditions(2/2) */ + x = 1; + noop(); + } + else if (c && d) /* conditions(3/4) false(1) */ + /* conditions(end) */ + { + x = 2; + break; + } + else if (e || f) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { + if (id(g)) /* conditions(2/2) */ + return 0; + continue; + } + } while (a-- > 0); /* conditions(2/2) */ + + return 1; +} + +void +mcdc018b (int a, int b, int c) +{ + int n; + while (a) /* conditions(2/2) */ + { + /* else block does not make a difference for the problem, but ensures + loop termination. */ + if (b) /* conditions(2/2) */ + n = c ? 0 : 0; // does not show up in CFG (embedded in the block) + else + n = 0; + a = n; + } +} + +/* Adapted from zlib/compress2. */ +void +mcdc018c (int a, int b) +{ + int err; + do + { + a = inv (a); + err = a; + } while (err); /* conditions(1/2) true(0) */ + /* conditions(end) */ + + a = id (a); + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x *= a + 1; +} + +/* Too many conditions, coverage gives up. */ +void +mcdc019a () +{ + int conds[65] = { 0 }; + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wcoverage-too-many-conditions" + x = conds[ 0] || conds[ 1] || conds[ 2] || conds[ 3] || conds[ 4] || + conds[ 5] || conds[ 6] || conds[ 7] || conds[ 8] || conds[ 9] || + conds[10] || conds[11] || conds[12] || conds[13] || conds[14] || + conds[15] || conds[16] || conds[17] || conds[18] || conds[19] || + conds[20] || conds[21] || conds[22] || conds[23] || conds[24] || + conds[25] || conds[26] || conds[27] || conds[28] || conds[29] || + conds[30] || conds[31] || conds[32] || conds[33] || conds[34] || + conds[35] || conds[36] || conds[37] || conds[38] || conds[39] || + conds[40] || conds[41] || conds[42] || conds[43] || conds[44] || + conds[45] || conds[46] || conds[47] || conds[48] || conds[49] || + conds[50] || conds[51] || conds[52] || conds[53] || conds[54] || + conds[55] || conds[56] || conds[57] || conds[58] || conds[59] || + conds[60] || conds[61] || conds[62] || conds[63] || conds[64] + ; + #pragma GCC diagnostic pop +} + +/* Ternary. */ +void +mcdc020a (int a) +{ + // special case, this can be reduced to: + // _1 = argc != 0; + // e = (int) _1; + x = a ? 1 : 0; + + // changing to different int makes branch + x = a ? 2 : 1; /* conditions(2/2) */ +} + +void +mcdc020b (int a, int b) +{ + x = (a || b) ? 1 : 0; /* conditions(3/4) true(1) */ + /* conditions(end) */ +} + +void +mcdc020c (int a, int b) +{ + x = a ? 0 + : b ? 1 /* conditions(2/2) */ + : 2; /* conditions(1/2) false(0) */ + /* conditions(end) */ +} + +int +mcdc020d (int b, int c, int d, int e, int f) +{ + return ((b ? c : d) && e && f); /* conditions(7/10) true(2) false(3 4) */ + /* conditions(end) */ +} + +/* Infinite loop (no exit-edge), this should not be called, but it should + compile fine. */ +void +mcdc021a () +{ + while (1) + ; +} + +/* Computed goto can give all sorts of problems, including difficult path + contractions. */ +void +mcdc021b () +{ + void *op = &&dest; +dest: + if (op) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + goto * 0; +} + +int __sigsetjmp (); + +/* This should compile, but not called. */ +void +mcdc021c () +{ + while (x) /* conditions(0/2) true(0) false(0)*/ + /* conditions(end) */ + __sigsetjmp (); +} + +/* If edges are not properly contracted the a && id (b) will be interpreted as + two independent expressions. */ +void +mcdc021d (int a, int b, int c, int d) +{ + if (a && id (b)) /* conditions(1/4) true(0 1) false(0) */ + /* conditions(end) */ + x = 1; + else if (c && id (d)) /* conditions(1/4) true(0 1) false(0) */ + /* conditions(end) */ + x = 2; + else + x = 3; +} + +/* Adapted from linux arch/x86/tools/relocs.c + With poor edge contracting this became an infinite loop. */ +void +mcdc022a (int a, int b) +{ + for (int i = 0; i < 5; i++) /* conditions(2/2) */ + { + x = i; + for (int j = i; j < 5; j++) /* conditions(2/2) */ + { + if (id (id (a)) || id (b)) /* conditions(3/4) true(0) */ + /* conditions(end) */ + continue; + b = inv(b); + } + } +} + +int +mcdc022b (int a) +{ + int devt; + if (a) /* conditions(2/2) */ + { + x = a * 2; + if (x != a / 10 || x != a % 10) /* conditions(1/4) true(1) false(0 1) */ + /* conditions(end) */ + return 0; + } else { + devt = id (a); + if (devt) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return 0; + } + + return devt; +} + +/* Adapted from linux arch/x86/events/intel/ds.c + + It broken sorting so that the entry block was not the first node after + sorting. */ +void +mcdc022c (int a) +{ + if (!a) /* conditions(2/2) */ + return; + + for (int i = 0; i < 5; i++) /* conditions(2/2) */ + { + if (id (a + i) || inv (a - 1)) /* conditions(1/4) false(0 1) true(1) */ + /* conditions(end) */ + x = a + i; + if (inv (a)) /* conditions(1/2) true(0) */ + /* conditions(end) */ + break; + } +} + +void +mcdc022d (int a) +{ + int i; + for (i = 0; i < id (a); i++) /* conditions(1/2) false(0) */ + { + if (!inv (a)) /* conditions(1/2) false(0)*/ + /* conditions(end) */ + break; + } + + if (i < a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + x = a + 1; +} + +/* Adapted from openssl-3.0.1/crypto/cmp/cmp_msg.c ossl_cmp_error_new (). */ +void +mcdc022e (int a, int b, int c, int d) +{ + if (a || b) /* conditions(1/4) true(0) false(0 1) */ + /* conditions(end) */ + { + if (always (c)) /* conditions(1/2) false(0) */ + /* conditions(end) */ + goto err; + d++; + } + + if (d) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + goto err; + return; + +err: + noop (); +} + +/* 023 specifically tests that masking works correctly, which gets complicated + fast with a mix of operators and deep subexpressions. These tests violates + the style guide slightly to emphasize the nesting. They all share the same + implementation and only one input is given to each function to obtain clean + coverage results. */ +void +mcdc023a (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + // [a m n] = 0, [b, ...] = 1 + // a is masked by b and the remaining terms should be short circuited + if (/* conditions(1/24) true(0 2 3 4 5 6 7 8 9 10 11) false(0 1 2 3 4 5 6 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023b (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + // [a b d h] = 0, [c, ...] = 1 + // h = 0 => false but does not mask (a || b) or (c && d). d = 0 masks c. + if (/* conditions(4/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 4 5 6 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023c (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [m n a b] = 0, [...] = 1 + n,m = 0 should mask all other terms than a, b */ + if (/* conditions(4/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 3 4 5 6 7 8 9) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023d (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b] = 0, [h, ...] = 1 + n,m = 0 should mask all other terms than a, b */ + if (/* conditions(4/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 3 4 5 6 7 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023e (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b d] = 0, [c h, ...] = 1 + h = 1 should mask c, d, leave other terms intact. + If [k l m n] were false then h itself would be masked. + [a b] are masked as collateral by [m n]. */ + if (/* conditions(5/24) true(0 1 2 3 6 9 11) false(0 1 2 3 4 5 6 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023f (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b c f g] = 0, [e, ...] = 1 + [f g] = 0 should mask e, leave [c d] intact. */ + if (/* conditions(5/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(3 4 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023g (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b d f g] = 0, [e c, ...] = 1 + Same as 023f but with [c d] flipped so d masks c rather than c + short-circuits. This should not be lost. */ + if (/* conditions(5/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 4 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +/* Gotos, return, labels can make odd graphs. It is important that conditions + are assigned to the right expression, and that there are no miscounts. In + these tests values may be re-used, as checking things like masking an + independence is done in other test cases and not so useful here. */ +void +mcdc024a (int a, int b) +{ + /* This is a reference implementation without the labels, which should not + alter behavior. */ + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { + x = 2; + } +} + +void +mcdc024b (int a, int b) +{ + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { +label1: + x = 1; + } + else + { + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { +label2: + x = 1; + } + else + { + x = 2; + } +} + +void +mcdc024c (int a, int b) +{ + + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { +label1: + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { +label2: + x = 2; + } +} + +void +mcdc024d (int a, int b) +{ + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { +label1: + x = 1; + } + else + { +label2: + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { +label3: + x = 1; + } + else + { +label4: + x = 2; + } +} + +int +mcdc024e (int a, int b, int c) +{ + /* Graphs can get complicated with the innermost returns and else-less if, + so we must make sure these conditions are counted correctly. */ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (c) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 1; + else + return 2; + } + + if (a) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 3; + } + + return 5; +} + +/* Nested else-less ifs with inner returns needs to be counted right, which + puts some pressure on the expression isolation. */ +int +mcdc024f (int a, int b, int c) +{ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (c) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (a) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 1; + else + return 2; + } + + if (a) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 3; + } + + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 4; + } + return 5; +} + +int +mcdc024g (int a, int b, int c) +{ + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return 0; + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + b += 2; + if (b & 0xFF) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c++; + + return c; + } + c += 10; + } + return 1; +} + + +int +mcdc024h (int a, int b, int c) +{ + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + goto inner; + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + ++a; + + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { +inner: + b += 2; + if (b & 0xFF) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c++; + + return c; + } + c += 10; + } + return 1; +} + +int +mcdc024i (int a, int b, int c) +{ +fst: + b++; +snd: + b++; + + if (b > 10) /* conditions(2/2) */ + /* conditions(end) */ + goto end; + + if (b < 5) /* conditions(2/2) */ + /* conditions(end) */ + goto fst; + else + goto snd; + +end: + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + ++a; + + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + b += 2; + if (b & 0xFF) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c++; + + return c; + } + c += 10; + } + return 1; +} + +/* Adapted from alsa-lib 1.2.8 src/control/control.c. If two expressions share + an outcome with bypass nodes they would be handled twice. */ +int +mcdc025a (int a, int b, int c) +{ + int err; + if (id (a)) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return -1; + } + else + { + err = id (c); + if (err > 0) /* conditions(1/2) false(0) */ + /* conditions(end) */ + return err; + } + err = id (a); + return err; +} + +/* Boolean expressions in function call parameters. These tests are all built + with a reference expression which should behave the same as the function + call versions. */ +int +mcdc026a (int a, int b, int c, int d, int e) +{ + int cad = c && d; /* conditions(4/4) */ + /* conditions(end) */ + int x = a && b && cad && e; /* conditions(5/8) false(0 1 3) */ + /* conditions(end) */ + int y = a && b && id (c && d) && e; /* conditions(5/8; 4/4) false(0 1 3;;) */ + /* conditions(end) */ + return x + y; +} + +int +mcdc026b (int a, int b, int c, int d, int e) +{ + int dae = d && e; /* conditions(3/4) false(1) */ + /* conditions(end) */ + int x = a && b && c && dae; /* conditions(6/8) false(0 1) */ + int y = a && b && c && id (d && e); /* conditions(6/8; 3/4) false(0 1; 1) */ + /* conditions(end) */ + return x + y; +} + +int +mcdc026c (int a, int b, int c, int d, int e) +{ + int cod = c || d; /* conditions(3/4) true(1) */ + /* conditions(end) */ + int x = a && b && cod && e; /* conditions(5/8) false(0 1 3) */ + int y = a && b && id (c || d) && e; /* conditions(5/8; 3/4) true(;1) false(0 1 3;) */ + /* conditions(end) */ + return x+y; +} + +int +mcdc026d (int a, int b, int c, int d, int e) +{ + int aab = a && b; /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + int cod = c || d; /* conditions(3/4) true(1) */ + /* conditions(end) */ + int x = aab && cod && e; /* conditions(4/6) false(0 2) */ + /* conditions(end) */ + int y = id (a && b) && id (c || d) && e; /* conditions(2/4;4/6;3/4) true(;;1) false(0 1;0 2;;) */ + /* conditions(end) */ + return x + y; +} + +int +mcdc026e (int a, int b, int c, int d, int e) +{ + int cod = c || d; /* conditions(3/4) true(1) */ + /* conditions(end) */ + int dae = d && e; /* conditions(3/4) false(1) */ + /* conditions(end) */ + int aacod = a && cod; /* conditions(3/4) false(0)*/ + /* conditions(end) */ + int x = aacod && dae; /* conditions(4/4) */ + /* conditions(end) */ + int y = id (a && id (c || d)) && id (d && e); /* conditions(3/4; 3/4; 4/4; 3/4) true(;1;;) false(0;;;1) */ + /* conditions(end) */ + return x + y; +} + +int main () +{ + mcdc001a (0, 1); + + mcdc001b (0, 1); + mcdc001b (0, 0); + + mcdc001c (0, 1); + mcdc001c (0, 0); + mcdc001c (1, 1); + + mcdc001d (1, 1, 1); + mcdc001d (0, 1, 0); + + mcdc002a (1, 0); + + mcdc002b (1, 0); + mcdc002b (1, 1); + + mcdc002c (0, 0); + mcdc002c (1, 1); + mcdc002c (1, 0); + + mcdc002d (1, 1, 1); + mcdc002d (1, 0, 0); + + mcdc003a (0, 0); + mcdc003a (1, 0); + + mcdc004a (0); + mcdc004b (0); + mcdc004b (1); + mcdc004c (1); + + mcdc004d (0, 0, 0); + mcdc004d (1, 1, 1); + + mcdc004e (0, 0, 0); + mcdc004e (1, 1, 1); + + mcdc004f (1, 1, 1); + + mcdc005a (1, 0, 1); + + mcdc005b (1, 1, 0, 0); + mcdc005b (1, 0, 0, 0); + + mcdc005c (0, 1, 1, 0); + + mcdc005d (1, 0, 0, 0); + + mcdc005e (0, 0); + mcdc005e (0, 1); + mcdc005e (1, 0); + mcdc005e (1, 1); + + mcdc006a (0, 0, 0, 0, 0); + mcdc006a (1, 0, 0, 0, 0); + mcdc006a (1, 1, 1, 0, 0); + + mcdc006b (0, 0, 0); + mcdc006b (1, 0, 0); + mcdc006b (1, 1, 0); + mcdc006b (1, 1, 1); + + mcdc006c (0, 0, 0); + mcdc006c (1, 0, 0); + mcdc006c (1, 1, 0); + mcdc006c (1, 1, 1); + + mcdc006d (1, 0, 0); + mcdc006d (1, 0, 1); + + mcdc006e (0, 0, 0, 0); + mcdc006e (0, 0, 1, 0); + mcdc006e (0, 1, 0, 0); + + mcdc007a (0, 0, 0, 0); + mcdc007a (1, 0, 0, 0); + mcdc007a (0, 0, 1, 0); + + mcdc007b (0, 0, 0); + mcdc007b (0, 1, 1); + mcdc007b (1, 0, 1); + + mcdc007c (0, 0, 0); + mcdc007c (0, 1, 1); + mcdc007c (1, 0, 1); + + mcdc007d (0, 1, 0, 1, 1); + + mcdc008a (0); + + mcdc008b (0); + + mcdc008c (0); + mcdc008c (1); + + mcdc008d (0, 0, 0, 0); + mcdc008d (1, 0, 0, 0); + mcdc008d (1, 0, 1, 0); + mcdc008d (1, 0, 1, 1); + mcdc008d (1, 1, 1, 1); + + mcdc009a (0, 0); + mcdc009a (1, 1); + + mcdc009b (0, 0); + mcdc009b (1, 0); + + mcdc010a (0, 0); + mcdc010a (0, 9); + mcdc010a (2, 1); + + mcdc010b (); + + mcdc010c (0, 0, 0); + mcdc010c (0, 1, 0); + + mcdc010d (1); + + mcdc011a (0, 0, 0); + mcdc011a (1, 1, 0); + mcdc011a (1, 0, 1); + + mcdc012a (0, 0, 0); + mcdc012a (0, 1, 1); + + mcdc013a (0, 0, 0); + mcdc013a (0, 0, 1); + mcdc013a (0, 1, 0); + mcdc013a (0, 1, 1); + mcdc013a (1, 0, 0); + mcdc013a (1, 0, 1); + mcdc013a (1, 1, 0); + mcdc013a (1, 1, 1); + + mcdc014a (); + + mcdc015a (0, 0); + mcdc015a (1, 0); + + mcdc015b (0, 0); + mcdc015b (0, 1); + mcdc015b (6, 1); + + mcdc015c (0, 0); + mcdc015c (0, 5); + mcdc015c (6, 1); + + mcdc015d (1, 0, 0); + + mcdc016a (5, 5); + + mcdc016b (5, 5); + mcdc016b (6, 5); + + mcdc016c (5, 5); + + mcdc016d (1, 0); + + mcdc017a (0); + mcdc017a (2); + + mcdc017b (2, 0); + mcdc017b (0, 1); + + mcdc017c (1, 1); + + mcdc018a (0, 0, 1, 1, 0, 0, 0, 0); + mcdc018a (0, 1, 0, 0, 0, 0, 1, -2); + mcdc018a (0, 6, 0, 0, 0, 0, 1, -2); + mcdc018a (0, 6, 0, 0, 0, 0, 1, -2); + mcdc018a (0, 0, 0, 1, 0, 1, 1, 0); + mcdc018a (1, 0, 0, 0, 1, 1, 0, 0); + + mcdc018b (1, 0, 0); + mcdc018b (1, 1, 0); + + mcdc018c (1, 1); + + mcdc019a (); + + mcdc020a (0); + mcdc020a (1); + + mcdc020b (0, 0); + mcdc020b (1, 0); + + mcdc020c (0, 1); + mcdc020c (1, 1); + + mcdc020d (0, 0, 0, 0, 0); + mcdc020d (1, 0, 0, 1, 1); + mcdc020d (1, 1, 0, 1, 1); + + mcdc021d (1, 0, 1, 0); + + mcdc022a (0, 0); + + mcdc022b (0); + mcdc022b (1); + + mcdc022c (0); + mcdc022c (1); + + mcdc022d (1); + mcdc022e (0, 1, 1, 0); + + mcdc023a (0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); + mcdc023b (0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1); + mcdc023c (0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0); + mcdc023d (0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1); + mcdc023e (0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1); + mcdc023f (0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1); + mcdc023g (0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1); + + mcdc024a (0, 1); + mcdc024b (0, 1); + mcdc024c (0, 1); + mcdc024d (0, 1); + mcdc024a (1, 0); + mcdc024b (1, 0); + mcdc024c (1, 0); + mcdc024d (1, 0); + + mcdc024e (0, 0, 0); + mcdc024f (0, 0, 0); + mcdc024g (0, 0, 0); + mcdc024h (0, 0, 0); + mcdc024i (0, 0, 0); + + mcdc025a (0, 0, 1); + + mcdc026a (1, 1, 1, 0, 1); + mcdc026a (1, 1, 0, 0, 1); + mcdc026a (1, 1, 1, 1, 1); + + mcdc026b (1, 1, 1, 0, 1); + mcdc026b (1, 1, 0, 0, 1); + mcdc026b (1, 1, 1, 1, 1); + + mcdc026c (1, 1, 1, 0, 1); + mcdc026c (1, 1, 0, 0, 1); + mcdc026c (1, 1, 1, 1, 1); + + mcdc026d (1, 1, 1, 0, 1); + mcdc026d (1, 1, 0, 0, 1); + mcdc026d (1, 1, 1, 1, 1); + + mcdc026e (1, 1, 1, 0, 1); + mcdc026e (1, 1, 0, 0, 1); + mcdc026e (1, 1, 1, 1, 1); +} + +/* { dg-final { run-gcov conditions { --conditions gcov-19.c } } } */ diff --git a/gcc/testsuite/gcc.misc-tests/gcov-20.c b/gcc/testsuite/gcc.misc-tests/gcov-20.c new file mode 100644 index 000000000000..215faffc9801 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-20.c @@ -0,0 +1,22 @@ +/* { dg-options "-fcondition-coverage -ftest-coverage -fprofile-update=atomic" } */ +/* { dg-do run { target native } } */ + +/* Some side effect to stop branches from being pruned */ +int x = 0; + +void +conditions_atomic001 (int a, int b) +{ + if (a || b) /* conditions(1/4) true(0) false(0 1) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +int main () +{ + conditions_atomic001 (0, 1); +} + +/* { dg-final { run-gcov conditions { --conditions gcov-20.c } } } */ diff --git a/gcc/testsuite/gcc.misc-tests/gcov-21.c b/gcc/testsuite/gcc.misc-tests/gcov-21.c new file mode 100644 index 000000000000..3395422166a0 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-21.c @@ -0,0 +1,16 @@ +/* { dg-options "-fcondition-coverage" } */ + +/* https://gcc.gnu.org/pipermail/gcc-patches/2022-April/592927.html */ +char trim_filename_name; +int r; + +void trim_filename() { + if (trim_filename_name) + r = 123; + while (trim_filename_name) + ; +} + +int main () +{ +} diff --git a/gcc/testsuite/gcc.misc-tests/gcov-22.c b/gcc/testsuite/gcc.misc-tests/gcov-22.c new file mode 100644 index 000000000000..641791a72234 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-22.c @@ -0,0 +1,103 @@ +/* { dg-options "-fcondition-coverage -ftest-coverage" } */ +/* { dg-do run { target native } } */ + +#include <setjmp.h> +jmp_buf buf; + +void noop () {} +int identity (int x) { return x; } + +/* This function is a test to verify that the expression isolation does not + break on a CFG with the right set of complex edges. The (_ && setjmp) + created complex edges after the function calls and a circular pair of + complex edges around the setjmp call. This triggered a bug when the search + for right operands only would consider nodes dominated by the left-most + term, as this would only be the case if the complex edges were removed. (_ + && setjmp) is undefined behavior, but it does happen in the wild. + + __builtin_setjmp did not trigger this, so we need setjmp from libc. */ +void +setjmp001 (int a, int b, int c) +{ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + noop (); + + if (b) /* conditions(1/2) false(0) */ + /* conditions(end) */ + noop (); + + if (c && setjmp (buf)) /* conditions(1/4) true(0 1) false(1) */ + /* conditions(end) */ + noop (); +} + +/* Adapted from freetype-2.13.0 gxvalid/gxvmod.c classic_kern_validate */ +int +setjmp002 (int a) +{ + int error = identity(a); + + if (error) /* conditions(1/2) true(0) */ + /* conditions(end) */ + goto Exit; + + if (a+1) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + noop (); + if (setjmp (buf)) /* conditions(1/2) true(0) */ + /* conditions(end) */ + noop (); + + if (error) /* conditions(1/2) true(0) */ + /* conditions(end) */ + noop (); + } + + error--; + +Exit: + return error; +} + +int +setjmp003 (int a) +{ + /* || setjmp is undefined behavior, so the result here does not have to + make sense. It would be nice if the result is not something like 35/4 + conditions covered. */ + if (a || setjmp (buf)) /* conditions(suppress) */ + /* conditions(end) */ + a += 12; + + return a; +} + +jmp_buf dest; + +int +setdest () +{ + if (setjmp (dest)) /* conditions(2/2) */ + return 1; + return 2; +} + +void +jump () +{ + longjmp (dest, 1); +} + +int +main () +{ + setjmp001 (0, 1, 0); + setjmp002 (0); + setjmp003 (0); + setdest (); + jump (); +} + +/* { dg-final { run-gcov conditions { --conditions gcov-22.c } } } */ diff --git a/gcc/testsuite/gcc.misc-tests/gcov-23.c b/gcc/testsuite/gcc.misc-tests/gcov-23.c new file mode 100644 index 000000000000..72849d80e3ae --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-23.c @@ -0,0 +1,361 @@ +/* { dg-options "-fcondition-coverage -ftest-coverage -O2 -c" } */ + +#include <stdint.h> +#include <limits.h> +#include <setjmp.h> +jmp_buf buf; + +int id (int); +int idp (int *); +int err; +char c; + +/* This becomes problematic only under optimization for the case when the + compiler cannot inline the function but have to generate a call. It is not + really interesting to run, only build. Notably, both the function calls and + the return values are important to construct a problematic graph. + + This test is also a good example of where optimization makes condition + coverage unpredictable, but not unusable. If this is built without + optimization the conditions work as you would expect from reading the + source. */ +/* Adapted from cpio-2.14 gnu/utmens.c lutimens (). */ +int +mcdc001 (int *v) +{ + int adjusted; + int adjustment_needed = 0; + + int *ts = v ? &adjusted : 0; /* conditions(0/4) true(0 1) false(0 1) */ + /* conditions(end) */ + if (ts) + adjustment_needed = idp (ts); + if (adjustment_needed < 0) + return -1; + + if (adjustment_needed) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (adjustment_needed != 3) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return -1; + if (ts) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 0; + } + + if (adjustment_needed && idp (&adjusted)) /* conditions(0/4) true(0 1) false(0 1) */ + /* conditions(end) */ + return -1; + if (adjusted) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return idp (ts); + + return -1; +} + +/* This failed when the candidate set internal/contracted-past nodes were not + properly marked as reachable in the candidate reduction phase. */ +/* Adapted from cpio-2.14 gnu/mktime.c mktime_internal (). */ +int +mcdc002 () +{ + int a; + if (idp (&a)) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (id (a)) /* conditions(0/2) true(0/2) true(0) false(0) */ + /* conditions(end) */ + goto exit; + + if (err) /* conditions(0/2) true(0/2) true(0) false(0) */ + /* conditions(end) */ + return -1; + } + +exit: + return a; +} + +/* Adapted from icu4c-73.1 common/ucase.cpp ucase_getCaseLocale (). */ +int +mcdc003 (const char *locale) +{ + /* extern, so its effect won't be optimized out. */ + c = *locale++; + if (c == 'z') /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + return 1; + } + else if (c >= 'a') /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (id (c)) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c = *locale++; + } + else + { + if (c == 'T') + { + if (id (c)) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c = *locale++; + if (id (c)) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c = *locale++; + } + /* This may or may not become a jump table. */ + else if (c == 'L') /* conditions(suppress) */ + /* conditions(end) */ + c = *locale++; + else if (c == 'E') /* conditions(suppress) */ + /* conditions(end) */ + c = *locale++; + else if (c == 'N') /* conditions(suppress) */ + /* conditions(end) */ + c = *locale++; + else if (c == 'H') /* conditions(suppress) */ + /* conditions(end) */ + { + c = *locale++; + if (id (c)) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c = *locale++; + } + } + + return 1; +} + +/* The || will be changed to |, so it is impractical to predict the number of + conditions. If the walk is not properly implemented this will not finish + compiling, so the actual coverage is not interesting. */ +/* Adapted from icu4c-73.1 common/uresdata.cpp res_findResource (). */ +int +mcdc004 (int r, char* path, char* key) +{ + char *idcc (char *, char); + #define is_kind1(type) ((type) == 23 || (type) == 14 || (type == 115)) + #define is_kind2(type) ((type) == 16 || (type) == 77 || (type == 118)) + #define is_kind12(type) (is_kind1 ((type)) || is_kind2 ((type))) + + char *nextSepP = path; + int t1 = r; + int type = id (t1); + + if (!is_kind12 (type)) /* conditions(suppress) */ + /* conditions(end) */ + return -1; + + while (*path && t1 != -1 && is_kind12 (type)) /* conditions(suppress) */ + /* conditions(end) */ + { + nextSepP = idcc(path, '/'); + if(nextSepP == path) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return -1; + + if (*nextSepP == 'a') /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + *key = *path; + else if (*nextSepP == 'b') /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + *key = 0; + type = t1; + } + + return t1; +} + +/* Adapted from jxl 0.8.2 lib/extras/dec/apng.cc processing_start (). + This created a graph where depth-first traversal of the CFG would not + process nodes in the wrong order (the extra control inserted from setjmp + created a path of complexes from root to !b without going through !a). + + This only happened under optimization. */ +int +mcdc005 (int a, int b) +{ + a = id (a); + b = id (b); + + /* The a || b gets transformed to a | b, then fused with setjmp because + they both have the same return value. */ + if (a || b) /* conditions(0/4) true(0 1) false(0 1) */ + /* conditions(end) */ + return 1; + else + a += 1; + + if (setjmp (buf)) + return 1; + + return a; +} + +/* Adapted from cpio-2.14 gnu/quotearg.c quotearg_buffer_restyled. The ifs in + the cases (with fallthrough) re-use the same value which under optimization + causes path reuse which must be sorted out. */ +int +mcdc006 (int quoting_style, int elide, int *buffer) +{ + int backslash = 0; + switch (quoting_style) + { + case 1: + if (!elide) + backslash = 1; + case 2: + if (!elide) + if (buffer) + *buffer = '"'; + } + + if (quoting_style == 2 && backslash) + quoting_style = 1; + return 1; +} + +/* Adapted from pcre2-10.42 pcre2_compile.c pcre2_compile. If SSA nodes are + created at the wrong place in the block it will fail flow analysis (because + the label is in the middle of block), caused by the final break in this + case. */ +void +mcdc007 (int options, int *pso, int len) +{ + if (options == 5) + return; + + while (options--) + { + int i; + for (i = 0; i < len; i++) + { + int *p = pso + i; + int skipatstart = *p + 2; + if (skipatstart) { + switch(*p) + { + case 1: + *p |= *p + 1; + break; + case 2: + skipatstart += *p - skipatstart; + break; + } + break; + } + } + if (i >= len) break; + } +} + +/* Adapted from alsa-lib 1.2.8 pcm/pcm.c snd_pcm_chmap_print. */ +int +mcdc008 (int *map, unsigned maxlen, int *buf) +{ + unsigned int len = 0; + for (unsigned i = 0; i < *map; i++) { + unsigned int p = map[i] & 0xF; + if (i > 0) { + if (len >= maxlen) + return -1; + } + if (map[i] & 0xFF) + len += idp (buf + len); + else { + len += idp (buf); + } + if (map[i] & 0xFF00) { + len += idp (buf + len); + if (len >= maxlen) + return -1; + } + } + return len; +} + +/* Adapted from cpio-2.14 gnu/mktime.c mktime_internal (). The combination of + goto, automatic variables, and the ternary causes the post dominator of the + highest topological ordered node not to be the common post dominator of the + expression as a whole. */ +int +mcdc009 (int *tp, int t, int isdst) +{ + int t0 = tp[0]; + int t1 = tp[1]; + int t2 = tp[2]; + + if (t0 < 0 || (isdst < 0 ? t1 : (isdst != 0))) + goto offset_found; + + if (t == 0) + return -1; + + t1 = t2; + +offset_found: + return t; +} + +/* Adapted from Berkeley db 4.8.30 rep/rep_elect.c __rep_cmp_vote. This + particular combination of fallthrough and folding creates a path into the + the inner if () that does not go through the first basic condition. */ +void +mcdc010 (int cmp, int *rep, int sites, int priority, int flags) +{ + if (sites > 1 && (priority != 0 || (flags & 0xFF))) + { + if ( (priority != 0 && *rep == 0) + || (((priority == 0 && *rep == 0) + || (priority != 0 && *rep != 0)) && cmp > 0)) + { + *rep = cmp; + } + } +} + +/* For not sufficiently protected back edges this would create an infinite + loop. */ +void +mcdc011 (int a, int b) +{ + if (a && id (b)) + for (;;) {} + id (a+1); +} + +/* Adapted from alsa-1.2.8 tlv.c get_tlv_info (). Under optimization, the + conditions may be replaced with min (). */ +int +mcdc012 (int x, int y) +{ + int err; + err = id (x); + if (err < 0) + return err; + err = id (y); + if (err < 0) + return err; + return 0; +} + +/* Adapted from alsa-1.2.8 control.c snd_ctl_elem_id_compare_numid (). This + test is probably not so accurate on targets where int == int64. Under + optimization, the conditions may be replaced with min/max. */ +int +mcdc013 (const int64_t *id1, const int64_t *id2) +{ + int64_t d; + d = *id1 - *id2; + if (d & 0xFF) + { + if (d > INT_MAX) + d = INT_MAX; + else if (d < INT_MIN) + d = INT_MIN; + } + return d; +} diff --git a/gcc/testsuite/lib/gcov.exp b/gcc/testsuite/lib/gcov.exp index fe6cd9635dba..dd47d66d1b2e 100644 --- a/gcc/testsuite/lib/gcov.exp +++ b/gcc/testsuite/lib/gcov.exp @@ -174,6 +174,252 @@ proc verify-branches { testname testcase file } { return $failed } +# +# verify-conditions -- check that conditions are checked as expected +# +# TESTNAME is the name of the test, including unique flags. +# TESTCASE is the name of the test file. +# FILE is the name of the gcov output file. +# +# Checks are based on comments in the source file. Condition coverage comes +# with with two types of output, a summary and a list of the uncovered +# conditions. Both must be checked to pass the test +# +# To check for conditions, add a comment the line of a conditional: +# /* conditions(n/m) true(0 1) false(1) */ +# +# where n/m are the covered and total conditions in the expression. The true() +# and false() take the indices expected *not* covered. +# +# This means that all coverage statements should have been seen: +# /* conditions(end) */ +# +# If all conditions are covered i.e. n == m, then conditions(end) can be +# omitted. If either true() or false() are empty they can be omitted too. +# +# In some very specific cases there is a need to match multiple conditions on +# the same line, for example if (a && fn (b || c) && d), which is interpreted +# roughly as tmp _bc = b || c; if (a && _bc && d). The argument to fn is +# considered its own expression and its coverage report will be written on the +# same line. For these cases, use conditions(n/m; n/m;...) true(0 1;;...) +# where ; marks the end of the list element where the ith list matches the ith +# expression. The true()/false() matchers can be omitted if no expression +# expects them, otherwise use the empty list if all true/false outcomes are +# covered. +# +# C++ can insert conditionals in the CFG that are not present in source code. +# These must be manually suppressed since unexpected and unhandled conditions +# are an error (to help combat regressions). Output can be suppressed with +# conditions(suppress) and conditions(end). suppress should usually be on a +# closing brace. +# +# Some expressions, when using unnamed temporaries as operands, will have +# destructors in expressions. The coverage of the destructor will be reported +# on the same line as the expression itself, but suppress() would also swallow +# the expected tested-for messages. To handle these, use the destructor() [1] +# which will suppress everything from and including the second "conditions +# covered". +# +# [1] it is important that the destructor() is *on the same line* as the +# conditions(m/n) +proc verify-conditions { testname testcase file } { + set failed 0 + set suppress 0 + set destructor 0 + set should "" + set shouldt "" + set shouldf "" + set shouldall "" + set fd [open $file r] + set lineno 0 + set checks [list] + set keywords {"end" "suppress"} + while {[gets $fd line] >= 0} { + regexp "^\[^:\]+: *(\[0-9\]+):" "$line" all lineno + set prefix "$testname line $lineno" + + if {![regexp "condition" $line]} { + continue + } + + # Missing coverage for both true and false will cause a failure, but + # only count it once for the report. + set ok 1 + if [regexp {conditions *\([0-9a-z/; ]+\)} "$line" all] { + # *Very* coarse sanity check: conditions() should either be a + # keyword or n/m, anything else means a buggy test case. end is + # optional for cases where all conditions are covered, since it + # only expects a single line of output. + regexp {conditions *\(([0-9a-z/]+)\)} "$line" all e + if {([lsearch -exact $keywords $e] >= 0 || [regexp {\d+/\d+} "$e"]) == 0} { + fail "$prefix: expected conditions (n/m), (suppress) or (end); was ($e)" + incr failed + continue + } + + # Any keyword means a new context. Set the error flag if not all + # expected output has been seen, and reset the state. + if {[llength $shouldt] != 0} { + fail "$prefix: expected 'not covered (true)' for terms: $shouldt" + set ok 0 + } + + if {[llength $shouldf] != 0} { + fail "$prefix: expected 'not covered (false)' for terms: $shouldf" + set ok 0 + } + + if {$shouldall ne ""} { + fail "$prefix: coverage summary not found; expected $shouldall" + set ok 0 + } + + if {[llength $checks] != 0} { + set missing [llength checks] + fail "$prefix: expected $missing more conditions" + set ok 0 + } + + set suppress 0 + set destructor 0 + set setup 0 + set checks [list] + + if [regexp {destructor\(\)} "$line"] { + set destructor 1 + } + + # Find the expressions on this line. There may be more, to support + # constructs like (a && fn (b && c) && d). + # The match produces lists like [conditions(n/m) n m] + set argconds "" + set argtrue "" + set argfalse "" + regexp {conditions *\(([0-9 /;]+)\)} $line _ argconds + regexp {true *\(([0-9 ;]+)\)} $line _ argtrue + regexp {false *\(([0-9 ;]+)\)} $line _ argfalse + set condv [split $argconds ";"] + set truev [split $argtrue ";"] + set falsev [split $argfalse ";"] + set ncases [llength $condv] + + for {set i 0} {$i < $ncases} {incr i} { + set summary [lindex $condv $i] + set n [lindex [split $summary "/"] 0] + set m [lindex [split $summary "/"] 1] + set newt [lindex $truev $i] + set newf [lindex $falsev $i] + + # Sanity check - if the true() and false() vectors should have + # m-n elements to cover all uncovered conditions. Because of + # masking it can sometimes be surprising what terms are + # independent, so this makes for more robust test at the cost + # of being slightly more annoying to write. + set nterms [expr [llength $newt] + [llength $newf]] + set nexpected [expr {$m - $n}] + if {$nterms != $nexpected} { + fail "$prefix: expected $nexpected uncovered terms; got $nterms" + set ok 0 + } + set shouldall $e + set should "" + set shouldt $newt + set shouldf $newf + set shouldall [regsub -all { } "$n/$m" ""] + lappend checks [list $should $shouldt $shouldf $shouldall $newt $newf] + } + + if {[llength $checks] > 0} { + # no-op - the stack of checks to do is set up + } elseif {$e == "end"} { + # no-op - state should already been reset, and errors flagged + } elseif {$e == "suppress"} { + set suppress 1 + } else { + # this should be unreachable, + fail "$prefix: unhandled control ($e), should be unreachable" + set ok 0 + } + } elseif {$suppress == 1} { + # ignore everything in a suppress block. C++ especially can insert + # conditionals in exceptions and destructors which would otherwise + # be considered unhandled. + continue + } elseif [regexp {condition +(\d+) not covered \((.*)\)} "$line" all cond condv] { + foreach v {true false} { + if [regexp $v $condv] { + if {"$v" == "true"} { + set should shouldt + } else { + set should shouldf + } + + set i [lsearch [set $should] $cond] + if {$i != -1} { + set $should [lreplace [set $should] $i $i] + } else { + fail "$prefix: unexpected uncovered term $cond ($v)" + set ok 0 + } + } + } + } elseif [regexp {condition outcomes covered (\d+/\d+)} "$line" all cond] { + # the destructor-generated "conditions covered" lines will be + # written after all expression-related output. Handle these by + # turning on suppression if the destructor-suppression is + # requested. + if {$shouldall == "" && $destructor == 1} { + set suppress 1 + continue + } + + if {[llength $checks] == 0} { + fail "$prefix: unexpected summary $cond" + set ok 0 + } else { + # Report any missing conditions from the previous set if this + # is not the first condition block + if {$setup == 1} { + if {[llength $shouldt] != 0} { + fail "$prefix: expected 'not covered (true)' for terms: $shouldt" + set ok 0 + } + if {[llength $shouldf] != 0} { + fail "$prefix: expected 'not covered (false)' for terms: $shouldf" + set ok 0 + } + if {$shouldall ne ""} { + fail "$prefix: coverage summary not found; expected $shouldall" + set ok 0 + } + } + set setup 1 + set current [lindex $checks 0] + set checks [lreplace $checks 0 0] + set should [lindex $current 0] + set shouldt [lindex $current 1] + set shouldf [lindex $current 2] + set shouldall [lindex $current 3] + set newt [lindex $current 4] + set newf [lindex $current 5] + + if {$cond == $shouldall} { + set shouldall "" + } else { + fail "$prefix: unexpected summary - expected $shouldall, got $cond" + set ok 0 + } + } + } + + if {$ok != 1} { + incr failed + } + } + close $fd + return $failed +} + # # verify-calls -- check that call return percentages are as expected # @@ -321,6 +567,7 @@ proc run-gcov { args } { set gcov_args "" set gcov_verify_calls 0 set gcov_verify_branches 0 + set gcov_verify_conditions 0 set gcov_verify_lines 1 set gcov_verify_intermediate 0 set gcov_remove_gcda 0 @@ -331,10 +578,13 @@ proc run-gcov { args } { set gcov_verify_calls 1 } elseif { $a == "branches" } { set gcov_verify_branches 1 + } elseif { $a == "conditions" } { + set gcov_verify_conditions 1 } elseif { $a == "intermediate" } { set gcov_verify_intermediate 1 set gcov_verify_calls 0 set gcov_verify_branches 0 + set gcov_verify_conditions 0 set gcov_verify_lines 0 } elseif { $a == "remove-gcda" } { set gcov_remove_gcda 1 @@ -404,6 +654,11 @@ proc run-gcov { args } { } else { set bfailed 0 } + if { $gcov_verify_conditions } { + set cdfailed [verify-conditions $testname $testcase $testcase.gcov] + } else { + set cdfailed 0 + } if { $gcov_verify_calls } { set cfailed [verify-calls $testname $testcase $testcase.gcov] } else { @@ -418,12 +673,12 @@ proc run-gcov { args } { # Report whether the gcov test passed or failed. If there were # multiple failures then the message is a summary. - set tfailed [expr $lfailed + $bfailed + $cfailed + $ifailed] + set tfailed [expr $lfailed + $bfailed + $cdfailed + $cfailed + $ifailed] if { $xfailed } { setup_xfail "*-*-*" } if { $tfailed > 0 } { - fail "$testname gcov: $lfailed failures in line counts, $bfailed in branch percentages, $cfailed in return percentages, $ifailed in intermediate format" + fail "$testname gcov: $lfailed failures in line counts, $bfailed in branch percentages, $cdfailed in condition/decision, $cfailed in return percentages, $ifailed in intermediate format" if { $xfailed } { clean-gcov $testcase } diff --git a/gcc/tree-core.h b/gcc/tree-core.h index a74fbdf75b4b..a8439f8acbb3 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -1600,6 +1600,9 @@ enum omp_clause_linear_kind struct GTY(()) tree_exp { struct tree_typed typed; location_t locus; + /* Discriminator for basic conditions in a Boolean expressions. Trees that + are operands of the same Boolean expression should have the same uid. */ + unsigned condition_uid; tree GTY ((length ("TREE_OPERAND_LENGTH ((tree)&%h)"))) operands[1]; }; diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index 625f7e9229ad..33ff550a7bc1 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -58,6 +58,7 @@ along with GCC; see the file COPYING3. If not see #include "alloc-pool.h" #include "symbol-summary.h" #include "symtab-thunks.h" +#include "cfganal.h" static GTY(()) tree gcov_type_node; static GTY(()) tree tree_interval_profiler_fn; @@ -108,6 +109,1055 @@ enum counter_update_method { static counter_update_method counter_update = COUNTER_UPDATE_SINGLE_THREAD; +/* These functions support measuring modified conditition/decision coverage + (MC/DC). MC/DC requires all of the below during testing: + + - Each entry and exit point is invoked + - Each decision takes every possible outcome + - Each condition in a decision takes every possible outcome + - Each condition in a decision is shown to independently affect the outcome + of the decision + + Independence of a condition is shown by recording it being evaluated to a + value (true/false) and not being made irrelevant ("masked") by a later term. + This feature adds some instrumentation code, a few bitwise operators, that + records the branches taken in conditions and applies a filter for the + masking effect. Masking is essentially short-circuiting in reverse: a + condition does not contribute to the outcome if it would short circuit the + (sub) expression if it was evaluated right-to-left, (_ && false) and (_ || + true). + + The program is essentially rewritten this way: + + - if (a || b) { fn () } + + if (a) { _t |= 0x1; goto _then; } + + else { _f |= 0x1; + + if (b) { _t |= 0x2; _mask |= 0x1; goto _then; } + + else { _f |= 0x2; goto _else; } + + _then: + + _gcov_t |= (_t & _mask); + + _gcov_f |= (_f & _mask); + + fn (); goto _end; + + _else: + + _gcov_t |= (_t & _mask); + + _gcov_f |= (_f & _mask); + + fn (); + + _end: + + It is assumed the front end will provide discrimnators so that conditional + basic blocks (basic block with a conditional jump and outgoing true/false + edges) that belong to the same Boolean expression have the same + discriminator. Masking is determined by analyzing these expressions as a + reduced order binary decision diagram. */ +namespace +{ +/* Some context and reused instances between function calls. Large embedded + buffers are used to up-front request enough memory for most programs and + merge them into a single allocation at the cost of using more memory in the + average case. Some numbers from linux v5.13 which is assumed to be a + reasonably diverse code base: 75% of the functions in linux have less than + 16 nodes in the CFG and approx 2.5% have more than 64 nodes. The functions + that go beyond a few dozen nodes tend to be very large (>100) and so 64 + seems like a good balance. + + This is really just a performance balance of the cost of allocation and + wasted memory. */ +struct conds_ctx +{ + /* This is both a reusable shared allocation which is also used to return + single expressions, which means it for most code should only hold a + couple of elements. */ + auto_vec<basic_block, 64> blocks; + + /* Index for the topological order indexed by basic_block->index to an + ordering so that expression (a || b && c) => top_index[a] < top_index[b] + < top_index[c]. */ + auto_vec<int, 256> top_index; + + /* Pre-allocate bitmaps and vectors for per-function book keeping. This is + pure instance reuse and the bitmaps carry no data between function + calls. */ + auto_vec<basic_block, 64> B1; + auto_vec<basic_block, 64> B2; + auto_sbitmap G1; + auto_sbitmap G2; + auto_sbitmap G3; + + explicit conds_ctx (unsigned size) noexcept (true) : G1 (size), G2 (size), + G3 (size) + { + } +}; + +/* Only instrument terms with fewer than number of bits in a (wide) gcov + integer, which is probably 64. The algorithm itself does not impose this + limitation, but it makes for a simpler implementation. + + * Allocating the output data structure (coverage_counter_alloc ()) can + assume pairs of gcov_type_unsigned and not use a separate length field. + * A pair gcov_type_unsigned can be used as accumulators. + * Updating accumulators is can use the bitwise operations |=, &= and not + custom operators that work for arbitrary-sized bit-sets. + + Most real-world code should be unaffected by this, but it is possible + (especially for generated code) to exceed this limit. */ +#define CONDITIONS_MAX_TERMS (TYPE_PRECISION (gcov_type_node)) +#define EDGE_CONDITION (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE) + +/* Compare two basic blocks by their order in the expression i.e. for (a || b) + then topological_cmp (a, b, ...) < 0. The result is undefined if LHS, RHS + belong to different expressions. The TOP_INDEX argument should be the + top_index vector from ctx. */ +int +topological_cmp (const void *lhs, const void *rhs, void *top_index) +{ + const_basic_block l = *(const basic_block*) lhs; + const_basic_block r = *(const basic_block*) rhs; + const vec<int>* im = (const vec<int>*) top_index; + return (*im)[l->index] - (*im)[r->index]; +} + +/* Find the index of NEEDLE in BLOCKS; return -1 if not found. This has two + uses, sometimes for the index and sometimes for set member checks. Sets are + typically very small (number of conditions, >8 is uncommon) so linear search + should be very fast. */ +int +index_of (const basic_block needle, array_slice<basic_block> blocks) +{ + for (size_t i = 0; i < blocks.size (); i++) + if (blocks[i] == needle) + return int (i); + return -1; +} + +/* Special cases of the single_*_p and single_*_edge functions in basic-block.h + that don't consider exception handling or other complex edges. This helps + create a view of the CFG with only normal edges - if a basic block has both + an outgoing fallthrough and exceptional edge, it should be considered a + single-successor. */ +bool +single_p (const vec<edge, va_gc> *edges) +{ + int n = EDGE_COUNT (edges); + if (n == 0) + return false; + + for (edge e : edges) + if (e->flags & EDGE_COMPLEX) + n -= 1; + + return n == 1; +} + +/* Get the single, non-complex edge. Behavior is undefined edges have more + than 1 non-complex edges. */ +edge +single_edge (const vec<edge, va_gc> *edges) +{ + gcc_checking_assert (single_p (edges)); + for (edge e : edges) + { + if (e->flags & EDGE_COMPLEX) + continue; + return e; + } + return NULL; +} + +/* Sometimes, for example with function calls, goto labels, and C++ + destructors, the CFG gets extra nodes that are essentially single-entry + single-exit in the middle of boolean expressions. For example: + + x || can_throw (y) + + A + /| + / | + B | + | | + C | + / \ | + / \| + F T + + Without the extra node inserted by the function + exception it becomes a + proper 2-term graph, not 2 single-term graphs. + + A + /| + C | + / \| + F T + + This function finds the source edge of these paths. This is often the + identity function. */ +edge +contract_edge_up (edge e) +{ + while (true) + { + basic_block src = e->src; + if (!single_p (src->preds)) + return e; + if (!single_p (src->succs)) + return e; + e = single_edge (src->preds); + } +} + +/* A simple struct for storing/returning outcome block pairs. Either both + blocks are set or both are NULL. */ +struct outcomes +{ + basic_block t = NULL; + basic_block f = NULL; + + operator bool () const noexcept (true) + { + return t && f; + } +}; + +/* Get the true/false successors of a basic block. If b is not a conditional + block both edges are NULL. */ +outcomes +conditional_succs (const basic_block b) +{ + outcomes c; + for (edge e : b->succs) + { + if (e->flags & EDGE_TRUE_VALUE) + c.t = e->dest; + if (e->flags & EDGE_FALSE_VALUE) + c.f = e->dest; + } + + gcc_assert ((c.t && c.f) || (!c.t && !c.f)); + return c; +} + +/* Get the index or offset of a conditional flag, 0 for true and 1 for false. + These indices carry no semantics but must be consistent as they are used to + index into data structures in code generation and gcov. */ +unsigned +condition_index (unsigned flag) +{ + return (flag & EDGE_CONDITION) == EDGE_TRUE_VALUE ? 0 : 1; +} + +/* Returns the condition identifier for the basic block if set, otherwise 0. + This is only meaningful in GIMPLE and is used for condition coverage. + + There may be conditions created that did not get an uid, such as those + implicitly created by destructors. We could include them in the condition + coverage for completeness (i.e. condition coverage implies (implicit) branch + coverage), but they have no natural buckets and should all be single-term. + For now these are ignored and given uid = 0, and branch coverage is left to + -fprofile-arcs. + + Under optimization, COND_EXPRs may be folded, replaced with switches, + min-max, etc., which leaves ghost identifiers in basic blocks that do not + end with a conditional jump. They are not really meaningful for condition + coverage anymore, but since coverage is unreliable under optimization anyway + this is not a big problem. */ +unsigned +condition_uid (struct function *fn, basic_block b) +{ + gimple *stmt = gsi_stmt (gsi_last_bb (b)); + if (!safe_is_a<gcond *> (stmt)) + return 0; + + unsigned *v = fn->cond_uids->get (as_a <gcond*> (stmt)); + return v ? *v : 0; +} + +/* Compute the masking table. + + Masking and short circuiting are deeply connected - masking occurs when + control flow reaches a state that is also reachable with short circuiting. + In fact, masking corresponds to short circuiting for the reversed + expression. This means we can find the limits, the last term in preceeding + subexpressions, by following the edges that short circuit to the same + outcome. The algorithm treats the CFG as a reduced order binary decision + diagram (see Randall E. Bryant's Graph Based Algorithms for Boolean + Function Manipulation (1987)). + + In the simplest case a || b: + + a + |\ + | b + |/ \ + T F + + T has has multiple incoming edges and is the outcome of a short circuit, + with top = a, bot = b. The top node (a) is masked when the edge (b, T) is + taken. + + The names "top" and "bot" refer to a pair of nodes with a shared + successor. The top is always the node corresponding to the left-most + operand of the two, and it holds that top < bot in a topological ordering. + + Now consider (a && b) || (c && d) and its masking table: + + a + |\ + b \ + |\| + | c + | |\ + | d \ + |/ \| + T F + + a[0] = {} + a[1] = {} + b[0] = {a} + b[1] = {} + c[0] = {} + c[1] = {} + d[0] = {c} + d[1] = {a,b} + + Note that 0 and 1 are indices and not boolean values - a[0] is the index in + the masking vector when a takes the true edge. + + b[0] and d[0] are identical to the a || b example, and d[1] is the bot in + the triangle [d, b] -> T. b is the top node in the [d, b] relationship and + last term in (a && b). To find the other terms masked we use the fact that + all paths in an expression go through either of the outcomes, found by + collecting all non-complex edges that go out of the expression (the + neighborhood). In some cases the outgoing edge go through intermediate (or + bypass) nodes, and we collect these paths too (see contract_edge_up). + + We find the terms by marking the outcomes (in this case c, T) and walk the + predecessors starting at top (in this case b) and masking nodes when both + successors are marked. + + The masking table is represented as two bitfields per term in the expression + with the index corresponding to the term in the Boolean expression. + a || b && c becomes the term vector [a b c] and the masking table [a[0] + a[1] b[0] ...]. The kth bit of a masking vector is set if the the kth term + is masked by taking the edge. + + The out masks are in uint64_t (the practical maximum for gcov_type_node for + any target) as it has to be big enough to store the target size gcov types + independent of the host. */ +void +masking_vectors (conds_ctx& ctx, array_slice<basic_block> blocks, + array_slice<sbitmap> maps, array_slice<uint64_t> masks) +{ + gcc_assert (blocks.is_valid ()); + gcc_assert (!blocks.empty ()); + gcc_assert (maps.is_valid ()); + gcc_assert (masks.is_valid ()); + gcc_assert (sizeof (masks[0]) * BITS_PER_UNIT >= CONDITIONS_MAX_TERMS); + + if (bitmap_count_bits (maps[0]) == 1) + return; + + sbitmap marks = ctx.G1; + const sbitmap core = maps[0]; + const sbitmap allg = maps[1]; + vec<basic_block>& queue = ctx.B1; + vec<basic_block>& body = ctx.B2; + const vec<int>& top_index = ctx.top_index; + + /* Set up for the iteration - include the outcome nodes in the traversal. + The algorithm compares pairs of nodes and is not really sensitive to + traversal order, but need to maintain topological order because the + index of masking nodes maps to the index in the accumulators. We must + also check the incoming-to-outcome pairs. These edges may in turn be + split (this happens with labels on top of then/else blocks) so we must + follow any single-in single-out path. The non-condition blocks do not + have to be in order as they are non-condition blocks and will not be + considered for the set-bit index. */ + body.truncate (0); + body.reserve (blocks.size () + 2); + for (const basic_block b : blocks) + if (bitmap_bit_p (core, b->index)) + body.quick_push (b); + + for (basic_block b : blocks) + { + if (!bitmap_bit_p (core, b->index)) + continue; + + for (edge e : b->succs) + { + if (e->flags & EDGE_COMPLEX) + continue; + if (bitmap_bit_p (allg, e->dest->index)) + continue; + body.safe_push (e->dest); + + /* There may be multiple nodes between the condition edge and the + actual outcome, and we need to know when these paths join to + determine if there is short circuit/masking. This is + effectively creating a virtual edge from the condition node to + the real outcome. */ + while (!(e->flags & EDGE_DFS_BACK) && single_p (e->dest->succs)) + { + e = single_edge (e->dest->succs); + body.safe_push (e->dest); + } + } + } + + /* Find the masking. The leftmost element cannot mask anything, so + start at 1. */ + for (size_t i = 1; i != body.length (); i++) + { + const basic_block b = body[i]; + for (edge e1 : b->preds) + for (edge e2 : b->preds) + { + if (e1 == e2) + continue; + if ((e1->flags | e2->flags) & EDGE_COMPLEX) + continue; + + edge etop = contract_edge_up (e1); + edge ebot = contract_edge_up (e2); + gcc_assert (etop != ebot); + + const basic_block top = etop->src; + const basic_block bot = ebot->src; + const unsigned cond = etop->flags & ebot->flags & EDGE_CONDITION; + if (!cond) + continue; + if (top_index[top->index] > top_index[bot->index]) + continue; + if (!bitmap_bit_p (core, top->index)) + continue; + if (!bitmap_bit_p (core, bot->index)) + continue; + + outcomes out = conditional_succs (top); + gcc_assert (out); + bitmap_clear (marks); + bitmap_set_bit (marks, out.t->index); + bitmap_set_bit (marks, out.f->index); + queue.truncate (0); + queue.safe_push (top); + + // The edge bot -> outcome triggers the masking + const int m = 2*index_of (bot, body) + condition_index (cond); + gcc_assert (m >= 0); + while (!queue.is_empty ()) + { + basic_block q = queue.pop (); + /* q may have been processed & completed by being added to the + queue multiple times, so check that there is still work to + do before continuing. */ + if (bitmap_bit_p (marks, q->index)) + continue; + + outcomes succs = conditional_succs (q); + if (!bitmap_bit_p (marks, succs.t->index)) + continue; + if (!bitmap_bit_p (marks, succs.f->index)) + continue; + + const int index = index_of (q, body); + gcc_assert (index != -1); + masks[m] |= uint64_t (1) << index; + bitmap_set_bit (marks, q->index); + + for (edge e : q->preds) + { + e = contract_edge_up (e); + if (e->flags & EDGE_DFS_BACK) + continue; + if (bitmap_bit_p (marks, e->src->index)) + continue; + if (!bitmap_bit_p (core, e->src->index)) + continue; + queue.safe_push (e->src); + } + } + } + } +} + +/* Emit LHS = RHS on edges. This is just a short hand that automates the + building of the assign and immediately puts it on the edge, which becomes + noisy. */ +tree +emit_assign (edge e, tree lhs, tree rhs) +{ + gassign *w = gimple_build_assign (lhs, rhs); + gsi_insert_on_edge (e, w); + return lhs; +} + +/* Emit lhs = RHS on edges. The lhs is created. */ +tree +emit_assign (edge e, tree rhs) +{ + return emit_assign (e, make_ssa_name (gcov_type_node), rhs); +} + +/* Emit LHS = OP1 <OP> OP2 on edges. */ +tree +emit_bitwise_op (edge e, tree op1, tree_code op, tree op2 = NULL_TREE) +{ + tree lhs = make_ssa_name (gcov_type_node); + gassign *w = gimple_build_assign (lhs, op, op1, op2); + gsi_insert_on_edge (e, w); + return lhs; +} + +/* Visitor for make_top_index. */ +void +make_top_index_visit (basic_block b, vec<basic_block>& L, vec<int>& marks) +{ + if (marks[b->index]) + return; + + /* Follow the false edge first, if it exists, so that true paths are given + the lower index in the ordering. Any iteration order + would yield a valid and useful topological ordering, but making sure the + true branch has the lower index first makes reporting work better for + expressions with ternaries. Walk the false branch first because the + array will be reversed to finalize the topological order. + + With the wrong ordering (a ? b : c) && d could become [a c b d], but the + (expected) order is really [a b c d]. */ + + const unsigned false_fwd = EDGE_DFS_BACK | EDGE_FALSE_VALUE; + for (edge e : b->succs) + if ((e->flags & false_fwd) == EDGE_FALSE_VALUE) + make_top_index_visit (e->dest, L, marks); + + for (edge e : b->succs) + if (!(e->flags & false_fwd)) + make_top_index_visit (e->dest, L, marks); + + marks[b->index] = 1; + L.quick_push (b); +} + +/* Find a topological sorting of the blocks in a function so that left operands + are before right operands including subexpressions. Sorting on block index + does not guarantee this property and the syntactical order of terms is very + important to the condition coverage. The sorting algorithm is from Cormen + et al (2001) but with back-edges ignored and thus there is no need for + temporary marks (for cycle detection). The L argument is a buffer/working + memory, and the output will be written to TOP_INDEX. + + For the expression (a || (b && c) || d) the blocks should be [a b c d]. */ +void +make_top_index (array_slice<basic_block> blocks, vec<basic_block>& L, + vec<int>& top_index) +{ + L.truncate (0); + L.reserve (blocks.size ()); + + /* Use of the output map as a temporary for tracking visited status. */ + top_index.truncate (0); + top_index.safe_grow_cleared (blocks.size ()); + for (const basic_block b : blocks) + make_top_index_visit (b, L, top_index); + + /* Insert canaries - if there are unreachable nodes (for example infinite + loops) then the unreachable nodes should never be needed for comparison, + and L.length () < max_index. An index mapping should also never be + recorded twice. */ + for (unsigned i = 0; i != top_index.length (); i++) + top_index[i] = -1; + + gcc_assert (blocks.size () == L.length ()); + L.reverse (); + const unsigned nblocks = L.length (); + for (unsigned i = 0; i != nblocks; i++) + { + gcc_assert (L[i]->index != -1); + top_index[L[i]->index] = int (i); + } +} + +/* Find all nodes including non-conditions in a Boolean expression. We need to + know the paths through the expression so that the masking and + instrumentation phases can limit searches and know what subgraphs must be + threaded through, but not counted, such as the (b || c) in + a && fn (b || c) && d. + + It is essentially the intersection of downwards paths from the expression + nodes EXPR to the post-dominator and upwards from the post-dominator. + Finding the dominator is slightly more involved than picking the first/last, + particularly under optimization, because both incoming and outgoing paths + may have multiple entries/exits. + + It is assumed GRAPH is an array_slice of the basic blocks of this function + sorted by the basic block index. */ +vec<basic_block>& +paths_between (conds_ctx &ctx, array_slice<basic_block> graph, + const vec<basic_block>& expr) +{ + if (expr.length () == 1) + { + ctx.blocks.truncate (0); + ctx.blocks.safe_push (expr[0]); + return ctx.blocks; + } + + basic_block dom; + sbitmap up = ctx.G1; + sbitmap down = ctx.G2; + sbitmap paths = ctx.G3; + vec<basic_block>& queue = ctx.B1; + + queue.truncate (0); + bitmap_clear (down); + dom = get_immediate_dominator (CDI_POST_DOMINATORS, expr[0]); + for (basic_block b : expr) + if (dom != b) + dom = nearest_common_dominator (CDI_POST_DOMINATORS, dom, b); + queue.safe_splice (expr); + while (!queue.is_empty ()) + { + basic_block b = queue.pop (); + if (!bitmap_set_bit (down, b->index)) + continue; + if (b == dom) + continue; + for (edge e : b->succs) + if (!(e->flags & (EDGE_COMPLEX | EDGE_DFS_BACK))) + queue.safe_push (e->dest); + } + + queue.truncate (0); + bitmap_clear (up); + dom = expr[0]; + for (basic_block b : expr) + if (dom != b) + dom = nearest_common_dominator (CDI_DOMINATORS, dom, b); + queue.safe_splice (expr); + while (!queue.is_empty ()) + { + basic_block b = queue.pop (); + if (!bitmap_set_bit (up, b->index)) + continue; + if (b == dom) + continue; + for (edge e : b->preds) + if (!(e->flags & (EDGE_COMPLEX | EDGE_DFS_BACK))) + queue.safe_push (e->src); + } + + bitmap_and (paths, up, down); + vec<basic_block>& blocks = ctx.blocks; + blocks.truncate (0); + blocks.reserve (graph.size ()); + sbitmap_iterator itr; + unsigned index; + EXECUTE_IF_SET_IN_BITMAP (paths, 0, index, itr) + blocks.quick_push (graph[index]); + return blocks; +} + +} + +/* Context object for the condition coverage. This stores conds_ctx (the + buffers reused when analyzing the cfg) and the output arrays. This is + designed to be heap allocated and aggressively preallocates large buffers to + avoid having to reallocate for most programs. */ +struct condcov +{ + explicit condcov (unsigned nblocks) noexcept (true) : ctx (nblocks), + m_maps (sbitmap_vector_alloc (2 * nblocks, nblocks)) + { + bitmap_vector_clear (m_maps, 2 * nblocks); + } + auto_vec<size_t, 128> m_index; + auto_vec<basic_block, 256> m_blocks; + auto_vec<uint64_t, 512> m_masks; + conds_ctx ctx; + sbitmap *m_maps; +}; + +/* Get the length, that is the number of Boolean expression found. cov_length + is the one-past index for cov_{blocks,masks,maps}. */ +size_t +cov_length (const struct condcov* cov) +{ + if (cov->m_index.is_empty ()) + return 0; + return cov->m_index.length () - 1; +} + +/* The subgraph, exluding intermediates, for the nth Boolean expression. */ +array_slice<basic_block> +cov_blocks (struct condcov* cov, size_t n) +{ + if (n >= cov->m_index.length ()) + return array_slice<basic_block>::invalid (); + + basic_block *begin = cov->m_blocks.begin () + cov->m_index[n]; + basic_block *end = cov->m_blocks.begin () + cov->m_index[n + 1]; + return array_slice<basic_block> (begin, end - begin); +} + +/* The masks for the nth Boolean expression. */ +array_slice<uint64_t> +cov_masks (struct condcov* cov, size_t n) +{ + if (n >= cov->m_index.length ()) + return array_slice<uint64_t>::invalid (); + + uint64_t *begin = cov->m_masks.begin () + 2*cov->m_index[n]; + uint64_t *end = cov->m_masks.begin () + 2*cov->m_index[n + 1]; + return array_slice<uint64_t> (begin, end - begin); +} + +/* The maps for the nth Boolean expression. */ +array_slice<sbitmap> +cov_maps (struct condcov* cov, size_t n) +{ + if (n >= cov->m_index.length ()) + return array_slice<sbitmap>::invalid (); + + sbitmap *begin = cov->m_maps + 2*n; + sbitmap *end = begin + 2; + return array_slice<sbitmap> (begin, end - begin); +} + +/* Deleter for condcov. */ +void +cov_free (struct condcov* cov) +{ + sbitmap_vector_free (cov->m_maps); + delete cov; +} + +/* Condition coverage (MC/DC) + + Whalen, Heimdahl, De Silva in "Efficient Test Coverage Measurement for + MC/DC" describe an algorithm for modified condition/decision coverage based + on AST analysis. This algorithm does analyzes the control flow graph + (interpreted as a binary decision diagram) to determine the masking vectors. + The individual phases are described in more detail closer to the + implementation. + + The coverage only considers the positions, not the symbols, in a + conditional, e.g. !A || (!B && A) is a 3-term conditional even though A + appears twice. Subexpressions have no effect on term ordering: + (a && (b || (c && d)) || e) comes out as [a b c d e]. Functions whose + arguments are Boolean expressions are treated as separate expressions, that + is, a && fn (b || c) && d is treated as [a _fn d] and [b c], not [a b c d]. + + The output for gcov is a vector of pairs of unsigned integers, interpreted + as bit-sets, where the bit index corresponds to the index of the condition + in the expression. + + The returned condcov should be released by the caller with cov_free. */ +struct condcov* +find_conditions (struct function *fn) +{ + mark_dfs_back_edges (fn); + const bool have_dom = dom_info_available_p (fn, CDI_DOMINATORS); + const bool have_post_dom = dom_info_available_p (fn, CDI_POST_DOMINATORS); + if (!have_dom) + calculate_dominance_info (CDI_DOMINATORS); + if (!have_post_dom) + calculate_dominance_info (CDI_POST_DOMINATORS); + + const unsigned nblocks = n_basic_blocks_for_fn (fn); + basic_block *fnblocksp = basic_block_info_for_fn (fn)->address (); + condcov *cov = new condcov (nblocks); + conds_ctx& ctx = cov->ctx; + array_slice<basic_block> fnblocks (fnblocksp, nblocks); + make_top_index (fnblocks, ctx.B1, ctx.top_index); + + /* Bin the Boolean expressions so that exprs[id] -> [x1, x2, ...]. */ + hash_map<int_hash<unsigned, 0>, vec<basic_block>> exprs; + for (basic_block b : fnblocks) + { + const unsigned uid = condition_uid (fn, b); + if (uid == 0) + continue; + exprs.get_or_insert (uid).safe_push (b); + } + + /* Visit all reachable nodes and collect conditions. Topological order is + important so the first node of a boolean expression is visited first + (it will mark subsequent terms). */ + cov->m_index.safe_push (0); + for (auto expr : exprs) + { + vec<basic_block>& conds = expr.second; + if (conds.length () > CONDITIONS_MAX_TERMS) + { + location_t loc = gimple_location (gsi_stmt (gsi_last_bb (conds[0]))); + warning_at (loc, OPT_Wcoverage_too_many_conditions, + "Too many conditions (found %u); giving up coverage", + conds.length ()); + continue; + } + conds.sort (topological_cmp, &ctx.top_index); + vec<basic_block>& subgraph = paths_between (ctx, fnblocks, conds); + subgraph.sort (topological_cmp, &ctx.top_index); + const unsigned index = cov->m_index.length () - 1; + sbitmap condm = cov->m_maps[0 + 2*index]; + sbitmap subgm = cov->m_maps[1 + 2*index]; + for (basic_block b : conds) + bitmap_set_bit (condm, b->index); + for (basic_block b : subgraph) + bitmap_set_bit (subgm, b->index); + cov->m_blocks.safe_splice (subgraph); + cov->m_index.safe_push (cov->m_blocks.length ()); + } + + if (!have_dom) + free_dominance_info (fn, CDI_DOMINATORS); + if (!have_post_dom) + free_dominance_info (fn, CDI_POST_DOMINATORS); + + cov->m_masks.safe_grow_cleared (2 * cov->m_index.last ()); + const size_t length = cov_length (cov); + for (size_t i = 0; i != length; i++) + masking_vectors (ctx, cov_blocks (cov, i), cov_maps (cov, i), + cov_masks (cov, i)); + + return cov; +} + +namespace +{ + +/* Stores the incoming edge and previous counters (in SSA form) on that edge + for the node e->deston that edge for the node e->dest. The counters record + the seen-true (0), seen-false (1), and current-mask (2). They are stored in + an array rather than proper members for access-by-index as the code paths + tend to be identical for the different counters. */ +struct counters +{ + edge e; + tree counter[3]; + tree& operator [] (size_t i) { return counter[i]; } +}; + +/* Find the counters for the incoming edge e, or NULL if the edge has not been + recorded (could be for complex incoming edges). */ +counters* +find_counters (vec<counters>& candidates, edge e) +{ + for (counters& candidate : candidates) + if (candidate.e == e) + return &candidate; + return NULL; +} + +/* Resolve the SSA for a specific counter KIND. If it is not modified by any + incoming edges, simply forward it, otherwise create a phi node of all the + candidate counters and return it. */ +tree +resolve_counter (vec<counters>& cands, size_t kind) +{ + gcc_assert (!cands.is_empty ()); + gcc_assert (kind < 3); + + counters& fst = cands[0]; + + if (!fst.e || fst.e->dest->preds->length () == 1) + { + gcc_assert (cands.length () == 1); + return fst[kind]; + } + + tree zero0 = build_int_cst (gcov_type_node, 0); + tree ssa = make_ssa_name (gcov_type_node); + gphi *phi = create_phi_node (ssa, fst.e->dest); + for (edge e : fst.e->dest->preds) + { + counters *prev = find_counters (cands, e); + if (prev) + add_phi_arg (phi, (*prev)[kind], e, UNKNOWN_LOCATION); + else + { + tree zero = make_ssa_name (gcov_type_node); + gimple_stmt_iterator gsi = gsi_after_labels (e->src); + gassign *set = gimple_build_assign (zero, zero0); + gsi_insert_before (&gsi, set, GSI_NEW_STMT); + add_phi_arg (phi, zero, e, UNKNOWN_LOCATION); + } + } + return ssa; +} + +/* Resolve all the counters for a node. Note that the edge is undefined, as + the counters are intended to form the base to push to the successors, and + because the is only meaningful for nodes with a single predecessor. */ +counters +resolve_counters (vec<counters>& cands) +{ + counters next; + next[0] = resolve_counter (cands, 0); + next[1] = resolve_counter (cands, 1); + next[2] = resolve_counter (cands, 2); + return next; +} + +} + +/* Add instrumentation to a decision subgraph. EXPR should be the + (topologically sorted) block of nodes returned by cov_blocks, MAPS the + bitmaps returned by cov_maps, and MASKS the block of bitsets returned by + cov_masks. CONDNO should be the index of this condition in the function, + i.e. the same argument given to cov_{masks,graphs}. EXPR may contain nodes + in-between the conditions, e.g. when an operand contains a function call, + or there is a setjmp and the cfg is filled with complex edges. + + Every node is annotated with three counters; the true, false, and mask + value. First, walk the graph and determine what if there are multiple + possible values for either accumulator depending on the path taken, in which + case a phi node is created and registered as the accumulator. Then, those + values are pushed as accumulators to the immediate successors. For some + very particular programs there may be multiple paths into the expression + (e.g. when prior terms are determined by a surrounding conditional) in which + case the default zero-counter is pushed, otherwise all predecessors will + have been considered before the successor because of topologically ordered + traversal. Finally, expr is traversed again to look for edges to the + outcomes, that is, edges with a destination outside of expr, and the local + accumulators are flushed to the global gcov counters on these edges. In + some cases there are edge splits that cause 3+ edges to the two outcome + nodes. + + If a complex edge is taken (e.g. on a longjmp) the accumulators are + attempted poisoned so that there would be no change to the global counters, + but this has proven unreliable in the presence of undefined behavior, see + the setjmp003 test. + + It is important that the flushes happen on the basic condition outgoing + edge, otherwise flushes could be lost to exception handling or other + abnormal control flow. */ +size_t +instrument_decisions (array_slice<basic_block> expr, size_t condno, + array_slice<sbitmap> maps, array_slice<uint64_t> masks) +{ + tree zero = build_int_cst (gcov_type_node, 0); + tree poison = build_int_cst (gcov_type_node, ~0ULL); + const sbitmap core = maps[0]; + const sbitmap allg = maps[1]; + + hash_map<basic_block, vec<counters>> table; + counters zerocounter; + zerocounter.e = NULL; + zerocounter[0] = zero; + zerocounter[1] = zero; + zerocounter[2] = zero; + + unsigned xi = 0; + tree rhs = build_int_cst (gcov_type_node, 1ULL << xi); + for (basic_block current : expr) + { + vec<counters>& candidates = table.get_or_insert (current); + if (candidates.is_empty ()) + candidates.safe_push (zerocounter); + counters prev = resolve_counters (candidates); + + int increment = 0; + for (edge e : current->succs) + { + counters next = prev; + next.e = e; + + if (bitmap_bit_p (core, e->src->index) && (e->flags & EDGE_CONDITION)) + { + const int k = condition_index (e->flags); + next[k] = emit_bitwise_op (e, prev[k], BIT_IOR_EXPR, rhs); + if (masks[2*xi + k]) + { + tree m = build_int_cst (gcov_type_node, masks[2*xi + k]); + next[2] = emit_bitwise_op (e, prev[2], BIT_IOR_EXPR, m); + } + increment = 1; + } + else if (e->flags & EDGE_COMPLEX) + { + /* A complex edge has been taken - wipe the accumulators and + poison the mask so that this path does not contribute to + coverage. */ + next[0] = poison; + next[1] = poison; + next[2] = poison; + } + table.get_or_insert (e->dest).safe_push (next); + } + xi += increment; + if (increment) + rhs = build_int_cst (gcov_type_node, 1ULL << xi); + } + + gcc_assert (xi == bitmap_count_bits (core)); + + const tree relaxed = build_int_cst (integer_type_node, MEMMODEL_RELAXED); + const bool atomic = flag_profile_update == PROFILE_UPDATE_ATOMIC; + const tree atomic_ior = builtin_decl_explicit + (TYPE_PRECISION (gcov_type_node) > 32 + ? BUILT_IN_ATOMIC_FETCH_OR_8 + : BUILT_IN_ATOMIC_FETCH_OR_4); + + /* Flush to the gcov accumulators. */ + for (const basic_block b : expr) + { + if (!bitmap_bit_p (core, b->index)) + continue; + + for (edge e : b->succs) + { + /* Flush the accumulators on leaving the Boolean function. The + destination may be inside the function only when it returns to + the loop header, such as do { ... } while (x); */ + if (bitmap_bit_p (allg, e->dest->index)) { + if (!(e->flags & EDGE_DFS_BACK)) + continue; + if (e->dest != expr[0]) + continue; + } + + vec<counters> *cands = table.get (e->dest); + gcc_assert (cands); + counters *prevp = find_counters (*cands, e); + gcc_assert (prevp); + counters prev = *prevp; + + /* _true &= ~mask, _false &= ~mask */ + counters next; + next[2] = emit_bitwise_op (e, prev[2], BIT_NOT_EXPR); + next[0] = emit_bitwise_op (e, prev[0], BIT_AND_EXPR, next[2]); + next[1] = emit_bitwise_op (e, prev[1], BIT_AND_EXPR, next[2]); + + /* _global_true |= _true, _global_false |= _false */ + for (size_t k = 0; k != 2; ++k) + { + tree ref = tree_coverage_counter_ref (GCOV_COUNTER_CONDS, + 2*condno + k); + if (atomic) + { + ref = unshare_expr (ref); + gcall *flush = gimple_build_call (atomic_ior, 3, + build_addr (ref), + next[k], relaxed); + gsi_insert_on_edge (e, flush); + } + else + { + tree get = emit_assign (e, ref); + tree put = emit_bitwise_op (e, next[k], BIT_IOR_EXPR, get); + emit_assign (e, unshare_expr (ref), put); + } + } + } + } + + return xi; +} + +#undef CONDITIONS_MAX_TERMS +#undef EDGE_CONDITION + /* Do initialization work for the edge profiler. */ /* Add code: @@ -843,7 +1893,7 @@ tree_profiling (void) thunk = true; /* When generate profile, expand thunk to gimple so it can be instrumented same way as other functions. */ - if (profile_arc_flag) + if (profile_arc_flag || condition_coverage_flag) expand_thunk (node, false, true); /* Read cgraph profile but keep function as thunk at profile-use time. */ @@ -888,7 +1938,7 @@ tree_profiling (void) release_profile_file_filtering (); /* Drop pure/const flags from instrumented functions. */ - if (profile_arc_flag || flag_test_coverage) + if (profile_arc_flag || condition_coverage_flag || flag_test_coverage) FOR_EACH_DEFINED_FUNCTION (node) { if (!gimple_has_body_p (node->decl) @@ -920,7 +1970,7 @@ tree_profiling (void) push_cfun (DECL_STRUCT_FUNCTION (node->decl)); - if (profile_arc_flag || flag_test_coverage) + if (profile_arc_flag || condition_coverage_flag || flag_test_coverage) FOR_EACH_BB_FN (bb, cfun) { gimple_stmt_iterator gsi; @@ -1005,7 +2055,7 @@ pass_ipa_tree_profile::gate (function *) disabled. */ return (!in_lto_p && !flag_auto_profile && (flag_branch_probabilities || flag_test_coverage - || profile_arc_flag)); + || profile_arc_flag || condition_coverage_flag)); } } // anon namespace diff --git a/gcc/tree.h b/gcc/tree.h index b67a37d65226..ee2aae332a41 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1358,6 +1358,10 @@ class auto_suppress_location_wrappers ~auto_suppress_location_wrappers () { --suppress_location_wrappers; } }; +/* COND_EXPR identificer/discriminator accessors. */ +#define SET_EXPR_UID(t, v) EXPR_CHECK ((t))->exp.condition_uid = (v) +#define EXPR_COND_UID(t) EXPR_CHECK ((t))->exp.condition_uid + /* In a TARGET_EXPR node. */ #define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0) #define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1) diff --git a/libgcc/libgcov-merge.c b/libgcc/libgcov-merge.c index 774f2886ff6a..5eb174f77baa 100644 --- a/libgcc/libgcov-merge.c +++ b/libgcc/libgcov-merge.c @@ -33,6 +33,11 @@ void __gcov_merge_add (gcov_type *counters __attribute__ ((unused)), unsigned n_counters __attribute__ ((unused))) {} #endif +#ifdef L_gcov_merge_ior +void __gcov_merge_ior (gcov_type *counters __attribute__ ((unused)), + unsigned n_counters __attribute__ ((unused))) {} +#endif + #ifdef L_gcov_merge_topn void __gcov_merge_topn (gcov_type *counters __attribute__ ((unused)), unsigned n_counters __attribute__ ((unused))) {} From dc8a25189dd6e10a50751793f08d6c5857bd6131 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Kvalsvik?= <j@lambda.is> Date: Wed, 6 Dec 2023 09:08:46 +0100 Subject: [PATCH 377/551] Add gcov MC/DC tests for GDC This is a mostly straight port from the gcov-19.c tests from the C test suite. The only notable differences from C to D are that D flips the true/false outcomes for loop headers, and the D front end ties loop and ternary conditions to slightly different locus. The test for >64 conditions warning is disabled as it either needs support from the testing framework or a something similar to #pragma GCC diagnostic push to not cause a test failure from detecting a warning. gcc/testsuite/ChangeLog: * gdc.dg/gcov.exp: New test. * gdc.dg/gcov1.d: New test. --- gcc/testsuite/gdc.dg/gcov.exp | 44 + gcc/testsuite/gdc.dg/gcov1.d | 1712 +++++++++++++++++++++++++++++++++ 2 files changed, 1756 insertions(+) create mode 100644 gcc/testsuite/gdc.dg/gcov.exp create mode 100644 gcc/testsuite/gdc.dg/gcov1.d diff --git a/gcc/testsuite/gdc.dg/gcov.exp b/gcc/testsuite/gdc.dg/gcov.exp new file mode 100644 index 000000000000..4218771b2080 --- /dev/null +++ b/gcc/testsuite/gdc.dg/gcov.exp @@ -0,0 +1,44 @@ +# Copyright (C) 1997-2023 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# Gcov test driver. + +# Load support procs. +load_lib gdc-dg.exp +load_lib gcov.exp + +global GDC_UNDER_TEST + +# For now find gcov in the same directory as $GDC_UNDER_TEST. +if { ![is_remote host] && [string match "*/*" [lindex $GDC_UNDER_TEST 0]] } { + set GCOV [file dirname [lindex $GDC_UNDER_TEST 0]]/[gcc-transform-out-of-tree gcov] +} else { + set GCOV [gcc-transform-out-of-tree gcov] +} + +# Initialize harness. +dg-init + +# Delete old .gcda files. +set files [glob -nocomplain gcov*.gcda] +if { $files != "" } { + eval "remote_file build delete $files" +} + +# Main loop. +gdc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/gcov*.d]] "" "" + +dg-finish diff --git a/gcc/testsuite/gdc.dg/gcov1.d b/gcc/testsuite/gdc.dg/gcov1.d new file mode 100644 index 000000000000..10ffa4a0e308 --- /dev/null +++ b/gcc/testsuite/gdc.dg/gcov1.d @@ -0,0 +1,1712 @@ +/* { dg-options "-fcondition-coverage -ftest-coverage" } */ +/* { dg-do run { target native } } */ + +/* Some side effect to stop branches from being pruned. */ +int x = 0; + +int id (int x) { return x; } +int inv (int x) { return !x; } + +/* || works. */ +void +mcdc001a (int a, int b) +{ + if (a || b) /* conditions(1/4) true(0) false(0 1) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc001b (int a, int b) +{ + if (a || b) /* conditions(3/4) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc001c (int a, int b) +{ + if (a || b) /* conditions(4/4) */ + x = 1; + else + x = 2; +} + +void +mcdc001d (int a, int b, int c) +{ + if (a || b || c) /* conditions(2/6) false(0 1 2) true(2) */ + /* conditions(end) */ + x = 1; +} + +/* && works */ +void +mcdc002a (int a, int b) +{ + if (a && b) /* conditions(1/4) true(0 1) false(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc002b (int a, int b) +{ + if (a && b) /* conditions(3/4) false(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc002c (int a, int b) +{ + if (a && b) /* conditions(4/4) */ + x = 1; + else + x = 2; +} + +void +mcdc002d (int a, int b, int c) +{ + if (a && b && c) /* conditions(4/6) false(0 2) */ + /* conditions(end) */ + x = 1; +} + +/* Negation works. */ +void +mcdc003a (int a, int b) +{ + if (!a || !b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +/* Single conditionals with and without else. */ +void +mcdc004a (int a) +{ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc004b (int a) +{ + if (a) /* conditions(2/2) */ + x = 1; + else + x = 2; +} + +void +mcdc004c (int a) +{ + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + x = 1; +} + +void +mcdc004d (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + { + if (b || c) /* conditions(1/4) true(1) false(0 1) */ + x = a + b + c; + } +} + +void +mcdc004e (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + { + if (b || c) /* conditions(1/4) true(1) false(0 1) */ + /* conditions(end) */ + x = a + b + c; + } + else + { + x = c; + } +} + +void +mcdc004f (int a, int b, int c) +{ + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + x = 1; + } + else if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + x = 2; + if (c) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + x = 3; + } +} + +/* Mixing && and || works. */ +void +mcdc005a (int a, int b, int c) +{ + if ((a && b) || c) /* conditions(1/6) true(0 1) false(0 1 2) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc005b (int a, int b, int c, int d) +{ + /* This is where masking MC/DC gets unintuitive: + + 1 1 0 0 => covers 1 (d = 0) as && 0 masks everything to the left + 1 0 0 0 => covers 2 (b = 0, c = 0) as (a && 0) masks a and d is never + evaluated. */ + if ((a && (b || c)) && d) /* conditions(3/8) true(0 1 2 3) false(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc005c (int a, int b, int c, int d) +{ + if (a || (b && c) || d) /* conditions(2/8) true(0 3) false(0 1 2 3) */ + /* conditions(end) */ + x = a + b + c + d; +} + +void +mcdc005d (int a, int b, int c, int d) +{ + /* This test is quite significant - it has a single input + (1, 0, 0, 0) and tests specifically for when a multi-term left operand + is masked. d = 0 should mask a || b and for the input there are no other + sources for masking a (since b = 0). */ + if ((a || b) && (c || d)) /* conditions(2/8) true(0 1 2 3) false(0 1) */ + /* conditions(end) */ + x = a + b; + else + x = c + d; +} + +/* Mixing in constants kills the decision removes the term outright. */ +void +mcdc005e (int a, int b) +{ + x += 0 && a; + x += a && 1; + x += 0 && a && b; + x += a && 1 && b; /* conditions(4/4) */ + x += a && b && 0; + x += 0 && 1; + x += 1 && a; + x += a && 0; + x += 1 || a; + x += a || 0; + x += 1 || a || b; + x += a || 0 || b; /* conditions(4/4) */ + x += a || b || 1; + x += 1 || 0; + x += 0 || a; + x += a || 1; +} + +/* Nested conditionals. */ +void +mcdc006a (int a, int b, int c, int d, int e) +{ + if (a) /* conditions(2/2) */ + { + if (b && c) /* conditions(3/4) false(1) */ + /* conditions(end) */ + x = 1; + else + x = 2; + } + else + { + if (c || d) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + x = 3; + else + x = 4; + } +} + +void +mcdc006b (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + if (b) /* conditions(2/2) */ + if (c) /* conditions(2/2) */ + x = a + b + c; +} + +void +mcdc006c (int a, int b, int c) +{ + if (a) /* conditions(2/2) */ + { + if (b) /*conditions(2/2) */ + { + if (c) /* conditions(2/2) */ + { + x = a + b + c; + } + } + else + { + x = b; + } + } + else + { + x = a; + } +} + +void +mcdc006d (int a, int b, int c) +{ + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = a + b; + if (c) /* conditions(2/2) */ + /* conditions(end) */ + x = a + b; + } +} + +void +mcdc006e (int a, int b, int c, int d) +{ + if ((a || b || c) && id (d)) /* conditions(4/8) true(0 1 2 3) false() */ + /* conditions(end) */ + x = 1; +} + +/* else/if. */ +void +mcdc007a (int a, int b, int c, int d) +{ + if (a) /* conditions(2/2) */ + { + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; + } + else if (c) /* conditions(2/2) */ + { + if (d) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 3; + else + x = 4; + } +} + +void +mcdc007b (int a, int b, int c) +{ + goto begin; +then: + x = 1; + return; +begin: + if (a) /* conditions(2/2) */ + goto then; + else if (b) /* conditions(2/2) */ + goto then; + else if (c) /* conditions(1/2) true(0) */ + goto then; +} + +void +mcdc007c (int a, int b, int c) +{ + goto begin; +then1: + x = 1; + return; +then2: + x = 1; + return; +then3: + x = 1; + return; +begin: + if (a) /* conditions(2/2) */ + goto then1; + else if (b) /* conditions(2/2) */ + goto then2; + else if (c) /* conditions(1/2) true(0) */ + /* conditions(end) */ + goto then3; +} + +void +noop () {} + +int +mcdc007d (int a, int b, int c, int d, int e) +{ + noop (); + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b || c) /* conditions(0/4) true(0 1) false(0 1) */ + /* conditions(end) */ + x = 2; + if (d) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 1; + } + if (e) /* conditions(1/2) false(0) */ + /* conditions(end) */ + return 0; + + return 2; +} + +/* while loop. */ +void +mcdc008a (int a) +{ + while (a < 10) /* conditions(2/2) */ + x = a++; +} + +void +mcdc008b (int a) +{ + /* gdc inverts this check. */ + while (a > 10) /* conditions(1/2) false(0) */ + /* conditions(end) */ + x = a--; +} + +void +mcdc008c (int a) +{ + // should work, even with no body + while (a) /* conditions(2/2) */ + break; +} + +void +mcdc008d (int a, int b, int c, int d) +{ + /* Multi-term loop conditional. */ + while ((a && (b || c)) && d) /* conditions(8/8) */ + a = b = c = d = 0; +} + +void +mcdc009a (int a, int b) +{ + while (a > 0 && b > 0) /* conditions(3/4) true(1) */ + /* conditions(end) */ + x = a--; +} + +void +mcdc009b (int a, int b) +{ + while (a-- > 0 && b) {} /* conditions(2/4) false(0 1) */ + /* conditions(end) */ +} + +/* for loop. */ +void +mcdc010a (int a, int b) +{ + for (int i = 0; i < b; i++) /* conditions(2/2) */ + { + if (a < b) /* conditions(2/2) */ + x = 1; + else + x = a += 2; + } +} + +void +mcdc010b () +{ + for (int a = 0; a <= 1; ++a) /* conditions(2/2) */ + { + x = a; + } +} + +int +mcdc010c (int a, int b, int c) +{ + for (;a || b || c;) /* conditions(4/6) false(0 2) */ + /* conditions(end) */ + return 1; + return 0; +} + + +int always (int x) { return 1; } + +/* No-condition infinite loops. */ +void +mcdc010d (int a) +{ + for (;;) + { + if (always(a)) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + x = a; + break; + } + x += a + 1; + } +} + +/* conditionals without control flow constructs work */ +void +mcdc011a (int a, int b, int c) +{ + x = (a && b) || c; /* conditions(5/6) false(1) */ + /* conditions(end) */ +} + +/* Sequential expressions are handled independently. */ +void +mcdc012a (int a, int b, int c) +{ + if (a || b) /* conditions(3/4) true(0) */ + /* conditions(end) */ + x = 1; + else + x = 2; + + if (c) /* conditions(2/2) */ + x = 1; +} + +/* Cannot ever satisfy (masking) MC/DC, even with all input combinations, + because not all variables independently affect the decision. */ +void +mcdc013a (int a, int b, int c) +{ + /* Specification: (a && b) || c + The implementation does not match the specification. This has branch + coverage, but not MC/DC. */ + if ((a && !c) || c) /* conditions(5/6) false(1) */ + /* conditions(end) */ + x = 1; + else + x = 2; +} + +void +mcdc014a () +{ + int[64] conds; + /* conditions(64/128) true(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63) */ + x = conds[ 0] || conds[ 1] || conds[ 2] || conds[ 3] || conds[ 4] || + conds[ 5] || conds[ 6] || conds[ 7] || conds[ 8] || conds[ 9] || + conds[10] || conds[11] || conds[12] || conds[13] || conds[14] || + conds[15] || conds[16] || conds[17] || conds[18] || conds[19] || + conds[20] || conds[21] || conds[22] || conds[23] || conds[24] || + conds[25] || conds[26] || conds[27] || conds[28] || conds[29] || + conds[30] || conds[31] || conds[32] || conds[33] || conds[34] || + conds[35] || conds[36] || conds[37] || conds[38] || conds[39] || + conds[40] || conds[41] || conds[42] || conds[43] || conds[44] || + conds[45] || conds[46] || conds[47] || conds[48] || conds[49] || + conds[50] || conds[51] || conds[52] || conds[53] || conds[54] || + conds[55] || conds[56] || conds[57] || conds[58] || conds[59] || + conds[60] || conds[61] || conds[62] || conds[63] + ; /* conditions(end) */ +} + +/* Early returns. */ +void +mcdc015a (int a, int b) +{ + if (a) /* conditions(2/2) */ + return; + + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x = 1; +} + +void +mcdc015b (int a, int b) +{ + for (int i = 5; i > a; i--) /* conditions(2/2) */ + { + if (i == b) /* conditions(2/2) */ + return; + x = i; + } +} + +void +mcdc015c (int a, int b) +{ + for (int i = 5; i > a; i--) /* conditions(2/2) */ + { + if (i == b) /* conditions(2/2) */ + { + x = 0; + return; + } + else + { + x = 1; + return; + } + + x = i; + } +} + +/* Early returns, gotos. */ +void +mcdc015d (int a, int b, int c) +{ + if (a) return; /* conditions(1/2) false(0) */ + /* conditions(end) */ + if (id (b)) return; /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + if (id (c)) return; /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ +} + + +/* Check nested loops. */ +void +mcdc016a (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + for (int k = 0; k < b; k++) /* conditions(2/2) */ + x = i + k; +} + +void +mcdc016b (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + { + if (a > 5) /* conditions(2/2) */ + break; + + for (int k = 0; k < b; k++) /* conditions(2/2) */ + x = i + k; + } +} + +void +mcdc016c (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + { + if (a > 5) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return; + + for (int k = 0; k < b; k++) /* conditions(2/2) */ + x = i + k; + } +} + +void +mcdc016d (int a, int b) +{ + for (int i = 0; i < a; i++) /* conditions(2/2) */ + { + for (int k = 0; k < 5; k++) /* conditions(2/2) */ + { + if (b > 5) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return; + x = i + k; + } + + } +} + +/* do-while loops. */ +void +mcdc017a (int a) +{ + do + { + /* conditions(2/2) */ + a--; + } while (a > 0); +} + +void +mcdc017b (int a, int b) +{ + do /* conditions(2/2) */ + { + /* This call is important; it can add more nodes to the body in the + CFG, which changes how close exits and breaks are to the loop + conditional. */ + noop (); + a--; + if (b) /* conditions(2/2) */ + break; + } while (a > 0); +} + +void +mcdc017c (int a, int b) +{ + int left = 0; + int right = 0; + int n = a + b; + do + { + if (a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + left = a > left ? b : left; /* conditions(2/2) */ + } + if (b) /* conditions(1/2) false(0) */ + /* conditions(end) */ + { + right = b > right ? a : right; /* conditions(2/2) */ + } + } while (n-- > 0); /* conditions(2/2) */ +} + +void +mcdc017d (int a, int b, int c) +{ + do + { + a--; /* conditions(0/6) true(0 1 2) false(0 1 2) */ + /* conditions(end) */ + } while (a > 0 && b && c); +} + +/* Collection of odd cases lifted-and-adapted from real-world code. */ +int +mcdc018a (int a, int b, int c, int d, int e, int f, int g, int len) +{ + int n; + /* adapted from zlib/gz_read */ + do + { + n = -1; + if (n > len) /* conditions(2/2) */ + n = len; + + if (b) /* conditions(2/2) */ + { + if (b < 5) /* conditions(2/2) */ + x = 1; + noop(); + } + else if (c && d) /* conditions(3/4) false(1) */ + /* conditions(end) */ + { + x = 2; + break; + } + else if (e || f) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { + if (id(g)) /* conditions(2/2) */ + return 0; + continue; + } + } while (a-- > 0); /* conditions(2/2) */ + + return 1; +} + +void +mcdc018b (int a, int b, int c) +{ + int n; + while (a) /* conditions(2/2) */ + { + /* else block does not make a difference for the problem, but ensures + loop termination. */ + if (b) /* conditions(2/2) */ + n = c ? 0 : 0; // does not show up in CFG (embedded in the block) + else + n = 0; + a = n; + } +} + +/* Adapted from zlib/compress2. */ +void +mcdc018c (int a, int b) +{ + int err; + do + { + a = inv (a); + err = a; /* conditions(1/2) false(0) */ + /* conditions(end) */ + } while (err); + + a = id (a); + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + x *= a + 1; +} + +/* Too many conditions, coverage gives up. */ +void +mcdc019a () +{ + /* This will warn and needs a pragma warning suppression (or similar) + mechanism to not cause trigger a test failure from the warning. + int[65] conds; + x = conds[ 0] || conds[ 1] || conds[ 2] || conds[ 3] || conds[ 4] || + conds[ 5] || conds[ 6] || conds[ 7] || conds[ 8] || conds[ 9] || + conds[10] || conds[11] || conds[12] || conds[13] || conds[14] || + conds[15] || conds[16] || conds[17] || conds[18] || conds[19] || + conds[20] || conds[21] || conds[22] || conds[23] || conds[24] || + conds[25] || conds[26] || conds[27] || conds[28] || conds[29] || + conds[30] || conds[31] || conds[32] || conds[33] || conds[34] || + conds[35] || conds[36] || conds[37] || conds[38] || conds[39] || + conds[40] || conds[41] || conds[42] || conds[43] || conds[44] || + conds[45] || conds[46] || conds[47] || conds[48] || conds[49] || + conds[50] || conds[51] || conds[52] || conds[53] || conds[54] || + conds[55] || conds[56] || conds[57] || conds[58] || conds[59] || + conds[60] || conds[61] || conds[62] || conds[63] || conds[64] + ; + */ +} + +/* Ternary. */ +void +mcdc020a (int a) +{ + /* In C this is reduced to + _1 = argc != 0; + e = (int) _1; + but in D the branches are preserved. */ + x = a ? 1 : 0; /* conditions(2/2) */ + x = a ? 2 : 1; /* conditions(2/2) */ +} + +void +mcdc020b (int a, int b) +{ + x = (a || b) ? 1 : 0; /* conditions(3/4) true(1) */ + /* conditions(end) */ +} + +void +mcdc020c (int a, int b) +{ + x = a ? 0 /* conditions(2/2) */ + : b ? 1 /* conditions(1/2) false(0) */ + /* conditions(end) */ + : 2; +} + +int +mcdc020d (int b, int c, int d, int e, int f) +{ + return ((b ? c : d) && e && f); /* conditions(7/10) true(2) false(3 4) */ + /* conditions(end) */ +} + +/* Infinite loop (no exit-edge), this should not be called, but it should + compile fine. */ +void +mcdc021a () +{ + while (1) {} +} + +/* If edges are not properly contracted the a && id (b) will be interpreted as + two independent expressions. */ +void +mcdc021d (int a, int b, int c, int d) +{ + if (a && id (b)) /* conditions(1/4) true(0 1) false(0) */ + /* conditions(end) */ + x = 1; + else if (c && id (d)) /* conditions(1/4) true(0 1) false(0) */ + /* conditions(end) */ + x = 2; + else + x = 3; +} + +/* Adapted from linux arch/x86/tools/relocs.c + With poor edge contracting this became an infinite loop. */ +void +mcdc022a (int a, int b) +{ + for (int i = 0; i < 5; i++) /* conditions(2/2) */ + { + x = i; + for (int j = i; j < 5; j++) /* conditions(2/2) */ + { + if (id (id (a)) || id (b)) /* conditions(3/4) true(0) */ + /* conditions(end) */ + continue; + b = inv(b); + } + } +} + +int +mcdc022b (int a) +{ + int devt; + if (a) /* conditions(2/2) */ + { + x = a * 2; + if (x != a / 10 || x != a % 10) /* conditions(1/4) true(1) false(0 1) */ + /* conditions(end) */ + return 0; + } else { + devt = id (a); + if (devt) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return 0; + } + + return devt; +} + +/* Adapted from linux arch/x86/events/intel/ds.c + + It broken sorting so that the entry block was not the first node after + sorting. */ +void +mcdc022c (int a) +{ + if (!a) /* conditions(2/2) */ + return; + + for (int i = 0; i < 5; i++) /* conditions(2/2) */ + { + if (id (a + i) || inv (a - 1)) /* conditions(1/4) false(0 1) true(1) */ + /* conditions(end) */ + x = a + i; + if (inv (a)) /* conditions(1/2) true(0) */ + /* conditions(end) */ + break; + } +} + +void +mcdc022d (int a) +{ + int i; + for (i = 0; i < id (a); i++) /* conditions(1/2) true(0) */ + { + if (!inv (a)) /* conditions(1/2) false(0)*/ + /* conditions(end) */ + break; + } + + if (i < a) /* conditions(1/2) false(0) */ + /* conditions(end) */ + x = a + 1; +} + +/* Adapted from openssl-3.0.1/crypto/cmp/cmp_msg.c ossl_cmp_error_new (). */ +void +mcdc022e (int a, int b, int c, int d) +{ + if (a || b) /* conditions(1/4) true(0) false(0 1) */ + /* conditions(end) */ + { + if (always (c)) /* conditions(1/2) false(0) */ + /* conditions(end) */ + goto err; + d++; + } + + if (d) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + goto err; + return; + +err: + noop (); +} + +/* 023 specifically tests that masking works correctly, which gets complicated + fast with a mix of operators and deep subexpressions. These tests violates + the style guide slightly to emphasize the nesting. They all share the same + implementation and only one input is given to each function to obtain clean + coverage results. */ +void +mcdc023a (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + // [a m n] = 0, [b, ...] = 1 + // a is masked by b and the remaining terms should be short circuited + if (/* conditions(1/24) true(0 2 3 4 5 6 7 8 9 10 11) false(0 1 2 3 4 5 6 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023b (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + // [a b d h] = 0, [c, ...] = 1 + // h = 0 => false but does not mask (a || b) or (c && d). d = 0 masks c. + if (/* conditions(4/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 4 5 6 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023c (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [m n a b] = 0, [...] = 1 + n,m = 0 should mask all other terms than a, b */ + if (/* conditions(4/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 3 4 5 6 7 8 9) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023d (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b] = 0, [h, ...] = 1 + n,m = 0 should mask all other terms than a, b */ + if (/* conditions(4/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 3 4 5 6 7 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023e (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b d] = 0, [c h, ...] = 1 + h = 1 should mask c, d, leave other terms intact. + If [k l m n] were false then h itself would be masked. + [a b] are masked as collateral by [m n]. */ + if (/* conditions(5/24) true(0 1 2 3 6 9 11) false(0 1 2 3 4 5 6 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023f (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b c f g] = 0, [e, ...] = 1 + [f g] = 0 should mask e, leave [c d] intact. */ + if (/* conditions(5/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(3 4 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +void +mcdc023g (int a, int b, int c, int d, int e, int f, int g, int h, int i, int k, + int l, int m, int n) +{ + /* [a b d f g] = 0, [e c, ...] = 1 + Same as 023f but with [c d] flipped so d masks c rather than c + short-circuits. This should not be lost. */ + if (/* conditions(5/24) true(0 1 2 3 4 5 6 7 8 9 10 11) false(2 4 7 8 9 10 11) */ + /* conditions(end) */ + (a || b) + || ( ((c && d) || (e && (f || g) && h)) + && (k || l) + && (m || n))) + x = a + b; + else + x = b + c; +} + +/* Gotos, return, labels can make odd graphs. It is important that conditions + are assigned to the right expression, and that there are no miscounts. In + these tests values may be re-used, as checking things like masking an + independence is done in other test cases and not so useful here. */ +void +mcdc024a (int a, int b) +{ + /* This is a reference implementation without the labels, which should not + alter behavior. */ + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { + x = 2; + } +} + +void +mcdc024b (int a, int b) +{ + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { +label1: + x = 1; + } + else + { + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { +label2: + x = 1; + } + else + { + x = 2; + } +} + +void +mcdc024c (int a, int b) +{ + + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { +label1: + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { + x = 1; + } + else + { +label2: + x = 2; + } +} + +void +mcdc024d (int a, int b) +{ + if (a && b) /* conditions(2/4) true(0 1) */ + /* conditions(end) */ + { +label1: + x = 1; + } + else + { +label2: + x = 2; + } + + if (a || b) /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + { +label3: + x = 1; + } + else + { +label4: + x = 2; + } +} + +int +mcdc024e (int a, int b, int c) +{ + /* Graphs can get complicated with the innermost returns and else-less if, + so we must make sure these conditions are counted correctly. */ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (c) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 1; + else + return 2; + } + + if (a) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 3; + } + + return 5; +} + +/* Nested else-less ifs with inner returns needs to be counted right, which + puts some pressure on the expression isolation. */ +int +mcdc024f (int a, int b, int c) +{ + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (c) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + if (a) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 1; + else + return 2; + } + + if (a) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 3; + } + + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return 4; + } + return 5; +} + +int +mcdc024g (int a, int b, int c) +{ + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + return 0; + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + b += 2; + if (b & 0xFF) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c++; + + return c; + } + c += 10; + } + return 1; +} + + +int +mcdc024h (int a, int b, int c) +{ + if (b) /* conditions(1/2) true(0) */ + /* conditions(end) */ + goto inner; + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + ++a; + + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { +inner: + b += 2; + if (b & 0xFF) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c++; + + return c; + } + c += 10; + } + return 1; +} + +int +mcdc024i (int a, int b, int c) +{ +fst: + b++; +snd: + b++; + + if (b > 10) /* conditions(2/2) */ + /* conditions(end) */ + goto end; + + if (b < 5) /* conditions(2/2) */ + /* conditions(end) */ + goto fst; + else + goto snd; + +end: + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + ++a; + + + if (a) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + { + b += 2; + if (b & 0xFF) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + c++; + + return c; + } + c += 10; + } + return 1; +} + +/* Adapted from alsa-lib 1.2.8 src/control/control.c. If two expressions share + an outcome with bypass nodes they would be marked twice. */ +int +mcdc025a (int a, int b, int c) +{ + int err; + if (id (a)) /* conditions(1/2) true(0) */ + /* conditions(end) */ + { + if (b) /* conditions(0/2) true(0) false(0) */ + /* conditions(end) */ + return -1; + } + else + { + err = id (c); + if (err > 0) /* conditions(1/2) false(0) */ + /* conditions(end) */ + return err; + } + err = id (a); + return err; +} + +/* Boolean expressions in function call parameters. These tests are all built + with a reference expression which should behave the same as the function + call versions. */ +int +mcdc026a (int a, int b, int c, int d, int e) +{ + int cad = c && d; /* conditions(4/4) */ + /* conditions(end) */ + int x = a && b && cad && e; /* conditions(5/8) false(0 1 3) */ + /* conditions(end) */ + int y = a && b && id (c && d) && e; /* conditions(5/8; 4/4) false(0 1 3;;) */ + /* conditions(end) */ + return x + y; +} + +int +mcdc026b (int a, int b, int c, int d, int e) +{ + int dae = d && e; /* conditions(3/4) false(1) */ + /* conditions(end) */ + int x = a && b && c && dae; /* conditions(6/8) false(0 1) */ + int y = a && b && c && id (d && e); /* conditions(6/8; 3/4) false(0 1; 1) */ + /* conditions(end) */ + return x + y; +} + +int +mcdc026c (int a, int b, int c, int d, int e) +{ + int cod = c || d; /* conditions(3/4) true(1) */ + /* conditions(end) */ + int x = a && b && cod && e; /* conditions(5/8) false(0 1 3) */ + int y = a && b && id (c || d) && e; /* conditions(5/8; 3/4) true(;1) false(0 1 3;) */ + /* conditions(end) */ + return x+y; +} + +int +mcdc026d (int a, int b, int c, int d, int e) +{ + int aab = a && b; /* conditions(2/4) false(0 1) */ + /* conditions(end) */ + int cod = c || d; /* conditions(3/4) true(1) */ + /* conditions(end) */ + int x = aab && cod && e; /* conditions(4/6) false(0 2) */ + /* conditions(end) */ + int y = id (a && b) && id (c || d) && e; /* conditions(2/4;4/6;3/4) true(;;1) false(0 1;0 2;;) */ + /* conditions(end) */ + return x + y; +} + +int +mcdc026e (int a, int b, int c, int d, int e) +{ + int cod = c || d; /* conditions(3/4) true(1) */ + /* conditions(end) */ + int dae = d && e; /* conditions(3/4) false(1) */ + /* conditions(end) */ + int aacod = a && cod; /* conditions(3/4) false(0)*/ + /* conditions(end) */ + int x = aacod && dae; /* conditions(4/4) */ + /* conditions(end) */ + int y = id (a && id (c || d)) && id (d && e); /* conditions(3/4; 3/4; 4/4; 3/4) true(;1;;) false(0;;;1) */ + /* conditions(end) */ + return x + y; +} + +void main () +{ + mcdc001a (0, 1); + + mcdc001b (0, 1); + mcdc001b (0, 0); + + mcdc001c (0, 1); + mcdc001c (0, 0); + mcdc001c (1, 1); + + mcdc001d (1, 1, 1); + mcdc001d (0, 1, 0); + + mcdc002a (1, 0); + + mcdc002b (1, 0); + mcdc002b (1, 1); + + mcdc002c (0, 0); + mcdc002c (1, 1); + mcdc002c (1, 0); + + mcdc002d (1, 1, 1); + mcdc002d (1, 0, 0); + + mcdc003a (0, 0); + mcdc003a (1, 0); + + mcdc004a (0); + mcdc004b (0); + mcdc004b (1); + mcdc004c (1); + + mcdc004d (0, 0, 0); + mcdc004d (1, 1, 1); + + mcdc004e (0, 0, 0); + mcdc004e (1, 1, 1); + + mcdc004f (1, 1, 1); + + mcdc005a (1, 0, 1); + + mcdc005b (1, 1, 0, 0); + mcdc005b (1, 0, 0, 0); + + mcdc005c (0, 1, 1, 0); + + mcdc005d (1, 0, 0, 0); + + mcdc005e (0, 0); + mcdc005e (0, 1); + mcdc005e (1, 0); + mcdc005e (1, 1); + + mcdc006a (0, 0, 0, 0, 0); + mcdc006a (1, 0, 0, 0, 0); + mcdc006a (1, 1, 1, 0, 0); + + mcdc006b (0, 0, 0); + mcdc006b (1, 0, 0); + mcdc006b (1, 1, 0); + mcdc006b (1, 1, 1); + + mcdc006c (0, 0, 0); + mcdc006c (1, 0, 0); + mcdc006c (1, 1, 0); + mcdc006c (1, 1, 1); + + mcdc006d (1, 0, 0); + mcdc006d (1, 0, 1); + + mcdc006e (0, 0, 0, 0); + mcdc006e (0, 0, 1, 0); + mcdc006e (0, 1, 0, 0); + + mcdc007a (0, 0, 0, 0); + mcdc007a (1, 0, 0, 0); + mcdc007a (0, 0, 1, 0); + + mcdc007b (0, 0, 0); + mcdc007b (0, 1, 1); + mcdc007b (1, 0, 1); + + mcdc007c (0, 0, 0); + mcdc007c (0, 1, 1); + mcdc007c (1, 0, 1); + + mcdc007d (0, 1, 0, 1, 1); + + mcdc008a (0); + + mcdc008b (0); + + mcdc008c (0); + mcdc008c (1); + + mcdc008d (0, 0, 0, 0); + mcdc008d (1, 0, 0, 0); + mcdc008d (1, 0, 1, 0); + mcdc008d (1, 0, 1, 1); + mcdc008d (1, 1, 1, 1); + + mcdc009a (0, 0); + mcdc009a (1, 1); + + mcdc009b (0, 0); + mcdc009b (1, 0); + + mcdc010a (0, 0); + mcdc010a (0, 9); + mcdc010a (2, 1); + + mcdc010b (); + + mcdc010c (0, 0, 0); + mcdc010c (0, 1, 0); + + mcdc010d (1); + + mcdc011a (0, 0, 0); + mcdc011a (1, 1, 0); + mcdc011a (1, 0, 1); + + mcdc012a (0, 0, 0); + mcdc012a (0, 1, 1); + + mcdc013a (0, 0, 0); + mcdc013a (0, 0, 1); + mcdc013a (0, 1, 0); + mcdc013a (0, 1, 1); + mcdc013a (1, 0, 0); + mcdc013a (1, 0, 1); + mcdc013a (1, 1, 0); + mcdc013a (1, 1, 1); + + mcdc014a (); + + mcdc015a (0, 0); + mcdc015a (1, 0); + + mcdc015b (0, 0); + mcdc015b (0, 1); + mcdc015b (6, 1); + + mcdc015c (0, 0); + mcdc015c (0, 5); + mcdc015c (6, 1); + + mcdc015d (1, 0, 0); + + mcdc016a (5, 5); + + mcdc016b (5, 5); + mcdc016b (6, 5); + + mcdc016c (5, 5); + + mcdc016d (1, 0); + + mcdc017a (0); + mcdc017a (2); + + mcdc017b (2, 0); + mcdc017b (0, 1); + + mcdc017c (1, 1); + + mcdc018a (0, 0, 1, 1, 0, 0, 0, 0); + mcdc018a (0, 1, 0, 0, 0, 0, 1, -2); + mcdc018a (0, 6, 0, 0, 0, 0, 1, -2); + mcdc018a (0, 6, 0, 0, 0, 0, 1, -2); + mcdc018a (0, 0, 0, 1, 0, 1, 1, 0); + mcdc018a (1, 0, 0, 0, 1, 1, 0, 0); + + mcdc018b (1, 0, 0); + mcdc018b (1, 1, 0); + + mcdc018c (1, 1); + + mcdc019a (); + + mcdc020a (0); + mcdc020a (1); + + mcdc020b (0, 0); + mcdc020b (1, 0); + + mcdc020c (0, 1); + mcdc020c (1, 1); + + mcdc020d (0, 0, 0, 0, 0); + mcdc020d (1, 0, 0, 1, 1); + mcdc020d (1, 1, 0, 1, 1); + + mcdc021d (1, 0, 1, 0); + + mcdc022a (0, 0); + + mcdc022b (0); + mcdc022b (1); + + mcdc022c (0); + mcdc022c (1); + + mcdc022d (1); + mcdc022e (0, 1, 1, 0); + + mcdc023a (0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); + mcdc023b (0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1); + mcdc023c (0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0); + mcdc023d (0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1); + mcdc023e (0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1); + mcdc023f (0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1); + mcdc023g (0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1); + + mcdc024a (0, 1); + mcdc024b (0, 1); + mcdc024c (0, 1); + mcdc024d (0, 1); + mcdc024a (1, 0); + mcdc024b (1, 0); + mcdc024c (1, 0); + mcdc024d (1, 0); + + mcdc024e (0, 0, 0); + mcdc024f (0, 0, 0); + mcdc024g (0, 0, 0); + mcdc024h (0, 0, 0); + mcdc024i (0, 0, 0); + + mcdc025a (0, 0, 1); + + mcdc026a (1, 1, 1, 0, 1); + mcdc026a (1, 1, 0, 0, 1); + mcdc026a (1, 1, 1, 1, 1); + + mcdc026b (1, 1, 1, 0, 1); + mcdc026b (1, 1, 0, 0, 1); + mcdc026b (1, 1, 1, 1, 1); + + mcdc026c (1, 1, 1, 0, 1); + mcdc026c (1, 1, 0, 0, 1); + mcdc026c (1, 1, 1, 1, 1); + + mcdc026d (1, 1, 1, 0, 1); + mcdc026d (1, 1, 0, 0, 1); + mcdc026d (1, 1, 1, 1, 1); + + mcdc026e (1, 1, 1, 0, 1); + mcdc026e (1, 1, 0, 0, 1); + mcdc026e (1, 1, 1, 1, 1); +} + +/* { dg-final { run-gcov conditions { --conditions gcov1.d } } } */ From 1df56719bd868c58466a549b25d7064dac3eb456 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Thu, 4 Apr 2024 08:05:58 -0700 Subject: [PATCH 378/551] x86: Define __APX_F__ for -mapxf Define __APX_F__ when APX is enabled. gcc/ PR target/114587 * config/i386/i386-c.cc (ix86_target_macros_internal): Define __APX_F__ when APX is enabled. gcc/testsuite/ PR target/114587 * gcc.target/i386/apx-2.c: New test. --- gcc/config/i386/i386-c.cc | 2 ++ gcc/testsuite/gcc.target/i386/apx-2.c | 6 ++++++ 2 files changed, 8 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/apx-2.c diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc index 114908c7ec0c..226d277676ca 100644 --- a/gcc/config/i386/i386-c.cc +++ b/gcc/config/i386/i386-c.cc @@ -749,6 +749,8 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, } if (isa_flag2 & OPTION_MASK_ISA2_AVX10_1_512) def_or_undef (parse_in, "__AVX10_1_512__"); + if (isa_flag2 & OPTION_MASK_ISA2_APX_F) + def_or_undef (parse_in, "__APX_F__"); if (TARGET_IAMCU) { def_or_undef (parse_in, "__iamcu"); diff --git a/gcc/testsuite/gcc.target/i386/apx-2.c b/gcc/testsuite/gcc.target/i386/apx-2.c new file mode 100644 index 000000000000..2f6439e4b236 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/apx-2.c @@ -0,0 +1,6 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-mapxf" } */ + +#ifndef __APX_F__ +# error __APX_F__ not defined +#endif From 7520a4992c94254016085a461c58c972497c4483 Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Thu, 4 Apr 2024 21:55:29 +0200 Subject: [PATCH 379/551] nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl gcc/ChangeLog: * config/nvptx/mkoffload.cc (main): Call gcc_init_libintl and diagnostic_color_init. --- gcc/config/nvptx/mkoffload.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/config/nvptx/mkoffload.cc b/gcc/config/nvptx/mkoffload.cc index a7fc28cbd3fe..503b1abcefde 100644 --- a/gcc/config/nvptx/mkoffload.cc +++ b/gcc/config/nvptx/mkoffload.cc @@ -638,7 +638,9 @@ main (int argc, char **argv) const char *outname = 0; progname = tool_name; + gcc_init_libintl (); diagnostic_initialize (global_dc, 0); + diagnostic_color_init (global_dc); if (atexit (mkoffload_cleanup) != 0) fatal_error (input_location, "atexit failed"); From a24476422ba311b83737cf8bdc5892a7fc7514eb Mon Sep 17 00:00:00 2001 From: "Vladimir N. Makarov" <vmakarov@redhat.com> Date: Thu, 4 Apr 2024 16:04:04 -0400 Subject: [PATCH 380/551] [PR114415][scheduler]: Fixing wrong code generation For the test case, the insn scheduler (working for live range shrinkage) moves insns modifying stack memory before an insn reserving the stack memory. Comments in the patch contains more details about the problem and its solution. gcc/ChangeLog: PR rtl-optimization/114415 * sched-deps.cc (add_insn_mem_dependence): Add memory check for mem argument. (sched_analyze_1): Treat stack pointer modification as memory read. (sched_analyze_2, sched_analyze_insn): Add memory guard for processing pending_read_mems. * sched-int.h (deps_desc): Add comment to pending_read_mems. gcc/testsuite/ChangeLog: PR rtl-optimization/114415 * gcc.target/i386/pr114415.c: New test. --- gcc/sched-deps.cc | 49 ++++++++++++++++-------- gcc/sched-int.h | 4 +- gcc/testsuite/gcc.target/i386/pr114415.c | 47 +++++++++++++++++++++++ 3 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr114415.c diff --git a/gcc/sched-deps.cc b/gcc/sched-deps.cc index 5034e664e5ea..4c6682450491 100644 --- a/gcc/sched-deps.cc +++ b/gcc/sched-deps.cc @@ -1735,7 +1735,7 @@ add_insn_mem_dependence (class deps_desc *deps, bool read_p, insn_node = alloc_INSN_LIST (insn, *insn_list); *insn_list = insn_node; - if (sched_deps_info->use_cselib) + if (sched_deps_info->use_cselib && MEM_P (mem)) { mem = shallow_copy_rtx (mem); XEXP (mem, 0) = cselib_subst_to_values_from_insn (XEXP (mem, 0), @@ -2458,6 +2458,25 @@ sched_analyze_1 (class deps_desc *deps, rtx x, rtx_insn *insn) FIRST_STACK_REG); } #endif + if (!deps->readonly && regno == STACK_POINTER_REGNUM) + { + /* Please see PR114115. We have insn modifying memory on the stack + and not addressed by stack pointer and we have insn reserving the + stack space. If we move the insn modifying memory before insn + reserving the stack space, we can change memory out of the red + zone. Even worse, some optimizations (e.g. peephole) can add + insns using temporary stack slots before insn reserving the stack + space but after the insn modifying memory. This will corrupt the + modified memory. Therefore we treat insn changing the stack as + reading unknown memory. This will create anti-dependence. We + don't need to treat the insn as writing memory because GCC by + itself does not generate code reading undefined stack memory. */ + if ((deps->pending_read_list_length + deps->pending_write_list_length) + >= param_max_pending_list_length + && !DEBUG_INSN_P (insn)) + flush_pending_lists (deps, insn, true, true); + add_insn_mem_dependence (deps, true, insn, dest); + } } else if (MEM_P (dest)) { @@ -2498,10 +2517,11 @@ sched_analyze_1 (class deps_desc *deps, rtx x, rtx_insn *insn) pending_mem = deps->pending_read_mems; while (pending) { - if (anti_dependence (pending_mem->element (), t) - && ! sched_insns_conditions_mutex_p (insn, pending->insn ())) - note_mem_dep (t, pending_mem->element (), pending->insn (), - DEP_ANTI); + rtx mem = pending_mem->element (); + if (REG_P (mem) + || (anti_dependence (mem, t) + && ! sched_insns_conditions_mutex_p (insn, pending->insn ()))) + note_mem_dep (t, mem, pending->insn (), DEP_ANTI); pending = pending->next (); pending_mem = pending_mem->next (); @@ -2637,12 +2657,10 @@ sched_analyze_2 (class deps_desc *deps, rtx x, rtx_insn *insn) pending_mem = deps->pending_read_mems; while (pending) { - if (read_dependence (pending_mem->element (), t) - && ! sched_insns_conditions_mutex_p (insn, - pending->insn ())) - note_mem_dep (t, pending_mem->element (), - pending->insn (), - DEP_ANTI); + rtx mem = pending_mem->element (); + if (MEM_P (mem) && read_dependence (mem, t) + && ! sched_insns_conditions_mutex_p (insn, pending->insn ())) + note_mem_dep (t, mem, pending->insn (), DEP_ANTI); pending = pending->next (); pending_mem = pending_mem->next (); @@ -3026,8 +3044,7 @@ sched_analyze_insn (class deps_desc *deps, rtx x, rtx_insn *insn) while (pending) { if (! sched_insns_conditions_mutex_p (insn, pending->insn ())) - add_dependence (insn, pending->insn (), - REG_DEP_OUTPUT); + add_dependence (insn, pending->insn (), REG_DEP_OUTPUT); pending = pending->next (); pending_mem = pending_mem->next (); } @@ -3036,10 +3053,10 @@ sched_analyze_insn (class deps_desc *deps, rtx x, rtx_insn *insn) pending_mem = deps->pending_read_mems; while (pending) { - if (MEM_VOLATILE_P (pending_mem->element ()) + rtx mem = pending_mem->element (); + if (MEM_P (mem) && MEM_VOLATILE_P (mem) && ! sched_insns_conditions_mutex_p (insn, pending->insn ())) - add_dependence (insn, pending->insn (), - REG_DEP_OUTPUT); + add_dependence (insn, pending->insn (), REG_DEP_OUTPUT); pending = pending->next (); pending_mem = pending_mem->next (); } diff --git a/gcc/sched-int.h b/gcc/sched-int.h index 4df092013e91..85b1ddb13efc 100644 --- a/gcc/sched-int.h +++ b/gcc/sched-int.h @@ -471,7 +471,9 @@ class deps_desc /* An INSN_LIST containing all insns with pending read operations. */ rtx_insn_list *pending_read_insns; - /* An EXPR_LIST containing all MEM rtx's which are pending reads. */ + /* An EXPR_LIST containing all MEM rtx's which are pending reads. The list + can contain stack pointer instead of memory. This is a special case (see + sched-deps.cc::sched_analyze_1). */ rtx_expr_list *pending_read_mems; /* An INSN_LIST containing all insns with pending write operations. */ diff --git a/gcc/testsuite/gcc.target/i386/pr114415.c b/gcc/testsuite/gcc.target/i386/pr114415.c new file mode 100644 index 000000000000..90c16a5128f0 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114415.c @@ -0,0 +1,47 @@ +/* { dg-do run { target int128 } } */ +/* { dg-options "-Oz -fno-dce -fno-forward-propagate -flive-range-shrinkage -fweb -Wno-psabi" } */ + +typedef unsigned V __attribute__((vector_size (64))); +typedef unsigned __int128 W __attribute__((vector_size (64))); +__int128 i; +V v; +W w; + +W +bar2 (V, W c) +{ + v |= (V){c[3]}; + i = 0; + return c; +} + +W +bar1 (W, W d) +{ + v[0] %= 2; + return d; +} + +W +bar0 (V a, W b) +{ + W t = bar2 ((V) { }, w); + (void)bar2 ((V){b[0] - a[0]}, (W){}); + b += bar1 (t, (W){1}); + a[5] &= __builtin_mul_overflow_p (a[0], i, 0u); + return (W) a + b; +} + +int +main () +{ + W x = bar0 ((V) { }, (W) { }); + if (x[0] != 1) + __builtin_abort(); + if (x[1]) + __builtin_abort(); + if (x[2]) + __builtin_abort(); + if (x[3]) + __builtin_abort(); +} From ca56b43105fc09021ec445f1978a17cd85ae5e0c Mon Sep 17 00:00:00 2001 From: Martin Jambor <mjambor@suse.cz> Date: Thu, 4 Apr 2024 22:46:16 +0200 Subject: [PATCH 381/551] ipa: Avoid duplicate replacements in IPA-SRA transformation phase When the analysis part of IPA-SRA figures out that it would split out a scalar part of an aggregate which is known by IPA-CP to contain a known constant, it skips it knowing that the transformation part looks at IPA-CP aggregate results too and does the right thing (which can include doing the propagation in GIMPLE because that is the last moment the parameter exists). However, when IPA-SRA wants to split out a smaller aggregate out of an aggregate, which happens to be of the same size as a known scalar constant at the same offset, the transformation bit fails to recognize the situation, tries to do both splitting and constant propagation and in PR 111571 testcase creates a nonsensical call statement on which the call redirection then ICEs. Fixed by making sure we don't try to do two replacements of the same part of the same parameter. The look-up among replacements requires these are sorted and this patch just sorts them if they are not already sorted before each new look-up. The worst number of sortings that can happen is number of parameters which are both split and have aggregate constants times param_ipa_max_agg_items (default 16). I don't think complicating the source code to optimize for this unlikely case is worth it but if need be, it can of course be done. gcc/ChangeLog: 2024-03-15 Martin Jambor <mjambor@suse.cz> PR ipa/111571 * ipa-param-manipulation.cc (ipa_param_body_adjustments::common_initialization): Avoid creating duplicate replacement entries. gcc/testsuite/ChangeLog: 2024-03-15 Martin Jambor <mjambor@suse.cz> PR ipa/111571 * gcc.dg/ipa/pr111571.c: New test. --- gcc/ipa-param-manipulation.cc | 16 ++++++++++++++++ gcc/testsuite/gcc.dg/ipa/pr111571.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/ipa/pr111571.c diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc index 3e0df6a6f77a..f4b5e850c2b1 100644 --- a/gcc/ipa-param-manipulation.cc +++ b/gcc/ipa-param-manipulation.cc @@ -1525,6 +1525,22 @@ ipa_param_body_adjustments::common_initialization (tree old_fndecl, replacement with a constant (for split aggregates passed by value). */ + if (split[parm_num]) + { + /* We must be careful not to add a duplicate + replacement. */ + sort_replacements (); + ipa_param_body_replacement *pbr + = lookup_replacement_1 (m_oparms[parm_num], + av.unit_offset); + if (pbr) + { + /* Otherwise IPA-SRA should have bailed out. */ + gcc_assert (AGGREGATE_TYPE_P (TREE_TYPE (pbr->repl))); + continue; + } + } + tree repl; if (av.by_ref) repl = av.value; diff --git a/gcc/testsuite/gcc.dg/ipa/pr111571.c b/gcc/testsuite/gcc.dg/ipa/pr111571.c new file mode 100644 index 000000000000..2a4adc608db9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr111571.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct a { + int b; +}; +struct c { + long d; + struct a e; + long f; +}; +int g, h, i; +int j() {return 0;} +static void k(struct a l, int p) { + if (h) + g = 0; + for (; g; g = j()) + if (l.b) + break; +} +static void m(struct c l) { + k(l.e, l.f); + for (;; --i) + ; +} +int main() { + struct c n = {10, 9}; + m(n); +} From 801e82acd6b4f0cf863529875947e394899ea7b9 Mon Sep 17 00:00:00 2001 From: centurion <centurion009@proton.me> Date: Wed, 27 Mar 2024 18:36:37 +0000 Subject: [PATCH 382/551] c++: alias CTAD and template template parm [PR114377] To match all the other places that pull a _TEMPLATE_PARM out of a _DECL (get_template_parm_index, etc.). This change is too small to be legally significant for copyright. PR c++/114377 gcc/cp/ChangeLog: * pt.cc (find_template_parameter_info::found): Use TREE_TYPE for TEMPLATE_DECL instead of DECL_INITIAL. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/class-deduction-alias19.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/pt.cc | 3 ++- .../g++.dg/cpp2a/class-deduction-alias19.C | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/class-deduction-alias19.C diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 7b00a8615d28..1425d6116d07 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -11032,7 +11032,8 @@ find_template_parameter_info::found (tree parm) { if (TREE_CODE (parm) == TREE_LIST) parm = TREE_VALUE (parm); - if (TREE_CODE (parm) == TYPE_DECL) + if (TREE_CODE (parm) == TYPE_DECL + || TREE_CODE (parm) == TEMPLATE_DECL) parm = TREE_TYPE (parm); else parm = DECL_INITIAL (parm); diff --git a/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias19.C b/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias19.C new file mode 100644 index 000000000000..1ea79bd76917 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/class-deduction-alias19.C @@ -0,0 +1,15 @@ +// PR c++/114377 +// { dg-do compile { target c++20 } } + +template <template <typename> typename Iterator> +struct K {}; + +template <typename C, typename IteratorPolicy> +class Foo {}; + +template <typename C, template<typename> typename TTP> +using Bar = Foo<C, K<TTP>>; + +void s() { + Bar(1); // { dg-error "failed|no match" } +} From 27b6d081f68528435066be2234c7329e31e0e84f Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra <wilco.dijkstra@arm.com> Date: Tue, 26 Mar 2024 15:08:02 +0000 Subject: [PATCH 383/551] libatomic: Fix build for --disable-gnu-indirect-function [PR113986] Fix libatomic build to support --disable-gnu-indirect-function on AArch64. Always build atomic_16.S, add aliases to the __atomic_ functions if !HAVE_IFUNC. Include auto-config.h in atomic_16.S to avoid having to pass defines via makefiles. Fix build if HWCAP_ATOMICS/CPUID are not defined. libatomic: PR target/113986 * Makefile.in: Regenerated. * Makefile.am: Make atomic_16.S not depend on HAVE_IFUNC. Remove predefine of HAVE_FEAT_LSE128. * acinclude.m4: Remove ARCH_AARCH64_HAVE_LSE128. * configure: Regenerated. * config/linux/aarch64/atomic_16.S: Add __atomic_ alias if !HAVE_IFUNC. * config/linux/aarch64/host-config.h: Correctly handle !HAVE_IFUNC. Add defines for HWCAP_ATOMICS and HWCAP_CPUID. --- libatomic/Makefile.am | 8 +-- libatomic/Makefile.in | 18 +++---- libatomic/acinclude.m4 | 1 - libatomic/config/linux/aarch64/atomic_16.S | 47 ++++++++++++++++-- libatomic/config/linux/aarch64/host-config.h | 52 ++++++++++---------- libatomic/configure | 16 ------ 6 files changed, 82 insertions(+), 60 deletions(-) diff --git a/libatomic/Makefile.am b/libatomic/Makefile.am index d49c44c7d5fb..980677f35334 100644 --- a/libatomic/Makefile.am +++ b/libatomic/Makefile.am @@ -130,12 +130,8 @@ libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix _$(s)_.lo,$(SIZEOBJS))) ## On a target-specific basis, include alternates to be selected by IFUNC. if HAVE_IFUNC if ARCH_AARCH64_LINUX -if ARCH_AARCH64_HAVE_LSE128 -AM_CPPFLAGS = -DHAVE_FEAT_LSE128 -endif IFUNC_OPTIONS = -march=armv8-a+lse libatomic_la_LIBADD += $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))) -libatomic_la_SOURCES += atomic_16.S endif if ARCH_ARM_LINUX @@ -155,6 +151,10 @@ libatomic_la_LIBADD += $(addsuffix _16_1_.lo,$(SIZEOBJS)) \ endif endif +if ARCH_AARCH64_LINUX +libatomic_la_SOURCES += atomic_16.S +endif + libatomic_convenience_la_SOURCES = $(libatomic_la_SOURCES) libatomic_convenience_la_LIBADD = $(libatomic_la_LIBADD) diff --git a/libatomic/Makefile.in b/libatomic/Makefile.in index 11c8ec7ba15b..d9d529bc502d 100644 --- a/libatomic/Makefile.in +++ b/libatomic/Makefile.in @@ -90,17 +90,17 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_1 = $(foreach s,$(SIZES),$(addsuffix _$(s)_1_.lo,$(SIZEOBJS))) -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_2 = atomic_16.S -@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_3 = $(foreach \ +@ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__append_2 = $(foreach \ @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ s,$(SIZES),$(addsuffix \ @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _$(s)_1_.lo,$(SIZEOBJS))) \ @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix \ @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ _8_2_.lo,$(SIZEOBJS)) \ @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@ tas_1_2_.lo -@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@am__append_4 = $(addsuffix _8_1_.lo,$(SIZEOBJS)) -@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@am__append_5 = $(addsuffix _16_1_.lo,$(SIZEOBJS)) \ +@ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@am__append_3 = $(addsuffix _8_1_.lo,$(SIZEOBJS)) +@ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@am__append_4 = $(addsuffix _16_1_.lo,$(SIZEOBJS)) \ @ARCH_X86_64_TRUE@@HAVE_IFUNC_TRUE@ $(addsuffix _16_2_.lo,$(SIZEOBJS)) +@ARCH_AARCH64_LINUX_TRUE@am__append_5 = atomic_16.S subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ @@ -156,8 +156,7 @@ am__uninstall_files_from_dir = { \ } am__installdirs = "$(DESTDIR)$(toolexeclibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES) -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@am__objects_1 = \ -@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@ atomic_16.lo +@ARCH_AARCH64_LINUX_TRUE@am__objects_1 = atomic_16.lo am_libatomic_la_OBJECTS = gload.lo gstore.lo gcas.lo gexch.lo \ glfree.lo lock.lo init.lo fenv.lo fence.lo flag.lo \ $(am__objects_1) @@ -425,7 +424,7 @@ libatomic_la_LDFLAGS = $(libatomic_version_info) $(libatomic_version_script) \ $(lt_host_flags) $(libatomic_darwin_rpath) libatomic_la_SOURCES = gload.c gstore.c gcas.c gexch.c glfree.c lock.c \ - init.c fenv.c fence.c flag.c $(am__append_2) + init.c fenv.c fence.c flag.c $(am__append_5) SIZEOBJS = load store cas exch fadd fsub fand fior fxor fnand tas EXTRA_libatomic_la_SOURCES = $(addsuffix _n.c,$(SIZEOBJS)) libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep) @@ -451,9 +450,8 @@ all_c_files := $(foreach dir,$(search_path),$(wildcard $(dir)/*.c)) # Then sort through them to find the one we want, and select the first. M_SRC = $(firstword $(filter %/$(M_FILE), $(all_c_files))) libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix \ - _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_3) \ - $(am__append_4) $(am__append_5) -@ARCH_AARCH64_HAVE_LSE128_TRUE@@ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@AM_CPPFLAGS = -DHAVE_FEAT_LSE128 + _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_2) \ + $(am__append_3) $(am__append_4) @ARCH_AARCH64_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv8-a+lse @ARCH_ARM_LINUX_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=armv7-a+fp -DHAVE_KERNEL64 @ARCH_I386_TRUE@@HAVE_IFUNC_TRUE@IFUNC_OPTIONS = -march=i586 diff --git a/libatomic/acinclude.m4 b/libatomic/acinclude.m4 index d4f13174e2c9..6d2e0b1c355c 100644 --- a/libatomic/acinclude.m4 +++ b/libatomic/acinclude.m4 @@ -99,7 +99,6 @@ AC_DEFUN([LIBAT_TEST_FEAT_AARCH64_LSE128],[ ]) LIBAT_DEFINE_YESNO([HAVE_FEAT_LSE128], [$libat_cv_have_feat_lse128], [Have LSE128 support for 16 byte integers.]) - AM_CONDITIONAL([ARCH_AARCH64_HAVE_LSE128], [test x$libat_cv_have_feat_lse128 = xyes]) ]) dnl diff --git a/libatomic/config/linux/aarch64/atomic_16.S b/libatomic/config/linux/aarch64/atomic_16.S index d4a360a6f781..4e3fa870b033 100644 --- a/libatomic/config/linux/aarch64/atomic_16.S +++ b/libatomic/config/linux/aarch64/atomic_16.S @@ -38,6 +38,15 @@ The libat_<op>_16_i1 entry points are used when LSE128 is available. The libat_<op>_16_i2 entry points are used when LSE2 is available. */ +#include "auto-config.h" + +#if !HAVE_IFUNC +# undef HAVE_FEAT_LSE128 +# define HAVE_FEAT_LSE128 0 +#endif + +#define HAVE_FEAT_LSE2 HAVE_IFUNC + #if HAVE_FEAT_LSE128 .arch armv9-a+lse128 #else @@ -67,8 +76,8 @@ NAME: \ .cfi_endproc; \ .size NAME, .-NAME; -#define ALIAS(NAME, FROM, TO) \ - ALIAS1 (FROM (NAME),TO (NAME)) +#define ALIAS(NAME, FROM, TO) ALIAS1 (FROM (NAME),TO (NAME)) +#define ALIAS2(NAME) ALIAS1 (__atomic_##NAME, libat_##NAME) #define ALIAS1(ALIAS, NAME) \ .global ALIAS; \ @@ -125,6 +134,7 @@ ENTRY (libat_load_16) END (libat_load_16) +#if HAVE_FEAT_LSE2 ENTRY_FEAT (libat_load_16, LSE2) cbnz w1, 1f @@ -146,6 +156,7 @@ ENTRY_FEAT (libat_load_16, LSE2) dmb ishld ret END_FEAT (libat_load_16, LSE2) +#endif ENTRY (libat_store_16) @@ -165,6 +176,7 @@ ENTRY (libat_store_16) END (libat_store_16) +#if HAVE_FEAT_LSE2 ENTRY_FEAT (libat_store_16, LSE2) cbnz w4, 1f @@ -178,6 +190,7 @@ ENTRY_FEAT (libat_store_16, LSE2) cbnz w4, 1b ret END_FEAT (libat_store_16, LSE2) +#endif ENTRY (libat_exchange_16) @@ -279,6 +292,7 @@ ENTRY (libat_compare_exchange_16) END (libat_compare_exchange_16) +#if HAVE_FEAT_LSE2 ENTRY_FEAT (libat_compare_exchange_16, LSE2) ldp exp0, exp1, [x1] mov tmp0, exp0 @@ -313,6 +327,7 @@ ENTRY_FEAT (libat_compare_exchange_16, LSE2) 4: caspal exp0, exp1, in0, in1, [x0] b 0b END_FEAT (libat_compare_exchange_16, LSE2) +#endif ENTRY (libat_fetch_add_16) @@ -710,13 +725,14 @@ END (libat_test_and_set_16) /* Alias entry points which are the same in LSE2 and LSE128. */ -#if !HAVE_FEAT_LSE128 +#if HAVE_IFUNC +# if !HAVE_FEAT_LSE128 ALIAS (libat_exchange_16, LSE128, LSE2) ALIAS (libat_fetch_or_16, LSE128, LSE2) ALIAS (libat_fetch_and_16, LSE128, LSE2) ALIAS (libat_or_fetch_16, LSE128, LSE2) ALIAS (libat_and_fetch_16, LSE128, LSE2) -#endif +# endif ALIAS (libat_load_16, LSE128, LSE2) ALIAS (libat_store_16, LSE128, LSE2) ALIAS (libat_compare_exchange_16, LSE128, LSE2) @@ -747,6 +763,29 @@ ALIAS (libat_fetch_nand_16, LSE2, CORE) ALIAS (libat_nand_fetch_16, LSE2, CORE) ALIAS (libat_test_and_set_16, LSE2, CORE) +#else + +/* Emit __atomic_* entrypoints if no ifuncs. */ + +ALIAS2 (load_16) +ALIAS2 (store_16) +ALIAS2 (compare_exchange_16) +ALIAS2 (exchange_16) +ALIAS2 (fetch_add_16) +ALIAS2 (add_fetch_16) +ALIAS2 (fetch_sub_16) +ALIAS2 (sub_fetch_16) +ALIAS2 (fetch_or_16) +ALIAS2 (or_fetch_16) +ALIAS2 (fetch_and_16) +ALIAS2 (and_fetch_16) +ALIAS2 (fetch_xor_16) +ALIAS2 (xor_fetch_16) +ALIAS2 (fetch_nand_16) +ALIAS2 (nand_fetch_16) +ALIAS2 (test_and_set_16) +#endif + /* GNU_PROPERTY_AARCH64_* macros from elf.h for use in asm code. */ #define FEATURE_1_AND 0xc0000000 #define FEATURE_1_BTI 1 diff --git a/libatomic/config/linux/aarch64/host-config.h b/libatomic/config/linux/aarch64/host-config.h index 4e3541240633..e1a699948f48 100644 --- a/libatomic/config/linux/aarch64/host-config.h +++ b/libatomic/config/linux/aarch64/host-config.h @@ -24,6 +24,19 @@ #if HAVE_IFUNC #include <sys/auxv.h> +#ifndef HWCAP_ATOMICS +# define HWCAP_ATOMICS (1 << 8) +#endif +#ifndef HWCAP_CPUID +# define HWCAP_CPUID (1 << 11) +#endif +#ifndef HWCAP_USCAT +# define HWCAP_USCAT (1 << 25) +#endif +#ifndef HWCAP2_LSE128 +# define HWCAP2_LSE128 (1UL << 47) +#endif + #if __has_include(<sys/ifunc.h>) # include <sys/ifunc.h> #else @@ -35,29 +48,15 @@ typedef struct __ifunc_arg_t { # define _IFUNC_ARG_HWCAP (1ULL << 62) #endif -#ifdef HWCAP_USCAT -# if N == 16 -# define IFUNC_COND_1 (has_lse128 (hwcap, features)) -# define IFUNC_COND_2 (has_lse2 (hwcap, features)) -# define IFUNC_NCOND(N) 2 -# else -# define IFUNC_COND_1 (hwcap & HWCAP_ATOMICS) -# define IFUNC_NCOND(N) 1 -# endif -#else -# define IFUNC_COND_1 (false) -# define IFUNC_NCOND(N) 1 -#endif - -#endif /* HAVE_IFUNC */ - -/* All 128-bit atomic functions are defined in aarch64/atomic_16.S. */ #if N == 16 -# define DONE 1 +# define IFUNC_COND_1 (has_lse128 (hwcap, features)) +# define IFUNC_COND_2 (has_lse2 (hwcap, features)) +# define IFUNC_NCOND(N) 2 +#else +# define IFUNC_COND_1 (hwcap & HWCAP_ATOMICS) +# define IFUNC_NCOND(N) 1 #endif -#ifdef HWCAP_USCAT - #define MIDR_IMPLEMENTOR(midr) (((midr) >> 24) & 255) #define MIDR_PARTNUM(midr) (((midr) >> 4) & 0xfff) @@ -89,11 +88,6 @@ has_lse2 (unsigned long hwcap, const __ifunc_arg_t *features) #define AT_FEAT_FIELD(isar0) (((isar0) >> 20) & 15) -/* Ensure backwards compatibility with glibc <= 2.38. */ -#ifndef HWCAP2_LSE128 -#define HWCAP2_LSE128 (1UL << 47) -#endif - static inline bool has_lse128 (unsigned long hwcap, const __ifunc_arg_t *features) { @@ -116,6 +110,14 @@ has_lse128 (unsigned long hwcap, const __ifunc_arg_t *features) return false; } +#endif /* HAVE_IFUNC */ + +/* All 128-bit atomic functions are defined in aarch64/atomic_16.S. */ +#if N == 16 +# define DONE 1 +# if !HAVE_IFUNC +# define IFUNC_ALT 1 +# endif #endif #include_next <host-config.h> diff --git a/libatomic/configure b/libatomic/configure index 8ab730d80828..8ca72f08dfd2 100755 --- a/libatomic/configure +++ b/libatomic/configure @@ -656,8 +656,6 @@ LIBAT_BUILD_VERSIONED_SHLIB_FALSE LIBAT_BUILD_VERSIONED_SHLIB_TRUE OPT_LDFLAGS SECTION_LDFLAGS -ARCH_AARCH64_HAVE_LSE128_FALSE -ARCH_AARCH64_HAVE_LSE128_TRUE SYSROOT_CFLAGS_FOR_TARGET enable_aarch64_lse libtool_VERSION @@ -14740,15 +14738,6 @@ cat >>confdefs.h <<_ACEOF _ACEOF - if test x$libat_cv_have_feat_lse128 = xyes; then - ARCH_AARCH64_HAVE_LSE128_TRUE= - ARCH_AARCH64_HAVE_LSE128_FALSE='#' -else - ARCH_AARCH64_HAVE_LSE128_TRUE='#' - ARCH_AARCH64_HAVE_LSE128_FALSE= -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } @@ -16042,11 +16031,6 @@ if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${ARCH_AARCH64_HAVE_LSE128_TRUE}" && test -z "${ARCH_AARCH64_HAVE_LSE128_FALSE}"; then - as_fn_error $? "conditional \"ARCH_AARCH64_HAVE_LSE128\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_FALSE}"; then as_fn_error $? "conditional \"LIBAT_BUILD_VERSIONED_SHLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 From 5192e72e7e1fe63ff0b9d8b05c26018ba5dd1ba3 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Fri, 5 Apr 2024 00:16:44 +0000 Subject: [PATCH 384/551] Daily bump. --- ChangeLog | 9 +++ gcc/ChangeLog | 159 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 6 ++ gcc/testsuite/ChangeLog | 62 ++++++++++++++++ libatomic/ChangeLog | 12 +++ libgcc/ChangeLog | 4 + libgomp/ChangeLog | 5 ++ 8 files changed, 258 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 347646d6ea8b..68af19738f41 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2024-04-04 Paul-Antoine Arras <parras@baylibre.com> + + * MAINTAINERS: Update my email address. + +2024-04-04 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * MAINTAINERS: Update my email details, remove myself as arm + maintainer. Add myself to DCO section. + 2024-04-02 Jakub Jelinek <jakub@redhat.com> PR bootstrap/106472 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4393283f7500..c2e8be979714 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,162 @@ +2024-04-04 Martin Jambor <mjambor@suse.cz> + + PR ipa/111571 + * ipa-param-manipulation.cc + (ipa_param_body_adjustments::common_initialization): Avoid creating + duplicate replacement entries. + +2024-04-04 Vladimir N. Makarov <vmakarov@redhat.com> + + PR rtl-optimization/114415 + * sched-deps.cc (add_insn_mem_dependence): Add memory check for mem argument. + (sched_analyze_1): Treat stack pointer modification as memory read. + (sched_analyze_2, sched_analyze_insn): Add memory guard for processing pending_read_mems. + * sched-int.h (deps_desc): Add comment to pending_read_mems. + +2024-04-04 Tobias Burnus <tburnus@baylibre.com> + + * config/nvptx/mkoffload.cc (main): Call + gcc_init_libintl and diagnostic_color_init. + +2024-04-04 H.J. Lu <hjl.tools@gmail.com> + + PR target/114587 + * config/i386/i386-c.cc (ix86_target_macros_internal): Define + __APX_F__ when APX is enabled. + +2024-04-04 Jørgen Kvalsvik <j@lambda.is> + + * builtins.cc (expand_builtin_fork_or_exec): Check + condition_coverage_flag. + * collect2.cc (main): Add -fno-condition-coverage to OBSTACK. + * common.opt: Add new options -fcondition-coverage and + -Wcoverage-too-many-conditions. + * doc/gcov.texi: Add --conditions documentation. + * doc/invoke.texi: Add -fcondition-coverage documentation. + * function.cc (free_after_compilation): Free cond_uids. + * function.h (struct function): Add cond_uids. + * gcc.cc: Link gcov on -fcondition-coverage. + * gcov-counter.def (GCOV_COUNTER_CONDS): New. + * gcov-dump.cc (tag_conditions): New. + * gcov-io.h (GCOV_TAG_CONDS): New. + (GCOV_TAG_CONDS_LENGTH): New. + (GCOV_TAG_CONDS_NUM): New. + * gcov.cc (class condition_info): New. + (condition_info::condition_info): New. + (condition_info::popcount): New. + (struct coverage_info): New. + (add_condition_counts): New. + (output_conditions): New. + (print_usage): Add -g, --conditions. + (process_args): Likewise. + (output_intermediate_json_line): Output conditions. + (read_graph_file): Read condition counters. + (read_count_file): Likewise. + (file_summary): Print conditions. + (accumulate_line_info): Accumulate conditions. + (output_line_details): Print conditions. + * gimplify.cc (next_cond_uid): New. + (reset_cond_uid): New. + (shortcut_cond_r): Set condition discriminator. + (tag_shortcut_cond): New. + (gimple_associate_condition_with_expr): New. + (shortcut_cond_expr): Set condition discriminator. + (gimplify_cond_expr): Likewise. + (gimplify_function_tree): Call reset_cond_uid. + * ipa-inline.cc (can_early_inline_edge_p): Check + condition_coverage_flag. + * ipa-split.cc (pass_split_functions::gate): Likewise. + * passes.cc (finish_optimization_passes): Likewise. + * profile.cc (struct condcov): New declaration. + (cov_length): Likewise. + (cov_blocks): Likewise. + (cov_masks): Likewise. + (cov_maps): Likewise. + (cov_free): Likewise. + (instrument_decisions): New. + (read_thunk_profile): Control output to file. + (branch_prob): Call find_conditions, instrument_decisions. + (init_branch_prob): Add total_num_conds. + (end_branch_prob): Likewise. + * tree-core.h (struct tree_exp): Add condition_uid. + * tree-profile.cc (struct conds_ctx): New. + (CONDITIONS_MAX_TERMS): New. + (EDGE_CONDITION): New. + (topological_cmp): New. + (index_of): New. + (single_p): New. + (single_edge): New. + (contract_edge_up): New. + (struct outcomes): New. + (conditional_succs): New. + (condition_index): New. + (condition_uid): New. + (masking_vectors): New. + (emit_assign): New. + (emit_bitwise_op): New. + (make_top_index_visit): New. + (make_top_index): New. + (paths_between): New. + (struct condcov): New. + (cov_length): New. + (cov_blocks): New. + (cov_masks): New. + (cov_maps): New. + (cov_free): New. + (find_conditions): New. + (struct counters): New. + (find_counters): New. + (resolve_counter): New. + (resolve_counters): New. + (instrument_decisions): New. + (tree_profiling): Check condition_coverage_flag. + (pass_ipa_tree_profile::gate): Likewise. + * tree.h (SET_EXPR_UID): New. + (EXPR_COND_UID): New. + +2024-04-04 Richard Sandiford <richard.sandiford@arm.com> + + PR target/114577 + * config/aarch64/aarch64-sve-builtins.h (aarch64_sve::lookup_fndecl): + Declare. + * config/aarch64/aarch64-sve-builtins.cc (aarch64_sve::lookup_fndecl): + New function. + * config/aarch64/aarch64-sve-builtins-base.cc (is_undef): Likewise. + (svset_neonq_impl::expand): Optimise expansions whose first argument + is undefined. + +2024-04-04 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114485 + * tree-vect-loop-manip.cc (vect_can_peel_nonlinear_iv_p): + vect_step_op_neg isn't OK for partial vectors but only + for unknown niter. + +2024-04-04 Jakub Jelinek <jakub@redhat.com> + + PR c++/114537 + * fold-const.cc (native_encode_initializer): Look through + NON_LVALUE_EXPR if val is INTEGER_CST. + +2024-04-04 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114555 + * gimple-lower-bitint.cc (bitint_large_huge::handle_cast): For + m_bitfld_load and save_cast_conditional add any needed PHIs + and adjust t4 accordingly. + +2024-04-04 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114551 + * tree-ssa-loop-split.cc (split_loop): If the guard is + only conditionally evaluated rewrite computations with + possibly undefined overflow to unsigned arithmetic. + +2024-04-04 Eugene Rozenfeld <erozen@microsoft.com> + + PR gcov-profile/113765 + * auto-profile.cc (afdo_annotate_cfg): Don't set full_profile to true + 2024-04-03 Mark Wielaard <mark@klomp.org> * config/i386/i386.opt.urls: Regenerate. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 9bcd31d63c92..c21b6317f1e2 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240404 +20240405 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d3ee105a0ec3..79ad1ffcb548 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2024-04-04 centurion <centurion009@proton.me> + + PR c++/114377 + * pt.cc (find_template_parameter_info::found): Use TREE_TYPE for + TEMPLATE_DECL instead of DECL_INITIAL. + 2024-04-02 Marek Polacek <polacek@redhat.com> PR c++/114479 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2107bf4e83c9..ce0ec65b5d05 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,65 @@ +2024-04-04 centurion <centurion009@proton.me> + + PR c++/114377 + * g++.dg/cpp2a/class-deduction-alias19.C: New test. + +2024-04-04 Martin Jambor <mjambor@suse.cz> + + PR ipa/111571 + * gcc.dg/ipa/pr111571.c: New test. + +2024-04-04 Vladimir N. Makarov <vmakarov@redhat.com> + + PR rtl-optimization/114415 + * gcc.target/i386/pr114415.c: New test. + +2024-04-04 H.J. Lu <hjl.tools@gmail.com> + + PR target/114587 + * gcc.target/i386/apx-2.c: New test. + +2024-04-04 Jørgen Kvalsvik <j@lambda.is> + + * gdc.dg/gcov.exp: New test. + * gdc.dg/gcov1.d: New test. + +2024-04-04 Jørgen Kvalsvik <j@lambda.is> + + * lib/gcov.exp: Add condition coverage test function. + * g++.dg/gcov/gcov-18.C: New test. + * gcc.misc-tests/gcov-19.c: New test. + * gcc.misc-tests/gcov-20.c: New test. + * gcc.misc-tests/gcov-21.c: New test. + * gcc.misc-tests/gcov-22.c: New test. + * gcc.misc-tests/gcov-23.c: New test. + +2024-04-04 Richard Sandiford <richard.sandiford@arm.com> + + PR target/114577 + * gcc.target/aarch64/sve/acle/general/pr114577_1.c: New test. + * gcc.target/aarch64/sve/acle/general/pr114577_2.c: Likewise. + +2024-04-04 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114485 + * gcc.dg/vect/pr114485.c: New testcase. + +2024-04-04 Jakub Jelinek <jakub@redhat.com> + + PR c++/114537 + * g++.dg/cpp2a/bit-cast16.C: New test. + +2024-04-04 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114555 + * gcc.dg/bitint-103.c: New test. + * gcc.dg/bitint-104.c: New test. + +2024-04-04 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114551 + * gcc.dg/torture/pr114551.c: New testcase. + 2024-04-03 H.J. Lu <hjl.tools@gmail.com> PR tree-optimization/114115 diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index 1f199246e2a7..e09201fcaa8c 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,15 @@ +2024-04-04 Wilco Dijkstra <wilco.dijkstra@arm.com> + + PR target/113986 + * Makefile.in: Regenerated. + * Makefile.am: Make atomic_16.S not depend on HAVE_IFUNC. + Remove predefine of HAVE_FEAT_LSE128. + * acinclude.m4: Remove ARCH_AARCH64_HAVE_LSE128. + * configure: Regenerated. + * config/linux/aarch64/atomic_16.S: Add __atomic_ alias if !HAVE_IFUNC. + * config/linux/aarch64/host-config.h: Correctly handle !HAVE_IFUNC. + Add defines for HWCAP_ATOMICS and HWCAP_CPUID. + 2024-02-14 Roger Sayle <roger@nextmovesoftware.com> Victor Do Nascimento <victor.donascimento@arm.com> diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 0f449e632393..dd9c63ee07e2 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,7 @@ +2024-04-04 Jørgen Kvalsvik <j@lambda.is> + + * libgcov-merge.c (__gcov_merge_ior): New. + 2024-04-03 Wilco Dijkstra <wilco.dijkstra@arm.com> * config/aarch64/cpuinfo.c: Add HWCAP_EVTSTRM, HWCAP_CRC32, HWCAP_CPUID, diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 8bf7215b2ae8..4dd455b1af50 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2024-04-04 Tobias Burnus <tburnus@baylibre.com> + + * libgomp.texi (TR12): Honor post-TR12 directive name change; add + item about curly braces/BLOCK permitted in canonical loop nests. + 2024-04-02 Jakub Jelinek <jakub@redhat.com> * libgomp.texi (OpenMP 5.2): Fix duplicated words; with with -> From 3b36e86d6af3b305207c1aa6d56c2b350fefba65 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson <hp@axis.com> Date: Fri, 5 Apr 2024 01:36:54 +0200 Subject: [PATCH 385/551] testsuite/gcc.dg/debug/btf/btf-datasec-1.c: Handle leading-underscore I noticed my autotester for cris-elf flagging this as a regression. * gcc.dg/debug/btf/btf-datasec-1.c: Adjust pattern for targets with symbols having a leading underscore. --- gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c index 782216d3cb12..c8ebe5d07ca0 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c @@ -20,7 +20,7 @@ /* { dg-final { scan-assembler-times "0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */ /* The offset entry for each variable in a DATSEC should contain a label. */ -/* { dg-final { scan-assembler-times "(?:(?:\\.4byte|\\.long|data4\\.ua|\\.ualong|\\.uaword|\\.dword|long|dc\\.l|\\.word)\[\t \]|\\.vbyte\t4,\[\t \]?)\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 } } */ +/* { dg-final { scan-assembler-times "(?:(?:\\.4byte|\\.long|data4\\.ua|\\.ualong|\\.uaword|\\.dword|long|dc\\.l|\\.word)\[\t \]|\\.vbyte\t4,\[\t \]?)_?\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 } } */ /* { dg-final { scan-assembler-times "my_cstruct\[\t \]+\[^\n\]*bts_offset" 1 } } */ /* { dg-final { scan-assembler-times "bigarr\[\t \]+\[^\n\]*bts_offset" 1 } } */ From 4c8b3600c4856f7915281ae3ff4d97271c83a540 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson <hp@axis.com> Date: Fri, 5 Apr 2024 02:50:16 +0200 Subject: [PATCH 386/551] testsuite/gcc.target/cris/pr93372-2.c: Handle xpass from combine improvement After r14-9692-g839bc42772ba7a, a sequence that actually looks optimal is now emitted, observed at r14-9788-gb7bd2ec73d66f7. This caused an XPASS for this test. While adjusting the test, better also guard it against regressions by checking that there are no redundant move insns. That's the only test that's improved to the point of affecting test-patterns. E.g. pr93372-5.c (which references pr93372-2.c) is also improved, though it retains a redundant compare insn. (PR 93372 was about regressions from the cc0 representation; not further improvement like here, thus it's not tagged. Though, I did not double-check whether this actually *was* a regression from cc0.) * gcc.target/cris/pr93372-2.c: Tweak scan-assembler checks to cover recent combine improvement. --- gcc/testsuite/gcc.target/cris/pr93372-2.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/gcc/testsuite/gcc.target/cris/pr93372-2.c b/gcc/testsuite/gcc.target/cris/pr93372-2.c index 912069c018d5..2ef6471a990b 100644 --- a/gcc/testsuite/gcc.target/cris/pr93372-2.c +++ b/gcc/testsuite/gcc.target/cris/pr93372-2.c @@ -1,19 +1,20 @@ /* Check that eliminable compare-instructions are eliminated. */ /* { dg-do compile } */ /* { dg-options "-O2" } */ -/* { dg-final { scan-assembler-not "\tcmp|\ttest" { xfail *-*-* } } } */ -/* { dg-final { scan-assembler-not "\tnot" { xfail cc0 } } } */ -/* { dg-final { scan-assembler-not "\tlsr" { xfail cc0 } } } */ +/* { dg-final { scan-assembler-not "\tcmp|\ttest" } } */ +/* { dg-final { scan-assembler-not "\tnot" } } */ +/* { dg-final { scan-assembler-not "\tlsr" } } */ +/* We should get just one move, storing the result into *d. */ +/* { dg-final { scan-assembler-times "\tmove" 1 } } */ int f(int a, int b, int *d) { int c = a - b; - /* Whoops! We get a cmp.d with the original operands here. */ + /* We used to get a cmp.d with the original operands here. */ *d = (c == 0); - /* Whoops! While we don't get a test.d for the result here for cc0, - we get a sequence of insns: a move, a "not" and a shift of the - subtraction-result, where a simple "spl" would have done. */ + /* We used to get a suboptimal sequence, but now we get the optimal "sge" + (a.k.a "spl") re-using flags from the subtraction. */ return c >= 0; } From 12b04452b40d49bb5322653cb5716b1ebf71b73d Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Thu, 4 Apr 2024 16:18:52 +0000 Subject: [PATCH 387/551] go: Add go.install-dvi rule in go/Make-lang.in go has a go.dvi build rule, but lacks the go.install-dvi one. 2024-04-04 Christophe Lyon <christophe.lyon@linaro.org> gcc/go/ * Make-lang.in (go.install-dvi): New rule. --- gcc/go/Make-lang.in | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/gcc/go/Make-lang.in b/gcc/go/Make-lang.in index 9a31eafa2195..5c569a403892 100644 --- a/gcc/go/Make-lang.in +++ b/gcc/go/Make-lang.in @@ -175,6 +175,16 @@ go.install-pdf: doc/gccgo.pdf $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/gcc/$$f"; \ done +go.install-dvi: doc/gccgo.dvi + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc" + @for p in doc/gccgo.dvi; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(dvi__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \ + done + go.install-html: $(build_htmldir)/go @$(NORMAL_INSTALL) test -z "$(htmldir)" || $(mkinstalldirs) "$(DESTDIR)$(htmldir)" From 592536eb3c0a97a55b1019ff0216ef77e6ca847e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 5 Apr 2024 09:31:28 +0200 Subject: [PATCH 388/551] c++: Fix ICE with weird copy assignment operator [PR114572] While ctors/dtors don't return anything (undeclared void or this pointer on arm) and copy assignment operators normally return a reference to *this, it isn't invalid to return uselessly some class object which might need destructing, but the OpenMP clause handling code wasn't expecting that. The following patch fixes that. 2024-04-05 Jakub Jelinek <jakub@redhat.com> PR c++/114572 * cp-gimplify.cc (cxx_omp_clause_apply_fn): Call build_cplus_new on build_call_a result if it has class type. * testsuite/libgomp.c++/pr114572.C: New test. --- gcc/cp/cp-gimplify.cc | 4 ++++ libgomp/testsuite/libgomp.c++/pr114572.C | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 libgomp/testsuite/libgomp.c++/pr114572.C diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc index f3baae6ade75..ab5acd18c993 100644 --- a/gcc/cp/cp-gimplify.cc +++ b/gcc/cp/cp-gimplify.cc @@ -2480,6 +2480,8 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2) TREE_PURPOSE (parm), fn, i - is_method, tf_warning_or_error); t = build_call_a (fn, i, argarray); + if (MAYBE_CLASS_TYPE_P (TREE_TYPE (t))) + t = build_cplus_new (TREE_TYPE (t), t, tf_warning_or_error); t = fold_convert (void_type_node, t); t = fold_build_cleanup_point_expr (TREE_TYPE (t), t); append_to_statement_list (t, &ret); @@ -2513,6 +2515,8 @@ cxx_omp_clause_apply_fn (tree fn, tree arg1, tree arg2) TREE_PURPOSE (parm), fn, i - is_method, tf_warning_or_error); t = build_call_a (fn, i, argarray); + if (MAYBE_CLASS_TYPE_P (TREE_TYPE (t))) + t = build_cplus_new (TREE_TYPE (t), t, tf_warning_or_error); t = fold_convert (void_type_node, t); return fold_build_cleanup_point_expr (TREE_TYPE (t), t); } diff --git a/libgomp/testsuite/libgomp.c++/pr114572.C b/libgomp/testsuite/libgomp.c++/pr114572.C new file mode 100644 index 000000000000..21d5c847f8d4 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/pr114572.C @@ -0,0 +1,24 @@ +// PR c++/114572 +// { dg-do run } +// { dg-options "-fopenmp -O0" } + +#include <stdlib.h> + +struct S +{ + S () : s (0) {} + ~S () {} + S operator= (const S &x) { s = x.s; return *this; } + int s; +}; + +int +main () +{ + S s; + #pragma omp parallel for lastprivate(s) + for (int i = 0; i < 10; ++i) + s.s = i; + if (s.s != 9) + abort (); +} From effd947fcc2bbe0dfbc7d470eab4bc65bd9b46c8 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 5 Apr 2024 11:05:01 +0200 Subject: [PATCH 389/551] testsuite: Fix up error on gcov1.d MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On Fri, Feb 23, 2024 at 12:18:00PM +0100, Jørgen Kvalsvik wrote: > This is a mostly straight port from the gcov-19.c tests from the C test > suite. The only notable differences from C to D are that D flips the > true/false outcomes for loop headers, and the D front end ties loop and > ternary conditions to slightly different locus. > > The test for >64 conditions warning is disabled as it either needs > support from the testing framework or a something similar to #pragma GCC > diagnostic push to not cause a test failure from detecting a warning. > > gcc/testsuite/ChangeLog: > > * gdc.dg/gcov.exp: New test. > * gdc.dg/gcov1.d: New test. Unfortunately, this doesn't work. I see PASS: gdc.dg/gcov1.d execution test ERROR: (DejaGnu) proc "run-gcov conditions { --conditions gcov1.d }" does not exist. The error code is TCL LOOKUP COMMAND run-gcov The info on the error is: invalid command name "run-gcov" while executing "::tcl_unknown run-gcov conditions { --conditions gcov1.d }" ("uplevel" body line 1) invoked from within "uplevel 1 ::tcl_unknown $args" ERROR: gdc.dg/gcov1.d : error executing dg-final: invalid command name "run-gcov" both on x86_64-linux and i686-linux. The problem is that the test hasn't been added to a new directory, but to a directory already covered by a different *.exp file - dg.exp. Now, usually either one has a test directory like gcc.misc-tests where there are many *.exp files but each *.exp file globs for its own tests, or there is one *.exp per directory and covers everything in there. By having both dg.exp and gcov.exp in the same directory with dg.exp covering all *.d files in there and gcov gcov*.d in there, the gcov*.d tests are tested twice, once using the dg.exp driver and once using gcov.exp driver. With the latter, they do work properly, with the former they don't because gcov.exp lib file isn't loaded and so run-gcov isn't available. The following patch fixes that similarly how g++.dg/modules/modules.exp, gcc.target/s390/s390.exp or gcc.target/i386/i386.exp deal with that, by pruning some tests based on glob patterns from the list. 2024-04-05 Jakub Jelinek <jakub@redhat.com> * gdc.dg/dg.exp: Prune gcov*.d from the list of tests to run. * gdc.dg/gcov.exp: Update copyright years. --- gcc/testsuite/gdc.dg/dg.exp | 3 ++- gcc/testsuite/gdc.dg/gcov.exp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gdc.dg/dg.exp b/gcc/testsuite/gdc.dg/dg.exp index 786b5359b85c..50527c5372f5 100644 --- a/gcc/testsuite/gdc.dg/dg.exp +++ b/gcc/testsuite/gdc.dg/dg.exp @@ -30,7 +30,8 @@ dg-init # Main loop. gdc-dg-runtest [lsort \ - [glob -nocomplain $srcdir/$subdir/*.d ] ] "" $DEFAULT_DFLAGS + [prune [glob -nocomplain $srcdir/$subdir/*.d ] \ + $srcdir/$subdir/gcov*.d ] ] "" $DEFAULT_DFLAGS # All done. dg-finish diff --git a/gcc/testsuite/gdc.dg/gcov.exp b/gcc/testsuite/gdc.dg/gcov.exp index 4218771b2080..ea70ea85f286 100644 --- a/gcc/testsuite/gdc.dg/gcov.exp +++ b/gcc/testsuite/gdc.dg/gcov.exp @@ -1,4 +1,4 @@ -# Copyright (C) 1997-2023 Free Software Foundation, Inc. +# Copyright (C) 1997-2024 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by From 9ab8fdfeef5b1a47b358e08a98177b2fad65fed9 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Fri, 5 Apr 2024 10:16:41 +0200 Subject: [PATCH 390/551] middle-end/114599 - fix bitmap allocation for check_ifunc_callee_symtab_nodes There's no default bitmap obstack during global CTORs, so allocate the bitmap locally. PR middle-end/114599 PR gcov-profile/114115 * symtab.cc (ifunc_ref_map): Do not use auto_bitmap. (is_caller_ifunc_resolver): Optimize bitmap_bit_p/bitmap_set_bit pair. (symtab_node::check_ifunc_callee_symtab_nodes): Properly allocate ifunc_ref_map here. --- gcc/symtab.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/gcc/symtab.cc b/gcc/symtab.cc index 3256133891da..3b018ab3ea21 100644 --- a/gcc/symtab.cc +++ b/gcc/symtab.cc @@ -1383,7 +1383,7 @@ check_ifunc_resolver (cgraph_node *node, void *data) return false; } -static auto_bitmap ifunc_ref_map; +static bitmap ifunc_ref_map; /* Return true if any caller of NODE is an ifunc resolver. */ @@ -1404,9 +1404,8 @@ is_caller_ifunc_resolver (cgraph_node *node) /* Skip if it has been visited. */ unsigned int uid = e->caller->get_uid (); - if (bitmap_bit_p (ifunc_ref_map, uid)) + if (!bitmap_set_bit (ifunc_ref_map, uid)) continue; - bitmap_set_bit (ifunc_ref_map, uid); if (is_caller_ifunc_resolver (e->caller)) { @@ -1437,6 +1436,9 @@ symtab_node::check_ifunc_callee_symtab_nodes (void) { symtab_node *node; + bitmap_obstack_initialize (NULL); + ifunc_ref_map = BITMAP_ALLOC (NULL); + FOR_EACH_SYMBOL (node) { cgraph_node *cnode = dyn_cast <cgraph_node *> (node); @@ -1455,7 +1457,8 @@ symtab_node::check_ifunc_callee_symtab_nodes (void) cnode->called_by_ifunc_resolver = true; } - bitmap_clear (ifunc_ref_map); + BITMAP_FREE (ifunc_ref_map); + bitmap_obstack_release (NULL); } /* Verify symbol table for internal consistency. */ From 9627cbbadbb935943c3d8336c057a021bbac2000 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 5 Apr 2024 12:15:06 +0200 Subject: [PATCH 391/551] libatomic: Regenerate configure properly Seems configure hasn't been regenerated properly after the last acinclude.m4 change. 2024-04-05 Jakub Jelinek <jakub@redhat.com> * configure: Regenerate. --- libatomic/configure | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libatomic/configure b/libatomic/configure index 8ca72f08dfd2..32cb3ecac262 100755 --- a/libatomic/configure +++ b/libatomic/configure @@ -11456,7 +11456,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11461 "configure" +#line 11459 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11562,7 +11562,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11567 "configure" +#line 11565 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14739,6 +14739,7 @@ _ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if ${ac_cv_c_bigendian+:} false; then : @@ -16031,6 +16032,7 @@ if test -z "${ENABLE_DARWIN_AT_RPATH_TRUE}" && test -z "${ENABLE_DARWIN_AT_RPATH as_fn_error $? "conditional \"ENABLE_DARWIN_AT_RPATH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi + if test -z "${LIBAT_BUILD_VERSIONED_SHLIB_TRUE}" && test -z "${LIBAT_BUILD_VERSIONED_SHLIB_FALSE}"; then as_fn_error $? "conditional \"LIBAT_BUILD_VERSIONED_SHLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 From 8057f9aa1f7e70490064de796d7a8d42d446caf8 Mon Sep 17 00:00:00 2001 From: Martin Uecker <uecker@tugraz.at> Date: Fri, 5 Apr 2024 12:14:56 +0200 Subject: [PATCH 392/551] Revert "Fix ICE with -g and -std=c23 related to incomplete types [PR114361]" This reverts commit 871bb5ad2dd56343d80b6a6d269e85efdc9999e5 because it breaks LTO and needs a bit more work. See PR 114574. --- gcc/c/c-decl.cc | 1 - gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c | 14 -------------- gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c | 13 ------------- gcc/testsuite/gcc.dg/pr114361.c | 11 ----------- 4 files changed, 39 deletions(-) delete mode 100644 gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c delete mode 100644 gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c delete mode 100644 gcc/testsuite/gcc.dg/pr114361.c diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index f2083b9d96fb..c747abe9f4ef 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -9722,7 +9722,6 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes, C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t); C_TYPE_VARIABLY_MODIFIED (x) = C_TYPE_VARIABLY_MODIFIED (t); C_TYPE_INCOMPLETE_VARS (x) = NULL_TREE; - TYPE_CANONICAL (x) = TYPE_CANONICAL (t); } /* Update type location to the one of the definition, instead of e.g. diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c deleted file mode 100644 index 82d652569e93..000000000000 --- a/gcc/testsuite/gcc.dg/c23-tag-incomplete-1.c +++ /dev/null @@ -1,14 +0,0 @@ -/* { dg-do compile } - * { dg-options "-std=c23 -g" } */ - -struct a; -typedef struct a b; - -void g() { - struct a { b* x; }; -} - -struct a { b* x; }; - - - diff --git a/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c b/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c deleted file mode 100644 index bc47a04ece53..000000000000 --- a/gcc/testsuite/gcc.dg/c23-tag-incomplete-2.c +++ /dev/null @@ -1,13 +0,0 @@ -/* { dg-do compile } - * { dg-options "-std=c23 -g" } */ - -struct a; -typedef struct a b; - -void f() { - extern struct a { b* x; } t; -} - -extern struct a { b* x; } t; - - diff --git a/gcc/testsuite/gcc.dg/pr114361.c b/gcc/testsuite/gcc.dg/pr114361.c deleted file mode 100644 index 0f3feb53566b..000000000000 --- a/gcc/testsuite/gcc.dg/pr114361.c +++ /dev/null @@ -1,11 +0,0 @@ -/* PR c/114361 */ -/* { dg-do compile } */ -/* { dg-options "-std=gnu23 -g" } */ - -void f() -{ - typedef struct foo bar; - typedef __typeof( ({ (struct foo { bar *x; }){ }; }) ) wuz; - struct foo { wuz *x; }; -} - From 679f81a32f706645f45900fdb1659fb5fe607f77 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Fri, 5 Apr 2024 14:04:53 +0200 Subject: [PATCH 393/551] nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl: Restore 'libgomp.c/reverse-offload-sm30.c' testing With commit 7520a4992c94254016085a461c58c972497c4483 "nvptx: In mkoffload.cc, call diagnostic_color_init + gcc_init_libintl", we regressed: [-PASS:-]{+FAIL:+} libgomp.c/reverse-offload-sm30.c at line 15 (test for warnings, line ) [-PASS:-]{+FAIL:+} libgomp.c/reverse-offload-sm30.c (test for excess errors) libgomp/ * testsuite/libgomp.c/reverse-offload-sm30.c: Set 'GCC_COLORS' to the empty string. --- libgomp/testsuite/libgomp.c/reverse-offload-sm30.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c b/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c index 7f10fd4ded9d..cae75f034626 100644 --- a/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c +++ b/libgomp/testsuite/libgomp.c/reverse-offload-sm30.c @@ -12,4 +12,7 @@ main () return 0; } +/* The 'mkoffload's currently don't obey '-fno-diagnostics-color' etc., so use a different way to effect the same thing: + { dg-set-compiler-env-var GCC_COLORS "" } + ..., so that the following regexp doesn't have to deal with color code escape sequences. */ /* { dg-warning "'omp requires reverse_offload' requires at least 'sm_35' for '-foffload-options=nvptx-none=-march=' - disabling offload-code generation for this device type" "" { target *-*-* } 0 } */ From 6f1005649ff5f544eefba29ba4fb121dba0c6683 Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Thu, 4 Apr 2024 16:15:12 +0000 Subject: [PATCH 394/551] modula2: Add m2.install-dvi in gcc/m2/Make-lang.in m2 has a m2.dvi build rule, but lacks the m2.install-dvi one. 2024-04-04 Christophe Lyon <christophe.lyon@linaro.org> gcc/m2/ * Make-lang.in (m2.install-dvi): New rule. --- gcc/m2/Make-lang.in | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gcc/m2/Make-lang.in b/gcc/m2/Make-lang.in index e56240b4c440..0abd8ce14555 100644 --- a/gcc/m2/Make-lang.in +++ b/gcc/m2/Make-lang.in @@ -162,6 +162,18 @@ m2.dvi: doc/m2.dvi doc/m2.dvi: $(TEXISRC) $(objdir)/m2/images/gnu.eps $(TEXI2DVI) -c -I $(objdir)/m2 -I $(srcdir)/doc/include -o $@ $(srcdir)/doc/gm2.texi +M2_DVIFILES = doc/m2.dvi + +m2.install-dvi: $(M2_DVIFILES) + @$(NORMAL_INSTALL) + test -z "$(dvidir)/gcc" || $(mkinstalldirs) "$(DESTDIR)$(dvidir)/gcc" + @list='$(M2_DVIFILES)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(dvi__strip_dir) \ + echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/gcc/$$f'"; \ + $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/gcc/$$f"; \ + done + doc/m2.ps: doc/m2.dvi dvips -o $@ $< From a844095e17c1a5aada1364c6f6eaade87ead463c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 5 Apr 2024 14:56:14 +0200 Subject: [PATCH 395/551] vect: Don't clear base_misaligned in update_epilogue_loop_vinfo [PR114566] The following testcase is miscompiled, because in the vectorized epilogue the vectorizer assumes it can use aligned loads/stores (if the base decl gets alignment increased), but it actually doesn't increase that. This is because r10-4203-g97c1460367 added the hunk following patch removes. The explanation feels reasonable, but actually it is not true as the testcase proves. The thing is, we vectorize the main loop with 64-byte vectors and the corresponding data refs have base_alignment 16 (the a array has DECL_ALIGN 128) and offset_alignment 32. Now, because of the offset_alignment 32 rather than 64, we need to use unaligned loads/stores in the main loop (and ditto in the first load/store in vectorized epilogue). But the second load/store in the vectorized epilogue uses only 32-byte vectors and because it is a multiple of offset_alignment, it checks if we could increase alignment of the a VAR_DECL, the function returns true, sets base_misaligned = true and says the access is then aligned. But when update_epilogue_loop_vinfo clears base_misaligned with the assumption that the var had to have the alignment increased already, the update of DECL_ALIGN doesn't happen anymore. Now, I'd think this base_alignment = false was needed before r10-4030-gd2db7f7901 change was committed where it incorrectly overwrote DECL_ALIGN even if it was already larger, rather than just always increasing it. But with that change in, it doesn't make sense to me anymore. Note, the testcase is latent on the trunk, but reproduces on the 13 branch. 2024-04-05 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114566 * tree-vect-loop.cc (update_epilogue_loop_vinfo): Don't clear base_misaligned. * gcc.target/i386/avx512f-pr114566.c: New test. --- .../gcc.target/i386/avx512f-pr114566.c | 34 +++++++++++++++++++ gcc/tree-vect-loop.cc | 8 +---- 2 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/avx512f-pr114566.c diff --git a/gcc/testsuite/gcc.target/i386/avx512f-pr114566.c b/gcc/testsuite/gcc.target/i386/avx512f-pr114566.c new file mode 100644 index 000000000000..abfab1bfcd5b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/avx512f-pr114566.c @@ -0,0 +1,34 @@ +/* PR tree-optimization/114566 */ +/* { dg-do run } */ +/* { dg-options "-O3 -mavx512f" } */ +/* { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } */ +/* { dg-require-effective-target avx512f } */ + +#define AVX512F +#include "avx512f-helper.h" + +__attribute__((noipa)) int +foo (float x, float y) +{ + float a[8][56]; + __builtin_memset (a, 0, sizeof (a)); + + for (int j = 0; j < 8; j++) + for (int k = 0; k < 56; k++) + { + float b = k * y; + if (b < 0.) + b = 0.; + if (b > 0.) + b = 0.; + a[j][k] += b; + } + + return __builtin_log (x); +} + +void +TEST (void) +{ + foo (86.25f, 0.625f); +} diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index 984636edbc5f..3ffcac8c6135 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -11590,9 +11590,7 @@ find_in_mapping (tree t, void *context) corresponding dr_vec_info need to be reconnected to the EPILOGUE's stmt_vec_infos, their statements need to point to their corresponding copy, if they are gather loads or scatter stores then their reference needs to be - updated to point to its corresponding copy and finally we set - 'base_misaligned' to false as we have already peeled for alignment in the - prologue of the main loop. */ + updated to point to its corresponding copy. */ static void update_epilogue_loop_vinfo (class loop *epilogue, tree advance) @@ -11736,10 +11734,6 @@ update_epilogue_loop_vinfo (class loop *epilogue, tree advance) } DR_STMT (dr) = STMT_VINFO_STMT (stmt_vinfo); stmt_vinfo->dr_aux.stmt = stmt_vinfo; - /* The vector size of the epilogue is smaller than that of the main loop - so the alignment is either the same or lower. This means the dr will - thus by definition be aligned. */ - STMT_VINFO_DR_INFO (stmt_vinfo)->base_misaligned = false; } epilogue_vinfo->shared->datarefs_copy.release (); From 8c9063825ce726fcbbc067d8a6d062cc2d4acf5e Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Tue, 2 Apr 2024 12:59:38 -0400 Subject: [PATCH 396/551] c++: constexpr error with fn redecl in local scope [PR111132] We evaluate constexpr functions on the original, pre-genericization bodies. That means that the function body we're evaluating will not have gone through cp_genericize_r's "Map block scope extern declarations to visible declarations with the same name and type in outer scopes if any". Here: constexpr bool bar() { return true; } // #1 constexpr bool foo() { constexpr bool bar(void); // #2 return bar(); } it means that we: 1) register_constexpr_fundef (#1) 2) cp_genericize (#1) nothing interesting happens 3) register_constexpr_fundef (foo) does copy_fn, so we have two copies of the BIND_EXPR 4) cp_genericize (foo) this remaps #2 to #1, but only on one copy of the BIND_EXPR 5) retrieve_constexpr_fundef (foo) we find it, no problem 6) retrieve_constexpr_fundef (#2) and here #2 isn't found in constexpr_fundef_table, because we're working on the BIND_EXPR copy where #2 wasn't mapped to #1 so we fail. We've only registered #1. It should work to use DECL_LOCAL_DECL_ALIAS (which used to be extern_decl_map). We evaluate constexpr functions on pre-cp_fold bodies to avoid diagnostic problems, but the remapping I'm proposing should not interfere with diagnostics. This is not a problem for a global scope redeclaration; there we go through duplicate_decls which keeps the DECL_UID: DECL_UID (olddecl) = olddecl_uid; and DECL_UID is what constexpr_fundef_hasher::hash uses. PR c++/111132 gcc/cp/ChangeLog: * constexpr.cc (get_function_named_in_call): Use cp_get_fndecl_from_callee. * cvt.cc (cp_get_fndecl_from_callee): If there's a DECL_LOCAL_DECL_ALIAS, use it. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/constexpr-redeclaration3.C: New test. * g++.dg/cpp0x/constexpr-redeclaration4.C: New test. --- gcc/cp/constexpr.cc | 10 ++++------ gcc/cp/cvt.cc | 18 ++++++++++++++++-- .../g++.dg/cpp0x/constexpr-redeclaration3.C | 13 +++++++++++++ .../g++.dg/cpp0x/constexpr-redeclaration4.C | 14 ++++++++++++++ 4 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index fa346fe01c9c..410ccdf597fd 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -702,16 +702,14 @@ build_constexpr_constructor_member_initializers (tree type, tree body) /* We have an expression tree T that represents a call, either CALL_EXPR or AGGR_INIT_EXPR. If the call is lexically to a named function, - retrun the _DECL for that function. */ + return the _DECL for that function. */ static tree get_function_named_in_call (tree t) { - tree fun = cp_get_callee (t); - if (fun && TREE_CODE (fun) == ADDR_EXPR - && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL) - fun = TREE_OPERAND (fun, 0); - return fun; + tree callee = cp_get_callee (t); + tree fun = cp_get_fndecl_from_callee (callee, /*fold*/false); + return fun ? fun : callee; } /* Subroutine of check_constexpr_fundef. BODY is the body of a function diff --git a/gcc/cp/cvt.cc b/gcc/cp/cvt.cc index cbed847b343a..db086c017e89 100644 --- a/gcc/cp/cvt.cc +++ b/gcc/cp/cvt.cc @@ -1001,8 +1001,22 @@ cp_get_fndecl_from_callee (tree fn, bool fold /* = true */) { if (fn == NULL_TREE) return fn; + + /* We evaluate constexpr functions on the original, pre-genericization + bodies. So block-scope extern declarations have not been mapped to + declarations in outer scopes. Use the namespace-scope declaration, + if any, so that retrieve_constexpr_fundef can find it (PR111132). */ + auto fn_or_local_alias = [] (tree f) + { + if (DECL_LOCAL_DECL_P (f)) + if (tree alias = DECL_LOCAL_DECL_ALIAS (f)) + if (alias != error_mark_node) + return alias; + return f; + }; + if (TREE_CODE (fn) == FUNCTION_DECL) - return fn; + return fn_or_local_alias (fn); tree type = TREE_TYPE (fn); if (type == NULL_TREE || !INDIRECT_TYPE_P (type)) return NULL_TREE; @@ -1013,7 +1027,7 @@ cp_get_fndecl_from_callee (tree fn, bool fold /* = true */) || TREE_CODE (fn) == FDESC_EXPR) fn = TREE_OPERAND (fn, 0); if (TREE_CODE (fn) == FUNCTION_DECL) - return fn; + return fn_or_local_alias (fn); return NULL_TREE; } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C new file mode 100644 index 000000000000..2b41b456fc34 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration3.C @@ -0,0 +1,13 @@ +// PR c++/111132 +// { dg-do compile { target c++11 } } + +constexpr bool bar(void) { + return true; +} + +constexpr bool foo() { + constexpr bool bar(void); + return bar(); +} + +static_assert(foo(), ""); diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C new file mode 100644 index 000000000000..c58247218c67 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-redeclaration4.C @@ -0,0 +1,14 @@ +// PR c++/111132 +// { dg-do compile { target c++11 } } + +constexpr bool bar(void) { + return true; +} + +constexpr bool bar(void); + +constexpr bool foo() { + return bar(); +} + +static_assert(foo(), ""); From e4d074321bcafa6504ee6b77754b4450a4622f9d Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Thu, 4 Apr 2024 19:28:00 -0400 Subject: [PATCH 397/551] c-family: remove dead #undef The #undef was added in r0-90320-g100d537d7a7b5c but it never did anything. gcc/c-family/ChangeLog: * c-warn.cc (warn_about_parentheses): Remove an #undef. --- gcc/c-family/c-warn.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/gcc/c-family/c-warn.cc b/gcc/c-family/c-warn.cc index 8168696fa45d..bff87be05ae3 100644 --- a/gcc/c-family/c-warn.cc +++ b/gcc/c-family/c-warn.cc @@ -2176,7 +2176,6 @@ warn_about_parentheses (location_t loc, enum tree_code code, } return; } -#undef NOT_A_BOOLEAN_EXPR_P } /* If LABEL (a LABEL_DECL) has not been used, issue a warning. */ From 67cbb1c638d6ab3a9cb77e674541e2b291fb67df Mon Sep 17 00:00:00 2001 From: Richard Sandiford <richard.sandiford@arm.com> Date: Fri, 5 Apr 2024 14:47:15 +0100 Subject: [PATCH 398/551] aarch64: Fix bogus cnot optimisation [PR114603] aarch64-sve.md had a pattern that combined: cmpeq pb.T, pa/z, zc.T, #0 mov zd.T, pb/z, #1 into: cnot zd.T, pa/m, zc.T But this is only valid if pa.T is a ptrue. In other cases, the original would set inactive elements of zd.T to 0, whereas the combined form would copy elements from zc.T. gcc/ PR target/114603 * config/aarch64/aarch64-sve.md (@aarch64_pred_cnot<mode>): Replace with... (@aarch64_ptrue_cnot<mode>): ...this, requiring operand 1 to be a ptrue. (*cnot<mode>): Require operand 1 to be a ptrue. * config/aarch64/aarch64-sve-builtins-base.cc (svcnot_impl::expand): Use aarch64_ptrue_cnot<mode> for _x operations that are predicated with a ptrue. Represent other _x operations as fully-defined _m operations. gcc/testsuite/ PR target/114603 * gcc.target/aarch64/sve/acle/general/cnot_1.c: New test. --- .../aarch64/aarch64-sve-builtins-base.cc | 25 ++++++++++++------- gcc/config/aarch64/aarch64-sve.md | 22 ++++++++-------- .../aarch64/sve/acle/general/cnot_1.c | 23 +++++++++++++++++ 3 files changed, 50 insertions(+), 20 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index 257ca5bf6adc..5be2315a3c6c 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -517,15 +517,22 @@ class svcnot_impl : public function_base expand (function_expander &e) const override { machine_mode mode = e.vector_mode (0); - if (e.pred == PRED_x) - { - /* The pattern for CNOT includes an UNSPEC_PRED_Z, so needs - a ptrue hint. */ - e.add_ptrue_hint (0, e.gp_mode (0)); - return e.use_pred_x_insn (code_for_aarch64_pred_cnot (mode)); - } - - return e.use_cond_insn (code_for_cond_cnot (mode), 0); + machine_mode pred_mode = e.gp_mode (0); + /* The underlying _x pattern is effectively: + + dst = src == 0 ? 1 : 0 + + rather than an UNSPEC_PRED_X. Using this form allows autovec + constructs to be matched by combine, but it means that the + predicate on the src == 0 comparison must be all-true. + + For simplicity, represent other _x operations as fully-defined _m + operations rather than using a separate bespoke pattern. */ + if (e.pred == PRED_x + && gen_lowpart (pred_mode, e.args[0]) == CONSTM1_RTX (pred_mode)) + return e.use_pred_x_insn (code_for_aarch64_ptrue_cnot (mode)); + return e.use_cond_insn (code_for_cond_cnot (mode), + e.pred == PRED_x ? 1 : 0); } }; diff --git a/gcc/config/aarch64/aarch64-sve.md b/gcc/config/aarch64/aarch64-sve.md index eca8623e587a..0434358122d2 100644 --- a/gcc/config/aarch64/aarch64-sve.md +++ b/gcc/config/aarch64/aarch64-sve.md @@ -3363,24 +3363,24 @@ ;; - CNOT ;; ------------------------------------------------------------------------- -;; Predicated logical inverse. -(define_expand "@aarch64_pred_cnot<mode>" +;; Logical inverse, predicated with a ptrue. +(define_expand "@aarch64_ptrue_cnot<mode>" [(set (match_operand:SVE_FULL_I 0 "register_operand") (unspec:SVE_FULL_I [(unspec:<VPRED> [(match_operand:<VPRED> 1 "register_operand") - (match_operand:SI 2 "aarch64_sve_ptrue_flag") + (const_int SVE_KNOWN_PTRUE) (eq:<VPRED> - (match_operand:SVE_FULL_I 3 "register_operand") - (match_dup 4))] + (match_operand:SVE_FULL_I 2 "register_operand") + (match_dup 3))] UNSPEC_PRED_Z) - (match_dup 5) - (match_dup 4)] + (match_dup 4) + (match_dup 3)] UNSPEC_SEL))] "TARGET_SVE" { - operands[4] = CONST0_RTX (<MODE>mode); - operands[5] = CONST1_RTX (<MODE>mode); + operands[3] = CONST0_RTX (<MODE>mode); + operands[4] = CONST1_RTX (<MODE>mode); } ) @@ -3389,7 +3389,7 @@ (unspec:SVE_I [(unspec:<VPRED> [(match_operand:<VPRED> 1 "register_operand") - (match_operand:SI 5 "aarch64_sve_ptrue_flag") + (const_int SVE_KNOWN_PTRUE) (eq:<VPRED> (match_operand:SVE_I 2 "register_operand") (match_operand:SVE_I 3 "aarch64_simd_imm_zero"))] @@ -11001,4 +11001,4 @@ GET_MODE (operands[2])); return "sel\t%0.<Vetype>, %3, %2.<Vetype>, %1.<Vetype>"; } -) \ No newline at end of file +) diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c new file mode 100644 index 000000000000..b1a489f0cf03 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/cnot_1.c @@ -0,0 +1,23 @@ +/* { dg-options "-O2" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#include <arm_sve.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** foo: +** cmpeq (p[0-7])\.s, p0/z, z0\.s, #0 +** mov z0\.s, \1/z, #1 +** ret +*/ +svint32_t foo(svbool_t pg, svint32_t y) +{ + return svsel(svcmpeq(pg, y, 0), svdup_s32(1), svdup_s32(0)); +} + +#ifdef __cplusplus +} +#endif From 0c22f67526d72aa451633d5212259a8f75e59a44 Mon Sep 17 00:00:00 2001 From: Mark Wielaard <mark@klomp.org> Date: Fri, 5 Apr 2024 17:22:16 +0200 Subject: [PATCH 399/551] Regenerate common.opt.urls The new support for gcov modified condition/decision coverage introduced two new flags for gcc, -Wcoverage-too-many-conditions and -fcondition-coverage. But didn't regenerate the gcc/common.opt.urls. Fixes: 08a52331803f ("Add condition coverage (MC/DC)") gcc/ChangeLog: * common.opt.urls: Regenerate. --- gcc/common.opt.urls | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls index db4354989fcc..f71ed80a34b4 100644 --- a/gcc/common.opt.urls +++ b/gcc/common.opt.urls @@ -280,6 +280,9 @@ UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-mismatch) Wcoverage-invalid-line-number UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-invalid-line-number) +Wcoverage-too-many-conditions +UrlSuffix(gcc/Warning-Options.html#index-Wcoverage-too-many-conditions) + Wmissing-profile UrlSuffix(gcc/Warning-Options.html#index-Wmissing-profile) @@ -1057,6 +1060,9 @@ UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-abs-path) ; duplicate: 'gcc/Instrumentation-Options.html#index-fprofile-arcs' ; duplicate: 'gcc/Other-Builtins.html#index-fprofile-arcs-1' +fcondition-coverage +UrlSuffix(gcc/Instrumentation-Options.html#index-fcondition-coverage) + fprofile-dir= UrlSuffix(gcc/Instrumentation-Options.html#index-fprofile-dir) From 8cd0d29270d4ed86c69b80c08de66dcb6c1e22fe Mon Sep 17 00:00:00 2001 From: Martin Jambor <mjambor@suse.cz> Date: Fri, 5 Apr 2024 18:18:39 +0200 Subject: [PATCH 400/551] ipa: Force args obtined through pass-through maps to the expected type (PR 113964) Interactions of IPA-CP and IPA-SRA on the same data is a rather big source of issues, I'm afraid. PR 113964 is a situation where IPA-CP propagates an unsigned short in a union parameter into a function which itself calls a different function which has a same union parameter and both these union parameters are split with IPA-SRA. The leaf function however uses a signed short member of the union. In the calling function, we get the unsigned constant as the replacement for the union and it is then passed in the call without any type compatibility checks. Apparently on riscv64 it matters whether the parameter is signed or unsigned short and so the leaf function can see different values. Fixed by using useless_type_conversion_p at the appropriate place and if it fails, use force_value_to type as elsewhere in similar situations. gcc/ChangeLog: 2024-04-04 Martin Jambor <mjambor@suse.cz> PR ipa/113964 * ipa-param-manipulation.cc (ipa_param_adjustments::modify_call): Force values obtined through pass-through maps to the expected split type. gcc/testsuite/ChangeLog: 2024-04-04 Patrick O'Neill <patrick@rivosinc.com> Martin Jambor <mjambor@suse.cz> PR ipa/113964 * gcc.dg/ipa/pr114247.c: New test. --- gcc/ipa-param-manipulation.cc | 6 ++++++ gcc/testsuite/gcc.dg/ipa/pr114247.c | 31 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/ipa/pr114247.c diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc index f4b5e850c2b1..ad36b8389c00 100644 --- a/gcc/ipa-param-manipulation.cc +++ b/gcc/ipa-param-manipulation.cc @@ -740,6 +740,12 @@ ipa_param_adjustments::modify_call (cgraph_edge *cs, } if (repl) { + if (!useless_type_conversion_p(apm->type, repl->typed.type)) + { + repl = force_value_to_type (apm->type, repl); + repl = force_gimple_operand_gsi (&gsi, repl, + true, NULL, true, GSI_SAME_STMT); + } vargs.quick_push (repl); continue; } diff --git a/gcc/testsuite/gcc.dg/ipa/pr114247.c b/gcc/testsuite/gcc.dg/ipa/pr114247.c new file mode 100644 index 000000000000..60aa2bc0122f --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr114247.c @@ -0,0 +1,31 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fsigned-char -fno-strict-aliasing -fwrapv" } */ + +union a { + unsigned short b; + int c; + signed short d; +}; +int e, f = 1, g; +long h; +const int **i; +void j(union a k, int l, unsigned m) { + const int *a[100]; + i = &a[0]; + h = k.d; +} +static int o(union a k) { + k.d = -1; + while (1) + if (f) + break; + j(k, g, e); + return 0; +} +int main() { + union a n = {1}; + o(n); + if (h != -1) + __builtin_abort(); + return 0; +} From e7d015b2506a1d9e84d9f7182e42e097147527e1 Mon Sep 17 00:00:00 2001 From: Alex Coplan <alex.coplan@arm.com> Date: Fri, 5 Apr 2024 17:53:47 +0100 Subject: [PATCH 401/551] aarch64: Fix whitespace in aarch64-ldp-fusion.cc:alias_walker I spotted this whitespace error during the review of https://gcc.gnu.org/pipermail/gcc-patches/2024-April/648846.html gcc/ChangeLog: * config/aarch64/aarch64-ldp-fusion.cc (struct alias_walker): Fix double space after const qualifier on valid (). --- gcc/config/aarch64/aarch64-ldp-fusion.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/aarch64/aarch64-ldp-fusion.cc b/gcc/config/aarch64/aarch64-ldp-fusion.cc index 22ed95eb743c..365dcf48b221 100644 --- a/gcc/config/aarch64/aarch64-ldp-fusion.cc +++ b/gcc/config/aarch64/aarch64-ldp-fusion.cc @@ -2138,7 +2138,7 @@ struct alias_walker { virtual bool conflict_p (int &budget) const = 0; virtual insn_info *insn () const = 0; - virtual bool valid () const = 0; + virtual bool valid () const = 0; virtual void advance () = 0; }; From 2b2d3a135a43cbafadd8957e0b2543f38c390437 Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Fri, 5 Apr 2024 13:40:33 -0400 Subject: [PATCH 402/551] c++: add fixed test [PR91079] Fixed by r12-2975. PR c++/91079 DR 1881 gcc/testsuite/ChangeLog: * g++.dg/ext/is_std_layout5.C: New test. --- gcc/testsuite/g++.dg/ext/is_std_layout5.C | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 gcc/testsuite/g++.dg/ext/is_std_layout5.C diff --git a/gcc/testsuite/g++.dg/ext/is_std_layout5.C b/gcc/testsuite/g++.dg/ext/is_std_layout5.C new file mode 100644 index 000000000000..875f3c0948d4 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_std_layout5.C @@ -0,0 +1,13 @@ +// PR c++/91079 +// DR 1881 - Standard-layout classes and unnamed bit-fields +// { dg-do compile { target c++11 } } + +struct A { int a : 4; }; +struct B : A { int b : 3; }; +static_assert(__is_standard_layout(A), ""); +static_assert(!__is_standard_layout(B), ""); + +struct C { int : 0; }; +struct D : C { int : 0; }; +static_assert(__is_standard_layout(C), ""); +static_assert(!__is_standard_layout(D), ""); From 75b49c0e9012f5ecef0d32f3f6a0d8da66517576 Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Fri, 5 Apr 2024 10:54:58 +0100 Subject: [PATCH 403/551] testsuite, Darwin: Account for block labels in function body scans. When we have '-O3 -g' we emit a bunch of LB{B,E} local labels which were not currently being discarded, leading to some test fails. Fixed by adding this case to the ignored labels. gcc/testsuite/ChangeLog: * lib/scanasm.exp: Add 'LB*' to the local labels that are ignored for Darwin. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/testsuite/lib/scanasm.exp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/testsuite/lib/scanasm.exp b/gcc/testsuite/lib/scanasm.exp index 741a5a048b81..6cf9997240de 100644 --- a/gcc/testsuite/lib/scanasm.exp +++ b/gcc/testsuite/lib/scanasm.exp @@ -895,7 +895,7 @@ proc configure_check-function-bodies { config } { # example). set up_config(fluff) {^\s*(?://)} } elseif { [istarget *-*-darwin*] } { - set up_config(fluff) {^\s*(?:\.|//|@)|^L[0-9ACESV]} + set up_config(fluff) {^\s*(?:\.|//|@)|^L[0-9ABCESV]} } else { # Skip lines beginning with labels ('.L[...]:') or other directives # ('.align', '.cfi_startproc', '.quad [...]', '.text', etc.), '//' or From 4b02dd48f531ea88587edd2b75b6e5243b4389e8 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Fri, 5 Apr 2024 14:49:53 -0400 Subject: [PATCH 404/551] analyzer: respect GCC_COLORS in out-of-bounds diagrams [PR114588] gcc/analyzer/ChangeLog: PR analyzer/114588 * access-diagram.cc (access_diagram_impl::access_diagram_impl): Replace hardcoded colors for valid_style and invalid_style with calls to text_art::get_style_from_color_cap_name. gcc/ChangeLog: PR analyzer/114588 * diagnostic-color.cc (color_dict): Add "valid" and "invalid" as color capability names. * doc/invoke.texi: Document them in description of GCC_COLORS. * text-art/style.cc: Include "diagnostic-color.h". (text_art::get_style_from_color_cap_name): New. * text-art/types.h (get_style_from_color_cap_name): New decl. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/access-diagram.cc | 8 ++------ gcc/diagnostic-color.cc | 2 ++ gcc/doc/invoke.texi | 10 +++++++++- gcc/text-art/style.cc | 18 ++++++++++++++++++ gcc/text-art/types.h | 2 ++ 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access-diagram.cc index 4cb6570e90b9..85e1049bb898 100644 --- a/gcc/analyzer/access-diagram.cc +++ b/gcc/analyzer/access-diagram.cc @@ -2059,14 +2059,10 @@ class access_diagram_impl : public vbox_widget /* Register painting styles. */ { - style valid_style; - valid_style.m_fg_color = style::named_color::GREEN; - valid_style.m_bold = true; + style valid_style (get_style_from_color_cap_name ("valid")); m_valid_style_id = m_sm.get_or_create_id (valid_style); - style invalid_style; - invalid_style.m_fg_color = style::named_color::RED; - invalid_style.m_bold = true; + style invalid_style (get_style_from_color_cap_name ("invalid")); m_invalid_style_id = m_sm.get_or_create_id (invalid_style); } diff --git a/gcc/diagnostic-color.cc b/gcc/diagnostic-color.cc index 4859f36da6a9..f01a0fc2e377 100644 --- a/gcc/diagnostic-color.cc +++ b/gcc/diagnostic-color.cc @@ -101,6 +101,8 @@ static struct color_cap color_dict[] = { "diff-delete", SGR_SEQ (COLOR_FG_RED), 11, false }, { "diff-insert", SGR_SEQ (COLOR_FG_GREEN), 11, false }, { "type-diff", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 9, false }, + { "valid", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 5, false }, + { "invalid", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_RED), 7, false }, { NULL, NULL, 0, false } }; diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e2edf7a6c139..1006510fc6aa 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -5244,7 +5244,7 @@ The default @env{GCC_COLORS} is error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\ quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\ diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\ -type-diff=01;32:fnname=01;32:targs=35 +type-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32 @end smallexample @noindent where @samp{01;31} is bold red, @samp{01;35} is bold magenta, @@ -5327,6 +5327,14 @@ SGR substring for inserted lines within generated patches. @item type-diff= SGR substring for highlighting mismatching types within template arguments in the C++ frontend. + +@vindex valid GCC_COLORS @r{capability} +@item valid= +SGR substring for highlighting valid elements within text art diagrams. + +@vindex invalid GCC_COLORS @r{capability} +@item invalid= +SGR substring for highlighting invalid elements within text art diagrams. @end table @opindex fdiagnostics-urls diff --git a/gcc/text-art/style.cc b/gcc/text-art/style.cc index e74efe23014c..5c58d432cf48 100644 --- a/gcc/text-art/style.cc +++ b/gcc/text-art/style.cc @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "text-art/selftests.h" #include "text-art/types.h" #include "color-macros.h" +#include "diagnostic-color.h" using namespace text_art; @@ -256,6 +257,23 @@ style::print_changes (pretty_printer *pp, } } +/* Look up the current SGR codes for a color capability NAME + (from GCC_COLORS or the defaults), and convert them to + a text_art::style. */ + +style +text_art::get_style_from_color_cap_name (const char *name) +{ + const char *sgr_codes = colorize_start (true, name); + gcc_assert (sgr_codes); + + /* Parse the sgr codes. We expect the resulting styled_string to be + empty; we're interested in the final style created during parsing. */ + style_manager sm; + styled_string styled_str (sm, sgr_codes); + return sm.get_style (sm.get_num_styles () - 1); +} + /* class text_art::style_manager. */ style_manager::style_manager () diff --git a/gcc/text-art/types.h b/gcc/text-art/types.h index 02de2e86122e..2b9f8b387c71 100644 --- a/gcc/text-art/types.h +++ b/gcc/text-art/types.h @@ -332,6 +332,8 @@ struct style std::vector<cppchar_t> m_url; // empty = no URL }; +extern style get_style_from_color_cap_name (const char *name); + /* A class to keep track of all the styles in use in a drawing, so that we can refer to them via the compact style::id_t type, rather than via e.g. pointers. */ From 888bf719728e9ab1da22900d39956e0d80889e30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Kvalsvik?= <j@lambda.is> Date: Fri, 5 Apr 2024 16:01:14 +0200 Subject: [PATCH 405/551] Remove unecessary and broken MC/DC compile test The __sigsetjmp test was added as a regression test in an early iteration of the MC/DC support, as it caused an internal compiler error. This was triggered by a code path which did not make it through to the final revision. Since this test really only worked on systems with __sigsetjmp, and does not serve a purpose any more it can be removed. gcc/testsuite/ChangeLog: * gcc.misc-tests/gcov-19.c: Remove test. --- gcc/testsuite/gcc.misc-tests/gcov-19.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/gcc/testsuite/gcc.misc-tests/gcov-19.c b/gcc/testsuite/gcc.misc-tests/gcov-19.c index 17f1fb4e9230..b83a38531ba3 100644 --- a/gcc/testsuite/gcc.misc-tests/gcov-19.c +++ b/gcc/testsuite/gcc.misc-tests/gcov-19.c @@ -869,17 +869,6 @@ mcdc021b () goto * 0; } -int __sigsetjmp (); - -/* This should compile, but not called. */ -void -mcdc021c () -{ - while (x) /* conditions(0/2) true(0) false(0)*/ - /* conditions(end) */ - __sigsetjmp (); -} - /* If edges are not properly contracted the a && id (b) will be interpreted as two independent expressions. */ void From c6892a430a9752aea167265621c3ae7a3e11159f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Kvalsvik?= <j@lambda.is> Date: Fri, 5 Apr 2024 21:42:07 +0200 Subject: [PATCH 406/551] Copy condition->expr map when inlining [PR114599] When a function is tree-inlined, copy the condition -> expression mapping from the inlined function into the caller, shifted so uids are not mixed. Tree inlining was always problematic under condition coverage - either through a nullptr dereference (triggered by the test case), or through quietly mixing caller conditions with the callee conditions. PR middle-end/114599 gcc/ChangeLog: * tree-inline.cc (add_local_variables): Copy cond_uids mappings. gcc/testsuite/ChangeLog: * gcc.misc-tests/gcov-pr114599.c: New test. --- gcc/testsuite/gcc.misc-tests/gcov-pr114599.c | 25 ++++++++++++++++++++ gcc/tree-inline.cc | 20 +++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-pr114599.c diff --git a/gcc/testsuite/gcc.misc-tests/gcov-pr114599.c b/gcc/testsuite/gcc.misc-tests/gcov-pr114599.c new file mode 100644 index 000000000000..e4c78c9c1219 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-pr114599.c @@ -0,0 +1,25 @@ +/* PR middle-end/114599 */ +/* { dg-do compile } */ +/* { dg-options "-fcondition-coverage" } */ + +/* Check that a function with a condition inlined into a function without a + conditional works. When inlining happens the condition -> expression + mapping must be carried over. */ + +extern int type; + +void fn (void); + +__attribute__((always_inline)) +inline void +do_all_fn_doall_arg (void) +{ + if (type) + fn (); +} + +void +do_all_fn_LHASH_DOALL_ARG_arg2 (void) +{ + do_all_fn_doall_arg (); +} diff --git a/gcc/tree-inline.cc b/gcc/tree-inline.cc index eebcea8a0290..b18917707cc9 100644 --- a/gcc/tree-inline.cc +++ b/gcc/tree-inline.cc @@ -4659,7 +4659,8 @@ prepend_lexical_block (tree current_block, tree new_block) BLOCK_SUPERCONTEXT (new_block) = current_block; } -/* Add local variables from CALLEE to CALLER. */ +/* Add local variables from CALLEE to CALLER. If set for condition coverage, + copy basic condition -> expression mapping to CALLER. */ static inline void add_local_variables (struct function *callee, struct function *caller, @@ -4689,6 +4690,23 @@ add_local_variables (struct function *callee, struct function *caller, } add_local_decl (caller, new_var); } + + /* If -fcondition-coverage is used and the caller has conditions, copy the + mapping into the caller but and the end so the caller and callee + expressions aren't mixed. */ + if (callee->cond_uids) + { + if (!caller->cond_uids) + caller->cond_uids = new hash_map <gcond*, unsigned> (); + + unsigned dst_max_uid = 0; + for (auto itr : *callee->cond_uids) + if (itr.second >= dst_max_uid) + dst_max_uid = itr.second + 1; + + for (auto itr : *callee->cond_uids) + caller->cond_uids->put (itr.first, itr.second + dst_max_uid); + } } /* Add to BINDINGS a debug stmt resetting SRCVAR if inlining might From 06a7e7514af67d9f3c51fe7a592b5166da791e2f Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Fri, 5 Apr 2024 08:56:15 -0700 Subject: [PATCH 407/551] x86: Use explicit shift count in double-precision shifts Don't use implicit shift count in double-precision shifts in AT&T syntax since they aren't in Intel SDM. Keep the 's' modifier for backward compatibility with inline asm statements. PR target/114590 * config/i386/i386.md (x86_64_shld): Use explicit shift count in AT&T syntax. (x86_64_shld_ndd): Likewise. (x86_shld): Likewise. (x86_shld_ndd): Likewise. (x86_64_shrd): Likewise. (x86_64_shrd_ndd): Likewise. (x86_shrd): Likewise. (x86_shrd_ndd): Likewise. --- gcc/config/i386/i386.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 6ac401154e47..bb2c72f3473e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -14503,7 +14503,7 @@ (and:QI (match_dup 2) (const_int 63)))) 0))) (clobber (reg:CC FLAGS_REG))] "TARGET_64BIT" - "shld{q}\t{%s2%1, %0|%0, %1, %2}" + "shld{q}\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "mode" "DI") @@ -14524,7 +14524,7 @@ (and:QI (match_dup 3) (const_int 63)))) 0))) (clobber (reg:CC FLAGS_REG))] "TARGET_APX_NDD" - "shld{q}\t{%s3%2, %1, %0|%0, %1, %2, %3}" + "shld{q}\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ishift") (set_attr "mode" "DI")]) @@ -14681,7 +14681,7 @@ (and:QI (match_dup 2) (const_int 31)))) 0))) (clobber (reg:CC FLAGS_REG))] "" - "shld{l}\t{%s2%1, %0|%0, %1, %2}" + "shld{l}\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "mode" "SI") @@ -14703,7 +14703,7 @@ (and:QI (match_dup 3) (const_int 31)))) 0))) (clobber (reg:CC FLAGS_REG))] "TARGET_APX_NDD" - "shld{l}\t{%s3%2, %1, %0|%0, %1, %2, %3}" + "shld{l}\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) @@ -15792,7 +15792,7 @@ (and:QI (match_dup 2) (const_int 63)))) 0))) (clobber (reg:CC FLAGS_REG))] "TARGET_64BIT" - "shrd{q}\t{%s2%1, %0|%0, %1, %2}" + "shrd{q}\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "mode" "DI") @@ -15813,7 +15813,7 @@ (and:QI (match_dup 3) (const_int 63)))) 0))) (clobber (reg:CC FLAGS_REG))] "TARGET_APX_NDD" - "shrd{q}\t{%s3%2, %1, %0|%0, %1, %2, %3}" + "shrd{q}\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ishift") (set_attr "mode" "DI")]) @@ -15971,7 +15971,7 @@ (and:QI (match_dup 2) (const_int 31)))) 0))) (clobber (reg:CC FLAGS_REG))] "" - "shrd{l}\t{%s2%1, %0|%0, %1, %2}" + "shrd{l}\t{%2, %1, %0|%0, %1, %2}" [(set_attr "type" "ishift") (set_attr "prefix_0f" "1") (set_attr "mode" "SI") @@ -15993,7 +15993,7 @@ (and:QI (match_dup 3) (const_int 31)))) 0))) (clobber (reg:CC FLAGS_REG))] "TARGET_APX_NDD" - "shrd{l}\t{%s3%2, %1, %0|%0, %1, %2, %3}" + "shrd{l}\t{%3, %2, %1, %0|%0, %1, %2, %3}" [(set_attr "type" "ishift") (set_attr "mode" "SI")]) From 09992f8b881aa2dfbee1e9d6954c3ca90cd3fe41 Mon Sep 17 00:00:00 2001 From: Iain Buclaw <ibuclaw@gdcproject.org> Date: Sat, 6 Apr 2024 14:14:11 +0200 Subject: [PATCH 408/551] d: Merge upstream dmd, druntime b65767825f, phobos 92dc5a4e9. Synchronizing with the upstream release of v2.108.0. D front-end changes: - Import dmd v2.108.0. D runtime changes: - Import druntime v2.108.0. Phobos changes: - Import phobos v2.108.0. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd b65767825f. * dmd/VERSION: Bump version to v2.108.0. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime b65767825f. * src/MERGE: Merge upstream phobos 92dc5a4e9. --- gcc/d/dmd/MERGE | 2 +- gcc/d/dmd/VERSION | 2 +- libphobos/libdruntime/MERGE | 2 +- .../core/internal/array/duplication.d | 14 +++++- libphobos/src/MERGE | 2 +- .../building_blocks/kernighan_ritchie.d | 4 +- libphobos/src/std/net/curl.d | 5 +- libphobos/src/std/typecons.d | 47 ++++++++++++++++++- 8 files changed, 68 insertions(+), 10 deletions(-) diff --git a/gcc/d/dmd/MERGE b/gcc/d/dmd/MERGE index a00872ef864d..dc47db87a80c 100644 --- a/gcc/d/dmd/MERGE +++ b/gcc/d/dmd/MERGE @@ -1,4 +1,4 @@ -855353a1d9e16d43e85b6cf2b03aef388619bd16 +b65767825f365dbc153457fc86e1054b03196c6d The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/gcc/d/dmd/VERSION b/gcc/d/dmd/VERSION index 8ca452f89122..5868b8749552 100644 --- a/gcc/d/dmd/VERSION +++ b/gcc/d/dmd/VERSION @@ -1 +1 @@ -v2.108.0-rc.1 +v2.108.0 diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE index a00872ef864d..dc47db87a80c 100644 --- a/libphobos/libdruntime/MERGE +++ b/libphobos/libdruntime/MERGE @@ -1,4 +1,4 @@ -855353a1d9e16d43e85b6cf2b03aef388619bd16 +b65767825f365dbc153457fc86e1054b03196c6d The first line of this file holds the git revision number of the last merge done from the dlang/dmd repository. diff --git a/libphobos/libdruntime/core/internal/array/duplication.d b/libphobos/libdruntime/core/internal/array/duplication.d index eec6af92fef5..9df84893bb9e 100644 --- a/libphobos/libdruntime/core/internal/array/duplication.d +++ b/libphobos/libdruntime/core/internal/array/duplication.d @@ -21,9 +21,9 @@ U[] _dup(T, U)(scope T[] a) pure nothrow @trusted if (__traits(isPOD, T)) { import core.stdc.string : memcpy; import core.internal.array.construction: _d_newarrayUPureNothrow; - auto arr = _d_newarrayUPureNothrow!T(a.length, is(T == shared)); + auto arr = _d_newarrayUPureNothrow!U(a.length, is(U == shared)); memcpy(cast(void*) arr.ptr, cast(const(void)*) a.ptr, T.sizeof * a.length); - return *cast(U[]*) &arr; + return arr; } } @@ -358,3 +358,13 @@ U[] _dup(T, U)(T[] a) if (!__traits(isPOD, T)) static assert(test!Copy()); assert(test!Copy()); } + +// https://issues.dlang.org/show_bug.cgi?id=24453 +@safe unittest +{ + static inout(char)[] foo(ref scope return inout(char)[] s) + { + auto bla = s.idup; + return s; + } +} diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE index ff34bece2a3e..a4f25db810ed 100644 --- a/libphobos/src/MERGE +++ b/libphobos/src/MERGE @@ -1,4 +1,4 @@ -a2ade9dec49e70c6acd447df52321988a4c2fb9f +92dc5a4e98591a0e6b0af4ff0f84f096fea09016 The first line of this file holds the git revision number of the last merge done from the dlang/phobos repository. diff --git a/libphobos/src/std/experimental/allocator/building_blocks/kernighan_ritchie.d b/libphobos/src/std/experimental/allocator/building_blocks/kernighan_ritchie.d index 6883d33adae7..167cf1bc6bce 100644 --- a/libphobos/src/std/experimental/allocator/building_blocks/kernighan_ritchie.d +++ b/libphobos/src/std/experimental/allocator/building_blocks/kernighan_ritchie.d @@ -647,7 +647,7 @@ fronting the GC allocator. import std.experimental.allocator.gc_allocator : GCAllocator; import std.typecons : Ternary; // KRRegion fronting a general-purpose allocator - ubyte[1024 * 128] buf; + align(KRRegion!().alignment) ubyte[1024 * 128] buf; auto alloc = fallbackAllocator(KRRegion!()(buf), GCAllocator.instance); auto b = alloc.allocate(100); assert(b.length == 100); @@ -916,7 +916,7 @@ version (StdUnittest) @system unittest { import std.typecons : Ternary; - ubyte[1024] b; + align(KRRegion!().alignment) ubyte[1024] b; auto alloc = KRRegion!()(b); auto k = alloc.allocate(128); diff --git a/libphobos/src/std/net/curl.d b/libphobos/src/std/net/curl.d index 6aec366c6576..3f823013e650 100644 --- a/libphobos/src/std/net/curl.d +++ b/libphobos/src/std/net/curl.d @@ -2422,6 +2422,7 @@ struct HTTP import std.algorithm.searching : findSplit, startsWith; import std.string : indexOf, chomp; import std.uni : toLower; + import std.exception : assumeUnique; // Wrap incoming callback in order to separate http status line from // http headers. On redirected requests there may be several such @@ -2448,7 +2449,9 @@ struct HTTP } auto m = header.findSplit(": "); - auto fieldName = m[0].toLower(); + const(char)[] lowerFieldName = m[0].toLower(); + ///Fixes https://issues.dlang.org/show_bug.cgi?id=24458 + string fieldName = lowerFieldName is m[0] ? lowerFieldName.idup : assumeUnique(lowerFieldName); auto fieldContent = m[2].chomp; if (fieldName == "content-type") { diff --git a/libphobos/src/std/typecons.d b/libphobos/src/std/typecons.d index 5fac1c9cca44..460cd427ed0a 100644 --- a/libphobos/src/std/typecons.d +++ b/libphobos/src/std/typecons.d @@ -559,6 +559,14 @@ private template isBuildableFrom(U) enum isBuildableFrom(T) = isBuildable!(T, U); } +private enum hasCopyCtor(T) = __traits(hasCopyConstructor, T); + +// T is expected to be an instantiation of Tuple. +private template noMemberHasCopyCtor(T) +{ + import std.meta : anySatisfy; + enum noMemberHasCopyCtor = !anySatisfy!(hasCopyCtor, T.Types); +} /** _Tuple of values, for example $(D Tuple!(int, string)) is a record that @@ -745,7 +753,8 @@ if (distinctFieldNames!(Specs)) * compatible with the target `Tuple`'s type. */ this(U)(U another) - if (areBuildCompatibleTuples!(typeof(this), U)) + if (areBuildCompatibleTuples!(typeof(this), U) && + (noMemberHasCopyCtor!(typeof(this)) || !is(Unqual!U == Unqual!(typeof(this))))) { field[] = another.field[]; } @@ -1655,6 +1664,42 @@ if (distinctFieldNames!(Specs)) Tuple!(MyStruct) t; } +// https://issues.dlang.org/show_bug.cgi?id=24465 +@safe unittest +{ + { + static struct S + { + this(ref return scope inout(S) rhs) scope @trusted inout pure nothrow {} + } + + static void foo(Tuple!S) + { + } + + Tuple!S t; + foo(t); + + auto t2 = Tuple!S(t); + } + + { + static struct S {} + Tuple!S t; + auto t2 = Tuple!S(t); + + // This can't be done if Tuple has a copy constructor, because it's not + // allowed to have an rvalue constructor at that point, and the + // compiler doesn't to something intelligent like transform it into a + // move instead. However, it has been legal with Tuple for a while + // (maybe even since it was first added) when the type doesn't have a + // copy constructor, so this is testing to make sure that the fix to + // make copy constructors work doesn't mess up the rvalue constructor + // when none of the Tuple's members have copy constructors. + auto t3 = Tuple!S(Tuple!S.init); + } +} + /** Creates a copy of a $(LREF Tuple) with its fields in _reverse order. From 93adf88cc6744aa2c732b765e1e3b96e66cb3300 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle <jvdelisle@gcc.gnu.org> Date: Fri, 5 Apr 2024 19:25:13 -0700 Subject: [PATCH 409/551] libfortran: Fix handling of formatted separators. PR libfortran/114304 PR libfortran/105473 libgfortran/ChangeLog: * io/list_read.c (eat_separator): Add logic to handle spaces preceding a comma or semicolon such that that a 'null' read occurs without error at the end of comma or semicolon terminated input lines. Add check and error message for ';'. (list_formatted_read_scalar): Treat comma as a decimal point when specified by the decimal mode on the first item. gcc/testsuite/ChangeLog: * gfortran.dg/pr105473.f90: Modify to verify new error message. * gfortran.dg/pr114304.f90: New test. --- gcc/testsuite/gfortran.dg/pr105473.f90 | 4 +- gcc/testsuite/gfortran.dg/pr114304.f90 | 114 +++++++++++++++++++++++++ libgfortran/io/list_read.c | 41 +++++++-- 3 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr114304.f90 diff --git a/gcc/testsuite/gfortran.dg/pr105473.f90 b/gcc/testsuite/gfortran.dg/pr105473.f90 index 2679f6bb4475..863a312c7943 100644 --- a/gcc/testsuite/gfortran.dg/pr105473.f90 +++ b/gcc/testsuite/gfortran.dg/pr105473.f90 @@ -9,11 +9,11 @@ n = 999; m = 777; r=1.2345 z = cmplx(0.0,0.0) -! Check that semi-colon is allowed as separator with decimal=point. +! Check that semi-colon is not allowed as separator with decimal=point. ios=0 testinput = '1;17;3.14159' read(testinput,*,decimal='point',iostat=ios) n, m, r - if (ios /= 0) stop 1 + if (ios /= 5010) stop 1 ! Check that semi-colon allowed as a separator with decimal=point. ios=0 diff --git a/gcc/testsuite/gfortran.dg/pr114304.f90 b/gcc/testsuite/gfortran.dg/pr114304.f90 new file mode 100644 index 000000000000..2f913f1ab345 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr114304.f90 @@ -0,0 +1,114 @@ +! { dg-do run } +! +! PR fortran/114304 +! +! See also PR fortran/105473 +! +! Testing: Does list-directed reading an integer/real allow some non-integer input? +! +! Note: GCC result comments before fix of this PR. + + implicit none + call t(.true., 'comma', ';') ! No error shown + call t(.false., 'point', ';') ! /!\ gfortran: no error, others: error + call t(.false., 'comma', ',') ! Error shown + call t(.true., 'point', ',') ! No error shown + call t(.false., 'comma', '.') ! Error shown + call t(.false., 'point', '.') ! Error shown + call t(.false., 'comma', '5.') ! Error shown + call t(.false., 'point', '5.') ! gfortran/flang: Error shown, ifort: no error + call t(.false., 'comma', '5,') ! gfortran: error; others: no error + call t(.true., 'point', '5,') ! No error shown + call t(.true., 'comma', '5;') ! No error shown + call t(.false., 'point', '5;') ! /!\ gfortran: no error shown, others: error + call t(.true., 'comma', '7 .') ! No error shown + call t(.true., 'point', '7 .') ! No error shown + call t(.true., 'comma', '7 ,') ! /!\ gfortran: error; others: no error + call t(.true., 'point', '7 ,') ! No error shown + call t(.true., 'comma', '7 ;') ! No error shown + call t(.true., 'point', '7 ;') ! No error shown + +! print *, '---------------' + + call t(.false., 'comma', '8.', .true.) ! Error shown + call t(.true., 'point', '8.', .true.) ! gfortran/flang: Error shown, ifort: no error + call t(.true., 'comma', '8,', .true.) ! gfortran: error; others: no error + call t(.true., 'point', '8,', .true.) ! No error shown + call t(.true., 'comma', '8;', .true.) ! No error shown + call t(.false., 'point', '8;', .true.) ! /!\ gfortran: no error shown, others: error + call t(.true., 'comma', '9 .', .true.) ! No error shown + call t(.true., 'point', '9 .', .true.) ! No error shown + call t(.true., 'comma', '9 ,', .true.) ! /!\ gfortran: error; others: no error + call t(.true., 'point', '9 ,', .true.) ! No error shown + call t(.true., 'comma', '9 ;', .true.) ! No error shown + call t(.true., 'point', '9 ;', .true.) ! No error shown + call t(.false., 'comma', '3,3.', .true.) ! Error shown + call t(.false., 'point', '3.3.', .true.) ! Error shown + call t(.false., 'comma', '3,3,', .true.) ! gfortran/flang: no error; ifort: error + call t(.true., 'comma', '3,3;', .true.) ! No error shown + call t(.false., 'point', '3.3;', .true.) ! gfortran/flang: no error; ifort: error + call t(.true., 'comma', '4,4 .', .true.) ! N error shown + call t(.true., 'point', '4.4 .', .true.) ! No error shown + call t(.true., 'comma', '4,4 ,', .true.) ! /!\ gfortran: error; others: no error + call t(.true., 'point', '4.4 ,', .true.) ! No error shown + call t(.true., 'comma', '4,4 ;', .true.) ! No error shown + call t(.true., 'point', '4.4 ;', .true.) ! No error shown + +! print *, '---------------' + + call t(.true., 'comma', '8', .true.) + call t(.true., 'point', '8', .true.) + call t(.true., 'point', '9 ;', .true.) + call t(.true., 'comma', '3;3.', .true.) + call t(.true., 'point', '3,3.', .true.) + call t(.true., 'comma', '3;3,', .true.) + call t(.true., 'comma', '3;3;', .true.) + call t(.true., 'point', '3,3;', .true.) + call t(.true., 'comma', '4;4 .', .true.) + call t(.true., 'point', '4,4 .', .true.) + call t(.true., 'comma', '4;4 ,', .true.) + call t(.true., 'point', '4,4 ,', .true.) + call t(.true., 'comma', '4;4 ;', .true.) + call t(.true., 'point', '4,4 ;', .true.) + + call t2('comma', ',2') + call t2('point', '.2') + call t2('comma', ',2;') + call t2('point', '.2,') + call t2('comma', ',2 ,') + call t2('point', '.2 .') +contains +subroutine t2(dec, testinput) + character(*) :: dec, testinput + integer ios + real :: r + r = 42 + read(testinput,*,decimal=dec, iostat=ios) r + if (ios /= 0 .or. abs(r - 0.2) > epsilon(r)) then + stop 3 + end if +end +subroutine t(valid, dec, testinput, isreal) + logical, value :: valid + character(len=*) :: dec, testinput + logical, optional :: isreal + logical :: isreal2 + integer n,ios + real :: r + r = 42; n = 42 + isreal2 = .false. + if (present(isreal)) isreal2 = isreal + + if (isreal2) then + read(testinput,*,decimal=dec,iostat=ios) r + if ((valid .and. ios /= 0) .or. (.not.valid .and. ios == 0)) then + stop 1 + end if + else + read(testinput,*,decimal=dec,iostat=ios) n + if ((valid .and. ios /= 0) .or. (.not.valid .and. ios == 0)) then + stop 1 + end if + end if +end +end program diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index fb3f7dbc34d8..b56f2a4e6d68 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -461,11 +461,30 @@ eat_separator (st_parameter_dt *dtp) int c, n; int err = 0; - eat_spaces (dtp); dtp->u.p.comma_flag = 0; + c = next_char (dtp); + if (c == ' ') + { + eat_spaces (dtp); + c = next_char (dtp); + if (c == ',') + { + if (dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + unget_char (dtp, ';'); + dtp->u.p.comma_flag = 1; + eat_spaces (dtp); + return err; + } + if (c == ';') + { + if (dtp->u.p.current_unit->decimal_status == DECIMAL_POINT) + unget_char (dtp, ','); + dtp->u.p.comma_flag = 1; + eat_spaces (dtp); + return err; + } + } - if ((c = next_char (dtp)) == EOF) - return LIBERROR_END; switch (c) { case ',': @@ -476,8 +495,18 @@ eat_separator (st_parameter_dt *dtp) unget_char (dtp, c); break; } - /* Fall through. */ + dtp->u.p.comma_flag = 1; + eat_spaces (dtp); + break; + case ';': + if (dtp->u.p.current_unit->decimal_status == DECIMAL_POINT) + { + generate_error (&dtp->common, LIBERROR_READ_VALUE, + "Semicolon not allowed as separator with DECIMAL='point'"); + unget_char (dtp, c); + break; + } dtp->u.p.comma_flag = 1; eat_spaces (dtp); break; @@ -2144,7 +2173,9 @@ list_formatted_read_scalar (st_parameter_dt *dtp, bt type, void *p, err = LIBERROR_END; goto cleanup; } - if (is_separator (c)) + if (c == ',' && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA) + c = '.'; + else if (is_separator (c)) { /* Found a null value. */ dtp->u.p.repeat_count = 0; From 4e3c8257304c55f2ebfb24bd6de3236bda0f054e Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Sat, 6 Apr 2024 23:45:35 +0100 Subject: [PATCH 410/551] PR modula2/114617 gm2 unable to resolve const expressions using relop ICE This patch allows cc1gm2 to resolve constant expressions which use relative operators. Previous to the patch the result of a relop was stored in a temporary variable set by an if then else quadruple sequence. This patch marks a const expression in the quadruples and then reduces this sequence of quadruples into a single assignment to an internal constant. gcc/m2/ChangeLog: PR modula2/114617 * gm2-compiler/M2GenGCC.mod (CodeStatememt): Add quad trace. (ResolveConstantExpressions): Add parameter p to FoldIfLess, FoldIfGre, FoldIfLessEqu, FoldIfGreEqu, FoldIfEqu, FoldIfNotEqu, FoldIfIn and FoldIfNotIn. (CodeInline): Add constExpr variable and pass it to GetQuadOtok. (CodeReturnValue): Ditto. (CodeParam): Ditto. (FoldStringLength): Ditto. (FoldStringConvertM2nul): Ditto. (FoldStringConvertCnul): Ditto. (DeclaredOperandsBecomes): Ditto. (TypeCheckBecomes): Ditto. (PerformFoldBecomes): Ditto. (CodeBecomes): Ditto. (CheckElementSetTypes): Ditto. (CodeBinarySet): Ditto. (PerformCodeIfLess): Ditto. (PerformCodeIfGre): Ditto. (PerformCodeIfLessEqu): Ditto. (PerformCodeIfGreEqu): Ditto. (PerformCodeIfEqu): Ditto. (PerformCodeIfNotEqu): Ditto. (IsValidExpressionRelOp): Ditto. (PerformCodeIfIn): Ditto. (PerformCodeIfNotIn): Ditto. (CodeXIndr): Ditto. (QuadCondition): New procedure function. (IsBooleanRelOpPattern): Ditto. (FoldBooleanRelopPattern): Ditto. (FoldIfGre): Check for boolean relop constant expression and add parameter p. (FoldIfLessEqu): Ditto. (FoldIfIn): Ditto. (FoldIfEqu): Ditto. (FoldIfNotIn): Ditto. (FoldIfGreEqu): New procedure. (FoldIfNotEqu): Ditto. * gm2-compiler/M2Optimize.mod (ReduceBranch): Add constExpr variable and pass it to GetQuadOtok. * gm2-compiler/M2Quads.def (IsBecomes): New procedure function. (IsDummy): Ditto. (IsQuadConstExpr): Ditto. (SetQuadConstExpr): Ditto. (GetQuadDest): New procedure. (GetQuadOp1): New procedure. (GetQuadOp2): New procedure. (GetQuadOp3): New procedure. (GetQuadOtok): New procedure. (GetQuadOTypetok): New procedure. (PutQuadOtok): New procedure. (IsInConstParameters): New procedure function. * gm2-compiler/M2Quads.mod (IsBecomes): New procedure function. (IsDummy): Ditto. (IsQuadConstExpr): Ditto. (SetQuadConstExpr): Ditto. (GetQuadDest): New procedure. (GetQuadOp1): New procedure. (GetQuadOp2): New procedure. (GetQuadOp3): New procedure. (GetQuadOtok): New procedure. (GetQuadOTypetok): New procedure. (PutQuadOtok): New procedure. (IsInConstParameters): New procedure function. (ConstStack): Remove to ... (ConstExprStack): ... this. (ConstParamStack): New variable and initialize. (QuadFrame): New field ConstExpr. (GetQuadOtok): Add parameter constExpr and assign. (PutQuadOtok): Add constExpr parameter and assign. (PutQuadOType): Ditto. (GetQuadOTypetok): Ditto. (EraseQuad): Assign ConstExpr to FALSE. (FoldSubrange): Set ConstExpr to FALSE in BecomesOp. (PushInConstParameters): New procedure. (PopInConstParameters): New procedure. (IsInConstParameters): New procedure function. * gm2-compiler/M2SymInit.mod (IssueConditional): Add constExpr boolean variable. (CheckReadBeforeInitQuad): Ditto. (trashParam): Ditto. * gm2-compiler/P3Build.bnf (ConstExpression): Call PushInConstExpression and PopInConstExpression. (ConstSetOrQualidentOrFunction): Call PushInConstParameters and PopInConstParameters. * gm2-compiler/PCBuild.bnf (ConstExpression): Call PushInConstExpression and PopInConstExpression. * gm2-compiler/PHBuild.bnf: Ditto * gm2-gcc/m2expr.cc (m2expr_BuildCondIfExpression): New function. * gm2-gcc/m2expr.def (BuildCondIfExpression): New prototype. * gm2-gcc/m2expr.h (m2expr_BuildCondIfExpression): New function. gcc/testsuite/ChangeLog: PR modula2/114617 * gm2/iso/const/pass/iso-const-pass.exp: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2GenGCC.mod | 456 +++++++++++++++--- gcc/m2/gm2-compiler/M2Optimize.mod | 5 +- gcc/m2/gm2-compiler/M2Quads.def | 91 +++- gcc/m2/gm2-compiler/M2Quads.mod | 201 ++++++-- gcc/m2/gm2-compiler/M2SymInit.mod | 15 +- gcc/m2/gm2-compiler/P3Build.bnf | 11 +- gcc/m2/gm2-compiler/PCBuild.bnf | 5 +- gcc/m2/gm2-compiler/PHBuild.bnf | 5 +- gcc/m2/gm2-gcc/m2expr.cc | 8 + gcc/m2/gm2-gcc/m2expr.def | 7 + gcc/m2/gm2-gcc/m2expr.h | 2 + .../gm2/iso/const/pass/iso-const-pass.exp | 36 ++ 12 files changed, 738 insertions(+), 104 deletions(-) create mode 100644 gcc/testsuite/gm2/iso/const/pass/iso-const-pass.exp diff --git a/gcc/m2/gm2-compiler/M2GenGCC.mod b/gcc/m2/gm2-compiler/M2GenGCC.mod index 60f58cc2d1b8..a45d33ef89e2 100644 --- a/gcc/m2/gm2-compiler/M2GenGCC.mod +++ b/gcc/m2/gm2-compiler/M2GenGCC.mod @@ -257,10 +257,14 @@ FROM M2Quads IMPORT QuadOperator, GetQuad, IsReferenced, GetNextQuad, SubQuad, PutQuad, MustCheckOverflow, GetQuadOtok, GetQuadOTypetok, QuadToTokenNo, DisplayQuad, GetQuadtok, - GetM2OperatorDesc, GetQuadOp ; + GetM2OperatorDesc, GetQuadOp, + IsQuadConstExpr, IsBecomes, IsGoto, IsConditional, + IsDummy, + GetQuadOp1, GetQuadOp3, GetQuadDest, SetQuadConstExpr ; FROM M2Check IMPORT ParameterTypeCompatible, AssignmentTypeCompatible, ExpressionTypeCompatible ; FROM M2SSA IMPORT EnableSSA ; +FROM M2Optimize IMPORT FoldBranches ; CONST @@ -460,8 +464,8 @@ BEGIN CheckReferenced(q, op) ; IF GetDebugTraceQuad () THEN - printf0('building: ') ; - DisplayQuad(q) + printf0 ('building: ') ; + DisplayQuad (q) END ; CASE op OF @@ -588,6 +592,11 @@ BEGIN THEN tokenno := QuadToTokenNo (quad) END ; + IF GetDebugTraceQuad () + THEN + printf0('examining fold: ') ; + DisplayQuad (quad) + END ; GetQuadtok (quad, op, op1, op2, op3, op1pos, op2pos, op3pos) ; CASE op OF @@ -621,9 +630,14 @@ BEGIN CastOp : FoldCast (tokenno, p, quad, op1, op2, op3) | InclOp : FoldIncl (tokenno, p, quad, op1, op3) | ExclOp : FoldExcl (tokenno, p, quad, op1, op3) | - IfLessOp : FoldIfLess (tokenno, quad, op1, op2, op3) | - IfInOp : FoldIfIn (tokenno, quad, op1, op2, op3) | - IfNotInOp : FoldIfNotIn (tokenno, quad, op1, op2, op3) | + IfEquOp : FoldIfEqu (tokenno, p, quad, op1, op2, op3) | + IfNotEquOp : FoldIfNotEqu (tokenno, p, quad, op1, op2, op3) | + IfLessOp : FoldIfLess (tokenno, p, quad, op1, op2, op3) | + IfLessEquOp : FoldIfLessEqu (tokenno, p, quad, op1, op2, op3) | + IfGreOp : FoldIfGre (tokenno, p, quad, op1, op2, op3) | + IfGreEquOp : FoldIfGreEqu (tokenno, p, quad, op1, op2, op3) | + IfInOp : FoldIfIn (tokenno, p, quad, op1, op2, op3) | + IfNotInOp : FoldIfNotIn (tokenno, p, quad, op1, op2, op3) | LogicalShiftOp : FoldSetShift(tokenno, p, quad, op1, op2, op3) | LogicalRotateOp : FoldSetRotate (tokenno, p, quad, op1, op2, op3) | ParamOp : FoldBuiltinFunction (tokenno, p, quad, op1, op2, op3) | @@ -812,6 +826,7 @@ END BuildTrashTreeFromInterface ; PROCEDURE CodeInline (quad: CARDINAL) ; VAR + constExpr, overflowChecking: BOOLEAN ; op : QuadOperator ; op1, op2, GnuAsm: CARDINAL ; @@ -824,7 +839,8 @@ VAR labels : Tree ; location : location_t ; BEGIN - GetQuadOtok (quad, asmpos, op, op1, op2, GnuAsm, overflowChecking, + GetQuadOtok (quad, asmpos, op, op1, op2, GnuAsm, + overflowChecking, constExpr, op1pos, op2pos, op3pos) ; location := TokenToLocation (asmpos) ; inputs := BuildTreeFromInterface (GetGnuAsmInput (GnuAsm)) ; @@ -1879,6 +1895,7 @@ END CodeProcedureScope ; PROCEDURE CodeReturnValue (quad: CARDINAL) ; VAR op : QuadOperator ; + constExpr, overflowChecking : BOOLEAN ; expr, none, procedure : CARDINAL ; combinedpos, @@ -1886,7 +1903,8 @@ VAR value, length : Tree ; location : location_t ; BEGIN - GetQuadOtok (quad, returnpos, op, expr, none, procedure, overflowChecking, + GetQuadOtok (quad, returnpos, op, expr, none, procedure, + overflowChecking, constExpr, exprpos, nonepos, procpos) ; combinedpos := MakeVirtualTok (returnpos, returnpos, exprpos) ; location := TokenToLocation (combinedpos) ; @@ -2500,11 +2518,13 @@ VAR parampos : CARDINAL ; nth : CARDINAL ; compatible, + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN GetQuadOtok (quad, parampos, op, - nth, procedure, parameter, overflow, + nth, procedure, parameter, + overflow, constExpr, nopos, nopos, nopos) ; compatible := TRUE ; IF nth=0 @@ -2593,10 +2613,12 @@ VAR stroppos, despos, nonepos, exprpos : CARDINAL ; + constExpr, overflowChecking: BOOLEAN ; location : location_t ; BEGIN - GetQuadOtok (quad, stroppos, op, des, none, expr, overflowChecking, + GetQuadOtok (quad, stroppos, op, des, none, expr, + overflowChecking, constExpr, despos, nonepos, exprpos) ; IF IsConstStr (expr) AND IsConstStrKnown (expr) THEN @@ -2624,9 +2646,11 @@ VAR despos, nonepos, exprpos : CARDINAL ; s : String ; + constExpr, overflowChecking: BOOLEAN ; BEGIN - GetQuadOtok (quad, stroppos, op, des, none, expr, overflowChecking, + GetQuadOtok (quad, stroppos, op, des, none, expr, + overflowChecking, constExpr, despos, nonepos, exprpos) ; IF IsConstStr (expr) AND IsConstStrKnown (expr) THEN @@ -2654,9 +2678,11 @@ VAR despos, nonepos, exprpos : CARDINAL ; s : String ; + constExpr, overflowChecking: BOOLEAN ; BEGIN - GetQuadOtok (quad, stroppos, op, des, none, expr, overflowChecking, + GetQuadOtok (quad, stroppos, op, des, none, expr, + overflowChecking, constExpr, despos, nonepos, exprpos) ; IF IsConstStr (expr) AND IsConstStrKnown (expr) THEN @@ -2729,7 +2755,7 @@ VAR op : QuadOperator ; des, op2, expr: CARDINAL ; BEGIN - IF DeclaredOperandsBecomes (p, quad) + IF DeclaredOperandsBecomes (p, quad) AND (NOT IsQuadConstExpr (quad)) THEN IF TypeCheckBecomes (p, quad) THEN @@ -2774,13 +2800,15 @@ END RemoveQuad ; PROCEDURE DeclaredOperandsBecomes (p: WalkAction; quad: CARDINAL) : BOOLEAN ; VAR des, op2, expr : CARDINAL ; + constExpr, overflowChecking : BOOLEAN ; despos, op2pos, exprpos, becomespos: CARDINAL ; op : QuadOperator ; BEGIN GetQuadOtok (quad, becomespos, op, - des, op2, expr, overflowChecking, + des, op2, expr, + overflowChecking, constExpr, despos, op2pos, exprpos) ; Assert (op2pos = UnknownTokenNo) ; TryDeclareConst (exprpos, expr) ; @@ -2812,13 +2840,15 @@ END DeclaredOperandsBecomes ; PROCEDURE TypeCheckBecomes (p: WalkAction; quad: CARDINAL) : BOOLEAN ; VAR des, op2, expr : CARDINAL ; + constExpr, overflowChecking : BOOLEAN ; despos, op2pos, exprpos, becomespos: CARDINAL ; op : QuadOperator ; BEGIN GetQuadOtok (quad, becomespos, op, - des, op2, expr, overflowChecking, + des, op2, expr, + overflowChecking, constExpr, despos, op2pos, exprpos) ; Assert (op2pos = UnknownTokenNo) ; IF StrictTypeChecking AND @@ -2843,6 +2873,7 @@ END TypeCheckBecomes ; PROCEDURE PerformFoldBecomes (p: WalkAction; quad: CARDINAL) ; VAR des, op2, expr : CARDINAL ; + constExpr, overflowChecking : BOOLEAN ; despos, op2pos, exprpos, becomespos, @@ -2850,7 +2881,8 @@ VAR op : QuadOperator ; BEGIN GetQuadOtok (quad, becomespos, op, - des, op2, expr, overflowChecking, + des, op2, expr, + overflowChecking, constExpr, despos, op2pos, exprpos) ; Assert (op2pos = UnknownTokenNo) ; IF IsConst (des) AND IsConstString (expr) @@ -3329,6 +3361,7 @@ END checkDeclare ; PROCEDURE CodeBecomes (quad: CARDINAL) ; VAR + constExpr, overflowChecking: BOOLEAN ; op : QuadOperator ; des, op2, expr : CARDINAL ; @@ -3341,7 +3374,8 @@ VAR exprt : Tree ; location : location_t ; BEGIN - GetQuadOtok (quad, becomespos, op, des, op2, expr, overflowChecking, + GetQuadOtok (quad, becomespos, op, des, op2, expr, + overflowChecking, constExpr, despos, op2pos, exprpos) ; Assert (op2pos = UnknownTokenNo) ; DeclareConstant (exprpos, expr) ; (* Check to see whether expr is a constant and declare it. *) @@ -3729,6 +3763,7 @@ VAR righttype, des, left, right: CARDINAL ; typeChecking, + constExpr, overflowChecking: BOOLEAN ; despos, leftpos, rightpos, @@ -3737,7 +3772,8 @@ VAR op : QuadOperator ; BEGIN GetQuadOTypetok (quad, operatorpos, op, - des, left, right, overflowChecking, typeChecking, + des, left, right, + overflowChecking, typeChecking, constExpr, despos, leftpos, rightpos) ; IF typeChecking AND (op # LogicalRotateOp) AND (op # LogicalShiftOp) THEN @@ -3786,6 +3822,7 @@ VAR lefttype, righttype, ignore, left, right: CARDINAL ; + constExpr, overflowChecking: BOOLEAN ; ignorepos, leftpos, @@ -3795,7 +3832,8 @@ VAR op : QuadOperator ; BEGIN GetQuadOtok (quad, operatorpos, op, - left, right, ignore, overflowChecking, + left, right, ignore, + overflowChecking, constExpr, leftpos, rightpos, ignorepos) ; subexprpos := MakeVirtualTok (operatorpos, leftpos, rightpos) ; lefttype := GetType (left) ; @@ -3847,6 +3885,7 @@ PROCEDURE CodeBinarySet (binop: BuildBinProcedure; doOp: DoProcedure; quad: CARDINAL) ; VAR location : location_t ; + constExpr, overflowChecking: BOOLEAN ; op : QuadOperator ; virttoken, @@ -3859,7 +3898,8 @@ VAR rightpos, operatorpos : CARDINAL ; BEGIN - GetQuadOtok (quad, operatorpos, op, des, left, right, overflowChecking, + GetQuadOtok (quad, operatorpos, op, des, left, right, + overflowChecking, constExpr, despos, leftpos, rightpos) ; (* Firstly ensure that constant literals are declared. *) @@ -5277,17 +5317,17 @@ END FoldIncl ; if op1 < op2 then goto op3. *) -PROCEDURE FoldIfLess (tokenno: CARDINAL; +PROCEDURE FoldIfLess (tokenno: CARDINAL; p: WalkAction; quad: CARDINAL; left, right, destQuad: CARDINAL) ; BEGIN - (* firstly ensure that constant literals are declared *) + (* Firstly ensure that constant literals are declared. *) TryDeclareConstant(tokenno, left) ; TryDeclareConstant(tokenno, right) ; IF IsConst (left) AND IsConst (right) THEN IF IsValueSolved (left) AND IsValueSolved (right) THEN - (* fine, we can take advantage of this and evaluate the condition *) + (* We can take advantage of the known values and evaluate the condition. *) PushValue (left) ; PushValue (right) ; IF Less (tokenno) @@ -5295,21 +5335,229 @@ BEGIN PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) ELSE SubQuad (quad) - END + END ; + NoChange := FALSE END END END FoldIfLess ; +(* + IsBooleanRelOpPattern - return TRUE if the pattern: + q If left right q+2 + q+1 Goto q+4 + q+2 Becomes des[i] TRUE[i] + q+3 Goto q+5 + q+4 Becomes des[i] FALSE[i] +*) + +PROCEDURE IsBooleanRelOpPattern (quad: CARDINAL) : BOOLEAN ; +BEGIN + IF IsQuadConstExpr (quad) + THEN + IF IsConditional (quad) AND + (IsGoto (quad+1) OR IsDummy (quad+1)) AND + IsBecomes (quad+2) AND IsGoto (quad+3) AND + IsBecomes (quad+4) AND + (GetQuadDest (quad) = quad+2) AND + (GetQuadDest (quad+1) = quad+4) AND + (GetQuadDest (quad+3) = quad+5) AND + (GetQuadOp1 (quad+2) = GetQuadOp1 (quad+4)) + THEN + RETURN TRUE + END + END ; + RETURN FALSE +END IsBooleanRelOpPattern ; + + +(* + FoldBooleanRelopPattern - fold the boolean relop pattern of quadruples + above to: + q+2 Becomes des[i] TRUE[i] + or + q+4 Becomes des[i] FALSE[i] + depending upon the condition in quad. +*) + +PROCEDURE FoldBooleanRelopPattern (p: WalkAction; quad: CARDINAL) ; +VAR + des: CARDINAL ; +BEGIN + des := GetQuadOp1 (quad+2) ; + IF QuadCondition (quad) + THEN + SetQuadConstExpr (quad+2, FALSE) ; + SubQuad (quad+4) (* Remove des := FALSE. *) + ELSE + SetQuadConstExpr (quad+4, FALSE) ; + SubQuad (quad+2) (* Remove des := TRUE. *) + END ; + RemoveQuad (p, des, quad) ; + SubQuad (quad+1) ; + SubQuad (quad+3) +END FoldBooleanRelopPattern ; + + +(* + QuadCondition - Pre-condition: left, right operands are constants + which have been resolved. + Post-condition: return TRUE if the condition at + quad is TRUE. +*) + +PROCEDURE QuadCondition (quad: CARDINAL) : BOOLEAN ; +VAR + left, right, dest, combined, + leftpos, rightpos, destpos : CARDINAL ; + constExpr, overflow : BOOLEAN ; + op : QuadOperator ; +BEGIN + GetQuadOtok (quad, combined, op, + left, right, dest, overflow, + constExpr, + leftpos, rightpos, destpos) ; + CASE op OF + + IfInOp : PushValue (right) ; + RETURN SetIn (left, combined) | + IfNotInOp : PushValue (right) ; + RETURN NOT SetIn (left, combined) + + ELSE + END ; + PushValue (left) ; + PushValue (right) ; + CASE op OF + + IfGreOp : RETURN Gre (combined) | + IfLessOp : RETURN Less (combined) | + IfLessEquOp: RETURN LessEqu (combined) | + IfGreEquOp : RETURN GreEqu (combined) | + IfEquOp : RETURN GreEqu (combined) | + IfNotEquOp : RETURN NotEqu (combined) + + ELSE + InternalError ('unrecognized comparison operator') + END ; + RETURN FALSE +END QuadCondition ; + + +(* + FoldIfGre - check to see if it is possible to evaluate + if op1 > op2 then goto op3. +*) + +PROCEDURE FoldIfGre (tokenno: CARDINAL; p: WalkAction; + quad: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + (* Firstly ensure that constant literals are declared. *) + TryDeclareConstant(tokenno, left) ; + TryDeclareConstant(tokenno, right) ; + IF IsConst (left) AND IsConst (right) + THEN + IF IsValueSolved (left) AND IsValueSolved (right) + THEN + (* We can take advantage of the known values and evaluate the condition. *) + IF IsBooleanRelOpPattern (quad) + THEN + FoldBooleanRelopPattern (p, quad) + ELSE + PushValue (left) ; + PushValue (right) ; + IF Gre (tokenno) + THEN + PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) + ELSE + SubQuad (quad) + END + END ; + NoChange := FALSE + END + END +END FoldIfGre ; + + +(* + FoldIfLessEqu - check to see if it is possible to evaluate + if op1 <= op2 then goto op3. +*) + +PROCEDURE FoldIfLessEqu (tokenno: CARDINAL; p: WalkAction; + quad: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + (* Firstly ensure that constant literals are declared. *) + TryDeclareConstant(tokenno, left) ; + TryDeclareConstant(tokenno, right) ; + IF IsConst (left) AND IsConst (right) + THEN + IF IsValueSolved (left) AND IsValueSolved (right) + THEN + (* We can take advantage of the known values and evaluate the condition. *) + IF IsBooleanRelOpPattern (quad) + THEN + FoldBooleanRelopPattern (p, quad) + ELSE + PushValue (left) ; + PushValue (right) ; + IF LessEqu (tokenno) + THEN + PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) + ELSE + SubQuad (quad) + END + END ; + NoChange := FALSE + END + END +END FoldIfLessEqu ; + + +(* + FoldIfGreEqu - check to see if it is possible to evaluate + if op1 >= op2 then goto op3. +*) + +PROCEDURE FoldIfGreEqu (tokenno: CARDINAL; p: WalkAction; + quad: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + (* Firstly ensure that constant literals are declared. *) + TryDeclareConstant(tokenno, left) ; + TryDeclareConstant(tokenno, right) ; + IF IsConst (left) AND IsConst (right) + THEN + IF IsValueSolved (left) AND IsValueSolved (right) + THEN + (* We can take advantage of the known values and evaluate the condition. *) + IF IsBooleanRelOpPattern (quad) + THEN + FoldBooleanRelopPattern (p, quad) + ELSE + PushValue (left) ; + PushValue (right) ; + IF GreEqu (tokenno) + THEN + PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) + ELSE + SubQuad (quad) + END + END ; + NoChange := FALSE + END + END +END FoldIfGreEqu ; + + (* FoldIfIn - check whether we can fold the IfInOp if op1 in op2 then goto op3 *) -PROCEDURE FoldIfIn (tokenno: CARDINAL; +PROCEDURE FoldIfIn (tokenno: CARDINAL; p: WalkAction; quad: CARDINAL; left, right, destQuad: CARDINAL) ; BEGIN - (* firstly ensure that constant literals are declared *) + (* Firstly ensure that constant literals are declared. *) TryDeclareConstant (tokenno, left) ; TryDeclareConstant (tokenno, right) ; IF IsConst (left) AND IsConst (right) @@ -5318,17 +5566,23 @@ BEGIN THEN IF CheckBinaryExpressionTypes (quad, NoWalkProcedure) THEN - (* fine, we can take advantage of this and evaluate the condition *) - PushValue (right) ; - IF SetIn (tokenno, left) + (* We can take advantage of the known values and evaluate the condition. *) + IF IsBooleanRelOpPattern (quad) THEN - PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) + FoldBooleanRelopPattern (p, quad) ELSE - SubQuad (quad) + PushValue (right) ; + IF SetIn (tokenno, left) + THEN + PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) + ELSE + SubQuad (quad) + END END ELSE SubQuad (quad) - END + END ; + NoChange := FALSE END END END FoldIfIn ; @@ -5339,10 +5593,10 @@ END FoldIfIn ; if not (op1 in op2) then goto op3 *) -PROCEDURE FoldIfNotIn (tokenno: CARDINAL; +PROCEDURE FoldIfNotIn (tokenno: CARDINAL; p: WalkAction; quad: CARDINAL; left, right, destQuad: CARDINAL) ; BEGIN - (* firstly ensure that constant literals are declared *) + (* Firstly ensure that constant literals are declared. *) TryDeclareConstant (tokenno, left) ; TryDeclareConstant (tokenno, right) ; IF IsConst (left) AND IsConst (right) @@ -5351,20 +5605,96 @@ BEGIN THEN IF CheckBinaryExpressionTypes (quad, NoWalkProcedure) THEN - (* fine, we can take advantage of this and evaluate the condition *) + (* We can take advantage of the known values and evaluate the condition. *) + IF IsBooleanRelOpPattern (quad) + THEN + FoldBooleanRelopPattern (p, quad) + ELSE + PushValue (right) ; + IF NOT SetIn (tokenno, left) + THEN + PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) + ELSE + SubQuad (quad) + END + END + ELSE + SubQuad (quad) + END ; + NoChange := FALSE + END + END +END FoldIfNotIn ; + + +(* + FoldIfEqu - check to see if it is possible to evaluate + if op1 = op2 then goto op3. +*) + +PROCEDURE FoldIfEqu (tokenno: CARDINAL; p: WalkAction; + quad: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + (* Firstly ensure that constant literals are declared. *) + TryDeclareConstant(tokenno, left) ; + TryDeclareConstant(tokenno, right) ; + IF IsConst (left) AND IsConst (right) + THEN + IF IsValueSolved (left) AND IsValueSolved (right) + THEN + IF IsBooleanRelOpPattern (quad) + THEN + FoldBooleanRelopPattern (p, quad) + ELSE + (* We can take advantage of the known values and evaluate the condition. *) + PushValue (left) ; PushValue (right) ; - IF NOT SetIn (tokenno, left) + IF Equ (tokenno) THEN PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) ELSE SubQuad (quad) END + END ; + NoChange := FALSE + END + END +END FoldIfEqu ; + + +(* + FoldIfNotEqu - check to see if it is possible to evaluate + if op1 # op2 then goto op3. +*) + +PROCEDURE FoldIfNotEqu (tokenno: CARDINAL; p: WalkAction; + quad: CARDINAL; left, right, destQuad: CARDINAL) ; +BEGIN + (* Firstly ensure that constant literals are declared. *) + TryDeclareConstant(tokenno, left) ; + TryDeclareConstant(tokenno, right) ; + IF IsConst (left) AND IsConst (right) + THEN + IF IsValueSolved (left) AND IsValueSolved (right) + THEN + IF IsBooleanRelOpPattern (quad) + THEN + FoldBooleanRelopPattern (p, quad) ELSE - SubQuad (quad) - END + (* We can take advantage of the known values and evaluate the condition. *) + PushValue (left) ; + PushValue (right) ; + IF NotEqu (tokenno) + THEN + PutQuad (quad, GotoOp, NulSym, NulSym, destQuad) + ELSE + SubQuad (quad) + END + END ; + NoChange := FALSE END END -END FoldIfNotIn ; +END FoldIfNotEqu ; (* @@ -6839,11 +7169,12 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN GetQuadOtok (quad, combined, op, left, right, dest, overflow, + constExpr, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; @@ -6855,7 +7186,7 @@ BEGIN THEN BuildGoto(location, string(CreateLabelName(dest))) ELSE - (* fall through *) + (* Fall through. *) END ELSIF IsConstSet(left) OR (IsVar(left) AND IsSet(SkipType(GetType(left)))) OR IsConstSet(right) OR (IsVar(right) AND IsSet(SkipType(GetType(right)))) @@ -6951,11 +7282,11 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, overflow, constExpr, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; IF IsConst(left) AND IsConst(right) @@ -7061,11 +7392,12 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, + overflow, constExpr, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; IF IsConst(left) AND IsConst(right) @@ -7172,11 +7504,12 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, + overflow, constExpr, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; IF IsConst(left) AND IsConst(right) @@ -7358,11 +7691,12 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, + overflow, constExpr, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; IF IsConst (left) AND IsConst (right) @@ -7409,12 +7743,13 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN (* Ensure that any remaining undeclared constant literal is declared. *) GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, + constExpr, overflow, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; IF IsConst (left) AND IsConst (right) @@ -7463,12 +7798,13 @@ VAR lefttype, righttype, left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN (* Ensure that any remaining undeclared constant literal is declared. *) GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, + constExpr, overflow, leftpos, rightpos, destpos) ; DeclareConstant (leftpos, left) ; DeclareConstant (rightpos, right) ; @@ -7614,12 +7950,13 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN (* Ensure that any remaining undeclared constant literal is declared. *) GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, + constExpr, overflow, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; IF IsConst(left) AND IsConst(right) @@ -7683,12 +8020,13 @@ VAR location : location_t ; left, right, dest, combined, leftpos, rightpos, destpos : CARDINAL ; - overflow : BOOLEAN ; + constExpr, overflow : BOOLEAN ; op : QuadOperator ; BEGIN (* Ensure that any remaining undeclared constant literal is declared. *) GetQuadOtok (quad, combined, op, - left, right, dest, overflow, + left, right, dest, + overflow, constExpr, leftpos, rightpos, destpos) ; location := TokenToLocation (combined) ; IF IsConst(left) AND IsConst(right) @@ -7804,6 +8142,7 @@ END CodeIndrX ; PROCEDURE CodeXIndr (quad: CARDINAL) ; VAR + constExpr, overflowChecking: BOOLEAN ; op : QuadOperator ; tokenno, @@ -7818,7 +8157,8 @@ VAR newstr : Tree ; location : location_t ; BEGIN - GetQuadOtok (quad, xindrpos, op, left, type, right, overflowChecking, + GetQuadOtok (quad, xindrpos, op, left, type, right, + overflowChecking, constExpr, leftpos, typepos, rightpos) ; tokenno := MakeVirtualTok (xindrpos, leftpos, rightpos) ; location := TokenToLocation (tokenno) ; diff --git a/gcc/m2/gm2-compiler/M2Optimize.mod b/gcc/m2/gm2-compiler/M2Optimize.mod index 29fda9a6dd70..71b0094fdff9 100644 --- a/gcc/m2/gm2-compiler/M2Optimize.mod +++ b/gcc/m2/gm2-compiler/M2Optimize.mod @@ -154,6 +154,7 @@ PROCEDURE ReduceBranch (Operator: QuadOperator; VAR NextQuad: CARDINAL; Folded: BOOLEAN) : BOOLEAN ; VAR + constExpr, overflowChecking: BOOLEAN ; OpNext : QuadOperator ; tok, @@ -188,11 +189,11 @@ BEGIN THEN GetQuadOtok (CurrentQuad, tok, Operator, CurrentOperand1, CurrentOperand2, CurrentOperand3, - overflowChecking, op1tok, op2tok, op3tok) ; + overflowChecking, constExpr, op1tok, op2tok, op3tok) ; SubQuad (NextQuad) ; PutQuadOtok (CurrentQuad, tok, Opposite (Operator), CurrentOperand1, CurrentOperand2, Op3Next, - overflowChecking, + overflowChecking, constExpr, op1tok, op2tok, op3tok) ; NextQuad := NextPlusOne ; Folded := TRUE diff --git a/gcc/m2/gm2-compiler/M2Quads.def b/gcc/m2/gm2-compiler/M2Quads.def index a8ca69b7bc6a..6175d8d1cb27 100644 --- a/gcc/m2/gm2-compiler/M2Quads.def +++ b/gcc/m2/gm2-compiler/M2Quads.def @@ -124,6 +124,11 @@ EXPORT QUALIFIED StartBuildDefFile, StartBuildModFile, EndBuildFile, IsPseudoQuad, IsDefOrModFile, IsInitialisingConst, + IsQuadConstExpr, + IsBecomes, + IsDummy, + GetQuadOp1, GetQuadOp2, GetQuadOp3, GetQuadDest, + SetQuadConstExpr, DumpQuadruples, DisplayQuadRange, DisplayQuad, WriteOperator, BackPatchSubrangesAndOptParam, @@ -146,6 +151,8 @@ EXPORT QUALIFIED StartBuildDefFile, StartBuildModFile, EndBuildFile, IsAutoPushOn, PushAutoOn, PushAutoOff, PopAuto, PushInConstExpression, PopInConstExpression, IsInConstExpression, + PushInConstParameters, PopInConstParameters, + IsInConstParameters, MustCheckOverflow, BuildAsmElement, BuildAsmTrash, GetQuadTrash ; @@ -394,6 +401,62 @@ PROCEDURE IsFinallyStart (QuadNo: CARDINAL) : BOOLEAN ; PROCEDURE IsFinallyEnd (QuadNo: CARDINAL) : BOOLEAN ; +(* + IsBecomes - return TRUE if QuadNo is a BecomesOp. +*) + +PROCEDURE IsBecomes (QuadNo: CARDINAL) : BOOLEAN ; + + +(* + IsDummy - return TRUE if QuadNo is a DummyOp. +*) + +PROCEDURE IsDummy (QuadNo: CARDINAL) : BOOLEAN ; + + +(* + IsQuadConstExpr - returns TRUE if QuadNo is part of a constant expression. +*) + +PROCEDURE IsQuadConstExpr (QuadNo: CARDINAL) : BOOLEAN ; + + +(* + SetQuadConstExpr - sets the constexpr field to value. +*) + +PROCEDURE SetQuadConstExpr (QuadNo: CARDINAL; value: BOOLEAN) ; + + +(* + GetQuadDest - returns the jump destination associated with quad. +*) + +PROCEDURE GetQuadDest (QuadNo: CARDINAL) : CARDINAL ; + + +(* + GetQuadOp1 - returns the 1st operand associated with quad. +*) + +PROCEDURE GetQuadOp1 (QuadNo: CARDINAL) : CARDINAL ; + + +(* + GetQuadOp2 - returns the 2nd operand associated with quad. +*) + +PROCEDURE GetQuadOp2 (QuadNo: CARDINAL) : CARDINAL ; + + +(* + GetQuadOp3 - returns the 3rd operand associated with quad. +*) + +PROCEDURE GetQuadOp3 (QuadNo: CARDINAL) : CARDINAL ; + + (* IsInitialisingConst - returns TRUE if the quadruple is setting a const (op1) with a value. @@ -547,7 +610,7 @@ PROCEDURE GetQuadOtok (QuadNo: CARDINAL; VAR tok: CARDINAL; VAR Op: QuadOperator; VAR Oper1, Oper2, Oper3: CARDINAL; - VAR overflowChecking: BOOLEAN ; + VAR overflowChecking, constExpr: BOOLEAN ; VAR Op1Pos, Op2Pos, Op3Pos: CARDINAL) ; @@ -559,9 +622,10 @@ PROCEDURE GetQuadOTypetok (QuadNo: CARDINAL; VAR tok: CARDINAL; VAR Op: QuadOperator; VAR Oper1, Oper2, Oper3: CARDINAL; - VAR overflowChecking, typeChecking: BOOLEAN ; + VAR overflowChecking, typeChecking, constExpr: BOOLEAN ; VAR Op1Pos, Op2Pos, Op3Pos: CARDINAL) ; + (* PutQuadOtok - alters a quadruple QuadNo with Op, Oper1, Oper2, Oper3, and sets a boolean to determinine whether overflow should be checked. @@ -571,7 +635,7 @@ PROCEDURE PutQuadOtok (QuadNo: CARDINAL; tok: CARDINAL; Op: QuadOperator; Oper1, Oper2, Oper3: CARDINAL; - overflowChecking: BOOLEAN ; + overflowChecking, constExpr: BOOLEAN ; Op1Pos, Op2Pos, Op3Pos: CARDINAL) ; @@ -2801,6 +2865,27 @@ PROCEDURE PopInConstExpression ; PROCEDURE IsInConstExpression () : BOOLEAN ; +(* + PushInConstParameters - push the InConstParameters flag and then set it to TRUE. +*) + +PROCEDURE PushInConstParameters ; + + +(* + PopInConstParameters - restores the previous value of the InConstParameters. +*) + +PROCEDURE PopInConstParameters ; + + +(* + IsInConstParameters - returns the value of the InConstParameters. +*) + +PROCEDURE IsInConstParameters () : BOOLEAN ; + + (* BuildAsmElement - the stack is expected to contain: diff --git a/gcc/m2/gm2-compiler/M2Quads.mod b/gcc/m2/gm2-compiler/M2Quads.mod index 12bc5494996d..17d7aabc10a5 100644 --- a/gcc/m2/gm2-compiler/M2Quads.mod +++ b/gcc/m2/gm2-compiler/M2Quads.mod @@ -307,6 +307,8 @@ TYPE LineNo : CARDINAL ; (* Line No of source text. *) TokenNo : CARDINAL ; (* Token No of source text. *) NoOfTimesReferenced: CARDINAL ; (* No of times quad is referenced. *) + ConstExpr, (* Must backend resolve this at *) + (* compile time? *) CheckType, CheckOverflow : BOOLEAN ; (* should backend check overflow *) op1pos, @@ -344,7 +346,8 @@ VAR TryStack, CatchStack, ExceptStack, - ConstStack, + ConstExprStack, + ConstParamStack, AutoStack, RepeatStack, WhileStack, @@ -369,6 +372,7 @@ VAR LogicalXorTok, (* Internal _LXOR token. *) LogicalDifferenceTok : Name ; (* Internal _LDIFF token. *) InConstExpression, + InConstParameters, IsAutoOn, (* Should parser automatically push *) (* idents? *) MustNotCheckBounds : BOOLEAN ; @@ -849,6 +853,101 @@ BEGIN END IsFinallyEnd ; +(* + IsBecomes - return TRUE if QuadNo is a BecomesOp. +*) + +PROCEDURE IsBecomes (QuadNo: CARDINAL) : BOOLEAN ; +BEGIN + RETURN IsQuadA (QuadNo, BecomesOp) +END IsBecomes ; + + +(* + IsDummy - return TRUE if QuadNo is a DummyOp. +*) + +PROCEDURE IsDummy (QuadNo: CARDINAL) : BOOLEAN ; +BEGIN + RETURN IsQuadA (QuadNo, DummyOp) +END IsDummy ; + + +(* + IsQuadConstExpr - returns TRUE if QuadNo is part of a constant expression. +*) + +PROCEDURE IsQuadConstExpr (QuadNo: CARDINAL) : BOOLEAN ; +VAR + f: QuadFrame ; +BEGIN + f := GetQF (QuadNo) ; + RETURN f^.ConstExpr +END IsQuadConstExpr ; + + +(* + SetQuadConstExpr - sets the constexpr field to value. +*) + +PROCEDURE SetQuadConstExpr (QuadNo: CARDINAL; value: BOOLEAN) ; +VAR + f: QuadFrame ; +BEGIN + f := GetQF (QuadNo) ; + f^.ConstExpr := value +END SetQuadConstExpr ; + + +(* + GetQuadDest - returns the jump destination associated with quad. +*) + +PROCEDURE GetQuadDest (QuadNo: CARDINAL) : CARDINAL ; +BEGIN + RETURN GetQuadOp3 (QuadNo) +END GetQuadDest ; + + +(* + GetQuadOp1 - returns the 1st operand associated with quad. +*) + +PROCEDURE GetQuadOp1 (QuadNo: CARDINAL) : CARDINAL ; +VAR + f: QuadFrame ; +BEGIN + f := GetQF (QuadNo) ; + RETURN f^.Operand1 +END GetQuadOp1 ; + + +(* + GetQuadOp2 - returns the 2nd operand associated with quad. +*) + +PROCEDURE GetQuadOp2 (QuadNo: CARDINAL) : CARDINAL ; +VAR + f: QuadFrame ; +BEGIN + f := GetQF (QuadNo) ; + RETURN f^.Operand2 +END GetQuadOp2 ; + + +(* + GetQuadOp3 - returns the 3rd operand associated with quad. +*) + +PROCEDURE GetQuadOp3 (QuadNo: CARDINAL) : CARDINAL ; +VAR + f: QuadFrame ; +BEGIN + f := GetQF (QuadNo) ; + RETURN f^.Operand3 +END GetQuadOp3 ; + + (* IsInitialisingConst - returns TRUE if the quadruple is setting a const (op1) with a value. @@ -1180,7 +1279,7 @@ PROCEDURE GetQuadOtok (QuadNo: CARDINAL; VAR tok: CARDINAL; VAR Op: QuadOperator; VAR Oper1, Oper2, Oper3: CARDINAL; - VAR overflowChecking: BOOLEAN ; + VAR overflowChecking, constExpr: BOOLEAN ; VAR Op1Pos, Op2Pos, Op3Pos: CARDINAL) ; VAR f: QuadFrame ; @@ -1196,7 +1295,8 @@ BEGIN Op2Pos := op2pos ; Op3Pos := op3pos ; tok := TokenNo ; - overflowChecking := CheckOverflow + overflowChecking := CheckOverflow ; + constExpr := ConstExpr END END GetQuadOtok ; @@ -1210,7 +1310,7 @@ PROCEDURE PutQuadOtok (QuadNo: CARDINAL; tok: CARDINAL; Op: QuadOperator; Oper1, Oper2, Oper3: CARDINAL; - overflowChecking: BOOLEAN ; + overflowChecking, constExpr: BOOLEAN ; Op1Pos, Op2Pos, Op3Pos: CARDINAL) ; VAR f: QuadFrame ; @@ -1233,7 +1333,8 @@ BEGIN op1pos := Op1Pos ; op2pos := Op2Pos ; op3pos := Op3Pos ; - TokenNo := tok + TokenNo := tok ; + ConstExpr := constExpr END END END PutQuadOtok ; @@ -1384,7 +1485,8 @@ BEGIN Operand2 := Oper2 ; Operand3 := Oper3 ; CheckOverflow := overflow ; - CheckType := checktype + CheckType := checktype ; + ConstExpr := IsInConstExpression () END END END PutQuadOType ; @@ -1403,14 +1505,14 @@ END PutQuad ; (* - GetQuadOtok - returns the fields associated with quadruple QuadNo. + GetQuadOTypetok - returns the fields associated with quadruple QuadNo. *) PROCEDURE GetQuadOTypetok (QuadNo: CARDINAL; VAR tok: CARDINAL; VAR Op: QuadOperator; VAR Oper1, Oper2, Oper3: CARDINAL; - VAR overflowChecking, typeChecking: BOOLEAN ; + VAR overflowChecking, typeChecking, constExpr: BOOLEAN ; VAR Op1Pos, Op2Pos, Op3Pos: CARDINAL) ; VAR f: QuadFrame ; @@ -1427,7 +1529,8 @@ BEGIN Op3Pos := op3pos ; tok := TokenNo ; overflowChecking := CheckOverflow ; - typeChecking := CheckType + typeChecking := CheckType ; + constExpr := ConstExpr END END GetQuadOTypetok ; @@ -1547,7 +1650,8 @@ BEGIN Trash := 0 ; op1pos := UnknownTokenNo ; op2pos := UnknownTokenNo ; - op3pos := UnknownTokenNo + op3pos := UnknownTokenNo ; + ConstExpr := FALSE END END EraseQuad ; @@ -3199,9 +3303,11 @@ BEGIN CASE Operator OF SubrangeLowOp : Operand3 := CollectLow (Operand3) ; - Operator := BecomesOp | + Operator := BecomesOp ; + ConstExpr := FALSE | SubrangeHighOp: Operand3 := CollectHigh (Operand3) ; - Operator := BecomesOp | + Operator := BecomesOp ; + ConstExpr := FALSE | OptParamOp : Operand3 := GetOptArgInit (Operand3) ; Operator := ParamOp @@ -3665,21 +3771,21 @@ BEGIN PopTtok (Des, destok) ; (* Conditional Boolean Assignment. *) BackPatch (t, NextQuad) ; - IF GetMode (Des) = RightValue + IF GetMode (Des) = LeftValue THEN - GenQuadO (becomesTokNo, BecomesOp, Des, NulSym, True, checkOverflow) - ELSE CheckPointerThroughNil (destok, Des) ; GenQuadO (destok, XIndrOp, Des, Boolean, True, checkOverflow) + ELSE + GenQuadO (becomesTokNo, BecomesOp, Des, NulSym, True, checkOverflow) END ; GenQuadO (destok, GotoOp, NulSym, NulSym, NextQuad+2, checkOverflow) ; BackPatch (f, NextQuad) ; - IF GetMode (Des) = RightValue + IF GetMode (Des) = LeftValue THEN - GenQuadO (becomesTokNo, BecomesOp, Des, NulSym, False, checkOverflow) - ELSE CheckPointerThroughNil (destok, Des) ; GenQuadO (destok, XIndrOp, Des, Boolean, False, checkOverflow) + ELSE + GenQuadO (becomesTokNo, BecomesOp, Des, NulSym, False, checkOverflow) END ELSE PopTrwtok (Exp, r, exptok) ; @@ -12956,11 +13062,9 @@ VAR f : BoolFrame ; BEGIN Assert (IsBoolean (i)) ; - (* - need to convert it to a variable containing the result. - Des will be a boolean type - *) - Des := MakeTemporary (tok, RightValue) ; + (* We need to convert the boolean top of stack into a variable or + constant boolean. *) + Des := MakeTemporary (tok, AreConstant (IsInConstExpression ())) ; PutVar (Des, Boolean) ; PushTtok (Des, tok) ; (* we have just increased the stack so we must use i+1 *) f := PeepAddress (BoolStack, i+1) ; @@ -12968,9 +13072,9 @@ BEGIN BuildAssignmentWithoutBounds (tok, FALSE, TRUE) ; (* restored stack *) f := PeepAddress (BoolStack, i) ; WITH f^ DO - TrueExit := Des ; (* alter Stack(i) to contain the variable *) + TrueExit := Des ; (* Alter Stack(i) to contain the variable. *) FalseExit := Boolean ; - BooleanOp := FALSE ; (* no longer a Boolean True|False pair *) + BooleanOp := FALSE ; (* No longer a Boolean True|False pair. *) Unbounded := NulSym ; Dimension := 0 ; ReadWrite := NulSym ; @@ -13802,7 +13906,13 @@ BEGIN f := GetQF(BufferQuad) ; WITH f^ DO WriteOperator(Operator) ; - fprintf1 (GetDumpFile (), ' [%d] ', NoOfTimesReferenced) ; + fprintf1 (GetDumpFile (), ' [%d]', NoOfTimesReferenced) ; + IF ConstExpr + THEN + fprintf0 (GetDumpFile (), ' const ') + ELSE + fprintf0 (GetDumpFile (), ' ') + END ; CASE Operator OF HighOp : WriteOperand(Operand1) ; @@ -15651,7 +15761,7 @@ END PopAuto ; PROCEDURE PushInConstExpression ; BEGIN - PushWord(ConstStack, InConstExpression) ; + PushWord(ConstExprStack, InConstExpression) ; InConstExpression := TRUE END PushInConstExpression ; @@ -15662,7 +15772,7 @@ END PushInConstExpression ; PROCEDURE PopInConstExpression ; BEGIN - InConstExpression := PopWord(ConstStack) + InConstExpression := PopWord(ConstExprStack) END PopInConstExpression ; @@ -15676,6 +15786,37 @@ BEGIN END IsInConstExpression ; +(* + PushInConstParameters - push the InConstParameters flag and then set it to TRUE. +*) + +PROCEDURE PushInConstParameters ; +BEGIN + PushWord (ConstParamStack, InConstParameters) ; + InConstParameters := TRUE +END PushInConstParameters ; + + +(* + PopInConstParameters - restores the previous value of the InConstParameters. +*) + +PROCEDURE PopInConstParameters ; +BEGIN + InConstParameters := PopWord(ConstParamStack) +END PopInConstParameters ; + + +(* + IsInConstParameters - returns the value of the InConstParameters. +*) + +PROCEDURE IsInConstParameters () : BOOLEAN ; +BEGIN + RETURN( InConstParameters ) +END IsInConstParameters ; + + (* MustCheckOverflow - returns TRUE if the quadruple should test for overflow. *) @@ -15764,7 +15905,8 @@ BEGIN CatchStack := InitStackWord() ; ExceptStack := InitStackWord() ; ConstructorStack := InitStackAddress() ; - ConstStack := InitStackWord() ; + ConstParamStack := InitStackWord () ; + ConstExprStack := InitStackWord () ; (* StressStack ; *) SuppressWith := FALSE ; Head := 1 ; @@ -15779,6 +15921,7 @@ BEGIN AutoStack := InitStackWord() ; IsAutoOn := TRUE ; InConstExpression := FALSE ; + InConstParameters := FALSE ; FreeLineList := NIL ; InitList(VarientFields) ; VarientFieldNo := 0 ; diff --git a/gcc/m2/gm2-compiler/M2SymInit.mod b/gcc/m2/gm2-compiler/M2SymInit.mod index 0b23e53a4a91..4c6035ae9292 100644 --- a/gcc/m2/gm2-compiler/M2SymInit.mod +++ b/gcc/m2/gm2-compiler/M2SymInit.mod @@ -571,10 +571,11 @@ VAR op : QuadOperator ; op1, op2, op3 : CARDINAL ; op1tok, op2tok, op3tok, qtok: CARDINAL ; - overflowChecking : BOOLEAN ; + constExpr, overflowChecking : BOOLEAN ; s : String ; BEGIN - GetQuadOtok (quad, qtok, op, op1, op2, op3, overflowChecking, + GetQuadOtok (quad, qtok, op, op1, op2, op3, + overflowChecking, constExpr, op1tok, op2tok, op3tok) ; IF IsUniqueWarning (qtok) THEN @@ -1249,7 +1250,7 @@ VAR op : QuadOperator ; op1, op2, op3 : CARDINAL ; op1tok, op2tok, op3tok, qtok: CARDINAL ; - overflowChecking : BOOLEAN ; + constExpr, overflowChecking : BOOLEAN ; BEGIN IF quad = 3140 THEN @@ -1262,7 +1263,8 @@ BEGIN ForeachLocalSymDo (procSym, PrintSym) ; printf0 ("***********************************\n") END ; - GetQuadOtok (quad, qtok, op, op1, op2, op3, overflowChecking, + GetQuadOtok (quad, qtok, op, op1, op2, op3, + overflowChecking, constExpr, op1tok, op2tok, op3tok) ; op1tok := DefaultTokPos (op1tok, qtok) ; op2tok := DefaultTokPos (op2tok, qtok) ; @@ -1541,12 +1543,13 @@ VAR op : QuadOperator ; op1, proc, param, paramValue : CARDINAL ; op1tok, op2tok, paramtok, qtok: CARDINAL ; - overflowChecking : BOOLEAN ; + constExpr, overflowChecking : BOOLEAN ; heapValue, ptrToHeap : CARDINAL ; BEGIN IF trashQuad # 0 THEN - GetQuadOtok (trashQuad, qtok, op, op1, proc, param, overflowChecking, + GetQuadOtok (trashQuad, qtok, op, op1, proc, param, + overflowChecking, constExpr, op1tok, op2tok, paramtok) ; heapValue := GetQuadTrash (trashQuad) ; IF Debugging diff --git a/gcc/m2/gm2-compiler/P3Build.bnf b/gcc/m2/gm2-compiler/P3Build.bnf index cc1accef1a02..d5eddc7e98e6 100644 --- a/gcc/m2/gm2-compiler/P3Build.bnf +++ b/gcc/m2/gm2-compiler/P3Build.bnf @@ -129,7 +129,8 @@ FROM M2Quads IMPORT PushT, PopT, PushTF, PopTF, PopNothing, Annotate, AddVarientRange, AddVarientEquality, BuildAsmElement, BuildAsmTrash, BeginVarient, EndVarient, BeginVarientList, EndVarientList, - PushInConstExpression, PopInConstExpression, IsInConstExpression, + PushInConstExpression, PopInConstExpression, + PushInConstParameters, PopInConstParameters, IsInConstParameters, BuildDefaultFieldAlignment, BuildPragmaField, IsAutoPushOn, PushAutoOff, PushAutoOn, PopAuto ; @@ -670,10 +671,12 @@ ConstantDeclaration := % VAR =: ConstExpression := % VAR tokpos: CARDINAL ; % + % PushInConstExpression % % PushAutoOn % SimpleConstExpr [ Relation % tokpos := GetTokenNo ()-1 % SimpleConstExpr % BuildRelOp (tokpos) % ] % PopAuto % + % PopInConstExpression % =: Relation := "=" % PushTtok(EqualTok, GetTokenNo() -1) % @@ -773,8 +776,8 @@ ConstSetOrQualidentOrFunction := % VAR Constructor ) =: -ConstActualParameters := % PushInConstExpression % - ActualParameters % PopInConstExpression % +ConstActualParameters := % PushInConstParameters % + ActualParameters % PopInConstParameters % =: ConstAttribute := "__ATTRIBUTE__" "__BUILTIN__" "(" "(" % PushAutoOn % @@ -1121,7 +1124,7 @@ SetOrDesignatorOrFunction := % VAR % Assert (OperandTok (1) # UnknownTokenNo) % [ Constructor | SimpleDes % (* Assert (OperandTok(1) # UnknownTokenNo) *) % - [ ActualParameters % IF IsInConstExpression() + [ ActualParameters % IF IsInConstParameters () THEN BuildConstFunctionCall ELSE diff --git a/gcc/m2/gm2-compiler/PCBuild.bnf b/gcc/m2/gm2-compiler/PCBuild.bnf index 4034dda245a9..b983cc8b8520 100644 --- a/gcc/m2/gm2-compiler/PCBuild.bnf +++ b/gcc/m2/gm2-compiler/PCBuild.bnf @@ -66,7 +66,8 @@ FROM M2Quads IMPORT Top, PushT, PopT, PushTF, PopTF, PopNothing, OperandT, PushT PushT, PushTF, IsAutoPushOn, PushAutoOff, PushAutoOn, PopAuto, BuildTypeForConstructor, BuildConstructor, BuildConstructorEnd, PopConstructor, - NextConstructorField, SilentBuildConstructor ; + NextConstructorField, SilentBuildConstructor, + PushInConstExpression, PopInConstExpression ; FROM P3SymBuild IMPORT CheckCanBeImported ; @@ -603,9 +604,11 @@ ConstantDeclaration := % VAR ConstExpression := % VAR top: CARDINAL ; % % top := Top() % + % PushInConstExpression % % PushAutoOff % SimpleConstExpr [ Relation SimpleConstExpr % BuildRelationConst % ] % PopAuto % + % PopInConstExpression % % Assert(top=Top()) % =: diff --git a/gcc/m2/gm2-compiler/PHBuild.bnf b/gcc/m2/gm2-compiler/PHBuild.bnf index fcb1ce6092ac..52214894d0ac 100644 --- a/gcc/m2/gm2-compiler/PHBuild.bnf +++ b/gcc/m2/gm2-compiler/PHBuild.bnf @@ -102,7 +102,8 @@ FROM M2Quads IMPORT PushT, PopT, PushTF, PopTF, PopNothing, Annotate, AddVarientRange, AddVarientEquality, BuildDefaultFieldAlignment, BuildPragmaField, CheckWithReference, DisplayStack, Annotate, - IsAutoPushOn, PushAutoOff, PushAutoOn, PopAuto ; + IsAutoPushOn, PushAutoOff, PushAutoOn, PopAuto, + PushInConstExpression, PopInConstExpression ; FROM P3SymBuild IMPORT P3StartBuildProgModule, P3EndBuildProgModule, @@ -572,10 +573,12 @@ ConstantDeclaration := % Pus =: ConstExpression := % VAR tokpos: CARDINAL ; % + % PushInConstExpression % % PushAutoOn % SimpleConstExpr [ Relation % tokpos := GetTokenNo ()-1 % SimpleConstExpr % BuildRelOp (tokpos) % ] % PopAuto % + % PopInConstExpression % =: Relation := "=" % PushTtok(EqualTok, GetTokenNo() -1) % diff --git a/gcc/m2/gm2-gcc/m2expr.cc b/gcc/m2/gm2-gcc/m2expr.cc index ba5c652209e3..746e211ab514 100644 --- a/gcc/m2/gm2-gcc/m2expr.cc +++ b/gcc/m2/gm2-gcc/m2expr.cc @@ -111,6 +111,14 @@ m2expr_StringLength (tree string) return TREE_STRING_LENGTH (string); } +/* BuildCondIfExpression returns a tree containing (condition) ? (left) : right. */ + +tree +m2expr_BuildCondIfExpression (tree condition, tree type, tree left, tree right) +{ + return fold_build3 (COND_EXPR, type, condition, left, right); +} + /* CheckAddressToCardinal if op is a pointer convert it to the ADDRESS type. */ static tree diff --git a/gcc/m2/gm2-gcc/m2expr.def b/gcc/m2/gm2-gcc/m2expr.def index d4b040c8ac33..c195f1987a89 100644 --- a/gcc/m2/gm2-gcc/m2expr.def +++ b/gcc/m2/gm2-gcc/m2expr.def @@ -737,5 +737,12 @@ PROCEDURE OverflowZType (location: location_t; str: ADDRESS; base: CARDINAL; issueError: BOOLEAN) : BOOLEAN ; +(* + BuildCondIfExpression - returns a tree containing + (condition) ? (left) : right. +*) + +PROCEDURE BuildCondIfExpression (condition, type, left, right: Tree) : Tree ; + END m2expr. diff --git a/gcc/m2/gm2-gcc/m2expr.h b/gcc/m2/gm2-gcc/m2expr.h index f045d2949ffe..d5fb475645c8 100644 --- a/gcc/m2/gm2-gcc/m2expr.h +++ b/gcc/m2/gm2-gcc/m2expr.h @@ -239,6 +239,8 @@ EXTERN void m2expr_ConstantExpressionWarning (tree value); EXTERN tree m2expr_BuildAddAddress (location_t location, tree op1, tree op2); EXTERN tree m2expr_BuildRDiv (location_t location, tree op1, tree op2, bool needconvert); +EXTERN tree m2expr_BuildCondIfExpression (tree condition, tree type, + tree left, tree right); EXTERN int m2expr_GetCstInteger (tree cst); EXTERN tree m2expr_calcNbits (location_t location, tree min, tree max); EXTERN bool m2expr_OverflowZType (location_t location, const char *str, diff --git a/gcc/testsuite/gm2/iso/const/pass/iso-const-pass.exp b/gcc/testsuite/gm2/iso/const/pass/iso-const-pass.exp new file mode 100644 index 000000000000..6deabf2aaa4c --- /dev/null +++ b/gcc/testsuite/gm2/iso/const/pass/iso-const-pass.exp @@ -0,0 +1,36 @@ +# Copyright (C) 2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# This file was written by Gaius Mulley (gaius.mulley@southwales.ac.uk) +# for GNU Modula-2. + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib gm2-torture.exp + +gm2_init_iso "${srcdir}/gm2/iso/const/pass" -fcpp + +foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + gm2-torture $testcase +} From 8f0ff6b998748f3581e0f06e3108193866b1209d Mon Sep 17 00:00:00 2001 From: Lulu Cheng <chenglulu@loongson.cn> Date: Tue, 2 Apr 2024 14:29:08 +0800 Subject: [PATCH 411/551] LoongArch: Set default alignment for functions jumps and loops [PR112919]. Xi Ruoyao set the alignment rules under LA464 in commit r14-1839, but the macro ASM_OUTPUT_ALIGN_WITH_NOP was removed in R14-4674, which affected the alignment rules. So I set different aligns on LA464 and LA664 again to test the performance of spec2006, and modify the alignment based on the test results. gcc/ChangeLog: PR target/112919 * config/loongarch/loongarch-def.cc (la664_align): Newly defined function that sets alignment rules under the LA664 microarchitecture. * config/loongarch/loongarch-opts.cc (loongarch_target_option_override): If not optimizing for size, set the default alignment to what the target wants. * config/loongarch/loongarch-tune.h (struct loongarch_align): Add new member variables jump and loop. --- gcc/config/loongarch/loongarch-def.cc | 11 ++++++++--- gcc/config/loongarch/loongarch-opts.cc | 19 +++++++++++++------ gcc/config/loongarch/loongarch-tune.h | 22 +++++++++++++++------- 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/gcc/config/loongarch/loongarch-def.cc b/gcc/config/loongarch/loongarch-def.cc index e8c129ce643a..63a8f108f4ec 100644 --- a/gcc/config/loongarch/loongarch-def.cc +++ b/gcc/config/loongarch/loongarch-def.cc @@ -81,14 +81,19 @@ array_tune<loongarch_cache> loongarch_cpu_cache = static inline loongarch_align la464_align () { - return loongarch_align ().function_ ("32").label_ ("16"); + return loongarch_align ().function_ ("32").loop_ ("16").jump_ ("16"); +} + +static inline loongarch_align la664_align () +{ + return loongarch_align ().function_ ("8").loop_ ("8").jump_ ("32"); } array_tune<loongarch_align> loongarch_cpu_align = array_tune<loongarch_align> () - .set (CPU_LOONGARCH64, la464_align ()) + .set (CPU_LOONGARCH64, la664_align ()) .set (CPU_LA464, la464_align ()) - .set (CPU_LA664, la464_align ()); + .set (CPU_LA664, la664_align ()); /* Default RTX cost initializer. */ loongarch_rtx_cost_data::loongarch_rtx_cost_data () diff --git a/gcc/config/loongarch/loongarch-opts.cc b/gcc/config/loongarch/loongarch-opts.cc index 2a6fc41b247e..7b21cc311a83 100644 --- a/gcc/config/loongarch/loongarch-opts.cc +++ b/gcc/config/loongarch/loongarch-opts.cc @@ -922,13 +922,20 @@ loongarch_target_option_override (struct loongarch_target *target, { loongarch_update_gcc_opt_status (target, opts, opts_set); - /* alignments */ - if (opts->x_flag_align_functions && !opts->x_str_align_functions) - opts->x_str_align_functions - = loongarch_cpu_align[target->cpu_tune].function; + /* If not optimizing for size, set the default + alignment to what the target wants. */ + if (!opts->x_optimize_size) + { + if (opts->x_flag_align_functions && !opts->x_str_align_functions) + opts->x_str_align_functions + = loongarch_cpu_align[target->cpu_tune].function; + + if (opts->x_flag_align_loops && !opts->x_str_align_loops) + opts->x_str_align_loops = loongarch_cpu_align[target->cpu_tune].loop; - if (opts->x_flag_align_labels && !opts->x_str_align_labels) - opts->x_str_align_labels = loongarch_cpu_align[target->cpu_tune].label; + if (opts->x_flag_align_jumps && !opts->x_str_align_jumps) + opts->x_str_align_jumps = loongarch_cpu_align[target->cpu_tune].jump; + } /* Set up parameters to be used in prefetching algorithm. */ int simultaneous_prefetches diff --git a/gcc/config/loongarch/loongarch-tune.h b/gcc/config/loongarch/loongarch-tune.h index 72b75f6de3f5..cec9deb541ad 100644 --- a/gcc/config/loongarch/loongarch-tune.h +++ b/gcc/config/loongarch/loongarch-tune.h @@ -162,14 +162,16 @@ struct loongarch_cache { } }; -/* Alignment for functions and labels for best performance. For new uarchs - the value should be measured via benchmarking. See the documentation for - -falign-functions and -falign-labels in invoke.texi for the format. */ +/* Alignment for functions loops and jumps for best performance. For new + uarchs the value should be measured via benchmarking. See the + documentation for -falign-functions, -falign-loops, and -falign-jumps in + invoke.texi for the format. */ struct loongarch_align { const char *function; /* default value for -falign-functions */ - const char *label; /* default value for -falign-labels */ + const char *loop; /* default value for -falign-loops */ + const char *jump; /* default value for -falign-jumps */ - loongarch_align () : function (nullptr), label (nullptr) {} + loongarch_align () : function (nullptr), loop (nullptr), jump (nullptr) {} loongarch_align function_ (const char *_function) { @@ -177,9 +179,15 @@ struct loongarch_align { return *this; } - loongarch_align label_ (const char *_label) + loongarch_align loop_ (const char *_loop) { - label = _label; + loop = _loop; + return *this; + } + + loongarch_align jump_ (const char *_jump) + { + jump = _jump; return *this; } }; From af3a9807435a114c62f44f9d55456a3d37e0c25b Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Tue, 2 Apr 2024 22:22:29 +0800 Subject: [PATCH 412/551] RISC-V: Allow RVV intrinsic for more function target In previous, we allowed the target(("arch=+v")) for a function with rv64gc build. This patch would like to support more arch options as below: * zve32x * zve32f * zve64x * zve64f * zve64d * zvfhmin * zvfh * zvk* * zvbb For example, we have sample code as below. vfloat32m1_t __attribute__((target("arch=+zve64f"))) test_9 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) { return __riscv_vfadd_vv_f32m1 (a, b, vl); } It will generate the asm code when build with -O3 -march=rv64gc test_9: vsetvli zero,a0,e32,m1,ta,ma vfadd.vv v8,v8,v9 ret Meanwhile, this patch introduces more error handling for the target attribute. Take arch=+zve32x with vfloat32m1_t will have error message "'vfloat32m1_t' requires the zve32f, zve64f or zve64d ISA extension". And take arch=+zve32f with vfloat16m1_t will have error message "'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension". By default, all the RVV types includes the cmdline march will be registered when include the riscv_vector.h. And we have sorts of check during args and return types. Below test are passed for this patch: * The riscv fully regression test. gcc/ChangeLog: * config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New struct to hold all intrinisc related flags. (riscv_pragma_intrinsic_flags_pollute): New func to pollute the intrinsic flags and backup original flags. (riscv_pragma_intrinsic_flags_restore): New func to restore the flags from the backup intrinsic flags. (riscv_pragma_intrinsic): Pollute the flags and register all possible builtin types and functions, then restore and reinit. * config/riscv/riscv-protos.h (reinit_builtins): New func decl to reinit after flags pollution. (riscv_option_override): New extern func decl. * config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null): New func to register builtin types if null. (DEF_RVV_TYPE): Ditto. (DEF_RVV_TUPLE_TYPE): Ditto. (reinit_builtins): New func impl to reinit after flags pollution. (expand_builtin): Return target rtx after error_at. * config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate func to tell one tree type is integer or not. (riscv_vector_float_type_p): New predicate func to tell one tree type is float or not. (riscv_vector_element_bitsize): New func to get the element bitsize of a vector tree type. (riscv_vector_required_min_vlen): New func to get the required min vlen of a vector tree type. (riscv_validate_vector_type): New func to validate the tree type is valid on flags. (riscv_return_value_is_vector_type_p): Leverage the func riscv_validate_vector_type to do the tree type validation. (riscv_arguments_is_vector_type_p): Ditto. (riscv_override_options_internal): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test scenarios and add new error check tests. * gcc.target/riscv/rvv/base/pr109479-2.c: Ditto. * gcc.target/riscv/rvv/base/pr109479-3.c: Ditto. * gcc.target/riscv/rvv/base/pr109479-4.c: Diito. * gcc.target/riscv/rvv/base/pr109479-5.c: Diito. * gcc.target/riscv/rvv/base/pr109479-6.c: Diito. * gcc.target/riscv/rvv/base/user-10.c: Ditto. * gcc.target/riscv/rvv/base/user-12.c: Ditto. * gcc.target/riscv/rvv/base/user-13.c: Ditto. * gcc.target/riscv/rvv/base/user-14.c: Ditto. * gcc.target/riscv/rvv/base/user-15.c: Ditto. * gcc.target/riscv/rvv/base/user-2.c: Ditto. * gcc.target/riscv/rvv/base/user-3.c: Ditto. * gcc.target/riscv/rvv/base/user-5.c: Ditto. * gcc.target/riscv/rvv/base/user-6.c: Ditto. * gcc.target/riscv/rvv/base/user-9.c: Ditto. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv-c.cc | 94 +++++- gcc/config/riscv/riscv-protos.h | 2 + gcc/config/riscv/riscv-vector-builtins.cc | 53 +++- gcc/config/riscv/riscv.cc | 157 +++++++++- .../gcc.target/riscv/rvv/base/pr109479-1.c | 29 +- .../gcc.target/riscv/rvv/base/pr109479-2.c | 29 +- .../gcc.target/riscv/rvv/base/pr109479-3.c | 50 +++- .../gcc.target/riscv/rvv/base/pr109479-4.c | 51 +++- .../gcc.target/riscv/rvv/base/pr109479-5.c | 37 ++- .../gcc.target/riscv/rvv/base/pr109479-6.c | 33 ++- .../target_attribute_v_with_intrinsic-10.c | 12 + .../target_attribute_v_with_intrinsic-11.c | 26 ++ .../target_attribute_v_with_intrinsic-12.c | 33 +++ .../target_attribute_v_with_intrinsic-13.c | 33 +++ .../target_attribute_v_with_intrinsic-14.c | 40 +++ .../target_attribute_v_with_intrinsic-15.c | 47 +++ .../target_attribute_v_with_intrinsic-16.c | 12 + .../target_attribute_v_with_intrinsic-17.c | 13 + .../target_attribute_v_with_intrinsic-18.c | 13 + .../target_attribute_v_with_intrinsic-19.c | 13 + .../target_attribute_v_with_intrinsic-20.c | 13 + .../target_attribute_v_with_intrinsic-21.c | 13 + .../target_attribute_v_with_intrinsic-22.c | 13 + .../target_attribute_v_with_intrinsic-23.c | 13 + .../target_attribute_v_with_intrinsic-24.c | 13 + .../target_attribute_v_with_intrinsic-25.c | 13 + .../target_attribute_v_with_intrinsic-26.c | 13 + .../target_attribute_v_with_intrinsic-27.c | 13 + .../target_attribute_v_with_intrinsic-28.c | 13 + .../target_attribute_v_with_intrinsic-29.c | 13 + .../target_attribute_v_with_intrinsic-30.c | 12 + .../target_attribute_v_with_intrinsic-31.c | 12 + .../target_attribute_v_with_intrinsic-32.c | 12 + .../target_attribute_v_with_intrinsic-33.c | 12 + .../target_attribute_v_with_intrinsic-34.c | 12 + .../target_attribute_v_with_intrinsic-35.c | 12 + .../target_attribute_v_with_intrinsic-36.c | 12 + .../target_attribute_v_with_intrinsic-37.c | 12 + .../target_attribute_v_with_intrinsic-38.c | 12 + .../target_attribute_v_with_intrinsic-39.c | 12 + .../target_attribute_v_with_intrinsic-40.c | 12 + .../target_attribute_v_with_intrinsic-41.c | 12 + .../target_attribute_v_with_intrinsic-42.c | 12 + .../target_attribute_v_with_intrinsic-43.c | 12 + .../target_attribute_v_with_intrinsic-44.c | 12 + .../target_attribute_v_with_intrinsic-45.c | 12 + .../target_attribute_v_with_intrinsic-46.c | 12 + .../target_attribute_v_with_intrinsic-47.c | 12 + .../target_attribute_v_with_intrinsic-48.c | 12 + .../target_attribute_v_with_intrinsic-49.c | 12 + .../target_attribute_v_with_intrinsic-50.c | 12 + .../target_attribute_v_with_intrinsic-51.c | 12 + .../target_attribute_v_with_intrinsic-52.c | 12 + .../target_attribute_v_with_intrinsic-53.c | 12 + .../target_attribute_v_with_intrinsic-9.c | 12 + .../gcc.target/riscv/rvv/base/user-10.c | 39 ++- .../gcc.target/riscv/rvv/base/user-12.c | 275 ++++++++++++------ .../gcc.target/riscv/rvv/base/user-13.c | 156 ++++++---- .../gcc.target/riscv/rvv/base/user-14.c | 257 ++++++++++------ .../gcc.target/riscv/rvv/base/user-15.c | 106 ++++--- .../gcc.target/riscv/rvv/base/user-2.c | 33 ++- .../gcc.target/riscv/rvv/base/user-3.c | 18 +- .../gcc.target/riscv/rvv/base/user-5.c | 78 +++-- .../gcc.target/riscv/rvv/base/user-6.c | 66 +++-- .../gcc.target/riscv/rvv/base/user-9.c | 93 ++++-- 65 files changed, 1886 insertions(+), 442 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c diff --git a/gcc/config/riscv/riscv-c.cc b/gcc/config/riscv/riscv-c.cc index 01314037461e..43c8eecbb6ff 100644 --- a/gcc/config/riscv/riscv-c.cc +++ b/gcc/config/riscv/riscv-c.cc @@ -34,6 +34,72 @@ along with GCC; see the file COPYING3. If not see #define builtin_define(TXT) cpp_define (pfile, TXT) +struct pragma_intrinsic_flags +{ + int intrinsic_target_flags; + + int intrinsic_riscv_vector_elen_flags; + int intrinsic_riscv_zvl_flags; + int intrinsic_riscv_zvb_subext; + int intrinsic_riscv_zvk_subext; +}; + +static void +riscv_pragma_intrinsic_flags_pollute (struct pragma_intrinsic_flags *flags) +{ + flags->intrinsic_target_flags = target_flags; + flags->intrinsic_riscv_vector_elen_flags = riscv_vector_elen_flags; + flags->intrinsic_riscv_zvl_flags = riscv_zvl_flags; + flags->intrinsic_riscv_zvb_subext = riscv_zvb_subext; + flags->intrinsic_riscv_zvk_subext = riscv_zvk_subext; + + target_flags = target_flags + | MASK_VECTOR; + + riscv_zvl_flags = riscv_zvl_flags + | MASK_ZVL32B + | MASK_ZVL64B + | MASK_ZVL128B; + + riscv_vector_elen_flags = riscv_vector_elen_flags + | MASK_VECTOR_ELEN_32 + | MASK_VECTOR_ELEN_64 + | MASK_VECTOR_ELEN_FP_16 + | MASK_VECTOR_ELEN_FP_32 + | MASK_VECTOR_ELEN_FP_64; + + riscv_zvb_subext = riscv_zvb_subext + | MASK_ZVBB + | MASK_ZVBC + | MASK_ZVKB; + + riscv_zvk_subext = riscv_zvk_subext + | MASK_ZVKG + | MASK_ZVKNED + | MASK_ZVKNHA + | MASK_ZVKNHB + | MASK_ZVKSED + | MASK_ZVKSH + | MASK_ZVKN + | MASK_ZVKNC + | MASK_ZVKNG + | MASK_ZVKS + | MASK_ZVKSC + | MASK_ZVKSG + | MASK_ZVKT; +} + +static void +riscv_pragma_intrinsic_flags_restore (struct pragma_intrinsic_flags *flags) +{ + target_flags = flags->intrinsic_target_flags; + + riscv_vector_elen_flags = flags->intrinsic_riscv_vector_elen_flags; + riscv_zvl_flags = flags->intrinsic_riscv_zvl_flags; + riscv_zvb_subext = flags->intrinsic_riscv_zvb_subext; + riscv_zvk_subext = flags->intrinsic_riscv_zvk_subext; +} + static int riscv_ext_version_value (unsigned major, unsigned minor) { @@ -201,20 +267,20 @@ riscv_pragma_intrinsic (cpp_reader *) if (strcmp (name, "vector") == 0 || strcmp (name, "xtheadvector") == 0) { - if (TARGET_VECTOR) - riscv_vector::handle_pragma_vector (); - else /* Indicates riscv_vector.h is included but v is missing in arch */ - { - /* To make the the rvv types and intrinsic API available for the - target("arch=+v") attribute, we need to temporally enable the - TARGET_VECTOR, and disable it after all initialized. */ - target_flags |= MASK_VECTOR; - - riscv_vector::init_builtins (); - riscv_vector::handle_pragma_vector (); - - target_flags &= ~MASK_VECTOR; - } + struct pragma_intrinsic_flags backup_flags; + + riscv_pragma_intrinsic_flags_pollute (&backup_flags); + + riscv_option_override (); + init_adjust_machine_modes (); + riscv_vector::reinit_builtins (); + riscv_vector::handle_pragma_vector (); + + riscv_pragma_intrinsic_flags_restore (&backup_flags); + + /* Re-initialize after the flags are restored. */ + riscv_option_override (); + init_adjust_machine_modes (); } else error ("unknown %<#pragma riscv intrinsic%> option %qs", name); diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index b87355938052..4677d9c46cd2 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -546,6 +546,7 @@ enum avl_type }; /* Routines implemented in riscv-vector-builtins.cc. */ void init_builtins (void); +void reinit_builtins (void); const char *mangle_builtin_type (const_tree); tree lookup_vector_type_attribute (const_tree); bool builtin_type_p (const_tree); @@ -762,6 +763,7 @@ extern bool riscv_option_valid_attribute_p (tree, tree, tree, int); extern void riscv_override_options_internal (struct gcc_options *); +extern void riscv_option_override (void); struct riscv_tune_param; /* Information about one micro-arch we know about. */ diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc index db9246eed2d5..53ccea7889e2 100644 --- a/gcc/config/riscv/riscv-vector-builtins.cc +++ b/gcc/config/riscv/riscv-vector-builtins.cc @@ -3123,6 +3123,36 @@ register_builtin_types () #include "riscv-vector-builtins.def" } +/* Similar as register_builtin_types but perform the registration if and + only if the element of abi_vector_type is NULL_TREE. */ +static void +register_builtin_types_on_null () +{ + /* Get type node from get_typenode_from_name to prevent we have different type + node define in different target libraries, e.g. int32_t defined as + `long` in RV32/newlib-stdint, but `int` for RV32/glibc-stdint.h. + NOTE: uint[16|32|64]_type_node already defined in tree.h. */ + tree int8_type_node = get_typenode_from_name (INT8_TYPE); + tree uint8_type_node = get_typenode_from_name (UINT8_TYPE); + tree int16_type_node = get_typenode_from_name (INT16_TYPE); + tree int32_type_node = get_typenode_from_name (INT32_TYPE); + tree int64_type_node = get_typenode_from_name (INT64_TYPE); + + machine_mode mode; +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \ + ARGS...) \ + mode = VECTOR_MODE##mode; \ + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \ + register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode); + +#define DEF_RVV_TUPLE_TYPE(NAME, NCHARS, ABI_NAME, SUBPART_TYPE, SCALAR_TYPE, \ + NF, VECTOR_SUFFIX) \ + if (abi_vector_types[VECTOR_TYPE_##NAME] == NULL_TREE) \ + register_tuple_type (VECTOR_TYPE_##NAME, VECTOR_TYPE_##SUBPART_TYPE, \ + SCALAR_TYPE##_type_node, NF); +#include "riscv-vector-builtins.def" +} + /* Register vector type TYPE under its risv_vector.h name. */ static void register_vector_type (vector_type_index type) @@ -4419,6 +4449,22 @@ init_builtins () handle_pragma_vector (); } +/* Reinitialize builtins similar to init_builtins, but only the null + builtin types will be registered. */ +void +reinit_builtins () +{ + rvv_switcher rvv; + + if (!TARGET_VECTOR) + return; + + register_builtin_types_on_null (); + + if (in_lto_p) + handle_pragma_vector (); +} + /* Implement TARGET_VERIFY_TYPE_CONTEXT for RVV types. */ bool verify_type_context (location_t loc, type_context_kind context, const_tree type, @@ -4588,8 +4634,11 @@ expand_builtin (unsigned int code, tree exp, rtx target) registered_function &rfn = *(*registered_functions)[code]; if (!TARGET_VECTOR) - error_at (EXPR_LOCATION (exp), - "built-in function %qE requires the V ISA extension", exp); + { + error_at (EXPR_LOCATION (exp), + "built-in function %qE requires the V ISA extension", exp); + return target; + } return function_expander (rfn.instance, rfn.decl, exp, target).expand (); } diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index fe9976bfffe9..2a71badfdc9f 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -5459,6 +5459,152 @@ riscv_v_abi () return v_abi; } +static bool +riscv_vector_int_type_p (const_tree type) +{ + machine_mode mode = TYPE_MODE (type); + + if (VECTOR_MODE_P (mode)) + return INTEGRAL_MODE_P (GET_MODE_INNER (mode)); + + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); + return strstr (name, "int") != NULL || strstr (name, "uint") != NULL; +} + +static bool +riscv_vector_float_type_p (const_tree type) +{ + machine_mode mode = TYPE_MODE (type); + + if (VECTOR_MODE_P (mode)) + return FLOAT_MODE_P (GET_MODE_INNER (mode)); + + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); + return strstr (name, "vfloat") != NULL; +} + +static unsigned +riscv_vector_element_bitsize (const_tree type) +{ + machine_mode mode = TYPE_MODE (type); + + if (VECTOR_MODE_P (mode)) + return GET_MODE_BITSIZE (GET_MODE_INNER (mode)); + + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); + + if (strstr (name, "bool") != NULL) + return 1; + else if (strstr (name, "int8") != NULL) + return 8; + else if (strstr (name, "int16") != NULL || strstr (name, "float16") != NULL) + return 16; + else if (strstr (name, "int32") != NULL || strstr (name, "float32") != NULL) + return 32; + else if (strstr (name, "int64") != NULL || strstr (name, "float64") != NULL) + return 64; + + gcc_unreachable (); +} + +static unsigned +riscv_vector_required_min_vlen (const_tree type) +{ + machine_mode mode = TYPE_MODE (type); + + if (riscv_v_ext_mode_p (mode)) + return TARGET_MIN_VLEN; + + unsigned element_bitsize = riscv_vector_element_bitsize (type); + const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); + + if (strstr (name, "bool64") != NULL) + return element_bitsize * 64; + else if (strstr (name, "bool32") != NULL) + return element_bitsize * 32; + else if (strstr (name, "bool16") != NULL) + return element_bitsize * 16; + else if (strstr (name, "bool8") != NULL) + return element_bitsize * 8; + else if (strstr (name, "bool4") != NULL) + return element_bitsize * 4; + else if (strstr (name, "bool2") != NULL) + return element_bitsize * 2; + + if (strstr (name, "mf8") != NULL) + return element_bitsize * 8; + else if (strstr (name, "mf4") != NULL) + return element_bitsize * 4; + else if (strstr (name, "mf2") != NULL) + return element_bitsize * 2; + + return element_bitsize; +} + +static void +riscv_validate_vector_type (const_tree type, const char *hint) +{ + gcc_assert (riscv_vector_type_p (type)); + + if (!TARGET_VECTOR) + { + error_at (input_location, "%s %qT requires the V ISA extension", + hint, type); + return; + } + + unsigned element_bitsize = riscv_vector_element_bitsize (type); + bool int_type_p = riscv_vector_int_type_p (type); + + if (int_type_p && element_bitsize == 64 + && !TARGET_VECTOR_ELEN_64_P (riscv_vector_elen_flags)) + { + error_at (input_location, + "%s %qT requires the zve64x, zve64f, zve64d or v ISA extension", + hint, type); + return; + } + + bool float_type_p = riscv_vector_float_type_p (type); + + if (float_type_p && element_bitsize == 16 + && !TARGET_VECTOR_ELEN_FP_16_P (riscv_vector_elen_flags)) + { + error_at (input_location, + "%s %qT requires the zvfhmin or zvfh ISA extension", + hint, type); + return; + } + + if (float_type_p && element_bitsize == 32 + && !TARGET_VECTOR_ELEN_FP_32_P (riscv_vector_elen_flags)) + { + error_at (input_location, + "%s %qT requires the zve32f, zve64f, zve64d or v ISA extension", + hint, type); + return; + } + + if (float_type_p && element_bitsize == 64 + && !TARGET_VECTOR_ELEN_FP_64_P (riscv_vector_elen_flags)) + { + error_at (input_location, + "%s %qT requires the zve64d or v ISA extension", hint, type); + return; + } + + unsigned required_min_vlen = riscv_vector_required_min_vlen (type); + + if (TARGET_MIN_VLEN < required_min_vlen) + { + error_at ( + input_location, + "%s %qT requires the minimal vector length %qd but %qd is given", + hint, type, required_min_vlen, TARGET_MIN_VLEN); + return; + } +} + /* Return true if a function with type FNTYPE returns its value in RISC-V V registers. */ @@ -5469,9 +5615,7 @@ riscv_return_value_is_vector_type_p (const_tree fntype) if (riscv_vector_type_p (return_type)) { - if (!TARGET_VECTOR) - error_at (input_location, - "return type %qT requires the V ISA extension", return_type); + riscv_validate_vector_type (return_type, "return type"); return true; } else @@ -5490,10 +5634,7 @@ riscv_arguments_is_vector_type_p (const_tree fntype) tree arg_type = TREE_VALUE (chain); if (riscv_vector_type_p (arg_type)) { - if (!TARGET_VECTOR) - error_at (input_location, - "argument type %qT requires the V ISA extension", - arg_type); + riscv_validate_vector_type (arg_type, "argument type"); return true; } } @@ -9107,7 +9248,7 @@ riscv_override_options_internal (struct gcc_options *opts) /* Implement TARGET_OPTION_OVERRIDE. */ -static void +void riscv_option_override (void) { #ifdef SUBTARGET_OVERRIDE_OPTIONS diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c index a13cc12c5435..1bd7efe61f27 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-1.c @@ -3,11 +3,24 @@ #include "riscv_vector.h" -void foo0 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */ -void foo1 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */ -void foo2 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */ -void foo3 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */ -void foo4 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */ -void foo5 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */ -void foo6 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */ -void foo7 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */ +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo0 () {__rvv_int64m1_t t;} +void foo1 () {__rvv_uint64m1_t t;} +void foo2 () {__rvv_int64m2_t t;} +void foo3 () {__rvv_uint64m2_t t;} +void foo4 () {__rvv_int64m4_t t;} +void foo5 () {__rvv_uint64m4_t t;} +void foo6 () {__rvv_int64m8_t t;} +void foo7 () {__rvv_uint64m8_t t;} + +void new_foo0 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo1 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo2 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo3 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo4 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo5 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo6 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo7 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c index dd6bcb0f5485..ce6a62d1405f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-2.c @@ -3,11 +3,24 @@ #include "riscv_vector.h" -void foo0 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */ -void foo1 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */ -void foo2 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */ -void foo3 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */ -void foo4 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */ -void foo5 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */ -void foo6 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */ -void foo7 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */ +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo0 () {vint64m1_t t;} +void foo1 () {vuint64m1_t t;} +void foo2 () {vint64m2_t t;} +void foo3 () {vuint64m2_t t;} +void foo4 () {vint64m4_t t;} +void foo5 () {vuint64m4_t t;} +void foo6 () {vint64m8_t t;} +void foo7 () {vuint64m8_t t;} + +void new_foo0 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo1 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo2 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo3 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo4 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo5 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo6 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo7 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c index 01e86223da9f..5c0cd1b1f7f9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-3.c @@ -3,18 +3,38 @@ #include "riscv_vector.h" -void foo0 () {__rvv_bool64_t t;} /* { dg-error {unknown type name '__rvv_bool64_t'} } */ -void foo1 () {__rvv_int8mf8_t t;} /* { dg-error {unknown type name '__rvv_int8mf8_t'} } */ -void foo2 () {__rvv_uint8mf8_t t;} /* { dg-error {unknown type name '__rvv_uint8mf8_t'} } */ -void foo3 () {__rvv_int16mf4_t t;} /* { dg-error {unknown type name '__rvv_int16mf4_t'} } */ -void foo4 () {__rvv_uint16mf4_t t;} /* { dg-error {unknown type name '__rvv_uint16mf4_t'} } */ -void foo5 () {__rvv_int32mf2_t t;} /* { dg-error {unknown type name '__rvv_int32mf2_t'} } */ -void foo6 () {__rvv_uint32mf2_t t;} /* { dg-error {unknown type name '__rvv_uint32mf2_t'} } */ -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */ -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */ -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */ -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */ -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */ -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */ -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */ -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */ +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo0 () {__rvv_bool64_t t;} +void foo1 () {__rvv_int8mf8_t t;} +void foo2 () {__rvv_uint8mf8_t t;} +void foo3 () {__rvv_int16mf4_t t;} +void foo4 () {__rvv_uint16mf4_t t;} +void foo5 () {__rvv_int32mf2_t t;} +void foo6 () {__rvv_uint32mf2_t t;} +void foo7 () {__rvv_int64m1_t t;} +void foo8 () {__rvv_uint64m1_t t;} +void foo9 () {__rvv_int64m2_t t;} +void foo10 () {__rvv_uint64m2_t t;} +void foo11 () {__rvv_int64m4_t t;} +void foo12 () {__rvv_uint64m4_t t;} +void foo13 () {__rvv_int64m8_t t;} +void foo14 () {__rvv_uint64m8_t t;} + +void new_foo0 (__rvv_bool64_t t) { } /* { dg-error {argument type '__rvv_bool64_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo1 (__rvv_int8mf8_t t) { } /* { dg-error {argument type '__rvv_int8mf8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo2 (__rvv_uint8mf8_t t) { } /* { dg-error {argument type '__rvv_uint8mf8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo3 (__rvv_int16mf4_t t) { } /* { dg-error {argument type '__rvv_int16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo4 (__rvv_uint16mf4_t t) { } /* { dg-error {argument type '__rvv_uint16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo5 (__rvv_int32mf2_t t) { } /* { dg-error {argument type '__rvv_int32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo6 (__rvv_uint32mf2_t t) { } /* { dg-error {argument type '__rvv_uint32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c index 62385b8dcd1b..48e1f278e706 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-4.c @@ -3,18 +3,39 @@ #include "riscv_vector.h" -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */ -void foo1 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */ -void foo2 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */ -void foo3 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */ -void foo4 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */ -void foo5 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */ -void foo6 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */ -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */ -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */ -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */ -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */ -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */ -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */ -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */ -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */ +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo0 () {vbool64_t t;} +void foo1 () {vint8mf8_t t;} +void foo2 () {vuint8mf8_t t;} +void foo3 () {vint16mf4_t t;} +void foo4 () {vuint16mf4_t t;} +void foo5 () {vint32mf2_t t;} +void foo6 () {vuint32mf2_t t;} +void foo7 () {vint64m1_t t;} +void foo8 () {vuint64m1_t t;} +void foo9 () {vint64m2_t t;} +void foo10 () {vuint64m2_t t;} +void foo11 () {vint64m4_t t;} +void foo12 () {vuint64m4_t t;} +void foo13 () {vint64m8_t t;} +void foo14 () {vuint64m8_t t;} + +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo1 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo2 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo3 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo4 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo5 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo6 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */ + +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c index 26a0a742965f..af237f5d759e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-5.c @@ -3,6 +3,10 @@ #include "riscv_vector.h" +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ void foo0 () {__rvv_bool64_t t;} void foo1 () {__rvv_int8mf8_t t;} void foo2 () {__rvv_uint8mf8_t t;} @@ -10,11 +14,28 @@ void foo3 () {__rvv_int16mf4_t t;} void foo4 () {__rvv_uint16mf4_t t;} void foo5 () {__rvv_int32mf2_t t;} void foo6 () {__rvv_uint32mf2_t t;} -void foo7 () {__rvv_int64m1_t t;} /* { dg-error {unknown type name '__rvv_int64m1_t'} } */ -void foo8 () {__rvv_uint64m1_t t;} /* { dg-error {unknown type name '__rvv_uint64m1_t'} } */ -void foo9 () {__rvv_int64m2_t t;} /* { dg-error {unknown type name '__rvv_int64m2_t'} } */ -void foo10 () {__rvv_uint64m2_t t;} /* { dg-error {unknown type name '__rvv_uint64m2_t'} } */ -void foo11 () {__rvv_int64m4_t t;} /* { dg-error {unknown type name '__rvv_int64m4_t'} } */ -void foo12 () {__rvv_uint64m4_t t;} /* { dg-error {unknown type name '__rvv_uint64m4_t'} } */ -void foo13 () {__rvv_int64m8_t t;} /* { dg-error {unknown type name '__rvv_int64m8_t'} } */ -void foo14 () {__rvv_uint64m8_t t;} /* { dg-error {unknown type name '__rvv_uint64m8_t'} } */ +void foo7 () {__rvv_int64m1_t t;} +void foo8 () {__rvv_uint64m1_t t;} +void foo9 () {__rvv_int64m2_t t;} +void foo10 () {__rvv_uint64m2_t t;} +void foo11 () {__rvv_int64m4_t t;} +void foo12 () {__rvv_uint64m4_t t;} +void foo13 () {__rvv_int64m8_t t;} +void foo14 () {__rvv_uint64m8_t t;} + +void new_foo0 (__rvv_bool64_t t) { } +void new_foo1 (__rvv_int8mf8_t t) { } +void new_foo2 (__rvv_uint8mf8_t t) { } +void new_foo3 (__rvv_int16mf4_t t) { } +void new_foo4 (__rvv_uint16mf4_t t) { } +void new_foo5 (__rvv_int32mf2_t t) { } +void new_foo6 (__rvv_uint32mf2_t t) { } + +void new_foo7 (__rvv_int64m1_t t) { } /* { dg-error {argument type '__rvv_int64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo8 (__rvv_uint64m1_t t) { } /* { dg-error {argument type '__rvv_uint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo9 (__rvv_int64m2_t t) { } /* { dg-error {argument type '__rvv_int64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo10 (__rvv_uint64m2_t t) { } /* { dg-error {argument type '__rvv_uint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo11 (__rvv_int64m4_t t) { } /* { dg-error {argument type '__rvv_int64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo12 (__rvv_uint64m4_t t) { } /* { dg-error {argument type '__rvv_uint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo13 (__rvv_int64m8_t t) { } /* { dg-error {argument type '__rvv_int64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo14 (__rvv_uint64m8_t t) { } /* { dg-error {argument type '__rvv_uint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c index eb66f3ea2bd4..2779fbda053e 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr109479-6.c @@ -10,11 +10,28 @@ void foo3 () {vint16mf4_t t;} void foo4 () {vuint16mf4_t t;} void foo5 () {vint32mf2_t t;} void foo6 () {vuint32mf2_t t;} -void foo7 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */ -void foo8 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */ -void foo9 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */ -void foo10 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */ -void foo11 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */ -void foo12 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */ -void foo13 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */ -void foo14 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */ +void foo7 () {vint64m1_t t;} +void foo8 () {vuint64m1_t t;} +void foo9 () {vint64m2_t t;} +void foo10 () {vuint64m2_t t;} +void foo11 () {vint64m4_t t;} +void foo12 () {vuint64m4_t t;} +void foo13 () {vint64m8_t t;} +void foo14 () {vuint64m8_t t;} + +void new_foo0 (vbool64_t t) { } +void new_foo1 (vint8mf8_t t) { } +void new_foo2 (vuint8mf8_t t) { } +void new_foo3 (vint16mf4_t t) { } +void new_foo4 (vuint16mf4_t t) { } +void new_foo5 (vint32mf2_t t) { } +void new_foo6 (vuint32mf2_t t) { } + +void new_foo7 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo8 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo9 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo10 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo11 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo12 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo13 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo14 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c new file mode 100644 index 000000000000..3e6844475d5b --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+v,+zvfh"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c new file mode 100644 index 000000000000..df053073bc82 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c @@ -0,0 +1,26 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint8m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vint8m1_t a, vint8m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i8m1 (a, b, vl); +} + +vint16m1_t +__attribute__((target("arch=+zve32x"))) +test_2 (vint16m1_t a, vint16m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i16m1 (a, b, vl); +} + +vint32m1_t +__attribute__((target("arch=+zve32x"))) +test_3 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c new file mode 100644 index 000000000000..51a91886f52e --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c @@ -0,0 +1,33 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint8m1_t +__attribute__((target("arch=+zve32f"))) +test_1 (vint8m1_t a, vint8m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i8m1 (a, b, vl); +} + +vint16m1_t +__attribute__((target("arch=+zve32f"))) +test_2 (vint16m1_t a, vint16m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i16m1 (a, b, vl); +} + +vint32m1_t +__attribute__((target("arch=+zve32f"))) +test_3 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} + +vfloat32m1_t +__attribute__((target("arch=+zve32f"))) +test_4 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c new file mode 100644 index 000000000000..994b1c0a5db0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c @@ -0,0 +1,33 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint8m1_t +__attribute__((target("arch=+zve64x"))) +test_1 (vint8m1_t a, vint8m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i8m1 (a, b, vl); +} + +vint16m1_t +__attribute__((target("arch=+zve64x"))) +test_2 (vint16m1_t a, vint16m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i16m1 (a, b, vl); +} + +vint32m1_t +__attribute__((target("arch=+zve64x"))) +test_3 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} + +vint64m1_t +__attribute__((target("arch=+zve64x"))) +test_4 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c new file mode 100644 index 000000000000..caa2a10e943d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c @@ -0,0 +1,40 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint8m1_t +__attribute__((target("arch=+zve64f"))) +test_1 (vint8m1_t a, vint8m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i8m1 (a, b, vl); +} + +vint16m1_t +__attribute__((target("arch=+zve64f"))) +test_2 (vint16m1_t a, vint16m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i16m1 (a, b, vl); +} + +vint32m1_t +__attribute__((target("arch=+zve64f"))) +test_3 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} + +vint64m1_t +__attribute__((target("arch=+zve64f"))) +test_4 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} + +vfloat32m1_t +__attribute__((target("arch=+zve64f"))) +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c new file mode 100644 index 000000000000..72a2be6e5606 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c @@ -0,0 +1,47 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint8m1_t +__attribute__((target("arch=+zve64d"))) +test_1 (vint8m1_t a, vint8m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i8m1 (a, b, vl); +} + +vint16m1_t +__attribute__((target("arch=+zve64d"))) +test_2 (vint16m1_t a, vint16m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i16m1 (a, b, vl); +} + +vint32m1_t +__attribute__((target("arch=+zve64d"))) +test_3 (vint32m1_t a, vint32m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i32m1 (a, b, vl); +} + +vint64m1_t +__attribute__((target("arch=+zve64d"))) +test_4 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} + +vfloat32m1_t +__attribute__((target("arch=+zve64d"))) +test_5 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} + +vfloat64m1_t +__attribute__((target("arch=+zve64d"))) +test_6 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c new file mode 100644 index 000000000000..dabdcf8ff21c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+v,+zvfhmin"))) +test_1 (vfloat16mf2_t a, size_t vl) +{ + return __riscv_vfwcvt_f_f_v_f32m1 (a, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c new file mode 100644 index 000000000000..a064417169d8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint64m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} + +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c new file mode 100644 index 000000000000..61d3fb25dc2d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c new file mode 100644 index 000000000000..bfc26f8210ac --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c new file mode 100644 index 000000000000..35a2924234f2 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c new file mode 100644 index 000000000000..e3aef339d68d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint64m1_t +__attribute__((target("arch=+zve32f"))) +test_1 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} + +/* { dg-error "return type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c new file mode 100644 index 000000000000..b5a894ecad43 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zve32f"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c new file mode 100644 index 000000000000..7267fa3304b7 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+zve32f"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c new file mode 100644 index 000000000000..5a7c4481a5a9 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+zve64x"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c new file mode 100644 index 000000000000..f1241cb17714 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zve64x"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c new file mode 100644 index 000000000000..2738a29d6736 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+zve64x"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c new file mode 100644 index 000000000000..8610000b4740 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+zve64f"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat64m1_t' requires the zve64d or v ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c new file mode 100644 index 000000000000..7eaa6adab826 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zve64f"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c new file mode 100644 index 000000000000..eb74e33299fa --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zve64d"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} + +/* { dg-error "return type 'vfloat16m1_t' requires the zvfhmin or zvfh ISA extension" "" { target { "riscv*-*-*" } } 0 } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c new file mode 100644 index 000000000000..f68b4622ee7c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+v"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c new file mode 100644 index 000000000000..2f146cda2dde --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint64m1_t +__attribute__((target("arch=+v"))) +test_1 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c new file mode 100644 index 000000000000..737b5b00d732 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+v"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c new file mode 100644 index 000000000000..559e90e87f45 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32x -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zvfh"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c new file mode 100644 index 000000000000..91ee510c77bb --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint64m1_t +__attribute__((target("arch=+v"))) +test_1 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c new file mode 100644 index 000000000000..ec184cff5dc6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vint64m1_t +__attribute__((target("arch=+zve64x"))) +test_1 (vint64m1_t a, vint64m1_t b, size_t vl) +{ + return __riscv_vadd_vv_i64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c new file mode 100644 index 000000000000..a37f67c53209 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+zve64d"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c new file mode 100644 index 000000000000..3d62027848e5 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve32f -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zvfh"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c new file mode 100644 index 000000000000..9b8a9cbafcbf --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+v"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c new file mode 100644 index 000000000000..67469a18cd99 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+zve64f"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c new file mode 100644 index 000000000000..ce89391e4e72 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+v"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c new file mode 100644 index 000000000000..8836cb147032 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zvfh"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c new file mode 100644 index 000000000000..57e542da1b86 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat16m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vfloat16m1_t a, vfloat16m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f16m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c new file mode 100644 index 000000000000..7fb6b20a32eb --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c new file mode 100644 index 000000000000..ce6f97d8584a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+zve32x"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c new file mode 100644 index 000000000000..dbf92a3df248 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat64m1_t +__attribute__((target("arch=+zve64x"))) +test_1 (vfloat64m1_t a, vfloat64m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f64m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c new file mode 100644 index 000000000000..6d2e4e27bf4d --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+zve64x"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c new file mode 100644 index 000000000000..94bbcb05e4d1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+zvbb"))) +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl) +{ + return __riscv_vandn_vv_u32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c new file mode 100644 index 000000000000..054b7630fa96 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+zvknha"))) +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl) +{ + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c new file mode 100644 index 000000000000..b2e6658f4d33 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m2_t +__attribute__((target("arch=+zvksh"))) +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl) +{ + return __riscv_vsm3me_vv_u32m2 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c new file mode 100644 index 000000000000..8574cd049cf1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+zvkned"))) +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl) +{ + return __riscv_vaesdm_vv_u32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c new file mode 100644 index 000000000000..e27b4d5fbb36 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+zvkg"))) +test_1 (vuint32m1_t a, vuint32m1_t b, size_t vl) +{ + return __riscv_vgmul_vv_u32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c new file mode 100644 index 000000000000..2213c6fe35d4 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m2_t +__attribute__((target("arch=+zvksed"))) +test_1 (vuint32m2_t a, vuint32m2_t b, size_t vl) +{ + return __riscv_vsm4r_vv_u32m2 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c new file mode 100644 index 000000000000..66901cc72ad0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+zvknhb"))) +test_1 (vuint32m1_t a, vuint32m1_t b, vuint32m1_t c, size_t vl) +{ + return __riscv_vsha2ch_vv_u32m1 (a, b, c, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c new file mode 100644 index 000000000000..0764f403b896 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c @@ -0,0 +1,12 @@ +/* Test that we do not have error when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vfloat32m1_t +__attribute__((target("arch=+v"))) +test_1 (vfloat32m1_t a, vfloat32m1_t b, size_t vl) +{ + return __riscv_vfadd_vv_f32m1 (a, b, vl); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c index fdc28c77426d..6bb9460d6d23 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-10.c @@ -193,14 +193,31 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */ -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */ -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */ -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */ -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */ -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */ -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */ -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */ -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */ -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */ -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} + +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c index 332ff7627b6f..2f2c150eeb00 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-12.c @@ -3,20 +3,20 @@ #include "riscv_vector.h" -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */ -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */ -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */ -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */ -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */ -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */ -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */ -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */ -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */ -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */ -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */ -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */ -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */ -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */ +void f_vint8mf8x2_t () {vint8mf8x2_t t;} +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} +void f_vint8mf8x3_t () {vint8mf8x3_t t;} +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} +void f_vint8mf8x4_t () {vint8mf8x4_t t;} +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} +void f_vint8mf8x5_t () {vint8mf8x5_t t;} +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} +void f_vint8mf8x6_t () {vint8mf8x6_t t;} +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} +void f_vint8mf8x7_t () {vint8mf8x7_t t;} +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} +void f_vint8mf8x8_t () {vint8mf8x8_t t;} +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} void f_vint8mf4x2_t () {vint8mf4x2_t t;} void f_vuint8mf4x2_t () {vuint8mf4x2_t t;} void f_vint8mf4x3_t () {vint8mf4x3_t t;} @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;} void f_vuint8m2x4_t () {vuint8m2x4_t t;} void f_vint8m4x2_t () {vint8m4x2_t t;} void f_vuint8m4x2_t () {vuint8m4x2_t t;} -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */ -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */ -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */ -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */ -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */ -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */ -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */ -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */ -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */ -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */ -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */ -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */ -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */ -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */ +void f_vint16mf4x2_t () {vint16mf4x2_t t;} +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} +void f_vint16mf4x3_t () {vint16mf4x3_t t;} +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} +void f_vint16mf4x4_t () {vint16mf4x4_t t;} +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} +void f_vint16mf4x5_t () {vint16mf4x5_t t;} +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} +void f_vint16mf4x6_t () {vint16mf4x6_t t;} +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} +void f_vint16mf4x7_t () {vint16mf4x7_t t;} +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} +void f_vint16mf4x8_t () {vint16mf4x8_t t;} +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} void f_vint16mf2x2_t () {vint16mf2x2_t t;} void f_vuint16mf2x2_t () {vuint16mf2x2_t t;} void f_vint16mf2x3_t () {vint16mf2x3_t t;} @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;} void f_vuint16m2x4_t () {vuint16m2x4_t t;} void f_vint16m4x2_t () {vint16m4x2_t t;} void f_vuint16m4x2_t () {vuint16m4x2_t t;} -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */ -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */ -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */ -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */ -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */ -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */ -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */ -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */ -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */ -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */ -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */ -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */ -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */ -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */ +void f_vint32mf2x2_t () {vint32mf2x2_t t;} +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} +void f_vint32mf2x3_t () {vint32mf2x3_t t;} +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} +void f_vint32mf2x4_t () {vint32mf2x4_t t;} +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} +void f_vint32mf2x5_t () {vint32mf2x5_t t;} +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} +void f_vint32mf2x6_t () {vint32mf2x6_t t;} +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} +void f_vint32mf2x7_t () {vint32mf2x7_t t;} +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} +void f_vint32mf2x8_t () {vint32mf2x8_t t;} +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} void f_vint32m1x2_t () {vint32m1x2_t t;} void f_vuint32m1x2_t () {vuint32m1x2_t t;} void f_vint32m1x3_t () {vint32m1x3_t t;} @@ -153,54 +153,143 @@ void f_vint32m2x4_t () {vint32m2x4_t t;} void f_vuint32m2x4_t () {vuint32m2x4_t t;} void f_vint32m4x2_t () {vint32m4x2_t t;} void f_vuint32m4x2_t () {vuint32m4x2_t t;} -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */ -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */ -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */ -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */ -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */ -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */ -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */ -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */ -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */ -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */ -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */ -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */ -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */ -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */ -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */ -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */ -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */ -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */ -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */ -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */ -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */ -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */ -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */ -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */ -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */ -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */ -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */ -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */ -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */ -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */ -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */ -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */ -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */ -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */ -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */ -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */ -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */ -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */ -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */ -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */ -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */ -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */ -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */ -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */ -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */ -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */ -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */ -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */ -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */ -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */ -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void f_vint64m1x2_t () {vint64m1x2_t t;} +void f_vuint64m1x2_t () {vuint64m1x2_t t;} +void f_vint64m1x3_t () {vint64m1x3_t t;} +void f_vuint64m1x3_t () {vuint64m1x3_t t;} +void f_vint64m1x4_t () {vint64m1x4_t t;} +void f_vuint64m1x4_t () {vuint64m1x4_t t;} +void f_vint64m1x5_t () {vint64m1x5_t t;} +void f_vuint64m1x5_t () {vuint64m1x5_t t;} +void f_vint64m1x6_t () {vint64m1x6_t t;} +void f_vuint64m1x6_t () {vuint64m1x6_t t;} +void f_vint64m1x7_t () {vint64m1x7_t t;} +void f_vuint64m1x7_t () {vuint64m1x7_t t;} +void f_vint64m1x8_t () {vint64m1x8_t t;} +void f_vuint64m1x8_t () {vuint64m1x8_t t;} +void f_vint64m2x2_t () {vint64m2x2_t t;} +void f_vuint64m2x2_t () {vuint64m2x2_t t;} +void f_vint64m2x3_t () {vint64m2x3_t t;} +void f_vuint64m2x3_t () {vuint64m2x3_t t;} +void f_vint64m2x4_t () {vint64m2x4_t t;} +void f_vuint64m2x4_t () {vuint64m2x4_t t;} +void f_vint64m4x2_t () {vint64m4x2_t t;} +void f_vuint64m4x2_t () {vuint64m4x2_t t;} +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} + +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */ + +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ + +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ + +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ + +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c index ed180749cb61..967eeece2744 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-13.c @@ -153,54 +153,108 @@ void f_vint32m2x4_t () {vint32m2x4_t t;} void f_vuint32m2x4_t () {vuint32m2x4_t t;} void f_vint32m4x2_t () {vint32m4x2_t t;} void f_vuint32m4x2_t () {vuint32m4x2_t t;} -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */ -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */ -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */ -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */ -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */ -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */ -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */ -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */ -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */ -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */ -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */ -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */ -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */ -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */ -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */ -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */ -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */ -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */ -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */ -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */ -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */ -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */ -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */ -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */ -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */ -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */ -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */ -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */ -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */ -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */ -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */ -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */ -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */ -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */ -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */ -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */ -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */ -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */ -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */ -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */ -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */ -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */ -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */ -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */ -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */ -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */ -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */ -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */ -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */ -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */ -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */ +void f_vint64m1x2_t () {vint64m1x2_t t;} +void f_vuint64m1x2_t () {vuint64m1x2_t t;} +void f_vint64m1x3_t () {vint64m1x3_t t;} +void f_vuint64m1x3_t () {vuint64m1x3_t t;} +void f_vint64m1x4_t () {vint64m1x4_t t;} +void f_vuint64m1x4_t () {vuint64m1x4_t t;} +void f_vint64m1x5_t () {vint64m1x5_t t;} +void f_vuint64m1x5_t () {vuint64m1x5_t t;} +void f_vint64m1x6_t () {vint64m1x6_t t;} +void f_vuint64m1x6_t () {vuint64m1x6_t t;} +void f_vint64m1x7_t () {vint64m1x7_t t;} +void f_vuint64m1x7_t () {vuint64m1x7_t t;} +void f_vint64m1x8_t () {vint64m1x8_t t;} +void f_vuint64m1x8_t () {vuint64m1x8_t t;} +void f_vint64m2x2_t () {vint64m2x2_t t;} +void f_vuint64m2x2_t () {vuint64m2x2_t t;} +void f_vint64m2x3_t () {vint64m2x3_t t;} +void f_vuint64m2x3_t () {vuint64m2x3_t t;} +void f_vint64m2x4_t () {vint64m2x4_t t;} +void f_vuint64m2x4_t () {vuint64m2x4_t t;} +void f_vint64m4x2_t () {vint64m4x2_t t;} +void f_vuint64m4x2_t () {vuint64m4x2_t t;} +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} + +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ + +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ + +void new_f_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c index 70e0989b6e14..b868f3141635 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-14.c @@ -3,20 +3,20 @@ #include "riscv_vector.h" -void f_vint8mf8x2_t () {vint8mf8x2_t t;} /* { dg-error {unknown type name 'vint8mf8x2_t'} } */ -void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} /* { dg-error {unknown type name 'vuint8mf8x2_t'} } */ -void f_vint8mf8x3_t () {vint8mf8x3_t t;} /* { dg-error {unknown type name 'vint8mf8x3_t'} } */ -void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} /* { dg-error {unknown type name 'vuint8mf8x3_t'} } */ -void f_vint8mf8x4_t () {vint8mf8x4_t t;} /* { dg-error {unknown type name 'vint8mf8x4_t'} } */ -void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} /* { dg-error {unknown type name 'vuint8mf8x4_t'} } */ -void f_vint8mf8x5_t () {vint8mf8x5_t t;} /* { dg-error {unknown type name 'vint8mf8x5_t'} } */ -void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} /* { dg-error {unknown type name 'vuint8mf8x5_t'} } */ -void f_vint8mf8x6_t () {vint8mf8x6_t t;} /* { dg-error {unknown type name 'vint8mf8x6_t'} } */ -void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} /* { dg-error {unknown type name 'vuint8mf8x6_t'} } */ -void f_vint8mf8x7_t () {vint8mf8x7_t t;} /* { dg-error {unknown type name 'vint8mf8x7_t'} } */ -void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} /* { dg-error {unknown type name 'vuint8mf8x7_t'} } */ -void f_vint8mf8x8_t () {vint8mf8x8_t t;} /* { dg-error {unknown type name 'vint8mf8x8_t'} } */ -void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} /* { dg-error {unknown type name 'vuint8mf8x8_t'} } */ +void f_vint8mf8x2_t () {vint8mf8x2_t t;} +void f_vuint8mf8x2_t () {vuint8mf8x2_t t;} +void f_vint8mf8x3_t () {vint8mf8x3_t t;} +void f_vuint8mf8x3_t () {vuint8mf8x3_t t;} +void f_vint8mf8x4_t () {vint8mf8x4_t t;} +void f_vuint8mf8x4_t () {vuint8mf8x4_t t;} +void f_vint8mf8x5_t () {vint8mf8x5_t t;} +void f_vuint8mf8x5_t () {vuint8mf8x5_t t;} +void f_vint8mf8x6_t () {vint8mf8x6_t t;} +void f_vuint8mf8x6_t () {vuint8mf8x6_t t;} +void f_vint8mf8x7_t () {vint8mf8x7_t t;} +void f_vuint8mf8x7_t () {vuint8mf8x7_t t;} +void f_vint8mf8x8_t () {vint8mf8x8_t t;} +void f_vuint8mf8x8_t () {vuint8mf8x8_t t;} void f_vint8mf4x2_t () {vint8mf4x2_t t;} void f_vuint8mf4x2_t () {vuint8mf4x2_t t;} void f_vint8mf4x3_t () {vint8mf4x3_t t;} @@ -67,20 +67,20 @@ void f_vint8m2x4_t () {vint8m2x4_t t;} void f_vuint8m2x4_t () {vuint8m2x4_t t;} void f_vint8m4x2_t () {vint8m4x2_t t;} void f_vuint8m4x2_t () {vuint8m4x2_t t;} -void f_vint16mf4x2_t () {vint16mf4x2_t t;} /* { dg-error {unknown type name 'vint16mf4x2_t'} } */ -void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} /* { dg-error {unknown type name 'vuint16mf4x2_t'} } */ -void f_vint16mf4x3_t () {vint16mf4x3_t t;} /* { dg-error {unknown type name 'vint16mf4x3_t'} } */ -void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} /* { dg-error {unknown type name 'vuint16mf4x3_t'} } */ -void f_vint16mf4x4_t () {vint16mf4x4_t t;} /* { dg-error {unknown type name 'vint16mf4x4_t'} } */ -void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} /* { dg-error {unknown type name 'vuint16mf4x4_t'} } */ -void f_vint16mf4x5_t () {vint16mf4x5_t t;} /* { dg-error {unknown type name 'vint16mf4x5_t'} } */ -void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} /* { dg-error {unknown type name 'vuint16mf4x5_t'} } */ -void f_vint16mf4x6_t () {vint16mf4x6_t t;} /* { dg-error {unknown type name 'vint16mf4x6_t'} } */ -void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} /* { dg-error {unknown type name 'vuint16mf4x6_t'} } */ -void f_vint16mf4x7_t () {vint16mf4x7_t t;} /* { dg-error {unknown type name 'vint16mf4x7_t'} } */ -void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} /* { dg-error {unknown type name 'vuint16mf4x7_t'} } */ -void f_vint16mf4x8_t () {vint16mf4x8_t t;} /* { dg-error {unknown type name 'vint16mf4x8_t'} } */ -void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} /* { dg-error {unknown type name 'vuint16mf4x8_t'} } */ +void f_vint16mf4x2_t () {vint16mf4x2_t t;} +void f_vuint16mf4x2_t () {vuint16mf4x2_t t;} +void f_vint16mf4x3_t () {vint16mf4x3_t t;} +void f_vuint16mf4x3_t () {vuint16mf4x3_t t;} +void f_vint16mf4x4_t () {vint16mf4x4_t t;} +void f_vuint16mf4x4_t () {vuint16mf4x4_t t;} +void f_vint16mf4x5_t () {vint16mf4x5_t t;} +void f_vuint16mf4x5_t () {vuint16mf4x5_t t;} +void f_vint16mf4x6_t () {vint16mf4x6_t t;} +void f_vuint16mf4x6_t () {vuint16mf4x6_t t;} +void f_vint16mf4x7_t () {vint16mf4x7_t t;} +void f_vuint16mf4x7_t () {vuint16mf4x7_t t;} +void f_vint16mf4x8_t () {vint16mf4x8_t t;} +void f_vuint16mf4x8_t () {vuint16mf4x8_t t;} void f_vint16mf2x2_t () {vint16mf2x2_t t;} void f_vuint16mf2x2_t () {vuint16mf2x2_t t;} void f_vint16mf2x3_t () {vint16mf2x3_t t;} @@ -117,20 +117,20 @@ void f_vint16m2x4_t () {vint16m2x4_t t;} void f_vuint16m2x4_t () {vuint16m2x4_t t;} void f_vint16m4x2_t () {vint16m4x2_t t;} void f_vuint16m4x2_t () {vuint16m4x2_t t;} -void f_vint32mf2x2_t () {vint32mf2x2_t t;} /* { dg-error {unknown type name 'vint32mf2x2_t'} } */ -void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} /* { dg-error {unknown type name 'vuint32mf2x2_t'} } */ -void f_vint32mf2x3_t () {vint32mf2x3_t t;} /* { dg-error {unknown type name 'vint32mf2x3_t'} } */ -void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} /* { dg-error {unknown type name 'vuint32mf2x3_t'} } */ -void f_vint32mf2x4_t () {vint32mf2x4_t t;} /* { dg-error {unknown type name 'vint32mf2x4_t'} } */ -void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} /* { dg-error {unknown type name 'vuint32mf2x4_t'} } */ -void f_vint32mf2x5_t () {vint32mf2x5_t t;} /* { dg-error {unknown type name 'vint32mf2x5_t'} } */ -void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} /* { dg-error {unknown type name 'vuint32mf2x5_t'} } */ -void f_vint32mf2x6_t () {vint32mf2x6_t t;} /* { dg-error {unknown type name 'vint32mf2x6_t'} } */ -void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} /* { dg-error {unknown type name 'vuint32mf2x6_t'} } */ -void f_vint32mf2x7_t () {vint32mf2x7_t t;} /* { dg-error {unknown type name 'vint32mf2x7_t'} } */ -void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} /* { dg-error {unknown type name 'vuint32mf2x7_t'} } */ -void f_vint32mf2x8_t () {vint32mf2x8_t t;} /* { dg-error {unknown type name 'vint32mf2x8_t'} } */ -void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} /* { dg-error {unknown type name 'vuint32mf2x8_t'} } */ +void f_vint32mf2x2_t () {vint32mf2x2_t t;} +void f_vuint32mf2x2_t () {vuint32mf2x2_t t;} +void f_vint32mf2x3_t () {vint32mf2x3_t t;} +void f_vuint32mf2x3_t () {vuint32mf2x3_t t;} +void f_vint32mf2x4_t () {vint32mf2x4_t t;} +void f_vuint32mf2x4_t () {vuint32mf2x4_t t;} +void f_vint32mf2x5_t () {vint32mf2x5_t t;} +void f_vuint32mf2x5_t () {vuint32mf2x5_t t;} +void f_vint32mf2x6_t () {vint32mf2x6_t t;} +void f_vuint32mf2x6_t () {vuint32mf2x6_t t;} +void f_vint32mf2x7_t () {vint32mf2x7_t t;} +void f_vuint32mf2x7_t () {vuint32mf2x7_t t;} +void f_vint32mf2x8_t () {vint32mf2x8_t t;} +void f_vuint32mf2x8_t () {vuint32mf2x8_t t;} void f_vint32m1x2_t () {vint32m1x2_t t;} void f_vuint32m1x2_t () {vuint32m1x2_t t;} void f_vint32m1x3_t () {vint32m1x3_t t;} @@ -153,35 +153,35 @@ void f_vint32m2x4_t () {vint32m2x4_t t;} void f_vuint32m2x4_t () {vuint32m2x4_t t;} void f_vint32m4x2_t () {vint32m4x2_t t;} void f_vuint32m4x2_t () {vuint32m4x2_t t;} -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */ -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */ -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */ -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */ -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */ -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */ -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */ -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */ -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */ -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */ -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */ -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */ -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */ -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */ -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */ -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */ -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */ -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */ -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */ -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */ -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */ -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */ -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */ -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */ -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */ -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */ -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */ -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */ -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */ +void f_vint64m1x2_t () {vint64m1x2_t t;} +void f_vuint64m1x2_t () {vuint64m1x2_t t;} +void f_vint64m1x3_t () {vint64m1x3_t t;} +void f_vuint64m1x3_t () {vuint64m1x3_t t;} +void f_vint64m1x4_t () {vint64m1x4_t t;} +void f_vuint64m1x4_t () {vuint64m1x4_t t;} +void f_vint64m1x5_t () {vint64m1x5_t t;} +void f_vuint64m1x5_t () {vuint64m1x5_t t;} +void f_vint64m1x6_t () {vint64m1x6_t t;} +void f_vuint64m1x6_t () {vuint64m1x6_t t;} +void f_vint64m1x7_t () {vint64m1x7_t t;} +void f_vuint64m1x7_t () {vuint64m1x7_t t;} +void f_vint64m1x8_t () {vint64m1x8_t t;} +void f_vuint64m1x8_t () {vuint64m1x8_t t;} +void f_vint64m2x2_t () {vint64m2x2_t t;} +void f_vuint64m2x2_t () {vuint64m2x2_t t;} +void f_vint64m2x3_t () {vint64m2x3_t t;} +void f_vuint64m2x3_t () {vuint64m2x3_t t;} +void f_vint64m2x4_t () {vint64m2x4_t t;} +void f_vuint64m2x4_t () {vuint64m2x4_t t;} +void f_vint64m4x2_t () {vint64m4x2_t t;} +void f_vuint64m4x2_t () {vuint64m4x2_t t;} +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} @@ -193,14 +193,107 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */ -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */ -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */ -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */ -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */ -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */ -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */ -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */ -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */ -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */ -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} + +void new_f_vint8mf8x2_t (vint8mf8x2_t t) { } /* { dg-error {argument type 'vint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x2_t (vuint8mf8x2_t t) { } /* { dg-error {argument type 'vuint8mf8x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x3_t (vint8mf8x3_t t) { } /* { dg-error {argument type 'vint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x3_t (vuint8mf8x3_t t) { } /* { dg-error {argument type 'vuint8mf8x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x4_t (vint8mf8x4_t t) { } /* { dg-error {argument type 'vint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x4_t (vuint8mf8x4_t t) { } /* { dg-error {argument type 'vuint8mf8x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x5_t (vint8mf8x5_t t) { } /* { dg-error {argument type 'vint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x5_t (vuint8mf8x5_t t) { } /* { dg-error {argument type 'vuint8mf8x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x6_t (vint8mf8x6_t t) { } /* { dg-error {argument type 'vint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x6_t (vuint8mf8x6_t t) { } /* { dg-error {argument type 'vuint8mf8x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x7_t (vint8mf8x7_t t) { } /* { dg-error {argument type 'vint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x7_t (vuint8mf8x7_t t) { } /* { dg-error {argument type 'vuint8mf8x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint8mf8x8_t (vint8mf8x8_t t) { } /* { dg-error {argument type 'vint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint8mf8x8_t (vuint8mf8x8_t t) { } /* { dg-error {argument type 'vuint8mf8x8_t' requires the minimal vector length '64' but '32' is given} } */ + +void new_f_vint16mf4x2_t (vint16mf4x2_t t) { } /* { dg-error {argument type 'vint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint16mf4x2_t (vuint16mf4x2_t t) { } /* { dg-error {argument type 'vuint16mf4x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint16mf4x3_t (vint16mf4x3_t t) { } /* { dg-error {argument type 'vint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint16mf4x3_t (vuint16mf4x3_t t) { } /* { dg-error {argument type 'vuint16mf4x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint16mf4x4_t (vint16mf4x4_t t) { } /* { dg-error {argument type 'vint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint16mf4x4_t (vuint16mf4x4_t t) { } /* { dg-error {argument type 'vuint16mf4x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint16mf4x5_t (vint16mf4x5_t t) { } /* { dg-error {argument type 'vint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint16mf4x5_t (vuint16mf4x5_t t) { } /* { dg-error {argument type 'vuint16mf4x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint16mf4x6_t (vint16mf4x6_t t) { } /* { dg-error {argument type 'vint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint16mf4x6_t (vuint16mf4x6_t t) { } /* { dg-error {argument type 'vuint16mf4x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint16mf4x7_t (vint16mf4x7_t t) { } /* { dg-error {argument type 'vint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint16mf4x7_t (vuint16mf4x7_t t) { } /* { dg-error {argument type 'vuint16mf4x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint16mf4x8_t (vint16mf4x8_t t) { } /* { dg-error {argument type 'vint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint16mf4x8_t (vuint16mf4x8_t t) { } /* { dg-error {argument type 'vuint16mf4x8_t' requires the minimal vector length '64' but '32' is given} } */ + +void new_f_vint32mf2x2_t (vint32mf2x2_t t) { } /* { dg-error {argument type 'vint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x2_t (vuint32mf2x2_t t) { } /* { dg-error {argument type 'vuint32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x3_t (vint32mf2x3_t t) { } /* { dg-error {argument type 'vint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x3_t (vuint32mf2x3_t t) { } /* { dg-error {argument type 'vuint32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x4_t (vint32mf2x4_t t) { } /* { dg-error {argument type 'vint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x4_t (vuint32mf2x4_t t) { } /* { dg-error {argument type 'vuint32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x5_t (vint32mf2x5_t t) { } /* { dg-error {argument type 'vint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x5_t (vuint32mf2x5_t t) { } /* { dg-error {argument type 'vuint32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x6_t (vint32mf2x6_t t) { } /* { dg-error {argument type 'vint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x6_t (vuint32mf2x6_t t) { } /* { dg-error {argument type 'vuint32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x7_t (vint32mf2x7_t t) { } /* { dg-error {argument type 'vint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x7_t (vuint32mf2x7_t t) { } /* { dg-error {argument type 'vuint32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vint32mf2x8_t (vint32mf2x8_t t) { } /* { dg-error {argument type 'vint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vuint32mf2x8_t (vuint32mf2x8_t t) { } /* { dg-error {argument type 'vuint32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */ + +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ + +void new_f_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the minimal vector length '64' but '32' is given} } */ +void new_f_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the minimal vector length '64' but '32' is given} } */ + +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c index 2a615f808162..094b7efdef44 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-15.c @@ -153,28 +153,28 @@ void f_vint32m2x4_t () {vint32m2x4_t t;} void f_vuint32m2x4_t () {vuint32m2x4_t t;} void f_vint32m4x2_t () {vint32m4x2_t t;} void f_vuint32m4x2_t () {vuint32m4x2_t t;} -void f_vint64m1x2_t () {vint64m1x2_t t;} /* { dg-error {unknown type name 'vint64m1x2_t'} } */ -void f_vuint64m1x2_t () {vuint64m1x2_t t;} /* { dg-error {unknown type name 'vuint64m1x2_t'} } */ -void f_vint64m1x3_t () {vint64m1x3_t t;} /* { dg-error {unknown type name 'vint64m1x3_t'} } */ -void f_vuint64m1x3_t () {vuint64m1x3_t t;} /* { dg-error {unknown type name 'vuint64m1x3_t'} } */ -void f_vint64m1x4_t () {vint64m1x4_t t;} /* { dg-error {unknown type name 'vint64m1x4_t'} } */ -void f_vuint64m1x4_t () {vuint64m1x4_t t;} /* { dg-error {unknown type name 'vuint64m1x4_t'} } */ -void f_vint64m1x5_t () {vint64m1x5_t t;} /* { dg-error {unknown type name 'vint64m1x5_t'} } */ -void f_vuint64m1x5_t () {vuint64m1x5_t t;} /* { dg-error {unknown type name 'vuint64m1x5_t'} } */ -void f_vint64m1x6_t () {vint64m1x6_t t;} /* { dg-error {unknown type name 'vint64m1x6_t'} } */ -void f_vuint64m1x6_t () {vuint64m1x6_t t;} /* { dg-error {unknown type name 'vuint64m1x6_t'} } */ -void f_vint64m1x7_t () {vint64m1x7_t t;} /* { dg-error {unknown type name 'vint64m1x7_t'} } */ -void f_vuint64m1x7_t () {vuint64m1x7_t t;} /* { dg-error {unknown type name 'vuint64m1x7_t'} } */ -void f_vint64m1x8_t () {vint64m1x8_t t;} /* { dg-error {unknown type name 'vint64m1x8_t'} } */ -void f_vuint64m1x8_t () {vuint64m1x8_t t;} /* { dg-error {unknown type name 'vuint64m1x8_t'} } */ -void f_vint64m2x2_t () {vint64m2x2_t t;} /* { dg-error {unknown type name 'vint64m2x2_t'} } */ -void f_vuint64m2x2_t () {vuint64m2x2_t t;} /* { dg-error {unknown type name 'vuint64m2x2_t'} } */ -void f_vint64m2x3_t () {vint64m2x3_t t;} /* { dg-error {unknown type name 'vint64m2x3_t'} } */ -void f_vuint64m2x3_t () {vuint64m2x3_t t;} /* { dg-error {unknown type name 'vuint64m2x3_t'} } */ -void f_vint64m2x4_t () {vint64m2x4_t t;} /* { dg-error {unknown type name 'vint64m2x4_t'} } */ -void f_vuint64m2x4_t () {vuint64m2x4_t t;} /* { dg-error {unknown type name 'vuint64m2x4_t'} } */ -void f_vint64m4x2_t () {vint64m4x2_t t;} /* { dg-error {unknown type name 'vint64m4x2_t'} } */ -void f_vuint64m4x2_t () {vuint64m4x2_t t;} /* { dg-error {unknown type name 'vuint64m4x2_t'} } */ +void f_vint64m1x2_t () {vint64m1x2_t t;} +void f_vuint64m1x2_t () {vuint64m1x2_t t;} +void f_vint64m1x3_t () {vint64m1x3_t t;} +void f_vuint64m1x3_t () {vuint64m1x3_t t;} +void f_vint64m1x4_t () {vint64m1x4_t t;} +void f_vuint64m1x4_t () {vuint64m1x4_t t;} +void f_vint64m1x5_t () {vint64m1x5_t t;} +void f_vuint64m1x5_t () {vuint64m1x5_t t;} +void f_vint64m1x6_t () {vint64m1x6_t t;} +void f_vuint64m1x6_t () {vuint64m1x6_t t;} +void f_vint64m1x7_t () {vint64m1x7_t t;} +void f_vuint64m1x7_t () {vuint64m1x7_t t;} +void f_vint64m1x8_t () {vint64m1x8_t t;} +void f_vuint64m1x8_t () {vuint64m1x8_t t;} +void f_vint64m2x2_t () {vint64m2x2_t t;} +void f_vuint64m2x2_t () {vuint64m2x2_t t;} +void f_vint64m2x3_t () {vint64m2x3_t t;} +void f_vuint64m2x3_t () {vuint64m2x3_t t;} +void f_vint64m2x4_t () {vint64m2x4_t t;} +void f_vuint64m2x4_t () {vuint64m2x4_t t;} +void f_vint64m4x2_t () {vint64m4x2_t t;} +void f_vuint64m4x2_t () {vuint64m4x2_t t;} void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} @@ -193,14 +193,54 @@ void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */ -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */ -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */ -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */ -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */ -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */ -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */ -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */ -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */ -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */ -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} + +void new_f_vint64m1x2_t (vint64m1x2_t t) { } /* { dg-error {argument type 'vint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x2_t (vuint64m1x2_t t) { } /* { dg-error {argument type 'vuint64m1x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x3_t (vint64m1x3_t t) { } /* { dg-error {argument type 'vint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x3_t (vuint64m1x3_t t) { } /* { dg-error {argument type 'vuint64m1x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x4_t (vint64m1x4_t t) { } /* { dg-error {argument type 'vint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x4_t (vuint64m1x4_t t) { } /* { dg-error {argument type 'vuint64m1x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x5_t (vint64m1x5_t t) { } /* { dg-error {argument type 'vint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x5_t (vuint64m1x5_t t) { } /* { dg-error {argument type 'vuint64m1x5_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x6_t (vint64m1x6_t t) { } /* { dg-error {argument type 'vint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x6_t (vuint64m1x6_t t) { } /* { dg-error {argument type 'vuint64m1x6_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x7_t (vint64m1x7_t t) { } /* { dg-error {argument type 'vint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x7_t (vuint64m1x7_t t) { } /* { dg-error {argument type 'vuint64m1x7_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m1x8_t (vint64m1x8_t t) { } /* { dg-error {argument type 'vint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m1x8_t (vuint64m1x8_t t) { } /* { dg-error {argument type 'vuint64m1x8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x2_t (vint64m2x2_t t) { } /* { dg-error {argument type 'vint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x2_t (vuint64m2x2_t t) { } /* { dg-error {argument type 'vuint64m2x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x3_t (vint64m2x3_t t) { } /* { dg-error {argument type 'vint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x3_t (vuint64m2x3_t t) { } /* { dg-error {argument type 'vuint64m2x3_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m2x4_t (vint64m2x4_t t) { } /* { dg-error {argument type 'vint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m2x4_t (vuint64m2x4_t t) { } /* { dg-error {argument type 'vuint64m2x4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vint64m4x2_t (vint64m4x2_t t) { } /* { dg-error {argument type 'vint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_f_vuint64m4x2_t (vuint64m4x2_t t) { } /* { dg-error {argument type 'vuint64m4x2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ + +void new_f_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */ +void new_f_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c index 92f4ee02d208..6e08f522d9f4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-2.c @@ -54,12 +54,27 @@ void foo47 () {vint64m4_t t;} void foo48 () {vuint64m4_t t;} void foo49 () {vint64m8_t t;} void foo50 () {vuint64m8_t t;} -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */ -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */ -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */ -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */ -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */ -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */ -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */ -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */ -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo57 () {vfloat32mf2_t t;} +void foo58 () {vfloat32m1_t t;} +void foo59 () {vfloat32m2_t t;} +void foo60 () {vfloat32m4_t t;} +void foo61 () {vfloat32m8_t t;} +void foo62 () {vfloat64m1_t t;} +void foo63 () {vfloat64m2_t t;} +void foo64 () {vfloat64m4_t t;} +void foo65 () {vfloat64m8_t t;} + +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */ +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */ +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */ +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c index 3a4257218630..4fb402335094 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-3.c @@ -59,7 +59,17 @@ void foo58 () {vfloat32m1_t t;} void foo59 () {vfloat32m2_t t;} void foo60 () {vfloat32m4_t t;} void foo61 () {vfloat32m8_t t;} -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */ -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */ -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */ -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo62 () {vfloat64m1_t t;} +void foo63 () {vfloat64m2_t t;} +void foo64 () {vfloat64m4_t t;} +void foo65 () {vfloat64m8_t t;} + +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */ +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */ +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */ +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c index de850e5e10db..28b3ae708f52 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-5.c @@ -3,15 +3,15 @@ #include "riscv_vector.h" -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */ +void foo0 () {vbool64_t t;} void foo1 () {vbool32_t t;} void foo2 () {vbool16_t t;} void foo3 () {vbool8_t t;} void foo4 () {vbool4_t t;} void foo5 () {vbool2_t t;} void foo6 () {vbool1_t t;} -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */ -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */ +void foo7 () {vint8mf8_t t;} +void foo8 () {vuint8mf8_t t;} void foo9 () {vint8mf4_t t;} void foo10 () {vuint8mf4_t t;} void foo11 () {vint8mf2_t t;} @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;} void foo18 () {vuint8m4_t t;} void foo19 () {vint8m8_t t;} void foo20 () {vuint8m8_t t;} -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */ -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */ +void foo21 () {vint16mf4_t t;} +void foo22 () {vuint16mf4_t t;} void foo23 () {vint16mf2_t t;} void foo24 () {vuint16mf2_t t;} void foo25 () {vint16m1_t t;} @@ -36,8 +36,8 @@ void foo29 () {vint16m4_t t;} void foo30 () {vuint16m4_t t;} void foo31 () {vint16m8_t t;} void foo32 () {vuint16m8_t t;} -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */ -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */ +void foo33 () {vint32mf2_t t;} +void foo34 () {vuint32mf2_t t;} void foo35 () {vint32m1_t t;} void foo36 () {vuint32m1_t t;} void foo37 () {vint32m2_t t;} @@ -46,20 +46,50 @@ void foo39 () {vint32m4_t t;} void foo40 () {vuint32m4_t t;} void foo41 () {vint32m8_t t;} void foo42 () {vuint32m8_t t;} -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */ -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */ -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */ -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */ -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */ -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */ -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */ -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */ -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */ -void foo58 () {vfloat32m1_t t;} /* { dg-error {unknown type name 'vfloat32m1_t'} } */ -void foo59 () {vfloat32m2_t t;} /* { dg-error {unknown type name 'vfloat32m2_t'} } */ -void foo60 () {vfloat32m4_t t;} /* { dg-error {unknown type name 'vfloat32m4_t'} } */ -void foo61 () {vfloat32m8_t t;} /* { dg-error {unknown type name 'vfloat32m8_t'} } */ -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */ -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */ -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */ -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ +void foo43 () {vint64m1_t t;} +void foo44 () {vuint64m1_t t;} +void foo45 () {vint64m2_t t;} +void foo46 () {vuint64m2_t t;} +void foo47 () {vint64m4_t t;} +void foo48 () {vuint64m4_t t;} +void foo49 () {vint64m8_t t;} +void foo50 () {vuint64m8_t t;} + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo57 () {vfloat32mf2_t t;} +void foo58 () {vfloat32m1_t t;} +void foo59 () {vfloat32m2_t t;} +void foo60 () {vfloat32m4_t t;} +void foo61 () {vfloat32m8_t t;} +void foo62 () {vfloat64m1_t t;} +void foo63 () {vfloat64m2_t t;} +void foo64 () {vfloat64m4_t t;} +void foo65 () {vfloat64m8_t t;} + +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo33 (vint32mf2_t t) { } /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo58 (vfloat32m1_t t) { } /* { dg-error {argument type 'vfloat32m1_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo59 (vfloat32m2_t t) { } /* { dg-error {argument type 'vfloat32m2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo60 (vfloat32m4_t t) { } /* { dg-error {argument type 'vfloat32m4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo61 (vfloat32m8_t t) { } /* { dg-error {argument type 'vfloat32m8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */ +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */ +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */ +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c index 1d79b6b8eacb..e48ee3919926 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-6.c @@ -3,15 +3,15 @@ #include "riscv_vector.h" -void foo0 () {vbool64_t t;} /* { dg-error {unknown type name 'vbool64_t'} } */ +void foo0 () {vbool64_t t;} void foo1 () {vbool32_t t;} void foo2 () {vbool16_t t;} void foo3 () {vbool8_t t;} void foo4 () {vbool4_t t;} void foo5 () {vbool2_t t;} void foo6 () {vbool1_t t;} -void foo7 () {vint8mf8_t t;} /* { dg-error {unknown type name 'vint8mf8_t'} } */ -void foo8 () {vuint8mf8_t t;} /* { dg-error {unknown type name 'vuint8mf8_t'} } */ +void foo7 () {vint8mf8_t t;} +void foo8 () {vuint8mf8_t t;} void foo9 () {vint8mf4_t t;} void foo10 () {vuint8mf4_t t;} void foo11 () {vint8mf2_t t;} @@ -24,8 +24,8 @@ void foo17 () {vint8m4_t t;} void foo18 () {vuint8m4_t t;} void foo19 () {vint8m8_t t;} void foo20 () {vuint8m8_t t;} -void foo21 () {vint16mf4_t t;} /* { dg-error {unknown type name 'vint16mf4_t'} } */ -void foo22 () {vuint16mf4_t t;} /* { dg-error {unknown type name 'vuint16mf4_t'} } */ +void foo21 () {vint16mf4_t t;} +void foo22 () {vuint16mf4_t t;} void foo23 () {vint16mf2_t t;} void foo24 () {vuint16mf2_t t;} void foo25 () {vint16m1_t t;} @@ -36,8 +36,13 @@ void foo29 () {vint16m4_t t;} void foo30 () {vuint16m4_t t;} void foo31 () {vint16m8_t t;} void foo32 () {vuint16m8_t t;} -void foo33 () {vint32mf2_t t;} /* { dg-error {unknown type name 'vint32mf2_t'} } */ -void foo34 () {vuint32mf2_t t;} /* { dg-error {unknown type name 'vuint32mf2_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void foo33 () {vint32mf2_t t;} +void foo34 () {vuint32mf2_t t;} void foo35 () {vint32m1_t t;} void foo36 () {vuint32m1_t t;} void foo37 () {vint32m2_t t;} @@ -46,20 +51,41 @@ void foo39 () {vint32m4_t t;} void foo40 () {vuint32m4_t t;} void foo41 () {vint32m8_t t;} void foo42 () {vuint32m8_t t;} -void foo43 () {vint64m1_t t;} /* { dg-error {unknown type name 'vint64m1_t'} } */ -void foo44 () {vuint64m1_t t;} /* { dg-error {unknown type name 'vuint64m1_t'} } */ -void foo45 () {vint64m2_t t;} /* { dg-error {unknown type name 'vint64m2_t'} } */ -void foo46 () {vuint64m2_t t;} /* { dg-error {unknown type name 'vuint64m2_t'} } */ -void foo47 () {vint64m4_t t;} /* { dg-error {unknown type name 'vint64m4_t'} } */ -void foo48 () {vuint64m4_t t;} /* { dg-error {unknown type name 'vuint64m4_t'} } */ -void foo49 () {vint64m8_t t;} /* { dg-error {unknown type name 'vint64m8_t'} } */ -void foo50 () {vuint64m8_t t;} /* { dg-error {unknown type name 'vuint64m8_t'} } */ -void foo57 () {vfloat32mf2_t t;} /* { dg-error {unknown type name 'vfloat32mf2_t'} } */ +void foo43 () {vint64m1_t t;} +void foo44 () {vuint64m1_t t;} +void foo45 () {vint64m2_t t;} +void foo46 () {vuint64m2_t t;} +void foo47 () {vint64m4_t t;} +void foo48 () {vuint64m4_t t;} +void foo49 () {vint64m8_t t;} +void foo50 () {vuint64m8_t t;} +void foo57 () {vfloat32mf2_t t;} void foo58 () {vfloat32m1_t t;} void foo59 () {vfloat32m2_t t;} void foo60 () {vfloat32m4_t t;} void foo61 () {vfloat32m8_t t;} -void foo62 () {vfloat64m1_t t;} /* { dg-error {unknown type name 'vfloat64m1_t'} } */ -void foo63 () {vfloat64m2_t t;} /* { dg-error {unknown type name 'vfloat64m2_t'} } */ -void foo64 () {vfloat64m4_t t;} /* { dg-error {unknown type name 'vfloat64m4_t'} } */ -void foo65 () {vfloat64m8_t t;} /* { dg-error {unknown type name 'vfloat64m8_t'} } */ +void foo62 () {vfloat64m1_t t;} +void foo63 () {vfloat64m2_t t;} +void foo64 () {vfloat64m4_t t;} +void foo65 () {vfloat64m8_t t;} + +void new_foo0 (vbool64_t t) { } /* { dg-error {argument type 'vbool64_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo7 (vint8mf8_t t) { } /* { dg-error {argument type 'vint8mf8_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo8 (vuint8mf8_t t) { } /* { dg-error {argument type 'vuint8mf8_t' requires the minimal vector length '64' but '32'} } */ +void new_foo21 (vint16mf4_t t) { } /* { dg-error {argument type 'vint16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo22 (vuint16mf4_t t) { } /* { dg-error {argument type 'vuint16mf4_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo33 (vint32mf2_t t) {} /* { dg-error {argument type 'vint32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo34 (vuint32mf2_t t) { } /* { dg-error {argument type 'vuint32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo43 (vint64m1_t t) { } /* { dg-error {argument type 'vint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo44 (vuint64m1_t t) { } /* { dg-error {argument type 'vuint64m1_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo45 (vint64m2_t t) { } /* { dg-error {argument type 'vint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo46 (vuint64m2_t t) { } /* { dg-error {argument type 'vuint64m2_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo47 (vint64m4_t t) { } /* { dg-error {argument type 'vint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo48 (vuint64m4_t t) { } /* { dg-error {argument type 'vuint64m4_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo49 (vint64m8_t t) { } /* { dg-error {argument type 'vint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo50 (vuint64m8_t t) { } /* { dg-error {argument type 'vuint64m8_t' requires the zve64x, zve64f, zve64d or v ISA extension} } */ +void new_foo57 (vfloat32mf2_t t) { } /* { dg-error {argument type 'vfloat32mf2_t' requires the minimal vector length '64' but '32' is given} } */ +void new_foo62 (vfloat64m1_t t) { } /* { dg-error {argument type 'vfloat64m1_t' requires the zve64d or v ISA extension} } */ +void new_foo63 (vfloat64m2_t t) { } /* { dg-error {argument type 'vfloat64m2_t' requires the zve64d or v ISA extension} } */ +void new_foo64 (vfloat64m4_t t) { } /* { dg-error {argument type 'vfloat64m4_t' requires the zve64d or v ISA extension} } */ +void new_foo65 (vfloat64m8_t t) { } /* { dg-error {argument type 'vfloat64m8_t' requires the zve64d or v ISA extension} } */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c index 98a7d391d4e8..57ede32a4007 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/user-9.c @@ -175,32 +175,67 @@ void f_vint64m2x4_t () {vint64m2x4_t t;} void f_vuint64m2x4_t () {vuint64m2x4_t t;} void f_vint64m4x2_t () {vint64m4x2_t t;} void f_vuint64m4x2_t () {vuint64m4x2_t t;} -void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} /* { dg-error {unknown type name 'vfloat32mf2x2_t'} } */ -void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} /* { dg-error {unknown type name 'vfloat32mf2x3_t'} } */ -void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} /* { dg-error {unknown type name 'vfloat32mf2x4_t'} } */ -void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} /* { dg-error {unknown type name 'vfloat32mf2x5_t'} } */ -void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} /* { dg-error {unknown type name 'vfloat32mf2x6_t'} } */ -void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} /* { dg-error {unknown type name 'vfloat32mf2x7_t'} } */ -void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} /* { dg-error {unknown type name 'vfloat32mf2x8_t'} } */ -void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} /* { dg-error {unknown type name 'vfloat32m1x2_t'} } */ -void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} /* { dg-error {unknown type name 'vfloat32m1x3_t'} } */ -void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} /* { dg-error {unknown type name 'vfloat32m1x4_t'} } */ -void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} /* { dg-error {unknown type name 'vfloat32m1x5_t'} } */ -void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} /* { dg-error {unknown type name 'vfloat32m1x6_t'} } */ -void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} /* { dg-error {unknown type name 'vfloat32m1x7_t'} } */ -void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} /* { dg-error {unknown type name 'vfloat32m1x8_t'} } */ -void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} /* { dg-error {unknown type name 'vfloat32m2x2_t'} } */ -void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} /* { dg-error {unknown type name 'vfloat32m2x3_t'} } */ -void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} /* { dg-error {unknown type name 'vfloat32m2x4_t'} } */ -void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} /* { dg-error {unknown type name 'vfloat32m4x2_t'} } */ -void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} /* { dg-error {unknown type name 'vfloat64m1x2_t'} } */ -void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} /* { dg-error {unknown type name 'vfloat64m1x3_t'} } */ -void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} /* { dg-error {unknown type name 'vfloat64m1x4_t'} } */ -void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} /* { dg-error {unknown type name 'vfloat64m1x5_t'} } */ -void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} /* { dg-error {unknown type name 'vfloat64m1x6_t'} } */ -void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} /* { dg-error {unknown type name 'vfloat64m1x7_t'} } */ -void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} /* { dg-error {unknown type name 'vfloat64m1x8_t'} } */ -void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} /* { dg-error {unknown type name 'vfloat64m2x2_t'} } */ -void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} /* { dg-error {unknown type name 'vfloat64m2x3_t'} } */ -void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} /* { dg-error {unknown type name 'vfloat64m2x4_t'} } */ -void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} /* { dg-error {unknown type name 'vfloat64m4x2_t'} } */ + +/* To support target attribute, the vfloat*m*x*_t need to be registered + in advance. We add type and args/return value check during the + set current function but cannot cover below cases. It is the same + behavior compared to aarch64 sve. */ +void f_vfloat32mf2x2_t () {vfloat32mf2x2_t t;} +void f_vfloat32mf2x3_t () {vfloat32mf2x3_t t;} +void f_vfloat32mf2x4_t () {vfloat32mf2x4_t t;} +void f_vfloat32mf2x5_t () {vfloat32mf2x5_t t;} +void f_vfloat32mf2x6_t () {vfloat32mf2x6_t t;} +void f_vfloat32mf2x7_t () {vfloat32mf2x7_t t;} +void f_vfloat32mf2x8_t () {vfloat32mf2x8_t t;} +void f_vfloat32m1x2_t () {vfloat32m1x2_t t;} +void f_vfloat32m1x3_t () {vfloat32m1x3_t t;} +void f_vfloat32m1x4_t () {vfloat32m1x4_t t;} +void f_vfloat32m1x5_t () {vfloat32m1x5_t t;} +void f_vfloat32m1x6_t () {vfloat32m1x6_t t;} +void f_vfloat32m1x7_t () {vfloat32m1x7_t t;} +void f_vfloat32m1x8_t () {vfloat32m1x8_t t;} +void f_vfloat32m2x2_t () {vfloat32m2x2_t t;} +void f_vfloat32m2x3_t () {vfloat32m2x3_t t;} +void f_vfloat32m2x4_t () {vfloat32m2x4_t t;} +void f_vfloat32m4x2_t () {vfloat32m4x2_t t;} +void f_vfloat64m1x2_t () {vfloat64m1x2_t t;} +void f_vfloat64m1x3_t () {vfloat64m1x3_t t;} +void f_vfloat64m1x4_t () {vfloat64m1x4_t t;} +void f_vfloat64m1x5_t () {vfloat64m1x5_t t;} +void f_vfloat64m1x6_t () {vfloat64m1x6_t t;} +void f_vfloat64m1x7_t () {vfloat64m1x7_t t;} +void f_vfloat64m1x8_t () {vfloat64m1x8_t t;} +void f_vfloat64m2x2_t () {vfloat64m2x2_t t;} +void f_vfloat64m2x3_t () {vfloat64m2x3_t t;} +void f_vfloat64m2x4_t () {vfloat64m2x4_t t;} +void f_vfloat64m4x2_t () {vfloat64m4x2_t t;} + +void f_arg_vfloat32mf2x2_t (vfloat32mf2x2_t t) { } /* { dg-error {argument type 'vfloat32mf2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32mf2x3_t (vfloat32mf2x3_t t) { } /* { dg-error {argument type 'vfloat32mf2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32mf2x4_t (vfloat32mf2x4_t t) { } /* { dg-error {argument type 'vfloat32mf2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32mf2x5_t (vfloat32mf2x5_t t) { } /* { dg-error {argument type 'vfloat32mf2x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32mf2x6_t (vfloat32mf2x6_t t) { } /* { dg-error {argument type 'vfloat32mf2x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32mf2x7_t (vfloat32mf2x7_t t) { } /* { dg-error {argument type 'vfloat32mf2x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32mf2x8_t (vfloat32mf2x8_t t) { } /* { dg-error {argument type 'vfloat32mf2x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m1x2_t (vfloat32m1x2_t t) { } /* { dg-error {argument type 'vfloat32m1x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m1x3_t (vfloat32m1x3_t t) { } /* { dg-error {argument type 'vfloat32m1x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m1x4_t (vfloat32m1x4_t t) { } /* { dg-error {argument type 'vfloat32m1x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m1x5_t (vfloat32m1x5_t t) { } /* { dg-error {argument type 'vfloat32m1x5_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m1x6_t (vfloat32m1x6_t t) { } /* { dg-error {argument type 'vfloat32m1x6_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m1x7_t (vfloat32m1x7_t t) { } /* { dg-error {argument type 'vfloat32m1x7_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m1x8_t (vfloat32m1x8_t t) { } /* { dg-error {argument type 'vfloat32m1x8_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m2x2_t (vfloat32m2x2_t t) { } /* { dg-error {argument type 'vfloat32m2x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m2x3_t (vfloat32m2x3_t t) { } /* { dg-error {argument type 'vfloat32m2x3_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m2x4_t (vfloat32m2x4_t t) { } /* { dg-error {argument type 'vfloat32m2x4_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat32m4x2_t (vfloat32m4x2_t t) { } /* { dg-error {argument type 'vfloat32m4x2_t' requires the zve32f, zve64f, zve64d or v ISA extension} } */ +void f_arg_vfloat64m1x2_t (vfloat64m1x2_t t) { } /* { dg-error {argument type 'vfloat64m1x2_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m1x3_t (vfloat64m1x3_t t) { } /* { dg-error {argument type 'vfloat64m1x3_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m1x4_t (vfloat64m1x4_t t) { } /* { dg-error {argument type 'vfloat64m1x4_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m1x5_t (vfloat64m1x5_t t) { } /* { dg-error {argument type 'vfloat64m1x5_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m1x6_t (vfloat64m1x6_t t) { } /* { dg-error {argument type 'vfloat64m1x6_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m1x7_t (vfloat64m1x7_t t) { } /* { dg-error {argument type 'vfloat64m1x7_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m1x8_t (vfloat64m1x8_t t) { } /* { dg-error {argument type 'vfloat64m1x8_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m2x2_t (vfloat64m2x2_t t) { } /* { dg-error {argument type 'vfloat64m2x2_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m2x3_t (vfloat64m2x3_t t) { } /* { dg-error {argument type 'vfloat64m2x3_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m2x4_t (vfloat64m2x4_t t) { } /* { dg-error {argument type 'vfloat64m2x4_t' requires the zve64d or v ISA extension} } */ +void f_arg_vfloat64m4x2_t (vfloat64m4x2_t t) { } /* { dg-error {argument type 'vfloat64m4x2_t' requires the zve64d or v ISA extension} } */ From aa2ab7b79a87c25d113752401a6026c6823dfe57 Mon Sep 17 00:00:00 2001 From: "demin.han" <demin.han@starfivetech.com> Date: Mon, 1 Apr 2024 16:20:46 +0800 Subject: [PATCH 413/551] RISC-V: Minor fix for max_point The program points start from 1, so max_point should be equal to length(). Tested on RV64 and no regression. gcc/ChangeLog: * config/riscv/riscv-vector-costs.cc: Use length() Signed-off-by: demin.han <demin.han@starfivetech.com> --- gcc/config/riscv/riscv-vector-costs.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/riscv/riscv-vector-costs.cc b/gcc/config/riscv/riscv-vector-costs.cc index f462c272a6e5..5ceb313c118a 100644 --- a/gcc/config/riscv/riscv-vector-costs.cc +++ b/gcc/config/riscv/riscv-vector-costs.cc @@ -752,7 +752,7 @@ update_local_live_ranges ( We will be likely using one more vector variable. */ unsigned int max_point - = (*program_points_per_bb.get (bb)).length () - 1; + = (*program_points_per_bb.get (bb)).length (); auto *live_ranges = live_ranges_per_bb.get (bb); bool existed_p = false; tree var = type == load_vec_info_type From 39cb6b880f723780faeef06383e67cfed2e3458d Mon Sep 17 00:00:00 2001 From: Iain Sandoe <iain@sandoe.co.uk> Date: Sun, 7 Apr 2024 19:25:33 +0100 Subject: [PATCH 414/551] Darwin: Sync coverage specs with gcc/gcc.cc. The specs for coverage ere out of date leading to test fails for fcondition-coverage cases. Fixed by updating to match the specs in gcc/gcc.cc. gcc/ChangeLog: * config/darwin.h (LINK_COMMAND_SPEC_A): Update coverage specs. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> --- gcc/config/darwin.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index 31019a0c49d4..c09b9e9dc94d 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -406,7 +406,7 @@ extern GTY(()) int darwin_ms_struct; %{!r:%{!nostdlib:%{!nodefaultlibs: " DARWIN_WEAK_CRTS "}}} \ %o \ %{!r:%{!nostdlib:%{!nodefaultlibs:\ - %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} \ + %{fprofile-arcs|fcondition-coverage|fprofile-generate*|coverage:-lgcov} \ %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1): \ %{static|static-libgcc|static-libstdc++|static-libgfortran: \ libgomp.a%s; : -lgomp }} \ From 7d051f7d45789e1442d26c07bfc5e7fb77433b87 Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Mon, 8 Apr 2024 12:33:05 +0800 Subject: [PATCH 415/551] RISC-V: Refine the error msg for RVV intrinisc required ext The RVV intrinisc API has sorts of required extension from both the march or target attribute. It will have error message similar to below: built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension However, it is not accurate as we have many additional sub extenstion besides v extension. For example, zvbb, zvbk, zvbc ... etc. This patch would like to refine the error message with a friendly hint for the required extension. For example as below: vuint64m1_t __attribute__((target("arch=+v"))) test_1 (vuint64m1_t op_1, vuint64m1_t op_2, size_t vl) { return __riscv_vclmul_vv_u64m1 (op_1, op_2, vl); } When compile with march=rv64gc and target arch=+v, we will have error message as below: error: built-in function '__riscv_vclmul_vv_u64m1(op_1, op_2, vl)' requires the 'zvbc' ISA extension Then the end-user will get the point that the *zvbc* extension is missing for the intrinisc API easily. The below tests are passed for this patch. * The riscv fully regression tests. gcc/ChangeLog: * config/riscv/riscv-vector-builtins-shapes.cc (build_one): Pass required_ext arg when invoke add function. (build_th_loadstore): Ditto. (struct vcreate_def): Ditto. (struct read_vl_def): Ditto. (struct vlenb_def): Ditto. * config/riscv/riscv-vector-builtins.cc (function_builder::add_function): Introduce new arg required_ext to fill in the register func. (function_builder::add_unique_function): Ditto. (function_builder::add_overloaded_function): Ditto. (expand_builtin): Leverage required_extensions_specified to check if the required extension is provided. * config/riscv/riscv-vector-builtins.h (reqired_ext_to_isa_name): New func impl to convert the required_ext enum to the extension name. (required_extensions_specified): New func impl to predicate if the required extension is well feeded. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: Adjust the error message for v extension. * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c: Ditto. * gcc.target/riscv/rvv/base/intrinsic_required_ext-1.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-10.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-2.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-3.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-4.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-5.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-6.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-7.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-8.c: New test. * gcc.target/riscv/rvv/base/intrinsic_required_ext-9.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- .../riscv/riscv-vector-builtins-shapes.cc | 18 +++-- gcc/config/riscv/riscv-vector-builtins.cc | 23 ++++-- gcc/config/riscv/riscv-vector-builtins.h | 75 ++++++++++++++++++- .../riscv/rvv/base/intrinsic_required_ext-1.c | 10 +++ .../rvv/base/intrinsic_required_ext-10.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-2.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-3.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-4.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-5.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-6.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-7.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-8.c | 11 +++ .../riscv/rvv/base/intrinsic_required_ext-9.c | 11 +++ .../target_attribute_v_with_intrinsic-7.c | 2 +- .../target_attribute_v_with_intrinsic-8.c | 2 +- 15 files changed, 210 insertions(+), 19 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-10.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-3.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-4.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-5.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-6.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-7.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-8.c create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-9.c diff --git a/gcc/config/riscv/riscv-vector-builtins-shapes.cc b/gcc/config/riscv/riscv-vector-builtins-shapes.cc index c5ffcc1f2c4c..7f983e823707 100644 --- a/gcc/config/riscv/riscv-vector-builtins-shapes.cc +++ b/gcc/config/riscv/riscv-vector-builtins-shapes.cc @@ -72,9 +72,10 @@ build_one (function_builder &b, const function_group_info &group, if (TARGET_XTHEADVECTOR && !check_type (return_type, argument_types)) return; - b.add_overloaded_function (function_instance, *group.shape); + b.add_overloaded_function (function_instance, *group.shape, + group.required_extensions); b.add_unique_function (function_instance, (*group.shape), return_type, - argument_types); + argument_types, group.required_extensions); } /* Add a function instance for every operand && predicate && args @@ -249,9 +250,10 @@ build_th_loadstore (function_builder &b, const function_group_info &group, if (strstr (group.base_name, "w") && (sew == 8 || sew ==16)) return; - b.add_overloaded_function (function_instance, *group.shape); + b.add_overloaded_function (function_instance, *group.shape, + group.required_extensions); b.add_unique_function (function_instance, (*group.shape), return_type, - argument_types); + argument_types, group.required_extensions); } /* th_loadstore_width_def class. */ @@ -931,7 +933,7 @@ struct vcreate_def : public build_base argument_types.quick_push (arg_type); b.add_unique_function (function_instance, (*group.shape), return_type, - argument_types); + argument_types, group.required_extensions); } } @@ -966,7 +968,8 @@ struct read_vl_def : public function_shape { auto_vec<tree> argument_types; b.add_unique_function (get_read_vl_instance (), (*group.shape), - size_type_node, argument_types); + size_type_node, argument_types, + group.required_extensions); } char *get_name (function_builder &b, const function_instance &instance, @@ -1024,7 +1027,8 @@ struct vlenb_def : public function_shape *group.shape, group.ops_infos.types[0], group.preds[0], &group.ops_infos); b.add_unique_function (function_instance, (*group.shape), - long_unsigned_type_node, argument_types); + long_unsigned_type_node, argument_types, + group.required_extensions); } char *get_name (function_builder &b, const function_instance &instance, diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc index 53ccea7889e2..192a6c230d1c 100644 --- a/gcc/config/riscv/riscv-vector-builtins.cc +++ b/gcc/config/riscv/riscv-vector-builtins.cc @@ -106,6 +106,9 @@ class GTY (()) registered_function /* Generate hash value based on the overload_name and the argument list passed by the user when calling. */ hashval_t overloaded_hash (const vec<tree, va_gc> &); + + /* The reqired extension for the register function. */ + enum required_ext required; }; /* Hash traits for registered_function. */ @@ -3701,6 +3704,7 @@ function_builder::add_function (const function_instance &instance, const char *name, tree fntype, tree attrs, bool placeholder_p, const char *overload_name, const vec<tree> &argument_types, + enum required_ext required, bool overloaded_p = false) { unsigned int code = vec_safe_length (registered_functions); @@ -3730,6 +3734,7 @@ function_builder::add_function (const function_instance &instance, rfn.overload_name = overload_name ? xstrdup (overload_name) : NULL; rfn.argument_types = argument_types; rfn.overloaded_p = overloaded_p; + rfn.required = required; vec_safe_push (registered_functions, &rfn); return rfn; @@ -3744,7 +3749,8 @@ void function_builder::add_unique_function (const function_instance &instance, const function_shape *shape, tree return_type, - vec<tree> &argument_types) + vec<tree> &argument_types, + enum required_ext required) { /* Do not add this function if it is invalid. */ if (!check_required_extensions (instance)) @@ -3762,7 +3768,7 @@ function_builder::add_unique_function (const function_instance &instance, tree attrs = get_attributes (instance); registered_function &rfn = add_function (instance, name, fntype, attrs, false, overload_name, - argument_types.copy ()); + argument_types.copy (), required); /* Enter the function into the hash table. */ hashval_t hash = instance.hash (); @@ -3777,7 +3783,7 @@ function_builder::add_unique_function (const function_instance &instance, tree attrs = get_attributes (instance); bool placeholder_p = !m_direct_overloads; add_function (instance, overload_name, fntype, attrs, placeholder_p, NULL, - vNULL); + vNULL, required); /* Enter the function into the non-overloaded hash table. */ hash = rfn.overloaded_hash (); @@ -3792,7 +3798,8 @@ function_builder::add_unique_function (const function_instance &instance, /* Add overloaded function for gcc. */ void function_builder::add_overloaded_function (const function_instance &instance, - const function_shape *shape) + const function_shape *shape, + enum required_ext required) { if (!check_required_extensions (instance)) return; @@ -3805,7 +3812,7 @@ function_builder::add_overloaded_function (const function_instance &instance, for the overloaded function. */ tree fntype = build_function_type (void_type_node, void_list_node); add_function (instance, name, fntype, NULL_TREE, m_direct_overloads, name, - vNULL, true); + vNULL, required, true); obstack_free (&m_string_obstack, name); } } @@ -4633,10 +4640,12 @@ expand_builtin (unsigned int code, tree exp, rtx target) { registered_function &rfn = *(*registered_functions)[code]; - if (!TARGET_VECTOR) + if (!required_extensions_specified (rfn.required)) { error_at (EXPR_LOCATION (exp), - "built-in function %qE requires the V ISA extension", exp); + "built-in function %qE requires the %qs ISA extension", + exp, + reqired_ext_to_isa_name (rfn.required)); return target; } diff --git a/gcc/config/riscv/riscv-vector-builtins.h b/gcc/config/riscv/riscv-vector-builtins.h index 22fed60b4c31..05d18ae13225 100644 --- a/gcc/config/riscv/riscv-vector-builtins.h +++ b/gcc/config/riscv/riscv-vector-builtins.h @@ -124,8 +124,75 @@ enum required_ext ZVKSED_EXT, /* Crypto vector Zvksed sub-ext */ ZVKSH_EXT, /* Crypto vector Zvksh sub-ext */ XTHEADVECTOR_EXT, /* XTheadVector extension */ + /* Please update below to isa_name func when add or remove enum type(s). */ }; +static inline const char * reqired_ext_to_isa_name (enum required_ext required) +{ + switch (required) + { + case VECTOR_EXT: + return "v"; + case ZVBB_EXT: + return "zvbb"; + case ZVBB_OR_ZVKB_EXT: + return "zvbb or zvkb"; + case ZVBC_EXT: + return "zvbc"; + case ZVKG_EXT: + return "zvkg"; + case ZVKNED_EXT: + return "zvkned"; + case ZVKNHA_OR_ZVKNHB_EXT: + return "zvknha or zvknhb"; + case ZVKNHB_EXT: + return "zvknhb"; + case ZVKSED_EXT: + return "zvksed"; + case ZVKSH_EXT: + return "zvksh"; + case XTHEADVECTOR_EXT: + return "xthreadvector"; + default: + gcc_unreachable (); + } + + gcc_unreachable (); +} + +static inline bool required_extensions_specified (enum required_ext required) +{ + switch (required) + { + case VECTOR_EXT: + return TARGET_VECTOR;; + case ZVBB_EXT: + return TARGET_ZVBB; + case ZVBB_OR_ZVKB_EXT: + return TARGET_ZVBB || TARGET_ZVKB; + case ZVBC_EXT: + return TARGET_ZVBC; + case ZVKG_EXT: + return TARGET_ZVKG; + case ZVKNED_EXT: + return TARGET_ZVKNED; + case ZVKNHA_OR_ZVKNHB_EXT: + return TARGET_ZVKNHA || TARGET_ZVKNHB; + case ZVKNHB_EXT: + return TARGET_ZVKNHB; + case ZVKSED_EXT: + return TARGET_ZVKSED; + case ZVKSH_EXT: + return TARGET_ZVKSH; + case XTHEADVECTOR_EXT: + return TARGET_XTHEADVECTOR; + default: + gcc_unreachable (); + } + + gcc_unreachable (); +} + /* Enumerates the RVV operand types. */ enum operand_type_index { @@ -325,9 +392,10 @@ class function_builder void allocate_argument_types (const function_instance &, vec<tree> &) const; void apply_predication (const function_instance &, tree, vec<tree> &) const; void add_unique_function (const function_instance &, const function_shape *, - tree, vec<tree> &); + tree, vec<tree> &, enum required_ext); void add_overloaded_function (const function_instance &, - const function_shape *); + const function_shape *, + enum required_ext); void register_function_group (const function_group_info &); void append_name (const char *); void append_base_name (const char *); @@ -340,7 +408,8 @@ class function_builder registered_function &add_function (const function_instance &, const char *, tree, tree, bool, const char *, - const vec<tree> &, bool); + const vec<tree> &, enum required_ext, + bool); /* True if we should create a separate decl for each instance of an overloaded function, instead of using function_builder. */ diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-1.c new file mode 100644 index 000000000000..143a3d66016c --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-1.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +size_t +test_3 (size_t vl) +{ + return __riscv_vsetvl_e8m4 (vl); /* { dg-error {built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the 'v' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-10.c new file mode 100644 index 000000000000..b0a9851d4c77 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-10.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint32m1_t op_1, vuint32m1_t op_2, size_t vl) +{ + return __riscv_vsm3me_vv_u32m1 (op_1, op_2, vl); /* { dg-error {built-in function '__riscv_vsm3me_vv_u32m1\(op_1, op_2, vl\)' requires the 'zvksh' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-2.c new file mode 100644 index 000000000000..20ab9775a1e6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint32m1_t op_1, vuint32m1_t op_2, size_t vl) +{ + return __riscv_vandn_vv_u32m1 (op_1, op_2, vl); /* { dg-error {built-in function '__riscv_vandn_vv_u32m1\(op_1, op_2, vl\)' requires the 'zvbb or zvkb' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-3.c new file mode 100644 index 000000000000..9b7d37f5b333 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-3.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint32m1_t op_1, size_t vl) +{ + return __riscv_vclz_v_u32m1 (op_1, vl); /* { dg-error {built-in function '__riscv_vclz_v_u32m1\(op_1, vl\)' requires the 'zvbb' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-4.c new file mode 100644 index 000000000000..fdaab62b17d7 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-4.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint64m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint64m1_t op_1, vuint64m1_t op_2, size_t vl) +{ + return __riscv_vclmul_vv_u64m1 (op_1, op_2, vl); /* { dg-error {built-in function '__riscv_vclmul_vv_u64m1\(op_1, op_2, vl\)' requires the 'zvbc' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-5.c new file mode 100644 index 000000000000..6a4bb431f4a0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-5.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint32m1_t dest, vuint32m1_t op_1, vuint32m1_t op_2, size_t vl) +{ + return __riscv_vghsh_vv_u32m1 (dest, op_1, op_2, vl); /* { dg-error {built-in function '__riscv_vghsh_vv_u32m1\(dest, op_1, op_2, vl\)' requires the 'zvkg' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-6.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-6.c new file mode 100644 index 000000000000..943a2cf653be --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-6.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint32m1_t dest, vuint32mf2_t op_1, size_t vl) +{ + return __riscv_vaesef_vs_u32mf2_u32m1 (dest, op_1, vl); /* { dg-error {built-in function '__riscv_vaesef_vs_u32mf2_u32m1\(dest, op_1, vl\)' requires the 'zvkned' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-7.c new file mode 100644 index 000000000000..c2ccb739f6ed --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-7.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint32m1_t dest, vuint32m1_t op_1, vuint32m1_t op_2, size_t vl) +{ + return __riscv_vsha2ms_vv_u32m1 (dest, op_1, op_2, vl); /* { dg-error {built-in function '__riscv_vsha2ms_vv_u32m1\(dest, op_1, op_2, vl\)' requires the 'zvknha or zvknhb' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-8.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-8.c new file mode 100644 index 000000000000..e4312cc0530a --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-8.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint64m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint64m1_t dest, vuint64m1_t op_1, vuint64m1_t op_2, size_t vl) +{ + return __riscv_vsha2ms_vv_u64m1 (dest, op_1, op_2, vl); /* { dg-error {built-in function '__riscv_vsha2ms_vv_u64m1\(dest, op_1, op_2, vl\)' requires the 'zvknhb' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-9.c new file mode 100644 index 000000000000..442d49170539 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/intrinsic_required_ext-9.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O3" } */ + +#include "riscv_vector.h" + +vuint32m1_t +__attribute__((target("arch=+v"))) +test_1 (vuint32m1_t op_1, size_t vl) +{ + return __riscv_vsm4k_vi_u32m1 (op_1, 0, vl); /* { dg-error {built-in function '__riscv_vsm4k_vi_u32m1\(op_1, 0, vl\)' requires the 'zvksed' ISA extension} } */ +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c index a4cd67f4f95c..d1dd811d14b1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c @@ -5,5 +5,5 @@ size_t test_1 (size_t vl) { - return __riscv_vsetvl_e8m4 (vl); /* { dg-error {built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ + return __riscv_vsetvl_e8m4 (vl); /* { dg-error {built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the 'v' ISA extension} } */ } diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c index 06ed9a9eddc9..9ff4c238124d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c @@ -19,5 +19,5 @@ test_2 () size_t test_3 (size_t vl) { - return __riscv_vsetvl_e8m4 (vl); /* { dg-error {built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the V ISA extension} } */ + return __riscv_vsetvl_e8m4 (vl); /* { dg-error {built-in function '__riscv_vsetvl_e8m4\(vl\)' requires the 'v' ISA extension} } */ } From 97d5cd8740384dbce5a83080916388f80d8976dd Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Mon, 8 Apr 2024 10:38:49 +0200 Subject: [PATCH 416/551] tree-optimization/114624 - fix use-after-free in SCCP We're inspecting the replaced PHI node after releasing it. PR tree-optimization/114624 * tree-scalar-evolution.cc (final_value_replacement_loop): Get at the PHI arg location before releasing the PHI node. * gcc.dg/torture/pr114624.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr114624.c | 20 ++++++++++++++++++++ gcc/tree-scalar-evolution.cc | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr114624.c diff --git a/gcc/testsuite/gcc.dg/torture/pr114624.c b/gcc/testsuite/gcc.dg/torture/pr114624.c new file mode 100644 index 000000000000..ae031356982d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr114624.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +int a, b; +int main() { + int c, d = 1; + while (a) { + while (b) + if (d) + while (a) + ; + for (; b < 2; b++) + if (b) + for (c = 0; c < 8; c++) + d = 0; + else + for (a = 0; a < 2; a++) + ; + } + return 0; +} diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc index 25e3130e2f12..b0a5e09a77c1 100644 --- a/gcc/tree-scalar-evolution.cc +++ b/gcc/tree-scalar-evolution.cc @@ -3877,6 +3877,7 @@ final_value_replacement_loop (class loop *loop) to a GIMPLE sequence or to a statement list (keeping this a GENERIC interface). */ def = unshare_expr (def); + auto loc = gimple_phi_arg_location (phi, exit->dest_idx); remove_phi_node (&psi, false); /* Propagate constants immediately, but leave an unused initialization @@ -3888,8 +3889,7 @@ final_value_replacement_loop (class loop *loop) gimple_seq stmts; def = force_gimple_operand (def, &stmts, false, NULL_TREE); gassign *ass = gimple_build_assign (rslt, def); - gimple_set_location (ass, - gimple_phi_arg_location (phi, exit->dest_idx)); + gimple_set_location (ass, loc); gimple_seq_add_stmt (&stmts, ass); /* If def's type has undefined overflow and there were folded From b93836d5ca3959f456df8bc47284741780475e03 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Mon, 8 Apr 2024 14:12:00 +0200 Subject: [PATCH 417/551] contrib: Add 8057f9aa1f7e70490064de796d7a8d42d446caf8 to ignored commits. This commit unfortunately added explanation to the git revert generated message, breaking ChangeLog generation. 2024-04-08 Jakub Jelinek <jakub@redhat.com> * gcc-changelog/git_update_version.py: Add 8057f9aa1f7e70490064de796d7a8d42d446caf8 to IGNORED_COMMITS. --- contrib/gcc-changelog/git_update_version.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/gcc-changelog/git_update_version.py b/contrib/gcc-changelog/git_update_version.py index 92639ba626fd..3e79dab00969 100755 --- a/contrib/gcc-changelog/git_update_version.py +++ b/contrib/gcc-changelog/git_update_version.py @@ -38,7 +38,8 @@ '86d8e0c0652ef5236a460b75c25e4f7093cc0651', 'e4cba49413ca429dc82f6aa2e88129ecb3fdd943', '1957bedf29a1b2cc231972aba680fe80199d5498', - '040e5b0edbca861196d9e2ea2af5e805769c8d5d') + '040e5b0edbca861196d9e2ea2af5e805769c8d5d', + '8057f9aa1f7e70490064de796d7a8d42d446caf8') FORMAT = '%(asctime)s:%(levelname)s:%(name)s:%(message)s' logging.basicConfig(level=logging.INFO, format=FORMAT, From 1a96eb0a43107b0fe8751f23333df63e90104f96 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Mon, 8 Apr 2024 12:15:19 +0000 Subject: [PATCH 418/551] Daily bump. --- contrib/ChangeLog | 5 ++ gcc/ChangeLog | 153 +++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 7 ++ gcc/c-family/ChangeLog | 4 ++ gcc/cp/ChangeLog | 14 ++++ gcc/d/ChangeLog | 5 ++ gcc/go/ChangeLog | 4 ++ gcc/m2/ChangeLog | 99 +++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 155 ++++++++++++++++++++++++++++++++++++++++ libatomic/ChangeLog | 4 ++ libgfortran/ChangeLog | 11 +++ libgomp/ChangeLog | 9 +++ libphobos/ChangeLog | 5 ++ 14 files changed, 476 insertions(+), 1 deletion(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 508e9da6179a..17a4afd5c18e 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,8 @@ +2024-04-08 Jakub Jelinek <jakub@redhat.com> + + * gcc-changelog/git_update_version.py: Add + 8057f9aa1f7e70490064de796d7a8d42d446caf8 to IGNORED_COMMITS. + 2024-03-19 Jonathan Wakely <jwakely@redhat.com> * unicode/gen_libstdcxx_unicode_data.py: Fix header of generated diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c2e8be979714..8eedf31c2f2f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,156 @@ +2024-04-08 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114624 + * tree-scalar-evolution.cc (final_value_replacement_loop): + Get at the PHI arg location before releasing the PHI node. + +2024-04-08 Pan Li <pan2.li@intel.com> + + * config/riscv/riscv-vector-builtins-shapes.cc (build_one): Pass + required_ext arg when invoke add function. + (build_th_loadstore): Ditto. + (struct vcreate_def): Ditto. + (struct read_vl_def): Ditto. + (struct vlenb_def): Ditto. + * config/riscv/riscv-vector-builtins.cc (function_builder::add_function): + Introduce new arg required_ext to fill in the register func. + (function_builder::add_unique_function): Ditto. + (function_builder::add_overloaded_function): Ditto. + (expand_builtin): Leverage required_extensions_specified to + check if the required extension is provided. + * config/riscv/riscv-vector-builtins.h (reqired_ext_to_isa_name): New + func impl to convert the required_ext enum to the extension name. + (required_extensions_specified): New func impl to predicate if + the required extension is well feeded. + +2024-04-08 Iain Sandoe <iain@sandoe.co.uk> + + * config/darwin.h (LINK_COMMAND_SPEC_A): Update coverage + specs. + +2024-04-08 demin.han <demin.han@starfivetech.com> + + * config/riscv/riscv-vector-costs.cc: Use length() + +2024-04-08 Pan Li <pan2.li@intel.com> + + * config/riscv/riscv-c.cc (struct pragma_intrinsic_flags): New + struct to hold all intrinisc related flags. + (riscv_pragma_intrinsic_flags_pollute): New func to pollute + the intrinsic flags and backup original flags. + (riscv_pragma_intrinsic_flags_restore): New func to restore + the flags from the backup intrinsic flags. + (riscv_pragma_intrinsic): Pollute the flags and register all + possible builtin types and functions, then restore and reinit. + * config/riscv/riscv-protos.h (reinit_builtins): New func + decl to reinit after flags pollution. + (riscv_option_override): New extern func decl. + * config/riscv/riscv-vector-builtins.cc (register_builtin_types_on_null): + New func to register builtin types if null. + (DEF_RVV_TYPE): Ditto. + (DEF_RVV_TUPLE_TYPE): Ditto. + (reinit_builtins): New func impl to reinit after flags pollution. + (expand_builtin): Return + target rtx after error_at. + * config/riscv/riscv.cc (riscv_vector_int_type_p): New predicate + func to tell one tree type is integer or not. + (riscv_vector_float_type_p): New predicate func to tell one tree + type is float or not. + (riscv_vector_element_bitsize): New func to get the element bitsize + of a vector tree type. + (riscv_vector_required_min_vlen): New func to get the required min vlen + of a vector tree type. + (riscv_validate_vector_type): New func to validate the tree type + is valid on flags. + (riscv_return_value_is_vector_type_p): Leverage the func + riscv_validate_vector_type to do the tree type validation. + (riscv_arguments_is_vector_type_p): Ditto. + (riscv_override_options_internal): Ditto. + +2024-04-08 Lulu Cheng <chenglulu@loongson.cn> + + PR target/112919 + * config/loongarch/loongarch-def.cc (la664_align): Newly defined + function that sets alignment rules under the LA664 microarchitecture. + * config/loongarch/loongarch-opts.cc + (loongarch_target_option_override): If not optimizing for size, set + the default alignment to what the target wants. + * config/loongarch/loongarch-tune.h (struct loongarch_align): Add + new member variables jump and loop. + +2024-04-06 H.J. Lu <hjl.tools@gmail.com> + + PR target/114590 + * config/i386/i386.md (x86_64_shld): Use explicit shift count in + AT&T syntax. + (x86_64_shld_ndd): Likewise. + (x86_shld): Likewise. + (x86_shld_ndd): Likewise. + (x86_64_shrd): Likewise. + (x86_64_shrd_ndd): Likewise. + (x86_shrd): Likewise. + (x86_shrd_ndd): Likewise. + +2024-04-06 Jørgen Kvalsvik <j@lambda.is> + + PR middle-end/114599 + * tree-inline.cc (add_local_variables): Copy cond_uids mappings. + +2024-04-05 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114588 + * diagnostic-color.cc (color_dict): Add "valid" and "invalid" as + color capability names. + * doc/invoke.texi: Document them in description of GCC_COLORS. + * text-art/style.cc: Include "diagnostic-color.h". + (text_art::get_style_from_color_cap_name): New. + * text-art/types.h (get_style_from_color_cap_name): New decl. + +2024-04-05 Alex Coplan <alex.coplan@arm.com> + + * config/aarch64/aarch64-ldp-fusion.cc (struct alias_walker): + Fix double space after const qualifier on valid (). + +2024-04-05 Martin Jambor <mjambor@suse.cz> + + PR ipa/113964 + * ipa-param-manipulation.cc (ipa_param_adjustments::modify_call): + Force values obtined through pass-through maps to the expected + split type. + +2024-04-05 Mark Wielaard <mark@klomp.org> + + * common.opt.urls: Regenerate. + +2024-04-05 Richard Sandiford <richard.sandiford@arm.com> + + PR target/114603 + * config/aarch64/aarch64-sve.md (@aarch64_pred_cnot<mode>): Replace + with... + (@aarch64_ptrue_cnot<mode>): ...this, requiring operand 1 to be + a ptrue. + (*cnot<mode>): Require operand 1 to be a ptrue. + * config/aarch64/aarch64-sve-builtins-base.cc (svcnot_impl::expand): + Use aarch64_ptrue_cnot<mode> for _x operations that are predicated + with a ptrue. Represent other _x operations as fully-defined _m + operations. + +2024-04-05 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114566 + * tree-vect-loop.cc (update_epilogue_loop_vinfo): Don't clear + base_misaligned. + +2024-04-05 Richard Biener <rguenther@suse.de> + + PR middle-end/114599 + PR gcov-profile/114115 + * symtab.cc (ifunc_ref_map): Do not use auto_bitmap. + (is_caller_ifunc_resolver): Optimize bitmap_bit_p/bitmap_set_bit + pair. + (symtab_node::check_ifunc_callee_symtab_nodes): Properly + allocate ifunc_ref_map here. + 2024-04-04 Martin Jambor <mjambor@suse.cz> PR ipa/111571 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index c21b6317f1e2..1c86cd975ee6 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240405 +20240408 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index d33733a91b4c..d0f8c2512d42 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,10 @@ +2024-04-05 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114588 + * access-diagram.cc (access_diagram_impl::access_diagram_impl): + Replace hardcoded colors for valid_style and invalid_style with + calls to text_art::get_style_from_color_cap_name. + 2024-04-02 David Malcolm <dmalcolm@redhat.com> * region-model-manager.cc (maybe_undo_optimize_bit_field_compare): diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 21698b519249..e2bf9e57728f 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2024-04-05 Marek Polacek <polacek@redhat.com> + + * c-warn.cc (warn_about_parentheses): Remove an #undef. + 2024-03-27 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/114469 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 79ad1ffcb548..55c0848f2552 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,17 @@ +2024-04-05 Marek Polacek <polacek@redhat.com> + + PR c++/111132 + * constexpr.cc (get_function_named_in_call): Use + cp_get_fndecl_from_callee. + * cvt.cc (cp_get_fndecl_from_callee): If there's a + DECL_LOCAL_DECL_ALIAS, use it. + +2024-04-05 Jakub Jelinek <jakub@redhat.com> + + PR c++/114572 + * cp-gimplify.cc (cxx_omp_clause_apply_fn): Call build_cplus_new + on build_call_a result if it has class type. + 2024-04-04 centurion <centurion009@proton.me> PR c++/114377 diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog index 81f053b57649..e096154f80f3 100644 --- a/gcc/d/ChangeLog +++ b/gcc/d/ChangeLog @@ -1,3 +1,8 @@ +2024-04-06 Iain Buclaw <ibuclaw@gdcproject.org> + + * dmd/MERGE: Merge upstream dmd b65767825f. + * dmd/VERSION: Bump version to v2.108.0. + 2024-03-17 Iain Buclaw <ibuclaw@gdcproject.org> * dmd/MERGE: Merge upstream dmd 855353a1d9. diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index 4ad6d4b7ba31..802f91f68f9a 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,3 +1,7 @@ +2024-04-05 Christophe Lyon <christophe.lyon@linaro.org> + + * Make-lang.in (go.install-dvi): New rule. + 2024-01-04 David Malcolm <dmalcolm@redhat.com> * lang.opt.urls: New file, autogenerated by diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index 68d75527acad..bf3963c83cfb 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,102 @@ +2024-04-06 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114617 + * gm2-compiler/M2GenGCC.mod (CodeStatememt): Add quad trace. + (ResolveConstantExpressions): Add parameter p to FoldIfLess, + FoldIfGre, FoldIfLessEqu, FoldIfGreEqu, FoldIfEqu, FoldIfNotEqu, + FoldIfIn and FoldIfNotIn. + (CodeInline): Add constExpr variable and pass it to GetQuadOtok. + (CodeReturnValue): Ditto. + (CodeParam): Ditto. + (FoldStringLength): Ditto. + (FoldStringConvertM2nul): Ditto. + (FoldStringConvertCnul): Ditto. + (DeclaredOperandsBecomes): Ditto. + (TypeCheckBecomes): Ditto. + (PerformFoldBecomes): Ditto. + (CodeBecomes): Ditto. + (CheckElementSetTypes): Ditto. + (CodeBinarySet): Ditto. + (PerformCodeIfLess): Ditto. + (PerformCodeIfGre): Ditto. + (PerformCodeIfLessEqu): Ditto. + (PerformCodeIfGreEqu): Ditto. + (PerformCodeIfEqu): Ditto. + (PerformCodeIfNotEqu): Ditto. + (IsValidExpressionRelOp): Ditto. + (PerformCodeIfIn): Ditto. + (PerformCodeIfNotIn): Ditto. + (CodeXIndr): Ditto. + (QuadCondition): New procedure function. + (IsBooleanRelOpPattern): Ditto. + (FoldBooleanRelopPattern): Ditto. + (FoldIfGre): Check for boolean relop constant expression and + add parameter p. + (FoldIfLessEqu): Ditto. + (FoldIfIn): Ditto. + (FoldIfEqu): Ditto. + (FoldIfNotIn): Ditto. + (FoldIfGreEqu): New procedure. + (FoldIfNotEqu): Ditto. + * gm2-compiler/M2Optimize.mod (ReduceBranch): Add constExpr + variable and pass it to GetQuadOtok. + * gm2-compiler/M2Quads.def (IsBecomes): New procedure function. + (IsDummy): Ditto. + (IsQuadConstExpr): Ditto. + (SetQuadConstExpr): Ditto. + (GetQuadDest): New procedure. + (GetQuadOp1): New procedure. + (GetQuadOp2): New procedure. + (GetQuadOp3): New procedure. + (GetQuadOtok): New procedure. + (GetQuadOTypetok): New procedure. + (PutQuadOtok): New procedure. + (IsInConstParameters): New procedure function. + * gm2-compiler/M2Quads.mod (IsBecomes): New procedure function. + (IsDummy): Ditto. + (IsQuadConstExpr): Ditto. + (SetQuadConstExpr): Ditto. + (GetQuadDest): New procedure. + (GetQuadOp1): New procedure. + (GetQuadOp2): New procedure. + (GetQuadOp3): New procedure. + (GetQuadOtok): New procedure. + (GetQuadOTypetok): New procedure. + (PutQuadOtok): New procedure. + (IsInConstParameters): New procedure function. + (ConstStack): Remove to ... + (ConstExprStack): ... this. + (ConstParamStack): New variable and initialize. + (QuadFrame): New field ConstExpr. + (GetQuadOtok): Add parameter constExpr and assign. + (PutQuadOtok): Add constExpr parameter and assign. + (PutQuadOType): Ditto. + (GetQuadOTypetok): Ditto. + (EraseQuad): Assign ConstExpr to FALSE. + (FoldSubrange): Set ConstExpr to FALSE in BecomesOp. + (PushInConstParameters): New procedure. + (PopInConstParameters): New procedure. + (IsInConstParameters): New procedure function. + * gm2-compiler/M2SymInit.mod (IssueConditional): Add + constExpr boolean variable. + (CheckReadBeforeInitQuad): Ditto. + (trashParam): Ditto. + * gm2-compiler/P3Build.bnf (ConstExpression): Call + PushInConstExpression and PopInConstExpression. + (ConstSetOrQualidentOrFunction): Call + PushInConstParameters and PopInConstParameters. + * gm2-compiler/PCBuild.bnf (ConstExpression): Call + PushInConstExpression and PopInConstExpression. + * gm2-compiler/PHBuild.bnf: Ditto + * gm2-gcc/m2expr.cc (m2expr_BuildCondIfExpression): New + function. + * gm2-gcc/m2expr.def (BuildCondIfExpression): New prototype. + * gm2-gcc/m2expr.h (m2expr_BuildCondIfExpression): New function. + +2024-04-05 Christophe Lyon <christophe.lyon@linaro.org> + + * Make-lang.in (m2.install-dvi): New rule. + 2024-04-02 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114565 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ce0ec65b5d05..9ae2f94d2e49 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,158 @@ +2024-04-08 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114624 + * gcc.dg/torture/pr114624.c: New testcase. + +2024-04-08 Pan Li <pan2.li@intel.com> + + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-7.c: Adjust + the error message for v extension. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-8.c: Ditto. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-1.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-10.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-2.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-3.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-4.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-5.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-6.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-7.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-8.c: New test. + * gcc.target/riscv/rvv/base/intrinsic_required_ext-9.c: New test. + +2024-04-08 Pan Li <pan2.li@intel.com> + + * gcc.target/riscv/rvv/base/pr109479-1.c: Adjust the existing test + scenarios and add new error check tests. + * gcc.target/riscv/rvv/base/pr109479-2.c: Ditto. + * gcc.target/riscv/rvv/base/pr109479-3.c: Ditto. + * gcc.target/riscv/rvv/base/pr109479-4.c: Diito. + * gcc.target/riscv/rvv/base/pr109479-5.c: Diito. + * gcc.target/riscv/rvv/base/pr109479-6.c: Diito. + * gcc.target/riscv/rvv/base/user-10.c: Ditto. + * gcc.target/riscv/rvv/base/user-12.c: Ditto. + * gcc.target/riscv/rvv/base/user-13.c: Ditto. + * gcc.target/riscv/rvv/base/user-14.c: Ditto. + * gcc.target/riscv/rvv/base/user-15.c: Ditto. + * gcc.target/riscv/rvv/base/user-2.c: Ditto. + * gcc.target/riscv/rvv/base/user-3.c: Ditto. + * gcc.target/riscv/rvv/base/user-5.c: Ditto. + * gcc.target/riscv/rvv/base/user-6.c: Ditto. + * gcc.target/riscv/rvv/base/user-9.c: Ditto. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-10.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-11.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-12.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-13.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-14.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-15.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-16.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-17.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-18.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-19.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-20.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-21.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-22.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-23.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-24.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-25.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-26.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-27.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-28.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-29.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-30.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-31.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-32.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-33.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-34.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-35.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-36.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-37.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-38.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-39.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-40.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-41.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-42.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-43.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-44.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-45.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-46.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-47.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-48.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-49.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-50.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-51.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-52.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-53.c: New test. + * gcc.target/riscv/rvv/base/target_attribute_v_with_intrinsic-9.c: New test. + +2024-04-06 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114617 + * gm2/iso/const/pass/iso-const-pass.exp: New test. + +2024-04-06 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/114304 + PR libfortran/105473 + * gfortran.dg/pr105473.f90: Modify to verify new error message. + * gfortran.dg/pr114304.f90: New test. + +2024-04-06 Jørgen Kvalsvik <j@lambda.is> + + PR middle-end/114599 + * gcc.misc-tests/gcov-pr114599.c: New test. + +2024-04-06 Jørgen Kvalsvik <j@lambda.is> + + * gcc.misc-tests/gcov-19.c: Remove test. + +2024-04-05 Iain Sandoe <iain@sandoe.co.uk> + + * lib/scanasm.exp: Add 'LB*' to the local labels that are + ignored for Darwin. + +2024-04-05 Marek Polacek <polacek@redhat.com> + + PR c++/91079 + DR 1881 + * g++.dg/ext/is_std_layout5.C: New test. + +2024-04-05 Patrick O'Neill <patrick@rivosinc.com> + Martin Jambor <mjambor@suse.cz> + + PR ipa/113964 + * gcc.dg/ipa/pr114247.c: New test. + +2024-04-05 Richard Sandiford <richard.sandiford@arm.com> + + PR target/114603 + * gcc.target/aarch64/sve/acle/general/cnot_1.c: New test. + +2024-04-05 Marek Polacek <polacek@redhat.com> + + PR c++/111132 + * g++.dg/cpp0x/constexpr-redeclaration3.C: New test. + * g++.dg/cpp0x/constexpr-redeclaration4.C: New test. + +2024-04-05 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/114566 + * gcc.target/i386/avx512f-pr114566.c: New test. + +2024-04-05 Jakub Jelinek <jakub@redhat.com> + + * gdc.dg/dg.exp: Prune gcov*.d from the list of tests to run. + * gdc.dg/gcov.exp: Update copyright years. + +2024-04-05 Hans-Peter Nilsson <hp@axis.com> + + * gcc.target/cris/pr93372-2.c: Tweak scan-assembler + checks to cover recent combine improvement. + +2024-04-05 Hans-Peter Nilsson <hp@axis.com> + + * gcc.dg/debug/btf/btf-datasec-1.c: Adjust pattern for targets with + symbols having a leading underscore. + 2024-04-04 centurion <centurion009@proton.me> PR c++/114377 diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index e09201fcaa8c..41fbe2a88d6a 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,7 @@ +2024-04-05 Jakub Jelinek <jakub@redhat.com> + + * configure: Regenerate. + 2024-04-04 Wilco Dijkstra <wilco.dijkstra@arm.com> PR target/113986 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 423346ccdc34..4e6c2406f48e 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,14 @@ +2024-04-06 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/114304 + PR libfortran/105473 + * io/list_read.c (eat_separator): Add logic to handle spaces + preceding a comma or semicolon such that that a 'null' read + occurs without error at the end of comma or semicolon + terminated input lines. Add check and error message for ';'. + (list_formatted_read_scalar): Treat comma as a decimal point + when specified by the decimal mode on the first item. + 2024-04-02 Jakub Jelinek <jakub@redhat.com> * configure.host: Fix duplicated words; the the -> the. diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 4dd455b1af50..c96847488d28 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,12 @@ +2024-04-05 Thomas Schwinge <tschwinge@baylibre.com> + + * testsuite/libgomp.c/reverse-offload-sm30.c: Set 'GCC_COLORS' to the empty string. + +2024-04-05 Jakub Jelinek <jakub@redhat.com> + + PR c++/114572 + * testsuite/libgomp.c++/pr114572.C: New test. + 2024-04-04 Tobias Burnus <tburnus@baylibre.com> * libgomp.texi (TR12): Honor post-TR12 directive name change; add diff --git a/libphobos/ChangeLog b/libphobos/ChangeLog index e3fe44f26215..f425dfb944a6 100644 --- a/libphobos/ChangeLog +++ b/libphobos/ChangeLog @@ -1,3 +1,8 @@ +2024-04-06 Iain Buclaw <ibuclaw@gdcproject.org> + + * libdruntime/MERGE: Merge upstream druntime b65767825f. + * src/MERGE: Merge upstream phobos 92dc5a4e9. + 2024-04-03 Iain Sandoe <iain@sandoe.co.uk> * configure.tgt: Enable libphobos for Darwin >= 12. From 080cac15ce0c3e6b396b9161055cb76974882c07 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Mon, 8 Apr 2024 14:46:30 +0200 Subject: [PATCH 419/551] ChangeLog: Add by hand ChangeLog entry for PR114361 revert. This commit has been added to IGNORED_COMMITS, because it contained bogus explanation of the standardized git revert message. --- gcc/c/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 3d731f148b27..7d3f23625624 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,12 @@ +2024-04-05 Martin Uecker <uecker@tugraz.at> + + Revert: + 2024-04-02 Martin Uecker <uecker@tugraz.at> + + PR c/114361 + * c-decl.cc (finish_struct): Set TYPE_CANONICAL when completing + strucute types. + 2024-04-02 Martin Uecker <uecker@tugraz.at> PR c/114361 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9ae2f94d2e49..07d9248c842f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -138,6 +138,16 @@ PR tree-optimization/114566 * gcc.target/i386/avx512f-pr114566.c: New test. +2024-04-05 Martin Uecker <uecker@tugraz.at> + + Revert: + 2024-04-02 Martin Uecker <uecker@tugraz.at> + + PR c/114361 + * gcc.dg/pr114361.c: New test. + * gcc.dg/c23-tag-incomplete-1.c: New test. + * gcc.dg/c23-tag-incomplete-2.c: New test. + 2024-04-05 Jakub Jelinek <jakub@redhat.com> * gdc.dg/dg.exp: Prune gcov*.d from the list of tests to run. From 278cad85077509b73b1faf32d36f3889c2a5524b Mon Sep 17 00:00:00 2001 From: "Swinney, Jonathan" <jswinney@amazon.com> Date: Mon, 8 Apr 2024 14:02:33 +0100 Subject: [PATCH 420/551] aarch64: Fix vld1/st1_x4 intrinsic test The test for this intrinsic was failing silently and so it failed to report the bug reported in 114521. This patch modifes the test to report the result. Bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114521 Signed-off-by: Jonathan Swinney <jswinney@amazon.com> gcc/testsuite/ * gcc.target/aarch64/advsimd-intrinsics/vld1x4.c: Exit with a nonzero code if the test fails. --- .../gcc.target/aarch64/advsimd-intrinsics/vld1x4.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c index 89b289bb21dc..17db262a31ae 100644 --- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/vld1x4.c @@ -3,6 +3,7 @@ /* { dg-skip-if "unimplemented" { arm*-*-* } } */ /* { dg-options "-O3" } */ +#include <stdbool.h> #include <arm_neon.h> #include "arm-neon-ref.h" @@ -71,13 +72,16 @@ VARIANT (float64, 2, q_f64) VARIANTS (TESTMETH) #define CHECKS(BASE, ELTS, SUFFIX) \ - if (test_vld1##SUFFIX##_x4 () != 0) \ - fprintf (stderr, "test_vld1##SUFFIX##_x4"); + if (test_vld1##SUFFIX##_x4 () != 0) { \ + fprintf (stderr, "test_vld1" #SUFFIX "_x4 failed\n"); \ + failed = true; \ + } int main (int argc, char **argv) { + bool failed = false; VARIANTS (CHECKS) - return 0; + return (failed) ? 1 : 0; } From d5d84487dec06186fd9246b505f44ef68a66d6a2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Mon, 8 Apr 2024 16:22:13 +0200 Subject: [PATCH 421/551] s390: Fix s390_const_int_pool_entry_p and movdi peephole2 [PR114605] The following testcase is miscompiled, because we have initially a movti which loads the 0x3f8000003f800000ULL TImode constant from constant pool. Later on we split it into a pair of DImode loads. Now, for the first load (why just that?, though not stage4 material) we trigger the peephole2 which uses s390_const_int_pool_entry_p. That function doesn't check at all the constant pool mode though, sees the constant pool at that address has a CONST_INT value and just assumes that is the value to return, which is especially wrong for big-endian, if it is a DImode load from offset 0, it should be loading 0 rather than 0x3f8000003f800000ULL. The following patch adds checks if we are extracing a MODE_INT mode, if the constant pool has MODE_INT mode as well, punts if constant pool has smaller mode size than the extraction one (then it would be UB), if it has the same mode as before keeps using what it did before, if constant pool has a larger mode than the one being extracted, uses simplify_subreg. I'd have used avoid_constant_pool_reference instead which can handle also offsets into the constant pool constants, but it can't handle UNSPEC_LTREF. Another thing is that once that is fixed, we ICE when we extract constant like 0, ior insn predicate require non-0 constant. So, the patch also fixes the peephole2 so that if either 32-bit half is zero, it uses a mere load of the constant into register rather than a pair of such load and ior. 2024-04-08 Jakub Jelinek <jakub@redhat.com> PR target/114605 * config/s390/s390.cc (s390_const_int_pool_entry_p): Punt if mem doesn't have MODE_INT mode, or pool constant doesn't have MODE_INT mode, or if pool constant mode is smaller than mem mode. If mem mode is different from pool constant mode, try to simplify subreg. If that doesn't work, punt, if it does, use the simplified constant instead of the constant pool constant. * config/s390/s390.md (movdi from const pool peephole): If either low or high 32-bit part is zero, just emit move insn instead of move + ior. * gcc.dg/pr114605.c: New test. --- gcc/config/s390/s390.cc | 14 +++++++++++-- gcc/config/s390/s390.md | 10 +++++++++ gcc/testsuite/gcc.dg/pr114605.c | 37 +++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr114605.c diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 372a23244032..3ee7ae7b8d47 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -9984,7 +9984,7 @@ s390_const_int_pool_entry_p (rtx mem, HOST_WIDE_INT *val) - (mem (unspec [(symbol_ref) (reg)] UNSPEC_LTREF)). - (mem (symbol_ref)). */ - if (!MEM_P (mem)) + if (!MEM_P (mem) || GET_MODE_CLASS (GET_MODE (mem)) != MODE_INT) return false; rtx addr = XEXP (mem, 0); @@ -9998,9 +9998,19 @@ s390_const_int_pool_entry_p (rtx mem, HOST_WIDE_INT *val) return false; rtx val_rtx = get_pool_constant (sym); - if (!CONST_INT_P (val_rtx)) + machine_mode mode = get_pool_mode (sym); + if (!CONST_INT_P (val_rtx) + || GET_MODE_CLASS (mode) != MODE_INT + || GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (mem))) return false; + if (mode != GET_MODE (mem)) + { + val_rtx = simplify_subreg (GET_MODE (mem), val_rtx, mode, 0); + if (val_rtx == NULL_RTX || !CONST_INT_P (val_rtx)) + return false; + } + if (val != nullptr) *val = INTVAL (val_rtx); return true; diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 8aa40ba5b7f7..c607dce3cf0f 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -2152,6 +2152,16 @@ gcc_assert (ok); operands[2] = GEN_INT (val & 0xFFFFFFFF00000000ULL); operands[3] = GEN_INT (val & 0x00000000FFFFFFFFULL); + if (operands[2] == const0_rtx) + { + emit_move_insn (operands[0], operands[3]); + DONE; + } + else if (operands[3] == const0_rtx) + { + emit_move_insn (operands[0], operands[2]); + DONE; + } }) ; diff --git a/gcc/testsuite/gcc.dg/pr114605.c b/gcc/testsuite/gcc.dg/pr114605.c new file mode 100644 index 000000000000..4b5c9c1c0a09 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr114605.c @@ -0,0 +1,37 @@ +/* PR target/114605 */ +/* { dg-do run } */ +/* { dg-options "-O0" } */ + +typedef struct { const float *a; int b, c; float *d; } S; + +__attribute__((noipa)) void +bar (void) +{ +} + +__attribute__((noinline, optimize (2))) static void +foo (S *e) +{ + const float *f; + float *g; + float h[4] = { 0.0, 0.0, 1.0, 1.0 }; + if (!e->b) + f = h; + else + f = e->a; + g = &e->d[0]; + __builtin_memcpy (g, f, sizeof (float) * 4); + bar (); + if (!e->b) + if (g[0] != 0.0 || g[1] != 0.0 || g[2] != 1.0 || g[3] != 1.0) + __builtin_abort (); +} + +int +main () +{ + float d[4]; + S e = { .d = d }; + foo (&e); + return 0; +} From 97069657c4e40b209c7b774e12faaca13812a86c Mon Sep 17 00:00:00 2001 From: Tatsuyuki Ishi <ishitatsuyuki@gmail.com> Date: Fri, 29 Mar 2024 14:52:39 +0900 Subject: [PATCH 422/551] RISC-V: Implement TLS Descriptors. This implements TLS Descriptors (TLSDESC) as specified in [1]. The 4-instruction sequence is implemented as a single RTX insn for simplicity, but this can be revisited later if instruction scheduling or more flexible RA is desired. The default remains to be the traditional TLS model, but can be configured with --with-tls={trad,desc}. The choice can be revisited once toolchain and libc support ships. [1]: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/373. gcc/ChangeLog: * config/riscv/riscv.opt: Add -mtls-dialect to configure TLS flavor. * config.gcc: Add --with-tls configuration option to change the default TLS flavor. * config/riscv/riscv.h: Add TARGET_TLSDESC determined from -mtls-dialect and with_tls defaults. * config/riscv/riscv-opts.h: Define enum riscv_tls_type for the two TLS flavors. * config/riscv/riscv-protos.h: Define SYMBOL_TLSDESC symbol type. * config/riscv/riscv.md: Add instruction sequence for TLSDESC. * config/riscv/riscv.cc (riscv_symbol_insns): Add instruction sequence length data for TLSDESC. (riscv_legitimize_tls_address): Add lowering of TLSDESC. * doc/install.texi: Document --with-tls for RISC-V. * doc/invoke.texi: Document -mtls-dialect for RISC-V. gcc/testsuite/ChangeLog: * gcc.target/riscv/tls_1.x: Add TLSDESC GD test case. * gcc.target/riscv/tlsdesc.c: Same as above. --- gcc/config.gcc | 15 ++++++++++++++- gcc/config/riscv/riscv-opts.h | 6 ++++++ gcc/config/riscv/riscv-protos.h | 5 +++-- gcc/config/riscv/riscv.cc | 24 ++++++++++++++++++++---- gcc/config/riscv/riscv.h | 9 +++++++-- gcc/config/riscv/riscv.md | 20 +++++++++++++++++++- gcc/config/riscv/riscv.opt | 14 ++++++++++++++ gcc/doc/install.texi | 3 +++ gcc/doc/invoke.texi | 13 ++++++++++++- gcc/testsuite/gcc.target/riscv/tls_1.x | 5 +++++ gcc/testsuite/gcc.target/riscv/tlsdesc.c | 12 ++++++++++++ 11 files changed, 115 insertions(+), 11 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/tls_1.x create mode 100644 gcc/testsuite/gcc.target/riscv/tlsdesc.c diff --git a/gcc/config.gcc b/gcc/config.gcc index e62f98e93f47..2e320dd26c5e 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -2492,6 +2492,7 @@ riscv*-*-linux*) # Force .init_array support. The configure script cannot always # automatically detect that GAS supports it, yet we require it. gcc_cv_initfini_array=yes + with_tls=${with_tls:-trad} ;; riscv*-*-elf* | riscv*-*-rtems*) tm_file="elfos.h newlib-stdint.h ${tm_file} riscv/elf.h" @@ -2534,6 +2535,7 @@ riscv*-*-freebsd*) # Force .init_array support. The configure script cannot always # automatically detect that GAS supports it, yet we require it. gcc_cv_initfini_array=yes + with_tls=${with_tls:-trad} ;; loongarch*-*-linux*) @@ -4671,7 +4673,7 @@ case "${target}" in ;; riscv*-*-*) - supported_defaults="abi arch tune riscv_attribute isa_spec" + supported_defaults="abi arch tune riscv_attribute isa_spec tls" case "${target}" in riscv-* | riscv32*) xlen=32 ;; @@ -4801,6 +4803,17 @@ case "${target}" in ;; esac fi + # Handle --with-tls. + case "$with_tls" in + "" \ + | trad | desc) + # OK + ;; + *) + echo "Unknown TLS method used in --with-tls=$with_tls" 1>&2 + exit 1 + ;; + esac # Handle --with-multilib-list. if test "x${with_multilib_list}" != xdefault; then diff --git a/gcc/config/riscv/riscv-opts.h b/gcc/config/riscv/riscv-opts.h index 392b9169240d..1b2dd5757a8e 100644 --- a/gcc/config/riscv/riscv-opts.h +++ b/gcc/config/riscv/riscv-opts.h @@ -154,4 +154,10 @@ enum rvv_vector_bits_enum { #define TARGET_MAX_LMUL \ (int) (rvv_max_lmul == RVV_DYNAMIC ? RVV_M8 : rvv_max_lmul) +/* TLS types. */ +enum riscv_tls_type { + TLS_TRADITIONAL, + TLS_DESCRIPTORS +}; + #endif /* ! GCC_RISCV_OPTS_H */ diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index 4677d9c46cd2..5d46a29d8b70 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -34,9 +34,10 @@ enum riscv_symbol_type { SYMBOL_TLS, SYMBOL_TLS_LE, SYMBOL_TLS_IE, - SYMBOL_TLS_GD + SYMBOL_TLS_GD, + SYMBOL_TLSDESC, }; -#define NUM_SYMBOL_TYPES (SYMBOL_TLS_GD + 1) +#define NUM_SYMBOL_TYPES (SYMBOL_TLSDESC + 1) /* Classifies an address. diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 2a71badfdc9f..00defa69fd8e 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -1072,6 +1072,7 @@ static int riscv_symbol_insns (enum riscv_symbol_type type) case SYMBOL_ABSOLUTE: return 2; /* LUI + the reference. */ case SYMBOL_PCREL: return 2; /* AUIPC + the reference. */ case SYMBOL_TLS_LE: return 3; /* LUI + ADD TP + the reference. */ + case SYMBOL_TLSDESC: return 6; /* 4-instruction call + ADD TP + the reference. */ case SYMBOL_GOT_DISP: return 3; /* AUIPC + LD GOT + the reference. */ case SYMBOL_FORCE_TO_MEM: return 3; /* AUIPC + LD + the reference. */ default: gcc_unreachable (); @@ -2220,7 +2221,7 @@ riscv_call_tls_get_addr (rtx sym, rtx result) static rtx riscv_legitimize_tls_address (rtx loc) { - rtx dest, tp, tmp; + rtx dest, tp, tmp, a0; enum tls_model model = SYMBOL_REF_TLS_MODEL (loc); #if 0 @@ -2236,9 +2237,24 @@ riscv_legitimize_tls_address (rtx loc) /* Rely on section anchors for the optimization that LDM TLS provides. The anchor's address is loaded with GD TLS. */ case TLS_MODEL_GLOBAL_DYNAMIC: - tmp = gen_rtx_REG (Pmode, GP_RETURN); - dest = gen_reg_rtx (Pmode); - emit_libcall_block (riscv_call_tls_get_addr (loc, tmp), dest, tmp, loc); + if (TARGET_TLSDESC) + { + static unsigned seqno; + tp = gen_rtx_REG (Pmode, THREAD_POINTER_REGNUM); + a0 = gen_rtx_REG (Pmode, GP_ARG_FIRST); + dest = gen_reg_rtx (Pmode); + + emit_insn (gen_tlsdesc (Pmode, loc, GEN_INT (seqno))); + emit_insn (gen_add3_insn (dest, a0, tp)); + seqno++; + } + else + { + tmp = gen_rtx_REG (Pmode, GP_RETURN); + dest = gen_reg_rtx (Pmode); + emit_libcall_block (riscv_call_tls_get_addr (loc, tmp), dest, tmp, + loc); + } break; case TLS_MODEL_INITIAL_EXEC: diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index d5779512994d..269b8c1f0763 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -64,6 +64,7 @@ extern const char *riscv_arch_help (int argc, const char **argv); --with-abi is ignored if -mabi is specified. --with-tune is ignored if -mtune or -mcpu is specified. --with-isa-spec is ignored if -misa-spec is specified. + --with-tls is ignored if -mtls-dialect is specified. But using default -march/-mtune value if -mcpu don't have valid option. */ #define OPTION_DEFAULT_SPECS \ @@ -73,8 +74,9 @@ extern const char *riscv_arch_help (int argc, const char **argv); {"arch", "%{!march=*:" \ " %{!mcpu=*:-march=%(VALUE)}" \ " %{mcpu=*:%:riscv_expand_arch_from_cpu(%* %(VALUE))}}" }, \ - {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \ - {"isa_spec", "%{!misa-spec=*:-misa-spec=%(VALUE)}" }, \ + {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \ + {"isa_spec", "%{!misa-spec=*:-misa-spec=%(VALUE)}" }, \ + {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"}, \ #ifdef IN_LIBGCC2 #undef TARGET_64BIT @@ -1228,4 +1230,7 @@ extern void riscv_remove_unneeded_save_restore_calls (void); #define HAVE_POST_MODIFY_DISP TARGET_XTHEADMEMIDX #define HAVE_PRE_MODIFY_DISP TARGET_XTHEADMEMIDX +/* Check TLS Descriptors mechanism is selected. */ +#define TARGET_TLSDESC (riscv_tls_dialect == TLS_DESCRIPTORS) + #endif /* ! GCC_RISCV_H */ diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 0346cc3859d8..c2b4323c53a7 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -48,7 +48,7 @@ UNSPEC_TLS_LE UNSPEC_TLS_IE UNSPEC_TLS_GD - + UNSPEC_TLSDESC ;; High part of PC-relative address. UNSPEC_AUIPC @@ -2089,6 +2089,24 @@ (set_attr "type" "load") (set_attr "mode" "<MODE>")]) +(define_insn "@tlsdesc<mode>" + [(set (reg:P A0_REGNUM) + (unspec:P + [(match_operand:P 0 "symbolic_operand" "") + (match_operand:P 1 "const_int_operand")] + UNSPEC_TLSDESC)) + (clobber (reg:P T0_REGNUM))] + "TARGET_TLSDESC" + { + return ".LT%1: auipc\ta0,%%tlsdesc_hi(%0)\;" + "<load>\tt0,%%tlsdesc_load_lo(.LT%1)(a0)\;" + "addi\ta0,a0,%%tlsdesc_add_lo(.LT%1)\;" + "jalr\tt0,t0,%%tlsdesc_call(.LT%1)"; + } + [(set_attr "type" "multi") + (set_attr "length" "16") + (set_attr "mode" "<MODE>")]) + (define_insn "auipc<mode>" [(set (match_operand:P 0 "register_operand" "=r") (unspec:P diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt index 7d625af02d52..8da0764eb4be 100644 --- a/gcc/config/riscv/riscv.opt +++ b/gcc/config/riscv/riscv.opt @@ -606,3 +606,17 @@ Enum(rvv_vector_bits) String(zvl) Value(RVV_VECTOR_BITS_ZVL) mrvv-vector-bits= Target RejectNegative Joined Enum(rvv_vector_bits) Var(rvv_vector_bits) Init(RVV_VECTOR_BITS_SCALABLE) -mrvv-vector-bits=<string> Set the kind of bits for an RVV vector register. + +Enum +Name(tls_type) Type(enum riscv_tls_type) +The possible TLS dialects: + +EnumValue +Enum(tls_type) String(trad) Value(TLS_TRADITIONAL) + +EnumValue +Enum(tls_type) String(desc) Value(TLS_DESCRIPTORS) + +mtls-dialect= +Target RejectNegative Joined Enum(tls_type) Var(riscv_tls_dialect) Init(TLS_TRADITIONAL) Save +Specify TLS dialect. diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 970b1a67e742..1c58dc334ab2 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1187,6 +1187,9 @@ Specify the default TLS dialect, for systems were there is a choice. For ARM targets, possible values for @var{dialect} are @code{gnu} or @code{gnu2}, which select between the original GNU dialect and the GNU TLS descriptor-based dialect. +For RISC-V targets, possible values for @var{dialect} are @code{trad} or +@code{desc}, which select between the traditional GNU dialect and the GNU TLS +descriptor-based dialect. @item --enable-multiarch Specify whether to enable or disable multiarch support. The default is diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 1006510fc6aa..f5f5d83f8179 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1265,7 +1265,8 @@ See RS/6000 and PowerPC Options. -minline-atomics -mno-inline-atomics -minline-strlen -mno-inline-strlen -minline-strcmp -mno-inline-strcmp --minline-strncmp -mno-inline-strncmp} +-minline-strncmp -mno-inline-strncmp +-mtls-dialect=desc -mtls-dialect=trad} @emph{RL78 Options} @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs @@ -31063,6 +31064,16 @@ which register to use as base register for reading the canary, and from what offset from that base register. There is no default register or offset as this is entirely for use within the Linux kernel. + +@opindex mtls-dialect=desc +@item -mtls-dialect=desc +Use TLS descriptors as the thread-local storage mechanism for dynamic accesses +of TLS variables. + +@opindex mtls-dialect=trad +@item -mtls-dialect=trad +Use traditional TLS as the thread-local storage mechanism for dynamic accesses +of TLS variables. This is the default. @end table @node RL78 Options diff --git a/gcc/testsuite/gcc.target/riscv/tls_1.x b/gcc/testsuite/gcc.target/riscv/tls_1.x new file mode 100644 index 000000000000..cf334ef55ed0 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/tls_1.x @@ -0,0 +1,5 @@ +extern __thread unsigned gd; + +unsigned get() { + return gd; +} diff --git a/gcc/testsuite/gcc.target/riscv/tlsdesc.c b/gcc/testsuite/gcc.target/riscv/tlsdesc.c new file mode 100644 index 000000000000..f9ac9fe0d6dc --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/tlsdesc.c @@ -0,0 +1,12 @@ +/* { dg-require-effective-target tls_native } */ +/* { dg-options "-O2 -fpic -mtls-dialect=desc --save-temps" } */ +/* { dg-require-effective-target fpic } */ + +#include "tls_1.x" + +/* { dg-final { scan-assembler-times "auipc\t\[a-x0-9\]+,%tlsdesc_hi" 1 } } */ +/* { dg-final { scan-assembler-times "lw\t\[a-x0-9\]+,%tlsdesc_load_lo" 1 { target { rv32 } } } } */ +/* { dg-final { scan-assembler-times "ld\t\[a-x0-9\]+,%tlsdesc_load_lo" 1 { target { rv64 } } } }*/ +/* { dg-final { scan-assembler-times "addi\ta0,\[a-x0-9\]+,%tlsdesc_add_lo" 1 } } */ +/* { dg-final { scan-assembler-times "jalr\tt0,\[a-x0-9\]+,%tlsdesc_call" 1 } } */ +/* { dg-final { cleanup-saved-temps } } */ From 2c1c2485a4b1aca746ac693041e51ea6da5c64ca Mon Sep 17 00:00:00 2001 From: Richard Sandiford <richard.sandiford@arm.com> Date: Mon, 8 Apr 2024 16:53:32 +0100 Subject: [PATCH 423/551] aarch64: Fix expansion of svsudot [PR114607] Not sure how this happend, but: svsudot is supposed to be expanded as USDOT with the operands swapped. However, a thinko in the expansion of svsudot meant that the arguments weren't in fact swapped; the attempted swap was just a no-op. And the testcases blithely accepted that. gcc/ PR target/114607 * config/aarch64/aarch64-sve-builtins-base.cc (svusdot_impl::expand): Fix botched attempt to swap the operands for svsudot. gcc/testsuite/ PR target/114607 * gcc.target/aarch64/sve/acle/asm/sudot_s32.c: New test. --- gcc/config/aarch64/aarch64-sve-builtins-base.cc | 2 +- gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc index 5be2315a3c6c..0d2edf3f19e1 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc @@ -2809,7 +2809,7 @@ class svusdot_impl : public function_base version) is through the USDOT instruction but with the second and third inputs swapped. */ if (m_su) - e.rotate_inputs_left (1, 2); + e.rotate_inputs_left (1, 3); /* The ACLE function has the same order requirements as for svdot. While there's no requirement for the RTL pattern to have the same sort of order as that for <sur>dot_prod, it's easier to read. diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c index 4b452619eee4..e06b69affab5 100644 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/asm/sudot_s32.c @@ -6,7 +6,7 @@ /* ** sudot_s32_tied1: -** usdot z0\.s, z2\.b, z4\.b +** usdot z0\.s, z4\.b, z2\.b ** ret */ TEST_TRIPLE_Z (sudot_s32_tied1, svint32_t, svint8_t, svuint8_t, @@ -17,7 +17,7 @@ TEST_TRIPLE_Z (sudot_s32_tied1, svint32_t, svint8_t, svuint8_t, ** sudot_s32_tied2: ** mov (z[0-9]+)\.d, z0\.d ** movprfx z0, z4 -** usdot z0\.s, z2\.b, \1\.b +** usdot z0\.s, \1\.b, z2\.b ** ret */ TEST_TRIPLE_Z_REV (sudot_s32_tied2, svint32_t, svint8_t, svuint8_t, @@ -27,7 +27,7 @@ TEST_TRIPLE_Z_REV (sudot_s32_tied2, svint32_t, svint8_t, svuint8_t, /* ** sudot_w0_s32_tied: ** mov (z[0-9]+\.b), w0 -** usdot z0\.s, z2\.b, \1 +** usdot z0\.s, \1, z2\.b ** ret */ TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint32_t, svint8_t, uint8_t, @@ -37,7 +37,7 @@ TEST_TRIPLE_ZX (sudot_w0_s32_tied, svint32_t, svint8_t, uint8_t, /* ** sudot_9_s32_tied: ** mov (z[0-9]+\.b), #9 -** usdot z0\.s, z2\.b, \1 +** usdot z0\.s, \1, z2\.b ** ret */ TEST_TRIPLE_Z (sudot_9_s32_tied, svint32_t, svint8_t, uint8_t, From 87bc20676ce606b0f75f12a35b24206df05a9f0a Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Tue, 2 Apr 2024 21:22:01 +0100 Subject: [PATCH 424/551] libstdc++: Combine two std::from_chars tests into one We don't need separate tests for the C++17 and C++20 cases, we can just have one test that uses __cpp_char8_t to adjust whether it tests char8_t or not. This means the C++20 one doesn't fail if -fno-char8_t is used. libstdc++-v3/ChangeLog: * testsuite/20_util/from_chars/1_neg.cc: Add char8_t cases, using a struct of that name if -fno-char8_t is active. * testsuite/20_util/from_chars/1_c++20_neg.cc: Removed. --- .../20_util/from_chars/1_c++20_neg.cc | 43 ------------------- .../testsuite/20_util/from_chars/1_neg.cc | 7 +++ 2 files changed, 7 insertions(+), 43 deletions(-) delete mode 100644 libstdc++-v3/testsuite/20_util/from_chars/1_c++20_neg.cc diff --git a/libstdc++-v3/testsuite/20_util/from_chars/1_c++20_neg.cc b/libstdc++-v3/testsuite/20_util/from_chars/1_c++20_neg.cc deleted file mode 100644 index d246eefb4693..000000000000 --- a/libstdc++-v3/testsuite/20_util/from_chars/1_c++20_neg.cc +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2017-2024 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING3. If not see -// <http://www.gnu.org/licenses/>. - -// { dg-do compile { target c++20 } } - -#include <charconv> - -void -test01(const char* first, const char* last) -{ - wchar_t wc; - std::from_chars(first, last, wc); // { dg-error "no matching" } - std::from_chars(first, last, wc, 10); // { dg-error "no matching" } - char8_t c8; - std::from_chars(first, last, c8); // { dg-error "no matching" } - std::from_chars(first, last, c8, 10); // { dg-error "no matching" } - char16_t c16; - std::from_chars(first, last, c16); // { dg-error "no matching" } - std::from_chars(first, last, c16, 10); // { dg-error "no matching" } - char32_t c32; - std::from_chars(first, last, c32); // { dg-error "no matching" } - std::from_chars(first, last, c32, 10); // { dg-error "no matching" } - enum E { } e; - std::from_chars(first, last, e); // { dg-error "no matching" } - std::from_chars(first, last, e, 10); // { dg-error "no matching" } -} - -// { dg-prune-output "enable_if" } -// { dg-prune-output "cannot bind non-const lvalue reference" } diff --git a/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc b/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc index 7538d9448acf..3f4cd59f6fc3 100644 --- a/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc +++ b/libstdc++-v3/testsuite/20_util/from_chars/1_neg.cc @@ -36,6 +36,13 @@ test01(const char* first, const char* last) enum E { } e; std::from_chars(first, last, e); // { dg-error "no matching" } std::from_chars(first, last, e, 10); // { dg-error "no matching" } + +#ifndef __cpp_char8_t + struct char8_t { }; +#endif + char8_t c8; + std::from_chars(first, last, c8); // { dg-error "no matching" } + std::from_chars(first, last, c8, 10); // { dg-error "no matching" } } // { dg-prune-output "enable_if" } From cd77e152875d3bc9c8966fc20241d73aa47532b3 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Tue, 2 Apr 2024 20:53:11 +0100 Subject: [PATCH 425/551] libstdc++: Fix tests that fail with -fno-char8_t Adjust expected errors or skip tests as UNSUPPORTED if -fno-char8_t is used in the test flags. libstdc++-v3/ChangeLog: * testsuite/20_util/integer_comparisons/equal_neg.cc: Use no-opts selector for errors that depend on -fchar8_t. * testsuite/20_util/integer_comparisons/greater_equal_neg.cc: Likewise. * testsuite/20_util/integer_comparisons/greater_neg.cc: Likewise. * testsuite/20_util/integer_comparisons/in_range_neg.cc: Likewise. * testsuite/20_util/integer_comparisons/less_equal_neg.cc: Likewise. * testsuite/20_util/integer_comparisons/less_neg.cc: Likewise. * testsuite/20_util/integer_comparisons/not_equal_neg.cc: Likewise. * testsuite/21_strings/basic_string/hash/hash_char8_t.cc: Skip if -fno-char8_t is used. * testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc: Likewise. * testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc: Likewise. * testsuite/27_io/filesystem/path/factory/u8path-depr.cc: Use char for u8 literal if char8_t is not available. * testsuite/27_io/headers/iosfwd/synopsis.cc: Check __cpp_char8_t. * testsuite/29_atomics/atomic_integral/wait_notify.cc: Likewise. * testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc: Remove check for _GLIBCXX_USE_CHAR8_T. --- .../testsuite/20_util/integer_comparisons/equal_neg.cc | 4 ++-- .../20_util/integer_comparisons/greater_equal_neg.cc | 4 ++-- .../testsuite/20_util/integer_comparisons/greater_neg.cc | 4 ++-- .../testsuite/20_util/integer_comparisons/in_range_neg.cc | 6 ++++-- .../testsuite/20_util/integer_comparisons/less_equal_neg.cc | 4 ++-- .../testsuite/20_util/integer_comparisons/less_neg.cc | 4 ++-- .../testsuite/20_util/integer_comparisons/not_equal_neg.cc | 4 ++-- .../testsuite/21_strings/basic_string/hash/hash_char8_t.cc | 1 + .../21_strings/headers/cuchar/functions_std_cxx20.cc | 1 + .../27_io/basic_ostream/inserters_character/char/deleted.cc | 1 + .../basic_ostream/inserters_character/wchar_t/deleted.cc | 1 + .../testsuite/27_io/filesystem/path/factory/u8path-depr.cc | 4 +++- libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc | 2 +- .../testsuite/29_atomics/atomic_integral/wait_notify.cc | 2 ++ .../29_atomics/headers/atomic/types_std_c++20_neg.cc | 2 -- 15 files changed, 26 insertions(+), 18 deletions(-) diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/equal_neg.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/equal_neg.cc index 06cfd6ee8f4f..7290e9e24176 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/equal_neg.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/equal_neg.cc @@ -25,8 +25,8 @@ bool c = std::cmp_equal(2, L'2'); // { dg-error "here" } bool d = std::cmp_equal(L'2', 2); // { dg-error "here" } bool e = std::cmp_equal(true, 1); // { dg-error "here" } bool f = std::cmp_equal(0, false); // { dg-error "here" } -bool g = std::cmp_equal(97, u8'a'); // { dg-error "here" } -bool h = std::cmp_equal(u8'a', 97); // { dg-error "here" } +bool g = std::cmp_equal(97, u8'a'); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } +bool h = std::cmp_equal(u8'a', 97); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } bool i = std::cmp_equal(97, u'a'); // { dg-error "here" } bool j = std::cmp_equal(u'a', 97); // { dg-error "here" } bool k = std::cmp_equal(97, U'a'); // { dg-error "here" } diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal_neg.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal_neg.cc index b5f03b70733f..cb60bfe9d077 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal_neg.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal_neg.cc @@ -25,8 +25,8 @@ bool c = std::cmp_greater_equal(2, L'2'); // { dg-error "constexpr" } bool d = std::cmp_greater_equal(L'2', 2); // { dg-error "constexpr" } bool e = std::cmp_greater_equal(true, 1); // { dg-error "constexpr" } bool f = std::cmp_greater_equal(0, false); // { dg-error "constexpr" } -bool g = std::cmp_greater_equal(97, u8'a'); // { dg-error "constexpr" } -bool h = std::cmp_greater_equal(u8'a', 97); // { dg-error "constexpr" } +bool g = std::cmp_greater_equal(97, u8'a'); // { dg-error "constexpr" "" { target { no-opts "-fno-char8_t" } } } +bool h = std::cmp_greater_equal(u8'a', 97); // { dg-error "constexpr" "" { target { no-opts "-fno-char8_t" } } } bool i = std::cmp_greater_equal(97, u'a'); // { dg-error "constexpr" } bool j = std::cmp_greater_equal(u'a', 97); // { dg-error "constexpr" } bool k = std::cmp_greater_equal(97, U'a'); // { dg-error "constexpr" } diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_neg.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_neg.cc index 676a03b47fd8..d5ff52cee54a 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_neg.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/greater_neg.cc @@ -25,8 +25,8 @@ bool c = std::cmp_greater(2, L'2'); // { dg-error "constexpr" } bool d = std::cmp_greater(L'2', 2); // { dg-error "constexpr" } bool e = std::cmp_greater(true, 1); // { dg-error "constexpr" } bool f = std::cmp_greater(0, false); // { dg-error "constexpr" } -bool g = std::cmp_greater(97, u8'a'); // { dg-error "constexpr" } -bool h = std::cmp_greater(u8'a', 97); // { dg-error "constexpr" } +bool g = std::cmp_greater(97, u8'a'); // { dg-error "constexpr" "" { target { no-opts "-fno-char8_t" } } } +bool h = std::cmp_greater(u8'a', 97); // { dg-error "constexpr" "" { target { no-opts "-fno-char8_t" } } } bool i = std::cmp_greater(97, u'a'); // { dg-error "constexpr" } bool j = std::cmp_greater(u'a', 97); // { dg-error "constexpr" } bool k = std::cmp_greater(97, U'a'); // { dg-error "constexpr" } diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/in_range_neg.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/in_range_neg.cc index a6b071aed77b..bf50abe356a1 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/in_range_neg.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/in_range_neg.cc @@ -25,8 +25,10 @@ bool c = std::in_range<int>(L'2'); // { dg-error "here" } bool d = std::in_range<wchar_t>(2); // { dg-error "here" } bool e = std::in_range<int>(true); // { dg-error "here" } bool f = std::in_range<bool>(0); // { dg-error "here" } -bool g = std::in_range<int>(u8'a'); // { dg-error "here" } -bool h = std::in_range<char8_t>(97); // { dg-error "here" } +bool g = std::in_range<int>(u8'a'); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } +#ifdef __cpp_char8_t +bool h = std::in_range<char8_t>(97); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } +#endif bool i = std::in_range<int>(u'a'); // { dg-error "here" } bool j = std::in_range<char16_t>(97); // { dg-error "here" } bool k = std::in_range<int>(U'a'); // { dg-error "here" } diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal_neg.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal_neg.cc index ce8f3b5d9ce0..f15acb9ec3d1 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal_neg.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/less_equal_neg.cc @@ -25,8 +25,8 @@ bool c = std::cmp_less_equal(2, L'2'); // { dg-error "constexpr" } bool d = std::cmp_less_equal(L'2', 2); // { dg-error "constexpr" } bool e = std::cmp_less_equal(true, 1); // { dg-error "constexpr" } bool f = std::cmp_less_equal(0, false); // { dg-error "constexpr" } -bool g = std::cmp_less_equal(97, u8'a'); // { dg-error "constexpr" } -bool h = std::cmp_less_equal(u8'a', 97); // { dg-error "constexpr" } +bool g = std::cmp_less_equal(97, u8'a'); // { dg-error "constexpr" "" { target { no-opts "-fno-char8_t" } } } +bool h = std::cmp_less_equal(u8'a', 97); // { dg-error "constexpr" "" { target { no-opts "-fno-char8_t" } } } bool i = std::cmp_less_equal(97, u'a'); // { dg-error "constexpr" } bool j = std::cmp_less_equal(u'a', 97); // { dg-error "constexpr" } bool k = std::cmp_less_equal(97, U'a'); // { dg-error "constexpr" } diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc index 4bc9bfe0af2c..2d08662f8d86 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/less_neg.cc @@ -25,8 +25,8 @@ bool c = std::cmp_less(2, L'2'); // { dg-error "here" } bool d = std::cmp_less(L'2', 2); // { dg-error "here" } bool e = std::cmp_less(true, 1); // { dg-error "here" } bool f = std::cmp_less(0, false); // { dg-error "here" } -bool g = std::cmp_less(97, u8'a'); // { dg-error "here" } -bool h = std::cmp_less(u8'a', 97); // { dg-error "here" } +bool g = std::cmp_less(97, u8'a'); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } +bool h = std::cmp_less(u8'a', 97); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } bool i = std::cmp_less(97, u'a'); // { dg-error "here" } bool j = std::cmp_less(u'a', 97); // { dg-error "here" } bool k = std::cmp_less(97, U'a'); // { dg-error "here" } diff --git a/libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc b/libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc index 06cfd6ee8f4f..7290e9e24176 100644 --- a/libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc +++ b/libstdc++-v3/testsuite/20_util/integer_comparisons/not_equal_neg.cc @@ -25,8 +25,8 @@ bool c = std::cmp_equal(2, L'2'); // { dg-error "here" } bool d = std::cmp_equal(L'2', 2); // { dg-error "here" } bool e = std::cmp_equal(true, 1); // { dg-error "here" } bool f = std::cmp_equal(0, false); // { dg-error "here" } -bool g = std::cmp_equal(97, u8'a'); // { dg-error "here" } -bool h = std::cmp_equal(u8'a', 97); // { dg-error "here" } +bool g = std::cmp_equal(97, u8'a'); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } +bool h = std::cmp_equal(u8'a', 97); // { dg-error "here" "" { target { no-opts "-fno-char8_t" } } } bool i = std::cmp_equal(97, u'a'); // { dg-error "here" } bool j = std::cmp_equal(u'a', 97); // { dg-error "here" } bool k = std::cmp_equal(97, U'a'); // { dg-error "here" } diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc b/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc index 1ef487187216..8cd603da17fb 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/hash/hash_char8_t.cc @@ -16,6 +16,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do run { target c++20 } } +// { dg-skip-if "" { *-*-* } { "-fno-char8_t" } } #include <string> #include <memory_resource> diff --git a/libstdc++-v3/testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc b/libstdc++-v3/testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc index 1964803cbd1b..71c62e982034 100644 --- a/libstdc++-v3/testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc +++ b/libstdc++-v3/testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc @@ -1,4 +1,5 @@ // { dg-do compile { target c++20 } } +// { dg-skip-if "" { *-*-* } { "-fno-char8_t" } } #include <cuchar> diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc index e57bda8ecc1c..95f4aeb010e0 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc @@ -20,6 +20,7 @@ // Test character inserters defined as deleted by P1423. // { dg-do compile { target c++20 } } +// { dg-skip-if "" { *-*-* } { "-fno-char8_t" } } #include <ostream> diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc index 89b560418a1f..5203dd6e1ce2 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc @@ -20,6 +20,7 @@ // Test wide character inserters defined as deleted by P1423. // { dg-do compile { target c++20 } } +// { dg-skip-if "" { *-*-* } { "-fno-char8_t" } } #include <ostream> diff --git a/libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path-depr.cc b/libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path-depr.cc index ffa59979ec99..48827ea44cfc 100644 --- a/libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path-depr.cc +++ b/libstdc++-v3/testsuite/27_io/filesystem/path/factory/u8path-depr.cc @@ -10,6 +10,8 @@ auto p2 = fs::u8path(s, s); // { dg-warning "deprecated" } #if __cpp_lib_char8_t const char8_t* u = u8""; +#else +const char* u = u8""; +#endif auto p3 = fs::u8path(u); // { dg-warning "deprecated" } auto p4 = fs::u8path(u, u); // { dg-warning "deprecated" } -#endif diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc index 12f47ae81331..8d9501f42ef4 100644 --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc @@ -9,7 +9,7 @@ namespace std template<class charT> struct char_traits; template<> struct char_traits<char>; -#if __cplusplus >= 202002L +#if __cplusplus >= 202002L && defined __cpp_char8_t template<> struct char_traits<char8_t>; #endif #if __cplusplus >= 201103L diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/wait_notify.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/wait_notify.cc index 355269118a62..b3d2f928ad53 100644 --- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/wait_notify.cc +++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/wait_notify.cc @@ -59,7 +59,9 @@ main () check<unsigned long long>(); check<wchar_t>(); +#if __cpp_char8_t check<char8_t>(); +#endif check<char16_t>(); check<char32_t>(); diff --git a/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc index 0da206a5b007..c3aebb2c5d99 100644 --- a/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc +++ b/libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc @@ -47,9 +47,7 @@ void test01() using atomic_llong; // { dg-error "expected nested-name-specifier" } using atomic_ullong; // { dg-error "expected nested-name-specifier" } using atomic_wchar_t; // { dg-error "expected nested-name-specifier" } -#ifdef _GLIBCXX_USE_CHAR8_T using atomic_char8_t; // { dg-error "expected nested-name-specifier" } -#endif using atomic_char16_t; // { dg-error "expected nested-name-specifier" } using atomic_char32_t; // { dg-error "expected nested-name-specifier" } From feb6a2d3569095706170c9400e93add27a66e034 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Tue, 2 Apr 2024 22:46:55 +0100 Subject: [PATCH 426/551] libstdc++: Use char for _Utf8_view if char8_t isn't available [PR114519] Instead of just omitting the definition of __unicode::_Utf8_view when char8_t is disabled, we can make it use char instead. libstdc++-v3/ChangeLog: PR libstdc++/114519 * include/bits/unicode.h (_Utf8_view) [!__cpp_char8_t]: Define using char instead of char8_t. * testsuite/ext/unicode/view.cc: Use u8""sv literals to create string views, instead of std::u8string_view. --- libstdc++-v3/include/bits/unicode.h | 3 +++ libstdc++-v3/testsuite/ext/unicode/view.cc | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/include/bits/unicode.h b/libstdc++-v3/include/bits/unicode.h index 0e95c86a0b00..29813b743dc1 100644 --- a/libstdc++-v3/include/bits/unicode.h +++ b/libstdc++-v3/include/bits/unicode.h @@ -581,6 +581,9 @@ namespace __unicode #ifdef __cpp_char8_t template<typename _View> using _Utf8_view = _Utf_view<char8_t, _View>; +#else + template<typename _View> + using _Utf8_view = _Utf_view<char, _View>; #endif template<typename _View> using _Utf16_view = _Utf_view<char16_t, _View>; diff --git a/libstdc++-v3/testsuite/ext/unicode/view.cc b/libstdc++-v3/testsuite/ext/unicode/view.cc index 79ea2bbc6b7e..ee23b0b1d8a3 100644 --- a/libstdc++-v3/testsuite/ext/unicode/view.cc +++ b/libstdc++-v3/testsuite/ext/unicode/view.cc @@ -10,7 +10,7 @@ using namespace std::string_view_literals; constexpr void test_utf8_to_utf8() { - const std::u8string_view s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"; + const auto s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv; uc::_Utf8_view v(s8); VERIFY( std::ranges::distance(v) == s8.size() ); VERIFY( std::ranges::equal(v, s8) ); @@ -19,7 +19,7 @@ test_utf8_to_utf8() constexpr void test_utf8_to_utf16() { - const std::u8string_view s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"; + const auto s8 = u8"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"sv; const std::u16string_view s16 = u"£🇬🇧 €🇪🇺 æбçδé ♠♥♦♣ 🤡"; uc::_Utf16_view v(s8); VERIFY( std::ranges::distance(v) == s16.size() ); From 1162861439fd3c4b30fc3ccd49462e47e876f04a Mon Sep 17 00:00:00 2001 From: Martin Jambor <mjambor@suse.cz> Date: Mon, 8 Apr 2024 18:53:23 +0200 Subject: [PATCH 427/551] ipa: Compare jump functions in ICF (PR 113907) In PR 113907 comment #58, Honza found a case where ICF thinks bodies of functions are equivalent but becaise of difference in aliases in a memory access, different aggregate jump functions are associated with supposedly equivalent call statements. This patch adds a way to compare jump functions and plugs it into ICF to avoid the issue. gcc/ChangeLog: 2024-03-20 Martin Jambor <mjambor@suse.cz> PR ipa/113907 * ipa-prop.h (class ipa_vr): Declare new overload of a member function equal_p. (ipa_jump_functions_equivalent_p): Declare. * ipa-prop.cc (ipa_vr::equal_p): New function. (ipa_agg_pass_through_jf_equivalent_p): Likewise. (ipa_agg_jump_functions_equivalent_p): Likewise. (ipa_jump_functions_equivalent_p): Likewise. * ipa-cp.h (values_equal_for_ipcp_p): Declare. * ipa-cp.cc (values_equal_for_ipcp_p): Make function public. * ipa-icf-gimple.cc: Include alloc-pool.h, symbol-summary.h, sreal.h, ipa-cp.h and ipa-prop.h. (func_checker::compare_gimple_call): Comapre jump functions. gcc/testsuite/ChangeLog: 2024-03-20 Martin Jambor <mjambor@suse.cz> PR ipa/113907 * gcc.dg/lto/pr113907_0.c: New. * gcc.dg/lto/pr113907_1.c: Likewise. * gcc.dg/lto/pr113907_2.c: Likewise. --- gcc/ipa-cp.cc | 2 +- gcc/ipa-cp.h | 2 + gcc/ipa-icf-gimple.cc | 30 +++++ gcc/ipa-prop.cc | 167 ++++++++++++++++++++++++++ gcc/ipa-prop.h | 3 + gcc/testsuite/gcc.dg/lto/pr113907_0.c | 18 +++ gcc/testsuite/gcc.dg/lto/pr113907_1.c | 35 ++++++ gcc/testsuite/gcc.dg/lto/pr113907_2.c | 11 ++ 8 files changed, 267 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/lto/pr113907_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113907_1.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113907_2.c diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc index 2a1da631e9ca..b7add455bd5d 100644 --- a/gcc/ipa-cp.cc +++ b/gcc/ipa-cp.cc @@ -201,7 +201,7 @@ ipcp_lattice<valtype>::is_single_const () /* Return true iff X and Y should be considered equal values by IPA-CP. */ -static bool +bool values_equal_for_ipcp_p (tree x, tree y) { gcc_checking_assert (x != NULL_TREE && y != NULL_TREE); diff --git a/gcc/ipa-cp.h b/gcc/ipa-cp.h index 0b3cfe4b526a..7ff74fb5c981 100644 --- a/gcc/ipa-cp.h +++ b/gcc/ipa-cp.h @@ -289,4 +289,6 @@ class ipcp_param_lattices bool virt_call = false; }; +bool values_equal_for_ipcp_p (tree x, tree y); + #endif /* IPA_CP_H */ diff --git a/gcc/ipa-icf-gimple.cc b/gcc/ipa-icf-gimple.cc index 8c2df7a354e6..17f62bec0680 100644 --- a/gcc/ipa-icf-gimple.cc +++ b/gcc/ipa-icf-gimple.cc @@ -41,7 +41,12 @@ along with GCC; see the file COPYING3. If not see #include "gimple-walk.h" #include "tree-ssa-alias-compare.h" +#include "alloc-pool.h" +#include "symbol-summary.h" #include "ipa-icf-gimple.h" +#include "sreal.h" +#include "ipa-cp.h" +#include "ipa-prop.h" namespace ipa_icf_gimple { @@ -714,6 +719,31 @@ func_checker::compare_gimple_call (gcall *s1, gcall *s2) && !compatible_types_p (TREE_TYPE (t1), TREE_TYPE (t2))) return return_false_with_msg ("GIMPLE internal call LHS type mismatch"); + if (!gimple_call_internal_p (s1)) + { + cgraph_edge *e1 = cgraph_node::get (m_source_func_decl)->get_edge (s1); + cgraph_edge *e2 = cgraph_node::get (m_target_func_decl)->get_edge (s2); + class ipa_edge_args *args1 = ipa_edge_args_sum->get (e1); + class ipa_edge_args *args2 = ipa_edge_args_sum->get (e2); + if ((args1 != nullptr) != (args2 != nullptr)) + return return_false_with_msg ("ipa_edge_args mismatch"); + if (args1) + { + int n1 = ipa_get_cs_argument_count (args1); + int n2 = ipa_get_cs_argument_count (args2); + if (n1 != n2) + return return_false_with_msg ("ipa_edge_args nargs mismatch"); + for (int i = 0; i < n1; i++) + { + struct ipa_jump_func *jf1 = ipa_get_ith_jump_func (args1, i); + struct ipa_jump_func *jf2 = ipa_get_ith_jump_func (args2, i); + if (((jf1 != nullptr) != (jf2 != nullptr)) + || (jf1 && !ipa_jump_functions_equivalent_p (jf1, jf2))) + return return_false_with_msg ("jump function mismatch"); + } + } + } + return compare_operand (t1, t2, get_operand_access_type (&map, t1)); } diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc index e8e4918d5a82..374e998aa64b 100644 --- a/gcc/ipa-prop.cc +++ b/gcc/ipa-prop.cc @@ -156,6 +156,20 @@ ipa_vr::equal_p (const vrange &r) const return (types_compatible_p (m_type, r.type ()) && m_storage->equal_p (r)); } +bool +ipa_vr::equal_p (const ipa_vr &o) const +{ + if (!known_p ()) + return !o.known_p (); + + if (!types_compatible_p (m_type, o.m_type)) + return false; + + Value_Range r; + o.get_vrange (r); + return m_storage->equal_p (r); +} + void ipa_vr::get_vrange (Value_Range &r) const { @@ -6057,4 +6071,157 @@ ipa_prop_cc_finalize (void) ipa_node_params_sum = NULL; } +/* Return true if the two pass_through components of two jump functions are + known to be equivalent. AGG_JF denotes whether they are part of aggregate + functions or not. The function can be used before the IPA phase of IPA-CP + or inlining because it cannot cope with refdesc changes these passes can + carry out. */ + +static bool +ipa_agg_pass_through_jf_equivalent_p (ipa_pass_through_data *ipt1, + ipa_pass_through_data *ipt2, + bool agg_jf) + +{ + gcc_assert (agg_jf || + (!ipt1->refdesc_decremented && !ipt2->refdesc_decremented)); + if (ipt1->operation != ipt2->operation + || ipt1->formal_id != ipt2->formal_id + || (!agg_jf && (ipt1->agg_preserved != ipt2->agg_preserved))) + return false; + if (((ipt1->operand != NULL_TREE) != (ipt2->operand != NULL_TREE)) + || (ipt1->operand + && !values_equal_for_ipcp_p (ipt1->operand, ipt2->operand))) + return false; + return true; +} + +/* Return true if the two aggregate jump functions are known to be equivalent. + The function can be used before the IPA phase of IPA-CP or inlining because + it cannot cope with refdesc changes these passes can carry out. */ + +static bool +ipa_agg_jump_functions_equivalent_p (ipa_agg_jf_item *ajf1, + ipa_agg_jf_item *ajf2) +{ + if (ajf1->offset != ajf2->offset + || ajf1->jftype != ajf2->jftype + || !types_compatible_p (ajf1->type, ajf2->type)) + return false; + + switch (ajf1->jftype) + { + case IPA_JF_CONST: + if (!values_equal_for_ipcp_p (ajf1->value.constant, + ajf2->value.constant)) + return false; + break; + case IPA_JF_PASS_THROUGH: + { + ipa_pass_through_data *ipt1 = &ajf1->value.pass_through; + ipa_pass_through_data *ipt2 = &ajf2->value.pass_through; + if (!ipa_agg_pass_through_jf_equivalent_p (ipt1, ipt2, true)) + return false; + } + break; + case IPA_JF_LOAD_AGG: + { + ipa_load_agg_data *ila1 = &ajf1->value.load_agg; + ipa_load_agg_data *ila2 = &ajf2->value.load_agg; + if (!ipa_agg_pass_through_jf_equivalent_p (&ila1->pass_through, + &ila2->pass_through, true)) + return false; + if (ila1->offset != ila2->offset + || ila1->by_ref != ila2->by_ref + || !types_compatible_p (ila1->type, ila2->type)) + return false; + } + break; + default: + gcc_unreachable (); + } + return true; +} + +/* Return true if the two jump functions are known to be equivalent. The + function can be used before the IPA phase of IPA-CP or inlining because it + cannot cope with refdesc changes these passes can carry out. */ + +bool +ipa_jump_functions_equivalent_p (ipa_jump_func *jf1, ipa_jump_func *jf2) +{ + if (jf1->type != jf2->type) + return false; + + switch (jf1->type) + { + case IPA_JF_UNKNOWN: + break; + case IPA_JF_CONST: + { + tree cst1 = ipa_get_jf_constant (jf1); + tree cst2 = ipa_get_jf_constant (jf2); + if (!values_equal_for_ipcp_p (cst1, cst2)) + return false; + + ipa_cst_ref_desc *rd1 = jfunc_rdesc_usable (jf1); + ipa_cst_ref_desc *rd2 = jfunc_rdesc_usable (jf2); + if (rd1 && rd2) + { + gcc_assert (rd1->refcount == 1 + && rd2->refcount == 1); + gcc_assert (!rd1->next_duplicate && !rd2->next_duplicate); + } + else if (rd1) + return false; + else if (rd2) + return false; + } + break; + case IPA_JF_PASS_THROUGH: + { + ipa_pass_through_data *ipt1 = &jf1->value.pass_through; + ipa_pass_through_data *ipt2 = &jf2->value.pass_through; + if (!ipa_agg_pass_through_jf_equivalent_p (ipt1, ipt2, false)) + return false; + } + break; + case IPA_JF_ANCESTOR: + { + ipa_ancestor_jf_data *ia1 = &jf1->value.ancestor; + ipa_ancestor_jf_data *ia2 = &jf2->value.ancestor; + + if (ia1->formal_id != ia2->formal_id + || ia1->agg_preserved != ia2->agg_preserved + || ia1->keep_null != ia2->keep_null + || ia1->offset != ia2->offset) + return false; + } + break; + default: + gcc_unreachable (); + } + + if (((jf1->m_vr != nullptr) != (jf2->m_vr != nullptr)) + || (jf1->m_vr && !jf1->m_vr->equal_p (*jf2->m_vr))) + return false; + + unsigned alen = vec_safe_length (jf1->agg.items); + if (vec_safe_length (jf2->agg.items) != alen) + return false; + + if (!alen) + return true; + + if (jf1->agg.by_ref != jf2->agg.by_ref) + return false; + + for (unsigned i = 0 ; i < alen; i++) + if (!ipa_agg_jump_functions_equivalent_p (&(*jf1->agg.items)[i], + &(*jf2->agg.items)[i])) + return false; + + return true; +} + #include "gt-ipa-prop.h" diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index ee3c0006add9..93d1b87b1f7f 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -308,6 +308,7 @@ class GTY(()) ipa_vr tree type () const { return m_type; } void get_vrange (Value_Range &) const; bool equal_p (const vrange &) const; + bool equal_p (const ipa_vr &) const; const vrange_storage *storage () const { return m_storage; } void streamer_read (lto_input_block *, class data_in *); void streamer_write (output_block *) const; @@ -1278,5 +1279,7 @@ ipa_range_set_and_normalize (vrange &r, tree val) bool ipa_return_value_range (Value_Range &range, tree decl); void ipa_record_return_value_range (Value_Range val); +bool ipa_jump_functions_equivalent_p (ipa_jump_func *jf1, ipa_jump_func *jf2); + #endif /* IPA_PROP_H */ diff --git a/gcc/testsuite/gcc.dg/lto/pr113907_0.c b/gcc/testsuite/gcc.dg/lto/pr113907_0.c new file mode 100644 index 000000000000..3c4dd475c015 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113907_0.c @@ -0,0 +1,18 @@ +/* { dg-lto-do run } */ +/* { dg-lto-options {{-O3 -flto}} } */ + +struct bar {int a;}; +struct foo {int a;}; +struct barp {struct bar *f; struct bar *g;}; +extern struct foo **ptr; +int test2 (void *); +int test3 (void *); +int +testb(void) +{ + struct bar *fp; + test2 ((void *)&fp); + fp = (void *) 0; + (*ptr)++; + test3 ((void *)&fp); +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113907_1.c b/gcc/testsuite/gcc.dg/lto/pr113907_1.c new file mode 100644 index 000000000000..1c48bfd83a40 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113907_1.c @@ -0,0 +1,35 @@ +__attribute__((used)) int val,val2 = 1; + +struct foo {int a;}; + +struct foo **ptr; + +__attribute__ ((noipa)) +int +test2 (void *a) +{ + ptr = (struct foo **)a; +} +int test3 (void *a); + +int +test(void) +{ + struct foo *fp; + test2 ((void *)&fp); + fp = (void *) 0; + (*ptr)++; + test3 ((void *)&fp); +} + +int testb (void); + +int +main() +{ + for (int i = 0; i < val2; i++) + if (val) + testb (); + else + test(); +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113907_2.c b/gcc/testsuite/gcc.dg/lto/pr113907_2.c new file mode 100644 index 000000000000..172e86e8b0b1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113907_2.c @@ -0,0 +1,11 @@ +/* { dg-options "-O3 -flto -fno-strict-aliasing" } */ + +__attribute__ ((noinline)) +int +test3 (void *a) +{ + if (!*(void **)a) + __builtin_abort (); + return 0; +} + From 1e3312a25a7b34d6e3f549273e1674c7114e4408 Mon Sep 17 00:00:00 2001 From: Martin Jambor <mjambor@suse.cz> Date: Mon, 8 Apr 2024 18:53:23 +0200 Subject: [PATCH 428/551] ICF&SRA: Make ICF and SRA agree on padding PR 113359 shows that (at least with -fno-strict-aliasing) ICF can unify two functions which copy an aggregate type of the same size but then SRA, through its total scalarization, can copy the aggregate by pieces, skipping paddding, but the padding was not the same in the two original functions that ICF unified. This patch enhances SRA with the ability to collect padding information which then can be compared from within ICF. Unfortunately SRA uses OPTION_SET_P when determining its limits, so ICF needs to switch cfuns at least once to figure it out too. gcc/ChangeLog: 2024-03-27 Martin Jambor <mjambor@suse.cz> PR ipa/113359 * ipa-icf-gimple.h (func_checker): New members safe_for_total_scalarization_p, m_total_scalarization_limit_known_p and m_total_scalarization_limit. (func_checker::func_checker): Initialize new member variables. * ipa-icf-gimple.cc: Include tree-sra.h. (func_checker::func_checker): Initialize new member variables. (func_checker::safe_for_total_scalarization_p): New function. (func_checker::compare_operand): Use the new function. * tree-sra.h (sra_get_max_scalarization_size): Declare. (sra_total_scalarization_would_copy_same_data_p): Likewise. * tree-sra.cc (prepare_iteration_over_array_elts): New function. (class sra_padding_collecting): New. (sra_padding_collecting::record_padding): Likewise. (scalarizable_type_p): Rename to totally_scalarizable_type_p. Add ability to record padding when requested. (totally_scalarize_subtree): Split out gathering information necessary to iterate over array elements to prepare_iteration_over_array_elts. Fix errornous early exit. (analyze_all_variable_accesses): Adjust the call to totally_scalarizable_type_p. Move determining of total scalariation size limit... (sra_get_max_scalarization_size): ...here. (check_ts_and_push_padding_to_vec): New function. (sra_total_scalarization_would_copy_same_data_p): Likewise. gcc/testsuite/ChangeLog: 2024-03-27 Martin Jambor <mjambor@suse.cz> PR ipa/113359 * gcc.dg/lto/pr113359-1_0.c: New. * gcc.dg/lto/pr113359-1_1.c: Likewise. * gcc.dg/lto/pr113359-2_0.c: Likewise. * gcc.dg/lto/pr113359-2_1.c: Likewise. * gcc.dg/lto/pr113359-3_0.c: Likewise. * gcc.dg/lto/pr113359-3_1.c: Likewise. * gcc.dg/lto/pr113359-4_0.c: Likewise. * gcc.dg/lto/pr113359-4_1.c: Likewise. * gcc.dg/lto/pr113359-5_0.c: Likewise. * gcc.dg/lto/pr113359-5_1.c: Likewise. --- gcc/ipa-icf-gimple.cc | 41 +++- gcc/ipa-icf-gimple.h | 15 +- gcc/testsuite/gcc.dg/lto/pr113359-1_0.c | 86 ++++++++ gcc/testsuite/gcc.dg/lto/pr113359-1_1.c | 38 ++++ gcc/testsuite/gcc.dg/lto/pr113359-2_0.c | 87 ++++++++ gcc/testsuite/gcc.dg/lto/pr113359-2_1.c | 38 ++++ gcc/testsuite/gcc.dg/lto/pr113359-3_0.c | 114 +++++++++++ gcc/testsuite/gcc.dg/lto/pr113359-3_1.c | 49 +++++ gcc/testsuite/gcc.dg/lto/pr113359-4_0.c | 114 +++++++++++ gcc/testsuite/gcc.dg/lto/pr113359-4_1.c | 49 +++++ gcc/testsuite/gcc.dg/lto/pr113359-5_0.c | 118 +++++++++++ gcc/testsuite/gcc.dg/lto/pr113359-5_1.c | 50 +++++ gcc/tree-sra.cc | 252 +++++++++++++++++++----- gcc/tree-sra.h | 3 + 14 files changed, 999 insertions(+), 55 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-1_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-1_1.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-2_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-2_1.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-3_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-3_1.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-4_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-4_1.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-5_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr113359-5_1.c diff --git a/gcc/ipa-icf-gimple.cc b/gcc/ipa-icf-gimple.cc index 17f62bec0680..c25eb24710f6 100644 --- a/gcc/ipa-icf-gimple.cc +++ b/gcc/ipa-icf-gimple.cc @@ -39,6 +39,7 @@ along with GCC; see the file COPYING3. If not see #include "cfgloop.h" #include "attribs.h" #include "gimple-walk.h" +#include "tree-sra.h" #include "tree-ssa-alias-compare.h" #include "alloc-pool.h" @@ -64,7 +65,8 @@ func_checker::func_checker (tree source_func_decl, tree target_func_decl, : m_source_func_decl (source_func_decl), m_target_func_decl (target_func_decl), m_ignored_source_nodes (ignored_source_nodes), m_ignored_target_nodes (ignored_target_nodes), - m_ignore_labels (ignore_labels), m_tbaa (tbaa) + m_ignore_labels (ignore_labels), m_tbaa (tbaa), + m_total_scalarization_limit_known_p (false) { function *source_func = DECL_STRUCT_FUNCTION (source_func_decl); function *target_func = DECL_STRUCT_FUNCTION (target_func_decl); @@ -361,6 +363,36 @@ func_checker::operand_equal_p (const_tree t1, const_tree t2, return operand_compare::operand_equal_p (t1, t2, flags); } +/* Return true if either T1 and T2 cannot be totally scalarized or if doing + so would result in copying the same memory. Otherwise return false. */ + +bool +func_checker::safe_for_total_scalarization_p (tree t1, tree t2) +{ + tree type1 = TREE_TYPE (t1); + tree type2 = TREE_TYPE (t2); + + if (!AGGREGATE_TYPE_P (type1) + || !AGGREGATE_TYPE_P (type2) + || !tree_fits_uhwi_p (TYPE_SIZE (type1)) + || !tree_fits_uhwi_p (TYPE_SIZE (type2))) + return true; + + if (!m_total_scalarization_limit_known_p) + { + push_cfun (DECL_STRUCT_FUNCTION (m_target_func_decl)); + m_total_scalarization_limit = sra_get_max_scalarization_size (); + pop_cfun (); + m_total_scalarization_limit_known_p = true; + } + + unsigned HOST_WIDE_INT sz = tree_to_uhwi (TYPE_SIZE (type1)); + gcc_assert (sz == tree_to_uhwi (TYPE_SIZE (type2))); + if (sz > m_total_scalarization_limit) + return true; + return sra_total_scalarization_would_copy_same_data_p (type1, type2); +} + /* Function responsible for comparison of various operands T1 and T2 which are accessed as ACCESS. If these components, from functions FUNC1 and FUNC2, are equal, true @@ -382,7 +414,12 @@ func_checker::compare_operand (tree t1, tree t2, operand_access_type access) lto_streaming_expected_p (), m_tbaa); if (!flags) - return true; + { + if (!safe_for_total_scalarization_p (t1, t2)) + return return_false_with_msg + ("total scalarization may not be equivalent"); + return true; + } if (flags & SEMANTICS) return return_false_with_msg ("compare_ao_refs failed (semantic difference)"); diff --git a/gcc/ipa-icf-gimple.h b/gcc/ipa-icf-gimple.h index 7f41961c63db..38e2ec076215 100644 --- a/gcc/ipa-icf-gimple.h +++ b/gcc/ipa-icf-gimple.h @@ -125,7 +125,8 @@ class func_checker : ao_compare func_checker (): m_source_func_decl (NULL_TREE), m_target_func_decl (NULL_TREE), m_ignored_source_nodes (NULL), m_ignored_target_nodes (NULL), - m_ignore_labels (false), m_tbaa (true) + m_ignore_labels (false), m_tbaa (true), + m_total_scalarization_limit_known_p (false) { m_source_ssa_names.create (0); m_target_ssa_names.create (0); @@ -205,6 +206,10 @@ class func_checker : ao_compare enum operand_access_type {OP_MEMORY, OP_NORMAL}; typedef hash_set<tree> operand_access_type_map; + /* Return true if either T1 and T2 cannot be totally scalarized or if doing + so would result in copying the same memory. Otherwise return false. */ + bool safe_for_total_scalarization_p (tree t1, tree t2); + /* Function responsible for comparison of various operands T1 and T2. If these components, from functions FUNC1 and FUNC2, are equal, true is returned. */ @@ -279,6 +284,14 @@ class func_checker : ao_compare /* Flag if we should compare type based alias analysis info. */ bool m_tbaa; + /* Set to true when total scalarization size has already been determined for + the functions. */ + bool m_total_scalarization_limit_known_p; + + /* When the above it set to true the determiend total scalarization + limit. */ + unsigned HOST_WIDE_INT m_total_scalarization_limit; + public: /* Return true if two operands are equal. The flags fields can be used to specify OEP flags described above. */ diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-1_0.c b/gcc/testsuite/gcc.dg/lto/pr113359-1_0.c new file mode 100644 index 000000000000..0b3ca680e362 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-1_0.c @@ -0,0 +1,86 @@ +/* { dg-lto-do run } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-lto-options {{-O2 -flto -fno-strict-aliasing -fno-ipa-cp --disable-tree-esra }} } */ + +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct SA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SB +{ + unsigned long bx; + unsigned int by; + unsigned long bz; +}; + +struct ZA +{ + int p; + struct SA s; + short q; +}; + +struct ZB +{ + int p; + struct SB s; + short q; +}; + +void __attribute__((noinline)) +geta (struct SA *d, struct ZA *p) +{ + struct SA tmp = p->s; + *d = tmp; +} + +void getb (struct SB *d, struct ZB *p); + +struct ZA ga; +struct ZB gb; + +void __attribute__((noipa)) +init (void) +{ + ga.s.ax = CI; + ga.s.ay = CL1; + ga.s.az = CL2; + + gb.s.bx = CL1; + gb.s.by = CI; + gb.s.bz = CL2; +} + +int +main (int argc, char **argv) +{ + init(); + struct SA a; + geta (&a, &ga); + + if (a.ax != CI) + __builtin_abort (); + if (a.ay != CL1) + __builtin_abort (); + if (a.az != CL2) + __builtin_abort (); + + struct SB b; + getb (&b, &gb); + + if (b.bx != CL1) + __builtin_abort (); + if (b.by != CI) + __builtin_abort (); + if (b.bz != CL2) + __builtin_abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-1_1.c b/gcc/testsuite/gcc.dg/lto/pr113359-1_1.c new file mode 100644 index 000000000000..f51b84b68596 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-1_1.c @@ -0,0 +1,38 @@ +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct SA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SB +{ + unsigned long bx; + unsigned int by; + unsigned long bz; +}; + +struct ZA +{ + int p; + struct SA s; + short q; +}; + +struct ZB +{ + int p; + struct SB s; + short q; +}; + +void __attribute__((noinline)) +getb (struct SB *d, struct ZB *p) +{ + struct SB tmp = p->s; + *d = tmp; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c b/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c new file mode 100644 index 000000000000..8b2d5bdfab22 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c @@ -0,0 +1,87 @@ +/* { dg-lto-do run } */ +/* { dg-lto-options {{-O2 -flto -fno-strict-aliasing -fno-ipa-cp --disable-tree-esra -fdump-ipa-icf-details }} } */ + +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct SA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SB +{ + unsigned int bx; + unsigned long by; + unsigned long bz; +}; + +struct ZA +{ + int p; + struct SA s; + short q; +}; + +struct ZB +{ + int p; + struct SB s; + short q; +}; + +void __attribute__((noinline)) +geta (struct SA *d, struct ZA *p) +{ + struct SA tmp = p->s; + *d = tmp; +} + +void getb (struct SB *d, struct ZB *p); + +struct ZA ga; +struct ZB gb; + +void __attribute__((noipa)) +init (void) +{ + ga.s.ax = CI; + ga.s.ay = CL1; + ga.s.az = CL2; + + gb.s.bx = CI; + gb.s.by = CL1; + gb.s.bz = CL2; +} + +int +main (int argc, char **argv) +{ + init(); + struct SA a; + geta (&a, &ga); + + if (a.ax != CI) + __builtin_abort (); + if (a.ay != CL1) + __builtin_abort (); + if (a.az != CL2) + __builtin_abort (); + + struct SB b; + getb (&b, &gb); + + if (b.bx != CI) + __builtin_abort (); + if (b.by != CL1) + __builtin_abort (); + if (b.bz != CL2) + __builtin_abort (); + + return 0; +} + +/* { dg-final { scan-wpa-ipa-dump "Semantic equality hit:geta/.*getb/" "icf" } } */ diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c b/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c new file mode 100644 index 000000000000..61bc0547981a --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c @@ -0,0 +1,38 @@ +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct SA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SB +{ + unsigned int bx; + unsigned long by; + unsigned long bz; +}; + +struct ZA +{ + int p; + struct SA s; + short q; +}; + +struct ZB +{ + int p; + struct SB s; + short q; +}; + +void __attribute__((noinline)) +getb (struct SB *d, struct ZB *p) +{ + struct SB tmp = p->s; + *d = tmp; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-3_0.c b/gcc/testsuite/gcc.dg/lto/pr113359-3_0.c new file mode 100644 index 000000000000..f74819bc452f --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-3_0.c @@ -0,0 +1,114 @@ +/* { dg-lto-do run } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-lto-options {{-O2 -flto -fno-strict-aliasing -fno-ipa-cp --disable-tree-esra }} } */ + +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct AA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SA +{ + int p; + struct AA arr[2]; +}; + +struct ZA +{ + struct SA s; + short q; +}; + +struct AB +{ + unsigned long bx; + unsigned int by; + unsigned long bz; +}; + +struct SB +{ + int p; + struct AB arr[2]; +}; + +struct ZB +{ + struct SB s; + short q; +}; + +void __attribute__((noinline)) +geta (struct SA *d, struct ZA *p) +{ + struct SA tmp = p->s; + *d = tmp; +} + +void getb (struct SB *d, struct ZB *p); + +struct ZA ga; +struct ZB gb; + +void __attribute__((noipa)) +init (void) +{ + ga.s.arr[0].ax = CI; + ga.s.arr[0].ay = CL1; + ga.s.arr[0].az = CL2; + ga.s.arr[1].ax = CI; + ga.s.arr[1].ay = CL1; + ga.s.arr[1].az = CL2; + + gb.s.arr[0].bx = CL1; + gb.s.arr[0].by = CI; + gb.s.arr[0].bz = CL2; + gb.s.arr[1].bx = CL1; + gb.s.arr[1].by = CI; + gb.s.arr[1].bz = CL2; +} + +int +main (int argc, char **argv) +{ + init(); + struct SA a; + geta (&a, &ga); + + if (a.arr[0].ax != CI) + __builtin_abort (); + if (a.arr[0].ay != CL1) + __builtin_abort (); + if (a.arr[0].az != CL2) + __builtin_abort (); + if (a.arr[1].ax != CI) + __builtin_abort (); + if (a.arr[1].ay != CL1) + __builtin_abort (); + if (a.arr[1].az != CL2) + __builtin_abort (); + + struct SB b; + getb (&b, &gb); + + if (b.arr[0].bx != CL1) + __builtin_abort (); + if (b.arr[0].by != CI) + __builtin_abort (); + if (b.arr[0].bz != CL2) + __builtin_abort (); + if (b.arr[1].bx != CL1) + __builtin_abort (); + if (b.arr[1].by != CI) + __builtin_abort (); + if (b.arr[1].bz != CL2) + __builtin_abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-3_1.c b/gcc/testsuite/gcc.dg/lto/pr113359-3_1.c new file mode 100644 index 000000000000..25a6a0a3f4ea --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-3_1.c @@ -0,0 +1,49 @@ +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct AA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SA +{ + int p; + struct AA arr[2]; +}; + +struct ZA +{ + struct SA s; + short q; +}; + +struct AB +{ + unsigned long bx; + unsigned int by; + unsigned long bz; +}; + +struct SB +{ + int p; + struct AB arr[2]; +}; + +struct ZB +{ + struct SB s; + short q; +}; + + +void __attribute__((noinline)) +getb (struct SB *d, struct ZB *p) +{ + struct SB tmp = p->s; + *d = tmp; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-4_0.c b/gcc/testsuite/gcc.dg/lto/pr113359-4_0.c new file mode 100644 index 000000000000..170c8d4ad3f1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-4_0.c @@ -0,0 +1,114 @@ +/* { dg-lto-do run } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-lto-options {{-O2 -flto -fno-strict-aliasing -fno-ipa-cp --disable-tree-esra }} } */ + +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct AA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SA +{ + int p; + struct AA arr[2]; +}; + +struct ZA +{ + struct SA s; + short q; +}; + +struct AB +{ + unsigned long bx; + unsigned long by; + unsigned int bz; +}; + +struct SB +{ + int p; + struct AB arr[2]; +}; + +struct ZB +{ + struct SB s; + short q; +}; + +void __attribute__((noinline)) +geta (struct SA *d, struct ZA *p) +{ + struct SA tmp = p->s; + *d = tmp; +} + +void getb (struct SB *d, struct ZB *p); + +struct ZA ga; +struct ZB gb; + +void __attribute__((noipa)) +init (void) +{ + ga.s.arr[0].ax = CI; + ga.s.arr[0].ay = CL1; + ga.s.arr[0].az = CL2; + ga.s.arr[1].ax = CI; + ga.s.arr[1].ay = CL1; + ga.s.arr[1].az = CL2; + + gb.s.arr[0].bx = CL1; + gb.s.arr[0].by = CL2; + gb.s.arr[0].bz = CI; + gb.s.arr[1].bx = CL1; + gb.s.arr[1].by = CL2; + gb.s.arr[1].bz = CI; +} + +int +main (int argc, char **argv) +{ + init(); + struct SA a; + geta (&a, &ga); + + if (a.arr[0].ax != CI) + __builtin_abort (); + if (a.arr[0].ay != CL1) + __builtin_abort (); + if (a.arr[0].az != CL2) + __builtin_abort (); + if (a.arr[1].ax != CI) + __builtin_abort (); + if (a.arr[1].ay != CL1) + __builtin_abort (); + if (a.arr[1].az != CL2) + __builtin_abort (); + + struct SB b; + getb (&b, &gb); + + if (b.arr[0].bx != CL1) + __builtin_abort (); + if (b.arr[0].by != CL2) + __builtin_abort (); + if (b.arr[0].bz != CI) + __builtin_abort (); + if (b.arr[1].bx != CL1) + __builtin_abort (); + if (b.arr[1].by != CL2) + __builtin_abort (); + if (b.arr[1].bz != CI) + __builtin_abort (); + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-4_1.c b/gcc/testsuite/gcc.dg/lto/pr113359-4_1.c new file mode 100644 index 000000000000..765981094708 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-4_1.c @@ -0,0 +1,49 @@ +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct AA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SA +{ + int p; + struct AA arr[2]; +}; + +struct ZA +{ + struct SA s; + short q; +}; + +struct AB +{ + unsigned long bx; + unsigned long by; + unsigned int bz; +}; + +struct SB +{ + int p; + struct AB arr[2]; +}; + +struct ZB +{ + struct SB s; + short q; +}; + + +void __attribute__((noinline)) +getb (struct SB *d, struct ZB *p) +{ + struct SB tmp = p->s; + *d = tmp; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-5_0.c b/gcc/testsuite/gcc.dg/lto/pr113359-5_0.c new file mode 100644 index 000000000000..5ad457fdb394 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-5_0.c @@ -0,0 +1,118 @@ +/* { dg-lto-do run } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-lto-options {{-O2 -flto -fno-strict-aliasing -fno-ipa-cp --disable-tree-esra -fdump-ipa-icf-details }} } */ + +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct AA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SA +{ + int p; + struct AA arr[2]; + short ee; +}; + +struct ZA +{ + struct SA s; + short q; +}; + +struct AB +{ + unsigned int bx; + unsigned long by; + unsigned long bz; +}; + +struct SB +{ + int p; + struct AB arr[2]; + short ee; +}; + +struct ZB +{ + struct SB s; + short q; +}; + +void __attribute__((noinline)) +geta (struct SA *d, struct ZA *p) +{ + struct SA tmp = p->s; + *d = tmp; +} + +void getb (struct SB *d, struct ZB *p); + +struct ZA ga; +struct ZB gb; + +void __attribute__((noipa)) +init (void) +{ + ga.s.arr[0].ax = CI; + ga.s.arr[0].ay = CL1; + ga.s.arr[0].az = CL2; + ga.s.arr[1].ax = CI; + ga.s.arr[1].ay = CL1; + ga.s.arr[1].az = CL2; + + gb.s.arr[0].bx = CI; + gb.s.arr[0].by = CL1; + gb.s.arr[0].bz = CL2; + gb.s.arr[1].bx = CI; + gb.s.arr[1].by = CL1; + gb.s.arr[1].bz = CL2; +} + +int +main (int argc, char **argv) +{ + init(); + struct SA a; + geta (&a, &ga); + + if (a.arr[0].ax != CI) + __builtin_abort (); + if (a.arr[0].ay != CL1) + __builtin_abort (); + if (a.arr[0].az != CL2) + __builtin_abort (); + if (a.arr[1].ax != CI) + __builtin_abort (); + if (a.arr[1].ay != CL1) + __builtin_abort (); + if (a.arr[1].az != CL2) + __builtin_abort (); + + struct SB b; + getb (&b, &gb); + + if (b.arr[0].bx != CI) + __builtin_abort (); + if (b.arr[0].by != CL1) + __builtin_abort (); + if (b.arr[0].bz != CL2) + __builtin_abort (); + if (b.arr[1].bx != CI) + __builtin_abort (); + if (b.arr[1].by != CL1) + __builtin_abort (); + if (b.arr[1].bz != CL2) + __builtin_abort (); + + return 0; +} + +/* { dg-final { scan-wpa-ipa-dump "Semantic equality hit:geta/.*getb/" "icf" } } */ diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-5_1.c b/gcc/testsuite/gcc.dg/lto/pr113359-5_1.c new file mode 100644 index 000000000000..128b23cb7562 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113359-5_1.c @@ -0,0 +1,50 @@ +#define CI 0xdeadbeef +#define CL1 0xdeaddead1234beef +#define CL2 0xdead1234deadbeef + +struct AA +{ + unsigned int ax; + unsigned long ay; + unsigned long az; +}; + +struct SA +{ + int p; + struct AA arr[2]; + short ee; +}; + +struct ZA +{ + struct SA s; + short q; +}; + +struct AB +{ + unsigned int bx; + unsigned long by; + unsigned long bz; +}; + +struct SB +{ + int p; + struct AB arr[2]; + short ee; +}; + +struct ZB +{ + struct SB s; + short q; +}; + +void __attribute__((noinline)) +getb (struct SB *d, struct ZB *p) +{ + struct SB tmp = p->s; + *d = tmp; +} diff --git a/gcc/tree-sra.cc b/gcc/tree-sra.cc index dbfae5e7fdd9..32fa28911f2d 100644 --- a/gcc/tree-sra.cc +++ b/gcc/tree-sra.cc @@ -985,18 +985,101 @@ create_access (tree expr, gimple *stmt, bool write) return access; } +/* Given an array type TYPE, extract element size to *EL_SIZE, minimum index to + *IDX and maximum index to *MAX so that the caller can iterate over all + elements and return true, except if the array is known to be zero-length, + then return false. */ -/* Return true iff TYPE is scalarizable - i.e. a RECORD_TYPE or fixed-length - ARRAY_TYPE with fields that are either of gimple register types (excluding - bit-fields) or (recursively) scalarizable types. CONST_DECL must be true if - we are considering a decl from constant pool. If it is false, char arrays - will be refused. */ +static bool +prepare_iteration_over_array_elts (tree type, HOST_WIDE_INT *el_size, + offset_int *idx, offset_int *max) +{ + tree elem_size = TYPE_SIZE (TREE_TYPE (type)); + gcc_assert (elem_size && tree_fits_shwi_p (elem_size)); + *el_size = tree_to_shwi (elem_size); + gcc_assert (*el_size > 0); + + tree minidx = TYPE_MIN_VALUE (TYPE_DOMAIN (type)); + gcc_assert (TREE_CODE (minidx) == INTEGER_CST); + tree maxidx = TYPE_MAX_VALUE (TYPE_DOMAIN (type)); + /* Skip (some) zero-length arrays; others have MAXIDX == MINIDX - 1. */ + if (!maxidx) + return false; + gcc_assert (TREE_CODE (maxidx) == INTEGER_CST); + tree domain = TYPE_DOMAIN (type); + /* MINIDX and MAXIDX are inclusive, and must be interpreted in + DOMAIN (e.g. signed int, whereas min/max may be size_int). */ + *idx = wi::to_offset (minidx); + *max = wi::to_offset (maxidx); + if (!TYPE_UNSIGNED (domain)) + { + *idx = wi::sext (*idx, TYPE_PRECISION (domain)); + *max = wi::sext (*max, TYPE_PRECISION (domain)); + } + return true; +} + +/* A structure to track collecting padding and hold collected padding + information. */ + +class sra_padding_collecting +{ +public: + /* Given that there won't be any data until at least OFFSET, add an + appropriate entry to the list of paddings or extend the last one. */ + void record_padding (HOST_WIDE_INT offset); + /* Vector of pairs describing contiguous pieces of padding, each pair + consisting of offset and length. */ + auto_vec<std::pair<HOST_WIDE_INT, HOST_WIDE_INT>, 10> m_padding; + /* Offset where data should continue after the last seen actual bit of data + if there was no padding. */ + HOST_WIDE_INT m_data_until = 0; +}; + +/* Given that there won't be any data until at least OFFSET, add an appropriate + entry to the list of paddings or extend the last one. */ + +void sra_padding_collecting::record_padding (HOST_WIDE_INT offset) +{ + if (offset > m_data_until) + { + HOST_WIDE_INT psz = offset - m_data_until; + if (!m_padding.is_empty () + && ((m_padding[m_padding.length () - 1].first + + m_padding[m_padding.length () - 1].second) == offset)) + m_padding[m_padding.length () - 1].second += psz; + else + m_padding.safe_push (std::make_pair (m_data_until, psz)); + } +} + +/* Return true iff TYPE is totally scalarizable - i.e. a RECORD_TYPE or + fixed-length ARRAY_TYPE with fields that are either of gimple register types + (excluding bit-fields) or (recursively) scalarizable types. CONST_DECL must + be true if we are considering a decl from constant pool. If it is false, + char arrays will be refused. + + TOTAL_OFFSET is the offset of TYPE within any outer type that is being + examined. + + If PC is non-NULL, collect padding information into the vector within the + structure. The information is however only complete if the function returns + true and does not contain any padding at its end. */ static bool -scalarizable_type_p (tree type, bool const_decl) +totally_scalarizable_type_p (tree type, bool const_decl, + HOST_WIDE_INT total_offset, + sra_padding_collecting *pc) { if (is_gimple_reg_type (type)) - return true; + { + if (pc) + { + pc->record_padding (total_offset); + pc->m_data_until = total_offset + tree_to_shwi (TYPE_SIZE (type)); + } + return true; + } if (type_contains_placeholder_p (type)) return false; @@ -1011,6 +1094,8 @@ scalarizable_type_p (tree type, bool const_decl) { tree ft = TREE_TYPE (fld); + if (!DECL_SIZE (fld)) + return false; if (zerop (DECL_SIZE (fld))) continue; @@ -1025,7 +1110,8 @@ scalarizable_type_p (tree type, bool const_decl) if (DECL_BIT_FIELD (fld)) return false; - if (!scalarizable_type_p (ft, const_decl)) + if (!totally_scalarizable_type_p (ft, const_decl, total_offset + pos, + pc)) return false; } @@ -1054,9 +1140,35 @@ scalarizable_type_p (tree type, bool const_decl) /* Variable-length array, do not allow scalarization. */ return false; + unsigned old_padding_len = 0; + if (pc) + old_padding_len = pc->m_padding.length (); tree elem = TREE_TYPE (type); - if (!scalarizable_type_p (elem, const_decl)) + if (!totally_scalarizable_type_p (elem, const_decl, total_offset, pc)) return false; + if (pc) + { + unsigned new_padding_len = pc->m_padding.length (); + HOST_WIDE_INT el_size; + offset_int idx, max; + if (!prepare_iteration_over_array_elts (type, &el_size, &idx, &max)) + return true; + pc->record_padding (total_offset + el_size); + ++idx; + for (HOST_WIDE_INT pos = total_offset + el_size; + idx <= max; + pos += el_size, ++idx) + { + for (unsigned i = old_padding_len; i < new_padding_len; i++) + { + HOST_WIDE_INT pp + = pos + pc->m_padding[i].first - total_offset; + HOST_WIDE_INT psz = pc->m_padding[i].second; + pc->m_padding.safe_push (std::make_pair (pp, psz)); + } + } + pc->m_data_until = total_offset + tree_to_shwi (TYPE_SIZE (type)); + } return true; } default: @@ -3540,28 +3652,12 @@ totally_scalarize_subtree (struct access *root) case ARRAY_TYPE: { tree elemtype = TREE_TYPE (root->type); - tree elem_size = TYPE_SIZE (elemtype); - gcc_assert (elem_size && tree_fits_shwi_p (elem_size)); - HOST_WIDE_INT el_size = tree_to_shwi (elem_size); - gcc_assert (el_size > 0); - - tree minidx = TYPE_MIN_VALUE (TYPE_DOMAIN (root->type)); - gcc_assert (TREE_CODE (minidx) == INTEGER_CST); - tree maxidx = TYPE_MAX_VALUE (TYPE_DOMAIN (root->type)); - /* Skip (some) zero-length arrays; others have MAXIDX == MINIDX - 1. */ - if (!maxidx) - goto out; - gcc_assert (TREE_CODE (maxidx) == INTEGER_CST); - tree domain = TYPE_DOMAIN (root->type); - /* MINIDX and MAXIDX are inclusive, and must be interpreted in - DOMAIN (e.g. signed int, whereas min/max may be size_int). */ - offset_int idx = wi::to_offset (minidx); - offset_int max = wi::to_offset (maxidx); - if (!TYPE_UNSIGNED (domain)) - { - idx = wi::sext (idx, TYPE_PRECISION (domain)); - max = wi::sext (max, TYPE_PRECISION (domain)); - } + HOST_WIDE_INT el_size; + offset_int idx, max; + if (!prepare_iteration_over_array_elts (root->type, &el_size, + &idx, &max)) + break; + for (HOST_WIDE_INT pos = root->offset; idx <= max; pos += el_size, ++idx) @@ -3587,7 +3683,8 @@ totally_scalarize_subtree (struct access *root) ? &last_seen_sibling->next_sibling : &root->first_child); tree nref = build4 (ARRAY_REF, elemtype, root->expr, - wide_int_to_tree (domain, idx), + wide_int_to_tree (TYPE_DOMAIN (root->type), + idx), NULL_TREE, NULL_TREE); struct access *new_child = create_total_access_and_reshape (root, pos, el_size, elemtype, @@ -3605,11 +3702,34 @@ totally_scalarize_subtree (struct access *root) default: gcc_unreachable (); } - - out: return true; } +/* Get the total total scalarization size limit in the current function. */ + +unsigned HOST_WIDE_INT +sra_get_max_scalarization_size (void) +{ + bool optimize_speed_p = !optimize_function_for_size_p (cfun); + /* If the user didn't set PARAM_SRA_MAX_SCALARIZATION_SIZE_<...>, + fall back to a target default. */ + unsigned HOST_WIDE_INT max_scalarization_size + = get_move_ratio (optimize_speed_p) * UNITS_PER_WORD; + + if (optimize_speed_p) + { + if (OPTION_SET_P (param_sra_max_scalarization_size_speed)) + max_scalarization_size = param_sra_max_scalarization_size_speed; + } + else + { + if (OPTION_SET_P (param_sra_max_scalarization_size_size)) + max_scalarization_size = param_sra_max_scalarization_size_size; + } + max_scalarization_size *= BITS_PER_UNIT; + return max_scalarization_size; +} + /* Go through all accesses collected throughout the (intraprocedural) analysis stage, exclude overlapping ones, identify representatives and build trees out of them, making decisions about scalarization on the way. Return true @@ -3637,24 +3757,8 @@ analyze_all_variable_accesses (void) propagate_all_subaccesses (); - bool optimize_speed_p = !optimize_function_for_size_p (cfun); - /* If the user didn't set PARAM_SRA_MAX_SCALARIZATION_SIZE_<...>, - fall back to a target default. */ unsigned HOST_WIDE_INT max_scalarization_size - = get_move_ratio (optimize_speed_p) * UNITS_PER_WORD; - - if (optimize_speed_p) - { - if (OPTION_SET_P (param_sra_max_scalarization_size_speed)) - max_scalarization_size = param_sra_max_scalarization_size_speed; - } - else - { - if (OPTION_SET_P (param_sra_max_scalarization_size_size)) - max_scalarization_size = param_sra_max_scalarization_size_size; - } - max_scalarization_size *= BITS_PER_UNIT; - + = sra_get_max_scalarization_size (); EXECUTE_IF_SET_IN_BITMAP (candidate_bitmap, 0, i, bi) if (bitmap_bit_p (should_scalarize_away_bitmap, i) && !bitmap_bit_p (cannot_scalarize_away_bitmap, i)) @@ -3679,7 +3783,9 @@ analyze_all_variable_accesses (void) access; access = access->next_grp) if (!can_totally_scalarize_forest_p (access) - || !scalarizable_type_p (access->type, constant_decl_p (var))) + || !totally_scalarizable_type_p (access->type, + constant_decl_p (var), + 0, nullptr)) { all_types_ok = false; break; @@ -5100,3 +5206,45 @@ make_pass_sra (gcc::context *ctxt) { return new pass_sra (ctxt); } + + +/* If type T cannot be totally scalarized, return false. Otherwise return true + and push to the vector within PC offsets and lengths of all padding in the + type as total scalarization would encounter it. */ + +static bool +check_ts_and_push_padding_to_vec (tree type, sra_padding_collecting *pc) +{ + if (!totally_scalarizable_type_p (type, true /* optimistic value */, + 0, pc)) + return false; + + pc->record_padding (tree_to_shwi (TYPE_SIZE (type))); + return true; +} + +/* Given two types in an assignment, return true either if any one cannot be + totally scalarized or if they have padding (i.e. not copied bits) */ + +bool +sra_total_scalarization_would_copy_same_data_p (tree t1, tree t2) +{ + sra_padding_collecting p1; + if (!check_ts_and_push_padding_to_vec (t1, &p1)) + return true; + + sra_padding_collecting p2; + if (!check_ts_and_push_padding_to_vec (t2, &p2)) + return true; + + unsigned l = p1.m_padding.length (); + if (l != p2.m_padding.length ()) + return false; + for (unsigned i = 0; i < l; i++) + if (p1.m_padding[i].first != p2.m_padding[i].first + || p1.m_padding[i].second != p2.m_padding[i].second) + return false; + + return true; +} + diff --git a/gcc/tree-sra.h b/gcc/tree-sra.h index 3a12870f7dfe..a4aab21e51f5 100644 --- a/gcc/tree-sra.h +++ b/gcc/tree-sra.h @@ -20,6 +20,9 @@ along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ bool type_internals_preclude_sra_p (tree type, const char **msg); +unsigned HOST_WIDE_INT sra_get_max_scalarization_size (void); +bool sra_total_scalarization_would_copy_same_data_p (tree t1, tree t2); + /* Return true iff TYPE is stdarg va_list type (which early SRA and IPA-SRA should leave alone). */ From f4f7c52472fa59993024e70848559d8bac2167ba Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Mon, 8 Apr 2024 18:22:52 +0000 Subject: [PATCH 429/551] Update gcc fr.po * fr.po: Update. --- gcc/po/fr.po | 1267 +++++++++++++++++++++----------------------------- 1 file changed, 536 insertions(+), 731 deletions(-) diff --git a/gcc/po/fr.po b/gcc/po/fr.po index 2dbfd3dc5914..77246f5241b1 100644 --- a/gcc/po/fr.po +++ b/gcc/po/fr.po @@ -100,7 +100,7 @@ msgstr "" "Project-Id-Version: gcc 14.1-b20240218\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2024-02-16 21:35+0000\n" -"PO-Revision-Date: 2024-03-16 16:53+0100\n" +"PO-Revision-Date: 2024-04-06 17:05+0200\n" "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" @@ -1113,7 +1113,7 @@ msgstr "Fixer l'accessibilité par défaut des entités du module à PRIVATE." #: fortran/lang.opt:721 #, no-c-format msgid "Handle OpenMP allocators for allocatables and pointers." -msgstr "" +msgstr "Gérer les allocateurs OpenMP pour les allouables et les pointeurs." #: fortran/lang.opt:725 #, no-c-format @@ -1310,7 +1310,7 @@ msgstr "-frust-crate=<name> Défini le nom de cageot (crate) pour la #: rust/lang.opt:67 #, no-c-format msgid "-frust-extern= Specify where an external library is located" -msgstr "" +msgstr "-ftruxt-extern= Spécifier où une bibliothèque externe est placée" #: rust/lang.opt:71 #, no-c-format @@ -1550,7 +1550,7 @@ msgstr "Avertir lors de toute utilisation de alloca." #: c-family/c.opt:340 #, no-c-format msgid "Warn when allocating insufficient storage for the target type of the assigned pointer." -msgstr "" +msgstr "Avertir lors de l'allocation d'un stockage insuffisant pour le type cible du pointeur assigné." #: c-family/c.opt:344 #, no-c-format @@ -1907,7 +1907,7 @@ msgstr "Avertir à propos des violations des règles de style de Effective C++." #: c-family/c.opt:683 #, no-c-format msgid "Warn if an additional enum-base is used in an elaborated-type-specifier." -msgstr "" +msgstr "Avertir si une base enum additionnelle est utilisée dans un spécificateur de type élaboré." #: c-family/c.opt:687 #, no-c-format @@ -1957,7 +1957,7 @@ msgstr "Avertir à propos d'un point-virgule après la définition d'une fonctio #: c-family/c.opt:731 #, no-c-format msgid "Warn when a structure containing a C99 flexible array member as the last field is not at the end of another structure." -msgstr "" +msgstr "Avertir quand une structure contenant un membre tableau flexible du C99 comme dernier champ n'est pas à la fin d'une autre structure." #: c-family/c.opt:736 #, no-c-format @@ -2362,7 +2362,7 @@ msgstr "Avertir lorsque des initialiseurs sont outrepassés avec effets de bords #: c-family/c.opt:1129 #, no-c-format msgid "Warn if the named return value optimization is not performed although it is allowed." -msgstr "" +msgstr "Avertir si l'optimisation de la valeur de retour nommée n'est pas réalisée malgré que ce soit autorisé." #: c-family/c.opt:1133 #, no-c-format @@ -2473,7 +2473,7 @@ msgstr "Avertir quand un argument passé à un paramètre avec le spécificateur #: c-family/c.opt:1226 #, no-c-format msgid "Warn whenever void-returning functions return a non-void expressions, or a return expression is missing in a function not returning void." -msgstr "" +msgstr "Avertir quand une fonction ne retournant rien retourne une expression non vide ou qu'une expression de retour est manquante dans une fonction retournant quelque chose." #: c-family/c.opt:1230 #, no-c-format @@ -3075,7 +3075,7 @@ msgstr "Présumer que l'environnement d'exécution C est normal." #: c-family/c.opt:1915 #, no-c-format msgid "Implement P2564 for consteval propagation." -msgstr "" +msgstr "Implémenter P2564 pour la propagation de consteval." #: c-family/c.opt:1919 #, no-c-format @@ -4126,7 +4126,7 @@ msgstr "Lier la bibliothèque D standard dynamiquement pendant la compilation." #: m2/lang.opt:35 #, no-c-format msgid "turns on case statement label compile time checking when using an expression of an enum type." -msgstr "" +msgstr "activer la vérification à la compilation des étiquettes de l'instruction case lors de l'utilisation d'une expression d'un type énuméré." #: m2/lang.opt:39 #, no-c-format @@ -4151,12 +4151,12 @@ msgstr "vérification supplémentaire de la sémantique lors de la compilation, #: m2/lang.opt:55 #, no-c-format msgid "turns on compile time analysis in the first basic block of a procedure detecting access to uninitialized data." -msgstr "" +msgstr "activer l'analyse à la compilation dans le premier bloc de base d'une procédure détectant l'accès à une donnée non initialisée." #: m2/lang.opt:59 #, no-c-format msgid "turns on compile time analysis to detect access to uninitialized variables, the checking can be specified by: known,cond,all." -msgstr "" +msgstr "activer l'analyse à la compilation pour détecter l'accès à des variables non initialisées, la vérification peut être spécifiée par : known,cond,all." #: m2/lang.opt:63 #, no-c-format @@ -4171,7 +4171,7 @@ msgstr "activer la vérification à l'exécution des sous-plages, indexation de #: m2/lang.opt:71 #, no-c-format msgid "turns on runtime checking to check whether a CASE statement requires an ELSE clause when one was not specified" -msgstr "activer la vérification à l'exécution pour assurer qu'une instruction CASE requière une clause ELSE alors qu'aucune n'a été spécifiée" +msgstr "activer la vérification à l'exécution pour assurer qu'une instruction CASE requiert une clause ELSE alors qu'aucune n'a été spécifiée" #: m2/lang.opt:75 #, no-c-format @@ -4456,7 +4456,7 @@ msgstr "-fgo-embedcfg=<file>\tLister les fichiers embarqués via go:embed." #: go/lang.opt:66 #, no-c-format msgid "-fgo-importcfg=<file>\tProvide file that tells where to find imports." -msgstr "" +msgstr "-fgo-importcfg=<fichier>\tFournir le fichier indiquant où trouver les imports." #: go/lang.opt:70 #, no-c-format @@ -4541,22 +4541,22 @@ msgstr "La profondeur maximale des nœuds éclatés qui doivent apparaître dans #: analyzer/analyzer.opt:59 #, no-c-format msgid "The number of bytes at which to ellipsize string literals in analyzer text art diagrams." -msgstr "" +msgstr "Le nombre d'octets auquel raccourcir les littéraux de chaîne dans les diagrammes artistiques de texte de l'analyseur." #: analyzer/analyzer.opt:63 #, no-c-format msgid "The number of literal bytes to show at the head of a string literal in text art when ellipsizing it." -msgstr "" +msgstr "Le nombre d'octets littéraux à montrer au début d'un littéral chaîne dans le texte artistique avant qu'il soit raccourci." #: analyzer/analyzer.opt:67 #, no-c-format msgid "The number of literal bytes to show at the tail of a string literal in text art when ellipsizing it." -msgstr "" +msgstr "Le nombre d'octets littéraux à montrer à la fin d'un littéral chaîne dans le texte artistique avant qu'il soit raccourci." #: analyzer/analyzer.opt:71 #, no-c-format msgid "The ideal width in characters of text art diagrams generated by the analyzer." -msgstr "" +msgstr "La largeur idéale en caractères des diagrammes artistiques de texte générés par l'analyseur." #: analyzer/analyzer.opt:75 #, no-c-format @@ -4816,7 +4816,7 @@ msgstr "Restreindre l'analyseur à l'exécution du seul vérificateur nommé." #: analyzer/analyzer.opt:279 #, no-c-format msgid "Add extra annotations to diagrams." -msgstr "" +msgstr "Ajouter des annotations supplémentaires aux diagrammes." #: analyzer/analyzer.opt:283 #, no-c-format @@ -4856,7 +4856,7 @@ msgstr "Activer la transitivité des contraintes durant l'analyse." #: analyzer/analyzer.opt:311 #, no-c-format msgid "Show events within system headers in analyzer execution paths." -msgstr "" +msgstr "Montrer les événements dans les en-têtes systèmes des chemins d'exécution de l'analyseur." #: analyzer/analyzer.opt:315 #, no-c-format @@ -5919,7 +5919,7 @@ msgstr "-march=\tGénérer du code pour l'ISA RISC-V demandée (par ex. RV64IM). #: config/riscv/riscv.opt:91 #, no-c-format msgid "-march=help\tPrint supported -march extensions." -msgstr "" +msgstr "-march=help\tAfficher les extensions -march supportées." #: config/riscv/riscv.opt:103 config/mips/mips.opt:430 #, no-c-format @@ -6347,7 +6347,7 @@ msgstr "Activer l'approximation de la division. Activer cette option réduit la #: config/aarch64/aarch64.opt:254 #, no-c-format msgid "Specify when to enable an early register allocation pass. The possibilities are: all functions, functions that have access to strided multi-register instructions, and no functions." -msgstr "" +msgstr "Spécifier quand activer une étape d'allocation de registres précoce. Les possibilités sont : toutes les fonctions, les fonctions qui ont accès aux instructions multi-registres avec pas et aucune fonction." #: config/aarch64/aarch64.opt:260 #, no-c-format @@ -6372,12 +6372,12 @@ msgstr "Générer du code pour détecter quand le processeur pourrait spéculer #: config/aarch64/aarch64.opt:294 #, no-c-format msgid "Enable the copy of the AArch64 load/store pair fusion pass that runs before register allocation." -msgstr "" +msgstr "Activer la copie de la passe de fusion de paires load/store de AArch64 qui s'exécute avant l'allocation de registres." #: config/aarch64/aarch64.opt:299 #, no-c-format msgid "Enable the copy of the AArch64 load/store pair fusion pass that runs after register allocation." -msgstr "" +msgstr "Activer la copie de la passe de fusion de paires load/store de AArch64 qui s'exécute après l'allocation de registres." #: config/aarch64/aarch64.opt:318 #, no-c-format @@ -6397,7 +6397,7 @@ msgstr "Générer des appels locaux vers des opérations atomiques hors ligne." #: config/aarch64/aarch64.opt:337 #, no-c-format msgid "When vectorizing, consider using multiple different approaches and use the cost model to choose the cheapest one." -msgstr "" +msgstr "Lors de la vectorisation, prend en compte plusieurs approches différentes et utilise le modèle de coût pour choisir la moins onéreuse." #: config/aarch64/aarch64.opt:342 #, no-c-format @@ -6432,22 +6432,22 @@ msgstr "Limiter le nombre de fois qu'une boucle peut être dépliée par l'auto #: config/aarch64/aarch64.opt:372 #, no-c-format msgid "--param=aarch64-ldp-policy=[default|always|never|aligned] Fine-grained policy for load pairs." -msgstr "" +msgstr "--param=aarch64-ldp-policy=[default|always|never|aligned] Politique fine pour charger les paires." #: config/aarch64/aarch64.opt:376 #, no-c-format msgid "--param=aarch64-stp-policy=[default|always|never|aligned] Fine-grained policy for store pairs." -msgstr "" +msgstr "--param=aarch64-stp-policy=[default|always|never|aligned] Politique fine pour stocker les paires." #: config/aarch64/aarch64.opt:395 #, no-c-format msgid "Limit on number of alias checks performed when attempting to form an ldp/stp." -msgstr "" +msgstr "Limite sur le nombre de vérifications de synonymes réalisées en tentant de former un ldp/stp" #: config/aarch64/aarch64.opt:399 #, no-c-format msgid "Param to control which writeback opportunities we try to handle in the load/store pair fusion pass. A value of zero disables writeback handling. One means we try to form pairs involving one or more existing individual writeback accesses where possible. A value of two means we also try to opportunistically form writeback opportunities by folding in trailing destructive updates of the base register used by a pair." -msgstr "" +msgstr "Paramètre pour contrôler quelles opportunités d'écriture nous essayons de gérer dans l'étape de fusion des paires load/store. Une valeur de zéro désactive la gestion des écritures. Un signifie qu'on essaie de former des paires impliquant un ou plusieurs accès d'écriture individuels existants, si possible. Une valeur de deux signifie qu'on essaie aussi de former des écritures opportunistes en comprimant les mises à jours destructrices à la fin du registre de base utilisé par une paire." #: config/linux.opt:24 #, no-c-format @@ -7050,7 +7050,7 @@ msgstr "Placer les données relocalisées en lecture seule dans la section .data #: config/i386/mingw.opt:23 #, no-c-format msgid "Preprocess, compile or link with specified C RunTime DLL library." -msgstr "" +msgstr "Prétraite, compile ou édite les liens avec la bibliothèque DLL d'exécution du C spécifiée." #: config/i386/mingw.opt:33 #, no-c-format @@ -7402,7 +7402,7 @@ msgstr "Longueur de registre vectoriel préférée connue (à utiliser avec l'op #: config/i386/i386.opt:652 #, no-c-format msgid "Enable floating-point status flags setting SSE vector operations on partial vectors." -msgstr "" +msgstr "Activer les fanions de statut en virgule flottante définissant les opérations des vecteurs SSE sur des vecteurs partiels." #: config/i386/i386.opt:656 #, no-c-format @@ -8589,12 +8589,12 @@ msgstr "Lors d'un accès à la RAM, utiliser X comme imposé par le matériel, c #: config/avr/avr.opt:99 #, no-c-format msgid "The device has the bitfield NVMCTRL_CTRLB.FLMAP. This option is used internally." -msgstr "" +msgstr "Le périphérique a le champ de bit NVMCTRL_CTRLB.FLMAP. Cette est option est utilisée en interne." #: config/avr/avr.opt:103 #, no-c-format msgid "The device has the .rodata section located in the RAM area." -msgstr "" +msgstr "Le périphérique a la section .rodata située dans la zone de la RAM." #: config/avr/avr.opt:108 #, no-c-format @@ -8934,7 +8934,7 @@ msgstr "Stocker tous les registres d'arguments sur la pile." #: config/s390/s390.opt:335 #, no-c-format msgid "Assume external symbols to be potentially unaligned. By default all symbols without explicit alignment are assumed to reside on a 2 byte boundary as mandated by the IBM Z ABI." -msgstr "" +msgstr "Suppose que les symboles externes sont potentiellement non alignés. Par défaut, tous les symboles sans alignement explicite sont supposer résider sur une frontière de 2 octets comme demandé par l'ABI IBM Z." #: config/rl78/rl78.opt:27 config/rx/elf.opt:26 config/csky/csky.opt:198 #, no-c-format @@ -13463,7 +13463,7 @@ msgstr "Activer les opcodes ENTER_S et LEAVE_S pour ARCv2." #: config/vxworks-smp.opt:25 #, no-c-format msgid "Select VxWorks SMP C runtimes for linking." -msgstr "" +msgstr "Sélectionner les exécutables WxWorks SMP C pour l'édition de liens." #: lto/lang.opt:50 #, no-c-format @@ -13723,7 +13723,7 @@ msgstr "Avertir lors d'une tentative de libérer un objet qui n'est pas sur le t #: common.opt:639 #, no-c-format msgid "Warn when -fhardened did not enable an option from its set." -msgstr "" +msgstr "Avertir quand -fhardened n'a pas activé une option de son ensemble." #: common.opt:650 #, no-c-format @@ -14208,7 +14208,7 @@ msgstr "Effectuer une étape d'optimisation par propagation des copies des regis #: common.opt:1263 #, no-c-format msgid "Fold instructions calculating memory offsets to the memory access instruction if possible." -msgstr "" +msgstr "Replier les instructions calculant les décalages mémoire à l'instruction de l'accès mémoire quand c'est possible." #: common.opt:1267 #, no-c-format @@ -14398,7 +14398,7 @@ msgstr "Montrer les profondeurs des piles d'événements dans les chemins." #: common.opt:1525 #, no-c-format msgid "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tDetermine which characters to use in text arg diagrams." -msgstr "" +msgstr "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tDéterminer quels caractères utiliser dans les diagrammes artistiques texte." #: common.opt:1544 #, no-c-format @@ -14664,7 +14664,7 @@ msgstr "Activer l'estimation des probabilités de branchement." #: common.opt:1834 #, no-c-format msgid "Enable various security-relevant flags." -msgstr "" +msgstr "Activer divers fanions pertinent pour la sécurité." #: common.opt:1838 #, no-c-format @@ -14769,7 +14769,7 @@ msgstr "Mettre en ligne les opérations __atomic quand une séquence d'instructi #: common.opt:1968 #, no-c-format msgid "-finline-stringops[=memcmp|memcpy|memmove|memset] Expand supported mem/str operations inline, even if against optimization." -msgstr "" +msgstr "-finline-stringops[=memcmp|memcpy|memmove|memset] Étendre les opérations en ligne mem/str supportées même si cela va à l'encontre de l'optimisation." #: common.opt:1999 #, no-c-format @@ -15737,7 +15737,7 @@ msgstr "Pour les cibles qui requièrent normalement des trampolines pour les fon #: common.opt:3016 #, no-c-format msgid "Whether trampolines are generated in executable memory rather than executable stack." -msgstr "" +msgstr "Est-ce que les trampolines sont générés dans la mémoire exécutable plutôt que dans la pile exécutable." #: common.opt:3034 #, no-c-format @@ -16472,7 +16472,7 @@ msgstr "Facteur d'échelle à appliquer au nombre d'expressions dans un chemin d #: params.opt:139 #, no-c-format msgid "Whether the target fully pipelines FMA instructions. If non-zero, reassociation considers the benefit of parallelizing FMA's multiplication part and addition part, assuming FMUL and FMA use the same units that can also do FADD." -msgstr "" +msgstr "Est-ce que la cible met complètement les instructions FMA dans un pipeline. Si non nul, la ré-association considère le bénéfice de paralléliser les parties de multiplication et les parties d'addition de FMA en supposant que FMUL et FMA utilisent la même unité qui peut aussi faire FADD." #: params.opt:146 #, no-c-format @@ -16527,12 +16527,12 @@ msgstr "Le nombre maximum de paramètres dans un SCoP." #: params.opt:186 #, no-c-format msgid "Maximum number of blocks for -fharden-control-flow-redundancy." -msgstr "" +msgstr "Nombre maximum de blocs pour -fharden-control-flow-redundancy." #: params.opt:190 #, no-c-format msgid "Maximum number of blocks for in-line -fharden-control-flow-redundancy." -msgstr "" +msgstr "Nombre maximum de blocs pour -fharden-control-flow-redundancy en ligne." #: params.opt:194 #, no-c-format @@ -22650,7 +22650,7 @@ msgstr "la méthode %s%s%s est marquée comme go:nointerface" #: rust/resolve/rust-ast-resolve-expr.cc:140 #, c-format msgid "You have broken GCC Rust. This is a feature.\n" -msgstr "" +msgstr "Vous avez cassé GCC Rust. C'est une fonctionnalité.\n" #: lto-streamer.h:1033 #, gcc-internal-format, gfc-internal-format @@ -23121,27 +23121,27 @@ msgstr "%<-msse5%> a été supprimé" #: config/i386/i386.opt:741 #, gcc-internal-format msgid "AVX512PF support will be removed in GCC 15" -msgstr "" +msgstr "Le support pour AVX512PF sera supprimé dans GCC 15" #: config/i386/i386.opt:745 #, gcc-internal-format msgid "AVX512ER support will be removed in GCC 15" -msgstr "" +msgstr "Le support pour AVX512ER sera supprimé dans GCC 15" #: config/i386/i386.opt:773 #, gcc-internal-format msgid "AVX5124FMAPS support will be removed in GCC 15" -msgstr "" +msgstr "Le support pour AVX5124FMAPS sera supprimé dans GCC 15" #: config/i386/i386.opt:777 #, gcc-internal-format msgid "AVX5124VNNIW support will be removed in GCC 15" -msgstr "" +msgstr "Le support pour AVX5124VNNIW sera supprimé dans GCC 15" #: config/i386/i386.opt:972 #, gcc-internal-format msgid "PREFETCHWT1 support will be removed in GCC 15" -msgstr "" +msgstr "Le support pour PREFETCHWT1 sera supprimé dans GCC 15" #: config/i386/i386.opt:1286 #, gcc-internal-format @@ -23229,7 +23229,7 @@ msgstr "Niveau de réutilisation de la pile %qs inconnu" #: common.opt:1972 #, gcc-internal-format msgid "unavailable stringop for inlining %qs" -msgstr "" +msgstr "stringop non disponible pour mettre en ligne %qs" #: common.opt:2003 #, gcc-internal-format @@ -25626,7 +25626,7 @@ msgstr "%qs est une option inconnue de %<-save-temps%>" #: gcc.cc:5024 #, gcc-internal-format msgid "linker hardening options not enabled by %<-fhardened%> because other link options were specified on the command line" -msgstr "" +msgstr "les options de renforcement de l'éditeur de liens ne sont pas activées par %<-fhardened%> car d'autres options de l'éditeur de liens ont été spécifiées sur la ligne de commande" #: gcc.cc:5048 toplev.cc:712 #, gcc-internal-format @@ -26178,17 +26178,17 @@ msgstr "%s n'est pas supporté sur cette cible" #: gimple-harden-control-flow.cc:97 #, gcc-internal-format msgid "%qD calls %<setjmp%> or similar, %<-fharden-control-flow-redundancy%> is not supported" -msgstr "" +msgstr "%qD appelle %<setjmp%> ou similaire, %<-fharden-control-flow-redundancy%> n'est pas supporté" #: gimple-harden-control-flow.cc:110 #, gcc-internal-format msgid "%qD receives nonlocal gotos, %<-fharden-control-flow-redundancy%> is not supported" -msgstr "" +msgstr "%qD reçoit des gotos non locaux, %<-fharden-control-flow-redundancy%> n'est pas supporté" #: gimple-harden-control-flow.cc:121 #, gcc-internal-format msgid "%qD has more than %u blocks, the requested maximum for %<-fharden-control-flow-redundancy%>" -msgstr "" +msgstr "%qD a plus de %u blocs, le maximum demandé pour %<-fharden-control-flow-redundancy%>" #: gimple-ssa-isolate-paths.cc:290 #, gcc-internal-format @@ -29695,12 +29695,12 @@ msgstr "les ancres de sections doivent être désactivées quand la réorganisat #: opts.cc:1105 #, gcc-internal-format msgid "%<-ftrivial-auto-var-init=zero%> is not enabled by %<-fhardened%> because it was specified on the command line" -msgstr "" +msgstr "%<-ftrivial-auto-var-init=zero%> n'est pas activé par %<-fhardened%> car il a été spécifié sur la ligne de commande" #: opts.cc:1155 #, gcc-internal-format msgid "%<-fstack-protector-strong%> is not enabled by %<-fhardened%> because it was specified on the command line" -msgstr "" +msgstr "%<-fstack-protector-strong%> n'est pas activé par %<-fhardened%> car il a été spécifié sur la ligne de commande" #: opts.cc:1200 #, gcc-internal-format @@ -35651,7 +35651,7 @@ msgstr "deux variables d'itération extérieurs %qD et %qD sont utilisées dans #: c-family/c-omp.cc:1810 #, gcc-internal-format msgid "variable %qD used %s is bound in intervening code" -msgstr "" +msgstr "la variable %qD utilisée %s est liée dans du code intervenant" #: c-family/c-omp.cc:2409 #, gcc-internal-format @@ -35712,7 +35712,7 @@ msgstr "utilisation de l'option %<-I-%> obsolète, veuillez utiliser %<-iquote%> #: c-family/c-opts.cc:373 #, gcc-internal-format msgid "%<-fdeps-format=%> unknown format %<%s%>" -msgstr "" +msgstr "%<-fdeps-format=%> format %<%s%> inconnu" #: c-family/c-opts.cc:455 #, gcc-internal-format @@ -35787,7 +35787,7 @@ msgstr "les fonctions d'initialisation TLS externes ne sont pas supportées sur #: c-family/c-opts.cc:1149 #, gcc-internal-format msgid "%<-fconcepts-ts%> is deprecated and will be removed in GCC 15; please convert your code to C++20 concepts" -msgstr "" +msgstr "%<-fconcepts-ts%> est déprécié et sera retiré dans GCC 15 ; veuillez convertir votre code vers les concepts C++20" #: c-family/c-opts.cc:1158 #, gcc-internal-format @@ -35812,7 +35812,7 @@ msgstr "ouverture du fichier de dépendances %s: %m" #: c-family/c-opts.cc:1381 #, gcc-internal-format msgid "%<-MF%> and %<-fdeps-file=%> cannot share an output file %s: %m" -msgstr "" +msgstr "%<-MF%> et %<-fdeps-file=%> ne peuvent pas partager un fichier de sortie %s : %m" #: c-family/c-opts.cc:1391 #, gcc-internal-format @@ -35847,17 +35847,17 @@ msgstr "%<-fdirectives-only%> est incompatible avec %<-traditional%>" #: c-family/c-opts.cc:1634 #, gcc-internal-format msgid "%<_FORTIFY_SOURCE%> is not enabled by %<-fhardened%> because optimizations are turned off" -msgstr "" +msgstr "%<_FORTIFY_SOURCE%> n'est pas activé par %<-fhardened%> car les optimisations sont désactivées" #: c-family/c-opts.cc:1638 #, gcc-internal-format msgid "%<_FORTIFY_SOURCE%> is not enabled by %<-fhardened%> because it was specified in %<-D%> or %<-U%>" -msgstr "" +msgstr "%<_FORTIFY_SOURCE%> n'est pas activé par %<-fhardened%> car il a été spécifié dans %<-D%> ou %<-U%>" #: c-family/c-opts.cc:1644 #, gcc-internal-format msgid "%<_GLIBCXX_ASSERTIONS%> is not enabled by %<-fhardened%> because it was specified in %<-D%> or %<-U%>" -msgstr "" +msgstr "%<_GLIBCXX_ASSERTIONS%> n'est pas activé par %<-fhardened%> car il a été spécifié dans %<-D%> ou %<-U%>" #: c-family/c-opts.cc:1768 #, gcc-internal-format @@ -40804,22 +40804,22 @@ msgstr "%<target(\"tune=x86-64\")%> est déprécié; utilisez plutôt %<target(\ #: config/i386/i386-options.cc:2104 #, gcc-internal-format msgid "%<-mtune=knl%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<-mtune=knl%> sera retiré dans GCC 15" #: config/i386/i386-options.cc:2105 #, gcc-internal-format msgid "%<target(\"tune=knl\")%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<target(\"tune=knl\")%> sera retiré dans GCC 15" #: config/i386/i386-options.cc:2110 #, gcc-internal-format msgid "%<-mtune=knm%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<-mtune=knm%> sera retiré dans GCC 15" #: config/i386/i386-options.cc:2111 #, gcc-internal-format msgid "%<target(\"tune=knm\")%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<target(\"tune=knm\")%> sera retiré dans GCC 15" #. rep; movq isn't available in 32-bit code. #: config/i386/i386-options.cc:2138 @@ -40875,7 +40875,7 @@ msgstr "%<-mabi=%s%> n'est pas supportée avec %<-fsanitize=thread%>" #: config/i386/i386-options.cc:2196 #, gcc-internal-format msgid "%<-mlam=u48%> is not compatible with Hardware-assisted AddressSanitizer, override to %<-mlam=u57%>" -msgstr "" +msgstr "%<-mlam=u48%> n'est pas compatible avec le Hardware-assisted AddressSanitizer, outrepasser pour %<-mlam=u57%>" #: config/i386/i386-options.cc:2216 config/i386/i386-options.cc:2225 #: config/i386/i386-options.cc:2237 config/i386/i386-options.cc:2248 @@ -40927,22 +40927,22 @@ msgstr "le processeur sélectionné ne supporte pas le jeu d'instructions x86-64 #: config/i386/i386-options.cc:2327 #, gcc-internal-format msgid "%<-march=knl%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<-march=knl%> sera retiré dans GCC 15" #: config/i386/i386-options.cc:2328 #, gcc-internal-format msgid "%<target(\"arch=knl\")%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<target(\"arch=knl\")%> sera retiré dans GCC 15" #: config/i386/i386-options.cc:2333 #, gcc-internal-format msgid "%<-march=knm%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<-march=knm%> sera retiré dans GCC 15" #: config/i386/i386-options.cc:2334 #, gcc-internal-format msgid "%<target(\"arch=knm\")%> support will be removed in GCC 15" -msgstr "" +msgstr "le support de %<target(\"arch=knm\")%> sera retiré dans GCC 15" #: config/i386/i386-options.cc:2411 #, gcc-internal-format @@ -41037,7 +41037,7 @@ msgstr "%<target(\"rtd\")%> est ignoré en mode 64 bits" #: config/i386/i386-options.cc:2676 #, gcc-internal-format msgid "%<-mno-evex512%> or %<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10.1-512 is available" -msgstr "" +msgstr "%<-mno-evex512%> ou %<-mno-avx512XXX%> ne peuvent pas désactiver les instructions AVX10 quand AVX10.1-512 est disponible" #. We should not emit 512 bit instructions under AVX10.1-256 #. when EVEX512 is enabled w/o any AVX512 features enabled. @@ -41045,22 +41045,22 @@ msgstr "" #: config/i386/i386-options.cc:2690 #, gcc-internal-format msgid "Using %<-mevex512%> without any AVX512 features enabled together with AVX10.1 only will not enable any AVX512 or AVX10.1-512 features, using 256 as max vector size" -msgstr "" +msgstr "Utiliser %<-mevex512%> sans fonctionnalités AVX512 activée mais avec AVX10.1 va simplement ne pas activer les fonctionnalités AVX512 ou AVX10.1-512, utilise 256 comme taille vectorielle max" #: config/i386/i386-options.cc:2697 config/i386/i386-options.cc:2703 #, gcc-internal-format msgid "Vector size conflicts between AVX10.1 and AVX512, using 512 as max vector size" -msgstr "" +msgstr "Conflit de taille vectorielle entre AVX10.1 et AVX512, utilise 512 comme taille vectorielle max" #: config/i386/i386-options.cc:2711 #, gcc-internal-format msgid "%<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10 is available" -msgstr "" +msgstr "%<-mno-avx512XXX%> ne sait pas désactiver les instructions AVX10 quand AVX10 est disponible" #: config/i386/i386-options.cc:2721 #, gcc-internal-format msgid "%<-mno-avx10.1, -mno-avx10.1-256, -mno-avx10.1-512%> cannot disable AVX512 instructions when %<-mavx512XXX%>" -msgstr "" +msgstr "%<-mno-avx10.1, -mno-avx10.1-256, -mno-avx10.1-512%> ne sait pas désactiver les instructions AVX512 quand %<-mavx512XXX%>" #: config/i386/i386-options.cc:2776 #, gcc-internal-format @@ -41165,7 +41165,7 @@ msgstr "%qs n'est pas un registre de base valable dans %<-mstack-protector-guard #: config/i386/i386-options.cc:3245 #, gcc-internal-format msgid "%<-fcf-protection=full%> is not enabled by %<-fhardened%> because it was specified on the command line" -msgstr "" +msgstr "%<-fcf-protection=full%> n'est pas activé par %<-fhardened%> car il a été spécifié sur la ligne de commande" #: config/i386/i386-options.cc:3254 #, gcc-internal-format @@ -45004,7 +45004,7 @@ msgstr "saut dans la portée de l'identificateur avec un type modifié par une v #: c/c-decl.cc:4093 #, gcc-internal-format msgid "jump skips OpenMP %<allocate%> allocation" -msgstr "" +msgstr "le saut passe outre l'allocation OpenMP %<allocate%>" #: c/c-decl.cc:4096 #, gcc-internal-format @@ -47169,7 +47169,7 @@ msgstr "des accolades explicites sont suggérées pour éviter toute ambiguïté #: c/c-parser.cc:8122 c/c-parser.cc:8187 c/c-parser.cc:8306 cp/parser.cc:14614 #, gcc-internal-format msgid "loop not permitted in intervening code in OpenMP loop body" -msgstr "" +msgstr "boucle par permise dans le code intervenant dans le corps d'une boucle OpenMP" #: c/c-parser.cc:8195 #, gcc-internal-format @@ -47654,7 +47654,7 @@ msgstr "la fonction de valeur absolue %qD reçoit un argument de type %qT mais e #: c/c-parser.cc:12606 cp/parser.cc:8164 #, gcc-internal-format msgid "calls to the OpenMP runtime API are not permitted in intervening code" -msgstr "" +msgstr "les appels à l'API d'exécution de OpenMP ne sont pas permises dans du code intervenant" #: c/c-parser.cc:12980 #, gcc-internal-format @@ -47734,7 +47734,7 @@ msgstr "%<#pragma GCC unroll%> requiert une expression d'affectation qui est év #: c/c-parser.cc:14470 cp/parser.cc:50733 #, gcc-internal-format msgid "intervening code must not contain OpenMP directives" -msgstr "" +msgstr "du code intervenant ne peut pas contenir des directives OpenMP" #: c/c-parser.cc:14490 c/c-parser.cc:23558 c/c-parser.cc:23867 #: c/c-parser.cc:23930 c/c-parser.cc:24040 cp/parser.cc:46383 @@ -48214,7 +48214,7 @@ msgstr "%<#pragma acc %s data%> n'a pas clause de mouvement de données" #: c/c-parser.cc:20109 cp/parser.cc:47244 #, gcc-internal-format msgid "%<host_data%> construct requires %<use_device%> clause" -msgstr "" +msgstr "la construction %<host_data%> requiert la clause %<use_device%>" #: c/c-parser.cc:20338 cp/parser.cc:3367 #, gcc-internal-format @@ -48998,10 +48998,9 @@ msgid "function return types not compatible due to %<volatile%>" msgstr "les types retournés par les fonctions ne sont pas compatibles en raison de %<volatile%>" #: c/c-typeck.cc:1905 -#, fuzzy, gcc-internal-format -#| msgid "converting an array compound literal to a pointer is ill-formed in C++" +#, gcc-internal-format msgid "converting an array compound literal to a pointer leads to a dangling pointer in C++" -msgstr "convertir un tableau de littéraux composés en un pointeur est mal formé en C++" +msgstr "convertir un tableau de littéraux composés en un pointeur conduit à un pointeur ballant en C++" #: c/c-typeck.cc:2599 c/c-typeck.cc:9852 #, gcc-internal-format @@ -49377,10 +49376,9 @@ msgid "pointer to array loses qualifier in conditional expression" msgstr "le pointeur vers le tableau perd le qualificatif dans l'expression conditionnelle" #: c/c-typeck.cc:5665 -#, fuzzy, gcc-internal-format -#| msgid "pointer to array loses qualifier in conditional expression in ISO C before C2X" +#, gcc-internal-format msgid "pointer to array loses qualifier in conditional expression in ISO C before C23" -msgstr "le pointeur vers le tableau perd le qualificatif dans l'expression conditionnelle dans le C ISO avant C2X" +msgstr "le pointeur vers le tableau perd le qualificatif dans l'expression conditionnelle dans le C ISO avant C23" #: c/c-typeck.cc:5670 #, gcc-internal-format @@ -49393,16 +49391,14 @@ msgid "pointer type mismatch in conditional expression" msgstr "non concordance de type de pointeurs dans une expression conditionnelle" #: c/c-typeck.cc:5695 -#, fuzzy, gcc-internal-format -#| msgid "Expected expression type" +#, gcc-internal-format msgid "first expression has type %qT" -msgstr "Type d'expression attendue" +msgstr "la première expression a le type %qT" #: c/c-typeck.cc:5696 -#, fuzzy, gcc-internal-format -#| msgid "Expected expression type" +#, gcc-internal-format msgid "second expression has type %qT" -msgstr "Type d'expression attendue" +msgstr "la seconde expression a le type %qT" #: c/c-typeck.cc:5707 c/c-typeck.cc:5720 #, gcc-internal-format @@ -49478,10 +49474,9 @@ msgid "ISO C forbids casting nonscalar to the same type" msgstr "le C ISO interdit le transtypage d'un type non scalaire vers lui-même" #: c/c-typeck.cc:6199 -#, fuzzy, gcc-internal-format -#| msgid "useless cast to type %q#T" +#, gcc-internal-format msgid "useless cast to type %qT" -msgstr "transtypage inutile vers le type %q#T" +msgstr "transtypage inutile vers le type %qT" #: c/c-typeck.cc:6219 #, gcc-internal-format @@ -49741,10 +49736,9 @@ msgid "ISO C forbids return between function pointer and %<void *%>" msgstr "le C ISO interdit le retour entre un pointeur de fonction et %<void *%>" #: c/c-typeck.cc:7769 -#, fuzzy, gcc-internal-format -#| msgid "array with qualifier on the element is not qualified before C2X" +#, gcc-internal-format msgid "array with qualifier on the element is not qualified before C23" -msgstr "un tableau avec un qualificatif sur l'élément n'est pas qualifié avant C2X" +msgstr "un tableau avec un qualificatif sur l'élément n'est pas qualifié avant C23" #: c/c-typeck.cc:7786 #, gcc-internal-format @@ -50033,10 +50027,9 @@ msgid "enum conversion in initialization is invalid in C++" msgstr "la conversion en enum durant l'initialisation est invalide en C++" #: c/c-typeck.cc:10834 -#, fuzzy, gcc-internal-format -#| msgid "excess elements in union initializer" +#, gcc-internal-format msgid "excess elements in %qT initializer" -msgstr "trop d'éléments dans l'initialisation de l'union" +msgstr "trop d'éléments dans l'initialisation %qT" #: c/c-typeck.cc:10846 c/c-typeck.cc:10923 #, gcc-internal-format @@ -50638,10 +50631,9 @@ msgstr "la section du tableau n'a pas un type pour lequel une correspondance peu #: c/c-typeck.cc:15565 c/c-typeck.cc:15641 c/c-typeck.cc:15677 #: cp/semantics.cc:8326 cp/semantics.cc:8405 cp/semantics.cc:8441 -#, fuzzy, gcc-internal-format -#| msgid "unsupported memory expression:" +#, gcc-internal-format msgid "unsupported map expression %qE" -msgstr "expression mémoire non supportée :" +msgstr "expression map %qE non supportée" #: c/c-typeck.cc:15605 c/c-typeck.cc:15782 cp/semantics.cc:8367 #: cp/semantics.cc:8585 @@ -50904,16 +50896,14 @@ msgid "invalid type of %<__MEM%> operand" msgstr "type invalide pour l'opérande de %<__MEM%>" #: c/gimple-parser.cc:1563 -#, fuzzy, gcc-internal-format -#| msgid "expected constant offset" +#, gcc-internal-format msgid "expected constant offset for %<__MEM%> operand" -msgstr "décalage constant attendu" +msgstr "décalage constant attendu pour l'opérande %<__MEM%>" #: c/gimple-parser.cc:1574 -#, fuzzy, gcc-internal-format -#| msgid "invalid type of %<__MEM%> operand" +#, gcc-internal-format msgid "expected constant step for %<__MEM%> operand" -msgstr "type invalide pour l'opérande de %<__MEM%>" +msgstr "pas constant attendu pour l'opérande de %<__MEM%>" #: c/gimple-parser.cc:1627 #, gcc-internal-format @@ -51050,10 +51040,9 @@ msgid "%s%#qD (near match)" msgstr "%s%#qD (concordance proche)" #: cp/call.cc:3954 -#, fuzzy, gcc-internal-format -#| msgid "%s%#qD (reversed)" +#, gcc-internal-format msgid "%s%#qD (ignored)" -msgstr "%s%#qD (inversé)" +msgstr "%s%#qD (ignoré)" #: cp/call.cc:3956 #, gcc-internal-format @@ -51114,7 +51103,7 @@ msgstr " un constructeur hérité n'est pas un candidat pour une initialisation #: cp/call.cc:4109 #, gcc-internal-format msgid "some candidates omitted; use %<-fdiagnostics-all-candidates%> to display them" -msgstr "" +msgstr "certains candidats ont été omis ; utilisez %<-fdiagnostics-all-candidates%> pour les afficher" #: cp/call.cc:4190 cp/call.cc:4735 #, gcc-internal-format @@ -51303,16 +51292,14 @@ msgid "enumerated mismatch in conditional expression: %qT vs %qT" msgstr "non concordance dans les énumérés de l'expression conditionnelle: %qT vs %qT" #: cp/call.cc:6263 -#, fuzzy, gcc-internal-format -#| msgid "conditional expression between enumeration type %qT and floating-point type %qT is deprecated" +#, gcc-internal-format msgid "conditional expression between enumeration type %qT and floating-point type %qT" -msgstr "l'expression conditionnelle entre le type énuméré %qT et le type en virgule flottante %qT est dépréciée" +msgstr "expression conditionnelle entre le type énuméré %qT et le type en virgule flottante %qT" #: cp/call.cc:6267 -#, fuzzy, gcc-internal-format -#| msgid "conditional expression between floating-point type %qT and enumeration type %qT is deprecated" +#, gcc-internal-format msgid "conditional expression between floating-point type %qT and enumeration type %qT" -msgstr "l'expression conditionnelle entre le type en virgule flottante %qT et le type énuméré %qT est dépréciée" +msgstr "expression conditionnelle entre le type en virgule flottante %qT et le type énuméré %qT" #: cp/call.cc:6271 #, gcc-internal-format @@ -51470,16 +51457,12 @@ msgid "converting to %qH from %qI requires direct-initialization" msgstr "la conversion vers %qH depuis %qI requiert une initialisation directe" #: cp/call.cc:8447 -#, fuzzy -#| msgid "converting to %qH from %qI with greater conversion rank" msgid "ISO C++ does not allow converting to %qH from %qI with greater conversion rank" -msgstr "conversion de %qH vers %qI avec un plus grand rang de conversion" +msgstr "le C++ ISO n'autorise pas la conversion vers %qH à partir de %qI avec un plus grand rang de conversion" #: cp/call.cc:8455 -#, fuzzy -#| msgid "converting to %qH from %qI with unordered conversion ranks" msgid "ISO C++ does not allow converting to %qH from %qI with unordered conversion rank" -msgstr "la conversion vers %qH depuis %qI avec des rangs de conversion pas ordonnés" +msgstr "le C++ ISO n'autorise pas la conversion vers %qH à partir de %qI avec des rangs de conversion pas ordonnés" #: cp/call.cc:8471 msgid "invalid user-defined conversion from %qH to %qI" @@ -51586,7 +51569,7 @@ msgstr "utilisation d'une fonction ayant plusieurs versions sans version par dé #: cp/call.cc:10002 #, gcc-internal-format msgid "use %<-fdiagnostics-all-candidates%> to display considered candidates" -msgstr "" +msgstr "utilisez %<-fdiagnostics-all-candidates%> pour afficher tous les candidats considérés" #: cp/call.cc:10125 #, gcc-internal-format @@ -51882,7 +51865,7 @@ msgstr "le temporaire a été détruit à la fin de l'expression complète %qE" #: cp/call.cc:14550 #, gcc-internal-format msgid "explicit conversion function was not considered" -msgstr "" +msgstr "la fonction de conversion explicite n'a pas été considérée" #: cp/class.cc:322 #, gcc-internal-format @@ -52175,7 +52158,7 @@ msgstr "membre pointeur %q+D déclaré ici" #: cp/class.cc:4316 #, gcc-internal-format msgid "layout of %qs member of type %qT changes in %qs" -msgstr "" +msgstr "la disposition du membre %qs du type %qT change dans %qs" #: cp/class.cc:4709 #, gcc-internal-format @@ -52409,16 +52392,14 @@ msgid "converting overloaded function %qD to type %q#T is ambiguous" msgstr "la conversion de la fonction surchargée %qD vers le type %q#T est ambiguë" #: cp/class.cc:8979 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say %<&%T::%D%>" +#, gcc-internal-format msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to explicit object member function." -msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre non statique non qualifié ou entre parenthèses pour former un pointeur vers une fonction membre. Utilisez %<&%T::%D%>" +msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre non statique non qualifié ou entre parenthèses pour former un pointeur vers une fonction membre d'un objet explicite." #: cp/class.cc:8984 -#, fuzzy, gcc-internal-format -#| msgid "(a pointer to member can only be formed with %<&%E%>)" +#, gcc-internal-format msgid "a pointer to explicit object member function can only be formed with %<&%E%>" -msgstr "(un pointeur vers un membre peut seulement être formé avec %<&%E%>)" +msgstr "un pointeur vers une fonction membre explicite peut seulement être formé avec %<&%E%>" #: cp/class.cc:8994 #, gcc-internal-format @@ -52525,7 +52506,7 @@ msgstr "%qD n'est pas utilisable comme une fonction %<constexpr%> car:" #: cp/constexpr.cc:1320 cp/constexpr.cc:6349 #, gcc-internal-format msgid "destroying %qE outside its lifetime" -msgstr "" +msgstr "destruction de %qE en dehors de sa durée de vie" #: cp/constexpr.cc:1611 cp/constexpr.cc:3308 #: rust/backend/rust-constexpr.cc:3326 rust/backend/rust-constexpr.cc:3589 @@ -52677,21 +52658,19 @@ msgid "%<constexpr%> evaluation depth exceeds maximum of %d (use %<-fconstexpr-d msgstr "la profondeur d'évaluation de la %<constexpr%> dépasse le maximum permis %d (utilisez %<-fconstexpr-depth=%> pour augmenter le maximum)" #: cp/constexpr.cc:3538 -#, fuzzy, gcc-internal-format -#| msgid "expression %qE is not a constant expression" +#, gcc-internal-format msgid "reference to %qD is not a constant expression" -msgstr "l'expression %qE n'est pas une expression constante" +msgstr "la référence vers %qD n'est pas une expression constante" #: cp/constexpr.cc:3541 -#, fuzzy, gcc-internal-format -#| msgid "%qE is not a constant expression" +#, gcc-internal-format msgid "pointer to %qD is not a constant expression" -msgstr "%qE n'est pas une expression constante" +msgstr "le pointeur vers %qD n'est pas une expression constante" #: cp/constexpr.cc:3547 #, gcc-internal-format msgid "address of non-static constexpr variable %qD may differ on each invocation of the enclosing function; add %<static%> to give it a constant address" -msgstr "" +msgstr "l'adresse de la variable constexpr non statique %qD peut différer entre chaque invocation de la fonction englobante ; ajoutez %<static%> pour lui donner une adresse constante" #: cp/constexpr.cc:3623 #, gcc-internal-format @@ -52867,10 +52846,9 @@ msgid "allocated here" msgstr "alloué ici" #: cp/constexpr.cc:5981 -#, fuzzy, gcc-internal-format -#| msgid "Access terminates outside of its parent" +#, gcc-internal-format msgid "accessing %qE outside its lifetime" -msgstr "L'accès se termine en dehors de son parent" +msgstr "accès à %qE en dehors de sa durée de vie" #: cp/constexpr.cc:6001 #, gcc-internal-format @@ -52913,44 +52891,39 @@ msgid "%qD does not have integral or enumeration type" msgstr "%qD n'a pas un type entier ou énuméré" #: cp/constexpr.cc:6342 -#, fuzzy, gcc-internal-format -#| msgid "use of allocated storage after deallocation in a constant expression" +#, gcc-internal-format msgid "modification of allocated storage after deallocation is not a constant expression" -msgstr "utilisation d'un stockage alloué après sa désallocation dans une expression constante" +msgstr "modifier un stockage alloué après désallocation n'est pas une expression constante" #: cp/constexpr.cc:6351 -#, fuzzy, gcc-internal-format -#| msgid "modification of %qE is not a constant expression" +#, gcc-internal-format msgid "modification of %qE outside its lifetime is not a constant expression" -msgstr "la modification de %qE n'est pas une expression constante" +msgstr "modifie %qE en dehors de sa durée de vie n'est pas une expression constante" #: cp/constexpr.cc:6358 -#, fuzzy, gcc-internal-format -#| msgid "size of array is not an integral constant-expression" +#, gcc-internal-format msgid "destroying %qE from outside current evaluation is not a constant expression" -msgstr "taille du tableau n'est pas une expression de constante de type entier" +msgstr "détruire %qE en dehors de l'évaluation courante n'est pas une expression constante" #: cp/constexpr.cc:6361 -#, fuzzy, gcc-internal-format -#| msgid "modification of %qE is not a constant expression" +#, gcc-internal-format msgid "modification of %qE from outside current evaluation is not a constant expression" -msgstr "la modification de %qE n'est pas une expression constante" +msgstr "la modification de %qE en dehors de l'évaluation courante n'est pas une expression constante" #: cp/constexpr.cc:6488 -#, fuzzy, gcc-internal-format -#| msgid "change of the active member of a union from %qD to %qD during initialization" +#, gcc-internal-format msgid "change of the active member of a union from %qD to %qD is not a constant expression before C++20" -msgstr "changement du membre actif d'une union de %qD à %qD durant l'initialisation" +msgstr "changement du membre actif d'une union de %qD à %qD n'est pas une expression constante avant C++20" #: cp/constexpr.cc:6517 #, gcc-internal-format msgid "%qD does not implicitly begin its lifetime because %qT does not have a non-deleted trivial default constructor, use %<std::construct_at%> instead" -msgstr "" +msgstr "%qD ne commence pas implicitement sa durée de vie car %qT n'a pas un constructeur par défaut trivial non supprimé, utilisez plutôt %<std::construct_at%>" #: cp/constexpr.cc:6524 #, gcc-internal-format msgid "initializing %qD requires a member access expression as the left operand of the assignment" -msgstr "" +msgstr "l'initialisation de %qD requiert une expression d'accès à un membre comme opérande de gauche dans l'assignement" #: cp/constexpr.cc:6536 rust/backend/rust-constexpr.cc:2822 #, gcc-internal-format @@ -53040,28 +53013,24 @@ msgid "conversion from pointer type %qT to arithmetic type %qT in a constant exp msgstr "conversion depuis le type pointeur %qT vers le type arithmétique %qT dans une expression constante" #: cp/constexpr.cc:8153 -#, fuzzy, gcc-internal-format -#| msgid "%qE is not a constant expression because it refers to mutable subobjects of %qT" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression because pointed-to type %qT is not similar to %qT" -msgstr "%qE n'est pas une expression constante car il fait référence aux sous-objets mutables de %qT" +msgstr "le transtypage de %qT n'est pas permis dans une expression constante car le type pointé %qT n'est pas similaire à %qT" #: cp/constexpr.cc:8160 -#, fuzzy, gcc-internal-format -#| msgid "pointer member %q+D declared here" +#, gcc-internal-format msgid "pointed-to object declared here" -msgstr "membre pointeur %q+D déclaré ici" +msgstr "l'objet pointé est déclaré ici" #: cp/constexpr.cc:8165 -#, fuzzy, gcc-internal-format -#| msgid "%qs is not a constant expression because %qT is a pointer to member type" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression because %qE does not point to an object" -msgstr "%qs n'est pas une expression constante car %qT est un type pointeur vers un membre" +msgstr "le transtypage depuis %qT n'est pas permis dans une expression constante car %qE ne pointe pas vers un objet" #: cp/constexpr.cc:8177 -#, fuzzy, gcc-internal-format -#| msgid "modifying a const object %qE is not allowed in a constant expression" +#, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression before C++26" -msgstr "la modification d'un objet constant %qE n'est pas permise dans une expression constante" +msgstr "le transtypage depuis %qT n'est pas autorisé dans une expression constante avant C++26" #: cp/constexpr.cc:8191 #, gcc-internal-format @@ -53135,10 +53104,9 @@ msgid "immediate evaluation returns address of immediate function %qD" msgstr "l'évaluation immédiate retourne l'adresse de la fonction immédiate %qD" #: cp/constexpr.cc:8913 -#, fuzzy, gcc-internal-format -#| msgid "immediate evaluation returns address of immediate function %qD" +#, gcc-internal-format msgid "constant evaluation returns address of immediate function %qD" -msgstr "l'évaluation immédiate retourne l'adresse de la fonction immédiate %qD" +msgstr "l'évaluation constante retourne l'adresse de la fonction immédiate %qD" #: cp/constexpr.cc:9551 rust/backend/rust-constexpr.cc:5667 #, gcc-internal-format @@ -53449,10 +53417,9 @@ msgid " %qT is not an aggregate" msgstr " %qT n'est pas un agrégat" #: cp/constraint.cc:3755 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an aggregate" +#, gcc-internal-format msgid " %qT is not an array" -msgstr " %qT n'est pas un agrégat" +msgstr " %qT n'est pas un tableau" #: cp/constraint.cc:3758 #, gcc-internal-format @@ -53465,10 +53432,9 @@ msgid " %qT is not a base of %qT" msgstr " %qT n'est pas une base de %qT" #: cp/constraint.cc:3764 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an aggregate" +#, gcc-internal-format msgid " %qT is not a bounded array" -msgstr " %qT n'est pas un agrégat" +msgstr " %qT n'est pas un tableau borné" #: cp/constraint.cc:3767 #, gcc-internal-format @@ -53506,10 +53472,9 @@ msgid " %qT is not a final class" msgstr " %qT n'est pas une classe finale" #: cp/constraint.cc:3788 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not a union" +#, gcc-internal-format msgid " %qT is not a function" -msgstr " %qT est une union" +msgstr " %qT n'est pas une fonction" #: cp/constraint.cc:3791 #, gcc-internal-format @@ -53522,22 +53487,19 @@ msgid " %qT is not a literal type" msgstr " %qT n'est pas un type littéral" #: cp/constraint.cc:3797 -#, fuzzy, gcc-internal-format -#| msgid "%qD is not a member template function" +#, gcc-internal-format msgid " %qT is not a member function pointer" -msgstr "%qD n'est pas une fonction patron membre" +msgstr " %qT n'est pas un pointeur vers une fonction membre" #: cp/constraint.cc:3800 -#, fuzzy, gcc-internal-format -#| msgid "%qT is not a member of %qT" +#, gcc-internal-format msgid " %qT is not a member object pointer" -msgstr "%qT n'est pas un membre de %qT" +msgstr " %qT n'est pas un pointeur vers un objet membre" #: cp/constraint.cc:3803 -#, fuzzy, gcc-internal-format -#| msgid "%qT is not a member of %qT" +#, gcc-internal-format msgid " %qT is not a member pointer" -msgstr "%qT n'est pas un membre de %qT" +msgstr " %qT n'est pas un pointeur membre" #: cp/constraint.cc:3806 #, gcc-internal-format @@ -53555,10 +53517,9 @@ msgid " %qT is not nothrow convertible from %qE" msgstr " %qT ne peut pas être converti avec %<nothrow%> à partir de %qE" #: cp/constraint.cc:3818 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not a POD type" +#, gcc-internal-format msgid " %qT is not an object type" -msgstr " %qT n'est pas un type simple (aussi appelé POD : Plain Old Data)" +msgstr " %qT n'est pas un type objet" #: cp/constraint.cc:3821 #, gcc-internal-format @@ -53576,10 +53537,9 @@ msgid " %qT is not a polymorphic type" msgstr " %qT n'est pas un type polymorphique" #: cp/constraint.cc:3831 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an enum" +#, gcc-internal-format msgid " %qT is not a reference" -msgstr " %qT n'est pas une énumération" +msgstr " %qT n'est pas une référence" #: cp/constraint.cc:3834 #, gcc-internal-format @@ -53587,10 +53547,9 @@ msgid " %qT is not the same as %qT" msgstr " %qT n'est pas le même que %qT" #: cp/constraint.cc:3837 -#, fuzzy, gcc-internal-format -#| msgid " %qT is not an enum" +#, gcc-internal-format msgid " %qT is not a scoped enum" -msgstr " %qT n'est pas une énumération" +msgstr " %qT n'est pas une énumération fortement typée" #: cp/constraint.cc:3840 #, gcc-internal-format @@ -53999,13 +53958,12 @@ msgstr "les deux branches de l'instruction %<if%> sont marquées comme %qs" #: cp/cp-gimplify.cc:536 #, gcc-internal-format msgid "%qD was promoted to an immediate function because its body contains an immediate-escalating expression %qE" -msgstr "" +msgstr "%qD a été promu en une fonction immédiate car son corps contient une expression %qE qui provoque la conversion en immédiat" #: cp/cp-gimplify.cc:539 -#, fuzzy, gcc-internal-format -#| msgid "%qD is not a template function" +#, gcc-internal-format msgid "%qD was promoted to an immediate function" -msgstr "%qD n'est pas un patron de fonction" +msgstr "%qD a été promu en une fonction immédiate" #: cp/cp-gimplify.cc:1164 #, gcc-internal-format @@ -54013,10 +53971,9 @@ msgid "taking address of an immediate function %qD" msgstr "prise de l'adresse d'une fonction immédiate %qD" #: cp/cp-gimplify.cc:1263 -#, fuzzy, gcc-internal-format -#| msgid "address of a call to %qs is not a constant expression" +#, gcc-internal-format msgid "call to consteval function %qE is not a constant expression" -msgstr "l'adresse d'un appel à %qs n'est pas une expression constante" +msgstr "l'appel à la fonction consteval %qE n'est pas une expression constante" #: cp/cp-gimplify.cc:2002 #, gcc-internal-format @@ -54640,51 +54597,44 @@ msgid "%q#D previously declared here" msgstr "%q#D précédemment déclaré ici" #: cp/decl.cc:2097 -#, fuzzy, gcc-internal-format -#| msgid "method declaration not in @interface context" +#, gcc-internal-format msgid "parameter declaration is not name-independent" -msgstr "la déclaration de la méthode n'est pas dans le contexte @interface" +msgstr "la déclaration du paramètre n'est pas indépendante du nom" #: cp/decl.cc:2102 -#, fuzzy, gcc-internal-format -#| msgid "structured binding declaration set but not used" +#, gcc-internal-format msgid "structured binding at namespace scope is not name-independent" -msgstr "déclaration de liaison structurée définie mais pas utilisée" +msgstr "la liaison structurée dans la portée de l'espace de nom n'est pas indépendante du nom" #: cp/decl.cc:2106 -#, fuzzy, gcc-internal-format -#| msgid "structured binding has incomplete type %qT" +#, gcc-internal-format msgid "static structured binding is not name-independent" -msgstr "la liaison structurée à le type incomplet %qT" +msgstr "la liaison structurée statique n'est pas indépendante du nom" #: cp/decl.cc:2110 -#, fuzzy, gcc-internal-format -#| msgid "structured binding has incomplete type %qT" +#, gcc-internal-format msgid "extern structured binding is not name-independent" -msgstr "la liaison structurée à le type incomplet %qT" +msgstr "la liaison structurée externe n'est pas indépendante du nom" #: cp/decl.cc:2117 -#, fuzzy, gcc-internal-format -#| msgid "static data member %qD in unnamed class" +#, gcc-internal-format msgid "static data member is not name-independent" -msgstr "membre de donnée statique %qD dans une classe sans nom" +msgstr "le membre de donnée statique n'est pas indépendant du nom" #: cp/decl.cc:2120 #, gcc-internal-format msgid "variable at namespace scope is not name-independent" -msgstr "" +msgstr "la variable dans la portée de l'espace de nom n'est pas indépendante du nom" #: cp/decl.cc:2123 -#, fuzzy, gcc-internal-format -#| msgid "%qs variable is not a pointer" +#, gcc-internal-format msgid "static variable is not name-independent" -msgstr "la variable %qs n'est pas un pointeur" +msgstr "la variable statique n'est pas indépendante du nom" #: cp/decl.cc:2126 -#, fuzzy, gcc-internal-format -#| msgid "environment variable %qs not defined" +#, gcc-internal-format msgid "extern variable is not name-independent" -msgstr "variable d'environnement %qs non définie" +msgstr "la variable externe n'est pas indépendante du nom" #: cp/decl.cc:2138 #, gcc-internal-format @@ -54732,17 +54682,15 @@ msgid "import declared %q#D here" msgstr "l'import a déclaré %q#D ici" #: cp/decl.cc:2306 cp/decl.cc:16628 -#, fuzzy, gcc-internal-format -#| msgid "conflicting exporting declaration %qD" +#, gcc-internal-format msgid "conflicting exporting for declaration %qD" -msgstr "export conflictuel de la déclaration %qD" +msgstr "export conflictuel pour la déclaration %qD" # la phrase fait référence à une variable ou une fonction (cf les deux messages ci-dessus) d'où le féminin #: cp/decl.cc:2308 cp/decl.cc:16630 -#, fuzzy, gcc-internal-format -#| msgid "previously declared here" +#, gcc-internal-format msgid "previously declared here without exporting" -msgstr "précédemment déclarée ici" +msgstr "précédemment déclarée ici sans export" #: cp/decl.cc:2335 #, gcc-internal-format @@ -54872,7 +54820,7 @@ msgstr "saut à l'étiquette du « case »" #: cp/decl.cc:3694 #, gcc-internal-format msgid " as a possible target of computed goto" -msgstr "" +msgstr " comme cible possible d'un goto calculé" #: cp/decl.cc:3696 #, gcc-internal-format @@ -54925,16 +54873,14 @@ msgid " enters %<consteval if%> statement" msgstr " entre dans l'instruction %<consteval if%>" #: cp/decl.cc:3829 cp/decl.cc:4003 -#, fuzzy, gcc-internal-format -#| msgid "ISO C99 does not support %qE" +#, gcc-internal-format msgid " does not destroy %qD" -msgstr "le C99 ISO ne supporte pas %qE" +msgstr " ne détruit pas %qD" #: cp/decl.cc:3831 cp/decl.cc:3986 -#, fuzzy, gcc-internal-format -#| msgid "%s does not take any feature options" +#, gcc-internal-format msgid " does not clean up handled exception" -msgstr "%s ne prend aucune option de fonctionnalité" +msgstr " ne nettoie pas l'exception traitée" #: cp/decl.cc:3922 #, gcc-internal-format @@ -55776,15 +55722,14 @@ msgid "constraints on a non-templated function" msgstr "contraintes sur une fonction sans patron" #: cp/decl.cc:10590 -#, fuzzy, gcc-internal-format -#| msgid "friend declaration not in class definition" +#, gcc-internal-format msgid "constrained non-template friend declaration must be a definition" -msgstr "la déclaration amie n'est pas dans la définition de la classe" +msgstr "la déclaration amie hors patron et contrainte doit être une définition" #: cp/decl.cc:10597 #, gcc-internal-format msgid "friend function template with constraints that depend on outer template parameters must be a definition" -msgstr "" +msgstr "le patron de la fonction amie avec des contraintes qui dépendent de paramètres extérieures au patron doit être une définition" #: cp/decl.cc:10646 #, gcc-internal-format @@ -55842,10 +55787,9 @@ msgid "static member function %qD cannot have cv-qualifier" msgstr "la fonction membre statique %qD ne peut pas avoir de qualificatif CV" #: cp/decl.cc:10818 -#, fuzzy, gcc-internal-format -#| msgid "static member function %qD cannot have cv-qualifier" +#, gcc-internal-format msgid "explicit object member function %qD cannot have cv-qualifier" -msgstr "la fonction membre statique %qD ne peut pas avoir de qualificatif CV" +msgstr "la fonction membre objet explicite %qD ne peut pas avoir de qualificatif CV" #: cp/decl.cc:10823 #, gcc-internal-format @@ -55858,16 +55802,14 @@ msgid "static member function %qD cannot have ref-qualifier" msgstr "la fonction membre statique %qD ne peut pas avoir de qualificatif de référence" #: cp/decl.cc:10826 -#, fuzzy, gcc-internal-format -#| msgid "static member function %qD cannot have ref-qualifier" +#, gcc-internal-format msgid "explicit object member function %qD cannot have ref-qualifier" -msgstr "la fonction membre statique %qD ne peut pas avoir de qualificatif de référence" +msgstr "la fonction membre objet explicite %qD ne peut pas avoir de qualificatif de référence" #: cp/decl.cc:10832 cp/decl.cc:13715 cp/decl.cc:13725 cp/parser.cc:11972 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "explicit object parameter declared here" -msgstr "le paramètre de patron %qD est déclaré ici" +msgstr "le paramètre objet explicite est déclaré ici" #: cp/decl.cc:10844 #, gcc-internal-format @@ -56452,50 +56394,44 @@ msgid "remove parentheses" msgstr "retirez les parenthèses" #: cp/decl.cc:13345 -#, fuzzy, gcc-internal-format -#| msgid "alias template deduction only available with %<-std=c++20%> or %<-std=gnu++20%>" +#, gcc-internal-format msgid "explicit object member function only available with %<-std=c++23%> or %<-std=gnu++23%>" -msgstr "la déduction du patron synonyme est uniquement disponible avec %<-std=c++20%> ou %<-std=gnu++20%>" +msgstr "la fonction membre objet explicite est uniquement disponible avec %<-std=c++23%> ou %<-std=gnu++23%>" #: cp/decl.cc:13359 -#, fuzzy, gcc-internal-format -#| msgid "Function %qs at %L cannot have an initializer" +#, gcc-internal-format msgid "a function type cannot have an explicit object parameter" -msgstr "La fonction %qs à %L ne peut pas avoir une initialisation" +msgstr "un type de fonction ne peut pas avoir de paramètre objet explicite" #: cp/decl.cc:13365 -#, fuzzy, gcc-internal-format -#| msgid "a conversion function cannot have a trailing return type" +#, gcc-internal-format msgid "a pointer to function type cannot have an explicit object parameter" -msgstr "une fonction de conversion ne peut pas avoir de type de retour à la fin" +msgstr "un pointeur vers un type de fonction ne peut pas avoir de paramètre d'objet explicite" #: cp/decl.cc:13369 -#, fuzzy, gcc-internal-format -#| msgid " member function type %qT is not a valid template argument" +#, gcc-internal-format msgid "a pointer to member function type cannot have an explicit object parameter" -msgstr " le type fonction membre %qT n'est pas un argument de patron valable" +msgstr "un pointer vers un type de fonction membre ne peut pas avoir de paramètre objet explicite" #: cp/decl.cc:13377 #, gcc-internal-format msgid "the type of a pointer to explicit object member function is a regular pointer to function type" -msgstr "" +msgstr "le type d'un pointeur vers une fonction membre d'objet explicite est un pointeur régulier vers un type de fonction" #: cp/decl.cc:13381 -#, fuzzy, gcc-internal-format -#| msgid "typedef may not be a member function definition" +#, gcc-internal-format msgid "the type of an explicit object member function is a regular function type" -msgstr "typedef ne peut pas être une définition de fonction membre" +msgstr "le type d'une fonction membre d'un objet explicite est un type de fonction régulier" #: cp/decl.cc:13402 #, gcc-internal-format msgid "only the first parameter of a member function can be declared as an explicit object parameter" -msgstr "" +msgstr "seul le premier paramètre d'une fonction membre peut être déclaré comme un paramètre objet explicite" #: cp/decl.cc:13407 -#, fuzzy, gcc-internal-format -#| msgid "template parameter %qD declared here" +#, gcc-internal-format msgid "valid explicit object parameter declared here" -msgstr "le paramètre de patron %qD est déclaré ici" +msgstr "le paramètre objet explicite valide est déclaré ici" #: cp/decl.cc:13411 #, gcc-internal-format @@ -56643,22 +56579,19 @@ msgid "friend function definition %qs cannot have a name qualified with %<%D::%> msgstr "la définition de la fonction amie %qs ne pas avoir son nom qualifié avec %<%D::%>" #: cp/decl.cc:13704 -#, fuzzy, gcc-internal-format -#| msgid "non-member function %qD cannot have cv-qualifier" +#, gcc-internal-format msgid "a non-member function cannot have an explicit object parameter" -msgstr "la fonction non membre %qD ne peut pas avoir de qualificatif CV" +msgstr "la fonction non membre ne peut pas avoir de paramètre objet explicite" #: cp/decl.cc:13712 -#, fuzzy, gcc-internal-format -#| msgid "implicit templates may not be %<virtual%>" +#, gcc-internal-format msgid "an explicit object member function cannot be %<virtual%>" -msgstr "les patrons implicites ne peuvent pas être %<virtual%>" +msgstr "une fonction membre d'objet explicite ne peut pas être %<virtual%>" #: cp/decl.cc:13722 -#, fuzzy, gcc-internal-format -#| msgid "structured binding declaration cannot be %<static%>" +#, gcc-internal-format msgid "an explicit object member function cannot be %<static%>" -msgstr "une déclaration de liaison structurée ne peut pas être %<static%>" +msgstr "une fonction membre d'objet explicite ne peut pas être %<static%>" #: cp/decl.cc:13748 #, gcc-internal-format @@ -57042,10 +56975,9 @@ msgid "storage class %<thread_local%> invalid for function %qs" msgstr "la classe de stockage %<thread_local%> est invalide pour la fonction %qs" #: cp/decl.cc:15015 -#, fuzzy, gcc-internal-format -#| msgid "alignment specified for function %qE" +#, gcc-internal-format msgid "%<constinit%> specifier invalid for function %qs" -msgstr "un alignement est spécifié pour la fonction %qE" +msgstr "le spécificateur %<constinit%> est invalide pour la fonction %qs" #: cp/decl.cc:15018 #, gcc-internal-format @@ -57424,8 +57356,7 @@ msgid "duplicate base type %qT invalid" msgstr "le type de base dupliqué %qT est invalide" #: cp/decl.cc:16969 -#, fuzzy, gcc-internal-format -#| msgid "cannot declare %qD in a different module" +#, gcc-internal-format msgid "cannot declare %qD in different module" msgstr "ne peut déclarer %qD dans un module différent" @@ -59353,10 +59284,9 @@ msgid "unknown header kind %qs" msgstr "type d'en-tête %qs inconnu" #: cp/name-lookup.cc:2856 cp/name-lookup.cc:3932 cp/name-lookup.cc:4029 -#, fuzzy, gcc-internal-format -#| msgid "alias template deduction only available with %<-std=c++20%> or %<-std=gnu++20%>" +#, gcc-internal-format msgid "name-independent declarations only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "la déduction du patron synonyme est uniquement disponible avec %<-std=c++20%> ou %<-std=gnu++20%>" +msgstr "la déclaration indépendante du nom est uniquement disponible avec %<-std=c++2c%> ou %<-std=gnu++2c%>" #: cp/name-lookup.cc:2887 #, gcc-internal-format @@ -59414,28 +59344,24 @@ msgid "%s %s %p %d" msgstr "%s %s %p %d" #: cp/name-lookup.cc:5101 -#, fuzzy, gcc-internal-format -#| msgid "%q#D does not have external linkage" +#, gcc-internal-format msgid "exporting %q#D that does not have external linkage" -msgstr "%q#D n'a pas un lien externe" +msgstr "export de %q#D qui n'a pas un lien externe" #: cp/name-lookup.cc:5106 -#, fuzzy, gcc-internal-format -#| msgid "%q#D declared here" +#, gcc-internal-format msgid "%q#D declared here with no linkage" -msgstr "%q#D déclaré ici" +msgstr "%q#D déclaré ici sans liaison" #: cp/name-lookup.cc:5109 -#, fuzzy, gcc-internal-format -#| msgid "%q#D does not have external linkage" +#, gcc-internal-format msgid "%q#D declared here with internal linkage" -msgstr "%q#D n'a pas un lien externe" +msgstr "%q#D déclaré ici avec un lien externe" #: cp/name-lookup.cc:5112 -#, fuzzy, gcc-internal-format -#| msgid "%q#D declared here" +#, gcc-internal-format msgid "%q#D declared here with module linkage" -msgstr "%q#D déclaré ici" +msgstr "%q#D déclaré ici avec une liaison de module" #: cp/name-lookup.cc:5877 #, gcc-internal-format @@ -59560,10 +59486,9 @@ msgid " %qE" msgstr " %qE" #: cp/name-lookup.cc:7085 -#, fuzzy, gcc-internal-format -#| msgid "%<std::%s%> is defined in header %qs; did you forget to %<#include %s%>?" +#, gcc-internal-format msgid "%<std::%s%> is defined in header %qs; this is probably fixable by adding %<#include %s%>" -msgstr "%<std::%s%> est défini dans l'en-tête %qs ; avez-vous oublié %<#include %s%> ?" +msgstr "%<std::%s%> est défini dans l'en-tête %qs ; cela peut probablement être corrigé en ajoutant %<#include %s%>" #: cp/name-lookup.cc:7091 #, gcc-internal-format @@ -60145,16 +60070,14 @@ msgid "%<~auto%> only available with %<-std=c++14%> or %<-std=gnu++14%>" msgstr "%<~auto%> est uniquement disponible avec %<-std=c++14%> ou %<-std=gnu++14%>" #: cp/parser.cc:6729 cp/parser.cc:6733 -#, fuzzy, gcc-internal-format -#| msgid "template-id not allowed for destructor" +#, gcc-internal-format msgid "template-id not allowed for destructor in C++20" -msgstr "template-id n'est pas permis pour un destructeur" +msgstr "template-id n'est pas permis pour un destructeur en C++20" #: cp/parser.cc:6735 cp/parser.cc:32577 -#, fuzzy, gcc-internal-format -#| msgid "remove parentheses" +#, gcc-internal-format msgid "remove the %qs" -msgstr "retirez les parenthèses" +msgstr "retirez le %qs" #: cp/parser.cc:6843 #, gcc-internal-format @@ -60247,15 +60170,14 @@ msgid "two consecutive %<[%> shall only introduce an attribute" msgstr "deux %<[%> consécutifs n'introduiront qu'un attribut" #: cp/parser.cc:8017 -#, fuzzy, gcc-internal-format -#| msgid "types may not be defined within %<__builtin_offsetof%>" +#, gcc-internal-format msgid "types may not be defined in %<__builtin_classify_type%> calls" -msgstr "des types ne peuvent pas être définis dans %<__builtin_offsetof%>" +msgstr "des types ne peuvent pas être définis dans des appels %<__builtin_classify_type%>" #: cp/parser.cc:8400 cp/parser.cc:8429 #, gcc-internal-format msgid "cannot use multidimensional subscript in OpenMP array section" -msgstr "" +msgstr "un indice multidimensionnel ne peut pas être utilisé dans une section de tableau OpenMP" #: cp/parser.cc:8687 cp/typeck.cc:3052 #, gcc-internal-format @@ -60360,7 +60282,7 @@ msgstr "des types ne peuvent pas être définis dans %<__builtin_offsetof%>" #: cp/parser.cc:11229 #, gcc-internal-format msgid "trailing argument to %<__type_pack_element%> is not a type" -msgstr "" +msgstr "le dernier argument de %<__type_pack_element%> n'est pas un type" #: cp/parser.cc:11329 #, gcc-internal-format @@ -60476,34 +60398,32 @@ msgstr "la déclaration d'un paramètre avant des spécificateurs de déclaratio #: cp/parser.cc:11932 cp/pt.cc:14718 #, gcc-internal-format msgid "a lambda with captures may not have an explicit object parameter of an unrelated type" -msgstr "" +msgstr "une lambda avec capture ne peut pas avoir un paramètre objet explicite d'un type sans rapport" #: cp/parser.cc:11945 -#, fuzzy, gcc-internal-format -#| msgid "%<static%> lambda specifier with lambda capture" +#, gcc-internal-format msgid "%<mutable%> lambda specifier with explicit object parameter" -msgstr "spécificateur de lambda %<static%> avec la capture lambda" +msgstr "spécificateur de lambda %<mutable%> avec un paramètre objet explicite" #: cp/parser.cc:11954 #, gcc-internal-format msgid "the passed in closure object will not be mutated because it is taken by value" -msgstr "" +msgstr "l'objet de fermeture passé ne sera pas muté car il est pris par valeur" #: cp/parser.cc:11958 #, gcc-internal-format msgid "declare the explicit object parameter as non-const reference instead" -msgstr "" +msgstr "déclarez plutôt le paramètre objet explicite comme une référence non constante" #: cp/parser.cc:11962 #, gcc-internal-format msgid "explicit object parameter is already a mutable reference" -msgstr "" +msgstr "le paramètre objet explicite est déjà une référence mutable" #: cp/parser.cc:11969 -#, fuzzy, gcc-internal-format -#| msgid "%<static%> lambda specifier with lambda capture" +#, gcc-internal-format msgid "%<static%> lambda specifier with explicit object parameter" -msgstr "spécificateur de lambda %<static%> avec la capture lambda" +msgstr "spécificateur de lambda %<static%> avec un paramètre objet explicite" #: cp/parser.cc:11987 #, gcc-internal-format @@ -60694,10 +60614,9 @@ msgid "expected jump-statement" msgstr "instruction de saut attendue" #: cp/parser.cc:15090 -#, fuzzy, gcc-internal-format -#| msgid "expected module-name" +#, gcc-internal-format msgid "expected module-partition" -msgstr "nom de module attendu" +msgstr "partition de module attendu" #: cp/parser.cc:15092 #, gcc-internal-format @@ -60743,7 +60662,7 @@ msgstr "la déclaration d'import doit être dans la portée globale" #: cp/parser.cc:15241 #, gcc-internal-format msgid "import specifying a module-partition must appear after a named module-declaration" -msgstr "" +msgstr "un import spécifiant une partition de module doit apparaître après une déclaration de module nommée" #: cp/parser.cc:15253 #, gcc-internal-format @@ -60841,10 +60760,9 @@ msgid "invalid initializer for structured binding declaration" msgstr "initialisation invalide pour la déclaration de liaison structurée" #: cp/parser.cc:16371 -#, fuzzy, gcc-internal-format -#| msgid "storage class specifiers invalid in parameter declarations" +#, gcc-internal-format msgid "%<this%> must be the first specifier in a parameter declaration" -msgstr "spécificateurs de classe de stockage invalides dans la déclaration des paramètres" +msgstr "%<this%> doit être le premier spécificateur dans la déclaration des paramètres" #: cp/parser.cc:16394 #, gcc-internal-format @@ -60932,10 +60850,9 @@ msgid "%<static_assert%> without a message only available with %<-std=c++17%> or msgstr "un %<static_assert%> sans message est uniquement disponible avec %<-std=c++17%> ou %<-std=gnu++17%>" #: cp/parser.cc:16974 -#, fuzzy, gcc-internal-format -#| msgid "%<static_assert%> without a message only available with %<-std=c++17%> or %<-std=gnu++17%>" +#, gcc-internal-format msgid "%<static_assert%> with non-string message only available with %<-std=c++2c%> or %<-std=gnu++2c%>" -msgstr "un %<static_assert%> sans message est uniquement disponible avec %<-std=c++17%> ou %<-std=gnu++17%>" +msgstr "un %<static_assert%> avec un message qui n'est pas une chaîne de caractères est uniquement disponible avec %<-std=c++2c%> ou %<-std=gnu++2c%>" #: cp/parser.cc:17172 #, gcc-internal-format @@ -61160,10 +61077,9 @@ msgid "use of %<auto%> in lambda parameter declaration only available with %<-st msgstr "l'utilisation de %<auto%> dans la déclaration d'un paramètre lambda est uniquement disponible avec %<-std=c++14%> ou %<-std=gnu++14%>" #: cp/parser.cc:20356 -#, fuzzy, gcc-internal-format -#| msgid "use of %<auto%> in parameter declaration only available with %<-fconcepts-ts%>" +#, gcc-internal-format msgid "use of %<auto%> in template argument only available with %<-fconcepts-ts%>" -msgstr "l'utilisation de %<auto%> dans une déclaration de paramètre est uniquement disponible avec %<-fconcepts-ts%>" +msgstr "l'utilisation de %<auto%> dans un argument de patron est uniquement disponible avec %<-fconcepts-ts%>" #: cp/parser.cc:20360 #, gcc-internal-format @@ -61258,7 +61174,7 @@ msgstr "les types ne peuvent pas être définis dans la base d'un enum" #: cp/parser.cc:21618 #, gcc-internal-format msgid "declaration of enumeration with fixed underlying type and no enumerator list is only permitted as a standalone declaration" -msgstr "" +msgstr "la déclaration d'une énumération sans type sous-jacent fixé et aucune liste d'énumération n'est permis que dans une déclaration autonome" #: cp/parser.cc:21622 #, gcc-internal-format @@ -61452,10 +61368,9 @@ msgid "%<asm%> qualifier outside of function body" msgstr "qualificatif %<asm%> en dehors du corps de la fonction" #: cp/parser.cc:22948 -#, fuzzy, gcc-internal-format -#| msgid "attribute ignored in declaration of %q#T" +#, gcc-internal-format msgid "attributes ignored on %<asm%> declaration" -msgstr "attribut ignoré dans la déclaration de %q#T" +msgstr "attributs ignorés dans la déclaration %<asm%>" #: cp/parser.cc:23035 #, gcc-internal-format @@ -61650,16 +61565,14 @@ msgid "types may not be defined in parameter types" msgstr "des types ne peuvent pas être définis dans des types de paramètres" #: cp/parser.cc:25732 -#, fuzzy, gcc-internal-format -#| msgid "storage class specifiers invalid in parameter declarations" +#, gcc-internal-format msgid "%<this%> specifier in template parameter declaration" -msgstr "spécificateurs de classe de stockage invalides dans la déclaration des paramètres" +msgstr "spécificateur %<this%> dans la déclaration des paramètres d'un patron" #: cp/parser.cc:25746 -#, fuzzy, gcc-internal-format -#| msgid "non-parameter %qs cannot be a parameter pack" +#, gcc-internal-format msgid "an explicit object parameter cannot be a function parameter pack" -msgstr "le non paramètre %qs ne peut pas être un paquet de paramètres" +msgstr "un paramètre objet explicite ne peut pas être un paquet de paramètres" #: cp/parser.cc:25838 #, gcc-internal-format @@ -61682,10 +61595,9 @@ msgid "parameter pack cannot have a default argument" msgstr "le paquet de paramètres ne peut pas avoir d'argument par défaut" #: cp/parser.cc:25887 -#, fuzzy, gcc-internal-format -#| msgid "template parameter pack cannot have a default argument" +#, gcc-internal-format msgid "an explicit object parameter may not have a default argument" -msgstr "le paquet de paramètres du patron ne peut pas avoir d'argument par défaut" +msgstr "un paramètre objet explicite ne peut pas avoir d'argument par défaut" #: cp/parser.cc:26011 #, gcc-internal-format @@ -61968,10 +61880,9 @@ msgid "expected attribute before %<...%>" msgstr "attribut attendu avant %<...%>" #: cp/parser.cc:30214 -#, fuzzy, gcc-internal-format -#| msgid "%qE attribute without arguments on a non-prototype" +#, gcc-internal-format msgid "attribute with no arguments contains no parameter packs" -msgstr "attribut %qE sans argument sur un non-prototype" +msgstr "un attribut sans argument ne contient aucun paquet de paramètres" #: cp/parser.cc:30260 #, gcc-internal-format @@ -62054,10 +61965,9 @@ msgid "too many template-parameter-lists" msgstr "trop de listes de paramètres pour le patron" #: cp/parser.cc:32576 -#, fuzzy, gcc-internal-format -#| msgid "template-id not allowed for destructor" +#, gcc-internal-format msgid "template-id not allowed for constructor in C++20" -msgstr "template-id n'est pas permis pour un destructeur" +msgstr "template-id n'est pas permis pour un constructeur en C++20" #: cp/parser.cc:32687 #, gcc-internal-format @@ -62470,10 +62380,9 @@ msgid "%<wait%> expression must be integral" msgstr "l'expression %<wait%> doit être un nombre entier" #: cp/parser.cc:39638 -#, fuzzy, gcc-internal-format -#| msgid "expected %<scalar%>, %<aggregate%> or %<pointer%>" +#, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<all%>" -msgstr "%<scalar%>, %<aggregate%> ou %<pointer%> attendu" +msgstr "%<scalar%>, %<aggregate%> ou %<all%> attendu" #: cp/parser.cc:40029 #, gcc-internal-format @@ -62611,10 +62520,9 @@ msgid "%<#pragma omp assumes%> may only be used at file or namespace scope" msgstr "%<#pragma omp assume%> peut uniquement être utilisé dans la portée du fichier ou de l'espace de noms" #: cp/parser.cc:51053 -#, fuzzy, gcc-internal-format -#| msgid "%<#pragma GCC ivdep%> must be inside a function" +#, gcc-internal-format msgid "%<#pragma GCC %s%> must be inside a function" -msgstr "%<#pragma GCC ivdep%> doit être à l'intérieur d'une fonction" +msgstr "%<#pragma GCC %s%> doit être à l'intérieur d'une fonction" #: cp/parser.cc:51195 #, gcc-internal-format @@ -64179,16 +64087,14 @@ msgid " since %q+#D declared in base class" msgstr " puisque %q+#D est déclaré dans la classe de base" #: cp/search.cc:2281 -#, fuzzy, gcc-internal-format -#| msgid "virtual function %q+D overriding final function" +#, gcc-internal-format msgid "explicit object member function overrides virtual function" -msgstr "la fonction virtuelle %q+D redéfini une fonction finale" +msgstr "la fonction membre d'objet explicite redéfini une fonction virtuelle" #: cp/search.cc:2284 -#, fuzzy, gcc-internal-format -#| msgid "resolver indirect function declared here" +#, gcc-internal-format msgid "virtual function declared here" -msgstr "fonction indirect du résolveur déclarée ici" +msgstr "fonction virtuelle déclarée ici" #: cp/semantics.cc:1109 #, gcc-internal-format @@ -64271,22 +64177,19 @@ msgid "arguments to destructor are not allowed" msgstr "le destructeur n'accepte pas d'argument" #: cp/semantics.cc:3175 -#, fuzzy, gcc-internal-format -#| msgid "%<this%> is unavailable for static member functions" +#, gcc-internal-format msgid "%<this%> is unavailable for explicit object member functions" -msgstr "%<this%> n'est pas disponible pour les fonctions membres statiques" +msgstr "%<this%> n'est pas disponible pour les fonctions membres d'objet explicite" #: cp/semantics.cc:3187 -#, fuzzy, gcc-internal-format -#| msgid "use the apostrophe directive %qs instead" +#, gcc-internal-format msgid "use explicit object parameter %qs instead" -msgstr "utilisez plutôt la directive apostrophe %qs" +msgstr "utilisez plutôt le paramètre objet explicite %qs" #: cp/semantics.cc:3191 -#, fuzzy, gcc-internal-format -#| msgid "invalid template non-type parameter" +#, gcc-internal-format msgid "name the explicit object parameter" -msgstr "le paramètre non type du patron est invalide" +msgstr "nom du paramètre objet explicite" #: cp/semantics.cc:3196 #, gcc-internal-format @@ -64445,21 +64348,19 @@ msgid "%qT is not an enumeration type" msgstr "%qT n'est pas un type énuméré" #: cp/semantics.cc:4650 -#, fuzzy, gcc-internal-format -#| msgid "requested alignment is not an integer constant" +#, gcc-internal-format msgid "%<__type_pack_element%> index is not an integral constant" -msgstr "l'alignement demandé n'est pas une constante entière" +msgstr "l'index %<__type_pack_element%> n'est pas une constante entière" #: cp/semantics.cc:4656 #, gcc-internal-format msgid "%<__type_pack_element%> index is negative" -msgstr "" +msgstr "l'index %<__type_pack_element%> est négatif" #: cp/semantics.cc:4662 -#, fuzzy, gcc-internal-format -#| msgid "Reference statement index out of range" +#, gcc-internal-format msgid "%<__type_pack_element%> index is out of range" -msgstr "L'index de l'instruction de référence est hors limites" +msgstr "l'index %<__type_pack_element%> est hors limites" #. Parameter packs can only be used in templates #: cp/semantics.cc:4785 @@ -64493,10 +64394,9 @@ msgid "%<offsetof%> within non-standard-layout type %qT is conditionally-support msgstr "l'utilisation de %<offsetof%> à l'intérieur du type %qT (qui ne respecte pas l'agencement standard) est supporté conditionnellement" #: cp/semantics.cc:6046 -#, fuzzy, gcc-internal-format -#| msgid "constructor priorities are not supported" +#, gcc-internal-format msgid "pointer-to-member mapping %qE not supported" -msgstr "les priorités des constructeurs ne sont pas supportées" +msgstr "la correspondance d'un pointeur vers un membre %qE n'est pas supportée" #: cp/semantics.cc:6240 #, gcc-internal-format @@ -64768,46 +64668,42 @@ msgstr "%<#pragma omp atomic update%> utilise deux expressions différentes pour #: cp/semantics.cc:11509 #, gcc-internal-format msgid "%<static_assert%> message must be a string literal or object with %<size%> and %<data%> members" -msgstr "" +msgstr "le message de %<static_assert%> doit être une chaîne littérale ou un objet avec les membres %<size%> et %<data%>" #: cp/semantics.cc:11525 #, gcc-internal-format msgid "%<static_assert%> message %<size()%> must be implicitly convertible to %<std::size_t%>" -msgstr "" +msgstr "le message de %<static_assert%> doit avoir une %<size()%> qui peut être implicitement convertie en %<std::size_t%>" #: cp/semantics.cc:11534 #, gcc-internal-format msgid "%<static_assert%> message %<data()%> must be implicitly convertible to %<const char*%>" -msgstr "" +msgstr "le message de %<static_assert%> doit avoir une %<data()%> qui peut être implicitement convertie en %<const char *%>" #: cp/semantics.cc:11592 -#, fuzzy, gcc-internal-format -#| msgid "%<hint%> expression must be constant integer expression" +#, gcc-internal-format msgid "%<static_assert%> message %<size()%> must be a constant expression" -msgstr "l'expression %<hint%> doit être une expression entière constante" +msgstr "le message de %<static_assert%> doit avoir une %<size()%> qui est une expression constante" #: cp/semantics.cc:11600 #, gcc-internal-format msgid "%<static_assert%> message %<size()%> %qE too large" -msgstr "" +msgstr "le message de %<static_assert%> a une %<size()%> %qE trop grande" #: cp/semantics.cc:11627 -#, fuzzy, gcc-internal-format -#| msgid "%<reinterpret_cast<%T>(%E)%> is not a constant expression" +#, gcc-internal-format msgid "%<static_assert%> message %<data()[%d]%> must be a constant expression" -msgstr "%<reinterpret_cast<%T>(%E)%> n'est pas une expression constante" +msgstr "le message de %<static_assert%> doit avoir une %<data()[%d]%> qui est une expression constante" #: cp/semantics.cc:11654 -#, fuzzy, gcc-internal-format -#| msgid "argument %d of %qE must be an integer constant expression" +#, gcc-internal-format msgid "%<static_assert%> message %<data()%> must be a core constant expression" -msgstr "l'argument %d de %qE doit être une expression constante entière" +msgstr "le message de %<static_assert%> doit avoir une %<data()%> qui est une expression constante du noyau" #: cp/semantics.cc:11680 -#, fuzzy, gcc-internal-format -#| msgid "static assertion failed: %s" +#, gcc-internal-format msgid "static assertion failed: %.*s" -msgstr "l'assertion statique a échoué: %s" +msgstr "l'assertion statique a échoué : %.*s" #: cp/semantics.cc:11688 #, gcc-internal-format @@ -65404,10 +65300,9 @@ msgid "the compiler can assume that the address of %qD will never be NULL" msgstr "le compilateur peut supposer que l'adresse de %qD ne sera jamais NULL" #: cp/typeck.cc:5055 -#, fuzzy, gcc-internal-format -#| msgid "bitwise operation between different enumeration types %qT and %qT is deprecated" +#, gcc-internal-format msgid "bitwise operation between different enumeration types %qT and %qT" -msgstr "l'opération au niveau des bits entre les types énumérés différents %qT et %qT est dépréciée" +msgstr "opération au niveau des bits entre les types énumérés différents %qT et %qT" #: cp/typeck.cc:5058 #, gcc-internal-format @@ -65415,10 +65310,9 @@ msgid "bitwise operation between different enumeration types %qT and %qT is depr msgstr "l'opération au niveau des bits entre les types énumérés différents %qT et %qT est dépréciée" #: cp/typeck.cc:5064 -#, fuzzy, gcc-internal-format -#| msgid "arithmetic between different enumeration types %qT and %qT is deprecated" +#, gcc-internal-format msgid "arithmetic between different enumeration types %qT and %qT" -msgstr "l'arithmétique entre des types énumérés différents %qT et %qT est dépréciée" +msgstr "arithmétique entre des types énumérés différents %qT et %qT" #: cp/typeck.cc:5067 #, gcc-internal-format @@ -65426,16 +65320,14 @@ msgid "arithmetic between different enumeration types %qT and %qT is deprecated" msgstr "l'arithmétique entre des types énumérés différents %qT et %qT est dépréciée" #: cp/typeck.cc:5104 -#, fuzzy, gcc-internal-format -#| msgid "comparison of enumeration type %qT with floating-point type %qT is deprecated" +#, gcc-internal-format msgid "comparison of enumeration type %qT with floating-point type %qT" -msgstr "la comparaison du type énuméré %qT avec le type en virgule flottante %qT est dépréciée" +msgstr "comparaison du type énuméré %qT avec le type en virgule flottante %qT" #: cp/typeck.cc:5107 -#, fuzzy, gcc-internal-format -#| msgid "comparison of floating-point type %qT with enumeration type %qT is deprecated" +#, gcc-internal-format msgid "comparison of floating-point type %qT with enumeration type %qT" -msgstr "la comparaison du type en virgule flottante %qT avec le type énuméré %qT est dépréciée" +msgstr "comparaison du type en virgule flottante %qT avec le type énuméré %qT" #: cp/typeck.cc:5110 #, gcc-internal-format @@ -65448,16 +65340,14 @@ msgid "comparison of floating-point type %qT with enumeration type %qT is deprec msgstr "la comparaison du type en virgule flottante %qT avec le type énuméré %qT est dépréciée" #: cp/typeck.cc:5123 -#, fuzzy, gcc-internal-format -#| msgid "arithmetic between enumeration type %qT and floating-point type %qT is deprecated" +#, gcc-internal-format msgid "arithmetic between enumeration type %qT and floating-point type %qT" -msgstr "l'arithmétique entre le type énuméré %qT et le type en virgule flottante %qT est déprécié" +msgstr "arithmétique entre le type énuméré %qT et le type en virgule flottante %qT" #: cp/typeck.cc:5126 -#, fuzzy, gcc-internal-format -#| msgid "arithmetic between floating-point type %qT and enumeration type %qT is deprecated" +#, gcc-internal-format msgid "arithmetic between floating-point type %qT and enumeration type %qT" -msgstr "l'arithmétique entre le type en virgule flottante %qT et le type énuméré %qT est déprécié" +msgstr "arithmétique entre le type en virgule flottante %qT et le type énuméré %qT" #: cp/typeck.cc:5129 #, gcc-internal-format @@ -65564,10 +65454,9 @@ msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre non statique non qualifié ou entre parenthèses pour former un pointeur vers une fonction membre. Utilisez %<&%T::%D%>" #: cp/typeck.cc:7154 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say %<&%T::%D%>" +#, gcc-internal-format msgid "ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to explicit object member function" -msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre non statique non qualifié ou entre parenthèses pour former un pointeur vers une fonction membre. Utilisez %<&%T::%D%>" +msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre non statique non qualifié ou entre parenthèses pour former un pointeur vers une fonction membre d'un objet explicite" #: cp/typeck.cc:7160 #, gcc-internal-format @@ -65575,16 +65464,14 @@ msgid "ISO C++ forbids taking the address of a bound member function to form a p msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre liée pour former un pointeur vers une fonction membre. Utilisez %<&%T::%D%>" #: cp/typeck.cc:7166 -#, fuzzy, gcc-internal-format -#| msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to member function. Say %<&%T::%D%>" +#, gcc-internal-format msgid "ISO C++ forbids taking the address of a bound member function to form a pointer to explicit object member function" -msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre liée pour former un pointeur vers une fonction membre. Utilisez %<&%T::%D%>" +msgstr "le C++ ISO interdit de prendre l'adresse d'une fonction membre liée pour former un pointeur vers une fonction membre d'un objet explicite" #: cp/typeck.cc:7171 -#, fuzzy, gcc-internal-format -#| msgid "(a pointer to member can only be formed with %<&%E%>)" +#, gcc-internal-format msgid "a pointer to explicit object member function can only be formed with %<&%T::%D%>" -msgstr "(un pointeur vers un membre peut seulement être formé avec %<&%E%>)" +msgstr "un pointeur vers une fonction membre d'un objet explicite peut seulement être formé avec %<&%T::%D%>" #. Make this a permerror because we used to accept it. #: cp/typeck.cc:7204 @@ -65924,10 +65811,9 @@ msgid "returning reference to temporary" msgstr "retourne une référence vers un temporaire" #: cp/typeck.cc:10633 -#, fuzzy, gcc-internal-format -#| msgid "returning reference to temporary" +#, gcc-internal-format msgid "returning pointer to temporary" -msgstr "retourne une référence vers un temporaire" +msgstr "retourne un pointeur vers un temporaire" #: cp/typeck.cc:10636 #, gcc-internal-format @@ -66024,15 +65910,14 @@ msgid "%<operator new%> must not return NULL unless it is declared %<throw()%> ( msgstr "%<operator new%> ne doit pas retourner NULL à moins qu'il soit déclaré %<throw()%> (ou %<-fcheck-new%> est actif)" #: cp/typeck.cc:11299 -#, fuzzy, gcc-internal-format -#| msgid "invalid covariant return type for %q#D" +#, gcc-internal-format msgid "not eliding copy on return from %qD" -msgstr "type de retour covariant invalide pour %q#D" +msgstr "copie non élidée au retour de %qD" #: cp/typeck.cc:11311 #, gcc-internal-format msgid "not eliding copy on return in %qD" -msgstr "" +msgstr "copie non élidée au retour dans %qD" #: cp/typeck.cc:11898 #, gcc-internal-format @@ -66538,21 +66423,19 @@ msgid "cast from %qs to %qs will produce zero result" msgstr "le transtypage de %qs vers %qs produira le résultat zéro" #: d/d-convert.cc:748 -#, fuzzy, gcc-internal-format -#| msgid "cannot convert %qE from type %qT to type %qT" +#, gcc-internal-format msgid "cannot convert parameter %qs from type %qs to type %qs in assignment" -msgstr "impossible de convertir %qE du type %qT vers le type %qT" +msgstr "impossible de convertir le paramètre %qs du type %qs vers le type %qs dans l'assignation" #: d/d-convert.cc:754 -#, fuzzy, gcc-internal-format -#| msgid "cannot convert %qH to %qI in argument passing" +#, gcc-internal-format msgid "cannot convert parameter %qs from type %qs to type %qs in argument passing" -msgstr "ne peut convertir %qH en %qI dans le passage d'argument" +msgstr "ne peut convertir le paramètre %qs du type %qs vers le type %qs dans le passage d'argument" #: d/d-convert.cc:759 #, gcc-internal-format msgid "parameters of type %<va_list%> {aka %qs} are decayed to pointer types, and require %<va_copy%> to be converted back into a static array type" -msgstr "" +msgstr "les paramètres de type %<va_list%> {aka %qs} sont dégradés en types pointeurs et requièrent %<va_copy%> pour être convertis à nouveau en un type de tableau statique" #: d/d-lang.cc:463 #, gcc-internal-format @@ -66575,28 +66458,24 @@ msgid "bad argument for %<-fversion%>: %qs" msgstr "argument invalide pour %<-fversion%> : %qs" #: d/d-lang.cc:968 -#, fuzzy, gcc-internal-format -#| msgid "error: unable to open '%s' for writing: %s\n" +#, gcc-internal-format msgid "unable to open %s for writing: %m" -msgstr "erreur : ne peut ouvrir « %s » en écriture : %s\n" +msgstr "ne peut ouvrir %s en écriture : %m" #: d/d-lang.cc:975 -#, fuzzy, gcc-internal-format -#| msgid "opening output file %s: %m" +#, gcc-internal-format msgid "writing output file %s: %m" -msgstr "ouverture du fichier de sortie %s: %m" +msgstr "écriture du fichier de sortie %s : %m" #: d/d-lang.cc:995 -#, fuzzy, gcc-internal-format -#| msgid "error: unable to open '%s' for writing: %s\n" +#, gcc-internal-format msgid "unable to open %s for reading: %m" -msgstr "erreur : ne peut ouvrir « %s » en écriture : %s\n" +msgstr "ne peut ouvrir %s en lecture : %m" #: d/d-lang.cc:1020 -#, fuzzy, gcc-internal-format -#| msgid "opening json file %s: %m" +#, gcc-internal-format msgid "reading ddoc file %s: %m" -msgstr "ouverture du fichier json %s : %m" +msgstr "lecture du fichier ddoc %s : %m" #: d/d-lang.cc:1079 #, gcc-internal-format @@ -66675,16 +66554,14 @@ msgid "cannot handle comparison of type %<%s == %s%>" msgstr "ne peut traiter une comparaison de type %<%s == %s%>" #: d/expr.cc:717 -#, fuzzy, gcc-internal-format -#| msgid "expression %qs requires %<object.TypeInfo%> and cannot be used with %<-fno-rtti%>" +#, gcc-internal-format msgid "array concatenation of expression %qs requires the GC and cannot be used with %<-fno-druntime%>" -msgstr "l'expression %qs requiert %<object.TypeInfo%> et ne peut pas être utilisée avec %<-fno-rtti%>" +msgstr "la concaténation de tableaux d'expressions %qs requiert le GC et ne peut pas être utilisée avec %<no-druntime%>" #: d/expr.cc:811 -#, fuzzy, gcc-internal-format -#| msgid "expression %qs requires %<object.TypeInfo%> and cannot be used with %<-fno-rtti%>" +#, gcc-internal-format msgid "appending to array in %qs requires the GC and cannot be used with %<-fno-druntime%>" -msgstr "l'expression %qs requiert %<object.TypeInfo%> et ne peut pas être utilisée avec %<-fno-rtti%>" +msgstr "ajouter à la fin d'un tableau dans %qs requiert le GC et ne peut pas être utilisé avec %<-fno-druntime%>" #. Static arrays have already been handled by the front-end. #: d/expr.cc:1285 @@ -66769,10 +66646,9 @@ msgstr "désaccord dans l'appel à la fonction intrinsèque %qD" #. It's a D language intrinsic with no library implementation. #: d/intrinsics.cc:1479 -#, fuzzy, gcc-internal-format -#| msgid "built-in function %qE must be directly called" +#, gcc-internal-format msgid "intrinsic function %qE must be directly called" -msgstr "la fonction interne %qE doit être appelée directement" +msgstr "la fonction intrinsèque %qE doit être appelée directement" #: d/modules.cc:417 #, gcc-internal-format @@ -66782,7 +66658,7 @@ msgstr "%<-fmoduleinfo%> n'est pas supporté sur cette cible" #: d/toir.cc:245 #, gcc-internal-format msgid "calling %qE without side effects discards return value of type %qT; prepend a %<cast(void)%> if intentional" -msgstr "" +msgstr "appeler %qE sans effet de bord abandonne la valeur de retour de type %qT ; préfixez avec %<cast(void)%> si c'est intentionnel" #: d/toir.cc:419 d/toir.cc:444 #, gcc-internal-format @@ -67335,10 +67211,9 @@ msgid "Array constructor value at %L shall not be unlimited polymorphic [F2008: msgstr "La valeur du constructeur du tableau à %L ne sera point polymorphique sans limite [F2008: C4106]" #: fortran/array.cc:2215 -#, fuzzy, gcc-internal-format -#| msgid "Different CHARACTER lengths (%ld/%ld) in array constructor at %L" +#, gcc-internal-format msgid "Different CHARACTER lengths (%wd/%wd) in array constructor at %L" -msgstr "Longueurs de CHARACTER différentes (%ld/%ld) dans le constructeur du tableau à %L" +msgstr "Longueurs de CHARACTER différentes (%wd/%wd) dans le constructeur du tableau à %L" #: fortran/array.cc:2333 #, gcc-internal-format @@ -67562,10 +67437,9 @@ msgid "Unequal character lengths (%ld/%ld) in %s at %L" msgstr "Longueurs de caractères inégales (%ld/%ld) dans %s à %L" #: fortran/check.cc:1269 -#, fuzzy, gcc-internal-format -#| msgid "Size of %qs argument of %qs intrinsic at %L too small (%i/%i)" +#, gcc-internal-format msgid "Size of %qs argument of %qs intrinsic at %L too small (%wd/%ld)" -msgstr "La taille de l'argument %qs de l'intrinsèque %qs à %L est trop petite (%i/%i)" +msgstr "La taille de l'argument %qs de l'intrinsèque %qs à %L est trop petite (%wd/%ld)" #: fortran/check.cc:1332 #, gcc-internal-format, gfc-internal-format @@ -68374,10 +68248,8 @@ msgid "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be %s" msgstr "L'argument %<MOLD%> de l'intrinsèque %<TRANSFER%> à %L ne doit pas être %s" #: fortran/check.cc:6300 -#, fuzzy -#| msgid "Intrinsic TRANSFER at %L has partly undefined result: source size %ld < result size %ld" msgid "Intrinsic TRANSFER at %L has partly undefined result: source size %zd < result size %zd" -msgstr "L'intrinsèque TRANSFER à %L a un résultat partiellement indéfini: taille de la source %ld < taille du résultat %ld" +msgstr "L'intrinsèque TRANSFER à %L a un résultat partiellement indéfini: taille de la source %zd < taille du résultat %zd" #: fortran/check.cc:6424 #, gcc-internal-format @@ -68390,16 +68262,14 @@ msgid "%qs and %qs arguments of %qs intrinsic at %L must have identical shape." msgstr "Les arguments %qs et %qs de l'intrinsèque %qs à %L doivent avoir des formes identiques." #: fortran/check.cc:6573 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "VALUES argument of DATE_AND_TIME at %L has non-default kind" -msgstr "L'argument COUNT de SYSTEM_CLOCK à %L a un sous-type pas par défaut" +msgstr "L'argument VALUES de DATE_AND_TIME à %L a un sous-type pas par défaut" #: fortran/check.cc:6585 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Argument of ATANH at %L must be inside the range -1 to 1" +#, gcc-internal-format, gfc-internal-format msgid "VALUES argument of DATE_AND_TIME at %L must have a decimal exponent range of at least four" -msgstr "L'argument de ATANH à %L doit être à l'intérieur de la plage -1 à 1" +msgstr "L'argument de VALUES de DATE_AND_TIME à %L doit avoir une plage exponentielle décimale d'au moins quatre" #: fortran/check.cc:6724 fortran/check.cc:6756 #, gcc-internal-format @@ -68427,10 +68297,9 @@ msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "L'argument COUNT de SYSTEM_CLOCK à %L a un sous-type pas par défaut" #: fortran/check.cc:6843 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "COUNT argument to SYSTEM_CLOCK at %L with kind smaller than default integer" -msgstr "L'argument COUNT de SYSTEM_CLOCK à %L a un sous-type pas par défaut" +msgstr "L'argument COUNT de SYSTEM_CLOCK à %L a un sous-type plus petit que l'entier par défaut" #: fortran/check.cc:6864 #, gcc-internal-format, gfc-internal-format @@ -68443,10 +68312,9 @@ msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "L'argument COUNT_RATE de SYSTEM_CLOCK à %L a un sous-type pas par défaut" #: fortran/check.cc:6881 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L with kind smaller than default integer" -msgstr "L'argument COUNT_RATE de SYSTEM_CLOCK à %L a un sous-type pas par défaut" +msgstr "L'argument COUNT_RATE de SYSTEM_CLOCK à %L a un sous-type plus petit que l'entier par défaut" #: fortran/check.cc:6901 #, gcc-internal-format, gfc-internal-format @@ -68454,16 +68322,14 @@ msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "L'argument COUNT_MAX de SYSTEM_CLOCK à %L a un sous-type pas par défaut" #: fortran/check.cc:6911 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L with kind smaller than default integer" -msgstr "L'argument COUNT_MAX de SYSTEM_CLOCK à %L a un sous-type pas par défaut" +msgstr "L'argument COUNT_MAX de SYSTEM_CLOCK à %L a un sous-type plus petit que l'entier par défaut" #: fortran/check.cc:6926 fortran/check.cc:6933 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" +#, gcc-internal-format, gfc-internal-format msgid "integer arguments to SYSTEM_CLOCK at %L with different kind parameters" -msgstr "L'argument COUNT de SYSTEM_CLOCK à %L a un sous-type pas par défaut" +msgstr "Les arguments entiers de SYSTEM_CLOCK à %L ont des paramètres de sous-types différents" #: fortran/check.cc:7147 #, gcc-internal-format @@ -68513,16 +68379,14 @@ msgid "non-constant array in DATA statement %L" msgstr "tableau non constant dans l'instruction DATA à %L" #: fortran/data.cc:78 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d" +#, gcc-internal-format, gfc-internal-format msgid "Subscript at %L below array lower bound (%ld < %ld) in dimension %d" -msgstr "La référence au tableau à %L est en dehors des limites (%ld < %ld) dans la dimension %d" +msgstr "L'indice à %L est en dessous de la limite inférieure du tableau (%ld < %ld) dans la dimension %d" #: fortran/data.cc:89 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d" +#, gcc-internal-format, gfc-internal-format msgid "Subscript at %L above array upper bound (%ld > %ld) in dimension %d" -msgstr "La référence inférieure au tableau à %L est en dehors des limites (%ld > %ld) dans la dimension %d" +msgstr "L'indice à %L est au dessus de la limite supérieure du tableau (%ld > %ld) dans la dimension %d" #: fortran/data.cc:172 #, gcc-internal-format, gfc-internal-format @@ -68535,10 +68399,9 @@ msgid "Unused initialization string at %L because variable has zero length" msgstr "Chaîne d'initialisation inutilisée à %L car la variable a une longueur nulle" #: fortran/data.cc:211 -#, fuzzy, gcc-internal-format -#| msgid "Initialization string at %L was truncated to fit the variable (%ld/%ld)" +#, gcc-internal-format msgid "Initialization string at %L was truncated to fit the variable (%wd/%wd)" -msgstr "La chaine d'initialisation à %L a été tronquée pour tenir dans la variable (%ld/%ld)" +msgstr "La chaine d'initialisation à %L a été tronquée pour tenir dans la variable (%wd/%wd)" #: fortran/data.cc:220 fortran/resolve.cc:5287 #, gcc-internal-format, gfc-internal-format @@ -69637,15 +69500,14 @@ msgid "Duplicate symbol %qs in formal argument list at %C" msgstr "Symbole %qs dupliqué dans la liste d'arguments formels à %C" #: fortran/decl.cc:6805 -#, fuzzy, gcc-internal-format -#| msgid "Mismatch in MODULE PROCEDURE formal argument names (%s/%s) at %C" +#, gcc-internal-format msgid "MODULE PROCEDURE formal argument %qs conflicts with alternate return at %C" -msgstr "Désaccord dans les noms des arguments formels de MODULE PROCEDURE (%s/%s) à %C" +msgstr "L'argument formel %qs de MODULE PROCEDURE est en conflit avec le retour alterné à %C" #: fortran/decl.cc:6809 #, gcc-internal-format msgid "MODULE PROCEDURE formal argument is alternate return and conflicts with %qs in the separate declaration at %C" -msgstr "" +msgstr "L'argument formel de MODULE PROCEDURE est un retour alterné qui est en conflit avec %qs dans la déclaration séparée à %C" #: fortran/decl.cc:6814 #, gcc-internal-format, gfc-internal-format @@ -71248,10 +71110,9 @@ msgid "%qs at %L associated to expression cannot be used in a variable definitio msgstr "%qs à %L associé a une expression ne peut pas être utilisé dans un contexte de définition de variable (%s)" #: fortran/expr.cc:6507 -#, fuzzy, gcc-internal-format -#| msgid "%qs at %L associated to expression cannot be used in a variable definition context (%s)" +#, gcc-internal-format msgid "%qs at %L associated to pointer function target being used in a variable definition context (%s)" -msgstr "%qs à %L associé a une expression ne peut pas être utilisé dans un contexte de définition de variable (%s)" +msgstr "%qs à %L est associé a un pointeur qui cible une fonction qui est utilisé dans un contexte de définition de variable (%s)" #: fortran/expr.cc:6526 #, gcc-internal-format @@ -71776,10 +71637,9 @@ msgid "Actual argument at %L to assumed-type dummy has type parameters or is of msgstr "L'argument effectif à %L pour le muet de type tacite a des paramètres de type ou est de type dérivé avec une liaison à un type ou des procédures FINAL" #: fortran/interface.cc:3355 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Coindexed polymorphic actual argument at %L is passed polymorphic dummy argument %qs" +#, gcc-internal-format, gfc-internal-format msgid "Unlimited polymorphic actual argument at %L is not matched with either an unlimited polymorphic or assumed type dummy argument" -msgstr "L'argument effectif polymorphique co-indexé à %L est passé à l'argument muet polymorphique %qs" +msgstr "L'argument effectif polymorphique illimité à %L n'a pas de correspondance avec un argument muet soit polymorphique illimité ou soit de type assumé" #: fortran/interface.cc:3379 #, gcc-internal-format @@ -71874,7 +71734,7 @@ msgstr "L'argument effectif pour %qs doit être ALLOCATABLE à %L" #: fortran/interface.cc:3693 #, gcc-internal-format msgid "Actual argument for %qs at %L is a function result and the dummy argument is ALLOCATABLE" -msgstr "" +msgstr "L'argument effectif pour %qs à %L est le résultat d'une fonction et l'argument muet est ALLOCATABLE" #: fortran/interface.cc:3731 #, gcc-internal-format @@ -73902,10 +73762,9 @@ msgid "Symbol %qs in namelist %qs at %C must be declared before the namelist is msgstr "Le symbole %qs dans la liste de noms %qs à %C doit être déclaré avant que la liste de noms doit déclarée" #: fortran/match.cc:5652 -#, fuzzy, gcc-internal-format -#| msgid "Symbol %qs at %L conflicts with the symbol at %L" +#, gcc-internal-format msgid "Derived type %qs at %L conflicts with namelist object %qs at %C" -msgstr "Le symbole %qs à %L est en conflit avec le symbole à %L" +msgstr "Le type dérivé %qs à %L est en conflit avec l'objet de liste de noms %qs à %C" #: fortran/match.cc:5672 #, gcc-internal-format @@ -74444,7 +74303,7 @@ msgstr "L'élément de liste ne sera point co-indexé à %C" #: fortran/openmp.cc:492 #, gcc-internal-format msgid "%qs at %L is part of the common block %</%s/%> and may only be specificed implicitly via the named common block" -msgstr "" +msgstr "%qs à %L fait partie du bloc commun %</%s/%> et peut uniquement être spécifié implicitement via le bloc commun nommé" #: fortran/openmp.cc:517 fortran/openmp.cc:618 fortran/openmp.cc:948 #: fortran/openmp.cc:6135 @@ -74560,13 +74419,12 @@ msgstr "La directive %qs est mentionnée les deux fois dans les clauses ABSENT e #: fortran/openmp.cc:1745 #, gcc-internal-format, gfc-internal-format msgid "Duplicate %s modifier at %L in USES_ALLOCATORS clause" -msgstr "" +msgstr "Modificateur %s dupliqué à %L dans la clause USES_ALLOCATORS" #: fortran/openmp.cc:1779 -#, fuzzy, gcc-internal-format -#| msgid "expected %<(%> at %C" +#, gcc-internal-format msgid "Unexpected %<(%> at %C" -msgstr "%<(%> attendu à %C" +msgstr "%<(%> inattendu à %C" #: fortran/openmp.cc:1826 #, gcc-internal-format @@ -74615,16 +74473,14 @@ msgid "COLLAPSE clause argument not constant positive integer at %C" msgstr "L'argument de la clause COLLAPSE n'est pas une constante entière positive à %C" #: fortran/openmp.cc:2236 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, NONE or DEFAULT at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, PRESENT, NONE or DEFAULT at %C" -msgstr "ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, NONE ou DEFAULT attendu à %C" +msgstr "ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, PRESENT, NONE ou DEFAULT attendu à %C" #: fortran/openmp.cc:2258 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected SCALAR, AGGREGATE, ALLOCATABLE or POINTER at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected SCALAR, AGGREGATE, ALLOCATABLE, POINTER or ALL at %C" -msgstr "SCALAR, AGGREGATE, ALLOCATABLE ou POINTER attendu à %C" +msgstr "SCALAR, AGGREGATE, ALLOCATABLE, POINTER ou ALL attendu à %C" #: fortran/openmp.cc:2291 #, gcc-internal-format, gfc-internal-format @@ -74717,10 +74573,9 @@ msgid "Expected SEQ_CST, ACQUIRE or RELAXED at %C" msgstr "SEQ_CST, ACQUIRE ou RELAXED attendu à %C" #: fortran/openmp.cc:2816 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "WAIT clause at %L requires a scalar INTEGER expression" +#, gcc-internal-format, gfc-internal-format msgid "INDIRECT clause at %C requires a constant logical expression" -msgstr "La clause WAIT à %L requiert une expression INTEGER scalaire" +msgstr "La clause INDIRECT à %C requiert une expression logique constante" #: fortran/openmp.cc:3003 #, gcc-internal-format @@ -74738,10 +74593,9 @@ msgid "too many %<close%> modifiers at %L" msgstr "trop de modificateurs %<close%> à %L" #: fortran/openmp.cc:3125 -#, fuzzy, gcc-internal-format -#| msgid "too many %<close%> modifiers at %L" +#, gcc-internal-format msgid "too many %<present%> modifiers at %L" -msgstr "trop de modificateurs %<close%> à %L" +msgstr "trop de modificateurs %<present%> à %L" #: fortran/openmp.cc:3316 #, gcc-internal-format @@ -74849,22 +74703,19 @@ msgid "!$ACC ROUTINE with GANG, WORKER, or VECTOR clause is not permitted in PUR msgstr "!$ACC ROUTINE avec la clause GANG, WORKER ou VECTOR n'est pas permise dans la procédure PURE à %C" #: fortran/openmp.cc:4568 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected COMPILATION or EXECUTION in AT clause at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected ALIGN or ALLOCATOR clause at %C" -msgstr "COMPILATION ou EXECUTION attendu dans la clause AT à %C" +msgstr "clause ALIGN ou ALLOCATOR attendue à %C" #: fortran/openmp.cc:4576 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Sorry, %qs clause at %L on REQUIRES directive is not yet supported" +#, gcc-internal-format, gfc-internal-format msgid "Sorry, structure-element list item at %L in ALLOCATE directive is not yet supported" -msgstr "Désolé, la clause %qs à %L sur la directive REQUIRES n'est pas encore supportée" +msgstr "Désolé, l'élément de liste pour structure-element à %L dans la directive ALLOCATE n'est pas encore supportée" #: fortran/openmp.cc:4579 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected expression in %s statement at %C" +#, gcc-internal-format, gfc-internal-format msgid "Unexpected expression as list item at %L in ALLOCATE directive" -msgstr "Expression attendue dans l'instruction %s à %C" +msgstr "Expression inattendue comme élément de liste à %L dans la directive ALLOCATE" #: fortran/openmp.cc:4650 #, gcc-internal-format, gfc-internal-format @@ -74889,7 +74740,7 @@ msgstr "IN, OUT, INOUT, INOUTSET, MUTEXINOUTSET suivi de %<)%> attendu à %C" #: fortran/openmp.cc:4771 #, gcc-internal-format, gfc-internal-format msgid "The same depend object should be used as DEPOBJ argument at %L and as DESTROY argument at %L" -msgstr "" +msgstr "Le même objet dépendant devrait être utilisé comme argument de DEPOBJ à %L et comme argument de DESTROY à %L" #: fortran/openmp.cc:4785 #, gcc-internal-format, gfc-internal-format @@ -75004,7 +74855,7 @@ msgstr "L'élément de liste %qs à %L est défini dans la directive OMP DECLARE #: fortran/openmp.cc:5547 fortran/openmp.cc:5601 #, gcc-internal-format, gfc-internal-format msgid "DEVICE_TYPE must be ANY when used with INDIRECT at %L" -msgstr "" +msgstr "DEVICE_TYPE doit être ANY lorsqu'il est utilisé avec INDIRECT à %L" #: fortran/openmp.cc:5557 #, gcc-internal-format, gfc-internal-format @@ -75027,10 +74878,9 @@ msgid "COMMON at %L set in previous OMP DECLARE TARGET directive to a different msgstr "COMMON à %L défini dans une directive OMP DECLARE TARGET précédente avec un DEVICE_TYPE différent" #: fortran/openmp.cc:5611 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "OMP DECLARE TARGET directive at %L with only DEVICE_TYPE clause is ignored" +#, gcc-internal-format, gfc-internal-format msgid "OMP DECLARE TARGET directive at %L with only DEVICE_TYPE or INDIRECT clauses is ignored" -msgstr "La directive OMP DECLARE TARGET à %L avec uniquement une clause DEVICE_TYPE est ignorée" +msgstr "La directive OMP DECLARE TARGET à %L avec uniquement une clause DEVICE_TYPE ou INDIRECT est ignorée" #: fortran/openmp.cc:5622 #, gcc-internal-format, gfc-internal-format @@ -75039,10 +74889,9 @@ msgstr "Erreur de syntaxe dans la liste !$OMP DECLARE TARGET à %C" #. FIXME: constant integer expressions. #: fortran/openmp.cc:5661 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected integer expression at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected trait-property-extension at %C" -msgstr "expression entière attendue à %C" +msgstr "trait-property-extension attendue à %C" #: fortran/openmp.cc:5676 fortran/openmp.cc:5773 fortran/openmp.cc:5904 #: fortran/openmp.cc:6054 fortran/openmp.cc:6082 @@ -75056,10 +74905,9 @@ msgid "expected trait selector name at %C" msgstr "nom de sélecteur de trait attendu à %C" #: fortran/openmp.cc:5717 -#, fuzzy, gcc-internal-format -#| msgid "selector %qs not allowed for context selector set %qs at %C" +#, gcc-internal-format msgid "unknown selector %qs for context selector set %qs at %C" -msgstr "sélecteur %qs pas permis pour l'ensemble %qs du sélecteur de contexte à %C" +msgstr "sélecteur %qs inconnu pour l'ensemble du sélecteur de contexte %qs à %C" #: fortran/openmp.cc:5735 #, gcc-internal-format @@ -75067,10 +74915,9 @@ msgid "selector %qs does not accept any properties at %C" msgstr "le sélecteur %qs n'accepte aucune propriété à %C" #: fortran/openmp.cc:5744 -#, fuzzy, gcc-internal-format -#| msgid "The %s directive cannot be specified within a %s region at %L" +#, gcc-internal-format msgid "%<score%> cannot be specified in traits in the %qs trait-selector-set at %C" -msgstr "La directive %s ne peut pas être spécifiée dans une région %s à %L" +msgstr "%<score%> ne peut pas être spécifié dans les traits dans le trait-selector-set %qs à %C" #: fortran/openmp.cc:5751 fortran/openmp.cc:5914 fortran/openmp.cc:6006 #: fortran/openmp.cc:6073 @@ -75079,16 +74926,14 @@ msgid "expected %<(%> at %C" msgstr "%<(%> attendu à %C" #: fortran/openmp.cc:5759 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be constant integer expression at %C" +#, gcc-internal-format msgid "%<score%> argument must be constant integer expression at %C" -msgstr "l'argument du score doit être une expression entière constante à %C" +msgstr "l'argument %<score%> doit être une expression entière constante à %C" #: fortran/openmp.cc:5767 -#, fuzzy, gcc-internal-format -#| msgid "score argument must be non-negative at %C" +#, gcc-internal-format msgid "%<score%> argument must be non-negative at %C" -msgstr "l'argument du score doit être non négatif à %C" +msgstr "l'argument %<score%> doit être non négatif à %C" #: fortran/openmp.cc:5779 #, gcc-internal-format, gfc-internal-format @@ -75111,22 +74956,19 @@ msgid "expected expression at %C" msgstr "expression attendue à %C" #: fortran/openmp.cc:5853 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "property must be constant integer or logical expression at %C" +#, gcc-internal-format, gfc-internal-format msgid "property must be a constant logical expression at %C" -msgstr "la propriété doit être une expression entière constante à %C" +msgstr "la propriété doit être une expression logique constante à %C" #: fortran/openmp.cc:5856 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "property must be constant integer expression" +#, gcc-internal-format, gfc-internal-format msgid "property must be a constant integer expression at %C" -msgstr "la propriété doit être une expression entière constante" +msgstr "la propriété doit être une expression entière constante à %C" #: fortran/openmp.cc:5868 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "property must be constant integer or logical expression at %C" +#, gcc-internal-format, gfc-internal-format msgid "property must be a conforming device number at %C" -msgstr "la propriété doit être une expression entière constante à %C" +msgstr "la propriété doit être un numéro de périphérique conforme à %C" #: fortran/openmp.cc:5882 #, gcc-internal-format, gfc-internal-format @@ -75134,10 +74976,9 @@ msgid "expected simd clause at %C" msgstr "clause simd attendue à %C" #: fortran/openmp.cc:5955 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "expected trait selector name at %C" +#, gcc-internal-format, gfc-internal-format msgid "expected context selector set name at %C" -msgstr "nom de sélecteur de trait attendu à %C" +msgstr "nom d'ensemble de sélecteur de contexte attendu à %C" #: fortran/openmp.cc:5962 #, gcc-internal-format @@ -75235,10 +75076,9 @@ msgid "!$OMP REQUIRES at %C must appear in the specification part of a program u msgstr "!$OMP REQUIRES à %C doit apparaître dans la partie de spécification de l'unité de programme" #: fortran/openmp.cc:6456 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected SEQ_CST, ACQ_REL or RELAXED for ATOMIC_DEFAULT_MEM_ORDER clause at %C" +#, gcc-internal-format, gfc-internal-format msgid "Expected ACQ_REL, ACQUIRE, RELAXED, RELEASE or SEQ_CST for ATOMIC_DEFAULT_MEM_ORDER clause at %C" -msgstr "SEQ_CST, ACQ_REL ou RELAXED attendu pour la clause ATOMIC_DEFAULT_MEM_ORDER à %C" +msgstr "ACQ_REL, ACQUIRE, RELAXED, RELEASE ou SEQ_CST attendu pour la clause ATOMIC_DEFAULT_MEM_ORDER à %C" #: fortran/openmp.cc:6472 #, gcc-internal-format, gfc-internal-format @@ -75291,16 +75131,14 @@ msgid "!$OMP ATOMIC at %L with %s clause requires %s clause" msgstr "!$OMP ATOMIC à %L avec la clause %s requiert la clause %s" #: fortran/openmp.cc:6907 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "!$OMP ATOMIC WRITE at %L incompatible with ACQUIRE clause" +#, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC WRITE at %L incompatible with ACQUIRES clause implicitly provided by a REQUIRES directive" -msgstr "!$OMP ATOMIC WRITE à %L est incompatible avec la clause ACQUIRE" +msgstr "!$OMP ATOMIC WRITE à %L est incompatible avec la clause ACQUIRE implicitement fournie par une directive REQUIRES" #: fortran/openmp.cc:6918 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "!$OMP ATOMIC READ at %L incompatible with RELEASE clause" +#, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC READ at %L incompatible with RELEASE clause implicitly provided by a REQUIRES directive" -msgstr "!$OMP ATOMIC READ à %L est incompatible avec la clause RELEASE" +msgstr "!$OMP ATOMIC READ à %L est incompatible avec la clause RELEASE implicitement fournie par une directive REQUIRES" #: fortran/openmp.cc:6936 #, gcc-internal-format, gfc-internal-format @@ -75425,80 +75263,77 @@ msgstr "La sous-routine %s déclarée implicitement est utilisé dans !$OMP DECL #: fortran/openmp.cc:7349 #, gcc-internal-format msgid "Unexpected function-result variable %qs at %L in declarative !$OMP ALLOCATE" -msgstr "" +msgstr "Variable de résultat de fonction %qs inattendue à %L dans la déclarative !$OMP ALLOCATE" #: fortran/openmp.cc:7355 -#, fuzzy, gcc-internal-format -#| msgid "Procedure pointer %qs in %s clause at %L" +#, gcc-internal-format msgid "Procedure pointer %qs not supported with !$OMP ALLOCATE at %L" -msgstr "Pointeur de procédure %qs dans la clause %s à %L" +msgstr "Pointeur de procédure %qs pas supporté avec !$OMP ALLOCATE à %L" #: fortran/openmp.cc:7361 #, gcc-internal-format msgid "Argument %qs at %L to declarative !$OMP ALLOCATE directive must be a variable" -msgstr "" +msgstr "L'argument %qs à %L pour la directive déclarative !$OMP ALLOCATE doit être une variable" #: fortran/openmp.cc:7368 #, gcc-internal-format msgid "Argument %qs at %L to declarative !$OMP ALLOCATE shall be in the same scope as the variable declaration" -msgstr "" +msgstr "L'argument %qs à %L pour la déclarative !$OMP ALLOCATE doit être dans la même portée que la déclaration de la variable" #: fortran/openmp.cc:7375 -#, fuzzy, gcc-internal-format -#| msgid "Passed-object dummy argument of %qs at %L must not be ALLOCATABLE" +#, gcc-internal-format msgid "Unexpected dummy argument %qs as argument at %L to declarative !$OMP ALLOCATE" -msgstr "L'argument muet de type objet passé de %qs à %L ne peut pas être ALLOCATABLE" +msgstr "Argument muet %qs inattendu comme argument à %L pour la déclarative !$OMP ALLOCATE" #: fortran/openmp.cc:7381 #, gcc-internal-format msgid "Unexpected coarray argument %qs as argument at %L to declarative !$OMP ALLOCATE" -msgstr "" +msgstr "Argument co-tableau %qs inattendu comme argument à %L pour la déclarative !$OMP ALLOCATE" #: fortran/openmp.cc:7389 #, gcc-internal-format msgid "Duplicated common block %</%s/%> in !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Bloc commun %</%s/%> dupliqué dans !$OMP ALLOCATE à %L" #: fortran/openmp.cc:7396 #, gcc-internal-format msgid "Duplicated variable %qs in !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Variable %qs dupliquée dans !$OMP ALLOCATE à %L" #: fortran/openmp.cc:7407 #, gcc-internal-format msgid "Sorry, EQUIVALENCE object %qs not supported with !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Désolé, EQUIVALENCE de l'objet %qs n'est pas supportée avec !$OMP ALLOCATE à %L" #: fortran/openmp.cc:7416 #, gcc-internal-format msgid "Sorry, Cray pointers and pointees such as %qs are not supported with !$OMP ALLOCATE at %L" -msgstr "" +msgstr "Désolé, les pointeurs Cray et la cible du pointage telle que %qs ne sont pas supportées avec !$OMP ALLOCATE à %L" #: fortran/openmp.cc:7425 #, gcc-internal-format msgid "Unexpected allocatable variable %qs at %L in declarative !$OMP ALLOCATE directive" -msgstr "" +msgstr "Variable allouable %qs inattendue à %L dans la directive déclarative !$OMP ALLOCATE" #: fortran/openmp.cc:7430 #, gcc-internal-format msgid "Unexpected pointer variable %qs at %L in declarative !$OMP ALLOCATE directive" -msgstr "" +msgstr "Variable pointeur %qs inattendue à %L dans la directive déclarative !$OMP ALLOCATE" #: fortran/openmp.cc:7441 fortran/openmp.cc:7996 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "ALIGN modifier requires at %L a scalar positive constant integer alignment expression that is a power of two" +#, gcc-internal-format, gfc-internal-format msgid "ALIGN requires a scalar positive constant integer alignment expression at %L that is a power of two" -msgstr "modificateur ALIGN requiert à %L une expression d'alignement qui est un entier constant positif et scalaire et est une puissance de deux" +msgstr "ALIGN requiert une expression d'alignement qui est une constante entière positive scalaire à %L et qui est une puissance de deux" #: fortran/openmp.cc:7456 #, gcc-internal-format msgid "An ALLOCATOR clause is required as the list item %<%s%s%s%> at %L has the SAVE attribute" -msgstr "" +msgstr "Une clause ALLOCATOR est requise car l'élément de liste %<%s%s%s%> à %L a l'attribut SAVE" #: fortran/openmp.cc:7461 #, gcc-internal-format msgid "Predefined allocator required in ALLOCATOR clause at %L as the list item %<%s%s%s%> at %L has the SAVE attribute" -msgstr "" +msgstr "Allocateur prédéfini requis dans la clause ALLOCATOR à %L car l'élément de liste %<%s%s%s%> à %L a l'attribut SAVE" #: fortran/openmp.cc:7475 fortran/openmp.cc:7980 #, gcc-internal-format @@ -75538,10 +75373,9 @@ msgid "IF clause modifier %s at %L not appropriate for the current OpenMP constr msgstr "Le modificateur %s de la clause IF à %L n'est pas approprié pour la construction OpenMP actuelle" #: fortran/openmp.cc:7687 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "IF clause at %L requires a scalar LOGICAL expression" +#, gcc-internal-format, gfc-internal-format msgid "SELF clause at %L requires a scalar LOGICAL expression" -msgstr "La clause IF à %L requiert une expression LOGICAL scalaire" +msgstr "La clause SELF à %L requiert une expression LOGICAL scalaire" #: fortran/openmp.cc:7696 #, gcc-internal-format, gfc-internal-format @@ -75627,52 +75461,49 @@ msgid "Symbol %qs present on both data and map clauses at %L" msgstr "Le symbole %qs est présent à la fois dans les clauses data et map à %L" #: fortran/openmp.cc:8021 -#, fuzzy, gcc-internal-format -#| msgid "%qs appears more than once in %<allocate%> clauses at %L" +#, gcc-internal-format msgid "%qs appears more than once in %<allocate%> at %L" -msgstr "%qs apparaît plus d'une fois dans les clauses %<allocate%> à %L" +msgstr "%qs apparaît plus d'une fois dans %<allocate%> à %L" #: fortran/openmp.cc:8063 #, gcc-internal-format msgid "%qs specified in %<allocate%> clause at %L but not in an explicit privatization clause" -msgstr "%qs spécifié dans la clause %<allocate%> à %L mais pas dans dans une clause de privatisation explicite" +msgstr "%qs spécifié dans la clause %<allocate%> à %L mais pas dans une clause de privatisation explicite" #: fortran/openmp.cc:8091 -#, fuzzy, gcc-internal-format -#| msgid "Unexpected coarray designator at %C" +#, gcc-internal-format msgid "Unexpected coarray %qs in %<allocate%> at %L" -msgstr "Désignateur de co-tableau inattendu à %C" +msgstr "Co-tableau %qs inattendu dans %<allocate%> à %L" #: fortran/openmp.cc:8105 -#, fuzzy, gcc-internal-format -#| msgid "%qs specified in %<allocate%> clause at %L but not in an explicit privatization clause" +#, gcc-internal-format msgid "%qs specified in %<allocate%> at %L but not in the associated ALLOCATE statement" -msgstr "%qs spécifié dans la clause %<allocate%> à %L mais pas dans dans une clause de privatisation explicite" +msgstr "%qs spécifié dans %<allocate%> à %L mais pas dans l'instruction ALLOCATE associée" #: fortran/openmp.cc:8139 #, gcc-internal-format msgid "%qs listed in %<allocate%> statement at %L but it is neither explicitly in listed in the %<!$OMP ALLOCATE%> directive nor exists a directive without argument list" -msgstr "" +msgstr "%qs est listé dans l'instruction %<allocate%> à %L mais il n'est pas listé explicitement dans la directive %<!$OMP ALLOCATE%> et il n'existe pas de directive sans liste d'arguments" #: fortran/openmp.cc:8150 #, gcc-internal-format msgid "Unexpected coarray %qs in %<allocate%> at %L, implicitly listed in %<!$OMP ALLOCATE%> at %L" -msgstr "" +msgstr "Co-tableau %qs inattendu dans %<allocate%> à %L, listé implicitement dans %<!$OMP ALLOCATE%> à %L" #: fortran/openmp.cc:8175 #, gcc-internal-format msgid "ALLOCATORS directive at %L inside a target region must specify an ALLOCATOR modifier for %qs" -msgstr "" +msgstr "La directive ALLOCATORS à %L dans une région cible doit spécifier un modificateur ALLOCATOR pour %qs" #: fortran/openmp.cc:8179 #, gcc-internal-format msgid "ALLOCATE directive at %L inside a target region must specify an ALLOCATOR clause for %qs" -msgstr "" +msgstr "La directive ALLOCATE à %L dans une région cible doit spécifier une clause ALLOCATOR pour %qs" #: fortran/openmp.cc:8183 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATE directive at %L inside a target region must specify an ALLOCATOR clause" -msgstr "" +msgstr "La directive ALLOCATE à %L dans une région cible doit spécifier une clause ALLOCATOR" #: fortran/openmp.cc:8206 #, gcc-internal-format @@ -75854,28 +75685,27 @@ msgstr "La liste d'éléments %qs dans la clause %s à %L doit être TYPE(C_PTR) #: fortran/openmp.cc:8709 #, gcc-internal-format msgid "Memspace %qs at %L in USES_ALLOCATORS must be a predefined memory space" -msgstr "" +msgstr "L'espace mémoire %qs à %L dans USES_ALLOCATORS doit être un espace mémoire prédéfini" #: fortran/openmp.cc:8717 -#, fuzzy, gcc-internal-format -#| msgid "%qs at %L should be a scalar of type integer(kind=omp_event_handle_kind)" +#, gcc-internal-format msgid "Allocator %qs at %L in USES_ALLOCATORS must be a scalar integer of kind %<omp_allocator_handle_kind%>" -msgstr "%qs à %L devrait être un type scalaire de type integer(kind=omp_event_handle_kind)" +msgstr "L'allocateur %qs à %L dans USES_ALLOCATORS doit être un entier scalaire de type %<omp_allocator_handle_kind%>" #: fortran/openmp.cc:8725 #, gcc-internal-format msgid "Allocator %qs at %L in USES_ALLOCATORS must either a variable or a predefined allocator" -msgstr "" +msgstr "L'allocateur %qs à %L dans USES_ALLOCATORS doit soit être une variable ou soit un allocateur prédéfini" #: fortran/openmp.cc:8730 #, gcc-internal-format msgid "A memory space or traits array may not be specified for predefined allocator %qs at %L" -msgstr "" +msgstr "Un espace mémoire ou un tableau de traits ne peut pas spécifier l'allocateur prédéfini %qs à %L" #: fortran/openmp.cc:8741 #, gcc-internal-format msgid "Traits array %qs in USES_ALLOCATORS %L must be a one-dimensional named constant array of type %<omp_alloctrait%>" -msgstr "" +msgstr "Le tableau de traits %qs dans USES_ALLOCATORS %L doit être un tableau de constantes nommées à une dimension de type %<omp_alloctrait%>" #: fortran/openmp.cc:8771 #, gcc-internal-format @@ -76011,7 +75841,7 @@ msgstr "la clause %<DETACH%> à %L ne doit pas être utilisée avec la clause %< #: fortran/openmp.cc:9226 #, gcc-internal-format msgid "%<host_data%> construct at %L requires %<use_device%> clause" -msgstr "" +msgstr "la construction %<host_data%> à %L requiert la clause %<use_device%>" #: fortran/openmp.cc:9380 #, gcc-internal-format, gfc-internal-format @@ -76149,35 +75979,34 @@ msgid "unexpected !$OMP ATOMIC expression at %L" msgstr "expression !$OMP ATOMIC inattendue à %L" #: fortran/openmp.cc:9948 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "With INSCAN at %L, expected loop body with !$OMP SCAN between two structured-block-sequences" +#, gcc-internal-format, gfc-internal-format msgid "With INSCAN at %L, expected loop body with !$OMP SCAN between two structured block sequences" msgstr "Avec INSCAN à %L, on attend un corps de boucle avec !$OMP SCAN entre deux séquences de blocs structurés" #: fortran/openmp.cc:9955 #, gcc-internal-format, gfc-internal-format msgid "!$OMP SCAN at %L with zero executable statements in preceding structured block sequence" -msgstr "" +msgstr "!$OMP SCAN à %L avec zéro instructions exécutables dans la séquence de blocs structurés précédente" #: fortran/openmp.cc:9962 #, gcc-internal-format, gfc-internal-format msgid "!$OMP SCAN at %L with zero executable statements in succeeding structured block sequence" -msgstr "" +msgstr "!$OMP SCAN à %L avec zéro instructions exécutables dans la séquence de blocs structurés suivante" #: fortran/openmp.cc:10176 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain loop in intervening code at %L" -msgstr "" +msgstr "%s ne peut pas contenir de boucle dans le code intervenant à %L" #: fortran/openmp.cc:10256 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP directive in intervening code at %L" -msgstr "" +msgstr "%s ne peut pas contenir de directive OpenMP dans le code intervenant à %L" #: fortran/openmp.cc:10268 fortran/openmp.cc:10294 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP API call in intervening code at %L" -msgstr "" +msgstr "%s ne peut pas contenir d'appel à l'api OpenMP dans le code intervenant à %L" #: fortran/openmp.cc:10822 #, gcc-internal-format, gfc-internal-format @@ -76215,10 +76044,9 @@ msgid "%s iteration variable used in more than one loop at %L" msgstr "La variable d'itération %s est utilisée dans plus d'une boucle à %L" #: fortran/openmp.cc:10874 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "iteration variable %qE should not be reduction" +#, gcc-internal-format, gfc-internal-format msgid "%s iteration variable at %L is bound in intervening code" -msgstr "la variable d'itération %qE ne devrait pas être une réduction" +msgstr "la variable d'itération %s à %L est liée dans du code intervenant" #: fortran/openmp.cc:10883 #, gcc-internal-format, gfc-internal-format @@ -76226,10 +76054,9 @@ msgid "%s loop start expression not in canonical form at %L" msgstr "l'expression de début de boucle %s n'est pas sous la forme canonique à %L" #: fortran/openmp.cc:10890 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%s loop start expression not in canonical form at %L" +#, gcc-internal-format, gfc-internal-format msgid "%s loop start expression at %L uses variable bound in intervening code" -msgstr "l'expression de début de boucle %s n'est pas sous la forme canonique à %L" +msgstr "l'expression de début de boucle %s à %L utilise une variable liée dans du code intervenant" #: fortran/openmp.cc:10899 #, gcc-internal-format, gfc-internal-format @@ -76239,7 +76066,7 @@ msgstr "l'expression de fin de la boucle %s n'est pas sous la forme canonique à #: fortran/openmp.cc:10906 #, gcc-internal-format, gfc-internal-format msgid "%s loop end expression at %L uses variable bound in intervening code" -msgstr "" +msgstr "l'expression de fin de boucle %s à %L utilise une variable liée dans du code intervenant" #: fortran/openmp.cc:10913 #, gcc-internal-format, gfc-internal-format @@ -76254,26 +76081,24 @@ msgstr "l'incrément de la boucle %s n'est pas sous la forme canonique à %L" #: fortran/openmp.cc:10926 #, gcc-internal-format, gfc-internal-format msgid "%s loop increment expression at %L uses variable bound in intervening code" -msgstr "" +msgstr "l'expression d'incrément de boucle %s à %L utilise une variable liée dans du code intervenant" #. Parse error, can't recover from this. #: fortran/openmp.cc:10944 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "not enough DO loops for collapsed %s at %L" +#, gcc-internal-format, gfc-internal-format msgid "not enough DO loops for collapsed %s (level %d) at %L" -msgstr "pas assez de boucle DO pour le %s coalescé à %L" +msgstr "pas assez de boucle DO pour le %s coalescé (niveau %d) à %L" # %s peut être « tiled » ou « collapsed », sans traduction… #: fortran/openmp.cc:10956 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%s !$ACC LOOP loops not perfectly nested at %L" +#, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested with ORDERED clause at %L" -msgstr "Les boucles %s !$ACC LOOP sont imparfaitement imbriquées à %L" +msgstr "les boucles internes %s doivent être parfaitement imbriquées avec la clause ORDERED à %L" #: fortran/openmp.cc:10963 #, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested with REDUCTION INSCAN clause at %L" -msgstr "" +msgstr "les boucles internes %s doivent être parfaitement imbriquées avec la clause REDUCTION INSCAN à %L" #: fortran/openmp.cc:11190 fortran/openmp.cc:11203 #, gcc-internal-format, gfc-internal-format @@ -76341,12 +76166,12 @@ msgstr "NOM %qs invalide dans !$ACC ROUTINE ( NOM ) à %L" #: fortran/openmp.cc:11539 #, gcc-internal-format, gfc-internal-format msgid "!$OMP TARGET region at %L with a nested TEAMS at %L may not contain any other statement, declaration or directive outside of the single TEAMS construct" -msgstr "" +msgstr "la région !$OMP TARGET à %L avec un TEAMS imbriqué à %L ne peut contenir aucune autre instruction, déclaration ou directive en dehors de la seule construction TEAMS" #: fortran/openmp.cc:11543 #, gcc-internal-format, gfc-internal-format msgid "!$OMP TARGET region at %L with a nested TEAMS may not contain any other statement, declaration or directive outside of the single TEAMS construct" -msgstr "" +msgstr "la région !$OMP TARGET à %L dans un TEAMS imbriqué ne peut contenir aucune autre instruction, déclaration ou directive en dehors de la seule construction TEAMS" #: fortran/openmp.cc:11637 #, gcc-internal-format, gfc-internal-format @@ -76526,23 +76351,22 @@ msgstr "Directive OpenACC inclassable à %C" #: fortran/parse.cc:817 #, gcc-internal-format msgid "%qs directive at %L must either have a variable argument or, if associated with an ALLOCATE stmt, must be preceded by an executable statement or OpenMP construct" -msgstr "" +msgstr "la directive %s à %L doit soit avoir un argument variable ou soit, si associée avec l'instruction ALLOCATE, doit être précédée par une instruction exécutable ou une construction OpenMP" #: fortran/parse.cc:829 #, gcc-internal-format msgid "Structure-component expression at %L in %qs directive not permitted in declarative directive; as directive associated with an ALLOCATE stmt it must be preceded by an executable statement or OpenMP construct" -msgstr "" +msgstr "L'expression composant structuré à %L dans la directive %qs n'est pas permise dans une directive déclarative car la directive associée avec une instruction ALLOCATE doit être précédée par une instruction exécutable ou une construction OpenMP" #: fortran/parse.cc:855 #, gcc-internal-format msgid "%qs directive at %L associated with an ALLOCATE stmt must be preceded by an executable statement or OpenMP construct; note the variables in the list all have the allocatable or pointer attribute" -msgstr "" +msgstr "La directive %qs à %L associée avec une instruction ALLOCATE doit être précédée par une instruction exécutable ou une construction OpenMP ; notez que les variables dans la liste ont toutes l'attribut allouable ou pointeur" #: fortran/parse.cc:1023 fortran/parse.cc:1325 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "OpenACC directives other than ROUTINE may not appear in PURE procedures at %C" +#, gcc-internal-format, gfc-internal-format msgid "OpenMP directive at %C is not pure and thus may not appear in a PURE procedure" -msgstr "Les directives OpenACC autres que ROUTINE ne peuvent pas apparaître dans des procédures PURE à %C" +msgstr "La directive OpenMP à %C n'est pas pure et ne peut donc pas apparaître dans une procédure PURE" #: fortran/parse.cc:1296 #, gcc-internal-format, gfc-internal-format @@ -76552,7 +76376,7 @@ msgstr "Directive OpenMP inclassable à %C" #: fortran/parse.cc:1312 #, gcc-internal-format msgid "OpenMP ERROR directive at %L with %<at(execution)%> clause in a PURE procedure" -msgstr "" +msgstr "Directive OpenMP ERROR à %L avec la clause %<at(execution)%> dans une procédure PURE" #: fortran/parse.cc:1440 #, gcc-internal-format, gfc-internal-format @@ -76963,19 +76787,17 @@ msgstr "!$ACC END LOOP redondant à %C" #: fortran/parse.cc:5809 #, gcc-internal-format, gfc-internal-format msgid "%s statements at %L and %L have both no list item but only one may" -msgstr "" +msgstr "Les instructions %s à %L et %L ont toutes les deux aucun élément de liste mais seulement l'une des deux le peux" #: fortran/parse.cc:5829 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Expected expression at %C in PARAMETER statement" +#, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE or %s statement" -msgstr "Expression attendue à %C dans l'instruction PARAMETER" +msgstr "%s attendu à %C ; ALLOCATE ou instruction %s attendu" #: fortran/parse.cc:5832 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Unexpected junk after ELSE statement at %C" +#, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE statement after %s" -msgstr "Rebut inattendu après l'instruction ELSE à %C" +msgstr "%s inattendu à %C ; instruction ALLOCATE attendue après %s" #: fortran/parse.cc:6120 #, gcc-internal-format, gfc-internal-format @@ -77223,16 +77045,12 @@ msgid "match_string_constant(): Delimiter not found" msgstr "match_string_constant(): Délimiteur pas trouvé" #: fortran/primary.cc:1193 -#, fuzzy -#| msgid "Substring start index (%ld) at %L below 1" msgid "Substring start index (%td) at %L below 1" -msgstr "L'index de départ de la sous-chaîne (%ld) à %L est inférieure à 1" +msgstr "L'index de départ de la sous-chaîne (%td) à %L est inférieure à 1" #: fortran/primary.cc:1199 -#, fuzzy -#| msgid "Substring end index (%ld) at %L exceeds string length" msgid "Substring end index (%td) at %L exceeds string length" -msgstr "L'index de fin de la sous-chaîne (%ld) à %L excède la longueur de la chaîne" +msgstr "L'index de fin de la sous-chaîne (%td) à %L excède la longueur de la chaîne" #: fortran/primary.cc:1284 #, gcc-internal-format, gfc-internal-format @@ -77435,10 +77253,8 @@ msgid "Too many components in structure constructor at %L" msgstr "Trop de composants dans le constructeur de structure à %L" #: fortran/primary.cc:3242 -#, fuzzy -#| msgid "CHARACTER expression will be truncated in constructor (%ld/%ld) at %L" msgid "CHARACTER expression will be truncated in constructor (%td/%td) at %L" -msgstr "L'expression CHARACTER sera tronquée dans le constructeur (%ld/%ld) à %L" +msgstr "L'expression CHARACTER sera tronquée dans le constructeur (%td/%td) à %L" #: fortran/primary.cc:3260 #, gcc-internal-format @@ -77758,10 +77574,9 @@ msgid "%qs at %L cannot appear in COMMON [F2008:C5100]" msgstr "%qs à %L ne peut pas apparaître dans COMMON [F2008:C5100]" #: fortran/resolve.cc:1016 -#, fuzzy, gcc-internal-format -#| msgid "Global entity %qs at %L cannot appear in a COMMON block at %L" +#, gcc-internal-format msgid "Automatic object %qs at %L cannot appear in COMMON at %L" -msgstr "L'entité globale %qs à %L ne peut pas apparaître dans un bloc COMMON à %L" +msgstr "L'objet automatique %qs à %L ne peut pas apparaître dans COMMON à %L" #: fortran/resolve.cc:1028 #, gcc-internal-format @@ -78438,10 +78253,9 @@ msgid "Assumed-rank variable %s at %L shall not have a subobject reference" msgstr "La variable de rang tacite %s à %L n'aura point de référence à un sous-objet" #: fortran/resolve.cc:5909 -#, fuzzy, gcc-internal-format -#| msgid "gfc_variable_attr(): Bad array reference" +#, gcc-internal-format msgid "Scalar variable %qs has an array reference at %L" -msgstr "gfc_variable_attr(): Mauvaise référence à un tableau" +msgstr "La variable scalaire %qs a une référence à un tableau à %L" #: fortran/resolve.cc:6054 #, gcc-internal-format @@ -79067,16 +78881,14 @@ msgid "gfc_resolve_blocks(): Bad block type" msgstr "gfc_resolve_blocks(): Mauvais type de bloc" #: fortran/resolve.cc:11232 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Data transfer element at %L cannot have procedure pointer components" +#, gcc-internal-format, gfc-internal-format msgid "Variable in the ordinary assignment at %L is a procedure pointer component" -msgstr "L'élément de transfert de données à %L ne peut pas avoir de composants de pointeur de procédure" +msgstr "La variable dans l'assignation ordinaire à %L est un composant pointeur de procédure" #: fortran/resolve.cc:11293 -#, fuzzy, gcc-internal-format -#| msgid "CHARACTER expression will be truncated in assignment (%ld/%ld) at %L" +#, gcc-internal-format msgid "CHARACTER expression will be truncated in assignment (%wd/%wd) at %L" -msgstr "L'expression CHARACTER sera tronquée dans l'affectation (%ld/%ld) à %L" +msgstr "L'expression CHARACTER sera tronquée dans l'affectation (%wd/%wd) à %L" #: fortran/resolve.cc:11325 #, gcc-internal-format, gfc-internal-format @@ -80066,10 +79878,9 @@ msgid "DATA statement at %L has more variables than values" msgstr "L'instruction DATA à %L a plus de variables que de valeurs" #: fortran/resolve.cc:17044 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "Nonconstant array section at %L in DATA statement" +#, gcc-internal-format, gfc-internal-format msgid "Non-constant character length at %L in DATA statement" -msgstr "Section de tableau non constante à %L dans l'instruction DATA" +msgstr "Longueur de caractère non constante à %L dans l'instruction DATA" #: fortran/resolve.cc:17072 #, gcc-internal-format, gfc-internal-format @@ -80628,10 +80439,9 @@ msgid "Result of SCALE overflows its kind at %L" msgstr "Le résultat de SCALE déborde de son sous-type à %L" #: fortran/simplify.cc:7634 -#, fuzzy, gcc-internal-format, gfc-internal-format -#| msgid "%qs argument of %qs intrinsic at %L must be of rank %d" +#, gcc-internal-format, gfc-internal-format msgid "DIM argument (%d) to intrinsic SIZE at %L out of range (1:%d)" -msgstr "L'argument %qs de l'intrinsèque %qs à %L doit être de rang %d" +msgstr "L'argument DIM (%d) pour la taille intrinsèque à %L est hors limites (1:%d)" #: fortran/simplify.cc:7759 #, gcc-internal-format @@ -81129,10 +80939,9 @@ msgid "bad expression type during walk (%d)" msgstr "mauvais type d'expression durant le parcours (%d)" #: fortran/trans-common.cc:411 -#, fuzzy, gcc-internal-format -#| msgid "Named COMMON block %qs at %L shall be of the same size as elsewhere (%lu vs %lu bytes)" +#, gcc-internal-format msgid "Named COMMON block %qs at %L shall be of the same size as elsewhere (%wu vs %wu bytes)" -msgstr "Le bloc COMMON nommé %qs à %L sera de la même taille que celui ailleurs (%lu vs %lu octets)" +msgstr "Le bloc COMMON nommé %qs à %L sera de la même taille que celui ailleurs (%wu vs %wu octets)" #: fortran/trans-common.cc:819 #, gcc-internal-format @@ -81238,13 +81047,12 @@ msgstr "Paramètre de type différé pas encore supporté" #: fortran/trans-decl.cc:5224 #, gcc-internal-format msgid "Sorry, !$OMP allocate for COMMON block variable %qs at %L not supported" -msgstr "" +msgstr "Désolé, l'allocation !$OMP pour la variable de bloc COMMON %qs à %L n'est pas supportée" #: fortran/trans-decl.cc:5231 -#, fuzzy, gcc-internal-format -#| msgid "Character dummy variable %qs at %L with VALUE attribute must have constant length" +#, gcc-internal-format msgid "Sorry, !$OMP allocate for variable %qs at %L with SAVE attribute not yet implemented" -msgstr "La variable muette caractère %qs à %L avec l'attribut VALUE doit avoir une longueur constante" +msgstr "Désolé, l'allocation !$OMP pour la variable %qs à %L avec l'attribut SAVE n'est pas encore implémentée" #: fortran/trans-decl.cc:5437 #, gcc-internal-format @@ -81405,28 +81213,27 @@ msgstr "expression non gérée" #: fortran/trans-openmp.cc:4100 #, gcc-internal-format msgid "%<uses_allocators%> clause with traits and memory spaces" -msgstr "" +msgstr "clause %<uses_allocators%> avec des trais et des espaces mémoire" #: fortran/trans-openmp.cc:5024 #, gcc-internal-format msgid "%<!$OMP %s%> at %L requires %<-fopenmp-allocators%>" -msgstr "" +msgstr "%<!OMP %s%> à %L requiert %<-fopenmp-allocators%>" #: fortran/trans-openmp.cc:5027 #, gcc-internal-format msgid "All files that might deallocate such a variable must be compiled with %<-fopenmp-allocators%>" -msgstr "" +msgstr "Tous les fichiers qui pourraient désallouer une telle variable doivent être compilés avec %<-fopenmp-allocators%>" #: fortran/trans-openmp.cc:5030 #, gcc-internal-format msgid "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, INTENT(OUT) for allocatable dummy arguments, and reallocation of allocatable components allocated with an OpenMP allocator" -msgstr "" +msgstr "Ceci inclut explicitement DEALLOCATE, la réallocation d'affectations intrinsèques, INTENT(OUT) pour des arguments muets allouables et la réallocation de composant allouables alloués avec un allocateur OpenMP" #: fortran/trans-openmp.cc:5607 fortran/trans-openmp.cc:5627 -#, fuzzy, gcc-internal-format -#| msgid "non-rectangular loop nest with step other than constant 1 or -1 for %qs" +#, gcc-internal-format msgid "non-rectangular loop nest with non-constant step for %qs" -msgstr "boucle imbriquée non rectangulaire avec un pas autre que les constantes 1 ou -1 pour %qs" +msgstr "boucle imbriquée non rectangulaire avec un pas non constant pour %qs" #: fortran/trans-openmp.cc:5629 #, gcc-internal-format @@ -82005,24 +81812,22 @@ msgstr "l'argument de CAP n'est pas une constante ni une variable de type CHAR" #: m2/gm2-gcc/m2expr.cc:4029 #, gcc-internal-format msgid "constant literal %qs exceeds internal ZTYPE range" -msgstr "" +msgstr "le littéral constant %qs dépasse la plage du ZTYPE interne" #: m2/gm2-gcc/m2expr.cc:3949 #, gcc-internal-format msgid "constant literal %qs contains %qc, expected 0 or 1" -msgstr "" +msgstr "le littéral constant %qs contient %qc, 0 ou 1 attendu" #: m2/gm2-gcc/m2expr.cc:3964 m2/gm2-gcc/m2expr.cc:3976 -#, fuzzy, gcc-internal-format -#| msgid "language dialect differs %qs, expected %qs" +#, gcc-internal-format msgid "constant literal %qs contains %qc, expected %qs" -msgstr "le dialecte du langage %qs diffère, %qs attendu" +msgstr "le littéral constant %qs contient %qc, %qs attendu" #: m2/gm2-gcc/m2expr.cc:3995 -#, fuzzy, gcc-internal-format -#| msgid "target & host is %qs:%qs, expected %qs:%qs" +#, gcc-internal-format msgid "constant literal %qs contains %qc, expected %qs or %qs" -msgstr "la cible et l'hôte sont %qs:%qs, %qs:%qs attendu" +msgstr "le littéral constant %qs contient %qc, %qs ou %qs attendu" #: m2/gm2-gcc/m2expr.cc:4061 #, gcc-internal-format @@ -83186,7 +82991,7 @@ msgstr "paramètre %qE inutilisé" #: rust/resolve/rust-ast-resolve-expr.cc:167 #, gcc-internal-format, gfc-internal-format msgid "are you trying to break %s? how dare you?" -msgstr "" +msgstr "essayez-vous de casser %s ? Comment osez vous ?" #~ msgid "to generate dependencies you must specify '-fcpp' " #~ msgstr "pour générer les dépendances, vous devez spécifier « -fcpp »" From 477c8a82f38e353a8c6313b38197c70b12deea80 Mon Sep 17 00:00:00 2001 From: Tobias Burnus <tburnus@baylibre.com> Date: Mon, 8 Apr 2024 21:47:51 +0200 Subject: [PATCH 430/551] Fortran: Accept again tab as alternative to space as separator [PR114304] This fixes a side-effect of/regression caused by r14-9822-g93adf88cc6744a, which was for the same PR. PR libfortran/114304 libgfortran/ChangeLog: * io/list_read.c (eat_separator): Accept tab as alternative to space. gcc/testsuite/ChangeLog: * gfortran.dg/pr114304-2.f90: New test. --- gcc/testsuite/gfortran.dg/pr114304-2.f90 | 82 ++++++++++++++++++++++++ libgfortran/io/list_read.c | 2 +- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr114304-2.f90 diff --git a/gcc/testsuite/gfortran.dg/pr114304-2.f90 b/gcc/testsuite/gfortran.dg/pr114304-2.f90 new file mode 100644 index 000000000000..5ef5874f528a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr114304-2.f90 @@ -0,0 +1,82 @@ +! { dg-do run } +! +! PR fortran/114304 +! +! Ensure that '\t' (tab) is supported as separator in list-directed input +! While not really standard conform, this is widely used in user input and +! widely supported. +! + +use iso_c_binding +implicit none +character(len=*,kind=c_char), parameter :: tab = C_HORIZONTAL_TAB + +! Accept '<tab>' as variant to ' ' as separator +! Check that <carriage_return><new line> and <new_line> are handled + +character(len=*,kind=c_char), parameter :: nml_str & + = '&inparm'//C_CARRIAGE_RETURN // C_NEW_LINE // & + 'first'//tab//'='//tab//' .true.'// C_NEW_LINE // & + ' , other'//tab//' ='//tab//'3'//tab//', 2'//tab//'/' + +! Check that <carriage_return> is handled, + +! Note: For new line, Unix uses \n, Windows \r\n but old Apple systems used '\r' +! +! Gfortran does not seem to support all \r, but the following is supported +! since ages, ! which seems to be a gfortran extension as ifort and flang don't like it. + +character(len=*,kind=c_char), parameter :: nml_str2 & + = '&inparm'//C_CARRIAGE_RETURN // C_NEW_LINE // & + 'first'//C_NEW_LINE//'='//tab//' .true.'// C_CARRIAGE_RETURN // & + ' , other'//tab//' ='//tab//'3'//tab//', 2'//tab//'/' + +character(len=*,kind=c_char), parameter :: str & + = tab//'1'//tab//'2,'//tab//'3'//tab//',4'//tab//','//tab//'5'//tab//'/' +character(len=*,kind=c_char), parameter :: str2 & + = tab//'1'//tab//'2;'//tab//'3'//tab//';4'//tab//';'//tab//'5'//tab//'/' +logical :: first +integer :: other(4) +integer :: ints(6) +namelist /inparm/ first , other + +other = 1 + +open(99, file="test.inp") +write(99, '(a)') nml_str +rewind(99) +read(99,nml=inparm) +close(99, status="delete") + +if (.not.first .or. any (other /= [3,2,1,1])) stop 1 + +other = 9 + +open(99, file="test.inp") +write(99, '(a)') nml_str2 +rewind(99) +read(99,nml=inparm) +close(99, status="delete") + +if (.not.first .or. any (other /= [3,2,9,9])) stop 2 + +ints = 66 + +open(99, file="test.inp", decimal='point') +write(99, '(a)') str +rewind(99) +read(99,*) ints +close(99, status="delete") + +if (any (ints /= [1,2,3,4,5,66])) stop 3 + +ints = 77 + +open(99, file="test.inp", decimal='comma') +write(99, '(a)') str2 +rewind(99) +read(99,*) ints +close(99, status="delete") + +if (any (ints /= [1,2,3,4,5,77])) stop 4 +end diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index b56f2a4e6d68..5bbbef26c267 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -463,7 +463,7 @@ eat_separator (st_parameter_dt *dtp) dtp->u.p.comma_flag = 0; c = next_char (dtp); - if (c == ' ') + if (c == ' ' || c == '\t') { eat_spaces (dtp); c = next_char (dtp); From a02d7f0edc47495ffe456af7ab7718896e0a0c25 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Thu, 7 Mar 2024 14:42:07 +0100 Subject: [PATCH 431/551] GCN, nvptx: Errors during device probing are fatal Currently, we silently disable libgomp GCN and nvptx plugins/devices in presence of certain error conditions during device probing, thus typically silently resorting to host-fallback execution. Make such errors fatal, similar as for any other device access later on, so that we early and reliably notice when things go wrong. (Keep just two cases non-fatal: (a) libgomp GCN or nvptx plugins are available but 'libhsa-runtime64.so.1' or 'libcuda.so.1' are not, and (b) those are available, but the corresponding devices are not.) This resolves the issue that we've got execution test cases unexpectedly PASSing, despite: libgomp: GCN fatal error: Run-time could not be initialized Runtime message: HSA_STATUS_ERROR_OUT_OF_RESOURCES: The runtime failed to allocate the necessary resources. This error may also occur when the core runtime library needs to spawn threads or create internal OS-specific events. ..., and therefore they were not offloaded to the GCN device, but ran in host-fallback execution mode. What happend in that scenario is that in 'init_hsa_context' during the initial 'GOMP_OFFLOAD_get_num_devices' we ran into 'HSA_STATUS_ERROR_OUT_OF_RESOURCES', but it wasn't fatal, but just silently disabled the libgomp plugin/device. Especially "entertaining" were cases where such unintended host-fallback execution happened during effective-target checks like 'offload_device_available' (host-fallback execution there meaning: no offload device available), but actual test cases then were running with an offload device available, and therefore mis-configured. include/ * cuda/cuda.h (CUresult): Add 'CUDA_ERROR_NO_DEVICE'. libgomp/ * plugin/plugin-gcn.c (init_hsa_context): Add and handle 'bool probe' parameter. Adjust all users; errors during device probing are fatal. * plugin/plugin-nvptx.c (nvptx_get_num_devices): Aside from 'CUDA_ERROR_NO_DEVICE', errors during device probing are fatal. --- include/cuda/cuda.h | 1 + libgomp/plugin/plugin-gcn.c | 14 ++++++++------ libgomp/plugin/plugin-nvptx.c | 4 +++- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/include/cuda/cuda.h b/include/cuda/cuda.h index 114aba4e074f..0dca4b3a5c0b 100644 --- a/include/cuda/cuda.h +++ b/include/cuda/cuda.h @@ -57,6 +57,7 @@ typedef enum { CUDA_ERROR_OUT_OF_MEMORY = 2, CUDA_ERROR_NOT_INITIALIZED = 3, CUDA_ERROR_DEINITIALIZED = 4, + CUDA_ERROR_NO_DEVICE = 100, CUDA_ERROR_INVALID_CONTEXT = 201, CUDA_ERROR_INVALID_HANDLE = 400, CUDA_ERROR_NOT_FOUND = 500, diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 1d183b61ca4f..27947801ccda 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -1513,10 +1513,12 @@ assign_agent_ids (hsa_agent_t agent, void *data) } /* Initialize hsa_context if it has not already been done. - Return TRUE on success. */ + If !PROBE: returns TRUE on success. + If PROBE: returns TRUE on success or if the plugin/device shall be silently + ignored, and otherwise emits an error and returns FALSE. */ static bool -init_hsa_context (void) +init_hsa_context (bool probe) { hsa_status_t status; int agent_index = 0; @@ -1531,7 +1533,7 @@ init_hsa_context (void) GOMP_PLUGIN_fatal ("%s\n", msg); else GCN_WARNING ("%s\n", msg); - return false; + return probe ? true : false; } status = hsa_fns.hsa_init_fn (); if (status != HSA_STATUS_SUCCESS) @@ -3337,8 +3339,8 @@ GOMP_OFFLOAD_version (void) int GOMP_OFFLOAD_get_num_devices (unsigned int omp_requires_mask) { - if (!init_hsa_context ()) - return 0; + if (!init_hsa_context (true)) + exit (EXIT_FAILURE); /* Return -1 if no omp_requires_mask cannot be fulfilled but devices were present. */ if (hsa_context.agent_count > 0 @@ -3355,7 +3357,7 @@ GOMP_OFFLOAD_get_num_devices (unsigned int omp_requires_mask) bool GOMP_OFFLOAD_init_device (int n) { - if (!init_hsa_context ()) + if (!init_hsa_context (false)) return false; if (n >= hsa_context.agent_count) { diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index ced6e014ecee..5aad3448a8db 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -604,12 +604,14 @@ nvptx_get_num_devices (void) CUresult r = CUDA_CALL_NOCHECK (cuInit, 0); /* This is not an error: e.g. we may have CUDA libraries installed but no devices available. */ - if (r != CUDA_SUCCESS) + if (r == CUDA_ERROR_NO_DEVICE) { GOMP_PLUGIN_debug (0, "Disabling nvptx offloading; cuInit: %s\n", cuda_error (r)); return 0; } + else if (r != CUDA_SUCCESS) + GOMP_PLUGIN_fatal ("cuInit error: %s", cuda_error (r)); } CUDA_CALL_ASSERT (cuDeviceGetCount, &n); From 3fa8bff30ab58bd8b8018764d390ec2fcc8153bb Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Mon, 4 Mar 2024 16:04:11 +0100 Subject: [PATCH 432/551] New effective-target 'asm_goto_with_outputs' After commit e16f90be2dc8af6c371fe79044c3e668fa3dda62 "testsuite: Fix up lra effective target", we get for nvptx target: -PASS: gcc.c-torture/compile/asmgoto-2.c -O0 (test for excess errors) +ERROR: gcc.c-torture/compile/asmgoto-2.c -O0 : no files matched glob pattern "lra1020113.c.[0-9][0-9][0-9]r.reload" for " dg-do 2 compile { target lra } " Etc. However, nvptx appears to support 'asm goto' with outputs, including the new execution test case: PASS: gcc.dg/pr107385.c execution test Therefore, generally use new effective-target 'asm_goto_with_outputs' instead of 'lra'. One exceptions is 'gcc.dg/pr110079.c', which doesn't use 'asm goto' with outputs, and continues using effective-target 'lra', with special-casing nvptx target, to avoid ERROR for 'lra'. gcc/ * doc/sourcebuild.texi (Effective-Target Keywords): Document 'asm_goto_with_outputs'. Add comment to 'lra'. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_lra): Add comment. (check_effective_target_asm_goto_with_outputs): New. * gcc.c-torture/compile/asmgoto-2.c: Use it. * gcc.c-torture/compile/asmgoto-5.c: Likewise. * gcc.c-torture/compile/asmgoto-6.c: Likewise. * gcc.c-torture/compile/pr98096.c: Likewise. * gcc.dg/pr100590.c: Likewise. * gcc.dg/pr107385.c: Likewise. * gcc.dg/pr108095.c: Likewise. * gcc.dg/pr97954.c: Likewise. * gcc.dg/torture/pr100329.c: Likewise. * gcc.dg/torture/pr100398.c: Likewise. * gcc.dg/torture/pr100519.c: Likewise. * gcc.dg/torture/pr110422.c: Likewise. * gcc.dg/pr110079.c: Special-case nvptx target. --- gcc/doc/sourcebuild.texi | 6 ++++++ gcc/testsuite/gcc.c-torture/compile/asmgoto-2.c | 2 +- gcc/testsuite/gcc.c-torture/compile/asmgoto-5.c | 2 +- gcc/testsuite/gcc.c-torture/compile/asmgoto-6.c | 3 +-- gcc/testsuite/gcc.c-torture/compile/pr98096.c | 2 +- gcc/testsuite/gcc.dg/pr100590.c | 2 +- gcc/testsuite/gcc.dg/pr107385.c | 2 +- gcc/testsuite/gcc.dg/pr108095.c | 2 +- gcc/testsuite/gcc.dg/pr110079.c | 2 +- gcc/testsuite/gcc.dg/pr97954.c | 2 +- gcc/testsuite/gcc.dg/torture/pr100329.c | 2 +- gcc/testsuite/gcc.dg/torture/pr100398.c | 2 +- gcc/testsuite/gcc.dg/torture/pr100519.c | 2 +- gcc/testsuite/gcc.dg/torture/pr110422.c | 2 +- gcc/testsuite/lib/target-supports.exp | 13 ++++++++++++- 15 files changed, 31 insertions(+), 15 deletions(-) diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 7ef82fc9b00a..7c0df90e8223 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2871,6 +2871,9 @@ Target supports weak undefined symbols @item R_flag_in_section Target supports the 'R' flag in .section directive in assembly inputs. +@item asm_goto_with_outputs +Target supports 'asm goto' with outputs. + @item automatic_stack_alignment Target supports automatic stack alignment. @@ -2945,6 +2948,9 @@ Target is using an LLVM assembler and/or linker, instead of GNU Binutils. @item lra Target supports local register allocator (LRA). +This must not be called (results in @code{ERROR}) for targets that +don't do register allocation, and therefore neither use nor don't use +LRA. @item lto Compiler has been configured to support link-time optimization (LTO). diff --git a/gcc/testsuite/gcc.c-torture/compile/asmgoto-2.c b/gcc/testsuite/gcc.c-torture/compile/asmgoto-2.c index 43e597bc59f8..234c90e52951 100644 --- a/gcc/testsuite/gcc.c-torture/compile/asmgoto-2.c +++ b/gcc/testsuite/gcc.c-torture/compile/asmgoto-2.c @@ -1,5 +1,5 @@ /* This test should be switched off for a new target with less than 4 allocatable registers */ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ int foo (void) { diff --git a/gcc/testsuite/gcc.c-torture/compile/asmgoto-5.c b/gcc/testsuite/gcc.c-torture/compile/asmgoto-5.c index e1574a2903af..af1ba5a70015 100644 --- a/gcc/testsuite/gcc.c-torture/compile/asmgoto-5.c +++ b/gcc/testsuite/gcc.c-torture/compile/asmgoto-5.c @@ -1,5 +1,5 @@ /* Test to generate output reload in asm goto on x86_64. */ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ /* { dg-skip-if "no O0" { { i?86-*-* x86_64-*-* } && { ! ia32 } } { "-O0" } { "" } } */ #if defined __x86_64__ diff --git a/gcc/testsuite/gcc.c-torture/compile/asmgoto-6.c b/gcc/testsuite/gcc.c-torture/compile/asmgoto-6.c index 6799b83c20a0..cb3c7d711a6d 100644 --- a/gcc/testsuite/gcc.c-torture/compile/asmgoto-6.c +++ b/gcc/testsuite/gcc.c-torture/compile/asmgoto-6.c @@ -1,5 +1,4 @@ - -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ /* PR middle-end/110420 */ /* PR middle-end/103979 */ /* PR middle-end/98619 */ diff --git a/gcc/testsuite/gcc.c-torture/compile/pr98096.c b/gcc/testsuite/gcc.c-torture/compile/pr98096.c index bba3fa5c6190..3a1b6159c2e5 100644 --- a/gcc/testsuite/gcc.c-torture/compile/pr98096.c +++ b/gcc/testsuite/gcc.c-torture/compile/pr98096.c @@ -1,6 +1,6 @@ /* Test for correct naming of label operands in asm goto in case of presence of input/output operands. */ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ int i, j; int f(void) { asm goto ("# %0 %2" : "+r" (i) ::: jmp); diff --git a/gcc/testsuite/gcc.dg/pr100590.c b/gcc/testsuite/gcc.dg/pr100590.c index 8d1e1a0d3064..64cb717ed0ee 100644 --- a/gcc/testsuite/gcc.dg/pr100590.c +++ b/gcc/testsuite/gcc.dg/pr100590.c @@ -1,5 +1,5 @@ /* PR rtl-optimization/100590 */ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ /* { dg-options "-O1 -fno-dce -w" } */ int diff --git a/gcc/testsuite/gcc.dg/pr107385.c b/gcc/testsuite/gcc.dg/pr107385.c index 0cc0655d8483..690ad3c1b5e5 100644 --- a/gcc/testsuite/gcc.dg/pr107385.c +++ b/gcc/testsuite/gcc.dg/pr107385.c @@ -1,5 +1,5 @@ /* PR middle-end/107385 */ -/* { dg-do run { target lra } } */ +/* { dg-do run { target asm_goto_with_outputs } } */ /* { dg-options "-O2" } */ __attribute__((noipa)) int diff --git a/gcc/testsuite/gcc.dg/pr108095.c b/gcc/testsuite/gcc.dg/pr108095.c index 0a487cf614a1..115ea73e39b4 100644 --- a/gcc/testsuite/gcc.dg/pr108095.c +++ b/gcc/testsuite/gcc.dg/pr108095.c @@ -1,5 +1,5 @@ /* PR tree-optimization/108095 */ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ /* { dg-options "-Os -g" } */ int v; diff --git a/gcc/testsuite/gcc.dg/pr110079.c b/gcc/testsuite/gcc.dg/pr110079.c index 1682f9c23444..f87064d5f2ce 100644 --- a/gcc/testsuite/gcc.dg/pr110079.c +++ b/gcc/testsuite/gcc.dg/pr110079.c @@ -1,5 +1,5 @@ /* PR rtl-optimization/110079 */ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target { nvptx-*-* || lra } } } */ /* { dg-options "-O2" } */ /* { dg-additional-options "-freorder-blocks-and-partition" { target freorder } } */ diff --git a/gcc/testsuite/gcc.dg/pr97954.c b/gcc/testsuite/gcc.dg/pr97954.c index 0be60f500b66..619bed3b40c3 100644 --- a/gcc/testsuite/gcc.dg/pr97954.c +++ b/gcc/testsuite/gcc.dg/pr97954.c @@ -1,5 +1,5 @@ /* PR rtl-optimization/97954 */ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ /* { dg-options "-O2" } */ int diff --git a/gcc/testsuite/gcc.dg/torture/pr100329.c b/gcc/testsuite/gcc.dg/torture/pr100329.c index 2a4331ba7127..5759131a6cae 100644 --- a/gcc/testsuite/gcc.dg/torture/pr100329.c +++ b/gcc/testsuite/gcc.dg/torture/pr100329.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ /* { dg-additional-options "--param tree-reassoc-width=2" } */ unsigned int a0; diff --git a/gcc/testsuite/gcc.dg/torture/pr100398.c b/gcc/testsuite/gcc.dg/torture/pr100398.c index 4fc1168d22fd..eeeaf98e15bc 100644 --- a/gcc/testsuite/gcc.dg/torture/pr100398.c +++ b/gcc/testsuite/gcc.dg/torture/pr100398.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ int test5_limit (void) diff --git a/gcc/testsuite/gcc.dg/torture/pr100519.c b/gcc/testsuite/gcc.dg/torture/pr100519.c index 89dff668a970..b82ce46c5293 100644 --- a/gcc/testsuite/gcc.dg/torture/pr100519.c +++ b/gcc/testsuite/gcc.dg/torture/pr100519.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ /* { dg-additional-options "--param tree-reassoc-width=2" } */ unsigned int foo_a1, foo_a2; diff --git a/gcc/testsuite/gcc.dg/torture/pr110422.c b/gcc/testsuite/gcc.dg/torture/pr110422.c index 2a653bdfce3e..34de7a2980fb 100644 --- a/gcc/testsuite/gcc.dg/torture/pr110422.c +++ b/gcc/testsuite/gcc.dg/torture/pr110422.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target lra } } */ +/* { dg-do compile { target asm_goto_with_outputs } } */ struct T { int x; }; int foo(void) { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 45435586de21..49f2482686a2 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -13204,7 +13204,9 @@ proc check_effective_target_powerpc_as_p10_htm { } { }] } -# return 1 if LRA is supported. +# Return 1 if LRA is supported. This must not be called (results in ERROR) for +# targets that don't do register allocation, and therefore neither use nor +# don't use LRA. proc check_effective_target_lra { } { # Start with heavily used targets which are known to always use LRA. @@ -13220,6 +13222,15 @@ proc check_effective_target_lra { } { } {-O2 -fdump-rtl-reload-details}] ;# LRA notes requires a detailed dump. } +# Return 1 if 'asm goto' with outputs is supported, 0 otherwise. + +proc check_effective_target_asm_goto_with_outputs { } { + if { [istarget nvptx-*-*] } { + return 1 + } + return [check_effective_target_lra] +} + # Test whether optimizations are enabled ('__OPTIMIZE__') per the # 'current_compiler_flags' (thus don't cache). From df7625c3af004a81c13d54bb8810e03932eeb59a Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Sat, 24 Feb 2024 00:29:14 +0100 Subject: [PATCH 433/551] GCN: '--param=gcn-preferred-vectorization-factor=[default,32,64]' ..., and specify '--param=gcn-preferred-vectorization-factor=64' for 'gcc.target/gcn/[...]' test cases with 'scan-assembler' directives that are specific to 64-lane vectors. This resolves regressions introduced in commit 6dedafe166cc02ae87b6a0699ad61ce3ffc46803 "amdgcn: Prefer V32 on RDNA devices". gcc/ * config/gcn/gcn.opt (--param=gcn-preferred-vectorization-factor): New. * config/gcn/gcn.cc (gcn_vectorize_preferred_simd_mode) Use it. * doc/invoke.texi (Optimize Options): Document it. gcc/testsuite/ * gcc.target/gcn/cond_fmaxnm_1.c: Specify '--param=gcn-preferred-vectorization-factor=64'. * gcc.target/gcn/cond_fmaxnm_2.c: Likewise. * gcc.target/gcn/cond_fmaxnm_3.c: Likewise. * gcc.target/gcn/cond_fmaxnm_4.c: Likewise. * gcc.target/gcn/cond_fmaxnm_5.c: Likewise. * gcc.target/gcn/cond_fmaxnm_6.c: Likewise. * gcc.target/gcn/cond_fmaxnm_7.c: Likewise. * gcc.target/gcn/cond_fmaxnm_8.c: Likewise. * gcc.target/gcn/cond_fminnm_1.c: Likewise. * gcc.target/gcn/cond_fminnm_2.c: Likewise. * gcc.target/gcn/cond_fminnm_3.c: Likewise. * gcc.target/gcn/cond_fminnm_4.c: Likewise. * gcc.target/gcn/cond_fminnm_5.c: Likewise. * gcc.target/gcn/cond_fminnm_6.c: Likewise. * gcc.target/gcn/cond_fminnm_7.c: Likewise. * gcc.target/gcn/cond_fminnm_8.c: Likewise. * gcc.target/gcn/cond_shift_3.c: Likewise. * gcc.target/gcn/cond_shift_4.c: Likewise. * gcc.target/gcn/cond_shift_8.c: Likewise. * gcc.target/gcn/cond_shift_9.c: Likewise. * gcc.target/gcn/cond_smax_1.c: Likewise. * gcc.target/gcn/cond_smin_1.c: Likewise. * gcc.target/gcn/cond_umax_1.c: Likewise. * gcc.target/gcn/cond_umin_1.c: Likewise. * gcc.target/gcn/simd-math-1.c: Likewise. * gcc.target/gcn/simd-math-5-char.c: Likewise. * gcc.target/gcn/simd-math-5-long.c: Likewise. * gcc.target/gcn/simd-math-5-short.c: Likewise. * gcc.target/gcn/simd-math-5.c: Likewise. * gcc.target/gcn/smax_1.c: Likewise. * gcc.target/gcn/smin_1.c: Likewise. * gcc.target/gcn/umax_1.c: Likewise. * gcc.target/gcn/umin_1.c: Likewise. --- gcc/config/gcn/gcn.cc | 14 +++++++++++++- gcc/config/gcn/gcn.opt | 16 ++++++++++++++++ gcc/doc/invoke.texi | 8 ++++++++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_6.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_7.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fmaxnm_8.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_2.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_5.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_6.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_7.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_fminnm_8.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_shift_3.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_shift_4.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_shift_8.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_shift_9.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_smax_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_smin_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_umax_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/cond_umin_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/simd-math-1.c | 3 ++- gcc/testsuite/gcc.target/gcn/simd-math-5-char.c | 3 +++ gcc/testsuite/gcc.target/gcn/simd-math-5-long.c | 3 +++ gcc/testsuite/gcc.target/gcn/simd-math-5-short.c | 3 +++ gcc/testsuite/gcc.target/gcn/simd-math-5.c | 3 +++ gcc/testsuite/gcc.target/gcn/smax_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/smin_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/umax_1.c | 2 ++ gcc/testsuite/gcc.target/gcn/umin_1.c | 2 ++ 36 files changed, 107 insertions(+), 2 deletions(-) diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc index 700e554855e5..9f91d4f9ebd1 100644 --- a/gcc/config/gcn/gcn.cc +++ b/gcc/config/gcn/gcn.cc @@ -5231,6 +5231,14 @@ gcn_vector_mode_supported_p (machine_mode mode) static machine_mode gcn_vectorize_preferred_simd_mode (scalar_mode mode) { + bool v32; + if (gcn_preferred_vectorization_factor == 32) + v32 = true; + else if (gcn_preferred_vectorization_factor == 64) + v32 = false; + else if (gcn_preferred_vectorization_factor != -1) + gcc_unreachable (); + else if (TARGET_RDNA2_PLUS) /* RDNA devices have 32-lane vectors with limited support for 64-bit vectors (in particular, permute operations are only available for cases that don't span the 32-lane boundary). @@ -5238,7 +5246,11 @@ gcn_vectorize_preferred_simd_mode (scalar_mode mode) From the RDNA3 manual: "Hardware may choose to skip either half if the EXEC mask for that half is all zeros...". This means that preferring 32-lanes is a good stop-gap until we have proper wave32 support. */ - if (TARGET_RDNA2_PLUS) + v32 = true; + else + v32 = false; + + if (v32) switch (mode) { case E_QImode: diff --git a/gcc/config/gcn/gcn.opt b/gcc/config/gcn/gcn.opt index 1067b45f2947..42bb5f75a426 100644 --- a/gcc/config/gcn/gcn.opt +++ b/gcc/config/gcn/gcn.opt @@ -116,3 +116,19 @@ Compile for devices requiring XNACK enabled. Default \"any\" if USM is supported msram-ecc= Target RejectNegative Joined ToLower Enum(hsaco_attr_type) Var(flag_sram_ecc) Init(HSACO_ATTR_ANY) Compile for devices with the SRAM ECC feature enabled, or not. Default \"any\". + +-param=gcn-preferred-vectorization-factor= +Target Joined Enum(gcn_preferred_vectorization_factor) Var(gcn_preferred_vectorization_factor) Init(-1) Param +--param=gcn-preferred-vectorization-factor=[default,32,64] Preferred vectorization factor. + +Enum +Name(gcn_preferred_vectorization_factor) Type(int) + +EnumValue +Enum(gcn_preferred_vectorization_factor) String(default) Value(-1) + +EnumValue +Enum(gcn_preferred_vectorization_factor) String(32) Value(32) + +EnumValue +Enum(gcn_preferred_vectorization_factor) String(64) Value(64) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index f5f5d83f8179..0b1230b7bc3c 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -17017,6 +17017,14 @@ loop. The default value is four. @end table +The following choices of @var{name} are available on GCN targets: + +@table @gcctabopt +@item gcn-preferred-vectorization-factor +Preferred vectorization factor: @samp{default}, @samp{32}, @samp{64}. + +@end table + The following choices of @var{name} are available on i386 and x86_64 targets: @table @gcctabopt diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_1.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_1.c index 17c49bdc5189..29e77064bc50 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_1.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2.c index 406df48962a3..f781ca2c0133 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_2.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c index 45b8b7883ba5..5da33ac27267 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_3.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c index 416aea89e6e2..263db35dd499 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_4.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5.c index a4d7ab991de9..6bfc2b9627f2 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_5.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include "cond_fmaxnm_1.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_6.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_6.c index 6c64a01bcbb9..8ea52725cbee 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_6.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_6.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include "cond_fmaxnm_2.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_7.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_7.c index bdb3f2f99ef5..97f8cf57ee32 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_7.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_7.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include "cond_fmaxnm_3.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_8.c b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_8.c index c11633b5236c..9de89790a123 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_8.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fmaxnm_8.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include "cond_fmaxnm_4.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_1.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_1.c index bb4568875685..7068e8c4f540 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_1.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_1.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_2.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_2.c index 502f8987494b..d8ee9446e380 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_2.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_2.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_2.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c index 2ea1eb2ec2cc..59bbc5610ced 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_3.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_3.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c index 3673ecafc2d1..07e6aae89197 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_4.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -ffast-math -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_4.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_5.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_5.c index ac98941a3735..84ab917043da 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_5.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_5.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_1.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_6.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_6.c index 7f4dba0d314b..a1525d91b332 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_6.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_6.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_2.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_7.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_7.c index 5faf0c5cc59e..bb5e0f24d5bb 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_7.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_7.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_3.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_fminnm_8.c b/gcc/testsuite/gcc.target/gcn/cond_fminnm_8.c index 89d93ac596ab..c090377c0e18 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_fminnm_8.c +++ b/gcc/testsuite/gcc.target/gcn/cond_fminnm_8.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #define FN(X) __builtin_fmin##X #include "cond_fmaxnm_4.c" diff --git a/gcc/testsuite/gcc.target/gcn/cond_shift_3.c b/gcc/testsuite/gcc.target/gcn/cond_shift_3.c index 983386c14646..1181384a4957 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_shift_3.c +++ b/gcc/testsuite/gcc.target/gcn/cond_shift_3.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_shift_4.c b/gcc/testsuite/gcc.target/gcn/cond_shift_4.c index c610363d9df2..ea2110d0a6fe 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_shift_4.c +++ b/gcc/testsuite/gcc.target/gcn/cond_shift_4.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_shift_8.c b/gcc/testsuite/gcc.target/gcn/cond_shift_8.c index 0749e2e5e537..9942a2e167ce 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_shift_8.c +++ b/gcc/testsuite/gcc.target/gcn/cond_shift_8.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_shift_9.c b/gcc/testsuite/gcc.target/gcn/cond_shift_9.c index 61aba27504e6..663192f97e78 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_shift_9.c +++ b/gcc/testsuite/gcc.target/gcn/cond_shift_9.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_smax_1.c b/gcc/testsuite/gcc.target/gcn/cond_smax_1.c index 342b5e827d2e..212091a15df7 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_smax_1.c +++ b/gcc/testsuite/gcc.target/gcn/cond_smax_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_smin_1.c b/gcc/testsuite/gcc.target/gcn/cond_smin_1.c index ad8b583448b0..714aab2f7f77 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_smin_1.c +++ b/gcc/testsuite/gcc.target/gcn/cond_smin_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_umax_1.c b/gcc/testsuite/gcc.target/gcn/cond_umax_1.c index 389228f9e4af..9018b0068176 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_umax_1.c +++ b/gcc/testsuite/gcc.target/gcn/cond_umax_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/cond_umin_1.c b/gcc/testsuite/gcc.target/gcn/cond_umin_1.c index 65759d695ad8..64d0a5eb3504 100644 --- a/gcc/testsuite/gcc.target/gcn/cond_umin_1.c +++ b/gcc/testsuite/gcc.target/gcn/cond_umin_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/simd-math-1.c b/gcc/testsuite/gcc.target/gcn/simd-math-1.c index 6868ccb2c543..abd6a932a019 100644 --- a/gcc/testsuite/gcc.target/gcn/simd-math-1.c +++ b/gcc/testsuite/gcc.target/gcn/simd-math-1.c @@ -2,7 +2,8 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -fno-math-errno -mstack-size=3000000 -fdump-tree-vect" } */ - +/* The 'scan-tree-dump' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #undef PRINT_RESULT #define VERBOSE 0 diff --git a/gcc/testsuite/gcc.target/gcn/simd-math-5-char.c b/gcc/testsuite/gcc.target/gcn/simd-math-5-char.c index 2321c8390c6a..e3521ce7ca31 100644 --- a/gcc/testsuite/gcc.target/gcn/simd-math-5-char.c +++ b/gcc/testsuite/gcc.target/gcn/simd-math-5-char.c @@ -1,3 +1,6 @@ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ + #define TYPE char #include "simd-math-5.c" diff --git a/gcc/testsuite/gcc.target/gcn/simd-math-5-long.c b/gcc/testsuite/gcc.target/gcn/simd-math-5-long.c index 37b6cef691ed..96a9fd3e734e 100644 --- a/gcc/testsuite/gcc.target/gcn/simd-math-5-long.c +++ b/gcc/testsuite/gcc.target/gcn/simd-math-5-long.c @@ -1,3 +1,6 @@ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ + #define TYPE long #include "simd-math-5.c" diff --git a/gcc/testsuite/gcc.target/gcn/simd-math-5-short.c b/gcc/testsuite/gcc.target/gcn/simd-math-5-short.c index 84cdc9b5fdd6..c0bff40380a3 100644 --- a/gcc/testsuite/gcc.target/gcn/simd-math-5-short.c +++ b/gcc/testsuite/gcc.target/gcn/simd-math-5-short.c @@ -1,3 +1,6 @@ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ + #define TYPE short #include "simd-math-5.c" diff --git a/gcc/testsuite/gcc.target/gcn/simd-math-5.c b/gcc/testsuite/gcc.target/gcn/simd-math-5.c index bc181b45e1b1..b5c5dc9f288e 100644 --- a/gcc/testsuite/gcc.target/gcn/simd-math-5.c +++ b/gcc/testsuite/gcc.target/gcn/simd-math-5.c @@ -1,6 +1,9 @@ /* Test that the auto-vectorizer uses the libgcc vectorized division and modulus functions. */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ + /* Setting it this way ensures the run tests use the same flag as the compile tests. */ #pragma GCC optimize("O2") diff --git a/gcc/testsuite/gcc.target/gcn/smax_1.c b/gcc/testsuite/gcc.target/gcn/smax_1.c index 46c21f731329..eec050caf711 100644 --- a/gcc/testsuite/gcc.target/gcn/smax_1.c +++ b/gcc/testsuite/gcc.target/gcn/smax_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/smin_1.c b/gcc/testsuite/gcc.target/gcn/smin_1.c index 8d6edfaa3d14..8aa8cbb9db88 100644 --- a/gcc/testsuite/gcc.target/gcn/smin_1.c +++ b/gcc/testsuite/gcc.target/gcn/smin_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/umax_1.c b/gcc/testsuite/gcc.target/gcn/umax_1.c index dc4b9842d9a8..934bf9a4a7cb 100644 --- a/gcc/testsuite/gcc.target/gcn/umax_1.c +++ b/gcc/testsuite/gcc.target/gcn/umax_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> diff --git a/gcc/testsuite/gcc.target/gcn/umin_1.c b/gcc/testsuite/gcc.target/gcn/umin_1.c index d07f7ec083b8..44343bd44cf9 100644 --- a/gcc/testsuite/gcc.target/gcn/umin_1.c +++ b/gcc/testsuite/gcc.target/gcn/umin_1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -ftree-vectorize -dp" } */ +/* The 'scan-assembler' directives are specific to 64-lane vectors. + { dg-additional-options --param=gcn-preferred-vectorization-factor=64 } */ #include <stdint.h> From eaccdba315b86d374a4e72b9dd8fefb0fc3cc5ee Mon Sep 17 00:00:00 2001 From: Uros Bizjak <ubizjak@gmail.com> Date: Mon, 8 Apr 2024 20:54:30 +0200 Subject: [PATCH 434/551] combine: Fix ICE in try_combine on pr112494.c [PR112560] The compiler, configured with --enable-checking=yes,rtl,extra ICEs with: internal compiler error: RTL check: expected elt 0 type 'e' or 'u', have 'E' (rtx unspec) in try_combine, at combine.cc:3237 This is 3236 /* Just replace the CC reg with a new mode. */ 3237 SUBST (XEXP (*cc_use_loc, 0), newpat_dest); 3238 undobuf.other_insn = cc_use_insn; in combine.cc, where *cc_use_loc is (unspec:DI [ (reg:CC 17 flags) ] UNSPEC_PUSHFL) combine assumes CC must be used inside of a comparison and uses XEXP (..., 0) without checking on the RTX type of the argument. Replace cc_use_loc with the entire new RTX only in case cc_use_loc satisfies COMPARISON_P predicate. Otherwise scan the entire cc_use_loc RTX for CC reg to be updated with a new mode. PR rtl-optimization/112560 gcc/ChangeLog: * combine.cc (try_combine): Replace cc_use_loc with the entire new RTX only in case cc_use_loc satisfies COMPARISON_P predicate. Otherwise scan the entire cc_use_loc RTX for CC reg to be updated with a new mode. * config/i386/i386.md (@pushf<mode>2): Allow all CC modes for operand 1. --- gcc/combine.cc | 16 +++++++++++++--- gcc/config/i386/i386.md | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/combine.cc b/gcc/combine.cc index 745391016d04..71c9abc145c2 100644 --- a/gcc/combine.cc +++ b/gcc/combine.cc @@ -3222,8 +3222,7 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, #endif /* Cases for modifying the CC-using comparison. */ if (compare_code != orig_compare_code - /* ??? Do we need to verify the zero rtx? */ - && XEXP (*cc_use_loc, 1) == const0_rtx) + && COMPARISON_P (*cc_use_loc)) { /* Replace cc_use_loc with entire new RTX. */ SUBST (*cc_use_loc, @@ -3233,8 +3232,19 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, } else if (compare_mode != orig_compare_mode) { + subrtx_ptr_iterator::array_type array; + /* Just replace the CC reg with a new mode. */ - SUBST (XEXP (*cc_use_loc, 0), newpat_dest); + FOR_EACH_SUBRTX_PTR (iter, array, cc_use_loc, NONCONST) + { + rtx *loc = *iter; + if (REG_P (*loc) + && REGNO (*loc) == REGNO (newpat_dest)) + { + SUBST (*loc, newpat_dest); + iter.skip_subrtxes (); + } + } undobuf.other_insn = cc_use_insn; } } diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index bb2c72f3473e..10ae3113ae8d 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -2219,9 +2219,9 @@ (define_insn "@pushfl<mode>2" [(set (match_operand:W 0 "push_operand" "=<") - (unspec:W [(match_operand:CC 1 "flags_reg_operand")] + (unspec:W [(match_operand 1 "flags_reg_operand")] UNSPEC_PUSHFL))] - "" + "GET_MODE_CLASS (GET_MODE (operands[1])) == MODE_CC" "pushf{<imodesuffix>}" [(set_attr "type" "push") (set_attr "mode" "<MODE>")]) From 45532e3a929d2893b3efd26beefb1162e50cb51b Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Tue, 9 Apr 2024 00:17:24 +0000 Subject: [PATCH 435/551] Daily bump. --- gcc/ChangeLog | 104 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/po/ChangeLog | 4 ++ gcc/testsuite/ChangeLog | 102 +++++++++++++++++++++++++++++++++++++++ include/ChangeLog | 4 ++ libgfortran/ChangeLog | 5 ++ libgomp/ChangeLog | 8 ++++ libstdc++-v3/ChangeLog | 45 +++++++++++++++++ 8 files changed, 273 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8eedf31c2f2f..b1f8edbd601e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,107 @@ +2024-04-08 Uros Bizjak <ubizjak@gmail.com> + + PR rtl-optimization/112560 + * combine.cc (try_combine): Replace cc_use_loc with the entire + new RTX only in case cc_use_loc satisfies COMPARISON_P predicate. + Otherwise scan the entire cc_use_loc RTX for CC reg to be updated + with a new mode. + * config/i386/i386.md (@pushf<mode>2): Allow all CC modes for + operand 1. + +2024-04-08 Thomas Schwinge <tschwinge@baylibre.com> + + * config/gcn/gcn.opt (--param=gcn-preferred-vectorization-factor): + New. + * config/gcn/gcn.cc (gcn_vectorize_preferred_simd_mode) Use it. + * doc/invoke.texi (Optimize Options): Document it. + +2024-04-08 Thomas Schwinge <tschwinge@baylibre.com> + + * doc/sourcebuild.texi (Effective-Target Keywords): Document + 'asm_goto_with_outputs'. Add comment to 'lra'. + +2024-04-08 Martin Jambor <mjambor@suse.cz> + + PR ipa/113359 + * ipa-icf-gimple.h (func_checker): New members + safe_for_total_scalarization_p, m_total_scalarization_limit_known_p + and m_total_scalarization_limit. + (func_checker::func_checker): Initialize new member variables. + * ipa-icf-gimple.cc: Include tree-sra.h. + (func_checker::func_checker): Initialize new member variables. + (func_checker::safe_for_total_scalarization_p): New function. + (func_checker::compare_operand): Use the new function. + * tree-sra.h (sra_get_max_scalarization_size): Declare. + (sra_total_scalarization_would_copy_same_data_p): Likewise. + * tree-sra.cc (prepare_iteration_over_array_elts): New function. + (class sra_padding_collecting): New. + (sra_padding_collecting::record_padding): Likewise. + (scalarizable_type_p): Rename to totally_scalarizable_type_p. Add + ability to record padding when requested. + (totally_scalarize_subtree): Split out gathering information necessary + to iterate over array elements to prepare_iteration_over_array_elts. + Fix errornous early exit. + (analyze_all_variable_accesses): Adjust the call to + totally_scalarizable_type_p. Move determining of total scalariation + size limit... + (sra_get_max_scalarization_size): ...here. + (check_ts_and_push_padding_to_vec): New function. + (sra_total_scalarization_would_copy_same_data_p): Likewise. + +2024-04-08 Martin Jambor <mjambor@suse.cz> + + PR ipa/113907 + * ipa-prop.h (class ipa_vr): Declare new overload of a member function + equal_p. + (ipa_jump_functions_equivalent_p): Declare. + * ipa-prop.cc (ipa_vr::equal_p): New function. + (ipa_agg_pass_through_jf_equivalent_p): Likewise. + (ipa_agg_jump_functions_equivalent_p): Likewise. + (ipa_jump_functions_equivalent_p): Likewise. + * ipa-cp.h (values_equal_for_ipcp_p): Declare. + * ipa-cp.cc (values_equal_for_ipcp_p): Make function public. + * ipa-icf-gimple.cc: Include alloc-pool.h, symbol-summary.h, sreal.h, + ipa-cp.h and ipa-prop.h. + (func_checker::compare_gimple_call): Comapre jump functions. + +2024-04-08 Richard Sandiford <richard.sandiford@arm.com> + + PR target/114607 + * config/aarch64/aarch64-sve-builtins-base.cc + (svusdot_impl::expand): Fix botched attempt to swap the operands + for svsudot. + +2024-04-08 Tatsuyuki Ishi <ishitatsuyuki@gmail.com> + + * config/riscv/riscv.opt: Add -mtls-dialect to configure TLS flavor. + * config.gcc: Add --with-tls configuration option to change the + default TLS flavor. + * config/riscv/riscv.h: Add TARGET_TLSDESC determined from + -mtls-dialect and with_tls defaults. + * config/riscv/riscv-opts.h: Define enum riscv_tls_type for the + two TLS flavors. + * config/riscv/riscv-protos.h: Define SYMBOL_TLSDESC symbol type. + * config/riscv/riscv.md: Add instruction sequence for TLSDESC. + * config/riscv/riscv.cc (riscv_symbol_insns): Add instruction + sequence length data for TLSDESC. + (riscv_legitimize_tls_address): Add lowering of TLSDESC. + * doc/install.texi: Document --with-tls for RISC-V. + * doc/invoke.texi: Document -mtls-dialect for RISC-V. + +2024-04-08 Jakub Jelinek <jakub@redhat.com> + + PR target/114605 + * config/s390/s390.cc (s390_const_int_pool_entry_p): Punt + if mem doesn't have MODE_INT mode, or pool constant doesn't + have MODE_INT mode, or if pool constant mode is smaller than + mem mode. If mem mode is different from pool constant mode, + try to simplify subreg. If that doesn't work, punt, if it + does, use the simplified constant instead of the constant pool + constant. + * config/s390/s390.md (movdi from const pool peephole): If + either low or high 32-bit part is zero, just emit move insn + instead of move + ior. + 2024-04-08 Richard Biener <rguenther@suse.de> PR tree-optimization/114624 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 1c86cd975ee6..5c14c80a3420 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240408 +20240409 diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index e98b9fb6698d..fd264defc9cc 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2024-04-08 Joseph Myers <josmyers@redhat.com> + + * fr.po: Update. + 2024-04-03 Joseph Myers <josmyers@redhat.com> * sv.po: Update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 07d9248c842f..ea798168baab 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,105 @@ +2024-04-08 Thomas Schwinge <tschwinge@baylibre.com> + + * gcc.target/gcn/cond_fmaxnm_1.c: Specify + '--param=gcn-preferred-vectorization-factor=64'. + * gcc.target/gcn/cond_fmaxnm_2.c: Likewise. + * gcc.target/gcn/cond_fmaxnm_3.c: Likewise. + * gcc.target/gcn/cond_fmaxnm_4.c: Likewise. + * gcc.target/gcn/cond_fmaxnm_5.c: Likewise. + * gcc.target/gcn/cond_fmaxnm_6.c: Likewise. + * gcc.target/gcn/cond_fmaxnm_7.c: Likewise. + * gcc.target/gcn/cond_fmaxnm_8.c: Likewise. + * gcc.target/gcn/cond_fminnm_1.c: Likewise. + * gcc.target/gcn/cond_fminnm_2.c: Likewise. + * gcc.target/gcn/cond_fminnm_3.c: Likewise. + * gcc.target/gcn/cond_fminnm_4.c: Likewise. + * gcc.target/gcn/cond_fminnm_5.c: Likewise. + * gcc.target/gcn/cond_fminnm_6.c: Likewise. + * gcc.target/gcn/cond_fminnm_7.c: Likewise. + * gcc.target/gcn/cond_fminnm_8.c: Likewise. + * gcc.target/gcn/cond_shift_3.c: Likewise. + * gcc.target/gcn/cond_shift_4.c: Likewise. + * gcc.target/gcn/cond_shift_8.c: Likewise. + * gcc.target/gcn/cond_shift_9.c: Likewise. + * gcc.target/gcn/cond_smax_1.c: Likewise. + * gcc.target/gcn/cond_smin_1.c: Likewise. + * gcc.target/gcn/cond_umax_1.c: Likewise. + * gcc.target/gcn/cond_umin_1.c: Likewise. + * gcc.target/gcn/simd-math-1.c: Likewise. + * gcc.target/gcn/simd-math-5-char.c: Likewise. + * gcc.target/gcn/simd-math-5-long.c: Likewise. + * gcc.target/gcn/simd-math-5-short.c: Likewise. + * gcc.target/gcn/simd-math-5.c: Likewise. + * gcc.target/gcn/smax_1.c: Likewise. + * gcc.target/gcn/smin_1.c: Likewise. + * gcc.target/gcn/umax_1.c: Likewise. + * gcc.target/gcn/umin_1.c: Likewise. + +2024-04-08 Thomas Schwinge <tschwinge@baylibre.com> + + * lib/target-supports.exp (check_effective_target_lra): Add + comment. + (check_effective_target_asm_goto_with_outputs): New. + * gcc.c-torture/compile/asmgoto-2.c: Use it. + * gcc.c-torture/compile/asmgoto-5.c: Likewise. + * gcc.c-torture/compile/asmgoto-6.c: Likewise. + * gcc.c-torture/compile/pr98096.c: Likewise. + * gcc.dg/pr100590.c: Likewise. + * gcc.dg/pr107385.c: Likewise. + * gcc.dg/pr108095.c: Likewise. + * gcc.dg/pr97954.c: Likewise. + * gcc.dg/torture/pr100329.c: Likewise. + * gcc.dg/torture/pr100398.c: Likewise. + * gcc.dg/torture/pr100519.c: Likewise. + * gcc.dg/torture/pr110422.c: Likewise. + * gcc.dg/pr110079.c: Special-case nvptx target. + +2024-04-08 Tobias Burnus <tburnus@baylibre.com> + + PR libfortran/114304 + * gfortran.dg/pr114304-2.f90: New test. + +2024-04-08 Martin Jambor <mjambor@suse.cz> + + PR ipa/113359 + * gcc.dg/lto/pr113359-1_0.c: New. + * gcc.dg/lto/pr113359-1_1.c: Likewise. + * gcc.dg/lto/pr113359-2_0.c: Likewise. + * gcc.dg/lto/pr113359-2_1.c: Likewise. + * gcc.dg/lto/pr113359-3_0.c: Likewise. + * gcc.dg/lto/pr113359-3_1.c: Likewise. + * gcc.dg/lto/pr113359-4_0.c: Likewise. + * gcc.dg/lto/pr113359-4_1.c: Likewise. + * gcc.dg/lto/pr113359-5_0.c: Likewise. + * gcc.dg/lto/pr113359-5_1.c: Likewise. + +2024-04-08 Martin Jambor <mjambor@suse.cz> + + PR ipa/113907 + * gcc.dg/lto/pr113907_0.c: New. + * gcc.dg/lto/pr113907_1.c: Likewise. + * gcc.dg/lto/pr113907_2.c: Likewise. + +2024-04-08 Richard Sandiford <richard.sandiford@arm.com> + + PR target/114607 + * gcc.target/aarch64/sve/acle/asm/sudot_s32.c: New test. + +2024-04-08 Tatsuyuki Ishi <ishitatsuyuki@gmail.com> + + * gcc.target/riscv/tls_1.x: Add TLSDESC GD test case. + * gcc.target/riscv/tlsdesc.c: Same as above. + +2024-04-08 Jakub Jelinek <jakub@redhat.com> + + PR target/114605 + * gcc.dg/pr114605.c: New test. + +2024-04-08 Swinney, Jonathan <jswinney@amazon.com> + + * gcc.target/aarch64/advsimd-intrinsics/vld1x4.c: Exit with a nonzero + code if the test fails. + 2024-04-08 Richard Biener <rguenther@suse.de> PR tree-optimization/114624 diff --git a/include/ChangeLog b/include/ChangeLog index d5ada8bba379..a71d09e63a04 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2024-04-08 Thomas Schwinge <tschwinge@baylibre.com> + + * cuda/cuda.h (CUresult): Add 'CUDA_ERROR_NO_DEVICE'. + 2024-02-29 Tom Tromey <tom@tromey.com> * gcc-cp-interface.h (gcc_cp_fe_context_function): Update diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 4e6c2406f48e..2ca69f1617b8 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2024-04-08 Tobias Burnus <tburnus@baylibre.com> + + PR libfortran/114304 + * io/list_read.c (eat_separator): Accept tab as alternative to space. + 2024-04-06 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/114304 diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index c96847488d28..9184cfc34cae 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,11 @@ +2024-04-08 Thomas Schwinge <tschwinge@baylibre.com> + + * plugin/plugin-gcn.c (init_hsa_context): Add and handle + 'bool probe' parameter. Adjust all users; errors during device + probing are fatal. + * plugin/plugin-nvptx.c (nvptx_get_num_devices): Aside from + 'CUDA_ERROR_NO_DEVICE', errors during device probing are fatal. + 2024-04-05 Thomas Schwinge <tschwinge@baylibre.com> * testsuite/libgomp.c/reverse-offload-sm30.c: Set 'GCC_COLORS' to the empty string. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7bc687272f3d..14178b73daa0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,48 @@ +2024-04-08 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114519 + * include/bits/unicode.h (_Utf8_view) [!__cpp_char8_t]: Define + using char instead of char8_t. + * testsuite/ext/unicode/view.cc: Use u8""sv literals to create + string views, instead of std::u8string_view. + +2024-04-08 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/20_util/integer_comparisons/equal_neg.cc: Use + no-opts selector for errors that depend on -fchar8_t. + * testsuite/20_util/integer_comparisons/greater_equal_neg.cc: + Likewise. + * testsuite/20_util/integer_comparisons/greater_neg.cc: + Likewise. + * testsuite/20_util/integer_comparisons/in_range_neg.cc: + Likewise. + * testsuite/20_util/integer_comparisons/less_equal_neg.cc: + Likewise. + * testsuite/20_util/integer_comparisons/less_neg.cc: Likewise. + * testsuite/20_util/integer_comparisons/not_equal_neg.cc: + Likewise. + * testsuite/21_strings/basic_string/hash/hash_char8_t.cc: Skip + if -fno-char8_t is used. + * testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc: + Likewise. + * testsuite/27_io/basic_ostream/inserters_character/char/deleted.cc: + Likewise. + * testsuite/27_io/basic_ostream/inserters_character/wchar_t/deleted.cc: + Likewise. + * testsuite/27_io/filesystem/path/factory/u8path-depr.cc: Use + char for u8 literal if char8_t is not available. + * testsuite/27_io/headers/iosfwd/synopsis.cc: Check + __cpp_char8_t. + * testsuite/29_atomics/atomic_integral/wait_notify.cc: Likewise. + * testsuite/29_atomics/headers/atomic/types_std_c++20_neg.cc: + Remove check for _GLIBCXX_USE_CHAR8_T. + +2024-04-08 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/20_util/from_chars/1_neg.cc: Add char8_t cases, + using a struct of that name if -fno-char8_t is active. + * testsuite/20_util/from_chars/1_c++20_neg.cc: Removed. + 2024-04-03 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/104606 From 600bf396799a022e65938de572ad1a79a951b95a Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Tue, 9 Apr 2024 02:35:11 +0100 Subject: [PATCH 436/551] PR modula2/114648 cc1gm2 by default does not handle C pre-processor file and line directives This patch fixes the default behavior of cc1gm2 to the description in the documentation. By default cc1gm2 will allow C preprocessor directives (they can be turned off via -fno-cpp). gcc/m2/ChangeLog: PR modula2/114648 * gm2-compiler/M2Options.mod (LineDirectives): Initially set to true. gcc/testsuite/ChangeLog: PR modula2/114648 * gm2/cpp/default/pass/AdvParse.def: New test. * gm2/cpp/default/pass/AdvParse.mod: New test. * gm2/cpp/default/pass/cpp-default-pass.exp: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/gm2-compiler/M2Options.mod | 2 +- .../gm2/cpp/default/pass/AdvParse.def | 5 +++ .../gm2/cpp/default/pass/AdvParse.mod | 8 +++++ .../gm2/cpp/default/pass/cpp-default-pass.exp | 36 +++++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gm2/cpp/default/pass/AdvParse.def create mode 100644 gcc/testsuite/gm2/cpp/default/pass/AdvParse.mod create mode 100644 gcc/testsuite/gm2/cpp/default/pass/cpp-default-pass.exp diff --git a/gcc/m2/gm2-compiler/M2Options.mod b/gcc/m2/gm2-compiler/M2Options.mod index 09d62cbc732c..d04cded17f05 100644 --- a/gcc/m2/gm2-compiler/M2Options.mod +++ b/gcc/m2/gm2-compiler/M2Options.mod @@ -1944,7 +1944,7 @@ BEGIN ReturnChecking := FALSE ; CaseElseChecking := FALSE ; CPreProcessor := FALSE ; - LineDirectives := FALSE ; + LineDirectives := TRUE ; ExtendedOpaque := FALSE ; UnboundedByReference := FALSE ; VerboseUnbounded := FALSE ; diff --git a/gcc/testsuite/gm2/cpp/default/pass/AdvParse.def b/gcc/testsuite/gm2/cpp/default/pass/AdvParse.def new file mode 100644 index 000000000000..391a803116f7 --- /dev/null +++ b/gcc/testsuite/gm2/cpp/default/pass/AdvParse.def @@ -0,0 +1,5 @@ +DEFINITION MODULE AdvParse ; + +PROCEDURE foo ; + +END AdvParse. diff --git a/gcc/testsuite/gm2/cpp/default/pass/AdvParse.mod b/gcc/testsuite/gm2/cpp/default/pass/AdvParse.mod new file mode 100644 index 000000000000..ed3727c63c6c --- /dev/null +++ b/gcc/testsuite/gm2/cpp/default/pass/AdvParse.mod @@ -0,0 +1,8 @@ +# 2 "AdvParse.bnf" +IMPLEMENTATION MODULE AdvParse ; + +PROCEDURE foo ; +BEGIN +END foo ; + +END AdvParse. \ No newline at end of file diff --git a/gcc/testsuite/gm2/cpp/default/pass/cpp-default-pass.exp b/gcc/testsuite/gm2/cpp/default/pass/cpp-default-pass.exp new file mode 100644 index 000000000000..0b373cfd6553 --- /dev/null +++ b/gcc/testsuite/gm2/cpp/default/pass/cpp-default-pass.exp @@ -0,0 +1,36 @@ +# Copyright (C) 2024 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +# This file was written by Gaius Mulley (gaiusmod2@gmail.com) +# for GNU Modula-2. + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib gm2-torture.exp + +gm2_init_pim "${srcdir}/gm2/cpp/default/pass/" + +foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + gm2-torture $testcase +} From 26eb5f8fd173e2425ae7505528fc426de4b7e34c Mon Sep 17 00:00:00 2001 From: Kewen Lin <linkw@linux.ibm.com> Date: Mon, 8 Apr 2024 21:01:36 -0500 Subject: [PATCH 437/551] rs6000: Fix wrong align passed to build_aligned_type [PR88309] As the comments in PR88309 show, there are two oversights in rs6000_gimple_fold_builtin that pass align in bytes to build_aligned_type but which actually requires align in bits, it causes unexpected ICE or hanging in function is_miss_rate_acceptable due to zero align_unit value. This patch is to fix them by converting bytes to bits, add an assertion on positive align_unit value and notes function build_aligned_type requires align measured in bits in its function comment. PR target/88309 Co-authored-by: Andrew Pinski <quic_apinski@quicinc.com> gcc/ChangeLog: * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_builtin): Fix wrong align passed to function build_aligned_type. * tree-ssa-loop-prefetch.cc (is_miss_rate_acceptable): Add an assertion to ensure align_unit should be positive. * tree.cc (build_qualified_type): Update function comments. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr88309.c: New test. --- gcc/config/rs6000/rs6000-builtin.cc | 4 ++-- gcc/testsuite/gcc.target/powerpc/pr88309.c | 27 ++++++++++++++++++++++ gcc/tree-ssa-loop-prefetch.cc | 2 ++ gcc/tree.cc | 3 ++- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/pr88309.c diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc index 6698274031b9..e7d6204074cc 100644 --- a/gcc/config/rs6000/rs6000-builtin.cc +++ b/gcc/config/rs6000/rs6000-builtin.cc @@ -1900,7 +1900,7 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi) tree lhs_type = TREE_TYPE (lhs); /* In GIMPLE the type of the MEM_REF specifies the alignment. The required alignment (power) is 4 bytes regardless of data type. */ - tree align_ltype = build_aligned_type (lhs_type, 4); + tree align_ltype = build_aligned_type (lhs_type, 32); /* POINTER_PLUS_EXPR wants the offset to be of type 'sizetype'. Create the tree using the value from arg0. The resulting type will match the type of arg1. */ @@ -1944,7 +1944,7 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi) tree arg2_type = ptr_type_node; /* In GIMPLE the type of the MEM_REF specifies the alignment. The required alignment (power) is 4 bytes regardless of data type. */ - tree align_stype = build_aligned_type (arg0_type, 4); + tree align_stype = build_aligned_type (arg0_type, 32); /* POINTER_PLUS_EXPR wants the offset to be of type 'sizetype'. Create the tree using the value from arg1. */ gimple_seq stmts = NULL; diff --git a/gcc/testsuite/gcc.target/powerpc/pr88309.c b/gcc/testsuite/gcc.target/powerpc/pr88309.c new file mode 100644 index 000000000000..c0078cf2b8ca --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr88309.c @@ -0,0 +1,27 @@ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-mvsx -O2 -fprefetch-loop-arrays" } */ + +/* Verify there is no ICE or hanging. */ + +#include <altivec.h> + +void b(float *c, vector float a, vector float, vector float) +{ + vector float d; + vector char ahbc; + vec_xst(vec_perm(a, d, ahbc), 0, c); +} + +vector float e(vector unsigned); + +void f() { + float *dst; + int g = 0; + for (;; g += 16) { + vector unsigned m, i; + vector unsigned n, j; + vector unsigned k, l; + b(dst + g * 3, e(m), e(n), e(k)); + b(dst + (g + 4) * 3, e(i), e(j), e(l)); + } +} diff --git a/gcc/tree-ssa-loop-prefetch.cc b/gcc/tree-ssa-loop-prefetch.cc index bbd98e03254b..70073cc4fe46 100644 --- a/gcc/tree-ssa-loop-prefetch.cc +++ b/gcc/tree-ssa-loop-prefetch.cc @@ -739,6 +739,8 @@ is_miss_rate_acceptable (unsigned HOST_WIDE_INT cache_line_size, if (delta >= (HOST_WIDE_INT) cache_line_size) return false; + gcc_assert (align_unit > 0); + miss_positions = 0; total_positions = (cache_line_size / align_unit) * distinct_iters; max_allowed_miss_positions = (ACCEPTABLE_MISS_RATE * total_positions) / 1000; diff --git a/gcc/tree.cc b/gcc/tree.cc index f801712c9ddd..787168e92552 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -5689,7 +5689,8 @@ build_qualified_type (tree type, int type_quals MEM_STAT_DECL) return t; } -/* Create a variant of type T with alignment ALIGN. */ +/* Create a variant of type T with alignment ALIGN which + is measured in bits. */ tree build_aligned_type (tree type, unsigned int align) From 9c97de682303b81c8886ac131fcfb3b122f2f1a6 Mon Sep 17 00:00:00 2001 From: Kewen Lin <linkw@linux.ibm.com> Date: Mon, 8 Apr 2024 21:02:17 -0500 Subject: [PATCH 438/551] testsuite: Add profile_update_atomic check to gcov-20.c [PR114614] As PR114614 shows, the newly added test case gcov-20.c by commit r14-9789-g08a52331803f66 failed on targets which do not support atomic profile update, there would be a message like: warning: target does not support atomic profile update, single mode is selected Since the test case adopts -fprofile-update=atomic, it requires effective target check profile_update_atomic, this patch is to add the check accordingly. PR testsuite/114614 gcc/testsuite/ChangeLog: * gcc.misc-tests/gcov-20.c: Add effective target check profile_update_atomic. --- gcc/testsuite/gcc.misc-tests/gcov-20.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/testsuite/gcc.misc-tests/gcov-20.c b/gcc/testsuite/gcc.misc-tests/gcov-20.c index 215faffc9801..ca8c12aad2bc 100644 --- a/gcc/testsuite/gcc.misc-tests/gcov-20.c +++ b/gcc/testsuite/gcc.misc-tests/gcov-20.c @@ -1,5 +1,6 @@ /* { dg-options "-fcondition-coverage -ftest-coverage -fprofile-update=atomic" } */ /* { dg-do run { target native } } */ +/* { dg-require-effective-target profile_update_atomic } */ /* Some side effect to stop branches from being pruned */ int x = 0; From 18e94e04dae724c61cbc13ace85fa68f2deda900 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Mon, 8 Apr 2024 18:57:49 -0700 Subject: [PATCH 439/551] x86: Define __APX_INLINE_ASM_USE_GPR32__ Define __APX_INLINE_ASM_USE_GPR32__ for -mapx-inline-asm-use-gpr32. When __APX_INLINE_ASM_USE_GPR32__ is defined, inline asm statements should contain only instructions compatible with r16-r31. gcc/ PR target/114587 * config/i386/i386-c.cc (ix86_target_macros_internal): Define __APX_INLINE_ASM_USE_GPR32__ for -mapx-inline-asm-use-gpr32. gcc/testsuite/ PR target/114587 * gcc.target/i386/apx-3.c: Likewise. --- gcc/config/i386/i386-c.cc | 2 ++ gcc/testsuite/gcc.target/i386/apx-3.c | 6 ++++++ 2 files changed, 8 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/apx-3.c diff --git a/gcc/config/i386/i386-c.cc b/gcc/config/i386/i386-c.cc index 226d277676ca..07f4936ba910 100644 --- a/gcc/config/i386/i386-c.cc +++ b/gcc/config/i386/i386-c.cc @@ -751,6 +751,8 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, def_or_undef (parse_in, "__AVX10_1_512__"); if (isa_flag2 & OPTION_MASK_ISA2_APX_F) def_or_undef (parse_in, "__APX_F__"); + if (ix86_apx_inline_asm_use_gpr32) + def_or_undef (parse_in, "__APX_INLINE_ASM_USE_GPR32__"); if (TARGET_IAMCU) { def_or_undef (parse_in, "__iamcu"); diff --git a/gcc/testsuite/gcc.target/i386/apx-3.c b/gcc/testsuite/gcc.target/i386/apx-3.c new file mode 100644 index 000000000000..1ba4ac036fc1 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/apx-3.c @@ -0,0 +1,6 @@ +/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-options "-mapx-inline-asm-use-gpr32" } */ + +#ifndef __APX_INLINE_ASM_USE_GPR32__ +# error __APX_INLINE_ASM_USE_GPR32__ not defined +#endif From 481ba4fb5fce8257f5dbeb994dac2748c0237fa2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 9 Apr 2024 08:17:25 +0200 Subject: [PATCH 440/551] libquadmath: Use soft-fp for sqrtq finite positive arguments [PR114623] sqrt should be 0.5ulp precise, but the current implementation is less precise than that. The following patch uses the soft-fp code (like e.g. glibc for x86) for it if possible. I didn't want to replicate the libgcc infrastructure for choosing the right sfp-machine.h, so the patch just uses a single generic implementation. As the code is used solely for the finite positive arguments, it shouldn't generate NaNs (so the exact form of canonical QNaN/SNaN is irrelevant), and sqrt for these shouldn't produce underflows/overflows either, for < 1.0 arguments it always returns larger values than the argument and for > 1.0 smaller values than the argument. 2024-04-09 Jakub Jelinek <jakub@redhat.com> PR libquadmath/114623 * sfp-machine.h: New file. * math/sqrtq.c: Include from libgcc/soft-fp also soft-fp.h and quad.h if possible. (USE_SOFT_FP): Define in that case. (sqrtq): Use soft-fp based implementation for the finite positive arguments if possible. --- libquadmath/math/sqrtq.c | 25 +++++++++++++++++- libquadmath/sfp-machine.h | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 libquadmath/sfp-machine.h diff --git a/libquadmath/math/sqrtq.c b/libquadmath/math/sqrtq.c index 56ea5d3243c0..8ca2828d42ce 100644 --- a/libquadmath/math/sqrtq.c +++ b/libquadmath/math/sqrtq.c @@ -1,6 +1,17 @@ #include "quadmath-imp.h" #include <math.h> #include <float.h> +#if __has_include("../../libgcc/soft-fp/soft-fp.h") \ + && __has_include("../../libgcc/soft-fp/quad.h") \ + && defined(FE_TONEAREST) \ + && defined(FE_UPWARD) \ + && defined(FE_DOWNWARD) \ + && defined(FE_TOWARDZERO) \ + && defined(FE_INEXACT) +#define USE_SOFT_FP 1 +#include "../../libgcc/soft-fp/soft-fp.h" +#include "../../libgcc/soft-fp/quad.h" +#endif __float128 sqrtq (const __float128 x) @@ -20,6 +31,18 @@ sqrtq (const __float128 x) return (x - x) / (x - x); } +#if USE_SOFT_FP + FP_DECL_EX; + FP_DECL_Q (X); + FP_DECL_Q (Y); + + FP_INIT_ROUNDMODE; + FP_UNPACK_Q (X, x); + FP_SQRT_Q (Y, X); + FP_PACK_Q (y, Y); + FP_HANDLE_EXCEPTIONS; + return y; +#else if (x <= DBL_MAX && x >= DBL_MIN) { /* Use double result as starting point. */ @@ -59,5 +82,5 @@ sqrtq (const __float128 x) y -= 0.5q * (y - x / y); y -= 0.5q * (y - x / y); return y; +#endif } - diff --git a/libquadmath/sfp-machine.h b/libquadmath/sfp-machine.h new file mode 100644 index 000000000000..e37d5b3c656c --- /dev/null +++ b/libquadmath/sfp-machine.h @@ -0,0 +1,54 @@ +/* libquadmath uses soft-fp only for sqrtq and only for + the positive finite case, so it doesn't care about + NaN representation, nor tininess after rounding vs. + before rounding, all it cares about is current rounding + mode and raising inexact exceptions. */ +#if __SIZEOF_LONG__ == 8 +#define _FP_W_TYPE_SIZE 64 +#define _FP_I_TYPE long long +#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0 +#else +#define _FP_W_TYPE_SIZE 32 +#define _FP_I_TYPE int +#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0 +#endif +#define _FP_W_TYPE unsigned _FP_I_TYPE +#define _FP_WS_TYPE signed _FP_I_TYPE +#define _FP_QNANNEGATEDP 0 +#define _FP_NANSIGN_Q 1 +#define _FP_KEEPNANFRACP 1 +#define _FP_TININESS_AFTER_ROUNDING 0 +#define _FP_DECL_EX \ + unsigned int fp_roundmode __attribute__ ((unused)) = FP_RND_NEAREST; +#define FP_ROUNDMODE fp_roundmode +#define FP_INIT_ROUNDMODE \ + do \ + { \ + switch (fegetround ()) \ + { \ + case FE_UPWARD: \ + fp_roundmode = FP_RND_PINF; \ + break; \ + case FE_DOWNWARD: \ + fp_roundmode = FP_RND_MINF; \ + break; \ + case FE_TOWARDZERO: \ + fp_roundmode = FP_RND_ZERO; \ + break; \ + default: \ + break; \ + } \ + } \ + while (0) +#define FP_HANDLE_EXCEPTIONS \ + do \ + { \ + if (_fex & FP_EX_INEXACT) \ + { \ + volatile double eight = 8.0; \ + volatile double eps \ + = DBL_EPSILON; \ + eight += eps; \ + } \ + } \ + while (0) From ddee4376d15ddde9280c9a6725ddd76bf33f2871 Mon Sep 17 00:00:00 2001 From: Sebastian Huber <sebastian.huber@embedded-brains.de> Date: Mon, 25 Mar 2024 08:00:02 +0100 Subject: [PATCH 441/551] RTEMS: Add multilib configuration for aarch64 Add a multilib with workarounds for Cortex-A53 errata. gcc/ChangeLog: * config.gcc (aarch64-*-rtems*): Add target makefile fragment t-aarch64-rtems. * config/aarch64/t-aarch64-rtems: New file. --- gcc/config.gcc | 1 + gcc/config/aarch64/t-aarch64-rtems | 42 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 gcc/config/aarch64/t-aarch64-rtems diff --git a/gcc/config.gcc b/gcc/config.gcc index 2e320dd26c5e..63a88bce4842 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1199,6 +1199,7 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*) ;; aarch64-*-rtems*) tm_file="${tm_file} aarch64/rtems.h rtems.h" + tmake_file="${tmake_file} aarch64/t-aarch64-rtems" ;; esac case $target in diff --git a/gcc/config/aarch64/t-aarch64-rtems b/gcc/config/aarch64/t-aarch64-rtems new file mode 100644 index 000000000000..7598d6361657 --- /dev/null +++ b/gcc/config/aarch64/t-aarch64-rtems @@ -0,0 +1,42 @@ +# Multilibs for aarch64 RTEMS targets. +# +# Copyright (C) 2024 Free Software Foundation, Inc. +# +# This file is part of GCC. +# +# GCC is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GCC is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# <http://www.gnu.org/licenses/>. + +MULTILIB_OPTIONS = +MULTILIB_DIRNAMES = +MULTILIB_REQUIRED = + +MULTILIB_OPTIONS += mabi=ilp32 +MULTILIB_DIRNAMES += ilp32 + +MULTILIB_OPTIONS += mno-outline-atomics +MULTILIB_DIRNAMES += nooa + +MULTILIB_OPTIONS += mcpu=cortex-a53 +MULTILIB_DIRNAMES += a53 + +MULTILIB_OPTIONS += mfix-cortex-a53-835769 +MULTILIB_DIRNAMES += fix835769 + +MULTILIB_OPTIONS += mfix-cortex-a53-843419 +MULTILIB_DIRNAMES += fix843419 + +MULTILIB_REQUIRED += mabi=ilp32 +MULTILIB_REQUIRED += mabi=ilp32/mno-outline-atomics/mcpu=cortex-a53/mfix-cortex-a53-835769/mfix-cortex-a53-843419 +MULTILIB_REQUIRED += mno-outline-atomics/mcpu=cortex-a53/mfix-cortex-a53-835769/mfix-cortex-a53-843419 From d76df699b8ff792575e9df4d214c21fed0ed3b6b Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Mon, 8 Apr 2024 10:50:18 +0200 Subject: [PATCH 442/551] middle-end/114604 - ranger allocates bitmap without initialized obstack The following fixes ranger bitmap allocation when invoked from IPA context where the global bitmap obstack possibly isn't initialized. Instead of trying to use one of the ranger obstacks the following simply initializes the global bitmap obstack around an active ranger. PR middle-end/114604 * gimple-range.cc (enable_ranger): Initialize the global bitmap obstack. (disable_ranger): Release it. --- gcc/gimple-range.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index c16b776c1e3a..4d3b1ce85884 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -689,6 +689,8 @@ enable_ranger (struct function *fun, bool use_imm_uses) { gimple_ranger *r; + bitmap_obstack_initialize (NULL); + gcc_checking_assert (!fun->x_range_query); r = new gimple_ranger (use_imm_uses); fun->x_range_query = r; @@ -705,6 +707,8 @@ disable_ranger (struct function *fun) gcc_checking_assert (fun->x_range_query); delete fun->x_range_query; fun->x_range_query = NULL; + + bitmap_obstack_release (NULL); } // ------------------------------------------------------------------------ From 532c57f8c3a15b109a46d3e2b14d60a5c40979d5 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev <bugaevc@gmail.com> Date: Sat, 23 Mar 2024 17:35:11 +0300 Subject: [PATCH 443/551] Move GNU/Hurd startfile spec from config/i386/gnu.h to config/gnu.h Since it's not i386-specific; this makes it possible to reuse it for other architectures. Also, add a warning for the case gnu.h is specified before gnu-user.h, which would cause gnu-user's version of the spec to override gnu's, and not the other way around as it's intended. The i?86-gnu target currently specifies them in the right order, but it's easy to accidentally put them in a wrong order. gcc/Changelog: * config/i386/gnu.h: Move GNU/Hurd STARTFILE_SPEC from here... * config/gnu.h: ...to here. Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> --- gcc/config/gnu.h | 16 ++++++++++++++++ gcc/config/i386/gnu.h | 11 ----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/gcc/config/gnu.h b/gcc/config/gnu.h index ac99f7605475..e2a33baf0402 100644 --- a/gcc/config/gnu.h +++ b/gcc/config/gnu.h @@ -31,3 +31,19 @@ along with GCC. If not, see <http://www.gnu.org/licenses/>. builtin_assert ("system=unix"); \ builtin_assert ("system=posix"); \ } while (0) + + +#ifndef GNU_USER_TARGET_STARTFILE_SPEC +# warning This file should be included after gnu-user.h, to override its STARTFILE_SPEC +#endif + +#undef STARTFILE_SPEC +#if defined HAVE_LD_PIE +#define STARTFILE_SPEC \ + "%{!shared: %{pg|p|profile:%{static-pie:grcrt0.o%s;static:gcrt0.o%s;:gcrt1.o%s};static-pie:rcrt0.o%s;static:crt0.o%s;" PIE_SPEC ":Scrt1.o%s;:crt1.o%s}} \ + crti.o%s %{static:crtbeginT.o%s;shared|static-pie|" PIE_SPEC ":crtbeginS.o%s;:crtbegin.o%s}" +#else +#define STARTFILE_SPEC \ + "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};static:crt0.o%s;:crt1.o%s}} \ + crti.o%s %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" +#endif diff --git a/gcc/config/i386/gnu.h b/gcc/config/i386/gnu.h index 3f42714d16cb..af1d55887ed9 100644 --- a/gcc/config/i386/gnu.h +++ b/gcc/config/i386/gnu.h @@ -24,17 +24,6 @@ along with GCC. If not, see <http://www.gnu.org/licenses/>. #undef GNU_USER_DYNAMIC_LINKER #define GNU_USER_DYNAMIC_LINKER "/lib/ld.so" -#undef STARTFILE_SPEC -#if defined HAVE_LD_PIE -#define STARTFILE_SPEC \ - "%{!shared: %{pg|p|profile:%{static-pie:grcrt0.o%s;static:gcrt0.o%s;:gcrt1.o%s};static-pie:rcrt0.o%s;static:crt0.o%s;" PIE_SPEC ":Scrt1.o%s;:crt1.o%s}} \ - crti.o%s %{static:crtbeginT.o%s;shared|static-pie|" PIE_SPEC ":crtbeginS.o%s;:crtbegin.o%s}" -#else -#define STARTFILE_SPEC \ - "%{!shared: %{pg|p|profile:%{static:gcrt0.o%s;:gcrt1.o%s};static:crt0.o%s;:crt1.o%s}} \ - crti.o%s %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" -#endif - #ifdef TARGET_LIBC_PROVIDES_SSP /* i386 glibc provides __stack_chk_guard in %gs:0x14. */ From 9670a2326333caa8482377c00beb65723b7b4b26 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev <bugaevc@gmail.com> Date: Sat, 23 Mar 2024 17:35:12 +0300 Subject: [PATCH 444/551] aarch64: Add support for aarch64-gnu (GNU/Hurd on AArch64) Coupled with a corresponding binutils patch, this produces a toolchain that can sucessfully build working binaries targeting aarch64-gnu. gcc/Changelog: * config.gcc: Recognize aarch64*-*-gnu* targets. * config/aarch64/aarch64-gnu.h: New file. Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> --- gcc/config.gcc | 6 +++ gcc/config/aarch64/aarch64-gnu.h | 68 ++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 gcc/config/aarch64/aarch64-gnu.h diff --git a/gcc/config.gcc b/gcc/config.gcc index 63a88bce4842..5df3c52f8e98 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1265,6 +1265,12 @@ aarch64*-*-linux*) done TM_MULTILIB_CONFIG=`echo $TM_MULTILIB_CONFIG | sed 's/^,//'` ;; +aarch64*-*-gnu*) + tm_file="${tm_file} elfos.h gnu-user.h gnu.h glibc-stdint.h" + tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-errata.h aarch64/aarch64-gnu.h" + tmake_file="${tmake_file} aarch64/t-aarch64" + tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1" + ;; aarch64*-wrs-vxworks*) tm_file="${tm_file} elfos.h aarch64/aarch64-elf.h" tm_file="${tm_file} vx-common.h vxworks.h aarch64/aarch64-vxworks.h" diff --git a/gcc/config/aarch64/aarch64-gnu.h b/gcc/config/aarch64/aarch64-gnu.h new file mode 100644 index 000000000000..ee54940342d3 --- /dev/null +++ b/gcc/config/aarch64/aarch64-gnu.h @@ -0,0 +1,68 @@ +/* Definitions for AArch64 running GNU/Hurd. + Copyright (C) 2009-2024 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GCC is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + <http://www.gnu.org/licenses/>. */ + +#ifndef GCC_AARCH64_GNU_H +#define GCC_AARCH64_GNU_H + +#define GNU_USER_DYNAMIC_LINKER "/lib/ld-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" + +#define CPP_SPEC "%{pthread:-D_REENTRANT}" + +#define GNU_TARGET_LINK_SPEC "%{h*} \ + %{static:-Bstatic} \ + %{shared:-shared} \ + %{symbolic:-Bsymbolic} \ + %{!static:%{!static-pie: \ + %{rdynamic:-export-dynamic} \ + %{!shared:-dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}} \ + %{static-pie:-Bstatic -pie --no-dynamic-linker -z text} \ + -X \ + %{mbig-endian:-EB} %{mlittle-endian:-EL} \ + -maarch64gnu%{mabi=ilp32:32}%{mbig-endian:b}" + + +#define LINK_SPEC GNU_TARGET_LINK_SPEC AARCH64_ERRATA_LINK_SPEC + +#define GNU_USER_TARGET_MATHFILE_SPEC \ + "%{Ofast|ffast-math|funsafe-math-optimizations:%{!shared:crtfastmath.o%s}}" + +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ + GNU_USER_TARGET_MATHFILE_SPEC " " \ + GNU_USER_TARGET_ENDFILE_SPEC + +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + GNU_USER_TARGET_OS_CPP_BUILTINS(); \ + } \ + while (0) + +#define TARGET_ASM_FILE_END aarch64_file_end_indicate_exec_stack + +/* Uninitialized common symbols in non-PIE executables, even with + strong definitions in dependent shared libraries, will resolve + to COPY relocated symbol in the executable. See PR65780. */ +#undef TARGET_BINDS_LOCAL_P +#define TARGET_BINDS_LOCAL_P default_binds_local_p_2 + +/* Define this to be nonzero if static stack checking is supported. */ +#define STACK_CHECK_STATIC_BUILTIN 1 + +#endif /* GCC_AARCH64_GNU_H */ From 46c91665f4bceba19aed56f5bd6e934c548b84ff Mon Sep 17 00:00:00 2001 From: Sergey Bugaev <bugaevc@gmail.com> Date: Sat, 23 Mar 2024 17:35:13 +0300 Subject: [PATCH 445/551] libgcc: Add basic support for aarch64-gnu (GNU/Hurd on AArch64) There is currently no unwinding implementation. libgcc/ChangeLog: * config.host: Recognize aarch64*-*-gnu* hosts. * config/aarch64/gnu-unwind.h: New file. * config/aarch64/heap-trampoline.c (allocate_trampoline_page): Support GNU/Hurd. Signed-off-by: Sergey Bugaev <bugaevc@gmail.com> --- libgcc/config.host | 9 +++++++ libgcc/config/aarch64/gnu-unwind.h | 36 +++++++++++++++++++++++++ libgcc/config/aarch64/heap-trampoline.c | 4 +-- 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 libgcc/config/aarch64/gnu-unwind.h diff --git a/libgcc/config.host b/libgcc/config.host index 59a42d3a01f0..e75a7af647f6 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -448,6 +448,15 @@ aarch64*-*-linux*) tmake_file="${tmake_file} t-dfprules" tmake_file="${tmake_file} ${cpu_type}/t-heap-trampoline" ;; +aarch64*-*-gnu*) + extra_parts="$extra_parts crtfastmath.o" + md_unwind_header=aarch64/gnu-unwind.h + tmake_file="${tmake_file} ${cpu_type}/t-aarch64" + tmake_file="${tmake_file} ${cpu_type}/t-lse t-slibgcc-libgcc" + tmake_file="${tmake_file} ${cpu_type}/t-softfp t-softfp t-crtfm" + tmake_file="${tmake_file} t-dfprules" + tmake_file="${tmake_file} ${cpu_type}/t-heap-trampoline" + ;; aarch64*-*-vxworks7*) extra_parts="$extra_parts crtfastmath.o" md_unwind_header=aarch64/aarch64-unwind.h diff --git a/libgcc/config/aarch64/gnu-unwind.h b/libgcc/config/aarch64/gnu-unwind.h new file mode 100644 index 000000000000..d9e485a18496 --- /dev/null +++ b/libgcc/config/aarch64/gnu-unwind.h @@ -0,0 +1,36 @@ +/* DWARF2 EH unwinding support for GNU Hurd: aarch64. + Copyright (C) 2020-2024 Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +Under Section 7 of GPL version 3, you are granted additional +permissions described in the GCC Runtime Library Exception, version +3.1, as published by the Free Software Foundation. + +You should have received a copy of the GNU General Public License and +a copy of the GCC Runtime Library Exception along with this program; +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +<http://www.gnu.org/licenses/>. */ + +/* Always include AArch64 unwinder header file. */ +#include "config/aarch64/aarch64-unwind.h" + +#ifndef inhibit_libc + +#include <signal.h> + +/* + * TODO: support for aarch64 needs to be implemented. + */ + +#endif /* ifndef inhibit_libc */ diff --git a/libgcc/config/aarch64/heap-trampoline.c b/libgcc/config/aarch64/heap-trampoline.c index 885df629da71..26957a3eef14 100644 --- a/libgcc/config/aarch64/heap-trampoline.c +++ b/libgcc/config/aarch64/heap-trampoline.c @@ -29,7 +29,7 @@ void *allocate_trampoline_page (void); void __gcc_nested_func_ptr_created (void *chain, void *func, void *dst); void __gcc_nested_func_ptr_deleted (void); -#if defined(__linux__) +#if defined(__linux__) || defined(__gnu_hurd__) static const unsigned char aarch64_trampoline_insns[6][4] = { {0x5f, 0x24, 0x03, 0xd5}, /* hint 34 */ {0xb1, 0x00, 0x00, 0x58}, /* ldr x17, .+20 */ @@ -82,7 +82,7 @@ allocate_trampoline_page (void) { void *page; -#if defined(__linux__) +#if defined(__linux__) || defined(__gnu_hurd__) page = mmap (0, getpagesize (), PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, 0, 0); #elif __APPLE__ From 7dd1f9d2ec422173f490d91b9173d4fa5d32d909 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 9 Apr 2024 09:28:27 +0200 Subject: [PATCH 446/551] bitint: Don't move debug stmts from before returns_twice calls [PR114628] Debug stmts are allowed by the verifier before the returns_twice calls. More importantly, they don't have a lhs, so the current handling of arg_stmts statements to force them on the edges ICEs. The following patch just keeps them where they were before. 2024-04-09 Jakub Jelinek <jakub@redhat.com> PR middle-end/114628 * gimple-lower-bitint.cc (gimple_lower_bitint): Keep debug stmts before returns_twice calls as is, don't push them into arg_stmts vector/move to edges. * gcc.dg/bitint-105.c: New test. --- gcc/gimple-lower-bitint.cc | 9 +++++++-- gcc/testsuite/gcc.dg/bitint-105.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/bitint-105.c diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 1afd4de445a3..4c3b7f7b68ed 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -7172,8 +7172,13 @@ gimple_lower_bitint (void) gimple_stmt_iterator gsi = gsi_after_labels (gimple_bb (stmt)); while (gsi_stmt (gsi) != stmt) { - arg_stmts.safe_push (gsi_stmt (gsi)); - gsi_remove (&gsi, false); + if (is_gimple_debug (gsi_stmt (gsi))) + gsi_next (&gsi); + else + { + arg_stmts.safe_push (gsi_stmt (gsi)); + gsi_remove (&gsi, false); + } } gimple *g; basic_block bb = NULL; diff --git a/gcc/testsuite/gcc.dg/bitint-105.c b/gcc/testsuite/gcc.dg/bitint-105.c new file mode 100644 index 000000000000..d3215b1d4730 --- /dev/null +++ b/gcc/testsuite/gcc.dg/bitint-105.c @@ -0,0 +1,29 @@ +/* PR middle-end/114628 */ +/* { dg-do compile { target bitint } } */ +/* { dg-options "-O2 -g" } */ + +int foo (int); +#if __BITINT_MAXWIDTH__ >= 129 +__attribute__((returns_twice)) int bar (_BitInt(129) x); + +void +baz (int x, _BitInt(129) y) +{ + void *q[] = { &&l1, &&l2 }; +l2: + x = foo (foo (3)); + bar (y); + goto *q[x & 1]; +l1:; +} + +void +qux (int x, _BitInt(129) y) +{ + void *q[] = { &&l1, &&l2 }; +l2: + x = foo (foo (3)); + bar (y); +l1:; +} +#endif From 64aa48ced03ad214cd05f114f5790e286fdcfbab Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 9 Apr 2024 09:29:08 +0200 Subject: [PATCH 447/551] Fix up duplicated words mostly in comments, part 2 Another patch from eyeballing git grep -v 'long long\|optab optab\|template template\|double double' | grep ' \([a-zA-Z]\+\) \1 ' output, this time in gcc/ subdirectory. 2024-04-09 Jakub Jelinek <jakub@redhat.com> gcc/ * expr.cc (convert_mode_scalar): Fix duplicated words in comment; into into -> it into. * function.h (function::cond_uids): Fix duplicated words in comment; same same -> same. * config/riscv/riscv-vector-costs.cc (costs::adjust_vect_cost_per_loop): Fix duplicated words in comment; model model -> model. * config/riscv/riscv-vector-builtins-shapes.cc (build_base): Fix duplicated words in comment; for for -> for. * config/riscv/riscv-avlprop.cc (pass_avlprop::execute): Fix duplicated words in comment; more more -> more. * config/aarch64/driver-aarch64.cc (host_detect_local_cpu): Fix duplicated words in comment; be be -> be. * tree-profile.cc (masking_vectors): Fix duplicated words in comment; has has -> has, the the -> the. * value-range.cc (irange::set_range_from_bitmask): Fix duplicated words in comment; the the -> the. * gcov.cc (add_condition_counts): Fix duplicated words in comment; to to -> to. * vr-values.cc (get_scev_info): Fix duplicated words in comment; the the -> to the. * tree-vrp.cc (fully_replaceable): Fix duplicated words in comment; by by -> by. * mode-switching.cc (single_succ_confluence_n): Fix duplicated words in comment; the the -> the. * tree-ssa-phiopt.cc (value_replacement): Fix duplicated words in comment; can can -> we can. * gimple-range-phi.cc (phi_analyzer::process_phi): Fix duplicated words in comment; it it -> it is. * tree-ssa-sccvn.cc (visit_phi): Fix duplicated words in comment; to to -> to. * rtl-ssa/accesses.h (use_info::next_debug_insn_use): Fix duplicated words in comment; if if -> if. * doc/options.texi (InverseMask): Fix duplicated words; and and -> and. Change take to takes. * doc/invoke.texi (fanalyzer-undo-inlining): Fix duplicated words; be be -> be. (-minline-memops-threshold): Likewise. gcc/analyzer/ * analyzer.opt (Wanalyzer-undefined-behavior-strtok): Fix duplicated words; in in -> in. * program-state.cc (sm_state_map::replay_call_summary): Fix duplicated words in comment; to to -> to. (program_state::replay_call_summary): Likewise. * region-model.cc (region_model::replay_call_summary): Likewise. gcc/c/ * c-decl.cc (previous_tag): Fix duplicated words in comment; the the -> the. (diagnose_mismatched_decls): Fix duplicated words in comment; about about -> about. gcc/cp/ * constexpr.cc (build_new_constexpr_heap_type): Fix duplicated words in comment; is is -> is. * cp-tree.def (CO_RETURN_EXPR): Fix duplicated words in comment; for for -> for. * parser.cc (fixup_blocks_walker): Fix duplicated words in comment; is is -> is. * semantics.cc (fixup_template_type): Fix duplicated words in comment; for for -> for. (finish_omp_for): Fix duplicated words in comment; the the -> the. * pt.cc (more_specialized_fn): Fix duplicated words in comment; think think -> think. (type_targs_deducible_from): Fix duplicated words in comment; the the -> the. gcc/jit/ * docs/topics/expressions.rst (Constructor expressions): Fix duplicated words; have have -> have. --- gcc/analyzer/analyzer.opt | 2 +- gcc/analyzer/program-state.cc | 4 ++-- gcc/analyzer/region-model.cc | 2 +- gcc/c/c-decl.cc | 4 ++-- gcc/config/aarch64/driver-aarch64.cc | 2 +- gcc/config/riscv/riscv-avlprop.cc | 2 +- gcc/config/riscv/riscv-vector-builtins-shapes.cc | 2 +- gcc/config/riscv/riscv-vector-costs.cc | 2 +- gcc/cp/constexpr.cc | 2 +- gcc/cp/cp-tree.def | 2 +- gcc/cp/parser.cc | 2 +- gcc/cp/pt.cc | 4 ++-- gcc/cp/semantics.cc | 4 ++-- gcc/doc/invoke.texi | 4 ++-- gcc/doc/options.texi | 6 +++--- gcc/expr.cc | 2 +- gcc/function.h | 2 +- gcc/gcov.cc | 2 +- gcc/gimple-range-phi.cc | 2 +- gcc/jit/docs/topics/expressions.rst | 2 +- gcc/mode-switching.cc | 2 +- gcc/rtl-ssa/accesses.h | 2 +- gcc/tree-profile.cc | 4 ++-- gcc/tree-ssa-phiopt.cc | 2 +- gcc/tree-ssa-sccvn.cc | 2 +- gcc/tree-vrp.cc | 2 +- gcc/value-range.cc | 2 +- gcc/vr-values.cc | 2 +- 28 files changed, 36 insertions(+), 36 deletions(-) diff --git a/gcc/analyzer/analyzer.opt b/gcc/analyzer/analyzer.opt index 67c0c5023eba..bbf2ba670d8a 100644 --- a/gcc/analyzer/analyzer.opt +++ b/gcc/analyzer/analyzer.opt @@ -224,7 +224,7 @@ Warn about code paths in which an unsanitized value is used as a size. Wanalyzer-undefined-behavior-strtok Common Var(warn_analyzer_undefined_behavior_strtok) Init(1) Warning -Warn about code paths in in which a call is made to strtok with undefined behavior. +Warn about code paths in which a call is made to strtok with undefined behavior. Wanalyzer-use-after-free Common Var(warn_analyzer_use_after_free) Init(1) Warning diff --git a/gcc/analyzer/program-state.cc b/gcc/analyzer/program-state.cc index c88652baf5ca..7842b596a4b2 100644 --- a/gcc/analyzer/program-state.cc +++ b/gcc/analyzer/program-state.cc @@ -877,7 +877,7 @@ program_state::program_state (const extrinsic_state &ext_state) } } -/* Attempt to to use R to replay SUMMARY into this object. +/* Attempt to use R to replay SUMMARY into this object. Return true if it is possible. */ bool @@ -1625,7 +1625,7 @@ program_state::detect_leaks (const program_state &src_state, dest_state.m_region_model->unset_dynamic_extents (reg); } -/* Attempt to to use R to replay SUMMARY into this object. +/* Attempt to use R to replay SUMMARY into this object. Return true if it is possible. */ bool diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 98f287145c6c..665873dbe947 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -5623,7 +5623,7 @@ region_model::update_for_return_superedge (const return_superedge &return_edge, update_for_return_gcall (call_stmt, ctxt); } -/* Attempt to to use R to replay SUMMARY into this object. +/* Attempt to use R to replay SUMMARY into this object. Return true if it is possible. */ bool diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index c747abe9f4ef..345090dae38b 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -2069,7 +2069,7 @@ locate_old_decl (tree decl) /* Helper function. For a tagged type, it finds the declaration - for a visible tag declared in the the same scope if such a + for a visible tag declared in the same scope if such a declaration exists. */ static tree previous_tag (tree type) @@ -2316,7 +2316,7 @@ diagnose_mismatched_decls (tree newdecl, tree olddecl, (C23 6.7.2.2/5), but may pose portability problems. */ else if (enum_and_int_p && TREE_CODE (newdecl) != TYPE_DECL - /* Don't warn about about acc_on_device built-in redeclaration, + /* Don't warn about acc_on_device built-in redeclaration, the built-in is declared with int rather than enum because the enum isn't intrinsic. */ && !(TREE_CODE (olddecl) == FUNCTION_DECL diff --git a/gcc/config/aarch64/driver-aarch64.cc b/gcc/config/aarch64/driver-aarch64.cc index 5c6ee60a266e..b620351e5720 100644 --- a/gcc/config/aarch64/driver-aarch64.cc +++ b/gcc/config/aarch64/driver-aarch64.cc @@ -452,7 +452,7 @@ host_detect_local_cpu (int argc, const char **argv) if (tune) return res; - /* Add any features that should be be present, but can't be verified using + /* Add any features that should be present, but can't be verified using the /proc/cpuinfo "Features" list. */ extension_flags |= unchecked_extension_flags & default_flags; diff --git a/gcc/config/riscv/riscv-avlprop.cc b/gcc/config/riscv/riscv-avlprop.cc index 4ae15f25ca2a..71d6f6a04957 100644 --- a/gcc/config/riscv/riscv-avlprop.cc +++ b/gcc/config/riscv/riscv-avlprop.cc @@ -458,7 +458,7 @@ pass_avlprop::execute (function *fn) /* TODO: We only do AVL propagation for VLMAX AVL with tail agnostic policy since we have missed-LEN information partial - autovectorization. We could add more more AVL propagation + autovectorization. We could add more AVL propagation for intrinsic codes in the future. */ if (vlmax_ta_p (insn->rtl ())) m_candidates.safe_push (std::make_pair (AVLPROP_VLMAX_TA, insn)); diff --git a/gcc/config/riscv/riscv-vector-builtins-shapes.cc b/gcc/config/riscv/riscv-vector-builtins-shapes.cc index 7f983e823707..a3ffa92e967f 100644 --- a/gcc/config/riscv/riscv-vector-builtins-shapes.cc +++ b/gcc/config/riscv/riscv-vector-builtins-shapes.cc @@ -102,7 +102,7 @@ build_all (function_builder &b, const function_group_info &group) #define BASE_NAME_MAX_LEN 16 -/* Base class for for build. */ +/* Base class for build. */ struct build_base : public function_shape { void build (function_builder &b, diff --git a/gcc/config/riscv/riscv-vector-costs.cc b/gcc/config/riscv/riscv-vector-costs.cc index 5ceb313c118a..d27bb68a7b92 100644 --- a/gcc/config/riscv/riscv-vector-costs.cc +++ b/gcc/config/riscv/riscv-vector-costs.cc @@ -1170,7 +1170,7 @@ costs::add_stmt_cost (int count, vect_cost_for_stmt kind, /* For some target specific vectorization cost which can't be handled per stmt, we check the requisite conditions and adjust the vectorization cost - accordingly if satisfied. One typical example is to model model and adjust + accordingly if satisfied. One typical example is to model and adjust loop_len cost for known_lt (NITERS, VF). */ void diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 410ccdf597fd..02b34cc060ad 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -7224,7 +7224,7 @@ maybe_warn_about_constant_value (location_t loc, tree decl) in bytes. If COOKIE_SIZE is NULL, return array type ELT_TYPE[FULL_SIZE / sizeof(ELT_TYPE)], otherwise return struct { size_t[COOKIE_SIZE/sizeof(size_t)]; ELT_TYPE[N]; } - where N is is computed such that the size of the struct fits into FULL_SIZE. + where N is computed such that the size of the struct fits into FULL_SIZE. If ARG_SIZE is non-NULL, it is the first argument to the new operator. It should be passed if ELT_TYPE is zero sized type in which case FULL_SIZE will be also 0 and so it is not possible to determine the actual array diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def index 6bf2ee82c4c1..3a7ac29636da 100644 --- a/gcc/cp/cp-tree.def +++ b/gcc/cp/cp-tree.def @@ -567,7 +567,7 @@ DEFTREECODE (CO_YIELD_EXPR, "co_yield", tcc_expression, 2) /* The co_return expression is used to support coroutines. Op0 is the original expr, can be void (for use in diagnostics) - Op1 is the promise return_xxxx call for for the expression given. */ + Op1 is the promise return_xxxx call for the expression given. */ DEFTREECODE (CO_RETURN_EXPR, "co_return", tcc_statement, 2) diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 6134187c5db9..50d3ad35b611 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -45273,7 +45273,7 @@ substitute_in_tree (tree *context, tree orig, tree repl, bool flatten) } /* Walker to patch up the BLOCK_NODE hierarchy after the above surgery. - *DP is is the parent block. */ + *DP is the parent block. */ static tree fixup_blocks_walker (tree *tp, int *walk_subtrees, void *dp) diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 1425d6116d07..bf4b89d84130 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -25503,7 +25503,7 @@ more_specialized_fn (tree pat1, tree pat2, int len) if (DECL_STATIC_FUNCTION_P (decl1) || DECL_STATIC_FUNCTION_P (decl2)) { /* Note C++20 DR2445 extended the above to static member functions, but - I think think the old G++ behavior of just skipping the object + I think the old G++ behavior of just skipping the object parameter when comparing to a static member function was better, so let's stick with that for now. This is CWG2834. --jason 2023-12 */ if (DECL_OBJECT_MEMBER_FUNCTION_P (decl1)) @@ -30564,7 +30564,7 @@ type_targs_deducible_from (tree tmpl, tree type) /* Maybe add in default template args. This seems like a flaw in the specification in terms of partial specialization, since it says the - partial specialization has the the template parameter list of A, but a + partial specialization has the template parameter list of A, but a partial specialization can't have default targs. */ targs = coerce_template_parms (tparms, targs, tmpl, tf_none); if (targs == error_mark_node) diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 0015ff4fb62d..db0449b77863 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -3895,7 +3895,7 @@ finish_template_decl (tree parms) // typename pair<T, U>::first_type void f(T, U); // // Here, it is unlikely that there is a partial specialization of -// pair constrained for for Integral and Floating_point arguments. +// pair constrained for Integral and Floating_point arguments. // // The general rule is: if a constrained specialization with matching // constraints is found return that type. Also note that if TYPE is not a @@ -10692,7 +10692,7 @@ finish_omp_for (location_t locus, enum tree_code code, tree declv, initializer is a binding of the iteration variable, save that location. Any of these locations in the initialization clause for the current nested loop are better than using the argument locus, - that points to the "for" of the the outermost loop in the nest. */ + that points to the "for" of the outermost loop in the nest. */ if (init && EXPR_HAS_LOCATION (init)) elocus = EXPR_LOCATION (init); else if (decl && INDIRECT_REF_P (decl) && EXPR_HAS_LOCATION (decl)) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 0b1230b7bc3c..5d5e70c30331 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -11710,7 +11710,7 @@ By default the analyzer attempts to reconstruct the original function frames, and to emit events showing the inlined calls. With @option{-fno-analyzer-undo-inlining} this attempt to reconstruct -the original frame information can be be disabled, which may be of help +the original frame information can be disabled, which may be of help when debugging issues in the analyzer. @item -fanalyzer-verbose-edges @@ -25759,7 +25759,7 @@ Outputs pseudo-c assembly dialect. @item -minline-memops-threshold=@var{bytes} Specifies a size threshold in bytes at or below which memmove, memcpy and memset shall always be expanded inline. Operations dealing with -sizes larger than this threshold would have to be be implemented using +sizes larger than this threshold would have to be implemented using a library call instead of being expanded inline, but since BPF doesn't allow libcalls, exceeding this threshold results in a compile-time error. The default is @samp{1024} bytes. diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi index 01f3acf79e88..a8b3a3a0f4cc 100644 --- a/gcc/doc/options.texi +++ b/gcc/doc/options.texi @@ -422,9 +422,9 @@ The option is the inverse of another option that has the the options-processing script will declare @code{TARGET_@var{thisname}}, @code{TARGET_@var{name}_P} and @code{TARGET_@var{name}_OPTS_P} macros: @code{TARGET_@var{thisname}} is 1 when the option is active and 0 otherwise, -@code{TARGET_@var{name}_P} is similar to @code{TARGET_@var{name}} but take an -argument as @samp{target_flags}, and and @code{TARGET_@var{name}_OPTS_P} also -similar to @code{TARGET_@var{name}} but take an argument as @code{gcc_options}. +@code{TARGET_@var{name}_P} is similar to @code{TARGET_@var{name}} but takes an +argument as @samp{target_flags}, and @code{TARGET_@var{name}_OPTS_P} is also +similar to @code{TARGET_@var{name}} but takes an argument as @code{gcc_options}. @item Enum(@var{name}) The option's argument is a string from the set of strings associated diff --git a/gcc/expr.cc b/gcc/expr.cc index 8a1875d7809a..d4414e242cb9 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -392,7 +392,7 @@ convert_mode_scalar (rtx to, rtx from, int unsignedp) BFmode -> SFmode -> HFmode conversion where SFmode has superset of BFmode values. We don't need to handle sNaNs by raising exception and turning - into into qNaN though, as that can be done in the + it into qNaN though, as that can be done in the SFmode -> HFmode conversion too. */ rtx temp = gen_reg_rtx (SFmode); int save_flag_finite_math_only = flag_finite_math_only; diff --git a/gcc/function.h b/gcc/function.h index 419d9ffcd0c2..c0ba6cc1531a 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -271,7 +271,7 @@ struct GTY(()) function { htab_t GTY((skip)) value_histograms; /* Annotated gconds so that basic conditions in the same expression map to - the same same uid. This is used for condition coverage. */ + the same uid. This is used for condition coverage. */ hash_map <gcond*, unsigned> *GTY((skip)) cond_uids; /* For function.cc. */ diff --git a/gcc/gcov.cc b/gcc/gcov.cc index fd4a5cd331dd..0d4ef14e6c94 100644 --- a/gcc/gcov.cc +++ b/gcc/gcov.cc @@ -2567,7 +2567,7 @@ add_branch_counts (coverage_info *coverage, const arc_info *arc) } } -/* Increment totals in COVERAGE according to to block BLOCK. */ +/* Increment totals in COVERAGE according to block BLOCK. */ static void add_condition_counts (coverage_info *coverage, const block_info *block) diff --git a/gcc/gimple-range-phi.cc b/gcc/gimple-range-phi.cc index 01900a35b32e..c679e4ed7f29 100644 --- a/gcc/gimple-range-phi.cc +++ b/gcc/gimple-range-phi.cc @@ -325,7 +325,7 @@ phi_analyzer::operator[] (tree name) return m_tab[v]; } -// Process phi node PHI to see if it it part of a group. +// Process phi node PHI to see if it is part of a group. void phi_analyzer::process_phi (gphi *phi) diff --git a/gcc/jit/docs/topics/expressions.rst b/gcc/jit/docs/topics/expressions.rst index c3f4f61eb061..d83d95fe9e0b 100644 --- a/gcc/jit/docs/topics/expressions.rst +++ b/gcc/jit/docs/topics/expressions.rst @@ -238,7 +238,7 @@ Constructor expressions The fields in ``fields`` need to be the same objects that were used to create the struct. - Each value has to have have the same unqualified type as the field + Each value has to have the same unqualified type as the field it is applied to. A NULL value element in ``values`` is a shorthand for zero initialization diff --git a/gcc/mode-switching.cc b/gcc/mode-switching.cc index a145b77397d1..9041838a791f 100644 --- a/gcc/mode-switching.cc +++ b/gcc/mode-switching.cc @@ -585,7 +585,7 @@ forward_transfer (int bb_index) return true; } -/* A backwards confluence function. Update the the bb_info single_succ +/* A backwards confluence function. Update the bb_info single_succ field for E's source block, based on changes to E's destination block. At the end of the dataflow problem, single_succ is the single mode that all successors require (directly or indirectly), or no_mode diff --git a/gcc/rtl-ssa/accesses.h b/gcc/rtl-ssa/accesses.h index c57b8a8b7b52..7d2916d00c28 100644 --- a/gcc/rtl-ssa/accesses.h +++ b/gcc/rtl-ssa/accesses.h @@ -358,7 +358,7 @@ class use_info : public access_info use_info *next_any_insn_use () const; // Return the next use by a debug instruction, or null if none. - // This is only valid if if is_in_debug_insn (). + // This is only valid if is_in_debug_insn (). use_info *next_debug_insn_use () const; // Return the previous use by a phi node in the list, or null if none. diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index 33ff550a7bc1..f9d727b31118 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -390,7 +390,7 @@ condition_uid (struct function *fn, basic_block b) |/ \ T F - T has has multiple incoming edges and is the outcome of a short circuit, + T has multiple incoming edges and is the outcome of a short circuit, with top = a, bot = b. The top node (a) is masked when the edge (b, T) is taken. @@ -437,7 +437,7 @@ condition_uid (struct function *fn, basic_block b) The masking table is represented as two bitfields per term in the expression with the index corresponding to the term in the Boolean expression. a || b && c becomes the term vector [a b c] and the masking table [a[0] - a[1] b[0] ...]. The kth bit of a masking vector is set if the the kth term + a[1] b[0] ...]. The kth bit of a masking vector is set if the kth term is masked by taking the edge. The out masks are in uint64_t (the practical maximum for gcov_type_node for diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index 6a71165a1323..d1746c4b468a 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -1251,7 +1251,7 @@ value_replacement (basic_block cond_bb, basic_block middle_bb, _3 = i_6 != 0; Here, carg is 4, oarg is 6, crhs is 0, and because (4 != 0) == (6 != 0), we don't care if i_6 is 4 or 6, both - have the same outcome. So, can can optimize this to: + have the same outcome. So, we can optimize this to: _3 = i_2(D) != 0; If the single imm use of phi result >, >=, < or <=, similarly we can check if both carg and oarg compare the same against diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc index 936498950560..02c3bd5f5381 100644 --- a/gcc/tree-ssa-sccvn.cc +++ b/gcc/tree-ssa-sccvn.cc @@ -5979,7 +5979,7 @@ visit_phi (gimple *phi, bool *inserted, bool backedges_varying_p) if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (PHI_RESULT (phi))) return set_ssa_val_to (PHI_RESULT (phi), PHI_RESULT (phi)); - /* We track whether a PHI was CSEd to to avoid excessive iterations + /* We track whether a PHI was CSEd to avoid excessive iterations that would be necessary only because the PHI changed arguments but not value. */ if (!inserted) diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc index b0f21e3aa60d..a36c08f469a8 100644 --- a/gcc/tree-vrp.cc +++ b/gcc/tree-vrp.cc @@ -131,7 +131,7 @@ remove_unreachable::maybe_register (gimple *s) m_list.safe_push (std::make_pair (e->src->index, e->dest->index)); } -// Return true if all uses of NAME are dominated by by block BB. 1 use +// Return true if all uses of NAME are dominated by block BB. 1 use // is allowed in block BB, This is one we hope to remove. // ie // _2 = _1 & 7; diff --git a/gcc/value-range.cc b/gcc/value-range.cc index cb12fa3a30b5..70375f7abf9b 100644 --- a/gcc/value-range.cc +++ b/gcc/value-range.cc @@ -1886,7 +1886,7 @@ irange_bitmask::adjust_range (irange &r) const } } -// If the the mask can be trivially converted to a range, do so and +// If the mask can be trivially converted to a range, do so and // return TRUE. bool diff --git a/gcc/vr-values.cc b/gcc/vr-values.cc index 3ccb77d28be0..a7e291a16e52 100644 --- a/gcc/vr-values.cc +++ b/gcc/vr-values.cc @@ -167,7 +167,7 @@ check_for_binary_op_overflow (range_query *query, return true; } -/* Set INIT, STEP, and DIRECTION the the corresponding values of NAME +/* Set INIT, STEP, and DIRECTION to the corresponding values of NAME within LOOP, and return TRUE. Otherwise return FALSE, and set R to the conservative range of NAME within the loop. */ From cfed80b9e4f562c99679739548df9369117dd791 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 9 Apr 2024 09:31:42 +0200 Subject: [PATCH 448/551] c++: Fix up maybe_warn_for_constant_evaluated calls [PR114580] When looking at maybe_warn_for_constant_evaluated for the trivial infinite loops patch, I've noticed that it can emit weird diagnostics for if constexpr in templates, first warn that std::is_constant_evaluted() always evaluates to false (because the function template is not constexpr) and then during instantiation warn that std::is_constant_evaluted() always evaluates to true (because it is used in if constexpr condition). Now, only the latter is actually true, even when the if constexpr is in a non-constexpr function, it will still always evaluate to true. So, the following patch fixes it to call maybe_warn_for_constant_evaluated always with IF_STMT_CONSTEXPR_P (if_stmt) as the second argument rather than true if it is if constexpr with non-dependent condition etc. 2024-04-09 Jakub Jelinek <jakub@redhat.com> PR c++/114580 * semantics.cc (finish_if_stmt_cond): Call maybe_warn_for_constant_evaluated with IF_STMT_CONSTEXPR_P (if_stmt) as the second argument, rather than true/false depending on if it is if constexpr with non-dependent constant expression with bool type. * g++.dg/cpp2a/is-constant-evaluated15.C: New test. --- gcc/cp/semantics.cc | 10 ++----- .../g++.dg/cpp2a/is-constant-evaluated15.C | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated15.C diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index db0449b77863..a43ff6e2ab25 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -1126,6 +1126,7 @@ tree finish_if_stmt_cond (tree orig_cond, tree if_stmt) { tree cond = maybe_convert_cond (orig_cond); + maybe_warn_for_constant_evaluated (cond, IF_STMT_CONSTEXPR_P (if_stmt)); if (IF_STMT_CONSTEXPR_P (if_stmt) && !type_dependent_expression_p (cond) && require_constant_expression (cond) @@ -1134,16 +1135,11 @@ finish_if_stmt_cond (tree orig_cond, tree if_stmt) converted to bool. */ && TYPE_MAIN_VARIANT (TREE_TYPE (cond)) == boolean_type_node) { - maybe_warn_for_constant_evaluated (cond, /*constexpr_if=*/true); cond = instantiate_non_dependent_expr (cond); cond = cxx_constant_value (cond); } - else - { - maybe_warn_for_constant_evaluated (cond, /*constexpr_if=*/false); - if (processing_template_decl) - cond = orig_cond; - } + else if (processing_template_decl) + cond = orig_cond; finish_cond (&IF_COND (if_stmt), cond); add_stmt (if_stmt); THEN_CLAUSE (if_stmt) = push_stmt_list (); diff --git a/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated15.C b/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated15.C new file mode 100644 index 000000000000..50a3cac6e076 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated15.C @@ -0,0 +1,28 @@ +// PR c++/114580 +// { dg-do compile { target c++17 } } +// { dg-options "-Wtautological-compare" } + +namespace std { + constexpr inline bool + is_constant_evaluated () noexcept + { +#if __cpp_if_consteval >= 202106L + if consteval { return true; } else { return false; } +#else + return __builtin_is_constant_evaluated (); +#endif + } +} + +template <typename T> +void foo () +{ + if constexpr ((T) std::is_constant_evaluated ()) // { dg-warning "'std::is_constant_evaluated' always evaluates to true in 'if constexpr'" } + ; // { dg-bogus "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" } +} + +void +bar () +{ + foo <bool> (); +} From 21c9fd9688d9de9562b3cb491e4ab50ce09e663a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 9 Apr 2024 09:40:45 +0200 Subject: [PATCH 449/551] libquadmath: Provide __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN definitions My earlier libquadmath change apparently broke mingw32 build, while on Linux <bits/endian.h> is included and defines these, on Mingw apparently that isn't the case, while soft-fp wants a guarantee that sfp-machine.h defines these. 2024-04-09 Jakub Jelinek <jakub@redhat.com> * sfp-machine.h (__LITTLE_ENDIAN, __BIG_ENDIAN, __BYTE_ORDER): Define if __BYTE_ORDER isn't defined. --- libquadmath/sfp-machine.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libquadmath/sfp-machine.h b/libquadmath/sfp-machine.h index e37d5b3c656c..906a09e71395 100644 --- a/libquadmath/sfp-machine.h +++ b/libquadmath/sfp-machine.h @@ -18,6 +18,11 @@ #define _FP_NANSIGN_Q 1 #define _FP_KEEPNANFRACP 1 #define _FP_TININESS_AFTER_ROUNDING 0 +#ifndef __BYTE_ORDER +#define __LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ +#define __BIG_ENDIAN __ORDER_BIG_ENDIAN__ +#define __BYTE_ORDER __BYTE_ORDER__ +#endif #define _FP_DECL_EX \ unsigned int fp_roundmode __attribute__ ((unused)) = FP_RND_NEAREST; #define FP_ROUNDMODE fp_roundmode From 2daeb89d6f025d6daf7e560575863b3280120be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Kvalsvik?= <j@lambda.is> Date: Mon, 8 Apr 2024 09:28:27 +0200 Subject: [PATCH 450/551] Add tree-inlined gconds to caller cond->expr map Properly add the condition -> expression mapping of inlined gconds from the caller into the callee map. This is a fix for PR114599 that works beyond fixing the segfault, as the previous fixed copied references to the source gconds, not the deep copied ones that end up in the calle body. The new tests checks this, both in the case of a calle without conditions (which triggered the segfault), and a test that shows that conditions are properly mapped, and not mixed. PR middle-end/114599 gcc/ChangeLog: * tree-inline.cc (copy_bb): Copy cond_uids into callee. (prepend_lexical_block): Remove outdated comment. (add_local_variables): Remove bad cond_uids copy. gcc/testsuite/ChangeLog: * gcc.misc-tests/gcov-19.c: New test. --- gcc/testsuite/gcc.misc-tests/gcov-19.c | 52 ++++++++++++++++++++++++++ gcc/tree-inline.cc | 43 +++++++++++---------- 2 files changed, 76 insertions(+), 19 deletions(-) diff --git a/gcc/testsuite/gcc.misc-tests/gcov-19.c b/gcc/testsuite/gcc.misc-tests/gcov-19.c index b83a38531ba3..44e2f135e2ae 100644 --- a/gcc/testsuite/gcc.misc-tests/gcov-19.c +++ b/gcc/testsuite/gcc.misc-tests/gcov-19.c @@ -1468,6 +1468,54 @@ mcdc026e (int a, int b, int c, int d, int e) return x + y; } +__attribute__((always_inline)) +inline int +mcdc027_inlined (int a) +{ + if (a) + x = a; + else + x = 1; + + return a + 1; +} + +/* Check that conditions in a function inlined into a function without + conditionals works. */ +void +mcdc027a (int a) /* conditions(1/2) false(0) */ + /* conditions(end) */ +{ + mcdc027_inlined (a); +} + +/* Check that conditions in a function inlined into a function with + conditionals works and that the conditions are not mixed up. */ +void +mcdc027b (int a) /* conditions(1/2) false(0) */ + /* conditions(end) */ +{ + int v = mcdc027_inlined (a); + + if (v > 10) /* conditions(1/2) true(0) */ + /* condiitions(end) */ + x = 10; +} + +/* Check that conditions in a function inlined into a function with + conditionals works and that the conditions are not mixed up. Use different + number of conditions to distinguish the expressions. */ +void +mcdc027c (int a, int b) /* conditions(1/2) false(0) */ + /* conditions(end) */ +{ + int v = mcdc027_inlined (a); + + if (v > 10 && b) /* conditions(1/4) true(0 1) false(1) */ + /* condiitions(end) */ + x = 10; +} + int main () { mcdc001a (0, 1); @@ -1721,6 +1769,10 @@ int main () mcdc026e (1, 1, 1, 0, 1); mcdc026e (1, 1, 0, 0, 1); mcdc026e (1, 1, 1, 1, 1); + + mcdc027a (1); + mcdc027b (1); + mcdc027c (1, 0); } /* { dg-final { run-gcov conditions { --conditions gcov-19.c } } } */ diff --git a/gcc/tree-inline.cc b/gcc/tree-inline.cc index b18917707cc9..5f852885e7f1 100644 --- a/gcc/tree-inline.cc +++ b/gcc/tree-inline.cc @@ -2049,6 +2049,17 @@ copy_bb (copy_body_data *id, basic_block bb, copy_gsi = gsi_start_bb (copy_basic_block); + unsigned min_cond_uid = 0; + if (id->src_cfun->cond_uids) + { + if (!cfun->cond_uids) + cfun->cond_uids = new hash_map <gcond*, unsigned> (); + + for (auto itr : *id->src_cfun->cond_uids) + if (itr.second >= min_cond_uid) + min_cond_uid = itr.second + 1; + } + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple_seq stmts; @@ -2076,6 +2087,18 @@ copy_bb (copy_body_data *id, basic_block bb, if (gimple_nop_p (stmt)) continue; + /* If -fcondition-coverage is used, register the inlined conditions + in the cond->expression mapping of the caller. The expression tag + is shifted conditions from the two bodies are not mixed. */ + if (id->src_cfun->cond_uids && is_a <gcond*> (orig_stmt)) + { + gcond *orig_cond = as_a <gcond*> (orig_stmt); + gcond *cond = as_a <gcond*> (stmt); + unsigned *v = id->src_cfun->cond_uids->get (orig_cond); + if (v) + cfun->cond_uids->put (cond, *v + min_cond_uid); + } + gimple_duplicate_stmt_histograms (cfun, stmt, id->src_cfun, orig_stmt); @@ -4659,8 +4682,7 @@ prepend_lexical_block (tree current_block, tree new_block) BLOCK_SUPERCONTEXT (new_block) = current_block; } -/* Add local variables from CALLEE to CALLER. If set for condition coverage, - copy basic condition -> expression mapping to CALLER. */ +/* Add local variables from CALLEE to CALLER. */ static inline void add_local_variables (struct function *callee, struct function *caller, @@ -4690,23 +4712,6 @@ add_local_variables (struct function *callee, struct function *caller, } add_local_decl (caller, new_var); } - - /* If -fcondition-coverage is used and the caller has conditions, copy the - mapping into the caller but and the end so the caller and callee - expressions aren't mixed. */ - if (callee->cond_uids) - { - if (!caller->cond_uids) - caller->cond_uids = new hash_map <gcond*, unsigned> (); - - unsigned dst_max_uid = 0; - for (auto itr : *callee->cond_uids) - if (itr.second >= dst_max_uid) - dst_max_uid = itr.second + 1; - - for (auto itr : *callee->cond_uids) - caller->cond_uids->put (itr.first, itr.second + dst_max_uid); - } } /* Add to BINDINGS a debug stmt resetting SRCVAR if inlining might From a2447556a5405d2cde20afc134b90cd1d199ce04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Kvalsvik?= <j@lambda.is> Date: Mon, 8 Apr 2024 15:19:55 +0200 Subject: [PATCH 451/551] Generate constant at start of loop, without UB Generating the constants used for recording the edges taken for condition coverage would trigger undefined behavior when an expression had exactly 64 (== sizeof (1ULL)) conditions, as it would generate the constant for the next iteration at the end of the loop body, even if there was never a next iteration. By moving the check and constant generation to the top of the loop and hoisting the increment flag there is no opportunity for UB. PR middle-end/114627 gcc/ChangeLog: * tree-profile.cc (instrument_decisions): Generate constant at the start of loop. --- gcc/tree-profile.cc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index f9d727b31118..b85111624fed 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -1049,6 +1049,7 @@ instrument_decisions (array_slice<basic_block> expr, size_t condno, zerocounter[2] = zero; unsigned xi = 0; + bool increment = false; tree rhs = build_int_cst (gcov_type_node, 1ULL << xi); for (basic_block current : expr) { @@ -1057,7 +1058,14 @@ instrument_decisions (array_slice<basic_block> expr, size_t condno, candidates.safe_push (zerocounter); counters prev = resolve_counters (candidates); - int increment = 0; + if (increment) + { + xi += 1; + gcc_checking_assert (xi < sizeof (uint64_t) * BITS_PER_UNIT); + rhs = build_int_cst (gcov_type_node, 1ULL << xi); + increment = false; + } + for (edge e : current->succs) { counters next = prev; @@ -1072,7 +1080,7 @@ instrument_decisions (array_slice<basic_block> expr, size_t condno, tree m = build_int_cst (gcov_type_node, masks[2*xi + k]); next[2] = emit_bitwise_op (e, prev[2], BIT_IOR_EXPR, m); } - increment = 1; + increment = true; } else if (e->flags & EDGE_COMPLEX) { @@ -1085,11 +1093,13 @@ instrument_decisions (array_slice<basic_block> expr, size_t condno, } table.get_or_insert (e->dest).safe_push (next); } - xi += increment; - if (increment) - rhs = build_int_cst (gcov_type_node, 1ULL << xi); } + /* Since this is also the return value, the number of conditions, make sure + to include the increment of the last basic block. */ + if (increment) + xi += 1; + gcc_assert (xi == bitmap_count_bits (core)); const tree relaxed = build_int_cst (integer_type_node, MEMMODEL_RELAXED); From 73fb0a6153f4781587c925c56683b61632e63dee Mon Sep 17 00:00:00 2001 From: Christophe Lyon <christophe.lyon@linaro.org> Date: Thu, 4 Apr 2024 16:21:46 +0000 Subject: [PATCH 452/551] rust: Add rust.install-dvi and rust.install-html rules rust has the (empty) rust.dvi and rust.html rules, but lacks the (empty) rust.install-dvi and rust.install-html ones. 2024-04-04 Christophe Lyon <christophe.lyon@linaro.org> gcc/rust/ * Make-lang.in (rust.install-dvi, rust.install-html): New rules. --- gcc/rust/Make-lang.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in index 4d6460187924..4d73412739d1 100644 --- a/gcc/rust/Make-lang.in +++ b/gcc/rust/Make-lang.in @@ -342,6 +342,8 @@ selftest-rust-valgrind: $(RUST_SELFTEST_DEPS) # should have dependencies on info files that should be installed. rust.install-info: +rust.install-dvi: +rust.install-html: rust.install-pdf: # Install man pages for the front end. This target should ignore errors. From 8657d76d583f0f87000e9003ba75922f2bbe4455 Mon Sep 17 00:00:00 2001 From: Yang Yujie <yangyujie@loongson.cn> Date: Mon, 8 Apr 2024 16:45:13 +0800 Subject: [PATCH 453/551] LoongArch: Enable switchable target This patch fixes the back-end context switching in cases where functions should be built with their own target contexts instead of the global one, such as LTO linking and functions with target attributes (TBD). PR target/113233 gcc/ChangeLog: * config/loongarch/loongarch.cc (loongarch_reg_init): Reinitialize the loongarch_regno_mode_ok cache. (loongarch_option_override): Same. (loongarch_save_restore_target_globals): Restore target globals. (loongarch_set_current_function): Restore the target contexts for functions. (TARGET_SET_CURRENT_FUNCTION): Define. * config/loongarch/loongarch.h (SWITCHABLE_TARGET): Enable switchable target context. * config/loongarch/loongarch-builtins.cc (loongarch_init_builtins): Initialize all builtin functions at startup. (loongarch_expand_builtin): Turn assertion of builtin availability into a test. gcc/testsuite/ChangeLog: * lib/target-supports.exp: Define condition loongarch_sx_as. * gcc.dg/lto/pr113233_0.c: New test. --- gcc/config/loongarch/loongarch-builtins.cc | 25 +++--- gcc/config/loongarch/loongarch.cc | 91 ++++++++++++++++++++-- gcc/config/loongarch/loongarch.h | 2 + gcc/testsuite/gcc.dg/lto/pr113233_0.c | 14 ++++ gcc/testsuite/lib/target-supports.exp | 12 +++ 5 files changed, 127 insertions(+), 17 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/lto/pr113233_0.c diff --git a/gcc/config/loongarch/loongarch-builtins.cc b/gcc/config/loongarch/loongarch-builtins.cc index efe7e5e5ebc9..fbe46833c9b7 100644 --- a/gcc/config/loongarch/loongarch-builtins.cc +++ b/gcc/config/loongarch/loongarch-builtins.cc @@ -2512,14 +2512,11 @@ loongarch_init_builtins (void) for (i = 0; i < ARRAY_SIZE (loongarch_builtins); i++) { d = &loongarch_builtins[i]; - if (d->avail ()) - { - type = loongarch_build_function_type (d->function_type); - loongarch_builtin_decls[i] - = add_builtin_function (d->name, type, i, BUILT_IN_MD, NULL, - NULL); - loongarch_get_builtin_decl_index[d->icode] = i; - } + type = loongarch_build_function_type (d->function_type); + loongarch_builtin_decls[i] + = add_builtin_function (d->name, type, i, BUILT_IN_MD, NULL, + NULL); + loongarch_get_builtin_decl_index[d->icode] = i; } } @@ -3105,15 +3102,21 @@ loongarch_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, int ignore ATTRIBUTE_UNUSED) { tree fndecl; - unsigned int fcode, avail; + unsigned int fcode; const struct loongarch_builtin_description *d; fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0); fcode = DECL_MD_FUNCTION_CODE (fndecl); gcc_assert (fcode < ARRAY_SIZE (loongarch_builtins)); d = &loongarch_builtins[fcode]; - avail = d->avail (); - gcc_assert (avail != 0); + + if (!d->avail ()) + { + error_at (EXPR_LOCATION (exp), + "built-in function %qD is not enabled", fndecl); + return target; + } + switch (d->builtin_type) { case LARCH_BUILTIN_DIRECT: diff --git a/gcc/config/loongarch/loongarch.cc b/gcc/config/loongarch/loongarch.cc index c90b701a5336..6b92e7034c56 100644 --- a/gcc/config/loongarch/loongarch.cc +++ b/gcc/config/loongarch/loongarch.cc @@ -7570,15 +7570,19 @@ loongarch_global_init (void) loongarch_dwarf_regno[i] = INVALID_REGNUM; } + /* Function to allocate machine-dependent function status. */ + init_machine_status = &loongarch_init_machine_status; +}; + +static void +loongarch_reg_init (void) +{ /* Set up loongarch_hard_regno_mode_ok. */ for (int mode = 0; mode < MAX_MACHINE_MODE; mode++) for (int regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) loongarch_hard_regno_mode_ok_p[mode][regno] = loongarch_hard_regno_mode_ok_uncached (regno, (machine_mode) mode); - - /* Function to allocate machine-dependent function status. */ - init_machine_status = &loongarch_init_machine_status; -}; +} static void loongarch_option_override_internal (struct loongarch_target *target, @@ -7605,20 +7609,92 @@ loongarch_option_override_internal (struct loongarch_target *target, /* Override some options according to the resolved target. */ loongarch_target_option_override (target, opts, opts_set); + + target_option_default_node = target_option_current_node + = build_target_option_node (opts, opts_set); + + loongarch_reg_init (); +} + +/* Remember the last target of loongarch_set_current_function. */ + +static GTY(()) tree loongarch_previous_fndecl; + +/* Restore or save the TREE_TARGET_GLOBALS from or to new_tree. + Used by loongarch_set_current_function to + make sure optab availability predicates are recomputed when necessary. */ + +static void +loongarch_save_restore_target_globals (tree new_tree) +{ + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else if (new_tree == target_option_default_node) + restore_target_globals (&default_target_globals); + else + TREE_TARGET_GLOBALS (new_tree) = save_target_globals_default_opts (); +} + +/* Implement TARGET_SET_CURRENT_FUNCTION. */ + +static void +loongarch_set_current_function (tree fndecl) +{ + if (fndecl == loongarch_previous_fndecl) + return; + + tree old_tree; + if (loongarch_previous_fndecl == NULL_TREE) + old_tree = target_option_current_node; + else if (DECL_FUNCTION_SPECIFIC_TARGET (loongarch_previous_fndecl)) + old_tree = DECL_FUNCTION_SPECIFIC_TARGET (loongarch_previous_fndecl); + else + old_tree = target_option_default_node; + + if (fndecl == NULL_TREE) + { + if (old_tree != target_option_current_node) + { + loongarch_previous_fndecl = NULL_TREE; + cl_target_option_restore (&global_options, &global_options_set, + TREE_TARGET_OPTION + (target_option_current_node)); + } + return; + } + + tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl); + if (new_tree == NULL_TREE) + new_tree = target_option_default_node; + + loongarch_previous_fndecl = fndecl; + + if (new_tree == old_tree) + return; + + cl_target_option_restore (&global_options, &global_options_set, + TREE_TARGET_OPTION (new_tree)); + + loongarch_reg_init (); + + loongarch_save_restore_target_globals (new_tree); } + + /* Implement TARGET_OPTION_OVERRIDE. */ static void loongarch_option_override (void) { + /* Global initializations. */ + loongarch_global_init (); + /* Setting up the target configuration. */ loongarch_option_override_internal (&la_target, &global_options, &global_options_set); - /* Global initializations. */ - loongarch_global_init (); } /* Implement TARGET_OPTION_SAVE. */ @@ -10935,6 +11011,9 @@ loongarch_asm_code_end (void) #undef TARGET_OPTION_RESTORE #define TARGET_OPTION_RESTORE loongarch_option_restore +#undef TARGET_SET_CURRENT_FUNCTION +#define TARGET_SET_CURRENT_FUNCTION loongarch_set_current_function + #undef TARGET_LEGITIMIZE_ADDRESS #define TARGET_LEGITIMIZE_ADDRESS loongarch_legitimize_address diff --git a/gcc/config/loongarch/loongarch.h b/gcc/config/loongarch/loongarch.h index 23bb32548831..db8a9eb95166 100644 --- a/gcc/config/loongarch/loongarch.h +++ b/gcc/config/loongarch/loongarch.h @@ -23,6 +23,8 @@ along with GCC; see the file COPYING3. If not see #include "config/loongarch/loongarch-opts.h" +#define SWITCHABLE_TARGET 1 + #define TARGET_SUPPORTS_WIDE_INT 1 /* Macros to silence warnings about numbers being signed in traditional diff --git a/gcc/testsuite/gcc.dg/lto/pr113233_0.c b/gcc/testsuite/gcc.dg/lto/pr113233_0.c new file mode 100644 index 000000000000..0a045c519668 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr113233_0.c @@ -0,0 +1,14 @@ +/* { dg-require-effective-target loongarch_sx_as } */ +/* { dg-lto-do link } */ +/* { dg-skip-if "" { ! { loongarch*-linux-* } } } */ +/* { dg-lto-options { {-mlsx } } } */ +/* { dg-suppress-ld-options { -mlsx } } */ + +#include <lsxintrin.h> + +int main (void) +{ + __m128i a, b, c; + c = __lsx_vand_v (a, b); + return 0; +} diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 49f2482686a2..edce672c0e21 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -13413,6 +13413,18 @@ proc check_effective_target_loongarch_sx { } { } "-mlsx"] } +proc check_effective_target_loongarch_sx_as { } { + return [check_no_compiler_messages loongarch_sx_as object { + #include <lsxintrin.h> + int main (void) + { + __m128i a, b, c; + c = __lsx_vand_v (a, b); + return 0; + } + } "-mlsx"] +} + proc check_effective_target_loongarch_sx_hw { } { return [check_runtime loongarch_sx_hw { #include <lsxintrin.h> From 46120d7d12318f98cbeeef1bae886222ecc92d52 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Tue, 9 Apr 2024 11:02:17 +0100 Subject: [PATCH 454/551] modula2: tidyup makeSystem This patch provides a tidyup for gcc/m2/tools-src/makeSystem. It only runs the compiler once and will echo a debug command line should it fail. gcc/m2/ChangeLog: * tools-src/makeSystem: Invoke ${COMPILER} once and adjust the echo string to expand the shell variables with -wrapper gdb, --args. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/m2/tools-src/makeSystem | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/gcc/m2/tools-src/makeSystem b/gcc/m2/tools-src/makeSystem index 824aeb766761..393713eb873d 100644 --- a/gcc/m2/tools-src/makeSystem +++ b/gcc/m2/tools-src/makeSystem @@ -101,8 +101,10 @@ displayEnd () { MINIMAL="-fno-scaffold-main -fno-scaffold-dynamic -fno-scaffold-static -fno-m2-plugin" rm -f ${OUTPUTFILE} -if ${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ - -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null 2>&1 > /dev/null ; then +${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ + -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null 2>&1 > /dev/null +res=$? +if [ ${res} -eq 0 ] ; then types=`${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -fno-m2-plugin -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null | cut -f5 -d' '` touch ${OUTPUTFILE} displayStart @@ -111,7 +113,9 @@ if ${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ displayBuiltinTypes displayEnd else - ${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \ - -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null - exit $? + echo "the command below failed:" + echo "${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -S -fdump-system-exports ${SYSTEMMOD}" + echo "to debug the command use" + echo "${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -S -fdump-system-exports ${SYSTEMMOD} -wrapper gdb,--args" + exit $res fi From 897a241ddde53eae912c612a1623c84ff4dfe339 Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Tue, 9 Apr 2024 11:21:02 +0100 Subject: [PATCH 455/551] modula2: remove description of fdebug-trace-quad, fdebug-trace-api and add fm2-debug-trace= This documentation fix removes the descriptions of -fdebug-trace-quad and -fdebug-trace-api. It adds a description of -fm2-debug-trace= together with the trace alternatives: line,token,quad,all. gcc/ChangeLog: * doc/gm2.texi (Compiler options): Remove -fdebug-trace-quad. Remove -fdebug-trace-api. Add -fm2-debug-trace=. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/doc/gm2.texi | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/gcc/doc/gm2.texi b/gcc/doc/gm2.texi index 9f6d4140e427..19b864573c12 100644 --- a/gcc/doc/gm2.texi +++ b/gcc/doc/gm2.texi @@ -398,14 +398,6 @@ it allows users to single step code into an intrinsic function. @c Modula-2 @c turn on internal debugging of the compiler (internal switch) -@c fdebug-trace-quad -@c Modula-2 -@c turn on quadruple tracing (internal switch) - -@c fdebug-trace-api -@c Modula-2 -@c turn on the Modula-2 api tracing (internal switch) - @c fdebug-function-line-numbers @c Modula-2 @c turn on the Modula-2 function line number generation (internal switch) @@ -474,6 +466,11 @@ this option forces the use of the static version. @c Modula-2 Joined @c set all location values to a specific value (internal switch) +@c fm2-debug-trace= +@c Modula-2 Joined +@c turn on trace debugging using a comma separated list: +@c line,token,quad,all. + @item -fm2-g improve the debugging experience for new programmers at the expense of generating @code{nop} instructions if necessary to ensure single From a79d13a01f8cbb99fb45bf3f3ffc62c99ee0b05e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Tue, 9 Apr 2024 12:35:18 +0200 Subject: [PATCH 456/551] i386: Fix aes/vaes patterns [PR114576] On Wed, Apr 19, 2023 at 02:40:59AM +0000, Jiang, Haochen via Gcc-patches wrote: > > > (define_insn "aesenc" > > > - [(set (match_operand:V2DI 0 "register_operand" "=x,x") > > > - (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x") > > > - (match_operand:V2DI 2 "vector_operand" "xBm,xm")] > > > + [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") > > > + (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") > > > + (match_operand:V2DI 2 "vector_operand" > > > + "xBm,xm,vm")] > > > UNSPEC_AESENC))] > > > - "TARGET_AES" > > > + "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" > > > "@ > > > aesenc\t{%2, %0|%0, %2} > > > + vaesenc\t{%2, %1, %0|%0, %1, %2} > > > vaesenc\t{%2, %1, %0|%0, %1, %2}" > > > - [(set_attr "isa" "noavx,avx") > > > + [(set_attr "isa" "noavx,aes,avx512vl") > > Shouldn't it be vaes_avx512vl and then remove " || (TARGET_VAES && > > TARGET_AVX512VL)" from condition. > > Since VAES should not imply AES, we need that "|| (TARGET_VAES && > TARGET_AVX512VL)" > > And there is no need to add vaes_avx512vl since the last alternative will only > be hit when there is no aes. When there is no aes, the pattern will need vaes > and avx512vl both or we could not use this pattern. avx512vl here is just like > a placeholder. As the following testcase shows, the above change was incorrect. Using aes isa for the second alternative is obviously wrong, aes is enabled whenever -maes is, regardless of -mavx or -mno-avx, so the above change means that for -maes -mno-avx RA can choose, either it matches the first alternative with the dup operand, or it matches the second one (but that is of course wrong because vaesenc VEX encoded insn needs AES & AVX CPUID). The big question is if "Since VAES should not imply AES" is the case or not. Looking around at what LLVM does on godbolt, seems since clang 6 which added -mvaes support -mvaes there implies -maes, but GCC treats those two independent. Now, if we'd take the LLVM path of making -mvaes imply -maes and -mno-aes imply -mno-vaes, then we should probably just revert the above patch and tweak common/config/i386/ to do the implications (+ add the testcase from this patch). If we keep the current behavior, where AES and VAES are completely independent extensions, then we need to do more changes as the following patch attempts to do. We should use the aesenc etc. insns for noavx as before, we know at that point that TARGET_AES must be true because (TARGET_VAES && TARGET_AVX512VL) won't be true when !TARGET_AVX - TARGET_AVX512VL implies TARGET_AVX. For the second alternative, i.e. the AVX AES VEX or VAES AVX512F EVEX case without using %xmm16+/EGPR regs, the patch uses avx isa, but we need to emit {evex} prefix in the assembly if AES ISA is not enabled. For the last alternative, we need to use a new vaes_avx512vl isa attribute, because the %xmm16+/EGPR support is there only if both VAES and AVX512VL is enabled, not just AVX and AES. Still, I wonder if -mvaes shouldn't imply at least -mavx512f and -mno-avx512f shouldn't imply -mno-vaes, because otherwise can't see how it could use 512-bit registers (this part not done in the patch). 2024-04-09 Jakub Jelinek <jakub@redhat.com> PR target/114576 * config/i386/i386.md (isa): Remove aes, add vaes_avx512vl. (enabled): Remove aes isa check, add vaes_avx512vl. * config/i386/sse.md (aesenc, aesenclast, aesdec, aesdeclast): Use jm instead of m for second alternative and emit {evex} prefix for it if !TARGET_AES. Use noavx,avx,vaes_avx512vl isa attribute. (vaesdec_<mode>, vaesdeclast_<mode>, vaesenc_<mode>, vaesenclast_<mode>): Add second alternative with x instead of v and jm instead of m. * gcc.target/i386/aes-pr114576.c: New test. --- gcc/config/i386/i386.md | 8 +- gcc/config/i386/sse.md | 90 ++++++++++++-------- gcc/testsuite/gcc.target/i386/aes-pr114576.c | 63 ++++++++++++++ 3 files changed, 121 insertions(+), 40 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/aes-pr114576.c diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 10ae3113ae8d..d4ce3809e6d5 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -568,13 +568,14 @@ ;; Used to control the "enabled" attribute on a per-instruction basis. (define_attr "isa" "base,x64,nox64,x64_sse2,x64_sse4,x64_sse4_noavx, - x64_avx,x64_avx512bw,x64_avx512dq,aes,apx_ndd, + x64_avx,x64_avx512bw,x64_avx512dq,apx_ndd, sse_noavx,sse2,sse2_noavx,sse3,sse3_noavx,sse4,sse4_noavx, avx,noavx,avx2,noavx2,bmi,bmi2,fma4,fma,avx512f,avx512f_512, noavx512f,avx512bw,avx512bw_512,noavx512bw,avx512dq, noavx512dq,fma_or_avx512vl,avx512vl,noavx512vl,avxvnni, avx512vnnivl,avx512fp16,avxifma,avx512ifmavl,avxneconvert, - avx512bf16vl,vpclmulqdqvl,avx_noavx512f,avx_noavx512vl" + avx512bf16vl,vpclmulqdqvl,avx_noavx512f,avx_noavx512vl, + vaes_avx512vl" (const_string "base")) ;; The (bounding maximum) length of an instruction immediate. @@ -915,7 +916,6 @@ (symbol_ref "TARGET_64BIT && TARGET_AVX512BW") (eq_attr "isa" "x64_avx512dq") (symbol_ref "TARGET_64BIT && TARGET_AVX512DQ") - (eq_attr "isa" "aes") (symbol_ref "TARGET_AES") (eq_attr "isa" "sse_noavx") (symbol_ref "TARGET_SSE && !TARGET_AVX") (eq_attr "isa" "sse2") (symbol_ref "TARGET_SSE2") @@ -968,6 +968,8 @@ (symbol_ref "TARGET_VPCLMULQDQ && TARGET_AVX512VL") (eq_attr "isa" "apx_ndd") (symbol_ref "TARGET_APX_NDD") + (eq_attr "isa" "vaes_avx512vl") + (symbol_ref "TARGET_VAES && TARGET_AVX512VL") (eq_attr "mmx_isa" "native") (symbol_ref "!TARGET_MMX_WITH_SSE") diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 3286d3a4facc..03aa249b8426 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -26279,72 +26279,72 @@ (define_insn "aesenc" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xja,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xja,xjm,vm")] UNSPEC_AESENC))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ aesenc\t{%2, %0|%0, %2} - vaesenc\t{%2, %1, %0|%0, %1, %2} + * return TARGET_AES ? \"vaesenc\t{%2, %1, %0|%0, %1, %2}\" : \"%{evex%} vaesenc\t{%2, %1, %0|%0, %1, %2}\"; vaesenc\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "noavx,aes,avx512vl") + [(set_attr "isa" "noavx,avx,vaes_avx512vl") (set_attr "type" "sselog1") (set_attr "addr" "gpr16,*,*") (set_attr "prefix_extra" "1") - (set_attr "prefix" "orig,vex,evex") + (set_attr "prefix" "orig,maybe_evex,evex") (set_attr "btver2_decode" "double,double,double") (set_attr "mode" "TI")]) (define_insn "aesenclast" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xja,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xja,xjm,vm")] UNSPEC_AESENCLAST))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ aesenclast\t{%2, %0|%0, %2} - vaesenclast\t{%2, %1, %0|%0, %1, %2} + * return TARGET_AES ? \"vaesenclast\t{%2, %1, %0|%0, %1, %2}\" : \"%{evex%} vaesenclast\t{%2, %1, %0|%0, %1, %2}\"; vaesenclast\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "noavx,aes,avx512vl") + [(set_attr "isa" "noavx,avx,vaes_avx512vl") (set_attr "type" "sselog1") (set_attr "addr" "gpr16,*,*") (set_attr "prefix_extra" "1") - (set_attr "prefix" "orig,vex,evex") - (set_attr "btver2_decode" "double,double,double") + (set_attr "prefix" "orig,maybe_evex,evex") + (set_attr "btver2_decode" "double,double,double") (set_attr "mode" "TI")]) (define_insn "aesdec" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xja,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xja,xjm,vm")] UNSPEC_AESDEC))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ aesdec\t{%2, %0|%0, %2} - vaesdec\t{%2, %1, %0|%0, %1, %2} + * return TARGET_AES ? \"vaesdec\t{%2, %1, %0|%0, %1, %2}\" : \"%{evex%} vaesdec\t{%2, %1, %0|%0, %1, %2}\"; vaesdec\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "noavx,aes,avx512vl") + [(set_attr "isa" "noavx,avx,vaes_avx512vl") (set_attr "type" "sselog1") (set_attr "addr" "gpr16,*,*") (set_attr "prefix_extra" "1") - (set_attr "prefix" "orig,vex,evex") + (set_attr "prefix" "orig,maybe_evex,evex") (set_attr "btver2_decode" "double,double,double") (set_attr "mode" "TI")]) (define_insn "aesdeclast" [(set (match_operand:V2DI 0 "register_operand" "=x,x,v") (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "0,x,v") - (match_operand:V2DI 2 "vector_operand" "xja,xm,vm")] + (match_operand:V2DI 2 "vector_operand" "xja,xjm,vm")] UNSPEC_AESDECLAST))] "TARGET_AES || (TARGET_VAES && TARGET_AVX512VL)" "@ aesdeclast\t{%2, %0|%0, %2} - vaesdeclast\t{%2, %1, %0|%0, %1, %2} + * return TARGET_AES ? \"vaesdeclast\t{%2, %1, %0|%0, %1, %2}\" : \"%{evex%} vaesdeclast\t{%2, %1, %0|%0, %1, %2}\"; vaesdeclast\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "noavx,aes,avx512vl") + [(set_attr "isa" "noavx,avx,vaes_avx512vl") (set_attr "addr" "gpr16,*,*") (set_attr "type" "sselog1") (set_attr "prefix_extra" "1") - (set_attr "prefix" "orig,vex,evex") + (set_attr "prefix" "orig,maybe_evex,evex") (set_attr "btver2_decode" "double,double,double") (set_attr "mode" "TI")]) @@ -30246,44 +30246,60 @@ [(set_attr ("prefix") ("evex"))]) (define_insn "vaesdec_<mode>" - [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=v") + [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=x,v") (unspec:VI1_AVX512VL_F - [(match_operand:VI1_AVX512VL_F 1 "register_operand" "v") - (match_operand:VI1_AVX512VL_F 2 "vector_operand" "vm")] + [(match_operand:VI1_AVX512VL_F 1 "register_operand" "x,v") + (match_operand:VI1_AVX512VL_F 2 "vector_operand" "xjm,vm")] UNSPEC_VAESDEC))] "TARGET_VAES" - "vaesdec\t{%2, %1, %0|%0, %1, %2}" -) +{ + if (which_alternative == 0 && <MODE>mode == V16QImode) + return "%{evex%} vaesdec\t{%2, %1, %0|%0, %1, %2}"; + else + return "vaesdec\t{%2, %1, %0|%0, %1, %2}"; +}) (define_insn "vaesdeclast_<mode>" - [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=v") + [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=x,v") (unspec:VI1_AVX512VL_F - [(match_operand:VI1_AVX512VL_F 1 "register_operand" "v") - (match_operand:VI1_AVX512VL_F 2 "vector_operand" "vm")] + [(match_operand:VI1_AVX512VL_F 1 "register_operand" "x,v") + (match_operand:VI1_AVX512VL_F 2 "vector_operand" "xjm,vm")] UNSPEC_VAESDECLAST))] "TARGET_VAES" - "vaesdeclast\t{%2, %1, %0|%0, %1, %2}" -) +{ + if (which_alternative == 0 && <MODE>mode == V16QImode) + return "%{evex%} vaesdeclast\t{%2, %1, %0|%0, %1, %2}"; + else + return "vaesdeclast\t{%2, %1, %0|%0, %1, %2}"; +}) (define_insn "vaesenc_<mode>" - [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=v") + [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=x,v") (unspec:VI1_AVX512VL_F - [(match_operand:VI1_AVX512VL_F 1 "register_operand" "v") - (match_operand:VI1_AVX512VL_F 2 "vector_operand" "vm")] + [(match_operand:VI1_AVX512VL_F 1 "register_operand" "x,v") + (match_operand:VI1_AVX512VL_F 2 "vector_operand" "xjm,vm")] UNSPEC_VAESENC))] "TARGET_VAES" - "vaesenc\t{%2, %1, %0|%0, %1, %2}" -) +{ + if (which_alternative == 0 && <MODE>mode == V16QImode) + return "%{evex%} vaesenc\t{%2, %1, %0|%0, %1, %2}"; + else + return "vaesenc\t{%2, %1, %0|%0, %1, %2}"; +}) (define_insn "vaesenclast_<mode>" - [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=v") + [(set (match_operand:VI1_AVX512VL_F 0 "register_operand" "=x,v") (unspec:VI1_AVX512VL_F - [(match_operand:VI1_AVX512VL_F 1 "register_operand" "v") - (match_operand:VI1_AVX512VL_F 2 "vector_operand" "vm")] + [(match_operand:VI1_AVX512VL_F 1 "register_operand" "x,v") + (match_operand:VI1_AVX512VL_F 2 "vector_operand" "xjm,vm")] UNSPEC_VAESENCLAST))] "TARGET_VAES" - "vaesenclast\t{%2, %1, %0|%0, %1, %2}" -) +{ + if (which_alternative == 0 && <MODE>mode == V16QImode) + return "%{evex%} vaesenclast\t{%2, %1, %0|%0, %1, %2}"; + else + return "vaesenclast\t{%2, %1, %0|%0, %1, %2}"; +}) (define_insn "vpclmulqdq_<mode>" [(set (match_operand:VI8_FVL 0 "register_operand" "=v") diff --git a/gcc/testsuite/gcc.target/i386/aes-pr114576.c b/gcc/testsuite/gcc.target/i386/aes-pr114576.c new file mode 100644 index 000000000000..423125aff195 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/aes-pr114576.c @@ -0,0 +1,63 @@ +/* PR target/114576 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -maes -mno-avx" } */ +/* { dg-final { scan-assembler-times "\taesenc\t" 2 } } */ +/* { dg-final { scan-assembler-times "\taesdec\t" 2 } } */ +/* { dg-final { scan-assembler-times "\taesenclast\t" 2 } } */ +/* { dg-final { scan-assembler-times "\taesdeclast\t" 2 } } */ +/* { dg-final { scan-assembler-not "\tvaesenc" } } */ +/* { dg-final { scan-assembler-not "\tvaesdec" } } */ + +#include <immintrin.h> + +__m128i +f1 (__m128i x, __m128i y) +{ + return _mm_aesenc_si128 (x, y); +} + +__m128i +f2 (__m128i x, __m128i y) +{ + __m128i z = _mm_aesenc_si128 (x, y); + return z + x + y; +} + +__m128i +f3 (__m128i x, __m128i y) +{ + return _mm_aesdec_si128 (x, y); +} + +__m128i +f4 (__m128i x, __m128i y) +{ + __m128i z = _mm_aesdec_si128 (x, y); + return z + x + y; +} + +__m128i +f5 (__m128i x, __m128i y) +{ + return _mm_aesenclast_si128 (x, y); +} + +__m128i +f6 (__m128i x, __m128i y) +{ + __m128i z = _mm_aesenclast_si128 (x, y); + return z + x + y; +} + +__m128i +f7 (__m128i x, __m128i y) +{ + return _mm_aesdeclast_si128 (x, y); +} + +__m128i +f8 (__m128i x, __m128i y) +{ + __m128i z = _mm_aesdeclast_si128 (x, y); + return z + x + y; +} From dd78e6a3cbd8f7c678d90ca0d05787faeb2e9c9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Kvalsvik?= <j@lambda.is> Date: Tue, 9 Apr 2024 13:39:03 +0200 Subject: [PATCH 457/551] Guard function->cond_uids access [PR114601] PR114601 shows that it is possible to reach the condition_uid lookup without having also created the fn->cond_uids, through compiler-generated conditionals. Consider all lookups on non-existing maps misses, which they are from the perspective of the source code, to avoid the NULL access. PR gcov-profile/114601 gcc/ChangeLog: * tree-profile.cc (condition_uid): Guard fn->cond_uids access. gcc/testsuite/ChangeLog: * gcc.misc-tests/gcov-pr114601.c: New test. --- gcc/testsuite/gcc.misc-tests/gcov-pr114601.c | 11 +++++++++++ gcc/tree-profile.cc | 9 +++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-pr114601.c diff --git a/gcc/testsuite/gcc.misc-tests/gcov-pr114601.c b/gcc/testsuite/gcc.misc-tests/gcov-pr114601.c new file mode 100644 index 000000000000..72248c8fd253 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-pr114601.c @@ -0,0 +1,11 @@ +/* PR gcov-profile/114601 */ +/* { dg-do compile } */ +/* { dg-options "-fcondition-coverage -finstrument-functions-once" } */ + +/* -finstrument-functions-once inserts a hidden conditional expression into + this function which otherwise has none. This caused a crash on looking up + the condition as the cond->expr map is not created unless it necessary. */ +void +empty (void) +{ +} diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc index b85111624fed..b87c121790c9 100644 --- a/gcc/tree-profile.cc +++ b/gcc/tree-profile.cc @@ -359,12 +359,17 @@ condition_index (unsigned flag) min-max, etc., which leaves ghost identifiers in basic blocks that do not end with a conditional jump. They are not really meaningful for condition coverage anymore, but since coverage is unreliable under optimization anyway - this is not a big problem. */ + this is not a big problem. + + The cond_uids map in FN cannot be expected to exist. It will only be + created if it is needed, and a function may have gconds even though there + are none in source. This can be seen in PR gcov-profile/114601, when + -finstrument-functions-once is used and the function has no conditions. */ unsigned condition_uid (struct function *fn, basic_block b) { gimple *stmt = gsi_stmt (gsi_last_bb (b)); - if (!safe_is_a<gcond *> (stmt)) + if (!safe_is_a <gcond*> (stmt) || !fn->cond_uids) return 0; unsigned *v = fn->cond_uids->get (as_a <gcond*> (stmt)); From ce3c743d8cfbadc0aaa80267bc002fd05267ffac Mon Sep 17 00:00:00 2001 From: Sebastian Huber <sebastian.huber@embedded-brains.de> Date: Mon, 12 Feb 2024 14:53:21 +0100 Subject: [PATCH 458/551] RTEMS: Fix powerpc configuration gcc/ChangeLog: * config/rs6000/rtems.h (OS_MISSING_POWERPC64): Define. --- gcc/config/rs6000/rtems.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h index 5a27f02960fb..06f481fcd7b2 100644 --- a/gcc/config/rs6000/rtems.h +++ b/gcc/config/rs6000/rtems.h @@ -36,6 +36,10 @@ #endif #endif +/* RTEMS configured for the 32-bit multilibs doesn't support saving and + restoring 64-bit regs. */ +#define OS_MISSING_POWERPC64 !TARGET_64BIT + /* Copy and paste from linux64.h and freebsd64.h */ #undef TARGET_AIX #define TARGET_AIX TARGET_64BIT From 32fb04adae90a0ea68e64e8fc3cb04b613b2e9f3 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Tue, 9 Apr 2024 14:25:57 +0200 Subject: [PATCH 459/551] lto/114655 - -flto=4 at link time doesn't override -flto=auto at compile time The following adjusts -flto option processing in lto-wrapper to have link-time -flto override any compile time setting. PR lto/114655 * lto-wrapper.cc (merge_flto_options): Add force argument. (merge_and_complain): Do not force here. (run_gcc): But here to make the link-time -flto option override any compile-time one. --- gcc/lto-wrapper.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gcc/lto-wrapper.cc b/gcc/lto-wrapper.cc index 610594cdc2ba..02579951569d 100644 --- a/gcc/lto-wrapper.cc +++ b/gcc/lto-wrapper.cc @@ -218,15 +218,18 @@ find_option (vec<cl_decoded_option> &options, cl_decoded_option *option) return find_option (options, option->opt_index); } -/* Merge -flto FOPTION into vector of DECODED_OPTIONS. */ +/* Merge -flto FOPTION into vector of DECODED_OPTIONS. If FORCE is true + then FOPTION overrides previous settings. */ static void merge_flto_options (vec<cl_decoded_option> &decoded_options, - cl_decoded_option *foption) + cl_decoded_option *foption, bool force) { int existing_opt = find_option (decoded_options, foption); if (existing_opt == -1) decoded_options.safe_push (*foption); + else if (force) + decoded_options[existing_opt].arg = foption->arg; else { if (strcmp (foption->arg, decoded_options[existing_opt].arg) != 0) @@ -493,7 +496,7 @@ merge_and_complain (vec<cl_decoded_option> &decoded_options, break; case OPT_flto_: - merge_flto_options (decoded_options, foption); + merge_flto_options (decoded_options, foption, false); break; } } @@ -1550,8 +1553,8 @@ run_gcc (unsigned argc, char *argv[]) break; case OPT_flto_: - /* Merge linker -flto= option with what we have in IL files. */ - merge_flto_options (fdecoded_options, option); + /* Override IL file settings with a linker -flto= option. */ + merge_flto_options (fdecoded_options, option, true); if (strcmp (option->arg, "jobserver") == 0) jobserver_requested = true; break; From 88aea122a7ee639230bf17a9eda4bf8a5eb7e282 Mon Sep 17 00:00:00 2001 From: Paul Thomas <pault@gcc.gnu.org> Date: Tue, 9 Apr 2024 15:23:46 +0100 Subject: [PATCH 460/551] Fortran: Fix ICE in gfc_trans_pointer_assignment [PR113956] 2024-04-09 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/113956 * trans-expr.cc (gfc_trans_pointer_assignment): Remove assert causing the ICE since it was unnecesary. gcc/testsuite/ PR fortran/113956 * gfortran.dg/pr113956.f90: New test. --- gcc/fortran/trans-expr.cc | 9 +++------ gcc/testsuite/gfortran.dg/pr113956.f90 | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr113956.f90 diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index f4c4724e1c3e..605434f4ddb7 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -10550,12 +10550,9 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2) { gfc_symbol *psym = expr1->symtree->n.sym; tmp = NULL_TREE; - if (psym->ts.type == BT_CHARACTER) - { - gcc_assert (psym->ts.u.cl->backend_decl - && VAR_P (psym->ts.u.cl->backend_decl)); - tmp = psym->ts.u.cl->backend_decl; - } + if (psym->ts.type == BT_CHARACTER + && psym->ts.u.cl->backend_decl) + tmp = psym->ts.u.cl->backend_decl; else if (expr1->ts.u.cl->backend_decl && VAR_P (expr1->ts.u.cl->backend_decl)) tmp = expr1->ts.u.cl->backend_decl; diff --git a/gcc/testsuite/gfortran.dg/pr113956.f90 b/gcc/testsuite/gfortran.dg/pr113956.f90 new file mode 100644 index 000000000000..229e891f847b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr113956.f90 @@ -0,0 +1,21 @@ +! { dg-do run } +! Test the fix for PR113956 +! Contributed by David Binderman <dcb314@hotmail.com> +module m +contains + subroutine test_array_char(p, x) + character(*), target :: x(:) + character(:), pointer :: p(:) + p => x ! ICE + end subroutine +end module + + use m + character(:), allocatable, target :: chr(:) + character(:), pointer :: p(:) + chr = ["ab","cd"] + call test_array_char (p, chr) + if (loc (chr) .ne. loc (p)) stop 1 + if (len (p) .ne. 2) stop 2 + if (any (p .ne. chr)) stop 3 +end From de82b0cf981e49a0bda957c0ac31146b17407e23 Mon Sep 17 00:00:00 2001 From: Paul Thomas <pault@gcc.gnu.org> Date: Tue, 9 Apr 2024 15:27:28 +0100 Subject: [PATCH 461/551] Fortran: Fix ICE in trans-stmt.cc(gfc_trans_call) [PR114535] 2024-04-09 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/114535 * resolve.cc (resolve_symbol): Remove last chunk that checked for finalization of unreferenced symbols. gcc/testsuite/ PR fortran/114535 * gfortran.dg/pr114535d.f90: New test. * gfortran.dg/pr114535iv.f90: Additional source. --- gcc/fortran/resolve.cc | 9 ----- gcc/testsuite/gfortran.dg/pr114535d.f90 | 42 ++++++++++++++++++++++++ gcc/testsuite/gfortran.dg/pr114535iv.f90 | 18 ++++++++++ 3 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr114535d.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr114535iv.f90 diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 43315a6a550e..4cbf71861195 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -17069,15 +17069,6 @@ resolve_symbol (gfc_symbol *sym) if (sym->param_list) resolve_pdt (sym); - - if (!sym->attr.referenced - && (sym->ts.type == BT_CLASS || sym->ts.type == BT_DERIVED)) - { - gfc_expr *final_expr = gfc_lval_expr_from_sym (sym); - if (gfc_is_finalizable (final_expr->ts.u.derived, NULL)) - gfc_set_sym_referenced (sym); - gfc_free_expr (final_expr); - } } diff --git a/gcc/testsuite/gfortran.dg/pr114535d.f90 b/gcc/testsuite/gfortran.dg/pr114535d.f90 new file mode 100644 index 000000000000..7ce178a1e303 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr114535d.f90 @@ -0,0 +1,42 @@ +! { dg-do compile } +! { dg-compile-aux-modules "pr114535iv.f90" } +! Contributed by Andrew Benson <abensonca@gcc.gnu.org> +! +module d + implicit none +contains + function en() result(dd) + use :: iv + implicit none + type(vs) :: dd + dd%i = 1 + end function en +end module d + +! Delete line 1 and all brands complain that 'vs' is an undefined type. +! Delete lines 1 and line 2 recreates the original problem. +module ni + implicit none +contains + subroutine iss1() +! use :: iv ! line 1 + use :: d + implicit none +! type(vs) :: ans; ans = en(); ! line 2 + end subroutine iss1 + subroutine iss2() + use :: d + implicit none + end subroutine iss2 +end module ni ! Used to give an ICE: in gfc_trans_call, at fortran/trans-stmt.cc:400 + + use ni + use iv + type(vs) :: x + call iss1() + call iss1() + if ((ctr .eq. 0) .or. (ctr .ne. 6)) stop 1 ! Depends whether lines 1 & 2 are present + call iss2() + x = vs(42) + if ((ctr .eq. 1) .or. (ctr .ne. 7)) stop 2 ! Make sure destructor available here +end diff --git a/gcc/testsuite/gfortran.dg/pr114535iv.f90 b/gcc/testsuite/gfortran.dg/pr114535iv.f90 new file mode 100644 index 000000000000..be629991023e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr114535iv.f90 @@ -0,0 +1,18 @@ +! Compiled with pr114535d.f90 +! Contributed by Andrew Benson <abensonca@gcc.gnu.org> +! +module iv + type, public :: vs + integer :: i + contains + final :: destructor + end type vs + integer :: ctr = 0 +contains + impure elemental subroutine destructor(s) + type(vs), intent(inout) :: s + s%i = 0 + ctr = ctr + 1 + end subroutine destructor +end module iv + From 685d822e524cc8b2726ad6c44c2ccaabe55a198c Mon Sep 17 00:00:00 2001 From: Richard Ball <richard.ball@arm.com> Date: Tue, 9 Apr 2024 16:31:35 +0100 Subject: [PATCH 462/551] aarch64: Fix ACLE SME streaming mode error in neon-sve-bridge When using LTO, handling the pragma for sme before the pragma for the neon-sve-bridge caused the following error on svset_neonq, in the neon-sve-bridge.c test. error: ACLE function '0' can only be called when SME streaming mode is enabled. This has been resolved by changing the pragma handlers to accept two modes. One where they add functions normally and a second in which registered_functions is filled with a placeholder value. By using this, the ordering of the functions can be maintained. gcc/ChangeLog: * config/aarch64/aarch64-c.cc (aarch64_pragma_aarch64): Add functions_nulls parameter to pragma_handlers. * config/aarch64/aarch64-protos.h: Likewise. * config/aarch64/aarch64-sve-builtins.h (enum handle_pragma_index): Add enum to count number of pragmas to be handled. * config/aarch64/aarch64-sve-builtins.cc (GTY): Add global variable for initial indexes and change overload_names to an array. (function_builder::function_builder): Add pragma handler information. (function_builder::add_function): Add code for overwriting previous registered_functions entries. (add_unique_function): Use an array to register overload_names for both pragma handler modes. (add_overloaded_function): Likewise. (init_builtins): Add functions_nulls parameter to pragma_handlers. (handle_arm_sve_h): Initialize pragma handler information. (handle_arm_neon_sve_bridge_h): Likewise. (handle_arm_sme_h): Likewise. --- gcc/config/aarch64/aarch64-c.cc | 6 +- gcc/config/aarch64/aarch64-protos.h | 6 +- gcc/config/aarch64/aarch64-sve-builtins.cc | 88 +++++++++++++--------- gcc/config/aarch64/aarch64-sve-builtins.h | 17 ++++- 4 files changed, 75 insertions(+), 42 deletions(-) diff --git a/gcc/config/aarch64/aarch64-c.cc b/gcc/config/aarch64/aarch64-c.cc index b5a6917d06db..fe1a20e4e546 100644 --- a/gcc/config/aarch64/aarch64-c.cc +++ b/gcc/config/aarch64/aarch64-c.cc @@ -344,15 +344,15 @@ aarch64_pragma_aarch64 (cpp_reader *) const char *name = TREE_STRING_POINTER (x); if (strcmp (name, "arm_sve.h") == 0) - aarch64_sve::handle_arm_sve_h (); + aarch64_sve::handle_arm_sve_h (false); else if (strcmp (name, "arm_sme.h") == 0) - aarch64_sve::handle_arm_sme_h (); + aarch64_sve::handle_arm_sme_h (false); else if (strcmp (name, "arm_neon.h") == 0) handle_arm_neon_h (); else if (strcmp (name, "arm_acle.h") == 0) handle_arm_acle_h (); else if (strcmp (name, "arm_neon_sve_bridge.h") == 0) - aarch64_sve::handle_arm_neon_sve_bridge_h (); + aarch64_sve::handle_arm_neon_sve_bridge_h (false); else error ("unknown %<#pragma GCC aarch64%> option %qs", name); } diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index bd719b992a54..42639e9efcf1 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -1014,9 +1014,9 @@ bool aarch64_general_check_builtin_call (location_t, vec<location_t>, namespace aarch64_sve { void init_builtins (); - void handle_arm_sve_h (); - void handle_arm_sme_h (); - void handle_arm_neon_sve_bridge_h (); + void handle_arm_sve_h (bool); + void handle_arm_sme_h (bool); + void handle_arm_neon_sve_bridge_h (bool); tree builtin_decl (unsigned, bool); bool builtin_type_p (const_tree); bool builtin_type_p (const_tree, unsigned int *, unsigned int *); diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index e124d1f90a58..f3983a123e35 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -933,14 +933,19 @@ tree acle_svprfop; /* The list of all registered function decls, indexed by code. */ static GTY(()) vec<registered_function *, va_gc> *registered_functions; +/* Stores the starting function index for each pragma handler. */ +static unsigned int initial_indexes[NUM_PRAGMA_HANDLERS]; + /* All registered function decls, hashed on the function_instance that they implement. This is used for looking up implementations of overloaded functions. */ static hash_table<registered_function_hasher> *function_table; -/* Maps all overloaded function names that we've registered so far to - their associated function_instances. The map keys are IDENTIFIER_NODEs. */ -static GTY(()) hash_map<tree, registered_function *> *overload_names; +/* Index 0 maps all overloaded function names that we've registered so far to + their associated function_instances. Index 1 does the same for functions + that we've skipped over without registering. In both cases, the map keys + are IDENTIFIER_NODEs. */ +static GTY(()) hash_map<tree, registered_function *> *overload_names[2]; /* True if we've already complained about attempts to use functions when the required extension is disabled. */ @@ -1348,10 +1353,21 @@ sve_switcher::~sve_switcher () maximum_field_alignment = m_old_maximum_field_alignment; } -function_builder::function_builder () +function_builder::function_builder (handle_pragma_index pragma_index, + bool function_nulls) { m_overload_type = build_function_type (void_type_node, void_list_node); m_direct_overloads = lang_GNU_CXX (); + + if (initial_indexes[pragma_index] == 0) + { + unsigned int index = vec_safe_length (registered_functions); + initial_indexes[pragma_index] = index; + } + + m_function_index = initial_indexes[pragma_index]; + m_function_nulls = function_nulls; + gcc_obstack_init (&m_string_obstack); } @@ -1515,9 +1531,8 @@ function_builder::add_function (const function_instance &instance, bool overloaded_p, bool placeholder_p) { - unsigned int code = vec_safe_length (registered_functions); - code = (code << AARCH64_BUILTIN_SHIFT) | AARCH64_BUILTIN_SVE; - + unsigned int length = vec_safe_length (registered_functions); + unsigned int code = (m_function_index << AARCH64_BUILTIN_SHIFT) | AARCH64_BUILTIN_SVE; /* We need to be able to generate placeholders to enusre that we have a consistent numbering scheme for function codes between the C and C++ frontends, so that everything ties up in LTO. @@ -1531,7 +1546,7 @@ function_builder::add_function (const function_instance &instance, nodes and remove the target hook. For now, however, we need to appease the validation and return a non-NULL, non-error_mark_node node, so we arbitrarily choose integer_zero_node. */ - tree decl = placeholder_p + tree decl = placeholder_p || m_function_nulls ? integer_zero_node : simulate_builtin_function_decl (input_location, name, fntype, code, NULL, attrs); @@ -1541,7 +1556,11 @@ function_builder::add_function (const function_instance &instance, rfn.decl = decl; rfn.required_extensions = required_extensions; rfn.overloaded_p = overloaded_p; - vec_safe_push (registered_functions, &rfn); + if (m_function_index >= length) + vec_safe_push (registered_functions, &rfn); + else + (*registered_functions)[m_function_index] = &rfn; + m_function_index++; return rfn; } @@ -1570,11 +1589,14 @@ add_unique_function (const function_instance &instance, required_extensions, false, false); /* Enter the function into the hash table. */ - hashval_t hash = instance.hash (); - registered_function **rfn_slot - = function_table->find_slot_with_hash (instance, hash, INSERT); - gcc_assert (!*rfn_slot); - *rfn_slot = &rfn; + if (!m_function_nulls) + { + hashval_t hash = instance.hash (); + registered_function **rfn_slot + = function_table->find_slot_with_hash (instance, hash, INSERT); + gcc_assert (!*rfn_slot); + *rfn_slot = &rfn; + } /* Also add the function under its overloaded alias, if we want a separate decl for each instance of an overloaded function. */ @@ -1605,12 +1627,13 @@ function_builder:: add_overloaded_function (const function_instance &instance, aarch64_feature_flags required_extensions) { - if (!overload_names) - overload_names = hash_map<tree, registered_function *>::create_ggc (); + auto &name_map = overload_names[m_function_nulls]; + if (!name_map) + name_map = hash_map<tree, registered_function *>::create_ggc (); char *name = get_name (instance, true); tree id = get_identifier (name); - if (registered_function **map_value = overload_names->get (id)) + if (registered_function **map_value = name_map->get (id)) gcc_assert ((*map_value)->instance == instance && ((*map_value)->required_extensions & ~required_extensions) == 0); @@ -1619,7 +1642,7 @@ add_overloaded_function (const function_instance &instance, registered_function &rfn = add_function (instance, name, m_overload_type, NULL_TREE, required_extensions, true, m_direct_overloads); - overload_names->put (id, &rfn); + name_map->put (id, &rfn); } obstack_free (&m_string_obstack, name); } @@ -4526,9 +4549,9 @@ init_builtins () register_builtin_types (); if (in_lto_p) { - handle_arm_sve_h (); - handle_arm_sme_h (); - handle_arm_neon_sve_bridge_h (); + handle_arm_sve_h (false); + handle_arm_sme_h (false); + handle_arm_neon_sve_bridge_h (false); } } @@ -4630,7 +4653,7 @@ register_svprfop () /* Implement #pragma GCC aarch64 "arm_sve.h". */ void -handle_arm_sve_h () +handle_arm_sve_h (bool function_nulls_p) { if (function_table) { @@ -4657,17 +4680,20 @@ handle_arm_sve_h () /* Define the functions. */ function_table = new hash_table<registered_function_hasher> (1023); - function_builder builder; + function_builder builder (arm_sve_handle, function_nulls_p); for (unsigned int i = 0; i < ARRAY_SIZE (function_groups); ++i) builder.register_function_group (function_groups[i]); } /* Implement #pragma GCC aarch64 "arm_neon_sve_bridge.h". */ void -handle_arm_neon_sve_bridge_h () +handle_arm_neon_sve_bridge_h (bool function_nulls_p) { + if (initial_indexes[arm_sme_handle] == 0) + handle_arm_sme_h (true); + /* Define the functions. */ - function_builder builder; + function_builder builder (arm_neon_sve_handle, function_nulls_p); for (unsigned int i = 0; i < ARRAY_SIZE (neon_sve_function_groups); ++i) builder.register_function_group (neon_sve_function_groups[i]); } @@ -4684,7 +4710,7 @@ builtin_decl (unsigned int code, bool) /* Implement #pragma GCC aarch64 "arm_sme.h". */ void -handle_arm_sme_h () +handle_arm_sme_h (bool function_nulls_p) { if (!function_table) { @@ -4693,17 +4719,9 @@ handle_arm_sme_h () return; } - static bool initialized_p; - if (initialized_p) - { - error ("duplicate definition of %qs", "arm_sme.h"); - return; - } - initialized_p = true; - sme_switcher sme; - function_builder builder; + function_builder builder (arm_sme_handle, function_nulls_p); for (unsigned int i = 0; i < ARRAY_SIZE (sme_function_groups); ++i) builder.register_function_group (sme_function_groups[i]); } diff --git a/gcc/config/aarch64/aarch64-sve-builtins.h b/gcc/config/aarch64/aarch64-sve-builtins.h index 053006776a98..9cc07d5fa3de 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.h +++ b/gcc/config/aarch64/aarch64-sve-builtins.h @@ -123,6 +123,15 @@ enum units_index UNITS_vectors }; +/* Enumerates the pragma handlers. */ +enum handle_pragma_index +{ + arm_sve_handle, + arm_sme_handle, + arm_neon_sve_handle, + NUM_PRAGMA_HANDLERS +}; + /* Describes the various uses of a governing predicate. */ enum predication_index { @@ -419,7 +428,7 @@ class registered_function; class function_builder { public: - function_builder (); + function_builder (handle_pragma_index, bool); ~function_builder (); void add_unique_function (const function_instance &, tree, @@ -453,6 +462,12 @@ class function_builder /* Used for building up function names. */ obstack m_string_obstack; + + /* Used to store the index for the current function. */ + unsigned int m_function_index; + + /* Stores the mode of the current pragma handler. */ + bool m_function_nulls; }; /* A base class for handling calls to built-in functions. */ From 8075477f81ae8d0abf64b80dfbd179151f91b417 Mon Sep 17 00:00:00 2001 From: David Faust <david.faust@oracle.com> Date: Mon, 8 Apr 2024 11:10:41 -0700 Subject: [PATCH 463/551] btf: emit symbol refs in DATASEC entries only for BPF [PR114608] The behavior introduced in fa60ac54964 btf: Emit labels in DATASEC bts_offset entries. is only fully correct when compiling for the BPF target with BPF CO-RE enabled. In other cases, depending on optimizations, it can result in an incorrect symbol reference in the entry bts_offset field for a symbol which may not be emitted at all, causing link-time undefined symbol reference errors like in PR114608. The offending bts_offset field of BTF_KIND_DATASEC entries is in reality only currently useful to consumers of BTF information for BPF programs anyway. Correct the regression by only emitting symbol references in these entries when compiling for the BPF target. For other targets, the behavior returns to that prior to fa60ac54964. The underlying cause is related to PR 113566 "btf: incorrect BTF_KIND_DATASEC entries for variables which are optimized out." A complete fix for 113566 is more involved and unsuitable for stage 4, but will be addressed in the near future. gcc/ PR debug/114608 * btfout.cc (btf_asm_datasec_entry): Only emit a symbol reference when generating BTF for BPF CO-RE target. gcc/testsuite/ PR debug/114608 * gcc.dg/debug/btf/btf-datasec-1.c: Check bts_offset symbol references only for BPF target. * gcc.dg/debug/btf/btf-datasec-2.c: Likewise. * gcc.dg/debug/btf/btf-pr106773.c: Likewise. --- gcc/btfout.cc | 2 +- gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c | 10 ++++++---- gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c | 7 ++++--- gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c | 3 ++- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/gcc/btfout.cc b/gcc/btfout.cc index 2e2b3524e835..4a8ec4d1ff04 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -1045,7 +1045,7 @@ btf_asm_datasec_entry (ctf_container_ref ctfc, struct btf_var_secinfo info) { const char *symbol_name = get_name_for_datasec_entry (ctfc, info.type); btf_asm_type_ref ("bts_type", ctfc, info.type); - if (symbol_name == NULL) + if (!btf_with_core_debuginfo_p () || symbol_name == NULL) dw2_asm_output_data (4, info.offset, "bts_offset"); else dw2_asm_output_offset (4, symbol_name, NULL, "bts_offset"); diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c index c8ebe5d07ca0..15b762592182 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-1.c @@ -19,10 +19,12 @@ /* { dg-final { scan-assembler-times "0xf000003\[\t \]+\[^\n\]*btt_info" 2 } } */ /* { dg-final { scan-assembler-times "0xf000001\[\t \]+\[^\n\]*btt_info" 1 } } */ -/* The offset entry for each variable in a DATSEC should contain a label. */ -/* { dg-final { scan-assembler-times "(?:(?:\\.4byte|\\.long|data4\\.ua|\\.ualong|\\.uaword|\\.dword|long|dc\\.l|\\.word)\[\t \]|\\.vbyte\t4,\[\t \]?)_?\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 } } */ -/* { dg-final { scan-assembler-times "my_cstruct\[\t \]+\[^\n\]*bts_offset" 1 } } */ -/* { dg-final { scan-assembler-times "bigarr\[\t \]+\[^\n\]*bts_offset" 1 } } */ +/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 7 { target { ! bpf-*-* } } } } */ + +/* For BPF target the offset entry for each variable in a DATSEC should contain a label. */ +/* { dg-final { scan-assembler-times ".4byte\[\t \]\[a-e\]\[\t \]+\[^\n\]*bts_offset" 5 { target bpf-*-* } } } */ +/* { dg-final { scan-assembler-times "my_cstruct\[\t \]+\[^\n\]*bts_offset" 1 { target bpf-*-* } } } */ +/* { dg-final { scan-assembler-times "bigarr\[\t \]+\[^\n\]*bts_offset" 1 { target bpf-*-* } } } */ /* Check that strings for each DATASEC have been added to the BTF string table. */ /* { dg-final { scan-assembler-times "ascii \".data.0\"\[\t \]+\[^\n\]*btf_aux_string" 1 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c index 857d830e4465..a89a239a504f 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-2.c @@ -10,9 +10,10 @@ /* { dg-final { scan-assembler-times " BTF_KIND_DATASEC '.bar_sec'\[\\r\\n\]+\[^\\r\\n\]*0xf000002\[\t \]+\[^\n\]*btt_info" 1 } } */ /* Function entries should have offset with a label and size of 0 at compile time. */ -/* { dg-final { scan-assembler-times "chacha\[\t \]+\[^\n\]*bts_offset" 1 } } */ -/* { dg-final { scan-assembler-times "bar\[\t \]+\[^\n\]*bts_offset" 1 } } */ -/* { dg-final { scan-assembler-times "foo\[\t \]+\[^\n\]*bts_offset" 1 } } */ +/* { dg-final { scan-assembler-times "chacha\[\t \]+\[^\n\]*bts_offset" 1 { target { bpf-*-* } }} } */ +/* { dg-final { scan-assembler-times "bar\[\t \]+\[^\n\]*bts_offset" 1 { target { bpf-*-* } } } } */ +/* { dg-final { scan-assembler-times "foo\[\t \]+\[^\n\]*bts_offset" 1 { target { bpf-*-* } } } } */ +/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 3 { target { ! bpf-*-* } } } } */ /* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_size" 3 } } */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c index c06220eb5204..4e3da27d20d3 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-pr106773.c @@ -11,7 +11,8 @@ /* { dg-final { scan-assembler-times "ascii \"foo.0\"\[\t \]+\[^\n\]*btf_string" 1 } } */ -/* { dg-final { scan-assembler-times "foo\[\t \]+\[^\n\]*bts_offset" 1 } } */ +/* { dg-final { scan-assembler-times "foo\[\t \]+\[^\n\]*bts_offset" 1 { target { bpf-*-* } } } } */ +/* { dg-final { scan-assembler-times "0\[\t \]+\[^\n\]*bts_offset" 1 { target { ! bpf-*-* } } } } */ /* { dg-final { scan-assembler-times "1\[\t \]+\[^\n\]*bts_size" 1 } } */ extern const void foo __attribute__((weak)) __attribute__((section (".ksyms"))); From 1f719aa7c0d35b47f3d15a54f074718b78e92bb0 Mon Sep 17 00:00:00 2001 From: Juergen Christ <jchrist@linux.ibm.com> Date: Mon, 1 Apr 2024 13:34:37 +0200 Subject: [PATCH 464/551] s390x: Optimize vector permute with constant indexes Loop vectorizer can generate vector permutes with constant indexes where all indexes are equal. Optimize this case to use vector replicate instead of vector permute. gcc/ChangeLog: * config/s390/s390.cc (expand_perm_as_replicate): Implement. (vectorize_vec_perm_const_1): Call new function. * config/s390/vx-builtins.md (vec_splat<mode>): Change to... (@vec_splat<mode>): ...this. gcc/testsuite/ChangeLog: * gcc.target/s390/vector/vec-expand-replicate.c: New test. Signed-off-by: Juergen Christ <jchrist@linux.ibm.com> --- gcc/config/s390/s390.cc | 33 ++++++++++ gcc/config/s390/vx-builtins.md | 2 +- .../s390/vector/vec-expand-replicate.c | 60 +++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-expand-replicate.c diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc index 3ee7ae7b8d47..bf46eab2d633 100644 --- a/gcc/config/s390/s390.cc +++ b/gcc/config/s390/s390.cc @@ -17933,6 +17933,36 @@ expand_perm_as_a_vlbr_vstbr_candidate (const struct expand_vec_perm_d &d) return false; } +static bool +expand_perm_as_replicate (const struct expand_vec_perm_d &d) +{ + unsigned char i; + unsigned char elem; + rtx base = d.op0; + rtx insn; + /* Needed to silence maybe-uninitialized warning. */ + gcc_assert (d.nelt > 0); + elem = d.perm[0]; + for (i = 1; i < d.nelt; ++i) + if (d.perm[i] != elem) + return false; + if (!d.testing_p) + { + if (elem >= d.nelt) + { + base = d.op1; + elem -= d.nelt; + } + insn = maybe_gen_vec_splat (d.vmode, d.target, base, GEN_INT (elem)); + if (insn == NULL_RTX) + return false; + emit_insn (insn); + return true; + } + else + return maybe_code_for_vec_splat (d.vmode) != CODE_FOR_nothing; +} + /* Try to find the best sequence for the vector permute operation described by D. Return true if the operation could be expanded. */ @@ -17951,6 +17981,9 @@ vectorize_vec_perm_const_1 (const struct expand_vec_perm_d &d) if (expand_perm_as_a_vlbr_vstbr_candidate (d)) return true; + if (expand_perm_as_replicate (d)) + return true; + return false; } diff --git a/gcc/config/s390/vx-builtins.md b/gcc/config/s390/vx-builtins.md index 432d81a719fc..93c0d408a43e 100644 --- a/gcc/config/s390/vx-builtins.md +++ b/gcc/config/s390/vx-builtins.md @@ -424,7 +424,7 @@ ; Replicate from vector element -(define_expand "vec_splat<mode>" +(define_expand "@vec_splat<mode>" [(set (match_operand:V_HW 0 "register_operand" "") (vec_duplicate:V_HW (vec_select:<non_vec> (match_operand:V_HW 1 "register_operand" "") diff --git a/gcc/testsuite/gcc.target/s390/vector/vec-expand-replicate.c b/gcc/testsuite/gcc.target/s390/vector/vec-expand-replicate.c new file mode 100644 index 000000000000..872b1c9321cd --- /dev/null +++ b/gcc/testsuite/gcc.target/s390/vector/vec-expand-replicate.c @@ -0,0 +1,60 @@ +/* Check that the vectorize_vec_perm_const expander correctly deals with + replication. Extracted from spec "nab". */ + +/* { dg-do compile } */ +/* { dg-options "-O3 -mzarch -march=z13 -fvect-cost-model=unlimited" } */ + +typedef double POINT_T[3]; +typedef double MATRIX_T[][4]; +typedef struct { + POINT_T a_pos; +} ATOM_T; +typedef struct { + ATOM_T *r_atoms; +} RESIDUE_T; +typedef struct strand_t { + RESIDUE_T *s_residues; +} STRAND_T; +typedef struct strand_t MOLECULE_T; +double xfm_xyz_oxyz4[4]; +MOLECULE_T add_he2o3transformmol_mol, add_he2o3transformmol_sp; +RESIDUE_T add_he2o3transformmol_res; +int add_he2o3transformmol_r, add_he2o3transformmol_a, add_he2o3transformmol_i; +ATOM_T *add_he2o3transformmol_ap; +POINT_T add_he2o3transformmol_xyz, add_he2o3transformmol_nxyz; +static void xfm_xyz(POINT_T oxyz, MATRIX_T mat, POINT_T nxyz) { + int i, j; + double nxyz4[4]; + for (i = 0; i < 3; i++) + xfm_xyz_oxyz4[i] = oxyz[i]; + xfm_xyz_oxyz4[3] = 1.0; + for (i = 0; i < 4; i++) { + nxyz4[i] = 0.0; + for (j = 0; j < 4; j++) + nxyz4[i] += xfm_xyz_oxyz4[j] * mat[j][i]; + } + for (i = 0; i < 3; i++) + nxyz[i] = nxyz4[i]; +} +void add_he2o3transformmol(MATRIX_T mat, int n) { + for (add_he2o3transformmol_sp = add_he2o3transformmol_mol;;) + for (add_he2o3transformmol_r = 0;;) { + add_he2o3transformmol_res = + add_he2o3transformmol_sp.s_residues[add_he2o3transformmol_r]; + for (add_he2o3transformmol_a = 0; add_he2o3transformmol_a < n; add_he2o3transformmol_a++) { + add_he2o3transformmol_ap = + &add_he2o3transformmol_res.r_atoms[add_he2o3transformmol_a]; + for (add_he2o3transformmol_i = 0; add_he2o3transformmol_i < 3; + add_he2o3transformmol_i++) + add_he2o3transformmol_xyz[add_he2o3transformmol_i] = + add_he2o3transformmol_ap->a_pos[add_he2o3transformmol_i]; + xfm_xyz(add_he2o3transformmol_xyz, mat, add_he2o3transformmol_nxyz); + for (add_he2o3transformmol_i = 0; add_he2o3transformmol_i < 3; + add_he2o3transformmol_i++) + add_he2o3transformmol_ap->a_pos[add_he2o3transformmol_i] = + add_he2o3transformmol_nxyz[add_he2o3transformmol_i]; + } + } +} + +/* { dg-final { scan-assembler-not "vperm" } } */ From 639215c5eb6c56ba3830cd868d1d3ddd700b4c90 Mon Sep 17 00:00:00 2001 From: David Faust <david.faust@oracle.com> Date: Mon, 8 Apr 2024 13:33:48 -0700 Subject: [PATCH 465/551] btf: improve btf-datasec-3.c test [PR114642] This test failed on powerpc --target_board=unix'{-m32}' because two variables were not placed in sections where the test silently (and incorrectly) assumed they would be. The important thing for the test is only that BTF_KIND_DATASEC entries are NOT generated for the extern variable declarations without an explicit section attribute. Make the test more robust by placing the non-extern variables in explicit sections, and invert the checks to more accurately verify what we care about in this test. gcc/testsuite/ PR testsuite/114642 * gcc.dg/debug/btf/btf-datasec-3.c: Make test more robust on different architectures. --- gcc/testsuite/gcc.dg/debug/btf/btf-datasec-3.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-3.c b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-3.c index 297340cabfa4..6b127aa14da0 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-3.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-datasec-3.c @@ -7,22 +7,22 @@ extern int VERSION __attribute__((section (".version"))); -extern int test_bss1; -extern int test_data1; +extern int ext1; +extern int ext2; -int test_bss2; -int test_data2 = 2; +int var1 __attribute__((section (".sec_a"))); +int var2 __attribute__((section (".sec_b"))) = 2; int foo (void) { - test_bss2 = VERSION; - return test_bss1 + test_data1 + test_data2; + ext2 = VERSION; + return ext1 + var1 + var2; } /* There should be 3 DATASEC entries total. Of the extern decls, only VERSION has a known section; entries are not created for the other two. */ /* { dg-final { scan-assembler-times "bts_type" 3 } } */ -/* { dg-final { scan-assembler-times "bts_type: \\(BTF_KIND_VAR 'test_data2'\\)" 1 } } */ -/* { dg-final { scan-assembler-times "bts_type: \\(BTF_KIND_VAR 'test_bss2'\\)" 1 } } */ /* { dg-final { scan-assembler-times "bts_type: \\(BTF_KIND_VAR 'VERSION'\\)" 1 } } */ +/* { dg-final { scan-assembler-not "bts_type: \\(BTF_KIND_VAR 'ext1'\\)" } } */ +/* { dg-final { scan-assembler-not "bts_type: \\(BTF_KIND_VAR 'ext2'\\)" } } */ From 92b38ec84f2990d217f036dc6c5a32cde5ecfb93 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Mon, 8 Apr 2024 17:37:32 +0100 Subject: [PATCH 466/551] libstdc++: Fix build for targets without FP std::from_chars [PR114633] If the faster std::from_chars is not supported for floating-point types then just extract the value from the stream using operator>>. This fixes a build error for targets where __cpp_lib_to_chars is not defined. libstdc++-v3/ChangeLog: PR libstdc++/114633 * include/bits/chrono_io.h (_Parser::operator()) <'S'>: Use stream extraction if std::from_chars is not available. --- libstdc++-v3/include/bits/chrono_io.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h index b9eb3d2be531..3b34992b42a0 100644 --- a/libstdc++-v3/include/bits/chrono_io.h +++ b/libstdc++-v3/include/bits/chrono_io.h @@ -3685,6 +3685,7 @@ namespace __detail if (!__is_failed(__err)) [[likely]] { long double __val{}; +#if __cpp_lib_to_chars string __str = std::move(__buf).str(); auto __first = __str.data(); auto __last = __first + __str.size(); @@ -3694,6 +3695,9 @@ namespace __detail if ((bool)ec || ptr != __last) [[unlikely]] __err |= ios_base::failbit; else +#else + if (__buf >> __val) +#endif { duration<long double> __fs(__val); if constexpr (__is_floating) From 0753ae158af42ca5f20567381805b27283c92b53 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Wed, 10 Apr 2024 00:16:50 +0000 Subject: [PATCH 467/551] Daily bump. --- gcc/ChangeLog | 192 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 9 ++ gcc/c/ChangeLog | 7 ++ gcc/cp/ChangeLog | 25 ++++++ gcc/fortran/ChangeLog | 12 +++ gcc/jit/ChangeLog | 5 ++ gcc/m2/ChangeLog | 12 +++ gcc/rust/ChangeLog | 4 + gcc/testsuite/ChangeLog | 84 ++++++++++++++++++ libgcc/ChangeLog | 7 ++ libquadmath/ChangeLog | 15 ++++ libstdc++-v3/ChangeLog | 6 ++ 13 files changed, 379 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b1f8edbd601e..ec107302a44f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,195 @@ +2024-04-09 Juergen Christ <jchrist@linux.ibm.com> + + * config/s390/s390.cc (expand_perm_as_replicate): Implement. + (vectorize_vec_perm_const_1): Call new function. + * config/s390/vx-builtins.md (vec_splat<mode>): Change to... + (@vec_splat<mode>): ...this. + +2024-04-09 David Faust <david.faust@oracle.com> + + PR debug/114608 + * btfout.cc (btf_asm_datasec_entry): Only emit a symbol reference when + generating BTF for BPF CO-RE target. + +2024-04-09 Richard Ball <richard.ball@arm.com> + + * config/aarch64/aarch64-c.cc (aarch64_pragma_aarch64): + Add functions_nulls parameter to pragma_handlers. + * config/aarch64/aarch64-protos.h: Likewise. + * config/aarch64/aarch64-sve-builtins.h + (enum handle_pragma_index): Add enum to count + number of pragmas to be handled. + * config/aarch64/aarch64-sve-builtins.cc + (GTY): Add global variable for initial indexes + and change overload_names to an array. + (function_builder::function_builder): + Add pragma handler information. + (function_builder::add_function): + Add code for overwriting previous + registered_functions entries. + (add_unique_function): + Use an array to register overload_names + for both pragma handler modes. + (add_overloaded_function): Likewise. + (init_builtins): + Add functions_nulls parameter to pragma_handlers. + (handle_arm_sve_h): + Initialize pragma handler information. + (handle_arm_neon_sve_bridge_h): Likewise. + (handle_arm_sme_h): Likewise. + +2024-04-09 Richard Biener <rguenther@suse.de> + + PR lto/114655 + * lto-wrapper.cc (merge_flto_options): Add force argument. + (merge_and_complain): Do not force here. + (run_gcc): But here to make the link-time -flto option override + any compile-time one. + +2024-04-09 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * config/rs6000/rtems.h (OS_MISSING_POWERPC64): Define. + +2024-04-09 Jørgen Kvalsvik <j@lambda.is> + + PR gcov-profile/114601 + * tree-profile.cc (condition_uid): Guard fn->cond_uids access. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + PR target/114576 + * config/i386/i386.md (isa): Remove aes, add vaes_avx512vl. + (enabled): Remove aes isa check, add vaes_avx512vl. + * config/i386/sse.md (aesenc, aesenclast, aesdec, aesdeclast): Use + jm instead of m for second alternative and emit {evex} prefix + for it if !TARGET_AES. Use noavx,avx,vaes_avx512vl isa attribute. + (vaesdec_<mode>, vaesdeclast_<mode>, vaesenc_<mode>, + vaesenclast_<mode>): Add second alternative with x instead of v + and jm instead of m. + +2024-04-09 Gaius Mulley <gaiusmod2@gmail.com> + + * doc/gm2.texi (Compiler options): Remove -fdebug-trace-quad. + Remove -fdebug-trace-api. + Add -fm2-debug-trace=. + +2024-04-09 Yang Yujie <yangyujie@loongson.cn> + + PR target/113233 + * config/loongarch/loongarch.cc (loongarch_reg_init): + Reinitialize the loongarch_regno_mode_ok cache. + (loongarch_option_override): Same. + (loongarch_save_restore_target_globals): Restore target globals. + (loongarch_set_current_function): Restore the target contexts + for functions. + (TARGET_SET_CURRENT_FUNCTION): Define. + * config/loongarch/loongarch.h (SWITCHABLE_TARGET): Enable + switchable target context. + * config/loongarch/loongarch-builtins.cc (loongarch_init_builtins): + Initialize all builtin functions at startup. + (loongarch_expand_builtin): Turn assertion of builtin availability + into a test. + +2024-04-09 Jørgen Kvalsvik <j@lambda.is> + + PR middle-end/114627 + * tree-profile.cc (instrument_decisions): Generate constant + at the start of loop. + +2024-04-09 Jørgen Kvalsvik <j@lambda.is> + + PR middle-end/114599 + * tree-inline.cc (copy_bb): Copy cond_uids into callee. + (prepend_lexical_block): Remove outdated comment. + (add_local_variables): Remove bad cond_uids copy. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + * expr.cc (convert_mode_scalar): Fix duplicated words in comment; + into into -> it into. + * function.h (function::cond_uids): Fix duplicated words in comment; + same same -> same. + * config/riscv/riscv-vector-costs.cc + (costs::adjust_vect_cost_per_loop): Fix duplicated words in comment; + model model -> model. + * config/riscv/riscv-vector-builtins-shapes.cc (build_base): Fix + duplicated words in comment; for for -> for. + * config/riscv/riscv-avlprop.cc (pass_avlprop::execute): Fix + duplicated words in comment; more more -> more. + * config/aarch64/driver-aarch64.cc (host_detect_local_cpu): Fix + duplicated words in comment; be be -> be. + * tree-profile.cc (masking_vectors): Fix duplicated words in comment; + has has -> has, the the -> the. + * value-range.cc (irange::set_range_from_bitmask): Fix duplicated + words in comment; the the -> the. + * gcov.cc (add_condition_counts): Fix duplicated words in comment; + to to -> to. + * vr-values.cc (get_scev_info): Fix duplicated words in comment; + the the -> to the. + * tree-vrp.cc (fully_replaceable): Fix duplicated words in comment; + by by -> by. + * mode-switching.cc (single_succ_confluence_n): Fix duplicated words + in comment; the the -> the. + * tree-ssa-phiopt.cc (value_replacement): Fix duplicated words in + comment; can can -> we can. + * gimple-range-phi.cc (phi_analyzer::process_phi): Fix duplicated words + in comment; it it -> it is. + * tree-ssa-sccvn.cc (visit_phi): Fix duplicated words in comment; + to to -> to. + * rtl-ssa/accesses.h (use_info::next_debug_insn_use): Fix duplicated + words in comment; if if -> if. + * doc/options.texi (InverseMask): Fix duplicated words; and and -> and. + Change take to takes. + * doc/invoke.texi (fanalyzer-undo-inlining): Fix duplicated words; + be be -> be. + (-minline-memops-threshold): Likewise. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114628 + * gimple-lower-bitint.cc (gimple_lower_bitint): Keep debug stmts + before returns_twice calls as is, don't push them into arg_stmts + vector/move to edges. + +2024-04-09 Sergey Bugaev <bugaevc@gmail.com> + + * config.gcc: Recognize aarch64*-*-gnu* targets. + * config/aarch64/aarch64-gnu.h: New file. + +2024-04-09 Sergey Bugaev <bugaevc@gmail.com> + + * config/i386/gnu.h: Move GNU/Hurd STARTFILE_SPEC from here... + * config/gnu.h: ...to here. + +2024-04-09 Richard Biener <rguenther@suse.de> + + PR middle-end/114604 + * gimple-range.cc (enable_ranger): Initialize the global + bitmap obstack. + (disable_ranger): Release it. + +2024-04-09 Sebastian Huber <sebastian.huber@embedded-brains.de> + + * config.gcc (aarch64-*-rtems*): Add target makefile fragment + t-aarch64-rtems. + * config/aarch64/t-aarch64-rtems: New file. + +2024-04-09 H.J. Lu <hjl.tools@gmail.com> + + PR target/114587 + * config/i386/i386-c.cc (ix86_target_macros_internal): Define + __APX_INLINE_ASM_USE_GPR32__ for -mapx-inline-asm-use-gpr32. + +2024-04-09 Kewen Lin <linkw@linux.ibm.com> + Andrew Pinski <quic_apinski@quicinc.com> + + PR target/88309 + * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_builtin): Fix + wrong align passed to function build_aligned_type. + * tree-ssa-loop-prefetch.cc (is_miss_rate_acceptable): Add an + assertion to ensure align_unit should be positive. + * tree.cc (build_qualified_type): Update function comments. + 2024-04-08 Uros Bizjak <ubizjak@gmail.com> PR rtl-optimization/112560 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 5c14c80a3420..017b58270a73 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240409 +20240410 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index d0f8c2512d42..abfb157660d1 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,12 @@ +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + * analyzer.opt (Wanalyzer-undefined-behavior-strtok): Fix duplicated + words; in in -> in. + * program-state.cc (sm_state_map::replay_call_summary): Fix duplicated + words in comment; to to -> to. + (program_state::replay_call_summary): Likewise. + * region-model.cc (region_model::replay_call_summary): Likewise. + 2024-04-05 David Malcolm <dmalcolm@redhat.com> PR analyzer/114588 diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 7d3f23625624..58ff5c9f6085 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,10 @@ +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + * c-decl.cc (previous_tag): Fix duplicated words in comment; the the + -> the. + (diagnose_mismatched_decls): Fix duplicated words in comment; + about about -> about. + 2024-04-05 Martin Uecker <uecker@tugraz.at> Revert: diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 55c0848f2552..537c6a23e62f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,28 @@ +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + PR c++/114580 + * semantics.cc (finish_if_stmt_cond): Call + maybe_warn_for_constant_evaluated with IF_STMT_CONSTEXPR_P (if_stmt) + as the second argument, rather than true/false depending on if + it is if constexpr with non-dependent constant expression with + bool type. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + * constexpr.cc (build_new_constexpr_heap_type): Fix duplicated words + in comment; is is -> is. + * cp-tree.def (CO_RETURN_EXPR): Fix duplicated words in comment; + for for -> for. + * parser.cc (fixup_blocks_walker): Fix duplicated words in comment; + is is -> is. + * semantics.cc (fixup_template_type): Fix duplicated words in comment; + for for -> for. + (finish_omp_for): Fix duplicated words in comment; the the -> the. + * pt.cc (more_specialized_fn): Fix duplicated words in comment; + think think -> think. + (type_targs_deducible_from): Fix duplicated words in comment; the the + -> the. + 2024-04-05 Marek Polacek <polacek@redhat.com> PR c++/111132 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 962499b8c275..d0bfcef2ad18 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,15 @@ +2024-04-09 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/114535 + * resolve.cc (resolve_symbol): Remove last chunk that checked + for finalization of unreferenced symbols. + +2024-04-09 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/113956 + * trans-expr.cc (gfc_trans_pointer_assignment): Remove assert + causing the ICE since it was unnecesary. + 2024-04-02 Paul Thomas <pault@gcc.gnu.org> PR fortran/106999 diff --git a/gcc/jit/ChangeLog b/gcc/jit/ChangeLog index 11f76a3e3fb7..d9cfc6ab4c67 100644 --- a/gcc/jit/ChangeLog +++ b/gcc/jit/ChangeLog @@ -1,3 +1,8 @@ +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + * docs/topics/expressions.rst (Constructor expressions): Fix + duplicated words; have have -> have. + 2024-04-02 Iain Sandoe <iain@sandoe.co.uk> * Make-lang.in: Implement exports list, and use a shared diff --git a/gcc/m2/ChangeLog b/gcc/m2/ChangeLog index bf3963c83cfb..3d185fe2e590 100644 --- a/gcc/m2/ChangeLog +++ b/gcc/m2/ChangeLog @@ -1,3 +1,15 @@ +2024-04-09 Gaius Mulley <gaiusmod2@gmail.com> + + * tools-src/makeSystem: Invoke ${COMPILER} once and adjust + the echo string to expand the shell variables with -wrapper + gdb, --args. + +2024-04-09 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114648 + * gm2-compiler/M2Options.mod (LineDirectives): Initially + set to true. + 2024-04-06 Gaius Mulley <gaiusmod2@gmail.com> PR modula2/114617 diff --git a/gcc/rust/ChangeLog b/gcc/rust/ChangeLog index b37ca0e56f43..c77fc4e57b40 100644 --- a/gcc/rust/ChangeLog +++ b/gcc/rust/ChangeLog @@ -1,3 +1,7 @@ +2024-04-09 Christophe Lyon <christophe.lyon@linaro.org> + + * Make-lang.in (rust.install-dvi, rust.install-html): New rules. + 2024-03-04 Mark Wielaard <mark@klomp.org> * lang.opt.urls: Regenerate. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ea798168baab..0bb7c408c535 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,87 @@ +2024-04-09 David Faust <david.faust@oracle.com> + + PR testsuite/114642 + * gcc.dg/debug/btf/btf-datasec-3.c: Make test more robust on different + architectures. + +2024-04-09 Juergen Christ <jchrist@linux.ibm.com> + + * gcc.target/s390/vector/vec-expand-replicate.c: New test. + +2024-04-09 David Faust <david.faust@oracle.com> + + PR debug/114608 + * gcc.dg/debug/btf/btf-datasec-1.c: Check bts_offset symbol references + only for BPF target. + * gcc.dg/debug/btf/btf-datasec-2.c: Likewise. + * gcc.dg/debug/btf/btf-pr106773.c: Likewise. + +2024-04-09 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/114535 + * gfortran.dg/pr114535d.f90: New test. + * gfortran.dg/pr114535iv.f90: Additional source. + +2024-04-09 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/113956 + * gfortran.dg/pr113956.f90: New test. + +2024-04-09 Jørgen Kvalsvik <j@lambda.is> + + PR gcov-profile/114601 + * gcc.misc-tests/gcov-pr114601.c: New test. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + PR target/114576 + * gcc.target/i386/aes-pr114576.c: New test. + +2024-04-09 Yang Yujie <yangyujie@loongson.cn> + + PR target/113233 + * lib/target-supports.exp: Define condition loongarch_sx_as. + * gcc.dg/lto/pr113233_0.c: New test. + +2024-04-09 Jørgen Kvalsvik <j@lambda.is> + + PR middle-end/114599 + * gcc.misc-tests/gcov-19.c: New test. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + PR c++/114580 + * g++.dg/cpp2a/is-constant-evaluated15.C: New test. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/114628 + * gcc.dg/bitint-105.c: New test. + +2024-04-09 H.J. Lu <hjl.tools@gmail.com> + + PR target/114587 + * gcc.target/i386/apx-3.c: Likewise. + +2024-04-09 Kewen Lin <linkw@linux.ibm.com> + + PR testsuite/114614 + * gcc.misc-tests/gcov-20.c: Add effective target check + profile_update_atomic. + +2024-04-09 Kewen Lin <linkw@linux.ibm.com> + Andrew Pinski <quic_apinski@quicinc.com> + + PR target/88309 + * gcc.target/powerpc/pr88309.c: New test. + +2024-04-09 Gaius Mulley <gaiusmod2@gmail.com> + + PR modula2/114648 + * gm2/cpp/default/pass/AdvParse.def: New test. + * gm2/cpp/default/pass/AdvParse.mod: New test. + * gm2/cpp/default/pass/cpp-default-pass.exp: New test. + 2024-04-08 Thomas Schwinge <tschwinge@baylibre.com> * gcc.target/gcn/cond_fmaxnm_1.c: Specify diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index dd9c63ee07e2..f3206978020f 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,10 @@ +2024-04-09 Sergey Bugaev <bugaevc@gmail.com> + + * config.host: Recognize aarch64*-*-gnu* hosts. + * config/aarch64/gnu-unwind.h: New file. + * config/aarch64/heap-trampoline.c + (allocate_trampoline_page): Support GNU/Hurd. + 2024-04-04 Jørgen Kvalsvik <j@lambda.is> * libgcov-merge.c (__gcov_merge_ior): New. diff --git a/libquadmath/ChangeLog b/libquadmath/ChangeLog index 2d6c2081ff23..5731270b9f13 100644 --- a/libquadmath/ChangeLog +++ b/libquadmath/ChangeLog @@ -1,3 +1,18 @@ +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + * sfp-machine.h (__LITTLE_ENDIAN, __BIG_ENDIAN, __BYTE_ORDER): Define + if __BYTE_ORDER isn't defined. + +2024-04-09 Jakub Jelinek <jakub@redhat.com> + + PR libquadmath/114623 + * sfp-machine.h: New file. + * math/sqrtq.c: Include from libgcc/soft-fp also soft-fp.h and quad.h + if possible. + (USE_SOFT_FP): Define in that case. + (sqrtq): Use soft-fp based implementation for the finite positive + arguments if possible. + 2024-04-03 Simon Chopin <simon.chopin@canonical.com> Jakub Jelinek <jakub@redhat.com> diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 14178b73daa0..1ed8b9bc93f0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2024-04-09 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114633 + * include/bits/chrono_io.h (_Parser::operator()) <'S'>: Use + stream extraction if std::from_chars is not available. + 2024-04-08 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/114519 From 77c0b5b23f91404004a9bf710981f6d615b63f57 Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Thu, 4 Apr 2024 23:16:08 +1100 Subject: [PATCH 468/551] c++: Track declarations imported from partitions [PR99377] The testcase in comment 15 of the linked PR is caused because the following assumption in depset::hash::make_dependency doesn't hold: if (DECL_LANG_SPECIFIC (not_tmpl) && DECL_MODULE_IMPORT_P (not_tmpl)) { /* Store the module number and index in cluster/section, so we don't have to look them up again. */ unsigned index = import_entity_index (decl); module_state *from = import_entity_module (index); /* Remap will be zero for imports from partitions, which we want to treat as-if declared in this TU. */ if (from->remap) { dep->cluster = index - from->entity_lwm; dep->section = from->remap; dep->set_flag_bit<DB_IMPORTED_BIT> (); } } This is because at least for template specialisations, we first see the declaration in the header unit imported from the partition, and then the instantiation provided by the partition itself. This means that the 'import_entity_index' lookup doesn't report that the specialisation was declared in the partition and thus should be considered as-if it was part of the TU, and get emitted into the CMI. We always need to emit definitions from module partitions into the primary module interface's CMI, as unlike with other kinds of transitive imports the built CMIs for module partitions are not visible to importers. To fix this, this patch allows, as a special case for installing an entity from a partition, to overwrite the entity_map entry with the (later) index into the partition so that this assumption holds again. We only do this for the first time we override with a partition, so that entities are at least still reported as originating from the first imported partition that declares them (rather than the last); existing tests check for this and this seems to be a friendlier approach to go for, albeit slightly more expensive. PR c++/99377 gcc/cp/ChangeLog: * module.cc (trees_in::install_entity): Overwrite entity map index if installing from a partition. gcc/testsuite/ChangeLog: * g++.dg/modules/pr99377-3_a.H: New test. * g++.dg/modules/pr99377-3_b.C: New test. * g++.dg/modules/pr99377-3_c.C: New test. * g++.dg/modules/pr99377-3_d.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> --- gcc/cp/module.cc | 13 +++++++++++++ gcc/testsuite/g++.dg/modules/pr99377-3_a.H | 17 +++++++++++++++++ gcc/testsuite/g++.dg/modules/pr99377-3_b.C | 10 ++++++++++ gcc/testsuite/g++.dg/modules/pr99377-3_c.C | 5 +++++ gcc/testsuite/g++.dg/modules/pr99377-3_d.C | 8 ++++++++ 5 files changed, 53 insertions(+) create mode 100644 gcc/testsuite/g++.dg/modules/pr99377-3_a.H create mode 100644 gcc/testsuite/g++.dg/modules/pr99377-3_b.C create mode 100644 gcc/testsuite/g++.dg/modules/pr99377-3_c.C create mode 100644 gcc/testsuite/g++.dg/modules/pr99377-3_d.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 8aab9ea0bae0..4e91fa6e052a 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -7649,6 +7649,19 @@ trees_in::install_entity (tree decl) gcc_checking_assert (!existed); slot = ident; } + else if (state->is_partition ()) + { + /* The decl is already in the entity map, but we see it again now from a + partition: we want to overwrite if the original decl wasn't also from + a (possibly different) partition. Otherwise, for things like template + instantiations, make_dependency might not realise that this is also + provided from a partition and should be considered part of this module + (and thus always emitted into the primary interface's CMI). */ + unsigned *slot = entity_map->get (DECL_UID (decl)); + module_state *imp = import_entity_module (*slot); + if (!imp->is_partition ()) + *slot = ident; + } return true; } diff --git a/gcc/testsuite/g++.dg/modules/pr99377-3_a.H b/gcc/testsuite/g++.dg/modules/pr99377-3_a.H new file mode 100644 index 000000000000..580a7631ae18 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr99377-3_a.H @@ -0,0 +1,17 @@ +// { dg-additional-options "-fmodule-header" } +// { dg-module-cmi {} } + +template<typename> +struct Widget +{ + Widget (int) { } + + bool First() const { return true; } + + bool Second () const { return true;} +}; + +inline void Frob (const Widget<int>& w) noexcept +{ + w.First (); +} diff --git a/gcc/testsuite/g++.dg/modules/pr99377-3_b.C b/gcc/testsuite/g++.dg/modules/pr99377-3_b.C new file mode 100644 index 000000000000..5cbce7b35445 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr99377-3_b.C @@ -0,0 +1,10 @@ +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi Foo:check } + +export module Foo:check; +import "pr99377-3_a.H"; + +export inline bool Check (const Widget<int>& w) +{ + return w.Second (); +} diff --git a/gcc/testsuite/g++.dg/modules/pr99377-3_c.C b/gcc/testsuite/g++.dg/modules/pr99377-3_c.C new file mode 100644 index 000000000000..fa7c24203bdd --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr99377-3_c.C @@ -0,0 +1,5 @@ +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi Foo } + +export module Foo; +export import :check; diff --git a/gcc/testsuite/g++.dg/modules/pr99377-3_d.C b/gcc/testsuite/g++.dg/modules/pr99377-3_d.C new file mode 100644 index 000000000000..cb1f28321b10 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr99377-3_d.C @@ -0,0 +1,8 @@ +// { dg-module-do link } +// { dg-additional-options "-fmodules-ts" } + +import Foo; + +int main() { + return Check(0) ? 0 : 1; +} From ea665f90260acb3ffd2e39fcd2e200e702ee0ead Mon Sep 17 00:00:00 2001 From: Hongyu Wang <hongyu.wang@intel.com> Date: Tue, 9 Apr 2024 09:50:11 +0800 Subject: [PATCH 469/551] [APX] Prohibit SHA/KEYLOCKER usage of EGPR when APX enabled The latest APX spec announced removal of SHA/KEYLOCKER evex promotion, which means the SHA/KEYLOCKER insn does not support EGPR when APX enabled. Update the corresponding constraints to their EGPR-disabled counterparts. gcc/ChangeLog: * config/i386/sse.md (sha1msg1): Use "ja" instead of "Bm" for memory constraint. (sha1msg2): Likewise. (sha1nexte): Likewise. (sha1rnds4): Likewise. (sha256msg1): Likewise. (sha256msg2): Likewise. (sha256rnds2): Likewise. (aes<aesklvariant>u8): Use "jm" instead of "m" for memory constraint. (*aes<aeswideklvariant>u8): Likewise. (*encodekey128u32): Use "jr" instead of "r" for register constraints. (*encodekey256u32): Likewise. --- gcc/config/i386/sse.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 03aa249b8426..5bb49823f9a5 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -29104,7 +29104,7 @@ [(set (match_operand:V4SI 0 "register_operand" "=x") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0") - (match_operand:V4SI 2 "vector_operand" "xBm")] + (match_operand:V4SI 2 "vector_operand" "xja")] UNSPEC_SHA1MSG1))] "TARGET_SHA" "sha1msg1\t{%2, %0|%0, %2}" @@ -29115,7 +29115,7 @@ [(set (match_operand:V4SI 0 "register_operand" "=x") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0") - (match_operand:V4SI 2 "vector_operand" "xBm")] + (match_operand:V4SI 2 "vector_operand" "xja")] UNSPEC_SHA1MSG2))] "TARGET_SHA" "sha1msg2\t{%2, %0|%0, %2}" @@ -29126,7 +29126,7 @@ [(set (match_operand:V4SI 0 "register_operand" "=x") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0") - (match_operand:V4SI 2 "vector_operand" "xBm")] + (match_operand:V4SI 2 "vector_operand" "xja")] UNSPEC_SHA1NEXTE))] "TARGET_SHA" "sha1nexte\t{%2, %0|%0, %2}" @@ -29137,7 +29137,7 @@ [(set (match_operand:V4SI 0 "register_operand" "=x") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0") - (match_operand:V4SI 2 "vector_operand" "xBm") + (match_operand:V4SI 2 "vector_operand" "xja") (match_operand:SI 3 "const_0_to_3_operand")] UNSPEC_SHA1RNDS4))] "TARGET_SHA" @@ -29150,7 +29150,7 @@ [(set (match_operand:V4SI 0 "register_operand" "=x") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0") - (match_operand:V4SI 2 "vector_operand" "xBm")] + (match_operand:V4SI 2 "vector_operand" "xja")] UNSPEC_SHA256MSG1))] "TARGET_SHA" "sha256msg1\t{%2, %0|%0, %2}" @@ -29161,7 +29161,7 @@ [(set (match_operand:V4SI 0 "register_operand" "=x") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0") - (match_operand:V4SI 2 "vector_operand" "xBm")] + (match_operand:V4SI 2 "vector_operand" "xja")] UNSPEC_SHA256MSG2))] "TARGET_SHA" "sha256msg2\t{%2, %0|%0, %2}" @@ -29172,7 +29172,7 @@ [(set (match_operand:V4SI 0 "register_operand" "=x") (unspec:V4SI [(match_operand:V4SI 1 "register_operand" "0") - (match_operand:V4SI 2 "vector_operand" "xBm") + (match_operand:V4SI 2 "vector_operand" "xja") (match_operand:V4SI 3 "register_operand" "Yz")] UNSPEC_SHA256RNDS2))] "TARGET_SHA" @@ -30591,9 +30591,9 @@ (define_insn "*encodekey128u32" [(match_parallel 2 "encodekey128_operation" - [(set (match_operand:SI 0 "register_operand" "=r") + [(set (match_operand:SI 0 "register_operand" "=jr") (unspec_volatile:SI - [(match_operand:SI 1 "register_operand" "r") + [(match_operand:SI 1 "register_operand" "jr") (reg:V2DI XMM0_REG)] UNSPECV_ENCODEKEY128U32))])] "TARGET_KL" @@ -30648,9 +30648,9 @@ (define_insn "*encodekey256u32" [(match_parallel 2 "encodekey256_operation" - [(set (match_operand:SI 0 "register_operand" "=r") + [(set (match_operand:SI 0 "register_operand" "=jr") (unspec_volatile:SI - [(match_operand:SI 1 "register_operand" "r") + [(match_operand:SI 1 "register_operand" "jr") (reg:V2DI XMM0_REG) (reg:V2DI XMM1_REG)] UNSPECV_ENCODEKEY256U32))])] @@ -30671,7 +30671,7 @@ (define_insn "aes<aesklvariant>u8" [(set (match_operand:V2DI 0 "register_operand" "=x") (unspec_volatile:V2DI [(match_operand:V2DI 1 "register_operand" "0") - (match_operand:BLK 2 "memory_operand" "m")] + (match_operand:BLK 2 "memory_operand" "jm")] AESDECENCKL)) (set (reg:CCZ FLAGS_REG) (unspec_volatile:CCZ [(match_dup 1) (match_dup 2)] AESDECENCKL))] @@ -30735,7 +30735,7 @@ [(match_parallel 1 "aeswidekl_operation" [(set (reg:CCZ FLAGS_REG) (unspec_volatile:CCZ - [(match_operand:BLK 0 "memory_operand" "m")] + [(match_operand:BLK 0 "memory_operand" "jm")] AESDECENCWIDEKL))])] "TARGET_WIDEKL" "aes<aeswideklvariant>\t%0" From 0774240b4df9a9bc48ce33a9625788e402498f5a Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Fri, 29 Mar 2024 13:53:54 +1100 Subject: [PATCH 470/551] c++: Keep DECL_SAVED_TREE of cdtor instantiations in modules [PR104040] A template instantiation still needs to have its DECL_SAVED_TREE so that its definition is emitted into the CMI. This way it can be emitted in the object file of any importers that use it, in case it doesn't end up getting emitted in this TU. This is true even for maybe-in-charge functions, because we don't currently stream the clones directly but instead regenerate them from this function. PR c++/104040 gcc/cp/ChangeLog: * semantics.cc (expand_or_defer_fn_1): Keep DECL_SAVED_TREE for all vague linkage cdtors with modules. gcc/testsuite/ChangeLog: * g++.dg/modules/pr104040_a.C: New test. * g++.dg/modules/pr104040_b.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/semantics.cc | 8 ++++++-- gcc/testsuite/g++.dg/modules/pr104040_a.C | 14 ++++++++++++++ gcc/testsuite/g++.dg/modules/pr104040_b.C | 8 ++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/pr104040_a.C create mode 100644 gcc/testsuite/g++.dg/modules/pr104040_b.C diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index a43ff6e2ab25..329c524a5093 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -5029,9 +5029,13 @@ expand_or_defer_fn_1 (tree fn) /* We don't want to process FN again, so pretend we've written it out, even though we haven't. */ TREE_ASM_WRITTEN (fn) = 1; - /* If this is a constexpr function, keep DECL_SAVED_TREE. */ + /* If this is a constexpr function we still need the body to be + able to evaluate it. Similarly, with modules we only stream + the maybe-in-charge cdtor and regenerate the clones from it on + demand, so we also need to keep the body. Otherwise we don't + need it anymore. */ if (!DECL_DECLARED_CONSTEXPR_P (fn) - && !(modules_p () && DECL_DECLARED_INLINE_P (fn))) + && !(modules_p () && vague_linkage_p (fn))) DECL_SAVED_TREE (fn) = NULL_TREE; return false; } diff --git a/gcc/testsuite/g++.dg/modules/pr104040_a.C b/gcc/testsuite/g++.dg/modules/pr104040_a.C new file mode 100644 index 000000000000..ea36ce0a798e --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr104040_a.C @@ -0,0 +1,14 @@ +// PR c++/104040 +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi test } + +export module test; + +export template <typename T> +struct test { + ~test() {} +}; + +test<bool> use() { + return {}; +} diff --git a/gcc/testsuite/g++.dg/modules/pr104040_b.C b/gcc/testsuite/g++.dg/modules/pr104040_b.C new file mode 100644 index 000000000000..efe014673fb2 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr104040_b.C @@ -0,0 +1,8 @@ +// PR c++/104040 +// { dg-additional-options "-fmodules-ts" } + +import test; + +int main() { + test<bool> t{}; +} From 7924e352523b37155ed9d76dc426701de9d11a22 Mon Sep 17 00:00:00 2001 From: Peter Bergner <bergner@linux.ibm.com> Date: Tue, 9 Apr 2024 15:24:39 -0500 Subject: [PATCH 471/551] rs6000: Replace OPTION_MASK_DIRECT_MOVE with OPTION_MASK_P8_VECTOR [PR101865] This is a cleanup patch in preparation to fixing the real bug in PR101865. TARGET_DIRECT_MOVE is redundant with TARGET_P8_VECTOR, so alias it to that. Also replace all usages of OPTION_MASK_DIRECT_MOVE with OPTION_MASK_P8_VECTOR and delete the now dead mask. 2024-04-09 Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/101865 * config/rs6000/rs6000.h (TARGET_DIRECT_MOVE): Define. * config/rs6000/rs6000.cc (rs6000_option_override_internal): Replace OPTION_MASK_DIRECT_MOVE with OPTION_MASK_P8_VECTOR. Delete redundant OPTION_MASK_DIRECT_MOVE usage. Delete TARGET_DIRECT_MOVE dead code. (rs6000_opt_masks): Neuter the "direct-move" option. * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Replace OPTION_MASK_DIRECT_MOVE with OPTION_MASK_P8_VECTOR. Delete useless comment. * config/rs6000/rs6000-cpus.def (ISA_2_7_MASKS_SERVER): Delete OPTION_MASK_DIRECT_MOVE. (OTHER_VSX_VECTOR_MASKS): Likewise. (POWERPC_MASKS): Likewise. * config/rs6000/rs6000.opt (mdirect-move): Remove Mask and Var. --- gcc/config/rs6000/rs6000-c.cc | 14 +------------- gcc/config/rs6000/rs6000-cpus.def | 3 --- gcc/config/rs6000/rs6000.cc | 14 +++----------- gcc/config/rs6000/rs6000.h | 2 ++ gcc/config/rs6000/rs6000.opt | 2 +- 5 files changed, 7 insertions(+), 28 deletions(-) diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc index ce0b14a8d373..647f20de7f2a 100644 --- a/gcc/config/rs6000/rs6000-c.cc +++ b/gcc/config/rs6000/rs6000-c.cc @@ -429,19 +429,7 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR6"); if ((flags & OPTION_MASK_POPCNTD) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR7"); - /* Note that the OPTION_MASK_DIRECT_MOVE flag is automatically - turned on in the following condition: - 1. TARGET_P8_VECTOR is enabled and OPTION_MASK_DIRECT_MOVE is not - explicitly disabled. - Hereafter, the OPTION_MASK_DIRECT_MOVE flag is considered to - have been turned on explicitly. - Note that the OPTION_MASK_DIRECT_MOVE flag is automatically - turned off in any of the following conditions: - 1. TARGET_HARD_FLOAT, TARGET_ALTIVEC, or TARGET_VSX is explicitly - disabled and OPTION_MASK_DIRECT_MOVE was not explicitly - enabled. - 2. TARGET_VSX is off. */ - if ((flags & OPTION_MASK_DIRECT_MOVE) != 0) + if ((flags & OPTION_MASK_P8_VECTOR) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR8"); if ((flags & OPTION_MASK_MODULO) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR9"); diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def index 28249600318f..45dd5a859012 100644 --- a/gcc/config/rs6000/rs6000-cpus.def +++ b/gcc/config/rs6000/rs6000-cpus.def @@ -49,7 +49,6 @@ #define ISA_2_7_MASKS_SERVER (ISA_2_6_MASKS_SERVER \ | OPTION_MASK_P8_VECTOR \ | OPTION_MASK_CRYPTO \ - | OPTION_MASK_DIRECT_MOVE \ | OPTION_MASK_EFFICIENT_UNALIGNED_VSX \ | OPTION_MASK_QUAD_MEMORY \ | OPTION_MASK_QUAD_MEMORY_ATOMIC) @@ -90,7 +89,6 @@ #define OTHER_VSX_VECTOR_MASKS (OPTION_MASK_EFFICIENT_UNALIGNED_VSX \ | OPTION_MASK_FLOAT128_KEYWORD \ | OPTION_MASK_P8_VECTOR \ - | OPTION_MASK_DIRECT_MOVE \ | OPTION_MASK_CRYPTO \ | OPTION_MASK_P9_VECTOR \ | OPTION_MASK_FLOAT128_HW \ @@ -118,7 +116,6 @@ | OPTION_MASK_CMPB \ | OPTION_MASK_CRYPTO \ | OPTION_MASK_DFP \ - | OPTION_MASK_DIRECT_MOVE \ | OPTION_MASK_DLMZB \ | OPTION_MASK_EFFICIENT_UNALIGNED_VSX \ | OPTION_MASK_FLOAT128_HW \ diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index 6ba9df4f02e7..c241371147c4 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -3811,7 +3811,7 @@ rs6000_option_override_internal (bool global_init_p) Testing for direct_move matches power8 and later. */ if (!BYTES_BIG_ENDIAN && !(processor_target_table[tune_index].target_enable - & OPTION_MASK_DIRECT_MOVE)) + & OPTION_MASK_P8_VECTOR)) rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN; /* Add some warnings for VSX. */ @@ -3853,8 +3853,7 @@ rs6000_option_override_internal (bool global_init_p) && (rs6000_isa_flags_explicit & (OPTION_MASK_SOFT_FLOAT | OPTION_MASK_ALTIVEC | OPTION_MASK_VSX)) != 0) - rs6000_isa_flags &= ~((OPTION_MASK_P8_VECTOR | OPTION_MASK_CRYPTO - | OPTION_MASK_DIRECT_MOVE) + rs6000_isa_flags &= ~((OPTION_MASK_P8_VECTOR | OPTION_MASK_CRYPTO) & ~rs6000_isa_flags_explicit); if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET) @@ -3939,13 +3938,6 @@ rs6000_option_override_internal (bool global_init_p) rs6000_isa_flags &= ~OPTION_MASK_FPRND; } - if (TARGET_DIRECT_MOVE && !TARGET_VSX) - { - if (rs6000_isa_flags_explicit & OPTION_MASK_DIRECT_MOVE) - error ("%qs requires %qs", "-mdirect-move", "-mvsx"); - rs6000_isa_flags &= ~OPTION_MASK_DIRECT_MOVE; - } - if (TARGET_P8_VECTOR && !TARGET_ALTIVEC) rs6000_isa_flags &= ~OPTION_MASK_P8_VECTOR; @@ -24429,7 +24421,7 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] = false, true }, { "cmpb", OPTION_MASK_CMPB, false, true }, { "crypto", OPTION_MASK_CRYPTO, false, true }, - { "direct-move", OPTION_MASK_DIRECT_MOVE, false, true }, + { "direct-move", 0, false, true }, { "dlmzb", OPTION_MASK_DLMZB, false, true }, { "efficient-unaligned-vsx", OPTION_MASK_EFFICIENT_UNALIGNED_VSX, false, true }, diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 68bc45d65baa..77d045c9f6e6 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -471,6 +471,8 @@ extern int rs6000_vector_align[]; #define TARGET_EXTSWSLI (TARGET_MODULO && TARGET_POWERPC64) #define TARGET_MADDLD TARGET_MODULO +/* TARGET_DIRECT_MOVE is redundant to TARGET_P8_VECTOR, so alias it to that. */ +#define TARGET_DIRECT_MOVE TARGET_P8_VECTOR #define TARGET_XSCVDPSPN (TARGET_DIRECT_MOVE || TARGET_P8_VECTOR) #define TARGET_XSCVSPDPN (TARGET_DIRECT_MOVE || TARGET_P8_VECTOR) #define TARGET_VADDUQM (TARGET_P8_VECTOR && TARGET_POWERPC64) diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index 83197681b661..dfd5051b964e 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -491,7 +491,7 @@ Target Mask(CRYPTO) Var(rs6000_isa_flags) Use ISA 2.07 Category:Vector.AES and Category:Vector.SHA2 instructions. mdirect-move -Target Undocumented Mask(DIRECT_MOVE) Var(rs6000_isa_flags) WarnRemoved +Target Undocumented WarnRemoved mhtm Target Mask(HTM) Var(rs6000_isa_flags) From 109f1b28fc94c93096506e3df0c25e331cef19d0 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Wed, 10 Apr 2024 07:57:03 +0200 Subject: [PATCH 472/551] Revert "combine: Don't combine if I2 does not change" This reverts commit 839bc42772ba7af66af3bd16efed4a69511312ae. --- gcc/combine.cc | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/gcc/combine.cc b/gcc/combine.cc index 71c9abc145c2..92b8d98e6c15 100644 --- a/gcc/combine.cc +++ b/gcc/combine.cc @@ -4196,17 +4196,6 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0, adjust_for_new_dest (i3); } - /* If I2 didn't change, this is not a combination (but a simplification or - canonicalisation with context), which should not be done here. Doing - it here explodes the algorithm. Don't. */ - if (rtx_equal_p (newi2pat, PATTERN (i2))) - { - if (dump_file) - fprintf (dump_file, "i2 didn't change, not doing this\n"); - undo_all (); - return 0; - } - /* We now know that we can do this combination. Merge the insns and update the status of registers and LOG_LINKS. */ From 4923ed49b93352bcf9e43cafac38345e4a54c3f8 Mon Sep 17 00:00:00 2001 From: Kewen Lin <linkw@linux.ibm.com> Date: Wed, 10 Apr 2024 02:59:43 -0500 Subject: [PATCH 473/551] testsuite: Adjust pr113359-2_*.c with unsigned long long [PR114662] pr113359-2_*.c define a struct having unsigned long type members ay and az which have 4 bytes size at -m32, while the related constants CL1 and CL2 used for equality check are always 8 bytes, it makes compiler consider the below 69 if (a.ay != CL1) 70 __builtin_abort (); always to abort and optimize away the following call to getb, which leads to the expected wpa dumping on "Semantic equality" missing. This patch is to modify the types with unsigned long long accordingly. PR testsuite/114662 gcc/testsuite/ChangeLog: * gcc.dg/lto/pr113359-2_0.c: Use unsigned long long instead of unsigned long. * gcc.dg/lto/pr113359-2_1.c: Likewise. --- gcc/testsuite/gcc.dg/lto/pr113359-2_0.c | 8 ++++---- gcc/testsuite/gcc.dg/lto/pr113359-2_1.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c b/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c index 8b2d5bdfab22..8495667599d0 100644 --- a/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr113359-2_0.c @@ -8,15 +8,15 @@ struct SA { unsigned int ax; - unsigned long ay; - unsigned long az; + unsigned long long ay; + unsigned long long az; }; struct SB { unsigned int bx; - unsigned long by; - unsigned long bz; + unsigned long long by; + unsigned long long bz; }; struct ZA diff --git a/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c b/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c index 61bc0547981a..8320f347efee 100644 --- a/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c +++ b/gcc/testsuite/gcc.dg/lto/pr113359-2_1.c @@ -5,15 +5,15 @@ struct SA { unsigned int ax; - unsigned long ay; - unsigned long az; + unsigned long long ay; + unsigned long long az; }; struct SB { unsigned int bx; - unsigned long by; - unsigned long bz; + unsigned long long by; + unsigned long long bz; }; struct ZA From 4be1cc5f50578fafcdcbd09160235066d76a3f86 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Wed, 10 Apr 2024 10:08:12 +0200 Subject: [PATCH 474/551] c++: Implement C++26 P2809R3 - Trivial infinite loops are not Undefined Behavior The following patch attempts to implement P2809R3, which has been voted in as a DR. The middle-end has its behavior documented: '-ffinite-loops' Assume that a loop with an exit will eventually take the exit and not loop indefinitely. This allows the compiler to remove loops that otherwise have no side-effects, not considering eventual endless looping as such. This option is enabled by default at '-O2' for C++ with -std=c++11 or higher. So, the following patch attempts to detect trivial infinite loops by detecting trivially empty loops, if their condition is not INTEGER_CST (that case is handled by the middle-end right already) trying to constant evaluate with mce=true their condition and if it evaluates to true (and -ffinite-loops and not processing_template_decl) wraps the condition into an ANNOTATE_EXPR which tells the middle-end that the loop shouldn't be loop->finite_p despite -ffinite-loops). Furthermore, the patch adds -Wtautological-compare warnings for loop conditions containing std::is_constant_evaluated(), either if those always evaluate to true, or always evaluate to false, or will evaluate to true just when checking if it is trivial infinite loop (and if in non-constexpr function also say that it will evaluate to false otherwise). The user is doing something weird in all those cases. 2024-04-10 Jakub Jelinek <jakub@redhat.com> PR c++/114462 gcc/ * tree-core.h (enum annot_expr_kind): Add annot_expr_maybe_infinite_kind enumerator. * gimplify.cc (gimple_boolify): Handle annot_expr_maybe_infinite_kind. * tree-cfg.cc (replace_loop_annotate_in_block): Likewise. (replace_loop_annotate): Likewise. Move loop->finite_p initialization before the replace_loop_annotate_in_block calls. * tree-pretty-print.cc (dump_generic_node): Handle annot_expr_maybe_infinite_kind. gcc/cp/ * semantics.cc: Implement C++26 P2809R3 - Trivial infinite loops are not Undefined Behavior. (maybe_warn_for_constant_evaluated): Add trivial_infinite argument and emit special diagnostics for that case. (finish_if_stmt_cond): Adjust caller. (finish_loop_cond): New function. (finish_while_stmt): Use it. (finish_do_stmt): Likewise. (finish_for_stmt): Likewise. gcc/testsuite/ * g++.dg/cpp26/trivial-infinite-loop1.C: New test. * g++.dg/cpp26/trivial-infinite-loop2.C: New test. * g++.dg/cpp26/trivial-infinite-loop3.C: New test. --- gcc/cp/semantics.cc | 75 ++++++++- gcc/gimplify.cc | 1 + .../g++.dg/cpp26/trivial-infinite-loop1.C | 148 ++++++++++++++++++ .../g++.dg/cpp26/trivial-infinite-loop2.C | 147 +++++++++++++++++ .../g++.dg/cpp26/trivial-infinite-loop3.C | 148 ++++++++++++++++++ gcc/tree-cfg.cc | 10 +- gcc/tree-core.h | 1 + gcc/tree-pretty-print.cc | 3 + 8 files changed, 527 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop1.C create mode 100644 gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop2.C create mode 100644 gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop3.C diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index 329c524a5093..abaa4a3ca531 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -1090,7 +1090,8 @@ find_std_constant_evaluated_r (tree *tp, int *walk_subtrees, void *) (e.g., in a non-constexpr non-consteval function) so give the user a clue. */ static void -maybe_warn_for_constant_evaluated (tree cond, bool constexpr_if) +maybe_warn_for_constant_evaluated (tree cond, bool constexpr_if, + bool trivial_infinite) { if (!warn_tautological_compare) return; @@ -1108,6 +1109,18 @@ maybe_warn_for_constant_evaluated (tree cond, bool constexpr_if) warning_at (EXPR_LOCATION (cond), OPT_Wtautological_compare, "%<std::is_constant_evaluated%> always evaluates to " "true in %<if constexpr%>"); + else if (trivial_infinite) + { + auto_diagnostic_group d; + if (warning_at (EXPR_LOCATION (cond), OPT_Wtautological_compare, + "%<std::is_constant_evaluated%> evaluates to " + "true when checking if trivially empty iteration " + "statement is trivial infinite loop") + && !maybe_constexpr_fn (current_function_decl)) + inform (EXPR_LOCATION (cond), + "and evaluates to false when actually evaluating " + "the condition in non-%<constexpr%> function"); + } else if (!maybe_constexpr_fn (current_function_decl)) warning_at (EXPR_LOCATION (cond), OPT_Wtautological_compare, "%<std::is_constant_evaluated%> always evaluates to " @@ -1126,7 +1139,8 @@ tree finish_if_stmt_cond (tree orig_cond, tree if_stmt) { tree cond = maybe_convert_cond (orig_cond); - maybe_warn_for_constant_evaluated (cond, IF_STMT_CONSTEXPR_P (if_stmt)); + maybe_warn_for_constant_evaluated (cond, IF_STMT_CONSTEXPR_P (if_stmt), + /*trivial_infinite=*/false); if (IF_STMT_CONSTEXPR_P (if_stmt) && !type_dependent_expression_p (cond) && require_constant_expression (cond) @@ -1205,6 +1219,48 @@ finish_if_stmt (tree if_stmt) add_stmt (do_poplevel (scope)); } +/* Determine if iteration statement with *CONDP condition and + loop BODY is trivially empty iteration statement or even + trivial infinite loop. In the latter case for -ffinite-loops + add ANNOTATE_EXPR to mark the loop as maybe validly infinite. + Also, emit -Wtautological-compare warning for std::is_constant_evaluated () + calls in the condition when needed. */ + +static void +finish_loop_cond (tree *condp, tree body) +{ + if (TREE_CODE (*condp) == INTEGER_CST) + return; + bool trivially_empty = expr_first (body) == NULL_TREE; + bool trivial_infinite = false; + if (trivially_empty) + { + tree c = fold_non_dependent_expr (*condp, tf_none, + /*manifestly_const_eval=*/true); + trivial_infinite = c && integer_nonzerop (c); + } + if (warn_tautological_compare) + { + tree cond = *condp; + while (TREE_CODE (cond) == ANNOTATE_EXPR) + cond = TREE_OPERAND (cond, 0); + if (trivial_infinite + && !DECL_IMMEDIATE_FUNCTION_P (current_function_decl)) + maybe_warn_for_constant_evaluated (cond, /*constexpr_if=*/false, + /*trivial_infinite=*/true); + else if (!trivially_empty + || !processing_template_decl + || DECL_IMMEDIATE_FUNCTION_P (current_function_decl)) + maybe_warn_for_constant_evaluated (cond, /*constexpr_if=*/false, + /*trivial_infinite=*/false); + } + if (trivial_infinite && flag_finite_loops && !processing_template_decl) + *condp = build3 (ANNOTATE_EXPR, TREE_TYPE (*condp), *condp, + build_int_cst (integer_type_node, + annot_expr_maybe_infinite_kind), + integer_zero_node); +} + /* Begin a while-statement. Returns a newly created WHILE_STMT if appropriate. */ @@ -1260,6 +1316,7 @@ finish_while_stmt (tree while_stmt) { end_maybe_infinite_loop (boolean_true_node); WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt)); + finish_loop_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt)); } /* Begin a do-statement. Returns a newly created DO_STMT if @@ -1317,6 +1374,12 @@ finish_do_stmt (tree cond, tree do_stmt, bool ivdep, tree unroll, build_int_cst (integer_type_node, annot_expr_no_vector_kind), integer_zero_node); DO_COND (do_stmt) = cond; + tree do_body = DO_BODY (do_stmt); + if (CONVERT_EXPR_P (do_body) + && integer_zerop (TREE_OPERAND (do_body, 0)) + && VOID_TYPE_P (TREE_TYPE (do_body))) + do_body = NULL_TREE; + finish_loop_cond (&DO_COND (do_stmt), do_body); } /* Finish a return-statement. The EXPRESSION returned, if any, is as @@ -1487,7 +1550,13 @@ finish_for_stmt (tree for_stmt) if (TREE_CODE (for_stmt) == RANGE_FOR_STMT) RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt)); else - FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt)); + { + FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt)); + if (FOR_COND (for_stmt)) + finish_loop_cond (&FOR_COND (for_stmt), + FOR_EXPR (for_stmt) ? integer_one_node + : FOR_BODY (for_stmt)); + } /* Pop the scope for the body of the loop. */ tree *scope_ptr = (TREE_CODE (for_stmt) == RANGE_FOR_STMT diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index 7b972c093ba4..3b731525f15c 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -4584,6 +4584,7 @@ gimple_boolify (tree expr) case annot_expr_no_vector_kind: case annot_expr_vector_kind: case annot_expr_parallel_kind: + case annot_expr_maybe_infinite_kind: TREE_OPERAND (expr, 0) = gimple_boolify (TREE_OPERAND (expr, 0)); if (TREE_CODE (type) != BOOLEAN_TYPE) TREE_TYPE (expr) = boolean_type_node; diff --git a/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop1.C b/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop1.C new file mode 100644 index 000000000000..288a736e4ded --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop1.C @@ -0,0 +1,148 @@ +// P2809R3 - Trivial infinite loops are not Undefined Behavior +// { dg-do compile { target c++11 } } +// { dg-additional-options "-fdump-tree-gimple -fno-inline -Wtautological-compare -O2" } +// { dg-final { scan-tree-dump-times ".ANNOTATE \\\(\[^\n\r]*, 5, 0\\\)" 32 "gimple" { target c++20 } } } +// { dg-final { scan-tree-dump-times ".ANNOTATE \\\(\[^\n\r]*, 5, 0\\\)" 16 "gimple" { target c++17_down } } } + +volatile int v; + +constexpr bool +foo () +{ + return true; +} + +struct S +{ + constexpr S () : s (true) {} + constexpr operator bool () const { return s; } + bool s; +}; + +#if __cplusplus >= 202002L +namespace std { + constexpr inline bool + is_constant_evaluated () noexcept + { +#if __cpp_if_consteval >= 202106L + if consteval { return true; } else { return false; } +#else + return __builtin_is_constant_evaluated (); +#endif + } +} + +constexpr bool +baz () +{ + return std::is_constant_evaluated (); +} +#endif + +void +bar (int x) +{ + switch (x) + { + case 0: + while (foo ()) ; + break; + case 1: + while (foo ()) {} + break; + case 2: + do ; while (foo ()); + break; + case 3: + do {} while (foo ()); + break; + case 4: + for (v = 42; foo (); ) ; + break; + case 5: + for (v = 42; foo (); ) {} + break; + case 6: + for (int w = 42; foo (); ) ; + break; + case 7: + for (int w = 42; foo (); ) {} + break; + case 10: + while (S {}) ; + break; + case 11: + while (S {}) {} + break; + case 12: + do ; while (S {}); + break; + case 13: + do {} while (S {}); + break; + case 14: + for (v = 42; S {}; ) ; + break; + case 15: + for (v = 42; S {}; ) {} + break; + case 16: + for (int w = 42; S {}; ) ; + break; + case 17: + for (int w = 42; S {}; ) {} + break; +#if __cplusplus >= 202002L + case 20: + while (baz ()) ; + break; + case 21: + while (baz ()) {} + break; + case 22: + do ; while (baz ()); + break; + case 23: + do {} while (baz ()); + break; + case 24: + for (v = 42; baz (); ) ; + break; + case 25: + for (v = 42; baz (); ) {} + break; + case 26: + for (int w = 42; baz (); ) ; + break; + case 27: + for (int w = 42; baz (); ) {} + break; + case 30: + while (std::is_constant_evaluated ()) ; // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } + case 31: + while (std::is_constant_evaluated ()) {} // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } + case 32: + do ; while (std::is_constant_evaluated ()); // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } + case 33: + do {} while (std::is_constant_evaluated ()); // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } + case 34: + for (v = 42; std::is_constant_evaluated (); ) ; // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } + case 35: + for (v = 42; std::is_constant_evaluated (); ) {} // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } + case 36: + for (int w = 42; std::is_constant_evaluated (); ) ; // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } + case 37: + for (int w = 42; std::is_constant_evaluated (); ) {} // { dg-warning "'std::is_constant_evaluated' evaluates to true when checking if trivially empty iteration statement is trivial infinite loop" "" { target c++20 } } + break; // { dg-message "and evaluates to false when actually evaluating the condition in non-'constexpr' function" "" { target c++20 } .-1 } +#endif + default: + break; + } +} diff --git a/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop2.C b/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop2.C new file mode 100644 index 000000000000..fd8305e7f8ae --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop2.C @@ -0,0 +1,147 @@ +// P2809R3 - Trivial infinite loops are not Undefined Behavior +// { dg-do compile { target c++11 } } +// { dg-additional-options "-fdump-tree-gimple -fno-inline -Wtautological-compare -O2" } +// { dg-final { scan-tree-dump-not ".ANNOTATE \\\(\[^\n\r]*, 5, 0\\\)" "gimple" } } + +volatile int v; + +constexpr bool +foo () +{ + return false; +} + +struct S +{ + constexpr S () : s (false) {} + constexpr operator bool () const { return s; } + bool s; +}; + +#if __cplusplus >= 202002L +namespace std { + constexpr inline bool + is_constant_evaluated () noexcept + { +#if __cpp_if_consteval >= 202106L + if consteval { return true; } else { return false; } +#else + return __builtin_is_constant_evaluated (); +#endif + } +} + +constexpr bool +baz () +{ + return !std::is_constant_evaluated (); +} +#endif + +void +bar (int x) +{ + switch (x) + { + case 0: + while (foo ()) ; + break; + case 1: + while (foo ()) {} + break; + case 2: + do ; while (foo ()); + break; + case 3: + do {} while (foo ()); + break; + case 4: + for (v = 42; foo (); ) ; + break; + case 5: + for (v = 42; foo (); ) {} + break; + case 6: + for (int w = 42; foo (); ) ; + break; + case 7: + for (int w = 42; foo (); ) {} + break; + case 10: + while (S {}) ; + break; + case 11: + while (S {}) {} + break; + case 12: + do ; while (S {}); + break; + case 13: + do {} while (S {}); + break; + case 14: + for (v = 42; S {}; ) ; + break; + case 15: + for (v = 42; S {}; ) {} + break; + case 16: + for (int w = 42; S {}; ) ; + break; + case 17: + for (int w = 42; S {}; ) {} + break; +#if __cplusplus >= 202002L + case 20: + while (baz ()) ; + break; + case 21: + while (baz ()) {} + break; + case 22: + do ; while (baz ()); + break; + case 23: + do {} while (baz ()); + break; + case 24: + for (v = 42; baz (); ) ; + break; + case 25: + for (v = 42; baz (); ) {} + break; + case 26: + for (int w = 42; baz (); ) ; + break; + case 27: + for (int w = 42; baz (); ) {} + break; + case 30: + while (!std::is_constant_evaluated ()) ; // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 31: + while (!std::is_constant_evaluated ()) {} // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 32: + do ; while (!std::is_constant_evaluated ()); // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 33: + do {} while (!std::is_constant_evaluated ()); // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 34: + for (v = 42; !std::is_constant_evaluated (); ) ; // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 35: + for (v = 42; !std::is_constant_evaluated (); ) {} // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 36: + for (int w = 42; !std::is_constant_evaluated (); ) ; // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 37: + for (int w = 42; !std::is_constant_evaluated (); ) {} // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; +#endif + default: + break; + } +} diff --git a/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop3.C b/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop3.C new file mode 100644 index 000000000000..e88d55317bee --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp26/trivial-infinite-loop3.C @@ -0,0 +1,148 @@ +// P2809R3 - Trivial infinite loops are not Undefined Behavior +// { dg-do compile { target c++11 } } +// { dg-additional-options "-fdump-tree-gimple -fno-inline -Wtautological-compare" } +// { dg-final { scan-tree-dump-not ".ANNOTATE \\\(\[^\n\r]*, 5, 0\\\)" "gimple" } } + +volatile int v; +int y; + +constexpr bool +foo () +{ + return true; +} + +struct S +{ + constexpr S () : s (true) {} + constexpr operator bool () const { return s; } + bool s; +}; + +#if __cplusplus >= 202002L +namespace std { + constexpr inline bool + is_constant_evaluated () noexcept + { +#if __cpp_if_consteval >= 202106L + if consteval { return true; } else { return false; } +#else + return __builtin_is_constant_evaluated (); +#endif + } +} + +constexpr bool +baz () +{ + return std::is_constant_evaluated (); +} +#endif + +void +bar (int x) +{ + switch (x) + { + case 0: + while (foo ()) ++y; + break; + case 1: + while (foo ()) { ++y; } + break; + case 2: + do ++y; while (foo ()); + break; + case 3: + do { ++y; } while (foo ()); + break; + case 4: + for (v = 42; foo (); ) ++y; + break; + case 5: + for (v = 42; foo (); ) { ++y; } + break; + case 6: + for (int w = 42; foo (); ) ++y; + break; + case 7: + for (int w = 42; foo (); ) { ++y; } + break; + case 10: + while (S {}) ++y; + break; + case 11: + while (S {}) { ++y; } + break; + case 12: + do ++y; while (S {}); + break; + case 13: + do { ++y; } while (S {}); + break; + case 14: + for (v = 42; S {}; ) ++y; + break; + case 15: + for (v = 42; S {}; ) { ++y; } + break; + case 16: + for (int w = 42; S {}; ) ++y; + break; + case 17: + for (int w = 42; S {}; ) { ++y; } + break; +#if __cplusplus >= 202002L + case 20: + while (baz ()) ++y; + break; + case 21: + while (baz ()) { ++y; } + break; + case 22: + do ++y; while (baz ()); + break; + case 23: + do { ++y; } while (baz ()); + break; + case 24: + for (v = 42; baz (); ) ++y; + break; + case 25: + for (v = 42; baz (); ) { ++y; } + break; + case 26: + for (int w = 42; baz (); ) ++y; + break; + case 27: + for (int w = 42; baz (); ) { ++y; } + break; + case 30: + while (std::is_constant_evaluated ()) ++y; // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 31: + while (std::is_constant_evaluated ()) { ++y; } // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 32: + do ++y; while (std::is_constant_evaluated ()); // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 33: + do { ++y; } while (std::is_constant_evaluated ()); // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 34: + for (v = 42; std::is_constant_evaluated (); ) ++y; // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 35: + for (v = 42; std::is_constant_evaluated (); ) { ++y; } // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 36: + for (int w = 42; std::is_constant_evaluated (); ) ++y; // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; + case 37: + for (int w = 42; std::is_constant_evaluated (); ) { ++y; } // { dg-warning "'std::is_constant_evaluated' always evaluates to false in a non-'constexpr' function" "" { target c++20 } } + break; +#endif + default: + break; + } +} diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index bdffc3b4ed27..96686db8ed3b 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -297,6 +297,9 @@ replace_loop_annotate_in_block (basic_block bb, class loop *loop) loop->can_be_parallel = true; loop->safelen = INT_MAX; break; + case annot_expr_maybe_infinite_kind: + loop->finite_p = false; + break; default: gcc_unreachable (); } @@ -320,12 +323,12 @@ replace_loop_annotate (void) for (auto loop : loops_list (cfun, 0)) { + /* Push the global flag_finite_loops state down to individual loops. */ + loop->finite_p = flag_finite_loops; + /* Check all exit source blocks for annotations. */ for (auto e : get_loop_exit_edges (loop)) replace_loop_annotate_in_block (e->src, loop); - - /* Push the global flag_finite_loops state down to individual loops. */ - loop->finite_p = flag_finite_loops; } /* Remove IFN_ANNOTATE. Safeguard for the case loop->latch == NULL. */ @@ -347,6 +350,7 @@ replace_loop_annotate (void) case annot_expr_no_vector_kind: case annot_expr_vector_kind: case annot_expr_parallel_kind: + case annot_expr_maybe_infinite_kind: break; default: gcc_unreachable (); diff --git a/gcc/tree-core.h b/gcc/tree-core.h index a8439f8acbb3..9fa743429191 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -983,6 +983,7 @@ enum annot_expr_kind { annot_expr_no_vector_kind, annot_expr_vector_kind, annot_expr_parallel_kind, + annot_expr_maybe_infinite_kind, annot_expr_kind_last }; diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc index 926f7e006a76..c935a7da7d17 100644 --- a/gcc/tree-pretty-print.cc +++ b/gcc/tree-pretty-print.cc @@ -3479,6 +3479,9 @@ dump_generic_node (pretty_printer *pp, tree node, int spc, dump_flags_t flags, case annot_expr_parallel_kind: pp_string (pp, ", parallel"); break; + case annot_expr_maybe_infinite_kind: + pp_string (pp, ", maybe-infinite"); + break; default: gcc_unreachable (); } From 9586d6248e89c6bc138f65ea1992de3a2f54a522 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Mon, 8 Apr 2024 17:41:00 +0100 Subject: [PATCH 475/551] libstdc++: Handle EMLINK and EFTYPE in std::filesystem::remove_all Although POSIX requires ELOOP, FreeBSD documents that openat with O_NOFOLLOW returns EMLINK if the last component of a filename is a symbolic link. Check for EMLINK as well as ELOOP, so that the TOCTTOU mitigation in remove_all works correctly. See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=214633 or the FreeBSD man page for reference. According to its man page, DragonFlyBSD also uses EMLINK for this error, and NetBSD uses its own EFTYPE. OpenBSD follows POSIX and uses EMLINK. This fixes these failures on FreeBSD: FAIL: 27_io/filesystem/operations/remove_all.cc -std=gnu++17 execution test FAIL: experimental/filesystem/operations/remove_all.cc -std=gnu++17 execution test libstdc++-v3/ChangeLog: * src/c++17/fs_ops.cc (remove_all) [__FreeBSD__ || __DragonFly__]: Check for EMLINK as well as ELOOP. [__NetBSD__]: Check for EFTYPE as well as ELOOP. --- libstdc++-v3/src/c++17/fs_ops.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/src/c++17/fs_ops.cc b/libstdc++-v3/src/c++17/fs_ops.cc index 61df19753efa..07bc2a0fa88d 100644 --- a/libstdc++-v3/src/c++17/fs_ops.cc +++ b/libstdc++-v3/src/c++17/fs_ops.cc @@ -1312,7 +1312,13 @@ fs::remove_all(const path& p) // Our work here is done. return 0; case ENOTDIR: - case ELOOP: + case ELOOP: // POSIX says openat with O_NOFOLLOW sets ELOOP for a symlink. +#if defined __FreeBSD__ || defined __DragonFly__ + case EMLINK: // Used instead of ELOOP +#endif +#if defined __NetBSD__ && defined EFTYPE + case EFTYPE: // Used instead of ELOOP +#endif // Not a directory, will remove below. break; #endif @@ -1352,7 +1358,13 @@ fs::remove_all(const path& p, error_code& ec) ec.clear(); return 0; case ENOTDIR: - case ELOOP: + case ELOOP: // POSIX says openat with O_NOFOLLOW sets ELOOP for a symlink. +#if defined __FreeBSD__ || defined __DragonFly__ + case EMLINK: // Used instead of ELOOP +#endif +#if defined __NetBSD__ && defined EFTYPE + case EFTYPE: // Used instead of ELOOP +#endif // Not a directory, will remove below. break; #endif From 4decc1062f0f6eb44209d9d5a26a744ffa474648 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Wed, 10 Apr 2024 13:24:51 +0100 Subject: [PATCH 476/551] libstdc++: Adjust expected locale-dependent date formats in tests The std/time/year_month_day/io.cc test assumes that %x in the fr_FR locale is %d/%m/%Y but on FreeBSD it is %d.%m.%Y instead. Make the test PASS for either format. Similarly, 27_io/manipulators/extended/get_time/char/2.cc expects that %a in the de_DE locale is "Di" but on FreeBSD it's "Di." with a trailing period. Adjust the input string to be "1971 Di." instead of "Di 1971" and that way if %a doesn't expect the trailing '.' it simply won't extract it from the stream. This fixes: FAIL: std/time/year_month_day/io.cc -std=gnu++20 execution test FAIL: 27_io/manipulators/extended/get_time/char/2.cc -std=gnu++17 execution test libstdc++-v3/ChangeLog: * testsuite/27_io/manipulators/extended/get_time/char/2.cc: Adjust input string so that it matches %a with or without a trailing period. * testsuite/std/time/year_month_day/io.cc: Adjust expected format for %x in the fr_FR locale. --- .../27_io/manipulators/extended/get_time/char/2.cc | 6 +++--- libstdc++-v3/testsuite/std/time/year_month_day/io.cc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc index 6104349d2548..b582967fddc0 100644 --- a/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc +++ b/libstdc++-v3/testsuite/27_io/manipulators/extended/get_time/char/2.cc @@ -35,9 +35,9 @@ void test01() VERIFY( loc_de != loc_c ); istringstream iss; iss.imbue(loc_de); - iss.str("Di 1971"); - tm time1; - iss >> get_time(&time1, "%a %Y"); + iss.str("1971 Di."); // %a is "Di" on some targets, "Di." on others. + tm time1{}; + iss >> get_time(&time1, "%Y %a"); VERIFY(time1.tm_wday == 2); VERIFY(time1.tm_year == 71); } diff --git a/libstdc++-v3/testsuite/std/time/year_month_day/io.cc b/libstdc++-v3/testsuite/std/time/year_month_day/io.cc index cb82ef3b6125..632b7a0fc2da 100644 --- a/libstdc++-v3/testsuite/std/time/year_month_day/io.cc +++ b/libstdc++-v3/testsuite/std/time/year_month_day/io.cc @@ -84,7 +84,7 @@ test_format() s = std::format(loc_fr, "{:%x}", 2022y/December/19); VERIFY( s == "12/19/22" ); s = std::format(loc_fr, "{:L%x}", 2022y/December/19); - VERIFY( s == "19/12/2022" ); + VERIFY( s == "19/12/2022" || s == "19.12.2022" ); // depends on locale defs s = std::format(loc_fr, "{}", 2022y/December/19); VERIFY( s == "2022-12-19" ); s = std::format(loc_fr, "{:L%F}", 2022y/December/19); From 3a787e038fe3549d6ec9ec9aa6416dcbba664fd9 Mon Sep 17 00:00:00 2001 From: Andre Vieira <andre.simoesdiasvieira@arm.com> Date: Wed, 10 Apr 2024 16:29:21 +0100 Subject: [PATCH 477/551] aarch64: Do not give ABI change diagnostics for _BitInt(N) This patch makes sure we do not give ABI change diagnostics for the ABI breaks of GCC 9, 13 and 14 for any type involving _BitInt(N), since that type did not exist before this GCC version. gcc/ChangeLog: * config/aarch64/aarch64.cc (bitint_or_aggr_of_bitint_p): New function. (aarch64_layout_arg): Don't emit diagnostics for types involving _BitInt(N). --- gcc/config/aarch64/aarch64.cc | 61 +++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 9 deletions(-) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 1ea84c8bd738..7479e4beb363 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -6744,6 +6744,37 @@ aarch64_function_arg_alignment (machine_mode mode, const_tree type, return alignment; } +/* Return true if TYPE describes a _BitInt(N) or an angreggate that uses the + _BitInt(N) type. These include ARRAY_TYPE's with an element that is a + _BitInt(N) or an aggregate that uses it, and a RECORD_TYPE or a UNION_TYPE + with a field member that is a _BitInt(N) or an aggregate that uses it. + Return false otherwise. */ + +static bool +bitint_or_aggr_of_bitint_p (tree type) +{ + if (!type) + return false; + + if (TREE_CODE (type) == BITINT_TYPE) + return true; + + /* If ARRAY_TYPE, check it's element type. */ + if (TREE_CODE (type) == ARRAY_TYPE) + return bitint_or_aggr_of_bitint_p (TREE_TYPE (type)); + + /* If RECORD_TYPE or UNION_TYPE, check the fields' types. */ + if (RECORD_OR_UNION_TYPE_P (type)) + for (tree field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field)) + { + if (TREE_CODE (field) != FIELD_DECL) + continue; + if (bitint_or_aggr_of_bitint_p (TREE_TYPE (field))) + return true; + } + return false; +} + /* Layout a function argument according to the AAPCS64 rules. The rule numbers refer to the rule numbers in the AAPCS64. ORIG_MODE is the mode that was originally given to us by the target hook, whereas the @@ -6907,6 +6938,10 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) && (!alignment || abi_break_gcc_9 < alignment) && (!abi_break_gcc_13 || alignment < abi_break_gcc_13)); + /* _BitInt(N) was only added in GCC 14. */ + bool warn_pcs_change_le_gcc14 + = warn_pcs_change && !bitint_or_aggr_of_bitint_p (type); + /* allocate_ncrn may be false-positive, but allocate_nvrn is quite reliable. The following code thus handles passing by SIMD/FP registers first. */ @@ -6978,14 +7013,14 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) { /* Emit a warning if the alignment changed when taking the 'packed' attribute into account. */ - if (warn_pcs_change + if (warn_pcs_change_le_gcc14 && abi_break_gcc_13 && ((abi_break_gcc_13 == 16 * BITS_PER_UNIT) != (alignment == 16 * BITS_PER_UNIT))) inform (input_location, "parameter passing for argument of type " "%qT changed in GCC 13.1", type); - if (warn_pcs_change + if (warn_pcs_change_le_gcc14 && abi_break_gcc_14 && ((abi_break_gcc_14 == 16 * BITS_PER_UNIT) != (alignment == 16 * BITS_PER_UNIT))) @@ -6998,7 +7033,8 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) passed by reference rather than value. */ if (alignment == 16 * BITS_PER_UNIT) { - if (warn_pcs_change && abi_break_gcc_9) + if (warn_pcs_change_le_gcc14 + && abi_break_gcc_9) inform (input_location, "parameter passing for argument of type " "%qT changed in GCC 9.1", type); ++ncrn; @@ -7056,14 +7092,14 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) on_stack: pcum->aapcs_stack_words = size / UNITS_PER_WORD; - if (warn_pcs_change + if (warn_pcs_change_le_gcc14 && abi_break_gcc_13 && ((abi_break_gcc_13 >= 16 * BITS_PER_UNIT) != (alignment >= 16 * BITS_PER_UNIT))) inform (input_location, "parameter passing for argument of type " "%qT changed in GCC 13.1", type); - if (warn_pcs_change + if (warn_pcs_change_le_gcc14 && abi_break_gcc_14 && ((abi_break_gcc_14 >= 16 * BITS_PER_UNIT) != (alignment >= 16 * BITS_PER_UNIT))) @@ -7075,7 +7111,8 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) int new_size = ROUND_UP (pcum->aapcs_stack_size, 16 / UNITS_PER_WORD); if (pcum->aapcs_stack_size != new_size) { - if (warn_pcs_change && abi_break_gcc_9) + if (warn_pcs_change_le_gcc14 + && abi_break_gcc_9) inform (input_location, "parameter passing for argument of type " "%qT changed in GCC 9.1", type); pcum->aapcs_stack_size = new_size; @@ -21266,19 +21303,25 @@ aarch64_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p, rsize = ROUND_UP (size, UNITS_PER_WORD); nregs = rsize / UNITS_PER_WORD; - if (align <= 8 && abi_break_gcc_13 && warn_psabi) + if (align <= 8 + && abi_break_gcc_13 + && warn_psabi + && !bitint_or_aggr_of_bitint_p (type)) inform (input_location, "parameter passing for argument of type " "%qT changed in GCC 13.1", type); if (warn_psabi && abi_break_gcc_14 - && (abi_break_gcc_14 > 8 * BITS_PER_UNIT) != (align > 8)) + && (abi_break_gcc_14 > 8 * BITS_PER_UNIT) != (align > 8) + && !bitint_or_aggr_of_bitint_p (type)) inform (input_location, "parameter passing for argument of type " "%qT changed in GCC 14.1", type); if (align > 8) { - if (abi_break_gcc_9 && warn_psabi) + if (abi_break_gcc_9 + && warn_psabi + && !bitint_or_aggr_of_bitint_p (type)) inform (input_location, "parameter passing for argument of type " "%qT changed in GCC 9.1", type); dw_align = true; From 5aa3fec38cc6f52285168b161bab1a869d864b44 Mon Sep 17 00:00:00 2001 From: Andre Vieira <andre.simoesdiasvieira@arm.com> Date: Wed, 10 Apr 2024 16:29:46 +0100 Subject: [PATCH 478/551] aarch64: Add support for _BitInt This patch adds support for C23's _BitInt for the AArch64 port when compiling for little endianness. Big Endianness requires further target-agnostic support and we therefor disable it for now. gcc/ChangeLog: * config/aarch64/aarch64.cc (TARGET_C_BITINT_TYPE_INFO): Declare MACRO. (aarch64_bitint_type_info): New function. (aarch64_return_in_memory_1): Return large _BitInt's in memory. (aarch64_function_arg_alignment): Adapt to correctly return the ABI mandated alignment of _BitInt(N) where N > 128 as the alignment of TImode. (aarch64_composite_type_p): Return true for _BitInt(N), where N > 128. libgcc/ChangeLog: * config/aarch64/t-softfp (softfp_extras): Add floatbitinthf, floatbitintbf, floatbitinttf and fixtfbitint. * config/aarch64/libgcc-softfp.ver (GCC_14.0.0): Add __floatbitinthf, __floatbitintbf, __floatbitinttf and __fixtfbitint. gcc/testsuite/ChangeLog: * gcc.target/aarch64/bitint-alignments.c: New test. * gcc.target/aarch64/bitint-args.c: New test. * gcc.target/aarch64/bitint-sizes.c: New test. * gcc.target/aarch64/bitfield-bitint-abi.h: New header. * gcc.target/aarch64/bitfield-bitint-abi-align16.c: New test. * gcc.target/aarch64/bitfield-bitint-abi-align8.c: New test. --- gcc/config/aarch64/aarch64.cc | 45 ++ .../aarch64/bitfield-bitint-abi-align16.c | 384 +++++++++++++++++ .../aarch64/bitfield-bitint-abi-align8.c | 386 ++++++++++++++++++ .../gcc.target/aarch64/bitfield-bitint-abi.h | 101 +++++ .../gcc.target/aarch64/bitint-alignments.c | 58 +++ .../gcc.target/aarch64/bitint-args.c | 105 +++++ .../gcc.target/aarch64/bitint-sizes.c | 60 +++ libgcc/config/aarch64/libgcc-softfp.ver | 8 + libgcc/config/aarch64/t-softfp | 3 +- 9 files changed, 1149 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c create mode 100644 gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c create mode 100644 gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi.h create mode 100644 gcc/testsuite/gcc.target/aarch64/bitint-alignments.c create mode 100644 gcc/testsuite/gcc.target/aarch64/bitint-args.c create mode 100644 gcc/testsuite/gcc.target/aarch64/bitint-sizes.c diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 7479e4beb363..c763a8a62982 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -6583,6 +6583,7 @@ aarch64_return_in_memory_1 (const_tree type) int count; if (!AGGREGATE_TYPE_P (type) + && TREE_CODE (type) != BITINT_TYPE && TREE_CODE (type) != COMPLEX_TYPE && TREE_CODE (type) != VECTOR_TYPE) /* Simple scalar types always returned in registers. */ @@ -21995,6 +21996,11 @@ aarch64_composite_type_p (const_tree type, if (type && (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)) return true; + if (type + && TREE_CODE (type) == BITINT_TYPE + && int_size_in_bytes (type) > 16) + return true; + if (mode == BLKmode || GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT || GET_MODE_CLASS (mode) == MODE_COMPLEX_INT) @@ -28476,6 +28482,42 @@ aarch64_excess_precision (enum excess_precision_type type) return FLT_EVAL_METHOD_UNPREDICTABLE; } +/* Implement TARGET_C_BITINT_TYPE_INFO. + Return true if _BitInt(N) is supported and fill its details into *INFO. */ +bool +aarch64_bitint_type_info (int n, struct bitint_info *info) +{ + if (TARGET_BIG_END) + return false; + + if (n <= 8) + info->limb_mode = QImode; + else if (n <= 16) + info->limb_mode = HImode; + else if (n <= 32) + info->limb_mode = SImode; + else if (n <= 64) + info->limb_mode = DImode; + else if (n <= 128) + info->limb_mode = TImode; + else + /* The AAPCS for AArch64 defines _BitInt(N > 128) as an array with + type {signed,unsigned} __int128[M] where M*128 >= N. However, to be + able to use libgcc's implementation to support large _BitInt's we need + to use a LIMB_MODE that is no larger than 'long long'. This is why we + use DImode for our internal LIMB_MODE and we define the ABI_LIMB_MODE to + be TImode to ensure we are ABI compliant. */ + info->limb_mode = DImode; + + if (n > 128) + info->abi_limb_mode = TImode; + else + info->abi_limb_mode = info->limb_mode; + info->big_endian = TARGET_BIG_END; + info->extended = false; + return true; +} + /* Implement TARGET_SCHED_CAN_SPECULATE_INSN. Return true if INSN can be scheduled for speculative execution. Reject the long-running division and square-root instructions. */ @@ -30600,6 +30642,9 @@ aarch64_run_selftests (void) #undef TARGET_C_EXCESS_PRECISION #define TARGET_C_EXCESS_PRECISION aarch64_excess_precision +#undef TARGET_C_BITINT_TYPE_INFO +#define TARGET_C_BITINT_TYPE_INFO aarch64_bitint_type_info + #undef TARGET_EXPAND_BUILTIN #define TARGET_EXPAND_BUILTIN aarch64_expand_builtin diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c new file mode 100644 index 000000000000..3f292a45f955 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c @@ -0,0 +1,384 @@ +/* { dg-do compile { target bitint } } */ +/* { dg-additional-options "-std=c23 -O2 -fno-stack-protector -save-temps -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#define ALIGN 16 +#include "bitfield-bitint-abi.h" + +// f1-f16 are all the same + +/* +** f1: +** and x0, x2, 1 +** ret +*/ +/* +** f8: +** and x0, x2, 1 +** ret +*/ +/* +** f16: +** and x0, x2, 1 +** ret +*/ + +/* fp seems to be unable to optimize away stack-usage, TODO: to fix. */ + +/* +** fp: +**... +** and x0, x1, 1 +**... +** ret +*/ + +// all other f1p-f8p generate the same code, for f16p the value comes from x2 +/* +** f1p: +** and x0, x1, 1 +** ret +*/ +/* +** f8p: +** and x0, x1, 1 +** ret +*/ +/* +** f16p: +** and x0, x2, 1 +** ret +*/ + +// g1-g16 are all the same +/* +** g1: +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx (x[0-9]+), \1, 0, 63 +** and x4, \2, 9223372036854775807 +** and x2, \2, 1 +** mov x3, 0 +** b f1 +*/ + +/* +** g8: +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx (x[0-9]+), \1, 0, 63 +** and x4, \2, 9223372036854775807 +** and x2, \2, 1 +** mov x3, 0 +** b f8 +*/ +/* +** g16: +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx (x[0-9]+), \1, 0, 63 +** and x4, \2, 9223372036854775807 +** and x2, \2, 1 +** mov x3, 0 +** b f16 +*/ + +// again gp different from the rest + +/* +** gp: +** sub sp, sp, #16 +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx x([0-9]+), \1, 0, 63 +** mov (w[0-9]+), 0 +** bfi \3, w\2, 0, 1 +** and x3, x\2, 9223372036854775807 +** mov x2, 0 +** str xzr, \[sp\] +** strb \3, \[sp\] +** ldr x1, \[sp\] +** add sp, sp, 16 +** b fp +*/ + +// g1p-g8p are all the same, g16p uses x2 to pass parameter to f16p + +/* +** g1p: +** mov (w[0-9]+), w1 +** sbfx (x[0-9]+), x0, 0, 63 +** and x3, \2, 9223372036854775807 +** and x1, \2, 1 +** mov x2, 0 +** mov w0, \1 +** b f1p +*/ +/* +** g8p: +** mov (w[0-9]+), w1 +** sbfx (x[0-9]+), x0, 0, 63 +** and x3, \2, 9223372036854775807 +** and x1, \2, 1 +** mov x2, 0 +** mov w0, \1 +** b f8p +*/ +/* +** g16p: +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx (x[0-9]+), \1, 0, 63 +** and x4, \2, 9223372036854775807 +** and x2, \2, 1 +** mov x3, 0 +** b f16p +*/ + +// f*_stack are all the same +/* +** f1_stack: +** ldr (x[0-9]+), \[sp, 16\] +** and x0, \1, 1 +** ret +*/ +/* +** f8_stack: +** ldr (x[0-9]+), \[sp, 16\] +** and x0, \1, 1 +** ret +*/ +/* +** f16_stack: +** ldr (x[0-9]+), \[sp, 16\] +** and x0, \1, 1 +** ret +*/ + +// fp{,1,8}_stack are all the same but fp16_stack loads from sp+16 +/* +** fp_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ +/* +** f1p_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ +/* +** f8p_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ + +/* +** f16p_stack: +** ldr (x[0-9]+), \[sp, 16\] +** and x0, \1, 1 +** ret +*/ + +/* +** gp_stack: +**... +** mov x([0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and x7, \2, 9223372036854775807 +** mov (w[0-9]+), 0 +** bfi \3, w\1, 0, 1 +** strb wzr, \[sp, 16\] +** mov x6, x7 +** mov x5, x7 +** mov x4, x7 +** mov x3, x7 +** mov x2, x7 +** str xzr, \[sp, 48\] +** strb \3, \[sp, 48\] +** ldr (x[0-9]+), \[sp, 48\] +** stp x7, \4, \[sp\] +** mov x1, x7 +** bl fp_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + +/* +** g1_stack: +**... +** mov (x[0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and x7, \2, 9223372036854775807 +** mov (x[0-9]+), 0 +** sbfx (x[0-9]+), \1, 0, 63 +** bfi \3, \4, 0, 1 +** stp \3, xzr, \[sp, 16\] +** mov x6, x7 +** mov x5, x7 +** mov x4, x7 +** mov x3, x7 +** mov x2, x7 +** mov x1, x7 +** str x7, \[sp\] +** bl f1_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + + +/* +** g8_stack: +**... +** mov (x[0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and x7, \2, 9223372036854775807 +** mov (x[0-9]+), 0 +** sbfx (x[0-9]+), \1, 0, 63 +** bfi \3, \4, 0, 1 +** stp \3, xzr, \[sp, 16\] +** mov x6, x7 +** mov x5, x7 +** mov x4, x7 +** mov x3, x7 +** mov x2, x7 +** mov x1, x7 +** str x7, \[sp\] +** bl f8_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + +/* +** g16_stack: +**... +** mov (x[0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and (x[0-9]+), \2, 9223372036854775807 +** mov (x[0-9]+), 0 +** sbfx (x[0-9]+), \1, 0, 63 +** bfi \4, \5, 0, 1 +** stp \4, xzr, \[sp, 16\] +** mov x6, \3 +** mov x5, \3 +** mov x4, \3 +** mov x3, \3 +** mov x2, \3 +** mov x1, \3 +** str x7, \[sp\] +** bl f16_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + +/* +** f1_stdarg: +**... +** and x0, x2, 1 +**... +** ret +*/ +/* +** f16_stdarg: +**... +** and x0, x2, 1 +**... +** ret +*/ + +/* +** fp_stdarg: +**... +** and x0, x1, 1 +**... +** ret +*/ + +/* +** f1p_stdarg: +**... +** and x0, x1, 1 +**... +** ret +*/ +/* +** f8p_stdarg: +**... +** and x0, x1, 1 +**... +** ret +*/ +/* +** f16p_stdarg: +**... +** and x0, x2, 1 +**... +** ret +*/ + +/* +** g1_stdarg: +** and x2, x0, 1 +** mov x3, 0 +** mov w0, w1 +** b f1_stdarg +*/ + +/* +** g16_stdarg: +** and x2, x0, 1 +** mov x3, 0 +** mov w0, w1 +** b f16_stdarg +*/ + +/* +** gp_stdarg: +**... +** mov x([0-9]+), x0 +** mov w0, w1 +** mov (w[0-9]+), 0 +** bfi \2, w\1, 0, 1 +** mov x2, 0 +** str xzr, \[sp\] +** strb \2, \[sp\] +** ldr x1, \[sp\] +**... +** b fp_stdarg +*/ + +/* +** g1p_stdarg: +** mov (x[0-9]+), x0 +** mov w0, w1 +** and x1, \1, 1 +** mov x2, 0 +** b f1p_stdarg +*/ + +/* +** g8p_stdarg: +** mov (x[0-9]+), x0 +** mov w0, w1 +** and x1, \1, 1 +** mov x2, 0 +** b f8p_stdarg +*/ + +/* +** g16p_stdarg: +** and x2, x0, 1 +** mov x3, 0 +** mov w0, w1 +** b f16p_stdarg +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c new file mode 100644 index 000000000000..da3c23550bae --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c @@ -0,0 +1,386 @@ +/* { dg-do compile { target bitint } } */ +/* { dg-additional-options "-std=c23 -O2 -fno-stack-protector -save-temps -fno-schedule-insns -fno-schedule-insns2" } */ +/* { dg-final { check-function-bodies "**" "" "" } } */ + +#define ALIGN 8 +#include "bitfield-bitint-abi.h" + +// f1-f16 are all the same + +/* +** f1: +** and x0, x1, 1 +** ret +*/ +/* +** f8: +** and x0, x1, 1 +** ret +*/ +/* +** f16: +** and x0, x2, 1 +** ret +*/ + +/* fp seems to be unable to optimize away stack-usage, TODO: to fix. */ + +/* +** fp: +**... +** and x0, x1, 1 +**... +** ret +*/ + +// all other f1p-f8p generate the same code, for f16p the value comes from x2 +/* +** f1p: +** and x0, x1, 1 +** ret +*/ +/* +** f8p: +** and x0, x1, 1 +** ret +*/ +/* +** f16p: +** and x0, x2, 1 +** ret +*/ + +// g1-g16 are all the same +/* +** g1: +** mov (w[0-9]+), w1 +** sbfx (x[0-9]+), x0, 0, 63 +** and x3, \2, 9223372036854775807 +** and x1, \2, 1 +** mov x2, 0 +** mov w0, \1 +** b f1 +*/ + +/* +** g8: +** mov (w[0-9]+), w1 +** sbfx (x[0-9]+), x0, 0, 63 +** and x3, \2, 9223372036854775807 +** and x1, \2, 1 +** mov x2, 0 +** mov w0, \1 +** b f8 +*/ +/* +** g16: +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx (x[0-9]+), \1, 0, 63 +** and x4, \2, 9223372036854775807 +** and x2, \2, 1 +** mov x3, 0 +** b f16 +*/ + +// again gp different from the rest + +/* +** gp: +** sub sp, sp, #16 +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx x([0-9]+), \1, 0, 63 +** mov (w[0-9]+), 0 +** bfi \3, w\2, 0, 1 +** and x3, x\2, 9223372036854775807 +** mov x2, 0 +** str xzr, \[sp\] +** strb \3, \[sp\] +** ldr x1, \[sp\] +** add sp, sp, 16 +** b fp +*/ + +// g1p-g8p are all the same, g16p uses x2 to pass parameter to f16p + +/* +** g1p: +** mov (w[0-9]+), w1 +** sbfx (x[0-9]+), x0, 0, 63 +** and x3, \2, 9223372036854775807 +** and x1, \2, 1 +** mov x2, 0 +** mov w0, \1 +** b f1p +*/ +/* +** g8p: +** mov (w[0-9]+), w1 +** sbfx (x[0-9]+), x0, 0, 63 +** and x3, \2, 9223372036854775807 +** and x1, \2, 1 +** mov x2, 0 +** mov w0, \1 +** b f8p +*/ +/* +** g16p: +** mov (x[0-9]+), x0 +** mov w0, w1 +** sbfx (x[0-9]+), \1, 0, 63 +** and x4, \2, 9223372036854775807 +** and x2, \2, 1 +** mov x3, 0 +** b f16p +*/ + +// f*_stack are all the same +/* +** f1_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ +/* +** f8_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ +/* +** f16_stack: +** ldr (x[0-9]+), \[sp, 16\] +** and x0, \1, 1 +** ret +*/ + +// fp{,1,8}_stack are all the same but fp16_stack loads from sp+16 +/* +** fp_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ +/* +** f1p_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ +/* +** f8p_stack: +** ldr (x[0-9]+), \[sp, 8\] +** and x0, \1, 1 +** ret +*/ + +/* +** f16p_stack: +** ldr (x[0-9]+), \[sp, 16\] +** and x0, \1, 1 +** ret +*/ + +/* +** gp_stack: +**... +** mov x([0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and x7, \2, 9223372036854775807 +** mov (w[0-9]+), 0 +** bfi \3, w\1, 0, 1 +** strb wzr, \[sp, 16\] +** mov x6, x7 +** mov x5, x7 +** mov x4, x7 +** mov x3, x7 +** mov x2, x7 +** str xzr, \[sp, 48\] +** strb \3, \[sp, 48\] +** ldr (x[0-9]+), \[sp, 48\] +** stp x7, \4, \[sp\] +** mov x1, x7 +** bl fp_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + +/* g1 and g8 are the same. */ + +/* +** g1_stack: +**... +** mov (x[0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and x7, \2, 9223372036854775807 +** mov (x[0-9]+), 0 +** sbfx (x[0-9]+), \1, 0, 63 +** bfi \3, \4, 0, 1 +** stp x7, x1, \[sp\] +** mov x6, x7 +** mov x5, x7 +** mov x4, x7 +** mov x3, x7 +** mov x2, x7 +** mov x1, x7 +** str xzr, \[sp, 16\] +** bl f1_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + +/* +** g8_stack: +**... +** mov (x[0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and x7, \2, 9223372036854775807 +** mov (x[0-9]+), 0 +** sbfx (x[0-9]+), \1, 0, 63 +** bfi \3, \4, 0, 1 +** stp x7, x1, \[sp\] +** mov x6, x7 +** mov x5, x7 +** mov x4, x7 +** mov x3, x7 +** mov x2, x7 +** mov x1, x7 +** str xzr, \[sp, 16\] +** bl f8_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + +/* +** g16_stack: +**... +** mov (x[0-9]+), x0 +** sxtw (x[0-9]+), w1 +** mov x0, \2 +** and x7, \2, 9223372036854775807 +** mov (x[0-9]+), 0 +** sbfx (x[0-9]+), \1, 0, 63 +** bfi \3, \4, 0, 1 +** stp \3, xzr, \[sp, 16\] +** mov x6, x7 +** mov x5, x7 +** mov x4, x7 +** mov x3, x7 +** mov x2, x7 +** mov x1, x7 +** str x7, \[sp\] +** bl f16_stack +** sbfx x0, x0, 0, 63 +**... +** ret +*/ + +/* +** f1_stdarg: +**... +** and x0, x1, 1 +**... +** ret +*/ +/* +** f16_stdarg: +**... +** and x0, x2, 1 +**... +** ret +*/ + +/* +** fp_stdarg: +**... +** and x0, x1, 1 +**... +** ret +*/ + +/* +** f1p_stdarg: +**... +** and x0, x1, 1 +**... +** ret +*/ +/* +** f8p_stdarg: +**... +** and x0, x1, 1 +**... +** ret +*/ +/* +** f16p_stdarg: +**... +** and x0, x2, 1 +**... +** ret +*/ + +/* +** g1_stdarg: +** mov (x[0-9]+), x0 +** mov w0, w1 +** and x1, \1, 1 +** mov x2, 0 +** b f1_stdarg +*/ + +/* +** g16_stdarg: +** and x2, x0, 1 +** mov x3, 0 +** mov w0, w1 +** b f16_stdarg +*/ + +/* +** gp_stdarg: +**... +** mov x([0-9]+), x0 +** mov w0, w1 +** mov (w[0-9]+), 0 +** bfi \2, w\1, 0, 1 +** mov x2, 0 +** str xzr, \[sp\] +** strb \2, \[sp\] +** ldr x1, \[sp\] +**... +** b fp_stdarg +*/ + +/* +** g1p_stdarg: +** mov (x[0-9]+), x0 +** mov w0, w1 +** and x1, \1, 1 +** mov x2, 0 +** b f1p_stdarg +*/ + +/* +** g8p_stdarg: +** mov (x[0-9]+), x0 +** mov w0, w1 +** and x1, \1, 1 +** mov x2, 0 +** b f8p_stdarg +*/ + +/* +** g16p_stdarg: +** and x2, x0, 1 +** mov x3, 0 +** mov w0, w1 +** b f16p_stdarg +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi.h b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi.h new file mode 100644 index 000000000000..b02182f4b3b1 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi.h @@ -0,0 +1,101 @@ +#include <stdarg.h> + +typedef unsigned _BitInt(63) BI __attribute__((aligned(ALIGN))); + +#ifndef EXTRA +#define EXTRA unsigned long long x; +#endif + +struct S1 { __attribute__((aligned(1))) BI i : 1; EXTRA }; +struct S8 { __attribute__((aligned(8))) BI i : 1; EXTRA }; +struct S16 { __attribute__((aligned(16))) BI i : 1; EXTRA }; + +struct Sp { BI i : 1; EXTRA }__attribute__((packed)); +struct S1p { __attribute__((packed, aligned(1))) BI i : 1; EXTRA }; +struct S8p { __attribute__((packed, aligned(8))) BI i : 1; EXTRA }; +struct S16p { __attribute__((packed, aligned(16))) BI i : 1; EXTRA }; + +/* Bitfield in registers. */ +#define PARAMS(xx) int a0, struct S##xx s, BI a1 +/* Bitfield passed by the stack. */ +#define PARAMS_STACK(xx) int a0, BI a1, BI a2, BI a3, BI a4, BI a5, BI a6, BI a7, BI a8, struct S##xx t +/* Bitfield passed via stdarg. */ +#define PARAMS_STDARG(xx) int a0, ... + +#define CODE(xx) \ + return s.i; + +#define CODE_STACK(xx) \ + return t.i; + +#define CODE_STDARG(xx) \ + va_list ap; \ + struct S##xx arg; \ + __builtin_va_start(ap,a0); \ + arg = __builtin_va_arg(ap, struct S##xx); \ + return arg.i; + +#define ARGS(xx) y, (struct S##xx) { x }, x +#define ARGS_STACK(xx) y, y, y, y, y, y, y, y, y, (struct S##xx) { x } +#define ARGS_STDARG(xx) y, (struct S##xx) { x } + +/* Bitfield in registers. */ +_BitInt(63) __attribute__ ((noipa)) f1 (PARAMS(1)) { CODE(1) } +_BitInt(63) __attribute__ ((noipa)) f8 (PARAMS(8)) { CODE(8) } +_BitInt(63) __attribute__ ((noipa)) f16(PARAMS(16)) { CODE(16) } + +_BitInt(63) __attribute__ ((noipa)) fp (PARAMS(p)) { CODE(p) } +_BitInt(63) __attribute__ ((noipa)) f1p (PARAMS(1p)) { CODE(1p) } +_BitInt(63) __attribute__ ((noipa)) f8p (PARAMS(8p)) { CODE(8p) } +_BitInt(63) __attribute__ ((noipa)) f16p(PARAMS(16p)) { CODE(16p) } + +_BitInt(63) g1 (_BitInt(63) x, int y) { return f1 (ARGS(1)); } +_BitInt(63) g8 (_BitInt(63) x, int y) { return f8 (ARGS(8)); } +_BitInt(63) g16(_BitInt(63) x, int y) { return f16 (ARGS(16)); } + +_BitInt(63) gp (_BitInt(63) x, int y) { return fp (ARGS(p)); } +_BitInt(63) g1p (_BitInt(63) x, int y) { return f1p (ARGS(1p)); } +_BitInt(63) g8p (_BitInt(63) x, int y) { return f8p (ARGS(8p)); } +_BitInt(63) g16p(_BitInt(63) x, int y) { return f16p (ARGS(16p)); } + +/* Bitfield in the stack. */ +_BitInt(63) __attribute__ ((noipa)) f1_stack (PARAMS_STACK(1)) { CODE_STACK(1) } +_BitInt(63) __attribute__ ((noipa)) f8_stack (PARAMS_STACK(8)) { CODE_STACK(8) } +_BitInt(63) __attribute__ ((noipa)) f16_stack(PARAMS_STACK(16)) { CODE_STACK(16) } + +_BitInt(63) __attribute__ ((noipa)) fp_stack (PARAMS_STACK(p)) { CODE_STACK(p) } +_BitInt(63) __attribute__ ((noipa)) f1p_stack (PARAMS_STACK(1p)) { CODE_STACK(1p) } +_BitInt(63) __attribute__ ((noipa)) f8p_stack (PARAMS_STACK(8p)) { CODE_STACK(8p) } +_BitInt(63) __attribute__ ((noipa)) f16p_stack(PARAMS_STACK(16p)) { CODE_STACK(16p) } + + +_BitInt(63) g1_stack (_BitInt(63) x, int y) { return f1_stack (ARGS_STACK(1)); } +_BitInt(63) g8_stack (_BitInt(63) x, int y) { return f8_stack (ARGS_STACK(8)); } +_BitInt(63) g16_stack(_BitInt(63) x, int y) { return f16_stack (ARGS_STACK(16)); } + +_BitInt(63) gp_stack (_BitInt(63) x, int y) { return fp_stack (ARGS_STACK(p)); } +_BitInt(63) g1p_stack (_BitInt(63) x, int y) { return f1p_stack (ARGS_STACK(1p)); } +_BitInt(63) g8p_stack (_BitInt(63) x, int y) { return f8p_stack (ARGS_STACK(8p)); } +_BitInt(63) g16p_stack(_BitInt(63) x, int y) { return f16p_stack (ARGS_STACK(16p)); } + + +/* Bitfield via stdarg. */ +_BitInt(63) __attribute__ ((noipa)) f1_stdarg (PARAMS_STDARG(1)) { CODE_STDARG(1) } +_BitInt(63) __attribute__ ((noipa)) f8_stdarg (PARAMS_STDARG(8)) { CODE_STDARG(8) } +_BitInt(63) __attribute__ ((noipa)) f16_stdarg(PARAMS_STDARG(16)) { CODE_STDARG(16) } + +_BitInt(63) __attribute__ ((noipa)) fp_stdarg (PARAMS_STDARG(p)) { CODE_STDARG(p) } +_BitInt(63) __attribute__ ((noipa)) f1p_stdarg (PARAMS_STDARG(1p)) { CODE_STDARG(1p) } +_BitInt(63) __attribute__ ((noipa)) f8p_stdarg (PARAMS_STDARG(8p)) { CODE_STDARG(8p) } +_BitInt(63) __attribute__ ((noipa)) f16p_stdarg(PARAMS_STDARG(16p)) { CODE_STDARG(16p) } + +_BitInt(63) g1_stdarg (_BitInt(63) x, int y) { return f1_stdarg (ARGS_STDARG(1)); } +_BitInt(63) g8_stdarg (_BitInt(63) x, int y) { return f8_stdarg (ARGS_STDARG(8)); } +_BitInt(63) g16_stdarg(_BitInt(63) x, int y) { return f16_stdarg (ARGS_STDARG(16)); } + +_BitInt(63) gp_stdarg (_BitInt(63) x, int y) { return fp_stdarg (ARGS_STDARG(p)); } +_BitInt(63) g1p_stdarg (_BitInt(63) x, int y) { return f1p_stdarg (ARGS_STDARG(1p)); } +_BitInt(63) g8p_stdarg (_BitInt(63) x, int y) { return f8p_stdarg (ARGS_STDARG(8p)); } +_BitInt(63) g16p_stdarg(_BitInt(63) x, int y) { return f16p_stdarg (ARGS_STDARG(16p)); } + + diff --git a/gcc/testsuite/gcc.target/aarch64/bitint-alignments.c b/gcc/testsuite/gcc.target/aarch64/bitint-alignments.c new file mode 100644 index 000000000000..8592279b038b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bitint-alignments.c @@ -0,0 +1,58 @@ +/* { dg-do run { target bitint } } */ +/* { dg-additional-options "-std=c23" } */ + +static long unsigned int +calc_alignof (int n) +{ + if (n > 64) + return alignof(__int128_t); + if (n > 32) + return alignof(long long); + if (n > 16) + return alignof(int); + if (n > 8) + return alignof(short); + else + return alignof(char); +} + +#define CHECK_ALIGNMENT(N) \ + if (alignof(_BitInt(N)) != calc_alignof(N)) \ + __builtin_abort (); + +int main (void) +{ + CHECK_ALIGNMENT(2); + CHECK_ALIGNMENT(3); + CHECK_ALIGNMENT(7); + CHECK_ALIGNMENT(8); + CHECK_ALIGNMENT(9); + CHECK_ALIGNMENT(13); + CHECK_ALIGNMENT(15); + CHECK_ALIGNMENT(16); + CHECK_ALIGNMENT(17); + CHECK_ALIGNMENT(24); + CHECK_ALIGNMENT(31); + CHECK_ALIGNMENT(32); + CHECK_ALIGNMENT(33); + CHECK_ALIGNMENT(42); + CHECK_ALIGNMENT(53); + CHECK_ALIGNMENT(63); + CHECK_ALIGNMENT(64); + CHECK_ALIGNMENT(65); + CHECK_ALIGNMENT(79); + CHECK_ALIGNMENT(96); + CHECK_ALIGNMENT(113); + CHECK_ALIGNMENT(127); + CHECK_ALIGNMENT(128); + CHECK_ALIGNMENT(129); + CHECK_ALIGNMENT(153); + CHECK_ALIGNMENT(255); + CHECK_ALIGNMENT(256); + CHECK_ALIGNMENT(257); + CHECK_ALIGNMENT(353); + CHECK_ALIGNMENT(512); + CHECK_ALIGNMENT(620); + CHECK_ALIGNMENT(1024); + CHECK_ALIGNMENT(30000); +} diff --git a/gcc/testsuite/gcc.target/aarch64/bitint-args.c b/gcc/testsuite/gcc.target/aarch64/bitint-args.c new file mode 100644 index 000000000000..e7e1099c303b --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bitint-args.c @@ -0,0 +1,105 @@ +/* { dg-do compile { target bitint } } */ +/* { dg-additional-options "-std=c23 -O -fno-stack-clash-protection -g" } */ +/* { dg-final { check-function-bodies "**" "" } } */ + +#define CHECK_ARG(N) \ +void f##N(_BitInt(N) *ptr, _BitInt(N) y) \ +{ \ + *ptr = y; \ +} + + +CHECK_ARG(2) +/* +** f2: +** sbfiz (w[0-9]+), w1, 6, 2 +** asr (w[0-9]+), \1, 6 +** strb \2, \[x0\] +** ret +*/ +CHECK_ARG(8) +/* +** f8: +** strb w1, \[x0\] +** ret +*/ +CHECK_ARG(9) +/* +** f9: +** sbfiz (w[0-9]+), w1, 7, 9 +** asr (w[0-9]+), \1, 7 +** strh \2, \[x0\] +** ret +*/ +CHECK_ARG(16) +/* +** f16: +** strh w1, \[x0\] +** ret +*/ +CHECK_ARG(19) +/* +** f19: +** sbfx x([0-9]+), x1, 0, 19 +** str w\1, \[x0\] +** ret +*/ +CHECK_ARG(32) +/* +** f32: +** str w1, \[x0\] +** ret +*/ +CHECK_ARG(42) +/* +** f42: +** sbfx (x[0-9]+), x1, 0, 42 +** str \1, \[x0\] +** ret +*/ +CHECK_ARG(64) +/* +** f64: +** str x1, \[x0\] +** ret +*/ + +CHECK_ARG(65) +/* +** f65: +** extr (x[0-9]+), x3, x2, 1 +** and (x[0-9]+), x2, 1 +** orr (x[0-9]+), \2, \1, lsl 1 +** asr (x[0-9]+), \1, 63 +** stp \3, \4, \[x0\] +** ret +*/ + +CHECK_ARG(127) +/* +** f127: +** extr (x[0-9]+), x3, x2, 63 +** and (x[0-9]+), x2, 9223372036854775807 +** orr (x[0-9]+), \2, \1, lsl 63 +** asr (x[0-9]+), \1, 1 +** stp \3, \4, \[x0\] +** ret +*/ + +CHECK_ARG(128) +/* +** f128: +** stp x2, x3, \[x0\] +** ret +*/ + +CHECK_ARG(129) +/* +** f129: +** ldp (x[0-9]+), (x[0-9]+), \[x1\] +** stp \1, \2, \[x0\] +** ldr (x[0-9]+), \[x1, 16\] +** sbfx (x[0-9]+), \3, 0, 1 +** str \4, \[x0, 16\] +** ret +*/ diff --git a/gcc/testsuite/gcc.target/aarch64/bitint-sizes.c b/gcc/testsuite/gcc.target/aarch64/bitint-sizes.c new file mode 100644 index 000000000000..7272f98acbb0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/bitint-sizes.c @@ -0,0 +1,60 @@ +/* { dg-do run { target bitint } } */ +/* { dg-additional-options "-std=c23" } */ + +static long unsigned int +calc_size (int n) +{ + if (n > 128) + return ((n - 1)/128 + 1) * sizeof(__int128_t); + if (n > 64) + return sizeof(__int128_t); + if (n > 32) + return sizeof(long long); + if (n > 16) + return sizeof(int); + if (n > 8) + return sizeof(short); + else + return sizeof(char); +} + +#define CHECK_SIZE(N) \ + if (sizeof(_BitInt(N)) != calc_size(N)) \ + __builtin_abort (); + +int main (void) +{ + CHECK_SIZE(2); + CHECK_SIZE(3); + CHECK_SIZE(7); + CHECK_SIZE(8); + CHECK_SIZE(9); + CHECK_SIZE(13); + CHECK_SIZE(15); + CHECK_SIZE(16); + CHECK_SIZE(17); + CHECK_SIZE(24); + CHECK_SIZE(31); + CHECK_SIZE(32); + CHECK_SIZE(33); + CHECK_SIZE(42); + CHECK_SIZE(53); + CHECK_SIZE(63); + CHECK_SIZE(64); + CHECK_SIZE(65); + CHECK_SIZE(79); + CHECK_SIZE(96); + CHECK_SIZE(113); + CHECK_SIZE(127); + CHECK_SIZE(128); + CHECK_SIZE(129); + CHECK_SIZE(153); + CHECK_SIZE(255); + CHECK_SIZE(256); + CHECK_SIZE(257); + CHECK_SIZE(353); + CHECK_SIZE(512); + CHECK_SIZE(620); + CHECK_SIZE(1024); + CHECK_SIZE(30000); +} diff --git a/libgcc/config/aarch64/libgcc-softfp.ver b/libgcc/config/aarch64/libgcc-softfp.ver index e73f5f912977..9ba857036abe 100644 --- a/libgcc/config/aarch64/libgcc-softfp.ver +++ b/libgcc/config/aarch64/libgcc-softfp.ver @@ -39,3 +39,11 @@ GCC_13.0.0 { __trunctfbf2 __trunchfbf2 } + +%inherit GCC_14.0.0 GCC_13.0.0 +GCC_14.0.0 { + __fixtfbitint + __floatbitintbf + __floatbitinthf + __floatbitinttf +} diff --git a/libgcc/config/aarch64/t-softfp b/libgcc/config/aarch64/t-softfp index 2e32366f8913..80e7e77a545c 100644 --- a/libgcc/config/aarch64/t-softfp +++ b/libgcc/config/aarch64/t-softfp @@ -4,7 +4,8 @@ softfp_extensions := sftf dftf hftf bfsf softfp_truncations := tfsf tfdf tfhf tfbf dfbf sfbf hfbf softfp_exclude_libgcc2 := n softfp_extras += fixhfti fixunshfti floattihf floatuntihf \ - floatdibf floatundibf floattibf floatuntibf + floatdibf floatundibf floattibf floatuntibf \ + floatbitinthf floatbitintbf floatbitinttf fixtfbitint TARGET_LIBGCC2_CFLAGS += -Wno-missing-prototypes From 912753cc5f18d786e334dd425469fa7f93155661 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Wed, 10 Apr 2024 10:33:40 +0200 Subject: [PATCH 479/551] tree-optimization/114672 - WIDEN_MULT_PLUS_EXPR type mismatch The following makes sure to restrict WIDEN_MULT*_EXPR to a mode precision final compute type as the mode is used to find the optab and type checking chokes when seeing bit-precisions later which would likely also not properly expanded to RTL. PR tree-optimization/114672 * tree-ssa-math-opts.cc (convert_plusminus_to_widen): Only allow mode-precision results. * gcc.dg/torture/pr114672.c: New testcase. --- gcc/testsuite/gcc.dg/torture/pr114672.c | 14 ++++++++++++++ gcc/tree-ssa-math-opts.cc | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr114672.c diff --git a/gcc/testsuite/gcc.dg/torture/pr114672.c b/gcc/testsuite/gcc.dg/torture/pr114672.c new file mode 100644 index 000000000000..b69511fe8db9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr114672.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ + +struct { + __INT64_TYPE__ m : 60; +} s; + +short a; +short b; + +void +foo () +{ + s.m += a * b; +} diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc index a8d25c2de48a..705f4a4695ac 100644 --- a/gcc/tree-ssa-math-opts.cc +++ b/gcc/tree-ssa-math-opts.cc @@ -2918,8 +2918,9 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, gimple *stmt, lhs = gimple_assign_lhs (stmt); type = TREE_TYPE (lhs); - if (TREE_CODE (type) != INTEGER_TYPE - && TREE_CODE (type) != FIXED_POINT_TYPE) + if ((TREE_CODE (type) != INTEGER_TYPE + && TREE_CODE (type) != FIXED_POINT_TYPE) + || !type_has_mode_precision_p (type)) return false; if (code == MINUS_EXPR) From ded646c91d2c0fb908faf6fa8fe1df0d7df49d16 Mon Sep 17 00:00:00 2001 From: Harald Anlauf <anlauf@gmx.de> Date: Tue, 9 Apr 2024 23:07:59 +0200 Subject: [PATCH 480/551] Fortran: fix argument checking of intrinsics C_SIZEOF, C_F_POINTER [PR106500] The interpretation of the F2018 standard regarding valid arguments to the intrinsic C_SIZEOF(X) was clarified in an edit to 18-007r1: https://j3-fortran.org/doc/year/22/22-101r1.txt loosening restrictions and giving examples. The F2023 text has: ! F2023:18.2.3.8 C_SIZEOF (X) ! ! X shall be a data entity with interoperable type and type parameters, ! and shall not be an assumed-size array, an assumed-rank array that ! is associated with an assumed-size array, an unallocated allocatable ! variable, or a pointer that is not associated. where ! 3.41 data entity ! data object, result of the evaluation of an expression, or the ! result of the execution of a function reference Update the checking code for interoperable arguments accordingly, and extend to reject functions returning pointer as FPTR argument to C_F_POINTER. gcc/fortran/ChangeLog: PR fortran/106500 * check.cc (is_c_interoperable): Fix checks for C_SIZEOF. (gfc_check_c_f_pointer): Reject function returning a pointer as FPTR, and improve an error message. gcc/testsuite/ChangeLog: PR fortran/106500 * gfortran.dg/c_sizeof_6.f90: Remove wrong dg-error. * gfortran.dg/sizeof_2.f90: Adjust pattern. * gfortran.dg/c_f_pointer_tests_9.f90: New test. * gfortran.dg/c_sizeof_7.f90: New test. --- gcc/fortran/check.cc | 26 +++++++----- .../gfortran.dg/c_f_pointer_tests_9.f90 | 37 ++++++++++++++++ gcc/testsuite/gfortran.dg/c_sizeof_6.f90 | 2 +- gcc/testsuite/gfortran.dg/c_sizeof_7.f90 | 42 +++++++++++++++++++ gcc/testsuite/gfortran.dg/sizeof_2.f90 | 2 +- 5 files changed, 96 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/c_f_pointer_tests_9.f90 create mode 100644 gcc/testsuite/gfortran.dg/c_sizeof_7.f90 diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index db74dcf3f40b..2f50d84b876f 100644 --- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -5299,18 +5299,14 @@ is_c_interoperable (gfc_expr *expr, const char **msg, bool c_loc, bool c_f_ptr) return false; } - if (!c_loc && expr->rank > 0 && expr->expr_type != EXPR_ARRAY) + /* Checks for C_SIZEOF need to take into account edits to 18-007r1, see + https://j3-fortran.org/doc/year/22/22-101r1.txt . */ + if (!c_loc && !c_f_ptr && expr->rank > 0 && expr->expr_type == EXPR_VARIABLE) { gfc_array_ref *ar = gfc_find_array_ref (expr); - if (ar->type != AR_FULL) + if (ar->type == AR_FULL && ar->as->type == AS_ASSUMED_SIZE) { - *msg = "Only whole-arrays are interoperable"; - return false; - } - if (!c_f_ptr && ar->as->type != AS_EXPLICIT - && ar->as->type != AS_ASSUMED_SIZE) - { - *msg = "Only explicit-size and assumed-size arrays are interoperable"; + *msg = "Assumed-size arrays are not interoperable"; return false; } } @@ -5475,9 +5471,17 @@ gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *fptr, gfc_expr *shape) return false; } + if (fptr->ts.type == BT_PROCEDURE && attr.function) + { + gfc_error ("FPTR argument to C_F_POINTER at %L is a function " + "returning a pointer", &fptr->where); + return false; + } + if (fptr->rank > 0 && !is_c_interoperable (fptr, &msg, false, true)) - return gfc_notify_std (GFC_STD_F2018, "Noninteroperable array FPTR " - "at %L to C_F_POINTER: %s", &fptr->where, msg); + return gfc_notify_std (GFC_STD_F2018, + "Noninteroperable array FPTR argument to " + "C_F_POINTER at %L: %s", &fptr->where, msg); return true; } diff --git a/gcc/testsuite/gfortran.dg/c_f_pointer_tests_9.f90 b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_9.f90 new file mode 100644 index 000000000000..8c8b4a713a4e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/c_f_pointer_tests_9.f90 @@ -0,0 +1,37 @@ +! { dg-do compile } +! +! A function returning a pointer cannot be interoperable +! and cannot be used as FPTR argument to C_F_POINTER. + +subroutine s () + use, intrinsic :: iso_c_binding + implicit none + type(c_ptr) :: cPtr + call c_f_pointer (cPtr, p0) ! { dg-error "function returning a pointer" } + call c_f_pointer (cPtr, p1, shape=[2]) ! { dg-error "function returning a pointer" } +contains + function p0 () + integer, pointer :: p0 + nullify (p0) + end + function p1 () + integer, pointer :: p1(:) + nullify (p1) + end + function fp0 () + integer, pointer :: fp0 + call c_f_pointer (cPtr, fp0) ! valid here + end + function fp1 () + integer, pointer :: fp1(:) + call c_f_pointer (cPtr, fp1, shape=[2]) ! valid here + end + function ffp0 () result (fp0) + integer, pointer :: fp0 + call c_f_pointer (cPtr, fp0) ! valid here + end + function ffp1 () result (fp1) + integer, pointer :: fp1(:) + call c_f_pointer (cPtr, fp1, shape=[2]) ! valid here + end +end diff --git a/gcc/testsuite/gfortran.dg/c_sizeof_6.f90 b/gcc/testsuite/gfortran.dg/c_sizeof_6.f90 index a676a5b89862..7043ac6ca99a 100644 --- a/gcc/testsuite/gfortran.dg/c_sizeof_6.f90 +++ b/gcc/testsuite/gfortran.dg/c_sizeof_6.f90 @@ -8,7 +8,7 @@ program foo character(kind=c_char,len=1),parameter :: str2(4) = ["a","b","c","d"] - i = c_sizeof(str2(1:3)) ! { dg-error "must be an interoperable data" } + i = c_sizeof(str2(1:3)) if (i /= 3) STOP 1 diff --git a/gcc/testsuite/gfortran.dg/c_sizeof_7.f90 b/gcc/testsuite/gfortran.dg/c_sizeof_7.f90 new file mode 100644 index 000000000000..04a0bddbcaad --- /dev/null +++ b/gcc/testsuite/gfortran.dg/c_sizeof_7.f90 @@ -0,0 +1,42 @@ +! { dg-do compile } +! PR fortran/106500 - fix checking of arguments to C_SIZEOF +! +! Check support of the following EDIT to 18-007r1: +! https://j3-fortran.org/doc/year/22/22-101r1.txt + +subroutine foo (n, x, y, z, w, u) + use, intrinsic :: iso_c_binding + implicit none + integer, intent(in) :: n + real :: x(n) + real :: y(:) + real :: z(2,*) + real :: w(..) + real, allocatable :: a(:) + real, pointer :: b(:) + type t + real, allocatable :: a(:) + end type t + type(t) :: u + + print *, c_sizeof (x) + print *, c_sizeof (x(::2)) + print *, c_sizeof (x+1) + print *, c_sizeof (y) + print *, c_sizeof (y(1:2)) + print *, c_sizeof (z(:,1:2)) + print *, c_sizeof (w) + print *, c_sizeof (1._c_float) + ! + allocate (a(n)) + allocate (b(n)) + if (.not. allocated (u%a)) allocate (u%a(n)) + print *, c_sizeof (a) + print *, c_sizeof (b) + ! + print *, c_sizeof (u%a) + print *, c_sizeof (u%a(1:2)) + ! + print *, c_sizeof (z) ! { dg-error "Assumed-size arrays are not interoperable" } + print *, c_sizeof (u) ! { dg-error "Expression is a noninteroperable derived type" } +end diff --git a/gcc/testsuite/gfortran.dg/sizeof_2.f90 b/gcc/testsuite/gfortran.dg/sizeof_2.f90 index e6661a56b307..d1655c63449c 100644 --- a/gcc/testsuite/gfortran.dg/sizeof_2.f90 +++ b/gcc/testsuite/gfortran.dg/sizeof_2.f90 @@ -15,7 +15,7 @@ subroutine foo(x, y) ii = storage_size (x) ! { dg-error "Assumed-type argument at .1. is not permitted as actual argument to the intrinsic storage_size" } ii = sizeof (y) ! { dg-error "shall not be an assumed-size array" } - ii = c_sizeof (y) ! { dg-error "shall not be an assumed-size array" } + ii = c_sizeof (y) ! { dg-error "\[Aa\]ssumed-size array" } ii = storage_size (y) ! okay, element-size is known ii = sizeof (proc) ! { dg-error "shall not be a procedure" } From 19b98410eb43be60f7e2673afeaabd016321c625 Mon Sep 17 00:00:00 2001 From: Joseph Myers <josmyers@redhat.com> Date: Wed, 10 Apr 2024 17:11:07 +0000 Subject: [PATCH 481/551] Regenerate gcc.pot * gcc.pot: Regenerate. --- gcc/po/gcc.pot | 16413 ++++++++++++++++++++++++----------------------- 1 file changed, 8369 insertions(+), 8044 deletions(-) diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot index 94f6fe77053b..70c952734a37 100644 --- a/gcc/po/gcc.pot +++ b/gcc/po/gcc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" -"POT-Creation-Date: 2024-02-16 21:35+0000\n" +"POT-Creation-Date: 2024-04-10 17:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -367,7 +367,7 @@ msgstr "" msgid "consider using `-pg' instead of `-p' with gprof (1)" msgstr "" -#: config/arc/arc.h:68 config/mips/mips.h:1502 +#: config/arc/arc.h:68 config/mips/mips.h:1505 msgid "may not use both -EB and -EL" msgstr "" @@ -446,7 +446,7 @@ msgstr "" msgid "consider using `-pg' instead of `-p' with gprof(1)" msgstr "" -#: config/rs6000/rs6000.h:170 +#: config/rs6000/rs6000.h:168 msgid "Missing -mcpu option in ASM_CPU_SPEC?" msgstr "" @@ -543,11 +543,11 @@ msgstr "" msgid "Warn about creation of array temporaries." msgstr "" -#: fortran/lang.opt:214 fortran/lang.opt:539 c-family/c.opt:1590 -#: config/alpha/alpha.opt:31 common.opt:685 common.opt:831 common.opt:1074 -#: common.opt:1078 common.opt:1082 common.opt:1086 common.opt:1814 -#: common.opt:1917 common.opt:2094 common.opt:2098 common.opt:2377 -#: common.opt:2595 common.opt:3362 +#: fortran/lang.opt:214 fortran/lang.opt:539 c-family/c.opt:1594 +#: config/alpha/alpha.opt:31 common.opt:685 common.opt:831 common.opt:1079 +#: common.opt:1083 common.opt:1087 common.opt:1091 common.opt:1819 +#: common.opt:1922 common.opt:2099 common.opt:2103 common.opt:2382 +#: common.opt:2604 common.opt:3371 #, no-c-format msgid "Does nothing. Preserved for backward compatibility." msgstr "" @@ -1163,19 +1163,19 @@ msgstr "" msgid "Append underscores to externally visible names." msgstr "" -#: fortran/lang.opt:832 c-family/c.opt:1725 c-family/c.opt:1802 -#: c-family/c.opt:1810 c-family/c.opt:2141 config/xtensa/xtensa.opt:42 +#: fortran/lang.opt:832 c-family/c.opt:1729 c-family/c.opt:1806 +#: c-family/c.opt:1814 c-family/c.opt:2145 config/xtensa/xtensa.opt:42 #: config/pa/pa.opt:46 config/pa/pa.opt:78 config/arc/arc.opt:140 #: config/arc/arc.opt:296 config/arc/arc.opt:304 config/arc/arc.opt:308 #: config/arc/arc.opt:312 config/arc/arc.opt:317 config/arc/arc.opt:326 -#: common.opt:643 common.opt:1172 common.opt:1176 common.opt:1180 -#: common.opt:1275 common.opt:1604 common.opt:1686 common.opt:2046 -#: common.opt:2189 common.opt:2232 common.opt:2673 common.opt:2709 -#: common.opt:2802 common.opt:2806 common.opt:2915 common.opt:3050 -#: common.opt:3058 common.opt:3066 common.opt:3074 common.opt:3175 -#: common.opt:3235 common.opt:3323 common.opt:3487 common.opt:3491 -#: common.opt:3495 common.opt:3499 common.opt:3569 common.opt:3573 -#: common.opt:3604 common.opt:3608 +#: common.opt:643 common.opt:1177 common.opt:1181 common.opt:1185 +#: common.opt:1280 common.opt:1609 common.opt:1691 common.opt:2051 +#: common.opt:2194 common.opt:2237 common.opt:2682 common.opt:2718 +#: common.opt:2811 common.opt:2815 common.opt:2924 common.opt:3059 +#: common.opt:3067 common.opt:3075 common.opt:3083 common.opt:3184 +#: common.opt:3244 common.opt:3332 common.opt:3496 common.opt:3500 +#: common.opt:3504 common.opt:3508 common.opt:3578 common.opt:3582 +#: common.opt:3613 common.opt:3617 #, no-c-format msgid "Does nothing. Preserved for backward compatibility." msgstr "" @@ -1230,19 +1230,19 @@ msgstr "" msgid "Accept extensions to support legacy code." msgstr "" -#: rust/lang.opt:47 rust/lang.opt:51 c-family/c.opt:1461 c-family/c.opt:1465 +#: rust/lang.opt:47 rust/lang.opt:51 c-family/c.opt:1465 c-family/c.opt:1469 #, no-c-format msgid "Warn when a const variable is unused." msgstr "" -#: rust/lang.opt:55 c-family/c.opt:1477 +#: rust/lang.opt:55 c-family/c.opt:1481 #, no-c-format msgid "" "Warn if a caller of a function, marked with attribute warn_unused_result, " "does not use its return value." msgstr "" -#: rust/lang.opt:59 c-family/c.opt:846 common.opt:654 +#: rust/lang.opt:59 c-family/c.opt:850 common.opt:654 #, no-c-format msgid "Warn for infinitely recursive calls." msgstr "" @@ -1736,14 +1736,14 @@ msgstr "" msgid "Warn about subscripts whose type is \"char\"." msgstr "" -#: c-family/c.opt:535 c-family/c.opt:1622 c-family/c.opt:1626 -#: c-family/c.opt:1630 c-family/c.opt:1634 c-family/c.opt:1638 -#: c-family/c.opt:1642 c-family/c.opt:1646 c-family/c.opt:1653 -#: c-family/c.opt:1657 c-family/c.opt:1661 c-family/c.opt:1665 -#: c-family/c.opt:1669 c-family/c.opt:1673 c-family/c.opt:1677 -#: c-family/c.opt:1681 c-family/c.opt:1685 c-family/c.opt:1689 -#: c-family/c.opt:1693 c-family/c.opt:1697 c-family/c.opt:1701 -#: config/i386/i386.opt:1018 +#: c-family/c.opt:535 c-family/c.opt:1626 c-family/c.opt:1630 +#: c-family/c.opt:1634 c-family/c.opt:1638 c-family/c.opt:1642 +#: c-family/c.opt:1646 c-family/c.opt:1650 c-family/c.opt:1657 +#: c-family/c.opt:1661 c-family/c.opt:1665 c-family/c.opt:1669 +#: c-family/c.opt:1673 c-family/c.opt:1677 c-family/c.opt:1681 +#: c-family/c.opt:1685 c-family/c.opt:1689 c-family/c.opt:1693 +#: c-family/c.opt:1697 c-family/c.opt:1701 c-family/c.opt:1705 +#: config/i386/i386.opt:1022 #, no-c-format msgid "Removed in GCC 9. This switch has no effect." msgstr "" @@ -2078,621 +2078,628 @@ msgstr "" #: c-family/c.opt:807 #, no-c-format -msgid "Warn when the field in a struct is not aligned." +msgid "" +"Warn about the global module fragment not containing only preprocessing " +"directives." msgstr "" #: c-family/c.opt:811 #, no-c-format -msgid "Warn whenever type qualifiers are ignored." +msgid "Warn when the field in a struct is not aligned." msgstr "" #: c-family/c.opt:815 #, no-c-format -msgid "Warn whenever attributes are ignored." +msgid "Warn whenever type qualifiers are ignored." msgstr "" #: c-family/c.opt:819 #, no-c-format +msgid "Warn whenever attributes are ignored." +msgstr "" + +#: c-family/c.opt:823 +#, no-c-format msgid "Warn about implicit declarations." msgstr "" -#: c-family/c.opt:827 +#: c-family/c.opt:831 #, no-c-format msgid "Warn about implicit function declarations." msgstr "" -#: c-family/c.opt:831 +#: c-family/c.opt:835 #, no-c-format msgid "Warn when a declaration does not specify a type." msgstr "" -#: c-family/c.opt:838 +#: c-family/c.opt:842 #, no-c-format msgid "Warn when a base is inaccessible in derived due to ambiguity." msgstr "" -#: c-family/c.opt:842 +#: c-family/c.opt:846 #, no-c-format msgid "" "Warn when there is a conversion between pointers that have incompatible " "types." msgstr "" -#: c-family/c.opt:850 +#: c-family/c.opt:854 #, no-c-format msgid "Warn about variables which are initialized to themselves." msgstr "" -#: c-family/c.opt:854 +#: c-family/c.opt:858 #, no-c-format msgid "" "Warn about uses of std::initializer_list that can result in dangling " "pointers." msgstr "" -#: c-family/c.opt:858 +#: c-family/c.opt:862 #, no-c-format msgid "" "Warn about nonsensical values of --param destructive-interference-size or " "constructive-interference-size." msgstr "" -#: c-family/c.opt:863 +#: c-family/c.opt:867 #, no-c-format msgid "" "Warn about C++11 inheriting constructors when the base has a variadic " "constructor." msgstr "" -#: c-family/c.opt:867 +#: c-family/c.opt:871 #, no-c-format msgid "" "Warn about incompatible integer to pointer and pointer to integer " "conversions." msgstr "" -#: c-family/c.opt:871 +#: c-family/c.opt:875 #, no-c-format msgid "Warn for suspicious integer expressions in boolean context." msgstr "" -#: c-family/c.opt:875 +#: c-family/c.opt:879 #, no-c-format msgid "" "Warn when there is a cast to a pointer from an integer of a different size." msgstr "" -#: c-family/c.opt:879 +#: c-family/c.opt:883 #, no-c-format msgid "Warn when a function never produces a constant expression." msgstr "" -#: c-family/c.opt:883 +#: c-family/c.opt:887 #, no-c-format msgid "Warn about invalid uses of the \"offsetof\" macro." msgstr "" -#: c-family/c.opt:887 +#: c-family/c.opt:891 #, no-c-format msgid "Warn about PCH files that are found but not used." msgstr "" -#: c-family/c.opt:891 +#: c-family/c.opt:895 #, no-c-format msgid "Warn about invalid UTF-8 characters." msgstr "" -#: c-family/c.opt:895 +#: c-family/c.opt:899 #, no-c-format msgid "Warn when a jump misses a variable initialization." msgstr "" -#: c-family/c.opt:899 +#: c-family/c.opt:903 #, no-c-format msgid "" "Warn when a string or character literal is followed by a ud-suffix which " "does not begin with an underscore." msgstr "" -#: c-family/c.opt:903 +#: c-family/c.opt:907 #, no-c-format msgid "" "Warn when logical not is used on the left hand side operand of a comparison." msgstr "" -#: c-family/c.opt:907 +#: c-family/c.opt:911 #, no-c-format msgid "" "Warn when a logical operator is suspiciously always evaluating to true or " "false." msgstr "" -#: c-family/c.opt:911 +#: c-family/c.opt:915 #, no-c-format msgid "Do not warn about using \"long long\" when -pedantic." msgstr "" -#: c-family/c.opt:915 +#: c-family/c.opt:919 #, no-c-format msgid "Warn about suspicious declarations of \"main\"." msgstr "" -#: c-family/c.opt:927 +#: c-family/c.opt:931 #, no-c-format msgid "" "Warn about suspicious calls to memset where the third argument contains the " "number of elements not multiplied by the element size." msgstr "" -#: c-family/c.opt:931 +#: c-family/c.opt:935 #, no-c-format msgid "" "Warn about suspicious calls to memset where the third argument is constant " "literal zero and the second is not." msgstr "" -#: c-family/c.opt:935 +#: c-family/c.opt:939 #, no-c-format msgid "" "Warn when the indentation of the code does not reflect the block structure." msgstr "" -#: c-family/c.opt:939 +#: c-family/c.opt:943 #, no-c-format msgid "" "Warn for deallocation calls with arguments returned from mismatched " "allocation functions." msgstr "" -#: c-family/c.opt:944 +#: c-family/c.opt:948 #, no-c-format msgid "" "Warn for mismatches between calls to operator new or delete and the " "corresponding call to the allocation or deallocation function." msgstr "" -#: c-family/c.opt:949 +#: c-family/c.opt:953 #, no-c-format msgid "" "Warn when a class is redeclared or referenced using a mismatched class-key." msgstr "" -#: c-family/c.opt:953 +#: c-family/c.opt:957 #, no-c-format msgid "" "Warn about declarations of entities that may be missing attributes that " "related entities have been declared with." msgstr "" -#: c-family/c.opt:958 +#: c-family/c.opt:962 #, no-c-format msgid "Warn about possibly missing braces around initializers." msgstr "" -#: c-family/c.opt:962 +#: c-family/c.opt:966 #, no-c-format msgid "Warn about global functions without previous declarations." msgstr "" -#: c-family/c.opt:966 +#: c-family/c.opt:970 #, no-c-format msgid "Warn about missing fields in struct initializers." msgstr "" -#: c-family/c.opt:974 +#: c-family/c.opt:978 #, no-c-format msgid "Warn about user-specified include directories that do not exist." msgstr "" -#: c-family/c.opt:978 +#: c-family/c.opt:982 #, no-c-format msgid "" "Warn about function parameters declared without a type specifier in K&R-" "style functions." msgstr "" -#: c-family/c.opt:982 +#: c-family/c.opt:986 #, no-c-format msgid "Warn about global functions without prototypes." msgstr "" -#: c-family/c.opt:986 +#: c-family/c.opt:990 #, no-c-format msgid "Warn about likely missing requires keyword." msgstr "" -#: c-family/c.opt:990 +#: c-family/c.opt:994 #, no-c-format msgid "" "Warn when the template keyword is missing after a member access token in a " "dependent member access expression if that member is a template." msgstr "" -#: c-family/c.opt:994 +#: c-family/c.opt:998 #, no-c-format msgid "Warn about global variables without previous declarations." msgstr "" -#: c-family/c.opt:1001 +#: c-family/c.opt:1005 #, no-c-format msgid "Warn about use of multi-character character constants." msgstr "" -#: c-family/c.opt:1005 +#: c-family/c.opt:1009 #, no-c-format msgid "Warn on direct multiple inheritance." msgstr "" -#: c-family/c.opt:1009 +#: c-family/c.opt:1013 #, no-c-format msgid "" "Warn about unsafe macros expanding to multiple statements used as a body of " "a clause such as if, else, while, switch, or for." msgstr "" -#: c-family/c.opt:1013 +#: c-family/c.opt:1017 #, no-c-format msgid "Warn on namespace definition." msgstr "" -#: c-family/c.opt:1017 +#: c-family/c.opt:1021 #, no-c-format msgid "" "Warn about narrowing conversions within { } that are ill-formed in C++11." msgstr "" -#: c-family/c.opt:1021 +#: c-family/c.opt:1025 #, no-c-format msgid "Warn about \"extern\" declarations not at file scope." msgstr "" -#: c-family/c.opt:1025 +#: c-family/c.opt:1029 #, no-c-format msgid "" "Warn when a noexcept expression evaluates to false even though the " "expression can't actually throw." msgstr "" -#: c-family/c.opt:1029 +#: c-family/c.opt:1033 #, no-c-format msgid "" "Warn if C++17 noexcept function type will change the mangled name of a " "symbol." msgstr "" -#: c-family/c.opt:1033 +#: c-family/c.opt:1037 #, no-c-format msgid "" "Warn when non-templatized friend functions are declared within a template." msgstr "" -#: c-family/c.opt:1037 +#: c-family/c.opt:1041 #, no-c-format msgid "Warn about non-virtual destructors." msgstr "" -#: c-family/c.opt:1041 +#: c-family/c.opt:1045 #, no-c-format msgid "" "Warn about NULL being passed to argument slots marked as requiring non-NULL." msgstr "" -#: c-family/c.opt:1057 +#: c-family/c.opt:1061 #, no-c-format msgid "" "-Wnormalized=[none|id|nfc|nfkc]\tWarn about non-normalized Unicode strings." msgstr "" -#: c-family/c.opt:1080 +#: c-family/c.opt:1084 #, no-c-format msgid "" "Warn if a class interface has no superclass. Root classes may use an " "attribute to suppress this warning." msgstr "" -#: c-family/c.opt:1085 +#: c-family/c.opt:1089 #, no-c-format msgid "Warn if a C-style cast is used in a program." msgstr "" -#: c-family/c.opt:1089 +#: c-family/c.opt:1093 #, no-c-format msgid "Warn for obsolescent usage in a declaration." msgstr "" -#: c-family/c.opt:1093 +#: c-family/c.opt:1097 #, no-c-format msgid "Warn if an old-style parameter definition is used." msgstr "" -#: c-family/c.opt:1097 +#: c-family/c.opt:1101 #, no-c-format msgid "" "Warn about potentially suboptimal choices related to OpenACC parallelism." msgstr "" -#: c-family/c.opt:1101 +#: c-family/c.opt:1105 #, no-c-format msgid "Warn about suspicious OpenMP code." msgstr "" -#: c-family/c.opt:1105 +#: c-family/c.opt:1109 #, no-c-format msgid "Warn if a simd directive is overridden by the vectorizer cost model." msgstr "" -#: c-family/c.opt:1109 +#: c-family/c.opt:1113 #, no-c-format msgid "" "Warn if a string is longer than the maximum portable length specified by the " "standard." msgstr "" -#: c-family/c.opt:1113 c-family/c.opt:1117 +#: c-family/c.opt:1117 c-family/c.opt:1121 #, no-c-format msgid "Warn about overloaded virtual function names." msgstr "" -#: c-family/c.opt:1121 +#: c-family/c.opt:1125 #, no-c-format msgid "Warn about overriding initializers without side effects." msgstr "" -#: c-family/c.opt:1125 +#: c-family/c.opt:1129 #, no-c-format msgid "Warn about overriding initializers with side effects." msgstr "" -#: c-family/c.opt:1129 +#: c-family/c.opt:1133 #, no-c-format msgid "" "Warn if the named return value optimization is not performed although it is " "allowed." msgstr "" -#: c-family/c.opt:1133 +#: c-family/c.opt:1137 #, no-c-format msgid "Warn about packed bit-fields whose offset changed in GCC 4.4." msgstr "" -#: c-family/c.opt:1137 +#: c-family/c.opt:1141 #, no-c-format msgid "Warn when fields in a struct with the packed attribute are misaligned." msgstr "" -#: c-family/c.opt:1141 +#: c-family/c.opt:1145 #, no-c-format msgid "Warn about possibly missing parentheses." msgstr "" -#: c-family/c.opt:1149 +#: c-family/c.opt:1153 #, no-c-format msgid "" "Warn about calling std::move on a local object in a return statement " "preventing copy elision." msgstr "" -#: c-family/c.opt:1153 c-family/c.opt:1157 +#: c-family/c.opt:1157 c-family/c.opt:1161 #, no-c-format msgid "Warn for placement new expressions with undefined behavior." msgstr "" -#: c-family/c.opt:1161 +#: c-family/c.opt:1165 #, no-c-format msgid "Warn when converting the type of pointers to member functions." msgstr "" -#: c-family/c.opt:1165 +#: c-family/c.opt:1169 #, no-c-format msgid "Warn about function pointer arithmetic." msgstr "" -#: c-family/c.opt:1169 +#: c-family/c.opt:1173 #, no-c-format msgid "Warn when a pointer differs in signedness in an assignment." msgstr "" -#: c-family/c.opt:1173 +#: c-family/c.opt:1177 #, no-c-format msgid "Warn when a pointer is compared with a zero character constant." msgstr "" -#: c-family/c.opt:1177 +#: c-family/c.opt:1181 #, no-c-format msgid "Warn when a pointer is cast to an integer of a different size." msgstr "" -#: c-family/c.opt:1181 +#: c-family/c.opt:1185 #, no-c-format msgid "Warn about misuses of pragmas." msgstr "" -#: c-family/c.opt:1185 +#: c-family/c.opt:1189 #, no-c-format msgid "" "Warn if constructor or destructors with priorities from 0 to 100 are used." msgstr "" -#: c-family/c.opt:1189 +#: c-family/c.opt:1193 #, no-c-format msgid "" "Warn if a property for an Objective-C object has no assign semantics " "specified." msgstr "" -#: c-family/c.opt:1193 +#: c-family/c.opt:1197 #, no-c-format msgid "Warn if inherited methods are unimplemented." msgstr "" -#: c-family/c.opt:1197 +#: c-family/c.opt:1201 #, no-c-format msgid "Warn when a range-based for-loop is creating unnecessary copies." msgstr "" -#: c-family/c.opt:1201 +#: c-family/c.opt:1205 #, no-c-format msgid "Warn about multiple declarations of the same object." msgstr "" -#: c-family/c.opt:1205 +#: c-family/c.opt:1209 #, no-c-format msgid "Warn about redundant calls to std::move." msgstr "" -#: c-family/c.opt:1209 +#: c-family/c.opt:1213 #, no-c-format msgid "" "Warn when a class or enumerated type is referenced using a redundant class-" "key." msgstr "" -#: c-family/c.opt:1213 +#: c-family/c.opt:1217 #, no-c-format msgid "Warn about uses of register storage specifier." msgstr "" -#: c-family/c.opt:1217 +#: c-family/c.opt:1221 #, no-c-format msgid "Warn when the compiler reorders code." msgstr "" -#: c-family/c.opt:1221 +#: c-family/c.opt:1225 #, no-c-format msgid "" "Warn when an argument passed to a restrict-qualified parameter aliases with " "another argument." msgstr "" -#: c-family/c.opt:1226 +#: c-family/c.opt:1230 #, no-c-format msgid "" "Warn whenever void-returning functions return a non-void expressions, or a " "return expression is missing in a function not returning void." msgstr "" -#: c-family/c.opt:1230 +#: c-family/c.opt:1234 #, no-c-format msgid "" "Warn whenever a function's return type defaults to \"int\" (C), or about " "inconsistent return types (C++)." msgstr "" -#: c-family/c.opt:1234 +#: c-family/c.opt:1238 #, no-c-format msgid "Warn on suspicious constructs involving reverse scalar storage order." msgstr "" -#: c-family/c.opt:1238 +#: c-family/c.opt:1242 #, no-c-format msgid "Warn if a selector has multiple methods." msgstr "" -#: c-family/c.opt:1242 +#: c-family/c.opt:1246 #, no-c-format msgid "Warn when a value is moved to itself with std::move." msgstr "" -#: c-family/c.opt:1246 +#: c-family/c.opt:1250 #, no-c-format msgid "Warn about possible violations of sequence point rules." msgstr "" -#: c-family/c.opt:1250 +#: c-family/c.opt:1254 #, no-c-format msgid "Warn if a local declaration hides an instance variable." msgstr "" -#: c-family/c.opt:1254 c-family/c.opt:1258 +#: c-family/c.opt:1258 c-family/c.opt:1262 #, no-c-format msgid "Warn if left shift of a signed value overflows." msgstr "" -#: c-family/c.opt:1262 +#: c-family/c.opt:1266 #, no-c-format msgid "Warn if shift count is negative." msgstr "" -#: c-family/c.opt:1266 +#: c-family/c.opt:1270 #, no-c-format msgid "Warn if shift count >= width of type." msgstr "" -#: c-family/c.opt:1270 +#: c-family/c.opt:1274 #, no-c-format msgid "Warn if left shifting a negative value." msgstr "" -#: c-family/c.opt:1274 +#: c-family/c.opt:1278 #, no-c-format msgid "Warn about signed-unsigned comparisons." msgstr "" -#: c-family/c.opt:1282 +#: c-family/c.opt:1286 #, no-c-format msgid "" "Warn for implicit type conversions between signed and unsigned integers." msgstr "" -#: c-family/c.opt:1286 +#: c-family/c.opt:1290 #, no-c-format msgid "Warn when overload promotes from unsigned to signed." msgstr "" -#: c-family/c.opt:1290 +#: c-family/c.opt:1294 #, no-c-format msgid "Warn about missing sized deallocation functions." msgstr "" -#: c-family/c.opt:1294 +#: c-family/c.opt:1298 #, no-c-format msgid "" "Warn about divisions of two sizeof operators when the first one is applied " "to an array and the divisor does not equal the size of the array element." msgstr "" -#: c-family/c.opt:1299 +#: c-family/c.opt:1303 #, no-c-format msgid "Warn when sizeof is applied on a parameter declared as an array." msgstr "" -#: c-family/c.opt:1303 +#: c-family/c.opt:1307 #, no-c-format msgid "" "Warn about suspicious divisions of two sizeof expressions that don't work " "correctly with pointers." msgstr "" -#: c-family/c.opt:1307 +#: c-family/c.opt:1311 #, no-c-format msgid "" "Warn about suspicious length parameters to certain string functions if the " "argument uses sizeof." msgstr "" -#: c-family/c.opt:1315 +#: c-family/c.opt:1319 #, no-c-format msgid "" "Warn about inproper usages of flexible array members according to the level " "of -fstrict-flex-arrays." msgstr "" -#: c-family/c.opt:1320 +#: c-family/c.opt:1324 #, no-c-format msgid "Warn about uncasted NULL used as sentinel." msgstr "" -#: c-family/c.opt:1328 +#: c-family/c.opt:1332 #, no-c-format msgid "Warn about unprototyped function declarations." msgstr "" -#: c-family/c.opt:1332 +#: c-family/c.opt:1336 #, no-c-format msgid "Warn if type signatures of candidate methods do not match exactly." msgstr "" -#: c-family/c.opt:1336 +#: c-family/c.opt:1340 #, no-c-format msgid "" "Warn about calls to strcmp and strncmp used in equality expressions that are " @@ -2700,197 +2707,197 @@ msgid "" "argument." msgstr "" -#: c-family/c.opt:1342 +#: c-family/c.opt:1346 #, no-c-format msgid "" "Warn about buffer overflow in string manipulation functions like memcpy and " "strcpy." msgstr "" -#: c-family/c.opt:1347 +#: c-family/c.opt:1351 #, no-c-format msgid "" "Under the control of Object Size type, warn about buffer overflow in string " "manipulation functions like memcpy and strcpy." msgstr "" -#: c-family/c.opt:1352 +#: c-family/c.opt:1356 #, no-c-format msgid "" "Warn about reading past the end of a source array in string manipulation " "functions like memchr and memcpy." msgstr "" -#: c-family/c.opt:1356 +#: c-family/c.opt:1360 #, no-c-format msgid "" "Warn about truncation in string manipulation functions like strncat and " "strncpy." msgstr "" -#: c-family/c.opt:1360 +#: c-family/c.opt:1364 #, no-c-format msgid "" "Warn if a class type has a base or a field whose type uses the anonymous " "namespace or depends on a type with no linkage." msgstr "" -#: c-family/c.opt:1364 +#: c-family/c.opt:1368 #, no-c-format msgid "Warn about functions which might be candidates for format attributes." msgstr "" -#: c-family/c.opt:1368 +#: c-family/c.opt:1372 #, no-c-format msgid "" "Suggest that the override keyword be used when the declaration of a virtual " "function overrides another." msgstr "" -#: c-family/c.opt:1373 +#: c-family/c.opt:1377 #, no-c-format msgid "Warn about enumerated switches, with no default, missing a case." msgstr "" -#: c-family/c.opt:1377 +#: c-family/c.opt:1381 #, no-c-format msgid "Warn about enumerated switches missing a \"default:\" statement." msgstr "" -#: c-family/c.opt:1381 +#: c-family/c.opt:1385 #, no-c-format msgid "Warn about all enumerated switches missing a specific case." msgstr "" -#: c-family/c.opt:1385 +#: c-family/c.opt:1389 #, no-c-format msgid "Warn about switches with boolean controlling expression." msgstr "" -#: c-family/c.opt:1389 +#: c-family/c.opt:1393 #, no-c-format msgid "Warn about switch values that are outside of the switch's type range." msgstr "" -#: c-family/c.opt:1393 +#: c-family/c.opt:1397 #, no-c-format msgid "" "Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions " "are used." msgstr "" -#: c-family/c.opt:1397 +#: c-family/c.opt:1401 #, no-c-format msgid "Deprecated. This switch has no effect." msgstr "" -#: c-family/c.opt:1405 +#: c-family/c.opt:1409 #, no-c-format msgid "Warn on primary template declaration." msgstr "" -#: c-family/c.opt:1409 +#: c-family/c.opt:1413 #, no-c-format msgid "Warn if a comparison always evaluates to true or false." msgstr "" -#: c-family/c.opt:1413 +#: c-family/c.opt:1417 #, no-c-format msgid "Warn about simple-template-id in a constructor or destructor." msgstr "" -#: c-family/c.opt:1417 +#: c-family/c.opt:1421 #, no-c-format msgid "Warn if a throw expression will always result in a call to terminate()." msgstr "" -#: c-family/c.opt:1421 +#: c-family/c.opt:1425 #, no-c-format msgid "Warn about features not present in traditional C." msgstr "" -#: c-family/c.opt:1425 +#: c-family/c.opt:1429 #, no-c-format msgid "" "Warn of prototypes causing type conversions different from what would happen " "in the absence of prototype." msgstr "" -#: c-family/c.opt:1429 +#: c-family/c.opt:1433 #, no-c-format msgid "" "Warn if trigraphs are encountered that might affect the meaning of the " "program." msgstr "" -#: c-family/c.opt:1433 +#: c-family/c.opt:1437 #, no-c-format msgid "Warn about @selector()s without previously declared methods." msgstr "" -#: c-family/c.opt:1437 +#: c-family/c.opt:1441 #, no-c-format msgid "Warn if an undefined macro is used in an #if directive." msgstr "" -#: c-family/c.opt:1441 +#: c-family/c.opt:1445 #, no-c-format msgid "Warn about invalid forms of delimited or named escape sequences." msgstr "" -#: c-family/c.opt:1449 +#: c-family/c.opt:1453 #, no-c-format msgid "Warn about unrecognized pragmas." msgstr "" -#: c-family/c.opt:1453 +#: c-family/c.opt:1457 #, no-c-format msgid "Warn about unsuffixed float constants." msgstr "" -#: c-family/c.opt:1469 +#: c-family/c.opt:1473 #, no-c-format msgid "Warn when typedefs locally defined in a function are not used." msgstr "" -#: c-family/c.opt:1473 +#: c-family/c.opt:1477 #, no-c-format msgid "Warn about macros defined in the main file that are not used." msgstr "" -#: c-family/c.opt:1493 +#: c-family/c.opt:1497 #, no-c-format msgid "Warn about useless casts." msgstr "" -#: c-family/c.opt:1497 +#: c-family/c.opt:1501 #, no-c-format msgid "Warn about using variadic macros." msgstr "" -#: c-family/c.opt:1501 +#: c-family/c.opt:1505 #, no-c-format msgid "" "Warn about questionable usage of the macros used to retrieve variable " "arguments." msgstr "" -#: c-family/c.opt:1505 +#: c-family/c.opt:1509 #, no-c-format msgid "Warn about the most vexing parse syntactic ambiguity." msgstr "" -#: c-family/c.opt:1509 +#: c-family/c.opt:1513 #, no-c-format msgid "Warn if a virtual base has a non-trivial move assignment operator." msgstr "" -#: c-family/c.opt:1513 +#: c-family/c.opt:1517 #, no-c-format msgid "Warn if a variable length array is used." msgstr "" -#: c-family/c.opt:1517 +#: c-family/c.opt:1521 #, no-c-format msgid "" "-Wvla-larger-than=<number>\tWarn on unbounded uses of variable-length " @@ -2898,34 +2905,34 @@ msgid "" "larger than <number> bytes." msgstr "" -#: c-family/c.opt:1523 +#: c-family/c.opt:1527 #, no-c-format msgid "" "Disable Wvla-larger-than= warning. Equivalent to Wvla-larger-" "than=<SIZE_MAX> or larger." msgstr "" -#: c-family/c.opt:1527 +#: c-family/c.opt:1531 #, no-c-format msgid "Warn about mismatched declarations of VLA parameters." msgstr "" -#: c-family/c.opt:1531 +#: c-family/c.opt:1535 #, no-c-format msgid "Warn about deprecated uses of volatile qualifier." msgstr "" -#: c-family/c.opt:1535 +#: c-family/c.opt:1539 #, no-c-format msgid "Warn when a register variable is declared volatile." msgstr "" -#: c-family/c.opt:1539 +#: c-family/c.opt:1543 #, no-c-format msgid "Warn on direct virtual inheritance." msgstr "" -#: c-family/c.opt:1543 +#: c-family/c.opt:1547 #, no-c-format msgid "" "In C++, nonzero means warn about deprecated conversion from string literals " @@ -2933,188 +2940,188 @@ msgid "" "not deprecated by the ISO C standard." msgstr "" -#: c-family/c.opt:1547 +#: c-family/c.opt:1551 #, no-c-format msgid "" "Warn about xor operators where it appears the user meant exponentiation." msgstr "" -#: c-family/c.opt:1551 +#: c-family/c.opt:1555 #, no-c-format msgid "Warn when a literal '0' is used as null pointer." msgstr "" -#: c-family/c.opt:1555 +#: c-family/c.opt:1559 #, no-c-format msgid "Warn about accesses to interior zero-length array members." msgstr "" -#: c-family/c.opt:1559 +#: c-family/c.opt:1563 #, no-c-format msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)." msgstr "" -#: c-family/c.opt:1567 +#: c-family/c.opt:1571 #, no-c-format msgid "" "The version of the C++ ABI used for -Wabi warnings and link compatibility " "aliases." msgstr "" -#: c-family/c.opt:1571 +#: c-family/c.opt:1575 #, no-c-format msgid "Enforce class member access control semantics." msgstr "" -#: c-family/c.opt:1575 +#: c-family/c.opt:1579 #, no-c-format msgid "-fada-spec-parent=unit\tDump Ada specs as child units of given parent." msgstr "" -#: c-family/c.opt:1579 +#: c-family/c.opt:1583 #, no-c-format msgid "Support C++17 allocation of over-aligned types." msgstr "" -#: c-family/c.opt:1583 +#: c-family/c.opt:1587 #, no-c-format msgid "" "-faligned-new=<N>\tUse C++17 over-aligned type allocation for alignments " "greater than N." msgstr "" -#: c-family/c.opt:1594 c-family/c.opt:1911 c-family/c.opt:2313 -#: c-family/c.opt:2317 c-family/c.opt:2333 +#: c-family/c.opt:1598 c-family/c.opt:1915 c-family/c.opt:2317 +#: c-family/c.opt:2321 c-family/c.opt:2337 #, no-c-format msgid "No longer supported." msgstr "" -#: c-family/c.opt:1598 +#: c-family/c.opt:1602 #, no-c-format msgid "Recognize the \"asm\" keyword." msgstr "" -#: c-family/c.opt:1606 +#: c-family/c.opt:1610 #, no-c-format msgid "Recognize built-in functions." msgstr "" -#: c-family/c.opt:1613 +#: c-family/c.opt:1617 #, no-c-format msgid "Where shorter, use canonicalized paths to systems headers." msgstr "" -#: c-family/c.opt:1617 +#: c-family/c.opt:1621 #, no-c-format msgid "" "Enable the char8_t fundamental type and use it as the type for UTF-8 string " "and character literals." msgstr "" -#: c-family/c.opt:1705 +#: c-family/c.opt:1709 #, no-c-format msgid "Removed in GCC 8. This switch has no effect." msgstr "" -#: c-family/c.opt:1709 +#: c-family/c.opt:1713 #, no-c-format msgid "Enable support for C++ concepts." msgstr "" -#: c-family/c.opt:1713 +#: c-family/c.opt:1717 #, no-c-format msgid "Enable certain features present in the Concepts TS." msgstr "" -#: c-family/c.opt:1717 +#: c-family/c.opt:1721 #, no-c-format msgid "" "Specify maximum error replay depth during recursive diagnosis of a " "constraint satisfaction failure." msgstr "" -#: c-family/c.opt:1721 +#: c-family/c.opt:1725 #, no-c-format msgid "Allow the arguments of the '?' operator to have different types." msgstr "" -#: c-family/c.opt:1729 +#: c-family/c.opt:1733 #, no-c-format msgid "-fconst-string-class=<name>\tUse class <name> for constant strings." msgstr "" -#: c-family/c.opt:1733 +#: c-family/c.opt:1737 #, no-c-format msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth." msgstr "" -#: c-family/c.opt:1737 +#: c-family/c.opt:1741 #, no-c-format msgid "" "-fconstexpr-cache-depth=<number>\tSpecify maximum constexpr recursion cache " "depth." msgstr "" -#: c-family/c.opt:1741 +#: c-family/c.opt:1745 #, no-c-format msgid "Allow IEC559 floating point exceptions in constant expressions." msgstr "" -#: c-family/c.opt:1745 +#: c-family/c.opt:1749 #, no-c-format msgid "" "-fconstexpr-loop-limit=<number>\tSpecify maximum constexpr loop iteration " "count." msgstr "" -#: c-family/c.opt:1749 +#: c-family/c.opt:1753 #, no-c-format msgid "" "-fconstexpr-ops-limit=<number>\tSpecify maximum number of constexpr " "operations during a single constexpr evaluation." msgstr "" -#: c-family/c.opt:1753 +#: c-family/c.opt:1757 #, no-c-format msgid "Enable certain features present in drafts of C++ Contracts." msgstr "" -#: c-family/c.opt:1766 +#: c-family/c.opt:1770 #, no-c-format msgid "" "-fcontract-assumption-mode=[on|off]\tEnable or disable treating axiom level " "contracts as assumptions (default on)." msgstr "" -#: c-family/c.opt:1770 +#: c-family/c.opt:1774 #, no-c-format msgid "" "-fcontract-build-level=[off|default|audit]\tSpecify max contract level to " "generate runtime checks for." msgstr "" -#: c-family/c.opt:1774 +#: c-family/c.opt:1778 #, no-c-format msgid "" "-fcontract-strict-declarations=[on|off]\tEnable or disable warnings on " "generalized redeclaration of functions with contracts (default off)." msgstr "" -#: c-family/c.opt:1778 +#: c-family/c.opt:1782 #, no-c-format msgid "" "-fcontract-mode=[on|off]\tEnable or disable all contract facilities (default " "on)." msgstr "" -#: c-family/c.opt:1782 +#: c-family/c.opt:1786 #, no-c-format msgid "" "-fcontract-continuation-mode=[on|off]\tEnable or disable contract " "continuation mode (default off)." msgstr "" -#: c-family/c.opt:1786 +#: c-family/c.opt:1790 #, no-c-format msgid "" "-fcontract-role=<name>:<semantics>\tSpecify the semantics for all levels in " @@ -3122,441 +3129,441 @@ msgid "" "(ex: opt:assume,assume,assume)." msgstr "" -#: c-family/c.opt:1790 +#: c-family/c.opt:1794 #, no-c-format msgid "" "-fcontract-semantic=<level>:<semantic>\tSpecify the concrete semantics for " "level." msgstr "" -#: c-family/c.opt:1794 +#: c-family/c.opt:1798 #, no-c-format msgid "Enable C++ coroutines (experimental)." msgstr "" -#: c-family/c.opt:1798 +#: c-family/c.opt:1802 #, no-c-format msgid "Emit debug annotations during preprocessing." msgstr "" -#: c-family/c.opt:1806 +#: c-family/c.opt:1810 #, no-c-format msgid "Factor complex constructors and destructors to favor space over speed." msgstr "" -#: c-family/c.opt:1814 +#: c-family/c.opt:1818 #, no-c-format msgid "Print hierarchical comparisons when template types are mismatched." msgstr "" -#: c-family/c.opt:1818 +#: c-family/c.opt:1822 #, no-c-format msgid "Note all candidates during overload resolution failure." msgstr "" -#: c-family/c.opt:1822 +#: c-family/c.opt:1826 #, no-c-format msgid "Preprocess directives only." msgstr "" -#: c-family/c.opt:1826 +#: c-family/c.opt:1830 #, no-c-format msgid "Permit '$' as an identifier character." msgstr "" -#: c-family/c.opt:1830 +#: c-family/c.opt:1834 #, no-c-format msgid "" "-fmacro-prefix-map=<old>=<new>\tMap one directory name to another in " "__FILE__, __BASE_FILE__, and __builtin_FILE()." msgstr "" -#: c-family/c.opt:1834 +#: c-family/c.opt:1838 #, no-c-format msgid "Write all declarations as Ada code transitively." msgstr "" -#: c-family/c.opt:1838 +#: c-family/c.opt:1842 #, no-c-format msgid "Write all declarations as Ada code for the given file only." msgstr "" -#: c-family/c.opt:1845 +#: c-family/c.opt:1849 #, no-c-format msgid "Do not elide common elements in template comparisons." msgstr "" -#: c-family/c.opt:1849 +#: c-family/c.opt:1853 #, no-c-format msgid "Generate code to check exception specifications." msgstr "" -#: c-family/c.opt:1856 +#: c-family/c.opt:1860 #, no-c-format msgid "" "-fexec-charset=<cset>\tConvert all strings and character constants to " "character set <cset>." msgstr "" -#: c-family/c.opt:1860 +#: c-family/c.opt:1864 #, no-c-format msgid "Permit universal character names (\\u and \\U) in identifiers." msgstr "" -#: c-family/c.opt:1864 +#: c-family/c.opt:1868 #, no-c-format msgid "" "-finput-charset=<cset>\tSpecify the default character set for source files." msgstr "" -#: c-family/c.opt:1868 +#: c-family/c.opt:1872 #, no-c-format msgid "" "Support dynamic initialization of thread-local variables in a different " "translation unit." msgstr "" -#: c-family/c.opt:1875 +#: c-family/c.opt:1879 #, no-c-format msgid "Fold calls to simple inline functions." msgstr "" -#: c-family/c.opt:1882 +#: c-family/c.opt:1886 #, no-c-format msgid "Do not assume that standard C libraries and \"main\" exist." msgstr "" -#: c-family/c.opt:1886 +#: c-family/c.opt:1890 #, no-c-format msgid "Recognize GNU-defined keywords." msgstr "" -#: c-family/c.opt:1890 +#: c-family/c.opt:1894 #, no-c-format msgid "Generate code for GNU runtime environment." msgstr "" -#: c-family/c.opt:1894 +#: c-family/c.opt:1898 #, no-c-format msgid "Use traditional GNU semantics for inline functions." msgstr "" -#: c-family/c.opt:1907 +#: c-family/c.opt:1911 #, no-c-format msgid "Assume normal C execution environment." msgstr "" -#: c-family/c.opt:1915 +#: c-family/c.opt:1919 #, no-c-format msgid "Implement P2564 for consteval propagation." msgstr "" -#: c-family/c.opt:1919 +#: c-family/c.opt:1923 #, no-c-format msgid "Export functions even if they can be inlined." msgstr "" -#: c-family/c.opt:1923 +#: c-family/c.opt:1927 #, no-c-format msgid "Make inline functions constexpr by default." msgstr "" -#: c-family/c.opt:1927 +#: c-family/c.opt:1931 #, no-c-format msgid "Emit implicit instantiations of inline templates." msgstr "" -#: c-family/c.opt:1931 +#: c-family/c.opt:1935 #, no-c-format msgid "Emit implicit instantiations of templates." msgstr "" -#: c-family/c.opt:1935 +#: c-family/c.opt:1939 #, no-c-format msgid "Implement C++17 inheriting constructor semantics." msgstr "" -#: c-family/c.opt:1942 +#: c-family/c.opt:1946 #, no-c-format msgid "Don't emit dllexported inline functions unless needed." msgstr "" -#: c-family/c.opt:1949 +#: c-family/c.opt:1953 #, no-c-format msgid "" "Allow implicit conversions between vectors with differing numbers of " "subparts and/or differing element types." msgstr "" -#: c-family/c.opt:1953 +#: c-family/c.opt:1957 #, no-c-format msgid "Enable C++ modules-ts (experimental)." msgstr "" -#: c-family/c.opt:1961 +#: c-family/c.opt:1965 #, no-c-format msgid "Enable C++ header module (experimental)." msgstr "" -#: c-family/c.opt:1968 +#: c-family/c.opt:1972 #, no-c-format msgid "" "Member functions defined within their class are inline in module purview." msgstr "" -#: c-family/c.opt:1972 +#: c-family/c.opt:1976 #, no-c-format msgid "Only emit Compiled Module Interface." msgstr "" -#: c-family/c.opt:1976 +#: c-family/c.opt:1980 #, no-c-format msgid "Mapper for module to CMI files." msgstr "" -#: c-family/c.opt:1980 +#: c-family/c.opt:1984 #, no-c-format msgid "Enable lazy module importing." msgstr "" -#: c-family/c.opt:1988 +#: c-family/c.opt:1992 #, no-c-format msgid "Warn about macros that have conflicting header units definitions." msgstr "" -#: c-family/c.opt:1992 +#: c-family/c.opt:1996 #, no-c-format msgid "Warn if pointers of distinct types are compared without a cast." msgstr "" -#: c-family/c.opt:1996 +#: c-family/c.opt:2000 #, no-c-format msgid "Note #include directives translated to import declarations." msgstr "" -#: c-family/c.opt:2000 +#: c-family/c.opt:2004 #, no-c-format msgid "" "Note #include directives not translated to import declarations, and not " "known to be textual." msgstr "" -#: c-family/c.opt:2004 +#: c-family/c.opt:2008 #, no-c-format msgid "Note a #include translation of a specific header." msgstr "" -#: c-family/c.opt:2008 +#: c-family/c.opt:2012 #, no-c-format msgid "Note Compiled Module Interface pathnames." msgstr "" -#: c-family/c.opt:2012 +#: c-family/c.opt:2016 #, no-c-format msgid "" "Note Compiled Module Interface pathname of a specific module or header-unit." msgstr "" -#: c-family/c.opt:2016 +#: c-family/c.opt:2020 #, no-c-format msgid "" "fmax-include-depth=<number> Set the maximum depth of the nested #include." msgstr "" -#: c-family/c.opt:2020 +#: c-family/c.opt:2024 #, no-c-format msgid "Don't warn about uses of Microsoft extensions." msgstr "" -#: c-family/c.opt:2039 +#: c-family/c.opt:2043 #, no-c-format msgid "" "Implement resolution of DR 150 for matching of template template arguments." msgstr "" -#: c-family/c.opt:2043 +#: c-family/c.opt:2047 #, no-c-format msgid "Generate code for NeXT (Apple macOS) runtime environment." msgstr "" -#: c-family/c.opt:2047 +#: c-family/c.opt:2051 #, no-c-format msgid "Assume that receivers of Objective-C messages may be nil." msgstr "" -#: c-family/c.opt:2051 +#: c-family/c.opt:2055 #, no-c-format msgid "" "Allow access to instance variables as if they were local declarations within " "instance method implementations." msgstr "" -#: c-family/c.opt:2055 +#: c-family/c.opt:2059 #, no-c-format msgid "" "-fvisibility=[private|protected|public|package]\tSet the default symbol " "visibility." msgstr "" -#: c-family/c.opt:2080 +#: c-family/c.opt:2084 #, no-c-format msgid "" "Treat a throw() exception specification as noexcept to improve code size." msgstr "" -#: c-family/c.opt:2084 +#: c-family/c.opt:2088 #, no-c-format msgid "" "Specify which ABI to use for Objective-C family code and meta-data " "generation." msgstr "" -#: c-family/c.opt:2090 +#: c-family/c.opt:2094 #, no-c-format msgid "" "Generate special Objective-C methods to initialize/destroy non-POD C++ " "ivars, if needed." msgstr "" -#: c-family/c.opt:2094 +#: c-family/c.opt:2098 #, no-c-format msgid "Allow fast jumps to the message dispatcher." msgstr "" -#: c-family/c.opt:2100 +#: c-family/c.opt:2104 #, no-c-format msgid "Enable Objective-C exception and synchronization syntax." msgstr "" -#: c-family/c.opt:2104 +#: c-family/c.opt:2108 #, no-c-format msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs." msgstr "" -#: c-family/c.opt:2108 +#: c-family/c.opt:2112 #, no-c-format msgid "" "Enable inline checks for nil receivers with the NeXT runtime and ABI version " "2." msgstr "" -#: c-family/c.opt:2113 +#: c-family/c.opt:2117 #, no-c-format msgid "Enable Objective-C setjmp exception handling runtime." msgstr "" -#: c-family/c.opt:2117 +#: c-family/c.opt:2121 #, no-c-format msgid "Conform to the Objective-C 1.0 language as implemented in GCC 4.0." msgstr "" -#: c-family/c.opt:2121 +#: c-family/c.opt:2125 #, no-c-format msgid "Enable OpenACC." msgstr "" -#: c-family/c.opt:2125 +#: c-family/c.opt:2129 #, no-c-format msgid "Specify default OpenACC compute dimensions." msgstr "" -#: c-family/c.opt:2129 +#: c-family/c.opt:2133 #, no-c-format msgid "Enable OpenMP (implies -frecursive in Fortran)." msgstr "" -#: c-family/c.opt:2133 +#: c-family/c.opt:2137 #, no-c-format msgid "Enable OpenMP's SIMD directives." msgstr "" -#: c-family/c.opt:2137 +#: c-family/c.opt:2141 #, no-c-format msgid "Recognize C++ keywords like \"compl\" and \"xor\"." msgstr "" -#: c-family/c.opt:2148 +#: c-family/c.opt:2152 #, no-c-format msgid "Look for and use PCH files even when preprocessing." msgstr "" -#: c-family/c.opt:2152 +#: c-family/c.opt:2156 #, no-c-format msgid "Downgrade conformance errors to warnings." msgstr "" -#: c-family/c.opt:2156 +#: c-family/c.opt:2160 #, no-c-format msgid "Enable Plan 9 language extensions." msgstr "" -#: c-family/c.opt:2160 +#: c-family/c.opt:2164 #, no-c-format msgid "Treat the input file as already preprocessed." msgstr "" -#: c-family/c.opt:2168 +#: c-family/c.opt:2172 #, no-c-format msgid "" "-ftrack-macro-expansion=<0|1|2>\tTrack locations of tokens coming from macro " "expansion and display them in error messages." msgstr "" -#: c-family/c.opt:2172 +#: c-family/c.opt:2176 #, no-c-format msgid "" "Do not pretty-print template specializations as the template signature " "followed by the arguments." msgstr "" -#: c-family/c.opt:2176 +#: c-family/c.opt:2180 #, no-c-format msgid "Treat known sprintf return values as constants." msgstr "" -#: c-family/c.opt:2180 +#: c-family/c.opt:2184 #, no-c-format msgid "" "Used in Fix-and-Continue mode to indicate that object files may be swapped " "in at runtime." msgstr "" -#: c-family/c.opt:2184 +#: c-family/c.opt:2188 #, no-c-format msgid "Removed in GCC 10. This switch has no effect." msgstr "" -#: c-family/c.opt:2188 +#: c-family/c.opt:2192 #, no-c-format msgid "Generate run time type descriptor information." msgstr "" -#: c-family/c.opt:2192 ada/gcc-interface/lang.opt:81 +#: c-family/c.opt:2196 ada/gcc-interface/lang.opt:81 #, no-c-format msgid "Use the narrowest integer type possible for enumeration types." msgstr "" -#: c-family/c.opt:2196 +#: c-family/c.opt:2200 #, no-c-format msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"." msgstr "" -#: c-family/c.opt:2200 +#: c-family/c.opt:2204 #, no-c-format msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed." msgstr "" -#: c-family/c.opt:2204 ada/gcc-interface/lang.opt:85 +#: c-family/c.opt:2208 ada/gcc-interface/lang.opt:85 #, no-c-format msgid "Make \"char\" signed by default." msgstr "" -#: c-family/c.opt:2208 +#: c-family/c.opt:2212 #, no-c-format msgid "Enable C++14 sized deallocation support." msgstr "" -#: c-family/c.opt:2215 +#: c-family/c.opt:2219 #, no-c-format msgid "" "-fstrict-flex-arrays=<level> Control when to treat the trailing array of " @@ -3565,439 +3572,439 @@ msgid "" "structures as flexible array members." msgstr "" -#: c-family/c.opt:2222 +#: c-family/c.opt:2226 #, no-c-format msgid "" "-fsso-struct=[big-endian|little-endian|native]\tSet the default scalar " "storage order." msgstr "" -#: c-family/c.opt:2238 +#: c-family/c.opt:2242 #, no-c-format msgid "Display statistics accumulated during compilation." msgstr "" -#: c-family/c.opt:2242 +#: c-family/c.opt:2246 #, no-c-format msgid "" "Assume that values of enumeration type are always within the minimum range " "of that type." msgstr "" -#: c-family/c.opt:2249 c-family/c.opt:2254 +#: c-family/c.opt:2253 c-family/c.opt:2258 #, no-c-format msgid "" "Follow the C++17 evaluation order requirements for assignment expressions, " "shift, member function calls, etc." msgstr "" -#: c-family/c.opt:2271 +#: c-family/c.opt:2275 #, no-c-format msgid "" "Set the maximum number of template instantiation notes for a single warning " "or error." msgstr "" -#: c-family/c.opt:2278 +#: c-family/c.opt:2282 #, no-c-format msgid "" "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth." msgstr "" -#: c-family/c.opt:2285 +#: c-family/c.opt:2289 #, no-c-format msgid "" "-fno-threadsafe-statics\tDo not generate thread-safe code for initializing " "local statics." msgstr "" -#: c-family/c.opt:2289 +#: c-family/c.opt:2293 #, no-c-format msgid "" "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned." msgstr "" -#: c-family/c.opt:2293 ada/gcc-interface/lang.opt:89 +#: c-family/c.opt:2297 ada/gcc-interface/lang.opt:89 #, no-c-format msgid "Make \"char\" unsigned by default." msgstr "" -#: c-family/c.opt:2297 +#: c-family/c.opt:2301 #, no-c-format msgid "Use __cxa_atexit to register destructors." msgstr "" -#: c-family/c.opt:2301 +#: c-family/c.opt:2305 #, no-c-format msgid "Use __cxa_get_exception_ptr in exception handling." msgstr "" -#: c-family/c.opt:2305 +#: c-family/c.opt:2309 #, no-c-format msgid "Marks all inlined functions and methods as having hidden visibility." msgstr "" -#: c-family/c.opt:2309 +#: c-family/c.opt:2313 #, no-c-format msgid "Changes visibility to match Microsoft Visual Studio by default." msgstr "" -#: c-family/c.opt:2321 +#: c-family/c.opt:2325 #, no-c-format msgid "Emit common-like symbols as weak symbols." msgstr "" -#: c-family/c.opt:2325 +#: c-family/c.opt:2329 #, no-c-format msgid "" "-fwide-exec-charset=<cset>\tConvert all wide strings and character constants " "to character set <cset>." msgstr "" -#: c-family/c.opt:2329 +#: c-family/c.opt:2333 #, no-c-format msgid "Generate a #line directive pointing at the current working directory." msgstr "" -#: c-family/c.opt:2337 +#: c-family/c.opt:2341 #, no-c-format msgid "" "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode." msgstr "" -#: c-family/c.opt:2341 +#: c-family/c.opt:2345 #, no-c-format msgid "Dump declarations to a .decl file." msgstr "" -#: c-family/c.opt:2345 +#: c-family/c.opt:2349 #, no-c-format msgid "" "-femit-struct-debug-baseonly\tAggressive reduced debug info for structs." msgstr "" -#: c-family/c.opt:2349 +#: c-family/c.opt:2353 #, no-c-format msgid "" "-femit-struct-debug-reduced\tConservative reduced debug info for structs." msgstr "" -#: c-family/c.opt:2353 +#: c-family/c.opt:2357 #, no-c-format msgid "" "-femit-struct-debug-detailed=<spec-list>\tDetailed reduced debug info for " "structs." msgstr "" -#: c-family/c.opt:2357 +#: c-family/c.opt:2361 #, no-c-format msgid "" "Interpret imaginary, fixed-point, or other gnu number suffix as the " "corresponding number literal rather than a user-defined number literal." msgstr "" -#: c-family/c.opt:2362 +#: c-family/c.opt:2366 #, no-c-format msgid "-idirafter <dir>\tAdd <dir> to the end of the system include path." msgstr "" -#: c-family/c.opt:2366 +#: c-family/c.opt:2370 #, no-c-format msgid "-imacros <file>\tAccept definition of macros in <file>." msgstr "" -#: c-family/c.opt:2370 +#: c-family/c.opt:2374 #, no-c-format msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory." msgstr "" -#: c-family/c.opt:2374 +#: c-family/c.opt:2378 #, no-c-format msgid "-include <file>\tInclude the contents of <file> before other files." msgstr "" -#: c-family/c.opt:2378 +#: c-family/c.opt:2382 #, no-c-format msgid "-iprefix <path>\tSpecify <path> as a prefix for next two options." msgstr "" -#: c-family/c.opt:2382 +#: c-family/c.opt:2386 #, no-c-format msgid "-isysroot <dir>\tSet <dir> to be the system root directory." msgstr "" -#: c-family/c.opt:2386 +#: c-family/c.opt:2390 #, no-c-format msgid "-isystem <dir>\tAdd <dir> to the start of the system include path." msgstr "" -#: c-family/c.opt:2390 +#: c-family/c.opt:2394 #, no-c-format msgid "-iquote <dir>\tAdd <dir> to the end of the quote include path." msgstr "" -#: c-family/c.opt:2394 +#: c-family/c.opt:2398 #, no-c-format msgid "-iwithprefix <dir>\tAdd <dir> to the end of the system include path." msgstr "" -#: c-family/c.opt:2398 +#: c-family/c.opt:2402 #, no-c-format msgid "" "-iwithprefixbefore <dir>\tAdd <dir> to the end of the main include path." msgstr "" -#: c-family/c.opt:2408 +#: c-family/c.opt:2412 #, no-c-format msgid "" "Do not search standard system include directories (those specified with -" "isystem will still be used)." msgstr "" -#: c-family/c.opt:2412 +#: c-family/c.opt:2416 #, no-c-format msgid "Do not search standard system include directories for C++." msgstr "" -#: c-family/c.opt:2424 +#: c-family/c.opt:2428 #, no-c-format msgid "Generate C header of platform-specific features." msgstr "" -#: c-family/c.opt:2428 +#: c-family/c.opt:2432 #, no-c-format msgid "Remap file names when including files." msgstr "" -#: c-family/c.opt:2432 c-family/c.opt:2436 +#: c-family/c.opt:2436 c-family/c.opt:2440 #, no-c-format msgid "" "Conform to the ISO 1998 C++ standard revised by the 2003 technical " "corrigendum." msgstr "" -#: c-family/c.opt:2440 +#: c-family/c.opt:2444 #, no-c-format msgid "Conform to the ISO 2011 C++ standard." msgstr "" -#: c-family/c.opt:2444 +#: c-family/c.opt:2448 #, no-c-format msgid "Deprecated in favor of -std=c++11." msgstr "" -#: c-family/c.opt:2448 +#: c-family/c.opt:2452 #, no-c-format msgid "Deprecated in favor of -std=c++14." msgstr "" -#: c-family/c.opt:2452 +#: c-family/c.opt:2456 #, no-c-format msgid "Conform to the ISO 2014 C++ standard." msgstr "" -#: c-family/c.opt:2456 +#: c-family/c.opt:2460 #, no-c-format msgid "Deprecated in favor of -std=c++17." msgstr "" -#: c-family/c.opt:2460 +#: c-family/c.opt:2464 #, no-c-format msgid "Conform to the ISO 2017 C++ standard." msgstr "" -#: c-family/c.opt:2464 c-family/c.opt:2468 +#: c-family/c.opt:2468 c-family/c.opt:2472 #, no-c-format msgid "" "Conform to the ISO 2020 C++ standard (experimental and incomplete support)." msgstr "" -#: c-family/c.opt:2472 c-family/c.opt:2476 +#: c-family/c.opt:2476 c-family/c.opt:2480 #, no-c-format msgid "" "Conform to the ISO 2023 C++ draft standard (experimental and incomplete " "support)." msgstr "" -#: c-family/c.opt:2480 c-family/c.opt:2484 +#: c-family/c.opt:2484 c-family/c.opt:2488 #, no-c-format msgid "" "Conform to the ISO 2026 C++ draft standard (experimental and incomplete " "support)." msgstr "" -#: c-family/c.opt:2488 c-family/c.opt:2642 +#: c-family/c.opt:2492 c-family/c.opt:2646 #, no-c-format msgid "Conform to the ISO 2011 C standard." msgstr "" -#: c-family/c.opt:2492 +#: c-family/c.opt:2496 #, no-c-format msgid "Deprecated in favor of -std=c11." msgstr "" -#: c-family/c.opt:2496 c-family/c.opt:2500 c-family/c.opt:2646 -#: c-family/c.opt:2650 +#: c-family/c.opt:2500 c-family/c.opt:2504 c-family/c.opt:2650 +#: c-family/c.opt:2654 #, no-c-format msgid "Conform to the ISO 2017 C standard (published in 2018)." msgstr "" -#: c-family/c.opt:2504 c-family/c.opt:2654 +#: c-family/c.opt:2508 c-family/c.opt:2658 #, no-c-format msgid "" "Conform to the ISO 2023 C standard draft (expected to be published in 2024) " "(experimental and incomplete support)." msgstr "" -#: c-family/c.opt:2508 +#: c-family/c.opt:2512 #, no-c-format msgid "Deprecated in favor of -std=c23." msgstr "" -#: c-family/c.opt:2512 c-family/c.opt:2516 c-family/c.opt:2626 +#: c-family/c.opt:2516 c-family/c.opt:2520 c-family/c.opt:2630 #, no-c-format msgid "Conform to the ISO 1990 C standard." msgstr "" -#: c-family/c.opt:2520 c-family/c.opt:2634 +#: c-family/c.opt:2524 c-family/c.opt:2638 #, no-c-format msgid "Conform to the ISO 1999 C standard." msgstr "" -#: c-family/c.opt:2524 +#: c-family/c.opt:2528 #, no-c-format msgid "Deprecated in favor of -std=c99." msgstr "" -#: c-family/c.opt:2528 c-family/c.opt:2533 +#: c-family/c.opt:2532 c-family/c.opt:2537 #, no-c-format msgid "" "Conform to the ISO 1998 C++ standard revised by the 2003 technical " "corrigendum with GNU extensions." msgstr "" -#: c-family/c.opt:2538 +#: c-family/c.opt:2542 #, no-c-format msgid "Conform to the ISO 2011 C++ standard with GNU extensions." msgstr "" -#: c-family/c.opt:2542 +#: c-family/c.opt:2546 #, no-c-format msgid "Deprecated in favor of -std=gnu++11." msgstr "" -#: c-family/c.opt:2546 +#: c-family/c.opt:2550 #, no-c-format msgid "Deprecated in favor of -std=gnu++14." msgstr "" -#: c-family/c.opt:2550 +#: c-family/c.opt:2554 #, no-c-format msgid "Conform to the ISO 2014 C++ standard with GNU extensions." msgstr "" -#: c-family/c.opt:2554 +#: c-family/c.opt:2558 #, no-c-format msgid "Deprecated in favor of -std=gnu++17." msgstr "" -#: c-family/c.opt:2558 +#: c-family/c.opt:2562 #, no-c-format msgid "Conform to the ISO 2017 C++ standard with GNU extensions." msgstr "" -#: c-family/c.opt:2562 c-family/c.opt:2566 +#: c-family/c.opt:2566 c-family/c.opt:2570 #, no-c-format msgid "" "Conform to the ISO 2020 C++ standard with GNU extensions (experimental and " "incomplete support)." msgstr "" -#: c-family/c.opt:2570 c-family/c.opt:2574 +#: c-family/c.opt:2574 c-family/c.opt:2578 #, no-c-format msgid "" "Conform to the ISO 2023 C++ draft standard with GNU extensions (experimental " "and incomplete support)." msgstr "" -#: c-family/c.opt:2578 c-family/c.opt:2582 +#: c-family/c.opt:2582 c-family/c.opt:2586 #, no-c-format msgid "" "Conform to the ISO 2026 C++ draft standard with GNU extensions (experimental " "and incomplete support)." msgstr "" -#: c-family/c.opt:2586 +#: c-family/c.opt:2590 #, no-c-format msgid "Conform to the ISO 2011 C standard with GNU extensions." msgstr "" -#: c-family/c.opt:2590 +#: c-family/c.opt:2594 #, no-c-format msgid "Deprecated in favor of -std=gnu11." msgstr "" -#: c-family/c.opt:2594 c-family/c.opt:2598 +#: c-family/c.opt:2598 c-family/c.opt:2602 #, no-c-format msgid "" "Conform to the ISO 2017 C standard (published in 2018) with GNU extensions." msgstr "" -#: c-family/c.opt:2602 +#: c-family/c.opt:2606 #, no-c-format msgid "" "Conform to the ISO 2023 C standard draft (expected to be published in 2024) " "with GNU extensions (experimental and incomplete support)." msgstr "" -#: c-family/c.opt:2606 +#: c-family/c.opt:2610 #, no-c-format msgid "Deprecated in favor of -std=gnu23." msgstr "" -#: c-family/c.opt:2610 c-family/c.opt:2614 +#: c-family/c.opt:2614 c-family/c.opt:2618 #, no-c-format msgid "Conform to the ISO 1990 C standard with GNU extensions." msgstr "" -#: c-family/c.opt:2618 +#: c-family/c.opt:2622 #, no-c-format msgid "Conform to the ISO 1999 C standard with GNU extensions." msgstr "" -#: c-family/c.opt:2622 +#: c-family/c.opt:2626 #, no-c-format msgid "Deprecated in favor of -std=gnu99." msgstr "" -#: c-family/c.opt:2630 +#: c-family/c.opt:2634 #, no-c-format msgid "Conform to the ISO 1990 C standard as amended in 1994." msgstr "" -#: c-family/c.opt:2638 +#: c-family/c.opt:2642 #, no-c-format msgid "Deprecated in favor of -std=iso9899:1999." msgstr "" -#: c-family/c.opt:2658 +#: c-family/c.opt:2662 #, no-c-format msgid "" "-stdlib=[libstdc++|libc++]\tThe standard library to be used for C++ headers " "and runtime." msgstr "" -#: c-family/c.opt:2675 +#: c-family/c.opt:2679 #, no-c-format msgid "Enable traditional preprocessing." msgstr "" -#: c-family/c.opt:2679 +#: c-family/c.opt:2683 #, no-c-format msgid "-trigraphs\tSupport ISO C trigraphs." msgstr "" -#: c-family/c.opt:2683 +#: c-family/c.opt:2687 #, no-c-format msgid "Do not predefine system-specific and GCC-specific macros." msgstr "" @@ -4474,60 +4481,50 @@ msgstr "" #: m2/lang.opt:95 #, no-c-format -msgid "turn on quadruple tracing (internal switch)" +msgid "turn on tracing of procedure line numbers (internal switch)" msgstr "" #: m2/lang.opt:99 #, no-c-format -msgid "turn on the Modula-2 api tracing (internal switch)" -msgstr "" - -#: m2/lang.opt:103 -#, no-c-format -msgid "turn on the Modula-2 function line number generation (internal switch)" -msgstr "" - -#: m2/lang.opt:107 -#, no-c-format msgid "recognise the specified suffix as a definition module filename" msgstr "" -#: m2/lang.opt:111 +#: m2/lang.opt:103 #, no-c-format msgid "display all inbuilt system items" msgstr "" -#: m2/lang.opt:115 +#: m2/lang.opt:107 #, no-c-format msgid "" "allows opaque types to be implemented as any type (a GNU Modula-2 extension)" msgstr "" -#: m2/lang.opt:119 +#: m2/lang.opt:111 #, no-c-format msgid "" "turns on runtime checking to check whether a floating point number will " "exceed range" msgstr "" -#: m2/lang.opt:123 +#: m2/lang.opt:115 #, no-c-format msgid "" "create a topologically sorted module list from all dependent modules used in " "the application" msgstr "" -#: m2/lang.opt:127 m2/lang.opt:215 +#: m2/lang.opt:119 m2/lang.opt:211 #, no-c-format msgid "turns on all range checking for numerical values" msgstr "" -#: m2/lang.opt:131 +#: m2/lang.opt:123 #, no-c-format msgid "use ISO dialect of Modula-2" msgstr "" -#: m2/lang.opt:135 +#: m2/lang.opt:127 #, no-c-format msgid "" "specify the library order, the libraries may be specified by a comma " @@ -4535,197 +4532,203 @@ msgid "" "m2pim,m2iso." msgstr "" -#: m2/lang.opt:139 +#: m2/lang.opt:131 #, no-c-format msgid "set all location values to a specific value (internal switch)" msgstr "" -#: m2/lang.opt:143 +#: m2/lang.opt:135 +#, no-c-format +msgid "" +"turn on internal debug tracing for quad,token,line,all (internal switch)" +msgstr "" + +#: m2/lang.opt:139 #, no-c-format msgid "" "generate extra nops to improve debugging, producing an instruction for every " "code related keyword" msgstr "" -#: m2/lang.opt:147 +#: m2/lang.opt:143 #, no-c-format msgid "generate error messages which render keywords in lower case" msgstr "" -#: m2/lang.opt:151 +#: m2/lang.opt:147 #, no-c-format msgid "" "specify the module mangled prefix name for all modules in the following " "include paths" msgstr "" -#: m2/lang.opt:159 +#: m2/lang.opt:155 #, no-c-format msgid "insert plugin to identify runtime errors at compiletime" msgstr "" -#: m2/lang.opt:163 +#: m2/lang.opt:159 #, no-c-format msgid "specify the module mangled prefix name" msgstr "" -#: m2/lang.opt:167 +#: m2/lang.opt:163 #, no-c-format msgid "" "display statistics about the amount of source lines compiled and symbols used" msgstr "" -#: m2/lang.opt:171 +#: m2/lang.opt:167 #, no-c-format msgid "experimental flag to turn on the new strict type checker" msgstr "" -#: m2/lang.opt:175 +#: m2/lang.opt:171 #, no-c-format msgid "compile all implementation modules and program module at once" msgstr "" -#: m2/lang.opt:179 +#: m2/lang.opt:175 #, no-c-format msgid "recognise the specified suffix as implementation and module filenames" msgstr "" -#: m2/lang.opt:183 +#: m2/lang.opt:179 #, no-c-format msgid "" "turns on runtime checking to detect accessing data through a NIL value " "pointer" msgstr "" -#: m2/lang.opt:187 +#: m2/lang.opt:183 #, no-c-format msgid "use PIM [234] dialect of Modula-2" msgstr "" -#: m2/lang.opt:191 +#: m2/lang.opt:187 #, no-c-format msgid "use PIM 2 dialect of Modula-2" msgstr "" -#: m2/lang.opt:195 +#: m2/lang.opt:191 #, no-c-format msgid "use PIM 3 dialect of Modula-2" msgstr "" -#: m2/lang.opt:199 +#: m2/lang.opt:195 #, no-c-format msgid "use PIM 4 dialect of Modula-2" msgstr "" -#: m2/lang.opt:203 +#: m2/lang.opt:199 #, no-c-format msgid "force positive result from MOD and DIV result floor" msgstr "" -#: m2/lang.opt:207 +#: m2/lang.opt:203 #, no-c-format msgid "link against the pthread library (default on)" msgstr "" -#: m2/lang.opt:211 +#: m2/lang.opt:207 #, no-c-format msgid "internal compiler debugging information, dump the list of quadruples" msgstr "" -#: m2/lang.opt:219 +#: m2/lang.opt:215 #, no-c-format msgid "" "turns on runtime checking for functions which finish without executing a " "RETURN statement" msgstr "" -#: m2/lang.opt:223 +#: m2/lang.opt:219 #, no-c-format msgid "specify the list of runtime modules and their initialization order" msgstr "" -#: m2/lang.opt:227 +#: m2/lang.opt:223 #, no-c-format msgid "" "the modules initialization order is dynamically determined by M2RTS and " "application dependencies" msgstr "" -#: m2/lang.opt:231 +#: m2/lang.opt:227 #, no-c-format msgid "generate a C source scaffold for the current module being compiled" msgstr "" -#: m2/lang.opt:235 +#: m2/lang.opt:231 #, no-c-format msgid "generate a C++ source scaffold for the current module being compiled" msgstr "" -#: m2/lang.opt:239 +#: m2/lang.opt:235 #, no-c-format msgid "generate the main function" msgstr "" -#: m2/lang.opt:243 +#: m2/lang.opt:239 #, no-c-format msgid "" "generate static scaffold initialization and finalization for every module " "inside main" msgstr "" -#: m2/lang.opt:247 +#: m2/lang.opt:243 #, no-c-format msgid "generate a shared library from the module" msgstr "" -#: m2/lang.opt:251 +#: m2/lang.opt:247 #, no-c-format msgid "" "turns on all software runtime checking (an abbreviation for -fnil -frange -" "findex -fwholediv -fcase -freturn -fwholevalue -ffloatvalue)" msgstr "" -#: m2/lang.opt:255 +#: m2/lang.opt:251 #, no-c-format msgid "display the location of module source files as they are compiled" msgstr "" -#: m2/lang.opt:259 +#: m2/lang.opt:255 #, no-c-format msgid "create a swig interface file for the module" msgstr "" -#: m2/lang.opt:263 +#: m2/lang.opt:259 #, no-c-format msgid "" "optimize non var unbounded parameters by passing it by reference, providing " "it is not written to within the callee procedure." msgstr "" -#: m2/lang.opt:267 +#: m2/lang.opt:263 #, no-c-format msgid "" "orders the initialization/finalializations for scaffold-static or force " "linking of modules if scaffold-dynamic" msgstr "" -#: m2/lang.opt:275 +#: m2/lang.opt:271 #, no-c-format msgid "turns on all division and modulus by zero checking for ordinal values" msgstr "" -#: m2/lang.opt:279 +#: m2/lang.opt:275 #, no-c-format msgid "" "turns on runtime checking to check whether a whole number will exceed range" msgstr "" -#: m2/lang.opt:283 +#: m2/lang.opt:279 #, no-c-format msgid "Link the standard Modula-2 libraries statically in the compilation." msgstr "" -#: m2/lang.opt:428 m2/lang.opt:432 +#: m2/lang.opt:424 m2/lang.opt:428 #, no-c-format msgid "save temporary preprocessed files" msgstr "" @@ -5129,7 +5132,7 @@ msgstr "" #: analyzer/analyzer.opt:227 #, no-c-format msgid "" -"Warn about code paths in in which a call is made to strtok with undefined " +"Warn about code paths in which a call is made to strtok with undefined " "behavior." msgstr "" @@ -6055,7 +6058,7 @@ msgstr "" msgid "Use simulator runtime." msgstr "" -#: config/bfin/bfin.opt:44 config/arm/arm.opt:120 +#: config/bfin/bfin.opt:44 config/arm/arm.opt:117 #, no-c-format msgid "Specify the name of the target CPU." msgstr "" @@ -6114,7 +6117,7 @@ msgstr "" msgid "Link with the fast floating-point library." msgstr "" -#: config/bfin/bfin.opt:90 config/arm/arm.opt:348 config/frv/frv.opt:130 +#: config/bfin/bfin.opt:90 config/arm/arm.opt:345 config/frv/frv.opt:130 #, no-c-format msgid "Enable Function Descriptor PIC mode." msgstr "" @@ -6264,7 +6267,7 @@ msgstr "" msgid "Align variables on a 32-bit boundary." msgstr "" -#: config/m68k/m68k.opt:103 config/arm/arm.opt:89 config/nios2/nios2.opt:570 +#: config/m68k/m68k.opt:103 config/arm/arm.opt:86 config/nios2/nios2.opt:570 #: config/nds32/nds32.opt:171 config/c6x/c6x.opt:67 #, no-c-format msgid "Specify the name of the target architecture." @@ -6371,13 +6374,13 @@ msgid "Support TLS segment larger than 64K." msgstr "" #: config/riscv/riscv.opt:26 config/aarch64/aarch64.opt:74 -#: config/arm/arm.opt:108 config/microblaze/microblaze.opt:60 +#: config/arm/arm.opt:105 config/microblaze/microblaze.opt:60 #, no-c-format msgid "Assume target CPU is configured as big endian." msgstr "" #: config/riscv/riscv.opt:30 config/aarch64/aarch64.opt:94 -#: config/arm/arm.opt:173 config/microblaze/microblaze.opt:64 +#: config/arm/arm.opt:170 config/microblaze/microblaze.opt:64 #, no-c-format msgid "Assume target CPU is configured as little endian." msgstr "" @@ -6519,116 +6522,125 @@ msgid "Known data alignment choices (for use with the -malign-data= option):" msgstr "" #: config/riscv/riscv.opt:201 config/aarch64/aarch64.opt:304 -#: config/i386/i386.opt:1034 config/arm/arm.opt:352 +#: config/i386/i386.opt:1038 config/arm/arm.opt:349 #: config/rs6000/rs6000.opt:550 #, no-c-format msgid "Use given stack-protector guard." msgstr "" #: config/riscv/riscv.opt:205 config/aarch64/aarch64.opt:308 -#: config/arm/arm.opt:356 config/rs6000/rs6000.opt:554 +#: config/arm/arm.opt:353 config/rs6000/rs6000.opt:554 #, no-c-format msgid "Valid arguments to -mstack-protector-guard=:" msgstr "" -#: config/riscv/riscv.opt:215 config/i386/i386.opt:1048 +#: config/riscv/riscv.opt:215 config/i386/i386.opt:1052 #: config/rs6000/rs6000.opt:564 #, no-c-format msgid "Use the given base register for addressing the stack-protector guard." msgstr "" -#: config/riscv/riscv.opt:222 config/i386/i386.opt:1055 +#: config/riscv/riscv.opt:222 config/i386/i386.opt:1059 #: config/rs6000/rs6000.opt:571 #, no-c-format msgid "Use the given offset for addressing the stack-protector guard." msgstr "" -#: config/riscv/riscv.opt:492 +#: config/riscv/riscv.opt:494 #, no-c-format msgid "Supported ISA specs (for use with the -misa-spec= option):" msgstr "" -#: config/riscv/riscv.opt:505 +#: config/riscv/riscv.opt:507 #, no-c-format msgid "Set the version of RISC-V ISA spec." msgstr "" -#: config/riscv/riscv.opt:509 +#: config/riscv/riscv.opt:511 #, no-c-format msgid "Enable conditional moves unconditionally." msgstr "" -#: config/riscv/riscv.opt:513 +#: config/riscv/riscv.opt:515 #, no-c-format msgid "Always inline subword atomic operations." msgstr "" -#: config/riscv/riscv.opt:517 +#: config/riscv/riscv.opt:519 #, no-c-format msgid "Inline strcmp calls if possible." msgstr "" -#: config/riscv/riscv.opt:521 +#: config/riscv/riscv.opt:523 #, no-c-format msgid "Inline strncmp calls if possible." msgstr "" -#: config/riscv/riscv.opt:525 +#: config/riscv/riscv.opt:527 #, no-c-format msgid "Inline strlen calls if possible." msgstr "" -#: config/riscv/riscv.opt:529 +#: config/riscv/riscv.opt:531 #, no-c-format msgid "" "Max number of bytes to compare as part of inlined strcmp/strncmp routines " "(default: 64)." msgstr "" -#: config/riscv/riscv.opt:533 +#: config/riscv/riscv.opt:535 #, no-c-format -msgid "Valid arguments to -param=riscv-autovec-preference=:" +msgid "The RVV possible LMUL (-mrvv-max-lmul=):" msgstr "" -#: config/riscv/riscv.opt:546 +#: config/riscv/riscv.opt:554 #, no-c-format -msgid "" -"-param=riscv-autovec-preference=<string>\tSet the preference of auto-" -"vectorization in the RISC-V port." +msgid "-mrvv-max-lmul=<string>\tSet the RVV LMUL of auto-vectorization." msgstr "" -#: config/riscv/riscv.opt:550 +#: config/riscv/riscv.opt:561 #, no-c-format -msgid "The RVV possible LMUL (-param=riscv-autovec-lmul=):" +msgid "Valid arguments to -param=vsetvl-strategy=:" msgstr "" -#: config/riscv/riscv.opt:569 +#: config/riscv/riscv.opt:574 #, no-c-format msgid "" -"-param=riscv-autovec-lmul=<string>\tSet the RVV LMUL of auto-vectorization " -"in the RISC-V port." +"-param=vsetvl-strategy=<string>\tSet the optimization level of VSETVL insert " +"pass." msgstr "" -#: config/riscv/riscv.opt:576 +#: config/riscv/riscv.opt:578 config/i386/i386.opt:496 #, no-c-format -msgid "Valid arguments to -param=vsetvl-strategy=:" +msgid "Valid arguments to -mstringop-strategy=:" +msgstr "" + +#: config/riscv/riscv.opt:594 +#, no-c-format +msgid "Specify stringop expansion strategy." msgstr "" -#: config/riscv/riscv.opt:589 +#: config/riscv/riscv.opt:598 +#, no-c-format +msgid "The possible RVV vector register lengths:" +msgstr "" + +#: config/riscv/riscv.opt:608 #, no-c-format msgid "" -"-param=vsetvl-strategy=<string>\tSet the optimization level of VSETVL insert " -"pass." +"-mrvv-vector-bits=<string>\tSet the kind of bits for an RVV vector register." msgstr "" -#: config/riscv/riscv.opt:593 config/i386/i386.opt:496 +#: config/riscv/riscv.opt:612 config/aarch64/aarch64.opt:49 +#: config/loongarch/loongarch.opt:258 #, no-c-format -msgid "Valid arguments to -mstringop-strategy=:" +msgid "The possible TLS dialects:" msgstr "" -#: config/riscv/riscv.opt:609 +#: config/riscv/riscv.opt:622 config/aarch64/aarch64.opt:145 +#: config/loongarch/loongarch.opt:268 #, no-c-format -msgid "Specify stringop expansion strategy." +msgid "Specify TLS dialect." msgstr "" #: config/m32c/m32c.opt:23 @@ -6778,22 +6790,17 @@ msgid "" "__mspabi helper function. The default value is 4." msgstr "" -#: config/aarch64/aarch64.opt:49 -#, no-c-format -msgid "The possible TLS dialects:" -msgstr "" - #: config/aarch64/aarch64.opt:61 config/loongarch/loongarch.opt:219 #, no-c-format msgid "The code model option names for -mcmodel:" msgstr "" -#: config/aarch64/aarch64.opt:78 config/i386/i386.opt:1069 +#: config/aarch64/aarch64.opt:78 config/i386/i386.opt:1073 #, no-c-format msgid "Generate code which uses only the general registers." msgstr "" -#: config/aarch64/aarch64.opt:82 config/i386/i386.opt:1161 +#: config/aarch64/aarch64.opt:82 config/i386/i386.opt:1165 #, no-c-format msgid "Generate code to mitigate against straight line speculation." msgstr "" @@ -6823,11 +6830,6 @@ msgstr "" msgid "Don't assume that unaligned accesses are handled by the system." msgstr "" -#: config/aarch64/aarch64.opt:145 -#, no-c-format -msgid "Specify TLS dialect." -msgstr "" - #: config/aarch64/aarch64.opt:149 #, no-c-format msgid "" @@ -6871,7 +6873,7 @@ msgstr "" msgid "PC relative literal loads." msgstr "" -#: config/aarch64/aarch64.opt:202 config/arm/arm.opt:340 +#: config/aarch64/aarch64.opt:202 config/arm/arm.opt:337 #, no-c-format msgid "Use branch-protection features." msgstr "" @@ -7755,7 +7757,7 @@ msgstr "" msgid "Generate code for given CPU." msgstr "" -#: config/i386/i386.opt:282 config/bpf/bpf.opt:98 +#: config/i386/i386.opt:282 config/bpf/bpf.opt:100 #, no-c-format msgid "Use given assembler dialect." msgstr "" @@ -7990,7 +7992,7 @@ msgstr "" msgid "Generate reciprocals instead of divss and sqrtss." msgstr "" -#: config/i386/i386.opt:601 config/loongarch/loongarch.opt:214 +#: config/i386/i386.opt:601 config/loongarch/loongarch.opt:210 #, no-c-format msgid "Control generation of reciprocal estimates." msgstr "" @@ -8067,817 +8069,824 @@ msgstr "" msgid "Maximum number of bits that can be stored to memory efficiently." msgstr "" -#: config/i386/i386.opt:666 +#: config/i386/i386.opt:664 #, no-c-format -msgid "Generate 32bit i386 code." +msgid "" +"Optimize noreturn functions by not saving callee-saved registers used in the " +"function." msgstr "" #: config/i386/i386.opt:670 #, no-c-format -msgid "Generate 64bit x86-64 code." +msgid "Generate 32bit i386 code." msgstr "" #: config/i386/i386.opt:674 #, no-c-format -msgid "Generate 32bit x86-64 code." +msgid "Generate 64bit x86-64 code." msgstr "" #: config/i386/i386.opt:678 #, no-c-format -msgid "Generate 16bit i386 code." +msgid "Generate 32bit x86-64 code." msgstr "" #: config/i386/i386.opt:682 #, no-c-format -msgid "Support MMX built-in functions." +msgid "Generate 16bit i386 code." msgstr "" #: config/i386/i386.opt:686 #, no-c-format -msgid "Support 3DNow! built-in functions." +msgid "Support MMX built-in functions." msgstr "" #: config/i386/i386.opt:690 #, no-c-format -msgid "Support Athlon 3Dnow! built-in functions." +msgid "Support 3DNow! built-in functions." msgstr "" #: config/i386/i386.opt:694 #, no-c-format -msgid "Support MMX and SSE built-in functions and code generation." +msgid "Support Athlon 3Dnow! built-in functions." msgstr "" #: config/i386/i386.opt:698 #, no-c-format -msgid "Support MMX, SSE and SSE2 built-in functions and code generation." +msgid "Support MMX and SSE built-in functions and code generation." msgstr "" #: config/i386/i386.opt:702 #, no-c-format -msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation." +msgid "Support MMX, SSE and SSE2 built-in functions and code generation." msgstr "" #: config/i386/i386.opt:706 #, no-c-format +msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation." +msgstr "" + +#: config/i386/i386.opt:710 +#, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code " "generation." msgstr "" -#: config/i386/i386.opt:710 +#: config/i386/i386.opt:714 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code " "generation." msgstr "" -#: config/i386/i386.opt:714 config/i386/i386.opt:718 +#: config/i386/i386.opt:718 config/i386/i386.opt:722 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions " "and code generation." msgstr "" -#: config/i386/i386.opt:722 +#: config/i386/i386.opt:726 #, no-c-format msgid "" "Do not support SSE4.1 and SSE4.2 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:730 +#: config/i386/i386.opt:734 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in " "functions and code generation." msgstr "" -#: config/i386/i386.opt:734 +#: config/i386/i386.opt:738 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in " "functions and code generation." msgstr "" -#: config/i386/i386.opt:738 +#: config/i386/i386.opt:742 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:742 +#: config/i386/i386.opt:746 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512PF built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:746 +#: config/i386/i386.opt:750 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512ER built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:750 +#: config/i386/i386.opt:754 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512CD built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:754 +#: config/i386/i386.opt:758 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512DQ built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:758 +#: config/i386/i386.opt:762 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512BW built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:762 +#: config/i386/i386.opt:766 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512VL built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:766 +#: config/i386/i386.opt:770 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512IFMA built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:770 +#: config/i386/i386.opt:774 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F " "and AVX512VBMI built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:774 +#: config/i386/i386.opt:778 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and " "AVX5124FMAPS built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:778 +#: config/i386/i386.opt:782 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and " "AVX5124VNNIW built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:782 +#: config/i386/i386.opt:786 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and " "AVX512VPOPCNTDQ built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:786 +#: config/i386/i386.opt:790 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and " "AVX512VBMI2 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:790 +#: config/i386/i386.opt:794 #, no-c-format msgid "Support AVX512VNNI built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:794 +#: config/i386/i386.opt:798 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and " "AVX512BITALG built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:798 +#: config/i386/i386.opt:802 #, no-c-format msgid "Support AVX512VP2INTERSECT built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:802 +#: config/i386/i386.opt:806 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in " "functions and code generation." msgstr "" -#: config/i386/i386.opt:806 +#: config/i386/i386.opt:810 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code " "generation." msgstr "" -#: config/i386/i386.opt:810 +#: config/i386/i386.opt:814 #, no-c-format msgid "Support FMA4 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:814 +#: config/i386/i386.opt:818 #, no-c-format msgid "Support XOP built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:818 +#: config/i386/i386.opt:822 #, no-c-format msgid "Support LWP built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:822 +#: config/i386/i386.opt:826 #, no-c-format msgid "" "Support code generation of Advanced Bit Manipulation (ABM) instructions." msgstr "" -#: config/i386/i386.opt:826 +#: config/i386/i386.opt:830 #, no-c-format msgid "Support code generation of popcnt instruction." msgstr "" -#: config/i386/i386.opt:830 +#: config/i386/i386.opt:834 #, no-c-format msgid "Support PCONFIG built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:834 +#: config/i386/i386.opt:838 #, no-c-format msgid "Support WBNOINVD built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:838 +#: config/i386/i386.opt:842 #, no-c-format msgid "Support PTWRITE built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:842 +#: config/i386/i386.opt:846 #, no-c-format msgid "Support UINTR built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:846 +#: config/i386/i386.opt:850 #, no-c-format msgid "Support SGX built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:850 +#: config/i386/i386.opt:854 #, no-c-format msgid "Support RDPID built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:854 +#: config/i386/i386.opt:858 #, no-c-format msgid "Support GFNI built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:858 +#: config/i386/i386.opt:862 #, no-c-format msgid "Support VAES built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:862 +#: config/i386/i386.opt:866 #, no-c-format msgid "Support VPCLMULQDQ built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:866 +#: config/i386/i386.opt:870 #, no-c-format msgid "Support BMI built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:870 +#: config/i386/i386.opt:874 #, no-c-format msgid "Support BMI2 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:874 +#: config/i386/i386.opt:878 #, no-c-format msgid "Support LZCNT built-in function and code generation." msgstr "" -#: config/i386/i386.opt:878 +#: config/i386/i386.opt:882 #, no-c-format msgid "Support Hardware Lock Elision prefixes." msgstr "" -#: config/i386/i386.opt:882 +#: config/i386/i386.opt:886 #, no-c-format msgid "Support RDSEED instruction." msgstr "" -#: config/i386/i386.opt:886 +#: config/i386/i386.opt:890 #, no-c-format msgid "Support PREFETCHW instruction." msgstr "" -#: config/i386/i386.opt:890 +#: config/i386/i386.opt:894 #, no-c-format msgid "Support flag-preserving add-carry instructions." msgstr "" -#: config/i386/i386.opt:894 +#: config/i386/i386.opt:898 #, no-c-format msgid "Support CLFLUSHOPT instructions." msgstr "" -#: config/i386/i386.opt:898 +#: config/i386/i386.opt:902 #, no-c-format msgid "Support CLWB instruction." msgstr "" -#: config/i386/i386.opt:905 +#: config/i386/i386.opt:909 #, no-c-format msgid "Support FXSAVE and FXRSTOR instructions." msgstr "" -#: config/i386/i386.opt:909 +#: config/i386/i386.opt:913 #, no-c-format msgid "Support XSAVE and XRSTOR instructions." msgstr "" -#: config/i386/i386.opt:913 +#: config/i386/i386.opt:917 #, no-c-format msgid "Support XSAVEOPT instruction." msgstr "" -#: config/i386/i386.opt:917 +#: config/i386/i386.opt:921 #, no-c-format msgid "Support XSAVEC instructions." msgstr "" -#: config/i386/i386.opt:921 +#: config/i386/i386.opt:925 #, no-c-format msgid "Support XSAVES and XRSTORS instructions." msgstr "" -#: config/i386/i386.opt:925 +#: config/i386/i386.opt:929 #, no-c-format msgid "Support TBM built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:929 +#: config/i386/i386.opt:933 #, no-c-format msgid "Support code generation of cmpxchg16b instruction." msgstr "" -#: config/i386/i386.opt:933 +#: config/i386/i386.opt:937 #, no-c-format msgid "Support code generation of sahf instruction in 64bit x86-64 code." msgstr "" -#: config/i386/i386.opt:937 +#: config/i386/i386.opt:941 #, no-c-format msgid "Support code generation of movbe instruction." msgstr "" -#: config/i386/i386.opt:941 +#: config/i386/i386.opt:945 #, no-c-format msgid "Support code generation of crc32 instruction." msgstr "" -#: config/i386/i386.opt:945 +#: config/i386/i386.opt:949 #, no-c-format msgid "Support AES built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:949 +#: config/i386/i386.opt:953 #, no-c-format msgid "Support SHA1 and SHA256 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:953 +#: config/i386/i386.opt:957 #, no-c-format msgid "Support PCLMUL built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:957 +#: config/i386/i386.opt:961 #, no-c-format msgid "Encode SSE instructions with VEX prefix." msgstr "" -#: config/i386/i386.opt:961 +#: config/i386/i386.opt:965 #, no-c-format msgid "Support FSGSBASE built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:965 +#: config/i386/i386.opt:969 #, no-c-format msgid "Support RDRND built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:969 +#: config/i386/i386.opt:973 #, no-c-format msgid "Support F16C built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:973 +#: config/i386/i386.opt:977 #, no-c-format msgid "Support PREFETCHWT1 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:977 +#: config/i386/i386.opt:981 #, no-c-format msgid "Emit profiling counter call at function entry before prologue." msgstr "" -#: config/i386/i386.opt:981 +#: config/i386/i386.opt:985 #, no-c-format msgid "Generate __mcount_loc section with all mcount or __fentry__ calls." msgstr "" -#: config/i386/i386.opt:985 config/s390/s390.opt:311 +#: config/i386/i386.opt:989 config/s390/s390.opt:311 #, no-c-format msgid "" "Generate mcount/__fentry__ calls as nops. To activate they need to be " "patched in." msgstr "" -#: config/i386/i386.opt:990 +#: config/i386/i386.opt:994 #, no-c-format msgid "Set name of __fentry__ symbol called at function entry." msgstr "" -#: config/i386/i386.opt:994 +#: config/i386/i386.opt:998 #, no-c-format msgid "Set name of section to record mrecord-mcount calls." msgstr "" -#: config/i386/i386.opt:998 +#: config/i386/i386.opt:1002 #, no-c-format msgid "Skip setting up RAX register when passing variable arguments." msgstr "" -#: config/i386/i386.opt:1002 +#: config/i386/i386.opt:1006 #, no-c-format msgid "" "Expand 32bit/64bit integer divide into 8bit unsigned integer divide with run-" "time check." msgstr "" -#: config/i386/i386.opt:1006 +#: config/i386/i386.opt:1010 #, no-c-format msgid "Split 32-byte AVX unaligned load." msgstr "" -#: config/i386/i386.opt:1010 +#: config/i386/i386.opt:1014 #, no-c-format msgid "Split 32-byte AVX unaligned store." msgstr "" -#: config/i386/i386.opt:1014 +#: config/i386/i386.opt:1018 #, no-c-format msgid "Support RTM built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1022 +#: config/i386/i386.opt:1026 #, no-c-format msgid "Support MWAITX and MONITORX built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1026 +#: config/i386/i386.opt:1030 #, no-c-format msgid "Support CLZERO built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1030 +#: config/i386/i386.opt:1034 #, no-c-format msgid "Support PKU built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1038 +#: config/i386/i386.opt:1042 #, no-c-format msgid "" "Known stack protector guard (for use with the -mstack-protector-guard= " "option):" msgstr "" -#: config/i386/i386.opt:1062 +#: config/i386/i386.opt:1066 #, no-c-format msgid "Use the given symbol for addressing the stack-protector guard." msgstr "" -#: config/i386/i386.opt:1073 +#: config/i386/i386.opt:1077 #, no-c-format msgid "" "Enable shadow stack built-in functions from Control-flow Enforcement " "Technology (CET)." msgstr "" -#: config/i386/i386.opt:1078 +#: config/i386/i386.opt:1082 #, no-c-format msgid "" "Turn on CET instrumentation for switch statements that use a jump table and " "an indirect jump." msgstr "" -#: config/i386/i386.opt:1083 +#: config/i386/i386.opt:1087 #, no-c-format msgid "" "Insert ENDBR instruction at function entry only via cf_check attribute for " "CET instrumentation." msgstr "" -#: config/i386/i386.opt:1088 +#: config/i386/i386.opt:1092 #, no-c-format msgid "Make all function calls indirect." msgstr "" -#: config/i386/i386.opt:1092 +#: config/i386/i386.opt:1096 #, no-c-format msgid "Convert indirect call and jump to call and return thunks." msgstr "" -#: config/i386/i386.opt:1096 +#: config/i386/i386.opt:1100 #, no-c-format msgid "Convert function return to call and return thunk." msgstr "" -#: config/i386/i386.opt:1100 config/s390/s390.opt:277 +#: config/i386/i386.opt:1104 config/s390/s390.opt:277 #, no-c-format msgid "" "Known indirect branch choices (for use with the -mindirect-branch=/-" "mfunction-return= options):" msgstr "" -#: config/i386/i386.opt:1116 +#: config/i386/i386.opt:1120 #, no-c-format msgid "" "Add CS prefix to call and jmp to indirect thunk with branch target in r8-r15 " "registers." msgstr "" -#: config/i386/i386.opt:1120 +#: config/i386/i386.opt:1124 #, no-c-format msgid "Force indirect call and jump via register." msgstr "" -#: config/i386/i386.opt:1124 +#: config/i386/i386.opt:1128 #, no-c-format msgid "Support MOVDIRI built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1128 +#: config/i386/i386.opt:1132 #, no-c-format msgid "Support MOVDIR64B built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1132 +#: config/i386/i386.opt:1136 #, no-c-format msgid "Support WAITPKG built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1136 +#: config/i386/i386.opt:1140 #, no-c-format msgid "Support CLDEMOTE built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1140 +#: config/i386/i386.opt:1144 #, no-c-format msgid "Instrument function exit in instrumented functions with __fentry__." msgstr "" -#: config/i386/i386.opt:1144 +#: config/i386/i386.opt:1148 #, no-c-format msgid "Known choices for return instrumentation with -minstrument-return=:" msgstr "" -#: config/i386/i386.opt:1157 +#: config/i386/i386.opt:1161 #, no-c-format msgid "" "Generate a __return_loc section pointing to all return instrumentation code." msgstr "" -#: config/i386/i386.opt:1165 +#: config/i386/i386.opt:1169 #, no-c-format msgid "" "Known choices for mitigation against straight line speculation with -mharden-" "sls=:" msgstr "" -#: config/i386/i386.opt:1181 +#: config/i386/i386.opt:1185 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and " "AVX512BF16 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1186 +#: config/i386/i386.opt:1190 #, no-c-format msgid "Support ENQCMD built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1190 +#: config/i386/i386.opt:1194 #, no-c-format msgid "Support SERIALIZE built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1194 +#: config/i386/i386.opt:1198 #, no-c-format msgid "Support TSXLDTRK built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1198 +#: config/i386/i386.opt:1202 #, no-c-format msgid "Support AMX-TILE built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1202 +#: config/i386/i386.opt:1206 #, no-c-format msgid "Support AMX-INT8 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1206 +#: config/i386/i386.opt:1210 #, no-c-format msgid "Support AMX-BF16 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1210 +#: config/i386/i386.opt:1214 #, no-c-format msgid "Support HRESET built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1214 +#: config/i386/i386.opt:1218 #, no-c-format msgid "Support KL built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1218 +#: config/i386/i386.opt:1222 #, no-c-format msgid "Support WIDEKL built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1222 +#: config/i386/i386.opt:1226 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVXVNNI " "built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1227 +#: config/i386/i386.opt:1231 #, no-c-format msgid "Emit GNU_PROPERTY_X86_ISA_1_NEEDED GNU property." msgstr "" -#: config/i386/i386.opt:1231 +#: config/i386/i386.opt:1235 #, no-c-format msgid "Support MWAIT and MONITOR built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1235 +#: config/i386/i386.opt:1239 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512F and " "AVX512-FP16 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1239 +#: config/i386/i386.opt:1243 #, no-c-format msgid "Do not use GOT to access external symbols." msgstr "" -#: config/i386/i386.opt:1243 +#: config/i386/i386.opt:1247 #, no-c-format msgid "Instructions number above which STFL stall penalty can be compensated." msgstr "" -#: config/i386/i386.opt:1247 +#: config/i386/i386.opt:1251 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVXIFMA " "built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1252 +#: config/i386/i386.opt:1256 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and " "AVXVNNIINT8 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1257 +#: config/i386/i386.opt:1261 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and " "AVXNECONVERT build-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1262 +#: config/i386/i386.opt:1266 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and " "CMPCCXADD build-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1267 +#: config/i386/i386.opt:1271 #, no-c-format msgid "Support AMX-FP16 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1271 +#: config/i386/i386.opt:1275 #, no-c-format msgid "Support PREFETCHI built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1275 +#: config/i386/i386.opt:1279 #, no-c-format msgid "Support RAOINT built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1279 +#: config/i386/i386.opt:1283 #, no-c-format msgid "Enable conservative small loop unrolling." msgstr "" -#: config/i386/i386.opt:1283 +#: config/i386/i386.opt:1287 #, no-c-format msgid "" "-mlam=[none|u48|u57] Instrument meta data position in user data pointers." msgstr "" -#: config/i386/i386.opt:1299 +#: config/i386/i386.opt:1303 #, no-c-format msgid "Support AMX-COMPLEX built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1303 +#: config/i386/i386.opt:1307 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and " "AVXVNNIINT16 built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1308 +#: config/i386/i386.opt:1312 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM3 built-in " "functions and code generation." msgstr "" -#: config/i386/i386.opt:1313 +#: config/i386/i386.opt:1317 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SHA512 built-in " "functions and code generation." msgstr "" -#: config/i386/i386.opt:1318 +#: config/i386/i386.opt:1322 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and SM4 built-in " "functions and code generation." msgstr "" -#: config/i386/i386.opt:1323 +#: config/i386/i386.opt:1327 #, no-c-format msgid "Enable vectorization for gather instruction." msgstr "" -#: config/i386/i386.opt:1327 +#: config/i386/i386.opt:1331 #, no-c-format msgid "Enable vectorization for scatter instruction." msgstr "" -#: config/i386/i386.opt:1331 +#: config/i386/i386.opt:1335 #, no-c-format msgid "" "Support code generation for APX features, including EGPR, PUSH2POP2, NDD and " "PPX." msgstr "" -#: config/i386/i386.opt:1360 +#: config/i386/i386.opt:1364 #, no-c-format msgid "Enable GPR32 in inline asm when APX_F enabled." msgstr "" -#: config/i386/i386.opt:1364 +#: config/i386/i386.opt:1368 #, no-c-format msgid "Support 512 bit vector built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1368 +#: config/i386/i386.opt:1372 #, no-c-format msgid "Support USER_MSR built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1372 config/i386/i386.opt:1382 +#: config/i386/i386.opt:1376 config/i386/i386.opt:1386 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and AVX10.1 " "built-in functions and code generation." msgstr "" -#: config/i386/i386.opt:1377 +#: config/i386/i386.opt:1381 #, no-c-format msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, and " @@ -9266,38 +9275,46 @@ msgstr "" #: config/avr/avr.opt:23 #, no-c-format -msgid "Use subroutines for function prologues and epilogues." +msgid "Optimization. Use subroutines for function prologues and epilogues." msgstr "" #: config/avr/avr.opt:27 #, no-c-format -msgid "-mmcu=MCU\tSelect the target MCU." +msgid "-mmcu=<MCU>\tSelect the target MCU." msgstr "" #: config/avr/avr.opt:31 #, no-c-format msgid "" -"Allow usage of __gcc_isr pseudo instructions in ISR prologues and epilogues." +"Optimization. Allow usage of __gcc_isr pseudo instructions in ISR prologues " +"and epilogues." msgstr "" #: config/avr/avr.opt:35 #, no-c-format -msgid "Set the number of 64 KiB flash segments." +msgid "" +"This option is used internally. Set the number of 64 KiB flash segments." msgstr "" #: config/avr/avr.opt:39 #, no-c-format -msgid "Indicate presence of a processor erratum." +msgid "" +"This option is used internally. Indicate presence of a processor erratum. " +"Do not skip 32-bit instructions." msgstr "" #: config/avr/avr.opt:43 #, no-c-format -msgid "Enable Read-Modify-Write (RMW) instructions support/use." +msgid "" +"This option is used internally. Enable Read-Modify-Write (RMW) instructions " +"support/use." msgstr "" #: config/avr/avr.opt:53 #, no-c-format -msgid "Use RJMP / RCALL even though CALL / JMP are available." +msgid "" +"This option is used internally for multilib generation and selection. " +"Assume RJMP / RCALL can target all program memory." msgstr "" #: config/avr/avr.opt:57 @@ -9313,13 +9330,14 @@ msgstr "" #: config/avr/avr.opt:65 #, no-c-format msgid "" -"Set the branch costs for conditional branch instructions. Reasonable values " -"are small, non-negative integers. The default branch cost is 0." +"-mbranch-cost=<cost>\tOptimization. Set the branch costs for conditional " +"branch instructions. Reasonable values are small, non-negative integers. " +"The default branch cost is 0." msgstr "" #: config/avr/avr.opt:69 #, no-c-format -msgid "Treat main as if it had attribute OS_task." +msgid "Optimization. Treat main as if it had attribute OS_task." msgstr "" #: config/avr/avr.opt:79 @@ -9329,7 +9347,7 @@ msgstr "" #: config/avr/avr.opt:83 #, no-c-format -msgid "Relax branches." +msgid "Optimization. Relax branches." msgstr "" #: config/avr/avr.opt:87 @@ -9342,29 +9360,29 @@ msgstr "" #: config/avr/avr.opt:91 #, no-c-format msgid "" -"Accumulate outgoing function arguments and acquire/release the needed stack " -"space for outgoing function arguments in function prologue/epilogue. " -"Without this option, outgoing arguments are pushed before calling a function " -"and popped afterwards. This option can lead to reduced code size for " -"functions that call many functions that get their arguments on the stack " +"Optimization. Accumulate outgoing function arguments and acquire/release the " +"needed stack space for outgoing function arguments in function prologue/" +"epilogue. Without this option, outgoing arguments are pushed before calling " +"a function and popped afterwards. This option can lead to reduced code size " +"for functions that call many functions that get their arguments on the stack " "like, for example printf." msgstr "" #: config/avr/avr.opt:95 #, no-c-format msgid "" -"When accessing RAM, use X as imposed by the hardware, i.e. just use pre-" -"decrement, post-increment and indirect addressing with the X register. " -"Without this option, the compiler may assume that there is an addressing " -"mode X+const similar to Y+const and Z+const and emit instructions to emulate " -"such an addressing mode for X." +"Optimization. When accessing RAM, use X as imposed by the hardware, i.e. " +"just use pre-decrement, post-increment and indirect addressing with the X " +"register. Without this option, the compiler may assume that there is an " +"addressing mode X+const similar to Y+const and Z+const and emit instructions " +"to emulate such an addressing mode for X." msgstr "" #: config/avr/avr.opt:99 #, no-c-format msgid "" -"The device has the bitfield NVMCTRL_CTRLB.FLMAP. This option is used " -"internally." +"This option is used internally. The device has the bitfield NVMCTRL_CTRLB." +"FLMAP." msgstr "" #: config/avr/avr.opt:103 @@ -9375,58 +9393,72 @@ msgstr "" #: config/avr/avr.opt:108 #, no-c-format msgid "" -"The device has no SPH special function register. This option will be " -"overridden by the compiler driver with the correct setting if presence/" -"absence of SPH can be deduced from -mmcu=MCU." +"This option is used internally for multilib generation and selection. The " +"device has no SPH special function register." msgstr "" #: config/avr/avr.opt:112 #, no-c-format -msgid "Warn if the address space of an address is changed." +msgid "" +"Optimization. Split register additions from load/store instructions. Most " +"useful on Reduced Tiny." msgstr "" #: config/avr/avr.opt:116 #, no-c-format msgid "" +"-mfuse-add=<0,2>\tOptimization. Split register additions from load/store " +"instructions. Most useful on Reduced Tiny." +msgstr "" + +#: config/avr/avr.opt:120 +#, no-c-format +msgid "Warn if the address space of an address is changed." +msgstr "" + +#: config/avr/avr.opt:124 +#, no-c-format +msgid "" "Warn if the ISR is misspelled, i.e. without __vector prefix. Enabled by " "default." msgstr "" -#: config/avr/avr.opt:120 +#: config/avr/avr.opt:128 #, no-c-format msgid "" "Allow to use truncation instead of rounding towards zero for fractional " "fixed-point types." msgstr "" -#: config/avr/avr.opt:124 +#: config/avr/avr.opt:132 #, no-c-format msgid "" -"Assume that all data in static storage can be accessed by LDS / STS. This " -"option is only useful for reduced Tiny devices." +"Assume that all data in static storage can be accessed by LDS / STS " +"instructions. This option is only useful for reduced Tiny devices like " +"ATtiny40." msgstr "" -#: config/avr/avr.opt:128 +#: config/avr/avr.opt:136 #, no-c-format msgid "-mdouble=<BITS>\tUse <BITS> bits wide double type." msgstr "" -#: config/avr/avr.opt:132 +#: config/avr/avr.opt:140 #, no-c-format msgid "-mlong-double=<BITS>\tUse <BITS> bits wide long double type." msgstr "" -#: config/avr/avr.opt:136 +#: config/avr/avr.opt:144 #, no-c-format msgid "Do not link against the device-specific library lib<MCU>.a." msgstr "" -#: config/avr/avr.opt:140 +#: config/avr/avr.opt:148 #, no-c-format msgid "Do not use the device-specific specs file device-specs/specs-<MCU>." msgstr "" -#: config/avr/avr.opt:144 +#: config/avr/avr.opt:152 #, no-c-format msgid "Available BITS selections:" msgstr "" @@ -9675,7 +9707,7 @@ msgid "" "are small, non-negative integers. The default branch cost is 1." msgstr "" -#: config/s390/s390.opt:238 config/arm/arm.opt:181 +#: config/s390/s390.opt:238 config/arm/arm.opt:178 #, no-c-format msgid "Assume data segments are relative to text segment." msgstr "" @@ -9770,9 +9802,9 @@ msgstr "" #: config/s390/s390.opt:335 #, no-c-format msgid "" -"Assume external symbols to be potentially unaligned. By default all symbols " -"without explicit alignment are assumed to reside on a 2 byte boundary as " -"mandated by the IBM Z ABI." +"Assume external symbols, whose natural alignment would be 1, to be " +"potentially unaligned. By default all symbols without explicit alignment " +"are assumed to reside on a 2 byte boundary as mandated by the IBM Z ABI." msgstr "" #: config/rl78/rl78.opt:27 config/rx/elf.opt:26 config/csky/csky.opt:198 @@ -9850,159 +9882,159 @@ msgstr "" msgid "Known ARM FPUs (for use with the -mfpu= option):" msgstr "" -#: config/arm/arm.opt:38 +#: config/arm/arm.opt:35 #, no-c-format msgid "TLS dialect to use:" msgstr "" -#: config/arm/arm.opt:48 +#: config/arm/arm.opt:45 #, no-c-format msgid "Specify an ABI." msgstr "" -#: config/arm/arm.opt:52 +#: config/arm/arm.opt:49 #, no-c-format msgid "Known ARM ABIs (for use with the -mabi= option):" msgstr "" -#: config/arm/arm.opt:71 +#: config/arm/arm.opt:68 #, no-c-format msgid "Generate a call to abort if a noreturn function returns." msgstr "" -#: config/arm/arm.opt:78 +#: config/arm/arm.opt:75 #, no-c-format msgid "Generate APCS conformant stack frames." msgstr "" -#: config/arm/arm.opt:82 +#: config/arm/arm.opt:79 #, no-c-format msgid "Generate re-entrant, PIC code." msgstr "" -#: config/arm/arm.opt:104 +#: config/arm/arm.opt:101 #, no-c-format msgid "Generate code in 32 bit ARM state." msgstr "" -#: config/arm/arm.opt:112 +#: config/arm/arm.opt:109 #, no-c-format msgid "Thumb: Assume non-static functions may be called from ARM code." msgstr "" -#: config/arm/arm.opt:116 +#: config/arm/arm.opt:113 #, no-c-format msgid "Thumb: Assume function pointers may go to non-Thumb aware code." msgstr "" -#: config/arm/arm.opt:124 config/csky/csky.opt:73 +#: config/arm/arm.opt:121 config/csky/csky.opt:73 #, no-c-format msgid "Specify if floating point hardware should be used." msgstr "" -#: config/arm/arm.opt:128 +#: config/arm/arm.opt:125 #, no-c-format msgid "" "Specify that the compiler should target secure code as per ARMv8-M Security " "Extensions." msgstr "" -#: config/arm/arm.opt:132 config/csky/csky.opt:77 +#: config/arm/arm.opt:129 config/csky/csky.opt:77 #, no-c-format msgid "Known floating-point ABIs (for use with the -mfloat-abi= option):" msgstr "" -#: config/arm/arm.opt:145 +#: config/arm/arm.opt:142 #, no-c-format msgid "Switch ARM/Thumb modes on alternating functions for compiler testing." msgstr "" -#: config/arm/arm.opt:149 +#: config/arm/arm.opt:146 #, no-c-format msgid "Specify the __fp16 floating-point format." msgstr "" -#: config/arm/arm.opt:153 +#: config/arm/arm.opt:150 #, no-c-format msgid "Known __fp16 formats (for use with the -mfp16-format= option):" msgstr "" -#: config/arm/arm.opt:166 +#: config/arm/arm.opt:163 #, no-c-format msgid "Specify the name of the target floating point hardware/format." msgstr "" -#: config/arm/arm.opt:177 +#: config/arm/arm.opt:174 #, no-c-format msgid "Generate call insns as indirect calls, if necessary." msgstr "" -#: config/arm/arm.opt:185 +#: config/arm/arm.opt:182 #, no-c-format msgid "Specify the register to be used for PIC addressing." msgstr "" -#: config/arm/arm.opt:189 +#: config/arm/arm.opt:186 #, no-c-format msgid "Store function names in object code." msgstr "" -#: config/arm/arm.opt:193 +#: config/arm/arm.opt:190 #, no-c-format msgid "Permit scheduling of a function's prologue sequence." msgstr "" -#: config/arm/arm.opt:197 config/rs6000/rs6000.opt:235 +#: config/arm/arm.opt:194 config/rs6000/rs6000.opt:235 #, no-c-format msgid "Do not load the PIC register in function prologues." msgstr "" -#: config/arm/arm.opt:204 +#: config/arm/arm.opt:201 #, no-c-format msgid "Specify the minimum bit alignment of structures. (Deprecated)." msgstr "" -#: config/arm/arm.opt:208 +#: config/arm/arm.opt:205 #, no-c-format msgid "Generate code for Thumb state." msgstr "" -#: config/arm/arm.opt:212 +#: config/arm/arm.opt:209 #, no-c-format msgid "Support calls between Thumb and ARM instruction sets." msgstr "" -#: config/arm/arm.opt:216 +#: config/arm/arm.opt:213 #, no-c-format msgid "Specify thread local storage scheme." msgstr "" -#: config/arm/arm.opt:220 +#: config/arm/arm.opt:217 #, no-c-format msgid "Specify how to access the thread pointer." msgstr "" -#: config/arm/arm.opt:224 +#: config/arm/arm.opt:221 #, no-c-format msgid "Valid arguments to -mtp=:" msgstr "" -#: config/arm/arm.opt:246 +#: config/arm/arm.opt:243 #, no-c-format msgid "Thumb: Generate (non-leaf) stack frames even if not needed." msgstr "" -#: config/arm/arm.opt:250 +#: config/arm/arm.opt:247 #, no-c-format msgid "Thumb: Generate (leaf) stack frames even if not needed." msgstr "" -#: config/arm/arm.opt:254 config/mn10300/mn10300.opt:42 +#: config/arm/arm.opt:251 config/mn10300/mn10300.opt:42 #, no-c-format msgid "Tune code for the given processor." msgstr "" -#: config/arm/arm.opt:258 +#: config/arm/arm.opt:255 #, no-c-format msgid "" "Print CPU tuning information as comment in assembler file. This is an " @@ -10010,108 +10042,108 @@ msgid "" "ordinary use in compiling code." msgstr "" -#: config/arm/arm.opt:269 +#: config/arm/arm.opt:266 #, no-c-format msgid "" "Use Neon quad-word (rather than double-word) registers for vectorization." msgstr "" -#: config/arm/arm.opt:273 +#: config/arm/arm.opt:270 #, no-c-format msgid "" "Use Neon double-word (rather than quad-word) registers for vectorization." msgstr "" -#: config/arm/arm.opt:277 +#: config/arm/arm.opt:274 #, no-c-format msgid "" "Enable more verbose RTX cost dumps during debug. For GCC developers use " "only." msgstr "" -#: config/arm/arm.opt:281 +#: config/arm/arm.opt:278 #, no-c-format msgid "Only generate absolute relocations on word sized values." msgstr "" -#: config/arm/arm.opt:285 +#: config/arm/arm.opt:282 #, no-c-format msgid "Generate IT blocks appropriate for ARMv8." msgstr "" -#: config/arm/arm.opt:289 +#: config/arm/arm.opt:286 #, no-c-format msgid "" "Avoid overlapping destination and address registers on LDRD instructions " "that may trigger Cortex-M3 errata." msgstr "" -#: config/arm/arm.opt:294 +#: config/arm/arm.opt:291 #, no-c-format msgid "Mitigate issues with VLLDM on some M-profile devices (CVE-2021-35465)." msgstr "" -#: config/arm/arm.opt:298 +#: config/arm/arm.opt:295 #, no-c-format msgid "" "Mitigate issues with AES instructions on Cortex-A57 and Cortex-A72 (Arm " "erratum #1742098)." msgstr "" -#: config/arm/arm.opt:303 +#: config/arm/arm.opt:300 #, no-c-format msgid "" "Mitigate issues with AES instructions on Cortex-A57 and Cortex-A72 (Arm " "erratum #1655431)." msgstr "" -#: config/arm/arm.opt:308 config/nds32/nds32.opt:461 config/arc/arc.opt:495 +#: config/arm/arm.opt:305 config/nds32/nds32.opt:461 config/arc/arc.opt:495 #, no-c-format msgid "Enable unaligned word and halfword accesses to packed data." msgstr "" -#: config/arm/arm.opt:312 +#: config/arm/arm.opt:309 #, no-c-format msgid "This option is deprecated and has no effect." msgstr "" -#: config/arm/arm.opt:316 +#: config/arm/arm.opt:313 #, no-c-format msgid "Assume loading data from flash is slower than fetching instructions." msgstr "" -#: config/arm/arm.opt:320 +#: config/arm/arm.opt:317 #, no-c-format msgid "Assume unified syntax for inline assembly code." msgstr "" -#: config/arm/arm.opt:324 +#: config/arm/arm.opt:321 #, no-c-format msgid "Do not allow constant data to be placed in code sections." msgstr "" -#: config/arm/arm.opt:328 +#: config/arm/arm.opt:325 #, no-c-format msgid "When linking for big-endian targets, generate a BE8 format image." msgstr "" -#: config/arm/arm.opt:332 +#: config/arm/arm.opt:329 #, no-c-format msgid "" "When linking for big-endian targets, generate a legacy BE32 format image." msgstr "" -#: config/arm/arm.opt:336 config/sh/sh.opt:195 +#: config/arm/arm.opt:333 config/sh/sh.opt:195 #, no-c-format msgid "Cost to assume for a branch insn." msgstr "" -#: config/arm/arm.opt:344 +#: config/arm/arm.opt:341 #, no-c-format msgid "Generate code which uses the core registers only (r0-r14)." msgstr "" -#: config/arm/arm.opt:366 +#: config/arm/arm.opt:363 #, no-c-format msgid "" "Use an immediate to offset from the TLS register. This option is for use " @@ -10845,7 +10877,7 @@ msgid "" "and penalize only if it's satisfied. The default value is 20." msgstr "" -#: config/rs6000/rs6000.opt:670 config/loongarch/loongarch.opt:263 +#: config/rs6000/rs6000.opt:670 config/loongarch/loongarch.opt:277 #, no-c-format msgid "" "Indicate how many non memory access vector instructions can be issued per " @@ -11247,7 +11279,7 @@ msgstr "" msgid "Use %reloc() assembly operators (for backward compatibility)." msgstr "" -#: config/loongarch/loongarch.opt:210 +#: config/loongarch/loongarch.opt:214 #, no-c-format msgid "" "Generate approximate reciprocal divide and square root for better throughput." @@ -11263,35 +11295,35 @@ msgstr "" msgid "Pass -mrelax or -mno-relax option to the assembler." msgstr "" -#: config/loongarch/loongarch.opt:258 +#: config/loongarch/loongarch.opt:272 #, no-c-format msgid "" "Used to limit unroll factor which indicates how much the autovectorizer may " "unroll a loop. The default value is 6." msgstr "" -#: config/loongarch/loongarch.opt:276 +#: config/loongarch/loongarch.opt:290 #, no-c-format msgid "Support frecipe.{s/d} and frsqrte.{s/d} instructions." msgstr "" -#: config/loongarch/loongarch.opt:280 +#: config/loongarch/loongarch.opt:294 #, no-c-format msgid "" "Support div.w[u] and mod.w[u] instructions with inputs not sign-extended." msgstr "" -#: config/loongarch/loongarch.opt:284 +#: config/loongarch/loongarch.opt:298 #, no-c-format msgid "Support am{swap/add}[_db].{b/h} instructions." msgstr "" -#: config/loongarch/loongarch.opt:288 +#: config/loongarch/loongarch.opt:302 #, no-c-format msgid "Support amcas[_db].{b/h/w/d} instructions." msgstr "" -#: config/loongarch/loongarch.opt:292 +#: config/loongarch/loongarch.opt:306 #, no-c-format msgid "Do not need load-load barriers (dbar 0x700)." msgstr "" @@ -12924,7 +12956,7 @@ msgstr "" msgid "No default crt0.o." msgstr "" -#: config/iq2000/iq2000.opt:74 config/mips/mips.opt:438 +#: config/iq2000/iq2000.opt:74 config/mips/mips.opt:446 #, no-c-format msgid "Put uninitialized constants in ROM (needs -membedded-data)." msgstr "" @@ -13523,62 +13555,69 @@ msgstr "" msgid "GCN GPU type to use:" msgstr "" -#: config/gcn/gcn.opt:51 config/gcn/gcn.opt:55 +#: config/gcn/gcn.opt:57 config/gcn/gcn.opt:61 #, no-c-format msgid "Specify the name of the target GPU." msgstr "" -#: config/gcn/gcn.opt:59 +#: config/gcn/gcn.opt:65 #, no-c-format msgid "Generate code for a 32-bit ABI." msgstr "" -#: config/gcn/gcn.opt:63 +#: config/gcn/gcn.opt:69 #, no-c-format msgid "Generate code for a 64-bit ABI." msgstr "" -#: config/gcn/gcn.opt:67 +#: config/gcn/gcn.opt:73 #, no-c-format msgid "Enable OpenMP GPU offloading." msgstr "" -#: config/gcn/gcn.opt:78 +#: config/gcn/gcn.opt:84 #, no-c-format msgid "Obsolete; use GCN_STACK_SIZE at runtime." msgstr "" -#: config/gcn/gcn.opt:84 +#: config/gcn/gcn.opt:90 #, no-c-format msgid "" "Amount of local data-share (LDS) memory to reserve for gang-private " "variables." msgstr "" -#: config/gcn/gcn.opt:88 +#: config/gcn/gcn.opt:94 #, no-c-format msgid "Warn about invalid OpenACC dimensions." msgstr "" -#: config/gcn/gcn.opt:92 +#: config/gcn/gcn.opt:98 #, no-c-format msgid "SRAM-ECC and XNACK modes:" msgstr "" -#: config/gcn/gcn.opt:108 +#: config/gcn/gcn.opt:114 #, no-c-format msgid "" "Compile for devices requiring XNACK enabled. Default \"any\" if USM is " "supported." msgstr "" -#: config/gcn/gcn.opt:112 +#: config/gcn/gcn.opt:118 #, no-c-format msgid "" "Compile for devices with the SRAM ECC feature enabled, or not. Default " "\"any\"." msgstr "" +#: config/gcn/gcn.opt:122 +#, no-c-format +msgid "" +"--param=gcn-preferred-vectorization-factor=[default,32,64]\tPreferred " +"vectorization factor." +msgstr "" + #: config/fr30/fr30.opt:23 #, no-c-format msgid "Assume small address space." @@ -13645,11 +13684,28 @@ msgstr "" msgid "Enable signed move and memory load instructions." msgstr "" -#: config/bpf/bpf.opt:102 +#: config/bpf/bpf.opt:80 +#, no-c-format +msgid "Select the eBPF ISA version to target in code generation." +msgstr "" + +#: config/bpf/bpf.opt:84 +#, no-c-format +msgid "Valid ISA versions (for use with the -mcpu= option)" +msgstr "" + +#: config/bpf/bpf.opt:104 #, no-c-format msgid "Known assembler dialects (for use with the -masm= option)" msgstr "" +#: config/bpf/bpf.opt:114 +#, no-c-format +msgid "" +"-minline-memops-threshold=<number> Maximum size of memset/memmove/memcpy to " +"inline, larger sizes will use a library call." +msgstr "" + #: config/mips/mips.opt:32 #, no-c-format msgid "-mabi=ABI\tGenerate code that conforms to the given ABI." @@ -14033,75 +14089,88 @@ msgstr "" #: config/mips/mips.opt:434 #, no-c-format -msgid "Generate code with unaligned load store, valid for MIPS R6." +msgid "Don't generate code with unaligned load store, only valid for MIPS R6." +msgstr "" + +#: config/mips/mips.opt:438 +#, no-c-format +msgid "" +"Generate code with unaligned load store for R6 (alias of -mno-strict-align)." msgstr "" #: config/mips/mips.opt:442 #, no-c-format +msgid "" +"Don't generate code with unaligned load store for R6 (alias of -mstrict-" +"align)." +msgstr "" + +#: config/mips/mips.opt:450 +#, no-c-format msgid "Use Virtualization (VZ) instructions." msgstr "" -#: config/mips/mips.opt:446 +#: config/mips/mips.opt:454 #, no-c-format msgid "Use eXtended Physical Address (XPA) instructions." msgstr "" -#: config/mips/mips.opt:450 +#: config/mips/mips.opt:458 #, no-c-format msgid "Use Cyclic Redundancy Check (CRC) instructions." msgstr "" -#: config/mips/mips.opt:454 +#: config/mips/mips.opt:462 #, no-c-format msgid "Use Global INValidate (GINV) instructions." msgstr "" -#: config/mips/mips.opt:458 +#: config/mips/mips.opt:466 #, no-c-format msgid "Perform VR4130-specific alignment optimizations." msgstr "" -#: config/mips/mips.opt:462 +#: config/mips/mips.opt:470 #, no-c-format msgid "Lift restrictions on GOT size." msgstr "" -#: config/mips/mips.opt:466 +#: config/mips/mips.opt:474 #, no-c-format msgid "Enable use of odd-numbered single-precision registers." msgstr "" -#: config/mips/mips.opt:470 +#: config/mips/mips.opt:478 #, no-c-format msgid "Optimize frame header." msgstr "" -#: config/mips/mips.opt:477 +#: config/mips/mips.opt:485 #, no-c-format msgid "Enable load/store bonding." msgstr "" -#: config/mips/mips.opt:481 +#: config/mips/mips.opt:489 #, no-c-format msgid "Specify the compact branch usage policy." msgstr "" -#: config/mips/mips.opt:485 +#: config/mips/mips.opt:493 #, no-c-format msgid "Policies available for use with -mcompact-branches=:" msgstr "" -#: config/mips/mips.opt:498 +#: config/mips/mips.opt:506 #, no-c-format msgid "Use Loongson MultiMedia extensions Instructions (MMI) instructions." msgstr "" -#: config/mips/mips.opt:502 +#: config/mips/mips.opt:510 #, no-c-format msgid "Use Loongson EXTension (EXT) instructions." msgstr "" -#: config/mips/mips.opt:506 +#: config/mips/mips.opt:514 #, no-c-format msgid "Use Loongson EXTension R2 (EXT2) instructions." msgstr "" @@ -15058,404 +15127,411 @@ msgstr "" #: common.opt:875 #, no-c-format +msgid "" +"Warn when a conditional has too many terms and condition coverage profiling " +"gives up instrumenting the expression." +msgstr "" + +#: common.opt:880 +#, no-c-format msgid "Warn in case profiles in -fprofile-use do not exist." msgstr "" -#: common.opt:879 +#: common.opt:884 #, no-c-format msgid "Warn when a vector operation is compiled outside the SIMD." msgstr "" -#: common.opt:883 +#: common.opt:888 #, no-c-format msgid "Warn about unsupported features in ThreadSanitizer." msgstr "" -#: common.opt:899 +#: common.opt:904 #, no-c-format msgid "-aux-info <file>\tEmit declaration information into <file>." msgstr "" -#: common.opt:912 +#: common.opt:917 #, no-c-format msgid "-d<letters>\tEnable dumps from specific passes of the compiler." msgstr "" -#: common.opt:916 +#: common.opt:921 #, no-c-format msgid "-dumpbase <file>\tSet the file basename to be used for dumps." msgstr "" -#: common.opt:920 +#: common.opt:925 #, no-c-format msgid "" "-dumpbase-ext .<ext> Drop a trailing .<ext> from the dump basename to " "name auxiliary output files." msgstr "" -#: common.opt:924 +#: common.opt:929 #, no-c-format msgid "-dumpdir <dir>\tSet the directory name to be used for dumps." msgstr "" -#: common.opt:1030 +#: common.opt:1035 #, no-c-format msgid "The version of the C++ ABI in use." msgstr "" -#: common.opt:1034 +#: common.opt:1039 #, no-c-format msgid "Aggressively optimize loops using language constraints." msgstr "" -#: common.opt:1038 +#: common.opt:1043 #, no-c-format msgid "Align the start of functions." msgstr "" -#: common.opt:1045 +#: common.opt:1050 #, no-c-format msgid "Align labels which are only reached by jumping." msgstr "" -#: common.opt:1052 +#: common.opt:1057 #, no-c-format msgid "Align all labels." msgstr "" -#: common.opt:1059 +#: common.opt:1064 #, no-c-format msgid "Align the start of loops." msgstr "" -#: common.opt:1066 +#: common.opt:1071 #, no-c-format msgid "Allow the compiler to introduce new data races on stores." msgstr "" -#: common.opt:1070 +#: common.opt:1075 #, no-c-format msgid "Enable static analysis pass." msgstr "" -#: common.opt:1090 +#: common.opt:1095 #, no-c-format msgid "Select what to sanitize." msgstr "" -#: common.opt:1094 +#: common.opt:1099 #, no-c-format msgid "Select type of coverage sanitization." msgstr "" -#: common.opt:1107 +#: common.opt:1112 #, no-c-format msgid "-fasan-shadow-offset=<number>\tUse custom shadow memory offset." msgstr "" -#: common.opt:1111 +#: common.opt:1116 #, no-c-format msgid "" "-fsanitize-sections=<sec1,sec2,...>\tSanitize global variables in user-" "defined sections." msgstr "" -#: common.opt:1116 +#: common.opt:1121 #, no-c-format msgid "After diagnosing undefined behavior attempt to continue execution." msgstr "" -#: common.opt:1120 +#: common.opt:1125 #, no-c-format msgid "This switch is deprecated; use -fsanitize-recover= instead." msgstr "" -#: common.opt:1124 +#: common.opt:1129 #, no-c-format msgid "Use traps instead of diagnostics of undefined behavior sanitizers." msgstr "" -#: common.opt:1134 +#: common.opt:1139 #, no-c-format msgid "This switch is deprecated; use -fsanitize-trap= instead." msgstr "" -#: common.opt:1138 +#: common.opt:1143 #, no-c-format msgid "Generate unwind tables that are exact at each instruction boundary." msgstr "" -#: common.opt:1142 +#: common.opt:1147 #, no-c-format msgid "Generate auto-inc/dec instructions." msgstr "" -#: common.opt:1146 +#: common.opt:1151 #, no-c-format msgid "" "Use sample profile information for call graph node weights. The default " "profile file is fbdata.afdo in 'pwd'." msgstr "" -#: common.opt:1151 +#: common.opt:1156 #, no-c-format msgid "" "Use sample profile information for call graph node weights. The profile file " "is specified in the argument." msgstr "" -#: common.opt:1160 +#: common.opt:1165 #, no-c-format msgid "Generate code to check bounds before indexing arrays." msgstr "" -#: common.opt:1164 +#: common.opt:1169 #, no-c-format msgid "Replace add, compare, branch with branch on count register." msgstr "" -#: common.opt:1168 +#: common.opt:1173 #, no-c-format msgid "Use profiling information for branch probabilities." msgstr "" -#: common.opt:1184 +#: common.opt:1189 #, no-c-format msgid "Output callgraph information on a per-file basis." msgstr "" -#: common.opt:1188 +#: common.opt:1193 #, no-c-format msgid "Output callgraph information on a per-file basis with decorations." msgstr "" -#: common.opt:1192 +#: common.opt:1197 #, no-c-format msgid "" "-fcall-saved-<register>\tMark <register> as being preserved across functions." msgstr "" -#: common.opt:1196 +#: common.opt:1201 #, no-c-format msgid "" "-fcall-used-<register>\tMark <register> as being corrupted by function calls." msgstr "" -#: common.opt:1203 +#: common.opt:1208 #, no-c-format msgid "Save registers around function calls." msgstr "" -#: common.opt:1207 +#: common.opt:1212 #, no-c-format msgid "This switch is deprecated; do not use." msgstr "" -#: common.opt:1211 +#: common.opt:1216 #, no-c-format msgid "Check the return value of new in C++." msgstr "" -#: common.opt:1215 common.opt:1219 +#: common.opt:1220 common.opt:1224 #, no-c-format msgid "Perform internal consistency checkings." msgstr "" -#: common.opt:1223 +#: common.opt:1228 #, no-c-format msgid "" "For -f*-prefix-map= options compare canonicalized pathnames rather than just " "strings." msgstr "" -#: common.opt:1227 +#: common.opt:1232 #, no-c-format msgid "Enable code hoisting." msgstr "" -#: common.opt:1231 +#: common.opt:1236 #, no-c-format msgid "" "Looks for opportunities to reduce stack adjustments and stack references." msgstr "" -#: common.opt:1235 +#: common.opt:1240 #, no-c-format msgid "Put uninitialized globals in the common section." msgstr "" -#: common.opt:1243 +#: common.opt:1248 #, no-c-format msgid "" "-fcompare-debug[=<opts>]\tCompile with and without e.g. -gtoggle, and " "compare the final-insns dump." msgstr "" -#: common.opt:1247 +#: common.opt:1252 #, no-c-format msgid "Run only the second compilation of -fcompare-debug." msgstr "" -#: common.opt:1251 +#: common.opt:1256 #, no-c-format msgid "Perform comparison elimination after register allocation has finished." msgstr "" -#: common.opt:1255 +#: common.opt:1260 #, no-c-format msgid "Do not perform optimizations increasing noticeably stack usage." msgstr "" -#: common.opt:1259 +#: common.opt:1264 #, no-c-format msgid "Perform a register copy-propagation optimization pass." msgstr "" -#: common.opt:1263 +#: common.opt:1268 #, no-c-format msgid "" "Fold instructions calculating memory offsets to the memory access " "instruction if possible." msgstr "" -#: common.opt:1267 +#: common.opt:1272 #, no-c-format msgid "Perform cross-jumping optimization." msgstr "" -#: common.opt:1271 +#: common.opt:1276 #, no-c-format msgid "When running CSE, follow jumps to their targets." msgstr "" -#: common.opt:1279 +#: common.opt:1284 #, no-c-format msgid "Omit range reduction step when performing complex division." msgstr "" -#: common.opt:1283 +#: common.opt:1288 #, no-c-format msgid "Complex multiplication and division follow Fortran rules." msgstr "" -#: common.opt:1287 +#: common.opt:1292 #, no-c-format msgid "Place data items into their own section." msgstr "" -#: common.opt:1291 +#: common.opt:1296 #, no-c-format msgid "List all available debugging counters with their limits and counts." msgstr "" -#: common.opt:1295 +#: common.opt:1300 #, no-c-format msgid "" "-fdbg-cnt=<counter>[:<lower_limit1>-]<upper_limit1>[:<lower_limit2>-" "<upper_limit2>:...][,<counter>:...]\tSet the debug counter limit." msgstr "" -#: common.opt:1299 +#: common.opt:1304 #, no-c-format msgid "" "-fdebug-prefix-map=<old>=<new>\tMap one directory name to another in debug " "information." msgstr "" -#: common.opt:1303 +#: common.opt:1308 #, no-c-format msgid "" "-ffile-prefix-map=<old>=<new>\tMap one directory name to another in " "compilation result." msgstr "" -#: common.opt:1307 +#: common.opt:1312 #, no-c-format msgid "Output .debug_types section when using DWARF v4 debuginfo." msgstr "" -#: common.opt:1313 +#: common.opt:1318 #, no-c-format msgid "Defer popping functions args from stack until later." msgstr "" -#: common.opt:1317 +#: common.opt:1322 #, no-c-format msgid "Attempt to fill delay slots of branch instructions." msgstr "" -#: common.opt:1321 +#: common.opt:1326 #, no-c-format msgid "Delete dead instructions that may throw exceptions." msgstr "" -#: common.opt:1325 +#: common.opt:1330 #, no-c-format msgid "Delete useless null pointer checks." msgstr "" -#: common.opt:1329 +#: common.opt:1334 #, no-c-format msgid "" "Stream extra data to support more aggressive devirtualization in LTO local " "transformation mode." msgstr "" -#: common.opt:1333 +#: common.opt:1338 #, no-c-format msgid "Perform speculative devirtualization." msgstr "" -#: common.opt:1337 +#: common.opt:1342 #, no-c-format msgid "Try to convert virtual calls to direct ones." msgstr "" -#: common.opt:1341 +#: common.opt:1346 #, no-c-format msgid "" "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source " "location at the beginning of line-wrapped diagnostics." msgstr "" -#: common.opt:1358 +#: common.opt:1363 #, no-c-format msgid "Show the source line with a caret indicating the column." msgstr "" -#: common.opt:1362 +#: common.opt:1367 #, no-c-format msgid "Show labels annotating ranges of source code when showing source." msgstr "" -#: common.opt:1366 +#: common.opt:1371 #, no-c-format msgid "Show line numbers in the left margin when showing source." msgstr "" -#: common.opt:1374 +#: common.opt:1379 #, no-c-format msgid "-fdiagnostics-color=[never|always|auto]\tColorize diagnostics." msgstr "" -#: common.opt:1394 +#: common.opt:1399 #, no-c-format msgid "Enable formatting of JSON output." msgstr "" -#: common.opt:1398 +#: common.opt:1403 #, no-c-format msgid "-fdiagnostics-urls=[never|always|auto]\tEmbed URLs in diagnostics." msgstr "" -#: common.opt:1418 +#: common.opt:1423 #, no-c-format msgid "" "-fdiagnostics-column-unit=[display|byte]\tSelect whether column numbers are " "output as display columns (default) or raw bytes." msgstr "" -#: common.opt:1422 +#: common.opt:1427 #, no-c-format msgid "" "-fdiagnostics-column-origin=<number>\tSet the number of the first column. " @@ -15463,498 +15539,498 @@ msgid "" "based, for example." msgstr "" -#: common.opt:1426 +#: common.opt:1431 #, no-c-format msgid "" "-fdiagnostics-format=[text|sarif-stderr|sarif-file|json|json-stderr|json-" "file]\tSelect output format." msgstr "" -#: common.opt:1430 +#: common.opt:1435 #, no-c-format msgid "" "-fdiagnostics-escape-format=[unicode|bytes]\tSelect how to escape non-" "printable-ASCII bytes in the source for diagnostics that suggest it." msgstr "" -#: common.opt:1477 +#: common.opt:1482 #, no-c-format msgid "Print fix-it hints in machine-readable form." msgstr "" -#: common.opt:1481 +#: common.opt:1486 #, no-c-format msgid "Print fix-it hints to stderr in unified diff format." msgstr "" -#: common.opt:1485 +#: common.opt:1490 #, no-c-format msgid "" "Amend appropriate diagnostic messages with the command line option that " "controls them." msgstr "" -#: common.opt:1489 +#: common.opt:1494 #, no-c-format msgid "Print CWE identifiers for diagnostic messages, where available." msgstr "" -#: common.opt:1493 +#: common.opt:1498 #, no-c-format msgid "Print any rules associated with diagnostic messages." msgstr "" -#: common.opt:1497 +#: common.opt:1502 #, no-c-format msgid "" "Specify how to print any control-flow path associated with a diagnostic." msgstr "" -#: common.opt:1501 +#: common.opt:1506 #, no-c-format msgid "" "Turn off any diagnostics features that complicate the output, such as line " "numbers, color, and warning URLs." msgstr "" -#: common.opt:1505 +#: common.opt:1510 #, no-c-format msgid "" "-ftabstop=<number> Distance between tab stops for column reporting." msgstr "" -#: common.opt:1521 +#: common.opt:1526 #, no-c-format msgid "Show stack depths of events in paths." msgstr "" -#: common.opt:1525 +#: common.opt:1530 #, no-c-format msgid "" "-fdiagnostics-text-art-charset=[none|ascii|unicode|emoji]\tDetermine which " "characters to use in text arg diagrams." msgstr "" -#: common.opt:1544 +#: common.opt:1549 #, no-c-format msgid "Set minimum width of left margin of source code when showing source." msgstr "" -#: common.opt:1548 +#: common.opt:1553 #, no-c-format msgid "" "-fdisable-[tree|rtl|ipa]-<pass>=range1+range2\tDisable an optimization pass." msgstr "" -#: common.opt:1552 +#: common.opt:1557 #, no-c-format msgid "" "-fenable-[tree|rtl|ipa]-<pass>=range1+range2\tEnable an optimization pass." msgstr "" -#: common.opt:1556 +#: common.opt:1561 #, no-c-format msgid "-fdump-<type>\tDump various compiler internals to a file." msgstr "" -#: common.opt:1563 +#: common.opt:1568 #, no-c-format msgid "" "-fdump-final-insns=filename\tDump to filename the insns at the end of " "translation." msgstr "" -#: common.opt:1567 +#: common.opt:1572 #, no-c-format msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code." msgstr "" -#: common.opt:1571 +#: common.opt:1576 #, no-c-format msgid "Suppress output of addresses in debugging dumps." msgstr "" -#: common.opt:1575 +#: common.opt:1580 #, no-c-format msgid "" "Collect and dump debug information into temporary file if ICE in C/C++ " "compiler occurred." msgstr "" -#: common.opt:1580 +#: common.opt:1585 #, no-c-format msgid "" "Dump detailed information on GCC's internal representation of source code " "locations." msgstr "" -#: common.opt:1584 +#: common.opt:1589 #, no-c-format msgid "Dump optimization passes." msgstr "" -#: common.opt:1588 +#: common.opt:1593 #, no-c-format msgid "" "Suppress output of instruction numbers, line number notes and addresses in " "debugging dumps." msgstr "" -#: common.opt:1592 +#: common.opt:1597 #, no-c-format msgid "Suppress output of previous and next insn numbers in debugging dumps." msgstr "" -#: common.opt:1596 +#: common.opt:1601 #, no-c-format msgid "Enable CFI tables via GAS assembler directives." msgstr "" -#: common.opt:1600 +#: common.opt:1605 #, no-c-format msgid "Perform early inlining." msgstr "" -#: common.opt:1608 +#: common.opt:1613 #, no-c-format msgid "Perform interprocedural reduction of aggregates." msgstr "" -#: common.opt:1612 +#: common.opt:1617 #, no-c-format msgid "Perform unused symbol elimination in debug info." msgstr "" -#: common.opt:1616 +#: common.opt:1621 #, no-c-format msgid "Perform unused type elimination in debug info." msgstr "" -#: common.opt:1620 +#: common.opt:1625 #, no-c-format msgid "Do not suppress C++ class debug information." msgstr "" -#: common.opt:1624 +#: common.opt:1629 #, no-c-format msgid "Enable exception handling." msgstr "" -#: common.opt:1628 +#: common.opt:1633 #, no-c-format msgid "Perform a number of minor, expensive optimizations." msgstr "" -#: common.opt:1632 +#: common.opt:1637 #, no-c-format msgid "" "-fexcess-precision=[fast|standard|16]\tSpecify handling of excess floating-" "point precision." msgstr "" -#: common.opt:1650 +#: common.opt:1655 #, no-c-format msgid "" "-fpermitted-flt-eval-methods=[c11|ts-18661]\tSpecify which values of " "FLT_EVAL_METHOD are permitted." msgstr "" -#: common.opt:1666 +#: common.opt:1671 #, no-c-format msgid "" "Output lto objects containing both the intermediate language and binary " "output." msgstr "" -#: common.opt:1670 +#: common.opt:1675 #, no-c-format msgid "Assume no NaNs or infinities are generated." msgstr "" -#: common.opt:1674 +#: common.opt:1679 #, no-c-format msgid "" "Assume that loops with an exit will terminate and not loop indefinitely." msgstr "" -#: common.opt:1678 +#: common.opt:1683 #, no-c-format msgid "" "-ffixed-<register>\tMark <register> as being unavailable to the compiler." msgstr "" -#: common.opt:1682 +#: common.opt:1687 #, no-c-format msgid "Don't allocate floats and doubles in extended-precision registers." msgstr "" -#: common.opt:1690 +#: common.opt:1695 #, no-c-format msgid "Perform a forward propagation pass on RTL." msgstr "" -#: common.opt:1694 +#: common.opt:1699 #, no-c-format msgid "" "-ffp-contract=[off|on|fast]\tPerform floating-point expression contraction." msgstr "" -#: common.opt:1710 +#: common.opt:1715 #, no-c-format msgid "" "Allow built-in functions ceil, floor, round, trunc to raise \"inexact\" " "exceptions." msgstr "" -#: common.opt:1717 +#: common.opt:1722 #, no-c-format msgid "Allow function addresses to be held in registers." msgstr "" -#: common.opt:1721 +#: common.opt:1726 #, no-c-format msgid "Place each function into its own section." msgstr "" -#: common.opt:1725 +#: common.opt:1730 #, no-c-format msgid "Perform global common subexpression elimination." msgstr "" -#: common.opt:1729 +#: common.opt:1734 #, no-c-format msgid "" "Perform enhanced load motion during global common subexpression elimination." msgstr "" -#: common.opt:1733 +#: common.opt:1738 #, no-c-format msgid "Perform store motion after global common subexpression elimination." msgstr "" -#: common.opt:1737 +#: common.opt:1742 #, no-c-format msgid "" "Perform redundant load after store elimination in global common " "subexpression elimination." msgstr "" -#: common.opt:1742 +#: common.opt:1747 #, no-c-format msgid "" "Perform global common subexpression elimination after register allocation " "has finished." msgstr "" -#: common.opt:1759 +#: common.opt:1764 #, no-c-format msgid "" "-fgnat-encodings=[all|gdb|minimal]\tSelect the balance between GNAT " "encodings and standard DWARF emitted in the debug information." msgstr "" -#: common.opt:1764 +#: common.opt:1769 #, no-c-format msgid "Enable in and out of Graphite representation." msgstr "" -#: common.opt:1768 +#: common.opt:1773 #, no-c-format msgid "Enable Graphite Identity transformation." msgstr "" -#: common.opt:1772 +#: common.opt:1777 #, no-c-format msgid "" "Enable hoisting adjacent loads to encourage generating conditional move " "instructions." msgstr "" -#: common.opt:1781 +#: common.opt:1786 #, no-c-format msgid "" "Improve GCC's ability to track column numbers in large source files, at the " "expense of slower compilation." msgstr "" -#: common.opt:1786 +#: common.opt:1791 #, no-c-format msgid "Mark all loops as parallel." msgstr "" -#: common.opt:1790 common.opt:1798 common.opt:3139 +#: common.opt:1795 common.opt:1803 common.opt:3148 #, no-c-format msgid "Enable loop nest transforms. Same as -floop-nest-optimize." msgstr "" -#: common.opt:1794 +#: common.opt:1799 #, no-c-format msgid "Enable loop interchange on trees." msgstr "" -#: common.opt:1802 +#: common.opt:1807 #, no-c-format msgid "Perform unroll-and-jam on loops." msgstr "" -#: common.opt:1806 +#: common.opt:1811 #, no-c-format msgid "Enable support for GNU transactional memory." msgstr "" -#: common.opt:1810 +#: common.opt:1815 #, no-c-format msgid "Use STB_GNU_UNIQUE if supported by the assembler." msgstr "" -#: common.opt:1818 +#: common.opt:1823 #, no-c-format msgid "Enable the loop nest optimizer." msgstr "" -#: common.opt:1822 +#: common.opt:1827 #, no-c-format msgid "Force bitfield accesses to match their type width." msgstr "" -#: common.opt:1826 +#: common.opt:1831 #, no-c-format msgid "Merge adjacent stores." msgstr "" -#: common.opt:1830 +#: common.opt:1835 #, no-c-format msgid "Enable guessing of branch probabilities." msgstr "" -#: common.opt:1834 +#: common.opt:1839 #, no-c-format msgid "Enable various security-relevant flags." msgstr "" -#: common.opt:1838 +#: common.opt:1843 #, no-c-format msgid "Harden conditionals not used in branches, checking reversed conditions." msgstr "" -#: common.opt:1842 +#: common.opt:1847 #, no-c-format msgid "Harden conditional branches by checking reversed conditions." msgstr "" -#: common.opt:1846 +#: common.opt:1851 #, no-c-format msgid "Harden control flow by recording and checking execution paths." msgstr "" -#: common.opt:1850 +#: common.opt:1855 #, no-c-format msgid "Disable CFR in leaf functions." msgstr "" -#: common.opt:1854 +#: common.opt:1859 #, no-c-format msgid "" "Check CFR execution paths also before calls followed by returns of their " "results." msgstr "" -#: common.opt:1858 +#: common.opt:1863 #, no-c-format msgid "" "Check CFR execution paths also when exiting a function through an exception." msgstr "" -#: common.opt:1862 +#: common.opt:1867 #, no-c-format msgid "" "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]\tCheck CFR " "execution paths also before calling noreturn functions." msgstr "" -#: common.opt:1885 +#: common.opt:1890 #, no-c-format msgid "Process #ident directives." msgstr "" -#: common.opt:1889 +#: common.opt:1894 #, no-c-format msgid "Perform conversion of conditional jumps to branchless equivalents." msgstr "" -#: common.opt:1893 +#: common.opt:1898 #, no-c-format msgid "Perform conversion of conditional jumps to conditional execution." msgstr "" -#: common.opt:1897 +#: common.opt:1902 #, no-c-format msgid "" "-fstack-reuse=[all|named_vars|none]\tSet stack reuse level for local " "variables." msgstr "" -#: common.opt:1913 +#: common.opt:1918 #, no-c-format msgid "Convert conditional jumps in innermost loops to branchless equivalents." msgstr "" -#: common.opt:1925 +#: common.opt:1930 #, no-c-format msgid "Do not generate .size directives." msgstr "" -#: common.opt:1929 +#: common.opt:1934 #, no-c-format msgid "Perform indirect inlining." msgstr "" -#: common.opt:1935 +#: common.opt:1940 #, no-c-format msgid "" "Enable inlining of function declared \"inline\", disabling disables all " "inlining." msgstr "" -#: common.opt:1939 +#: common.opt:1944 #, no-c-format msgid "" "Integrate functions into their callers when code size is known not to grow." msgstr "" -#: common.opt:1943 +#: common.opt:1948 #, no-c-format msgid "" "Integrate functions not declared \"inline\" into their callers when " "profitable." msgstr "" -#: common.opt:1947 +#: common.opt:1952 #, no-c-format msgid "Integrate functions only required by their single caller." msgstr "" -#: common.opt:1954 +#: common.opt:1959 #, no-c-format msgid "" "-finline-limit=<number>\tLimit the size of inlined functions to <number>." msgstr "" -#: common.opt:1958 +#: common.opt:1963 #, no-c-format msgid "" "Inline __atomic operations when a lock free instruction sequence is " "available." msgstr "" -#: common.opt:1968 +#: common.opt:1973 #, no-c-format msgid "" "-finline-stringops[=memcmp|memcpy|memmove|memset] Expand supported mem/str " "operations inline, even if against optimization." msgstr "" -#: common.opt:1999 +#: common.opt:2004 #, no-c-format msgid "" "-fcf-protection=[full|branch|return|none|check]\tInstrument functions with " @@ -15962,604 +16038,609 @@ msgid "" "valid targets." msgstr "" -#: common.opt:2022 +#: common.opt:2027 #, no-c-format msgid "Instrument function entry and exit with profiling calls." msgstr "" -#: common.opt:2026 +#: common.opt:2031 #, no-c-format msgid "Instrument function entry and exit with profiling calls invoked once." msgstr "" -#: common.opt:2030 +#: common.opt:2035 #, no-c-format msgid "" "-finstrument-functions-exclude-function-list=name,...\tDo not instrument " "listed functions." msgstr "" -#: common.opt:2034 +#: common.opt:2039 #, no-c-format msgid "" "-finstrument-functions-exclude-file-list=filename,...\tDo not instrument " "functions listed in files." msgstr "" -#: common.opt:2038 +#: common.opt:2043 #, no-c-format msgid "Perform interprocedural constant propagation." msgstr "" -#: common.opt:2042 +#: common.opt:2047 #, no-c-format msgid "Perform cloning to make Interprocedural constant propagation stronger." msgstr "" -#: common.opt:2050 +#: common.opt:2055 #, no-c-format msgid "Perform interprocedural bitwise constant propagation." msgstr "" -#: common.opt:2054 +#: common.opt:2059 #, no-c-format msgid "Perform interprocedural modref analysis." msgstr "" -#: common.opt:2058 +#: common.opt:2063 #, no-c-format msgid "Perform interprocedural profile propagation." msgstr "" -#: common.opt:2062 +#: common.opt:2067 #, no-c-format msgid "Perform interprocedural points-to analysis." msgstr "" -#: common.opt:2066 +#: common.opt:2071 #, no-c-format msgid "Discover pure and const functions." msgstr "" -#: common.opt:2070 +#: common.opt:2075 #, no-c-format msgid "Perform Identical Code Folding for functions and read-only variables." msgstr "" -#: common.opt:2074 +#: common.opt:2079 #, no-c-format msgid "Perform Identical Code Folding for functions." msgstr "" -#: common.opt:2078 +#: common.opt:2083 #, no-c-format msgid "Perform Identical Code Folding for variables." msgstr "" -#: common.opt:2082 +#: common.opt:2087 #, no-c-format msgid "Discover read-only and non addressable static variables." msgstr "" -#: common.opt:2086 +#: common.opt:2091 #, no-c-format msgid "Discover read-only, write-only and non-addressable static variables." msgstr "" -#: common.opt:2090 +#: common.opt:2095 #, no-c-format msgid "Reduce stack alignment on call sites if possible." msgstr "" -#: common.opt:2102 +#: common.opt:2107 #, no-c-format msgid "Perform IPA Value Range Propagation." msgstr "" -#: common.opt:2106 +#: common.opt:2111 #, no-c-format msgid "-fira-algorithm=[CB|priority]\tSet the used IRA algorithm." msgstr "" -#: common.opt:2110 +#: common.opt:2115 #, no-c-format msgid "" "Assume strict aliasing rules apply across (uninlined) function boundaries." msgstr "" -#: common.opt:2123 +#: common.opt:2128 #, no-c-format msgid "-fira-region=[one|all|mixed]\tSet regions for IRA." msgstr "" -#: common.opt:2139 +#: common.opt:2144 #, no-c-format msgid "Use IRA based register pressure calculation in RTL hoist optimizations." msgstr "" -#: common.opt:2144 +#: common.opt:2149 #, no-c-format msgid "Use IRA based register pressure calculation in RTL loop optimizations." msgstr "" -#: common.opt:2149 +#: common.opt:2154 #, no-c-format msgid "Share slots for saving different hard registers." msgstr "" -#: common.opt:2153 +#: common.opt:2158 #, no-c-format msgid "Share stack slots for spilled pseudo-registers." msgstr "" -#: common.opt:2157 +#: common.opt:2162 #, no-c-format msgid "-fira-verbose=<number>\tControl IRA's level of diagnostic messages." msgstr "" -#: common.opt:2161 +#: common.opt:2166 #, no-c-format msgid "Optimize induction variables on trees." msgstr "" -#: common.opt:2165 +#: common.opt:2170 #, no-c-format msgid "Use jump tables for sufficiently large switch statements." msgstr "" -#: common.opt:2169 +#: common.opt:2174 #, no-c-format msgid "Use bit tests for sufficiently large switch statements." msgstr "" -#: common.opt:2173 +#: common.opt:2178 #, no-c-format msgid "Generate code for functions even if they are fully inlined." msgstr "" -#: common.opt:2177 +#: common.opt:2182 #, no-c-format msgid "Generate code for static functions even if they are never called." msgstr "" -#: common.opt:2181 +#: common.opt:2186 #, no-c-format msgid "Emit static const variables even if they are not used." msgstr "" -#: common.opt:2185 +#: common.opt:2190 #, no-c-format msgid "Give external symbols a leading underscore." msgstr "" -#: common.opt:2193 +#: common.opt:2198 #, no-c-format msgid "Do CFG-sensitive rematerialization in LRA." msgstr "" -#: common.opt:2197 +#: common.opt:2202 #, no-c-format msgid "Enable link-time optimization." msgstr "" -#: common.opt:2201 +#: common.opt:2206 #, no-c-format msgid "Link-time optimization with number of parallel jobs or jobserver." msgstr "" -#: common.opt:2223 +#: common.opt:2228 #, no-c-format msgid "Specify the algorithm to partition symbols and vars at linktime." msgstr "" -#: common.opt:2228 +#: common.opt:2233 #, no-c-format msgid "Use zlib/zstd compression level <number> for IL." msgstr "" -#: common.opt:2236 +#: common.opt:2241 #, no-c-format msgid "Report various link-time optimization statistics." msgstr "" -#: common.opt:2240 +#: common.opt:2245 #, no-c-format msgid "Report various link-time optimization statistics for WPA only." msgstr "" -#: common.opt:2244 +#: common.opt:2249 #, no-c-format msgid "Set errno after built-in math functions." msgstr "" -#: common.opt:2248 +#: common.opt:2253 #, no-c-format msgid "-fmax-errors=<number>\tMaximum number of errors to report." msgstr "" -#: common.opt:2252 +#: common.opt:2257 #, no-c-format msgid "Report on permanent memory allocation." msgstr "" -#: common.opt:2256 +#: common.opt:2261 #, no-c-format msgid "Report on permanent memory allocation in WPA only." msgstr "" -#: common.opt:2263 +#: common.opt:2268 #, no-c-format msgid "Attempt to merge identical constants and constant variables." msgstr "" -#: common.opt:2267 +#: common.opt:2272 #, no-c-format msgid "Attempt to merge identical constants across compilation units." msgstr "" -#: common.opt:2271 +#: common.opt:2276 #, no-c-format msgid "Attempt to merge identical debug strings across compilation units." msgstr "" -#: common.opt:2275 +#: common.opt:2280 #, no-c-format msgid "" "-fmessage-length=<number>\tLimit diagnostics to <number> characters per " "line. 0 suppresses line-wrapping." msgstr "" -#: common.opt:2279 +#: common.opt:2284 #, no-c-format msgid "Align the start of every function." msgstr "" -#: common.opt:2283 +#: common.opt:2288 #, no-c-format msgid "Perform SMS based modulo scheduling before the first scheduling pass." msgstr "" -#: common.opt:2287 +#: common.opt:2292 #, no-c-format msgid "Perform SMS based modulo scheduling with register moves allowed." msgstr "" -#: common.opt:2291 +#: common.opt:2296 #, no-c-format msgid "Move loop invariant computations out of loops." msgstr "" -#: common.opt:2295 +#: common.opt:2300 #, no-c-format msgid "Move stores out of loops." msgstr "" -#: common.opt:2299 +#: common.opt:2304 #, no-c-format msgid "Building block for specs-based multilib-aware TFLAGS." msgstr "" -#: common.opt:2303 +#: common.opt:2308 #, no-c-format msgid "Use the RTL dead code elimination pass." msgstr "" -#: common.opt:2307 +#: common.opt:2312 #, no-c-format msgid "Use the RTL dead store elimination pass." msgstr "" -#: common.opt:2311 +#: common.opt:2316 #, no-c-format msgid "" "Enable/Disable the traditional scheduling in loops that already passed " "modulo scheduling." msgstr "" -#: common.opt:2315 +#: common.opt:2320 #, no-c-format msgid "Support synchronous non-call exceptions." msgstr "" -#: common.opt:2322 +#: common.opt:2327 #, no-c-format msgid "" "-foffload-options=<targets>=<options>\tSpecify options for the offloading " "targets." msgstr "" -#: common.opt:2326 +#: common.opt:2331 #, no-c-format msgid "-foffload-abi=[lp64|ilp32]\tSet the ABI to use in an offload compiler." msgstr "" -#: common.opt:2339 +#: common.opt:2344 #, no-c-format msgid "When possible do not generate stack frames." msgstr "" -#: common.opt:2346 +#: common.opt:2351 #, no-c-format msgid "" "Generate SIMD clones for functions with the OpenMP declare target directive." msgstr "" -#: common.opt:2365 +#: common.opt:2370 #, no-c-format msgid "Enable all optimization info dumps on stderr." msgstr "" -#: common.opt:2369 +#: common.opt:2374 #, no-c-format msgid "-fopt-info[-<type>=filename]\tDump compiler optimization details." msgstr "" -#: common.opt:2373 +#: common.opt:2378 #, no-c-format msgid "" "Write a SRCFILE.opt-record.json file detailing what optimizations were " "performed." msgstr "" -#: common.opt:2381 +#: common.opt:2386 #, no-c-format msgid "Optimize sibling and tail recursive calls." msgstr "" -#: common.opt:2385 +#: common.opt:2390 #, no-c-format msgid "Perform partial inlining." msgstr "" -#: common.opt:2389 common.opt:2393 +#: common.opt:2394 common.opt:2398 #, no-c-format msgid "Report on memory allocation before interprocedural optimization." msgstr "" -#: common.opt:2397 +#: common.opt:2402 #, no-c-format msgid "Pack structure members together without holes." msgstr "" -#: common.opt:2401 +#: common.opt:2406 #, no-c-format msgid "-fpack-struct=<number>\tSet initial maximum structure member alignment." msgstr "" -#: common.opt:2405 +#: common.opt:2410 #, no-c-format msgid "Return small aggregates in memory, not registers." msgstr "" -#: common.opt:2409 +#: common.opt:2414 #, no-c-format msgid "Perform loop peeling." msgstr "" -#: common.opt:2413 +#: common.opt:2418 #, no-c-format msgid "Enable machine specific peephole optimizations." msgstr "" -#: common.opt:2417 +#: common.opt:2422 #, no-c-format msgid "Enable an RTL peephole pass before sched2." msgstr "" -#: common.opt:2421 +#: common.opt:2426 #, no-c-format msgid "Generate position-independent code if possible (large mode)." msgstr "" -#: common.opt:2425 +#: common.opt:2430 #, no-c-format msgid "" "Generate position-independent code for executables if possible (large mode)." msgstr "" -#: common.opt:2429 +#: common.opt:2434 #, no-c-format msgid "Generate position-independent code if possible (small mode)." msgstr "" -#: common.opt:2433 +#: common.opt:2438 #, no-c-format msgid "" "Generate position-independent code for executables if possible (small mode)." msgstr "" -#: common.opt:2437 +#: common.opt:2442 #, no-c-format msgid "" "Use PLT for PIC calls (-fno-plt: load the address from GOT at call site)." msgstr "" -#: common.opt:2441 +#: common.opt:2446 #, no-c-format msgid "Specify a plugin to load." msgstr "" -#: common.opt:2445 +#: common.opt:2450 #, no-c-format msgid "" "-fplugin-arg-<name>-<key>[=<value>]\tSpecify argument <key>=<value> for " "plugin <name>." msgstr "" -#: common.opt:2449 +#: common.opt:2454 #, no-c-format msgid "Run predictive commoning optimization." msgstr "" -#: common.opt:2453 +#: common.opt:2458 #, no-c-format msgid "Generate prefetch instructions, if available, for arrays in loops." msgstr "" -#: common.opt:2457 +#: common.opt:2462 #, no-c-format msgid "Enable basic program profiling code." msgstr "" -#: common.opt:2461 +#: common.opt:2466 #, no-c-format msgid "Generate absolute source path names for gcov." msgstr "" -#: common.opt:2465 +#: common.opt:2470 #, no-c-format msgid "Insert arc-based program profiling code." msgstr "" -#: common.opt:2469 +#: common.opt:2474 +#, no-c-format +msgid "Insert condition coverage profiling code." +msgstr "" + +#: common.opt:2478 #, no-c-format msgid "" "Set the top-level directory for storing the profile data. The default is " "'pwd'." msgstr "" -#: common.opt:2474 +#: common.opt:2483 #, no-c-format msgid "Select the name for storing the profile note file." msgstr "" -#: common.opt:2478 +#: common.opt:2487 #, no-c-format msgid "Enable correction of flow inconsistent profile data input." msgstr "" -#: common.opt:2482 +#: common.opt:2491 #, no-c-format msgid "" "-fprofile-update=[single|atomic|prefer-atomic]\tSet the profile update " "method." msgstr "" -#: common.opt:2486 +#: common.opt:2495 #, no-c-format msgid "" "Instrument only functions from files whose name matches any of the regular " "expressions (separated by semi-colons)." msgstr "" -#: common.opt:2490 +#: common.opt:2499 #, no-c-format msgid "" "Instrument only functions from files whose name does not match any of the " "regular expressions (separated by semi-colons)." msgstr "" -#: common.opt:2506 +#: common.opt:2515 #, no-c-format msgid "" "-fprofile-reproducible=[serial|parallel-runs|multithreaded]\tControl level " "of reproducibility of profile gathered by -fprofile-generate." msgstr "" -#: common.opt:2522 +#: common.opt:2531 #, no-c-format msgid "" "Remove prefix from absolute path before mangling name for -fprofile-" "generate= and -fprofile-use=." msgstr "" -#: common.opt:2526 +#: common.opt:2535 #, no-c-format msgid "" "-fprofile-prefix-map=<old>=<new>\tMap one directory name to another in GCOV " "coverage result." msgstr "" -#: common.opt:2530 +#: common.opt:2539 #, no-c-format msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations." msgstr "" -#: common.opt:2534 +#: common.opt:2543 #, no-c-format msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations, and set -fprofile-dir=." msgstr "" -#: common.opt:2538 +#: common.opt:2547 #, no-c-format msgid "" "Register the profile information in the .gcov_info section instead of using " "a constructor/destructor." msgstr "" -#: common.opt:2542 +#: common.opt:2551 #, no-c-format msgid "" "Register the profile information in the specified section instead of using a " "constructor/destructor." msgstr "" -#: common.opt:2546 +#: common.opt:2555 #, no-c-format msgid "" "Do not assume that functions never executed during the train run are cold." msgstr "" -#: common.opt:2550 +#: common.opt:2559 #, no-c-format msgid "" "Enable common options for performing profile feedback directed optimizations." msgstr "" -#: common.opt:2554 +#: common.opt:2563 #, no-c-format msgid "" "Enable common options for performing profile feedback directed " "optimizations, and set -fprofile-dir=." msgstr "" -#: common.opt:2558 +#: common.opt:2567 #, no-c-format msgid "Insert code to profile values of expressions." msgstr "" -#: common.opt:2562 +#: common.opt:2571 #, no-c-format msgid "Report on consistency of profile." msgstr "" -#: common.opt:2566 +#: common.opt:2575 #, no-c-format msgid "Enable function reordering that improves code placement." msgstr "" -#: common.opt:2570 +#: common.opt:2579 #, no-c-format msgid "Insert NOP instructions at each function entry." msgstr "" -#: common.opt:2577 +#: common.opt:2586 #, no-c-format msgid "-frandom-seed=<string>\tMake compile reproducible using <string>." msgstr "" -#: common.opt:2587 +#: common.opt:2596 #, no-c-format msgid "Record gcc command line switches in the object file." msgstr "" -#: common.opt:2591 +#: common.opt:2600 #, no-c-format msgid "Return small aggregates in registers." msgstr "" -#: common.opt:2599 +#: common.opt:2608 #, no-c-format msgid "" "Tell DSE that the storage for a C++ object is dead when the constructor " "starts and when the destructor finishes." msgstr "" -#: common.opt:2613 +#: common.opt:2622 #, no-c-format msgid "" "-flive-patching=[inline-only-static|inline-clone]\tControl IPA optimizations " @@ -16567,520 +16648,520 @@ msgid "" "multiple-level control on the enabled IPA optimizations." msgstr "" -#: common.opt:2628 +#: common.opt:2637 #, no-c-format msgid "Tell DCE to remove unused C++ allocations." msgstr "" -#: common.opt:2632 +#: common.opt:2641 #, no-c-format msgid "Relief of register pressure through live range shrinkage." msgstr "" -#: common.opt:2636 +#: common.opt:2645 #, no-c-format msgid "Perform a register renaming optimization pass." msgstr "" -#: common.opt:2640 +#: common.opt:2649 #, no-c-format msgid "Perform a target dependent instruction fusion optimization pass." msgstr "" -#: common.opt:2644 +#: common.opt:2653 #, no-c-format msgid "Reorder basic blocks to improve code placement." msgstr "" -#: common.opt:2648 +#: common.opt:2657 #, no-c-format msgid "" "-freorder-blocks-algorithm=[simple|stc]\tSet the used basic block reordering " "algorithm." msgstr "" -#: common.opt:2661 +#: common.opt:2670 #, no-c-format msgid "Reorder basic blocks and partition into hot and cold sections." msgstr "" -#: common.opt:2665 +#: common.opt:2674 #, no-c-format msgid "Reorder functions to improve code placement." msgstr "" -#: common.opt:2669 +#: common.opt:2678 #, no-c-format msgid "Add a common subexpression elimination pass after loop optimizations." msgstr "" -#: common.opt:2677 +#: common.opt:2686 #, no-c-format msgid "Disable optimizations that assume default FP rounding behavior." msgstr "" -#: common.opt:2681 +#: common.opt:2690 #, no-c-format msgid "Enable scheduling across basic blocks." msgstr "" -#: common.opt:2685 +#: common.opt:2694 #, no-c-format msgid "Enable register pressure sensitive insn scheduling." msgstr "" -#: common.opt:2689 +#: common.opt:2698 #, no-c-format msgid "Allow speculative motion of non-loads." msgstr "" -#: common.opt:2693 +#: common.opt:2702 #, no-c-format msgid "Allow speculative motion of some loads." msgstr "" -#: common.opt:2697 +#: common.opt:2706 #, no-c-format msgid "Allow speculative motion of more loads." msgstr "" -#: common.opt:2701 +#: common.opt:2710 #, no-c-format msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler." msgstr "" -#: common.opt:2705 +#: common.opt:2714 #, no-c-format msgid "If scheduling post reload, do superblock scheduling." msgstr "" -#: common.opt:2713 +#: common.opt:2722 #, no-c-format msgid "Reschedule instructions before register allocation." msgstr "" -#: common.opt:2717 +#: common.opt:2726 #, no-c-format msgid "Reschedule instructions after register allocation." msgstr "" -#: common.opt:2724 +#: common.opt:2733 #, no-c-format msgid "Schedule instructions using selective scheduling algorithm." msgstr "" -#: common.opt:2728 +#: common.opt:2737 #, no-c-format msgid "Run selective scheduling after reload." msgstr "" -#: common.opt:2732 +#: common.opt:2741 #, no-c-format msgid "Run self-tests, using the given path to locate test files." msgstr "" -#: common.opt:2736 +#: common.opt:2745 #, no-c-format msgid "Perform software pipelining of inner loops during selective scheduling." msgstr "" -#: common.opt:2740 +#: common.opt:2749 #, no-c-format msgid "Perform software pipelining of outer loops during selective scheduling." msgstr "" -#: common.opt:2744 +#: common.opt:2753 #, no-c-format msgid "Reschedule pipelined regions without pipelining." msgstr "" -#: common.opt:2748 +#: common.opt:2757 #, no-c-format msgid "" "Allow interposing function (or variables) by ones with different semantics " "(or initializer) respectively by dynamic linker." msgstr "" -#: common.opt:2754 +#: common.opt:2763 #, no-c-format msgid "Allow premature scheduling of queued insns." msgstr "" -#: common.opt:2758 +#: common.opt:2767 #, no-c-format msgid "" "-fsched-stalled-insns=<number>\tSet number of queued insns that can be " "prematurely scheduled." msgstr "" -#: common.opt:2766 +#: common.opt:2775 #, no-c-format msgid "" "Set dependence distance checking in premature scheduling of queued insns." msgstr "" -#: common.opt:2770 +#: common.opt:2779 #, no-c-format msgid "" "-fsched-stalled-insns-dep=<number>\tSet dependence distance checking in " "premature scheduling of queued insns." msgstr "" -#: common.opt:2774 +#: common.opt:2783 #, no-c-format msgid "Enable the group heuristic in the scheduler." msgstr "" -#: common.opt:2778 +#: common.opt:2787 #, no-c-format msgid "Enable the critical path heuristic in the scheduler." msgstr "" -#: common.opt:2782 +#: common.opt:2791 #, no-c-format msgid "Enable the speculative instruction heuristic in the scheduler." msgstr "" -#: common.opt:2786 +#: common.opt:2795 #, no-c-format msgid "Enable the rank heuristic in the scheduler." msgstr "" -#: common.opt:2790 +#: common.opt:2799 #, no-c-format msgid "Enable the last instruction heuristic in the scheduler." msgstr "" -#: common.opt:2794 +#: common.opt:2803 #, no-c-format msgid "Enable the dependent count heuristic in the scheduler." msgstr "" -#: common.opt:2798 +#: common.opt:2807 #, no-c-format msgid "Access data in the same section from shared anchor points." msgstr "" -#: common.opt:2810 +#: common.opt:2819 #, no-c-format msgid "Turn on Redundant Extensions Elimination pass." msgstr "" -#: common.opt:2814 +#: common.opt:2823 #, no-c-format msgid "Show column numbers in diagnostics, when available. Default on." msgstr "" -#: common.opt:2818 +#: common.opt:2827 #, no-c-format msgid "" "Emit function prologues only before parts of the function that need it, " "rather than at the top of the function." msgstr "" -#: common.opt:2823 +#: common.opt:2832 #, no-c-format msgid "Shrink-wrap parts of the prologue and epilogue separately." msgstr "" -#: common.opt:2827 +#: common.opt:2836 #, no-c-format msgid "Disable optimizations observable by IEEE signaling NaNs." msgstr "" -#: common.opt:2831 +#: common.opt:2840 #, no-c-format msgid "" "Disable floating point optimizations that ignore the IEEE signedness of zero." msgstr "" -#: common.opt:2835 +#: common.opt:2844 #, no-c-format msgid "Convert floating point constants to single precision constants." msgstr "" -#: common.opt:2839 +#: common.opt:2848 #, no-c-format msgid "Split lifetimes of induction variables when loops are unrolled." msgstr "" -#: common.opt:2843 +#: common.opt:2852 #, no-c-format msgid "Generate discontiguous stack frames." msgstr "" -#: common.opt:2847 +#: common.opt:2856 #, no-c-format msgid "Split wide types into independent registers." msgstr "" -#: common.opt:2851 +#: common.opt:2860 #, no-c-format msgid "Split wide types into independent registers earlier." msgstr "" -#: common.opt:2855 +#: common.opt:2864 #, no-c-format msgid "Enable backward propagation of use properties at the SSA level." msgstr "" -#: common.opt:2859 +#: common.opt:2868 #, no-c-format msgid "Optimize conditional patterns using SSA PHI nodes." msgstr "" -#: common.opt:2863 +#: common.opt:2872 #, no-c-format msgid "" "Optimize amount of stdarg registers saved to stack at start of function." msgstr "" -#: common.opt:2867 +#: common.opt:2876 #, no-c-format msgid "Apply variable expansion when loops are unrolled." msgstr "" -#: common.opt:2871 +#: common.opt:2880 #, no-c-format msgid "" "-fstack-check=[no|generic|specific]\tInsert stack checking code into the " "program." msgstr "" -#: common.opt:2875 +#: common.opt:2884 #, no-c-format msgid "" "Insert stack checking code into the program. Same as -fstack-check=specific." msgstr "" -#: common.opt:2879 +#: common.opt:2888 #, no-c-format msgid "" "Insert code to probe each page of stack space as it is allocated to protect " "from stack-clash style attacks." msgstr "" -#: common.opt:2887 +#: common.opt:2896 #, no-c-format msgid "" "-fstack-limit-register=<register>\tTrap if the stack goes past <register>." msgstr "" -#: common.opt:2891 +#: common.opt:2900 #, no-c-format msgid "-fstack-limit-symbol=<name>\tTrap if the stack goes past symbol <name>." msgstr "" -#: common.opt:2895 +#: common.opt:2904 #, no-c-format msgid "Use propolice as a stack protection method." msgstr "" -#: common.opt:2899 +#: common.opt:2908 #, no-c-format msgid "Use a stack protection method for every function." msgstr "" -#: common.opt:2903 +#: common.opt:2912 #, no-c-format msgid "Use a smart stack protection method for certain functions." msgstr "" -#: common.opt:2907 +#: common.opt:2916 #, no-c-format msgid "" "Use stack protection method only for functions with the stack_protect " "attribute." msgstr "" -#: common.opt:2911 +#: common.opt:2920 #, no-c-format msgid "Output stack usage information on a per-function basis." msgstr "" -#: common.opt:2923 +#: common.opt:2932 #, no-c-format msgid "Assume strict aliasing rules apply." msgstr "" -#: common.opt:2927 +#: common.opt:2936 #, no-c-format msgid "" "Treat signed overflow as undefined. Negated as -fwrapv -fwrapv-pointer." msgstr "" -#: common.opt:2931 +#: common.opt:2940 #, no-c-format msgid "Disable stack scrub entirely, disregarding strub attributes." msgstr "" -#: common.opt:2935 +#: common.opt:2944 #, no-c-format msgid "Enable stack scrub as per attributes, with strict call checking." msgstr "" -#: common.opt:2944 +#: common.opt:2953 #, no-c-format msgid "Restore default strub mode: as per attributes, with relaxed checking." msgstr "" -#: common.opt:2948 +#: common.opt:2957 #, no-c-format msgid "Enable stack scrubbing for all viable functions." msgstr "" -#: common.opt:2952 +#: common.opt:2961 #, no-c-format msgid "Enable at-calls stack scrubbing for all viable functions." msgstr "" -#: common.opt:2956 +#: common.opt:2965 #, no-c-format msgid "Enable internal stack scrubbing for all viable functions." msgstr "" -#: common.opt:2960 +#: common.opt:2969 #, no-c-format msgid "Implement __atomic operations via libcalls to legacy __sync functions." msgstr "" -#: common.opt:2964 +#: common.opt:2973 #, no-c-format msgid "Check for syntax errors, then stop." msgstr "" -#: common.opt:2968 +#: common.opt:2977 #, no-c-format msgid "Create data files needed by \"gcov\"." msgstr "" -#: common.opt:2972 +#: common.opt:2981 #, no-c-format msgid "Perform jump threading optimizations." msgstr "" -#: common.opt:2976 +#: common.opt:2985 #, no-c-format msgid "Report the time taken by each compiler pass." msgstr "" -#: common.opt:2980 +#: common.opt:2989 #, no-c-format msgid "Record times taken by sub-phases separately." msgstr "" -#: common.opt:2984 +#: common.opt:2993 #, no-c-format msgid "" "-ftls-model=[global-dynamic|local-dynamic|initial-exec|local-exec]\tSet the " "default thread-local storage code generation model." msgstr "" -#: common.opt:3003 +#: common.opt:3012 #, no-c-format msgid "Reorder top level functions, variables, and asms." msgstr "" -#: common.opt:3007 +#: common.opt:3016 #, no-c-format msgid "Perform superblock formation via tail duplication." msgstr "" -#: common.opt:3011 +#: common.opt:3020 #, no-c-format msgid "" "For targets that normally need trampolines for nested functions, always " "generate them instead of using descriptors." msgstr "" -#: common.opt:3016 +#: common.opt:3025 #, no-c-format msgid "" "Whether trampolines are generated in executable memory rather than " "executable stack." msgstr "" -#: common.opt:3034 +#: common.opt:3043 #, no-c-format msgid "Assume floating-point operations can trap." msgstr "" -#: common.opt:3038 +#: common.opt:3047 #, no-c-format msgid "Trap for signed overflow in addition, subtraction and multiplication." msgstr "" -#: common.opt:3042 +#: common.opt:3051 #, no-c-format msgid "Enable SSA-CCP optimization on trees." msgstr "" -#: common.opt:3046 +#: common.opt:3055 #, no-c-format msgid "Enable SSA-BIT-CCP optimization on trees." msgstr "" -#: common.opt:3054 +#: common.opt:3063 #, no-c-format msgid "Enable loop header copying on trees." msgstr "" -#: common.opt:3062 +#: common.opt:3071 #, no-c-format msgid "Enable SSA coalescing of user variables." msgstr "" -#: common.opt:3070 +#: common.opt:3079 #, no-c-format msgid "Enable copy propagation on trees." msgstr "" -#: common.opt:3078 +#: common.opt:3087 #, no-c-format msgid "Transform condition stores into unconditional ones." msgstr "" -#: common.opt:3082 +#: common.opt:3091 #, no-c-format msgid "Perform conversions of switch initializations." msgstr "" -#: common.opt:3086 +#: common.opt:3095 #, no-c-format msgid "Enable SSA dead code elimination optimization on trees." msgstr "" -#: common.opt:3090 +#: common.opt:3099 #, no-c-format msgid "Enable dominator optimizations." msgstr "" -#: common.opt:3094 +#: common.opt:3103 #, no-c-format msgid "Enable tail merging on trees." msgstr "" -#: common.opt:3098 +#: common.opt:3107 #, no-c-format msgid "Enable dead store elimination." msgstr "" -#: common.opt:3102 +#: common.opt:3111 #, no-c-format msgid "Enable forward propagation on trees." msgstr "" -#: common.opt:3106 +#: common.opt:3115 #, no-c-format msgid "Enable Full Redundancy Elimination (FRE) on trees." msgstr "" -#: common.opt:3110 +#: common.opt:3119 #, no-c-format msgid "Enable string length optimizations on trees." msgstr "" -#: common.opt:3114 +#: common.opt:3123 #, no-c-format msgid "" "Detect paths that trigger erroneous or undefined behavior due to " @@ -17088,7 +17169,7 @@ msgid "" "flow and turn the statement with erroneous or undefined behavior into a trap." msgstr "" -#: common.opt:3120 +#: common.opt:3129 #, no-c-format msgid "" "Detect paths that trigger erroneous or undefined behavior due to a null " @@ -17097,521 +17178,521 @@ msgid "" "statement with erroneous or undefined behavior into a trap." msgstr "" -#: common.opt:3127 +#: common.opt:3136 #, no-c-format msgid "Enable loop distribution on trees." msgstr "" -#: common.opt:3131 +#: common.opt:3140 #, no-c-format msgid "Enable loop distribution for patterns transformed into a library call." msgstr "" -#: common.opt:3135 +#: common.opt:3144 #, no-c-format msgid "Enable loop invariant motion on trees." msgstr "" -#: common.opt:3143 +#: common.opt:3152 #, no-c-format msgid "Create canonical induction variables in loops." msgstr "" -#: common.opt:3147 +#: common.opt:3156 #, no-c-format msgid "Enable loop optimizations on tree level." msgstr "" -#: common.opt:3151 +#: common.opt:3160 #, no-c-format msgid "" "-ftree-parallelize-loops=<number>\tEnable automatic parallelization of loops." msgstr "" -#: common.opt:3155 +#: common.opt:3164 #, no-c-format msgid "Enable hoisting loads from conditional pointers." msgstr "" -#: common.opt:3159 +#: common.opt:3168 #, no-c-format msgid "Enable SSA-PRE optimization on trees." msgstr "" -#: common.opt:3163 +#: common.opt:3172 #, no-c-format msgid "" "In SSA-PRE optimization on trees, enable partial-partial redundancy " "elimination." msgstr "" -#: common.opt:3167 +#: common.opt:3176 #, no-c-format msgid "Perform function-local points-to analysis on trees." msgstr "" -#: common.opt:3171 +#: common.opt:3180 #, no-c-format msgid "Enable reassociation on tree level." msgstr "" -#: common.opt:3179 +#: common.opt:3188 #, no-c-format msgid "Enable SSA code sinking on trees." msgstr "" -#: common.opt:3183 +#: common.opt:3192 #, no-c-format msgid "Perform straight-line strength reduction." msgstr "" -#: common.opt:3187 +#: common.opt:3196 #, no-c-format msgid "Perform scalar replacement of aggregates." msgstr "" -#: common.opt:3191 +#: common.opt:3200 #, no-c-format msgid "Replace temporary expressions in the SSA->normal pass." msgstr "" -#: common.opt:3195 +#: common.opt:3204 #, no-c-format msgid "Perform live range splitting during the SSA->normal pass." msgstr "" -#: common.opt:3199 +#: common.opt:3208 #, no-c-format msgid "Perform Value Range Propagation on trees." msgstr "" -#: common.opt:3203 +#: common.opt:3212 #, no-c-format msgid "Split paths leading to loop backedges." msgstr "" -#: common.opt:3207 +#: common.opt:3216 #, no-c-format msgid "" "Assume common declarations may be overridden with ones with a larger " "trailing array." msgstr "" -#: common.opt:3212 +#: common.opt:3221 #, no-c-format msgid "Compile whole compilation unit at a time." msgstr "" -#: common.opt:3216 +#: common.opt:3225 #, no-c-format msgid "Trap on __builtin_unreachable instead of using it for optimization." msgstr "" -#: common.opt:3220 +#: common.opt:3229 #, no-c-format msgid "Perform loop unrolling when iteration count is known." msgstr "" -#: common.opt:3224 +#: common.opt:3233 #, no-c-format msgid "Perform loop unrolling for all loops." msgstr "" -#: common.opt:3239 +#: common.opt:3248 #, no-c-format msgid "" "Allow optimization for floating-point arithmetic which may change the result " "of the operation due to rounding." msgstr "" -#: common.opt:3244 +#: common.opt:3253 #, no-c-format msgid "Same as -fassociative-math for expressions which include division." msgstr "" -#: common.opt:3252 +#: common.opt:3261 #, no-c-format msgid "Allow math optimizations that may violate IEEE or ISO standards." msgstr "" -#: common.opt:3256 +#: common.opt:3265 #, no-c-format msgid "Perform loop unswitching." msgstr "" -#: common.opt:3260 +#: common.opt:3269 #, no-c-format msgid "Perform loop splitting." msgstr "" -#: common.opt:3264 +#: common.opt:3273 #, no-c-format msgid "Version loops based on whether indices have a stride of one." msgstr "" -#: common.opt:3268 +#: common.opt:3277 #, no-c-format msgid "Just generate unwind tables for exception handling." msgstr "" -#: common.opt:3272 +#: common.opt:3281 #, no-c-format msgid "Use the bfd linker instead of the default linker." msgstr "" -#: common.opt:3276 +#: common.opt:3285 #, no-c-format msgid "Use the gold linker instead of the default linker." msgstr "" -#: common.opt:3280 +#: common.opt:3289 #, no-c-format msgid "Use the lld LLVM linker instead of the default linker." msgstr "" -#: common.opt:3284 +#: common.opt:3293 #, no-c-format msgid "Use the Modern linker (MOLD) linker instead of the default linker." msgstr "" -#: common.opt:3294 +#: common.opt:3303 #, no-c-format msgid "Perform variable tracking." msgstr "" -#: common.opt:3301 +#: common.opt:3310 #, no-c-format msgid "Perform variable tracking by annotating assignments." msgstr "" -#: common.opt:3307 +#: common.opt:3316 #, no-c-format msgid "Toggle -fvar-tracking-assignments." msgstr "" -#: common.opt:3314 +#: common.opt:3323 #, no-c-format msgid "" "Perform variable tracking and also tag variables that are uninitialized." msgstr "" -#: common.opt:3319 +#: common.opt:3328 #, no-c-format msgid "Enable vectorization on trees." msgstr "" -#: common.opt:3327 +#: common.opt:3336 #, no-c-format msgid "Enable loop vectorization on trees." msgstr "" -#: common.opt:3331 +#: common.opt:3340 #, no-c-format msgid "Enable basic block vectorization (SLP) on trees." msgstr "" -#: common.opt:3335 +#: common.opt:3344 #, no-c-format msgid "" "-fvect-cost-model=[unlimited|dynamic|cheap|very-cheap]\tSpecifies the cost " "model for vectorization." msgstr "" -#: common.opt:3339 +#: common.opt:3348 #, no-c-format msgid "" "-fsimd-cost-model=[unlimited|dynamic|cheap|very-cheap]\tSpecifies the " "vectorization cost model for code marked with a simd directive." msgstr "" -#: common.opt:3358 +#: common.opt:3367 #, no-c-format msgid "" "Enables the dynamic vectorizer cost model. Preserved for backward " "compatibility." msgstr "" -#: common.opt:3366 +#: common.opt:3375 #, no-c-format msgid "Enable copy propagation of scalar-evolution information." msgstr "" -#: common.opt:3370 +#: common.opt:3379 #, no-c-format msgid "" "-ftrivial-auto-var-init=[uninitialized|pattern|zero]\tAdd initializations to " "automatic variables." msgstr "" -#: common.opt:3392 +#: common.opt:3401 #, no-c-format msgid "Add extra commentary to assembler output." msgstr "" -#: common.opt:3396 +#: common.opt:3405 #, no-c-format msgid "" "-fvisibility=[default|internal|hidden|protected]\tSet the default symbol " "visibility." msgstr "" -#: common.opt:3415 +#: common.opt:3424 #, no-c-format msgid "Validate vtable pointers before using them." msgstr "" -#: common.opt:3431 +#: common.opt:3440 #, no-c-format msgid "Output vtable verification counters." msgstr "" -#: common.opt:3435 +#: common.opt:3444 #, no-c-format msgid "Output vtable verification pointer sets information." msgstr "" -#: common.opt:3439 +#: common.opt:3448 #, no-c-format msgid "Use expression value profiles in optimizations." msgstr "" -#: common.opt:3443 +#: common.opt:3452 #, no-c-format msgid "Construct webs and split unrelated uses of single variable." msgstr "" -#: common.opt:3447 +#: common.opt:3456 #, no-c-format msgid "Enable conditional dead code elimination for builtin calls." msgstr "" -#: common.opt:3451 +#: common.opt:3460 #, no-c-format msgid "Perform whole program optimizations." msgstr "" -#: common.opt:3455 +#: common.opt:3464 #, no-c-format msgid "Assume pointer overflow wraps around." msgstr "" -#: common.opt:3459 +#: common.opt:3468 #, no-c-format msgid "Assume signed arithmetic overflow wraps around." msgstr "" -#: common.opt:3463 +#: common.opt:3472 #, no-c-format msgid "Put zero initialized data in the bss section." msgstr "" -#: common.opt:3467 +#: common.opt:3476 #, no-c-format msgid "Clear call-used registers upon function return." msgstr "" -#: common.opt:3471 +#: common.opt:3480 #, no-c-format msgid "Generate debug information in default format." msgstr "" -#: common.opt:3475 +#: common.opt:3484 #, no-c-format msgid "Assume assembler support for (DWARF2+) .loc directives." msgstr "" -#: common.opt:3479 +#: common.opt:3488 #, no-c-format msgid "Assume assembler support for view in (DWARF2+) .loc directives." msgstr "" -#: common.opt:3483 +#: common.opt:3492 #, no-c-format msgid "Generate debug information in CodeView format." msgstr "" -#: common.opt:3503 +#: common.opt:3512 #, no-c-format msgid "Record DW_AT_decl_column and DW_AT_call_column in DWARF." msgstr "" -#: common.opt:3509 +#: common.opt:3518 #, no-c-format msgid "Generate CTF debug information at default level." msgstr "" -#: common.opt:3513 +#: common.opt:3522 #, no-c-format msgid "Generate BTF debug information at default level." msgstr "" -#: common.opt:3517 +#: common.opt:3526 #, no-c-format msgid "Generate debug information in default version of DWARF format." msgstr "" -#: common.opt:3521 +#: common.opt:3530 #, no-c-format msgid "Generate debug information in DWARF v2 (or later) format." msgstr "" -#: common.opt:3525 +#: common.opt:3534 #, no-c-format msgid "Use 32-bit DWARF format when emitting DWARF debug information." msgstr "" -#: common.opt:3529 +#: common.opt:3538 #, no-c-format msgid "Use 64-bit DWARF format when emitting DWARF debug information." msgstr "" -#: common.opt:3533 +#: common.opt:3542 #, no-c-format msgid "Generate debug information in default extended format." msgstr "" -#: common.opt:3537 +#: common.opt:3546 #, no-c-format msgid "Generate extended entry point information for inlined functions." msgstr "" -#: common.opt:3541 +#: common.opt:3550 #, no-c-format msgid "Compute locview reset points based on insn length estimates." msgstr "" -#: common.opt:3549 +#: common.opt:3558 #, no-c-format msgid "Don't generate DWARF pubnames and pubtypes sections." msgstr "" -#: common.opt:3553 +#: common.opt:3562 #, no-c-format msgid "Generate DWARF pubnames and pubtypes sections." msgstr "" -#: common.opt:3557 +#: common.opt:3566 #, no-c-format msgid "Generate DWARF pubnames and pubtypes sections with GNU extensions." msgstr "" -#: common.opt:3561 +#: common.opt:3570 #, no-c-format msgid "Record gcc command line switches in DWARF DW_AT_producer." msgstr "" -#: common.opt:3565 +#: common.opt:3574 #, no-c-format msgid "Generate debug information in separate .dwo files." msgstr "" -#: common.opt:3577 +#: common.opt:3586 #, no-c-format msgid "Emit progressive recommended breakpoint locations." msgstr "" -#: common.opt:3581 +#: common.opt:3590 #, no-c-format msgid "Don't emit DWARF additions beyond selected version." msgstr "" -#: common.opt:3585 +#: common.opt:3594 #, no-c-format msgid "" "Add description attributes to some DWARF DIEs that have no name attribute." msgstr "" -#: common.opt:3589 +#: common.opt:3598 #, no-c-format msgid "Toggle debug information generation." msgstr "" -#: common.opt:3593 +#: common.opt:3602 #, no-c-format msgid "Augment variable location lists with progressive views." msgstr "" -#: common.opt:3600 +#: common.opt:3609 #, no-c-format msgid "Generate debug information in VMS format." msgstr "" -#: common.opt:3629 +#: common.opt:3638 #, no-c-format msgid "Generate compressed debug sections." msgstr "" -#: common.opt:3633 +#: common.opt:3642 #, no-c-format msgid "-gz=<format>\tGenerate compressed debug sections in format <format>." msgstr "" -#: common.opt:3640 +#: common.opt:3649 #, no-c-format msgid "-iplugindir=<dir>\tSet <dir> to be the default plugin directory." msgstr "" -#: common.opt:3644 +#: common.opt:3653 #, no-c-format msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory." msgstr "" -#: common.opt:3672 +#: common.opt:3681 #, no-c-format msgid "-o <file>\tPlace output into <file>." msgstr "" -#: common.opt:3676 +#: common.opt:3685 #, no-c-format msgid "Enable function profiling." msgstr "" -#: common.opt:3686 +#: common.opt:3695 #, no-c-format msgid "Like -pedantic but issue them as errors." msgstr "" -#: common.opt:3726 +#: common.opt:3735 #, no-c-format msgid "Do not display functions compiled or elapsed time." msgstr "" -#: common.opt:3758 +#: common.opt:3767 #, no-c-format msgid "Enable verbose output." msgstr "" -#: common.opt:3762 +#: common.opt:3771 #, no-c-format msgid "Display the compiler's version." msgstr "" -#: common.opt:3766 +#: common.opt:3775 #, no-c-format msgid "Suppress warnings." msgstr "" -#: common.opt:3776 +#: common.opt:3785 #, no-c-format msgid "Create a shared library." msgstr "" -#: common.opt:3836 +#: common.opt:3845 #, no-c-format msgid "Don't create a dynamically linked position independent executable." msgstr "" -#: common.opt:3840 +#: common.opt:3849 #, no-c-format msgid "Create a dynamically linked position independent executable." msgstr "" -#: common.opt:3844 +#: common.opt:3853 #, no-c-format msgid "Create a static position independent executable." msgstr "" -#: common.opt:3851 +#: common.opt:3860 #, no-c-format msgid "Use caller save register across calls if possible." msgstr "" @@ -19285,15 +19366,15 @@ msgstr "" msgid "Maximum number of basic blocks for VRP to use a basic cache vector." msgstr "" -#: cfgrtl.cc:2822 +#: cfgrtl.cc:2837 msgid "flow control insn inside a basic block" msgstr "" -#: cfgrtl.cc:3114 +#: cfgrtl.cc:3129 msgid "insn outside basic block" msgstr "" -#: cfgrtl.cc:3122 +#: cfgrtl.cc:3137 msgid "return not followed by barrier" msgstr "" @@ -19302,45 +19383,45 @@ msgstr "" msgid "[cannot find %s]" msgstr "" -#: collect2.cc:1560 +#: collect2.cc:1561 #, c-format msgid "collect2 version %s\n" msgstr "" -#: collect2.cc:1665 +#: collect2.cc:1666 #, c-format msgid "%d constructor found\n" msgid_plural "%d constructors found\n" msgstr[0] "" msgstr[1] "" -#: collect2.cc:1669 +#: collect2.cc:1670 #, c-format msgid "%d destructor found\n" msgid_plural "%d destructors found\n" msgstr[0] "" msgstr[1] "" -#: collect2.cc:1673 +#: collect2.cc:1674 #, c-format msgid "%d frame table found\n" msgid_plural "%d frame tables found\n" msgstr[0] "" msgstr[1] "" -#: collect2.cc:1828 +#: collect2.cc:1829 #, c-format msgid "[Leaving %s]\n" msgstr "" -#: collect2.cc:2058 +#: collect2.cc:2059 #, c-format msgid "" "\n" "write_c_file - output name is %s, prefix is %s\n" msgstr "" -#: collect2.cc:2582 +#: collect2.cc:2583 #, c-format msgid "" "\n" @@ -19351,7 +19432,7 @@ msgstr "" msgid "const/copy propagation disabled" msgstr "" -#: diagnostic-format-json.cc:339 diagnostic-format-sarif.cc:1776 +#: diagnostic-format-json.cc:343 diagnostic-format-sarif.cc:1780 #, c-format msgid "error: unable to open '%s' for writing: %s\n" msgstr "" @@ -19398,7 +19479,7 @@ msgstr "" msgid "See %s for instructions.\n" msgstr "" -#: diagnostic.cc:806 +#: diagnostic.cc:805 #, c-format msgid "compilation terminated.\n" msgstr "" @@ -19434,27 +19515,27 @@ msgstr "" msgid "imported at" msgstr "" -#: diagnostic.cc:1585 +#: diagnostic.cc:1592 #, c-format msgid "%s:%d: confused by earlier errors, bailing out\n" msgstr "" -#: diagnostic.cc:2286 +#: diagnostic.cc:2303 #, c-format msgid "internal compiler error: error reporting routines re-entered.\n" msgstr "" -#: diagnostic.cc:2317 diagnostic.cc:2336 +#: diagnostic.cc:2334 diagnostic.cc:2353 #, gcc-internal-format, gfc-internal-format msgid "in %s, at %s:%d" msgstr "" -#: diagnostic.cc:2387 +#: diagnostic.cc:2404 #, c-format msgid "%s: all warnings being treated as errors" msgstr "" -#: diagnostic.cc:2392 +#: diagnostic.cc:2409 #, c-format msgid "%s: some warnings being treated as errors" msgstr "" @@ -19505,12 +19586,12 @@ msgstr "" #. PRINT_OPERAND must handle them. #. We can't handle floating point constants; #. TARGET_PRINT_OPERAND must handle them. -#: final.cc:3728 config/arc/arc.cc:6310 config/i386/i386.cc:12905 +#: final.cc:3728 config/arc/arc.cc:6311 config/i386/i386.cc:12926 #, c-format msgid "floating constant misused" msgstr "" -#: final.cc:3786 config/arc/arc.cc:6407 config/i386/i386.cc:12996 +#: final.cc:3786 config/arc/arc.cc:6408 config/i386/i386.cc:13017 #: config/pdp11/pdp11.cc:1872 #, c-format msgid "invalid expression as operand" @@ -19846,7 +19927,7 @@ msgstr "" msgid " zstd" msgstr "" -#: gcc.cc:7691 gcov.cc:1523 gcov.cc:1581 gcov.cc:1593 gcov.cc:2916 +#: gcc.cc:7691 gcov.cc:1610 gcov.cc:1668 gcov.cc:1680 gcov.cc:3098 #, c-format msgid "\n" msgstr "" @@ -19901,11 +19982,11 @@ msgstr "" msgid "%s %s%s\n" msgstr "" -#: gcc.cc:8905 gcov-tool.cc:596 gcov.cc:971 fortran/gfortranspec.cc:282 +#: gcc.cc:8905 gcov-tool.cc:596 gcov.cc:1015 fortran/gfortranspec.cc:282 msgid "(C)" msgstr "" -#: gcc.cc:8906 gcov-tool.cc:598 gcov.cc:973 fortran/gfortranspec.cc:283 +#: gcc.cc:8906 gcov-tool.cc:598 gcov.cc:1017 fortran/gfortranspec.cc:283 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -20087,7 +20168,7 @@ msgid "" " -v, --version Print version number, then exit\n" msgstr "" -#: gcov-tool.cc:584 gcov.cc:958 +#: gcov-tool.cc:584 gcov.cc:1002 #, c-format msgid "" "\n" @@ -20100,381 +20181,413 @@ msgstr "" msgid "Copyright %s 2024 Free Software Foundation, Inc.\n" msgstr "" -#: gcov.cc:927 +#: gcov.cc:969 #, c-format msgid "" "Usage: gcov [OPTION...] SOURCE|OBJ...\n" "\n" msgstr "" -#: gcov.cc:928 +#: gcov.cc:970 #, c-format msgid "" "Print code coverage information.\n" "\n" msgstr "" -#: gcov.cc:929 +#: gcov.cc:971 #, c-format msgid "" " -a, --all-blocks Show information for every basic block\n" msgstr "" -#: gcov.cc:930 +#: gcov.cc:972 #, c-format msgid "" " -b, --branch-probabilities Include branch probabilities in output\n" msgstr "" -#: gcov.cc:931 +#: gcov.cc:973 #, c-format msgid "" " -c, --branch-counts Output counts of branches taken\n" " rather than percentages\n" msgstr "" -#: gcov.cc:933 +#: gcov.cc:975 +#, c-format +msgid "" +" -g, --conditions Include modified condition/decision\n" +" coverage in output\n" +msgstr "" + +#: gcov.cc:977 #, c-format msgid " -d, --display-progress Display progress information\n" msgstr "" -#: gcov.cc:934 +#: gcov.cc:978 #, c-format msgid " -D, --debug\t\t\t Display debugging dumps\n" msgstr "" -#: gcov.cc:935 +#: gcov.cc:979 #, c-format msgid " -f, --function-summaries Output summaries for each function\n" msgstr "" -#: gcov.cc:936 +#: gcov.cc:980 #, c-format msgid " -h, --help Print this help, then exit\n" msgstr "" -#: gcov.cc:937 +#: gcov.cc:981 #, c-format msgid "" " -j, --json-format Output JSON intermediate format\n" " into .gcov.json.gz file\n" msgstr "" -#: gcov.cc:939 +#: gcov.cc:983 #, c-format msgid " -H, --human-readable Output human readable numbers\n" msgstr "" -#: gcov.cc:940 +#: gcov.cc:984 #, c-format msgid " -k, --use-colors Emit colored output\n" msgstr "" -#: gcov.cc:941 +#: gcov.cc:985 #, c-format msgid "" " -l, --long-file-names Use long output file names for included\n" " source files\n" msgstr "" -#: gcov.cc:943 +#: gcov.cc:987 #, c-format msgid " -m, --demangled-names Output demangled function names\n" msgstr "" -#: gcov.cc:944 +#: gcov.cc:988 #, c-format msgid " -n, --no-output Do not create an output file\n" msgstr "" -#: gcov.cc:945 +#: gcov.cc:989 #, c-format msgid "" " -o, --object-directory DIR|FILE Search for object files in DIR or called " "FILE\n" msgstr "" -#: gcov.cc:946 +#: gcov.cc:990 #, c-format msgid " -p, --preserve-paths Preserve all pathname components\n" msgstr "" -#: gcov.cc:947 +#: gcov.cc:991 #, c-format msgid "" " -q, --use-hotness-colors Emit perf-like colored output for hot " "lines\n" msgstr "" -#: gcov.cc:948 +#: gcov.cc:992 #, c-format msgid " -r, --relative-only Only show data for relative sources\n" msgstr "" -#: gcov.cc:949 +#: gcov.cc:993 #, c-format msgid " -s, --source-prefix DIR Source prefix to elide\n" msgstr "" -#: gcov.cc:950 +#: gcov.cc:994 #, c-format msgid " -t, --stdout Output to stdout instead of a file\n" msgstr "" -#: gcov.cc:951 +#: gcov.cc:995 #, c-format msgid "" " -u, --unconditional-branches Show unconditional branch counts too\n" msgstr "" -#: gcov.cc:952 +#: gcov.cc:996 #, c-format msgid " -v, --version Print version number, then exit\n" msgstr "" -#: gcov.cc:953 +#: gcov.cc:997 #, c-format msgid " -w, --verbose Print verbose informations\n" msgstr "" -#: gcov.cc:954 +#: gcov.cc:998 #, c-format msgid " -x, --hash-filenames Hash long pathnames\n" msgstr "" -#: gcov.cc:955 +#: gcov.cc:999 #, c-format msgid "" "\n" "Obsolete options:\n" msgstr "" -#: gcov.cc:956 +#: gcov.cc:1000 #, c-format msgid " -i, --json-format Replaced with -j, --json-format\n" msgstr "" -#: gcov.cc:957 +#: gcov.cc:1001 #, c-format msgid " -j, --human-readable Replaced with -H, --human-readable\n" msgstr "" -#: gcov.cc:968 +#: gcov.cc:1012 #, c-format msgid "gcov %s%s\n" msgstr "" -#: gcov.cc:969 +#: gcov.cc:1013 #, c-format msgid "JSON format version: %s\n" msgstr "" -#: gcov.cc:1367 +#: gcov.cc:1454 #, c-format msgid "'%s' file is already processed\n" msgstr "" -#: gcov.cc:1483 gcov.cc:1612 +#: gcov.cc:1570 gcov.cc:1699 #, c-format msgid "Creating '%s'\n" msgstr "" -#: gcov.cc:1487 +#: gcov.cc:1574 #, c-format msgid "Error writing output file '%s'\n" msgstr "" -#: gcov.cc:1495 +#: gcov.cc:1582 #, c-format msgid "Could not open output file '%s'\n" msgstr "" -#: gcov.cc:1502 +#: gcov.cc:1589 #, c-format msgid "Removing '%s'\n" msgstr "" -#: gcov.cc:1617 +#: gcov.cc:1704 #, c-format msgid "Cannot open JSON output file %s\n" msgstr "" -#: gcov.cc:1626 +#: gcov.cc:1713 #, c-format msgid "Error writing JSON output file %s\n" msgstr "" -#: gcov.cc:1791 +#: gcov.cc:1878 #, c-format msgid "%s:source file is newer than notes file '%s'\n" msgstr "" -#: gcov.cc:1796 +#: gcov.cc:1883 #, c-format msgid "(the message is displayed only once per source file)\n" msgstr "" -#: gcov.cc:1816 +#: gcov.cc:1903 #, c-format msgid "%s:cannot open notes file\n" msgstr "" -#: gcov.cc:1823 +#: gcov.cc:1910 #, c-format msgid "%s:not a gcov notes file\n" msgstr "" -#: gcov.cc:1837 +#: gcov.cc:1924 #, c-format msgid "%s:version '%.4s', prefer '%.4s'\n" msgstr "" -#: gcov.cc:1890 +#: gcov.cc:1977 #, c-format msgid "%s:already seen blocks for '%s'\n" msgstr "" -#: gcov.cc:2006 gcov.cc:2120 +#: gcov.cc:2064 +#, c-format +msgid "%s:already seen conditions for '%s'\n" +msgstr "" + +#: gcov.cc:2115 gcov.cc:2244 #, c-format msgid "%s:corrupted\n" msgstr "" -#: gcov.cc:2014 +#: gcov.cc:2123 #, c-format msgid "%s:no functions found\n" msgstr "" -#: gcov.cc:2032 +#: gcov.cc:2141 #, c-format msgid "%s:cannot open data file, assuming not executed\n" msgstr "" -#: gcov.cc:2039 +#: gcov.cc:2148 #, c-format msgid "%s:not a gcov data file\n" msgstr "" -#: gcov.cc:2053 +#: gcov.cc:2162 #, c-format msgid "%s:version '%.4s', prefer version '%.4s'\n" msgstr "" -#: gcov.cc:2060 +#: gcov.cc:2169 #, c-format msgid "%s:stamp mismatch with notes file\n" msgstr "" -#: gcov.cc:2097 +#: gcov.cc:2206 #, c-format msgid "%s:profile mismatch for '%s'\n" msgstr "" -#: gcov.cc:2119 +#: gcov.cc:2243 #, c-format msgid "%s:overflowed\n" msgstr "" -#: gcov.cc:2167 +#: gcov.cc:2291 #, c-format msgid "%s:'%s' lacks entry and/or exit blocks\n" msgstr "" -#: gcov.cc:2172 +#: gcov.cc:2296 #, c-format msgid "%s:'%s' has arcs to entry block\n" msgstr "" -#: gcov.cc:2180 +#: gcov.cc:2304 #, c-format msgid "%s:'%s' has arcs from exit block\n" msgstr "" -#: gcov.cc:2389 +#: gcov.cc:2513 #, c-format msgid "%s:graph is unsolvable for '%s'\n" msgstr "" -#: gcov.cc:2505 +#: gcov.cc:2638 #, c-format msgid "Lines executed:%s of %d\n" msgstr "" -#: gcov.cc:2508 +#: gcov.cc:2641 #, c-format msgid "No executable lines\n" msgstr "" -#: gcov.cc:2516 gcov.cc:2525 +#: gcov.cc:2649 gcov.cc:2658 #, c-format msgid "%s '%s'\n" msgstr "" -#: gcov.cc:2532 +#: gcov.cc:2665 #, c-format msgid "Branches executed:%s of %d\n" msgstr "" -#: gcov.cc:2536 +#: gcov.cc:2669 #, c-format msgid "Taken at least once:%s of %d\n" msgstr "" -#: gcov.cc:2542 +#: gcov.cc:2675 #, c-format msgid "No branches\n" msgstr "" -#: gcov.cc:2544 +#: gcov.cc:2677 #, c-format msgid "Calls executed:%s of %d\n" msgstr "" -#: gcov.cc:2548 +#: gcov.cc:2681 #, c-format msgid "No calls\n" msgstr "" -#: gcov.cc:2768 +#: gcov.cc:2688 +#, c-format +msgid "Condition outcomes covered:%s of %d\n" +msgstr "" + +#: gcov.cc:2693 +#, c-format +msgid "No conditions\n" +msgstr "" + +#: gcov.cc:2913 #, c-format msgid "%s:no lines for '%s'\n" msgstr "" -#: gcov.cc:2894 +#: gcov.cc:3049 +#, c-format +msgid "condition outcomes covered %d/%d\n" +msgstr "" + +#: gcov.cc:3062 +#, c-format +msgid "condition %2u not covered (%s%s)\n" +msgstr "" + +#: gcov.cc:3076 #, c-format msgid "call %2d returned %s\n" msgstr "" -#: gcov.cc:2899 +#: gcov.cc:3081 #, c-format msgid "call %2d never executed\n" msgstr "" -#: gcov.cc:2904 +#: gcov.cc:3086 #, c-format msgid "branch %2d taken %s%s" msgstr "" -#: gcov.cc:2909 +#: gcov.cc:3091 #, c-format msgid "branch %2d never executed%s" msgstr "" -#: gcov.cc:2914 +#: gcov.cc:3096 #, c-format msgid " (BB %d)" msgstr "" -#: gcov.cc:2921 +#: gcov.cc:3103 #, c-format msgid "unconditional %2d taken %s\n" msgstr "" -#: gcov.cc:2924 +#: gcov.cc:3106 #, c-format msgid "unconditional %2d never executed\n" msgstr "" -#: gcov.cc:3174 +#: gcov.cc:3369 #, c-format msgid "Cannot open source file %s\n" msgstr "" @@ -20558,7 +20671,7 @@ msgstr "" msgid " inlined from %qs" msgstr "" -#: lra-assigns.cc:1862 reload1.cc:2073 +#: lra-assigns.cc:1868 reload1.cc:2073 msgid "this is the insn:" msgstr "" @@ -20689,12 +20802,12 @@ msgstr "" msgid "The following options are language-related" msgstr "" -#: passes.cc:1832 +#: passes.cc:1833 #, c-format msgid "during %s pass: %s\n" msgstr "" -#: passes.cc:1837 +#: passes.cc:1838 #, c-format msgid "dump file: %s\n" msgstr "" @@ -20753,34 +20866,34 @@ msgstr "" msgid "created and used with different settings of %<-fpie%>" msgstr "" -#: toplev.cc:313 +#: toplev.cc:315 #, c-format msgid "unrecoverable error" msgstr "" -#: toplev.cc:606 +#: toplev.cc:608 #, c-format msgid "" "%s%s%s %sversion %s (%s)\n" "%s\tcompiled by GNU C version %s, " msgstr "" -#: toplev.cc:608 +#: toplev.cc:610 #, c-format msgid "%s%s%s %sversion %s (%s) compiled by CC, " msgstr "" -#: toplev.cc:612 +#: toplev.cc:614 #, c-format msgid "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n" msgstr "" -#: toplev.cc:614 +#: toplev.cc:616 #, c-format msgid "%s%swarning: %s header version %s differs from library version %s.\n" msgstr "" -#: toplev.cc:616 +#: toplev.cc:618 #, c-format msgid "" "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" @@ -21069,78 +21182,78 @@ msgstr "" msgid "<command-line>" msgstr "" -#: config/aarch64/aarch64.cc:11911 config/loongarch/loongarch.cc:6212 +#: config/aarch64/aarch64.cc:11980 config/loongarch/loongarch.cc:6148 #, c-format msgid "unsupported operand for code '%c'" msgstr "" -#: config/aarch64/aarch64.cc:11920 config/aarch64/aarch64.cc:11933 -#: config/aarch64/aarch64.cc:11945 config/aarch64/aarch64.cc:11956 -#: config/aarch64/aarch64.cc:11972 config/aarch64/aarch64.cc:11986 -#: config/aarch64/aarch64.cc:12006 config/aarch64/aarch64.cc:12088 -#: config/aarch64/aarch64.cc:12099 config/aarch64/aarch64.cc:12113 -#: config/aarch64/aarch64.cc:12339 config/aarch64/aarch64.cc:12352 -#: config/aarch64/aarch64.cc:12369 config/pru/pru.cc:1794 +#: config/aarch64/aarch64.cc:11989 config/aarch64/aarch64.cc:12002 +#: config/aarch64/aarch64.cc:12014 config/aarch64/aarch64.cc:12025 +#: config/aarch64/aarch64.cc:12041 config/aarch64/aarch64.cc:12055 +#: config/aarch64/aarch64.cc:12075 config/aarch64/aarch64.cc:12157 +#: config/aarch64/aarch64.cc:12168 config/aarch64/aarch64.cc:12182 +#: config/aarch64/aarch64.cc:12408 config/aarch64/aarch64.cc:12421 +#: config/aarch64/aarch64.cc:12438 config/pru/pru.cc:1794 #: config/pru/pru.cc:1805 config/pru/pru.cc:1877 #, c-format msgid "invalid operand for '%%%c'" msgstr "" -#: config/aarch64/aarch64.cc:12024 config/aarch64/aarch64.cc:12035 -#: config/aarch64/aarch64.cc:12199 config/aarch64/aarch64.cc:12210 -#: config/riscv/riscv.cc:5801 config/riscv/riscv.cc:5809 -#: config/riscv/riscv.cc:5816 config/riscv/riscv.cc:5820 -#: config/riscv/riscv.cc:5862 config/riscv/riscv.cc:5880 +#: config/aarch64/aarch64.cc:12093 config/aarch64/aarch64.cc:12104 +#: config/aarch64/aarch64.cc:12268 config/aarch64/aarch64.cc:12279 +#: config/riscv/riscv.cc:6114 config/riscv/riscv.cc:6122 +#: config/riscv/riscv.cc:6129 config/riscv/riscv.cc:6133 +#: config/riscv/riscv.cc:6175 config/riscv/riscv.cc:6193 #, c-format msgid "invalid vector constant" msgstr "" -#: config/aarch64/aarch64.cc:12049 +#: config/aarch64/aarch64.cc:12118 #, c-format msgid "incompatible floating point / vector register operand for '%%%c'" msgstr "" -#: config/aarch64/aarch64.cc:12061 +#: config/aarch64/aarch64.cc:12130 #, c-format msgid "incompatible operand for '%%%c'" msgstr "" -#: config/aarch64/aarch64.cc:12081 +#: config/aarch64/aarch64.cc:12150 #, c-format msgid "incompatible register operand for '%%%c'" msgstr "" -#: config/aarch64/aarch64.cc:12146 config/arm/arm.cc:24757 +#: config/aarch64/aarch64.cc:12215 config/arm/arm.cc:24798 #, c-format msgid "missing operand" msgstr "" -#: config/aarch64/aarch64.cc:12236 +#: config/aarch64/aarch64.cc:12305 #, c-format msgid "invalid constant" msgstr "" -#: config/aarch64/aarch64.cc:12239 +#: config/aarch64/aarch64.cc:12308 #, c-format msgid "invalid operand" msgstr "" -#: config/aarch64/aarch64.cc:12377 config/aarch64/aarch64.cc:12382 +#: config/aarch64/aarch64.cc:12446 config/aarch64/aarch64.cc:12451 #, c-format msgid "invalid operand prefix '%%%c'" msgstr "" -#: config/aarch64/aarch64.cc:12402 +#: config/aarch64/aarch64.cc:12471 #, c-format msgid "invalid address mode" msgstr "" -#: config/aarch64/aarch64.cc:28858 +#: config/aarch64/aarch64.cc:29006 msgid "cannot combine GNU and SVE vectors in a binary operation" msgstr "" -#: config/alpha/alpha.cc:5082 config/i386/i386.cc:14172 -#: config/rs6000/rs6000.cc:14665 config/sparc/sparc.cc:9362 +#: config/alpha/alpha.cc:5082 config/i386/i386.cc:14193 +#: config/rs6000/rs6000.cc:14617 config/sparc/sparc.cc:9362 #, c-format msgid "'%%&' used without any local dynamic TLS references" msgstr "" @@ -21156,18 +21269,18 @@ msgid "invalid %%r value" msgstr "" #: config/alpha/alpha.cc:5180 config/ia64/ia64.cc:5542 -#: config/rs6000/rs6000.cc:14360 config/xtensa/xtensa.cc:3066 +#: config/rs6000/rs6000.cc:14312 config/xtensa/xtensa.cc:3066 #, c-format msgid "invalid %%R value" msgstr "" -#: config/alpha/alpha.cc:5186 config/rs6000/rs6000.cc:14280 +#: config/alpha/alpha.cc:5186 config/rs6000/rs6000.cc:14232 #: config/xtensa/xtensa.cc:3039 #, c-format msgid "invalid %%N value" msgstr "" -#: config/alpha/alpha.cc:5194 config/rs6000/rs6000.cc:14308 +#: config/alpha/alpha.cc:5194 config/rs6000/rs6000.cc:14260 #, c-format msgid "invalid %%P value" msgstr "" @@ -21197,7 +21310,7 @@ msgstr "" msgid "invalid %%U value" msgstr "" -#: config/alpha/alpha.cc:5280 config/rs6000/rs6000.cc:14368 +#: config/alpha/alpha.cc:5280 config/rs6000/rs6000.cc:14320 #, c-format msgid "invalid %%s value" msgstr "" @@ -21207,7 +21320,7 @@ msgstr "" msgid "invalid %%C value" msgstr "" -#: config/alpha/alpha.cc:5328 config/rs6000/rs6000.cc:14144 +#: config/alpha/alpha.cc:5328 config/rs6000/rs6000.cc:14096 #, c-format msgid "invalid %%E value" msgstr "" @@ -21217,10 +21330,10 @@ msgstr "" msgid "unknown relocation unspec" msgstr "" -#: config/alpha/alpha.cc:5362 config/gcn/gcn.cc:7349 config/gcn/gcn.cc:7358 -#: config/gcn/gcn.cc:7418 config/gcn/gcn.cc:7426 config/gcn/gcn.cc:7442 -#: config/gcn/gcn.cc:7460 config/gcn/gcn.cc:7511 config/gcn/gcn.cc:7630 -#: config/gcn/gcn.cc:7747 config/rs6000/rs6000.cc:14670 +#: config/alpha/alpha.cc:5362 config/gcn/gcn.cc:7411 config/gcn/gcn.cc:7420 +#: config/gcn/gcn.cc:7480 config/gcn/gcn.cc:7488 config/gcn/gcn.cc:7504 +#: config/gcn/gcn.cc:7522 config/gcn/gcn.cc:7573 config/gcn/gcn.cc:7692 +#: config/gcn/gcn.cc:7809 config/rs6000/rs6000.cc:14622 #, c-format msgid "invalid %%xn code" msgstr "" @@ -21230,237 +21343,237 @@ msgstr "" msgid "invalid operand address" msgstr "" -#: config/arc/arc.cc:4900 +#: config/arc/arc.cc:4901 #, c-format msgid "invalid operand to %%Z code" msgstr "" -#: config/arc/arc.cc:4908 +#: config/arc/arc.cc:4909 #, c-format msgid "invalid operand to %%z code" msgstr "" -#: config/arc/arc.cc:4916 +#: config/arc/arc.cc:4917 #, c-format msgid "invalid operands to %%c code" msgstr "" -#: config/arc/arc.cc:4924 +#: config/arc/arc.cc:4925 #, c-format msgid "invalid operand to %%M code" msgstr "" -#: config/arc/arc.cc:4932 config/m32r/m32r.cc:2087 +#: config/arc/arc.cc:4933 config/m32r/m32r.cc:2088 #, c-format msgid "invalid operand to %%p code" msgstr "" -#: config/arc/arc.cc:4940 +#: config/arc/arc.cc:4941 #, c-format msgid "invalid operand for %%s code" msgstr "" -#: config/arc/arc.cc:4958 +#: config/arc/arc.cc:4959 #, c-format msgid "invalid operand for %%N code" msgstr "" -#: config/arc/arc.cc:4971 +#: config/arc/arc.cc:4972 #, c-format msgid "invalid operand for %%N or %%S code" msgstr "" -#: config/arc/arc.cc:4993 config/m32r/m32r.cc:2080 +#: config/arc/arc.cc:4994 config/m32r/m32r.cc:2081 #, c-format msgid "invalid operand to %%s code" msgstr "" -#: config/arc/arc.cc:5113 config/m32r/m32r.cc:2113 +#: config/arc/arc.cc:5114 config/m32r/m32r.cc:2114 #, c-format msgid "invalid operand to %%R code" msgstr "" -#: config/arc/arc.cc:5189 config/m32r/m32r.cc:2136 +#: config/arc/arc.cc:5190 config/m32r/m32r.cc:2137 #, c-format msgid "invalid operand to %%H/%%L code" msgstr "" -#: config/arc/arc.cc:5257 config/m32r/m32r.cc:2207 +#: config/arc/arc.cc:5258 config/m32r/m32r.cc:2208 #, c-format msgid "invalid operand to %%U code" msgstr "" -#: config/arc/arc.cc:5269 +#: config/arc/arc.cc:5270 #, c-format msgid "invalid operand to %%V code" msgstr "" -#: config/arc/arc.cc:5319 +#: config/arc/arc.cc:5320 #, c-format msgid "invalid operand to %%O code" msgstr "" #. Unknown flag. #. Undocumented flag. -#: config/arc/arc.cc:5342 config/epiphany/epiphany.cc:1308 -#: config/m32r/m32r.cc:2234 config/nds32/nds32.cc:3518 +#: config/arc/arc.cc:5343 config/epiphany/epiphany.cc:1309 +#: config/m32r/m32r.cc:2235 config/nds32/nds32.cc:3519 #: config/sparc/sparc.cc:9641 #, c-format msgid "invalid operand output code" msgstr "" -#: config/arc/arc.cc:6395 +#: config/arc/arc.cc:6396 #, c-format msgid "invalid UNSPEC as operand: %d" msgstr "" -#: config/arc/arc.cc:6611 +#: config/arc/arc.cc:6612 msgid "unrecognized supposed constant" msgstr "" -#: config/arm/arm.cc:21045 config/arm/arm.cc:21070 config/arm/arm.cc:21080 -#: config/arm/arm.cc:21089 config/arm/arm.cc:21098 +#: config/arm/arm.cc:21086 config/arm/arm.cc:21111 config/arm/arm.cc:21121 +#: config/arm/arm.cc:21130 config/arm/arm.cc:21139 #, c-format msgid "invalid shift operand" msgstr "" -#: config/arm/arm.cc:24007 config/arm/arm.cc:24025 +#: config/arm/arm.cc:24048 config/arm/arm.cc:24066 #, c-format msgid "predicated Thumb instruction" msgstr "" -#: config/arm/arm.cc:24013 +#: config/arm/arm.cc:24054 #, c-format msgid "predicated instruction in conditional sequence" msgstr "" -#: config/arm/arm.cc:24134 config/arm/arm.cc:24147 config/arm/arm.cc:24172 +#: config/arm/arm.cc:24175 config/arm/arm.cc:24188 config/arm/arm.cc:24213 #: config/nios2/nios2.cc:3085 #, c-format msgid "Unsupported operand for code '%c'" msgstr "" -#: config/arm/arm.cc:24249 config/arm/arm.cc:24271 config/arm/arm.cc:24281 -#: config/arm/arm.cc:24291 config/arm/arm.cc:24301 config/arm/arm.cc:24340 -#: config/arm/arm.cc:24358 config/arm/arm.cc:24376 config/arm/arm.cc:24403 -#: config/arm/arm.cc:24418 config/arm/arm.cc:24445 config/arm/arm.cc:24452 -#: config/arm/arm.cc:24470 config/arm/arm.cc:24477 config/arm/arm.cc:24485 -#: config/arm/arm.cc:24506 config/arm/arm.cc:24513 config/arm/arm.cc:24704 -#: config/arm/arm.cc:24711 config/arm/arm.cc:24738 config/arm/arm.cc:24745 +#: config/arm/arm.cc:24290 config/arm/arm.cc:24312 config/arm/arm.cc:24322 +#: config/arm/arm.cc:24332 config/arm/arm.cc:24342 config/arm/arm.cc:24381 +#: config/arm/arm.cc:24399 config/arm/arm.cc:24417 config/arm/arm.cc:24444 +#: config/arm/arm.cc:24459 config/arm/arm.cc:24486 config/arm/arm.cc:24493 +#: config/arm/arm.cc:24511 config/arm/arm.cc:24518 config/arm/arm.cc:24526 +#: config/arm/arm.cc:24547 config/arm/arm.cc:24554 config/arm/arm.cc:24745 +#: config/arm/arm.cc:24752 config/arm/arm.cc:24779 config/arm/arm.cc:24786 #: config/bfin/bfin.cc:1441 config/bfin/bfin.cc:1448 config/bfin/bfin.cc:1455 #: config/bfin/bfin.cc:1462 config/bfin/bfin.cc:1471 config/bfin/bfin.cc:1478 -#: config/bfin/bfin.cc:1485 config/bfin/bfin.cc:1492 config/nds32/nds32.cc:3544 +#: config/bfin/bfin.cc:1485 config/bfin/bfin.cc:1492 config/nds32/nds32.cc:3545 #, c-format msgid "invalid operand for code '%c'" msgstr "" -#: config/arm/arm.cc:24353 +#: config/arm/arm.cc:24394 #, c-format msgid "instruction never executed" msgstr "" #. Former Maverick support, removed after GCC-4.7. -#: config/arm/arm.cc:24394 +#: config/arm/arm.cc:24435 #, c-format msgid "obsolete Maverick format code '%c'" msgstr "" -#: config/arm/arm.cc:34364 +#: config/arm/arm.cc:34406 msgid "invalid conversion from type %<bfloat16_t%>" msgstr "" -#: config/arm/arm.cc:34366 +#: config/arm/arm.cc:34408 msgid "invalid conversion to type %<bfloat16_t%>" msgstr "" -#: config/arm/arm.cc:34381 config/arm/arm.cc:34397 +#: config/arm/arm.cc:34423 config/arm/arm.cc:34439 msgid "operation not permitted on type %<bfloat16_t%>" msgstr "" -#: config/avr/avr.cc:3013 +#: config/avr/avr.cc:3610 #, c-format msgid "address operand requires constraint for X, Y, or Z register" msgstr "" -#: config/avr/avr.cc:3196 +#: config/avr/avr.cc:3793 msgid "operands to %T/%t must be reg + const_int:" msgstr "" -#: config/avr/avr.cc:3246 config/avr/avr.cc:3313 +#: config/avr/avr.cc:3843 config/avr/avr.cc:3910 msgid "bad address, not an I/O address:" msgstr "" -#: config/avr/avr.cc:3255 +#: config/avr/avr.cc:3852 msgid "bad address, not a constant:" msgstr "" -#: config/avr/avr.cc:3273 config/avr/avr.cc:3280 +#: config/avr/avr.cc:3870 config/avr/avr.cc:3877 msgid "bad address, not (reg+disp):" msgstr "" -#: config/avr/avr.cc:3287 +#: config/avr/avr.cc:3884 msgid "bad address, not post_inc or pre_dec:" msgstr "" -#: config/avr/avr.cc:3299 +#: config/avr/avr.cc:3896 msgid "internal compiler error. Bad address:" msgstr "" -#: config/avr/avr.cc:3332 +#: config/avr/avr.cc:3929 #, c-format msgid "Unsupported code '%c' for fixed-point:" msgstr "" -#: config/avr/avr.cc:3340 +#: config/avr/avr.cc:3937 msgid "internal compiler error. Unknown mode:" msgstr "" -#: config/avr/avr.cc:4215 config/avr/avr.cc:5159 config/avr/avr.cc:5606 +#: config/avr/avr.cc:4806 config/avr/avr.cc:5749 config/avr/avr.cc:6196 msgid "invalid insn:" msgstr "" -#: config/avr/avr.cc:4269 config/avr/avr.cc:4381 config/avr/avr.cc:4439 -#: config/avr/avr.cc:4491 config/avr/avr.cc:4510 config/avr/avr.cc:4702 -#: config/avr/avr.cc:5010 config/avr/avr.cc:5295 config/avr/avr.cc:5499 -#: config/avr/avr.cc:5663 config/avr/avr.cc:5756 config/avr/avr.cc:5955 +#: config/avr/avr.cc:4860 config/avr/avr.cc:4971 config/avr/avr.cc:5029 +#: config/avr/avr.cc:5081 config/avr/avr.cc:5100 config/avr/avr.cc:5292 +#: config/avr/avr.cc:5600 config/avr/avr.cc:5885 config/avr/avr.cc:6089 +#: config/avr/avr.cc:6253 config/avr/avr.cc:6346 config/avr/avr.cc:6544 msgid "incorrect insn:" msgstr "" -#: config/avr/avr.cc:4526 config/avr/avr.cc:4801 config/avr/avr.cc:5081 -#: config/avr/avr.cc:5367 config/avr/avr.cc:5545 config/avr/avr.cc:5812 -#: config/avr/avr.cc:6013 +#: config/avr/avr.cc:5116 config/avr/avr.cc:5391 config/avr/avr.cc:5671 +#: config/avr/avr.cc:5957 config/avr/avr.cc:6135 config/avr/avr.cc:6402 +#: config/avr/avr.cc:6602 msgid "unknown move insn:" msgstr "" -#: config/avr/avr.cc:6621 +#: config/avr/avr.cc:7369 msgid "bad shift insn:" msgstr "" -#: config/avr/avr.cc:6729 config/avr/avr.cc:7212 config/avr/avr.cc:7629 +#: config/avr/avr.cc:7477 config/avr/avr.cc:7960 config/avr/avr.cc:8377 msgid "internal compiler error. Incorrect shift:" msgstr "" -#: config/avr/avr.cc:9283 +#: config/avr/avr.cc:10201 msgid "unsupported fixed-point conversion" msgstr "" -#: config/avr/avr.cc:10665 +#: config/avr/avr.cc:11576 msgid "variable" msgstr "" -#: config/avr/avr.cc:10670 +#: config/avr/avr.cc:11581 msgid "function parameter" msgstr "" -#: config/avr/avr.cc:10675 +#: config/avr/avr.cc:11586 msgid "structure field" msgstr "" -#: config/avr/avr.cc:10681 +#: config/avr/avr.cc:11592 msgid "return type of function" msgstr "" -#: config/avr/avr.cc:10686 +#: config/avr/avr.cc:11597 msgid "pointer" msgstr "" @@ -21481,20 +21594,20 @@ msgstr "" msgid "invalid const_double operand" msgstr "" -#: config/bpf/bpf.cc:884 +#: config/bpf/bpf.cc:894 msgid "invalid address in operand" msgstr "" #. Fallthrough. -#: config/bpf/bpf.cc:891 +#: config/bpf/bpf.cc:901 msgid "unsupported operand" msgstr "" #. Format punctuators via %s to avoid -Wformat-diag. #: config/cris/cris.cc:779 config/ft32/ft32.cc:110 config/moxie/moxie.cc:108 #: final.cc:3187 final.cc:3189 fold-const.cc:348 gcc.cc:6261 gcc.cc:6275 -#: rtl-error.cc:101 toplev.cc:317 cp/logic.cc:312 cp/logic.cc:314 -#: cp/typeck.cc:7750 d/d-convert.cc:237 go/go-gcc-diagnostics.cc:28 +#: rtl-error.cc:101 toplev.cc:319 cp/logic.cc:312 cp/logic.cc:314 +#: cp/typeck.cc:7751 d/d-convert.cc:237 go/go-gcc-diagnostics.cc:28 #: go/go-gcc-diagnostics.cc:37 go/go-gcc-diagnostics.cc:45 #: go/go-gcc-diagnostics.cc:53 lto/lto-object.cc:180 lto/lto-object.cc:277 #: lto/lto-object.cc:334 lto/lto-object.cc:358 m2/gm2-gcc/m2linemap.cc:182 @@ -21708,25 +21821,25 @@ msgstr "" msgid "bad output_condmove_single operand" msgstr "" -#: config/gcn/gcn.cc:7031 config/gcn/gcn.cc:7051 config/gcn/gcn.cc:7055 -#: config/gcn/gcn.cc:7391 config/gcn/gcn.cc:7402 config/gcn/gcn.cc:7405 +#: config/gcn/gcn.cc:7093 config/gcn/gcn.cc:7113 config/gcn/gcn.cc:7117 +#: config/gcn/gcn.cc:7453 config/gcn/gcn.cc:7464 config/gcn/gcn.cc:7467 #, c-format msgid "bad ADDR_SPACE_GLOBAL address" msgstr "" -#: config/gcn/gcn.cc:7171 config/gcn/gcn.cc:7194 config/gcn/gcn.cc:7226 -#: config/gcn/gcn.cc:7242 config/gcn/gcn.cc:7257 config/gcn/gcn.cc:7276 -#: config/gcn/gcn.cc:7340 config/gcn/gcn.cc:7536 config/gcn/gcn.cc:7651 +#: config/gcn/gcn.cc:7233 config/gcn/gcn.cc:7256 config/gcn/gcn.cc:7288 +#: config/gcn/gcn.cc:7304 config/gcn/gcn.cc:7319 config/gcn/gcn.cc:7338 +#: config/gcn/gcn.cc:7402 config/gcn/gcn.cc:7598 config/gcn/gcn.cc:7713 #, c-format msgid "invalid operand %%xn code" msgstr "" -#: config/gcn/gcn.cc:7639 +#: config/gcn/gcn.cc:7701 #, c-format msgid "operand %%xn code invalid for QImode" msgstr "" -#: config/gcn/gcn.cc:7727 +#: config/gcn/gcn.cc:7789 #, c-format msgid "invalid fp constant" msgstr "" @@ -21738,122 +21851,122 @@ msgstr "" msgid "Expected register or constant integer." msgstr "" -#: config/i386/i386.cc:12990 +#: config/i386/i386.cc:13011 #, c-format msgid "invalid UNSPEC as operand" msgstr "" -#: config/i386/i386.cc:13529 +#: config/i386/i386.cc:13550 #, c-format msgid "invalid use of register '%s'" msgstr "" -#: config/i386/i386.cc:13534 +#: config/i386/i386.cc:13555 #, c-format msgid "invalid use of asm flag output" msgstr "" -#: config/i386/i386.cc:13767 +#: config/i386/i386.cc:13788 #, c-format msgid "invalid operand size for operand code 'O'" msgstr "" -#: config/i386/i386.cc:13802 +#: config/i386/i386.cc:13823 #, c-format msgid "invalid operand size for operand code 'z'" msgstr "" -#: config/i386/i386.cc:13877 +#: config/i386/i386.cc:13898 #, c-format msgid "invalid operand type used with operand code '%c'" msgstr "" -#: config/i386/i386.cc:13882 +#: config/i386/i386.cc:13903 #, c-format msgid "invalid operand size for operand code '%c'" msgstr "" -#: config/i386/i386.cc:13960 +#: config/i386/i386.cc:13981 #, c-format msgid "operand is not a condition code, invalid operand code 'Y'" msgstr "" -#: config/i386/i386.cc:14039 +#: config/i386/i386.cc:14060 #, c-format msgid "operand is not a condition code, invalid operand code 'D'" msgstr "" -#: config/i386/i386.cc:14057 +#: config/i386/i386.cc:14078 #, c-format msgid "operand is not a condition code, invalid operand code '%c'" msgstr "" -#: config/i386/i386.cc:14070 +#: config/i386/i386.cc:14091 #, c-format msgid "" "operand is not an offsettable memory reference, invalid operand code 'H'" msgstr "" -#: config/i386/i386.cc:14085 +#: config/i386/i386.cc:14106 #, c-format msgid "operand is not an integer, invalid operand code 'K'" msgstr "" -#: config/i386/i386.cc:14113 +#: config/i386/i386.cc:14134 #, c-format msgid "operand is not a specific integer, invalid operand code 'r'" msgstr "" -#: config/i386/i386.cc:14131 +#: config/i386/i386.cc:14152 #, c-format msgid "operand is not an integer, invalid operand code 'R'" msgstr "" -#: config/i386/i386.cc:14154 +#: config/i386/i386.cc:14175 #, c-format msgid "operand is not a specific integer, invalid operand code 'R'" msgstr "" -#: config/i386/i386.cc:14258 +#: config/i386/i386.cc:14279 #, c-format msgid "invalid operand code '%c'" msgstr "" -#: config/i386/i386.cc:14320 config/i386/i386.cc:14709 +#: config/i386/i386.cc:14341 config/i386/i386.cc:14730 #, c-format msgid "invalid constraints for operand" msgstr "" -#: config/i386/i386.cc:14421 +#: config/i386/i386.cc:14442 #, c-format msgid "invalid vector immediate" msgstr "" -#: config/i386/i386.cc:17541 +#: config/i386/i386.cc:17562 msgid "unknown insn mode" msgstr "" -#: config/i386/i386.cc:23578 +#: config/i386/i386.cc:23599 msgid "invalid conversion from type %<__bf16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:23581 +#: config/i386/i386.cc:23602 msgid "invalid conversion from type %<_Float16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:23584 +#: config/i386/i386.cc:23605 msgid "invalid conversion to type %<__bf16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:23587 +#: config/i386/i386.cc:23608 msgid "invalid conversion to type %<_Float16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:23625 config/i386/i386.cc:23650 +#: config/i386/i386.cc:23646 config/i386/i386.cc:23671 msgid "operation not permitted on type %<__bf16%> without option %<-msse2%>" msgstr "" -#: config/i386/i386.cc:23628 config/i386/i386.cc:23654 +#: config/i386/i386.cc:23649 config/i386/i386.cc:23675 msgid "operation not permitted on type %<_Float16%> without option %<-msse2%>" msgstr "" @@ -21884,7 +21997,7 @@ msgstr "" msgid "invalid %%P operand" msgstr "" -#: config/iq2000/iq2000.cc:3131 config/rs6000/rs6000.cc:14298 +#: config/iq2000/iq2000.cc:3131 config/rs6000/rs6000.cc:14250 #, c-format msgid "invalid %%p value" msgstr "" @@ -21911,65 +22024,65 @@ msgstr "" msgid "invalid addressing mode" msgstr "" -#: config/loongarch/loongarch.cc:5945 config/loongarch/loongarch.cc:5967 -#: config/loongarch/loongarch.cc:6355 config/mips/mips.cc:9233 -#: config/mips/mips.cc:9260 config/mips/mips.cc:9443 +#: config/loongarch/loongarch.cc:5880 config/loongarch/loongarch.cc:5902 +#: config/loongarch/loongarch.cc:6303 config/mips/mips.cc:9239 +#: config/mips/mips.cc:9266 config/mips/mips.cc:9449 #, c-format msgid "'%%%c' is not a valid operand prefix" msgstr "" -#: config/loongarch/loongarch.cc:6204 config/loongarch/loongarch.cc:6224 -#: config/loongarch/loongarch.cc:6270 config/loongarch/loongarch.cc:6277 -#: config/loongarch/loongarch.cc:6312 config/loongarch/loongarch.cc:6315 -#: config/loongarch/loongarch.cc:6327 config/loongarch/loongarch.cc:6334 -#: config/loongarch/loongarch.cc:6344 config/loongarch/loongarch.cc:6347 -#: config/loongarch/loongarch.cc:6368 config/loongarch/loongarch.cc:6375 -#: config/loongarch/loongarch.cc:6402 config/loongarch/loongarch.cc:6413 -#: config/loongarch/loongarch.cc:6428 config/loongarch/loongarch.cc:6437 -#: config/mips/mips.cc:9332 config/mips/mips.cc:9339 config/mips/mips.cc:9346 -#: config/mips/mips.cc:9353 config/mips/mips.cc:9366 config/mips/mips.cc:9373 -#: config/mips/mips.cc:9383 config/mips/mips.cc:9386 config/mips/mips.cc:9398 -#: config/mips/mips.cc:9401 config/mips/mips.cc:9461 config/mips/mips.cc:9468 -#: config/mips/mips.cc:9489 config/mips/mips.cc:9504 config/mips/mips.cc:9523 -#: config/mips/mips.cc:9532 config/riscv/riscv.cc:5605 -#: config/riscv/riscv.cc:5980 config/riscv/riscv.cc:5986 -#: config/riscv/riscv.cc:6002 config/riscv/riscv.cc:6013 +#: config/loongarch/loongarch.cc:6140 config/loongarch/loongarch.cc:6160 +#: config/loongarch/loongarch.cc:6206 config/loongarch/loongarch.cc:6213 +#: config/loongarch/loongarch.cc:6260 config/loongarch/loongarch.cc:6263 +#: config/loongarch/loongarch.cc:6275 config/loongarch/loongarch.cc:6282 +#: config/loongarch/loongarch.cc:6292 config/loongarch/loongarch.cc:6295 +#: config/loongarch/loongarch.cc:6316 config/loongarch/loongarch.cc:6323 +#: config/loongarch/loongarch.cc:6350 config/loongarch/loongarch.cc:6361 +#: config/loongarch/loongarch.cc:6376 config/loongarch/loongarch.cc:6385 +#: config/mips/mips.cc:9338 config/mips/mips.cc:9345 config/mips/mips.cc:9352 +#: config/mips/mips.cc:9359 config/mips/mips.cc:9372 config/mips/mips.cc:9379 +#: config/mips/mips.cc:9389 config/mips/mips.cc:9392 config/mips/mips.cc:9404 +#: config/mips/mips.cc:9407 config/mips/mips.cc:9467 config/mips/mips.cc:9474 +#: config/mips/mips.cc:9495 config/mips/mips.cc:9510 config/mips/mips.cc:9529 +#: config/mips/mips.cc:9538 config/riscv/riscv.cc:5918 +#: config/riscv/riscv.cc:6293 config/riscv/riscv.cc:6299 +#: config/riscv/riscv.cc:6315 config/riscv/riscv.cc:6326 #, c-format msgid "invalid use of '%%%c'" msgstr "" -#: config/m32r/m32r.cc:2145 +#: config/m32r/m32r.cc:2146 msgid "bad insn for 'A'" msgstr "" -#: config/m32r/m32r.cc:2192 +#: config/m32r/m32r.cc:2193 #, c-format msgid "invalid operand to %%T/%%B code" msgstr "" -#: config/m32r/m32r.cc:2215 +#: config/m32r/m32r.cc:2216 #, c-format msgid "invalid operand to %%N code" msgstr "" -#: config/m32r/m32r.cc:2248 +#: config/m32r/m32r.cc:2249 msgid "pre-increment address is not a register" msgstr "" -#: config/m32r/m32r.cc:2255 +#: config/m32r/m32r.cc:2256 msgid "pre-decrement address is not a register" msgstr "" -#: config/m32r/m32r.cc:2262 +#: config/m32r/m32r.cc:2263 msgid "post-increment address is not a register" msgstr "" -#: config/m32r/m32r.cc:2337 config/m32r/m32r.cc:2352 -#: config/rs6000/rs6000.cc:21023 +#: config/m32r/m32r.cc:2338 config/m32r/m32r.cc:2353 +#: config/rs6000/rs6000.cc:20975 msgid "bad address" msgstr "" -#: config/m32r/m32r.cc:2357 +#: config/m32r/m32r.cc:2358 msgid "lo_sum not of register" msgstr "" @@ -22125,7 +22238,7 @@ msgstr "" msgid "unsupported memory expression:" msgstr "" -#: config/riscv/riscv.cc:5782 +#: config/riscv/riscv.cc:6095 #, c-format msgid "invalid vector operand" msgstr "" @@ -22145,270 +22258,270 @@ msgstr "" msgid "Try running '%s' in the shell to raise its limit.\n" msgstr "" -#: config/rs6000/rs6000.cc:3822 +#: config/rs6000/rs6000.cc:3824 msgid "%<-mvsx%> requires hardware floating point" msgstr "" -#: config/rs6000/rs6000.cc:3830 +#: config/rs6000/rs6000.cc:3832 msgid "%<-mvsx%> needs indexed addressing" msgstr "" -#: config/rs6000/rs6000.cc:3835 +#: config/rs6000/rs6000.cc:3837 msgid "%<-mvsx%> and %<-mno-altivec%> are incompatible" msgstr "" -#: config/rs6000/rs6000.cc:3837 +#: config/rs6000/rs6000.cc:3839 msgid "%<-mno-altivec%> disables vsx" msgstr "" -#: config/rs6000/rs6000.cc:3986 +#: config/rs6000/rs6000.cc:3959 msgid "%<-mquad-memory%> requires 64-bit mode" msgstr "" -#: config/rs6000/rs6000.cc:3989 +#: config/rs6000/rs6000.cc:3962 msgid "%<-mquad-memory-atomic%> requires 64-bit mode" msgstr "" -#: config/rs6000/rs6000.cc:4001 +#: config/rs6000/rs6000.cc:3974 msgid "%<-mquad-memory%> is not available in little endian mode" msgstr "" -#: config/rs6000/rs6000.cc:11388 +#: config/rs6000/rs6000.cc:11340 msgid "bad move" msgstr "" -#: config/rs6000/rs6000.cc:13928 +#: config/rs6000/rs6000.cc:13880 msgid "Bad 128-bit move" msgstr "" -#: config/rs6000/rs6000.cc:14108 +#: config/rs6000/rs6000.cc:14060 #, c-format msgid "invalid %%A value" msgstr "" -#: config/rs6000/rs6000.cc:14117 config/xtensa/xtensa.cc:3015 +#: config/rs6000/rs6000.cc:14069 config/xtensa/xtensa.cc:3015 #, c-format msgid "invalid %%D value" msgstr "" -#: config/rs6000/rs6000.cc:14132 +#: config/rs6000/rs6000.cc:14084 #, c-format msgid "invalid %%e value" msgstr "" -#: config/rs6000/rs6000.cc:14153 +#: config/rs6000/rs6000.cc:14105 #, c-format msgid "invalid %%f value" msgstr "" -#: config/rs6000/rs6000.cc:14162 +#: config/rs6000/rs6000.cc:14114 #, c-format msgid "invalid %%F value" msgstr "" -#: config/rs6000/rs6000.cc:14171 +#: config/rs6000/rs6000.cc:14123 #, c-format msgid "invalid %%G value" msgstr "" -#: config/rs6000/rs6000.cc:14206 +#: config/rs6000/rs6000.cc:14158 #, c-format msgid "invalid %%j code" msgstr "" -#: config/rs6000/rs6000.cc:14216 +#: config/rs6000/rs6000.cc:14168 #, c-format msgid "invalid %%J code" msgstr "" -#: config/rs6000/rs6000.cc:14226 +#: config/rs6000/rs6000.cc:14178 #, c-format msgid "invalid %%k value" msgstr "" -#: config/rs6000/rs6000.cc:14241 config/xtensa/xtensa.cc:3052 +#: config/rs6000/rs6000.cc:14193 config/xtensa/xtensa.cc:3052 #, c-format msgid "invalid %%K value" msgstr "" -#: config/rs6000/rs6000.cc:14288 +#: config/rs6000/rs6000.cc:14240 #, c-format msgid "invalid %%O value" msgstr "" -#: config/rs6000/rs6000.cc:14335 +#: config/rs6000/rs6000.cc:14287 #, c-format msgid "invalid %%q value" msgstr "" -#: config/rs6000/rs6000.cc:14377 +#: config/rs6000/rs6000.cc:14329 #, c-format msgid "invalid %%t value" msgstr "" -#: config/rs6000/rs6000.cc:14394 +#: config/rs6000/rs6000.cc:14346 #, c-format msgid "invalid %%T value" msgstr "" -#: config/rs6000/rs6000.cc:14406 +#: config/rs6000/rs6000.cc:14358 #, c-format msgid "invalid %%u value" msgstr "" -#: config/rs6000/rs6000.cc:14420 config/xtensa/xtensa.cc:3027 +#: config/rs6000/rs6000.cc:14372 config/xtensa/xtensa.cc:3027 #, c-format msgid "invalid %%v value" msgstr "" -#: config/rs6000/rs6000.cc:14470 +#: config/rs6000/rs6000.cc:14422 #, c-format msgid "invalid %%V value" msgstr "" -#: config/rs6000/rs6000.cc:14486 config/xtensa/xtensa.cc:3073 +#: config/rs6000/rs6000.cc:14438 config/xtensa/xtensa.cc:3073 #, c-format msgid "invalid %%x value" msgstr "" -#: config/rs6000/rs6000.cc:14543 +#: config/rs6000/rs6000.cc:14495 #, c-format msgid "invalid %%z value" msgstr "" -#: config/rs6000/rs6000.cc:14612 +#: config/rs6000/rs6000.cc:14564 #, c-format msgid "invalid %%y value, try using the 'Z' constraint" msgstr "" -#: config/rs6000/rs6000.cc:15554 +#: config/rs6000/rs6000.cc:15506 msgid "Invalid mixing of IEEE 128-bit and IBM 128-bit floating point types" msgstr "" -#: config/rs6000/rs6000.cc:24424 +#: config/rs6000/rs6000.cc:24376 msgid "AltiVec argument passed to unprototyped function" msgstr "" -#: config/rs6000/rs6000.cc:28047 +#: config/rs6000/rs6000.cc:27991 msgid "Could not generate addis value for fusion" msgstr "" -#: config/rs6000/rs6000.cc:28116 +#: config/rs6000/rs6000.cc:28060 msgid "Unable to generate load/store offset for fusion" msgstr "" -#: config/rs6000/rs6000.cc:28192 +#: config/rs6000/rs6000.cc:28136 msgid "Bad GPR fusion" msgstr "" -#: config/rs6000/rs6000.cc:28794 +#: config/rs6000/rs6000.cc:28738 msgid "invalid conversion from type %<__vector_quad%>" msgstr "" -#: config/rs6000/rs6000.cc:28796 +#: config/rs6000/rs6000.cc:28740 msgid "invalid conversion to type %<__vector_quad%>" msgstr "" -#: config/rs6000/rs6000.cc:28798 +#: config/rs6000/rs6000.cc:28742 msgid "invalid conversion from type %<__vector_pair%>" msgstr "" -#: config/rs6000/rs6000.cc:28800 +#: config/rs6000/rs6000.cc:28744 msgid "invalid conversion to type %<__vector_pair%>" msgstr "" -#: config/s390/s390.cc:8413 +#: config/s390/s390.cc:8415 #, c-format msgid "symbolic memory references are only supported on z10 or later" msgstr "" -#: config/s390/s390.cc:8424 +#: config/s390/s390.cc:8426 #, c-format msgid "cannot decompose address" msgstr "" -#: config/s390/s390.cc:8506 +#: config/s390/s390.cc:8508 #, c-format msgid "invalid comparison operator for 'E' output modifier" msgstr "" -#: config/s390/s390.cc:8529 +#: config/s390/s390.cc:8531 #, c-format msgid "invalid reference for 'J' output modifier" msgstr "" -#: config/s390/s390.cc:8547 +#: config/s390/s390.cc:8549 #, c-format msgid "invalid address for 'O' output modifier" msgstr "" -#: config/s390/s390.cc:8569 +#: config/s390/s390.cc:8571 #, c-format msgid "invalid address for 'R' output modifier" msgstr "" -#: config/s390/s390.cc:8587 +#: config/s390/s390.cc:8589 #, c-format msgid "memory reference expected for 'S' output modifier" msgstr "" -#: config/s390/s390.cc:8597 +#: config/s390/s390.cc:8599 #, c-format msgid "invalid address for 'S' output modifier" msgstr "" -#: config/s390/s390.cc:8618 +#: config/s390/s390.cc:8620 #, c-format msgid "register or memory expression expected for 'N' output modifier" msgstr "" -#: config/s390/s390.cc:8629 +#: config/s390/s390.cc:8631 #, c-format msgid "register or memory expression expected for 'M' output modifier" msgstr "" -#: config/s390/s390.cc:8738 config/s390/s390.cc:8759 +#: config/s390/s390.cc:8740 config/s390/s390.cc:8761 #, c-format msgid "invalid constant for output modifier '%c'" msgstr "" -#: config/s390/s390.cc:8756 +#: config/s390/s390.cc:8758 #, c-format msgid "invalid constant - try using an output modifier" msgstr "" -#: config/s390/s390.cc:8793 +#: config/s390/s390.cc:8795 #, c-format msgid "invalid constant vector for output modifier '%c'" msgstr "" -#: config/s390/s390.cc:8800 +#: config/s390/s390.cc:8802 #, c-format msgid "invalid expression - try using an output modifier" msgstr "" -#: config/s390/s390.cc:8803 +#: config/s390/s390.cc:8805 #, c-format msgid "invalid expression for output modifier '%c'" msgstr "" -#: config/s390/s390.cc:12652 +#: config/s390/s390.cc:12664 msgid "vector argument passed to unprototyped function" msgstr "" -#: config/s390/s390.cc:17089 +#: config/s390/s390.cc:17110 msgid "types differ in signedness" msgstr "" -#: config/s390/s390.cc:17099 +#: config/s390/s390.cc:17120 msgid "binary operator does not support two vector bool operands" msgstr "" -#: config/s390/s390.cc:17102 +#: config/s390/s390.cc:17123 msgid "binary operator does not support vector bool operand" msgstr "" -#: config/s390/s390.cc:17110 +#: config/s390/s390.cc:17131 msgid "" "binary operator does not support mixing vector bool with floating point " "vector operands" @@ -22528,23 +22641,23 @@ msgstr "" msgid "illegal operand detected" msgstr "" -#: config/visium/visium.cc:3366 +#: config/visium/visium.cc:3367 msgid "illegal operand " msgstr "" -#: config/visium/visium.cc:3417 +#: config/visium/visium.cc:3418 msgid "illegal operand address (1)" msgstr "" -#: config/visium/visium.cc:3424 +#: config/visium/visium.cc:3425 msgid "illegal operand address (2)" msgstr "" -#: config/visium/visium.cc:3439 +#: config/visium/visium.cc:3440 msgid "illegal operand address (3)" msgstr "" -#: config/visium/visium.cc:3447 +#: config/visium/visium.cc:3448 msgid "illegal operand address (4)" msgstr "" @@ -22573,15 +22686,15 @@ msgstr "" msgid "address offset not a constant" msgstr "" -#: c/c-objc-common.cc:226 +#: c/c-objc-common.cc:227 msgid "{erroneous}" msgstr "" -#: c/c-objc-common.cc:267 +#: c/c-objc-common.cc:268 msgid "aka" msgstr "" -#: c/c-objc-common.cc:359 +#: c/c-objc-common.cc:360 msgid "({anonymous})" msgstr "" @@ -22594,32 +22707,32 @@ msgstr "" #. ; #. <~~~~~~~~~ declaration ~~~~~~~~~~> #. Use c_parser_require to get an error with a fix-it hint. -#: c/c-parser.cc:2934 c/c-parser.cc:3059 c/c-parser.cc:3073 c/c-parser.cc:7008 -#: c/c-parser.cc:7763 c/c-parser.cc:8219 c/c-parser.cc:8406 c/c-parser.cc:8439 -#: c/c-parser.cc:8710 c/c-parser.cc:13147 c/c-parser.cc:13182 -#: c/c-parser.cc:13213 c/c-parser.cc:13260 c/c-parser.cc:13441 -#: c/c-parser.cc:14274 c/c-parser.cc:14349 c/c-parser.cc:14392 -#: c/c-parser.cc:21252 c/c-parser.cc:21332 c/c-parser.cc:21661 -#: c/c-parser.cc:21687 c/c-parser.cc:21710 c/c-parser.cc:22246 -#: c/c-parser.cc:22290 c/gimple-parser.cc:411 c/gimple-parser.cc:452 +#: c/c-parser.cc:2934 c/c-parser.cc:3059 c/c-parser.cc:3073 c/c-parser.cc:7006 +#: c/c-parser.cc:7761 c/c-parser.cc:8217 c/c-parser.cc:8404 c/c-parser.cc:8437 +#: c/c-parser.cc:8708 c/c-parser.cc:13166 c/c-parser.cc:13201 +#: c/c-parser.cc:13232 c/c-parser.cc:13279 c/c-parser.cc:13460 +#: c/c-parser.cc:14293 c/c-parser.cc:14368 c/c-parser.cc:14411 +#: c/c-parser.cc:21325 c/c-parser.cc:21405 c/c-parser.cc:21734 +#: c/c-parser.cc:21760 c/c-parser.cc:21783 c/c-parser.cc:22319 +#: c/c-parser.cc:22363 c/gimple-parser.cc:411 c/gimple-parser.cc:452 #: c/gimple-parser.cc:461 c/gimple-parser.cc:670 c/gimple-parser.cc:2351 #: c/gimple-parser.cc:2388 c/gimple-parser.cc:2467 c/gimple-parser.cc:2494 -#: c/c-parser.cc:3888 c/c-parser.cc:4079 c/c-parser.cc:4114 c/c-parser.cc:13434 +#: c/c-parser.cc:3888 c/c-parser.cc:4079 c/c-parser.cc:4114 c/c-parser.cc:13453 #: c/gimple-parser.cc:2158 c/gimple-parser.cc:2215 cp/parser.cc:15847 -#: cp/parser.cc:33792 cp/parser.cc:34431 +#: cp/parser.cc:33809 cp/parser.cc:34448 #, gcc-internal-format msgid "expected %<;%>" msgstr "" #: c/c-parser.cc:3569 c/c-parser.cc:4679 c/c-parser.cc:4874 c/c-parser.cc:4932 #: c/c-parser.cc:4990 c/c-parser.cc:5373 c/c-parser.cc:5396 c/c-parser.cc:5405 -#: c/c-parser.cc:5456 c/c-parser.cc:5465 c/c-parser.cc:10147 -#: c/c-parser.cc:10215 c/c-parser.cc:10737 c/c-parser.cc:10763 -#: c/c-parser.cc:10797 c/c-parser.cc:10909 c/c-parser.cc:11728 -#: c/c-parser.cc:13548 c/c-parser.cc:16132 c/c-parser.cc:16867 -#: c/c-parser.cc:16926 c/c-parser.cc:16981 c/c-parser.cc:18840 -#: c/c-parser.cc:18960 c/c-parser.cc:20345 c/c-parser.cc:21752 -#: c/c-parser.cc:22254 c/c-parser.cc:25578 c/c-parser.cc:25660 +#: c/c-parser.cc:5456 c/c-parser.cc:5465 c/c-parser.cc:10145 +#: c/c-parser.cc:10213 c/c-parser.cc:10735 c/c-parser.cc:10761 +#: c/c-parser.cc:10795 c/c-parser.cc:10907 c/c-parser.cc:11726 +#: c/c-parser.cc:13567 c/c-parser.cc:16181 c/c-parser.cc:16916 +#: c/c-parser.cc:16975 c/c-parser.cc:17030 c/c-parser.cc:18889 +#: c/c-parser.cc:19009 c/c-parser.cc:20418 c/c-parser.cc:21825 +#: c/c-parser.cc:22327 c/c-parser.cc:25651 c/c-parser.cc:25733 #: c/gimple-parser.cc:195 c/gimple-parser.cc:198 c/gimple-parser.cc:546 #: c/gimple-parser.cc:580 c/gimple-parser.cc:585 c/gimple-parser.cc:754 #: c/gimple-parser.cc:851 c/gimple-parser.cc:1089 c/gimple-parser.cc:1115 @@ -22627,16 +22740,16 @@ msgstr "" #: c/gimple-parser.cc:1506 c/gimple-parser.cc:1522 c/gimple-parser.cc:1578 #: c/gimple-parser.cc:1605 c/gimple-parser.cc:1635 c/gimple-parser.cc:1661 #: c/gimple-parser.cc:1868 c/gimple-parser.cc:2080 c/gimple-parser.cc:2100 -#: c/gimple-parser.cc:2261 c/gimple-parser.cc:2424 c/c-parser.cc:8662 -#: cp/parser.cc:34479 +#: c/gimple-parser.cc:2261 c/gimple-parser.cc:2424 c/c-parser.cc:8660 +#: cp/parser.cc:34496 #, gcc-internal-format msgid "expected %<)%>" msgstr "" -#: c/c-parser.cc:4768 c/c-parser.cc:5516 c/c-parser.cc:5878 c/c-parser.cc:5896 -#: c/c-parser.cc:5897 c/c-parser.cc:6343 c/c-parser.cc:6387 c/c-parser.cc:8761 -#: c/c-parser.cc:10900 c/c-parser.cc:12160 c/c-parser.cc:12531 -#: c/c-parser.cc:15477 c/gimple-parser.cc:1844 cp/parser.cc:34443 +#: c/c-parser.cc:4768 c/c-parser.cc:5516 c/c-parser.cc:5876 c/c-parser.cc:5894 +#: c/c-parser.cc:5895 c/c-parser.cc:6341 c/c-parser.cc:6385 c/c-parser.cc:8759 +#: c/c-parser.cc:10898 c/c-parser.cc:12179 c/c-parser.cc:12550 +#: c/c-parser.cc:15496 c/gimple-parser.cc:1844 cp/parser.cc:34460 #, gcc-internal-format msgid "expected %<]%>" msgstr "" @@ -22646,113 +22759,113 @@ msgid "expected %<;%>, %<,%> or %<)%>" msgstr "" #. Look for the two `(' tokens. -#: c/c-parser.cc:5425 c/c-parser.cc:5430 c/c-parser.cc:16115 -#: c/c-parser.cc:16956 c/c-parser.cc:24722 c/c-parser.cc:25386 -#: c/c-parser.cc:25603 c/gimple-parser.cc:180 c/gimple-parser.cc:493 +#: c/c-parser.cc:5425 c/c-parser.cc:5430 c/c-parser.cc:16164 +#: c/c-parser.cc:17005 c/c-parser.cc:24795 c/c-parser.cc:25459 +#: c/c-parser.cc:25676 c/gimple-parser.cc:180 c/gimple-parser.cc:493 #: c/gimple-parser.cc:532 c/gimple-parser.cc:564 c/gimple-parser.cc:821 #: c/gimple-parser.cc:1083 c/gimple-parser.cc:1109 c/gimple-parser.cc:1236 #: c/gimple-parser.cc:1371 c/gimple-parser.cc:1496 c/gimple-parser.cc:1601 #: c/gimple-parser.cc:1619 c/gimple-parser.cc:1654 c/gimple-parser.cc:2049 #: c/gimple-parser.cc:2060 c/gimple-parser.cc:2066 c/gimple-parser.cc:2249 -#: c/gimple-parser.cc:2421 c/c-parser.cc:15896 cp/parser.cc:34434 +#: c/gimple-parser.cc:2421 c/c-parser.cc:15945 cp/parser.cc:34451 #, gcc-internal-format msgid "expected %<(%>" msgstr "" -#: c/c-parser.cc:5874 c/c-parser.cc:5876 c/c-parser.cc:15382 cp/parser.cc:34446 -#: cp/parser.cc:38315 go/gofrontend/embed.cc:440 +#: c/c-parser.cc:5872 c/c-parser.cc:5874 c/c-parser.cc:15401 cp/parser.cc:34463 +#: cp/parser.cc:38332 go/gofrontend/embed.cc:440 #, gcc-internal-format msgid "expected %<[%>" msgstr "" -#: c/c-parser.cc:6524 c/c-parser.cc:13777 c/c-parser.cc:21227 -#: c/c-parser.cc:21313 c/c-parser.cc:22074 c/c-parser.cc:23034 -#: c/c-parser.cc:26846 c/gimple-parser.cc:404 c/gimple-parser.cc:2427 -#: c/c-parser.cc:3875 c/c-parser.cc:4103 c/c-parser.cc:13329 cp/parser.cc:21607 -#: cp/parser.cc:34440 go/gofrontend/embed.cc:371 +#: c/c-parser.cc:6522 c/c-parser.cc:13796 c/c-parser.cc:21300 +#: c/c-parser.cc:21386 c/c-parser.cc:22147 c/c-parser.cc:23107 +#: c/c-parser.cc:26919 c/gimple-parser.cc:404 c/gimple-parser.cc:2427 +#: c/c-parser.cc:3875 c/c-parser.cc:4103 c/c-parser.cc:13348 cp/parser.cc:21607 +#: cp/parser.cc:34457 go/gofrontend/embed.cc:371 #, gcc-internal-format msgid "expected %<{%>" msgstr "" -#: c/c-parser.cc:7370 c/c-parser.cc:7379 c/c-parser.cc:9210 c/c-parser.cc:10352 -#: c/c-parser.cc:13541 c/c-parser.cc:13938 c/c-parser.cc:14002 -#: c/c-parser.cc:15459 c/c-parser.cc:16547 c/c-parser.cc:16784 -#: c/c-parser.cc:17337 c/c-parser.cc:17440 c/c-parser.cc:17981 -#: c/c-parser.cc:18417 c/c-parser.cc:18493 c/c-parser.cc:18610 -#: c/c-parser.cc:18682 c/c-parser.cc:24589 c/c-parser.cc:25443 -#: c/c-parser.cc:25502 c/gimple-parser.cc:587 c/gimple-parser.cc:892 -#: c/gimple-parser.cc:2475 c/gimple-parser.cc:2502 c/c-parser.cc:8669 -#: c/c-parser.cc:16040 c/c-parser.cc:17445 cp/parser.cc:34473 -#: cp/parser.cc:36176 cp/parser.cc:39219 cp/parser.cc:40112 +#: c/c-parser.cc:7368 c/c-parser.cc:7377 c/c-parser.cc:9208 c/c-parser.cc:10350 +#: c/c-parser.cc:13560 c/c-parser.cc:13957 c/c-parser.cc:14021 +#: c/c-parser.cc:15478 c/c-parser.cc:16596 c/c-parser.cc:16833 +#: c/c-parser.cc:17386 c/c-parser.cc:17489 c/c-parser.cc:18030 +#: c/c-parser.cc:18466 c/c-parser.cc:18542 c/c-parser.cc:18659 +#: c/c-parser.cc:18731 c/c-parser.cc:24662 c/c-parser.cc:25516 +#: c/c-parser.cc:25575 c/gimple-parser.cc:587 c/gimple-parser.cc:892 +#: c/gimple-parser.cc:2475 c/gimple-parser.cc:2502 c/c-parser.cc:8667 +#: c/c-parser.cc:16089 c/c-parser.cc:17494 cp/parser.cc:34490 +#: cp/parser.cc:36193 cp/parser.cc:39263 cp/parser.cc:40156 #: go/gofrontend/embed.cc:404 #, gcc-internal-format msgid "expected %<:%>" msgstr "" -#: c/c-parser.cc:8201 cp/parser.cc:34360 +#: c/c-parser.cc:8199 cp/parser.cc:34377 #, gcc-internal-format msgid "expected %<while%>" msgstr "" -#: c/c-parser.cc:10110 c/c-parser.cc:10303 c/c-parser.cc:10787 -#: c/c-parser.cc:10830 c/c-parser.cc:10971 c/c-parser.cc:11718 -#: c/c-parser.cc:16961 c/c-parser.cc:18562 c/gimple-parser.cc:1086 +#: c/c-parser.cc:10108 c/c-parser.cc:10301 c/c-parser.cc:10785 +#: c/c-parser.cc:10828 c/c-parser.cc:10969 c/c-parser.cc:11716 +#: c/c-parser.cc:17010 c/c-parser.cc:18611 c/gimple-parser.cc:1086 #: c/gimple-parser.cc:1112 c/gimple-parser.cc:1240 c/gimple-parser.cc:1243 -#: c/gimple-parser.cc:1623 c/gimple-parser.cc:1629 cp/parser.cc:33790 -#: cp/parser.cc:34449 +#: c/gimple-parser.cc:1623 c/gimple-parser.cc:1629 cp/parser.cc:33807 +#: cp/parser.cc:34466 #, gcc-internal-format msgid "expected %<,%>" msgstr "" -#: c/c-parser.cc:10681 +#: c/c-parser.cc:10679 msgid "expected %<.%>" msgstr "" -#: c/c-parser.cc:13000 c/c-parser.cc:13032 c/c-parser.cc:13272 -#: cp/parser.cc:36750 cp/parser.cc:36771 +#: c/c-parser.cc:13019 c/c-parser.cc:13051 c/c-parser.cc:13291 +#: cp/parser.cc:36767 cp/parser.cc:36788 #, gcc-internal-format msgid "expected %<@end%>" msgstr "" -#: c/c-parser.cc:13690 c/gimple-parser.cc:1411 cp/parser.cc:34458 +#: c/c-parser.cc:13709 c/gimple-parser.cc:1411 cp/parser.cc:34475 #, gcc-internal-format msgid "expected %<>%>" msgstr "" -#: c/c-parser.cc:17535 c/c-parser.cc:18978 cp/parser.cc:34482 +#: c/c-parser.cc:17584 c/c-parser.cc:19027 cp/parser.cc:34499 #, gcc-internal-format msgid "expected %<,%> or %<)%>" msgstr "" #. All following cases are statements with LHS. -#: c/c-parser.cc:18409 c/c-parser.cc:21120 c/c-parser.cc:21167 -#: c/c-parser.cc:21324 c/c-parser.cc:21671 c/c-parser.cc:22233 -#: c/c-parser.cc:24770 c/c-parser.cc:25644 c/gimple-parser.cc:745 -#: c/c-parser.cc:6410 c/c-parser.cc:21244 c/c-parser.cc:21467 -#: cp/parser.cc:34461 cp/parser.cc:43102 cp/parser.cc:43275 +#: c/c-parser.cc:18458 c/c-parser.cc:21193 c/c-parser.cc:21240 +#: c/c-parser.cc:21397 c/c-parser.cc:21744 c/c-parser.cc:22306 +#: c/c-parser.cc:24843 c/c-parser.cc:25717 c/gimple-parser.cc:745 +#: c/c-parser.cc:6408 c/c-parser.cc:21317 c/c-parser.cc:21540 +#: cp/parser.cc:34478 cp/parser.cc:43146 cp/parser.cc:43319 #, gcc-internal-format msgid "expected %<=%>" msgstr "" -#: c/c-parser.cc:21255 c/c-parser.cc:21335 c/c-parser.cc:21688 -#: c/c-parser.cc:22143 c/gimple-parser.cc:1677 c/gimple-parser.cc:1709 -#: c/gimple-parser.cc:1719 c/gimple-parser.cc:2512 cp/parser.cc:34437 -#: cp/parser.cc:36960 +#: c/c-parser.cc:21328 c/c-parser.cc:21408 c/c-parser.cc:21761 +#: c/c-parser.cc:22216 c/gimple-parser.cc:1677 c/gimple-parser.cc:1709 +#: c/gimple-parser.cc:1719 c/gimple-parser.cc:2512 cp/parser.cc:34454 +#: cp/parser.cc:36977 #, gcc-internal-format msgid "expected %<}%>" msgstr "" -#: c/c-parser.cc:21348 cp/parser.cc:43200 +#: c/c-parser.cc:21421 cp/parser.cc:43244 #, gcc-internal-format msgid "expected %<else%>" msgstr "" -#: c/c-parser.cc:23081 c/c-parser.cc:23070 cp/parser.cc:45899 +#: c/c-parser.cc:23154 c/c-parser.cc:23143 cp/parser.cc:45943 #, gcc-internal-format msgid "expected %<#pragma omp section%> or %<}%>" msgstr "" -#: c/c-parser.cc:26210 cp/parser.cc:49854 +#: c/c-parser.cc:26283 cp/parser.cc:49920 msgid "<message unknown at compile time>" msgstr "" @@ -22760,7 +22873,7 @@ msgstr "" msgid "(anonymous)" msgstr "" -#: c/gimple-parser.cc:1400 cp/parser.cc:18950 cp/parser.cc:34455 +#: c/gimple-parser.cc:1400 cp/parser.cc:18950 cp/parser.cc:34472 #, gcc-internal-format msgid "expected %<<%>" msgstr "" @@ -22779,17 +22892,17 @@ msgstr "" msgid " after user-defined conversion:" msgstr "" -#: cp/call.cc:8475 cp/pt.cc:2043 cp/pt.cc:26267 +#: cp/call.cc:8475 cp/pt.cc:2043 cp/pt.cc:26288 msgid "candidate is:" msgid_plural "candidates are:" msgstr[0] "" msgstr[1] "" -#: cp/call.cc:13002 cp/call.cc:13428 +#: cp/call.cc:12997 cp/call.cc:13423 msgid "candidate 1:" msgstr "" -#: cp/call.cc:13004 cp/call.cc:13429 +#: cp/call.cc:12999 cp/call.cc:13424 msgid "candidate 2:" msgstr "" @@ -22879,7 +22992,7 @@ msgstr "" msgid "<statement>" msgstr "" -#: cp/error.cc:2289 cp/error.cc:3390 c-family/c-pretty-print.cc:2707 +#: cp/error.cc:2289 cp/error.cc:3391 c-family/c-pretty-print.cc:2708 #, gcc-internal-format msgid "<unknown>" msgstr "" @@ -22894,138 +23007,138 @@ msgstr "" msgid "<ubsan routine call>" msgstr "" -#: cp/error.cc:2909 +#: cp/error.cc:2910 msgid "<unparsed>" msgstr "" -#: cp/error.cc:3062 +#: cp/error.cc:3063 msgid "<lambda>" msgstr "" -#: cp/error.cc:3101 +#: cp/error.cc:3102 msgid "*this" msgstr "" -#: cp/error.cc:3115 +#: cp/error.cc:3116 msgid "<expression error>" msgstr "" -#: cp/error.cc:3130 +#: cp/error.cc:3131 msgid "<unknown operator>" msgstr "" -#: cp/error.cc:3605 +#: cp/error.cc:3606 msgid "At global scope:" msgstr "" -#: cp/error.cc:3664 +#: cp/error.cc:3665 msgid " inlined from %qD at %r%s:%d:%d%R" msgstr "" -#: cp/error.cc:3669 +#: cp/error.cc:3670 msgid " inlined from %qD at %r%s:%d%R" msgstr "" -#: cp/error.cc:3675 +#: cp/error.cc:3676 msgid " inlined from %qD" msgstr "" -#: cp/error.cc:3702 +#: cp/error.cc:3703 msgid "In static member function %qD" msgstr "" -#: cp/error.cc:3704 +#: cp/error.cc:3705 msgid "In copy constructor %qD" msgstr "" -#: cp/error.cc:3706 +#: cp/error.cc:3707 msgid "In constructor %qD" msgstr "" -#: cp/error.cc:3708 +#: cp/error.cc:3709 msgid "In destructor %qD" msgstr "" -#: cp/error.cc:3710 +#: cp/error.cc:3711 msgid "In lambda function" msgstr "" -#: cp/error.cc:3712 +#: cp/error.cc:3713 msgid "In explicit object member function %qD" msgstr "" -#: cp/error.cc:3714 +#: cp/error.cc:3715 msgid "In member function %qD" msgstr "" -#: cp/error.cc:3717 +#: cp/error.cc:3718 msgid "In function %qD" msgstr "" -#: cp/error.cc:3740 +#: cp/error.cc:3741 #, c-format msgid "%s: In substitution of %qS:\n" msgstr "" -#: cp/error.cc:3741 +#: cp/error.cc:3742 msgid "%s: In instantiation of %q#D:\n" msgstr "" -#: cp/error.cc:3766 cp/error.cc:3922 +#: cp/error.cc:3767 cp/error.cc:3923 msgid "%r%s:%d:%d:%R " msgstr "" -#: cp/error.cc:3769 cp/error.cc:3925 +#: cp/error.cc:3770 cp/error.cc:3926 msgid "%r%s:%d:%R " msgstr "" -#: cp/error.cc:3777 +#: cp/error.cc:3778 #, c-format msgid "recursively required by substitution of %qS\n" msgstr "" -#: cp/error.cc:3778 +#: cp/error.cc:3779 #, c-format msgid "required by substitution of %qS\n" msgstr "" -#: cp/error.cc:3783 +#: cp/error.cc:3784 msgid "recursively required from %q#D\n" msgstr "" -#: cp/error.cc:3784 +#: cp/error.cc:3785 msgid "required from %q#D\n" msgstr "" -#: cp/error.cc:3791 +#: cp/error.cc:3792 msgid "recursively required from here\n" msgstr "" -#: cp/error.cc:3792 +#: cp/error.cc:3793 msgid "required from here\n" msgstr "" -#: cp/error.cc:3846 +#: cp/error.cc:3847 msgid "" "%r%s:%d:%d:%R [ skipping %d instantiation contexts, use -ftemplate-" "backtrace-limit=0 to disable ]\n" msgstr "" -#: cp/error.cc:3852 +#: cp/error.cc:3853 msgid "" "%r%s:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-" "limit=0 to disable ]\n" msgstr "" -#: cp/error.cc:3906 +#: cp/error.cc:3907 msgid "%r%s:%d:%d:%R in %<constexpr%> expansion of %qs" msgstr "" -#: cp/error.cc:3910 +#: cp/error.cc:3911 msgid "%r%s:%d:%R in %<constexpr%> expansion of %qs" msgstr "" -#: cp/pt.cc:2041 cp/semantics.cc:6237 +#: cp/pt.cc:2041 cp/semantics.cc:6306 msgid "candidates are:" msgstr "" @@ -23069,52 +23182,52 @@ msgstr "" msgid "source type is not polymorphic" msgstr "" -#: cp/typeck.cc:7441 c/c-typeck.cc:4683 +#: cp/typeck.cc:7442 c/c-typeck.cc:4683 #, gcc-internal-format msgid "wrong type argument to unary minus" msgstr "" -#: cp/typeck.cc:7442 c/c-typeck.cc:4669 +#: cp/typeck.cc:7443 c/c-typeck.cc:4669 #, gcc-internal-format msgid "wrong type argument to unary plus" msgstr "" -#: cp/typeck.cc:7469 c/c-typeck.cc:4728 +#: cp/typeck.cc:7470 c/c-typeck.cc:4728 #, gcc-internal-format msgid "wrong type argument to bit-complement" msgstr "" -#: cp/typeck.cc:7486 c/c-typeck.cc:4736 +#: cp/typeck.cc:7487 c/c-typeck.cc:4736 #, gcc-internal-format msgid "wrong type argument to abs" msgstr "" -#: cp/typeck.cc:7498 c/c-typeck.cc:4758 +#: cp/typeck.cc:7499 c/c-typeck.cc:4758 #, gcc-internal-format msgid "wrong type argument to conjugation" msgstr "" -#: cp/typeck.cc:7522 +#: cp/typeck.cc:7523 msgid "in argument to unary !" msgstr "" -#: cp/typeck.cc:7571 +#: cp/typeck.cc:7572 msgid "no pre-increment operator for type" msgstr "" -#: cp/typeck.cc:7573 +#: cp/typeck.cc:7574 msgid "no post-increment operator for type" msgstr "" -#: cp/typeck.cc:7575 +#: cp/typeck.cc:7576 msgid "no pre-decrement operator for type" msgstr "" -#: cp/typeck.cc:7577 +#: cp/typeck.cc:7578 msgid "no post-decrement operator for type" msgstr "" -#: fortran/arith.cc:1497 +#: fortran/arith.cc:1544 msgid "elemental binary operation" msgstr "" @@ -23132,12 +23245,12 @@ msgstr "" msgid "arguments '%s' and '%s' for intrinsic %s" msgstr "" -#: fortran/check.cc:4429 fortran/intrinsic.cc:4831 +#: fortran/check.cc:4432 fortran/intrinsic.cc:4831 #, c-format msgid "arguments '%s' and '%s' for intrinsic '%s'" msgstr "" -#: fortran/dump-parse-tree.cc:3713 +#: fortran/dump-parse-tree.cc:3731 #, c-format msgid "" "/* Prototypes for external procedures generated from %s\n" @@ -23221,7 +23334,7 @@ msgstr "" msgid "Driving:" msgstr "" -#: fortran/interface.cc:3706 fortran/intrinsic.cc:4509 +#: fortran/interface.cc:3758 fortran/intrinsic.cc:4509 msgid "actual argument to INTENT = OUT/INOUT" msgstr "" @@ -23286,310 +23399,310 @@ msgstr "" msgid "Syntax error in expression at %C" msgstr "" -#: fortran/module.cc:1254 +#: fortran/module.cc:1259 msgid "Unexpected EOF" msgstr "" -#: fortran/module.cc:1379 +#: fortran/module.cc:1384 msgid "Name too long" msgstr "" -#: fortran/module.cc:1433 fortran/module.cc:1491 fortran/module.cc:1546 -#: fortran/module.cc:1604 +#: fortran/module.cc:1438 fortran/module.cc:1496 fortran/module.cc:1551 +#: fortran/module.cc:1609 msgid "Bad name" msgstr "" -#: fortran/module.cc:1628 +#: fortran/module.cc:1633 msgid "Expected name" msgstr "" -#: fortran/module.cc:1631 +#: fortran/module.cc:1636 msgid "Expected left parenthesis" msgstr "" -#: fortran/module.cc:1634 +#: fortran/module.cc:1639 msgid "Expected right parenthesis" msgstr "" -#: fortran/module.cc:1637 +#: fortran/module.cc:1642 msgid "Expected integer" msgstr "" -#: fortran/module.cc:1640 fortran/module.cc:2864 +#: fortran/module.cc:1645 fortran/module.cc:2869 msgid "Expected string" msgstr "" -#: fortran/module.cc:1665 +#: fortran/module.cc:1670 msgid "find_enum(): Enum not found" msgstr "" -#: fortran/module.cc:2238 +#: fortran/module.cc:2243 msgid "Unsupported: multiple OpenACC 'routine' levels of parallelism" msgstr "" -#: fortran/module.cc:2484 +#: fortran/module.cc:2489 msgid "Expected attribute bit name" msgstr "" -#: fortran/module.cc:3493 +#: fortran/module.cc:3498 msgid "Expected integer string" msgstr "" -#: fortran/module.cc:3497 +#: fortran/module.cc:3502 msgid "Error converting integer" msgstr "" -#: fortran/module.cc:3519 +#: fortran/module.cc:3524 msgid "Expected real string" msgstr "" -#: fortran/module.cc:3744 +#: fortran/module.cc:3749 msgid "Expected expression type" msgstr "" -#: fortran/module.cc:3824 +#: fortran/module.cc:3829 msgid "Bad operator" msgstr "" -#: fortran/module.cc:3941 +#: fortran/module.cc:3946 msgid "Bad type in constant expression" msgstr "" -#: fortran/module.cc:7399 +#: fortran/module.cc:7404 msgid "Unexpected end of module" msgstr "" -#: fortran/parse.cc:2138 +#: fortran/parse.cc:2139 msgid "arithmetic IF" msgstr "" -#: fortran/parse.cc:2147 +#: fortran/parse.cc:2148 msgid "attribute declaration" msgstr "" -#: fortran/parse.cc:2183 +#: fortran/parse.cc:2184 msgid "data declaration" msgstr "" -#: fortran/parse.cc:2201 +#: fortran/parse.cc:2202 msgid "derived type declaration" msgstr "" -#: fortran/parse.cc:2328 +#: fortran/parse.cc:2329 msgid "block IF" msgstr "" -#: fortran/parse.cc:2337 +#: fortran/parse.cc:2338 msgid "implied END DO" msgstr "" -#: fortran/parse.cc:2431 fortran/resolve.cc:12499 +#: fortran/parse.cc:2432 fortran/resolve.cc:12746 msgid "assignment" msgstr "" -#: fortran/parse.cc:2434 fortran/resolve.cc:12565 fortran/resolve.cc:12568 +#: fortran/parse.cc:2435 fortran/resolve.cc:12812 fortran/resolve.cc:12815 msgid "pointer assignment" msgstr "" -#: fortran/parse.cc:2458 +#: fortran/parse.cc:2459 msgid "simple IF" msgstr "" -#: fortran/resolve.cc:2432 fortran/resolve.cc:2627 +#: fortran/resolve.cc:2434 fortran/resolve.cc:2629 msgid "elemental procedure" msgstr "" -#: fortran/resolve.cc:2530 +#: fortran/resolve.cc:2532 msgid "allocatable argument" msgstr "" -#: fortran/resolve.cc:2535 +#: fortran/resolve.cc:2537 msgid "asynchronous argument" msgstr "" -#: fortran/resolve.cc:2540 +#: fortran/resolve.cc:2542 msgid "optional argument" msgstr "" -#: fortran/resolve.cc:2545 +#: fortran/resolve.cc:2547 msgid "pointer argument" msgstr "" -#: fortran/resolve.cc:2550 +#: fortran/resolve.cc:2552 msgid "target argument" msgstr "" -#: fortran/resolve.cc:2555 +#: fortran/resolve.cc:2557 msgid "value argument" msgstr "" -#: fortran/resolve.cc:2560 +#: fortran/resolve.cc:2562 msgid "volatile argument" msgstr "" -#: fortran/resolve.cc:2565 +#: fortran/resolve.cc:2567 msgid "assumed-shape argument" msgstr "" -#: fortran/resolve.cc:2570 +#: fortran/resolve.cc:2572 msgid "assumed-rank argument" msgstr "" -#: fortran/resolve.cc:2575 +#: fortran/resolve.cc:2577 msgid "coarray argument" msgstr "" -#: fortran/resolve.cc:2580 +#: fortran/resolve.cc:2582 msgid "parametrized derived type argument" msgstr "" -#: fortran/resolve.cc:2585 +#: fortran/resolve.cc:2587 msgid "polymorphic argument" msgstr "" -#: fortran/resolve.cc:2590 +#: fortran/resolve.cc:2592 msgid "NO_ARG_CHECK attribute" msgstr "" #. As assumed-type is unlimited polymorphic (cf. above). #. See also TS 29113, Note 6.1. -#: fortran/resolve.cc:2597 +#: fortran/resolve.cc:2599 msgid "assumed-type argument" msgstr "" -#: fortran/resolve.cc:2608 +#: fortran/resolve.cc:2610 msgid "array result" msgstr "" -#: fortran/resolve.cc:2613 +#: fortran/resolve.cc:2615 msgid "pointer or allocatable result" msgstr "" -#: fortran/resolve.cc:2620 +#: fortran/resolve.cc:2622 msgid "result with non-constant character length" msgstr "" -#: fortran/resolve.cc:2632 +#: fortran/resolve.cc:2634 msgid "bind(c) procedure" msgstr "" -#: fortran/resolve.cc:4204 +#: fortran/resolve.cc:4206 #, c-format msgid "Invalid context for NULL() pointer at %%L" msgstr "" -#: fortran/resolve.cc:4221 +#: fortran/resolve.cc:4223 #, c-format msgid "Operand of unary numeric operator %%<%s%%> at %%L is %s" msgstr "" -#: fortran/resolve.cc:4239 fortran/resolve.cc:4422 fortran/resolve.cc:4577 +#: fortran/resolve.cc:4241 fortran/resolve.cc:4424 fortran/resolve.cc:4579 #, c-format msgid "Inconsistent ranks for operator at %%L and %%L" msgstr "" -#: fortran/resolve.cc:4249 +#: fortran/resolve.cc:4251 #, c-format msgid "" "Unexpected derived-type entities in binary intrinsic numeric operator " "%%<%s%%> at %%L" msgstr "" -#: fortran/resolve.cc:4254 +#: fortran/resolve.cc:4256 #, c-format msgid "Operands of binary numeric operator %%<%s%%> at %%L are %s/%s" msgstr "" -#: fortran/resolve.cc:4269 +#: fortran/resolve.cc:4271 #, c-format msgid "Operands of string concatenation operator at %%L are %s/%s" msgstr "" -#: fortran/resolve.cc:4312 +#: fortran/resolve.cc:4314 #, c-format msgid "Operands of logical operator %%<%s%%> at %%L are %s/%s" msgstr "" -#: fortran/resolve.cc:4335 +#: fortran/resolve.cc:4337 #, c-format msgid "Operand of .not. operator at %%L is %s" msgstr "" -#: fortran/resolve.cc:4349 +#: fortran/resolve.cc:4351 msgid "COMPLEX quantities cannot be compared at %L" msgstr "" -#: fortran/resolve.cc:4458 +#: fortran/resolve.cc:4460 #, c-format msgid "Logicals at %%L must be compared with %s instead of %s" msgstr "" -#: fortran/resolve.cc:4464 +#: fortran/resolve.cc:4466 #, c-format msgid "Operands of comparison operator %%<%s%%> at %%L are %s/%s" msgstr "" -#: fortran/resolve.cc:4478 +#: fortran/resolve.cc:4480 #, c-format msgid "Unknown operator %%<%s%%> at %%L; did you mean %%<%s%%>?" msgstr "" -#: fortran/resolve.cc:4481 +#: fortran/resolve.cc:4483 #, c-format msgid "Unknown operator %%<%s%%> at %%L" msgstr "" -#: fortran/resolve.cc:4486 +#: fortran/resolve.cc:4488 #, c-format msgid "Operand of user operator %%<%s%%> at %%L is %s" msgstr "" -#: fortran/resolve.cc:4491 +#: fortran/resolve.cc:4493 #, c-format msgid "Operands of user operator %%<%s%%> at %%L are %s/%s" msgstr "" -#: fortran/resolve.cc:7476 +#: fortran/resolve.cc:7650 msgid "Loop variable" msgstr "" -#: fortran/resolve.cc:7480 +#: fortran/resolve.cc:7654 msgid "iterator variable" msgstr "" -#: fortran/resolve.cc:7484 +#: fortran/resolve.cc:7658 msgid "Start expression in DO loop" msgstr "" -#: fortran/resolve.cc:7488 +#: fortran/resolve.cc:7662 msgid "End expression in DO loop" msgstr "" -#: fortran/resolve.cc:7492 +#: fortran/resolve.cc:7666 msgid "Step expression in DO loop" msgstr "" -#: fortran/resolve.cc:7779 fortran/resolve.cc:7782 +#: fortran/resolve.cc:7953 fortran/resolve.cc:7956 msgid "DEALLOCATE object" msgstr "" -#: fortran/resolve.cc:8160 fortran/resolve.cc:8163 +#: fortran/resolve.cc:8334 fortran/resolve.cc:8337 msgid "ALLOCATE object" msgstr "" -#: fortran/resolve.cc:8400 fortran/resolve.cc:10404 fortran/resolve.cc:10525 +#: fortran/resolve.cc:8574 fortran/resolve.cc:10651 fortran/resolve.cc:10772 msgid "STAT variable" msgstr "" -#: fortran/resolve.cc:8451 fortran/resolve.cc:10416 fortran/resolve.cc:10537 +#: fortran/resolve.cc:8625 fortran/resolve.cc:10663 fortran/resolve.cc:10784 msgid "ERRMSG variable" msgstr "" -#: fortran/resolve.cc:10206 +#: fortran/resolve.cc:10453 msgid "item in READ" msgstr "" -#: fortran/resolve.cc:10428 +#: fortran/resolve.cc:10675 msgid "ACQUIRED_LOCK variable" msgstr "" @@ -23598,11 +23711,11 @@ msgstr "" msgid "Different CHARACTER lengths (%ld/%ld) in array constructor" msgstr "" -#: fortran/trans-array.cc:6363 +#: fortran/trans-array.cc:6401 msgid "Integer overflow when calculating the amount of memory to allocate" msgstr "" -#: fortran/trans-array.cc:10452 +#: fortran/trans-array.cc:10501 #, c-format msgid "" "The value of the PDT LEN parameter '%s' does not agree with that in the " @@ -23623,12 +23736,12 @@ msgid "" "'%s' (%ld/%ld)" msgstr "" -#: fortran/trans-expr.cc:10713 +#: fortran/trans-expr.cc:10740 #, c-format msgid "Target of rank remapping is too small (%ld < %ld)" msgstr "" -#: fortran/trans-expr.cc:12310 +#: fortran/trans-expr.cc:12337 msgid "Assignment of scalar to unallocated array" msgstr "" @@ -23733,15 +23846,15 @@ msgstr "" msgid "Invalid image number %d in SYNC IMAGES" msgstr "" -#: fortran/trans-stmt.cc:2503 +#: fortran/trans-stmt.cc:2517 msgid "Loop iterates infinitely" msgstr "" -#: fortran/trans-stmt.cc:2523 fortran/trans-stmt.cc:2779 +#: fortran/trans-stmt.cc:2537 fortran/trans-stmt.cc:2793 msgid "Loop variable has been modified" msgstr "" -#: fortran/trans-stmt.cc:2632 +#: fortran/trans-stmt.cc:2646 msgid "DO step value is zero" msgstr "" @@ -23789,7 +23902,7 @@ msgstr "" msgid "short read while reading export data" msgstr "" -#: go/gofrontend/expressions.cc:183 c-family/c-warn.cc:684 cp/cvt.cc:1405 +#: go/gofrontend/expressions.cc:183 c-family/c-warn.cc:684 cp/cvt.cc:1419 #: d/toir.cc:225 rust/backend/rust-tree.cc:512 #, gcc-internal-format msgid "value computed is not used" @@ -23816,8 +23929,8 @@ msgstr "" msgid "expected boolean type" msgstr "" -#: go/gofrontend/expressions.cc:5610 c/c-parser.cc:18321 c/c-parser.cc:18328 -#: cp/parser.cc:40872 cp/parser.cc:40879 +#: go/gofrontend/expressions.cc:5610 c/c-parser.cc:18370 c/c-parser.cc:18377 +#: cp/parser.cc:40916 cp/parser.cc:40923 #, gcc-internal-format msgid "expected integer" msgstr "" @@ -23880,7 +23993,7 @@ msgstr "" #: go/gofrontend/expressions.cc:11743 go/gofrontend/expressions.cc:11838 #: go/gofrontend/expressions.cc:14014 go/gofrontend/expressions.cc:14143 #: go/gofrontend/expressions.cc:14157 go/gofrontend/expressions.cc:14178 -#: cp/pt.cc:9348 +#: cp/pt.cc:9349 #, gcc-internal-format msgid "too many arguments" msgstr "" @@ -24439,7 +24552,7 @@ msgid "" msgstr "" #: config/rs6000/aix71.h:48 config/rs6000/aix72.h:48 config/rs6000/aix73.h:48 -#: config/rs6000/rtems.h:124 config/rs6000/rs6000.cc:3477 +#: config/rs6000/rtems.h:128 config/rs6000/rs6000.cc:3479 #, gcc-internal-format msgid "%<-mcmodel%> incompatible with other toc options" msgstr "" @@ -24449,7 +24562,7 @@ msgstr "" msgid "%<soft-float%> and long-double-128 are incompatible" msgstr "" -#: config/rs6000/rtems.h:117 config/rs6000/rs6000.cc:3469 +#: config/rs6000/rtems.h:121 config/rs6000/rs6000.cc:3471 #, gcc-internal-format msgid "%<-m64%> requires a PowerPC64 cpu" msgstr "" @@ -24508,7 +24621,7 @@ msgid "%<-mrelax%> is only supported for RTP PIC" msgstr "" #. A general purpose syntax error. -#: fortran/gfortran.h:3403 fortran/io.cc:3727 fortran/io.cc:4413 +#: fortran/gfortran.h:3412 fortran/io.cc:3727 fortran/io.cc:4413 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in %s statement at %C" msgstr "" @@ -24586,15 +24699,15 @@ msgstr "" #: c-family/c.opt:70 c-family/c.opt:73 c-family/c.opt:76 c-family/c.opt:79 #: c-family/c.opt:175 c-family/c.opt:178 c-family/c.opt:220 c-family/c.opt:224 -#: c-family/c.opt:236 c-family/c.opt:2365 c-family/c.opt:2373 -#: config/darwin.opt:30 common.opt:329 common.opt:332 common.opt:3671 +#: c-family/c.opt:236 c-family/c.opt:2369 c-family/c.opt:2377 +#: config/darwin.opt:30 common.opt:329 common.opt:332 common.opt:3680 #, gcc-internal-format msgid "missing filename after %qs" msgstr "" #: c-family/c.opt:85 c-family/c.opt:88 c-family/c.opt:91 c-family/c.opt:94 -#: c-family/c.opt:200 c-family/c.opt:212 c-family/c.opt:268 c-family/c.opt:2361 -#: c-family/c.opt:2381 c-family/c.opt:2385 c-family/c.opt:2389 +#: c-family/c.opt:200 c-family/c.opt:212 c-family/c.opt:268 c-family/c.opt:2365 +#: c-family/c.opt:2385 c-family/c.opt:2389 c-family/c.opt:2393 #, gcc-internal-format msgid "missing path after %qs" msgstr "" @@ -24624,49 +24737,49 @@ msgstr "" msgid "argument %qs to %<-Wbidi-chars%> not recognized" msgstr "" -#: c-family/c.opt:1064 +#: c-family/c.opt:1068 #, gcc-internal-format msgid "argument %qs to %<-Wnormalized%> not recognized" msgstr "" -#: c-family/c.opt:1728 +#: c-family/c.opt:1732 #, gcc-internal-format msgid "no class name specified with %qs" msgstr "" -#: c-family/c.opt:1756 +#: c-family/c.opt:1760 #, gcc-internal-format msgid "argument %qs must be either %<on%> or %<off%>" msgstr "" -#: c-family/c.opt:1900 +#: c-family/c.opt:1904 #, gcc-internal-format msgid "" "%<-fhandle-exceptions%> has been renamed %<-fexceptions%> (and is now on by " "default)" msgstr "" -#: c-family/c.opt:1975 +#: c-family/c.opt:1979 #, gcc-internal-format msgid "missing mapper" msgstr "" -#: c-family/c.opt:2003 +#: c-family/c.opt:2007 #, gcc-internal-format msgid "missing header name" msgstr "" -#: c-family/c.opt:2011 +#: c-family/c.opt:2015 #, gcc-internal-format msgid "missing module name" msgstr "" -#: c-family/c.opt:2058 +#: c-family/c.opt:2062 #, gcc-internal-format msgid "unrecognized ivar visibility value %qs" msgstr "" -#: c-family/c.opt:2225 +#: c-family/c.opt:2229 #, gcc-internal-format msgid "unrecognized scalar storage order value %qs" msgstr "" @@ -24708,37 +24821,37 @@ msgid "" "masm=intel%> and %<-masm=att%> instead" msgstr "" -#: config/i386/i386.opt:725 +#: config/i386/i386.opt:729 #, gcc-internal-format msgid "%<-msse5%> was removed" msgstr "" -#: config/i386/i386.opt:741 +#: config/i386/i386.opt:745 #, gcc-internal-format msgid "AVX512PF support will be removed in GCC 15" msgstr "" -#: config/i386/i386.opt:745 +#: config/i386/i386.opt:749 #, gcc-internal-format msgid "AVX512ER support will be removed in GCC 15" msgstr "" -#: config/i386/i386.opt:773 +#: config/i386/i386.opt:777 #, gcc-internal-format msgid "AVX5124FMAPS support will be removed in GCC 15" msgstr "" -#: config/i386/i386.opt:777 +#: config/i386/i386.opt:781 #, gcc-internal-format msgid "AVX5124VNNIW support will be removed in GCC 15" msgstr "" -#: config/i386/i386.opt:972 +#: config/i386/i386.opt:976 #, gcc-internal-format msgid "PREFETCHWT1 support will be removed in GCC 15" msgstr "" -#: config/i386/i386.opt:1286 +#: config/i386/i386.opt:1290 #, gcc-internal-format msgid "unknown lam type %qs" msgstr "" @@ -24796,118 +24909,118 @@ msgstr "" msgid "unknown linker output %qs" msgstr "" -#: common.opt:1635 +#: common.opt:1640 #, gcc-internal-format msgid "unknown excess precision style %qs" msgstr "" -#: common.opt:1653 +#: common.opt:1658 #, gcc-internal-format msgid "" "unknown specification for the set of FLT_EVAL_METHOD values to permit %qs" msgstr "" -#: common.opt:1697 +#: common.opt:1702 #, gcc-internal-format msgid "unknown floating point contraction style %qs" msgstr "" -#: common.opt:1865 +#: common.opt:1870 #, gcc-internal-format msgid "unknown hardcfr noreturn checking level %qs" msgstr "" -#: common.opt:1900 +#: common.opt:1905 #, gcc-internal-format msgid "unknown Stack Reuse Level %qs" msgstr "" -#: common.opt:1972 +#: common.opt:1977 #, gcc-internal-format msgid "unavailable stringop for inlining %qs" msgstr "" -#: common.opt:2003 +#: common.opt:2008 #, gcc-internal-format msgid "unknown Control-Flow Protection Level %qs" msgstr "" -#: common.opt:2113 +#: common.opt:2118 #, gcc-internal-format msgid "unknown IRA algorithm %qs" msgstr "" -#: common.opt:2126 +#: common.opt:2131 #, gcc-internal-format msgid "unknown IRA region %qs" msgstr "" -#: common.opt:2204 +#: common.opt:2209 #, gcc-internal-format msgid "unknown LTO partitioning model %qs" msgstr "" -#: common.opt:2318 +#: common.opt:2323 #, gcc-internal-format msgid "targets missing after %qs" msgstr "" -#: common.opt:2321 +#: common.opt:2326 #, gcc-internal-format msgid "options or targets=options missing after %qs" msgstr "" -#: common.opt:2329 +#: common.opt:2334 #, gcc-internal-format msgid "unknown offload ABI %qs" msgstr "" -#: common.opt:2493 +#: common.opt:2502 #, gcc-internal-format msgid "unknown profile reproducibility method %qs" msgstr "" -#: common.opt:2509 +#: common.opt:2518 #, gcc-internal-format msgid "unknown profile update method %qs" msgstr "" -#: common.opt:2618 +#: common.opt:2627 #, gcc-internal-format msgid "unknown Live-Patching Level %qs" msgstr "" -#: common.opt:2651 +#: common.opt:2660 #, gcc-internal-format msgid "unknown basic block reordering algorithm %qs" msgstr "" -#: common.opt:2987 +#: common.opt:2996 #, gcc-internal-format msgid "unknown TLS model %qs" msgstr "" -#: common.opt:3020 +#: common.opt:3029 #, gcc-internal-format msgid "unknown trampoline implementation %qs" msgstr "" -#: common.opt:3342 +#: common.opt:3351 #, gcc-internal-format msgid "unknown vectorizer cost model %qs" msgstr "" -#: common.opt:3373 +#: common.opt:3382 #, gcc-internal-format msgid "unrecognized automatic variable initialization type %qs" msgstr "" -#: common.opt:3399 +#: common.opt:3408 #, gcc-internal-format msgid "unrecognized visibility value %qs" msgstr "" -#: common.opt:3418 +#: common.opt:3427 #, gcc-internal-format msgid "unknown vtable verify initialization priority %qs" msgstr "" @@ -24946,8 +25059,8 @@ msgstr "" #: attribs.cc:531 c-family/c-attribs.cc:995 c-family/c-attribs.cc:2690 #: c-family/c-attribs.cc:3177 c-family/c-attribs.cc:5054 -#: c-family/c-attribs.cc:5147 cp/decl.cc:16419 cp/decl.cc:16469 -#: cp/friend.cc:318 cp/tree.cc:5245 +#: c-family/c-attribs.cc:5147 cp/decl.cc:16428 cp/decl.cc:16478 +#: cp/friend.cc:318 cp/tree.cc:5259 #, gcc-internal-format msgid "previous declaration here" msgstr "" @@ -24964,7 +25077,7 @@ msgstr "" msgid "%<%E::%E%> scoped attribute directive ignored" msgstr "" -#: attribs.cc:752 c/c-parser.cc:2084 cp/cp-gimplify.cc:3657 +#: attribs.cc:752 c/c-parser.cc:2084 cp/cp-gimplify.cc:3667 #, gcc-internal-format msgid "wrong number of arguments specified for %qE attribute" msgstr "" @@ -24974,7 +25087,7 @@ msgstr "" msgid "expected %i or more, found %i" msgstr "" -#: attribs.cc:758 c/c-parser.cc:2087 cp/cp-gimplify.cc:3659 +#: attribs.cc:758 c/c-parser.cc:2087 cp/cp-gimplify.cc:3669 #, gcc-internal-format, gfc-internal-format msgid "expected %i, found %i" msgstr "" @@ -25040,13 +25153,13 @@ msgstr "" #: c-family/c-attribs.cc:5877 c-family/c-attribs.cc:5919 #: c-family/c-attribs.cc:5935 c-family/c-attribs.cc:6103 #: c-family/c-attribs.cc:6115 c-family/c-common.cc:6137 -#: c-family/c-common.cc:6140 config/darwin.cc:2208 config/arm/arm.cc:7478 -#: config/arm/arm.cc:7505 config/arm/arm.cc:7522 config/avr/avr.cc:10301 -#: config/csky/csky.cc:6497 config/csky/csky.cc:6518 config/h8300/h8300.cc:4972 -#: config/h8300/h8300.cc:4996 config/i386/i386-options.cc:3740 -#: config/i386/i386-options.cc:3898 config/i386/i386-options.cc:4130 -#: config/i386/i386-options.cc:4160 config/ia64/ia64.cc:795 -#: config/loongarch/loongarch.cc:8138 config/rs6000/rs6000.cc:20787 +#: c-family/c-common.cc:6140 config/darwin.cc:2208 config/arm/arm.cc:7519 +#: config/arm/arm.cc:7546 config/arm/arm.cc:7563 config/avr/avr.cc:11217 +#: config/csky/csky.cc:6498 config/csky/csky.cc:6519 config/h8300/h8300.cc:4972 +#: config/h8300/h8300.cc:4996 config/i386/i386-options.cc:3755 +#: config/i386/i386-options.cc:3913 config/i386/i386-options.cc:4145 +#: config/i386/i386-options.cc:4175 config/ia64/ia64.cc:795 +#: config/loongarch/loongarch.cc:7999 config/rs6000/rs6000.cc:20739 #: ada/gcc-interface/utils.cc:6746 ada/gcc-interface/utils.cc:6762 #: ada/gcc-interface/utils.cc:6859 ada/gcc-interface/utils.cc:6876 #: ada/gcc-interface/utils.cc:6893 ada/gcc-interface/utils.cc:6908 @@ -25055,18 +25168,19 @@ msgstr "" #: ada/gcc-interface/utils.cc:7067 ada/gcc-interface/utils.cc:7088 #: ada/gcc-interface/utils.cc:7136 ada/gcc-interface/utils.cc:7152 #: ada/gcc-interface/utils.cc:7186 c/c-decl.cc:4902 c/c-decl.cc:4905 -#: c/c-decl.cc:4920 c/c-parser.cc:5836 cp/tree.cc:5001 d/d-attribs.cc:483 -#: d/d-attribs.cc:702 d/d-attribs.cc:723 d/d-attribs.cc:739 d/d-attribs.cc:756 -#: d/d-attribs.cc:788 d/d-attribs.cc:917 d/d-attribs.cc:976 d/d-attribs.cc:992 -#: d/d-attribs.cc:1008 d/d-attribs.cc:1157 d/d-attribs.cc:1170 -#: d/d-attribs.cc:1387 d/d-attribs.cc:1405 d/d-attribs.cc:1452 -#: d/d-attribs.cc:1490 d/d-attribs.cc:1506 d/d-attribs.cc:1563 -#: d/d-attribs.cc:1591 jit/dummy-frontend.cc:270 jit/dummy-frontend.cc:304 -#: jit/dummy-frontend.cc:599 jit/dummy-frontend.cc:684 -#: jit/dummy-frontend.cc:705 jit/dummy-frontend.cc:724 -#: jit/dummy-frontend.cc:755 jit/dummy-frontend.cc:769 -#: jit/dummy-frontend.cc:812 jit/dummy-frontend.cc:832 -#: jit/dummy-frontend.cc:893 lto/lto-lang.cc:302 rust/rust-attribs.cc:171 +#: c/c-decl.cc:4920 c/c-parser.cc:5835 cp/tree.cc:5013 cp/tree.cc:5424 +#: d/d-attribs.cc:483 d/d-attribs.cc:702 d/d-attribs.cc:723 d/d-attribs.cc:739 +#: d/d-attribs.cc:756 d/d-attribs.cc:788 d/d-attribs.cc:917 d/d-attribs.cc:976 +#: d/d-attribs.cc:992 d/d-attribs.cc:1008 d/d-attribs.cc:1157 +#: d/d-attribs.cc:1170 d/d-attribs.cc:1387 d/d-attribs.cc:1405 +#: d/d-attribs.cc:1452 d/d-attribs.cc:1490 d/d-attribs.cc:1506 +#: d/d-attribs.cc:1563 d/d-attribs.cc:1591 jit/dummy-frontend.cc:270 +#: jit/dummy-frontend.cc:304 jit/dummy-frontend.cc:599 +#: jit/dummy-frontend.cc:684 jit/dummy-frontend.cc:705 +#: jit/dummy-frontend.cc:724 jit/dummy-frontend.cc:755 +#: jit/dummy-frontend.cc:769 jit/dummy-frontend.cc:812 +#: jit/dummy-frontend.cc:832 jit/dummy-frontend.cc:893 lto/lto-lang.cc:302 +#: rust/rust-attribs.cc:171 #, gcc-internal-format msgid "%qE attribute ignored" msgstr "" @@ -25152,37 +25266,37 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: auto-profile.cc:365 +#: auto-profile.cc:367 #, gcc-internal-format msgid "offset exceeds 16 bytes" msgstr "" -#: auto-profile.cc:862 +#: auto-profile.cc:864 #, gcc-internal-format msgid "Not expected TAG." msgstr "" -#: auto-profile.cc:927 +#: auto-profile.cc:929 #, gcc-internal-format, gfc-internal-format msgid "cannot open profile file %s" msgstr "" -#: auto-profile.cc:933 +#: auto-profile.cc:935 #, gcc-internal-format msgid "AutoFDO profile magic number does not match" msgstr "" -#: auto-profile.cc:941 +#: auto-profile.cc:943 #, gcc-internal-format, gfc-internal-format msgid "AutoFDO profile version %u does not match %u" msgstr "" -#: auto-profile.cc:953 +#: auto-profile.cc:955 #, gcc-internal-format, gfc-internal-format msgid "cannot read string table from %s" msgstr "" -#: auto-profile.cc:961 +#: auto-profile.cc:963 #, gcc-internal-format, gfc-internal-format msgid "cannot read function profile from %s" msgstr "" @@ -25192,7 +25306,7 @@ msgstr "" msgid "offset %qwi outside bounds of constant string" msgstr "" -#: builtins.cc:707 cp/name-lookup.cc:6739 +#: builtins.cc:707 cp/name-lookup.cc:6773 #, gcc-internal-format msgid "%qE declared here" msgstr "" @@ -25217,13 +25331,13 @@ msgstr "" msgid "invalid third argument to %<__builtin_prefetch%>; using zero" msgstr "" -#: builtins.cc:4048 gimple-fold.cc:2522 gimple-ssa-warn-access.cc:2566 -#: tree-ssa-strlen.cc:3177 +#: builtins.cc:4048 gimple-fold.cc:2525 gimple-ssa-warn-access.cc:2567 +#: tree-ssa-strlen.cc:3179 #, gcc-internal-format msgid "%qD specified bound %E equals destination size" msgstr "" -#: builtins.cc:5297 gimplify.cc:3894 +#: builtins.cc:5297 gimplify.cc:3921 #, gcc-internal-format msgid "too few arguments to function %<va_start%>" msgstr "" @@ -25297,7 +25411,7 @@ msgstr "" #. All valid uses of __builtin_va_arg_pack () are removed during #. inlining. -#: builtins.cc:8018 expr.cc:12315 +#: builtins.cc:8018 expr.cc:12318 #, gcc-internal-format msgid "invalid use of %<__builtin_va_arg_pack ()%>" msgstr "" @@ -25371,7 +25485,7 @@ msgstr "" msgid "function call has aggregate value" msgstr "" -#: calls.cc:3508 +#: calls.cc:3509 #, gcc-internal-format msgid "passing too large argument on stack" msgstr "" @@ -25386,7 +25500,7 @@ msgstr "" msgid "total size of local objects is too large" msgstr "" -#: cfgexpand.cc:1853 function.cc:1015 varasm.cc:2360 +#: cfgexpand.cc:1853 function.cc:1016 varasm.cc:2360 #, gcc-internal-format msgid "size of variable %q+D is too large" msgstr "" @@ -25837,670 +25951,670 @@ msgstr "" msgid "%d exits recorded for loop %d (having %d exits)" msgstr "" -#: cfgrtl.cc:2426 +#: cfgrtl.cc:2441 #, gcc-internal-format, gfc-internal-format msgid "" "non-cold basic block %d reachable only by paths crossing the cold partition" msgstr "" -#: cfgrtl.cc:2546 +#: cfgrtl.cc:2561 #, gcc-internal-format, gfc-internal-format msgid "multiple hot/cold transitions found (bb %i)" msgstr "" -#: cfgrtl.cc:2554 +#: cfgrtl.cc:2569 #, gcc-internal-format msgid "partition found but function partition flag not set" msgstr "" -#: cfgrtl.cc:2593 +#: cfgrtl.cc:2608 #, gcc-internal-format msgid "verify_flow_info: REG_BR_PROB is set but cfg probability is not" msgstr "" -#: cfgrtl.cc:2602 +#: cfgrtl.cc:2617 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i" msgstr "" -#: cfgrtl.cc:2624 +#: cfgrtl.cc:2639 #, gcc-internal-format msgid "EDGE_CROSSING incorrectly set across same section" msgstr "" -#: cfgrtl.cc:2629 +#: cfgrtl.cc:2644 #, gcc-internal-format, gfc-internal-format msgid "fallthru edge crosses section boundary in bb %i" msgstr "" -#: cfgrtl.cc:2635 +#: cfgrtl.cc:2650 #, gcc-internal-format, gfc-internal-format msgid "EH edge crosses section boundary in bb %i" msgstr "" -#: cfgrtl.cc:2641 +#: cfgrtl.cc:2656 #, gcc-internal-format, gfc-internal-format msgid "No region crossing jump at section boundary in bb %i" msgstr "" -#: cfgrtl.cc:2648 +#: cfgrtl.cc:2663 #, gcc-internal-format msgid "EDGE_CROSSING missing across section boundary" msgstr "" -#: cfgrtl.cc:2678 +#: cfgrtl.cc:2693 #, gcc-internal-format, gfc-internal-format msgid "Region crossing jump across same section in bb %i" msgstr "" -#: cfgrtl.cc:2685 +#: cfgrtl.cc:2700 #, gcc-internal-format, gfc-internal-format msgid "missing REG_EH_REGION note at the end of bb %i" msgstr "" -#: cfgrtl.cc:2690 +#: cfgrtl.cc:2705 #, gcc-internal-format, gfc-internal-format msgid "too many exception handling edges in bb %i" msgstr "" -#: cfgrtl.cc:2698 +#: cfgrtl.cc:2713 #, gcc-internal-format, gfc-internal-format msgid "too many outgoing branch edges from bb %i" msgstr "" -#: cfgrtl.cc:2703 +#: cfgrtl.cc:2718 #, gcc-internal-format, gfc-internal-format msgid "fallthru edge after unconditional jump in bb %i" msgstr "" -#: cfgrtl.cc:2708 +#: cfgrtl.cc:2723 #, gcc-internal-format, gfc-internal-format msgid "wrong number of branch edges after unconditional jump in bb %i" msgstr "" -#: cfgrtl.cc:2715 +#: cfgrtl.cc:2730 #, gcc-internal-format, gfc-internal-format msgid "wrong amount of branch edges after conditional jump in bb %i" msgstr "" -#: cfgrtl.cc:2721 +#: cfgrtl.cc:2736 #, gcc-internal-format, gfc-internal-format msgid "abnormal call edges for non-call insn in bb %i" msgstr "" -#: cfgrtl.cc:2726 +#: cfgrtl.cc:2741 #, gcc-internal-format, gfc-internal-format msgid "sibcall edges for non-call insn in bb %i" msgstr "" -#: cfgrtl.cc:2736 +#: cfgrtl.cc:2751 #, gcc-internal-format, gfc-internal-format msgid "abnormal edges for no purpose in bb %i" msgstr "" -#: cfgrtl.cc:2747 +#: cfgrtl.cc:2762 #, gcc-internal-format, gfc-internal-format msgid "EH incoming edge mixed with non-EH incoming edges in bb %i" msgstr "" -#: cfgrtl.cc:2788 cfgrtl.cc:2798 +#: cfgrtl.cc:2803 cfgrtl.cc:2813 #, gcc-internal-format, gfc-internal-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" msgstr "" -#: cfgrtl.cc:2811 +#: cfgrtl.cc:2826 #, gcc-internal-format, gfc-internal-format msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" msgstr "" -#: cfgrtl.cc:2821 +#: cfgrtl.cc:2836 #, gcc-internal-format, gfc-internal-format msgid "in basic block %d:" msgstr "" -#: cfgrtl.cc:2847 +#: cfgrtl.cc:2862 #, gcc-internal-format, gfc-internal-format msgid "BB_RTL flag not set for block %d" msgstr "" -#: cfgrtl.cc:2854 +#: cfgrtl.cc:2869 #, gcc-internal-format, gfc-internal-format msgid "insn %d basic block pointer is %d, should be %d" msgstr "" -#: cfgrtl.cc:2865 +#: cfgrtl.cc:2880 #, gcc-internal-format, gfc-internal-format msgid "insn %d in header of bb %d has non-NULL basic block" msgstr "" -#: cfgrtl.cc:2873 +#: cfgrtl.cc:2888 #, gcc-internal-format, gfc-internal-format msgid "insn %d in footer of bb %d has non-NULL basic block" msgstr "" -#: cfgrtl.cc:2949 cfgrtl.cc:2997 +#: cfgrtl.cc:2964 cfgrtl.cc:3012 #, gcc-internal-format, gfc-internal-format msgid "insn %d outside of basic blocks has non-NULL bb field" msgstr "" -#: cfgrtl.cc:2957 +#: cfgrtl.cc:2972 #, gcc-internal-format, gfc-internal-format msgid "end insn %d for block %d not found in the insn stream" msgstr "" -#: cfgrtl.cc:2970 +#: cfgrtl.cc:2985 #, gcc-internal-format, gfc-internal-format msgid "insn %d is in multiple basic blocks (%d and %d)" msgstr "" -#: cfgrtl.cc:2982 +#: cfgrtl.cc:2997 #, gcc-internal-format, gfc-internal-format msgid "head insn %d for block %d not found in the insn stream" msgstr "" -#: cfgrtl.cc:3030 +#: cfgrtl.cc:3045 #, gcc-internal-format, gfc-internal-format msgid "missing barrier after block %i" msgstr "" -#: cfgrtl.cc:3046 +#: cfgrtl.cc:3061 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" msgstr "" -#: cfgrtl.cc:3055 +#: cfgrtl.cc:3070 #, gcc-internal-format, gfc-internal-format msgid "verify_flow_info: Incorrect fallthru %i->%i" msgstr "" -#: cfgrtl.cc:3057 +#: cfgrtl.cc:3072 #, gcc-internal-format msgid "wrong insn in the fallthru edge" msgstr "" -#: cfgrtl.cc:3091 +#: cfgrtl.cc:3106 #, gcc-internal-format msgid "basic blocks not laid down consecutively" msgstr "" -#: cfgrtl.cc:3130 +#: cfgrtl.cc:3145 #, gcc-internal-format, gfc-internal-format msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" msgstr "" -#: cgraph.cc:3260 +#: cgraph.cc:3262 #, gcc-internal-format msgid "caller edge count invalid" msgstr "" -#: cgraph.cc:3357 +#: cgraph.cc:3359 #, gcc-internal-format msgid "missing indirect call in speculative call sequence" msgstr "" -#: cgraph.cc:3362 +#: cgraph.cc:3364 #, gcc-internal-format msgid "indirect call in speculative call sequence has no speculative flag" msgstr "" -#: cgraph.cc:3392 +#: cgraph.cc:3394 #, gcc-internal-format msgid "speculative edges are not adjacent" msgstr "" -#: cgraph.cc:3398 +#: cgraph.cc:3400 #, gcc-internal-format, gfc-internal-format msgid "direct call to %s in speculative call sequence has no speculative flag" msgstr "" -#: cgraph.cc:3404 cgraph.cc:3434 +#: cgraph.cc:3406 cgraph.cc:3436 #, gcc-internal-format, gfc-internal-format msgid "" "direct call to %s in speculative call sequence has speculative_id %i out of " "range" msgstr "" -#: cgraph.cc:3411 +#: cgraph.cc:3413 #, gcc-internal-format, gfc-internal-format msgid "" "duplicate direct call to %s in speculative call sequence with speculative_id " "%i" msgstr "" -#: cgraph.cc:3422 +#: cgraph.cc:3424 #, gcc-internal-format msgid "" "call stmt hash does not point to first direct edge of speculative call " "sequence" msgstr "" -#: cgraph.cc:3441 +#: cgraph.cc:3443 #, gcc-internal-format, gfc-internal-format msgid "" "duplicate reference %s in speculative call sequence with speculative_id %i" msgstr "" -#: cgraph.cc:3454 +#: cgraph.cc:3456 #, gcc-internal-format, gfc-internal-format msgid "missing direct call for speculation %i" msgstr "" -#: cgraph.cc:3459 +#: cgraph.cc:3461 #, gcc-internal-format, gfc-internal-format msgid "missing ref for speculation %i" msgstr "" -#: cgraph.cc:3468 +#: cgraph.cc:3470 #, gcc-internal-format, gfc-internal-format msgid "" "number of speculative targets %i mismatched with " "num_speculative_call_targets %i" msgstr "" -#: cgraph.cc:3497 +#: cgraph.cc:3499 #, gcc-internal-format, gfc-internal-format msgid "aux field set for edge %s->%s" msgstr "" -#: cgraph.cc:3504 +#: cgraph.cc:3506 #, gcc-internal-format msgid "cgraph count invalid" msgstr "" -#: cgraph.cc:3509 +#: cgraph.cc:3511 #, gcc-internal-format msgid "inline clone in same comdat group list" msgstr "" -#: cgraph.cc:3514 +#: cgraph.cc:3516 #, gcc-internal-format msgid "inline clone count is not compatible" msgstr "" -#: cgraph.cc:3521 +#: cgraph.cc:3523 #, gcc-internal-format msgid "tp_first_run must be non-negative" msgstr "" -#: cgraph.cc:3526 +#: cgraph.cc:3528 #, gcc-internal-format msgid "local symbols must be defined" msgstr "" -#: cgraph.cc:3531 +#: cgraph.cc:3533 #, gcc-internal-format msgid "externally visible inline clone" msgstr "" -#: cgraph.cc:3536 +#: cgraph.cc:3538 #, gcc-internal-format msgid "inline clone with address taken" msgstr "" -#: cgraph.cc:3541 +#: cgraph.cc:3543 #, gcc-internal-format msgid "inline clone is forced to output" msgstr "" -#: cgraph.cc:3548 +#: cgraph.cc:3550 #, gcc-internal-format msgid "calls_comdat_local is set outside of a comdat group" msgstr "" -#: cgraph.cc:3553 +#: cgraph.cc:3555 #, gcc-internal-format msgid "invalid calls_comdat_local flag" msgstr "" -#: cgraph.cc:3560 +#: cgraph.cc:3562 #, gcc-internal-format msgid "malloc attribute should be used for a function that returns a pointer" msgstr "" -#: cgraph.cc:3572 +#: cgraph.cc:3574 #, gcc-internal-format msgid "semantic interposition mismatch" msgstr "" -#: cgraph.cc:3579 +#: cgraph.cc:3581 #, gcc-internal-format, gfc-internal-format msgid "aux field set for indirect edge from %s" msgstr "" -#: cgraph.cc:3585 cgraph.cc:3645 +#: cgraph.cc:3587 cgraph.cc:3647 #, gcc-internal-format msgid "edge count is not compatible with function count" msgstr "" -#: cgraph.cc:3593 +#: cgraph.cc:3595 #, gcc-internal-format, gfc-internal-format msgid "" "An indirect edge from %s is not marked as indirect or has associated " "indirect_info, the corresponding statement is: " msgstr "" -#: cgraph.cc:3601 cgraph.cc:3673 +#: cgraph.cc:3603 cgraph.cc:3675 #, gcc-internal-format msgid "edge has both call_stmt and lto_stmt_uid set" msgstr "" -#: cgraph.cc:3613 +#: cgraph.cc:3615 #, gcc-internal-format, gfc-internal-format msgid "comdat-local function called by %s outside its comdat" msgstr "" -#: cgraph.cc:3623 +#: cgraph.cc:3625 #, gcc-internal-format msgid "inlined_to pointer is wrong" msgstr "" -#: cgraph.cc:3628 +#: cgraph.cc:3630 #, gcc-internal-format msgid "multiple inline callers" msgstr "" -#: cgraph.cc:3635 +#: cgraph.cc:3637 #, gcc-internal-format msgid "inlined_to pointer set for noninline callers" msgstr "" -#: cgraph.cc:3663 +#: cgraph.cc:3665 #, gcc-internal-format msgid "caller edge count does not match BB count" msgstr "" -#: cgraph.cc:3694 +#: cgraph.cc:3696 #, gcc-internal-format msgid "indirect call count does not match BB count" msgstr "" -#: cgraph.cc:3711 +#: cgraph.cc:3713 #, gcc-internal-format msgid "reference has both stmt and lto_stmt_uid set" msgstr "" -#: cgraph.cc:3722 +#: cgraph.cc:3724 #, gcc-internal-format msgid "inlined_to pointer is set but no predecessors found" msgstr "" -#: cgraph.cc:3727 +#: cgraph.cc:3729 #, gcc-internal-format msgid "inlined_to pointer refers to itself" msgstr "" -#: cgraph.cc:3738 +#: cgraph.cc:3740 #, gcc-internal-format msgid "cgraph_node has wrong clone_of" msgstr "" -#: cgraph.cc:3751 +#: cgraph.cc:3753 #, gcc-internal-format msgid "cgraph_node has wrong clone list" msgstr "" -#: cgraph.cc:3757 +#: cgraph.cc:3759 #, gcc-internal-format msgid "cgraph_node is in clone list but it is not clone" msgstr "" -#: cgraph.cc:3762 +#: cgraph.cc:3764 #, gcc-internal-format msgid "cgraph_node has wrong prev_clone pointer" msgstr "" -#: cgraph.cc:3767 +#: cgraph.cc:3769 #, gcc-internal-format msgid "double linked list of clones corrupted" msgstr "" -#: cgraph.cc:3779 +#: cgraph.cc:3781 #, gcc-internal-format msgid "Alias has call edges" msgstr "" -#: cgraph.cc:3785 +#: cgraph.cc:3787 #, gcc-internal-format msgid "Alias has non-alias reference" msgstr "" -#: cgraph.cc:3790 +#: cgraph.cc:3792 #, gcc-internal-format msgid "Alias has more than one alias reference" msgstr "" -#: cgraph.cc:3797 +#: cgraph.cc:3799 #, gcc-internal-format msgid "Analyzed alias has no reference" msgstr "" -#: cgraph.cc:3806 +#: cgraph.cc:3808 #, gcc-internal-format msgid "No edge out of thunk node" msgstr "" -#: cgraph.cc:3811 +#: cgraph.cc:3813 #, gcc-internal-format msgid "More than one edge out of thunk node" msgstr "" -#: cgraph.cc:3816 +#: cgraph.cc:3818 #, gcc-internal-format msgid "Thunk is not supposed to have body" msgstr "" -#: cgraph.cc:3852 +#: cgraph.cc:3854 #, gcc-internal-format msgid "shared call_stmt:" msgstr "" -#: cgraph.cc:3860 +#: cgraph.cc:3862 #, gcc-internal-format msgid "edge points to wrong declaration:" msgstr "" -#: cgraph.cc:3869 +#: cgraph.cc:3871 #, gcc-internal-format msgid "" "an indirect edge with unknown callee corresponding to a call_stmt with a " "known declaration:" msgstr "" -#: cgraph.cc:3879 +#: cgraph.cc:3881 #, gcc-internal-format msgid "missing callgraph edge for call stmt:" msgstr "" -#: cgraph.cc:3889 +#: cgraph.cc:3891 #, gcc-internal-format msgid "reference to dead statement" msgstr "" -#: cgraph.cc:3902 +#: cgraph.cc:3904 #, gcc-internal-format, gfc-internal-format msgid "edge %s->%s has no corresponding call_stmt" msgstr "" -#: cgraph.cc:3914 +#: cgraph.cc:3916 #, gcc-internal-format, gfc-internal-format msgid "an indirect edge from %s has no corresponding call_stmt" msgstr "" -#: cgraph.cc:3933 cgraph.cc:3946 +#: cgraph.cc:3935 cgraph.cc:3948 #, gcc-internal-format msgid "missing origin for a node in a nested list" msgstr "" -#: cgraph.cc:3938 +#: cgraph.cc:3940 #, gcc-internal-format msgid "origin points to a different parent" msgstr "" -#: cgraph.cc:3954 +#: cgraph.cc:3956 #, gcc-internal-format msgid "verify_cgraph_node failed" msgstr "" -#: cgraph.cc:4076 varpool.cc:304 +#: cgraph.cc:4078 varpool.cc:304 #, gcc-internal-format, gfc-internal-format msgid "%s: section %s.%d is missing" msgstr "" -#: cgraphunit.cc:753 +#: cgraphunit.cc:755 #, gcc-internal-format msgid "duplicate definition of a symbol version" msgstr "" -#: cgraphunit.cc:755 +#: cgraphunit.cc:757 #, gcc-internal-format msgid "same version was previously defined here" msgstr "" -#: cgraphunit.cc:761 +#: cgraphunit.cc:763 #, gcc-internal-format msgid "symbol needs to be defined to have a version" msgstr "" -#: cgraphunit.cc:767 +#: cgraphunit.cc:769 #, gcc-internal-format msgid "common symbol cannot be versioned" msgstr "" -#: cgraphunit.cc:773 +#: cgraphunit.cc:775 #, gcc-internal-format msgid "comdat symbol cannot be versioned" msgstr "" -#: cgraphunit.cc:779 +#: cgraphunit.cc:781 #, gcc-internal-format msgid "%<weakref%> cannot be versioned" msgstr "" -#: cgraphunit.cc:785 +#: cgraphunit.cc:787 #, gcc-internal-format msgid "versioned symbol must be public" msgstr "" -#: cgraphunit.cc:791 +#: cgraphunit.cc:793 #, gcc-internal-format msgid "versioned symbol must have default visibility" msgstr "" -#: cgraphunit.cc:824 +#: cgraphunit.cc:826 #, gcc-internal-format msgid "%<weakref%> attribute should be accompanied with an %<alias%> attribute" msgstr "" -#: cgraphunit.cc:879 +#: cgraphunit.cc:881 #, gcc-internal-format msgid "%<flatten%> attribute is ignored on aliases" msgstr "" -#: cgraphunit.cc:887 cgraphunit.cc:939 +#: cgraphunit.cc:889 cgraphunit.cc:941 #, gcc-internal-format msgid "%<externally_visible%> attribute have effect only on public objects" msgstr "" -#: cgraphunit.cc:898 +#: cgraphunit.cc:900 #, gcc-internal-format msgid "%<weakref%> attribute ignored because function is defined" msgstr "" -#: cgraphunit.cc:913 +#: cgraphunit.cc:915 #, gcc-internal-format msgid "%<alias%> attribute ignored because function is defined" msgstr "" -#: cgraphunit.cc:921 +#: cgraphunit.cc:923 #, gcc-internal-format msgid "" "%<always_inline%> function might not be inlinable unless also declared " "%<inline%>" msgstr "" -#: cgraphunit.cc:947 +#: cgraphunit.cc:949 #, gcc-internal-format msgid "%<weakref%> attribute ignored because variable is initialized" msgstr "" #. include_self= #. TODO: Add OPT_Wundefined-inline. -#: cgraphunit.cc:1096 c/c-decl.cc:13291 +#: cgraphunit.cc:1098 c/c-decl.cc:13291 #, gcc-internal-format msgid "%q+F used but never defined" msgstr "" -#: cgraphunit.cc:1098 c/c-decl.cc:13301 +#: cgraphunit.cc:1100 c/c-decl.cc:13301 #, gcc-internal-format msgid "%q+F declared %<static%> but never defined" msgstr "" -#: cgraphunit.cc:1142 +#: cgraphunit.cc:1144 #, gcc-internal-format msgid "%qD defined but not used" msgstr "" -#: cgraphunit.cc:1477 +#: cgraphunit.cc:1479 #, gcc-internal-format msgid "%<ifunc%> resolver for %qD must return %qT" msgstr "" -#: cgraphunit.cc:1480 cgraphunit.cc:1503 +#: cgraphunit.cc:1482 cgraphunit.cc:1505 #, gcc-internal-format msgid "resolver indirect function declared here" msgstr "" -#: cgraphunit.cc:1500 +#: cgraphunit.cc:1502 #, gcc-internal-format msgid "%<ifunc%> resolver for %qD should return %qT" msgstr "" -#: cgraphunit.cc:1510 +#: cgraphunit.cc:1512 #, gcc-internal-format msgid "%qD alias between functions of incompatible types %qT and %qT" msgstr "" -#: cgraphunit.cc:1513 cgraphunit.cc:1595 +#: cgraphunit.cc:1515 cgraphunit.cc:1597 #, gcc-internal-format msgid "aliased declaration here" msgstr "" -#: cgraphunit.cc:1551 c-family/c-pragma.cc:347 +#: cgraphunit.cc:1553 c-family/c-pragma.cc:347 #, gcc-internal-format msgid "%q+D aliased to undefined symbol %qE" msgstr "" -#: cgraphunit.cc:1567 +#: cgraphunit.cc:1569 #, gcc-internal-format msgid "%q+D aliased to external symbol %qE" msgstr "" -#: cgraphunit.cc:1592 +#: cgraphunit.cc:1594 #, gcc-internal-format msgid "%q+D alias between function and variable is not supported" msgstr "" -#: cgraphunit.cc:1666 +#: cgraphunit.cc:1668 #, gcc-internal-format msgid "failed to reclaim unneeded function" msgstr "" -#: cgraphunit.cc:1694 +#: cgraphunit.cc:1696 #, gcc-internal-format msgid "failed to reclaim unneeded function in same comdat group" msgstr "" -#: cgraphunit.cc:1870 +#: cgraphunit.cc:1872 #, gcc-internal-format msgid "size of return value of %q+D is %u bytes" msgstr "" -#: cgraphunit.cc:1874 +#: cgraphunit.cc:1876 #, gcc-internal-format msgid "size of return value of %q+D is larger than %wu bytes" msgstr "" -#: cgraphunit.cc:2436 +#: cgraphunit.cc:2440 #, gcc-internal-format msgid "nodes with unreleased memory found" msgstr "" @@ -26540,13 +26654,13 @@ msgstr "" msgid "cannot find %qs" msgstr "" -#: collect-utils.cc:225 collect2.cc:2388 collect2.cc:2558 gcc.cc:3419 +#: collect-utils.cc:225 collect2.cc:2389 collect2.cc:2559 gcc.cc:3419 #: gcc.cc:7825 #, gcc-internal-format msgid "%<pex_init%> failed: %m" msgstr "" -#: collect-utils.cc:234 collect2.cc:2397 collect2.cc:2566 gcc.cc:2703 +#: collect-utils.cc:234 collect2.cc:2398 collect2.cc:2567 gcc.cc:2703 #, gcc-internal-format msgid "%s: %m" msgstr "" @@ -26561,7 +26675,7 @@ msgstr "" msgid "ld returned %d exit status" msgstr "" -#: collect2.cc:916 gcc.cc:8345 config/nvptx/mkoffload.cc:644 +#: collect2.cc:916 gcc.cc:8345 config/nvptx/mkoffload.cc:646 #, gcc-internal-format msgid "atexit failed" msgstr "" @@ -26571,90 +26685,90 @@ msgstr "" msgid "no arguments" msgstr "" -#: collect2.cc:1286 opts.cc:1192 +#: collect2.cc:1287 opts.cc:1192 #, gcc-internal-format msgid "LTO support has not been enabled in this configuration" msgstr "" -#: collect2.cc:1327 graph.cc:55 lto-wrapper.cc:1720 lto-wrapper.cc:1776 -#: toplev.cc:1518 objc/objc-act.cc:462 +#: collect2.cc:1328 graph.cc:55 lto-wrapper.cc:1724 lto-wrapper.cc:1780 +#: toplev.cc:1520 objc/objc-act.cc:462 #, gcc-internal-format msgid "cannot open %s: %m" msgstr "" -#: collect2.cc:1447 +#: collect2.cc:1448 #, gcc-internal-format msgid "unknown demangling style %qs" msgstr "" -#: collect2.cc:1549 collect2.cc:1727 collect2.cc:1767 +#: collect2.cc:1550 collect2.cc:1728 collect2.cc:1768 #, gcc-internal-format msgid "fopen %s: %m" msgstr "" -#: collect2.cc:1552 collect2.cc:1732 collect2.cc:1770 +#: collect2.cc:1553 collect2.cc:1733 collect2.cc:1771 #, gcc-internal-format msgid "fclose %s: %m" msgstr "" -#: collect2.cc:2322 lto-wrapper.cc:1215 lto-wrapper.cc:1230 +#: collect2.cc:2323 lto-wrapper.cc:1219 lto-wrapper.cc:1234 #: lto/lto-object.cc:148 lto/lto-object.cc:182 lto/lto-object.cc:279 #: lto/lto-object.cc:336 lto/lto-object.cc:360 #, gcc-internal-format, gfc-internal-format msgid "%s: %s" msgstr "" -#: collect2.cc:2362 +#: collect2.cc:2363 #, gcc-internal-format msgid "cannot find %<nm%>" msgstr "" -#: collect2.cc:2410 +#: collect2.cc:2411 #, gcc-internal-format msgid "cannot open nm output: %m" msgstr "" -#: collect2.cc:2465 +#: collect2.cc:2466 #, gcc-internal-format, gfc-internal-format msgid "init function found in object %s" msgstr "" -#: collect2.cc:2476 +#: collect2.cc:2477 #, gcc-internal-format, gfc-internal-format msgid "fini function found in object %s" msgstr "" -#: collect2.cc:2533 +#: collect2.cc:2534 #, gcc-internal-format msgid "cannot find %<ldd%>" msgstr "" -#: collect2.cc:2579 +#: collect2.cc:2580 #, gcc-internal-format msgid "cannot open ldd output: %m" msgstr "" -#: collect2.cc:2597 +#: collect2.cc:2598 #, gcc-internal-format, gfc-internal-format msgid "dynamic dependency %s not found" msgstr "" -#: collect2.cc:2609 +#: collect2.cc:2610 #, gcc-internal-format msgid "unable to open dynamic dependency %qs" msgstr "" -#: collect2.cc:2761 +#: collect2.cc:2762 #, gcc-internal-format, gfc-internal-format msgid "%s: not a COFF file" msgstr "" -#: collect2.cc:2920 +#: collect2.cc:2921 #, gcc-internal-format, gfc-internal-format msgid "%s: cannot open as COFF file" msgstr "" -#: collect2.cc:2979 +#: collect2.cc:2980 #, gcc-internal-format, gfc-internal-format msgid "library lib%s not found" msgstr "" @@ -26853,7 +26967,7 @@ msgstr "" msgid "closed intervals" msgstr "" -#: diagnostic.cc:2642 +#: diagnostic.cc:2659 #, gcc-internal-format msgid "debug path" msgstr "" @@ -26906,12 +27020,12 @@ msgid "" "cfi_personality%> directive" msgstr "" -#: dwarf2out.cc:11187 +#: dwarf2out.cc:11196 #, gcc-internal-format msgid "%<-gdwarf-6%> is output as version 5 with incompatibilities" msgstr "" -#: dwarf2out.cc:15069 +#: dwarf2out.cc:15078 #, gcc-internal-format, gfc-internal-format msgid "non-delegitimized UNSPEC %s (%d) found in variable location" msgstr "" @@ -26991,7 +27105,7 @@ msgstr "" msgid "%<lp_array%> does not match %<region_tree%>" msgstr "" -#: except.cc:3541 tree.cc:14394 value-prof.cc:529 +#: except.cc:3541 tree.cc:14395 value-prof.cc:529 #, gcc-internal-format msgid "%qs failed" msgstr "" @@ -27023,17 +27137,17 @@ msgid "" "truncated into %wu-bit" msgstr "" -#: expr.cc:12327 +#: expr.cc:12330 #, gcc-internal-format msgid "call to %qs declared with attribute error: %s" msgstr "" -#: expr.cc:12341 +#: expr.cc:12344 #, gcc-internal-format msgid "call to %qs declared with attribute warning: %s" msgstr "" -#: expr.cc:13387 +#: expr.cc:13391 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when simplifying %<X - Y %s 0%> to " @@ -27050,7 +27164,7 @@ msgstr "" msgid "the frame size of %wu bytes is larger than %wu bytes" msgstr "" -#: final.cc:4391 toplev.cc:1398 tree-cfgcleanup.cc:1540 +#: final.cc:4391 toplev.cc:1400 tree-cfgcleanup.cc:1540 #, gcc-internal-format msgid "could not open final insn dump file %qs: %m" msgstr "" @@ -27075,65 +27189,65 @@ msgstr "" msgid "assuming signed overflow does not occur when simplifying range test" msgstr "" -#: fold-const.cc:6741 fold-const.cc:6757 +#: fold-const.cc:6742 fold-const.cc:6758 #, gcc-internal-format, gfc-internal-format msgid "comparison is always %d" msgstr "" -#: fold-const.cc:6905 +#: fold-const.cc:6906 #, gcc-internal-format msgid "%<or%> of unmatched not-equal tests is always 1" msgstr "" -#: fold-const.cc:6910 +#: fold-const.cc:6911 #, gcc-internal-format msgid "%<and%> of mutually exclusive equal-tests is always 0" msgstr "" -#: fold-const.cc:10104 +#: fold-const.cc:10128 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when reducing constant in comparison" msgstr "" -#: fold-const.cc:10511 +#: fold-const.cc:10535 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when combining constants around a " "comparison" msgstr "" -#: fold-const.cc:13892 +#: fold-const.cc:13947 #, gcc-internal-format msgid "fold check: original tree changed by fold" msgstr "" -#: function.cc:254 +#: function.cc:255 #, gcc-internal-format msgid "total size of local objects %wu exceeds maximum %wu" msgstr "" -#: function.cc:258 +#: function.cc:259 #, gcc-internal-format msgid "total size of local objects exceeds maximum %wu" msgstr "" -#: function.cc:1788 gimplify.cc:6920 gimplify.cc:7082 +#: function.cc:1789 gimplify.cc:7017 gimplify.cc:7179 #, gcc-internal-format msgid "impossible constraint in %<asm%>" msgstr "" -#: function.cc:4288 +#: function.cc:4290 #, gcc-internal-format msgid "variable %q+D might be clobbered by %<longjmp%> or %<vfork%>" msgstr "" -#: function.cc:4309 +#: function.cc:4311 #, gcc-internal-format msgid "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>" msgstr "" -#: function.cc:4976 +#: function.cc:4978 #, gcc-internal-format msgid "function returns an aggregate" msgstr "" @@ -27273,7 +27387,7 @@ msgid "" "options were specified on the command line" msgstr "" -#: gcc.cc:5048 toplev.cc:712 +#: gcc.cc:5048 toplev.cc:714 #, gcc-internal-format msgid "input file %qs is the same as output file" msgstr "" @@ -27500,7 +27614,7 @@ msgstr "" msgid "multilib exclusions %qs is invalid" msgstr "" -#: gcc.cc:9856 common/config/riscv/riscv-common.cc:2129 +#: gcc.cc:9856 common/config/riscv/riscv-common.cc:2242 #, gcc-internal-format msgid "multilib select %qs %qs is invalid" msgstr "" @@ -27779,49 +27893,49 @@ msgstr "" msgid "array subscript %wu is above array bounds of %qT" msgstr "" -#: gimple-fold.cc:2078 gimple-fold.cc:3130 gimple-ssa-warn-restrict.cc:2080 +#: gimple-fold.cc:2081 gimple-fold.cc:3133 gimple-ssa-warn-restrict.cc:2080 #, gcc-internal-format msgid "%qD source argument is the same as destination" msgstr "" -#: gimple-fold.cc:2144 +#: gimple-fold.cc:2147 #, gcc-internal-format msgid "" "%qD destination unchanged after copying no bytes from a string of length %E" msgstr "" -#: gimple-fold.cc:2149 +#: gimple-fold.cc:2152 #, gcc-internal-format msgid "%qD destination unchanged after copying no bytes" msgstr "" -#: gimple-fold.cc:2524 gimple-ssa-warn-access.cc:859 +#: gimple-fold.cc:2527 gimple-ssa-warn-access.cc:859 #, gcc-internal-format msgid "%qD specified bound %E exceeds destination size %E" msgstr "" -#: gimple-fold.cc:2543 +#: gimple-fold.cc:2546 #, gcc-internal-format msgid "%qD specified bound %E equals source length" msgstr "" -#: gimple-fold.cc:4547 gimple-fold.cc:4774 +#: gimple-fold.cc:4550 gimple-fold.cc:4777 #, gcc-internal-format msgid "" "flexible array member %qD does not have well defined padding bits for %qs" msgstr "" -#: gimple-fold.cc:4723 cp/constexpr.cc:4890 +#: gimple-fold.cc:4726 cp/constexpr.cc:4888 #, gcc-internal-format msgid "PDP11 bit-field handling unsupported in %qs" msgstr "" -#: gimple-fold.cc:5004 +#: gimple-fold.cc:5007 #, gcc-internal-format, gfc-internal-format msgid "%s not supported for variable length aggregates" msgstr "" -#: gimple-fold.cc:5010 +#: gimple-fold.cc:5013 #, gcc-internal-format, gfc-internal-format msgid "%s not supported on this target" msgstr "" @@ -27867,17 +27981,17 @@ msgstr "" msgid "function returns address of local variable" msgstr "" -#: gimple-ssa-isolate-paths.cc:417 gimple-ssa-warn-access.cc:2054 -#: gimple-ssa-warn-access.cc:3712 tree.cc:12441 tree.cc:12478 tree.cc:12519 -#: tree.cc:12552 c/c-parser.cc:20560 c/c-parser.cc:20701 c/c-typeck.cc:3157 +#: gimple-ssa-isolate-paths.cc:417 gimple-ssa-warn-access.cc:2055 +#: gimple-ssa-warn-access.cc:3713 tree.cc:12442 tree.cc:12479 tree.cc:12520 +#: tree.cc:12553 c/c-parser.cc:20633 c/c-parser.cc:20774 c/c-typeck.cc:3157 #: c/c-typeck.cc:3252 c/c-typeck.cc:5869 c/c-typeck.cc:11491 #: c/c-typeck.cc:11508 c/gimple-parser.cc:2574 c/gimple-parser.cc:2582 -#: cp/call.cc:8180 cp/call.cc:10380 cp/class.cc:9399 cp/constexpr.cc:894 -#: cp/constexpr.cc:1321 cp/constexpr.cc:4311 cp/constexpr.cc:5982 -#: cp/constexpr.cc:6353 cp/cvt.cc:1081 cp/cvt.cc:1119 cp/decl.cc:9108 -#: cp/decl2.cc:5848 cp/decl2.cc:5903 cp/method.cc:1234 cp/parser.cc:22475 -#: cp/pt.cc:9156 cp/semantics.cc:2309 cp/semantics.cc:3713 cp/semantics.cc:4831 -#: cp/typeck.cc:2143 cp/typeck.cc:2363 cp/typeck.cc:4508 cp/typeck.cc:10690 +#: cp/call.cc:8180 cp/call.cc:10375 cp/class.cc:9399 cp/constexpr.cc:892 +#: cp/constexpr.cc:1319 cp/constexpr.cc:4309 cp/constexpr.cc:5980 +#: cp/constexpr.cc:6351 cp/cvt.cc:1095 cp/cvt.cc:1133 cp/decl.cc:9104 +#: cp/decl2.cc:5886 cp/decl2.cc:5941 cp/method.cc:1234 cp/parser.cc:22475 +#: cp/pt.cc:9157 cp/semantics.cc:2374 cp/semantics.cc:3778 cp/semantics.cc:4896 +#: cp/typeck.cc:2143 cp/typeck.cc:2363 cp/typeck.cc:4509 cp/typeck.cc:10693 #: rust/backend/rust-constexpr.cc:4407 rust/backend/rust-tree.cc:621 #: rust/backend/rust-tree.cc:3813 #, gcc-internal-format @@ -28856,287 +28970,287 @@ msgstr "" msgid "expecting between %E and %E bytes in a region of size %E" msgstr "" -#: gimple-ssa-warn-access.cc:2049 +#: gimple-ssa-warn-access.cc:2050 #, gcc-internal-format msgid "%qD called on pointer %qE with nonzero offset%s" msgstr "" -#: gimple-ssa-warn-access.cc:2064 gimple-ssa-warn-access.cc:3789 +#: gimple-ssa-warn-access.cc:2065 gimple-ssa-warn-access.cc:3790 #, gcc-internal-format msgid "returned from %qD" msgstr "" -#: gimple-ssa-warn-access.cc:2067 +#: gimple-ssa-warn-access.cc:2068 #, gcc-internal-format msgid "returned from %qT" msgstr "" -#: gimple-ssa-warn-access.cc:2069 +#: gimple-ssa-warn-access.cc:2070 #, gcc-internal-format msgid "obtained here" msgstr "" -#: gimple-ssa-warn-access.cc:2276 +#: gimple-ssa-warn-access.cc:2277 #, gcc-internal-format msgid "argument %i value %qE is negative" msgstr "" -#: gimple-ssa-warn-access.cc:2293 +#: gimple-ssa-warn-access.cc:2294 #, gcc-internal-format, gfc-internal-format msgid "argument %i value is zero" msgstr "" -#: gimple-ssa-warn-access.cc:2311 +#: gimple-ssa-warn-access.cc:2312 #, gcc-internal-format msgid "argument %i value %qE exceeds maximum object size %E" msgstr "" -#: gimple-ssa-warn-access.cc:2325 +#: gimple-ssa-warn-access.cc:2326 #, gcc-internal-format msgid "argument %i range [%E, %E] is negative" msgstr "" -#: gimple-ssa-warn-access.cc:2332 +#: gimple-ssa-warn-access.cc:2333 #, gcc-internal-format msgid "argument %i range [%E, %E] exceeds maximum object size %E" msgstr "" -#: gimple-ssa-warn-access.cc:2362 +#: gimple-ssa-warn-access.cc:2363 #, gcc-internal-format msgid "product %<%E * %E%> of arguments %i and %i exceeds %<SIZE_MAX%>" msgstr "" -#: gimple-ssa-warn-access.cc:2368 +#: gimple-ssa-warn-access.cc:2369 #, gcc-internal-format msgid "" "product %<%E * %E%> of arguments %i and %i exceeds maximum object size %E" msgstr "" -#: gimple-ssa-warn-access.cc:2379 gimple-ssa-warn-access.cc:2382 +#: gimple-ssa-warn-access.cc:2380 gimple-ssa-warn-access.cc:2383 #, gcc-internal-format msgid "argument %i in the range [%E, %E]" msgstr "" -#: gimple-ssa-warn-access.cc:2393 +#: gimple-ssa-warn-access.cc:2394 #, gcc-internal-format msgid "in a call to built-in allocation function %qD" msgstr "" -#: gimple-ssa-warn-access.cc:2396 +#: gimple-ssa-warn-access.cc:2397 #, gcc-internal-format msgid "in a call to allocation function %qD declared here" msgstr "" -#: gimple-ssa-warn-access.cc:2841 +#: gimple-ssa-warn-access.cc:2842 #, gcc-internal-format msgid "unknown architecture specifier in memory model %wi for %qD" msgstr "" -#: gimple-ssa-warn-access.cc:2933 +#: gimple-ssa-warn-access.cc:2934 #, gcc-internal-format msgid "invalid memory model %qs for %qD" msgstr "" -#: gimple-ssa-warn-access.cc:2937 +#: gimple-ssa-warn-access.cc:2938 #, gcc-internal-format msgid "invalid memory model %wi for %qD" msgstr "" -#: gimple-ssa-warn-access.cc:2952 gimple-ssa-warn-access.cc:3006 +#: gimple-ssa-warn-access.cc:2953 gimple-ssa-warn-access.cc:3007 #, gcc-internal-format, gfc-internal-format msgid "valid models are %s" msgstr "" -#: gimple-ssa-warn-access.cc:2966 +#: gimple-ssa-warn-access.cc:2967 #, gcc-internal-format msgid "invalid failure memory model %qs for %qD" msgstr "" -#: gimple-ssa-warn-access.cc:2971 +#: gimple-ssa-warn-access.cc:2972 #, gcc-internal-format msgid "valid failure models are %qs, %qs, %qs, %qs" msgstr "" -#: gimple-ssa-warn-access.cc:2987 +#: gimple-ssa-warn-access.cc:2988 #, gcc-internal-format msgid "" "failure memory model %qs cannot be stronger than success memory model %qs " "for %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3013 +#: gimple-ssa-warn-access.cc:3014 #, gcc-internal-format msgid "" "failure memory model %wi cannot be stronger than success memory model %wi " "for %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3457 +#: gimple-ssa-warn-access.cc:3458 #, gcc-internal-format, gfc-internal-format msgid "" "bound argument %i value %s is negative for a variable length array argument " "%i of type %s" msgstr "" -#: gimple-ssa-warn-access.cc:3465 +#: gimple-ssa-warn-access.cc:3466 #, gcc-internal-format, gfc-internal-format msgid "argument %i value %s is negative" msgstr "" -#: gimple-ssa-warn-access.cc:3511 +#: gimple-ssa-warn-access.cc:3512 #, gcc-internal-format, gfc-internal-format msgid "argument %i is null but the corresponding size argument %i value is %s" msgstr "" -#: gimple-ssa-warn-access.cc:3575 +#: gimple-ssa-warn-access.cc:3576 #, gcc-internal-format msgid "referencing argument %u of type %qT" msgstr "" -#: gimple-ssa-warn-access.cc:3589 +#: gimple-ssa-warn-access.cc:3590 #, gcc-internal-format msgid "in a call to function %qD declared with attribute %qs" msgstr "" -#: gimple-ssa-warn-access.cc:3593 +#: gimple-ssa-warn-access.cc:3594 #, gcc-internal-format msgid "in a call with type %qT and attribute %qs" msgstr "" -#: gimple-ssa-warn-access.cc:3600 +#: gimple-ssa-warn-access.cc:3601 #, gcc-internal-format msgid "in a call to function %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3603 +#: gimple-ssa-warn-access.cc:3604 #, gcc-internal-format msgid "in a call with type %qT" msgstr "" -#: gimple-ssa-warn-access.cc:3709 +#: gimple-ssa-warn-access.cc:3710 #, gcc-internal-format msgid "%qD called on unallocated object %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3728 +#: gimple-ssa-warn-access.cc:3729 #, gcc-internal-format msgid "%qD called on a pointer to an unallocated object %qE" msgstr "" -#: gimple-ssa-warn-access.cc:3737 +#: gimple-ssa-warn-access.cc:3738 #, gcc-internal-format msgid "assigned here" msgstr "" -#: gimple-ssa-warn-access.cc:3770 +#: gimple-ssa-warn-access.cc:3771 #, gcc-internal-format msgid "%qD called on pointer returned from a mismatched allocation function" msgstr "" -#: gimple-ssa-warn-access.cc:3779 +#: gimple-ssa-warn-access.cc:3780 #, gcc-internal-format msgid "%qD called on pointer to an unallocated object" msgstr "" -#: gimple-ssa-warn-access.cc:3927 +#: gimple-ssa-warn-access.cc:3928 #, gcc-internal-format msgid "pointer %qE may be used after %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3928 +#: gimple-ssa-warn-access.cc:3929 #, gcc-internal-format msgid "pointer %qE used after %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3932 +#: gimple-ssa-warn-access.cc:3933 #, gcc-internal-format msgid "pointer may be used after %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3933 +#: gimple-ssa-warn-access.cc:3934 #, gcc-internal-format msgid "pointer used after %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3937 +#: gimple-ssa-warn-access.cc:3938 #, gcc-internal-format msgid "call to %qD here" msgstr "" -#: gimple-ssa-warn-access.cc:3954 +#: gimple-ssa-warn-access.cc:3955 #, gcc-internal-format msgid "dangling pointer %qE to %qD may be used" msgstr "" -#: gimple-ssa-warn-access.cc:3955 +#: gimple-ssa-warn-access.cc:3956 #, gcc-internal-format msgid "using dangling pointer %qE to %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3960 +#: gimple-ssa-warn-access.cc:3961 #, gcc-internal-format msgid "dangling pointer to %qD may be used" msgstr "" -#: gimple-ssa-warn-access.cc:3961 +#: gimple-ssa-warn-access.cc:3962 #, gcc-internal-format msgid "using a dangling pointer to %qD" msgstr "" -#: gimple-ssa-warn-access.cc:3964 gimple-ssa-warn-access.cc:4612 -#: gimple-ssa-warn-access.cc:4615 gimple-ssa-warn-restrict.cc:1830 +#: gimple-ssa-warn-access.cc:3965 gimple-ssa-warn-access.cc:4613 +#: gimple-ssa-warn-access.cc:4616 gimple-ssa-warn-restrict.cc:1830 #: tree-ssa-uninit.cc:921 tree-ssa-uninit.cc:1120 c/c-decl.cc:4099 #: c/c-decl.cc:4389 c/c-typeck.cc:9539 c/c-typeck.cc:12293 cp/call.cc:8555 -#: cp/call.cc:8566 cp/class.cc:1718 cp/class.cc:3517 cp/constexpr.cc:1067 -#: cp/decl.cc:4631 cp/decl.cc:12889 cp/decl.cc:13477 cp/decl.cc:13486 -#: cp/decl.cc:14481 cp/friend.cc:406 cp/friend.cc:416 cp/init.cc:2905 +#: cp/call.cc:8566 cp/class.cc:1718 cp/class.cc:3517 cp/constexpr.cc:1065 +#: cp/decl.cc:4631 cp/decl.cc:12893 cp/decl.cc:13481 cp/decl.cc:13490 +#: cp/decl.cc:14485 cp/friend.cc:406 cp/friend.cc:416 cp/init.cc:2935 #: cp/parser.cc:3692 cp/parser.cc:3838 cp/parser.cc:3889 cp/parser.cc:7166 -#: cp/parser.cc:25045 cp/typeck.cc:5001 +#: cp/parser.cc:25045 cp/typeck.cc:5002 #, gcc-internal-format msgid "%qD declared here" msgstr "" -#: gimple-ssa-warn-access.cc:3972 +#: gimple-ssa-warn-access.cc:3973 #, gcc-internal-format msgid "dangling pointer %qE to an unnamed temporary may be used" msgstr "" -#: gimple-ssa-warn-access.cc:3974 +#: gimple-ssa-warn-access.cc:3975 #, gcc-internal-format msgid "using dangling pointer %qE to an unnamed temporary" msgstr "" -#: gimple-ssa-warn-access.cc:3980 +#: gimple-ssa-warn-access.cc:3981 #, gcc-internal-format msgid "dangling pointer to an unnamed temporary may be used" msgstr "" -#: gimple-ssa-warn-access.cc:3982 +#: gimple-ssa-warn-access.cc:3983 #, gcc-internal-format msgid "using a dangling pointer to an unnamed temporary" msgstr "" -#: gimple-ssa-warn-access.cc:3986 +#: gimple-ssa-warn-access.cc:3987 #, gcc-internal-format msgid "unnamed temporary defined here" msgstr "" -#: gimple-ssa-warn-access.cc:4076 +#: gimple-ssa-warn-access.cc:4077 #, gcc-internal-format msgid "%qD called on pointer %qE passed to mismatched allocation function %qD" msgstr "" -#: gimple-ssa-warn-access.cc:4081 +#: gimple-ssa-warn-access.cc:4082 #, gcc-internal-format msgid "%qD called on a pointer passed to mismatched reallocation function %qD" msgstr "" -#: gimple-ssa-warn-access.cc:4087 +#: gimple-ssa-warn-access.cc:4088 #, gcc-internal-format msgid "call to %qD" msgstr "" -#: gimple-ssa-warn-access.cc:4606 +#: gimple-ssa-warn-access.cc:4607 #, gcc-internal-format msgid "storing the address of local variable %qD in %qE" msgstr "" @@ -29379,7 +29493,7 @@ msgid "" "type %qT" msgstr "" -#: gimple-ssa-warn-restrict.cc:1785 c-family/c-warn.cc:3805 +#: gimple-ssa-warn-restrict.cc:1785 c-family/c-warn.cc:3804 #, gcc-internal-format msgid "array %qD declared here" msgstr "" @@ -29468,444 +29582,444 @@ msgstr "" msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" msgstr "" -#: gimplify.cc:1399 +#: gimplify.cc:1426 #, gcc-internal-format msgid "" "%<allocate%> directive for %qD inside a target region must specify an " "%<allocator%> clause" msgstr "" -#: gimplify.cc:2271 +#: gimplify.cc:2298 #, gcc-internal-format msgid "statement will never be executed" msgstr "" -#: gimplify.cc:2335 +#: gimplify.cc:2362 #, gcc-internal-format msgid "%qs cannot be initialized with%<-ftrivial-auto-var_init%>" msgstr "" -#: gimplify.cc:2727 gimplify.cc:2735 +#: gimplify.cc:2754 gimplify.cc:2762 #, gcc-internal-format msgid "this statement may fall through" msgstr "" -#: gimplify.cc:2737 +#: gimplify.cc:2764 #, gcc-internal-format msgid "here" msgstr "" #. We've found [[fallthrough]]; at the end of a switch, which the C++ #. standard says is ill-formed; see [dcl.attr.fallthrough]. -#: gimplify.cc:2808 gimplify.cc:2865 gimplify.cc:2891 +#: gimplify.cc:2835 gimplify.cc:2892 gimplify.cc:2918 #, gcc-internal-format msgid "attribute %<fallthrough%> not preceding a case label or default label" msgstr "" -#: gimplify.cc:4064 +#: gimplify.cc:4091 #, gcc-internal-format msgid "using result of function returning %<void%>" msgstr "" -#: gimplify.cc:6921 +#: gimplify.cc:7018 #, gcc-internal-format, gfc-internal-format msgid "non-memory output %d must stay in memory" msgstr "" -#: gimplify.cc:6936 +#: gimplify.cc:7033 #, gcc-internal-format msgid "invalid lvalue in %<asm%> output %d" msgstr "" -#: gimplify.cc:7083 +#: gimplify.cc:7180 #, gcc-internal-format, gfc-internal-format msgid "non-memory input %d must stay in memory" msgstr "" -#: gimplify.cc:7123 gimplify.cc:7133 +#: gimplify.cc:7220 gimplify.cc:7230 #, gcc-internal-format, gfc-internal-format msgid "memory input %d is not directly addressable" msgstr "" -#: gimplify.cc:7756 +#: gimplify.cc:7853 #, gcc-internal-format msgid "" "threadprivate variable %qE used in a region with %<order(concurrent)%> clause" msgstr "" -#: gimplify.cc:7758 +#: gimplify.cc:7855 #, gcc-internal-format msgid "enclosing region" msgstr "" -#: gimplify.cc:7762 +#: gimplify.cc:7859 #, gcc-internal-format msgid "threadprivate variable %qE used in target region" msgstr "" -#: gimplify.cc:7764 +#: gimplify.cc:7861 #, gcc-internal-format msgid "enclosing target region" msgstr "" -#: gimplify.cc:7777 +#: gimplify.cc:7874 #, gcc-internal-format msgid "threadprivate variable %qE used in untied task" msgstr "" -#: gimplify.cc:7779 +#: gimplify.cc:7876 #, gcc-internal-format msgid "enclosing task" msgstr "" -#: gimplify.cc:7876 +#: gimplify.cc:7973 #, gcc-internal-format msgid "%qE not specified in enclosing %qs" msgstr "" -#: gimplify.cc:7878 +#: gimplify.cc:7975 #, gcc-internal-format msgid "enclosing %qs" msgstr "" -#: gimplify.cc:8052 +#: gimplify.cc:8149 #, gcc-internal-format msgid "%qE not specified in enclosing OpenACC %qs construct" msgstr "" -#: gimplify.cc:8056 +#: gimplify.cc:8153 #, gcc-internal-format msgid "enclosing OpenACC %qs construct and" msgstr "" -#: gimplify.cc:8059 +#: gimplify.cc:8156 #, gcc-internal-format msgid "enclosing OpenACC %qs construct with %qs clause" msgstr "" -#: gimplify.cc:8129 +#: gimplify.cc:8226 #, gcc-internal-format msgid "%qE with %<link%> clause used in %<routine%> function" msgstr "" -#: gimplify.cc:8137 +#: gimplify.cc:8234 #, gcc-internal-format msgid "%qE requires a %<declare%> directive for use in a %<routine%> function" msgstr "" -#: gimplify.cc:8206 +#: gimplify.cc:8296 #, gcc-internal-format msgid "%qE not specified in enclosing %<target%>" msgstr "" -#: gimplify.cc:8208 +#: gimplify.cc:8298 #, gcc-internal-format msgid "enclosing %<target%>" msgstr "" -#: gimplify.cc:8243 gimplify.cc:12324 +#: gimplify.cc:8333 gimplify.cc:12427 #, gcc-internal-format msgid "variable %qE declared in enclosing %<host_data%> region" msgstr "" -#: gimplify.cc:8264 +#: gimplify.cc:8354 #, gcc-internal-format msgid "%qD referenced in target region does not have a mappable type" msgstr "" -#: gimplify.cc:8395 +#: gimplify.cc:8498 #, gcc-internal-format msgid "iteration variable %qE is predetermined linear" msgstr "" -#: gimplify.cc:8398 +#: gimplify.cc:8501 #, gcc-internal-format msgid "iteration variable %qE should be private" msgstr "" -#: gimplify.cc:8412 +#: gimplify.cc:8515 #, gcc-internal-format msgid "iteration variable %qE should not be firstprivate" msgstr "" -#: gimplify.cc:8415 +#: gimplify.cc:8518 #, gcc-internal-format msgid "iteration variable %qE should not be reduction" msgstr "" -#: gimplify.cc:8418 +#: gimplify.cc:8521 #, gcc-internal-format msgid "iteration variable %qE should not be linear" msgstr "" -#: gimplify.cc:9422 gimplify.cc:9433 gimplify.cc:9445 gimplify.cc:9461 -#: gimplify.cc:9666 gimplify.cc:9689 gimplify.cc:9700 gimplify.cc:9718 +#: gimplify.cc:9525 gimplify.cc:9536 gimplify.cc:9548 gimplify.cc:9564 +#: gimplify.cc:9769 gimplify.cc:9792 gimplify.cc:9803 gimplify.cc:9821 #, gcc-internal-format msgid "unexpected mapping node" msgstr "" -#: gimplify.cc:9755 +#: gimplify.cc:9858 #, gcc-internal-format msgid "unexpected pointer mapping node" msgstr "" -#: gimplify.cc:9968 +#: gimplify.cc:10071 #, gcc-internal-format msgid "base pointer cycle detected" msgstr "" -#: gimplify.cc:10475 +#: gimplify.cc:10578 #, gcc-internal-format msgid "" "data movement for component %qE is not compatible with movement for struct " "%qE" msgstr "" -#: gimplify.cc:10791 +#: gimplify.cc:10894 #, gcc-internal-format msgid "%qE appears more than once in map clauses" msgstr "" -#: gimplify.cc:11747 +#: gimplify.cc:11850 #, gcc-internal-format msgid "mapping field %qE of variable length structure" msgstr "" -#: gimplify.cc:12017 gimplify.cc:12023 +#: gimplify.cc:12120 gimplify.cc:12126 #, gcc-internal-format msgid "conditional %<lastprivate%> clause on %qs construct" msgstr "" -#: gimplify.cc:12040 +#: gimplify.cc:12143 #, gcc-internal-format msgid "non-scalar variable %qD in conditional %<lastprivate%> clause" msgstr "" -#: gimplify.cc:12062 +#: gimplify.cc:12165 #, gcc-internal-format msgid "%<task%> reduction modifier on a construct with a %<nowait%> clause" msgstr "" -#: gimplify.cc:12070 +#: gimplify.cc:12173 #, gcc-internal-format msgid "" "invalid %<task%> reduction modifier on construct other than %<parallel%>, " "%qs, %<sections%> or %<scope%>" msgstr "" -#: gimplify.cc:12081 gimplify.cc:12087 gimplify.cc:12093 gimplify.cc:12099 -#: gimplify.cc:12105 gimplify.cc:16319 +#: gimplify.cc:12184 gimplify.cc:12190 gimplify.cc:12196 gimplify.cc:12202 +#: gimplify.cc:12208 gimplify.cc:16422 #, gcc-internal-format msgid "%<inscan%> %<reduction%> clause on %qs construct" msgstr "" -#: gimplify.cc:12199 +#: gimplify.cc:12302 #, gcc-internal-format msgid "" "%<linear%> clause for variable other than loop iterator specified on " "construct combined with %<distribute%>" msgstr "" -#: gimplify.cc:12824 +#: gimplify.cc:12927 #, gcc-internal-format msgid "" "copyprivate variable %qE is not threadprivate or private in outer context" msgstr "" -#: gimplify.cc:12881 +#: gimplify.cc:12984 #, gcc-internal-format msgid "%s variable %qE is private in outer context" msgstr "" -#: gimplify.cc:12913 +#: gimplify.cc:13016 #, gcc-internal-format msgid "expected %qs %<if%> clause modifier rather than %qs" msgstr "" -#: gimplify.cc:12952 +#: gimplify.cc:13055 #, gcc-internal-format msgid "" "%<device%> clause with %<ancestor%> is only allowed on %<target%> construct" msgstr "" -#: gimplify.cc:12968 +#: gimplify.cc:13071 #, gcc-internal-format msgid "" "with %<ancestor%>, only the %<device%>, %<firstprivate%>, %<private%>, " "%<defaultmap%>, and %<map%> clauses may appear on the construct" msgstr "" -#: gimplify.cc:13184 +#: gimplify.cc:13287 #, gcc-internal-format msgid "" "%qD specified in %qs clause but not in %<inscan%> %<reduction%> clause on " "the containing construct" msgstr "" -#: gimplify.cc:13396 +#: gimplify.cc:13499 #, gcc-internal-format msgid "%<_Atomic%> %qD in implicit %<map%> clause" msgstr "" -#: gimplify.cc:13450 +#: gimplify.cc:13553 #, gcc-internal-format msgid "" "%<_Atomic%> %qD in implicit %<firstprivate%> clause on %<target%> construct" msgstr "" -#: gimplify.cc:13788 +#: gimplify.cc:13891 #, gcc-internal-format msgid "%<_Atomic%> %qD in %<firstprivate%> clause on %<target%> construct" msgstr "" -#: gimplify.cc:13861 +#: gimplify.cc:13964 #, gcc-internal-format msgid "" "same variable used in %<firstprivate%> and %<lastprivate%> clauses on " "%<distribute%> construct" msgstr "" -#: gimplify.cc:14038 +#: gimplify.cc:14141 #, gcc-internal-format msgid "" "incompatible data clause with reduction on %qE; promoting to " "%<present_or_copy%>" msgstr "" -#: gimplify.cc:14336 +#: gimplify.cc:14439 #, gcc-internal-format msgid "" "%qD specified in %<inscan%> %<reduction%> clause but not in %<scan%> " "directive clause" msgstr "" -#: gimplify.cc:14355 +#: gimplify.cc:14458 #, gcc-internal-format msgid "invalid private reduction on %qE" msgstr "" -#: gimplify.cc:14522 +#: gimplify.cc:14625 #, gcc-internal-format msgid "" "%<inscan%> %<reduction%> clause used together with %<linear%> clause for a " "variable other than loop iterator" msgstr "" -#: gimplify.cc:14866 +#: gimplify.cc:14969 #, gcc-internal-format msgid "%<mutexinoutset%> kind in %<depend%> clause on a %<taskwait%> construct" msgstr "" -#: gimplify.cc:14876 +#: gimplify.cc:14979 #, gcc-internal-format msgid "%<taskwait%> construct with %<nowait%> clause but no %<depend%> clauses" msgstr "" -#: gimplify.cc:15160 gimplify.cc:15164 gimplify.cc:15173 gimplify.cc:15185 -#: gimplify.cc:15190 +#: gimplify.cc:15263 gimplify.cc:15267 gimplify.cc:15276 gimplify.cc:15288 +#: gimplify.cc:15293 #, gcc-internal-format msgid "%qs clause may not appear on non-rectangular %qs" msgstr "" -#: gimplify.cc:15351 +#: gimplify.cc:15454 #, gcc-internal-format msgid "" "%<linear%> clause may not be specified together with %<ordered%> clause if " "stand-alone %<ordered%> construct is nested in it" msgstr "" -#: gimplify.cc:15416 +#: gimplify.cc:15519 #, gcc-internal-format msgid "threadprivate iteration variable %qD" msgstr "" -#: gimplify.cc:15447 gimplify.cc:15555 +#: gimplify.cc:15550 gimplify.cc:15658 #, gcc-internal-format msgid "conditional %<lastprivate%> on loop iterator %qD ignored" msgstr "" -#: gimplify.cc:16257 +#: gimplify.cc:16360 #, gcc-internal-format msgid "" "%<bind%> clause not specified on a %<loop%> construct not nested inside " "another OpenMP construct" msgstr "" -#: gimplify.cc:16281 +#: gimplify.cc:16384 #, gcc-internal-format msgid "" "%<bind(parallel)%> on a %<loop%> construct nested inside %<simd%> construct" msgstr "" -#: gimplify.cc:16301 +#: gimplify.cc:16404 #, gcc-internal-format msgid "" "%<bind(teams)%> on a %<loop%> region not strictly nested inside of a " "%<teams%> region" msgstr "" -#: gimplify.cc:16326 +#: gimplify.cc:16429 #, gcc-internal-format msgid "" "invalid %<task%> reduction modifier on construct other than %<parallel%>, " "%qs or %<sections%>" msgstr "" -#: gimplify.cc:16354 +#: gimplify.cc:16457 #, gcc-internal-format msgid "" "%<lastprivate%> clause on a %<loop%> construct refers to a variable %qD " "which is not the loop iterator" msgstr "" -#: gimplify.cc:17436 +#: gimplify.cc:17539 #, gcc-internal-format msgid "" "%<ordered%> construct with %qs clause must be closely nested inside a loop " "with %<ordered%> clause" msgstr "" -#: gimplify.cc:17457 +#: gimplify.cc:17560 #, gcc-internal-format msgid "variable %qE is not an iteration of outermost loop %d, expected %qE" msgstr "" -#: gimplify.cc:17470 +#: gimplify.cc:17573 #, gcc-internal-format msgid "" "number of variables in %qs clause with %<sink%> modifier does not match " "number of iteration variables" msgstr "" -#: gimplify.cc:17484 +#: gimplify.cc:17587 #, gcc-internal-format msgid "" "more than one %qs clause with %<source%> modifier on an %<ordered%> construct" msgstr "" -#: gimplify.cc:17497 +#: gimplify.cc:17600 #, gcc-internal-format msgid "" "%qs clause with %<source%> modifier specified together with %qs clauses with " "%<sink%> modifier on the same construct" msgstr "" -#: gimplify.cc:18814 +#: gimplify.cc:18917 #, gcc-internal-format msgid "gimplification failed" msgstr "" -#: gimplify.cc:19413 +#: gimplify.cc:19518 #, gcc-internal-format msgid "%qT is promoted to %qT when passed through %<...%>" msgstr "" -#: gimplify.cc:19418 +#: gimplify.cc:19523 #, gcc-internal-format msgid "(so you should pass %qT not %qT to %<va_arg%>)" msgstr "" -#: gimplify.cc:19425 +#: gimplify.cc:19530 #, gcc-internal-format msgid "if this code is reached, the program will abort" msgstr "" @@ -29945,286 +30059,286 @@ msgstr "" msgid "token %u has %<y-location == %u%>" msgstr "" -#: internal-fn.cc:814 +#: internal-fn.cc:841 #, gcc-internal-format msgid "invalid use of attribute %<fallthrough%>" msgstr "" -#: ipa-devirt.cc:677 ipa-devirt.cc:762 ipa-devirt.cc:791 ipa-devirt.cc:833 -#: ipa-devirt.cc:864 +#: ipa-devirt.cc:679 ipa-devirt.cc:764 ipa-devirt.cc:793 ipa-devirt.cc:835 +#: ipa-devirt.cc:866 #, gcc-internal-format msgid "virtual table of type %qD violates one definition rule" msgstr "" -#: ipa-devirt.cc:680 +#: ipa-devirt.cc:682 #, gcc-internal-format msgid "" "variable of same assembler name as the virtual table is defined in another " "translation unit" msgstr "" -#: ipa-devirt.cc:721 +#: ipa-devirt.cc:723 #, gcc-internal-format msgid "virtual table of type %qD contains RTTI information" msgstr "" -#: ipa-devirt.cc:727 +#: ipa-devirt.cc:729 #, gcc-internal-format msgid "but is prevailed by one without from other translation unit" msgstr "" -#: ipa-devirt.cc:731 +#: ipa-devirt.cc:733 #, gcc-internal-format msgid "RTTI will not work on this type" msgstr "" -#: ipa-devirt.cc:768 +#: ipa-devirt.cc:770 #, gcc-internal-format msgid "" "the conflicting type defined in another translation unit has virtual table " "of different size" msgstr "" -#: ipa-devirt.cc:797 +#: ipa-devirt.cc:799 #, gcc-internal-format msgid "" "the conflicting type defined in another translation unit with different RTTI " "information" msgstr "" -#: ipa-devirt.cc:841 ipa-devirt.cc:872 +#: ipa-devirt.cc:843 ipa-devirt.cc:874 #, gcc-internal-format msgid "the conflicting type defined in another translation unit" msgstr "" -#: ipa-devirt.cc:845 +#: ipa-devirt.cc:847 #, gcc-internal-format msgid "contains additional virtual method %qD" msgstr "" -#: ipa-devirt.cc:852 +#: ipa-devirt.cc:854 #, gcc-internal-format msgid "" "the conflicting type defined in another translation unit has virtual table " "with more entries" msgstr "" -#: ipa-devirt.cc:878 +#: ipa-devirt.cc:880 #, gcc-internal-format msgid "virtual method %qD" msgstr "" -#: ipa-devirt.cc:882 +#: ipa-devirt.cc:884 #, gcc-internal-format msgid "ought to match virtual method %qD but does not" msgstr "" -#: ipa-devirt.cc:888 +#: ipa-devirt.cc:890 #, gcc-internal-format msgid "" "the conflicting type defined in another translation unit has virtual table " "with different contents" msgstr "" -#: ipa-devirt.cc:922 +#: ipa-devirt.cc:924 #, gcc-internal-format msgid "type %qT (typedef of %qT) violates the C++ One Definition Rule" msgstr "" -#: ipa-devirt.cc:930 +#: ipa-devirt.cc:932 #, gcc-internal-format msgid "type %qT violates the C++ One Definition Rule" msgstr "" -#: ipa-devirt.cc:942 ipa-devirt.cc:957 ipa-devirt.cc:1235 ipa-devirt.cc:1280 -#: ipa-devirt.cc:1319 ipa-devirt.cc:1337 +#: ipa-devirt.cc:944 ipa-devirt.cc:959 ipa-devirt.cc:1237 ipa-devirt.cc:1282 +#: ipa-devirt.cc:1321 ipa-devirt.cc:1339 #, gcc-internal-format msgid "a different type is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:949 +#: ipa-devirt.cc:951 #, gcc-internal-format msgid "the first difference of corresponding definitions is field %qD" msgstr "" -#: ipa-devirt.cc:959 +#: ipa-devirt.cc:961 #, gcc-internal-format msgid "the first difference of corresponding definitions is method %qD" msgstr "" -#: ipa-devirt.cc:1064 +#: ipa-devirt.cc:1066 #, gcc-internal-format msgid "" "type %qT defined in anonymous namespace cannot match type %qT across the " "translation unit boundary" msgstr "" -#: ipa-devirt.cc:1069 +#: ipa-devirt.cc:1071 #, gcc-internal-format msgid "" "type %qT defined in anonymous namespace cannot match across the translation " "unit boundary" msgstr "" -#: ipa-devirt.cc:1074 +#: ipa-devirt.cc:1076 #, gcc-internal-format msgid "the incompatible type defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1090 +#: ipa-devirt.cc:1092 #, gcc-internal-format msgid "type name %qs should match type name %qs" msgstr "" -#: ipa-devirt.cc:1094 ipa-devirt.cc:1191 +#: ipa-devirt.cc:1096 ipa-devirt.cc:1193 #, gcc-internal-format msgid "the incompatible type is defined here" msgstr "" -#: ipa-devirt.cc:1122 +#: ipa-devirt.cc:1124 #, gcc-internal-format msgid "array types have different bounds" msgstr "" -#: ipa-devirt.cc:1137 +#: ipa-devirt.cc:1139 #, gcc-internal-format msgid "return value type mismatch" msgstr "" -#: ipa-devirt.cc:1152 +#: ipa-devirt.cc:1154 #, gcc-internal-format msgid "implicit this pointer type mismatch" msgstr "" -#: ipa-devirt.cc:1155 +#: ipa-devirt.cc:1157 #, gcc-internal-format, gfc-internal-format msgid "type mismatch in parameter %i" msgstr "" -#: ipa-devirt.cc:1166 +#: ipa-devirt.cc:1168 #, gcc-internal-format msgid "types have different parameter counts" msgstr "" -#: ipa-devirt.cc:1182 +#: ipa-devirt.cc:1184 #, gcc-internal-format msgid "type %qT itself violates the C++ One Definition Rule" msgstr "" -#: ipa-devirt.cc:1188 +#: ipa-devirt.cc:1190 #, gcc-internal-format msgid "type %qT should match type %qT" msgstr "" -#: ipa-devirt.cc:1263 +#: ipa-devirt.cc:1265 #, gcc-internal-format msgid "a type with different precision is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1270 +#: ipa-devirt.cc:1272 #, gcc-internal-format msgid "a type with different signedness is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1295 +#: ipa-devirt.cc:1297 #, gcc-internal-format msgid "" "it is defined as a pointer in different address space in another translation " "unit" msgstr "" -#: ipa-devirt.cc:1304 +#: ipa-devirt.cc:1306 #, gcc-internal-format msgid "" "it is defined as a pointer to different type in another translation unit" msgstr "" -#: ipa-devirt.cc:1364 +#: ipa-devirt.cc:1366 #, gcc-internal-format msgid "an array of different size is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1379 +#: ipa-devirt.cc:1381 #, gcc-internal-format msgid "has different return value in another translation unit" msgstr "" -#: ipa-devirt.cc:1402 ipa-devirt.cc:1414 +#: ipa-devirt.cc:1404 ipa-devirt.cc:1416 #, gcc-internal-format msgid "has different parameters in another translation unit" msgstr "" -#: ipa-devirt.cc:1437 +#: ipa-devirt.cc:1439 #, gcc-internal-format msgid "a type defined in another translation unit is not polymorphic" msgstr "" -#: ipa-devirt.cc:1441 +#: ipa-devirt.cc:1443 #, gcc-internal-format msgid "a type defined in another translation unit is polymorphic" msgstr "" -#: ipa-devirt.cc:1459 ipa-devirt.cc:1523 +#: ipa-devirt.cc:1461 ipa-devirt.cc:1525 #, gcc-internal-format msgid "" "a type with different virtual table pointers is defined in another " "translation unit" msgstr "" -#: ipa-devirt.cc:1466 ipa-devirt.cc:1528 +#: ipa-devirt.cc:1468 ipa-devirt.cc:1530 #, gcc-internal-format msgid "a type with different bases is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1474 +#: ipa-devirt.cc:1476 #, gcc-internal-format msgid "a field with different name is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1488 +#: ipa-devirt.cc:1490 #, gcc-internal-format msgid "" "a field of same name but different type is defined in another translation " "unit" msgstr "" -#: ipa-devirt.cc:1501 +#: ipa-devirt.cc:1503 #, gcc-internal-format msgid "fields have different layout in another translation unit" msgstr "" -#: ipa-devirt.cc:1508 +#: ipa-devirt.cc:1510 #, gcc-internal-format msgid "one field is a bitfield while the other is not" msgstr "" -#: ipa-devirt.cc:1532 +#: ipa-devirt.cc:1534 #, gcc-internal-format msgid "" "a type with different number of fields is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1555 +#: ipa-devirt.cc:1557 #, gcc-internal-format msgid "a type with different size is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:1564 +#: ipa-devirt.cc:1566 #, gcc-internal-format msgid "one type needs to be constructed while the other does not" msgstr "" -#: ipa-devirt.cc:1577 +#: ipa-devirt.cc:1579 #, gcc-internal-format msgid "memory layout mismatch" msgstr "" -#: ipa-devirt.cc:1696 +#: ipa-devirt.cc:1698 #, gcc-internal-format msgid "the extra base is defined here" msgstr "" -#: ipa-devirt.cc:3872 +#: ipa-devirt.cc:3874 #, gcc-internal-format msgid "Declaring type %qD final would enable devirtualization of %i call" msgid_plural "" @@ -30232,7 +30346,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ipa-devirt.cc:3881 +#: ipa-devirt.cc:3883 #, gcc-internal-format msgid "" "Declaring type %qD final would enable devirtualization of %i call executed " @@ -30243,7 +30357,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ipa-devirt.cc:3911 +#: ipa-devirt.cc:3913 #, gcc-internal-format msgid "" "Declaring virtual destructor of %qD final would enable devirtualization of " @@ -30254,7 +30368,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ipa-devirt.cc:3919 +#: ipa-devirt.cc:3921 #, gcc-internal-format msgid "Declaring method %qD final would enable devirtualization of %i call" msgid_plural "" @@ -30262,7 +30376,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ipa-devirt.cc:3927 +#: ipa-devirt.cc:3929 #, gcc-internal-format msgid "" "Declaring virtual destructor of %qD final would enable devirtualization of " @@ -30273,7 +30387,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ipa-devirt.cc:3938 +#: ipa-devirt.cc:3940 #, gcc-internal-format msgid "" "Declaring method %qD final would enable devirtualization of %i call executed " @@ -30284,83 +30398,83 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ipa-devirt.cc:4251 +#: ipa-devirt.cc:4253 #, gcc-internal-format msgid "type %qs violates the C++ One Definition Rule" msgstr "" -#: ipa-devirt.cc:4260 +#: ipa-devirt.cc:4262 #, gcc-internal-format msgid "" "an enum with different number of values is defined in another translation " "unit" msgstr "" -#: ipa-devirt.cc:4264 +#: ipa-devirt.cc:4266 #, gcc-internal-format msgid "" "an enum with different value name is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:4268 +#: ipa-devirt.cc:4270 #, gcc-internal-format msgid "an enum with different values is defined in another translation unit" msgstr "" -#: ipa-devirt.cc:4289 +#: ipa-devirt.cc:4291 #, gcc-internal-format msgid "name %qs differs from name %qs defined in another translation unit" msgstr "" -#: ipa-devirt.cc:4295 +#: ipa-devirt.cc:4297 #, gcc-internal-format msgid "" "name %qs is defined as %u-bit while another translation unit defines it as " "%u-bit" msgstr "" -#: ipa-devirt.cc:4304 +#: ipa-devirt.cc:4306 #, gcc-internal-format msgid "" "name %qs is defined to %wd while another translation unit defines it as %wd" msgstr "" -#: ipa-devirt.cc:4310 +#: ipa-devirt.cc:4312 #, gcc-internal-format msgid "name %qs is defined to different value in another translation unit" msgstr "" -#: ipa-devirt.cc:4315 +#: ipa-devirt.cc:4317 #, gcc-internal-format msgid "mismatching definition" msgstr "" -#: ipa-fnsummary.cc:4654 +#: ipa-fnsummary.cc:4656 #, gcc-internal-format msgid "invalid fnsummary in LTO stream" msgstr "" -#: ipa-fnsummary.cc:4755 +#: ipa-fnsummary.cc:4757 #, gcc-internal-format msgid "ipa inline summary is missing in input file" msgstr "" -#: ipa-modref.cc:4015 +#: ipa-modref.cc:4017 #, gcc-internal-format msgid "IPA modref summary is missing in input file" msgstr "" -#: ipa-prop.cc:4760 ipa-prop.cc:4802 ipa-prop.cc:4879 ipa-prop.cc:4927 +#: ipa-prop.cc:4824 ipa-prop.cc:4866 ipa-prop.cc:4943 ipa-prop.cc:4991 #, gcc-internal-format msgid "invalid jump function in LTO stream" msgstr "" -#: ipa-pure-const.cc:218 +#: ipa-pure-const.cc:220 #, gcc-internal-format msgid "function might be candidate for attribute %qs" msgstr "" -#: ipa-pure-const.cc:219 +#: ipa-pure-const.cc:221 #, gcc-internal-format msgid "" "function might be candidate for attribute %qs if it is known to return " @@ -30372,144 +30486,144 @@ msgstr "" msgid "ipa reference summary is missing in ltrans unit" msgstr "" -#: ipa-sra.cc:1619 +#: ipa-sra.cc:1621 #, gcc-internal-format msgid "Access offset before parent offset" msgstr "" -#: ipa-sra.cc:1624 +#: ipa-sra.cc:1626 #, gcc-internal-format msgid "Access size greater or equal to its parent size" msgstr "" -#: ipa-sra.cc:1629 +#: ipa-sra.cc:1631 #, gcc-internal-format msgid "Access terminates outside of its parent" msgstr "" -#: ipa-sra.cc:1641 +#: ipa-sra.cc:1643 #, gcc-internal-format msgid "Access overlaps with its sibling" msgstr "" -#: ipa-sra.cc:1660 +#: ipa-sra.cc:1662 #, gcc-internal-format msgid "IPA-SRA access verification failed" msgstr "" -#: ipa-sra.cc:2745 +#: ipa-sra.cc:2747 #, gcc-internal-format msgid "function %qs, parameter %u, has IPA-SRA accesses which overlap" msgstr "" -#: ipa-sra.cc:2748 +#: ipa-sra.cc:2750 #, gcc-internal-format msgid "" "function %qs, parameter %u, is used but does not have any certain IPA-SRA " "access" msgstr "" -#: ipa-strub.cc:620 +#: ipa-strub.cc:622 #, gcc-internal-format msgid "at-calls %<strub%> does not support call to %qD" msgstr "" -#: ipa-strub.cc:654 +#: ipa-strub.cc:656 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> on the target system" msgstr "" -#: ipa-strub.cc:658 +#: ipa-strub.cc:660 #, gcc-internal-format msgid "unsupported %<strub%> call on the target system" msgstr "" -#: ipa-strub.cc:684 +#: ipa-strub.cc:686 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because %<-fsplit-stack%> is enabled" msgstr "" -#: ipa-strub.cc:697 +#: ipa-strub.cc:699 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because of attribute %<noipa%>" msgstr "" -#: ipa-strub.cc:712 +#: ipa-strub.cc:714 #, gcc-internal-format msgid "%qD is not eligible for %<strub%> because of attribute %<simd%>" msgstr "" -#: ipa-strub.cc:846 +#: ipa-strub.cc:848 #, gcc-internal-format msgid "" "%qD is not eligible for internal %<strub%> because of attribute %<noclone%>" msgstr "" -#: ipa-strub.cc:870 +#: ipa-strub.cc:872 #, gcc-internal-format msgid "%qD is not eligible for internal %<strub%> because it calls %qD" msgstr "" -#: ipa-strub.cc:884 +#: ipa-strub.cc:886 #, gcc-internal-format msgid "" "%qD is not eligible for internal %<strub%> because it contains a non-local " "goto target" msgstr "" -#: ipa-strub.cc:897 +#: ipa-strub.cc:899 #, gcc-internal-format msgid "" "%qD is not eligible for internal %<strub%> because the address of a local " "label escapes" msgstr "" -#: ipa-strub.cc:936 +#: ipa-strub.cc:938 #, gcc-internal-format msgid "internal %<strub%> does not support forced labels" msgstr "" -#: ipa-strub.cc:950 +#: ipa-strub.cc:952 #, gcc-internal-format msgid "%qD has too many arguments for internal %<strub%>" msgstr "" -#: ipa-strub.cc:1227 +#: ipa-strub.cc:1229 #, gcc-internal-format msgid "%qD requires %<strub%>, but no viable %<strub%> mode was found" msgstr "" -#: ipa-strub.cc:1323 +#: ipa-strub.cc:1325 #, gcc-internal-format msgid "%<strub%> mode %qE selected for %qD, when %qE was requested" msgstr "" -#: ipa-strub.cc:1332 +#: ipa-strub.cc:1334 #, gcc-internal-format msgid "the incompatible selection was determined by ultimate alias target %qD" msgstr "" -#: ipa-strub.cc:1679 +#: ipa-strub.cc:1681 #, gcc-internal-format msgid "indirect non-%<strub%> call in %<strub%> context %qD" msgstr "" -#: ipa-strub.cc:1698 +#: ipa-strub.cc:1700 #, gcc-internal-format msgid "calling %<always_inline%> %<strub%> %qD in non-%<strub%> context %qD" msgstr "" -#: ipa-strub.cc:1708 +#: ipa-strub.cc:1710 #, gcc-internal-format msgid "calling non-%<strub%> %qD in %<strub%> context %qD" msgstr "" -#: ipa-strub.cc:1712 +#: ipa-strub.cc:1714 #, gcc-internal-format msgid "calling %qD using non-%<strub%> type %qT in %<strub%> context %qD" msgstr "" -#: ipa-strub.cc:2834 +#: ipa-strub.cc:2836 #, gcc-internal-format msgid "failed to split %qD for %<strub%>" msgstr "" @@ -30534,12 +30648,12 @@ msgstr "" msgid "frame size too large for reliable stack checking" msgstr "" -#: lra-assigns.cc:1696 +#: lra-assigns.cc:1702 #, gcc-internal-format, gfc-internal-format msgid "maximum number of LRA assignment passes is achieved (%d)" msgstr "" -#: lra-assigns.cc:1861 +#: lra-assigns.cc:1867 #, gcc-internal-format msgid "unable to find a register to spill" msgstr "" @@ -30770,97 +30884,97 @@ msgstr "" msgid "deleting LTRANS file %s: %m" msgstr "" -#: lto-wrapper.cc:355 +#: lto-wrapper.cc:358 #, gcc-internal-format, gfc-internal-format msgid "option %s with different values" msgstr "" -#: lto-wrapper.cc:371 +#: lto-wrapper.cc:374 #, gcc-internal-format msgid "option %qs with mismatching values (%s, %s)" msgstr "" -#: lto-wrapper.cc:486 +#: lto-wrapper.cc:489 #, gcc-internal-format, gfc-internal-format msgid "option %s not used consistently in all LTO input files" msgstr "" -#: lto-wrapper.cc:631 lto-wrapper.cc:639 +#: lto-wrapper.cc:634 lto-wrapper.cc:642 #, gcc-internal-format msgid "" "Extra option to %<-Xassembler%>: %s, dropping all %<-Xassembler%> and %<-" "Wa%> options." msgstr "" -#: lto-wrapper.cc:647 +#: lto-wrapper.cc:650 #, gcc-internal-format msgid "" "Options to %<-Xassembler%> do not match: %s, %s, dropping all %<-" "Xassembler%> and %<-Wa%> options." msgstr "" -#: lto-wrapper.cc:957 +#: lto-wrapper.cc:960 #, gcc-internal-format msgid "could not find %s in %s (consider using %<-B%>)" msgstr "" -#: lto-wrapper.cc:1037 +#: lto-wrapper.cc:1041 #, gcc-internal-format, gfc-internal-format msgid "problem with building target image for %s" msgstr "" -#: lto-wrapper.cc:1066 +#: lto-wrapper.cc:1070 #, gcc-internal-format msgid "reading input file" msgstr "" -#: lto-wrapper.cc:1071 +#: lto-wrapper.cc:1075 #, gcc-internal-format msgid "writing output file" msgstr "" -#: lto-wrapper.cc:1107 +#: lto-wrapper.cc:1111 #, gcc-internal-format msgid "installation error, cannot find %<crtoffloadtable.o%>" msgstr "" -#: lto-wrapper.cc:1429 +#: lto-wrapper.cc:1433 #, gcc-internal-format msgid "environment variable %<COLLECT_GCC%> must be set" msgstr "" -#: lto-wrapper.cc:1433 config/gcn/mkoffload.cc:803 +#: lto-wrapper.cc:1437 config/gcn/mkoffload.cc:809 #, gcc-internal-format msgid "environment variable %<COLLECT_GCC_OPTIONS%> must be set" msgstr "" -#: lto-wrapper.cc:1723 lto-wrapper.cc:1783 c-family/c-pch.cc:213 +#: lto-wrapper.cc:1727 lto-wrapper.cc:1787 c-family/c-pch.cc:213 #: c-family/c-pch.cc:248 c-family/c-pch.cc:286 #, gcc-internal-format msgid "cannot read %s: %m" msgstr "" -#: lto-wrapper.cc:1750 +#: lto-wrapper.cc:1754 #, gcc-internal-format, gfc-internal-format msgid "invalid format of %s" msgstr "" -#: lto-wrapper.cc:1916 +#: lto-wrapper.cc:1920 #, gcc-internal-format msgid "%<fopen%>: %s: %m" msgstr "" -#: lto-wrapper.cc:1933 +#: lto-wrapper.cc:1937 #, gcc-internal-format, gfc-internal-format msgid "corrupted ltrans output file %s" msgstr "" -#: lto-wrapper.cc:1976 +#: lto-wrapper.cc:1980 #, gcc-internal-format, gfc-internal-format msgid "using serial compilation of %d LTRANS jobs" msgstr "" -#: lto-wrapper.cc:2156 config/gcn/mkoffload.cc:858 +#: lto-wrapper.cc:2160 config/gcn/mkoffload.cc:932 #, gcc-internal-format msgid "%<atexit%> failed" msgstr "" @@ -31547,12 +31661,12 @@ msgstr "" msgid "unrecognized argument in option %qs" msgstr "" -#: opts-common.cc:1562 config/i386/i386-options.cc:1698 +#: opts-common.cc:1562 config/i386/i386-options.cc:1702 #, gcc-internal-format msgid "valid arguments to %qs are: %s; did you mean %qs?" msgstr "" -#: opts-common.cc:1565 config/i386/i386-options.cc:1701 +#: opts-common.cc:1565 config/i386/i386-options.cc:1705 #, gcc-internal-format msgid "valid arguments to %qs are: %s" msgstr "" @@ -31649,8 +31763,8 @@ msgstr "" #: opts.cc:849 opts.cc:855 opts.cc:861 opts.cc:867 opts.cc:878 opts.cc:888 #: opts.cc:894 opts.cc:900 opts.cc:906 opts.cc:912 opts.cc:918 opts.cc:924 -#: opts.cc:930 opts.cc:936 opts.cc:953 opts.cc:961 config/mips/mips.cc:20405 -#: config/mips/mips.cc:20407 config/mips/mips.cc:20420 +#: opts.cc:930 opts.cc:936 opts.cc:953 opts.cc:961 config/mips/mips.cc:20411 +#: config/mips/mips.cc:20413 config/mips/mips.cc:20426 #, gcc-internal-format msgid "%qs is incompatible with %qs" msgstr "" @@ -31787,7 +31901,7 @@ msgid "" "present" msgstr "" -#: opts.cc:1490 config/darwin.cc:3471 +#: opts.cc:1490 config/darwin.cc:3484 #, gcc-internal-format msgid "" "%<-freorder-blocks-and-partition%> does not work with exceptions on this " @@ -31977,72 +32091,72 @@ msgid "" "argument in %<NEXT_PASS%>" msgstr "" -#: passes.cc:1072 +#: passes.cc:1073 #, gcc-internal-format msgid "unrecognized option %<-fenable%>" msgstr "" -#: passes.cc:1074 +#: passes.cc:1075 #, gcc-internal-format msgid "unrecognized option %<-fdisable%>" msgstr "" -#: passes.cc:1082 +#: passes.cc:1083 #, gcc-internal-format msgid "unknown pass %s specified in %<-fenable%>" msgstr "" -#: passes.cc:1084 +#: passes.cc:1085 #, gcc-internal-format msgid "unknown pass %s specified in %<-fdisable%>" msgstr "" -#: passes.cc:1109 passes.cc:1198 +#: passes.cc:1110 passes.cc:1199 #, gcc-internal-format, gfc-internal-format msgid "enable pass %s for functions in the range of [%u, %u]" msgstr "" -#: passes.cc:1112 passes.cc:1209 +#: passes.cc:1113 passes.cc:1210 #, gcc-internal-format, gfc-internal-format msgid "disable pass %s for functions in the range of [%u, %u]" msgstr "" -#: passes.cc:1148 passes.cc:1176 +#: passes.cc:1149 passes.cc:1177 #, gcc-internal-format, gfc-internal-format msgid "Invalid range %s in option %s" msgstr "" -#: passes.cc:1194 +#: passes.cc:1195 #, gcc-internal-format, gfc-internal-format msgid "enable pass %s for function %s" msgstr "" -#: passes.cc:1205 +#: passes.cc:1206 #, gcc-internal-format, gfc-internal-format msgid "disable pass %s for function %s" msgstr "" -#: passes.cc:1434 +#: passes.cc:1435 #, gcc-internal-format msgid "invalid pass positioning operation" msgstr "" -#: passes.cc:1495 +#: passes.cc:1496 #, gcc-internal-format msgid "plugin cannot register a missing pass" msgstr "" -#: passes.cc:1498 +#: passes.cc:1499 #, gcc-internal-format msgid "plugin cannot register an unnamed pass" msgstr "" -#: passes.cc:1503 +#: passes.cc:1504 #, gcc-internal-format msgid "plugin cannot register pass %qs without reference pass name" msgstr "" -#: passes.cc:1522 +#: passes.cc:1523 #, gcc-internal-format msgid "pass %qs not found but is referenced by new pass %qs" msgstr "" @@ -32219,25 +32333,25 @@ msgstr "" msgid "Missing counts for called function %s" msgstr "" -#: profile.cc:616 +#: profile.cc:628 #, gcc-internal-format msgid "corrupted profile info: profile data is not flow-consistent" msgstr "" -#: profile.cc:633 +#: profile.cc:645 #, gcc-internal-format, gfc-internal-format msgid "" "corrupted profile info: number of iterations for basic block %d thought to " "be %i" msgstr "" -#: profile.cc:656 +#: profile.cc:668 #, gcc-internal-format, gfc-internal-format msgid "" "corrupted profile info: number of executions for edge %d-%d thought to be %i" msgstr "" -#: profile.cc:965 +#: profile.cc:977 #, gcc-internal-format msgid "corrupted profile info: invalid time profile" msgstr "" @@ -32561,77 +32675,77 @@ msgstr "" msgid "undefined named operand %qs" msgstr "" -#: stor-layout.cc:804 +#: stor-layout.cc:830 #, gcc-internal-format msgid "size of %q+D %E bytes exceeds maximum object size %wu" msgstr "" -#: stor-layout.cc:1185 +#: stor-layout.cc:1211 #, gcc-internal-format msgid "alignment %u of %qT is less than %u" msgstr "" -#: stor-layout.cc:1192 +#: stor-layout.cc:1218 #, gcc-internal-format msgid "%q+D offset %E in %qT isn%'t aligned to %u" msgstr "" -#: stor-layout.cc:1195 +#: stor-layout.cc:1221 #, gcc-internal-format msgid "%q+D offset %E in %qT may not be aligned to %u" msgstr "" -#: stor-layout.cc:1327 +#: stor-layout.cc:1353 #, gcc-internal-format msgid "packed attribute causes inefficient alignment for %q+D" msgstr "" -#: stor-layout.cc:1331 +#: stor-layout.cc:1357 #, gcc-internal-format msgid "packed attribute is unnecessary for %q+D" msgstr "" -#: stor-layout.cc:1351 +#: stor-layout.cc:1377 #, gcc-internal-format msgid "padding struct to align %q+D" msgstr "" -#: stor-layout.cc:1410 +#: stor-layout.cc:1436 #, gcc-internal-format msgid "offset of packed bit-field %qD has changed in GCC 4.4" msgstr "" -#: stor-layout.cc:1790 +#: stor-layout.cc:1816 #, gcc-internal-format msgid "padding struct size to alignment boundary with %E bytes" msgstr "" -#: stor-layout.cc:1819 +#: stor-layout.cc:1845 #, gcc-internal-format msgid "packed attribute causes inefficient alignment for %qE" msgstr "" -#: stor-layout.cc:1823 +#: stor-layout.cc:1849 #, gcc-internal-format msgid "packed attribute is unnecessary for %qE" msgstr "" -#: stor-layout.cc:1829 +#: stor-layout.cc:1855 #, gcc-internal-format msgid "packed attribute causes inefficient alignment" msgstr "" -#: stor-layout.cc:1831 +#: stor-layout.cc:1857 #, gcc-internal-format msgid "packed attribute is unnecessary" msgstr "" -#: stor-layout.cc:2712 +#: stor-layout.cc:2738 #, gcc-internal-format msgid "alignment of array elements is greater than element size" msgstr "" -#: stor-layout.cc:2718 +#: stor-layout.cc:2744 #, gcc-internal-format msgid "size of array element is not a multiple of its alignment" msgstr "" @@ -32806,34 +32920,34 @@ msgstr "" msgid "Chained transparent aliases" msgstr "" -#: symtab.cc:1367 symtab.cc:1385 symtab.cc:1412 +#: symtab.cc:1367 symtab.cc:1477 symtab.cc:1504 #, gcc-internal-format msgid "symtab_node::verify failed" msgstr "" -#: symtab.cc:1384 +#: symtab.cc:1476 #, gcc-internal-format, gfc-internal-format msgid "invalid order in asm node %i" msgstr "" -#: symtab.cc:1408 +#: symtab.cc:1500 #, gcc-internal-format msgid "" "Two symbols with same comdat_group are not linked by the same_comdat_group " "list." msgstr "" -#: symtab.cc:1846 +#: symtab.cc:1938 #, gcc-internal-format msgid "function %q+D part of alias cycle" msgstr "" -#: symtab.cc:1848 +#: symtab.cc:1940 #, gcc-internal-format msgid "variable %q+D part of alias cycle" msgstr "" -#: symtab.cc:1876 +#: symtab.cc:1968 #, gcc-internal-format msgid "section of alias %q+D must match section of its target" msgstr "" @@ -32883,47 +32997,47 @@ msgstr "" msgid "%<#pragma GCC target%> is not supported for this machine" msgstr "" -#: toplev.cc:716 +#: toplev.cc:718 #, gcc-internal-format msgid "cannot open %qs for writing: %m" msgstr "" -#: toplev.cc:735 +#: toplev.cc:737 #, gcc-internal-format msgid "%<-frecord-gcc-switches%> is not supported by the current target" msgstr "" -#: toplev.cc:787 +#: toplev.cc:789 #, gcc-internal-format msgid "stack usage computation not supported for this target" msgstr "" -#: toplev.cc:846 +#: toplev.cc:848 #, gcc-internal-format msgid "stack usage might be unbounded" msgstr "" -#: toplev.cc:851 +#: toplev.cc:853 #, gcc-internal-format msgid "stack usage might be %wu bytes" msgstr "" -#: toplev.cc:854 +#: toplev.cc:856 #, gcc-internal-format msgid "stack usage is %wu bytes" msgstr "" -#: toplev.cc:971 +#: toplev.cc:973 #, gcc-internal-format msgid "cannot open %s for writing: %m" msgstr "" -#: toplev.cc:1250 +#: toplev.cc:1252 #, gcc-internal-format msgid "this target does not support %qs" msgstr "" -#: toplev.cc:1284 +#: toplev.cc:1286 #, gcc-internal-format msgid "" "Graphite loop optimizations cannot be used (isl is not available) (%<-" @@ -32931,194 +33045,194 @@ msgid "" "parallelize-all%>)" msgstr "" -#: toplev.cc:1295 +#: toplev.cc:1297 #, gcc-internal-format msgid "%<-fcf-protection=full%> is not supported for this target" msgstr "" -#: toplev.cc:1302 +#: toplev.cc:1304 #, gcc-internal-format msgid "%<-fcf-protection=branch%> is not supported for this target" msgstr "" -#: toplev.cc:1309 +#: toplev.cc:1311 #, gcc-internal-format msgid "%<-fcf-protection=return%> is not supported for this target" msgstr "" -#: toplev.cc:1324 +#: toplev.cc:1326 #, gcc-internal-format msgid "%<-fabi-version=1%> is no longer supported" msgstr "" -#: toplev.cc:1340 +#: toplev.cc:1342 #, gcc-internal-format msgid "instruction scheduling not supported on this target machine" msgstr "" -#: toplev.cc:1344 +#: toplev.cc:1346 #, gcc-internal-format msgid "this target machine does not have delayed branches" msgstr "" -#: toplev.cc:1358 +#: toplev.cc:1360 #, gcc-internal-format msgid "%<-f%sleading-underscore%> not supported on this target machine" msgstr "" -#: toplev.cc:1387 +#: toplev.cc:1389 #, gcc-internal-format msgid "CTF debug info requested, but not supported for %qs frontend" msgstr "" -#: toplev.cc:1405 +#: toplev.cc:1407 #, gcc-internal-format msgid "could not close zeroed insn dump file %qs: %m" msgstr "" -#: toplev.cc:1443 +#: toplev.cc:1445 #, gcc-internal-format msgid "target system does not support the %qs debug format" msgstr "" -#: toplev.cc:1471 +#: toplev.cc:1473 #, gcc-internal-format msgid "" "without %<-gdwarf-5%>, %<-gvariable-location-views=incompat5%> is equivalent " "to %<-gvariable-location-views%>" msgstr "" -#: toplev.cc:1487 +#: toplev.cc:1489 #, gcc-internal-format msgid "" "%<-ginternal-reset-location-views%> is forced disabled without %<-gvariable-" "location-views%>" msgstr "" -#: toplev.cc:1497 +#: toplev.cc:1499 #, gcc-internal-format msgid "" "%<-ginline-points%> is forced disabled without %<-gstatement-frontiers%>" msgstr "" -#: toplev.cc:1526 +#: toplev.cc:1528 #, gcc-internal-format msgid "%<-ffunction-sections%> not supported for this target" msgstr "" -#: toplev.cc:1532 +#: toplev.cc:1534 #, gcc-internal-format msgid "%<-fdata-sections%> not supported for this target" msgstr "" -#: toplev.cc:1540 +#: toplev.cc:1542 #, gcc-internal-format msgid "%<-fprefetch-loop-arrays%> not supported for this target" msgstr "" -#: toplev.cc:1546 +#: toplev.cc:1548 #, gcc-internal-format msgid "" "%<-fprefetch-loop-arrays%> not supported for this target (try %<-march%> " "switches)" msgstr "" -#: toplev.cc:1556 +#: toplev.cc:1558 #, gcc-internal-format msgid "%<-fprefetch-loop-arrays%> is not supported with %<-Os%>" msgstr "" -#: toplev.cc:1568 +#: toplev.cc:1570 #, gcc-internal-format msgid "%<-fassociative-math%> disabled; other options take precedence" msgstr "" -#: toplev.cc:1576 +#: toplev.cc:1578 #, gcc-internal-format msgid "%<-fhardened%> not supported for this target" msgstr "" -#: toplev.cc:1585 +#: toplev.cc:1587 #, gcc-internal-format msgid "" "%<-fstack-clash-protection%> is not supported on targets where the stack " "grows from lower to higher addresses" msgstr "" -#: toplev.cc:1598 +#: toplev.cc:1600 #, gcc-internal-format msgid "" "%<-fstack-clash-protection%> is not enabled by %<-fhardened%> because %<-" "fstack-check%> was specified on the command line" msgstr "" -#: toplev.cc:1608 +#: toplev.cc:1610 #, gcc-internal-format msgid "" "%<-fstack-check=%> and %<-fstack-clash-protection%> are mutually exclusive; " "disabling %<-fstack-check=%>" msgstr "" -#: toplev.cc:1619 +#: toplev.cc:1621 #, gcc-internal-format msgid "%<-fstack-protector%> not supported for this target" msgstr "" -#: toplev.cc:1631 +#: toplev.cc:1633 #, gcc-internal-format msgid "" "%<-fsanitize=address%> and %<-fsanitize=kernel-address%> are not supported " "for this target" msgstr "" -#: toplev.cc:1641 +#: toplev.cc:1643 #, gcc-internal-format msgid "%<-fsanitize=address%> not supported for this target" msgstr "" -#: toplev.cc:1650 +#: toplev.cc:1652 #, gcc-internal-format msgid "" "%<-fsanitize=kernel-address%> with stack protection is not supported without " "%<-fasan-shadow-offset=%> for this target" msgstr "" -#: toplev.cc:1660 +#: toplev.cc:1662 #, gcc-internal-format msgid "%qs is not supported for this target" msgstr "" -#: toplev.cc:1668 +#: toplev.cc:1670 #, gcc-internal-format msgid "%<-fsanitize=shadow-call-stack%> not supported in current platform" msgstr "" -#: toplev.cc:1671 +#: toplev.cc:1673 #, gcc-internal-format msgid "%<-fsanitize=shadow-call-stack%> requires %<-fno-exceptions%>" msgstr "" -#: toplev.cc:2010 +#: toplev.cc:2012 #, gcc-internal-format msgid "error writing to %s: %m" msgstr "" -#: toplev.cc:2012 +#: toplev.cc:2014 #, gcc-internal-format msgid "error closing %s: %m" msgstr "" -#: toplev.cc:2130 +#: toplev.cc:2132 #, gcc-internal-format msgid "mpfr not configured to handle all floating modes" msgstr "" -#: toplev.cc:2216 +#: toplev.cc:2218 #, gcc-internal-format msgid "self-tests are not enabled in this build" msgstr "" -#: toplev.cc:2313 +#: toplev.cc:2315 #, gcc-internal-format msgid "self-tests incompatible with %<-E%>" msgstr "" @@ -33205,172 +33319,172 @@ msgstr "" msgid "outer transaction in %<transaction_safe%> function" msgstr "" -#: tree-cfg.cc:355 +#: tree-cfg.cc:359 #, gcc-internal-format msgid "ignoring loop annotation" msgstr "" -#: tree-cfg.cc:3084 +#: tree-cfg.cc:3088 #, gcc-internal-format msgid "constant not recomputed when %<ADDR_EXPR%> changed" msgstr "" -#: tree-cfg.cc:3089 +#: tree-cfg.cc:3093 #, gcc-internal-format msgid "side effects not recomputed when %<ADDR_EXPR%> changed" msgstr "" -#: tree-cfg.cc:3104 +#: tree-cfg.cc:3108 #, gcc-internal-format msgid "address taken but %<TREE_ADDRESSABLE%> bit not set" msgstr "" -#: tree-cfg.cc:3130 +#: tree-cfg.cc:3134 #, gcc-internal-format msgid "non-scalar %qs" msgstr "" -#: tree-cfg.cc:3144 +#: tree-cfg.cc:3148 #, gcc-internal-format msgid "invalid position or size operand to %qs" msgstr "" -#: tree-cfg.cc:3150 +#: tree-cfg.cc:3154 #, gcc-internal-format msgid "integral result type precision does not match field size of %qs" msgstr "" -#: tree-cfg.cc:3159 +#: tree-cfg.cc:3163 #, gcc-internal-format msgid "mode size of non-integral result does not match field size of %qs" msgstr "" -#: tree-cfg.cc:3167 +#: tree-cfg.cc:3171 #, gcc-internal-format msgid "%qs of non-mode-precision operand" msgstr "" -#: tree-cfg.cc:3174 +#: tree-cfg.cc:3178 #, gcc-internal-format msgid "position plus size exceeds size of referenced object in %qs" msgstr "" -#: tree-cfg.cc:3185 +#: tree-cfg.cc:3189 #, gcc-internal-format msgid "type mismatch in %qs reference" msgstr "" -#: tree-cfg.cc:3201 +#: tree-cfg.cc:3205 #, gcc-internal-format msgid "conversion of %qs on the left hand side of %qs" msgstr "" -#: tree-cfg.cc:3209 +#: tree-cfg.cc:3213 #, gcc-internal-format msgid "conversion of register to a different size in %qs" msgstr "" -#: tree-cfg.cc:3229 +#: tree-cfg.cc:3233 #, gcc-internal-format msgid "non-top-level %qs" msgstr "" -#: tree-cfg.cc:3244 +#: tree-cfg.cc:3248 #, gcc-internal-format msgid "invalid operands to %qs" msgstr "" -#: tree-cfg.cc:3255 tree-cfg.cc:3264 tree-cfg.cc:3281 tree-cfg.cc:3960 -#: tree-cfg.cc:3989 tree-cfg.cc:4006 tree-cfg.cc:4027 tree-cfg.cc:4073 -#: tree-cfg.cc:4094 tree-cfg.cc:4148 tree-cfg.cc:4168 tree-cfg.cc:4204 -#: tree-cfg.cc:4225 tree-cfg.cc:4286 tree-cfg.cc:4361 tree-cfg.cc:4387 -#: tree-cfg.cc:4423 tree-cfg.cc:4472 tree-cfg.cc:4497 tree-cfg.cc:4572 -#: tree-cfg.cc:4658 +#: tree-cfg.cc:3259 tree-cfg.cc:3268 tree-cfg.cc:3285 tree-cfg.cc:3964 +#: tree-cfg.cc:3993 tree-cfg.cc:4010 tree-cfg.cc:4031 tree-cfg.cc:4077 +#: tree-cfg.cc:4098 tree-cfg.cc:4152 tree-cfg.cc:4172 tree-cfg.cc:4208 +#: tree-cfg.cc:4229 tree-cfg.cc:4290 tree-cfg.cc:4365 tree-cfg.cc:4391 +#: tree-cfg.cc:4427 tree-cfg.cc:4476 tree-cfg.cc:4501 tree-cfg.cc:4576 +#: tree-cfg.cc:4662 #, gcc-internal-format msgid "type mismatch in %qs" msgstr "" -#: tree-cfg.cc:3275 +#: tree-cfg.cc:3279 #, gcc-internal-format msgid "invalid %qs offset operator" msgstr "" -#: tree-cfg.cc:3299 tree-cfg.cc:3325 +#: tree-cfg.cc:3303 tree-cfg.cc:3329 #, gcc-internal-format msgid "invalid address operand in %qs" msgstr "" -#: tree-cfg.cc:3306 tree-cfg.cc:3332 +#: tree-cfg.cc:3310 tree-cfg.cc:3336 #, gcc-internal-format msgid "invalid offset operand in %qs" msgstr "" -#: tree-cfg.cc:3313 tree-cfg.cc:3339 +#: tree-cfg.cc:3317 tree-cfg.cc:3343 #, gcc-internal-format msgid "invalid clique in %qs" msgstr "" -#: tree-cfg.cc:3346 tree-cfg.cc:4670 +#: tree-cfg.cc:3350 tree-cfg.cc:4674 #, gcc-internal-format msgid "%qs in gimple IL" msgstr "" -#: tree-cfg.cc:3357 +#: tree-cfg.cc:3361 #, gcc-internal-format msgid "%qs as base where non-register is required" msgstr "" -#: tree-cfg.cc:3372 +#: tree-cfg.cc:3376 #, gcc-internal-format msgid "invalid expression for min lvalue" msgstr "" -#: tree-cfg.cc:3423 +#: tree-cfg.cc:3427 #, gcc-internal-format msgid "gimple call has two targets" msgstr "" -#: tree-cfg.cc:3432 +#: tree-cfg.cc:3436 #, gcc-internal-format msgid "gimple call has no target" msgstr "" -#: tree-cfg.cc:3439 +#: tree-cfg.cc:3443 #, gcc-internal-format msgid "invalid function in gimple call" msgstr "" -#: tree-cfg.cc:3449 +#: tree-cfg.cc:3453 #, gcc-internal-format msgid "non-function in gimple call" msgstr "" -#: tree-cfg.cc:3460 +#: tree-cfg.cc:3464 #, gcc-internal-format msgid "invalid pure const state for function" msgstr "" -#: tree-cfg.cc:3472 +#: tree-cfg.cc:3476 #, gcc-internal-format msgid "invalid LHS in gimple call" msgstr "" -#: tree-cfg.cc:3480 +#: tree-cfg.cc:3484 #, gcc-internal-format msgid "LHS in %<noreturn%> call" msgstr "" -#: tree-cfg.cc:3494 +#: tree-cfg.cc:3498 #, gcc-internal-format msgid "invalid conversion in gimple call" msgstr "" -#: tree-cfg.cc:3503 +#: tree-cfg.cc:3507 #, gcc-internal-format msgid "invalid static chain in gimple call" msgstr "" -#: tree-cfg.cc:3514 +#: tree-cfg.cc:3518 #, gcc-internal-format msgid "static chain with function that doesn%'t use one" msgstr "" @@ -33381,562 +33495,562 @@ msgstr "" #. __builtin_unreachable internally, for example when IPA figures #. out a call cannot happen in a legal program. In such cases, #. we must make sure arguments are stripped off. -#: tree-cfg.cc:3533 +#: tree-cfg.cc:3537 #, gcc-internal-format msgid "%<__builtin_unreachable%> or %<__builtin_trap%> call with arguments" msgstr "" -#: tree-cfg.cc:3564 +#: tree-cfg.cc:3568 #, gcc-internal-format msgid "" "%<DEFERRED_INIT%> calls should have same constant size for the first " "argument and LHS" msgstr "" -#: tree-cfg.cc:3582 +#: tree-cfg.cc:3586 #, gcc-internal-format msgid "invalid argument to gimple call" msgstr "" -#: tree-cfg.cc:3609 +#: tree-cfg.cc:3613 #, gcc-internal-format msgid "invalid operands in gimple comparison" msgstr "" -#: tree-cfg.cc:3620 +#: tree-cfg.cc:3624 #, gcc-internal-format msgid "mismatching comparison operand types" msgstr "" -#: tree-cfg.cc:3637 +#: tree-cfg.cc:3641 #, gcc-internal-format msgid "unsupported operation or type for vector comparison returning a boolean" msgstr "" -#: tree-cfg.cc:3652 +#: tree-cfg.cc:3656 #, gcc-internal-format msgid "non-vector operands in vector comparison" msgstr "" -#: tree-cfg.cc:3661 +#: tree-cfg.cc:3665 #, gcc-internal-format msgid "invalid vector comparison resulting type" msgstr "" -#: tree-cfg.cc:3668 +#: tree-cfg.cc:3672 #, gcc-internal-format msgid "bogus comparison result type" msgstr "" -#: tree-cfg.cc:3690 +#: tree-cfg.cc:3694 #, gcc-internal-format msgid "non-register as LHS of unary operation" msgstr "" -#: tree-cfg.cc:3696 +#: tree-cfg.cc:3700 #, gcc-internal-format msgid "invalid operand in unary operation" msgstr "" -#: tree-cfg.cc:3719 +#: tree-cfg.cc:3723 #, gcc-internal-format msgid "invalid vector types in nop conversion" msgstr "" -#: tree-cfg.cc:3756 +#: tree-cfg.cc:3760 #, gcc-internal-format msgid "invalid types in nop conversion" msgstr "" -#: tree-cfg.cc:3771 +#: tree-cfg.cc:3775 #, gcc-internal-format msgid "invalid types in address space conversion" msgstr "" -#: tree-cfg.cc:3785 +#: tree-cfg.cc:3789 #, gcc-internal-format msgid "invalid types in fixed-point conversion" msgstr "" -#: tree-cfg.cc:3800 +#: tree-cfg.cc:3804 #, gcc-internal-format msgid "invalid types in conversion to floating-point" msgstr "" -#: tree-cfg.cc:3815 +#: tree-cfg.cc:3819 #, gcc-internal-format msgid "invalid types in conversion to integer" msgstr "" -#: tree-cfg.cc:3855 +#: tree-cfg.cc:3859 #, gcc-internal-format msgid "type mismatch in %qs expression" msgstr "" -#: tree-cfg.cc:3872 tree-cfg.cc:3886 tree-cfg.cc:4252 tree-cfg.cc:4274 +#: tree-cfg.cc:3876 tree-cfg.cc:3890 tree-cfg.cc:4256 tree-cfg.cc:4278 #, gcc-internal-format msgid "invalid types for %qs" msgstr "" -#: tree-cfg.cc:3897 +#: tree-cfg.cc:3901 #, gcc-internal-format msgid "%qs should be from a scalar to a like vector" msgstr "" -#: tree-cfg.cc:3911 +#: tree-cfg.cc:3915 #, gcc-internal-format msgid "non-trivial conversion in unary operation" msgstr "" -#: tree-cfg.cc:3936 +#: tree-cfg.cc:3940 #, gcc-internal-format msgid "non-register as LHS of binary operation" msgstr "" -#: tree-cfg.cc:3943 +#: tree-cfg.cc:3947 #, gcc-internal-format msgid "invalid operands in binary operation" msgstr "" -#: tree-cfg.cc:4048 +#: tree-cfg.cc:4052 #, gcc-internal-format msgid "invalid non-vector operands to %qs" msgstr "" -#: tree-cfg.cc:4059 +#: tree-cfg.cc:4063 #, gcc-internal-format msgid "invalid (pointer) operands %qs" msgstr "" -#: tree-cfg.cc:4294 +#: tree-cfg.cc:4298 #, gcc-internal-format msgid "vector type expected in %qs" msgstr "" -#: tree-cfg.cc:4307 +#: tree-cfg.cc:4311 #, gcc-internal-format msgid "type mismatch in binary expression" msgstr "" -#: tree-cfg.cc:4335 +#: tree-cfg.cc:4339 #, gcc-internal-format msgid "non-register as LHS of ternary operation" msgstr "" -#: tree-cfg.cc:4343 +#: tree-cfg.cc:4347 #, gcc-internal-format msgid "invalid operands in ternary operation" msgstr "" -#: tree-cfg.cc:4375 +#: tree-cfg.cc:4379 #, gcc-internal-format msgid "" "the first argument of a %qs must be of a boolean vector type of the same " "number of elements as the result" msgstr "" -#: tree-cfg.cc:4407 tree-cfg.cc:4484 +#: tree-cfg.cc:4411 tree-cfg.cc:4488 #, gcc-internal-format msgid "vector types expected in %qs" msgstr "" -#: tree-cfg.cc:4440 +#: tree-cfg.cc:4444 #, gcc-internal-format msgid "vectors with different element number found in %qs" msgstr "" -#: tree-cfg.cc:4456 +#: tree-cfg.cc:4460 #, gcc-internal-format msgid "invalid mask type in %qs" msgstr "" -#: tree-cfg.cc:4517 +#: tree-cfg.cc:4521 #, gcc-internal-format msgid "not allowed type combination in %qs" msgstr "" -#: tree-cfg.cc:4526 +#: tree-cfg.cc:4530 #, gcc-internal-format msgid "invalid position or size in %qs" msgstr "" -#: tree-cfg.cc:4532 +#: tree-cfg.cc:4536 #, gcc-internal-format msgid "%qs into non-mode-precision operand" msgstr "" -#: tree-cfg.cc:4542 +#: tree-cfg.cc:4546 #, gcc-internal-format msgid "insertion out of range in %qs" msgstr "" -#: tree-cfg.cc:4552 +#: tree-cfg.cc:4556 #, gcc-internal-format msgid "%qs not at element boundary" msgstr "" -#: tree-cfg.cc:4608 +#: tree-cfg.cc:4612 #, gcc-internal-format msgid "non-trivial conversion in %qs" msgstr "" -#: tree-cfg.cc:4617 +#: tree-cfg.cc:4621 #, gcc-internal-format msgid "%qs LHS in clobber statement" msgstr "" -#: tree-cfg.cc:4625 +#: tree-cfg.cc:4629 #, gcc-internal-format msgid "%qs LHS in assignment statement" msgstr "" -#: tree-cfg.cc:4644 +#: tree-cfg.cc:4648 #, gcc-internal-format msgid "invalid operand in %qs" msgstr "" -#: tree-cfg.cc:4676 +#: tree-cfg.cc:4680 #, gcc-internal-format msgid "invalid %qs size argument in load" msgstr "" -#: tree-cfg.cc:4695 tree-cfg.cc:4721 +#: tree-cfg.cc:4699 tree-cfg.cc:4725 #, gcc-internal-format msgid "invalid RHS for gimple memory store: %qs" msgstr "" -#: tree-cfg.cc:4755 tree-cfg.cc:4773 +#: tree-cfg.cc:4759 tree-cfg.cc:4777 #, gcc-internal-format msgid "incorrect type of vector %qs elements" msgstr "" -#: tree-cfg.cc:4764 tree-cfg.cc:4781 +#: tree-cfg.cc:4768 tree-cfg.cc:4785 #, gcc-internal-format msgid "incorrect number of vector %qs elements" msgstr "" -#: tree-cfg.cc:4789 +#: tree-cfg.cc:4793 #, gcc-internal-format msgid "incorrect type of vector CONSTRUCTOR elements" msgstr "" -#: tree-cfg.cc:4798 +#: tree-cfg.cc:4802 #, gcc-internal-format msgid "vector %qs with non-NULL element index" msgstr "" -#: tree-cfg.cc:4805 +#: tree-cfg.cc:4809 #, gcc-internal-format msgid "vector %qs element is not a GIMPLE value" msgstr "" -#: tree-cfg.cc:4814 +#: tree-cfg.cc:4818 #, gcc-internal-format msgid "non-vector %qs with elements" msgstr "" -#: tree-cfg.cc:4872 +#: tree-cfg.cc:4876 #, gcc-internal-format msgid "invalid operand in return statement" msgstr "" -#: tree-cfg.cc:4887 c/gimple-parser.cc:2580 +#: tree-cfg.cc:4891 c/gimple-parser.cc:2580 #, gcc-internal-format msgid "invalid conversion in return statement" msgstr "" -#: tree-cfg.cc:4911 +#: tree-cfg.cc:4915 #, gcc-internal-format msgid "goto destination is neither a label nor a pointer" msgstr "" -#: tree-cfg.cc:4930 +#: tree-cfg.cc:4934 #, gcc-internal-format msgid "invalid operand to switch statement" msgstr "" -#: tree-cfg.cc:4938 +#: tree-cfg.cc:4942 #, gcc-internal-format msgid "non-integral type switch statement" msgstr "" -#: tree-cfg.cc:4948 +#: tree-cfg.cc:4952 #, gcc-internal-format msgid "invalid default case label in switch statement" msgstr "" -#: tree-cfg.cc:4960 +#: tree-cfg.cc:4964 #, gcc-internal-format msgid "invalid %<CASE_CHAIN%>" msgstr "" -#: tree-cfg.cc:4966 +#: tree-cfg.cc:4970 #, gcc-internal-format msgid "invalid case label in switch statement" msgstr "" -#: tree-cfg.cc:4973 +#: tree-cfg.cc:4977 #, gcc-internal-format msgid "invalid case range in switch statement" msgstr "" -#: tree-cfg.cc:4983 +#: tree-cfg.cc:4987 #, gcc-internal-format msgid "type precision mismatch in switch statement" msgstr "" -#: tree-cfg.cc:4990 +#: tree-cfg.cc:4994 #, gcc-internal-format msgid "type mismatch for case label in switch statement" msgstr "" -#: tree-cfg.cc:4999 +#: tree-cfg.cc:5003 #, gcc-internal-format msgid "case labels not sorted in switch statement" msgstr "" -#: tree-cfg.cc:5042 +#: tree-cfg.cc:5046 #, gcc-internal-format msgid "label context is not the current function declaration" msgstr "" -#: tree-cfg.cc:5051 +#: tree-cfg.cc:5055 #, gcc-internal-format msgid "incorrect entry in %<label_to_block_map%>" msgstr "" -#: tree-cfg.cc:5061 +#: tree-cfg.cc:5065 #, gcc-internal-format msgid "incorrect setting of landing pad number" msgstr "" -#: tree-cfg.cc:5077 +#: tree-cfg.cc:5081 #, gcc-internal-format msgid "invalid comparison code in gimple cond" msgstr "" -#: tree-cfg.cc:5085 +#: tree-cfg.cc:5089 #, gcc-internal-format msgid "invalid labels in gimple cond" msgstr "" -#: tree-cfg.cc:5171 tree-cfg.cc:5180 +#: tree-cfg.cc:5175 tree-cfg.cc:5184 #, gcc-internal-format msgid "invalid %<PHI%> result" msgstr "" -#: tree-cfg.cc:5190 +#: tree-cfg.cc:5194 #, gcc-internal-format msgid "missing %<PHI%> def" msgstr "" -#: tree-cfg.cc:5204 +#: tree-cfg.cc:5208 #, gcc-internal-format msgid "invalid %<PHI%> argument" msgstr "" -#: tree-cfg.cc:5211 +#: tree-cfg.cc:5215 #, gcc-internal-format msgid "incompatible types in %<PHI%> argument %u" msgstr "" -#: tree-cfg.cc:5314 +#: tree-cfg.cc:5318 #, gcc-internal-format msgid "%<verify_gimple%> failed" msgstr "" -#: tree-cfg.cc:5372 +#: tree-cfg.cc:5376 #, gcc-internal-format msgid "dead statement in EH table" msgstr "" -#: tree-cfg.cc:5388 +#: tree-cfg.cc:5392 #, gcc-internal-format msgid "location references block not in block tree" msgstr "" -#: tree-cfg.cc:5437 +#: tree-cfg.cc:5441 #, gcc-internal-format msgid "local declaration from a different function" msgstr "" -#: tree-cfg.cc:5540 +#: tree-cfg.cc:5544 #, gcc-internal-format msgid "gimple_bb (phi) is set to a wrong basic block" msgstr "" -#: tree-cfg.cc:5549 +#: tree-cfg.cc:5553 #, gcc-internal-format msgid "PHI node with location" msgstr "" -#: tree-cfg.cc:5560 tree-cfg.cc:5607 +#: tree-cfg.cc:5564 tree-cfg.cc:5611 #, gcc-internal-format msgid "incorrect sharing of tree nodes" msgstr "" -#: tree-cfg.cc:5568 +#: tree-cfg.cc:5572 #, gcc-internal-format msgid "virtual PHI with argument locations" msgstr "" -#: tree-cfg.cc:5595 +#: tree-cfg.cc:5599 #, gcc-internal-format msgid "gimple_bb (stmt) is set to a wrong basic block" msgstr "" -#: tree-cfg.cc:5635 +#: tree-cfg.cc:5639 #, gcc-internal-format msgid "statement marked for throw, but doesn%'t" msgstr "" -#: tree-cfg.cc:5641 +#: tree-cfg.cc:5645 #, gcc-internal-format msgid "statement marked for throw in middle of block" msgstr "" -#: tree-cfg.cc:5663 +#: tree-cfg.cc:5667 #, gcc-internal-format msgid "verify_gimple failed" msgstr "" -#: tree-cfg.cc:5687 +#: tree-cfg.cc:5691 #, gcc-internal-format msgid "ENTRY_BLOCK has IL associated with it" msgstr "" -#: tree-cfg.cc:5694 +#: tree-cfg.cc:5698 #, gcc-internal-format msgid "EXIT_BLOCK has IL associated with it" msgstr "" -#: tree-cfg.cc:5701 +#: tree-cfg.cc:5705 #, gcc-internal-format, gfc-internal-format msgid "fallthru to exit from bb %d" msgstr "" -#: tree-cfg.cc:5707 +#: tree-cfg.cc:5711 #, gcc-internal-format msgid "entry block count not initialized" msgstr "" -#: tree-cfg.cc:5713 +#: tree-cfg.cc:5717 #, gcc-internal-format msgid "exit block count not initialized" msgstr "" -#: tree-cfg.cc:5720 +#: tree-cfg.cc:5724 #, gcc-internal-format msgid "probability of edge from entry block not initialized" msgstr "" -#: tree-cfg.cc:5735 +#: tree-cfg.cc:5739 #, gcc-internal-format, gfc-internal-format msgid "count of bb %d not initialized" msgstr "" -#: tree-cfg.cc:5741 +#: tree-cfg.cc:5745 #, gcc-internal-format, gfc-internal-format msgid "probability of edge %d->%d not initialized" msgstr "" -#: tree-cfg.cc:5761 +#: tree-cfg.cc:5765 #, gcc-internal-format msgid "nonlocal label %qD is not first in a sequence of labels in bb %d" msgstr "" -#: tree-cfg.cc:5768 +#: tree-cfg.cc:5772 #, gcc-internal-format msgid "EH landing pad label %qD is not first in a sequence of labels in bb %d" msgstr "" -#: tree-cfg.cc:5775 +#: tree-cfg.cc:5779 #, gcc-internal-format msgid "label %qD to block does not match in bb %d" msgstr "" -#: tree-cfg.cc:5782 +#: tree-cfg.cc:5786 #, gcc-internal-format msgid "label %qD has incorrect context in bb %d" msgstr "" -#: tree-cfg.cc:5797 +#: tree-cfg.cc:5801 #, gcc-internal-format, gfc-internal-format msgid "control flow in the middle of basic block %d" msgstr "" -#: tree-cfg.cc:5807 +#: tree-cfg.cc:5811 #, gcc-internal-format msgid "label %qD in the middle of basic block %d" msgstr "" -#: tree-cfg.cc:5835 +#: tree-cfg.cc:5839 #, gcc-internal-format, gfc-internal-format msgid "returns_twice call is %s in basic block %d" msgstr "" -#: tree-cfg.cc:5862 +#: tree-cfg.cc:5866 #, gcc-internal-format, gfc-internal-format msgid "fallthru edge after a control statement in bb %d" msgstr "" -#: tree-cfg.cc:5875 +#: tree-cfg.cc:5879 #, gcc-internal-format, gfc-internal-format msgid "true/false edge after a non-GIMPLE_COND in bb %d" msgstr "" -#: tree-cfg.cc:5898 tree-cfg.cc:5920 tree-cfg.cc:5937 tree-cfg.cc:6006 +#: tree-cfg.cc:5902 tree-cfg.cc:5924 tree-cfg.cc:5941 tree-cfg.cc:6010 #, gcc-internal-format, gfc-internal-format msgid "wrong outgoing edge flags at end of bb %d" msgstr "" -#: tree-cfg.cc:5908 +#: tree-cfg.cc:5912 #, gcc-internal-format, gfc-internal-format msgid "explicit goto at end of bb %d" msgstr "" -#: tree-cfg.cc:5942 +#: tree-cfg.cc:5946 #, gcc-internal-format, gfc-internal-format msgid "return edge does not point to exit in bb %d" msgstr "" -#: tree-cfg.cc:5972 +#: tree-cfg.cc:5976 #, gcc-internal-format msgid "found default case not at the start of case vector" msgstr "" -#: tree-cfg.cc:5980 +#: tree-cfg.cc:5984 #, gcc-internal-format msgid "case labels not sorted: " msgstr "" -#: tree-cfg.cc:5997 +#: tree-cfg.cc:6001 #, gcc-internal-format, gfc-internal-format msgid "extra outgoing edge %d->%d" msgstr "" -#: tree-cfg.cc:6020 +#: tree-cfg.cc:6024 #, gcc-internal-format, gfc-internal-format msgid "missing edge %i->%i" msgstr "" -#: tree-cfg.cc:9776 +#: tree-cfg.cc:9780 #, gcc-internal-format msgid "%<noreturn%> function does return" msgstr "" -#: tree-cfg.cc:9796 tree-cfg.cc:9831 +#: tree-cfg.cc:9800 tree-cfg.cc:9835 #, gcc-internal-format msgid "control reaches end of non-void function" msgstr "" -#: tree-cfg.cc:9897 +#: tree-cfg.cc:9901 #, gcc-internal-format msgid "" "ignoring return value of %qD declared with attribute %<warn_unused_result%>" msgstr "" -#: tree-cfg.cc:9902 cp/cvt.cc:1123 +#: tree-cfg.cc:9906 cp/cvt.cc:1137 #, gcc-internal-format msgid "" "ignoring return value of function declared with attribute " @@ -34015,95 +34129,95 @@ msgstr "" msgid "BB %i has incorrect fallthru edge" msgstr "" -#: tree-inline.cc:3912 +#: tree-inline.cc:3925 #, gcc-internal-format msgid "function %q+F can never be copied because it receives a non-local goto" msgstr "" -#: tree-inline.cc:3919 +#: tree-inline.cc:3932 #, gcc-internal-format msgid "" "function %q+F can never be copied because it saves address of local label in " "a static variable" msgstr "" -#: tree-inline.cc:3959 +#: tree-inline.cc:3972 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses alloca (override using " "the always_inline attribute)" msgstr "" -#: tree-inline.cc:3973 +#: tree-inline.cc:3986 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses setjmp" msgstr "" -#: tree-inline.cc:3987 +#: tree-inline.cc:4000 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses variable argument lists" msgstr "" -#: tree-inline.cc:3999 +#: tree-inline.cc:4012 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses setjmp-longjmp exception " "handling" msgstr "" -#: tree-inline.cc:4007 +#: tree-inline.cc:4020 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses non-local goto" msgstr "" -#: tree-inline.cc:4019 +#: tree-inline.cc:4032 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses %<__builtin_return%> or " "%<__builtin_apply_args%>" msgstr "" -#: tree-inline.cc:4039 +#: tree-inline.cc:4052 #, gcc-internal-format msgid "function %q+F can never be inlined because it contains a computed goto" msgstr "" -#: tree-inline.cc:4085 +#: tree-inline.cc:4098 #, gcc-internal-format msgid "function %q+F can never be inlined because it has a VLA argument" msgstr "" -#: tree-inline.cc:4152 +#: tree-inline.cc:4165 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it is suppressed using %<-fno-" "inline%>" msgstr "" -#: tree-inline.cc:4160 +#: tree-inline.cc:4173 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses attributes conflicting " "with inlining" msgstr "" -#: tree-inline.cc:4841 +#: tree-inline.cc:4854 #, gcc-internal-format msgid "inlining failed in call to %<always_inline%> %q+F: %s" msgstr "" -#: tree-inline.cc:4844 tree-inline.cc:4865 +#: tree-inline.cc:4857 tree-inline.cc:4878 #, gcc-internal-format msgid "called from here" msgstr "" -#: tree-inline.cc:4847 tree-inline.cc:4868 +#: tree-inline.cc:4860 tree-inline.cc:4881 #, gcc-internal-format msgid "called from this function" msgstr "" -#: tree-inline.cc:4861 +#: tree-inline.cc:4874 #, gcc-internal-format msgid "inlining failed in call to %q+F: %s" msgstr "" @@ -34133,12 +34247,17 @@ msgstr "" msgid "%s from %s called in %s" msgstr "" -#: tree-profile.cc:686 +#: tree-profile.cc:899 +#, gcc-internal-format, gfc-internal-format +msgid "Too many conditions (found %u); giving up coverage" +msgstr "" + +#: tree-profile.cc:1757 #, gcc-internal-format msgid "invalid regular expression %qs in %qs" msgstr "" -#: tree-profile.cc:785 +#: tree-profile.cc:1856 #, gcc-internal-format msgid "target does not support atomic profile update, single mode is selected" msgstr "" @@ -34153,42 +34272,42 @@ msgstr "" msgid "invalid fn spec attribute \"%s\" arg %i" msgstr "" -#: tree-ssa-ccp.cc:4679 c-family/c-common.cc:5911 +#: tree-ssa-ccp.cc:4681 c-family/c-common.cc:5911 #, gcc-internal-format msgid "%qs pointer is null" msgstr "" -#: tree-ssa-ccp.cc:4682 c-family/c-common.cc:5914 +#: tree-ssa-ccp.cc:4684 c-family/c-common.cc:5914 #, gcc-internal-format msgid "in a call to non-static member function %qD" msgstr "" -#: tree-ssa-ccp.cc:4688 c-family/c-common.cc:5920 +#: tree-ssa-ccp.cc:4690 c-family/c-common.cc:5920 #, gcc-internal-format, gfc-internal-format msgid "argument %u null where non-null expected" msgstr "" -#: tree-ssa-ccp.cc:4694 +#: tree-ssa-ccp.cc:4696 #, gcc-internal-format msgid "in a call to built-in function %qD" msgstr "" -#: tree-ssa-ccp.cc:4698 c-family/c-common.cc:5924 +#: tree-ssa-ccp.cc:4700 c-family/c-common.cc:5924 #, gcc-internal-format msgid "in a call to function %qD declared %qs" msgstr "" -#: tree-ssa-loop-niter.cc:3890 +#: tree-ssa-loop-niter.cc:3889 #, gcc-internal-format, gfc-internal-format msgid "iteration %s invokes undefined behavior" msgstr "" -#: tree-ssa-loop-niter.cc:3891 +#: tree-ssa-loop-niter.cc:3890 #, gcc-internal-format msgid "within this loop" msgstr "" -#: tree-ssa-loop-prefetch.cc:2100 +#: tree-ssa-loop-prefetch.cc:2102 #, gcc-internal-format msgid "%<l1-cache-size%> parameter is not a power of two %d" msgstr "" @@ -34292,7 +34411,7 @@ msgid "" "writing between %wu and %wu bytes into a region of size between %wu and %wu" msgstr "" -#: tree-ssa-strlen.cc:3090 +#: tree-ssa-strlen.cc:3092 #, gcc-internal-format msgid "" "%qD output truncated before terminating nul copying %E byte from a string of " @@ -34303,7 +34422,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: tree-ssa-strlen.cc:3106 +#: tree-ssa-strlen.cc:3108 #, gcc-internal-format msgid "%qD output truncated copying %E byte from a string of length %wu" msgid_plural "" @@ -34311,14 +34430,14 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: tree-ssa-strlen.cc:3113 +#: tree-ssa-strlen.cc:3115 #, gcc-internal-format msgid "" "%qD output truncated copying between %wu and %wu bytes from a string of " "length %wu" msgstr "" -#: tree-ssa-strlen.cc:3125 +#: tree-ssa-strlen.cc:3127 #, gcc-internal-format msgid "%qD output may be truncated copying %E byte from a string of length %wu" msgid_plural "" @@ -34326,57 +34445,57 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: tree-ssa-strlen.cc:3132 tree-ssa-strlen.cc:3148 +#: tree-ssa-strlen.cc:3134 tree-ssa-strlen.cc:3150 #, gcc-internal-format msgid "" "%qD output may be truncated copying between %wu and %wu bytes from a string " "of length %wu" msgstr "" -#: tree-ssa-strlen.cc:3302 +#: tree-ssa-strlen.cc:3304 #, gcc-internal-format msgid "" "%qD output truncated before terminating nul copying as many bytes from a " "string as its length" msgstr "" -#: tree-ssa-strlen.cc:3315 +#: tree-ssa-strlen.cc:3317 #, gcc-internal-format msgid "%qD specified bound depends on the length of the source argument" msgstr "" -#: tree-ssa-strlen.cc:3323 +#: tree-ssa-strlen.cc:3325 #, gcc-internal-format msgid "length computed here" msgstr "" -#: tree-ssa-strlen.cc:4280 +#: tree-ssa-strlen.cc:4282 #, gcc-internal-format msgid "" "%qD of a string of length %wu or more and an array of size %wu evaluates to " "nonzero" msgstr "" -#: tree-ssa-strlen.cc:4282 +#: tree-ssa-strlen.cc:4284 #, gcc-internal-format msgid "" "%qD of a string of length %wu and an array of size %wu evaluates to nonzero" msgstr "" -#: tree-ssa-strlen.cc:4289 +#: tree-ssa-strlen.cc:4291 #, gcc-internal-format msgid "" "%qD of strings of length %wu and %wu and bound of %wu evaluates to nonzero" msgstr "" -#: tree-ssa-strlen.cc:4294 +#: tree-ssa-strlen.cc:4296 #, gcc-internal-format msgid "" "%qD of a string of length %wu, an array of size %wu and bound of %wu " "evaluates to nonzero" msgstr "" -#: tree-ssa-strlen.cc:4305 +#: tree-ssa-strlen.cc:4307 #, gcc-internal-format msgid "in this expression" msgstr "" @@ -34401,7 +34520,7 @@ msgstr "" msgid "%qs may be used uninitialized" msgstr "" -#: tree-ssa-uninit.cc:337 varasm.cc:363 varasm.cc:7973 +#: tree-ssa-uninit.cc:337 varasm.cc:363 varasm.cc:8019 #, gcc-internal-format msgid "%qD was declared here" msgstr "" @@ -34646,128 +34765,128 @@ msgstr "" msgid "side-effects element in no-side-effects CONSTRUCTOR" msgstr "" -#: tree.cc:7340 m2/gm2-gcc/m2type.cc:215 +#: tree.cc:7341 m2/gm2-gcc/m2type.cc:215 #, gcc-internal-format msgid "arrays of functions are not meaningful" msgstr "" -#: tree.cc:7495 +#: tree.cc:7496 #, gcc-internal-format msgid "function return type cannot be function" msgstr "" -#: tree.cc:8955 tree.cc:9040 tree.cc:9103 +#: tree.cc:8956 tree.cc:9041 tree.cc:9104 #, gcc-internal-format, gfc-internal-format msgid "tree check: %s, have %s in %s, at %s:%d" msgstr "" -#: tree.cc:8992 +#: tree.cc:8993 #, gcc-internal-format, gfc-internal-format msgid "tree check: expected none of %s, have %s in %s, at %s:%d" msgstr "" -#: tree.cc:9005 +#: tree.cc:9006 #, gcc-internal-format msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: tree.cc:9054 +#: tree.cc:9055 #, gcc-internal-format msgid "tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: tree.cc:9067 +#: tree.cc:9068 #, gcc-internal-format msgid "tree check: expected %<omp_clause %s%>, have %qs in %s, at %s:%d" msgstr "" -#: tree.cc:9129 +#: tree.cc:9130 #, gcc-internal-format msgid "" "tree check: expected tree that contains %qs structure, have %qs in %s, at %s:" "%d" msgstr "" -#: tree.cc:9143 +#: tree.cc:9144 #, gcc-internal-format msgid "" "tree check: accessed elt %d of %<tree_int_cst%> with %d elts in %s, at %s:%d" msgstr "" -#: tree.cc:9156 +#: tree.cc:9157 #, gcc-internal-format msgid "" "tree check: accessed elt %d of %<tree_vec%> with %d elts in %s, at %s:%d" msgstr "" -#: tree.cc:9169 +#: tree.cc:9170 #, gcc-internal-format, gfc-internal-format msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" msgstr "" -#: tree.cc:9182 +#: tree.cc:9183 #, gcc-internal-format msgid "" "tree check: accessed operand %d of %<omp_clause %s%> with %d operands in %s, " "at %s:%d" msgstr "" -#: tree.cc:12436 +#: tree.cc:12437 #, gcc-internal-format msgid "%qD is deprecated: %s" msgstr "" -#: tree.cc:12439 +#: tree.cc:12440 #, gcc-internal-format msgid "%qD is deprecated" msgstr "" -#: tree.cc:12462 +#: tree.cc:12463 #, gcc-internal-format msgid "%qE is deprecated: %s" msgstr "" -#: tree.cc:12465 +#: tree.cc:12466 #, gcc-internal-format msgid "%qE is deprecated" msgstr "" -#: tree.cc:12471 +#: tree.cc:12472 #, gcc-internal-format, gfc-internal-format msgid "type is deprecated: %s" msgstr "" -#: tree.cc:12474 +#: tree.cc:12475 #, gcc-internal-format msgid "type is deprecated" msgstr "" -#: tree.cc:12516 +#: tree.cc:12517 #, gcc-internal-format msgid "%qD is unavailable: %s" msgstr "" -#: tree.cc:12518 +#: tree.cc:12519 #, gcc-internal-format msgid "%qD is unavailable" msgstr "" -#: tree.cc:12539 +#: tree.cc:12540 #, gcc-internal-format msgid "%qE is unavailable: %s" msgstr "" -#: tree.cc:12541 +#: tree.cc:12542 #, gcc-internal-format msgid "%qE is unavailable" msgstr "" -#: tree.cc:12546 +#: tree.cc:12547 #, gcc-internal-format, gfc-internal-format msgid "type is unavailable: %s" msgstr "" -#: tree.cc:12548 +#: tree.cc:12549 #, gcc-internal-format msgid "type is unavailable" msgstr "" @@ -34792,267 +34911,267 @@ msgstr "" #. - vector types may differ by TYPE_VECTOR_OPAQUE #. #. Convenience macro for matching individual fields. -#: tree.cc:13476 +#: tree.cc:13477 #, gcc-internal-format, gfc-internal-format msgid "type variant differs by %s" msgstr "" -#: tree.cc:13521 +#: tree.cc:13522 #, gcc-internal-format msgid "type variant has different %<TYPE_SIZE_UNIT%>" msgstr "" -#: tree.cc:13523 +#: tree.cc:13524 #, gcc-internal-format msgid "type variant%'s %<TYPE_SIZE_UNIT%>" msgstr "" -#: tree.cc:13525 +#: tree.cc:13526 #, gcc-internal-format msgid "type%'s %<TYPE_SIZE_UNIT%>" msgstr "" -#: tree.cc:13550 +#: tree.cc:13551 #, gcc-internal-format msgid "type variant with %<TYPE_ALIAS_SET_KNOWN_P%>" msgstr "" -#: tree.cc:13563 +#: tree.cc:13564 #, gcc-internal-format msgid "type variant has different %<TYPE_VFIELD%>" msgstr "" -#: tree.cc:13600 +#: tree.cc:13601 #, gcc-internal-format msgid "type variant has different %<TYPE_BINFO%>" msgstr "" -#: tree.cc:13602 +#: tree.cc:13603 #, gcc-internal-format msgid "type variant%'s %<TYPE_BINFO%>" msgstr "" -#: tree.cc:13604 +#: tree.cc:13605 #, gcc-internal-format msgid "type%'s %<TYPE_BINFO%>" msgstr "" -#: tree.cc:13643 +#: tree.cc:13644 #, gcc-internal-format msgid "type variant has different %<TYPE_FIELDS%>" msgstr "" -#: tree.cc:13645 +#: tree.cc:13646 #, gcc-internal-format msgid "first mismatch is field" msgstr "" -#: tree.cc:13647 +#: tree.cc:13648 #, gcc-internal-format msgid "and field" msgstr "" -#: tree.cc:13664 +#: tree.cc:13665 #, gcc-internal-format msgid "type variant has different %<TREE_TYPE%>" msgstr "" -#: tree.cc:13666 tree.cc:13677 +#: tree.cc:13667 tree.cc:13678 #, gcc-internal-format msgid "type variant%'s %<TREE_TYPE%>" msgstr "" -#: tree.cc:13668 tree.cc:13679 +#: tree.cc:13669 tree.cc:13680 #, gcc-internal-format msgid "type%'s %<TREE_TYPE%>" msgstr "" -#: tree.cc:13675 +#: tree.cc:13676 #, gcc-internal-format msgid "type is not compatible with its variant" msgstr "" -#: tree.cc:14000 +#: tree.cc:14001 #, gcc-internal-format, gfc-internal-format msgid "type %s is not an opaque type" msgstr "" -#: tree.cc:14006 +#: tree.cc:14007 #, gcc-internal-format, gfc-internal-format msgid "type %s is not with opaque mode" msgstr "" -#: tree.cc:14012 +#: tree.cc:14013 #, gcc-internal-format msgid "type %s differs by %<TYPE_MODE%>" msgstr "" -#: tree.cc:14020 +#: tree.cc:14021 #, gcc-internal-format msgid "type %s differs by %<TYPE_SIZE%>" msgstr "" -#: tree.cc:14026 +#: tree.cc:14027 #, gcc-internal-format msgid "type %s differs by %<TYPE_ALIGN%>" msgstr "" -#: tree.cc:14032 +#: tree.cc:14033 #, gcc-internal-format msgid "type %s differs by %<TYPE_USER_ALIGN%>" msgstr "" -#: tree.cc:14062 +#: tree.cc:14063 #, gcc-internal-format msgid "main variant is not defined" msgstr "" -#: tree.cc:14067 +#: tree.cc:14068 #, gcc-internal-format msgid "%<TYPE_MAIN_VARIANT%> has different %<TYPE_MAIN_VARIANT%>" msgstr "" -#: tree.cc:14078 +#: tree.cc:14079 #, gcc-internal-format msgid "%<TYPE_CANONICAL%> has different %<TYPE_CANONICAL%>" msgstr "" -#: tree.cc:14097 +#: tree.cc:14098 #, gcc-internal-format msgid "%<TYPE_CANONICAL%> is not compatible" msgstr "" -#: tree.cc:14105 +#: tree.cc:14106 #, gcc-internal-format msgid "%<TYPE_MODE%> of %<TYPE_CANONICAL%> is not compatible" msgstr "" -#: tree.cc:14111 +#: tree.cc:14112 #, gcc-internal-format msgid "%<TYPE_CANONICAL%> of main variant is not main variant" msgstr "" -#: tree.cc:14127 +#: tree.cc:14128 #, gcc-internal-format msgid "%<TYPE_VFIELD%> is not %<FIELD_DECL%> nor %<TREE_LIST%>" msgstr "" -#: tree.cc:14137 +#: tree.cc:14138 #, gcc-internal-format msgid "%<TYPE_NEXT_PTR_TO%> is not %<POINTER_TYPE%>" msgstr "" -#: tree.cc:14147 +#: tree.cc:14148 #, gcc-internal-format msgid "%<TYPE_NEXT_REF_TO%> is not %<REFERENCE_TYPE%>" msgstr "" -#: tree.cc:14168 +#: tree.cc:14169 #, gcc-internal-format msgid "%<TYPE_BINFO%> is not %<TREE_BINFO%>" msgstr "" -#: tree.cc:14174 +#: tree.cc:14175 #, gcc-internal-format msgid "%<TYPE_BINFO%> type is not %<TYPE_MAIN_VARIANT%>" msgstr "" -#: tree.cc:14185 +#: tree.cc:14186 #, gcc-internal-format msgid "%<TYPE_METHOD_BASETYPE%> is not record nor union" msgstr "" -#: tree.cc:14196 +#: tree.cc:14197 #, gcc-internal-format msgid "%<TYPE_OFFSET_BASETYPE%> is not record nor union" msgstr "" -#: tree.cc:14214 +#: tree.cc:14215 #, gcc-internal-format msgid "%<TYPE_ARRAY_MAX_SIZE%> not %<INTEGER_CST%>" msgstr "" -#: tree.cc:14221 +#: tree.cc:14222 #, gcc-internal-format msgid "%<TYPE_MAX_VALUE_RAW%> non-NULL" msgstr "" -#: tree.cc:14228 +#: tree.cc:14229 #, gcc-internal-format msgid "%<TYPE_LANG_SLOT_1 (binfo)%> field is non-NULL" msgstr "" -#: tree.cc:14244 +#: tree.cc:14245 #, gcc-internal-format msgid "enum value is not %<CONST_DECL%> or %<INTEGER_CST%>" msgstr "" -#: tree.cc:14253 +#: tree.cc:14254 #, gcc-internal-format msgid "enum value type is not %<INTEGER_TYPE%> nor convertible to the enum" msgstr "" -#: tree.cc:14261 +#: tree.cc:14262 #, gcc-internal-format msgid "enum value name is not %<IDENTIFIER_NODE%>" msgstr "" -#: tree.cc:14271 +#: tree.cc:14272 #, gcc-internal-format msgid "array %<TYPE_DOMAIN%> is not integer type" msgstr "" -#: tree.cc:14280 +#: tree.cc:14281 #, gcc-internal-format msgid "%<TYPE_FIELDS%> defined in incomplete type" msgstr "" -#: tree.cc:14302 +#: tree.cc:14303 #, gcc-internal-format msgid "wrong tree in %<TYPE_FIELDS%> list" msgstr "" -#: tree.cc:14318 +#: tree.cc:14319 #, gcc-internal-format msgid "%<TYPE_CACHED_VALUES_P%> is %i while %<TYPE_CACHED_VALUES%> is %p" msgstr "" -#: tree.cc:14325 +#: tree.cc:14326 #, gcc-internal-format msgid "%<TYPE_CACHED_VALUES%> is not %<TREE_VEC%>" msgstr "" -#: tree.cc:14338 +#: tree.cc:14339 #, gcc-internal-format msgid "wrong %<TYPE_CACHED_VALUES%> entry" msgstr "" -#: tree.cc:14351 +#: tree.cc:14352 #, gcc-internal-format msgid "%<TREE_PURPOSE%> is non-NULL in %<TYPE_ARG_TYPES%> list" msgstr "" -#: tree.cc:14357 +#: tree.cc:14358 #, gcc-internal-format msgid "wrong entry in %<TYPE_ARG_TYPES%> list" msgstr "" -#: tree.cc:14364 +#: tree.cc:14365 #, gcc-internal-format msgid "%<TYPE_VALUES_RAW%> field is non-NULL" msgstr "" -#: tree.cc:14377 +#: tree.cc:14378 #, gcc-internal-format msgid "%<TYPE_CACHED_VALUES_P%> is set while it should not be" msgstr "" -#: tree.cc:14387 +#: tree.cc:14388 #, gcc-internal-format msgid "%<TYPE_METHOD_BASETYPE%> is not main variant" msgstr "" -#: tsan.cc:506 +#: tsan.cc:509 #, gcc-internal-format msgid "%qs is not supported with %qs" msgstr "" @@ -35264,7 +35383,7 @@ msgstr "" msgid "%qs symbol %q+D must have static linkage" msgstr "" -#: varasm.cc:6417 config/nvptx/nvptx.cc:7591 +#: varasm.cc:6417 config/nvptx/nvptx.cc:7592 #, gcc-internal-format msgid "alias definitions not supported in this configuration" msgstr "" @@ -35274,7 +35393,7 @@ msgstr "" msgid "visibility attribute not supported in this configuration; ignored" msgstr "" -#: varasm.cc:7969 +#: varasm.cc:8015 #, gcc-internal-format msgid "" "%+qD without %<retain%> attribute and %qD with %<retain%> attribute are " @@ -35491,7 +35610,7 @@ msgstr "" msgid "%qE attribute ignored because %qD is not a local variable" msgstr "" -#: c-family/c-attribs.cc:1952 config/i386/i386-options.cc:4154 +#: c-family/c-attribs.cc:1952 config/i386/i386-options.cc:4169 #, gcc-internal-format msgid "%qE attribute have effect only on public objects" msgstr "" @@ -35675,7 +35794,7 @@ msgid "ignoring %qE attribute not set on a variable" msgstr "" #: c-family/c-attribs.cc:2877 config/bfin/bfin.cc:4825 -#: config/loongarch/loongarch.cc:8095 +#: config/loongarch/loongarch.cc:7956 #, gcc-internal-format msgid "%qE attribute cannot be specified for local variables" msgstr "" @@ -35999,7 +36118,7 @@ msgstr "" msgid "%qE argument is not a function" msgstr "" -#: c-family/c-attribs.cc:4447 cp/name-lookup.cc:6377 +#: c-family/c-attribs.cc:4447 cp/name-lookup.cc:6411 #, gcc-internal-format msgid "deprecated message is not a string" msgstr "" @@ -36604,7 +36723,7 @@ msgstr "" msgid "duplicate case value" msgstr "" -#: c-family/c-common.cc:5264 c-family/c-warn.cc:2652 +#: c-family/c-common.cc:5264 c-family/c-warn.cc:2651 #, gcc-internal-format msgid "previously used here" msgstr "" @@ -36677,16 +36796,16 @@ msgstr "" #: c-family/c-common.cc:6306 c-family/c-common.cc:7228 #: c-family/c-common.cc:7275 c-family/c-common.cc:7354 -#: c-family/c-common.cc:7437 c-family/c-common.cc:8070 -#: config/aarch64/aarch64-sve-builtins.cc:2987 +#: c-family/c-common.cc:7437 c-family/c-common.cc:8080 +#: config/aarch64/aarch64-sve-builtins.cc:3026 #: config/arm/arm-mve-builtins.cc:1570 c/c-typeck.cc:3918 #, gcc-internal-format msgid "too few arguments to function %qE" msgstr "" #: c-family/c-common.cc:6311 c-family/c-common.cc:7281 -#: c-family/c-common.cc:7463 c-family/c-common.cc:8072 -#: config/aarch64/aarch64-sve-builtins.cc:2989 +#: c-family/c-common.cc:7463 c-family/c-common.cc:8082 +#: config/aarch64/aarch64-sve-builtins.cc:3028 #: config/arm/arm-mve-builtins.cc:1572 c/c-typeck.cc:3777 #, gcc-internal-format msgid "too many arguments to function %qE" @@ -36907,73 +37026,73 @@ msgstr "" msgid "invalid memory model argument %d of %qE" msgstr "" -#: c-family/c-common.cc:8304 +#: c-family/c-common.cc:8314 #, gcc-internal-format msgid "" "this target does not define a speculation barrier; your program will still " "execute correctly, but incorrect speculation may not be restricted" msgstr "" -#: c-family/c-common.cc:8946 +#: c-family/c-common.cc:8968 #, gcc-internal-format msgid "index value is out of bound" msgstr "" -#: c-family/c-common.cc:8988 c-family/c-common.cc:9037 -#: c-family/c-common.cc:9053 +#: c-family/c-common.cc:9010 c-family/c-common.cc:9059 +#: c-family/c-common.cc:9075 #, gcc-internal-format msgid "conversion of scalar %qT to vector %qT involves truncation" msgstr "" #. Reject arguments that are built-in functions with #. no library fallback. -#: c-family/c-common.cc:9141 d/intrinsics.cc:1459 +#: c-family/c-common.cc:9163 d/intrinsics.cc:1459 #: rust/backend/rust-tree.cc:3497 #, gcc-internal-format msgid "built-in function %qE must be directly called" msgstr "" -#: c-family/c-common.cc:9161 +#: c-family/c-common.cc:9183 #, gcc-internal-format msgid "size of array %qE is not a constant expression" msgstr "" -#: c-family/c-common.cc:9164 +#: c-family/c-common.cc:9186 #, gcc-internal-format msgid "size of array is not a constant expression" msgstr "" -#: c-family/c-common.cc:9168 +#: c-family/c-common.cc:9190 #, gcc-internal-format msgid "size %qE of array %qE is negative" msgstr "" -#: c-family/c-common.cc:9171 +#: c-family/c-common.cc:9193 #, gcc-internal-format msgid "size %qE of array is negative" msgstr "" -#: c-family/c-common.cc:9176 +#: c-family/c-common.cc:9198 #, gcc-internal-format msgid "size %qE of array %qE exceeds maximum object size %qE" msgstr "" -#: c-family/c-common.cc:9179 +#: c-family/c-common.cc:9201 #, gcc-internal-format msgid "size %qE of array exceeds maximum object size %qE" msgstr "" -#: c-family/c-common.cc:9184 +#: c-family/c-common.cc:9206 #, gcc-internal-format msgid "size of array %qE exceeds maximum object size %qE" msgstr "" -#: c-family/c-common.cc:9187 +#: c-family/c-common.cc:9209 #, gcc-internal-format msgid "size of array exceeds maximum object size %qE" msgstr "" -#: c-family/c-common.cc:9258 +#: c-family/c-common.cc:9280 #, gcc-internal-format msgid "" "environment variable %qs must expand to a non-negative integer less than or " @@ -37576,126 +37695,126 @@ msgid "ignoring %<#pragma %s %s%>" msgstr "" #. ... or not. -#: c-family/c-lex.cc:663 c-family/c-lex.cc:1602 +#: c-family/c-lex.cc:683 c-family/c-lex.cc:1622 #, gcc-internal-format msgid "stray %<@%> in program" msgstr "" -#: c-family/c-lex.cc:678 +#: c-family/c-lex.cc:698 #, gcc-internal-format msgid "stray %qs in program" msgstr "" -#: c-family/c-lex.cc:688 +#: c-family/c-lex.cc:708 #, gcc-internal-format, gfc-internal-format msgid "missing terminating %c character" msgstr "" -#: c-family/c-lex.cc:690 +#: c-family/c-lex.cc:710 #, gcc-internal-format msgid "stray %qc in program" msgstr "" -#: c-family/c-lex.cc:695 +#: c-family/c-lex.cc:715 #, gcc-internal-format msgid "stray %<\\%o%> in program" msgstr "" -#: c-family/c-lex.cc:1014 +#: c-family/c-lex.cc:1034 #, gcc-internal-format msgid "integer constant is too large for %<unsigned _BitInt(%d)%> type" msgstr "" -#: c-family/c-lex.cc:1017 +#: c-family/c-lex.cc:1037 #, gcc-internal-format msgid "integer constant is too large for %<_BitInt(%d)%> type" msgstr "" -#: c-family/c-lex.cc:1025 c/c-decl.cc:12651 +#: c-family/c-lex.cc:1045 c/c-decl.cc:12651 #, gcc-internal-format msgid "%<_BitInt(%d)%> is not supported on this target" msgstr "" -#: c-family/c-lex.cc:1077 +#: c-family/c-lex.cc:1097 #, gcc-internal-format msgid "this decimal constant is unsigned only in ISO C90" msgstr "" -#: c-family/c-lex.cc:1081 +#: c-family/c-lex.cc:1101 #, gcc-internal-format msgid "this decimal constant would be unsigned in ISO C90" msgstr "" -#: c-family/c-lex.cc:1109 +#: c-family/c-lex.cc:1129 #, gcc-internal-format msgid "integer constant is too large for %<unsigned long%> type" msgstr "" -#: c-family/c-lex.cc:1149 +#: c-family/c-lex.cc:1169 #, gcc-internal-format msgid "unsuffixed floating constant" msgstr "" -#: c-family/c-lex.cc:1163 +#: c-family/c-lex.cc:1183 #, gcc-internal-format msgid "decimal floating-point not supported for this target" msgstr "" -#: c-family/c-lex.cc:1186 c-family/c-lex.cc:1214 c-family/c-lex.cc:1252 +#: c-family/c-lex.cc:1206 c-family/c-lex.cc:1234 c-family/c-lex.cc:1272 #, gcc-internal-format msgid "unsupported non-standard suffix on floating constant" msgstr "" -#: c-family/c-lex.cc:1191 c-family/c-lex.cc:1245 c-family/c-lex.cc:1257 +#: c-family/c-lex.cc:1211 c-family/c-lex.cc:1265 c-family/c-lex.cc:1277 #, gcc-internal-format msgid "non-standard suffix on floating constant" msgstr "" -#: c-family/c-lex.cc:1223 c-family/c-lex.cc:1227 c-family/c-lex.cc:1232 +#: c-family/c-lex.cc:1243 c-family/c-lex.cc:1247 c-family/c-lex.cc:1252 #, gcc-internal-format msgid "non-standard suffix on floating constant before C23" msgstr "" -#: c-family/c-lex.cc:1239 +#: c-family/c-lex.cc:1259 #, gcc-internal-format msgid "" "%<f%d%> or %<F%d%> suffix on floating constant only available with %<-std=c+" "+2b%> or %<-std=gnu++2b%>" msgstr "" -#: c-family/c-lex.cc:1260 +#: c-family/c-lex.cc:1280 #, gcc-internal-format msgid "" "%<bf16%> or %<BF16%> suffix on floating constant only available with %<-" "std=c++2b%> or %<-std=gnu++2b%>" msgstr "" -#: c-family/c-lex.cc:1340 c-family/c-lex.cc:1343 +#: c-family/c-lex.cc:1360 c-family/c-lex.cc:1363 #, gcc-internal-format msgid "floating constant exceeds range of %qT" msgstr "" -#: c-family/c-lex.cc:1358 +#: c-family/c-lex.cc:1378 #, gcc-internal-format msgid "floating constant truncated to zero" msgstr "" -#: c-family/c-lex.cc:1559 +#: c-family/c-lex.cc:1579 #, gcc-internal-format msgid "repeated %<@%> before Objective-C string" msgstr "" -#: c-family/c-lex.cc:1578 c/c-parser.cc:8928 +#: c-family/c-lex.cc:1598 c/c-parser.cc:8926 #, gcc-internal-format msgid "unsupported non-standard concatenation of string literals" msgstr "" -#: c-family/c-lex.cc:1614 c/c-parser.cc:8949 +#: c-family/c-lex.cc:1634 c/c-parser.cc:8947 #, gcc-internal-format msgid "traditional C rejects string constant concatenation" msgstr "" -#: c-family/c-omp.cc:131 cp/pt.cc:19120 +#: c-family/c-omp.cc:131 cp/pt.cc:19123 #, gcc-internal-format msgid "" "%<#pragma omp critical%> with %<hint%> clause requires a name, except when " @@ -37755,7 +37874,7 @@ msgstr "" msgid "%<iterator%> modifier may not be specified on %<depobj%> construct" msgstr "" -#: c-family/c-omp.cc:969 cp/semantics.cc:10852 +#: c-family/c-omp.cc:969 cp/semantics.cc:10921 #, gcc-internal-format msgid "invalid type for iteration variable %qE" msgstr "" @@ -37770,17 +37889,17 @@ msgstr "" msgid "%qE is not initialized" msgstr "" -#: c-family/c-omp.cc:1011 cp/semantics.cc:10744 +#: c-family/c-omp.cc:1011 cp/semantics.cc:10813 #, gcc-internal-format msgid "missing controlling predicate" msgstr "" -#: c-family/c-omp.cc:1117 cp/semantics.cc:10340 +#: c-family/c-omp.cc:1117 cp/semantics.cc:10409 #, gcc-internal-format msgid "invalid controlling predicate" msgstr "" -#: c-family/c-omp.cc:1124 cp/semantics.cc:10750 +#: c-family/c-omp.cc:1124 cp/semantics.cc:10819 #, gcc-internal-format msgid "missing increment expression" msgstr "" @@ -37790,7 +37909,7 @@ msgstr "" msgid "increment is not constant 1 or -1 for %<!=%> condition" msgstr "" -#: c-family/c-omp.cc:1255 cp/semantics.cc:10457 +#: c-family/c-omp.cc:1255 cp/semantics.cc:10526 #, gcc-internal-format msgid "invalid increment expression" msgstr "" @@ -37845,61 +37964,76 @@ msgid "" "two different outer iteration variables %qD and %qD used in a single loop" msgstr "" -#: c-family/c-omp.cc:1810 +#: c-family/c-omp.cc:1820 #, gcc-internal-format -msgid "variable %qD used %s is bound in intervening code" +msgid "variable %qD used as loop variable is bound in intervening code" msgstr "" -#: c-family/c-omp.cc:2409 +#: c-family/c-omp.cc:1824 +#, gcc-internal-format +msgid "variable %qD used in initializer is bound in intervening code" +msgstr "" + +#: c-family/c-omp.cc:1828 +#, gcc-internal-format +msgid "variable %qD used in end test is bound in intervening code" +msgstr "" + +#: c-family/c-omp.cc:1832 +#, gcc-internal-format +msgid "variable %qD used in increment expression is bound in intervening code" +msgstr "" + +#: c-family/c-omp.cc:2436 #, gcc-internal-format msgid "" "invalid %<task%> reduction modifier on construct combined with %<simd%> or " "%<loop%>" msgstr "" -#: c-family/c-omp.cc:2420 +#: c-family/c-omp.cc:2447 #, gcc-internal-format msgid "" "invalid %<task%> reduction modifier on construct not combined with " "%<parallel%>, %<for%> or %<sections%>" msgstr "" -#: c-family/c-omp.cc:2433 +#: c-family/c-omp.cc:2460 #, gcc-internal-format msgid "" "%<inscan%> %<reduction%> clause on construct other than %<for%>, %<simd%>, " "%<for simd%>, %<parallel for%>, %<parallel for simd%>" msgstr "" -#: c-family/c-omp.cc:2920 c/c-typeck.cc:16316 cp/semantics.cc:9444 +#: c-family/c-omp.cc:2947 c/c-typeck.cc:16316 cp/semantics.cc:9513 #, gcc-internal-format msgid "" "%qD specified in %<allocate%> clause but not in an explicit privatization " "clause" msgstr "" -#: c-family/c-omp.cc:3012 c-family/c-omp.cc:3027 +#: c-family/c-omp.cc:3039 c-family/c-omp.cc:3054 #, gcc-internal-format msgid "%qD is not a function argument" msgstr "" -#: c-family/c-omp.cc:3308 c/c-typeck.cc:15464 cp/semantics.cc:8183 +#: c-family/c-omp.cc:3335 c/c-typeck.cc:15464 cp/semantics.cc:8252 #, gcc-internal-format msgid "bit-field %qE in %qs clause" msgstr "" -#: c-family/c-omp.cc:3316 +#: c-family/c-omp.cc:3343 #, gcc-internal-format msgid "%qE does not have a mappable type in %qs clause" msgstr "" -#: c-family/c-omp.cc:3324 c/c-typeck.cc:13874 c/c-typeck.cc:15553 +#: c-family/c-omp.cc:3351 c/c-typeck.cc:13874 c/c-typeck.cc:15553 #: c/c-typeck.cc:15741 #, gcc-internal-format msgid "%<_Atomic%> %qE in %qs clause" msgstr "" -#: c-family/c-omp.cc:3349 +#: c-family/c-omp.cc:3376 #, gcc-internal-format msgid "%qE is a member of a union" msgstr "" @@ -38509,8 +38643,8 @@ msgstr "" msgid "wrong type argument to %s" msgstr "" -#: c-family/c-warn.cc:59 c-family/c-warn.cc:72 cp/constexpr.cc:3590 -#: cp/constexpr.cc:7356 m2/gm2-gcc/m2expr.cc:956 +#: c-family/c-warn.cc:59 c-family/c-warn.cc:72 cp/constexpr.cc:3588 +#: cp/constexpr.cc:7354 m2/gm2-gcc/m2expr.cc:964 #: rust/backend/rust-constexpr.cc:1908 rust/backend/rust-constexpr.cc:4331 #, gcc-internal-format msgid "overflow in constant expression" @@ -39207,215 +39341,215 @@ msgstr "" msgid "comparisons like %<X<=Y<=Z%> do not have their mathematical meaning" msgstr "" -#: c-family/c-warn.cc:2190 +#: c-family/c-warn.cc:2189 #, gcc-internal-format msgid "label %q+D defined but not used" msgstr "" -#: c-family/c-warn.cc:2192 +#: c-family/c-warn.cc:2191 #, gcc-internal-format msgid "label %q+D declared but not defined" msgstr "" -#: c-family/c-warn.cc:2215 +#: c-family/c-warn.cc:2214 #, gcc-internal-format msgid "division by zero" msgstr "" -#: c-family/c-warn.cc:2235 +#: c-family/c-warn.cc:2234 #, gcc-internal-format msgid "" "%<memset%> used with constant zero length parameter; this could be due to " "transposed parameters" msgstr "" -#: c-family/c-warn.cc:2259 +#: c-family/c-warn.cc:2258 #, gcc-internal-format msgid "" "%<memset%> used with length equal to number of elements without " "multiplication by element size" msgstr "" -#: c-family/c-warn.cc:2291 +#: c-family/c-warn.cc:2290 #, gcc-internal-format msgid "" "%qD sizes specified with %<sizeof%> in the earlier argument and not in the " "later argument" msgstr "" -#: c-family/c-warn.cc:2293 +#: c-family/c-warn.cc:2292 #, gcc-internal-format msgid "" "earlier argument should specify number of elements, later size of each " "element" msgstr "" -#: c-family/c-warn.cc:2332 +#: c-family/c-warn.cc:2331 #, gcc-internal-format msgid "allocation of insufficient size %qE for type %qT with size %qE" msgstr "" -#: c-family/c-warn.cc:2409 +#: c-family/c-warn.cc:2408 #, gcc-internal-format msgid "comparison of integer expressions of different signedness: %qT and %qT" msgstr "" -#: c-family/c-warn.cc:2483 +#: c-family/c-warn.cc:2482 #, gcc-internal-format msgid "promoted bitwise complement of an unsigned value is always nonzero" msgstr "" -#: c-family/c-warn.cc:2487 +#: c-family/c-warn.cc:2486 #, gcc-internal-format msgid "" "comparison of promoted bitwise complement of an unsigned value with constant" msgstr "" -#: c-family/c-warn.cc:2498 +#: c-family/c-warn.cc:2497 #, gcc-internal-format msgid "" "comparison of promoted bitwise complement of an unsigned value with unsigned" msgstr "" -#: c-family/c-warn.cc:2553 +#: c-family/c-warn.cc:2552 #, gcc-internal-format msgid "unused parameter %qD" msgstr "" -#: c-family/c-warn.cc:2615 +#: c-family/c-warn.cc:2614 #, gcc-internal-format msgid "typedef %qD locally defined but not used" msgstr "" -#: c-family/c-warn.cc:2651 +#: c-family/c-warn.cc:2650 #, gcc-internal-format msgid "duplicated %<if%> condition" msgstr "" -#: c-family/c-warn.cc:2680 +#: c-family/c-warn.cc:2679 #, gcc-internal-format msgid "" "optimization attribute on %qD follows definition but the attribute doesn%'t " "match" msgstr "" -#: c-family/c-warn.cc:2688 +#: c-family/c-warn.cc:2687 #, gcc-internal-format msgid "" "inline declaration of %qD follows declaration with attribute %<noinline%>" msgstr "" -#: c-family/c-warn.cc:2693 +#: c-family/c-warn.cc:2692 #, gcc-internal-format msgid "" "declaration of %q+D with attribute %<noinline%> follows inline declaration" msgstr "" -#: c-family/c-warn.cc:2747 +#: c-family/c-warn.cc:2746 #, gcc-internal-format msgid "result of %qE requires %u bits to represent, but %qT only has %u bits" msgstr "" -#: c-family/c-warn.cc:2786 c-family/c-warn.cc:2810 +#: c-family/c-warn.cc:2785 c-family/c-warn.cc:2809 #, gcc-internal-format msgid "comparison of constant %qE with boolean expression is always false" msgstr "" -#: c-family/c-warn.cc:2789 c-family/c-warn.cc:2807 +#: c-family/c-warn.cc:2788 c-family/c-warn.cc:2806 #, gcc-internal-format msgid "comparison of constant %qE with boolean expression is always true" msgstr "" -#: c-family/c-warn.cc:2857 +#: c-family/c-warn.cc:2856 msgid "passing argument %i to %qs-qualified parameter aliases with argument %Z" msgid_plural "" "passing argument %i to %qs-qualified parameter aliases with arguments %Z" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:2923 c/c-typeck.cc:5823 cp/call.cc:6362 +#: c-family/c-warn.cc:2922 c/c-typeck.cc:5823 cp/call.cc:6362 #, gcc-internal-format msgid "this condition has identical branches" msgstr "" -#: c-family/c-warn.cc:3030 +#: c-family/c-warn.cc:3029 #, gcc-internal-format msgid "macro expands to multiple statements" msgstr "" -#: c-family/c-warn.cc:3031 +#: c-family/c-warn.cc:3030 #, gcc-internal-format msgid "some parts of macro expansion are not guarded by this %qs clause" msgstr "" -#: c-family/c-warn.cc:3171 +#: c-family/c-warn.cc:3170 #, gcc-internal-format msgid "" "taking address of packed member of %qT may result in an unaligned pointer " "value" msgstr "" -#: c-family/c-warn.cc:3397 +#: c-family/c-warn.cc:3396 msgid "mismatch in bound %Z of argument %u declared as %s" msgid_plural "mismatch in bounds %Z of argument %u declared as %s" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:3400 c-family/c-warn.cc:3759 +#: c-family/c-warn.cc:3399 c-family/c-warn.cc:3758 #, gcc-internal-format, gfc-internal-format msgid "previously declared as %s" msgstr "" -#: c-family/c-warn.cc:3534 +#: c-family/c-warn.cc:3533 #, gcc-internal-format, gfc-internal-format msgid "argument %u of type %s declared as a variable length array" msgstr "" -#: c-family/c-warn.cc:3539 +#: c-family/c-warn.cc:3538 #, gcc-internal-format, gfc-internal-format msgid "previously declared as a pointer %s" msgstr "" -#: c-family/c-warn.cc:3540 +#: c-family/c-warn.cc:3539 #, gcc-internal-format, gfc-internal-format msgid "previously declared as an ordinary array %s" msgstr "" -#: c-family/c-warn.cc:3553 c-family/c-warn.cc:3567 +#: c-family/c-warn.cc:3552 c-family/c-warn.cc:3566 #, gcc-internal-format, gfc-internal-format msgid "argument %u of type %s declared as a pointer" msgstr "" -#: c-family/c-warn.cc:3557 c-family/c-warn.cc:3583 +#: c-family/c-warn.cc:3556 c-family/c-warn.cc:3582 #, gcc-internal-format, gfc-internal-format msgid "previously declared as a variable length array %s" msgstr "" -#: c-family/c-warn.cc:3570 +#: c-family/c-warn.cc:3569 #, gcc-internal-format, gfc-internal-format msgid "previously declared as an array %s" msgstr "" -#: c-family/c-warn.cc:3579 +#: c-family/c-warn.cc:3578 #, gcc-internal-format, gfc-internal-format msgid "argument %u of type %s declared as an ordinary array" msgstr "" -#: c-family/c-warn.cc:3607 +#: c-family/c-warn.cc:3606 #, gcc-internal-format, gfc-internal-format msgid "argument %u of type %s declared with %u variable bound" msgid_plural "argument %u of type %s declared with %u variable bounds" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:3614 +#: c-family/c-warn.cc:3613 #, gcc-internal-format, gfc-internal-format msgid "previously declared as %s with %u variable bound" msgid_plural "previously declared as %s with %u variable bounds" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:3628 +#: c-family/c-warn.cc:3627 #, gcc-internal-format, gfc-internal-format msgid "argument %u of type %s declared with %u unspecified variable bound" msgid_plural "" @@ -39423,110 +39557,110 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:3636 +#: c-family/c-warn.cc:3635 #, gcc-internal-format, gfc-internal-format msgid "previously declared as %s with %u unspecified variable bound" msgid_plural "previously declared as %s with %u unspecified variable bounds" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:3643 +#: c-family/c-warn.cc:3642 #, gcc-internal-format, gfc-internal-format msgid "subsequently declared as %s with %u unspecified variable bound" msgid_plural "subsequently declared as %s with %u unspecified variable bounds" msgstr[0] "" msgstr[1] "" -#: c-family/c-warn.cc:3694 +#: c-family/c-warn.cc:3693 #, gcc-internal-format msgid "argument %u of type %s declared with mismatched bound argument %E" msgstr "" -#: c-family/c-warn.cc:3701 c-family/c-warn.cc:3735 +#: c-family/c-warn.cc:3700 c-family/c-warn.cc:3734 #, gcc-internal-format msgid "argument %u of type %s declared with mismatched bound %<%s%>" msgstr "" -#: c-family/c-warn.cc:3713 +#: c-family/c-warn.cc:3712 #, gcc-internal-format msgid "previously declared as %s with bound argument %E" msgstr "" -#: c-family/c-warn.cc:3718 +#: c-family/c-warn.cc:3717 #, gcc-internal-format msgid "previously declared as %s with bound %<%s%>" msgstr "" -#: c-family/c-warn.cc:3738 +#: c-family/c-warn.cc:3737 #, gcc-internal-format msgid "previously declared as %s with bound %qs" msgstr "" -#: c-family/c-warn.cc:3757 +#: c-family/c-warn.cc:3756 #, gcc-internal-format, gfc-internal-format msgid "argument %u of type %s with mismatched bound" msgstr "" -#: c-family/c-warn.cc:3788 +#: c-family/c-warn.cc:3787 #, gcc-internal-format msgid "" "expression does not compute the number of elements in this array; element " "type is %qT, not %qT" msgstr "" -#: c-family/c-warn.cc:3798 +#: c-family/c-warn.cc:3797 #, gcc-internal-format msgid "add parentheses around %qE to silence this warning" msgstr "" -#: c-family/c-warn.cc:3802 +#: c-family/c-warn.cc:3801 #, gcc-internal-format msgid "add parentheses around the second %<sizeof%> to silence this warning" msgstr "" -#: c-family/c-warn.cc:3828 +#: c-family/c-warn.cc:3827 #, gcc-internal-format msgid "comparison between two arrays is deprecated in C++20" msgstr "" -#: c-family/c-warn.cc:3829 +#: c-family/c-warn.cc:3828 #, gcc-internal-format msgid "comparison between two arrays" msgstr "" -#: c-family/c-warn.cc:3833 +#: c-family/c-warn.cc:3832 #, gcc-internal-format msgid "" "use unary %<+%> which decays operands to pointers or %<&%D[0] %s &%D[0]%> to " "compare the addresses" msgstr "" -#: c-family/c-warn.cc:3837 +#: c-family/c-warn.cc:3836 #, gcc-internal-format msgid "use %<&%D[0] %s &%D[0]%> to compare the addresses" msgstr "" -#: c-family/c-warn.cc:3897 +#: c-family/c-warn.cc:3896 #, gcc-internal-format msgid "result of %<%wu^%wu%> is %wu; did you mean %<1 << %wu%> (%wu)?" msgstr "" -#: c-family/c-warn.cc:3907 +#: c-family/c-warn.cc:3906 #, gcc-internal-format msgid "result of %<%wu^%wu%> is %wu; did you mean %<1LL << %wu%>?" msgstr "" -#: c-family/c-warn.cc:3914 +#: c-family/c-warn.cc:3913 #, gcc-internal-format msgid "result of %<%wu^%wu%> is %wu; did you mean exponentiation?" msgstr "" -#: c-family/c-warn.cc:3925 +#: c-family/c-warn.cc:3924 #, gcc-internal-format msgid "result of %<%wu^%wu%> is %wu; did you mean %<1e%wu%>?" msgstr "" -#: c-family/c-warn.cc:3942 +#: c-family/c-warn.cc:3941 #, gcc-internal-format msgid "" "you can silence this warning by using a hexadecimal constant (%wx rather " @@ -39550,7 +39684,7 @@ msgid "" "%s%>" msgstr "" -#: common/config/aarch64/aarch64-common.cc:415 config/aarch64/aarch64.cc:18466 +#: common/config/aarch64/aarch64-common.cc:415 config/aarch64/aarch64.cc:18535 #, gcc-internal-format msgid "unknown value %qs for %<-mcpu%>" msgstr "" @@ -39581,15 +39715,15 @@ msgid "unrecognized option passed to %%:%<target_mode_check%>" msgstr "" #: common/config/arm/arm-common.cc:378 common/config/arm/arm-common.cc:442 -#: common/config/arm/arm-common.cc:489 config/aarch64/aarch64.cc:18398 -#: config/aarch64/aarch64.cc:18436 +#: common/config/arm/arm-common.cc:489 config/aarch64/aarch64.cc:18467 +#: config/aarch64/aarch64.cc:18505 #, gcc-internal-format msgid "valid arguments are: %s; did you mean %qs?" msgstr "" #: common/config/arm/arm-common.cc:381 common/config/arm/arm-common.cc:445 -#: common/config/arm/arm-common.cc:492 config/aarch64/aarch64.cc:18401 -#: config/aarch64/aarch64.cc:18439 +#: common/config/arm/arm-common.cc:492 config/aarch64/aarch64.cc:18470 +#: config/aarch64/aarch64.cc:18508 #, gcc-internal-format, gfc-internal-format msgid "valid arguments are: %s" msgstr "" @@ -39639,21 +39773,21 @@ msgstr "" msgid "unrecognized operand to %%:%<asm_auto_mfpu%>" msgstr "" -#: common/config/avr/avr-common.cc:85 +#: common/config/avr/avr-common.cc:87 #, gcc-internal-format msgid "" "option %<-mdouble=64%> is only available if configured %<--with-double={64|" "64,32|32,64}%>" msgstr "" -#: common/config/avr/avr-common.cc:93 +#: common/config/avr/avr-common.cc:95 #, gcc-internal-format msgid "" "option %<-mdouble=32%> is only available if configured %<--with-double={32|" "32,64|64,32}%>" msgstr "" -#: common/config/avr/avr-common.cc:109 +#: common/config/avr/avr-common.cc:111 #, gcc-internal-format msgid "" "option %<-mlong-double=64%> is only available if configured %<--with-long-" @@ -39661,7 +39795,7 @@ msgid "" "%<--with-double={64|64,32|32,64}%>" msgstr "" -#: common/config/avr/avr-common.cc:118 +#: common/config/avr/avr-common.cc:120 #, gcc-internal-format msgid "" "option %<-mlong-double=32%> is only available if configured %<--with-long-" @@ -39751,130 +39885,130 @@ msgid "" "64, 128, 256, or 512" msgstr "" -#: common/config/riscv/riscv-common.cc:667 +#: common/config/riscv/riscv-common.cc:765 #, gcc-internal-format msgid "%<-march=%s%>: extension %qs appear more than one time" msgstr "" -#: common/config/riscv/riscv-common.cc:676 +#: common/config/riscv/riscv-common.cc:774 #, gcc-internal-format msgid "" "%<-march=%s%>: extension %qs is unsupported standard single letter extension" msgstr "" -#: common/config/riscv/riscv-common.cc:684 +#: common/config/riscv/riscv-common.cc:782 #, gcc-internal-format msgid "" "%<-march=%s%>: extension %qs starts with 'z' but is unsupported standard " "extension" msgstr "" -#: common/config/riscv/riscv-common.cc:692 +#: common/config/riscv/riscv-common.cc:790 #, gcc-internal-format msgid "" "%<-march=%s%>: extension %qs starts with 's' but is unsupported standard " "supervisor extension" msgstr "" -#: common/config/riscv/riscv-common.cc:700 +#: common/config/riscv/riscv-common.cc:798 #, gcc-internal-format msgid "" "%<-march=%s%>: extension %qs starts with 'x' but is unsupported non-standard " "extension" msgstr "" -#: common/config/riscv/riscv-common.cc:947 +#: common/config/riscv/riscv-common.cc:1045 #, gcc-internal-format msgid "%<-march=%s%>: expect number after %<%dp%>" msgstr "" -#: common/config/riscv/riscv-common.cc:953 +#: common/config/riscv/riscv-common.cc:1051 #, gcc-internal-format msgid "" "%<-march=%s%>: for %<%s%dp%dp?%>, version number with more than 2 level is " "not supported" msgstr "" -#: common/config/riscv/riscv-common.cc:1011 +#: common/config/riscv/riscv-common.cc:1109 #, gcc-internal-format msgid "%<-march=%s%>: ISA string must begin with rv32 or rv64" msgstr "" -#: common/config/riscv/riscv-common.cc:1035 +#: common/config/riscv/riscv-common.cc:1133 #, gcc-internal-format msgid "%<-march=%s%>: rv%de is not a valid base ISA" msgstr "" -#: common/config/riscv/riscv-common.cc:1047 +#: common/config/riscv/riscv-common.cc:1145 #, gcc-internal-format msgid "" "version of %<g%> will be omitted, please specify version for individual " "extension" msgstr "" -#: common/config/riscv/riscv-common.cc:1066 +#: common/config/riscv/riscv-common.cc:1164 #, gcc-internal-format msgid "%<-march=%s%>: first ISA subset must be %<e%>, %<i%> or %<g%>" msgstr "" -#: common/config/riscv/riscv-common.cc:1089 +#: common/config/riscv/riscv-common.cc:1187 #, gcc-internal-format msgid "%<-march=%s%>: Not single-letter extension. %<%c%>" msgstr "" -#: common/config/riscv/riscv-common.cc:1220 +#: common/config/riscv/riscv-common.cc:1318 #, gcc-internal-format msgid "%<-march=%s%>: zcf extension supports in rv32 only" msgstr "" -#: common/config/riscv/riscv-common.cc:1225 +#: common/config/riscv/riscv-common.cc:1323 #, gcc-internal-format msgid "%<-march=%s%>: z*inx conflicts with floating-point extensions" msgstr "" -#: common/config/riscv/riscv-common.cc:1231 +#: common/config/riscv/riscv-common.cc:1329 #, gcc-internal-format msgid "%<-march=%s%>: h extension requires i extension" msgstr "" -#: common/config/riscv/riscv-common.cc:1236 +#: common/config/riscv/riscv-common.cc:1334 #, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmt" msgstr "" -#: common/config/riscv/riscv-common.cc:1238 +#: common/config/riscv/riscv-common.cc:1336 #, gcc-internal-format msgid "%<-march=%s%>: zcd conflicts with zcmp" msgstr "" -#: common/config/riscv/riscv-common.cc:1247 +#: common/config/riscv/riscv-common.cc:1345 #, gcc-internal-format msgid "" "%<-march=%s%>: xtheadvector conflicts with vector extension or its sub-" "extensions" msgstr "" -#: common/config/riscv/riscv-common.cc:1344 +#: common/config/riscv/riscv-common.cc:1442 #, gcc-internal-format msgid "%<-march=%s%>: name of %s must be more than 1 letter" msgstr "" -#: common/config/riscv/riscv-common.cc:1356 +#: common/config/riscv/riscv-common.cc:1454 #, gcc-internal-format msgid "%<-march=%s%>: %s must separate with %<_%>" msgstr "" -#: common/config/riscv/riscv-common.cc:1419 +#: common/config/riscv/riscv-common.cc:1516 #, gcc-internal-format msgid "%<-march=%s%>: i, e or g must be the first extension" msgstr "" -#: common/config/riscv/riscv-common.cc:1758 +#: common/config/riscv/riscv-common.cc:1871 #, gcc-internal-format msgid "%<-mcpu=%s%>: unknown CPU" msgstr "" -#: common/config/riscv/riscv-common.cc:1837 +#: common/config/riscv/riscv-common.cc:1950 #, gcc-internal-format msgid "Cannot find suitable multilib set for %<-march=%s%>/%<-mabi=%s%>" msgstr "" @@ -40088,48 +40222,53 @@ msgid "" "runtime%>" msgstr "" -#: config/darwin.cc:3440 +#: config/darwin.cc:3435 #, gcc-internal-format msgid "%<-gsplit-dwarf%> is not supported on this platform, ignored" msgstr "" -#: config/darwin.cc:3528 +#: config/darwin.cc:3449 +#, gcc-internal-format +msgid "%<-g3%> is not supported by the debug linker in use (set to 2)" +msgstr "" + +#: config/darwin.cc:3541 #, gcc-internal-format msgid "" "%<-mdynamic-no-pic%> overrides %<-fpic%>, %<-fPIC%>, %<-fpie%> or %<-fPIE%>" msgstr "" -#: config/darwin.cc:3571 +#: config/darwin.cc:3584 #, gcc-internal-format msgid "%<-mpic-symbol-stubs%> is not required for 64-bit code (ignored)" msgstr "" -#: config/darwin.cc:3774 +#: config/darwin.cc:3787 #, gcc-internal-format msgid "built-in function %qD requires the %<-mconstant-cfstrings%> flag" msgstr "" -#: config/darwin.cc:3781 +#: config/darwin.cc:3794 #, gcc-internal-format msgid "built-in function %qD takes one argument only" msgstr "" -#: config/darwin.cc:3825 +#: config/darwin.cc:3838 #, gcc-internal-format msgid "CFString literal is missing" msgstr "" -#: config/darwin.cc:3836 +#: config/darwin.cc:3849 #, gcc-internal-format msgid "CFString literal expression is not a string constant" msgstr "" -#: config/darwin.cc:3860 +#: config/darwin.cc:3873 #, gcc-internal-format msgid "non-ASCII character in CFString literal" msgstr "" -#: config/darwin.cc:3861 +#: config/darwin.cc:3874 #, gcc-internal-format msgid "embedded NUL in CFString literal" msgstr "" @@ -40204,74 +40343,74 @@ msgstr "" msgid "PIC is only supported for RTPs" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2122 +#: config/aarch64/aarch64-builtins.cc:2123 #, gcc-internal-format msgid "first argument to %qD must be a string literal" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2253 -#: config/aarch64/aarch64-builtins.cc:2487 config/arm/arm-builtins.cc:3146 +#: config/aarch64/aarch64-builtins.cc:2254 +#: config/aarch64/aarch64-builtins.cc:2488 config/arm/arm-builtins.cc:3146 #, gcc-internal-format, gfc-internal-format msgid "argument %d must be a constant immediate" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2325 config/arm/arm-builtins.cc:3494 +#: config/aarch64/aarch64-builtins.cc:2326 config/arm/arm-builtins.cc:3494 #, gcc-internal-format msgid "lane index must be a constant immediate" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2329 +#: config/aarch64/aarch64-builtins.cc:2330 #, gcc-internal-format msgid "total size and element size must be a nonzero constant immediate" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2577 +#: config/aarch64/aarch64-builtins.cc:2578 #, gcc-internal-format msgid "argument must be a 16-bit constant immediate" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2700 +#: config/aarch64/aarch64-builtins.cc:2701 #, gcc-internal-format msgid "128-bit system register support requires the %<d128%> extension" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2715 +#: config/aarch64/aarch64-builtins.cc:2716 #, gcc-internal-format msgid "invalid system register name provided" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2729 +#: config/aarch64/aarch64-builtins.cc:2730 #, gcc-internal-format msgid "invalid system register name %qs" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2809 +#: config/aarch64/aarch64-builtins.cc:2810 #, gcc-internal-format msgid "Constant-type argument expected" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2815 +#: config/aarch64/aarch64-builtins.cc:2816 #, gcc-internal-format msgid "argument %d must be a constant immediate in range [%wd,%wd]" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2894 +#: config/aarch64/aarch64-builtins.cc:2895 #, gcc-internal-format msgid "Memory Tagging Extension does not support %<-mabi=ilp32%>" msgstr "" -#: config/aarch64/aarch64-builtins.cc:2929 +#: config/aarch64/aarch64-builtins.cc:2930 #, gcc-internal-format, gfc-internal-format msgid "argument %d must be a constant immediate in range [0,15]" msgstr "" -#: config/aarch64/aarch64-builtins.cc:3727 -#: config/aarch64/aarch64-builtins.cc:3747 +#: config/aarch64/aarch64-builtins.cc:3728 +#: config/aarch64/aarch64-builtins.cc:3748 #, gcc-internal-format, gfc-internal-format msgid "expected 64-bit address but argument 1 is %d-bit" msgstr "" -#: config/aarch64/aarch64-builtins.cc:3731 +#: config/aarch64/aarch64-builtins.cc:3732 #, gcc-internal-format, gfc-internal-format msgid "expected 64-bit address but argument 2 is %d-bit" msgstr "" @@ -40286,78 +40425,78 @@ msgstr "" msgid "unknown %<#pragma GCC aarch64%> option %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1068 +#: config/aarch64/aarch64-sve-builtins.cc:1089 #: config/arm/arm-mve-builtins.cc:558 #, gcc-internal-format msgid "ACLE function %qD requires ISA extension %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1070 config/aarch64/aarch64.cc:11082 -#: config/aarch64/aarch64.cc:18241 config/aarch64/aarch64.cc:18956 +#: config/aarch64/aarch64-sve-builtins.cc:1091 config/aarch64/aarch64.cc:11151 +#: config/aarch64/aarch64.cc:18310 config/aarch64/aarch64.cc:19082 #, gcc-internal-format msgid "" "you can enable %qs using the command-line option %<-march%>, or by using the " "%<target%> attribute or pragma" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1090 +#: config/aarch64/aarch64-sve-builtins.cc:1111 #, gcc-internal-format msgid "ACLE function %qD is incompatible with the use of %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1112 +#: config/aarch64/aarch64-sve-builtins.cc:1133 #, gcc-internal-format msgid "ACLE function %qD cannot be called when SME streaming mode is enabled" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1119 +#: config/aarch64/aarch64-sve-builtins.cc:1140 #, gcc-internal-format msgid "ACLE function %qD can only be called when SME streaming mode is enabled" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1126 +#: config/aarch64/aarch64-sve-builtins.cc:1147 #, gcc-internal-format msgid "ACLE function %qD can only be called from a function that has %qs state" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1154 +#: config/aarch64/aarch64-sve-builtins.cc:1175 #: config/arm/arm-mve-builtins.cc:571 -#: config/riscv/riscv-vector-builtins.cc:4209 +#: config/riscv/riscv-vector-builtins.cc:4246 #, gcc-internal-format msgid "argument %d of %qE must be an integer constant expression" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1167 +#: config/aarch64/aarch64-sve-builtins.cc:1188 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects the value %wd" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1170 +#: config/aarch64/aarch64-sve-builtins.cc:1191 #: config/arm/arm-mve-builtins.cc:583 -#: config/riscv/riscv-vector-builtins.cc:4223 +#: config/riscv/riscv-vector-builtins.cc:4260 #, gcc-internal-format msgid "" "passing %wd to argument %d of %qE, which expects a value in the range [%wd, " "%wd]" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1183 +#: config/aarch64/aarch64-sve-builtins.cc:1204 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects either %wd or %wd" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1196 +#: config/aarch64/aarch64-sve-builtins.cc:1217 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects %wd, %wd, %wd or %wd" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1208 +#: config/aarch64/aarch64-sve-builtins.cc:1229 #: config/arm/arm-mve-builtins.cc:595 #, gcc-internal-format msgid "passing %wd to argument %d of %qE, which expects a valid %qT value" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1723 +#: config/aarch64/aarch64-sve-builtins.cc:1762 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a single SVE vector rather " @@ -40365,8 +40504,8 @@ msgid "" msgstr "" #. num_vectors is always != 1, so the singular isn't needed. -#: config/aarch64/aarch64-sve-builtins.cc:1729 -#: config/aarch64/aarch64-sve-builtins.cc:1735 +#: config/aarch64/aarch64-sve-builtins.cc:1768 +#: config/aarch64/aarch64-sve-builtins.cc:1774 #: config/arm/arm-mve-builtins.cc:1205 config/arm/arm-mve-builtins.cc:1211 #, gcc-internal-format msgid "%qT%d%qE%d" @@ -40376,111 +40515,111 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: config/aarch64/aarch64-sve-builtins.cc:1767 +#: config/aarch64/aarch64-sve-builtins.cc:1806 #, gcc-internal-format msgid "" "passing tuple %qT to argument %d of %qE after passing single vector %qT to " "argument %d" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1772 +#: config/aarch64/aarch64-sve-builtins.cc:1811 #, gcc-internal-format msgid "" "passing single vector %qT to argument %d of %qE after passing tuple %qT to " "argument %d" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1777 +#: config/aarch64/aarch64-sve-builtins.cc:1816 #, gcc-internal-format msgid "" "passing mismatched tuple types %qT and %qT to arguments %d and %d of %qE" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1788 +#: config/aarch64/aarch64-sve-builtins.cc:1827 #: config/arm/arm-mve-builtins.cc:1104 #, gcc-internal-format msgid "%qE has no form that takes %qT arguments" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1849 +#: config/aarch64/aarch64-sve-builtins.cc:1888 #, gcc-internal-format msgid "%qE has no form that takes %qT and %qT arguments" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1911 +#: config/aarch64/aarch64-sve-builtins.cc:1950 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an %qs or %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1942 +#: config/aarch64/aarch64-sve-builtins.cc:1981 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a 32-bit or 64-bit integer " "type" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1961 +#: config/aarch64/aarch64-sve-builtins.cc:2000 #, gcc-internal-format msgid "" "passing %qT and %qT to arguments %d and %d of %qE, which expects a pair of " "64-bit integers" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:1985 +#: config/aarch64/aarch64-sve-builtins.cc:2024 #, gcc-internal-format msgid "" "passing mismatched integer types %qT and %qT to arguments %d and %d of %qE" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2006 +#: config/aarch64/aarch64-sve-builtins.cc:2045 #: config/arm/arm-mve-builtins.cc:1157 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a pointer type" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2009 +#: config/aarch64/aarch64-sve-builtins.cc:2048 #, gcc-internal-format msgid "an explicit type suffix is needed when using a vector of base addresses" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2018 +#: config/aarch64/aarch64-sve-builtins.cc:2057 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, but %qT is not a valid SVE element type" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2026 +#: config/aarch64/aarch64-sve-builtins.cc:2065 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a pointer to 32-bit or 64-" "bit elements" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2068 +#: config/aarch64/aarch64-sve-builtins.cc:2107 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects an SVE type rather than a " "scalar type" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2072 +#: config/aarch64/aarch64-sve-builtins.cc:2111 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects an SVE type" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2117 +#: config/aarch64/aarch64-sve-builtins.cc:2156 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a vector of integers" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2147 +#: config/aarch64/aarch64-sve-builtins.cc:2186 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a 128 bit NEON vector type" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2164 -#: config/aarch64/aarch64-sve-builtins.cc:2462 +#: config/aarch64/aarch64-sve-builtins.cc:2203 +#: config/aarch64/aarch64-sve-builtins.cc:2501 #: config/arm/arm-mve-builtins.cc:1403 #, gcc-internal-format msgid "" @@ -40488,64 +40627,64 @@ msgid "" "integers" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2185 +#: config/aarch64/aarch64-sve-builtins.cc:2224 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a vector of 32-bit or 64-" "bit elements" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2227 +#: config/aarch64/aarch64-sve-builtins.cc:2266 #, gcc-internal-format msgid "" "operations on multiple vectors must be predicated by %qs rather than %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2230 +#: config/aarch64/aarch64-sve-builtins.cc:2269 #, gcc-internal-format msgid "operations on single vectors must be predicated by %qs rather than %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2246 +#: config/aarch64/aarch64-sve-builtins.cc:2285 #: config/arm/arm-mve-builtins.cc:1248 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a vector or scalar type" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2268 -#: config/aarch64/aarch64-sve-builtins.cc:2919 +#: config/aarch64/aarch64-sve-builtins.cc:2307 +#: config/aarch64/aarch64-sve-builtins.cc:2958 #: config/arm/arm-mve-builtins.cc:1270 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2295 -#: config/aarch64/aarch64-sve-builtins.cc:2411 -#: config/aarch64/aarch64-sve-builtins.cc:2540 +#: config/aarch64/aarch64-sve-builtins.cc:2334 +#: config/aarch64/aarch64-sve-builtins.cc:2450 +#: config/aarch64/aarch64-sve-builtins.cc:2579 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, but argument %d had type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2406 +#: config/aarch64/aarch64-sve-builtins.cc:2445 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, but argument %d was a tuple of %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2430 +#: config/aarch64/aarch64-sve-builtins.cc:2469 #: config/arm/arm-mve-builtins.cc:1384 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a vector of %d-bit elements" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2435 +#: config/aarch64/aarch64-sve-builtins.cc:2474 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects vectors of %d-bit elements" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2448 +#: config/aarch64/aarch64-sve-builtins.cc:2487 #: config/arm/arm-mve-builtins.cc:1396 #, gcc-internal-format msgid "" @@ -40554,7 +40693,7 @@ msgstr "" #. Translation note: could also be written "expects a tuple of #. signed integer vectors". -#: config/aarch64/aarch64-sve-builtins.cc:2454 +#: config/aarch64/aarch64-sve-builtins.cc:2493 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects vectors of signed integers" @@ -40562,13 +40701,13 @@ msgstr "" #. Translation note: could also be written "expects a tuple of #. unsigned integer vectors". -#: config/aarch64/aarch64-sve-builtins.cc:2468 +#: config/aarch64/aarch64-sve-builtins.cc:2507 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects vectors of unsigned integers" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2488 +#: config/aarch64/aarch64-sve-builtins.cc:2527 #: config/arm/arm-mve-builtins.cc:1423 #, gcc-internal-format msgid "" @@ -40576,7 +40715,7 @@ msgid "" "passed here have type %qT and %qT respectively" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2508 +#: config/aarch64/aarch64-sve-builtins.cc:2547 #: config/arm/arm-mve-builtins.cc:1444 #, gcc-internal-format msgid "" @@ -40584,7 +40723,7 @@ msgid "" "passed here have type %qT and %qT respectively" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2519 +#: config/aarch64/aarch64-sve-builtins.cc:2558 #: config/arm/arm-mve-builtins.cc:1455 #, gcc-internal-format msgid "" @@ -40592,26 +40731,26 @@ msgid "" "%qT to argument %d" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2559 +#: config/aarch64/aarch64-sve-builtins.cc:2598 #: config/arm/arm-mve-builtins.cc:1540 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2577 +#: config/aarch64/aarch64-sve-builtins.cc:2616 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which does not accept scalars for this " "combination of arguments" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2593 +#: config/aarch64/aarch64-sve-builtins.cc:2632 #: config/arm/arm-mve-builtins.cc:1556 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a scalar pointer" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2616 +#: config/aarch64/aarch64-sve-builtins.cc:2655 #, gcc-internal-format msgid "" "call to %qE is ambiguous; argument %d has type %qs but argument %d has type " @@ -40620,7 +40759,7 @@ msgstr "" #. It doesn't really matter whether the element is expected to be #. the same size as type suffix 0. -#: config/aarch64/aarch64-sve-builtins.cc:2661 +#: config/aarch64/aarch64-sve-builtins.cc:2700 #: config/arm/arm-mve-builtins.cc:1501 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a scalar element" @@ -40628,57 +40767,57 @@ msgstr "" #. It doesn't seem useful to distinguish between signed and unsigned #. scalars here. -#: config/aarch64/aarch64-sve-builtins.cc:2667 +#: config/aarch64/aarch64-sve-builtins.cc:2706 #: config/arm/arm-mve-builtins.cc:1507 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects a scalar integer" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2703 +#: config/aarch64/aarch64-sve-builtins.cc:2742 #, gcc-internal-format msgid "passing %qT to argument %d of %qE, which expects %qs or %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2723 +#: config/aarch64/aarch64-sve-builtins.cc:2762 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a vector of 32-bit or 64-" "bit integers" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2773 +#: config/aarch64/aarch64-sve-builtins.cc:2812 #, gcc-internal-format msgid "when storing %qT, %qE requires a vector base and a scalar index" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2778 +#: config/aarch64/aarch64-sve-builtins.cc:2817 #, gcc-internal-format msgid "%qE requires a vector base and a scalar index" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2782 +#: config/aarch64/aarch64-sve-builtins.cc:2821 #, gcc-internal-format msgid "%qE does not support 32-bit vector type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2810 +#: config/aarch64/aarch64-sve-builtins.cc:2849 #, gcc-internal-format msgid "%qE does not support 32-bit sign-extended offsets" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2813 +#: config/aarch64/aarch64-sve-builtins.cc:2852 #, gcc-internal-format msgid "%qE does not support sign-extended offsets" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2826 +#: config/aarch64/aarch64-sve-builtins.cc:2865 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which when loading %qT expects a vector " "of %d-bit integers" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2831 +#: config/aarch64/aarch64-sve-builtins.cc:2870 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which when storing %qT expects a vector " @@ -40686,194 +40825,193 @@ msgid "" msgstr "" #. TYPE is part of the function name. -#: config/aarch64/aarch64-sve-builtins.cc:2838 +#: config/aarch64/aarch64-sve-builtins.cc:2877 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a vector of %d-bit integers" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2886 +#: config/aarch64/aarch64-sve-builtins.cc:2925 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, which expects a vector or pointer base " "address" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2970 +#: config/aarch64/aarch64-sve-builtins.cc:3009 #, gcc-internal-format msgid "cannot combine a base of type %qT with an offset of type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:2974 +#: config/aarch64/aarch64-sve-builtins.cc:3013 #, gcc-internal-format msgid "cannot combine a base of type %qT with an index of type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:3063 +#: config/aarch64/aarch64-sve-builtins.cc:3102 #: config/arm/arm-mve-builtins.cc:1666 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, but its %qT form does not accept scalars" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:3127 +#: config/aarch64/aarch64-sve-builtins.cc:3166 #, gcc-internal-format msgid "" "passing %qT to argument %d of %qE, but its %qT form does not accept single " "vectors" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4621 -#: config/aarch64/aarch64-sve-builtins.cc:4683 +#: config/aarch64/aarch64-sve-builtins.cc:4660 #: config/arm/arm-mve-builtins.cc:466 config/arm/arm-mve-builtins.cc:491 -#: config/riscv/riscv-vector-builtins.cc:4536 +#: config/riscv/riscv-vector-builtins.cc:4589 #, gcc-internal-format msgid "duplicate definition of %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4675 +#: config/aarch64/aarch64-sve-builtins.cc:4717 #, gcc-internal-format msgid "%qs defined without first defining %qs" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4834 +#: config/aarch64/aarch64-sve-builtins.cc:4868 #, gcc-internal-format msgid "%qs applied to non-SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4840 +#: config/aarch64/aarch64-sve-builtins.cc:4874 #, gcc-internal-format msgid "%qs applied to non-vector type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4847 +#: config/aarch64/aarch64-sve-builtins.cc:4881 #, gcc-internal-format msgid "%qs applied to type %qT, which already has a size" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4855 +#: config/aarch64/aarch64-sve-builtins.cc:4889 #, gcc-internal-format msgid "%qs requires an integer constant expression" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4863 +#: config/aarch64/aarch64-sve-builtins.cc:4897 #, gcc-internal-format msgid "unsupported SVE vector size" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4977 +#: config/aarch64/aarch64-sve-builtins.cc:5011 #, gcc-internal-format msgid "SVE type %qT does not have a fixed size" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4982 +#: config/aarch64/aarch64-sve-builtins.cc:5016 #, gcc-internal-format msgid "SVE type %qT does not have a defined alignment" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4987 -#: config/riscv/riscv-vector-builtins.cc:4448 +#: config/aarch64/aarch64-sve-builtins.cc:5021 +#: config/riscv/riscv-vector-builtins.cc:4501 #, gcc-internal-format msgid "variables of type %qT cannot have thread-local storage duration" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:4993 +#: config/aarch64/aarch64-sve-builtins.cc:5027 #, gcc-internal-format msgid "arithmetic on pointer to SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5000 +#: config/aarch64/aarch64-sve-builtins.cc:5034 #, gcc-internal-format msgid "member variables cannot have SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5002 +#: config/aarch64/aarch64-sve-builtins.cc:5036 #, gcc-internal-format msgid "fields cannot have SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5007 +#: config/aarch64/aarch64-sve-builtins.cc:5041 #, gcc-internal-format msgid "array elements cannot have SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5012 +#: config/aarch64/aarch64-sve-builtins.cc:5046 #, gcc-internal-format msgid "cannot allocate objects with SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5017 +#: config/aarch64/aarch64-sve-builtins.cc:5051 #, gcc-internal-format msgid "cannot delete objects with SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5022 +#: config/aarch64/aarch64-sve-builtins.cc:5056 #, gcc-internal-format msgid "cannot throw or catch SVE type %qT" msgstr "" -#: config/aarch64/aarch64-sve-builtins.cc:5027 +#: config/aarch64/aarch64-sve-builtins.cc:5061 #, gcc-internal-format msgid "capture by copy of SVE type %qT" msgstr "" -#: config/aarch64/aarch64.cc:635 +#: config/aarch64/aarch64.cc:637 #, gcc-internal-format msgid "the arguments to %qE must be constant strings" msgstr "" -#: config/aarch64/aarch64.cc:643 +#: config/aarch64/aarch64.cc:645 #, gcc-internal-format msgid "unrecognized state string %qs" msgstr "" -#: config/aarch64/aarch64.cc:727 +#: config/aarch64/aarch64.cc:729 #, gcc-internal-format msgid "the %qE attribute cannot be applied to an SVE function type" msgstr "" -#: config/aarch64/aarch64.cc:754 +#: config/aarch64/aarch64.cc:756 #, gcc-internal-format msgid "cannot create a new %qs scope since %qs is shared with callers" msgstr "" -#: config/aarch64/aarch64.cc:770 +#: config/aarch64/aarch64.cc:772 #, gcc-internal-format msgid "%qE attribute applies only to function definitions" msgstr "" -#: config/aarch64/aarch64.cc:816 +#: config/aarch64/aarch64.cc:818 #, gcc-internal-format msgid "inconsistent attributes for state %qs" msgstr "" -#: config/aarch64/aarch64.cc:1305 +#: config/aarch64/aarch64.cc:1307 #, gcc-internal-format msgid "%qs is incompatible with the use of floating-point types" msgstr "" -#: config/aarch64/aarch64.cc:1308 +#: config/aarch64/aarch64.cc:1310 #, gcc-internal-format msgid "%qs is incompatible with the use of vector types" msgstr "" -#: config/aarch64/aarch64.cc:1312 +#: config/aarch64/aarch64.cc:1314 #, gcc-internal-format msgid "" "%qs feature modifier is incompatible with the use of floating-point types" msgstr "" -#: config/aarch64/aarch64.cc:1315 +#: config/aarch64/aarch64.cc:1317 #, gcc-internal-format msgid "%qs feature modifier is incompatible with the use of vector types" msgstr "" -#: config/aarch64/aarch64.cc:1331 +#: config/aarch64/aarch64.cc:1333 #, gcc-internal-format msgid "this operation requires the SVE ISA extension" msgstr "" -#: config/aarch64/aarch64.cc:1332 +#: config/aarch64/aarch64.cc:1334 #, gcc-internal-format msgid "" "you can enable SVE using the command-line option %<-march%>, or by using the " @@ -40882,456 +41020,456 @@ msgstr "" #. We can't gracefully recover at this point, so make this a #. fatal error. -#: config/aarch64/aarch64.cc:6377 +#: config/aarch64/aarch64.cc:6403 #, gcc-internal-format msgid "arguments of type %qT require the SVE ISA extension" msgstr "" -#: config/aarch64/aarch64.cc:6822 +#: config/aarch64/aarch64.cc:6880 #, gcc-internal-format msgid "SVE type %qT cannot be passed to an unprototyped function" msgstr "" -#: config/aarch64/aarch64.cc:6959 config/aarch64/aarch64.cc:7037 -#: config/aarch64/aarch64.cc:21183 +#: config/aarch64/aarch64.cc:7021 config/aarch64/aarch64.cc:7100 +#: config/aarch64/aarch64.cc:21311 #, gcc-internal-format msgid "parameter passing for argument of type %qT changed in GCC 13.1" msgstr "" -#: config/aarch64/aarch64.cc:6966 config/aarch64/aarch64.cc:7044 -#: config/aarch64/aarch64.cc:21189 +#: config/aarch64/aarch64.cc:7028 config/aarch64/aarch64.cc:7107 +#: config/aarch64/aarch64.cc:21318 #, gcc-internal-format msgid "parameter passing for argument of type %qT changed in GCC 14.1" msgstr "" -#: config/aarch64/aarch64.cc:6976 config/aarch64/aarch64.cc:7053 -#: config/aarch64/aarch64.cc:21195 config/arm/arm.cc:7301 -#: config/arm/arm.cc:7331 config/arm/arm.cc:29376 +#: config/aarch64/aarch64.cc:7039 config/aarch64/aarch64.cc:7117 +#: config/aarch64/aarch64.cc:21326 config/arm/arm.cc:7342 +#: config/arm/arm.cc:7372 config/arm/arm.cc:29418 #, gcc-internal-format msgid "parameter passing for argument of type %qT changed in GCC 9.1" msgstr "" -#: config/aarch64/aarch64.cc:7176 +#: config/aarch64/aarch64.cc:7240 #, gcc-internal-format msgid "%qE requires the SVE ISA extension" msgstr "" -#: config/aarch64/aarch64.cc:7179 +#: config/aarch64/aarch64.cc:7243 #, gcc-internal-format msgid "calls to functions of type %qT require the SVE ISA extension" msgstr "" -#: config/aarch64/aarch64.cc:7367 +#: config/aarch64/aarch64.cc:7431 #, gcc-internal-format msgid "stack probes for SVE frames" msgstr "" -#: config/aarch64/aarch64.cc:11080 +#: config/aarch64/aarch64.cc:11149 #, gcc-internal-format msgid "calling a streaming function requires the ISA extension %qs" msgstr "" -#: config/aarch64/aarch64.cc:11089 config/aarch64/aarch64.cc:11093 +#: config/aarch64/aarch64.cc:11158 config/aarch64/aarch64.cc:11162 #, gcc-internal-format msgid "" "call to a function that shares %qs state from a function that has no %qs " "state" msgstr "" -#: config/aarch64/aarch64.cc:11096 +#: config/aarch64/aarch64.cc:11165 #, gcc-internal-format msgid "" "call to a function that shares SME state from a function that has no SME " "state" msgstr "" -#: config/aarch64/aarch64.cc:11154 +#: config/aarch64/aarch64.cc:11223 #, gcc-internal-format msgid "" "call to a function that shares state other than %qs from a function that has " "%qs state" msgstr "" -#: config/aarch64/aarch64.cc:11156 +#: config/aarch64/aarch64.cc:11225 #, gcc-internal-format msgid "use %<__arm_preserves(\"za\")%> if the callee preserves ZA" msgstr "" -#: config/aarch64/aarch64.cc:17859 +#: config/aarch64/aarch64.cc:17928 #, gcc-internal-format msgid "unknown flag passed in %<-moverride=%s%> (%s)" msgstr "" -#: config/aarch64/aarch64.cc:17903 +#: config/aarch64/aarch64.cc:17972 #, gcc-internal-format msgid "%qs string ill-formed" msgstr "" -#: config/aarch64/aarch64.cc:17959 +#: config/aarch64/aarch64.cc:18028 #, gcc-internal-format msgid "invalid format for %<sve_width%>" msgstr "" -#: config/aarch64/aarch64.cc:17971 +#: config/aarch64/aarch64.cc:18040 #, gcc-internal-format msgid "invalid %<sve_width%> value: %d" msgstr "" -#: config/aarch64/aarch64.cc:17991 +#: config/aarch64/aarch64.cc:18060 #, gcc-internal-format, gfc-internal-format msgid "tuning string missing in option (%s)" msgstr "" -#: config/aarch64/aarch64.cc:18009 +#: config/aarch64/aarch64.cc:18078 #, gcc-internal-format, gfc-internal-format msgid "unknown tuning option (%s)" msgstr "" -#: config/aarch64/aarch64.cc:18197 config/arm/arm.cc:3227 -#: config/riscv/riscv.cc:9031 +#: config/aarch64/aarch64.cc:18266 config/arm/arm.cc:3227 +#: config/riscv/riscv.cc:9367 #, gcc-internal-format msgid "" "incompatible options %<-mstack-protector-guard=global%> and %<-mstack-" "protector-guard-offset=%s%>" msgstr "" -#: config/aarch64/aarch64.cc:18206 config/riscv/riscv.cc:9040 +#: config/aarch64/aarch64.cc:18275 config/riscv/riscv.cc:9376 #, gcc-internal-format msgid "" "both %<-mstack-protector-guard-offset%> and %<-mstack-protector-guard-reg%> " "must be used with %<-mstack-protector-guard=sysreg%>" msgstr "" -#: config/aarch64/aarch64.cc:18214 +#: config/aarch64/aarch64.cc:18283 #, gcc-internal-format msgid "specify a system register with a small string length" msgstr "" -#: config/aarch64/aarch64.cc:18224 config/arm/arm.cc:3239 -#: config/riscv/riscv.cc:9069 config/rs6000/rs6000.cc:4546 +#: config/aarch64/aarch64.cc:18293 config/arm/arm.cc:3239 +#: config/riscv/riscv.cc:9405 config/rs6000/rs6000.cc:4498 #, gcc-internal-format msgid "%qs is not a valid offset in %qs" msgstr "" -#: config/aarch64/aarch64.cc:18231 +#: config/aarch64/aarch64.cc:18300 #, gcc-internal-format msgid "%<-fsanitize=shadow-call-stack%> requires %<-ffixed-x18%>" msgstr "" -#: config/aarch64/aarch64.cc:18237 +#: config/aarch64/aarch64.cc:18306 #, gcc-internal-format msgid "streaming functions require the ISA extension %qs" msgstr "" -#: config/aarch64/aarch64.cc:18239 +#: config/aarch64/aarch64.cc:18308 #, gcc-internal-format msgid "functions with SME state require the ISA extension %qs" msgstr "" -#: config/aarch64/aarch64.cc:18333 +#: config/aarch64/aarch64.cc:18402 #, gcc-internal-format msgid "" "only values 12 (4 KB) and 16 (64 KB) are supported for guard size. Given " "value %d (%llu KB) is out of range" msgstr "" -#: config/aarch64/aarch64.cc:18349 +#: config/aarch64/aarch64.cc:18418 #, gcc-internal-format msgid "stack clash guard size %<%d%> must be equal to probing interval %<%d%>" msgstr "" -#: config/aarch64/aarch64.cc:18463 +#: config/aarch64/aarch64.cc:18532 #, gcc-internal-format msgid "missing cpu name in %<-mcpu=%s%>" msgstr "" -#: config/aarch64/aarch64.cc:18473 +#: config/aarch64/aarch64.cc:18542 #, gcc-internal-format msgid "did you mean %<-march=%s%>?" msgstr "" -#: config/aarch64/aarch64.cc:18476 +#: config/aarch64/aarch64.cc:18545 #, gcc-internal-format msgid "invalid feature modifier %qs in %<-mcpu=%s%>" msgstr "" -#: config/aarch64/aarch64.cc:18535 +#: config/aarch64/aarch64.cc:18604 #, gcc-internal-format msgid "invalid argument given to %<-mharden-sls=%>" msgstr "" -#: config/aarch64/aarch64.cc:18546 +#: config/aarch64/aarch64.cc:18615 #, gcc-internal-format msgid "%qs must be by itself for %<-mharden-sls=%>" msgstr "" -#: config/aarch64/aarch64.cc:18551 +#: config/aarch64/aarch64.cc:18620 #, gcc-internal-format msgid "invalid argument %<%s%> for %<-mharden-sls=%>" msgstr "" -#: config/aarch64/aarch64.cc:18579 +#: config/aarch64/aarch64.cc:18648 #, gcc-internal-format msgid "missing arch name in %<-march=%s%>" msgstr "" -#: config/aarch64/aarch64.cc:18582 +#: config/aarch64/aarch64.cc:18651 #, gcc-internal-format msgid "unknown value %qs for %<-march%>" msgstr "" -#: config/aarch64/aarch64.cc:18588 +#: config/aarch64/aarch64.cc:18657 #, gcc-internal-format msgid "did you mean %<-mcpu=%s%>?" msgstr "" -#: config/aarch64/aarch64.cc:18591 +#: config/aarch64/aarch64.cc:18660 #, gcc-internal-format msgid "invalid feature modifier %qs in %<-march=%s%>" msgstr "" -#: config/aarch64/aarch64.cc:18619 +#: config/aarch64/aarch64.cc:18688 #, gcc-internal-format msgid "missing cpu name in %<-mtune=%s%>" msgstr "" -#: config/aarch64/aarch64.cc:18622 +#: config/aarch64/aarch64.cc:18691 #, gcc-internal-format msgid "unknown value %qs for %<-mtune%>" msgstr "" -#: config/aarch64/aarch64.cc:18717 +#: config/aarch64/aarch64.cc:18843 #, gcc-internal-format msgid "" "switch %<-mcpu=%s%> conflicts with %<-march=%s%> switch and resulted in " "options %<%s%> being added" msgstr "" -#: config/aarch64/aarch64.cc:18773 +#: config/aarch64/aarch64.cc:18899 #, gcc-internal-format msgid "assembler does not support %<-mabi=ilp32%>" msgstr "" -#: config/aarch64/aarch64.cc:18780 +#: config/aarch64/aarch64.cc:18906 #, gcc-internal-format msgid "return address signing is only supported for %<-mabi=lp64%>" msgstr "" -#: config/aarch64/aarch64.cc:18853 +#: config/aarch64/aarch64.cc:18979 #, gcc-internal-format msgid "code model %qs with %<-f%s%>" msgstr "" -#: config/aarch64/aarch64.cc:18856 +#: config/aarch64/aarch64.cc:18982 #, gcc-internal-format msgid "code model %qs not supported in ilp32 mode" msgstr "" -#: config/aarch64/aarch64.cc:18954 +#: config/aarch64/aarch64.cc:19080 #, gcc-internal-format msgid "functions with %qs state require the ISA extension %qs" msgstr "" -#: config/aarch64/aarch64.cc:19057 +#: config/aarch64/aarch64.cc:19183 #, gcc-internal-format msgid "missing name in %<target(\"arch=\")%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19060 +#: config/aarch64/aarch64.cc:19186 #, gcc-internal-format msgid "invalid name %qs in %<target(\"arch=\")%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19064 +#: config/aarch64/aarch64.cc:19190 #, gcc-internal-format msgid "" "invalid feature modifier %s of value %qs in %<target()%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19098 +#: config/aarch64/aarch64.cc:19224 #, gcc-internal-format msgid "missing name in %<target(\"cpu=\")%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19101 +#: config/aarch64/aarch64.cc:19227 #, gcc-internal-format msgid "invalid name %qs in %<target(\"cpu=\")%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19105 config/aarch64/aarch64.cc:19189 +#: config/aarch64/aarch64.cc:19231 config/aarch64/aarch64.cc:19315 #, gcc-internal-format msgid "" "invalid feature modifier %qs of value %qs in %<target()%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19144 +#: config/aarch64/aarch64.cc:19270 #, gcc-internal-format msgid "invalid name %qs in %<target(\"tune=\")%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19185 +#: config/aarch64/aarch64.cc:19311 #, gcc-internal-format msgid "missing value in %<target()%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19243 config/aarch64/aarch64.cc:19416 +#: config/aarch64/aarch64.cc:19369 config/aarch64/aarch64.cc:19542 #, gcc-internal-format msgid "malformed %<target()%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19287 +#: config/aarch64/aarch64.cc:19413 #, gcc-internal-format msgid "pragma or attribute %<target(\"%s\")%> does not accept an argument" msgstr "" -#: config/aarch64/aarch64.cc:19295 config/i386/i386-options.cc:1299 +#: config/aarch64/aarch64.cc:19421 config/i386/i386-options.cc:1303 #, gcc-internal-format msgid "pragma or attribute %<target(\"%s\")%> does not allow a negated form" msgstr "" -#: config/aarch64/aarch64.cc:19349 +#: config/aarch64/aarch64.cc:19475 #, gcc-internal-format msgid "pragma or attribute %<target(\"%s=%s\")%> is not valid" msgstr "" -#: config/aarch64/aarch64.cc:19406 config/arm/arm.cc:33633 -#: config/riscv/riscv-target-attr.cc:318 config/rs6000/rs6000.cc:24733 -#: config/s390/s390.cc:16400 +#: config/aarch64/aarch64.cc:19532 config/arm/arm.cc:33675 +#: config/riscv/riscv-target-attr.cc:325 config/rs6000/rs6000.cc:24685 +#: config/s390/s390.cc:16421 #, gcc-internal-format msgid "attribute %<target%> argument not a string" msgstr "" -#: config/aarch64/aarch64.cc:19441 +#: config/aarch64/aarch64.cc:19567 #, gcc-internal-format msgid "arch extension %<%s%> should be prefixed by %<+%>" msgstr "" -#: config/aarch64/aarch64.cc:19444 +#: config/aarch64/aarch64.cc:19570 #, gcc-internal-format msgid "pragma or attribute %<target(\"%s\")%> is not valid" msgstr "" -#: config/aarch64/aarch64.cc:19453 +#: config/aarch64/aarch64.cc:19579 #, gcc-internal-format msgid "malformed %<target(\"%s\")%> pragma or attribute" msgstr "" -#: config/aarch64/aarch64.cc:19668 +#: config/aarch64/aarch64.cc:19793 #, gcc-internal-format msgid "attribute %<target_version%> has multiple values" msgstr "" -#: config/aarch64/aarch64.cc:19676 +#: config/aarch64/aarch64.cc:19801 #, gcc-internal-format msgid "attribute %<target_version%> argument not a string" msgstr "" -#: config/aarch64/aarch64.cc:19698 +#: config/aarch64/aarch64.cc:19823 #, gcc-internal-format msgid "missing value in %<target_version%> attribute" msgstr "" -#: config/aarch64/aarch64.cc:19702 +#: config/aarch64/aarch64.cc:19827 #, gcc-internal-format msgid "" "invalid feature modifier %qs of value %qs in %<target_version%> attribute" msgstr "" -#: config/aarch64/aarch64.cc:19708 +#: config/aarch64/aarch64.cc:19833 #, gcc-internal-format msgid "" "duplicate feature modifier %qs of value %qs in %<target_version%> attribute" msgstr "" -#: config/aarch64/aarch64.cc:20285 config/i386/i386-features.cc:3531 -#: config/i386/i386-features.cc:3800 +#: config/aarch64/aarch64.cc:20410 config/i386/i386-features.cc:3521 +#: config/i386/i386-features.cc:3790 #, gcc-internal-format msgid "virtual function multiversioning not supported" msgstr "" -#: config/aarch64/aarch64.cc:20406 config/i386/i386-features.cc:3664 -#: config/rs6000/rs6000.cc:25431 +#: config/aarch64/aarch64.cc:20531 config/i386/i386-features.cc:3654 +#: config/rs6000/rs6000.cc:25375 #, gcc-internal-format msgid "multiversioning needs %<ifunc%> which is not supported on this target" msgstr "" -#: config/aarch64/aarch64.cc:21943 config/arm/arm.cc:6649 -#: config/rs6000/rs6000-call.cc:366 config/s390/s390.cc:12766 +#: config/aarch64/aarch64.cc:22079 config/arm/arm.cc:6690 +#: config/rs6000/rs6000-call.cc:366 config/s390/s390.cc:12778 msgid "" "parameter passing for argument of type %qT with %<[[no_unique_address]]%> " "members changed %{in GCC 10.1%}" msgstr "" -#: config/aarch64/aarch64.cc:21948 config/arm/arm.cc:6654 -#: config/rs6000/rs6000-call.cc:361 config/s390/s390.cc:12761 +#: config/aarch64/aarch64.cc:22084 config/arm/arm.cc:6695 +#: config/rs6000/rs6000-call.cc:361 config/s390/s390.cc:12773 msgid "" "parameter passing for argument of type %qT when C++17 is enabled changed to " "match C++14 %{in GCC 10.1%}" msgstr "" -#: config/aarch64/aarch64.cc:21953 config/arm/arm.cc:6659 +#: config/aarch64/aarch64.cc:22089 config/arm/arm.cc:6700 msgid "parameter passing for argument of type %qT changed %{in GCC 12.1%}" msgstr "" -#: config/aarch64/aarch64.cc:23177 config/aarch64/aarch64.cc:23180 +#: config/aarch64/aarch64.cc:23313 config/aarch64/aarch64.cc:23316 #, gcc-internal-format msgid "lane %wd out of range %wd - %wd" msgstr "" -#: config/aarch64/aarch64.cc:28591 config/i386/i386.cc:25093 -#: config/i386/i386.cc:25224 +#: config/aarch64/aarch64.cc:28739 config/i386/i386.cc:25115 +#: config/i386/i386.cc:25246 #, gcc-internal-format msgid "unsupported simdlen %wd" msgstr "" -#: config/aarch64/aarch64.cc:28605 +#: config/aarch64/aarch64.cc:28753 #, gcc-internal-format msgid "GCC does not currently support return type %qT for simd" msgstr "" -#: config/aarch64/aarch64.cc:28609 config/i386/i386.cc:25115 +#: config/aarch64/aarch64.cc:28757 config/i386/i386.cc:25137 #, gcc-internal-format msgid "unsupported return type %qT for simd" msgstr "" -#: config/aarch64/aarch64.cc:28639 +#: config/aarch64/aarch64.cc:28787 #, gcc-internal-format msgid "GCC does not currently support argument type %qT for simd" msgstr "" -#: config/aarch64/aarch64.cc:28643 config/i386/i386.cc:25146 +#: config/aarch64/aarch64.cc:28791 config/i386/i386.cc:25168 #, gcc-internal-format msgid "unsupported argument type %qT for simd" msgstr "" -#: config/aarch64/aarch64.cc:28692 +#: config/aarch64/aarch64.cc:28840 #, gcc-internal-format msgid "GCC does not currently support simdlen %wd for type %qT" msgstr "" -#: config/aarch64/aarch64.cc:28713 +#: config/aarch64/aarch64.cc:28861 #, gcc-internal-format msgid "" "GCC does not currently support a simdclone with simdlens %wd and %wd for " "these types." msgstr "" -#: config/aarch64/aarch64.cc:28803 +#: config/aarch64/aarch64.cc:28951 #, gcc-internal-format msgid "cannot apply attribute %qs to %q+D after the function has been defined" msgstr "" -#: config/aarch64/aarch64.cc:28805 +#: config/aarch64/aarch64.cc:28953 #, gcc-internal-format msgid "%q+D defined here" msgstr "" -#: config/aarch64/aarch64.cc:29263 +#: config/aarch64/aarch64.cc:29411 #, gcc-internal-format msgid "non-local gotos in functions with SME state" msgstr "" -#: config/aarch64/aarch64.cc:29558 +#: config/aarch64/aarch64.cc:29720 #, gcc-internal-format msgid "catching non-call exceptions in functions with SME state" msgstr "" @@ -41391,8 +41529,8 @@ msgstr "" msgid "bad value %qs for %<-mmemory-latency%>" msgstr "" -#: config/alpha/alpha.cc:6658 config/alpha/alpha.cc:6661 config/arc/arc.cc:6980 -#: config/arc/arc.cc:7254 config/s390/s390.cc:957 +#: config/alpha/alpha.cc:6659 config/alpha/alpha.cc:6662 config/arc/arc.cc:6981 +#: config/arc/arc.cc:7255 config/s390/s390.cc:959 #, gcc-internal-format msgid "bad builtin fcode" msgstr "" @@ -41513,19 +41651,19 @@ msgstr "" msgid "argument of %qE attribute is not \"ilink\" or \"firq\"" msgstr "" -#: config/arc/arc.cc:2037 config/arm/arm.cc:7442 config/arm/arm.cc:7460 -#: config/arm/arm.cc:7639 config/avr/avr.cc:10321 config/avr/avr.cc:10337 +#: config/arc/arc.cc:2037 config/arm/arm.cc:7483 config/arm/arm.cc:7501 +#: config/arm/arm.cc:7680 config/avr/avr.cc:11235 config/avr/avr.cc:11249 #: config/bfin/bfin.cc:4695 config/bfin/bfin.cc:4756 config/bfin/bfin.cc:4786 -#: config/bpf/bpf.cc:93 config/csky/csky.cc:6458 config/csky/csky.cc:6486 -#: config/epiphany/epiphany.cc:488 config/gcn/gcn.cc:371 -#: config/h8300/h8300.cc:4948 config/i386/i386-options.cc:3695 -#: config/i386/i386-options.cc:3872 config/i386/i386-options.cc:3928 -#: config/i386/i386-options.cc:3979 config/i386/i386-options.cc:4016 +#: config/bpf/bpf.cc:93 config/csky/csky.cc:6459 config/csky/csky.cc:6487 +#: config/epiphany/epiphany.cc:488 config/gcn/gcn.cc:377 +#: config/h8300/h8300.cc:4948 config/i386/i386-options.cc:3710 +#: config/i386/i386-options.cc:3887 config/i386/i386-options.cc:3943 +#: config/i386/i386-options.cc:3994 config/i386/i386-options.cc:4031 #: config/m68k/m68k.cc:796 config/mcore/mcore.cc:3067 -#: config/nvptx/nvptx.cc:5801 config/riscv/riscv.cc:5476 +#: config/nvptx/nvptx.cc:5801 config/riscv/riscv.cc:5728 #: config/rl78/rl78.cc:820 config/rl78/rl78.cc:889 -#: config/rs6000/rs6000.cc:20684 config/rx/rx.cc:2728 config/rx/rx.cc:2754 -#: config/s390/s390.cc:1172 config/s390/s390.cc:1259 config/sh/sh.cc:8429 +#: config/rs6000/rs6000.cc:20636 config/rx/rx.cc:2728 config/rx/rx.cc:2754 +#: config/s390/s390.cc:1174 config/s390/s390.cc:1261 config/sh/sh.cc:8429 #: config/sh/sh.cc:8447 config/sh/sh.cc:8471 config/sh/sh.cc:8542 #: config/sh/sh.cc:8565 config/stormy16/stormy16.cc:2403 #: config/v850/v850.cc:2010 config/visium/visium.cc:724 @@ -41533,166 +41671,166 @@ msgstr "" msgid "%qE attribute only applies to functions" msgstr "" -#: config/arc/arc.cc:6879 +#: config/arc/arc.cc:6880 #, gcc-internal-format msgid "%<__builtin_arc_aligned%> with non-constant alignment" msgstr "" -#: config/arc/arc.cc:6887 +#: config/arc/arc.cc:6888 #, gcc-internal-format msgid "invalid alignment value for %<__builtin_arc_aligned%>" msgstr "" -#: config/arc/arc.cc:7050 +#: config/arc/arc.cc:7051 #, gcc-internal-format msgid "operand 1 should be an unsigned 3-bit immediate" msgstr "" -#: config/arc/arc.cc:7091 config/arc/arc.cc:7188 +#: config/arc/arc.cc:7092 config/arc/arc.cc:7189 #, gcc-internal-format msgid "operand 2 should be an unsigned 3-bit value (I0-I7)" msgstr "" -#: config/arc/arc.cc:7124 config/arc/arc.cc:7156 +#: config/arc/arc.cc:7125 config/arc/arc.cc:7157 #, gcc-internal-format msgid "operand 1 should be an unsigned 3-bit value (I0-I7)" msgstr "" -#: config/arc/arc.cc:7128 config/arc/arc.cc:7160 +#: config/arc/arc.cc:7129 config/arc/arc.cc:7161 #, gcc-internal-format msgid "operand 2 should be an unsigned 8-bit value" msgstr "" -#: config/arc/arc.cc:7192 +#: config/arc/arc.cc:7193 #, gcc-internal-format msgid "operand 3 should be an unsigned 8-bit value" msgstr "" -#: config/arc/arc.cc:7225 +#: config/arc/arc.cc:7226 #, gcc-internal-format msgid "operand 4 should be an unsigned 8-bit value (0-255)" msgstr "" -#: config/arc/arc.cc:7229 +#: config/arc/arc.cc:7230 #, gcc-internal-format msgid "operand 3 should be an unsigned 3-bit value (I0-I7)" msgstr "" -#: config/arc/arc.cc:7236 +#: config/arc/arc.cc:7237 #, gcc-internal-format msgid "operand 2 should be an unsigned 3-bit value (subreg 0-7)" msgstr "" -#: config/arc/arc.cc:7239 +#: config/arc/arc.cc:7240 #, gcc-internal-format msgid "operand 2 should be an even 3-bit value (subreg 0,2,4,6)" msgstr "" -#: config/arc/arc.cc:7286 +#: config/arc/arc.cc:7287 #, gcc-internal-format, gfc-internal-format msgid "builtin requires an immediate for operand %d" msgstr "" -#: config/arc/arc.cc:7291 +#: config/arc/arc.cc:7292 #, gcc-internal-format, gfc-internal-format msgid "operand %d should be a 6 bit unsigned immediate" msgstr "" -#: config/arc/arc.cc:7295 +#: config/arc/arc.cc:7296 #, gcc-internal-format, gfc-internal-format msgid "operand %d should be a 8 bit unsigned immediate" msgstr "" -#: config/arc/arc.cc:7299 +#: config/arc/arc.cc:7300 #, gcc-internal-format, gfc-internal-format msgid "operand %d should be a 3 bit unsigned immediate" msgstr "" -#: config/arc/arc.cc:7302 +#: config/arc/arc.cc:7303 #, gcc-internal-format, gfc-internal-format msgid "unknown builtin immediate operand type for operand %d" msgstr "" -#: config/arc/arc.cc:7393 +#: config/arc/arc.cc:7394 #, gcc-internal-format msgid "" "register number must be a compile-time constant. Try giving higher " "optimization levels" msgstr "" -#: config/arc/arc.cc:8466 +#: config/arc/arc.cc:8467 #, gcc-internal-format msgid "insn addresses not set after shorten branches" msgstr "" -#: config/arc/arc.cc:8681 +#: config/arc/arc.cc:8682 #, gcc-internal-format msgid "insn addresses not freed" msgstr "" -#: config/arc/arc.cc:10837 +#: config/arc/arc.cc:10838 #, gcc-internal-format msgid "%qE attribute only valid for ARCv2 architecture" msgstr "" -#: config/arc/arc.cc:10845 config/arc/arc.cc:10884 +#: config/arc/arc.cc:10846 config/arc/arc.cc:10885 #, gcc-internal-format msgid "argument of %qE attribute is missing" msgstr "" -#: config/arc/arc.cc:10856 config/arc/arc.cc:10895 config/arc/arc.cc:11021 -#: config/avr/avr.cc:10397 +#: config/arc/arc.cc:10857 config/arc/arc.cc:10896 config/arc/arc.cc:11022 +#: config/avr/avr.cc:11309 #, gcc-internal-format msgid "%qE attribute allows only an integer constant argument" msgstr "" -#: config/arc/arc.cc:10876 +#: config/arc/arc.cc:10877 #, gcc-internal-format msgid "%qE attribute only valid for ARC EM architecture" msgstr "" -#: config/arc/arc.cc:10931 +#: config/arc/arc.cc:10932 #, gcc-internal-format msgid "%qE attribute only applies to types" msgstr "" -#: config/arc/arc.cc:10937 +#: config/arc/arc.cc:10938 #, gcc-internal-format msgid "argument of %qE attribute ignored" msgstr "" -#: config/arc/arc.cc:11011 config/avr/avr.cc:10384 config/bfin/bfin.cc:4818 +#: config/arc/arc.cc:11012 config/avr/avr.cc:11296 config/bfin/bfin.cc:4818 #: config/i386/winnt.cc:63 config/nvptx/nvptx.cc:5824 #, gcc-internal-format msgid "%qE attribute only applies to variables" msgstr "" -#: config/arm/aarch-common.cc:552 config/i386/i386.cc:23845 +#: config/arm/aarch-common.cc:553 config/i386/i386.cc:23866 #, gcc-internal-format msgid "alternatives not allowed in %<asm%> flag output" msgstr "" -#: config/arm/aarch-common.cc:613 config/i386/i386.cc:23909 +#: config/arm/aarch-common.cc:614 config/i386/i386.cc:23930 #, gcc-internal-format msgid "unknown %<asm%> flag output %qs" msgstr "" -#: config/arm/aarch-common.cc:623 config/i386/i386.cc:23938 +#: config/arm/aarch-common.cc:624 config/i386/i386.cc:23959 #, gcc-internal-format msgid "invalid type for %<asm%> flag output" msgstr "" -#: config/arm/aarch-common.cc:765 +#: config/arm/aarch-common.cc:714 #, gcc-internal-format msgid "missing feature or flag for %<%s%>" msgstr "" -#: config/arm/aarch-common.cc:767 +#: config/arm/aarch-common.cc:716 #, gcc-internal-format msgid "invalid argument %<%s%> for %<%s%>" msgstr "" -#: config/arm/aarch-common.cc:778 +#: config/arm/aarch-common.cc:727 #, gcc-internal-format msgid "argument %<%s%> can only appear alone in %<%s%>" msgstr "" @@ -41943,7 +42081,7 @@ msgstr "" msgid "target CPU does not support unaligned accesses" msgstr "" -#: config/arm/arm.cc:3247 config/arm/arm.cc:33306 +#: config/arm/arm.cc:3247 config/arm/arm.cc:33348 #, gcc-internal-format msgid "This architecture does not support branch protection instructions" msgstr "" @@ -41953,239 +42091,234 @@ msgstr "" msgid "Return address signing is not supported with %<-mtpcs-frame%>." msgstr "" -#: config/arm/arm.cc:3314 -#, gcc-internal-format -msgid "invalid key type for %<-mbranch-protection=%>" -msgstr "" - -#: config/arm/arm.cc:3347 +#: config/arm/arm.cc:3388 #, gcc-internal-format msgid "switch %<-mcpu=%s%> conflicts with switch %<-march=%s%>" msgstr "" -#: config/arm/arm.cc:3602 +#: config/arm/arm.cc:3643 #, gcc-internal-format msgid "%<-mapcs-stack-check%> incompatible with %<-mno-apcs-frame%>" msgstr "" -#: config/arm/arm.cc:3611 +#: config/arm/arm.cc:3652 #, gcc-internal-format msgid "%<-fpic%> and %<-mapcs-reent%> are incompatible" msgstr "" -#: config/arm/arm.cc:3614 +#: config/arm/arm.cc:3655 #, gcc-internal-format msgid "APCS reentrant code not supported. Ignored" msgstr "" -#: config/arm/arm.cc:3637 +#: config/arm/arm.cc:3678 #, gcc-internal-format msgid "option %<-mstructure-size-boundary%> is deprecated" msgstr "" -#: config/arm/arm.cc:3645 +#: config/arm/arm.cc:3686 #, gcc-internal-format msgid "structure size boundary can only be set to 8, 32 or 64" msgstr "" -#: config/arm/arm.cc:3647 +#: config/arm/arm.cc:3688 #, gcc-internal-format msgid "structure size boundary can only be set to 8 or 32" msgstr "" -#: config/arm/arm.cc:3672 +#: config/arm/arm.cc:3713 #, gcc-internal-format msgid "RTP PIC is incompatible with %<-msingle-pic-base%>" msgstr "" -#: config/arm/arm.cc:3684 config/arm/arm.cc:33647 +#: config/arm/arm.cc:3725 config/arm/arm.cc:33689 #, gcc-internal-format msgid "FDPIC mode is not supported in Thumb-1 mode" msgstr "" -#: config/arm/arm.cc:3692 +#: config/arm/arm.cc:3733 #, gcc-internal-format msgid "%<-mpic-register=%> is useless without %<-fpic%>" msgstr "" -#: config/arm/arm.cc:3701 +#: config/arm/arm.cc:3742 #, gcc-internal-format msgid "unable to use %qs for PIC register" msgstr "" -#: config/arm/arm.cc:3741 config/pru/pru.cc:612 +#: config/arm/arm.cc:3782 config/pru/pru.cc:612 #, gcc-internal-format msgid "%<-freorder-blocks-and-partition%> not supported on this architecture" msgstr "" -#: config/arm/arm.cc:3909 +#: config/arm/arm.cc:3950 #, gcc-internal-format msgid "selected fp16 options are incompatible" msgstr "" -#: config/arm/arm.cc:3944 +#: config/arm/arm.cc:3985 #, gcc-internal-format msgid "%<-mstack-protector-guard=tls%> needs a hardware TLS register" msgstr "" -#: config/arm/arm.cc:3964 +#: config/arm/arm.cc:4005 #, gcc-internal-format msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" msgstr "" -#: config/arm/arm.cc:3967 +#: config/arm/arm.cc:4008 #, gcc-internal-format msgid "iwmmxt abi requires an iwmmxt capable cpu" msgstr "" -#: config/arm/arm.cc:3975 +#: config/arm/arm.cc:4016 #, gcc-internal-format msgid "target CPU does not support interworking" msgstr "" -#: config/arm/arm.cc:3988 +#: config/arm/arm.cc:4029 #, gcc-internal-format msgid "AAPCS does not support %<-mcaller-super-interworking%>" msgstr "" -#: config/arm/arm.cc:3991 +#: config/arm/arm.cc:4032 #, gcc-internal-format msgid "AAPCS does not support %<-mcallee-super-interworking%>" msgstr "" -#: config/arm/arm.cc:3996 +#: config/arm/arm.cc:4037 #, gcc-internal-format msgid "%<__fp16%> and no ldrh" msgstr "" -#: config/arm/arm.cc:3999 +#: config/arm/arm.cc:4040 #, gcc-internal-format msgid "target CPU does not support ARMv8-M Security Extensions" msgstr "" -#: config/arm/arm.cc:4004 +#: config/arm/arm.cc:4045 #, gcc-internal-format msgid "ARMv8-M Security Extensions incompatible with selected FPU" msgstr "" -#: config/arm/arm.cc:4016 +#: config/arm/arm.cc:4057 #, gcc-internal-format msgid "%<-mfloat-abi=hard%>: selected architecture lacks an FPU" msgstr "" -#: config/arm/arm.cc:4024 +#: config/arm/arm.cc:4065 #, gcc-internal-format msgid "%<-mfloat-abi=hard%> and VFP" msgstr "" -#: config/arm/arm.cc:6289 +#: config/arm/arm.cc:6330 #, gcc-internal-format msgid "non-AAPCS derived PCS variant" msgstr "" -#: config/arm/arm.cc:6291 +#: config/arm/arm.cc:6332 #, gcc-internal-format msgid "variadic functions must use the base AAPCS variant" msgstr "" -#: config/arm/arm.cc:6320 +#: config/arm/arm.cc:6361 #, gcc-internal-format msgid "PCS variant" msgstr "" -#: config/arm/arm.cc:6595 +#: config/arm/arm.cc:6636 #, gcc-internal-format msgid "Thumb-1 %<hard-float%> VFP ABI" msgstr "" -#: config/arm/arm.cc:6690 +#: config/arm/arm.cc:6731 #, gcc-internal-format msgid "argument of type %qT not permitted with %<-mgeneral-regs-only%>" msgstr "" -#: config/arm/arm.cc:7074 config/arm/arm.cc:7295 config/arm/arm.cc:7328 -#: config/arm/arm.cc:29369 +#: config/arm/arm.cc:7115 config/arm/arm.cc:7336 config/arm/arm.cc:7369 +#: config/arm/arm.cc:29411 #, gcc-internal-format msgid "parameter passing for argument of type %qT changed in GCC 7.1" msgstr "" -#: config/arm/arm.cc:7466 +#: config/arm/arm.cc:7507 #, gcc-internal-format msgid "" "FP registers might be clobbered despite %qE attribute: compile with %<-" "mgeneral-regs-only%>" msgstr "" -#: config/arm/arm.cc:7588 +#: config/arm/arm.cc:7629 #, gcc-internal-format msgid "" "%qE attribute not available to functions with arguments passed on the stack" msgstr "" -#: config/arm/arm.cc:7600 +#: config/arm/arm.cc:7641 #, gcc-internal-format msgid "" "%qE attribute not available to functions with variable number of arguments" msgstr "" -#: config/arm/arm.cc:7609 +#: config/arm/arm.cc:7650 #, gcc-internal-format msgid "%qE attribute not available to functions that return value on the stack" msgstr "" -#: config/arm/arm.cc:7631 config/arm/arm.cc:7683 +#: config/arm/arm.cc:7672 config/arm/arm.cc:7724 #, gcc-internal-format msgid "%qE attribute ignored without %<-mcmse%> option" msgstr "" -#: config/arm/arm.cc:7650 +#: config/arm/arm.cc:7691 #, gcc-internal-format msgid "%qE attribute has no effect on functions with static linkage" msgstr "" -#: config/arm/arm.cc:7703 +#: config/arm/arm.cc:7744 #, gcc-internal-format msgid "%qE attribute only applies to base type of a function pointer" msgstr "" -#: config/arm/arm.cc:9696 +#: config/arm/arm.cc:9737 #, gcc-internal-format msgid "" "accessing thread-local storage is not currently supported with %<-mpure-" "code%> or %<-mslow-flash-data%>" msgstr "" -#: config/arm/arm.cc:13547 config/arm/arm.cc:13549 +#: config/arm/arm.cc:13588 config/arm/arm.cc:13590 #, gcc-internal-format msgid "%s %wd out of range %wd - %wd" msgstr "" -#: config/arm/arm.cc:25956 +#: config/arm/arm.cc:25998 #, gcc-internal-format msgid "unable to compute real location of stacked parameter" msgstr "" -#: config/arm/arm.cc:26619 +#: config/arm/arm.cc:26661 #, gcc-internal-format msgid "Unexpected thumb1 far jump" msgstr "" -#: config/arm/arm.cc:26878 +#: config/arm/arm.cc:26920 #, gcc-internal-format msgid "no low registers available for popping high registers" msgstr "" -#: config/arm/arm.cc:27131 +#: config/arm/arm.cc:27173 #, gcc-internal-format msgid "Interrupt Service Routines cannot be coded in Thumb-1 mode" msgstr "" -#: config/arm/arm.cc:27377 +#: config/arm/arm.cc:27419 #, gcc-internal-format msgid "%<-fstack-check=specific%> for Thumb-1" msgstr "" -#: config/arm/arm.cc:33662 +#: config/arm/arm.cc:33704 #, gcc-internal-format msgid "invalid fpu for target attribute or pragma %qs" msgstr "" @@ -42193,22 +42326,22 @@ msgstr "" #. This doesn't really make sense until we support #. general dynamic selection of the architecture and all #. sub-features. -#: config/arm/arm.cc:33670 +#: config/arm/arm.cc:33712 #, gcc-internal-format msgid "auto fpu selection not currently permitted here" msgstr "" -#: config/arm/arm.cc:33683 +#: config/arm/arm.cc:33725 #, gcc-internal-format msgid "invalid architecture for target attribute or pragma %qs" msgstr "" -#: config/arm/arm.cc:33697 +#: config/arm/arm.cc:33739 #, gcc-internal-format msgid "unknown target attribute or pragma %qs" msgstr "" -#: config/arm/arm.cc:34660 +#: config/arm/arm.cc:34702 #, gcc-internal-format msgid "%<asm%> flags not supported in thumb1 mode" msgstr "" @@ -42257,163 +42390,171 @@ msgstr "" #. happen as options are provided by device-specs. It could be a #. typo in a device-specs or calling the compiler proper directly #. with -mmcu=<device>. -#: config/avr/avr.cc:1065 +#: config/avr/avr.cc:1090 #, gcc-internal-format msgid "unknown core architecture %qs specified with %qs" msgstr "" -#: config/avr/avr.cc:1119 config/pru/pru.cc:601 config/visium/visium.cc:422 +#: config/avr/avr.cc:1144 config/pru/pru.cc:601 config/visium/visium.cc:422 #, gcc-internal-format msgid "%<-fpic%> is not supported" msgstr "" -#: config/avr/avr.cc:1121 config/pru/pru.cc:603 config/visium/visium.cc:424 +#: config/avr/avr.cc:1146 config/pru/pru.cc:603 config/visium/visium.cc:424 #, gcc-internal-format msgid "%<-fPIC%> is not supported" msgstr "" -#: config/avr/avr.cc:1123 config/pru/pru.cc:605 +#: config/avr/avr.cc:1148 config/pru/pru.cc:605 #, gcc-internal-format msgid "%<-fpie%> is not supported" msgstr "" -#: config/avr/avr.cc:1125 config/pru/pru.cc:607 +#: config/avr/avr.cc:1150 config/pru/pru.cc:607 #, gcc-internal-format msgid "%<-fPIE%> is not supported" msgstr "" -#: config/avr/avr.cc:1421 config/avr/avr.cc:1426 config/riscv/riscv.cc:9392 +#: config/avr/avr.cc:1446 config/avr/avr.cc:1451 config/riscv/riscv.cc:9728 #, gcc-internal-format msgid "function attributes %qs and %qs are mutually exclusive" msgstr "" -#: config/avr/avr.cc:1447 config/riscv/riscv.cc:9404 +#: config/avr/avr.cc:1472 config/riscv/riscv.cc:9740 #, gcc-internal-format msgid "%qs function cannot have arguments" msgstr "" -#: config/avr/avr.cc:1450 config/riscv/riscv.cc:9401 +#: config/avr/avr.cc:1475 config/riscv/riscv.cc:9737 #, gcc-internal-format msgid "%qs function cannot return a value" msgstr "" -#: config/avr/avr.cc:1464 +#: config/avr/avr.cc:1489 #, gcc-internal-format msgid "%qs appears to be a misspelled %qs handler, missing %<__vector%> prefix" msgstr "" -#: config/avr/avr.cc:1477 +#: config/avr/avr.cc:1500 #, gcc-internal-format msgid "" "%qs is a reserved identifier in AVR-LibC. Consider %<#include <avr/" "interrupt.h>%> before using the %qs macro" msgstr "" -#: config/avr/avr.cc:1694 +#: config/avr/avr.cc:1507 +#, gcc-internal-format +msgid "" +"%qs is a deprecated identifier in AVR-LibC. Consider %<#include <avr/" +"interrupt.h>%> or %<#include <compat/deprecated.h>%> before using the %qs " +"macro" +msgstr "" + +#: config/avr/avr.cc:1728 #, gcc-internal-format msgid "%<builtin_return_address%> contains only 2 bytes of address" msgstr "" -#: config/avr/avr.cc:3119 +#: config/avr/avr.cc:3716 #, gcc-internal-format msgid "pointer offset from symbol maybe incorrect" msgstr "" -#: config/avr/avr.cc:3258 +#: config/avr/avr.cc:3855 #, gcc-internal-format msgid "accessing data memory with program memory address" msgstr "" -#: config/avr/avr.cc:3319 +#: config/avr/avr.cc:3916 #, gcc-internal-format msgid "accessing program memory with data memory address" msgstr "" -#: config/avr/avr.cc:3653 +#: config/avr/avr.cc:4249 #, gcc-internal-format, gfc-internal-format msgid "fixed register %s used to pass parameter to function" msgstr "" -#: config/avr/avr.cc:3918 +#: config/avr/avr.cc:4509 #, gcc-internal-format msgid "writing to address space %qs not supported" msgstr "" -#: config/avr/avr.cc:10356 +#: config/avr/avr.cc:11268 #, gcc-internal-format msgid "%qE attribute only applies to variables in static storage" msgstr "" -#: config/avr/avr.cc:10363 +#: config/avr/avr.cc:11275 #, gcc-internal-format msgid "%qE attribute only supported for reduced Tiny cores" msgstr "" -#: config/avr/avr.cc:10405 +#: config/avr/avr.cc:11317 #, gcc-internal-format msgid "%qE attribute address out of range 0x%x%s0x%x" msgstr "" -#: config/avr/avr.cc:10419 +#: config/avr/avr.cc:11331 #, gcc-internal-format msgid "both %s and %qE attribute provide address" msgstr "" -#: config/avr/avr.cc:10429 +#: config/avr/avr.cc:11341 #, gcc-internal-format msgid "%qE attribute on non-volatile variable" msgstr "" -#: config/avr/avr.cc:10505 +#: config/avr/avr.cc:11417 #, gcc-internal-format msgid "address spaces are not supported for reduced Tiny devices" msgstr "" -#: config/avr/avr.cc:10512 +#: config/avr/avr.cc:11424 #, gcc-internal-format msgid "" "address space %qs not supported for devices with flash size up to %d KiB" msgstr "" -#: config/avr/avr.cc:10693 +#: config/avr/avr.cc:11604 #, gcc-internal-format msgid "pointer targeting address space %qs must be const in %qT" msgstr "" -#: config/avr/avr.cc:10696 +#: config/avr/avr.cc:11607 #, gcc-internal-format msgid "pointer targeting address space %qs must be const in %s %q+D" msgstr "" -#: config/avr/avr.cc:10717 +#: config/avr/avr.cc:11628 #, gcc-internal-format msgid "variable %q+D with attribute %qs must be located in static storage" msgstr "" -#: config/avr/avr.cc:10769 +#: config/avr/avr.cc:11679 #, gcc-internal-format msgid "" "variable %q+D must be const in order to be put into read-only section by " "means of %qs" msgstr "" -#: config/avr/avr.cc:10930 +#: config/avr/avr.cc:11840 #, gcc-internal-format msgid "static attribute %qs declaration for %q+D needs an address" msgstr "" -#: config/avr/avr.cc:11019 +#: config/avr/avr.cc:11929 #, gcc-internal-format msgid "only uninitialized variables can be placed in the %<.noinit%> section" msgstr "" #. This might happen with C++ if stuff needs constructing. -#: config/avr/avr.cc:11096 +#: config/avr/avr.cc:12006 #, gcc-internal-format msgid "variable %q+D with dynamic initialization put into program memory area" msgstr "" -#: config/avr/avr.cc:11107 +#: config/avr/avr.cc:12017 #, gcc-internal-format msgid "uninitialized variable %q+D put into program memory area" msgstr "" @@ -42422,44 +42563,44 @@ msgstr "" #. hence deny initializers now. The values of symbols with an #. address attribute are determined by the attribute, not by #. some initializer. -#: config/avr/avr.cc:11172 +#: config/avr/avr.cc:12082 #, gcc-internal-format msgid "variable %q+D with attribute %qs must not have an initializer" msgstr "" -#: config/avr/avr.cc:11225 +#: config/avr/avr.cc:12135 #, gcc-internal-format msgid "%q+D has incompatible attributes %qs and %qs" msgstr "" -#: config/avr/avr.cc:11288 +#: config/avr/avr.cc:12198 #, gcc-internal-format msgid "architecture %qs supported for assembler only" msgstr "" -#: config/avr/avr.cc:13788 +#: config/avr/avr.cc:14758 #, gcc-internal-format msgid "conversion from address space %qs to address space %qs" msgstr "" -#: config/avr/avr.cc:14878 config/avr/avr.cc:14891 +#: config/avr/avr.cc:15839 config/avr/avr.cc:15852 #, gcc-internal-format, gfc-internal-format msgid "%s expects a compile time integer constant" msgstr "" -#: config/avr/avr.cc:14905 +#: config/avr/avr.cc:15866 #, gcc-internal-format, gfc-internal-format msgid "%s expects a compile time long integer constant as first argument" msgstr "" -#: config/avr/avr.cc:14933 +#: config/avr/avr.cc:15894 #, gcc-internal-format, gfc-internal-format msgid "" "rounding to %d bits has no effect for fixed-point value with %d fractional " "bits" msgstr "" -#: config/avr/avr.cc:14942 +#: config/avr/avr.cc:15903 #, gcc-internal-format msgid "rounding result will always be 0" msgstr "" @@ -42563,54 +42704,78 @@ msgstr "" msgid "BPF CO-RE requires BTF debugging information, use %<-gbtf%>" msgstr "" -#: config/bpf/bpf.cc:216 +#: config/bpf/bpf.cc:214 #, gcc-internal-format msgid "BPF CO-RE does not support LTO" msgstr "" -#: config/bpf/bpf.cc:253 +#: config/bpf/bpf.cc:248 #, gcc-internal-format msgid "%<-fstack-protector%> does not work on this architecture" msgstr "" -#: config/bpf/bpf.cc:382 +#: config/bpf/bpf.cc:380 #, gcc-internal-format msgid "eBPF stack limit exceeded" msgstr "" -#: config/bpf/bpf.cc:664 +#: config/bpf/bpf.cc:674 #, gcc-internal-format msgid "too many function arguments for eBPF" msgstr "" -#: config/bpf/bpf.cc:683 config/bpf/bpf.cc:685 +#: config/bpf/bpf.cc:693 config/bpf/bpf.cc:695 #, gcc-internal-format msgid "no constructors" msgstr "" -#: config/bpf/bpf.cc:701 config/bpf/bpf.cc:703 +#: config/bpf/bpf.cc:711 config/bpf/bpf.cc:713 #, gcc-internal-format msgid "no destructors" msgstr "" -#: config/bpf/bpf.cc:755 +#: config/bpf/bpf.cc:765 #, gcc-internal-format msgid "indirect call in function, which are not supported by eBPF" msgstr "" -#: config/bpf/bpf.cc:1005 config/loongarch/loongarch-builtins.cc:3008 -#: config/mips/mips.cc:17388 config/nios2/nios2.cc:3601 +#: config/bpf/bpf.cc:1015 config/loongarch/loongarch-builtins.cc:3005 +#: config/mips/mips.cc:17394 config/nios2/nios2.cc:3602 #: config/riscv/riscv-builtins.cc:344 -#: config/riscv/riscv-vector-builtins.cc:4189 +#: config/riscv/riscv-vector-builtins.cc:4226 #, gcc-internal-format msgid "invalid argument to built-in function" msgstr "" -#: config/bpf/bpf.cc:1019 +#: config/bpf/bpf.cc:1029 #, gcc-internal-format msgid "invalid built-in function at expansion" msgstr "" +#: config/bpf/bpf.cc:1251 config/bpf/bpf.cc:1254 +#, gcc-internal-format +msgid "could not inline call to %<__builtin_%s%>: size must be constant" +msgstr "" + +#: config/bpf/bpf.cc:1282 config/bpf/bpf.cc:1285 +#, gcc-internal-format +msgid "" +"could not inline call to %<__builtin_%s%>: too many bytes, use %<-minline-" +"memops-threshold%>" +msgstr "" + +#: config/bpf/bpf.cc:1335 config/bpf/bpf.cc:1338 +#, gcc-internal-format +msgid "could not inline call to %<__builtin_memset%>: size must be constant" +msgstr "" + +#: config/bpf/bpf.cc:1366 config/bpf/bpf.cc:1369 +#, gcc-internal-format +msgid "" +"could not inline call to %<__builtin_memset%>: too many bytes, use %<-" +"minline-memops-threshold%>" +msgstr "" + #: config/c6x/c6x.cc:245 #, gcc-internal-format msgid "%<-fpic%> and %<-fPIC%> not supported without %<-mdsbt%> on this target" @@ -42674,33 +42839,33 @@ msgstr "" msgid "stackframe too big: %d bytes" msgstr "" -#: config/csky/csky.cc:2543 +#: config/csky/csky.cc:2544 #, gcc-internal-format, gfc-internal-format msgid "cpu %s is not based on arch %s, ignoring the arch" msgstr "" -#: config/csky/csky.cc:2609 config/csky/csky.cc:2647 config/csky/csky.cc:2712 -#: config/csky/csky.cc:2735 config/csky/csky.cc:2752 +#: config/csky/csky.cc:2610 config/csky/csky.cc:2648 config/csky/csky.cc:2713 +#: config/csky/csky.cc:2736 config/csky/csky.cc:2753 #, gcc-internal-format msgid "%qs is not supported by arch %s" msgstr "" -#: config/csky/csky.cc:2650 +#: config/csky/csky.cc:2651 #, gcc-internal-format msgid "%<-mhard-float%> is not supported by the selected CPU" msgstr "" -#: config/csky/csky.cc:2666 +#: config/csky/csky.cc:2667 #, gcc-internal-format msgid "%<-mdouble-float%> ignored without %<-mhard-float%>" msgstr "" -#: config/csky/csky.cc:2669 +#: config/csky/csky.cc:2670 #, gcc-internal-format msgid "%<-mfdivdu%> ignored without %<-mhard-float%>" msgstr "" -#: config/csky/csky.cc:2724 +#: config/csky/csky.cc:2725 #, gcc-internal-format msgid "%<-msmart%> is incompatible with %<-mhigh-registers%>" msgstr "" @@ -42717,12 +42882,12 @@ msgstr "" #. by the caller. In theory we could test for that and handle #. limited cases with parameters that all fit in r0-r3 with no #. stack overflow, but punt for now. -#: config/csky/csky.cc:6280 +#: config/csky/csky.cc:6281 #, gcc-internal-format msgid "Nested function trampolines not supported on CK801." msgstr "" -#: config/csky/csky.cc:6476 +#: config/csky/csky.cc:6477 #, gcc-internal-format msgid "%qE attribute ignored without %<-mistack%>" msgstr "" @@ -42739,12 +42904,12 @@ msgid "" "or %qs" msgstr "" -#: config/epiphany/epiphany.cc:1542 +#: config/epiphany/epiphany.cc:1543 #, gcc-internal-format msgid "%<stack_offset%> must be at least 4" msgstr "" -#: config/epiphany/epiphany.cc:1544 +#: config/epiphany/epiphany.cc:1545 #, gcc-internal-format msgid "%<stack_offset%> must be a multiple of 4" msgstr "" @@ -42824,143 +42989,158 @@ msgstr "" msgid "stack frame must be smaller than 64K" msgstr "" -#: config/gcn/gcn.cc:170 +#: config/gcn/gcn.cc:174 #, gcc-internal-format msgid "%<-mxnack=on%> is incompatible with %<-march=%s%>" msgstr "" -#: config/gcn/gcn.cc:284 +#: config/gcn/gcn.cc:290 #, gcc-internal-format msgid "%<amdgpu_hsa_kernel%> attribute requires string constant arguments" msgstr "" -#: config/gcn/gcn.cc:297 +#: config/gcn/gcn.cc:303 #, gcc-internal-format msgid "unknown specifier %qs in %<amdgpu_hsa_kernel%> attribute" msgstr "" -#: config/gcn/gcn.cc:304 +#: config/gcn/gcn.cc:310 #, gcc-internal-format msgid "duplicated parameter specifier %qs in %<amdgpu_hsa_kernel%> attribute" msgstr "" -#: config/gcn/gcn.cc:356 +#: config/gcn/gcn.cc:362 #, gcc-internal-format msgid "too many arguments passed in sgpr registers" msgstr "" -#: config/gcn/gcn.cc:2515 +#: config/gcn/gcn.cc:2521 #, gcc-internal-format msgid "" "A non-default set of initial values has been requested, which violates the " "ABI" msgstr "" -#: config/gcn/gcn.cc:2783 +#: config/gcn/gcn.cc:2789 #, gcc-internal-format, gfc-internal-format msgid "wrong type of argument %s" msgstr "" -#: config/gcn/gcn.cc:3788 +#: config/gcn/gcn.cc:3798 #, gcc-internal-format msgid "" "nested function trampolines not supported on GCN5 due to non-executable " "stacks" msgstr "" -#: config/gcn/gcn.cc:3940 +#: config/gcn/gcn.cc:3950 #, gcc-internal-format msgid "TLS is not implemented for GCN." msgstr "" -#: config/gcn/gcn.cc:5032 +#: config/gcn/gcn.cc:5042 #, gcc-internal-format msgid "Builtin not implemented" msgstr "" -#: config/gcn/gcn.cc:5636 +#: config/gcn/gcn.cc:5688 #, gcc-internal-format msgid "unsupported simdlen %wd (amdgcn)" msgstr "" -#: config/gcn/gcn.cc:6346 +#: config/gcn/gcn.cc:6398 #, gcc-internal-format msgid "using %<vector_length (64)%>, ignoring %d" msgstr "" -#: config/gcn/gcn.cc:6347 +#: config/gcn/gcn.cc:6399 #, gcc-internal-format msgid "using %<vector_length (64)%>, ignoring runtime setting" msgstr "" -#: config/gcn/gcn.cc:6359 config/nvptx/nvptx.cc:6606 +#: config/gcn/gcn.cc:6411 config/nvptx/nvptx.cc:6607 #, gcc-internal-format msgid "using %<num_workers (%d)%>, ignoring %d" msgstr "" -#: config/gcn/gcn.cc:6386 config/gcn/gcn.cc:6415 +#: config/gcn/gcn.cc:6438 config/gcn/gcn.cc:6467 #, gcc-internal-format, gfc-internal-format msgid "offload dimension out of range (%d)" msgstr "" -#: config/gcn/gcn.cc:6910 +#: config/gcn/gcn.cc:6972 #, gcc-internal-format msgid "" "%d bytes of gang-private data-share memory exhausted (increase with %<-mgang-" "private-size=%d%>, for example)" msgstr "" -#: config/gcn/mkoffload.cc:160 +#: config/gcn/mkoffload.cc:166 #, gcc-internal-format msgid "deleting file %qs: %m" msgstr "" -#: config/gcn/mkoffload.cc:862 +#: config/gcn/mkoffload.cc:873 +#, gcc-internal-format +msgid "unrecognized argument in option %<-march=%s%>" +msgstr "" + +#: config/gcn/mkoffload.cc:897 +#, gcc-internal-format +msgid "valid arguments to %<-march=%> are: %s" +msgstr "" + +#: config/gcn/mkoffload.cc:900 +#, gcc-internal-format +msgid "valid argument to %<-march=%> is %qs" +msgstr "" + +#: config/gcn/mkoffload.cc:936 #, gcc-internal-format msgid "%<COLLECT_GCC%> must be set" msgstr "" -#: config/gcn/mkoffload.cc:908 +#: config/gcn/mkoffload.cc:982 #, gcc-internal-format msgid "offload compiler %qs not found" msgstr "" -#: config/gcn/mkoffload.cc:930 +#: config/gcn/mkoffload.cc:1004 #, gcc-internal-format msgid "unrecognizable argument of option %<" msgstr "" -#: config/gcn/mkoffload.cc:994 config/nvptx/mkoffload.cc:751 +#: config/gcn/mkoffload.cc:1056 config/nvptx/mkoffload.cc:753 #, gcc-internal-format msgid "either %<-fopenacc%> or %<-fopenmp%> must be set" msgstr "" -#: config/gcn/mkoffload.cc:1039 +#: config/gcn/mkoffload.cc:1103 #, gcc-internal-format msgid "unhandled architecture" msgstr "" -#: config/gcn/mkoffload.cc:1079 config/gcn/mkoffload.cc:1231 +#: config/gcn/mkoffload.cc:1143 config/gcn/mkoffload.cc:1295 #, gcc-internal-format msgid "cannot open %qs" msgstr "" -#: config/gcn/mkoffload.cc:1217 config/nvptx/mkoffload.cc:841 +#: config/gcn/mkoffload.cc:1281 config/nvptx/mkoffload.cc:843 #, gcc-internal-format msgid "cannot open omp_requires file %qs" msgstr "" -#: config/gcn/mkoffload.cc:1221 config/nvptx/mkoffload.cc:845 +#: config/gcn/mkoffload.cc:1285 config/nvptx/mkoffload.cc:847 #, gcc-internal-format msgid "cannot read omp_requires file %qs" msgstr "" -#: config/gcn/mkoffload.cc:1227 +#: config/gcn/mkoffload.cc:1291 #, gcc-internal-format msgid "cannot open intermediate gcn asm file" msgstr "" -#: config/gcn/mkoffload.cc:1244 +#: config/gcn/mkoffload.cc:1308 #, gcc-internal-format msgid "cannot open intermediate gcn obj file" msgstr "" @@ -43000,526 +43180,526 @@ msgstr "" msgid "cannot set position in PCH file: %m" msgstr "" -#: config/i386/i386-builtins.cc:1960 +#: config/i386/i386-builtins.cc:1962 #, gcc-internal-format msgid "no dispatcher found for the versioning attributes" msgstr "" -#: config/i386/i386-builtins.cc:2010 +#: config/i386/i386-builtins.cc:2012 #, gcc-internal-format msgid "ISA %qs is not supported in %<target%> attribute, use %<arch=%> syntax" msgstr "" -#: config/i386/i386-builtins.cc:2021 +#: config/i386/i386-builtins.cc:2023 #, gcc-internal-format, gfc-internal-format msgid "no dispatcher found for the versioning attributes: %s" msgstr "" -#: config/i386/i386-builtins.cc:2131 +#: config/i386/i386-builtins.cc:2133 #, gcc-internal-format msgid "parameter to builtin must be a string constant or literal" msgstr "" -#: config/i386/i386-builtins.cc:2155 config/i386/i386-builtins.cc:2204 +#: config/i386/i386-builtins.cc:2157 config/i386/i386-builtins.cc:2206 #, gcc-internal-format, gfc-internal-format msgid "parameter to builtin not valid: %s" msgstr "" -#: config/i386/i386-expand.cc:9751 +#: config/i386/i386-expand.cc:9752 #, gcc-internal-format msgid "interrupt service routine cannot be called directly" msgstr "" -#: config/i386/i386-expand.cc:10222 config/i386/i386-expand.cc:11809 +#: config/i386/i386-expand.cc:10223 config/i386/i386-expand.cc:11810 #, gcc-internal-format msgid "the last argument must be a 2-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:10696 +#: config/i386/i386-expand.cc:10697 #, gcc-internal-format msgid "the fifth argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:10791 +#: config/i386/i386-expand.cc:10792 #, gcc-internal-format msgid "the third argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11738 +#: config/i386/i386-expand.cc:11739 #, gcc-internal-format msgid "the last argument must be an 1-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11753 +#: config/i386/i386-expand.cc:11754 #, gcc-internal-format msgid "the last argument must be a 3-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11788 +#: config/i386/i386-expand.cc:11789 #, gcc-internal-format msgid "the last argument must be a 4-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11828 +#: config/i386/i386-expand.cc:11829 #, gcc-internal-format msgid "the last argument must be a 1-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11844 +#: config/i386/i386-expand.cc:11845 #, gcc-internal-format msgid "the last argument must be a 5-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11854 +#: config/i386/i386-expand.cc:11855 #, gcc-internal-format msgid "the next to last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11859 +#: config/i386/i386-expand.cc:11860 #, gcc-internal-format msgid "the last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:11996 +#: config/i386/i386-expand.cc:11997 #, gcc-internal-format msgid "the third argument must be comparison constant" msgstr "" -#: config/i386/i386-expand.cc:12001 +#: config/i386/i386-expand.cc:12002 #, gcc-internal-format msgid "incorrect comparison mode" msgstr "" -#: config/i386/i386-expand.cc:12007 config/i386/i386-expand.cc:12331 +#: config/i386/i386-expand.cc:12008 config/i386/i386-expand.cc:12332 #, gcc-internal-format msgid "incorrect rounding operand" msgstr "" -#: config/i386/i386-expand.cc:12311 +#: config/i386/i386-expand.cc:12312 #, gcc-internal-format msgid "the immediate argument must be a 4-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12319 +#: config/i386/i386-expand.cc:12320 #, gcc-internal-format msgid "the immediate argument must be a 5-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12322 +#: config/i386/i386-expand.cc:12323 #, gcc-internal-format msgid "the immediate argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:12798 +#: config/i386/i386-expand.cc:12799 #, gcc-internal-format msgid "the fourth argument must be one of enum %qs" msgstr "" -#: config/i386/i386-expand.cc:12868 config/rs6000/rs6000-builtin.cc:2378 +#: config/i386/i386-expand.cc:12869 config/rs6000/rs6000-builtin.cc:2378 #, gcc-internal-format msgid "selector must be an integer constant in the range [0, %wi]" msgstr "" -#: config/i386/i386-expand.cc:13119 +#: config/i386/i386-expand.cc:13120 #, gcc-internal-format msgid "%qE needs unknown isa option" msgstr "" -#: config/i386/i386-expand.cc:13123 +#: config/i386/i386-expand.cc:13124 #, gcc-internal-format msgid "%qE needs isa option %s" msgstr "" -#: config/i386/i386-expand.cc:13611 +#: config/i386/i386-expand.cc:13612 #, gcc-internal-format msgid "second, third and fourth argument must be a const" msgstr "" -#: config/i386/i386-expand.cc:13619 +#: config/i386/i386-expand.cc:13620 #, gcc-internal-format msgid "invalid third argument" msgstr "" #. Ignore the hint. -#: config/i386/i386-expand.cc:13628 config/i386/i386-expand.cc:13683 +#: config/i386/i386-expand.cc:13629 config/i386/i386-expand.cc:13684 #, gcc-internal-format msgid "" "instruction prefetch applies when in 64-bit mode with RIP-relative " "addressing and option %<-mprefetchi%>; they stay NOPs otherwise" msgstr "" -#: config/i386/i386-expand.cc:13645 +#: config/i386/i386-expand.cc:13646 #, gcc-internal-format msgid "invalid third argument to %<__builtin_ia32_prefetch%>; using zero" msgstr "" -#: config/i386/i386-expand.cc:13671 +#: config/i386/i386-expand.cc:13672 #, gcc-internal-format msgid "second argument must be a const" msgstr "" -#: config/i386/i386-expand.cc:14198 +#: config/i386/i386-expand.cc:14218 #, gcc-internal-format msgid "the last argument must be a 32-bit immediate" msgstr "" -#: config/i386/i386-expand.cc:14231 +#: config/i386/i386-expand.cc:14251 #, gcc-internal-format msgid "last argument must be an immediate" msgstr "" -#: config/i386/i386-expand.cc:14993 config/i386/i386-expand.cc:15205 +#: config/i386/i386-expand.cc:15013 config/i386/i386-expand.cc:15225 #, gcc-internal-format msgid "the last argument must be scale 1, 2, 4, 8" msgstr "" -#: config/i386/i386-expand.cc:15258 +#: config/i386/i386-expand.cc:15278 #, gcc-internal-format msgid "the forth argument must be scale 1, 2, 4, 8" msgstr "" -#: config/i386/i386-expand.cc:15264 +#: config/i386/i386-expand.cc:15284 #, gcc-internal-format msgid "incorrect hint operand" msgstr "" -#: config/i386/i386-expand.cc:15283 +#: config/i386/i386-expand.cc:15303 #, gcc-internal-format msgid "the argument to %<xabort%> intrinsic must be an 8-bit immediate" msgstr "" -#: config/i386/i386-features.cc:3526 +#: config/i386/i386-features.cc:3516 #, gcc-internal-format msgid "" "function versions cannot be marked as %<gnu_inline%>, bodies have to be " "generated" msgstr "" -#: config/i386/i386-options.cc:921 config/i386/i386-options.cc:2246 -#: config/i386/i386-options.cc:2255 +#: config/i386/i386-options.cc:925 config/i386/i386-options.cc:2250 +#: config/i386/i386-options.cc:2259 #, gcc-internal-format, gfc-internal-format msgid "code model %s does not support PIC mode" msgstr "" -#: config/i386/i386-options.cc:1204 +#: config/i386/i386-options.cc:1208 #, gcc-internal-format msgid "attribute %qs argument is not a string" msgstr "" -#: config/i386/i386-options.cc:1268 +#: config/i386/i386-options.cc:1272 #, gcc-internal-format msgid "attribute %qs argument %qs is unknown" msgstr "" -#: config/i386/i386-options.cc:1331 +#: config/i386/i386-options.cc:1335 #, gcc-internal-format msgid "attribute value %qs was already specified in %qs attribute" msgstr "" -#: config/i386/i386-options.cc:1369 +#: config/i386/i386-options.cc:1373 #, gcc-internal-format msgid "attribute value %qs is unknown in %qs attribute" msgstr "" -#: config/i386/i386-options.cc:1669 +#: config/i386/i386-options.cc:1673 #, gcc-internal-format msgid "wrong argument %qs to option %qs" msgstr "" -#: config/i386/i386-options.cc:1675 +#: config/i386/i386-options.cc:1679 #, gcc-internal-format msgid "size ranges of option %qs should be increasing" msgstr "" -#: config/i386/i386-options.cc:1685 +#: config/i386/i386-options.cc:1689 #, gcc-internal-format msgid "wrong strategy name %qs specified for option %qs" msgstr "" #. rep; movq isn't available in 32-bit code. -#: config/i386/i386-options.cc:1711 +#: config/i386/i386-options.cc:1715 #, gcc-internal-format msgid "" "strategy name %qs specified for option %qs not supported for 32-bit code" msgstr "" -#: config/i386/i386-options.cc:1724 +#: config/i386/i386-options.cc:1728 #, gcc-internal-format msgid "unknown alignment %qs specified for option %qs" msgstr "" -#: config/i386/i386-options.cc:1734 +#: config/i386/i386-options.cc:1738 #, gcc-internal-format msgid "the max value for the last size range should be -1 for option %qs" msgstr "" -#: config/i386/i386-options.cc:1741 +#: config/i386/i386-options.cc:1745 #, gcc-internal-format msgid "too many size ranges specified in option %qs" msgstr "" -#: config/i386/i386-options.cc:1819 +#: config/i386/i386-options.cc:1823 #, gcc-internal-format msgid "unknown parameter to option %<-mtune-ctrl%>: %s" msgstr "" -#: config/i386/i386-options.cc:2042 +#: config/i386/i386-options.cc:2046 #, gcc-internal-format msgid "Intel MCU psABI isn%'t supported in %s mode" msgstr "" -#: config/i386/i386-options.cc:2096 +#: config/i386/i386-options.cc:2100 #, gcc-internal-format msgid "" "%<-mtune=x86-64%> is deprecated; use %<-mtune=k8%> or %<-mtune=generic%> " "instead as appropriate" msgstr "" -#: config/i386/i386-options.cc:2098 +#: config/i386/i386-options.cc:2102 #, gcc-internal-format msgid "" "%<target(\"tune=x86-64\")%> is deprecated; use %<target(\"tune=k8\")%> or " "%<target(\"tune=generic\")%> instead as appropriate" msgstr "" -#: config/i386/i386-options.cc:2104 +#: config/i386/i386-options.cc:2108 #, gcc-internal-format msgid "%<-mtune=knl%> support will be removed in GCC 15" msgstr "" -#: config/i386/i386-options.cc:2105 +#: config/i386/i386-options.cc:2109 #, gcc-internal-format msgid "%<target(\"tune=knl\")%> support will be removed in GCC 15" msgstr "" -#: config/i386/i386-options.cc:2110 +#: config/i386/i386-options.cc:2114 #, gcc-internal-format msgid "%<-mtune=knm%> support will be removed in GCC 15" msgstr "" -#: config/i386/i386-options.cc:2111 +#: config/i386/i386-options.cc:2115 #, gcc-internal-format msgid "%<target(\"tune=knm\")%> support will be removed in GCC 15" msgstr "" #. rep; movq isn't available in 32-bit code. -#: config/i386/i386-options.cc:2138 +#: config/i386/i386-options.cc:2142 #, gcc-internal-format msgid "%<-mstringop-strategy=rep_8byte%> not supported for 32-bit code" msgstr "" -#: config/i386/i386-options.cc:2143 +#: config/i386/i386-options.cc:2147 #, gcc-internal-format msgid "%<-mapxf%> is not supported for 32-bit code" msgstr "" -#: config/i386/i386-options.cc:2145 +#: config/i386/i386-options.cc:2149 #, gcc-internal-format msgid "%<-mapx-features=%> option is not supported for 32-bit code" msgstr "" -#: config/i386/i386-options.cc:2148 +#: config/i386/i386-options.cc:2152 #, gcc-internal-format msgid "%<-muintr%> not supported for 32-bit code" msgstr "" -#: config/i386/i386-options.cc:2151 +#: config/i386/i386-options.cc:2155 #, gcc-internal-format msgid "%<-mlam=%> option: [u48|u57] not supported for 32-bit code" msgstr "" -#: config/i386/i386-options.cc:2166 +#: config/i386/i386-options.cc:2170 #, gcc-internal-format msgid "address mode %qs not supported in the %s bit mode" msgstr "" -#: config/i386/i386-options.cc:2177 +#: config/i386/i386-options.cc:2181 #, gcc-internal-format msgid "%<-mabi=ms%> not supported with X32 ABI" msgstr "" -#: config/i386/i386-options.cc:2183 +#: config/i386/i386-options.cc:2187 #, gcc-internal-format msgid "%<-mabi=%s%> not supported with %<-fsanitize=address%>" msgstr "" -#: config/i386/i386-options.cc:2186 +#: config/i386/i386-options.cc:2190 #, gcc-internal-format msgid "%<-mabi=%s%> not supported with %<-fsanitize=kernel-address%>" msgstr "" -#: config/i386/i386-options.cc:2190 +#: config/i386/i386-options.cc:2194 #, gcc-internal-format msgid "%<-mabi=%s%> not supported with %<-fsanitize=thread%>" msgstr "" -#: config/i386/i386-options.cc:2196 +#: config/i386/i386-options.cc:2200 #, gcc-internal-format msgid "" "%<-mlam=u48%> is not compatible with Hardware-assisted AddressSanitizer, " "override to %<-mlam=u57%>" msgstr "" -#: config/i386/i386-options.cc:2216 config/i386/i386-options.cc:2225 -#: config/i386/i386-options.cc:2237 config/i386/i386-options.cc:2248 -#: config/i386/i386-options.cc:2259 +#: config/i386/i386-options.cc:2220 config/i386/i386-options.cc:2229 +#: config/i386/i386-options.cc:2241 config/i386/i386-options.cc:2252 +#: config/i386/i386-options.cc:2263 #, gcc-internal-format msgid "code model %qs not supported in the %s bit mode" msgstr "" -#: config/i386/i386-options.cc:2228 config/i386/i386-options.cc:2240 +#: config/i386/i386-options.cc:2232 config/i386/i386-options.cc:2244 #, gcc-internal-format msgid "code model %qs not supported in x32 mode" msgstr "" -#: config/i386/i386-options.cc:2283 +#: config/i386/i386-options.cc:2287 #, gcc-internal-format msgid "%<-masm=intel%> not supported in this configuration" msgstr "" -#: config/i386/i386-options.cc:2288 +#: config/i386/i386-options.cc:2292 #, gcc-internal-format, gfc-internal-format msgid "%i-bit mode not compiled in" msgstr "" -#: config/i386/i386-options.cc:2300 +#: config/i386/i386-options.cc:2304 #, gcc-internal-format msgid "%<generic%> CPU can be used only for %<-mtune=%> switch" msgstr "" -#: config/i386/i386-options.cc:2302 +#: config/i386/i386-options.cc:2306 #, gcc-internal-format msgid "%<generic%> CPU can be used only for %<target(\"tune=\")%> attribute" msgstr "" -#: config/i386/i386-options.cc:2309 +#: config/i386/i386-options.cc:2313 #, gcc-internal-format msgid "%<intel%> CPU can be used only for %<-mtune=%> switch" msgstr "" -#: config/i386/i386-options.cc:2311 +#: config/i386/i386-options.cc:2315 #, gcc-internal-format msgid "%<intel%> CPU can be used only for %<target(\"tune=\")%> attribute" msgstr "" -#: config/i386/i386-options.cc:2319 config/i386/i386-options.cc:2472 +#: config/i386/i386-options.cc:2323 config/i386/i386-options.cc:2476 #, gcc-internal-format msgid "CPU you selected does not support x86-64 instruction set" msgstr "" -#: config/i386/i386-options.cc:2327 +#: config/i386/i386-options.cc:2331 #, gcc-internal-format msgid "%<-march=knl%> support will be removed in GCC 15" msgstr "" -#: config/i386/i386-options.cc:2328 +#: config/i386/i386-options.cc:2332 #, gcc-internal-format msgid "%<target(\"arch=knl\")%> support will be removed in GCC 15" msgstr "" -#: config/i386/i386-options.cc:2333 +#: config/i386/i386-options.cc:2337 #, gcc-internal-format msgid "%<-march=knm%> support will be removed in GCC 15" msgstr "" -#: config/i386/i386-options.cc:2334 +#: config/i386/i386-options.cc:2338 #, gcc-internal-format msgid "%<target(\"arch=knm\")%> support will be removed in GCC 15" msgstr "" -#: config/i386/i386-options.cc:2411 +#: config/i386/i386-options.cc:2415 #, gcc-internal-format msgid "bad value %qs for %<-march=%> switch" msgstr "" -#: config/i386/i386-options.cc:2412 +#: config/i386/i386-options.cc:2416 #, gcc-internal-format msgid "bad value %qs for %<target(\"arch=\")%> attribute" msgstr "" -#: config/i386/i386-options.cc:2434 +#: config/i386/i386-options.cc:2438 #, gcc-internal-format msgid "valid arguments to %<-march=%> switch are: %s; did you mean %qs?" msgstr "" -#: config/i386/i386-options.cc:2436 +#: config/i386/i386-options.cc:2440 #, gcc-internal-format msgid "" "valid arguments to %<target(\"arch=\")%> attribute are: %s; did you mean %qs?" msgstr "" -#: config/i386/i386-options.cc:2441 +#: config/i386/i386-options.cc:2445 #, gcc-internal-format msgid "valid arguments to %<-march=%> switch are: %s" msgstr "" -#: config/i386/i386-options.cc:2442 +#: config/i386/i386-options.cc:2446 #, gcc-internal-format msgid "valid arguments to %<target(\"arch=\")%> attribute are: %s" msgstr "" -#: config/i386/i386-options.cc:2491 +#: config/i386/i386-options.cc:2495 #, gcc-internal-format msgid "bad value %qs for %<-mtune=%> switch" msgstr "" -#: config/i386/i386-options.cc:2492 +#: config/i386/i386-options.cc:2496 #, gcc-internal-format msgid "bad value %qs for %<target(\"tune=\")%> attribute" msgstr "" -#: config/i386/i386-options.cc:2513 +#: config/i386/i386-options.cc:2517 #, gcc-internal-format msgid "valid arguments to %<-mtune=%> switch are: %s; did you mean %qs?" msgstr "" -#: config/i386/i386-options.cc:2515 +#: config/i386/i386-options.cc:2519 #, gcc-internal-format msgid "" "valid arguments to %<target(\"tune=\")%> attribute are: %s; did you mean %qs?" msgstr "" -#: config/i386/i386-options.cc:2520 +#: config/i386/i386-options.cc:2524 #, gcc-internal-format msgid "valid arguments to %<-mtune=%> switch are: %s" msgstr "" -#: config/i386/i386-options.cc:2521 +#: config/i386/i386-options.cc:2525 #, gcc-internal-format msgid "valid arguments to %<target(\"tune=\")%> attribute are: %s" msgstr "" -#: config/i386/i386-options.cc:2549 +#: config/i386/i386-options.cc:2553 #, gcc-internal-format msgid "%<-mregparm%> is ignored in 64-bit mode" msgstr "" -#: config/i386/i386-options.cc:2551 +#: config/i386/i386-options.cc:2555 #, gcc-internal-format msgid "%<-mregparm%> is ignored for Intel MCU psABI" msgstr "" -#: config/i386/i386-options.cc:2554 +#: config/i386/i386-options.cc:2558 #, gcc-internal-format msgid "%<-mregparm=%d%> is not between 0 and %d" msgstr "" -#: config/i386/i386-options.cc:2577 +#: config/i386/i386-options.cc:2581 #, gcc-internal-format msgid "%<-m96bit-long-double%> is not compatible with this target" msgstr "" -#: config/i386/i386-options.cc:2582 +#: config/i386/i386-options.cc:2586 #, gcc-internal-format msgid "%<-mrtd%> is ignored in 64bit mode" msgstr "" -#: config/i386/i386-options.cc:2583 +#: config/i386/i386-options.cc:2587 #, gcc-internal-format msgid "%<target(\"rtd\")%> is ignored in 64bit mode" msgstr "" -#: config/i386/i386-options.cc:2676 +#: config/i386/i386-options.cc:2680 #, gcc-internal-format msgid "" "%<-mno-evex512%> or %<-mno-avx512XXX%> cannot disable AVX10 instructions " @@ -43529,7 +43709,7 @@ msgstr "" #. We should not emit 512 bit instructions under AVX10.1-256 #. when EVEX512 is enabled w/o any AVX512 features enabled. #. Disable EVEX512 bit for this. -#: config/i386/i386-options.cc:2690 +#: config/i386/i386-options.cc:2694 #, gcc-internal-format msgid "" "Using %<-mevex512%> without any AVX512 features enabled together with " @@ -43537,441 +43717,441 @@ msgid "" "as max vector size" msgstr "" -#: config/i386/i386-options.cc:2697 config/i386/i386-options.cc:2703 +#: config/i386/i386-options.cc:2701 config/i386/i386-options.cc:2707 #, gcc-internal-format msgid "" "Vector size conflicts between AVX10.1 and AVX512, using 512 as max vector " "size" msgstr "" -#: config/i386/i386-options.cc:2711 +#: config/i386/i386-options.cc:2715 #, gcc-internal-format msgid "" "%<-mno-avx512XXX%> cannot disable AVX10 instructions when AVX10 is available" msgstr "" -#: config/i386/i386-options.cc:2721 +#: config/i386/i386-options.cc:2725 #, gcc-internal-format msgid "" "%<-mno-avx10.1, -mno-avx10.1-256, -mno-avx10.1-512%> cannot disable AVX512 " "instructions when %<-mavx512XXX%>" msgstr "" -#: config/i386/i386-options.cc:2776 +#: config/i386/i386-options.cc:2780 #, gcc-internal-format msgid "%<-mpreferred-stack-boundary%> is not supported for this target" msgstr "" -#: config/i386/i386-options.cc:2779 +#: config/i386/i386-options.cc:2783 #, gcc-internal-format msgid "%<-mpreferred-stack-boundary=%d%> is not between %d and %d" msgstr "" -#: config/i386/i386-options.cc:2802 +#: config/i386/i386-options.cc:2806 #, gcc-internal-format msgid "%<-mincoming-stack-boundary=%d%> is not between %d and 12" msgstr "" -#: config/i386/i386-options.cc:2815 +#: config/i386/i386-options.cc:2819 #, gcc-internal-format msgid "%<-mnop-mcount%> is not compatible with this target" msgstr "" -#: config/i386/i386-options.cc:2818 +#: config/i386/i386-options.cc:2822 #, gcc-internal-format msgid "%<-mnop-mcount%> is not implemented for %<-fPIC%>" msgstr "" -#: config/i386/i386-options.cc:2824 +#: config/i386/i386-options.cc:2828 #, gcc-internal-format msgid "%<-msseregparm%> used without SSE enabled" msgstr "" -#: config/i386/i386-options.cc:2825 +#: config/i386/i386-options.cc:2829 #, gcc-internal-format msgid "%<target(\"sseregparm\")%> used without SSE enabled" msgstr "" -#: config/i386/i386-options.cc:2835 +#: config/i386/i386-options.cc:2839 #, gcc-internal-format msgid "SSE instruction set disabled, using 387 arithmetics" msgstr "" -#: config/i386/i386-options.cc:2842 +#: config/i386/i386-options.cc:2846 #, gcc-internal-format msgid "387 instruction set disabled, using SSE arithmetics" msgstr "" -#: config/i386/i386-options.cc:2892 +#: config/i386/i386-options.cc:2896 #, gcc-internal-format msgid "stack probing requires %<-maccumulate-outgoing-args%> for correctness" msgstr "" -#: config/i386/i386-options.cc:2894 +#: config/i386/i386-options.cc:2898 #, gcc-internal-format msgid "" "stack probing requires %<target(\"accumulate-outgoing-args\")%> for " "correctness" msgstr "" -#: config/i386/i386-options.cc:2908 +#: config/i386/i386-options.cc:2912 #, gcc-internal-format msgid "fixed ebp register requires %<-maccumulate-outgoing-args%>" msgstr "" -#: config/i386/i386-options.cc:2910 +#: config/i386/i386-options.cc:2914 #, gcc-internal-format msgid "fixed ebp register requires %<target(\"accumulate-outgoing-args\")%>" msgstr "" -#: config/i386/i386-options.cc:2970 +#: config/i386/i386-options.cc:2974 #, gcc-internal-format msgid "%<-mfentry%> isn%'t supported for 32-bit in combination with %<-fpic%>" msgstr "" -#: config/i386/i386-options.cc:2973 +#: config/i386/i386-options.cc:2977 #, gcc-internal-format msgid "%<-mno-fentry%> isn%'t compatible with SEH" msgstr "" -#: config/i386/i386-options.cc:2977 +#: config/i386/i386-options.cc:2981 #, gcc-internal-format msgid "%<-mcall-ms2sysv-xlogues%> isn%'t currently supported with SEH" msgstr "" -#: config/i386/i386-options.cc:3099 config/loongarch/loongarch.cc:7785 +#: config/i386/i386-options.cc:3103 config/loongarch/loongarch-opts.cc:868 #, gcc-internal-format msgid "unknown option for %<-mrecip=%s%>" msgstr "" -#: config/i386/i386-options.cc:3158 +#: config/i386/i386-options.cc:3162 #, gcc-internal-format msgid "%qs is not a valid number in %<-mstack-protector-guard-offset=%>" msgstr "" -#: config/i386/i386-options.cc:3163 +#: config/i386/i386-options.cc:3167 #, gcc-internal-format msgid "%qs is not a valid offset in %<-mstack-protector-guard-offset=%>" msgstr "" -#: config/i386/i386-options.cc:3191 +#: config/i386/i386-options.cc:3195 #, gcc-internal-format msgid "%qs is not a valid base register in %<-mstack-protector-guard-reg=%>" msgstr "" -#: config/i386/i386-options.cc:3245 +#: config/i386/i386-options.cc:3249 #, gcc-internal-format msgid "" "%<-fcf-protection=full%> is not enabled by %<-fhardened%> because it was " "specified on the command line" msgstr "" -#: config/i386/i386-options.cc:3254 +#: config/i386/i386-options.cc:3258 #, gcc-internal-format msgid "%<-fcf-protection%> is not compatible with this target" msgstr "" -#: config/i386/i386-options.cc:3410 +#: config/i386/i386-options.cc:3425 #, gcc-internal-format msgid "interrupt and naked attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3414 config/i386/i386-options.cc:3446 -#: config/i386/i386-options.cc:3990 config/i386/i386-options.cc:4000 +#: config/i386/i386-options.cc:3429 config/i386/i386-options.cc:3461 +#: config/i386/i386-options.cc:4005 config/i386/i386-options.cc:4015 #, gcc-internal-format msgid "%qs and %qs attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3431 +#: config/i386/i386-options.cc:3446 #, gcc-internal-format msgid "only DWARF debug format is supported for interrupt service routine" msgstr "" -#: config/i386/i386-options.cc:3492 +#: config/i386/i386-options.cc:3507 #, gcc-internal-format msgid "%<-mindirect-branch=%s%> and %<-mcmodel=large%> are not compatible" msgstr "" -#: config/i386/i386-options.cc:3502 +#: config/i386/i386-options.cc:3517 #, gcc-internal-format msgid "%<-mindirect-branch%> and %<-fcf-protection%> are not compatible" msgstr "" -#: config/i386/i386-options.cc:3537 +#: config/i386/i386-options.cc:3552 #, gcc-internal-format msgid "%<-mfunction-return=%s%> and %<-mcmodel=large%> are not compatible" msgstr "" -#: config/i386/i386-options.cc:3547 +#: config/i386/i386-options.cc:3562 #, gcc-internal-format msgid "%<-mfunction-return%> and %<-fcf-protection%> are not compatible" msgstr "" -#: config/i386/i386-options.cc:3655 +#: config/i386/i386-options.cc:3670 #, gcc-internal-format msgid "%s instructions aren%'t allowed in an exception service routine" msgstr "" -#: config/i386/i386-options.cc:3657 +#: config/i386/i386-options.cc:3672 #, gcc-internal-format msgid "%s instructions aren%'t allowed in an interrupt service routine" msgstr "" -#: config/i386/i386-options.cc:3661 +#: config/i386/i386-options.cc:3676 #, gcc-internal-format msgid "" "%s instructions aren%'t allowed in a function with the " "%<no_caller_saved_registers%> attribute" msgstr "" -#: config/i386/i386-options.cc:3708 config/i386/i386-options.cc:3759 +#: config/i386/i386-options.cc:3723 config/i386/i386-options.cc:3774 #, gcc-internal-format msgid "fastcall and regparm attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3713 +#: config/i386/i386-options.cc:3728 #, gcc-internal-format msgid "regparam and thiscall attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3720 config/i386/i386-options.cc:3948 +#: config/i386/i386-options.cc:3735 config/i386/i386-options.cc:3963 #, gcc-internal-format msgid "%qE attribute requires an integer constant argument" msgstr "" -#: config/i386/i386-options.cc:3726 +#: config/i386/i386-options.cc:3741 #, gcc-internal-format msgid "argument to %qE attribute larger than %d" msgstr "" -#: config/i386/i386-options.cc:3751 config/i386/i386-options.cc:3794 +#: config/i386/i386-options.cc:3766 config/i386/i386-options.cc:3809 #, gcc-internal-format msgid "fastcall and cdecl attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3755 +#: config/i386/i386-options.cc:3770 #, gcc-internal-format msgid "fastcall and stdcall attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3763 config/i386/i386-options.cc:3812 +#: config/i386/i386-options.cc:3778 config/i386/i386-options.cc:3827 #, gcc-internal-format msgid "fastcall and thiscall attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3773 config/i386/i386-options.cc:3790 +#: config/i386/i386-options.cc:3788 config/i386/i386-options.cc:3805 #, gcc-internal-format msgid "stdcall and cdecl attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3777 +#: config/i386/i386-options.cc:3792 #, gcc-internal-format msgid "stdcall and fastcall attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3781 config/i386/i386-options.cc:3808 +#: config/i386/i386-options.cc:3796 config/i386/i386-options.cc:3823 #, gcc-internal-format msgid "stdcall and thiscall attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3798 config/i386/i386-options.cc:3816 +#: config/i386/i386-options.cc:3813 config/i386/i386-options.cc:3831 #, gcc-internal-format msgid "cdecl and thiscall attributes are not compatible" msgstr "" -#: config/i386/i386-options.cc:3804 +#: config/i386/i386-options.cc:3819 #, gcc-internal-format msgid "%qE attribute is used for non-class method" msgstr "" -#: config/i386/i386-options.cc:3908 config/rs6000/rs6000.cc:20796 +#: config/i386/i386-options.cc:3923 config/rs6000/rs6000.cc:20748 #, gcc-internal-format msgid "%qE incompatible attribute ignored" msgstr "" -#: config/i386/i386-options.cc:3935 +#: config/i386/i386-options.cc:3950 #, gcc-internal-format msgid "%qE attribute only available for 32-bit" msgstr "" -#: config/i386/i386-options.cc:3956 +#: config/i386/i386-options.cc:3971 #, gcc-internal-format msgid "argument to %qE attribute is neither zero, nor one" msgstr "" -#: config/i386/i386-options.cc:4027 config/i386/i386-options.cc:4049 -#: config/ia64/ia64.cc:822 config/s390/s390.cc:1269 +#: config/i386/i386-options.cc:4042 config/i386/i386-options.cc:4064 +#: config/ia64/ia64.cc:822 config/s390/s390.cc:1271 #, gcc-internal-format msgid "%qE attribute requires a string constant argument" msgstr "" -#: config/i386/i386-options.cc:4037 config/i386/i386-options.cc:4059 -#: config/s390/s390.cc:1298 +#: config/i386/i386-options.cc:4052 config/i386/i386-options.cc:4074 +#: config/s390/s390.cc:1300 #, gcc-internal-format msgid "argument to %qE attribute is not (keep|thunk|thunk-inline|thunk-extern)" msgstr "" -#: config/i386/i386-options.cc:4091 +#: config/i386/i386-options.cc:4106 #, gcc-internal-format msgid "interrupt service routine should have a pointer as the first argument" msgstr "" -#: config/i386/i386-options.cc:4098 +#: config/i386/i386-options.cc:4113 #, gcc-internal-format msgid "interrupt service routine should have %qs as the second argument" msgstr "" -#: config/i386/i386-options.cc:4109 +#: config/i386/i386-options.cc:4124 #, gcc-internal-format msgid "" "interrupt service routine can only have a pointer argument and an optional " "integer argument" msgstr "" -#: config/i386/i386-options.cc:4112 +#: config/i386/i386-options.cc:4127 #, gcc-internal-format msgid "interrupt service routine must return %<void%>" msgstr "" -#: config/i386/i386.cc:1278 +#: config/i386/i386.cc:1281 #, gcc-internal-format msgid "calling %qD with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.cc:1281 +#: config/i386/i386.cc:1284 #, gcc-internal-format msgid "calling %qT with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.cc:1585 +#: config/i386/i386.cc:1588 #, gcc-internal-format msgid "X32 does not support %<ms_abi%> attribute" msgstr "" -#: config/i386/i386.cc:1619 +#: config/i386/i386.cc:1622 #, gcc-internal-format msgid "%<ms_hook_prologue%> attribute is not compatible with nested function" msgstr "" -#: config/i386/i386.cc:1971 +#: config/i386/i386.cc:1974 #, gcc-internal-format msgid "AVX512F vector argument without AVX512F enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:1977 +#: config/i386/i386.cc:1980 #, gcc-internal-format msgid "AVX512F vector return without AVX512F enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:1991 +#: config/i386/i386.cc:1994 #, gcc-internal-format msgid "AVX vector argument without AVX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:1997 +#: config/i386/i386.cc:2000 #, gcc-internal-format msgid "AVX vector return without AVX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2013 +#: config/i386/i386.cc:2016 #, gcc-internal-format msgid "SSE vector argument without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2019 +#: config/i386/i386.cc:2022 #, gcc-internal-format msgid "SSE vector return without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2035 +#: config/i386/i386.cc:2038 #, gcc-internal-format msgid "MMX vector argument without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2041 +#: config/i386/i386.cc:2044 #, gcc-internal-format msgid "MMX vector return without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.cc:2240 +#: config/i386/i386.cc:2243 #, gcc-internal-format msgid "" "the ABI of passing struct with a flexible array member has changed in GCC 4.4" msgstr "" -#: config/i386/i386.cc:2369 +#: config/i386/i386.cc:2372 #, gcc-internal-format msgid "the ABI of passing union with %<long double%> has changed in GCC 4.4" msgstr "" -#: config/i386/i386.cc:2504 +#: config/i386/i386.cc:2507 #, gcc-internal-format msgid "" "the ABI of passing structure with %<complex float%> member has changed in " "GCC 4.4" msgstr "" -#: config/i386/i386.cc:2625 +#: config/i386/i386.cc:2628 msgid "" "the ABI of passing C structures with zero-width bit-fields has changed in " "GCC %{12.1%}" msgstr "" -#: config/i386/i386.cc:2722 config/i386/i386.cc:4091 config/i386/i386.cc:4101 +#: config/i386/i386.cc:2725 config/i386/i386.cc:4094 config/i386/i386.cc:4104 #, gcc-internal-format msgid "SSE register return with SSE2 disabled" msgstr "" -#: config/i386/i386.cc:2724 +#: config/i386/i386.cc:2727 #, gcc-internal-format msgid "SSE register return with SSE disabled" msgstr "" -#: config/i386/i386.cc:2731 +#: config/i386/i386.cc:2734 #, gcc-internal-format msgid "SSE register argument with SSE2 disabled" msgstr "" -#: config/i386/i386.cc:2733 +#: config/i386/i386.cc:2736 #, gcc-internal-format msgid "SSE register argument with SSE disabled" msgstr "" -#: config/i386/i386.cc:2753 +#: config/i386/i386.cc:2756 #, gcc-internal-format msgid "x87 register return with x87 disabled" msgstr "" -#: config/i386/i386.cc:3081 config/i386/i386.cc:3326 config/i386/i386.cc:4119 +#: config/i386/i386.cc:3084 config/i386/i386.cc:3329 config/i386/i386.cc:4122 #, gcc-internal-format msgid "calling %qD with SSE calling convention without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.cc:3083 config/i386/i386.cc:3328 config/i386/i386.cc:4121 +#: config/i386/i386.cc:3086 config/i386/i386.cc:3331 config/i386/i386.cc:4124 #, gcc-internal-format msgid "" "this is a GCC bug that can be worked around by adding attribute used to " "function called" msgstr "" -#: config/i386/i386.cc:3731 +#: config/i386/i386.cc:3734 #, gcc-internal-format, gfc-internal-format msgid "" "the ABI for passing parameters with %d-byte alignment has changed in GCC 4.6" msgstr "" -#: config/i386/i386.cc:6781 +#: config/i386/i386.cc:6790 #, gcc-internal-format msgid "%<-mcall-ms2sysv-xlogues%> is not compatible with %s" msgstr "" -#: config/i386/i386.cc:8789 +#: config/i386/i386.cc:8808 #, gcc-internal-format msgid "" "%<ms_hook_prologue%> attribute is not compatible with %<-mfentry%> for 32-bit" msgstr "" -#: config/i386/i386.cc:8879 +#: config/i386/i386.cc:8898 #, gcc-internal-format msgid "" "Dynamic Realign Argument Pointer (DRAP) not supported in interrupt service " @@ -43979,22 +44159,22 @@ msgid "" "return." msgstr "" -#: config/i386/i386.cc:9932 +#: config/i386/i386.cc:9951 #, gcc-internal-format msgid "Stack realignment not supported with %<__builtin_eh_return%>" msgstr "" -#: config/i386/i386.cc:9937 +#: config/i386/i386.cc:9956 #, gcc-internal-format msgid "regparm nested function not supported with %<__builtin_eh_return%>" msgstr "" -#: config/i386/i386.cc:10326 +#: config/i386/i386.cc:10347 #, gcc-internal-format msgid "%<-fsplit-stack%> does not support fastcall with nested function" msgstr "" -#: config/i386/i386.cc:10346 +#: config/i386/i386.cc:10367 #, gcc-internal-format msgid "" "%<-fsplit-stack%> does not support 2 register parameters for a nested " @@ -44003,57 +44183,57 @@ msgstr "" #. FIXME: We could make this work by pushing a register #. around the addition and comparison. -#: config/i386/i386.cc:10357 +#: config/i386/i386.cc:10378 #, gcc-internal-format msgid "%<-fsplit-stack%> does not support 3 register parameters" msgstr "" -#: config/i386/i386.cc:13543 +#: config/i386/i386.cc:13564 #, gcc-internal-format msgid "%<V%> modifier on non-integer register" msgstr "" -#: config/i386/i386.cc:13554 config/i386/i386.cc:13568 +#: config/i386/i386.cc:13575 config/i386/i386.cc:13589 #, gcc-internal-format msgid "unsupported size for integer register" msgstr "" -#: config/i386/i386.cc:13600 +#: config/i386/i386.cc:13621 #, gcc-internal-format msgid "extended registers have no high halves" msgstr "" -#: config/i386/i386.cc:13615 +#: config/i386/i386.cc:13636 #, gcc-internal-format msgid "unsupported operand size for extended register" msgstr "" -#: config/i386/i386.cc:13812 config/i386/i386.cc:13814 +#: config/i386/i386.cc:13833 config/i386/i386.cc:13835 #, gcc-internal-format msgid "non-integer operand used with operand code %<z%>" msgstr "" -#: config/i386/i386.cc:17975 +#: config/i386/i386.cc:17996 #, gcc-internal-format msgid "" "empty class %qT parameter passing ABI changes in %<-fabi-version=12%> (GCC 8)" msgstr "" -#: config/i386/i386.cc:22713 +#: config/i386/i386.cc:22734 msgid "the alignment of %<_Atomic %T%> fields changed in %{GCC 11.1%}" msgstr "" -#: config/i386/i386.cc:22794 +#: config/i386/i386.cc:22815 #, gcc-internal-format msgid "no register available for profiling %<-mcmodel=large%s%>" msgstr "" -#: config/i386/i386.cc:22890 +#: config/i386/i386.cc:22911 #, gcc-internal-format msgid "profiling %<-mcmodel=large%> with PIC is not supported" msgstr "" -#: config/i386/i386.cc:23603 +#: config/i386/i386.cc:23624 #, gcc-internal-format msgid "" "%<__bfloat16%> is redefined from typedef %<short%> to real %<__bf16%> since " @@ -44061,22 +44241,22 @@ msgid "" "%<short%>; an explicit bitcast may be needed here" msgstr "" -#: config/i386/i386.cc:25052 +#: config/i386/i386.cc:25074 #, gcc-internal-format msgid "unknown architecture specific memory model" msgstr "" -#: config/i386/i386.cc:25059 +#: config/i386/i386.cc:25081 #, gcc-internal-format msgid "%<HLE_ACQUIRE%> not used with %<ACQUIRE%> or stronger memory model" msgstr "" -#: config/i386/i386.cc:25066 +#: config/i386/i386.cc:25088 #, gcc-internal-format msgid "%<HLE_RELEASE%> not used with %<RELEASE%> or stronger memory model" msgstr "" -#: config/i386/i386.cc:25753 +#: config/i386/i386.cc:25775 #, gcc-internal-format msgid "%<-fexcess-precision=16%> is not compatible with %<-mfpmath=387%>" msgstr "" @@ -44097,8 +44277,8 @@ msgstr "" msgid "malformed %<#pragma builtin%>" msgstr "" -#: config/ia64/ia64.cc:761 config/loongarch/loongarch.cc:8113 -#: config/loongarch/loongarch.cc:8123 +#: config/ia64/ia64.cc:761 config/loongarch/loongarch.cc:7974 +#: config/loongarch/loongarch.cc:7984 #, gcc-internal-format msgid "invalid argument of %qE attribute" msgstr "" @@ -44153,16 +44333,21 @@ msgstr "" msgid "%<PRINT_OPERAND%> null pointer" msgstr "" -#: config/loongarch/loongarch-builtins.cc:3002 config/mips/mips.cc:17382 +#: config/loongarch/loongarch-builtins.cc:2999 config/mips/mips.cc:17388 #, gcc-internal-format, gfc-internal-format msgid "argument %d to the built-in must be a constant in range %d to %d" msgstr "" -#: config/loongarch/loongarch-builtins.cc:3080 config/mips/mips.cc:17502 +#: config/loongarch/loongarch-builtins.cc:3077 config/mips/mips.cc:17508 #, gcc-internal-format msgid "failed to expand built-in function" msgstr "" +#: config/loongarch/loongarch-builtins.cc:3116 +#, gcc-internal-format +msgid "built-in function %qD is not enabled" +msgstr "" + #: config/loongarch/loongarch-cpu.cc:112 #, gcc-internal-format msgid "" @@ -44199,113 +44384,113 @@ msgid "" "will be enabled" msgstr "" -#: config/loongarch/loongarch-opts.cc:225 +#: config/loongarch/loongarch-opts.cc:234 #, gcc-internal-format msgid "%<-m%s%> overrides %<-m%s=%s%>, adjusting ABI to %qs" msgstr "" -#: config/loongarch/loongarch-opts.cc:242 +#: config/loongarch/loongarch-opts.cc:251 #, gcc-internal-format msgid "ABI changed (%qs to %qs) while multilib is disabled" msgstr "" -#: config/loongarch/loongarch-opts.cc:268 -#: config/loongarch/loongarch-opts.cc:273 +#: config/loongarch/loongarch-opts.cc:277 +#: config/loongarch/loongarch-opts.cc:282 #, gcc-internal-format msgid "%qs does not work on a cross compiler" msgstr "" -#: config/loongarch/loongarch-opts.cc:365 +#: config/loongarch/loongarch-opts.cc:374 #, gcc-internal-format -msgid "enabing %qs promotes %<%s%s%> to %<%s%s%>" +msgid "enabling %qs promotes %<%s%s%> to %<%s%s%>" msgstr "" -#: config/loongarch/loongarch-opts.cc:377 +#: config/loongarch/loongarch-opts.cc:386 #, gcc-internal-format msgid "%qs is disabled by %<-m%s%>, because it requires %<%s%s%>" msgstr "" -#: config/loongarch/loongarch-opts.cc:389 +#: config/loongarch/loongarch-opts.cc:398 #, gcc-internal-format msgid "%<-m%s=%s%> conflicts with %qs, which requires %<%s%s%>" msgstr "" -#: config/loongarch/loongarch-opts.cc:433 +#: config/loongarch/loongarch-opts.cc:442 #, gcc-internal-format msgid "" "your native CPU architecture (%qs) does not support %qs ABI, falling back to " "%<-m%s=%s%>" msgstr "" -#: config/loongarch/loongarch-opts.cc:438 +#: config/loongarch/loongarch-opts.cc:447 #, gcc-internal-format msgid "" "default CPU architecture (%qs) does not support %qs ABI, falling back to %<-" "m%s=%s%>" msgstr "" -#: config/loongarch/loongarch-opts.cc:469 +#: config/loongarch/loongarch-opts.cc:478 #, gcc-internal-format msgid "unable to implement ABI %qs with instruction set %qs" msgstr "" -#: config/loongarch/loongarch-opts.cc:491 +#: config/loongarch/loongarch-opts.cc:500 #, gcc-internal-format msgid "" "ABI %qs cannot be implemented due to limited instruction set %qs, falling " "back to %qs" msgstr "" -#: config/loongarch/loongarch-opts.cc:502 +#: config/loongarch/loongarch-opts.cc:511 #, gcc-internal-format msgid "" "instruction set %qs cannot implement default ABI %qs, falling back to %qs" msgstr "" -#: config/loongarch/loongarch-opts.cc:507 +#: config/loongarch/loongarch-opts.cc:516 #, gcc-internal-format msgid "" "no multilib-enabled ABI (%qs) can be implemented with instruction set %qs, " "falling back to %qs" msgstr "" -#: config/loongarch/loongarch-opts.cc:523 +#: config/loongarch/loongarch-opts.cc:532 #, gcc-internal-format msgid "" "ABI %qs is not enabled at configure-time, the linker might report an error" msgstr "" -#: config/loongarch/loongarch-opts.cc:526 +#: config/loongarch/loongarch-opts.cc:535 #, gcc-internal-format, gfc-internal-format msgid "ABI with startfiles: %s" msgstr "" -#: config/loongarch/loongarch-opts.cc:540 +#: config/loongarch/loongarch-opts.cc:549 #, gcc-internal-format msgid "%qs is not supported, now cmodel is set to %qs" msgstr "" -#: config/loongarch/loongarch.cc:7680 +#: config/loongarch/loongarch-opts.cc:993 #, gcc-internal-format -msgid "%qs cannot be used for compiling a shared library" +msgid "code model %qs is not compatible with %s" msgstr "" -#: config/loongarch/loongarch.cc:7689 +#: config/loongarch/loongarch-opts.cc:1059 #, gcc-internal-format -msgid "code model %qs is not compatible with %s" +msgid "%qs cannot be used for compiling a shared library" msgstr "" -#: config/loongarch/loongarch.cc:8085 +#: config/loongarch/loongarch.cc:7946 #, gcc-internal-format msgid "%qE attribute cannot be specified for thread-local variables" msgstr "" -#: config/loongarch/loongarch.cc:8103 +#: config/loongarch/loongarch.cc:7964 #, gcc-internal-format msgid "%qE attribute cannot be specified for register variables" msgstr "" -#: config/loongarch/loongarch.cc:8131 +#: config/loongarch/loongarch.cc:7992 #, gcc-internal-format msgid "multiple %qE attribute" msgstr "" @@ -44411,7 +44596,7 @@ msgstr "" msgid "stack limit expression is not supported" msgstr "" -#: config/m68k/m68k.cc:7138 config/s390/s390.cc:17156 +#: config/m68k/m68k.cc:7138 config/s390/s390.cc:17177 #, gcc-internal-format msgid "%<-fexcess-precision=16%> is not supported on this target" msgstr "" @@ -44454,7 +44639,7 @@ msgid "%<-mxl-multiply-high%> requires %<-mno-xl-soft-mul%>" msgstr "" #: config/mips/mips.cc:1332 config/mips/mips.cc:1593 config/mips/mips.cc:1647 -#: config/riscv/riscv.cc:5504 +#: config/riscv/riscv.cc:5756 #, gcc-internal-format msgid "%qE attribute requires a string argument" msgstr "" @@ -44474,7 +44659,7 @@ msgstr "" msgid "%qE cannot have both %qs and %qs attributes" msgstr "" -#: config/mips/mips.cc:1555 config/mips/mips.cc:1561 config/nios2/nios2.cc:4488 +#: config/mips/mips.cc:1555 config/mips/mips.cc:1561 config/nios2/nios2.cc:4489 #, gcc-internal-format msgid "%qE redeclared with conflicting %qs attributes" msgstr "" @@ -44516,124 +44701,124 @@ msgid "" "%{12.1%}" msgstr "" -#: config/mips/mips.cc:8033 +#: config/mips/mips.cc:8039 #, gcc-internal-format msgid "cannot handle inconsistent calls to %qs" msgstr "" -#: config/mips/mips.cc:11289 +#: config/mips/mips.cc:11295 #, gcc-internal-format msgid "the %<interrupt%> attribute requires a MIPS32r2 processor or greater" msgstr "" -#: config/mips/mips.cc:11291 +#: config/mips/mips.cc:11297 #, gcc-internal-format msgid "interrupt handlers cannot be MIPS16 functions" msgstr "" -#: config/mips/mips.cc:12295 +#: config/mips/mips.cc:12301 #, gcc-internal-format msgid "%<-fstack-check=specific%> not implemented for MIPS16" msgstr "" -#: config/mips/mips.cc:17634 +#: config/mips/mips.cc:17640 #, gcc-internal-format msgid "built-in function %qE not supported for MIPS16" msgstr "" -#: config/mips/mips.cc:18242 +#: config/mips/mips.cc:18248 #, gcc-internal-format msgid "%qs does not support MIPS16 code" msgstr "" -#: config/mips/mips.cc:20055 +#: config/mips/mips.cc:20061 #, gcc-internal-format msgid "MIPS16 PIC for ABIs other than o32 and o64" msgstr "" -#: config/mips/mips.cc:20058 +#: config/mips/mips.cc:20064 #, gcc-internal-format msgid "MIPS16 %<-mxgot%> code" msgstr "" -#: config/mips/mips.cc:20061 +#: config/mips/mips.cc:20067 #, gcc-internal-format msgid "%<hard-float%> MIPS16 code for ABIs other than o32 and o64" msgstr "" -#: config/mips/mips.cc:20064 +#: config/mips/mips.cc:20070 #, gcc-internal-format msgid "MSA MIPS16 code" msgstr "" -#: config/mips/mips.cc:20067 +#: config/mips/mips.cc:20073 #, gcc-internal-format msgid "MIPS16 requires %<-mexplicit-relocs%>" msgstr "" -#: config/mips/mips.cc:20258 config/mips/mips.cc:20263 -#: config/mips/mips.cc:20353 config/mips/mips.cc:20355 -#: config/mips/mips.cc:20385 config/mips/mips.cc:20395 -#: config/mips/mips.cc:20501 config/mips/mips.cc:20525 +#: config/mips/mips.cc:20264 config/mips/mips.cc:20269 +#: config/mips/mips.cc:20359 config/mips/mips.cc:20361 +#: config/mips/mips.cc:20391 config/mips/mips.cc:20401 +#: config/mips/mips.cc:20507 config/mips/mips.cc:20531 #, gcc-internal-format, gfc-internal-format msgid "unsupported combination: %s" msgstr "" -#: config/mips/mips.cc:20298 +#: config/mips/mips.cc:20304 #, gcc-internal-format msgid "" "%<-%s%> conflicts with the other architecture options, which specify a %s " "processor" msgstr "" -#: config/mips/mips.cc:20308 +#: config/mips/mips.cc:20314 #, gcc-internal-format msgid "%<-march=%s%> is not compatible with the selected ABI" msgstr "" -#: config/mips/mips.cc:20323 +#: config/mips/mips.cc:20329 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit processor" msgstr "" -#: config/mips/mips.cc:20325 +#: config/mips/mips.cc:20331 #, gcc-internal-format msgid "%<-mgp32%> used with a 64-bit ABI" msgstr "" -#: config/mips/mips.cc:20327 +#: config/mips/mips.cc:20333 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit ABI" msgstr "" -#: config/mips/mips.cc:20350 +#: config/mips/mips.cc:20356 #, gcc-internal-format msgid "the %qs architecture does not support %<-mfp32%>" msgstr "" -#: config/mips/mips.cc:20359 +#: config/mips/mips.cc:20365 #, gcc-internal-format msgid "" "%<-mgp32%> and %<-mfp64%> can only be combined if the target supports the " "mfhc1 and mthc1 instructions" msgstr "" -#: config/mips/mips.cc:20362 +#: config/mips/mips.cc:20368 #, gcc-internal-format msgid "%<-mgp32%> and %<-mfp64%> can only be combined when using the o32 ABI" msgstr "" -#: config/mips/mips.cc:20383 +#: config/mips/mips.cc:20389 #, gcc-internal-format msgid "%<-mfpxx%> can only be used with the o32 ABI" msgstr "" -#: config/mips/mips.cc:20387 +#: config/mips/mips.cc:20393 #, gcc-internal-format msgid "%<-march=%s%> requires %<-mfp32%>" msgstr "" -#: config/mips/mips.cc:20389 +#: config/mips/mips.cc:20395 #, gcc-internal-format msgid "%<-mfpxx%> requires %<-mlra%>" msgstr "" @@ -44643,117 +44828,117 @@ msgstr "" #. effort to support the combination of 32-bit GOT entries #. and 64-bit pointers, so we treat the abicalls case as #. an error. -#: config/mips/mips.cc:20414 +#: config/mips/mips.cc:20420 #, gcc-internal-format msgid "the combination of %qs and %qs is incompatible with %qs" msgstr "" -#: config/mips/mips.cc:20467 +#: config/mips/mips.cc:20473 #, gcc-internal-format msgid "the %qs architecture does not support branch-likely instructions" msgstr "" -#: config/mips/mips.cc:20482 +#: config/mips/mips.cc:20488 #, gcc-internal-format msgid "the %qs architecture does not support madd or msub instructions" msgstr "" -#: config/mips/mips.cc:20496 +#: config/mips/mips.cc:20502 #, gcc-internal-format msgid "the %qs architecture does not support odd single-precision registers" msgstr "" -#: config/mips/mips.cc:20509 +#: config/mips/mips.cc:20515 #, gcc-internal-format msgid "unsupported combination: %qs%s %s" msgstr "" -#: config/mips/mips.cc:20518 +#: config/mips/mips.cc:20524 #, gcc-internal-format msgid "unsupported combination: %qs %s" msgstr "" -#: config/mips/mips.cc:20533 +#: config/mips/mips.cc:20539 #, gcc-internal-format msgid "cannot generate position-independent code for %qs" msgstr "" -#: config/mips/mips.cc:20536 +#: config/mips/mips.cc:20542 #, gcc-internal-format msgid "position-independent code requires %qs" msgstr "" -#: config/mips/mips.cc:20569 +#: config/mips/mips.cc:20575 #, gcc-internal-format msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" msgstr "" -#: config/mips/mips.cc:20577 config/mips/mips.cc:20580 +#: config/mips/mips.cc:20583 config/mips/mips.cc:20586 #, gcc-internal-format msgid "cannot use small-data accesses for %qs" msgstr "" -#: config/mips/mips.cc:20597 +#: config/mips/mips.cc:20603 #, gcc-internal-format msgid "the %qs architecture does not support %<-m%s=legacy%>" msgstr "" -#: config/mips/mips.cc:20604 +#: config/mips/mips.cc:20610 #, gcc-internal-format msgid "the %qs architecture does not support %<-m%s=2008%>" msgstr "" -#: config/mips/mips.cc:20622 +#: config/mips/mips.cc:20628 #, gcc-internal-format msgid "%<-mips3d%> requires %<-mpaired-single%>" msgstr "" -#: config/mips/mips.cc:20632 +#: config/mips/mips.cc:20638 #, gcc-internal-format msgid "%qs must be used with %qs" msgstr "" -#: config/mips/mips.cc:20642 +#: config/mips/mips.cc:20648 #, gcc-internal-format msgid "%<-mmsa%> must be used with %<-mfp64%> and %<-mhard-float%>" msgstr "" -#: config/mips/mips.cc:20649 +#: config/mips/mips.cc:20655 #, gcc-internal-format msgid "the %qs architecture does not support paired-single instructions" msgstr "" -#: config/mips/mips.cc:20658 +#: config/mips/mips.cc:20664 #, gcc-internal-format msgid "%qs requires a target that provides the %qs instruction" msgstr "" -#: config/mips/mips.cc:20669 +#: config/mips/mips.cc:20675 #, gcc-internal-format msgid "the %qs architecture does not support DSP instructions" msgstr "" -#: config/mips/mips.cc:20679 +#: config/mips/mips.cc:20685 #, gcc-internal-format msgid "%<-mloongson-mmi%> must be used with %<-mhard-float%>" msgstr "" -#: config/mips/mips.cc:20689 +#: config/mips/mips.cc:20695 #, gcc-internal-format msgid "%<-mloongson-ext2%> must be used with %<-mloongson-ext%>" msgstr "" -#: config/mips/mips.cc:20784 +#: config/mips/mips.cc:20790 #, gcc-internal-format msgid "%qs requires branch-likely instructions" msgstr "" -#: config/mips/mips.cc:20788 +#: config/mips/mips.cc:20794 #, gcc-internal-format msgid "the %qs architecture does not support the synci instruction" msgstr "" -#: config/mips/mips.cc:21624 +#: config/mips/mips.cc:21630 #, gcc-internal-format msgid "mips16 function profiling" msgstr "" @@ -45084,7 +45269,7 @@ msgstr "" msgid "bad builtin code" msgstr "" -#: config/nds32/nds32-intrinsic.cc:126 config/nios2/nios2.cc:3839 +#: config/nds32/nds32-intrinsic.cc:126 config/nios2/nios2.cc:3840 #, gcc-internal-format, gfc-internal-format msgid "invalid argument to built-in function %s" msgstr "" @@ -45175,69 +45360,69 @@ msgid "cannot use reset attributes to function %qD under linux toolchain" msgstr "" #. Trampoline is not supported on reduced-set registers yet. -#: config/nds32/nds32.cc:2407 config/nds32/nds32.cc:2461 -#: config/nds32/nds32.cc:3573 config/nds32/nds32.cc:3670 -#: config/nds32/nds32.cc:3685 config/nds32/nds32.cc:3691 -#: config/nds32/nds32.cc:3767 config/nds32/nds32.cc:3773 -#: config/nds32/nds32.cc:3805 +#: config/nds32/nds32.cc:2408 config/nds32/nds32.cc:2462 +#: config/nds32/nds32.cc:3574 config/nds32/nds32.cc:3671 +#: config/nds32/nds32.cc:3686 config/nds32/nds32.cc:3692 +#: config/nds32/nds32.cc:3768 config/nds32/nds32.cc:3774 +#: config/nds32/nds32.cc:3806 #, gcc-internal-format msgid "a nested function is not supported for reduced registers" msgstr "" #. The enum index value for array size is out of range. -#: config/nds32/nds32.cc:3464 +#: config/nds32/nds32.cc:3465 #, gcc-internal-format msgid "intrinsic register index is out of range" msgstr "" -#: config/nds32/nds32.cc:3480 config/nds32/nds32.cc:3487 -#: config/nds32/nds32.cc:3494 config/nds32/nds32.cc:3501 -#: config/nds32/nds32.cc:3508 +#: config/nds32/nds32.cc:3481 config/nds32/nds32.cc:3488 +#: config/nds32/nds32.cc:3495 config/nds32/nds32.cc:3502 +#: config/nds32/nds32.cc:3509 #, gcc-internal-format msgid "CCTL intrinsic function subtype out of range" msgstr "" -#: config/nds32/nds32.cc:3945 +#: config/nds32/nds32.cc:3946 #, gcc-internal-format msgid "cannot use %<indirect_call%> attribute under linux toolchain" msgstr "" -#: config/nds32/nds32.cc:3953 +#: config/nds32/nds32.cc:3954 #, gcc-internal-format msgid "%<indirect_call%> attribute cannot apply for static function" msgstr "" -#: config/nds32/nds32.cc:4042 +#: config/nds32/nds32.cc:4043 #, gcc-internal-format msgid "invalid id value for interrupt/exception attribute" msgstr "" -#: config/nds32/nds32.cc:4070 +#: config/nds32/nds32.cc:4071 #, gcc-internal-format msgid "invalid id value for reset attribute" msgstr "" -#: config/nds32/nds32.cc:4086 +#: config/nds32/nds32.cc:4087 #, gcc-internal-format msgid "invalid nmi function for reset attribute" msgstr "" -#: config/nds32/nds32.cc:4099 +#: config/nds32/nds32.cc:4100 #, gcc-internal-format msgid "invalid warm function for reset attribute" msgstr "" -#: config/nds32/nds32.cc:4150 +#: config/nds32/nds32.cc:4151 #, gcc-internal-format msgid "not support %<-fpic%> option for v3m toolchain" msgstr "" -#: config/nds32/nds32.cc:4183 +#: config/nds32/nds32.cc:4184 #, gcc-internal-format msgid "Disable FPU ISA, the ABI option must be enable %<-mfloat-abi=soft%>" msgstr "" -#: config/nds32/nds32.cc:4186 +#: config/nds32/nds32.cc:4187 #, gcc-internal-format msgid "" "%<-mabi=2fp+%> option only support when FPU available, must be enable %<-" @@ -45321,85 +45506,85 @@ msgstr "" msgid "R2 architecture is little-endian only" msgstr "" -#: config/nios2/nios2.cc:3584 +#: config/nios2/nios2.cc:3585 #, gcc-internal-format msgid "" "cannot call %<__builtin_custom_%s%> without specifying switch %<-mcustom-%s%>" msgstr "" -#: config/nios2/nios2.cc:3693 +#: config/nios2/nios2.cc:3694 #, gcc-internal-format msgid "" "custom instruction opcode must be a compile-time constant in the range 0-255 " "for %<__builtin_custom_%s%>" msgstr "" -#: config/nios2/nios2.cc:3898 +#: config/nios2/nios2.cc:3899 #, gcc-internal-format, gfc-internal-format msgid "control register number must be in range 0-31 for %s" msgstr "" -#: config/nios2/nios2.cc:3926 +#: config/nios2/nios2.cc:3927 #, gcc-internal-format, gfc-internal-format msgid "register number must be in range 0-31 for %s" msgstr "" -#: config/nios2/nios2.cc:3933 +#: config/nios2/nios2.cc:3934 #, gcc-internal-format, gfc-internal-format msgid "immediate value must fit into a %d-bit integer for %s" msgstr "" -#: config/nios2/nios2.cc:3983 +#: config/nios2/nios2.cc:3984 #, gcc-internal-format msgid "the ENI instruction operand must be either 0 or 1" msgstr "" -#: config/nios2/nios2.cc:4011 +#: config/nios2/nios2.cc:4012 #, gcc-internal-format, gfc-internal-format msgid "built-in function %s requires Nios II R%d" msgstr "" -#: config/nios2/nios2.cc:4091 +#: config/nios2/nios2.cc:4092 #, gcc-internal-format msgid "switch %<-mcustom-%s%> conflicts with switch %<-mcustom-%s%>" msgstr "" -#: config/nios2/nios2.cc:4098 config/nios2/nios2.cc:4109 +#: config/nios2/nios2.cc:4099 config/nios2/nios2.cc:4110 #, gcc-internal-format msgid "call to %<__builtin_custom_%s%> conflicts with switch %<-mcustom-%s%>" msgstr "" -#: config/nios2/nios2.cc:4252 +#: config/nios2/nios2.cc:4253 #, gcc-internal-format msgid "%<custom-fpu-cfg%> option does not support %<no-%>" msgstr "" -#: config/nios2/nios2.cc:4257 +#: config/nios2/nios2.cc:4258 #, gcc-internal-format msgid "%<custom-fpu-cfg%> option requires configuration argument" msgstr "" -#: config/nios2/nios2.cc:4285 +#: config/nios2/nios2.cc:4286 #, gcc-internal-format msgid "%<no-custom-%s%> does not accept arguments" msgstr "" -#: config/nios2/nios2.cc:4300 +#: config/nios2/nios2.cc:4301 #, gcc-internal-format msgid "%<custom-%s=%> requires argument" msgstr "" -#: config/nios2/nios2.cc:4310 +#: config/nios2/nios2.cc:4311 #, gcc-internal-format msgid "%<custom-%s=%> argument should be a non-negative integer" msgstr "" -#: config/nios2/nios2.cc:4322 +#: config/nios2/nios2.cc:4323 #, gcc-internal-format msgid "%<custom-%s=%> is not recognized as FPU instruction" msgstr "" -#: config/nios2/nios2.cc:4329 +#: config/nios2/nios2.cc:4330 #, gcc-internal-format msgid "invalid custom instruction option %qs" msgstr "" @@ -45432,27 +45617,27 @@ msgstr "" msgid "environment variable COLLECT_GCC_OPTIONS must be set" msgstr "" -#: config/nvptx/mkoffload.cc:648 +#: config/nvptx/mkoffload.cc:650 #, gcc-internal-format msgid "COLLECT_GCC must be set." msgstr "" -#: config/nvptx/mkoffload.cc:696 +#: config/nvptx/mkoffload.cc:698 #, gcc-internal-format msgid "offload compiler %s not found (consider using %<-B%>)" msgstr "" -#: config/nvptx/mkoffload.cc:719 +#: config/nvptx/mkoffload.cc:721 #, gcc-internal-format msgid "unrecognizable argument of option " msgstr "" -#: config/nvptx/mkoffload.cc:795 +#: config/nvptx/mkoffload.cc:797 #, gcc-internal-format, gfc-internal-format msgid "cannot open '%s'" msgstr "" -#: config/nvptx/mkoffload.cc:851 +#: config/nvptx/mkoffload.cc:853 #, gcc-internal-format msgid "cannot open intermediate ptx file" msgstr "" @@ -45515,34 +45700,34 @@ msgstr "" msgid "complement argument must be constant" msgstr "" -#: config/nvptx/nvptx.cc:6579 +#: config/nvptx/nvptx.cc:6580 #, gcc-internal-format msgid "" "using %<vector_length (%d)%> due to call to vector-partitionable routine, " "ignoring %d" msgstr "" -#: config/nvptx/nvptx.cc:6587 +#: config/nvptx/nvptx.cc:6588 #, gcc-internal-format msgid "using %<vector_length (%d)%>, ignoring runtime setting" msgstr "" -#: config/nvptx/nvptx.cc:6601 +#: config/nvptx/nvptx.cc:6602 #, gcc-internal-format msgid "using %<vector_length (%d)%>, ignoring %d" msgstr "" -#: config/nvptx/nvptx.cc:7487 +#: config/nvptx/nvptx.cc:7488 #, gcc-internal-format msgid "variable %qD adjusted for OpenACC privatization level: %qs" msgstr "" -#: config/nvptx/nvptx.cc:7601 +#: config/nvptx/nvptx.cc:7602 #, gcc-internal-format msgid "weak alias definitions not supported in this configuration" msgstr "" -#: config/nvptx/nvptx.cc:7614 +#: config/nvptx/nvptx.cc:7615 #, gcc-internal-format msgid "non-function alias definitions not supported in this configuration" msgstr "" @@ -45649,249 +45834,304 @@ msgstr "" msgid "pointers to %<__regio_symbol%> address space are prohibited" msgstr "" -#: config/riscv/riscv-c.cc:192 +#: config/riscv/riscv-c.cc:261 #, gcc-internal-format msgid "%<#pragma riscv intrinsic%> requires a string parameter" msgstr "" -#: config/riscv/riscv-c.cc:203 -#, gcc-internal-format -msgid "" -"%<#pragma riscv intrinsic%> option %qs needs 'V' or 'XTHEADVECTOR' extension " -"enabled" -msgstr "" - -#: config/riscv/riscv-c.cc:211 +#: config/riscv/riscv-c.cc:286 #, gcc-internal-format msgid "unknown %<#pragma riscv intrinsic%> option %qs" msgstr "" -#: config/riscv/riscv-target-attr.cc:120 +#: config/riscv/riscv-target-attr.cc:124 #, gcc-internal-format msgid "unexpected arch for %<target()%> attribute: must start with + or rv" msgstr "" -#: config/riscv/riscv-target-attr.cc:132 +#: config/riscv/riscv-target-attr.cc:136 #, gcc-internal-format msgid "unexpected arch for %<target()%> attribute: bad string found %<%s%>" msgstr "" -#: config/riscv/riscv-target-attr.cc:156 +#: config/riscv/riscv-target-attr.cc:162 #, gcc-internal-format msgid "%<target()%> attribute: arch appears more than once" msgstr "" -#: config/riscv/riscv-target-attr.cc:167 +#: config/riscv/riscv-target-attr.cc:173 #, gcc-internal-format msgid "%<target()%> attribute: cpu appears more than once" msgstr "" -#: config/riscv/riscv-target-attr.cc:174 +#: config/riscv/riscv-target-attr.cc:180 #, gcc-internal-format msgid "%<target()%> attribute: unknown CPU %qs" msgstr "" -#: config/riscv/riscv-target-attr.cc:195 +#: config/riscv/riscv-target-attr.cc:201 #, gcc-internal-format msgid "%<target()%> attribute: tune appears more than once" msgstr "" -#: config/riscv/riscv-target-attr.cc:201 +#: config/riscv/riscv-target-attr.cc:207 #, gcc-internal-format msgid "%<target()%> attribute: unknown TUNE %qs" msgstr "" -#: config/riscv/riscv-target-attr.cc:240 +#: config/riscv/riscv-target-attr.cc:246 #, gcc-internal-format msgid "malformed %<target()%> attribute" msgstr "" -#: config/riscv/riscv-target-attr.cc:254 +#: config/riscv/riscv-target-attr.cc:260 #, gcc-internal-format msgid "attribute %<target(\"%s\")%> does not accept an argument" msgstr "" -#: config/riscv/riscv-target-attr.cc:271 +#: config/riscv/riscv-target-attr.cc:277 #, gcc-internal-format msgid "Got unknown attribute %<target(\"%s\")%>" msgstr "" -#: config/riscv/riscv-target-attr.cc:352 +#: config/riscv/riscv-target-attr.cc:359 #, gcc-internal-format msgid "malformed %<target(\"%s\")%> attribute" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4239 +#: config/riscv/riscv-vector-builtins.cc:4276 #, gcc-internal-format msgid "" "passing %wd to argument %d of %qE, which expects a value in the range [%wd, " "%wd] or %wd" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4435 +#: config/riscv/riscv-vector-builtins.cc:4488 #, gcc-internal-format msgid "RVV type %qT does not have a fixed size" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4441 +#: config/riscv/riscv-vector-builtins.cc:4494 #, gcc-internal-format msgid "RVV type %qT does not have a defined alignment" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4456 +#: config/riscv/riscv-vector-builtins.cc:4509 #, gcc-internal-format msgid "arithmetic on pointer to RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4464 +#: config/riscv/riscv-vector-builtins.cc:4517 #, gcc-internal-format msgid "member variables cannot have RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4466 +#: config/riscv/riscv-vector-builtins.cc:4519 #, gcc-internal-format msgid "fields cannot have RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4472 +#: config/riscv/riscv-vector-builtins.cc:4525 #, gcc-internal-format msgid "array elements cannot have RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4478 +#: config/riscv/riscv-vector-builtins.cc:4531 #, gcc-internal-format msgid "cannot allocate objects with RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4484 +#: config/riscv/riscv-vector-builtins.cc:4537 #, gcc-internal-format msgid "cannot delete objects with RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4490 +#: config/riscv/riscv-vector-builtins.cc:4543 #, gcc-internal-format msgid "cannot throw or catch RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4496 +#: config/riscv/riscv-vector-builtins.cc:4549 #, gcc-internal-format msgid "capture by copy of RVV type %qT" msgstr "" -#: config/riscv/riscv-vector-builtins.cc:4633 +#: config/riscv/riscv-vector-builtins.cc:4646 +#, gcc-internal-format +msgid "built-in function %qE requires the %qs ISA extension" +msgstr "" + +#: config/riscv/riscv-vector-builtins.cc:4696 #, gcc-internal-format msgid "no matching function call to %qE with empty arguments" msgstr "" -#: config/riscv/riscv.cc:647 +#: config/riscv/riscv.cc:714 #, gcc-internal-format msgid "unknown cpu %qs for %<-mtune%>" msgstr "" -#: config/riscv/riscv.cc:2458 +#: config/riscv/riscv.cc:2537 #, gcc-internal-format msgid "this operation requires the RVV ISA extension" msgstr "" -#: config/riscv/riscv.cc:2459 +#: config/riscv/riscv.cc:2538 #, gcc-internal-format msgid "" "you can enable RVV using the command-line option %<-march%>, or by using the " "%<target%> attribute or pragma" msgstr "" -#: config/riscv/riscv.cc:4848 config/riscv/riscv.cc:4890 +#: config/riscv/riscv.cc:4925 config/riscv/riscv.cc:4967 #, gcc-internal-format msgid "ABI for flattened struct with zero-length bit-fields changed in GCC 10" msgstr "" -#: config/riscv/riscv.cc:5237 +#: config/riscv/riscv.cc:5314 #, gcc-internal-format msgid "RVV type %qT cannot be passed to an unprototyped function" msgstr "" -#: config/riscv/riscv.cc:5515 +#: config/riscv/riscv.cc:5567 +#, gcc-internal-format +msgid "%s %qT requires the V ISA extension" +msgstr "" + +#: config/riscv/riscv.cc:5579 +#, gcc-internal-format +msgid "%s %qT requires the zve64x, zve64f, zve64d or v ISA extension" +msgstr "" + +#: config/riscv/riscv.cc:5590 +#, gcc-internal-format +msgid "%s %qT requires the zvfhmin or zvfh ISA extension" +msgstr "" + +#: config/riscv/riscv.cc:5599 +#, gcc-internal-format +msgid "%s %qT requires the zve32f, zve64f, zve64d or v ISA extension" +msgstr "" + +#: config/riscv/riscv.cc:5608 +#, gcc-internal-format +msgid "%s %qT requires the zve64d or v ISA extension" +msgstr "" + +#: config/riscv/riscv.cc:5618 +#, gcc-internal-format +msgid "%s %qT requires the minimal vector length %qd but %qd is given" +msgstr "" + +#: config/riscv/riscv.cc:5673 +#, gcc-internal-format +msgid "function attribute %qs requires the V ISA extension" +msgstr "" + +#: config/riscv/riscv.cc:5767 #, gcc-internal-format msgid "" "argument to %qE attribute is not %<\"user\"%>, %<\"supervisor\"%>, or " "%<\"machine\"%>" msgstr "" -#: config/riscv/riscv.cc:8875 +#: config/riscv/riscv.cc:5790 +#, gcc-internal-format +msgid "%qs is only supported when %<-mrvv-vector-bits=zvl%> is specified" +msgstr "" + +#: config/riscv/riscv.cc:5799 +#, gcc-internal-format +msgid "%qs applied to non-RVV type %qT" +msgstr "" + +#: config/riscv/riscv.cc:5807 +#, gcc-internal-format +msgid "%qs requires an integer constant" +msgstr "" + +#: config/riscv/riscv.cc:5817 +#, gcc-internal-format +msgid "" +"invalid RVV vector size %qd, expected size is %qd based on LMUL of type and " +"%qs" +msgstr "" + +#: config/riscv/riscv.cc:9211 #, gcc-internal-format msgid "%<-mdiv%> requires %<-march%> to subsume the %<M%> extension" msgstr "" -#: config/riscv/riscv.cc:8917 +#: config/riscv/riscv.cc:9253 #, gcc-internal-format msgid "" "Current RISC-V GCC does not support VLEN greater than 4096bit for 'V' " "Extension" msgstr "" -#: config/riscv/riscv.cc:8923 +#: config/riscv/riscv.cc:9259 #, gcc-internal-format msgid "Current RISC-V GCC does not support RVV in big-endian mode" msgstr "" -#: config/riscv/riscv.cc:8949 config/riscv/riscv.cc:8952 +#: config/riscv/riscv.cc:9285 config/riscv/riscv.cc:9288 #, gcc-internal-format msgid "code model %qs with %qs" msgstr "" -#: config/riscv/riscv.cc:8981 +#: config/riscv/riscv.cc:9317 #, gcc-internal-format msgid "requested ABI requires %<-march%> to subsume the %qc extension" msgstr "" -#: config/riscv/riscv.cc:8988 +#: config/riscv/riscv.cc:9324 #, gcc-internal-format msgid "rv32e requires ilp32e ABI" msgstr "" -#: config/riscv/riscv.cc:8990 +#: config/riscv/riscv.cc:9326 #, gcc-internal-format msgid "rv64e requires lp64e ABI" msgstr "" -#: config/riscv/riscv.cc:8997 +#: config/riscv/riscv.cc:9333 #, gcc-internal-format msgid "z*inx requires ABI ilp32, ilp32e, lp64 or lp64e" msgstr "" -#: config/riscv/riscv.cc:9001 +#: config/riscv/riscv.cc:9337 #, gcc-internal-format msgid "ABI requires %<-march=rv%d%>" msgstr "" -#: config/riscv/riscv.cc:9011 +#: config/riscv/riscv.cc:9347 #, gcc-internal-format msgid "%<-mpreferred-stack-boundary=%d%> must be between %d and %d" msgstr "" -#: config/riscv/riscv.cc:9024 +#: config/riscv/riscv.cc:9360 #, gcc-internal-format msgid "" "%<-mriscv-attribute%> RISC-V ELF attribute requires GNU as 2.32 [%<-mriscv-" "attribute%>]" msgstr "" -#: config/riscv/riscv.cc:9051 config/rs6000/rs6000.cc:4558 +#: config/riscv/riscv.cc:9387 config/rs6000/rs6000.cc:4510 #, gcc-internal-format msgid "%qs is not a valid base register in %qs" msgstr "" -#: config/riscv/riscv.cc:9065 config/rs6000/rs6000.cc:4541 +#: config/riscv/riscv.cc:9401 config/rs6000/rs6000.cc:4493 #, gcc-internal-format msgid "%qs is not a valid number in %qs" msgstr "" -#: config/riscv/riscv.cc:9459 +#: config/riscv/riscv.cc:9799 #, gcc-internal-format msgid "%qs function cannot have different interrupt type" msgstr "" -#: config/riscv/riscv.cc:9985 +#: config/riscv/riscv.cc:10325 #, gcc-internal-format msgid "cannot allocate vl register for %qs on this target" msgstr "" @@ -46129,52 +46369,52 @@ msgstr "" msgid "junk at end of %<#pragma longcall%>" msgstr "" -#: config/rs6000/rs6000-c.cc:1249 config/rs6000/rs6000-c.cc:1650 +#: config/rs6000/rs6000-c.cc:1237 config/rs6000/rs6000-c.cc:1638 #, gcc-internal-format msgid "builtin %qs only accepts 1 argument" msgstr "" -#: config/rs6000/rs6000-c.cc:1256 config/rs6000/rs6000-c.cc:1342 +#: config/rs6000/rs6000-c.cc:1244 config/rs6000/rs6000-c.cc:1330 #, gcc-internal-format msgid "builtin %qs only accepts 2 arguments" msgstr "" -#: config/rs6000/rs6000-c.cc:1520 +#: config/rs6000/rs6000-c.cc:1508 #, gcc-internal-format msgid "builtin %qs only accepts 3 arguments" msgstr "" -#: config/rs6000/rs6000-c.cc:1746 +#: config/rs6000/rs6000-c.cc:1734 #, gcc-internal-format msgid "" "%<vec_lvsl%> is deprecated for little endian; use assignment for unaligned " "loads and stores" msgstr "" -#: config/rs6000/rs6000-c.cc:1750 +#: config/rs6000/rs6000-c.cc:1738 #, gcc-internal-format msgid "" "%<vec_lvsr%> is deprecated for little endian; use assignment for unaligned " "loads and stores" msgstr "" -#: config/rs6000/rs6000-c.cc:1836 +#: config/rs6000/rs6000-c.cc:1824 #, gcc-internal-format msgid "" "passing argument %d of %qE discards %qs qualifier from pointer target type" msgstr "" -#: config/rs6000/rs6000-c.cc:1892 config/rs6000/rs6000-c.cc:2075 +#: config/rs6000/rs6000-c.cc:1880 config/rs6000/rs6000-c.cc:2063 #, gcc-internal-format msgid "invalid parameter combination for AltiVec intrinsic %qs" msgstr "" -#: config/rs6000/rs6000-c.cc:2064 +#: config/rs6000/rs6000-c.cc:2052 #, gcc-internal-format msgid "overloaded builtin %qs is implemented by builtin %qs" msgstr "" -#: config/rs6000/rs6000-c.cc:2068 +#: config/rs6000/rs6000-c.cc:2056 #, gcc-internal-format msgid "%qs is not supported in this compiler configuration" msgstr "" @@ -46251,45 +46491,45 @@ msgstr "" msgid "Stack frame larger than 2G is not supported for %<-fsplit-stack%>" msgstr "" -#: config/rs6000/rs6000.cc:3226 config/rs6000/rs6000.cc:3229 -#: config/rs6000/rs6000.cc:3232 +#: config/rs6000/rs6000.cc:3228 config/rs6000/rs6000.cc:3231 +#: config/rs6000/rs6000.cc:3234 #, gcc-internal-format msgid "%qs requires %qs or %qs" msgstr "" -#: config/rs6000/rs6000.cc:3333 +#: config/rs6000/rs6000.cc:3335 #, gcc-internal-format msgid "%qs requires PowerPC64 architecture, enabling" msgstr "" -#: config/rs6000/rs6000.cc:3449 +#: config/rs6000/rs6000.cc:3451 #, gcc-internal-format msgid "%<-mcall-aixdesc%> incompatible with %<-mabi=elfv2%>" msgstr "" -#: config/rs6000/rs6000.cc:3498 +#: config/rs6000/rs6000.cc:3500 #, gcc-internal-format msgid "%qs unsupported for this ABI" msgstr "" -#: config/rs6000/rs6000.cc:3626 +#: config/rs6000/rs6000.cc:3628 #, gcc-internal-format msgid "" "%qs is not supported for 64-bit Darwin; it is incompatible with the " "installed C and C++ libraries" msgstr "" -#: config/rs6000/rs6000.cc:3787 +#: config/rs6000/rs6000.cc:3789 #, gcc-internal-format msgid "AltiVec not supported in this target" msgstr "" -#: config/rs6000/rs6000.cc:3804 +#: config/rs6000/rs6000.cc:3806 #, gcc-internal-format msgid "%qs is not supported on little endian systems" msgstr "" -#: config/rs6000/rs6000.cc:3886 +#: config/rs6000/rs6000.cc:3887 #, gcc-internal-format msgid "" "power9 target option is incompatible with %<%s=<xxx>%> for <xxx> less than " @@ -46298,191 +46538,189 @@ msgstr "" #. Enforce that none of the ISA_3_0_MASKS_SERVER flags #. were explicitly cleared. -#: config/rs6000/rs6000.cc:3894 +#: config/rs6000/rs6000.cc:3895 #, gcc-internal-format msgid "%qs incompatible with explicitly disabled options" msgstr "" #. TARGET_VSX = 1 implies Power 7 and newer -#: config/rs6000/rs6000.cc:3928 config/rs6000/rs6000.cc:3936 -#: config/rs6000/rs6000.cc:3943 config/rs6000/rs6000.cc:3950 -#: config/rs6000/rs6000.cc:3958 config/rs6000/rs6000.cc:3977 -#: config/rs6000/rs6000.cc:4039 config/rs6000/rs6000.cc:4066 -#: config/rs6000/rs6000.cc:4093 config/rs6000/rs6000.cc:4108 -#: config/rs6000/rs6000.cc:4116 config/rs6000/rs6000.cc:4240 -#: config/rs6000/rs6000.cc:4253 config/rs6000/rs6000.cc:4262 -#: config/rs6000/rs6000.cc:4400 config/rs6000/rs6000.cc:4413 -#: config/rs6000/rs6000.cc:4434 +#: config/rs6000/rs6000.cc:3929 config/rs6000/rs6000.cc:3937 +#: config/rs6000/rs6000.cc:3950 config/rs6000/rs6000.cc:4012 +#: config/rs6000/rs6000.cc:4045 config/rs6000/rs6000.cc:4060 +#: config/rs6000/rs6000.cc:4068 config/rs6000/rs6000.cc:4192 +#: config/rs6000/rs6000.cc:4205 config/rs6000/rs6000.cc:4214 +#: config/rs6000/rs6000.cc:4352 config/rs6000/rs6000.cc:4365 +#: config/rs6000/rs6000.cc:4386 #, gcc-internal-format msgid "%qs requires %qs" msgstr "" -#: config/rs6000/rs6000.cc:4144 +#: config/rs6000/rs6000.cc:4096 #, gcc-internal-format msgid "target attribute or pragma changes %<long double%> size" msgstr "" -#: config/rs6000/rs6000.cc:4165 +#: config/rs6000/rs6000.cc:4117 #, gcc-internal-format msgid "%qs requires full ISA 2.06 support" msgstr "" -#: config/rs6000/rs6000.cc:4178 +#: config/rs6000/rs6000.cc:4130 #, gcc-internal-format msgid "Using IEEE extended precision %<long double%>" msgstr "" -#: config/rs6000/rs6000.cc:4181 +#: config/rs6000/rs6000.cc:4133 #, gcc-internal-format msgid "Using IBM extended precision %<long double%>" msgstr "" -#: config/rs6000/rs6000.cc:4200 +#: config/rs6000/rs6000.cc:4152 #, gcc-internal-format msgid "%qs requires VSX support" msgstr "" -#: config/rs6000/rs6000.cc:4209 +#: config/rs6000/rs6000.cc:4161 #, gcc-internal-format msgid "The %<-mfloat128%> option may not be fully supported" msgstr "" -#: config/rs6000/rs6000.cc:4232 +#: config/rs6000/rs6000.cc:4184 #, gcc-internal-format msgid "%qs requires full ISA 3.0 support" msgstr "" -#: config/rs6000/rs6000.cc:4319 +#: config/rs6000/rs6000.cc:4271 #, gcc-internal-format msgid "unknown vectorization library ABI type in %<-mveclibabi=%s%>" msgstr "" -#: config/rs6000/rs6000.cc:4332 config/rs6000/rs6000.cc:4347 +#: config/rs6000/rs6000.cc:4284 config/rs6000/rs6000.cc:4299 #, gcc-internal-format msgid "target attribute or pragma changes AltiVec ABI" msgstr "" -#: config/rs6000/rs6000.cc:4360 +#: config/rs6000/rs6000.cc:4312 #, gcc-internal-format msgid "target attribute or pragma changes darwin64 ABI" msgstr "" -#: config/rs6000/rs6000.cc:4566 +#: config/rs6000/rs6000.cc:4518 #, gcc-internal-format msgid "%qs needs a valid base register" msgstr "" -#: config/rs6000/rs6000.cc:4863 +#: config/rs6000/rs6000.cc:4815 #, gcc-internal-format msgid "unknown option for %<%s=%s%>" msgstr "" -#: config/rs6000/rs6000.cc:4892 +#: config/rs6000/rs6000.cc:4844 #, gcc-internal-format msgid "%qs is deprecated and not recommended in any circumstances" msgstr "" -#: config/rs6000/rs6000.cc:11218 +#: config/rs6000/rs6000.cc:11170 #, gcc-internal-format msgid "%qs is an opaque type, and you cannot set it to other values" msgstr "" -#: config/rs6000/rs6000.cc:18063 +#: config/rs6000/rs6000.cc:18015 #, gcc-internal-format msgid "no profiling of 64-bit code for this ABI" msgstr "" -#: config/rs6000/rs6000.cc:20459 +#: config/rs6000/rs6000.cc:20411 #, gcc-internal-format msgid "" "you cannot take the address of a nested function if you use the %qs option" msgstr "" -#: config/rs6000/rs6000.cc:20541 +#: config/rs6000/rs6000.cc:20493 #, gcc-internal-format msgid "use of %<long double%> in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.cc:20543 +#: config/rs6000/rs6000.cc:20495 #, gcc-internal-format msgid "use of boolean types in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.cc:20545 +#: config/rs6000/rs6000.cc:20497 #, gcc-internal-format msgid "use of %<complex%> in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.cc:20547 +#: config/rs6000/rs6000.cc:20499 #, gcc-internal-format msgid "use of decimal floating-point types in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.cc:20553 +#: config/rs6000/rs6000.cc:20505 #, gcc-internal-format msgid "use of %<long%> in AltiVec types is invalid for 64-bit code without %qs" msgstr "" -#: config/rs6000/rs6000.cc:20556 +#: config/rs6000/rs6000.cc:20508 #, gcc-internal-format msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>" msgstr "" -#: config/rs6000/rs6000.cc:20561 +#: config/rs6000/rs6000.cc:20513 #, gcc-internal-format msgid "use of %<long long%> in AltiVec types is invalid without %qs" msgstr "" -#: config/rs6000/rs6000.cc:20564 +#: config/rs6000/rs6000.cc:20516 #, gcc-internal-format msgid "use of %<double%> in AltiVec types is invalid without %qs" msgstr "" -#: config/rs6000/rs6000.cc:24705 +#: config/rs6000/rs6000.cc:24657 #, gcc-internal-format msgid "invalid cpu %qs for %s%qs%s" msgstr "" -#: config/rs6000/rs6000.cc:24708 +#: config/rs6000/rs6000.cc:24660 #, gcc-internal-format msgid "%s%qs%s is not allowed" msgstr "" -#: config/rs6000/rs6000.cc:24710 +#: config/rs6000/rs6000.cc:24662 #, gcc-internal-format msgid "%s%qs%s is invalid" msgstr "" -#: config/rs6000/rs6000.cc:25239 +#: config/rs6000/rs6000.cc:25183 #, gcc-internal-format msgid "%<-mno-%s%> turns off %<-m%s%>" msgstr "" -#: config/rs6000/rs6000.cc:25398 +#: config/rs6000/rs6000.cc:25342 #, gcc-internal-format msgid "" "%<target_clones%> attribute needs GLIBC (2.23 and newer) that exports " "hardware capability bits" msgstr "" -#: config/rs6000/rs6000.cc:25687 +#: config/rs6000/rs6000.cc:25631 #, gcc-internal-format msgid "Virtual function multiversioning not supported" msgstr "" -#: config/rs6000/rs6000.cc:28825 +#: config/rs6000/rs6000.cc:28769 #, gcc-internal-format msgid "" "the result for the xxspltidp instruction is undefined for subnormal input " "values" msgstr "" -#: config/rs6000/rs6000.cc:29303 +#: config/rs6000/rs6000.cc:29247 #, gcc-internal-format msgid "type %<__vector_quad%> requires the %qs option" msgstr "" -#: config/rs6000/rs6000.cc:29308 +#: config/rs6000/rs6000.cc:29252 #, gcc-internal-format msgid "type %<__vector_pair%> requires the %qs option" msgstr "" @@ -46528,7 +46766,7 @@ msgstr "" msgid "builtin %qs can only be used on vector types" msgstr "" -#: config/s390/s390-c.cc:718 config/s390/s390.cc:997 +#: config/s390/s390-c.cc:718 config/s390/s390.cc:999 #, gcc-internal-format msgid "constant value required for builtin %qF argument %d" msgstr "" @@ -46600,83 +46838,83 @@ msgstr "" msgid "constant argument %d for builtin %qF is out of range for target type" msgstr "" -#: config/s390/s390.cc:846 +#: config/s390/s390.cc:848 #, gcc-internal-format msgid "constant argument %d for builtin %qF is invalid (%s)" msgstr "" -#: config/s390/s390.cc:850 +#: config/s390/s390.cc:852 #, gcc-internal-format msgid "constant argument %d for builtin %qF is out of range (0-%wu)" msgstr "" -#: config/s390/s390.cc:866 +#: config/s390/s390.cc:868 #, gcc-internal-format msgid "constant argument %d for builtin %qF is out of range (%wd-%wd)" msgstr "" -#: config/s390/s390.cc:915 +#: config/s390/s390.cc:917 #, gcc-internal-format msgid "" "builtin %qF is not supported without %<-mhtm%> (default with %<-" "march=zEC12%> and higher)" msgstr "" -#: config/s390/s390.cc:921 +#: config/s390/s390.cc:923 #, gcc-internal-format msgid "builtin %qF requires %<-mvx%> (default with %<-march=z13%> and higher)" msgstr "" -#: config/s390/s390.cc:928 +#: config/s390/s390.cc:930 #, gcc-internal-format msgid "Builtin %qF requires z14 or higher" msgstr "" -#: config/s390/s390.cc:934 +#: config/s390/s390.cc:936 #, gcc-internal-format msgid "Builtin %qF requires z15 or higher" msgstr "" -#: config/s390/s390.cc:953 +#: config/s390/s390.cc:955 #, gcc-internal-format msgid "unresolved overloaded builtin" msgstr "" -#: config/s390/s390.cc:960 +#: config/s390/s390.cc:962 #, gcc-internal-format msgid "bad builtin icode" msgstr "" -#: config/s390/s390.cc:1094 +#: config/s390/s390.cc:1096 #, gcc-internal-format msgid "invalid argument %d for builtin %qF" msgstr "" -#: config/s390/s390.cc:1195 +#: config/s390/s390.cc:1197 #, gcc-internal-format msgid "" "requested %qE attribute is not a comma separated pair of non-negative " "integer constants or too large (max. %d)" msgstr "" -#: config/s390/s390.cc:1285 +#: config/s390/s390.cc:1287 #, gcc-internal-format msgid "argument to %qE attribute is not (keep|thunk|thunk-extern)" msgstr "" -#: config/s390/s390.cc:10581 +#: config/s390/s390.cc:10593 #, gcc-internal-format msgid "total size of local variables exceeds architecture limit" msgstr "" -#: config/s390/s390.cc:11988 +#: config/s390/s390.cc:12000 #, gcc-internal-format msgid "" "frame size of function %qs is %wd bytes exceeding user provided stack limit " "of %d bytes; an unconditional trap is added" msgstr "" -#: config/s390/s390.cc:12004 +#: config/s390/s390.cc:12016 #, gcc-internal-format msgid "" "frame size of function %qs is %wd bytes which is more than half the stack " @@ -46684,156 +46922,156 @@ msgid "" "function" msgstr "" -#: config/s390/s390.cc:12032 +#: config/s390/s390.cc:12044 #, gcc-internal-format msgid "frame size of %qs is %wd bytes" msgstr "" -#: config/s390/s390.cc:12036 +#: config/s390/s390.cc:12048 #, gcc-internal-format msgid "%qs uses dynamic stack allocation" msgstr "" -#: config/s390/s390.cc:12783 +#: config/s390/s390.cc:12795 #, gcc-internal-format msgid "" "parameter passing for argument of type %qT with zero-width bit fields " "members changed in GCC 12" msgstr "" -#: config/s390/s390.cc:13742 +#: config/s390/s390.cc:13754 #, gcc-internal-format msgid "nested functions cannot be profiled with %<-mfentry%> on s390" msgstr "" -#: config/s390/s390.cc:16035 +#: config/s390/s390.cc:16056 #, gcc-internal-format msgid "64-bit ABI not supported in ESA/390 mode" msgstr "" -#: config/s390/s390.cc:16042 +#: config/s390/s390.cc:16063 #, gcc-internal-format msgid "thunk-inline is only supported with %<-mindirect-branch-jump%>" msgstr "" -#: config/s390/s390.cc:16077 +#: config/s390/s390.cc:16098 #, gcc-internal-format, gfc-internal-format msgid "hardware vector support not available on %s" msgstr "" -#: config/s390/s390.cc:16080 +#: config/s390/s390.cc:16101 #, gcc-internal-format msgid "hardware vector support not available with %<-msoft-float%>" msgstr "" -#: config/s390/s390.cc:16109 +#: config/s390/s390.cc:16130 #, gcc-internal-format, gfc-internal-format msgid "hardware decimal floating-point instructions not available on %s" msgstr "" -#: config/s390/s390.cc:16113 +#: config/s390/s390.cc:16134 #, gcc-internal-format msgid "" "hardware decimal floating-point instructions not available in ESA/390 mode" msgstr "" -#: config/s390/s390.cc:16125 +#: config/s390/s390.cc:16146 #, gcc-internal-format msgid "%<-mhard-dfp%> cannot be used in conjunction with %<-msoft-float%>" msgstr "" -#: config/s390/s390.cc:16134 +#: config/s390/s390.cc:16155 #, gcc-internal-format msgid "" "%<-mbackchain%> %<-mpacked-stack%> %<-mhard-float%> are not supported in " "combination" msgstr "" -#: config/s390/s390.cc:16140 +#: config/s390/s390.cc:16161 #, gcc-internal-format msgid "stack size must be greater than the stack guard value" msgstr "" -#: config/s390/s390.cc:16142 +#: config/s390/s390.cc:16163 #, gcc-internal-format msgid "stack size must not be greater than 64k" msgstr "" -#: config/s390/s390.cc:16145 +#: config/s390/s390.cc:16166 #, gcc-internal-format msgid "%<-mstack-guard%> implies use of %<-mstack-size%>" msgstr "" -#: config/s390/s390.cc:16158 +#: config/s390/s390.cc:16179 #, gcc-internal-format msgid "%<-mtpf-trace-hook-prologue-check%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16161 +#: config/s390/s390.cc:16182 #, gcc-internal-format msgid "%<-mtpf-trace-hook-prologue-target%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16164 +#: config/s390/s390.cc:16185 #, gcc-internal-format msgid "%<-mtpf-trace-hook-epilogue-check%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16167 +#: config/s390/s390.cc:16188 #, gcc-internal-format msgid "%<-mtpf-trace-hook-epilogue-target%> requires integer in range 0-4095" msgstr "" -#: config/s390/s390.cc:16231 +#: config/s390/s390.cc:16252 #, gcc-internal-format msgid "%<-mfentry%> is supported only for 64-bit CPUs" msgstr "" #. argument is not a plain number -#: config/s390/s390.cc:16267 +#: config/s390/s390.cc:16288 #, gcc-internal-format msgid "arguments to %qs should be non-negative integers" msgstr "" -#: config/s390/s390.cc:16274 +#: config/s390/s390.cc:16295 #, gcc-internal-format msgid "argument to %qs is too large (max. %d)" msgstr "" -#: config/s390/s390.cc:16305 +#: config/s390/s390.cc:16326 #, gcc-internal-format msgid "" "%<-mno-pic-data-is-text-relative%> cannot be used without %<-fpic%>/%<-fPIC%>" msgstr "" -#: config/s390/s390.cc:16466 config/s390/s390.cc:16516 -#: config/s390/s390.cc:16533 +#: config/s390/s390.cc:16487 config/s390/s390.cc:16537 +#: config/s390/s390.cc:16554 #, gcc-internal-format msgid "attribute %<target%> argument %qs is unknown" msgstr "" #. Value is not allowed for the target attribute. -#: config/s390/s390.cc:16472 +#: config/s390/s390.cc:16493 #, gcc-internal-format msgid "value %qs is not supported by attribute %<target%>" msgstr "" -#: config/s390/s390.cc:17531 +#: config/s390/s390.cc:17552 #, gcc-internal-format msgid "invalid cc output constraint: %qs" msgstr "" -#: config/s390/s390.cc:17536 +#: config/s390/s390.cc:17557 #, gcc-internal-format msgid "multiple cc output constraints not supported" msgstr "" -#: config/s390/s390.cc:17541 +#: config/s390/s390.cc:17562 #, gcc-internal-format msgid "%<asm%> specifier for cc output conflicts with %<asm%> clobber list" msgstr "" -#: config/s390/s390.cc:17547 +#: config/s390/s390.cc:17568 #, gcc-internal-format msgid "invalid type for cc output constraint" msgstr "" @@ -47258,8 +47496,8 @@ msgstr "" msgid "attribute %qs applies to array types only" msgstr "" -#: c/c-convert.cc:104 c/c-typeck.cc:2351 c/c-typeck.cc:13556 cp/typeck.cc:2497 -#: cp/typeck.cc:9510 cp/typeck.cc:10298 d/d-convert.cc:262 +#: c/c-convert.cc:104 c/c-typeck.cc:2351 c/c-typeck.cc:13556 cp/typeck.cc:2498 +#: cp/typeck.cc:9511 cp/typeck.cc:10299 d/d-convert.cc:262 #, gcc-internal-format msgid "void value not ignored as it ought to be" msgstr "" @@ -47723,7 +47961,7 @@ msgstr "" msgid "%qE defined as wrong kind of tag" msgstr "" -#: c/c-decl.cc:4669 cp/tree.cc:5024 +#: c/c-decl.cc:4669 cp/tree.cc:5036 #, gcc-internal-format msgid "%qE attribute applied to %qD with void return type" msgstr "" @@ -47875,7 +48113,7 @@ msgstr "" msgid "%<[*]%> not allowed in other than function prototype scope" msgstr "" -#: c/c-decl.cc:5475 cp/decl2.cc:1852 cp/name-lookup.cc:8767 +#: c/c-decl.cc:5475 cp/decl2.cc:1852 cp/name-lookup.cc:8804 #, gcc-internal-format msgid "%<omp::%s%> not allowed to be specified in this context" msgstr "" @@ -47885,7 +48123,7 @@ msgstr "" msgid "%q+D is usually a function" msgstr "" -#: c/c-decl.cc:5560 c/c-decl.cc:10575 cp/decl.cc:17926 +#: c/c-decl.cc:5560 c/c-decl.cc:10575 cp/decl.cc:17935 #, gcc-internal-format msgid "no previous declaration for %qD" msgstr "" @@ -47961,7 +48199,7 @@ msgstr "" msgid "uninitialized %<const %D%> is invalid in C++" msgstr "" -#: c/c-decl.cc:6108 cp/decl.cc:9047 +#: c/c-decl.cc:6108 cp/decl.cc:9043 #, gcc-internal-format msgid "%q+D in declare target directive does not have mappable type" msgstr "" @@ -48146,7 +48384,7 @@ msgstr "" msgid "storage class specified for unnamed parameter" msgstr "" -#: c/c-decl.cc:7066 cp/decl.cc:13130 +#: c/c-decl.cc:7066 cp/decl.cc:13134 #, gcc-internal-format msgid "storage class specified for typename" msgstr "" @@ -48319,7 +48557,7 @@ msgstr "" msgid "function definition has qualified void return type" msgstr "" -#: c/c-decl.cc:7645 cp/decl.cc:13539 +#: c/c-decl.cc:7645 cp/decl.cc:13543 #, gcc-internal-format msgid "type qualifiers ignored on function return type" msgstr "" @@ -48446,7 +48684,7 @@ msgstr "" msgid "a member of a structure or union cannot have a variably modified type" msgstr "" -#: c/c-decl.cc:7942 cp/decl.cc:12010 +#: c/c-decl.cc:7942 cp/decl.cc:12014 #, gcc-internal-format msgid "variable or field %qE declared void" msgstr "" @@ -48516,12 +48754,12 @@ msgstr "" msgid "%<constexpr%> object has variably modified type" msgstr "" -#: c/c-decl.cc:8226 c/c-parser.cc:12258 +#: c/c-decl.cc:8226 c/c-parser.cc:12277 #, gcc-internal-format msgid "invalid qualifiers for %<constexpr%> object" msgstr "" -#: c/c-decl.cc:8232 c/c-parser.cc:12261 +#: c/c-decl.cc:8232 c/c-parser.cc:12280 #, gcc-internal-format msgid "invalid qualifiers for field of %<constexpr%> object" msgstr "" @@ -48705,7 +48943,7 @@ msgstr "" msgid "struct has no members" msgstr "" -#: c/c-decl.cc:9476 cp/decl.cc:14566 +#: c/c-decl.cc:9476 cp/decl.cc:14570 #, gcc-internal-format msgid "flexible array member in union" msgstr "" @@ -48767,7 +49005,7 @@ msgstr "" msgid "%<enum%> declared with but defined without fixed underlying type" msgstr "" -#: c/c-decl.cc:9996 cp/decl.cc:17200 m2/gm2-gcc/m2type.cc:2073 +#: c/c-decl.cc:9996 cp/decl.cc:17209 m2/gm2-gcc/m2type.cc:2073 #, gcc-internal-format msgid "specified mode too small for enumerated values" msgstr "" @@ -48817,7 +49055,7 @@ msgstr "" msgid "ISO C restricts enumerator values to range of %<int%> before C23" msgstr "" -#: c/c-decl.cc:10442 cp/decl.cc:5981 cp/decl.cc:17785 +#: c/c-decl.cc:10442 cp/decl.cc:5981 cp/decl.cc:17794 #, gcc-internal-format msgid "inline function %qD given attribute %qs" msgstr "" @@ -48959,12 +49197,12 @@ msgstr "" msgid "argument %qD doesn%'t match prototype" msgstr "" -#: c/c-decl.cc:11231 cp/decl.cc:18722 +#: c/c-decl.cc:11231 cp/decl.cc:18731 #, gcc-internal-format msgid "no return statement in function returning non-void" msgstr "" -#: c/c-decl.cc:11250 cp/decl.cc:18793 +#: c/c-decl.cc:11250 cp/decl.cc:18802 #, gcc-internal-format msgid "parameter %qD set but not used" msgstr "" @@ -49049,7 +49287,7 @@ msgstr "" msgid "two or more data types in declaration specifiers" msgstr "" -#: c/c-decl.cc:11832 cp/parser.cc:34248 +#: c/c-decl.cc:11832 cp/parser.cc:34265 #, gcc-internal-format msgid "%<long long long%> is too long for GCC" msgstr "" @@ -49059,7 +49297,7 @@ msgstr "" msgid "ISO C90 does not support %<long long%>" msgstr "" -#: c/c-decl.cc:12082 c/c-parser.cc:11621 +#: c/c-decl.cc:12082 c/c-parser.cc:11619 #, gcc-internal-format msgid "ISO C90 does not support complex types" msgstr "" @@ -49104,7 +49342,7 @@ msgstr "" msgid "ISO C does not support decimal floating-point before C23" msgstr "" -#: c/c-decl.cc:12597 c/c-decl.cc:12974 c/c-parser.cc:10628 +#: c/c-decl.cc:12597 c/c-decl.cc:12974 c/c-parser.cc:10626 #, gcc-internal-format msgid "fixed-point types not supported for this target" msgstr "" @@ -49166,12 +49404,12 @@ msgstr "" msgid "%qE used with %<constexpr%>" msgstr "" -#: c/c-decl.cc:12798 c/c-parser.cc:3100 c/c-parser.cc:4427 c/c-parser.cc:9962 +#: c/c-decl.cc:12798 c/c-parser.cc:3100 c/c-parser.cc:4427 c/c-parser.cc:9960 #, gcc-internal-format msgid "ISO C99 does not support %qE" msgstr "" -#: c/c-decl.cc:12801 c/c-parser.cc:3103 c/c-parser.cc:4430 c/c-parser.cc:9965 +#: c/c-decl.cc:12801 c/c-parser.cc:3103 c/c-parser.cc:4430 c/c-parser.cc:9963 #, gcc-internal-format msgid "ISO C90 does not support %qE" msgstr "" @@ -49251,41 +49489,41 @@ msgstr "" msgid "ISO C does not support %<%s_BitInt(%d)%> before C23" msgstr "" -#: c/c-decl.cc:13545 cp/semantics.cc:6316 +#: c/c-decl.cc:13545 cp/semantics.cc:6385 #, gcc-internal-format msgid "" "%<#pragma omp declare reduction%> combiner refers to variable %qD which is " "not %<omp_out%> nor %<omp_in%>" msgstr "" -#: c/c-decl.cc:13549 cp/semantics.cc:6320 +#: c/c-decl.cc:13549 cp/semantics.cc:6389 #, gcc-internal-format msgid "" "%<#pragma omp declare reduction%> initializer refers to variable %qD which " "is not %<omp_priv%> nor %<omp_orig%>" msgstr "" -#: c/c-fold.cc:389 c/c-typeck.cc:12830 cp/typeck.cc:5734 +#: c/c-fold.cc:389 c/c-typeck.cc:12830 cp/typeck.cc:5735 #, gcc-internal-format msgid "left shift of negative value" msgstr "" -#: c/c-fold.cc:399 c/c-typeck.cc:12839 cp/typeck.cc:5742 +#: c/c-fold.cc:399 c/c-typeck.cc:12839 cp/typeck.cc:5743 #, gcc-internal-format msgid "left shift count is negative" msgstr "" -#: c/c-fold.cc:400 c/c-typeck.cc:12766 cp/typeck.cc:5681 +#: c/c-fold.cc:400 c/c-typeck.cc:12766 cp/typeck.cc:5682 #, gcc-internal-format msgid "right shift count is negative" msgstr "" -#: c/c-fold.cc:409 c/c-typeck.cc:12858 cp/typeck.cc:5750 +#: c/c-fold.cc:409 c/c-typeck.cc:12858 cp/typeck.cc:5751 #, gcc-internal-format msgid "left shift count >= width of type" msgstr "" -#: c/c-fold.cc:410 c/c-typeck.cc:12790 cp/typeck.cc:5692 +#: c/c-fold.cc:410 c/c-typeck.cc:12790 cp/typeck.cc:5693 #, gcc-internal-format msgid "right shift count >= width of type" msgstr "" @@ -49315,7 +49553,7 @@ msgstr "" msgid "to match this %qs" msgstr "" -#: c/c-parser.cc:1409 cp/parser.cc:34485 +#: c/c-parser.cc:1409 cp/parser.cc:34502 #, gcc-internal-format msgid "expected end of line" msgstr "" @@ -49325,13 +49563,13 @@ msgstr "" msgid "ISO C forbids an empty translation unit" msgstr "" -#: c/c-parser.cc:1917 c/c-parser.cc:1926 c/c-parser.cc:25332 cp/parser.cc:49026 -#: cp/semantics.cc:3564 cp/semantics.cc:3573 +#: c/c-parser.cc:1917 c/c-parser.cc:1926 c/c-parser.cc:25405 cp/parser.cc:49092 +#: cp/semantics.cc:3629 cp/semantics.cc:3638 #, gcc-internal-format msgid "%qs without corresponding %qs" msgstr "" -#: c/c-parser.cc:2022 c/c-parser.cc:13376 +#: c/c-parser.cc:2022 c/c-parser.cc:13395 #, gcc-internal-format msgid "ISO C does not allow extra %<;%> outside of a function" msgstr "" @@ -49366,9 +49604,9 @@ msgstr "" msgid "unknown type name %qE" msgstr "" -#: c/c-parser.cc:2315 c/c-parser.cc:14736 c/c-parser.cc:22962 -#: c/c-parser.cc:23561 c/c-parser.cc:24147 cp/parser.cc:46386 -#: cp/parser.cc:51112 +#: c/c-parser.cc:2315 c/c-parser.cc:14755 c/c-parser.cc:23035 +#: c/c-parser.cc:23634 c/c-parser.cc:24220 cp/parser.cc:46430 +#: cp/parser.cc:51178 #, gcc-internal-format msgid "expected declaration specifiers" msgstr "" @@ -49398,7 +49636,7 @@ msgstr "" msgid "expected %<;%>, identifier or %<(%>" msgstr "" -#: c/c-parser.cc:2439 cp/parser.cc:36739 cp/parser.cc:36811 +#: c/c-parser.cc:2439 cp/parser.cc:36756 cp/parser.cc:36828 #, gcc-internal-format msgid "prefix attributes are ignored for methods" msgstr "" @@ -49413,12 +49651,12 @@ msgstr "" msgid "unexpected attribute" msgstr "" -#: c/c-parser.cc:2505 c/c-parser.cc:7727 cp/parser.cc:12966 cp/parser.cc:13190 +#: c/c-parser.cc:2505 c/c-parser.cc:7725 cp/parser.cc:12966 cp/parser.cc:13190 #, gcc-internal-format msgid "%<fallthrough%> attribute not followed by %<;%>" msgstr "" -#: c/c-parser.cc:2508 c/c-parser.cc:7710 cp/cp-gimplify.cc:3637 +#: c/c-parser.cc:2508 c/c-parser.cc:7708 cp/cp-gimplify.cc:3647 #, gcc-internal-format msgid "%<assume%> attribute not followed by %<;%>" msgstr "" @@ -49481,7 +49719,7 @@ msgstr "" msgid "ISO C forbids nested functions" msgstr "" -#: c/c-parser.cc:3126 c/c-parser.cc:8889 c/c-parser.cc:14809 +#: c/c-parser.cc:3126 c/c-parser.cc:8887 c/c-parser.cc:14828 #, gcc-internal-format msgid "expected string literal" msgstr "" @@ -49511,7 +49749,7 @@ msgstr "" msgid "static assertion failed: %E" msgstr "" -#: c/c-parser.cc:3164 cp/semantics.cc:11678 +#: c/c-parser.cc:3164 cp/semantics.cc:11747 #, gcc-internal-format msgid "static assertion failed" msgstr "" @@ -49571,21 +49809,21 @@ msgstr "" msgid "empty enum is invalid" msgstr "" -#: c/c-parser.cc:3805 c/c-parser.cc:4859 c/c-parser.cc:5717 c/c-parser.cc:5734 -#: c/c-parser.cc:6263 c/c-parser.cc:6995 c/c-parser.cc:8756 c/c-parser.cc:8839 -#: c/c-parser.cc:9819 c/c-parser.cc:10136 c/c-parser.cc:10145 -#: c/c-parser.cc:10688 c/c-parser.cc:10878 c/c-parser.cc:10906 -#: c/c-parser.cc:12079 c/c-parser.cc:12652 c/c-parser.cc:12690 -#: c/c-parser.cc:12958 c/c-parser.cc:13009 c/c-parser.cc:13169 -#: c/c-parser.cc:13199 c/c-parser.cc:13207 c/c-parser.cc:13236 -#: c/c-parser.cc:13249 c/c-parser.cc:13555 c/c-parser.cc:13679 -#: c/c-parser.cc:14264 c/c-parser.cc:14317 c/c-parser.cc:14333 -#: c/c-parser.cc:14379 c/c-parser.cc:15367 c/c-parser.cc:15412 -#: c/c-parser.cc:18265 c/c-parser.cc:18402 c/c-parser.cc:19159 -#: c/c-parser.cc:21755 c/c-parser.cc:24625 c/c-parser.cc:24814 +#: c/c-parser.cc:3805 c/c-parser.cc:4859 c/c-parser.cc:5716 c/c-parser.cc:5733 +#: c/c-parser.cc:6261 c/c-parser.cc:6993 c/c-parser.cc:8754 c/c-parser.cc:8837 +#: c/c-parser.cc:9817 c/c-parser.cc:10134 c/c-parser.cc:10143 +#: c/c-parser.cc:10686 c/c-parser.cc:10876 c/c-parser.cc:10904 +#: c/c-parser.cc:12098 c/c-parser.cc:12671 c/c-parser.cc:12709 +#: c/c-parser.cc:12977 c/c-parser.cc:13028 c/c-parser.cc:13188 +#: c/c-parser.cc:13218 c/c-parser.cc:13226 c/c-parser.cc:13255 +#: c/c-parser.cc:13268 c/c-parser.cc:13574 c/c-parser.cc:13698 +#: c/c-parser.cc:14283 c/c-parser.cc:14336 c/c-parser.cc:14352 +#: c/c-parser.cc:14398 c/c-parser.cc:15386 c/c-parser.cc:15431 +#: c/c-parser.cc:18314 c/c-parser.cc:18451 c/c-parser.cc:19208 +#: c/c-parser.cc:21828 c/c-parser.cc:24698 c/c-parser.cc:24887 #: c/gimple-parser.cc:1895 c/gimple-parser.cc:1942 cp/parser.cc:9524 -#: cp/parser.cc:34488 cp/parser.cc:37716 cp/parser.cc:40816 cp/parser.cc:41008 -#: cp/parser.cc:47959 cp/parser.cc:50378 +#: cp/parser.cc:34505 cp/parser.cc:37733 cp/parser.cc:40860 cp/parser.cc:41052 +#: cp/parser.cc:48025 cp/parser.cc:50444 #, gcc-internal-format msgid "expected identifier" msgstr "" @@ -49620,7 +49858,7 @@ msgstr "" msgid "no semicolon at end of struct or union" msgstr "" -#: c/c-parser.cc:4192 c/c-parser.cc:6029 +#: c/c-parser.cc:4192 c/c-parser.cc:6027 #, gcc-internal-format msgid "expected specifier-qualifier-list" msgstr "" @@ -49665,98 +49903,98 @@ msgstr "" msgid "parentheses must be omitted if attribute argument list is empty" msgstr "" -#: c/c-parser.cc:5562 cp/parser.cc:29822 +#: c/c-parser.cc:5562 cp/parser.cc:29828 #, gcc-internal-format msgid "expected OpenMP directive name" msgstr "" -#: c/c-parser.cc:5609 cp/parser.cc:29878 +#: c/c-parser.cc:5609 cp/parser.cc:29884 #, gcc-internal-format msgid "expected %<directive%> or %<sequence%>" msgstr "" -#: c/c-parser.cc:5755 cp/parser.cc:30047 +#: c/c-parser.cc:5754 cp/parser.cc:30053 #, gcc-internal-format msgid "%<omp::%E%> attribute requires argument" msgstr "" -#: c/c-parser.cc:5771 cp/parser.cc:30063 +#: c/c-parser.cc:5770 cp/parser.cc:30069 #, gcc-internal-format msgid "%qE attribute does not take any arguments" msgstr "" -#: c/c-parser.cc:5893 +#: c/c-parser.cc:5891 #, gcc-internal-format msgid "ISO C does not support %<[[]]%> attributes before C23" msgstr "" -#: c/c-parser.cc:6106 c/c-parser.cc:6169 c/c-typeck.cc:8822 +#: c/c-parser.cc:6104 c/c-parser.cc:6167 c/c-typeck.cc:8822 #, gcc-internal-format msgid "" "variable-sized object may not be initialized except with an empty initializer" msgstr "" -#: c/c-parser.cc:6163 +#: c/c-parser.cc:6161 #, gcc-internal-format msgid "ISO C forbids empty initializer braces before C23" msgstr "" -#: c/c-parser.cc:6227 +#: c/c-parser.cc:6225 #, gcc-internal-format msgid "obsolete use of designated initializer with %<:%>" msgstr "" -#: c/c-parser.cc:6383 +#: c/c-parser.cc:6381 #, gcc-internal-format msgid "ISO C forbids specifying range of elements to initialize" msgstr "" -#: c/c-parser.cc:6395 +#: c/c-parser.cc:6393 #, gcc-internal-format msgid "ISO C90 forbids specifying subobject to initialize" msgstr "" -#: c/c-parser.cc:6403 +#: c/c-parser.cc:6401 #, gcc-internal-format msgid "obsolete use of designated initializer without %<=%>" msgstr "" -#: c/c-parser.cc:6567 cp/parser.cc:13308 +#: c/c-parser.cc:6565 cp/parser.cc:13308 #, gcc-internal-format msgid "inner loops must be perfectly nested in %<#pragma acc loop%>" msgstr "" -#: c/c-parser.cc:6574 cp/parser.cc:13315 +#: c/c-parser.cc:6572 cp/parser.cc:13315 #, gcc-internal-format msgid "inner loops must be perfectly nested with %<ordered%> clause" msgstr "" -#: c/c-parser.cc:6581 cp/parser.cc:13322 +#: c/c-parser.cc:6579 cp/parser.cc:13322 #, gcc-internal-format msgid "" "inner loops must be perfectly nested with %<reduction%> %<inscan%> clause" msgstr "" -#: c/c-parser.cc:6638 c/c-parser.cc:6793 cp/parser.cc:12240 cp/parser.cc:12390 -#: cp/parser.cc:48555 +#: c/c-parser.cc:6636 c/c-parser.cc:6791 cp/parser.cc:12240 cp/parser.cc:12390 +#: cp/parser.cc:48621 #, gcc-internal-format msgid "" "mixing OpenMP directives with attribute and pragma syntax on the same " "statement" msgstr "" -#: c/c-parser.cc:6646 cp/parser.cc:12248 +#: c/c-parser.cc:6644 cp/parser.cc:12248 #, gcc-internal-format msgid "OpenMP %<omp::decl%> attribute on a statement" msgstr "" -#: c/c-parser.cc:6670 c/c-parser.cc:6889 c/c-parser.cc:25015 cp/parser.cc:12272 -#: cp/parser.cc:48535 cp/parser.cc:48675 +#: c/c-parser.cc:6668 c/c-parser.cc:6887 c/c-parser.cc:25088 cp/parser.cc:12272 +#: cp/parser.cc:48601 cp/parser.cc:48741 #, gcc-internal-format msgid "unknown OpenMP directive name in %qs attribute argument" msgstr "" -#: c/c-parser.cc:6762 cp/parser.cc:12359 +#: c/c-parser.cc:6760 cp/parser.cc:12359 #, gcc-internal-format msgid "" "OpenMP construct among %<omp::directive%> attributes requires all %<omp::" @@ -49764,60 +50002,60 @@ msgid "" "sequence%>" msgstr "" -#: c/c-parser.cc:6770 cp/parser.cc:12367 +#: c/c-parser.cc:6768 cp/parser.cc:12367 #, gcc-internal-format msgid "" "multiple OpenMP standalone directives among %<omp::directive%> attributes " "must be all within the same %<omp::sequence%>" msgstr "" -#: c/c-parser.cc:6782 cp/parser.cc:12379 +#: c/c-parser.cc:6780 cp/parser.cc:12379 #, gcc-internal-format msgid "" "standalone OpenMP directives in %<omp::directive%> attribute can only appear " "on an empty statement" msgstr "" -#: c/c-parser.cc:6901 cp/parser.cc:12509 +#: c/c-parser.cc:6899 cp/parser.cc:12509 #, gcc-internal-format msgid "" "mixing OpenMP directives with attribute and pragma syntax on the same " "declaration" msgstr "" -#: c/c-parser.cc:7010 +#: c/c-parser.cc:7008 #, gcc-internal-format msgid "ISO C forbids label declarations" msgstr "" -#: c/c-parser.cc:7016 c/c-parser.cc:7197 c/c-parser.cc:7222 +#: c/c-parser.cc:7014 c/c-parser.cc:7195 c/c-parser.cc:7220 #: c/gimple-parser.cc:424 #, gcc-internal-format msgid "expected declaration or statement" msgstr "" -#: c/c-parser.cc:7126 +#: c/c-parser.cc:7124 #, gcc-internal-format msgid "" "a label can only be part of a statement and a declaration is not a statement" msgstr "" -#: c/c-parser.cc:7146 c/c-parser.cc:7188 +#: c/c-parser.cc:7144 c/c-parser.cc:7186 #, gcc-internal-format msgid "ISO C90 forbids mixed declarations and code" msgstr "" -#: c/c-parser.cc:7230 +#: c/c-parser.cc:7228 #, gcc-internal-format msgid "expected %<}%> before %<else%>" msgstr "" -#: c/c-parser.cc:7235 cp/parser.cc:13369 +#: c/c-parser.cc:7233 cp/parser.cc:13369 #, gcc-internal-format msgid "%<else%> without a previous %<if%>" msgstr "" -#: c/c-parser.cc:7266 +#: c/c-parser.cc:7264 #, gcc-internal-format msgid "label at end of compound statement" msgstr "" @@ -49826,1292 +50064,1307 @@ msgstr "" #. c_parser_skip_until_found stops at a closing nesting #. delimiter without consuming it, but here we need to consume #. it to proceed further. -#: c/c-parser.cc:7315 c/c-parser.cc:7319 c/c-parser.cc:7752 +#: c/c-parser.cc:7313 c/c-parser.cc:7317 c/c-parser.cc:7750 #: c/gimple-parser.cc:2434 cp/parser.cc:12872 #, gcc-internal-format msgid "expected statement" msgstr "" -#: c/c-parser.cc:7374 +#: c/c-parser.cc:7372 #, gcc-internal-format msgid "expected %<:%> or %<...%>" msgstr "" -#: c/c-parser.cc:7402 +#: c/c-parser.cc:7400 #, gcc-internal-format msgid "" "GNU-style attribute between label and declaration appertains to the label" msgstr "" -#: c/c-parser.cc:7634 +#: c/c-parser.cc:7632 #, gcc-internal-format msgid "expected identifier or %<*%>" msgstr "" -#: c/c-parser.cc:7735 +#: c/c-parser.cc:7733 #, gcc-internal-format msgid "" "only attribute %<fallthrough%> or %<assume%> can be applied to a null " "statement" msgstr "" -#: c/c-parser.cc:7860 cp/parser.cc:14984 +#: c/c-parser.cc:7858 cp/parser.cc:14984 #, gcc-internal-format msgid "suggest braces around empty body in an %<if%> statement" msgstr "" -#: c/c-parser.cc:7902 cp/parser.cc:14987 +#: c/c-parser.cc:7900 cp/parser.cc:14987 #, gcc-internal-format msgid "suggest braces around empty body in an %<else%> statement" msgstr "" -#: c/c-parser.cc:8033 cp/parser.cc:13782 +#: c/c-parser.cc:8031 cp/parser.cc:13782 #, gcc-internal-format msgid "suggest explicit braces to avoid ambiguous %<else%>" msgstr "" -#: c/c-parser.cc:8122 c/c-parser.cc:8187 c/c-parser.cc:8306 cp/parser.cc:14614 +#: c/c-parser.cc:8120 c/c-parser.cc:8185 c/c-parser.cc:8304 cp/parser.cc:14614 #, gcc-internal-format msgid "loop not permitted in intervening code in OpenMP loop body" msgstr "" -#: c/c-parser.cc:8195 +#: c/c-parser.cc:8193 #, gcc-internal-format msgid "suggest braces around empty body in %<do%> statement" msgstr "" -#: c/c-parser.cc:8340 c/c-parser.cc:8372 +#: c/c-parser.cc:8338 c/c-parser.cc:8370 #, gcc-internal-format msgid "multiple iterating variables in fast enumeration" msgstr "" -#: c/c-parser.cc:8395 +#: c/c-parser.cc:8393 #, gcc-internal-format msgid "invalid iterating variable in fast enumeration" msgstr "" -#: c/c-parser.cc:8419 cp/parser.cc:14069 +#: c/c-parser.cc:8417 cp/parser.cc:14069 #, gcc-internal-format msgid "missing loop condition in loop with %<GCC ivdep%> pragma" msgstr "" -#: c/c-parser.cc:8425 cp/parser.cc:14075 +#: c/c-parser.cc:8423 cp/parser.cc:14075 #, gcc-internal-format msgid "missing loop condition in loop with %<GCC unroll%> pragma" msgstr "" -#: c/c-parser.cc:8466 +#: c/c-parser.cc:8464 #, gcc-internal-format msgid "missing collection in fast enumeration" msgstr "" -#: c/c-parser.cc:8588 c/c-parser.cc:8599 c/c-parser.cc:8610 +#: c/c-parser.cc:8586 c/c-parser.cc:8597 c/c-parser.cc:8608 #, gcc-internal-format msgid "duplicate %<asm%> qualifier %qE" msgstr "" -#: c/c-parser.cc:8589 c/c-parser.cc:8600 c/c-parser.cc:8611 cp/parser.cc:22744 +#: c/c-parser.cc:8587 c/c-parser.cc:8598 c/c-parser.cc:8609 cp/parser.cc:22744 #: cp/parser.cc:22761 cp/parser.cc:22775 #, gcc-internal-format msgid "first seen here" msgstr "" -#: c/c-parser.cc:8620 +#: c/c-parser.cc:8618 #, gcc-internal-format msgid "%qE is not a valid %<asm%> qualifier" msgstr "" -#: c/c-parser.cc:8670 +#: c/c-parser.cc:8668 #, gcc-internal-format msgid "expected %<:%> or %<)%>" msgstr "" -#: c/c-parser.cc:8969 cp/parser.cc:4706 +#: c/c-parser.cc:8967 cp/parser.cc:4706 #, gcc-internal-format msgid "a wide string is invalid in this context" msgstr "" -#: c/c-parser.cc:9177 +#: c/c-parser.cc:9175 #, gcc-internal-format msgid "ISO C forbids omitting the middle term of a %<?:%> expression" msgstr "" #. Location of the binary operator. #. Quiet warning. -#: c/c-parser.cc:9401 cp/typeck.cc:5513 +#: c/c-parser.cc:9399 cp/typeck.cc:5514 #, gcc-internal-format msgid "" "division %<sizeof (%T) / sizeof (%T)%> does not compute the number of array " "elements" msgstr "" -#: c/c-parser.cc:9407 cp/typeck.cc:5518 +#: c/c-parser.cc:9405 cp/typeck.cc:5519 #, gcc-internal-format msgid "first %<sizeof%> operand was declared here" msgstr "" -#: c/c-parser.cc:9678 +#: c/c-parser.cc:9676 #, gcc-internal-format msgid "storage class specifier in cast" msgstr "" -#: c/c-parser.cc:9681 +#: c/c-parser.cc:9679 #, gcc-internal-format msgid "alignment specified for type name in cast" msgstr "" -#: c/c-parser.cc:9782 +#: c/c-parser.cc:9780 #, gcc-internal-format msgid "traditional C rejects the unary plus operator" msgstr "" -#: c/c-parser.cc:9914 +#: c/c-parser.cc:9912 #, gcc-internal-format msgid "storage class specifier in %<sizeof%>" msgstr "" -#: c/c-parser.cc:9917 +#: c/c-parser.cc:9915 #, gcc-internal-format msgid "alignment specified for type name in %<sizeof%>" msgstr "" -#: c/c-parser.cc:9933 +#: c/c-parser.cc:9931 #, gcc-internal-format msgid "%<sizeof%> applied to a bit-field" msgstr "" -#: c/c-parser.cc:10006 +#: c/c-parser.cc:10004 #, gcc-internal-format msgid "storage class specifier in %qE" msgstr "" -#: c/c-parser.cc:10009 +#: c/c-parser.cc:10007 #, gcc-internal-format msgid "alignment specified for type name in %qE" msgstr "" -#: c/c-parser.cc:10033 +#: c/c-parser.cc:10031 #, gcc-internal-format msgid "ISO C does not allow %<%E (expression)%>" msgstr "" -#: c/c-parser.cc:10186 +#: c/c-parser.cc:10184 #, gcc-internal-format msgid "cannot take address of %qs" msgstr "" -#: c/c-parser.cc:10269 +#: c/c-parser.cc:10267 #, gcc-internal-format msgid "ISO C99 does not support %<_Generic%>" msgstr "" -#: c/c-parser.cc:10272 +#: c/c-parser.cc:10270 #, gcc-internal-format msgid "ISO C90 does not support %<_Generic%>" msgstr "" -#: c/c-parser.cc:10341 +#: c/c-parser.cc:10339 #, gcc-internal-format msgid "%<_Generic%> association has function type" msgstr "" -#: c/c-parser.cc:10344 +#: c/c-parser.cc:10342 #, gcc-internal-format msgid "%<_Generic%> association has incomplete type" msgstr "" -#: c/c-parser.cc:10348 +#: c/c-parser.cc:10346 #, gcc-internal-format msgid "%<_Generic%> association has variable length type" msgstr "" -#: c/c-parser.cc:10382 +#: c/c-parser.cc:10380 #, gcc-internal-format msgid "duplicate %<default%> case in %<_Generic%>" msgstr "" -#: c/c-parser.cc:10383 +#: c/c-parser.cc:10381 #, gcc-internal-format msgid "original %<default%> is here" msgstr "" -#: c/c-parser.cc:10391 +#: c/c-parser.cc:10389 #, gcc-internal-format msgid "%<_Generic%> specifies two compatible types" msgstr "" -#: c/c-parser.cc:10392 +#: c/c-parser.cc:10390 #, gcc-internal-format msgid "compatible type is here" msgstr "" -#: c/c-parser.cc:10415 +#: c/c-parser.cc:10413 #, gcc-internal-format msgid "%<_Generic%> selector matches multiple associations" msgstr "" -#: c/c-parser.cc:10417 +#: c/c-parser.cc:10415 #, gcc-internal-format msgid "other match is here" msgstr "" -#: c/c-parser.cc:10442 +#: c/c-parser.cc:10440 #, gcc-internal-format msgid "" "%<_Generic%> selector of type %qT is not compatible with any association" msgstr "" -#: c/c-parser.cc:10463 +#: c/c-parser.cc:10461 #, gcc-internal-format msgid "argument %u of %<__builtin_tgmath%> is not a function pointer" msgstr "" -#: c/c-parser.cc:10471 +#: c/c-parser.cc:10469 #, gcc-internal-format msgid "argument %u of %<__builtin_tgmath%> is unprototyped" msgstr "" -#: c/c-parser.cc:10477 +#: c/c-parser.cc:10475 #, gcc-internal-format msgid "argument %u of %<__builtin_tgmath%> has variable arguments" msgstr "" -#: c/c-parser.cc:10493 +#: c/c-parser.cc:10491 #, gcc-internal-format msgid "argument %u of %<__builtin_tgmath%> has no arguments" msgstr "" -#: c/c-parser.cc:10516 c/c-parser.cc:10520 +#: c/c-parser.cc:10514 c/c-parser.cc:10518 #, gcc-internal-format msgid "ISO C does not support %qs predefined identifier" msgstr "" -#: c/c-parser.cc:10524 +#: c/c-parser.cc:10522 #, gcc-internal-format msgid "ISO C90 does not support %<__func__%> predefined identifier" msgstr "" -#: c/c-parser.cc:10702 c/c-parser.cc:12146 c/c-parser.cc:12168 -#: c/c-parser.cc:21172 c/gimple-parser.cc:1811 c/gimple-parser.cc:2451 -#: cp/parser.cc:43040 +#: c/c-parser.cc:10700 c/c-parser.cc:12165 c/c-parser.cc:12187 +#: c/c-parser.cc:21245 c/gimple-parser.cc:1811 c/gimple-parser.cc:2451 +#: cp/parser.cc:43084 #, gcc-internal-format msgid "expected expression" msgstr "" -#: c/c-parser.cc:10724 +#: c/c-parser.cc:10722 #, gcc-internal-format msgid "braced-group within expression allowed only inside a function" msgstr "" -#: c/c-parser.cc:10739 +#: c/c-parser.cc:10737 #, gcc-internal-format msgid "ISO C forbids braced-groups within expressions" msgstr "" -#: c/c-parser.cc:10933 +#: c/c-parser.cc:10931 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_choose_expr%>" msgstr "" -#: c/c-parser.cc:10949 +#: c/c-parser.cc:10947 #, gcc-internal-format msgid "first argument to %<__builtin_choose_expr%> not a constant" msgstr "" -#: c/c-parser.cc:11019 c/c-parser.cc:11036 c/c-parser.cc:11043 +#: c/c-parser.cc:11017 c/c-parser.cc:11034 c/c-parser.cc:11041 #, gcc-internal-format msgid "too few arguments to %<__builtin_tgmath%>" msgstr "" -#: c/c-parser.cc:11064 +#: c/c-parser.cc:11062 #, gcc-internal-format msgid "argument %u of %<__builtin_tgmath%> has wrong number of arguments" msgstr "" -#: c/c-parser.cc:11108 c/c-parser.cc:11118 +#: c/c-parser.cc:11106 c/c-parser.cc:11116 #, gcc-internal-format msgid "" "invalid type-generic return type for argument %u of %<__builtin_tgmath%>" msgstr "" -#: c/c-parser.cc:11140 c/c-parser.cc:11150 +#: c/c-parser.cc:11138 c/c-parser.cc:11148 #, gcc-internal-format msgid "" "invalid type-generic type for argument %u of argument %u of " "%<__builtin_tgmath%>" msgstr "" -#: c/c-parser.cc:11183 +#: c/c-parser.cc:11181 #, gcc-internal-format msgid "function arguments of %<__builtin_tgmath%> all have the same type" msgstr "" -#: c/c-parser.cc:11202 +#: c/c-parser.cc:11200 #, gcc-internal-format msgid "function arguments of %<__builtin_tgmath%> lack type-generic parameter" msgstr "" -#: c/c-parser.cc:11250 +#: c/c-parser.cc:11248 #, gcc-internal-format msgid "" "duplicate type-generic parameter type for function argument %u of " "%<__builtin_tgmath%>" msgstr "" -#: c/c-parser.cc:11273 +#: c/c-parser.cc:11271 #, gcc-internal-format msgid "bad return type for function argument %u of %<__builtin_tgmath%>" msgstr "" -#: c/c-parser.cc:11290 +#: c/c-parser.cc:11288 #, gcc-internal-format msgid "" "bad type for argument %u of function argument %u of %<__builtin_tgmath%>" msgstr "" -#: c/c-parser.cc:11329 +#: c/c-parser.cc:11327 #, gcc-internal-format, gfc-internal-format msgid "invalid type of argument %u of type-generic function" msgstr "" -#: c/c-parser.cc:11340 +#: c/c-parser.cc:11338 #, gcc-internal-format, gfc-internal-format msgid "" "decimal floating-point argument %u to complex-only type-generic function" msgstr "" -#: c/c-parser.cc:11348 +#: c/c-parser.cc:11346 #, gcc-internal-format, gfc-internal-format msgid "decimal floating-point argument %u to binary-only type-generic function" msgstr "" -#: c/c-parser.cc:11356 c/c-parser.cc:11386 +#: c/c-parser.cc:11354 c/c-parser.cc:11384 #, gcc-internal-format msgid "" "both complex and decimal floating-point arguments to type-generic function" msgstr "" -#: c/c-parser.cc:11364 c/c-parser.cc:11406 +#: c/c-parser.cc:11362 c/c-parser.cc:11404 #, gcc-internal-format msgid "" "both binary and decimal floating-point arguments to type-generic function" msgstr "" -#: c/c-parser.cc:11378 +#: c/c-parser.cc:11376 #, gcc-internal-format, gfc-internal-format msgid "complex argument %u to decimal-only type-generic function" msgstr "" -#: c/c-parser.cc:11398 +#: c/c-parser.cc:11396 #, gcc-internal-format, gfc-internal-format msgid "binary argument %u to decimal-only type-generic function" msgstr "" -#: c/c-parser.cc:11501 +#: c/c-parser.cc:11499 #, gcc-internal-format msgid "no matching function for type-generic call" msgstr "" -#: c/c-parser.cc:11542 +#: c/c-parser.cc:11540 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_call_with_static_chain%>" msgstr "" -#: c/c-parser.cc:11555 +#: c/c-parser.cc:11553 #, gcc-internal-format msgid "" "first argument to %<__builtin_call_with_static_chain%> must be a call " "expression" msgstr "" -#: c/c-parser.cc:11559 +#: c/c-parser.cc:11557 #, gcc-internal-format msgid "" "second argument to %<__builtin_call_with_static_chain%> must be a pointer " "type" msgstr "" -#: c/c-parser.cc:11585 +#: c/c-parser.cc:11583 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_complex%>" msgstr "" -#: c/c-parser.cc:11607 +#: c/c-parser.cc:11605 #, gcc-internal-format msgid "%<__builtin_complex%> operand not of real binary floating-point type" msgstr "" -#: c/c-parser.cc:11616 +#: c/c-parser.cc:11614 #, gcc-internal-format msgid "%<__builtin_complex%> operands of different types" msgstr "" -#: c/c-parser.cc:11661 c/c-parser.cc:11690 cp/parser.cc:7764 +#: c/c-parser.cc:11659 c/c-parser.cc:11688 cp/parser.cc:7764 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_shuffle%>" msgstr "" -#: c/c-parser.cc:11851 +#: c/c-parser.cc:11849 #, gcc-internal-format msgid "wrong number of arguments to %qs" msgstr "" -#: c/c-parser.cc:11860 +#: c/c-parser.cc:11858 #, gcc-internal-format msgid "%qs operand not an integral type" msgstr "" -#: c/c-parser.cc:12123 cp/parser.cc:6134 +#: c/c-parser.cc:11864 +#, gcc-internal-format +msgid "argument %u in call to function %qs has enumerated type" +msgstr "" + +#: c/c-parser.cc:11871 +#, gcc-internal-format +msgid "argument %u in call to function %qs has boolean type" +msgstr "" + +#: c/c-parser.cc:11878 +#, gcc-internal-format +msgid "argument 1 in call to function %qs has signed type" +msgstr "" + +#: c/c-parser.cc:12142 cp/parser.cc:6134 #, gcc-internal-format msgid "%<omp_all_memory%> may only be used in OpenMP %<depend%> clause" msgstr "" -#: c/c-parser.cc:12133 +#: c/c-parser.cc:12152 #, gcc-internal-format msgid "ISO C does not support %qs before C23" msgstr "" -#: c/c-parser.cc:12221 +#: c/c-parser.cc:12240 #, gcc-internal-format msgid "%qT declared in %<constexpr%> compound literal" msgstr "" -#: c/c-parser.cc:12226 +#: c/c-parser.cc:12245 #, gcc-internal-format msgid "%qT defined in %<constexpr%> compound literal" msgstr "" -#: c/c-parser.cc:12241 +#: c/c-parser.cc:12260 #, gcc-internal-format msgid "compound literal has variable size" msgstr "" -#: c/c-parser.cc:12246 +#: c/c-parser.cc:12265 #, gcc-internal-format msgid "compound literal has function type" msgstr "" -#: c/c-parser.cc:12277 +#: c/c-parser.cc:12296 #, gcc-internal-format msgid "compound literal qualified by address-space qualifier" msgstr "" -#: c/c-parser.cc:12282 +#: c/c-parser.cc:12301 #, gcc-internal-format msgid "ISO C90 forbids compound literals" msgstr "" -#: c/c-parser.cc:12284 +#: c/c-parser.cc:12303 #, gcc-internal-format msgid "ISO C forbids storage class specifiers in compound literals before C23" msgstr "" -#: c/c-parser.cc:12298 +#: c/c-parser.cc:12317 #, gcc-internal-format msgid "%<_Alignas%> specifiers cannot reduce alignment of compound literal" msgstr "" -#: c/c-parser.cc:12373 +#: c/c-parser.cc:12392 #, gcc-internal-format msgid "" "using integer absolute value function %qD when argument is of floating-point " "type %qT" msgstr "" -#: c/c-parser.cc:12378 +#: c/c-parser.cc:12397 #, gcc-internal-format msgid "" "using integer absolute value function %qD when argument is of complex type " "%qT" msgstr "" -#: c/c-parser.cc:12386 +#: c/c-parser.cc:12405 #, gcc-internal-format msgid "taking the absolute value of unsigned type %qT has no effect" msgstr "" -#: c/c-parser.cc:12397 +#: c/c-parser.cc:12416 #, gcc-internal-format msgid "" "using floating-point absolute value function %qD when argument is of integer " "type %qT" msgstr "" -#: c/c-parser.cc:12401 +#: c/c-parser.cc:12420 #, gcc-internal-format msgid "" "using floating-point absolute value function %qD when argument is of decimal " "floating-point type %qT" msgstr "" -#: c/c-parser.cc:12406 +#: c/c-parser.cc:12425 #, gcc-internal-format msgid "" "using floating-point absolute value function %qD when argument is of complex " "type %qT" msgstr "" -#: c/c-parser.cc:12419 +#: c/c-parser.cc:12438 #, gcc-internal-format msgid "" "using complex absolute value function %qD when argument is of integer type " "%qT" msgstr "" -#: c/c-parser.cc:12423 +#: c/c-parser.cc:12442 #, gcc-internal-format msgid "" "using complex absolute value function %qD when argument is of floating-point " "type %qT" msgstr "" -#: c/c-parser.cc:12440 +#: c/c-parser.cc:12459 #, gcc-internal-format msgid "" "using decimal floating-point absolute value function %qD when argument is of " "integer type %qT" msgstr "" -#: c/c-parser.cc:12445 +#: c/c-parser.cc:12464 #, gcc-internal-format msgid "" "using decimal floating-point absolute value function %qD when argument is of " "floating-point type %qT" msgstr "" -#: c/c-parser.cc:12450 +#: c/c-parser.cc:12469 #, gcc-internal-format msgid "" "using decimal floating-point absolute value function %qD when argument is of " "complex type %qT" msgstr "" -#: c/c-parser.cc:12476 +#: c/c-parser.cc:12495 #, gcc-internal-format msgid "" "absolute value function %qD given an argument of type %qT but has parameter " "of type %qT which may cause truncation of value" msgstr "" -#: c/c-parser.cc:12606 cp/parser.cc:8164 +#: c/c-parser.cc:12625 cp/parser.cc:8164 #, gcc-internal-format msgid "calls to the OpenMP runtime API are not permitted in intervening code" msgstr "" -#: c/c-parser.cc:12980 +#: c/c-parser.cc:12999 #, gcc-internal-format msgid "expected identifier or %<)%>" msgstr "" -#: c/c-parser.cc:13076 +#: c/c-parser.cc:13095 #, gcc-internal-format msgid "extra semicolon" msgstr "" -#: c/c-parser.cc:13324 +#: c/c-parser.cc:13343 #, gcc-internal-format msgid "extra semicolon in method definition specified" msgstr "" -#: c/c-parser.cc:13456 +#: c/c-parser.cc:13475 #, gcc-internal-format msgid "method attributes must be specified at the end only" msgstr "" -#: c/c-parser.cc:13476 +#: c/c-parser.cc:13495 #, gcc-internal-format msgid "expected %<;%> or %<{%> after method attribute definition" msgstr "" -#: c/c-parser.cc:13598 +#: c/c-parser.cc:13617 #, gcc-internal-format msgid "objective-c method declaration is expected" msgstr "" -#: c/c-parser.cc:14050 +#: c/c-parser.cc:14069 #, gcc-internal-format msgid "no type or storage class may be specified here," msgstr "" -#: c/c-parser.cc:14118 cp/parser.cc:37573 +#: c/c-parser.cc:14137 cp/parser.cc:37590 #, gcc-internal-format msgid "empty property attribute list" msgstr "" -#: c/c-parser.cc:14132 cp/parser.cc:37586 +#: c/c-parser.cc:14151 cp/parser.cc:37603 #, gcc-internal-format msgid "missing property attribute" msgstr "" -#: c/c-parser.cc:14171 +#: c/c-parser.cc:14190 #, gcc-internal-format msgid "unknown property attribute %<%s%s%>" msgstr "" -#: c/c-parser.cc:14174 cp/parser.cc:37623 +#: c/c-parser.cc:14193 cp/parser.cc:37640 #, gcc-internal-format msgid "unknown property attribute" msgstr "" -#: c/c-parser.cc:14183 cp/parser.cc:37632 +#: c/c-parser.cc:14202 cp/parser.cc:37649 #, gcc-internal-format msgid "expected %<=%> after Objective-C %qE" msgstr "" -#: c/c-parser.cc:14194 cp/parser.cc:37646 +#: c/c-parser.cc:14213 cp/parser.cc:37663 #, gcc-internal-format msgid "expected %qE selector name" msgstr "" -#: c/c-parser.cc:14210 cp/parser.cc:37665 +#: c/c-parser.cc:14229 cp/parser.cc:37682 #, gcc-internal-format msgid "setter method names must terminate with %<:%>" msgstr "" -#: c/c-parser.cc:14434 cp/semantics.cc:13110 +#: c/c-parser.cc:14453 cp/semantics.cc:13234 #, gcc-internal-format msgid "" "%<#pragma GCC unroll%> requires an assignment-expression that evaluates to a " "non-negative integral constant less than %u" msgstr "" -#: c/c-parser.cc:14470 cp/parser.cc:50733 +#: c/c-parser.cc:14489 cp/parser.cc:50799 #, gcc-internal-format msgid "intervening code must not contain OpenMP directives" msgstr "" -#: c/c-parser.cc:14490 c/c-parser.cc:23558 c/c-parser.cc:23867 -#: c/c-parser.cc:23930 c/c-parser.cc:24040 cp/parser.cc:46383 -#: cp/parser.cc:46731 cp/parser.cc:46846 cp/parser.cc:46945 cp/parser.cc:50754 -#: cp/parser.cc:50770 cp/parser.cc:50786 cp/parser.cc:50803 cp/parser.cc:50820 -#: cp/parser.cc:50837 cp/parser.cc:50864 cp/parser.cc:50878 cp/parser.cc:50903 -#: cp/parser.cc:50917 +#: c/c-parser.cc:14509 c/c-parser.cc:23631 c/c-parser.cc:23940 +#: c/c-parser.cc:24003 c/c-parser.cc:24113 cp/parser.cc:46427 +#: cp/parser.cc:46775 cp/parser.cc:46890 cp/parser.cc:46989 cp/parser.cc:50820 +#: cp/parser.cc:50836 cp/parser.cc:50852 cp/parser.cc:50869 cp/parser.cc:50886 +#: cp/parser.cc:50903 cp/parser.cc:50930 cp/parser.cc:50944 cp/parser.cc:50969 +#: cp/parser.cc:50983 #, gcc-internal-format msgid "%<#pragma %s%> may only be used in compound statements" msgstr "" -#: c/c-parser.cc:14513 cp/parser.cc:50892 +#: c/c-parser.cc:14532 cp/parser.cc:50958 #, gcc-internal-format msgid "%<#pragma acc routine%> must be at file scope" msgstr "" -#: c/c-parser.cc:14603 cp/parser.cc:51016 +#: c/c-parser.cc:14622 cp/parser.cc:51082 #, gcc-internal-format msgid "" "%<#pragma omp scan%> may only be used in a loop construct with %<inscan%> " "%<reduction%> clause" msgstr "" -#: c/c-parser.cc:14610 cp/parser.cc:51022 +#: c/c-parser.cc:14629 cp/parser.cc:51088 #, gcc-internal-format msgid "" "%<#pragma omp section%> may only be used in %<#pragma omp sections%> " "construct" msgstr "" -#: c/c-parser.cc:14622 c/c-parser.cc:14638 +#: c/c-parser.cc:14641 c/c-parser.cc:14657 #, gcc-internal-format msgid "%<#pragma %s%> may only be used at file scope" msgstr "" -#: c/c-parser.cc:14705 cp/parser.cc:51099 +#: c/c-parser.cc:14724 cp/parser.cc:51165 #, gcc-internal-format msgid "for, while or do statement expected" msgstr "" -#: c/c-parser.cc:14718 cp/parser.cc:50744 +#: c/c-parser.cc:14737 cp/parser.cc:50810 #, gcc-internal-format msgid "%<#pragma GCC pch_preprocess%> must be first" msgstr "" -#: c/c-parser.cc:15085 c/c-parser.cc:18983 c/c-parser.cc:20640 -#: c/c-parser.cc:20659 c/c-parser.cc:20910 c/c-parser.cc:20968 -#: c/c-parser.cc:20975 c/c-parser.cc:20982 c/c-parser.cc:25881 -#: c/c-parser.cc:25889 c/c-parser.cc:26159 c/c-parser.cc:26169 -#: c/c-parser.cc:26263 c/c-parser.cc:26270 c/c-parser.cc:26277 -#: cp/parser.cc:38096 cp/parser.cc:41648 cp/parser.cc:42566 cp/parser.cc:42603 -#: cp/parser.cc:42792 cp/parser.cc:42855 cp/parser.cc:42862 cp/parser.cc:42869 -#: cp/parser.cc:48178 cp/parser.cc:48185 cp/parser.cc:48192 cp/parser.cc:49639 -#: cp/parser.cc:49647 cp/parser.cc:49799 cp/parser.cc:49809 +#: c/c-parser.cc:15104 c/c-parser.cc:19032 c/c-parser.cc:20713 +#: c/c-parser.cc:20732 c/c-parser.cc:20983 c/c-parser.cc:21041 +#: c/c-parser.cc:21048 c/c-parser.cc:21055 c/c-parser.cc:25954 +#: c/c-parser.cc:25962 c/c-parser.cc:26232 c/c-parser.cc:26242 +#: c/c-parser.cc:26336 c/c-parser.cc:26343 c/c-parser.cc:26350 +#: cp/parser.cc:38113 cp/parser.cc:41692 cp/parser.cc:42610 cp/parser.cc:42647 +#: cp/parser.cc:42836 cp/parser.cc:42899 cp/parser.cc:42906 cp/parser.cc:42913 +#: cp/parser.cc:48244 cp/parser.cc:48251 cp/parser.cc:48258 cp/parser.cc:49705 +#: cp/parser.cc:49713 cp/parser.cc:49865 cp/parser.cc:49875 #, gcc-internal-format msgid "too many %qs clauses" msgstr "" -#: c/c-parser.cc:15112 +#: c/c-parser.cc:15131 #, gcc-internal-format msgid "expression must be integral" msgstr "" -#: c/c-parser.cc:15517 c/c-parser.cc:15529 +#: c/c-parser.cc:15536 c/c-parser.cc:15548 #, gcc-internal-format msgid "expected %<)%> or %<,%>" msgstr "" -#: c/c-parser.cc:15697 c/c-parser.cc:26565 +#: c/c-parser.cc:15746 c/c-parser.cc:26638 #, gcc-internal-format msgid "%qD is not a variable" msgstr "" -#: c/c-parser.cc:15701 cp/semantics.cc:8541 +#: c/c-parser.cc:15750 cp/semantics.cc:8610 #, gcc-internal-format msgid "%qD is not a pointer variable" msgstr "" -#: c/c-parser.cc:15743 cp/parser.cc:38950 +#: c/c-parser.cc:15792 cp/parser.cc:38994 #, gcc-internal-format msgid "collapse argument needs positive constant integer expression" msgstr "" -#: c/c-parser.cc:15838 cp/parser.cc:39028 +#: c/c-parser.cc:15887 cp/parser.cc:39072 #, gcc-internal-format msgid "expected %<none%> or %<present%>" msgstr "" -#: c/c-parser.cc:15840 cp/parser.cc:39030 +#: c/c-parser.cc:15889 cp/parser.cc:39074 #, gcc-internal-format msgid "expected %<none%>, %<shared%>, %<private%> or %<firstprivate%>" msgstr "" -#: c/c-parser.cc:15925 cp/parser.cc:39100 +#: c/c-parser.cc:15974 cp/parser.cc:39144 #, gcc-internal-format msgid "expected constant logical expression" msgstr "" -#: c/c-parser.cc:16002 cp/parser.cc:39182 +#: c/c-parser.cc:16051 cp/parser.cc:39226 #, gcc-internal-format msgid "expected %<data%>, %<update%>, %<enter%> or %<exit%>" msgstr "" -#: c/c-parser.cc:16022 c/c-parser.cc:23923 c/c-parser.cc:24033 -#: cp/parser.cc:39200 cp/parser.cc:46723 cp/parser.cc:46838 +#: c/c-parser.cc:16071 c/c-parser.cc:23996 c/c-parser.cc:24106 +#: cp/parser.cc:39244 cp/parser.cc:46767 cp/parser.cc:46882 #, gcc-internal-format msgid "expected %<data%>" msgstr "" -#: c/c-parser.cc:16075 cp/parser.cc:39255 +#: c/c-parser.cc:16124 cp/parser.cc:39299 #, gcc-internal-format msgid "too many %<if%> clauses with %qs modifier" msgstr "" -#: c/c-parser.cc:16082 cp/parser.cc:39262 +#: c/c-parser.cc:16131 cp/parser.cc:39306 #, gcc-internal-format msgid "too many %<if%> clauses" msgstr "" -#: c/c-parser.cc:16084 cp/parser.cc:39264 +#: c/c-parser.cc:16133 cp/parser.cc:39308 #, gcc-internal-format msgid "too many %<if%> clauses without modifier" msgstr "" -#: c/c-parser.cc:16090 cp/parser.cc:39270 +#: c/c-parser.cc:16139 cp/parser.cc:39314 #, gcc-internal-format msgid "" "if any %<if%> clause has modifier, then all %<if%> clauses have to use " "modifier" msgstr "" -#: c/c-parser.cc:16195 c/c-parser.cc:16255 c/c-parser.cc:16317 -#: c/c-parser.cc:16365 c/c-parser.cc:16445 c/c-parser.cc:16842 -#: c/c-parser.cc:16924 c/c-parser.cc:17529 c/c-parser.cc:17674 -#: c/c-parser.cc:17742 c/c-parser.cc:18920 +#: c/c-parser.cc:16244 c/c-parser.cc:16304 c/c-parser.cc:16366 +#: c/c-parser.cc:16414 c/c-parser.cc:16494 c/c-parser.cc:16891 +#: c/c-parser.cc:16973 c/c-parser.cc:17578 c/c-parser.cc:17723 +#: c/c-parser.cc:17791 c/c-parser.cc:18969 #, gcc-internal-format msgid "expected integer expression" msgstr "" -#: c/c-parser.cc:16206 +#: c/c-parser.cc:16255 #, gcc-internal-format msgid "%<num_threads%> value must be positive" msgstr "" -#: c/c-parser.cc:16267 +#: c/c-parser.cc:16316 #, gcc-internal-format msgid "%<num_tasks%> value must be positive" msgstr "" -#: c/c-parser.cc:16329 cp/semantics.cc:8755 +#: c/c-parser.cc:16378 cp/semantics.cc:8824 #, gcc-internal-format msgid "%<grainsize%> value must be positive" msgstr "" -#: c/c-parser.cc:16378 cp/semantics.cc:8785 +#: c/c-parser.cc:16427 cp/semantics.cc:8854 #, gcc-internal-format msgid "%<priority%> value must be non-negative" msgstr "" -#: c/c-parser.cc:16412 cp/parser.cc:39496 +#: c/c-parser.cc:16461 cp/parser.cc:39540 #, gcc-internal-format msgid "expected constant integer expression with valid sync-hint value" msgstr "" -#: c/c-parser.cc:16484 cp/parser.cc:39566 +#: c/c-parser.cc:16533 cp/parser.cc:39610 #, gcc-internal-format msgid "" "expected %<alloc%>, %<to%>, %<from%>, %<tofrom%>, %<firstprivate%>, %<none%> " "or %<default%>" msgstr "" -#: c/c-parser.cc:16552 +#: c/c-parser.cc:16601 #, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<pointer%> or %<all%>" msgstr "" -#: c/c-parser.cc:16629 cp/parser.cc:39718 +#: c/c-parser.cc:16678 cp/parser.cc:39762 #, gcc-internal-format msgid "too many %<defaultmap%> clauses with %qs category" msgstr "" -#: c/c-parser.cc:16632 cp/parser.cc:39721 +#: c/c-parser.cc:16681 cp/parser.cc:39765 #, gcc-internal-format msgid "too many %<defaultmap%> clauses with unspecified category" msgstr "" -#: c/c-parser.cc:16716 cp/semantics.cc:7612 cp/semantics.cc:7667 +#: c/c-parser.cc:16765 cp/semantics.cc:7681 cp/semantics.cc:7736 #, gcc-internal-format msgid "%qs expression must be integral" msgstr "" -#: c/c-parser.cc:16728 c/c-parser.cc:16851 cp/semantics.cc:7646 -#: cp/semantics.cc:7681 +#: c/c-parser.cc:16777 c/c-parser.cc:16900 cp/semantics.cc:7715 +#: cp/semantics.cc:7750 #, gcc-internal-format msgid "%qs value must be positive" msgstr "" -#: c/c-parser.cc:16790 cp/parser.cc:38722 +#: c/c-parser.cc:16839 cp/parser.cc:38766 #, gcc-internal-format msgid "too many %<static%> arguments" msgstr "" -#: c/c-parser.cc:16824 cp/parser.cc:38755 +#: c/c-parser.cc:16873 cp/parser.cc:38799 #, gcc-internal-format msgid "unexpected argument" msgstr "" -#: c/c-parser.cc:16991 cp/semantics.cc:8972 +#: c/c-parser.cc:17040 cp/semantics.cc:9041 #, gcc-internal-format msgid "%<tile%> argument needs positive integral constant" msgstr "" -#: c/c-parser.cc:17059 cp/parser.cc:41829 +#: c/c-parser.cc:17108 cp/parser.cc:41873 #, gcc-internal-format msgid "too many %<self%> clauses" msgstr "" -#: c/c-parser.cc:17101 cp/parser.cc:39771 +#: c/c-parser.cc:17150 cp/parser.cc:39815 #, gcc-internal-format msgid "expected %<reproducible%> or %<unconstrained%>" msgstr "" -#: c/c-parser.cc:17110 c/c-parser.cc:17116 cp/parser.cc:39780 -#: cp/parser.cc:39790 +#: c/c-parser.cc:17159 c/c-parser.cc:17165 cp/parser.cc:39824 +#: cp/parser.cc:39834 #, gcc-internal-format msgid "expected %<concurrent%>" msgstr "" -#: c/c-parser.cc:17152 cp/parser.cc:39830 +#: c/c-parser.cc:17201 cp/parser.cc:39874 #, gcc-internal-format msgid "expected %<teams%>, %<parallel%> or %<thread%>" msgstr "" -#: c/c-parser.cc:17205 cp/parser.cc:39898 +#: c/c-parser.cc:17254 cp/parser.cc:39942 #, gcc-internal-format msgid "ordered argument needs positive constant integer expression" msgstr "" -#: c/c-parser.cc:17330 c/c-parser.cc:25432 cp/parser.cc:49280 +#: c/c-parser.cc:17379 c/c-parser.cc:25505 cp/parser.cc:49346 #, gcc-internal-format msgid "" "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or " "identifier" msgstr "" -#: c/c-parser.cc:17452 cp/parser.cc:40156 +#: c/c-parser.cc:17501 cp/parser.cc:40200 #, gcc-internal-format msgid "both %<monotonic%> and %<nonmonotonic%> modifiers specified" msgstr "" -#: c/c-parser.cc:17506 cp/parser.cc:40172 +#: c/c-parser.cc:17555 cp/parser.cc:40216 #, gcc-internal-format msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter" msgstr "" -#: c/c-parser.cc:17510 cp/parser.cc:40175 +#: c/c-parser.cc:17559 cp/parser.cc:40219 #, gcc-internal-format msgid "schedule %<auto%> does not take a %<chunk_size%> parameter" msgstr "" -#: c/c-parser.cc:17523 cp/semantics.cc:7728 +#: c/c-parser.cc:17572 cp/semantics.cc:7797 #, gcc-internal-format msgid "chunk size value must be positive" msgstr "" -#: c/c-parser.cc:17546 cp/parser.cc:40195 +#: c/c-parser.cc:17595 cp/parser.cc:40239 #, gcc-internal-format msgid "invalid schedule kind" msgstr "" -#: c/c-parser.cc:17685 c/c-parser.cc:17696 +#: c/c-parser.cc:17734 c/c-parser.cc:17745 #, gcc-internal-format msgid "%<num_teams%> value must be positive" msgstr "" -#: c/c-parser.cc:17704 cp/semantics.cc:7695 +#: c/c-parser.cc:17753 cp/semantics.cc:7764 #, gcc-internal-format msgid "%<num_teams%> lower bound %qE bigger than upper bound %qE" msgstr "" -#: c/c-parser.cc:17753 cp/semantics.cc:7824 +#: c/c-parser.cc:17802 cp/semantics.cc:7893 #, gcc-internal-format msgid "%<thread_limit%> value must be positive" msgstr "" -#: c/c-parser.cc:17798 cp/semantics.cc:7952 +#: c/c-parser.cc:17847 cp/semantics.cc:8021 #, gcc-internal-format msgid "" "%<aligned%> clause alignment expression must be positive constant integer " "expression" msgstr "" -#: c/c-parser.cc:17910 c/c-parser.cc:20627 cp/parser.cc:42558 +#: c/c-parser.cc:17959 c/c-parser.cc:20700 cp/parser.cc:42602 #, gcc-internal-format msgid "expected %<allocator%> or %<align%>" msgstr "" -#: c/c-parser.cc:17917 +#: c/c-parser.cc:17966 #, gcc-internal-format msgid "duplicate %qs modifier" msgstr "" -#: c/c-parser.cc:17965 cp/semantics.cc:8087 +#: c/c-parser.cc:18014 cp/semantics.cc:8156 #, gcc-internal-format msgid "" "%<allocate%> clause allocator expression has type %qT rather than " "%<omp_allocator_handle_t%>" msgstr "" -#: c/c-parser.cc:17976 cp/semantics.cc:8042 cp/semantics.cc:8058 +#: c/c-parser.cc:18025 cp/semantics.cc:8111 cp/semantics.cc:8127 #, gcc-internal-format msgid "" "%<allocate%> clause %<align%> modifier argument needs to be positive " "constant power of two integer expression" msgstr "" -#: c/c-parser.cc:18095 cp/parser.cc:40642 +#: c/c-parser.cc:18144 cp/parser.cc:40686 #, gcc-internal-format msgid "multiple linear modifiers" msgstr "" -#: c/c-parser.cc:18107 cp/parser.cc:40655 +#: c/c-parser.cc:18156 cp/parser.cc:40699 #, gcc-internal-format msgid "multiple %<step%> modifiers" msgstr "" -#: c/c-parser.cc:18115 c/c-parser.cc:18143 +#: c/c-parser.cc:18164 c/c-parser.cc:18192 #, gcc-internal-format msgid "%<linear%> clause step expression must be integral" msgstr "" -#: c/c-parser.cc:18195 +#: c/c-parser.cc:18244 #, gcc-internal-format msgid "" "%<safelen%> clause expression must be positive constant integer expression" msgstr "" -#: c/c-parser.cc:18234 +#: c/c-parser.cc:18283 #, gcc-internal-format msgid "" "%<simdlen%> clause expression must be positive constant integer expression" msgstr "" -#: c/c-parser.cc:18594 cp/parser.cc:41202 +#: c/c-parser.cc:18643 cp/parser.cc:41246 #, gcc-internal-format msgid "%<iterator%> modifier incompatible with %qs" msgstr "" -#: c/c-parser.cc:18642 cp/parser.cc:41257 cp/parser.cc:41709 cp/parser.cc:41759 +#: c/c-parser.cc:18691 cp/parser.cc:41301 cp/parser.cc:41753 cp/parser.cc:41803 #, gcc-internal-format msgid "invalid depend kind" msgstr "" -#: c/c-parser.cc:18703 cp/parser.cc:41287 +#: c/c-parser.cc:18752 cp/parser.cc:41331 #, gcc-internal-format msgid "invalid doacross kind" msgstr "" -#: c/c-parser.cc:18772 cp/parser.cc:41430 +#: c/c-parser.cc:18821 cp/parser.cc:41474 #, gcc-internal-format msgid "too many %<always%> modifiers" msgstr "" -#: c/c-parser.cc:18782 cp/parser.cc:41443 +#: c/c-parser.cc:18831 cp/parser.cc:41487 #, gcc-internal-format msgid "too many %<close%> modifiers" msgstr "" -#: c/c-parser.cc:18792 cp/parser.cc:41456 +#: c/c-parser.cc:18841 cp/parser.cc:41500 #, gcc-internal-format msgid "too many %<present%> modifiers" msgstr "" -#: c/c-parser.cc:18800 cp/parser.cc:41467 +#: c/c-parser.cc:18849 cp/parser.cc:41511 #, gcc-internal-format msgid "" "%<map%> clause with map-type modifier other than %<always%>, %<close%> or " "%<present%>" msgstr "" -#: c/c-parser.cc:18838 cp/parser.cc:41507 +#: c/c-parser.cc:18887 cp/parser.cc:41551 #, gcc-internal-format msgid "invalid map kind" msgstr "" -#: c/c-parser.cc:18890 cp/parser.cc:41571 +#: c/c-parser.cc:18939 cp/parser.cc:41615 #, gcc-internal-format msgid "" "%<ancestor%> device modifier not preceded by %<requires%> directive with " "%<reverse_offload%> clause" msgstr "" -#: c/c-parser.cc:18902 cp/parser.cc:41582 +#: c/c-parser.cc:18951 cp/parser.cc:41626 #, gcc-internal-format msgid "expected %<ancestor%> or %<device_num%>" msgstr "" -#: c/c-parser.cc:18925 cp/semantics.cc:7849 +#: c/c-parser.cc:18974 cp/semantics.cc:7918 #, gcc-internal-format msgid "the %<device%> clause expression must evaluate to %<1%>" msgstr "" -#: c/c-parser.cc:18958 cp/parser.cc:41653 +#: c/c-parser.cc:19007 cp/parser.cc:41697 #, gcc-internal-format msgid "invalid dist_schedule kind" msgstr "" -#: c/c-parser.cc:19037 +#: c/c-parser.cc:19086 #, gcc-internal-format msgid "invalid proc_bind kind" msgstr "" -#: c/c-parser.cc:19081 +#: c/c-parser.cc:19130 #, gcc-internal-format msgid "expected %<host%>, %<nohost%> or %<any%>" msgstr "" -#: c/c-parser.cc:19179 cp/semantics.cc:8268 +#: c/c-parser.cc:19228 cp/semantics.cc:8337 #, gcc-internal-format msgid "" "%<detach%> clause event handle has type %qT rather than " "%<omp_event_handle_t%>" msgstr "" -#: c/c-parser.cc:19391 cp/parser.cc:42045 +#: c/c-parser.cc:19440 cp/parser.cc:42089 #, gcc-internal-format msgid "expected an OpenACC clause" msgstr "" -#: c/c-parser.cc:19402 c/c-parser.cc:19767 cp/parser.cc:42056 -#: cp/parser.cc:42464 +#: c/c-parser.cc:19451 c/c-parser.cc:19816 cp/parser.cc:42100 +#: cp/parser.cc:42508 #, gcc-internal-format msgid "%qs is not valid for %qs" msgstr "" -#: c/c-parser.cc:19447 cp/parser.cc:42104 +#: c/c-parser.cc:19496 cp/parser.cc:42148 #, gcc-internal-format msgid "clauses in %<simd%> trait should be separated by %<,%>" msgstr "" -#: c/c-parser.cc:19600 cp/parser.cc:42297 +#: c/c-parser.cc:19649 cp/parser.cc:42341 #, gcc-internal-format msgid "%qs must be the first clause of %qs" msgstr "" -#: c/c-parser.cc:19756 cp/parser.cc:42453 +#: c/c-parser.cc:19805 cp/parser.cc:42497 #, gcc-internal-format msgid "expected an OpenMP clause" msgstr "" -#: c/c-parser.cc:19891 cp/parser.cc:47284 +#: c/c-parser.cc:19964 cp/parser.cc:47350 #, gcc-internal-format msgid "no valid clauses specified in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:19901 cp/parser.cc:47294 +#: c/c-parser.cc:19974 cp/parser.cc:47360 #, gcc-internal-format msgid "array section in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:19921 cp/parser.cc:47314 +#: c/c-parser.cc:19994 cp/parser.cc:47380 #, gcc-internal-format msgid "%qD must be a global variable in %<#pragma acc declare link%>" msgstr "" -#: c/c-parser.cc:19932 cp/parser.cc:47325 +#: c/c-parser.cc:20005 cp/parser.cc:47391 #, gcc-internal-format msgid "invalid OpenACC clause at file scope" msgstr "" -#: c/c-parser.cc:19939 cp/parser.cc:47332 +#: c/c-parser.cc:20012 cp/parser.cc:47398 #, gcc-internal-format msgid "invalid use of %<extern%> variable %qD in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:19947 cp/parser.cc:47340 +#: c/c-parser.cc:20020 cp/parser.cc:47406 #, gcc-internal-format msgid "invalid use of %<global%> variable %qD in %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:19958 cp/parser.cc:47362 +#: c/c-parser.cc:20031 cp/parser.cc:47428 #, gcc-internal-format msgid "" "%qD must be a variable declared in the same scope as %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:19968 cp/parser.cc:47385 +#: c/c-parser.cc:20041 cp/parser.cc:47451 #, gcc-internal-format msgid "variable %qD used more than once with %<#pragma acc declare%>" msgstr "" -#: c/c-parser.cc:20061 cp/parser.cc:47469 +#: c/c-parser.cc:20134 cp/parser.cc:47535 #, gcc-internal-format msgid "expected %<data%> after %<#pragma acc %s%>" msgstr "" -#: c/c-parser.cc:20077 cp/parser.cc:47486 +#: c/c-parser.cc:20150 cp/parser.cc:47552 #, gcc-internal-format msgid "%<#pragma acc %s data%> has no data movement clause" msgstr "" -#: c/c-parser.cc:20109 cp/parser.cc:47244 +#: c/c-parser.cc:20182 cp/parser.cc:47310 #, gcc-internal-format msgid "%<host_data%> construct requires %<use_device%> clause" msgstr "" -#: c/c-parser.cc:20338 cp/parser.cc:3367 +#: c/c-parser.cc:20411 cp/parser.cc:3367 #, gcc-internal-format msgid "%qE has not been declared" msgstr "" -#: c/c-parser.cc:20342 +#: c/c-parser.cc:20415 #, gcc-internal-format msgid "expected function name" msgstr "" -#: c/c-parser.cc:20360 cp/parser.cc:50066 +#: c/c-parser.cc:20433 cp/parser.cc:50132 #, gcc-internal-format msgid "%qD does not refer to a function" msgstr "" -#: c/c-parser.cc:20383 c/c-parser.cc:20431 cp/parser.cc:1662 +#: c/c-parser.cc:20456 c/c-parser.cc:20504 cp/parser.cc:1662 #, gcc-internal-format msgid "" "%<#pragma acc routine%> not immediately followed by function declaration or " "definition" msgstr "" -#: c/c-parser.cc:20423 cp/parser.cc:50117 cp/parser.cc:50164 +#: c/c-parser.cc:20496 cp/parser.cc:50183 cp/parser.cc:50230 #, gcc-internal-format msgid "" "%<#pragma acc routine%> not immediately followed by a single function " "declaration or definition" msgstr "" -#: c/c-parser.cc:20454 cp/parser.cc:50192 +#: c/c-parser.cc:20527 cp/parser.cc:50258 #, gcc-internal-format msgid "%<#pragma acc routine%> must be applied before use" msgstr "" -#: c/c-parser.cc:20455 cp/parser.cc:50194 +#: c/c-parser.cc:20528 cp/parser.cc:50260 #, gcc-internal-format msgid "%<#pragma acc routine%> must be applied before definition" msgstr "" -#: c/c-parser.cc:20500 cp/parser.cc:47702 +#: c/c-parser.cc:20573 cp/parser.cc:47768 #, gcc-internal-format msgid "" "%<#pragma acc update%> must contain at least one %<device%> or %<host%> or " "%<self%> clause" msgstr "" -#: c/c-parser.cc:20558 +#: c/c-parser.cc:20631 #, gcc-internal-format msgid "" "variable %qD used in the %<allocator%> clause must be declared before %qD" msgstr "" -#: c/c-parser.cc:20562 c/c-parser.cc:20585 +#: c/c-parser.cc:20635 c/c-parser.cc:20658 #, gcc-internal-format msgid "to be allocated variable declared here" msgstr "" -#: c/c-parser.cc:20580 +#: c/c-parser.cc:20653 #, gcc-internal-format msgid "" "variable %qD used in the %<allocator%> clause must not be modified between " "declaration of %qD and its %<allocate%> directive" msgstr "" -#: c/c-parser.cc:20583 +#: c/c-parser.cc:20656 #, gcc-internal-format msgid "modified here" msgstr "" -#: c/c-parser.cc:20651 cp/parser.cc:42578 cp/parser.cc:42593 +#: c/c-parser.cc:20724 cp/parser.cc:42622 cp/parser.cc:42637 #, gcc-internal-format msgid "" "%<align%> clause argument needs to be positive constant power of two integer " "expression" msgstr "" -#: c/c-parser.cc:20675 +#: c/c-parser.cc:20748 #, gcc-internal-format msgid "" "%<allocator%> clause allocator expression has type %qT rather than " "%<omp_allocator_handle_t%>" msgstr "" -#: c/c-parser.cc:20692 +#: c/c-parser.cc:20765 #, gcc-internal-format msgid "" "function parameter %qD may not appear as list item in an %<allocate%> " "directive" msgstr "" -#: c/c-parser.cc:20699 +#: c/c-parser.cc:20772 #, gcc-internal-format msgid "%<allocate%> directive must be in the same scope as %qD" msgstr "" -#: c/c-parser.cc:20707 +#: c/c-parser.cc:20780 #, gcc-internal-format msgid "%qD already appeared as list item in an %<allocate%> directive" msgstr "" -#: c/c-parser.cc:20714 +#: c/c-parser.cc:20787 #, gcc-internal-format msgid "%<allocator%> clause required for static variable %qD" msgstr "" -#: c/c-parser.cc:20721 +#: c/c-parser.cc:20794 #, gcc-internal-format msgid "%<allocator%> clause requires a predefined allocator as %qD is static" msgstr "" -#: c/c-parser.cc:20725 +#: c/c-parser.cc:20798 #, gcc-internal-format msgid "" "%<#pragma omp allocate%> for static variables like %qD not yet supported" msgstr "" -#: c/c-parser.cc:20876 cp/parser.cc:42758 +#: c/c-parser.cc:20949 cp/parser.cc:42802 #, gcc-internal-format msgid "expected %<read%>, %<write%>, %<update%>, or %<capture%> clause" msgstr "" -#: c/c-parser.cc:20915 cp/parser.cc:42797 +#: c/c-parser.cc:20988 cp/parser.cc:42841 #, gcc-internal-format msgid "expected %<seq_cst%>, %<acquire%> or %<relaxed%>" msgstr "" -#: c/c-parser.cc:20939 cp/parser.cc:42826 +#: c/c-parser.cc:21012 cp/parser.cc:42870 #, gcc-internal-format msgid "" "expected %<read%>, %<write%>, %<update%>, %<capture%>, %<compare%>, " @@ -51119,320 +51372,320 @@ msgid "" "%<hint%> clause" msgstr "" -#: c/c-parser.cc:20954 cp/parser.cc:42841 +#: c/c-parser.cc:21027 cp/parser.cc:42885 #, gcc-internal-format msgid "too many atomic clauses" msgstr "" -#: c/c-parser.cc:20961 cp/parser.cc:42848 +#: c/c-parser.cc:21034 cp/parser.cc:42892 #, gcc-internal-format msgid "too many memory order clauses" msgstr "" -#: c/c-parser.cc:20999 c/c-parser.cc:21006 cp/parser.cc:42886 -#: cp/parser.cc:42893 +#: c/c-parser.cc:21072 c/c-parser.cc:21079 cp/parser.cc:42930 +#: cp/parser.cc:42937 #, gcc-internal-format msgid "%qs clause is incompatible with %<read%> or %<write%> clauses" msgstr "" -#: c/c-parser.cc:21012 c/c-parser.cc:21017 cp/parser.cc:42899 -#: cp/parser.cc:42904 +#: c/c-parser.cc:21085 c/c-parser.cc:21090 cp/parser.cc:42943 +#: cp/parser.cc:42948 #, gcc-internal-format msgid "%qs clause requires %qs clause" msgstr "" -#: c/c-parser.cc:21040 cp/parser.cc:42927 +#: c/c-parser.cc:21113 cp/parser.cc:42971 #, gcc-internal-format msgid "" "%<#pragma omp atomic write%> incompatible with %<acquire%> clause implicitly " "provided by a %<requires%> directive" msgstr "" -#: c/c-parser.cc:21051 cp/parser.cc:42938 +#: c/c-parser.cc:21124 cp/parser.cc:42982 #, gcc-internal-format msgid "" "%<#pragma omp atomic read%> incompatible with %<release%> clause implicitly " "provided by a %<requires%> directive" msgstr "" -#: c/c-parser.cc:21083 cp/parser.cc:42970 +#: c/c-parser.cc:21156 cp/parser.cc:43014 #, gcc-internal-format msgid "%<#pragma omp atomic read%> incompatible with %<release%> clause" msgstr "" -#: c/c-parser.cc:21093 cp/parser.cc:42980 +#: c/c-parser.cc:21166 cp/parser.cc:43024 #, gcc-internal-format msgid "%<#pragma omp atomic write%> incompatible with %<acquire%> clause" msgstr "" -#: c/c-parser.cc:21216 cp/parser.cc:43080 +#: c/c-parser.cc:21289 cp/parser.cc:43124 #, gcc-internal-format msgid "expected %<==%> comparison in %<if%> condition" msgstr "" -#: c/c-parser.cc:21223 cp/parser.cc:43087 +#: c/c-parser.cc:21296 cp/parser.cc:43131 #, gcc-internal-format msgid "expected %<==%>, %<<%> or %<>%> comparison in %<if%> condition" msgstr "" -#: c/c-parser.cc:21296 cp/parser.cc:43152 cp/parser.cc:43435 cp/parser.cc:43529 -#: cp/parser.cc:43547 +#: c/c-parser.cc:21369 cp/parser.cc:43196 cp/parser.cc:43479 cp/parser.cc:43573 +#: cp/parser.cc:43591 #, gcc-internal-format msgid "invalid form of %<#pragma omp atomic compare%>" msgstr "" -#: c/c-parser.cc:21307 cp/parser.cc:43163 +#: c/c-parser.cc:21380 cp/parser.cc:43207 #, gcc-internal-format msgid "unexpected %<else%>" msgstr "" -#: c/c-parser.cc:21367 cp/parser.cc:43602 +#: c/c-parser.cc:21440 cp/parser.cc:43646 #, gcc-internal-format msgid "invalid form of %<pragma omp atomic compare%>" msgstr "" -#: c/c-parser.cc:21638 cp/parser.cc:43456 cp/parser.cc:43482 +#: c/c-parser.cc:21711 cp/parser.cc:43500 cp/parser.cc:43526 #, gcc-internal-format msgid "invalid form of %<#pragma omp atomic%>" msgstr "" -#: c/c-parser.cc:21642 cp/parser.cc:43522 cp/parser.cc:43556 +#: c/c-parser.cc:21715 cp/parser.cc:43566 cp/parser.cc:43600 #, gcc-internal-format msgid "invalid operator for %<#pragma omp atomic%>" msgstr "" -#: c/c-parser.cc:21693 cp/parser.cc:43591 +#: c/c-parser.cc:21766 cp/parser.cc:43635 #, gcc-internal-format msgid "%<weak%> clause requires atomic equality comparison" msgstr "" -#: c/c-parser.cc:21699 cp/semantics.cc:11160 cp/semantics.cc:11170 +#: c/c-parser.cc:21772 cp/semantics.cc:11229 cp/semantics.cc:11239 #, gcc-internal-format msgid "" "%<#pragma omp atomic capture%> uses two different expressions for memory" msgstr "" -#: c/c-parser.cc:21802 cp/semantics.cc:11247 +#: c/c-parser.cc:21875 cp/semantics.cc:11316 #, gcc-internal-format msgid "%<depobj%> expression is not lvalue expression" msgstr "" -#: c/c-parser.cc:21845 +#: c/c-parser.cc:21918 #, gcc-internal-format msgid "%<destroy%> expression is not lvalue expression" msgstr "" -#: c/c-parser.cc:21851 cp/parser.cc:43744 +#: c/c-parser.cc:21924 cp/parser.cc:43788 #, gcc-internal-format msgid "" "the %<destroy%> expression %qE should be the same as the %<depobj%> argument " "%qE" msgstr "" -#: c/c-parser.cc:21882 cp/parser.cc:43780 +#: c/c-parser.cc:21955 cp/parser.cc:43824 #, gcc-internal-format msgid "expected %<in%>, %<out%>, %<inout%>, %<mutexinoutset%> or %<inoutset%>" msgstr "" -#: c/c-parser.cc:21894 cp/parser.cc:43796 +#: c/c-parser.cc:21967 cp/parser.cc:43840 #, gcc-internal-format msgid "expected %<depend%>, %<destroy%> or %<update%> clause" msgstr "" -#: c/c-parser.cc:21935 cp/parser.cc:43834 +#: c/c-parser.cc:22008 cp/parser.cc:43878 #, gcc-internal-format msgid "expected %<seq_cst%>, %<acq_rel%>, %<release%> or %<acquire%>" msgstr "" -#: c/c-parser.cc:21943 cp/parser.cc:43842 +#: c/c-parser.cc:22016 cp/parser.cc:43886 #, gcc-internal-format msgid "%<flush%> list specified together with memory order clause" msgstr "" -#: c/c-parser.cc:21948 +#: c/c-parser.cc:22021 #, gcc-internal-format msgid "expected %<(%> or end of line" msgstr "" -#: c/c-parser.cc:22019 cp/parser.cc:44548 +#: c/c-parser.cc:22092 cp/parser.cc:44592 #, gcc-internal-format msgid "" "%<[[omp::directive(%s)]]%> must be the only specified attribute on a " "statement" msgstr "" -#: c/c-parser.cc:22086 cp/parser.cc:44617 +#: c/c-parser.cc:22159 cp/parser.cc:44661 #, gcc-internal-format msgid "%<#pragma omp scan%> with zero preceding executable statements" msgstr "" -#: c/c-parser.cc:22120 cp/parser.cc:44650 +#: c/c-parser.cc:22193 cp/parser.cc:44694 #, gcc-internal-format msgid "expected %<inclusive%> or %<exclusive%> clause" msgstr "" -#: c/c-parser.cc:22125 cp/parser.cc:44656 +#: c/c-parser.cc:22198 cp/parser.cc:44700 #, gcc-internal-format msgid "expected %<#pragma omp scan%>" msgstr "" -#: c/c-parser.cc:22134 cp/parser.cc:44665 +#: c/c-parser.cc:22207 cp/parser.cc:44709 #, gcc-internal-format msgid "%<#pragma omp scan%> with zero succeeding executable statements" msgstr "" -#: c/c-parser.cc:22252 cp/semantics.cc:10734 cp/semantics.cc:10819 +#: c/c-parser.cc:22325 cp/semantics.cc:10803 cp/semantics.cc:10888 #, gcc-internal-format msgid "expected iteration declaration or initialization" msgstr "" -#: c/c-parser.cc:22340 c/c-parser.cc:22355 cp/parser.cc:45012 -#: cp/parser.cc:45027 +#: c/c-parser.cc:22413 c/c-parser.cc:22428 cp/parser.cc:45056 +#: cp/parser.cc:45071 #, gcc-internal-format msgid "not enough nested loops" msgstr "" -#: c/c-parser.cc:22455 cp/parser.cc:45299 +#: c/c-parser.cc:22528 cp/parser.cc:45343 #, gcc-internal-format msgid "%<ordered%> clause parameter is less than %<collapse%>" msgstr "" -#: c/c-parser.cc:22466 cp/parser.cc:45310 +#: c/c-parser.cc:22539 cp/parser.cc:45354 #, gcc-internal-format msgid "for statement expected" msgstr "" -#: c/c-parser.cc:22578 cp/parser.cc:44850 cp/parser.cc:44893 cp/pt.cc:18109 +#: c/c-parser.cc:22651 cp/parser.cc:44894 cp/parser.cc:44937 cp/pt.cc:18112 #, gcc-internal-format msgid "iteration variable %qD should not be firstprivate" msgstr "" -#: c/c-parser.cc:22986 cp/parser.cc:45821 +#: c/c-parser.cc:23059 cp/parser.cc:45865 #, gcc-internal-format msgid "" "%<#pragma omp ordered%> with %qs clause may only be used in compound " "statements" msgstr "" -#: c/c-parser.cc:23202 cp/parser.cc:46027 +#: c/c-parser.cc:23275 cp/parser.cc:46071 #, gcc-internal-format msgid "expected %<for%> after %qs" msgstr "" -#: c/c-parser.cc:23549 cp/parser.cc:46374 +#: c/c-parser.cc:23622 cp/parser.cc:46418 #, gcc-internal-format msgid "expected %<point%>" msgstr "" -#: c/c-parser.cc:23816 cp/parser.cc:46661 +#: c/c-parser.cc:23889 cp/parser.cc:46705 #, gcc-internal-format msgid "" "%<#pragma omp target data%> with map-type other than %<to%>, %<from%>, " "%<tofrom%> or %<alloc%> on %<map%> clause" msgstr "" -#: c/c-parser.cc:23832 cp/parser.cc:46677 +#: c/c-parser.cc:23905 cp/parser.cc:46721 #, gcc-internal-format msgid "" "%<#pragma omp target data%> must contain at least one %<map%>, " "%<use_device_ptr%> or %<use_device_addr%> clause" msgstr "" -#: c/c-parser.cc:23880 cp/parser.cc:46958 +#: c/c-parser.cc:23953 cp/parser.cc:47002 #, gcc-internal-format msgid "" "%<#pragma omp target update%> must contain at least one %<from%> or %<to%> " "clauses" msgstr "" -#: c/c-parser.cc:23982 cp/parser.cc:46784 +#: c/c-parser.cc:24055 cp/parser.cc:46828 #, gcc-internal-format msgid "" "%<#pragma omp target enter data%> with map-type other than %<to%>, " "%<tofrom%> or %<alloc%> on %<map%> clause" msgstr "" -#: c/c-parser.cc:23994 cp/parser.cc:46796 +#: c/c-parser.cc:24067 cp/parser.cc:46840 #, gcc-internal-format msgid "" "%<#pragma omp target enter data%> must contain at least one %<map%> clause" msgstr "" -#: c/c-parser.cc:24093 cp/parser.cc:46901 +#: c/c-parser.cc:24166 cp/parser.cc:46945 #, gcc-internal-format msgid "" "%<#pragma omp target exit data%> with map-type other than %<from%>, " "%<tofrom%>, %<release%> or %<delete%> on %<map%> clause" msgstr "" -#: c/c-parser.cc:24106 cp/parser.cc:46914 +#: c/c-parser.cc:24179 cp/parser.cc:46958 #, gcc-internal-format msgid "" "%<#pragma omp target exit data%> must contain at least one %<map%> clause" msgstr "" -#: c/c-parser.cc:24351 cp/semantics.cc:10242 +#: c/c-parser.cc:24424 cp/semantics.cc:10311 #, gcc-internal-format msgid "" "%<#pragma omp target%> with map-type other than %<to%>, %<from%>, %<tofrom%> " "or %<alloc%> on %<map%> clause" msgstr "" -#: c/c-parser.cc:24408 +#: c/c-parser.cc:24481 #, gcc-internal-format msgid "" "%<#pragma omp declare %s%> must be followed by function declaration or " "definition or another %<#pragma omp declare %s%>" msgstr "" -#: c/c-parser.cc:24459 c/c-parser.cc:24497 +#: c/c-parser.cc:24532 c/c-parser.cc:24570 #, gcc-internal-format msgid "" "%<#pragma omp declare %s%> must be followed by function declaration or " "definition" msgstr "" -#: c/c-parser.cc:24530 cp/parser.cc:47846 +#: c/c-parser.cc:24603 cp/parser.cc:47912 #, gcc-internal-format msgid "expected trait selector name" msgstr "" -#: c/c-parser.cc:24542 cp/parser.cc:47860 +#: c/c-parser.cc:24615 cp/parser.cc:47926 #, gcc-internal-format msgid "unknown selector %qs for context selector set %qs" msgstr "" -#: c/c-parser.cc:24570 cp/parser.cc:47889 +#: c/c-parser.cc:24643 cp/parser.cc:47955 #, gcc-internal-format msgid "selector %qs does not accept any properties" msgstr "" -#: c/c-parser.cc:24592 cp/parser.cc:47921 +#: c/c-parser.cc:24665 cp/parser.cc:47987 #, gcc-internal-format msgid "%<score%> cannot be specified in traits in the %qs trait-selector-set" msgstr "" -#: c/c-parser.cc:24601 cp/parser.cc:47931 +#: c/c-parser.cc:24674 cp/parser.cc:47997 #, gcc-internal-format msgid "%<score%> argument must be constant integer expression" msgstr "" -#: c/c-parser.cc:24604 cp/parser.cc:47934 +#: c/c-parser.cc:24677 cp/parser.cc:48000 #, gcc-internal-format msgid "%<score%> argument must be non-negative" msgstr "" -#: c/c-parser.cc:24645 cp/parser.cc:47980 +#: c/c-parser.cc:24718 cp/parser.cc:48046 #, gcc-internal-format msgid "expected identifier or string literal" msgstr "" -#: c/c-parser.cc:24670 cp/parser.cc:48005 cp/pt.cc:12022 +#: c/c-parser.cc:24743 cp/parser.cc:48071 cp/pt.cc:12015 #, gcc-internal-format msgid "property must be constant integer expression" msgstr "" -#: c/c-parser.cc:24684 cp/parser.cc:48019 +#: c/c-parser.cc:24757 cp/parser.cc:48085 #, gcc-internal-format msgid "" "properties for %<simd%> selector may not be specified in %<metadirective%>" @@ -51441,172 +51694,172 @@ msgstr "" #. FIXME: The "requires" selector was added in OpenMP 5.1. #. Currently only the now-deprecated syntax #. from OpenMP 5.0 is supported. -#: c/c-parser.cc:24705 cp/parser.cc:48035 fortran/openmp.cc:5891 +#: c/c-parser.cc:24778 cp/parser.cc:48101 fortran/openmp.cc:5921 #, gcc-internal-format msgid "%<requires%> selector is not supported yet" msgstr "" -#: c/c-parser.cc:24764 cp/parser.cc:48098 +#: c/c-parser.cc:24837 cp/parser.cc:48164 #, gcc-internal-format msgid "expected context selector set name" msgstr "" -#: c/c-parser.cc:24841 cp/parser.cc:48413 +#: c/c-parser.cc:24914 cp/parser.cc:48479 #, gcc-internal-format msgid "expected %<match%>" msgstr "" -#: c/c-parser.cc:24861 +#: c/c-parser.cc:24934 #, gcc-internal-format msgid "variant %qD is not a function" msgstr "" -#: c/c-parser.cc:24868 cp/decl.cc:8318 +#: c/c-parser.cc:24941 cp/decl.cc:8314 #, gcc-internal-format msgid "variant %qD and base %qD have incompatible types" msgstr "" -#: c/c-parser.cc:24880 cp/decl.cc:8327 +#: c/c-parser.cc:24953 cp/decl.cc:8323 #, gcc-internal-format msgid "variant %qD is a built-in" msgstr "" -#: c/c-parser.cc:24926 +#: c/c-parser.cc:24999 #, gcc-internal-format msgid "" "%<#pragma omp declare %s%> not immediately followed by a function " "declaration or definition" msgstr "" -#: c/c-parser.cc:24934 cp/parser.cc:48458 +#: c/c-parser.cc:25007 cp/parser.cc:48524 #, gcc-internal-format msgid "" "%<#pragma omp declare %s%> not immediately followed by a single function " "declaration or definition" msgstr "" -#: c/c-parser.cc:25135 cp/parser.cc:48748 +#: c/c-parser.cc:25208 cp/parser.cc:48814 #, gcc-internal-format msgid "%qD specified both in declare target %<link%> and %qs clauses" msgstr "" -#: c/c-parser.cc:25139 cp/parser.cc:48752 +#: c/c-parser.cc:25212 cp/parser.cc:48818 #, gcc-internal-format msgid "" "%qD specified both in declare target %<link%> and %<to%> or %<enter%> clauses" msgstr "" -#: c/c-parser.cc:25199 cp/parser.cc:48882 +#: c/c-parser.cc:25272 cp/parser.cc:48948 #, gcc-internal-format msgid "directive with only %<device_type%> or %<indirect%> clauses" msgstr "" -#: c/c-parser.cc:25202 cp/parser.cc:48885 +#: c/c-parser.cc:25275 cp/parser.cc:48951 #, gcc-internal-format msgid "" "%<device_type%> clause must specify 'any' when used with an %<indirect%> " "clause" msgstr "" -#: c/c-parser.cc:25251 c/c-parser.cc:25293 cp/parser.cc:48940 -#: cp/parser.cc:48987 +#: c/c-parser.cc:25324 c/c-parser.cc:25366 cp/parser.cc:49006 +#: cp/parser.cc:49053 #, gcc-internal-format msgid "expected %<target%>" msgstr "" -#: c/c-parser.cc:25265 cp/parser.cc:48953 +#: c/c-parser.cc:25338 cp/parser.cc:49019 #, gcc-internal-format msgid "expected %<declare target%> or %<assumes%>" msgstr "" -#: c/c-parser.cc:25300 cp/parser.cc:48994 +#: c/c-parser.cc:25373 cp/parser.cc:49060 #, gcc-internal-format msgid "" "%<#pragma omp end declare target%> without corresponding %<#pragma omp " "declare target%> or %<#pragma omp begin declare target%>" msgstr "" -#: c/c-parser.cc:25311 c/c-parser.cc:25342 cp/parser.cc:49005 -#: cp/parser.cc:49036 +#: c/c-parser.cc:25384 c/c-parser.cc:25415 cp/parser.cc:49071 +#: cp/parser.cc:49102 #, gcc-internal-format msgid "%qs in attribute syntax terminated with %qs in pragma syntax" msgstr "" -#: c/c-parser.cc:25318 c/c-parser.cc:25347 cp/parser.cc:49012 -#: cp/parser.cc:49041 +#: c/c-parser.cc:25391 c/c-parser.cc:25420 cp/parser.cc:49078 +#: cp/parser.cc:49107 #, gcc-internal-format msgid "%qs in pragma syntax terminated with %qs in attribute syntax" msgstr "" -#: c/c-parser.cc:25355 cp/parser.cc:49049 +#: c/c-parser.cc:25428 cp/parser.cc:49115 #, gcc-internal-format msgid "expected %<declare%> or %<assumes%>" msgstr "" -#: c/c-parser.cc:25382 +#: c/c-parser.cc:25455 #, gcc-internal-format msgid "%<#pragma omp declare reduction%> not at file or block scope" msgstr "" -#: c/c-parser.cc:25459 +#: c/c-parser.cc:25532 #, gcc-internal-format msgid "predeclared arithmetic type in %<#pragma omp declare reduction%>" msgstr "" -#: c/c-parser.cc:25463 +#: c/c-parser.cc:25536 #, gcc-internal-format msgid "function or array type in %<#pragma omp declare reduction%>" msgstr "" -#: c/c-parser.cc:25466 +#: c/c-parser.cc:25539 #, gcc-internal-format msgid "%<_Atomic%> qualified type in %<#pragma omp declare reduction%>" msgstr "" -#: c/c-parser.cc:25469 +#: c/c-parser.cc:25542 #, gcc-internal-format msgid "" "const, volatile or restrict qualified type in %<#pragma omp declare " "reduction%>" msgstr "" -#: c/c-parser.cc:25477 +#: c/c-parser.cc:25550 #, gcc-internal-format msgid "redeclaration of %qs %<#pragma omp declare reduction%> for type %qT" msgstr "" -#: c/c-parser.cc:25486 +#: c/c-parser.cc:25559 #, gcc-internal-format msgid "previous %<#pragma omp declare reduction%>" msgstr "" -#: c/c-parser.cc:25607 +#: c/c-parser.cc:25680 #, gcc-internal-format msgid "expected %<omp_priv%> or function-name" msgstr "" -#: c/c-parser.cc:25618 +#: c/c-parser.cc:25691 #, gcc-internal-format msgid "expected function-name %<(%>" msgstr "" -#: c/c-parser.cc:25637 +#: c/c-parser.cc:25710 #, gcc-internal-format msgid "one of the initializer call arguments should be %<&omp_priv%>" msgstr "" -#: c/c-parser.cc:25768 cp/parser.cc:49522 +#: c/c-parser.cc:25841 cp/parser.cc:49588 #, gcc-internal-format msgid "expected %<simd%>, %<reduction%>, %<target%> or %<variant%>" msgstr "" -#: c/c-parser.cc:25837 cp/parser.cc:49589 +#: c/c-parser.cc:25910 cp/parser.cc:49655 #, gcc-internal-format msgid "" "expected %<acq_rel%>, %<acquire%>, %<relaxed%>, %<release%> or %<seq_cst%>" msgstr "" -#: c/c-parser.cc:25866 cp/parser.cc:49624 +#: c/c-parser.cc:25939 cp/parser.cc:49690 #, gcc-internal-format msgid "" "expected %<unified_address%>, %<unified_shared_memory%>, " @@ -51614,143 +51867,143 @@ msgid "" "clause" msgstr "" -#: c/c-parser.cc:25884 cp/parser.cc:49642 +#: c/c-parser.cc:25957 cp/parser.cc:49708 #, gcc-internal-format msgid "" "%qs clause used lexically after first target construct or offloading API" msgstr "" -#: c/c-parser.cc:25896 cp/parser.cc:49654 +#: c/c-parser.cc:25969 cp/parser.cc:49720 #, gcc-internal-format msgid "" "more than one %<atomic_default_mem_order%> clause in a single compilation " "unit" msgstr "" -#: c/c-parser.cc:25905 cp/parser.cc:49663 +#: c/c-parser.cc:25978 cp/parser.cc:49729 #, gcc-internal-format msgid "" "%<atomic_default_mem_order%> clause used lexically after first %<atomic%> " "construct without memory order clause" msgstr "" -#: c/c-parser.cc:25919 cp/parser.cc:49677 +#: c/c-parser.cc:25992 cp/parser.cc:49743 #, gcc-internal-format msgid "%<pragma omp requires%> requires at least one clause" msgstr "" -#: c/c-parser.cc:25938 +#: c/c-parser.cc:26011 #, gcc-internal-format msgid "zero sized type %qT in %<reduction%> clause" msgstr "" -#: c/c-parser.cc:25944 +#: c/c-parser.cc:26017 #, gcc-internal-format msgid "variable sized type %qT in %<reduction%> clause" msgstr "" -#: c/c-parser.cc:26101 cp/parser.cc:49734 +#: c/c-parser.cc:26174 cp/parser.cc:49800 #, gcc-internal-format msgid "expected %<at%>, %<severity%> or %<message%> clause" msgstr "" -#: c/c-parser.cc:26134 cp/parser.cc:49769 +#: c/c-parser.cc:26207 cp/parser.cc:49835 #, gcc-internal-format msgid "expected %qs or %qs" msgstr "" -#: c/c-parser.cc:26191 cp/parser.cc:49831 +#: c/c-parser.cc:26264 cp/parser.cc:49897 #, gcc-internal-format msgid "" "%<#pragma omp error%> with %<at(execution)%> clause may only be used in " "compound statements" msgstr "" -#: c/c-parser.cc:26214 cp/parser.cc:49858 +#: c/c-parser.cc:26287 cp/parser.cc:49924 #, gcc-internal-format msgid "%<pragma omp error%> encountered: %s" msgstr "" -#: c/c-parser.cc:26217 cp/parser.cc:49861 +#: c/c-parser.cc:26290 cp/parser.cc:49927 #, gcc-internal-format msgid "%<pragma omp error%> encountered" msgstr "" -#: c/c-parser.cc:26244 cp/parser.cc:48159 +#: c/c-parser.cc:26317 cp/parser.cc:48225 #, gcc-internal-format msgid "expected at least one assumption clause" msgstr "" -#: c/c-parser.cc:26330 cp/parser.cc:48245 +#: c/c-parser.cc:26403 cp/parser.cc:48311 #, gcc-internal-format msgid "expected directive name" msgstr "" -#: c/c-parser.cc:26343 cp/parser.cc:48258 +#: c/c-parser.cc:26416 cp/parser.cc:48324 #, gcc-internal-format msgid "unknown OpenMP directive name in %qs clause argument" msgstr "" -#: c/c-parser.cc:26350 cp/parser.cc:48265 +#: c/c-parser.cc:26423 cp/parser.cc:48331 #, gcc-internal-format msgid "" "%<%s%s%s%s%s%> directive mentioned in both %<absent%> and %<contains%> " "clauses" msgstr "" -#: c/c-parser.cc:26361 cp/parser.cc:48276 +#: c/c-parser.cc:26434 cp/parser.cc:48342 #, gcc-internal-format msgid "%<%s%s%s%s%s%> directive mentioned multiple times in %qs clauses" msgstr "" -#: c/c-parser.cc:26384 cp/parser.cc:48303 +#: c/c-parser.cc:26457 cp/parser.cc:48369 #, gcc-internal-format msgid "unknown assumption clause %qs" msgstr "" -#: c/c-parser.cc:26397 cp/parser.cc:48313 +#: c/c-parser.cc:26470 cp/parser.cc:48379 #, gcc-internal-format msgid "expected assumption clause" msgstr "" -#: c/c-parser.cc:26567 cp/semantics.cc:9608 +#: c/c-parser.cc:26640 cp/semantics.cc:9677 #, gcc-internal-format msgid "%qE declared %<threadprivate%> after first use" msgstr "" -#: c/c-parser.cc:26569 cp/semantics.cc:9610 +#: c/c-parser.cc:26642 cp/semantics.cc:9679 #, gcc-internal-format msgid "automatic variable %qE cannot be %<threadprivate%>" msgstr "" -#: c/c-parser.cc:26573 cp/semantics.cc:9612 +#: c/c-parser.cc:26646 cp/semantics.cc:9681 #, gcc-internal-format msgid "%<threadprivate%> %qE has incomplete type" msgstr "" -#: c/c-parser.cc:26753 cp/parser.cc:50600 +#: c/c-parser.cc:26826 cp/parser.cc:50666 #, gcc-internal-format msgid "%<__transaction_cancel%> without transactional memory support enabled" msgstr "" -#: c/c-parser.cc:26759 cp/parser.cc:50606 +#: c/c-parser.cc:26832 cp/parser.cc:50672 #, gcc-internal-format msgid "%<__transaction_cancel%> within a %<__transaction_relaxed%>" msgstr "" -#: c/c-parser.cc:26768 +#: c/c-parser.cc:26841 #, gcc-internal-format msgid "" "outer %<__transaction_cancel%> not within outer %<__transaction_atomic%> or " "a %<transaction_may_cancel_outer%> function" msgstr "" -#: c/c-parser.cc:26776 cp/parser.cc:50624 +#: c/c-parser.cc:26849 cp/parser.cc:50690 #, gcc-internal-format msgid "%<__transaction_cancel%> not within %<__transaction_atomic%>" msgstr "" -#: c/c-parser.cc:26869 +#: c/c-parser.cc:26942 #, gcc-internal-format msgid "no closing brace" msgstr "" @@ -51899,7 +52152,7 @@ msgstr "" msgid "subscripted value is neither array nor pointer nor vector" msgstr "" -#: c/c-typeck.cc:2808 cp/typeck.cc:4004 cp/typeck.cc:4098 +#: c/c-typeck.cc:2808 cp/typeck.cc:4005 cp/typeck.cc:4099 #, gcc-internal-format msgid "array subscript is not an integer" msgstr "" @@ -52050,17 +52303,17 @@ msgstr "" msgid "too few arguments to built-in function %qE expecting %u" msgstr "" -#: c/c-typeck.cc:4108 c/c-typeck.cc:4136 cp/typeck.cc:5780 cp/typeck.cc:6063 +#: c/c-typeck.cc:4108 c/c-typeck.cc:4136 cp/typeck.cc:5781 cp/typeck.cc:6064 #, gcc-internal-format msgid "comparison with string literal results in unspecified behavior" msgstr "" -#: c/c-typeck.cc:4116 c/c-typeck.cc:4127 cp/typeck.cc:5812 cp/typeck.cc:5836 +#: c/c-typeck.cc:4116 c/c-typeck.cc:4127 cp/typeck.cc:5813 cp/typeck.cc:5837 #, gcc-internal-format msgid "comparison between pointer and zero character constant" msgstr "" -#: c/c-typeck.cc:4119 c/c-typeck.cc:4130 cp/typeck.cc:5815 cp/typeck.cc:5839 +#: c/c-typeck.cc:4119 c/c-typeck.cc:4130 cp/typeck.cc:5816 cp/typeck.cc:5840 #, gcc-internal-format msgid "did you mean to dereference the pointer?" msgstr "" @@ -52085,7 +52338,7 @@ msgstr "" msgid "arithmetic on pointer to an incomplete type" msgstr "" -#: c/c-typeck.cc:4262 cp/typeck.cc:6858 +#: c/c-typeck.cc:4262 cp/typeck.cc:6859 #, gcc-internal-format msgid "arithmetic on pointer to an empty aggregate" msgstr "" @@ -52297,7 +52550,7 @@ msgid "" "ignoring return value of type %qT, declared with attribute %<nodiscard%>" msgstr "" -#: c/c-typeck.cc:5898 cp/cvt.cc:1102 rust/backend/rust-tree.cc:640 +#: c/c-typeck.cc:5898 cp/cvt.cc:1116 rust/backend/rust-tree.cc:640 #, gcc-internal-format msgid "in call to %qD, declared here" msgstr "" @@ -52390,7 +52643,7 @@ msgstr "" msgid "cast from function call of type %qT to non-matching type %qT" msgstr "" -#: c/c-typeck.cc:6334 cp/typeck.cc:9294 +#: c/c-typeck.cc:6334 cp/typeck.cc:9295 #, gcc-internal-format msgid "cast to pointer from integer of different size" msgstr "" @@ -52570,7 +52823,7 @@ msgid "" "initialization left-hand side might be a candidate for a format attribute" msgstr "" -#: c/c-typeck.cc:7633 cp/typeck.cc:10457 +#: c/c-typeck.cc:7633 cp/typeck.cc:10458 #, gcc-internal-format msgid "return type might be a candidate for a format attribute" msgstr "" @@ -52788,12 +53041,12 @@ msgid "" "%<constexpr%> initializer for a binary floating-point type is of decimal type" msgstr "" -#: c/c-typeck.cc:8544 c/c-typeck.cc:9478 cp/typeck2.cc:1219 +#: c/c-typeck.cc:8544 c/c-typeck.cc:9478 cp/typeck2.cc:1218 #, gcc-internal-format msgid "initialization of a flexible array member" msgstr "" -#: c/c-typeck.cc:8560 cp/typeck2.cc:1236 +#: c/c-typeck.cc:8560 cp/typeck2.cc:1235 #, gcc-internal-format msgid "" "cannot initialize array of %qT from a string literal with type array of %qT" @@ -52804,7 +53057,7 @@ msgstr "" msgid "array of inappropriate type initialized from string constant" msgstr "" -#: c/c-typeck.cc:8687 cp/typeck.cc:2533 +#: c/c-typeck.cc:8687 cp/typeck.cc:2534 #, gcc-internal-format msgid "invalid use of non-lvalue array" msgstr "" @@ -52850,7 +53103,7 @@ msgstr "" msgid "braces around scalar initializer" msgstr "" -#: c/c-typeck.cc:9475 c/c-typeck.cc:10964 cp/typeck2.cc:1246 cp/typeck2.cc:1604 +#: c/c-typeck.cc:9475 c/c-typeck.cc:10964 cp/typeck2.cc:1245 cp/typeck2.cc:1603 #, gcc-internal-format msgid "initialization of flexible array member in a nested context" msgstr "" @@ -52942,7 +53195,7 @@ msgid "" "%<designated_init%> attribute" msgstr "" -#: c/c-typeck.cc:10938 cp/typeck2.cc:1223 +#: c/c-typeck.cc:10938 cp/typeck2.cc:1222 #, gcc-internal-format msgid "non-static initialization of a flexible array member" msgstr "" @@ -52982,7 +53235,7 @@ msgstr "" msgid "computed goto must be pointer type" msgstr "" -#: c/c-typeck.cc:11461 c/gimple-parser.cc:2562 cp/typeck.cc:11056 +#: c/c-typeck.cc:11461 c/gimple-parser.cc:2562 cp/typeck.cc:11059 #, gcc-internal-format msgid "function declared %<noreturn%> has a %<return%> statement" msgstr "" @@ -53007,7 +53260,7 @@ msgstr "" msgid "function returns address of label" msgstr "" -#: c/c-typeck.cc:11672 cp/semantics.cc:1637 +#: c/c-typeck.cc:11672 cp/semantics.cc:1702 #, gcc-internal-format msgid "switch quantity not an integer" msgstr "" @@ -53091,27 +53344,27 @@ msgid "" "never be NULL" msgstr "" -#: c/c-typeck.cc:12880 c/c-typeck.cc:13044 cp/typeck.cc:6085 +#: c/c-typeck.cc:12880 c/c-typeck.cc:13044 cp/typeck.cc:6086 #, gcc-internal-format msgid "comparing vectors with different element types" msgstr "" -#: c/c-typeck.cc:12888 c/c-typeck.cc:13052 cp/typeck.cc:6098 +#: c/c-typeck.cc:12888 c/c-typeck.cc:13052 cp/typeck.cc:6099 #, gcc-internal-format msgid "comparing vectors with different number of elements" msgstr "" -#: c/c-typeck.cc:12903 c/c-typeck.cc:13067 cp/typeck.cc:6116 +#: c/c-typeck.cc:12903 c/c-typeck.cc:13067 cp/typeck.cc:6117 #, gcc-internal-format msgid "comparison between types %qT and %qT" msgstr "" -#: c/c-typeck.cc:12913 c/c-typeck.cc:13077 cp/typeck.cc:6133 +#: c/c-typeck.cc:12913 c/c-typeck.cc:13077 cp/typeck.cc:6134 #, gcc-internal-format msgid "could not find an integer type of the same size as %qT" msgstr "" -#: c/c-typeck.cc:12927 cp/typeck.cc:5769 +#: c/c-typeck.cc:12927 cp/typeck.cc:5770 #, gcc-internal-format msgid "comparing floating-point with %<==%> or %<!=%> is unsafe" msgstr "" @@ -53185,33 +53438,33 @@ msgstr "" msgid "used vector type where scalar is required" msgstr "" -#: c/c-typeck.cc:13771 cp/semantics.cc:11320 +#: c/c-typeck.cc:13771 cp/semantics.cc:11389 #, gcc-internal-format msgid "" "%<#pragma omp cancel%> must specify one of %<parallel%>, %<for%>, " "%<sections%> or %<taskgroup%> clauses" msgstr "" -#: c/c-typeck.cc:13782 c/c-typeck.cc:13792 cp/semantics.cc:11331 -#: cp/semantics.cc:11341 +#: c/c-typeck.cc:13782 c/c-typeck.cc:13792 cp/semantics.cc:11400 +#: cp/semantics.cc:11410 #, gcc-internal-format msgid "expected %<cancel%> %<if%> clause modifier" msgstr "" -#: c/c-typeck.cc:13827 cp/semantics.cc:11376 +#: c/c-typeck.cc:13827 cp/semantics.cc:11445 #, gcc-internal-format msgid "" "%<#pragma omp cancellation point%> must specify one of %<parallel%>, " "%<for%>, %<sections%> or %<taskgroup%> clauses" msgstr "" -#: c/c-typeck.cc:13895 cp/semantics.cc:5481 cp/semantics.cc:8489 +#: c/c-typeck.cc:13895 cp/semantics.cc:5550 cp/semantics.cc:8558 #, gcc-internal-format msgid "%qD is not a variable in %qs clause" msgstr "" -#: c/c-typeck.cc:13899 c/c-typeck.cc:15706 cp/semantics.cc:5485 -#: cp/semantics.cc:8493 +#: c/c-typeck.cc:13899 c/c-typeck.cc:15706 cp/semantics.cc:5554 +#: cp/semantics.cc:8562 #, gcc-internal-format msgid "%qE is not a variable in %qs clause" msgstr "" @@ -53222,85 +53475,85 @@ msgid "%<_Atomic%> %qD in %qs clause" msgstr "" #: c/c-typeck.cc:13917 c/c-typeck.cc:15713 c/c-typeck.cc:15867 -#: cp/semantics.cc:5494 cp/semantics.cc:8500 cp/semantics.cc:8688 +#: cp/semantics.cc:5563 cp/semantics.cc:8569 cp/semantics.cc:8757 #, gcc-internal-format msgid "%qD is threadprivate variable in %qs clause" msgstr "" -#: c/c-typeck.cc:13954 cp/semantics.cc:5528 +#: c/c-typeck.cc:13954 cp/semantics.cc:5597 #, gcc-internal-format msgid "low bound %qE of array section does not have integral type" msgstr "" -#: c/c-typeck.cc:13961 cp/semantics.cc:5535 +#: c/c-typeck.cc:13961 cp/semantics.cc:5604 #, gcc-internal-format msgid "length %qE of array section does not have integral type" msgstr "" -#: c/c-typeck.cc:13984 cp/semantics.cc:5568 +#: c/c-typeck.cc:13984 cp/semantics.cc:5637 #, gcc-internal-format msgid "expected single pointer in %qs clause" msgstr "" #: c/c-typeck.cc:14002 c/c-typeck.cc:14069 c/c-typeck.cc:14362 -#: cp/semantics.cc:5586 cp/semantics.cc:5653 +#: cp/semantics.cc:5655 cp/semantics.cc:5722 #, gcc-internal-format msgid "zero length array section in %qs clause" msgstr "" -#: c/c-typeck.cc:14021 cp/semantics.cc:5605 +#: c/c-typeck.cc:14021 cp/semantics.cc:5674 #, gcc-internal-format msgid "for unknown bound array type length expression must be specified" msgstr "" -#: c/c-typeck.cc:14029 cp/semantics.cc:5613 +#: c/c-typeck.cc:14029 cp/semantics.cc:5682 #, gcc-internal-format msgid "negative low bound in array section in %qs clause" msgstr "" -#: c/c-typeck.cc:14038 c/c-typeck.cc:14162 cp/semantics.cc:5622 -#: cp/semantics.cc:5746 +#: c/c-typeck.cc:14038 c/c-typeck.cc:14162 cp/semantics.cc:5691 +#: cp/semantics.cc:5815 #, gcc-internal-format msgid "negative length in array section in %qs clause" msgstr "" -#: c/c-typeck.cc:14055 cp/semantics.cc:5639 +#: c/c-typeck.cc:14055 cp/semantics.cc:5708 #, gcc-internal-format msgid "low bound %qE above array section size in %qs clause" msgstr "" -#: c/c-typeck.cc:14098 cp/semantics.cc:5682 +#: c/c-typeck.cc:14098 cp/semantics.cc:5751 #, gcc-internal-format msgid "length %qE above array section size in %qs clause" msgstr "" -#: c/c-typeck.cc:14113 cp/semantics.cc:5697 +#: c/c-typeck.cc:14113 cp/semantics.cc:5766 #, gcc-internal-format msgid "high bound %qE above array section size in %qs clause" msgstr "" -#: c/c-typeck.cc:14150 cp/semantics.cc:5734 +#: c/c-typeck.cc:14150 cp/semantics.cc:5803 #, gcc-internal-format msgid "for array function parameter length expression must be specified" msgstr "" -#: c/c-typeck.cc:14154 cp/semantics.cc:5738 +#: c/c-typeck.cc:14154 cp/semantics.cc:5807 #, gcc-internal-format msgid "for pointer type length expression must be specified" msgstr "" -#: c/c-typeck.cc:14182 c/c-typeck.cc:14301 cp/semantics.cc:5765 -#: cp/semantics.cc:5901 +#: c/c-typeck.cc:14182 c/c-typeck.cc:14301 cp/semantics.cc:5834 +#: cp/semantics.cc:5970 #, gcc-internal-format msgid "array section is not contiguous in %qs clause" msgstr "" -#: c/c-typeck.cc:14192 cp/semantics.cc:5775 +#: c/c-typeck.cc:14192 cp/semantics.cc:5844 #, gcc-internal-format msgid "%qE does not have pointer or array type" msgstr "" -#: c/c-typeck.cc:14568 cp/semantics.cc:6837 +#: c/c-typeck.cc:14568 cp/semantics.cc:6906 #, gcc-internal-format msgid "iterator %qD has neither integral nor pointer type" msgstr "" @@ -53310,17 +53563,17 @@ msgstr "" msgid "iterator %qD has %<_Atomic%> qualified type" msgstr "" -#: c/c-typeck.cc:14581 cp/semantics.cc:6844 +#: c/c-typeck.cc:14581 cp/semantics.cc:6913 #, gcc-internal-format msgid "iterator %qD has const qualified type" msgstr "" -#: c/c-typeck.cc:14594 cp/semantics.cc:6860 +#: c/c-typeck.cc:14594 cp/semantics.cc:6929 #, gcc-internal-format msgid "iterator step with non-integral type" msgstr "" -#: c/c-typeck.cc:14614 cp/semantics.cc:6896 +#: c/c-typeck.cc:14614 cp/semantics.cc:6965 #, gcc-internal-format msgid "iterator %qD has zero step" msgstr "" @@ -53330,33 +53583,33 @@ msgstr "" msgid "type of iterator %qD refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:14648 cp/semantics.cc:6930 +#: c/c-typeck.cc:14648 cp/semantics.cc:6999 #, gcc-internal-format msgid "begin expression refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:14654 cp/semantics.cc:6936 +#: c/c-typeck.cc:14654 cp/semantics.cc:7005 #, gcc-internal-format msgid "end expression refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:14660 cp/semantics.cc:6942 +#: c/c-typeck.cc:14660 cp/semantics.cc:7011 #, gcc-internal-format msgid "step expression refers to outer iterator %qD" msgstr "" -#: c/c-typeck.cc:14697 cp/semantics.cc:6990 +#: c/c-typeck.cc:14697 cp/semantics.cc:7059 #, gcc-internal-format msgid "expected pointer in %qs clause" msgstr "" -#: c/c-typeck.cc:14792 cp/semantics.cc:7079 +#: c/c-typeck.cc:14792 cp/semantics.cc:7148 #, gcc-internal-format msgid "" "%<inscan%> and non-%<inscan%> %<reduction%> clauses on the same construct" msgstr "" -#: c/c-typeck.cc:14814 cp/semantics.cc:7099 +#: c/c-typeck.cc:14814 cp/semantics.cc:7168 #, gcc-internal-format msgid "%<inscan%> %<reduction%> clause with array section" msgstr "" @@ -53386,7 +53639,7 @@ msgstr "" msgid "%qE has invalid type for %<reduction(%s)%>" msgstr "" -#: c/c-typeck.cc:14943 cp/semantics.cc:6729 +#: c/c-typeck.cc:14943 cp/semantics.cc:6798 #, gcc-internal-format msgid "user defined reduction not found for %qE" msgstr "" @@ -53396,17 +53649,17 @@ msgstr "" msgid "variable length element type in array %<reduction%> clause" msgstr "" -#: c/c-typeck.cc:15049 c/c-typeck.cc:15961 cp/semantics.cc:9225 +#: c/c-typeck.cc:15049 c/c-typeck.cc:15961 cp/semantics.cc:9294 #, gcc-internal-format msgid "%<nowait%> clause must not be used together with %<copyprivate%>" msgstr "" -#: c/c-typeck.cc:15061 cp/semantics.cc:9293 +#: c/c-typeck.cc:15061 cp/semantics.cc:9362 #, gcc-internal-format msgid "%qE must be %<threadprivate%> for %<copyin%>" msgstr "" -#: c/c-typeck.cc:15076 cp/semantics.cc:7142 +#: c/c-typeck.cc:15076 cp/semantics.cc:7211 #, gcc-internal-format msgid "" "modifier should not be specified in %<linear%> clause on %<simd%> or %<for%> " @@ -53424,23 +53677,23 @@ msgstr "" msgid "%<_Atomic%> %qD in %<linear%> clause" msgstr "" -#: c/c-typeck.cc:15112 cp/semantics.cc:7226 +#: c/c-typeck.cc:15112 cp/semantics.cc:7295 #, gcc-internal-format msgid "%<linear%> clause step %qE is neither constant nor a parameter" msgstr "" #: c/c-typeck.cc:15142 c/c-typeck.cc:15861 c/c-typeck.cc:16108 -#: cp/semantics.cc:7313 cp/semantics.cc:8682 cp/semantics.cc:9033 +#: cp/semantics.cc:7382 cp/semantics.cc:8751 cp/semantics.cc:9102 #, gcc-internal-format msgid "%qE is not a variable in clause %qs" msgstr "" -#: c/c-typeck.cc:15159 cp/semantics.cc:7331 +#: c/c-typeck.cc:15159 cp/semantics.cc:7400 #, gcc-internal-format msgid "%qD appears more than once in data-sharing clauses" msgstr "" -#: c/c-typeck.cc:15170 cp/semantics.cc:7342 +#: c/c-typeck.cc:15170 cp/semantics.cc:7411 #, gcc-internal-format msgid "%qD appears more than once in reduction clauses" msgstr "" @@ -53452,32 +53705,32 @@ msgstr "" #: c/c-typeck.cc:15194 c/c-typeck.cc:15262 c/c-typeck.cc:15609 #: c/c-typeck.cc:15761 c/c-typeck.cc:15769 c/c-typeck.cc:15785 -#: c/c-typeck.cc:15794 c/c-typeck.cc:15802 cp/semantics.cc:7356 -#: cp/semantics.cc:7366 cp/semantics.cc:7459 cp/semantics.cc:7467 -#: cp/semantics.cc:7514 cp/semantics.cc:8371 cp/semantics.cc:8560 -#: cp/semantics.cc:8568 cp/semantics.cc:8588 cp/semantics.cc:8597 -#: cp/semantics.cc:8605 +#: c/c-typeck.cc:15794 c/c-typeck.cc:15802 cp/semantics.cc:7425 +#: cp/semantics.cc:7435 cp/semantics.cc:7528 cp/semantics.cc:7536 +#: cp/semantics.cc:7583 cp/semantics.cc:8440 cp/semantics.cc:8629 +#: cp/semantics.cc:8637 cp/semantics.cc:8657 cp/semantics.cc:8666 +#: cp/semantics.cc:8674 #, gcc-internal-format msgid "%qD appears more than once in data clauses" msgstr "" #: c/c-typeck.cc:15197 c/c-typeck.cc:15268 c/c-typeck.cc:15805 -#: cp/semantics.cc:7369 cp/semantics.cc:7473 cp/semantics.cc:8608 +#: cp/semantics.cc:7438 cp/semantics.cc:7542 cp/semantics.cc:8677 #, gcc-internal-format msgid "%qD appears both in data and map clauses" msgstr "" -#: c/c-typeck.cc:15242 cp/semantics.cc:7446 +#: c/c-typeck.cc:15242 cp/semantics.cc:7515 #, gcc-internal-format msgid "%qE is not a variable in clause %<firstprivate%>" msgstr "" -#: c/c-typeck.cc:15282 cp/semantics.cc:7506 +#: c/c-typeck.cc:15282 cp/semantics.cc:7575 #, gcc-internal-format msgid "%qE is not a variable in clause %<lastprivate%>" msgstr "" -#: c/c-typeck.cc:15301 cp/semantics.cc:7904 +#: c/c-typeck.cc:15301 cp/semantics.cc:7973 #, gcc-internal-format msgid "%qE is not a variable in %<aligned%> clause" msgstr "" @@ -53497,7 +53750,7 @@ msgstr "" msgid "%qE appears more than once in %<aligned%> clauses" msgstr "" -#: c/c-typeck.cc:15335 cp/semantics.cc:7975 +#: c/c-typeck.cc:15335 cp/semantics.cc:8044 #, gcc-internal-format msgid "%qE is not a variable in %<nontemporal%> clause" msgstr "" @@ -53507,7 +53760,7 @@ msgstr "" msgid "%qE appears more than once in %<nontemporal%> clauses" msgstr "" -#: c/c-typeck.cc:15354 cp/semantics.cc:8014 +#: c/c-typeck.cc:15354 cp/semantics.cc:8083 #, gcc-internal-format msgid "%qE is not a variable in %<allocate%> clause" msgstr "" @@ -53517,81 +53770,81 @@ msgstr "" msgid "%qE appears more than once in %<allocate%> clauses" msgstr "" -#: c/c-typeck.cc:15430 cp/semantics.cc:8140 +#: c/c-typeck.cc:15430 cp/semantics.cc:8209 #, gcc-internal-format msgid "%<depend%> clause with %<depobj%> dependence type on array section" msgstr "" -#: c/c-typeck.cc:15445 cp/semantics.cc:8155 +#: c/c-typeck.cc:15445 cp/semantics.cc:8224 #, gcc-internal-format msgid "" "%<omp_all_memory%> used with %<depend%> kind other than %<out%> or %<inout%>" msgstr "" -#: c/c-typeck.cc:15453 cp/semantics.cc:8173 +#: c/c-typeck.cc:15453 cp/semantics.cc:8242 #, gcc-internal-format msgid "%qE is not lvalue expression nor array section in %qs clause" msgstr "" -#: c/c-typeck.cc:15474 cp/semantics.cc:8195 +#: c/c-typeck.cc:15474 cp/semantics.cc:8264 #, gcc-internal-format msgid "" "%qE does not have %<omp_depend_t%> type in %<depend%> clause with %<depobj%> " "dependence type" msgstr "" -#: c/c-typeck.cc:15484 cp/semantics.cc:8207 +#: c/c-typeck.cc:15484 cp/semantics.cc:8276 #, gcc-internal-format msgid "" "%qE should not have %<omp_depend_t%> type in %<depend%> clause with " "dependence type other than %<depobj%>" msgstr "" -#: c/c-typeck.cc:15545 cp/semantics.cc:8306 +#: c/c-typeck.cc:15545 cp/semantics.cc:8375 #, gcc-internal-format msgid "array section does not have mappable type in %qs clause" msgstr "" #: c/c-typeck.cc:15565 c/c-typeck.cc:15641 c/c-typeck.cc:15677 -#: cp/semantics.cc:8326 cp/semantics.cc:8405 cp/semantics.cc:8441 +#: cp/semantics.cc:8395 cp/semantics.cc:8474 cp/semantics.cc:8510 #, gcc-internal-format msgid "unsupported map expression %qE" msgstr "" -#: c/c-typeck.cc:15605 c/c-typeck.cc:15782 cp/semantics.cc:8367 -#: cp/semantics.cc:8585 +#: c/c-typeck.cc:15605 c/c-typeck.cc:15782 cp/semantics.cc:8436 +#: cp/semantics.cc:8654 #, gcc-internal-format msgid "%qD appears more than once in motion clauses" msgstr "" -#: c/c-typeck.cc:15613 c/c-typeck.cc:15788 cp/semantics.cc:8375 -#: cp/semantics.cc:8591 +#: c/c-typeck.cc:15613 c/c-typeck.cc:15788 cp/semantics.cc:8444 +#: cp/semantics.cc:8660 #, gcc-internal-format msgid "%qD appears more than once in map clauses" msgstr "" -#: c/c-typeck.cc:15732 c/c-typeck.cc:15874 cp/semantics.cc:8528 -#: cp/semantics.cc:8695 +#: c/c-typeck.cc:15732 c/c-typeck.cc:15874 cp/semantics.cc:8597 +#: cp/semantics.cc:8764 #, gcc-internal-format msgid "%qD does not have a mappable type in %qs clause" msgstr "" -#: c/c-typeck.cc:15857 cp/semantics.cc:8677 +#: c/c-typeck.cc:15857 cp/semantics.cc:8746 #, gcc-internal-format msgid "%qE is neither a variable nor a function name in clause %qs" msgstr "" -#: c/c-typeck.cc:15883 cp/semantics.cc:8707 +#: c/c-typeck.cc:15883 cp/semantics.cc:8776 #, gcc-internal-format msgid "%qE appears more than once on the same %<declare target%> directive" msgstr "" -#: c/c-typeck.cc:15897 cp/semantics.cc:8723 +#: c/c-typeck.cc:15897 cp/semantics.cc:8792 #, gcc-internal-format msgid "%qD is not an argument in %<uniform%> clause" msgstr "" -#: c/c-typeck.cc:15900 cp/semantics.cc:8726 +#: c/c-typeck.cc:15900 cp/semantics.cc:8795 #, gcc-internal-format msgid "%qE is not an argument in %<uniform%> clause" msgstr "" @@ -53606,22 +53859,22 @@ msgstr "" msgid "%qs variable is neither a pointer nor an array" msgstr "" -#: c/c-typeck.cc:15974 c/c-typeck.cc:16069 cp/semantics.cc:9187 +#: c/c-typeck.cc:15974 c/c-typeck.cc:16069 cp/semantics.cc:9256 #, gcc-internal-format msgid "%<order%> clause must not be used together with %<ordered%>" msgstr "" -#: c/c-typeck.cc:15994 cp/semantics.cc:8247 +#: c/c-typeck.cc:15994 cp/semantics.cc:8316 #, gcc-internal-format msgid "too many %qs clauses on a task construct" msgstr "" -#: c/c-typeck.cc:16091 cp/semantics.cc:9001 +#: c/c-typeck.cc:16091 cp/semantics.cc:9070 #, gcc-internal-format msgid "%<inbranch%> clause is incompatible with %<notinbranch%>" msgstr "" -#: c/c-typeck.cc:16158 cp/semantics.cc:9364 +#: c/c-typeck.cc:16158 cp/semantics.cc:9433 #, gcc-internal-format msgid "%qE is predetermined %qs for %qs" msgstr "" @@ -53633,40 +53886,40 @@ msgid "" "clauses" msgstr "" -#: c/c-typeck.cc:16199 cp/semantics.cc:9139 +#: c/c-typeck.cc:16199 cp/semantics.cc:9208 #, gcc-internal-format msgid "%<simdlen%> clause value is bigger than %<safelen%> clause value" msgstr "" -#: c/c-typeck.cc:16211 cp/semantics.cc:9152 +#: c/c-typeck.cc:16211 cp/semantics.cc:9221 #, gcc-internal-format msgid "" "%<nonmonotonic%> schedule modifier specified together with %<ordered%> clause" msgstr "" -#: c/c-typeck.cc:16222 c/c-typeck.cc:16230 cp/semantics.cc:9161 -#: cp/semantics.cc:9179 +#: c/c-typeck.cc:16222 c/c-typeck.cc:16230 cp/semantics.cc:9230 +#: cp/semantics.cc:9248 #, gcc-internal-format msgid "%qs clause specified together with %<inscan%> %<reduction%> clause" msgstr "" -#: c/c-typeck.cc:16278 cp/semantics.cc:9119 +#: c/c-typeck.cc:16278 cp/semantics.cc:9188 #, gcc-internal-format msgid "" "%<linear%> clause step is a parameter %qD not specified in %<uniform%> clause" msgstr "" -#: c/c-typeck.cc:16329 cp/semantics.cc:9169 +#: c/c-typeck.cc:16329 cp/semantics.cc:9238 #, gcc-internal-format msgid "%<nogroup%> clause must not be used together with %<reduction%> clause" msgstr "" -#: c/c-typeck.cc:16339 cp/semantics.cc:9198 +#: c/c-typeck.cc:16339 cp/semantics.cc:9267 #, gcc-internal-format msgid "%<detach%> clause must not be used together with %<mergeable%> clause" msgstr "" -#: c/c-typeck.cc:16357 cp/semantics.cc:9389 +#: c/c-typeck.cc:16357 cp/semantics.cc:9458 #, gcc-internal-format msgid "" "the event handle of a %<detach%> clause should not be in a data-sharing " @@ -53928,14 +54181,14 @@ msgstr "" msgid " no known conversion for argument %d from %qH to %qI" msgstr "" -#: cp/call.cc:3904 cp/pt.cc:7090 +#: cp/call.cc:3904 cp/pt.cc:7091 #, gcc-internal-format, gfc-internal-format msgid " candidate expects at least %d argument, %d provided" msgid_plural " candidate expects at least %d arguments, %d provided" msgstr[0] "" msgstr[1] "" -#: cp/call.cc:3909 cp/pt.cc:7095 +#: cp/call.cc:3909 cp/pt.cc:7096 #, gcc-internal-format, gfc-internal-format msgid " candidate expects %d argument, %d provided" msgid_plural " candidate expects %d arguments, %d provided" @@ -54355,7 +54608,7 @@ msgstr "" msgid "%q#D is private within this context" msgstr "" -#: cp/call.cc:8166 cp/decl.cc:9117 +#: cp/call.cc:8166 cp/decl.cc:9113 #, gcc-internal-format msgid "declared private here" msgstr "" @@ -54365,7 +54618,7 @@ msgstr "" msgid "%q#D is protected within this context" msgstr "" -#: cp/call.cc:8172 cp/decl.cc:9118 +#: cp/call.cc:8172 cp/decl.cc:9114 #, gcc-internal-format msgid "declared protected here" msgstr "" @@ -54380,8 +54633,8 @@ msgstr "" msgid "passing NULL to non-pointer argument %P of %qD" msgstr "" -#: cp/call.cc:8263 cp/call.cc:8282 cp/decl.cc:10846 cp/decl.cc:10854 -#: cp/typeck.cc:4605 +#: cp/call.cc:8263 cp/call.cc:8282 cp/decl.cc:10850 cp/decl.cc:10858 +#: cp/typeck.cc:4606 #, gcc-internal-format msgid " declared here" msgstr "" @@ -54453,419 +54706,419 @@ msgstr "" msgid "in C++11 and above a default constructor can be explicit" msgstr "" -#: cp/call.cc:8842 +#: cp/call.cc:8837 msgid "cannot bind rvalue reference of type %qH to lvalue of type %qI" msgstr "" -#: cp/call.cc:8851 +#: cp/call.cc:8846 msgid "" "cannot bind non-const lvalue reference of type %qH to a value of type %qI" msgstr "" -#: cp/call.cc:8856 +#: cp/call.cc:8851 msgid "" "cannot bind non-const lvalue reference of type %qH to an rvalue of type %qI" msgstr "" #. extype is volatile -#: cp/call.cc:8859 +#: cp/call.cc:8854 msgid "cannot bind lvalue reference of type %qH to an rvalue of type %qI" msgstr "" -#: cp/call.cc:8872 +#: cp/call.cc:8867 msgid "cannot bind reference of type %qH to %qI due to different array bounds" msgstr "" -#: cp/call.cc:8875 +#: cp/call.cc:8870 msgid "binding reference of type %qH to %qI discards qualifiers" msgstr "" -#: cp/call.cc:8914 +#: cp/call.cc:8909 #, gcc-internal-format msgid "cannot bind bit-field %qE to %qT" msgstr "" -#: cp/call.cc:8917 cp/call.cc:8935 +#: cp/call.cc:8912 cp/call.cc:8930 #, gcc-internal-format msgid "cannot bind packed field %qE to %qT" msgstr "" -#: cp/call.cc:8920 +#: cp/call.cc:8915 #, gcc-internal-format msgid "cannot bind rvalue %qE to %qT" msgstr "" -#: cp/call.cc:9121 +#: cp/call.cc:9116 msgid "implicit conversion from %qH to %qI when passing argument to function" msgstr "" -#: cp/call.cc:9150 cp/cvt.cc:1997 +#: cp/call.cc:9145 cp/cvt.cc:2011 #, gcc-internal-format msgid "" "scoped enum %qT passed through %<...%> as %qT before %<-fabi-version=6%>, " "%qT after" msgstr "" -#: cp/call.cc:9194 +#: cp/call.cc:9189 #, gcc-internal-format msgid "" "passing objects of non-trivially-copyable type %q#T through %<...%> is " "conditionally supported" msgstr "" -#: cp/call.cc:9230 +#: cp/call.cc:9225 #, gcc-internal-format msgid "cannot receive reference type %qT through %<...%>" msgstr "" -#: cp/call.cc:9240 +#: cp/call.cc:9235 #, gcc-internal-format msgid "" "receiving objects of non-trivially-copyable type %q#T through %<...%> is " "conditionally-supported" msgstr "" -#: cp/call.cc:9308 +#: cp/call.cc:9303 #, gcc-internal-format msgid "recursive evaluation of default argument for %q#D" msgstr "" -#: cp/call.cc:9317 +#: cp/call.cc:9312 #, gcc-internal-format msgid "" "call to %qD uses the default argument for parameter %P, which is not yet " "defined" msgstr "" -#: cp/call.cc:9417 +#: cp/call.cc:9412 #, gcc-internal-format msgid "argument of function call might be a candidate for a format attribute" msgstr "" -#: cp/call.cc:9497 +#: cp/call.cc:9492 #, gcc-internal-format msgid "use of multiversioned function without a default" msgstr "" -#: cp/call.cc:10002 +#: cp/call.cc:9997 #, gcc-internal-format msgid "use %<-fdiagnostics-all-candidates%> to display considered candidates" msgstr "" -#: cp/call.cc:10125 +#: cp/call.cc:10120 #, gcc-internal-format msgid "passing %qT as %<this%> argument discards qualifiers" msgstr "" -#: cp/call.cc:10128 cp/call.cc:12974 +#: cp/call.cc:10123 cp/call.cc:12969 #, gcc-internal-format msgid " in call to %qD" msgstr "" -#: cp/call.cc:10153 +#: cp/call.cc:10148 #, gcc-internal-format msgid "%qT is not an accessible base of %qT" msgstr "" -#: cp/call.cc:10378 +#: cp/call.cc:10373 #, gcc-internal-format msgid "passing arguments to ellipsis of inherited constructor %qD" msgstr "" -#: cp/call.cc:10515 +#: cp/call.cc:10510 #, gcc-internal-format msgid "" "assignment from temporary %<initializer_list%> does not extend the lifetime " "of the underlying array" msgstr "" -#: cp/call.cc:10882 +#: cp/call.cc:10877 #, gcc-internal-format msgid "%qD writing to an object of type %#qT with no trivial copy-assignment" msgstr "" -#: cp/call.cc:10885 +#: cp/call.cc:10880 #, gcc-internal-format msgid "%qD writing to an object of non-trivial type %#qT%s" msgstr "" -#: cp/call.cc:10890 +#: cp/call.cc:10885 #, gcc-internal-format msgid "%qD writing to an object of type %#qT with %qs member %qD" msgstr "" -#: cp/call.cc:10895 +#: cp/call.cc:10890 #, gcc-internal-format msgid "" "%qD writing to an object of type %#qT containing a pointer to data member%s" msgstr "" -#: cp/call.cc:10910 +#: cp/call.cc:10905 #, gcc-internal-format msgid "; use assignment or value-initialization instead" msgstr "" -#: cp/call.cc:10912 +#: cp/call.cc:10907 #, gcc-internal-format msgid "; use assignment instead" msgstr "" -#: cp/call.cc:10914 +#: cp/call.cc:10909 #, gcc-internal-format msgid "; use value-initialization instead" msgstr "" -#: cp/call.cc:10917 +#: cp/call.cc:10912 #, gcc-internal-format msgid "%qD clearing an object of type %#qT with no trivial copy-assignment%s" msgstr "" -#: cp/call.cc:10920 +#: cp/call.cc:10915 #, gcc-internal-format msgid "%qD clearing an object of non-trivial type %#qT%s" msgstr "" -#: cp/call.cc:10922 +#: cp/call.cc:10917 #, gcc-internal-format msgid "%qD clearing an object of type %#qT containing a pointer-to-member%s" msgstr "" -#: cp/call.cc:10943 +#: cp/call.cc:10938 #, gcc-internal-format msgid "; use copy-assignment or copy-initialization instead" msgstr "" -#: cp/call.cc:10945 +#: cp/call.cc:10940 #, gcc-internal-format msgid "; use copy-assignment instead" msgstr "" -#: cp/call.cc:10947 +#: cp/call.cc:10942 #, gcc-internal-format msgid "; use copy-initialization instead" msgstr "" -#: cp/call.cc:10950 +#: cp/call.cc:10945 #, gcc-internal-format msgid "%qD writing to an object of type %#qT with no trivial copy-assignment%s" msgstr "" -#: cp/call.cc:10953 +#: cp/call.cc:10948 #, gcc-internal-format msgid "%qD writing to an object of non-trivially copyable type %#qT%s" msgstr "" -#: cp/call.cc:10956 +#: cp/call.cc:10951 #, gcc-internal-format msgid "%qD writing to an object with a deleted copy constructor" msgstr "" -#: cp/call.cc:10967 +#: cp/call.cc:10962 #, gcc-internal-format msgid "%qD copying an object of non-trivial type %#qT from an array of %#qT" msgstr "" -#: cp/call.cc:10979 +#: cp/call.cc:10974 #, gcc-internal-format msgid "" "%qD copying an object of type %#qT with %qs member %qD from an array of " "%#qT; use assignment or copy-initialization instead" msgstr "" -#: cp/call.cc:10998 +#: cp/call.cc:10993 #, gcc-internal-format msgid "" "%qD writing to an object of a non-trivial type %#qT leaves %wu bytes " "unchanged" msgstr "" -#: cp/call.cc:11001 +#: cp/call.cc:10996 #, gcc-internal-format msgid "" "%qD writing to an object of a non-trivial type %#qT leaves %wu byte unchanged" msgstr "" -#: cp/call.cc:11011 +#: cp/call.cc:11006 #, gcc-internal-format msgid "" "%qD moving an object of non-trivially copyable type %#qT; use %<new%> and " "%<delete%> instead" msgstr "" -#: cp/call.cc:11014 +#: cp/call.cc:11009 #, gcc-internal-format msgid "" "%qD moving an object of type %#qT with deleted copy constructor; use %<new%> " "and %<delete%> instead" msgstr "" -#: cp/call.cc:11017 +#: cp/call.cc:11012 #, gcc-internal-format msgid "%qD moving an object of type %#qT with deleted destructor" msgstr "" -#: cp/call.cc:11026 +#: cp/call.cc:11021 #, gcc-internal-format msgid "" "%qD moving an object of non-trivial type %#qT and size %E into a region of " "size %E" msgstr "" -#: cp/call.cc:11048 +#: cp/call.cc:11043 #, gcc-internal-format msgid "%#qT declared here" msgstr "" -#: cp/call.cc:11102 +#: cp/call.cc:11097 #, gcc-internal-format msgid "" "argument %u in call to function %qE has pointer to a non-trivially-copyable " "type (%qT)" msgstr "" -#: cp/call.cc:11169 +#: cp/call.cc:11164 #, gcc-internal-format msgid "constructor delegates to itself" msgstr "" -#: cp/call.cc:11444 cp/typeck.cc:10388 +#: cp/call.cc:11439 cp/typeck.cc:10389 msgid "cannot convert %qH to %qI" msgstr "" -#: cp/call.cc:11466 +#: cp/call.cc:11461 #, gcc-internal-format msgid "no matching function for call to %<%T::operator %T(%A)%#V%>" msgstr "" -#: cp/call.cc:11498 +#: cp/call.cc:11493 #, gcc-internal-format msgid "no matching function for call to %<%T::%s%E(%A)%#V%>" msgstr "" -#: cp/call.cc:11546 +#: cp/call.cc:11541 #, gcc-internal-format msgid "call to non-function %qD" msgstr "" -#: cp/call.cc:11584 cp/pt.cc:17138 cp/typeck.cc:3482 +#: cp/call.cc:11579 cp/pt.cc:17141 cp/typeck.cc:3483 #, gcc-internal-format msgid "cannot call constructor %<%T::%D%> directly" msgstr "" -#: cp/call.cc:11586 +#: cp/call.cc:11581 #, gcc-internal-format msgid "for a function-style cast, remove the redundant %<::%D%>" msgstr "" -#: cp/call.cc:11768 +#: cp/call.cc:11763 #, gcc-internal-format msgid "no matching function for call to %<%s(%A)%>" msgstr "" -#: cp/call.cc:11771 +#: cp/call.cc:11766 #, gcc-internal-format msgid "call of overloaded %<%s(%A)%> is ambiguous" msgstr "" -#: cp/call.cc:11794 +#: cp/call.cc:11789 #, gcc-internal-format msgid "pure virtual %q#D called from non-static data member initializer" msgstr "" -#: cp/call.cc:11799 +#: cp/call.cc:11794 #, gcc-internal-format msgid "pure virtual %q#D called from constructor" msgstr "" -#: cp/call.cc:11800 +#: cp/call.cc:11795 #, gcc-internal-format msgid "pure virtual %q#D called from destructor" msgstr "" -#: cp/call.cc:11823 +#: cp/call.cc:11818 #, gcc-internal-format msgid "cannot call member function %qD without object" msgstr "" -#: cp/call.cc:12972 +#: cp/call.cc:12967 #, gcc-internal-format msgid "passing %qT chooses %qT over %qT" msgstr "" -#: cp/call.cc:12998 +#: cp/call.cc:12993 #, gcc-internal-format msgid "" "C++20 says that these are ambiguous, even though the second is reversed:" msgstr "" -#: cp/call.cc:13021 +#: cp/call.cc:13016 #, gcc-internal-format msgid "try making the operator a %<const%> member function" msgstr "" -#: cp/call.cc:13084 +#: cp/call.cc:13079 #, gcc-internal-format msgid "choosing %qD over %qD" msgstr "" -#: cp/call.cc:13085 +#: cp/call.cc:13080 msgid " for conversion from %qH to %qI" msgstr "" -#: cp/call.cc:13088 +#: cp/call.cc:13083 #, gcc-internal-format msgid " because conversion sequence for the argument is better" msgstr "" -#: cp/call.cc:13372 +#: cp/call.cc:13367 #, gcc-internal-format msgid "default argument mismatch in overload resolution" msgstr "" -#: cp/call.cc:13376 +#: cp/call.cc:13371 #, gcc-internal-format msgid " candidate 1: %q#F" msgstr "" -#: cp/call.cc:13378 +#: cp/call.cc:13373 #, gcc-internal-format msgid " candidate 2: %q#F" msgstr "" -#: cp/call.cc:13424 +#: cp/call.cc:13419 #, gcc-internal-format msgid "" "ISO C++ says that these are ambiguous, even though the worst conversion for " "the first is better than the worst conversion for the second:" msgstr "" -#: cp/call.cc:13832 +#: cp/call.cc:13827 #, gcc-internal-format msgid "a temporary bound to %qD only persists until the constructor exits" msgstr "" -#: cp/call.cc:13985 +#: cp/call.cc:13980 msgid "" "invalid initialization of non-const reference of type %qH from an rvalue of " "type %qI" msgstr "" -#: cp/call.cc:13989 +#: cp/call.cc:13984 msgid "" "invalid initialization of reference of type %qH from expression of type %qI" msgstr "" -#: cp/call.cc:14281 +#: cp/call.cc:14302 #, gcc-internal-format msgid "possibly dangling reference to a temporary" msgstr "" -#: cp/call.cc:14282 +#: cp/call.cc:14303 #, gcc-internal-format msgid "the temporary was destroyed at the end of the full expression %qE" msgstr "" -#: cp/call.cc:14550 +#: cp/call.cc:14571 #, gcc-internal-format msgid "explicit conversion function was not considered" msgstr "" @@ -54959,7 +55212,7 @@ msgid "%qD inherits the %E ABI tag that %qT (used in its return type) has" msgstr "" #: cp/class.cc:1694 cp/class.cc:1701 cp/class.cc:1708 cp/class.cc:1720 -#: cp/cvt.cc:1104 rust/backend/rust-tree.cc:643 +#: cp/cvt.cc:1118 rust/backend/rust-tree.cc:643 #, gcc-internal-format msgid "%qT declared here" msgstr "" @@ -55349,7 +55602,7 @@ msgstr "" msgid "next member %q#D declared here" msgstr "" -#: cp/class.cc:7785 cp/decl.cc:17628 cp/parser.cc:27637 +#: cp/class.cc:7785 cp/decl.cc:17637 cp/parser.cc:27637 #, gcc-internal-format msgid "redefinition of %q#T" msgstr "" @@ -55487,7 +55740,7 @@ msgstr "" msgid "lambdas are implicitly %<constexpr%> only in C++17 and later" msgstr "" -#: cp/constexpr.cc:272 cp/decl.cc:14668 +#: cp/constexpr.cc:272 cp/decl.cc:14672 #, gcc-internal-format msgid "" "%<constexpr%> destructors only available with %<-std=c++20%> or %<-std=gnu+" @@ -55510,120 +55763,120 @@ msgstr "" msgid "%<constexpr%> constructor does not have empty body" msgstr "" -#: cp/constexpr.cc:831 +#: cp/constexpr.cc:829 #, gcc-internal-format msgid "" "%<constexpr%> constructor for union %qT must initialize exactly one non-" "static data member" msgstr "" -#: cp/constexpr.cc:892 +#: cp/constexpr.cc:890 #, gcc-internal-format msgid "" "member %qD must be initialized by mem-initializer in %<constexpr%> " "constructor" msgstr "" -#: cp/constexpr.cc:955 +#: cp/constexpr.cc:953 #, gcc-internal-format msgid "body of %<constexpr%> function %qD not a return-statement" msgstr "" -#: cp/constexpr.cc:1083 +#: cp/constexpr.cc:1081 #, gcc-internal-format msgid "%qD is not usable as a %<constexpr%> function because:" msgstr "" -#: cp/constexpr.cc:1320 cp/constexpr.cc:6349 +#: cp/constexpr.cc:1318 cp/constexpr.cc:6347 #, gcc-internal-format msgid "destroying %qE outside its lifetime" msgstr "" -#: cp/constexpr.cc:1611 cp/constexpr.cc:3308 +#: cp/constexpr.cc:1609 cp/constexpr.cc:3306 #: rust/backend/rust-constexpr.cc:3326 rust/backend/rust-constexpr.cc:3589 #, gcc-internal-format msgid "%<constexpr%> call flows off the end of the function" msgstr "" -#: cp/constexpr.cc:1613 cp/constexpr.cc:1712 cp/constexpr.cc:1721 -#: cp/constexpr.cc:3580 rust/backend/rust-constexpr.cc:3331 +#: cp/constexpr.cc:1611 cp/constexpr.cc:1710 cp/constexpr.cc:1719 +#: cp/constexpr.cc:3578 rust/backend/rust-constexpr.cc:3331 #: rust/backend/rust-constexpr.cc:3341 rust/backend/rust-constexpr.cc:4324 #, gcc-internal-format msgid "%q+E is not a constant expression" msgstr "" -#: cp/constexpr.cc:1898 cp/constexpr.cc:5915 cp/constexpr.cc:8214 +#: cp/constexpr.cc:1896 cp/constexpr.cc:5913 cp/constexpr.cc:8212 #: rust/backend/rust-constexpr.cc:875 rust/backend/rust-constexpr.cc:2494 #, gcc-internal-format msgid "dereferencing a null pointer" msgstr "" -#: cp/constexpr.cc:2077 +#: cp/constexpr.cc:2075 #, gcc-internal-format msgid "the comparison reduces to %qE" msgstr "" -#: cp/constexpr.cc:2080 +#: cp/constexpr.cc:2078 #, gcc-internal-format msgid "%qE evaluates to false" msgstr "" -#: cp/constexpr.cc:2159 +#: cp/constexpr.cc:2157 #, gcc-internal-format msgid "failed %<assume%> attribute assumption" msgstr "" -#: cp/constexpr.cc:2194 cp/constexpr.cc:9664 +#: cp/constexpr.cc:2192 cp/constexpr.cc:9662 #: rust/backend/rust-constexpr.cc:5758 #, gcc-internal-format msgid "call to internal function %qE" msgstr "" -#: cp/constexpr.cc:2248 rust/backend/rust-constexpr.cc:2615 +#: cp/constexpr.cc:2246 rust/backend/rust-constexpr.cc:2615 #, gcc-internal-format msgid "modifying a const object %qE is not allowed in a constant expression" msgstr "" -#: cp/constexpr.cc:2276 rust/backend/rust-constexpr.cc:2618 +#: cp/constexpr.cc:2274 rust/backend/rust-constexpr.cc:2618 #, gcc-internal-format msgid "originally declared %<const%> here" msgstr "" -#: cp/constexpr.cc:2532 cp/constexpr.cc:2588 cp/constexpr.cc:2621 -#: cp/constexpr.cc:2643 +#: cp/constexpr.cc:2530 cp/constexpr.cc:2586 cp/constexpr.cc:2619 +#: cp/constexpr.cc:2641 #, gcc-internal-format msgid "reference %<dynamic_cast%> failed" msgstr "" -#: cp/constexpr.cc:2533 +#: cp/constexpr.cc:2531 #, gcc-internal-format msgid "dynamic type %qT of its operand does not have a base class of type %qT" msgstr "" -#: cp/constexpr.cc:2557 +#: cp/constexpr.cc:2555 #, gcc-internal-format msgid "virtual table pointer is used uninitialized" msgstr "" -#: cp/constexpr.cc:2589 cp/constexpr.cc:2622 +#: cp/constexpr.cc:2587 cp/constexpr.cc:2620 #, gcc-internal-format msgid "" "static type %qT of its operand is a non-public base class of dynamic type %qT" msgstr "" -#: cp/constexpr.cc:2645 +#: cp/constexpr.cc:2643 #, gcc-internal-format msgid "%qT is an ambiguous base class of dynamic type %qT of its operand" msgstr "" -#: cp/constexpr.cc:2648 +#: cp/constexpr.cc:2646 #, gcc-internal-format msgid "" "dynamic type %qT of its operand does not have an unambiguous public base " "class %qT" msgstr "" -#: cp/constexpr.cc:2725 cp/constexpr.cc:3005 cp/constexpr.cc:9700 +#: cp/constexpr.cc:2723 cp/constexpr.cc:3003 cp/constexpr.cc:9698 #: rust/backend/rust-constexpr.cc:5789 #, gcc-internal-format msgid "call to non-%<constexpr%> function %qD" @@ -55631,149 +55884,149 @@ msgstr "" #. virtual_offset is only set for virtual bases, which make the #. class non-literal, so we don't need to handle it here. -#: cp/constexpr.cc:2731 +#: cp/constexpr.cc:2729 #, gcc-internal-format msgid "calling constexpr member function %qD through virtual base subobject" msgstr "" -#: cp/constexpr.cc:2847 rust/backend/rust-constexpr.cc:3387 +#: cp/constexpr.cc:2845 rust/backend/rust-constexpr.cc:3387 #, gcc-internal-format msgid "expression %qE does not designate a %<constexpr%> function" msgstr "" -#: cp/constexpr.cc:2925 +#: cp/constexpr.cc:2923 #, gcc-internal-format msgid "array deallocation of object allocated with non-array allocation" msgstr "" -#: cp/constexpr.cc:2929 cp/constexpr.cc:2952 +#: cp/constexpr.cc:2927 cp/constexpr.cc:2950 #, gcc-internal-format msgid "allocation performed here" msgstr "" -#: cp/constexpr.cc:2948 +#: cp/constexpr.cc:2946 #, gcc-internal-format msgid "non-array deallocation of object allocated with array allocation" msgstr "" -#: cp/constexpr.cc:2965 +#: cp/constexpr.cc:2963 #, gcc-internal-format msgid "deallocation of already deallocated storage" msgstr "" -#: cp/constexpr.cc:2972 +#: cp/constexpr.cc:2970 #, gcc-internal-format msgid "deallocation of storage that was not previously allocated" msgstr "" -#: cp/constexpr.cc:3089 rust/backend/rust-constexpr.cc:3442 +#: cp/constexpr.cc:3087 rust/backend/rust-constexpr.cc:3442 #, gcc-internal-format msgid "%qD called in a constant expression before its definition is complete" msgstr "" -#: cp/constexpr.cc:3096 +#: cp/constexpr.cc:3094 #, gcc-internal-format msgid "%qD called in a constant expression" msgstr "" -#: cp/constexpr.cc:3100 rust/backend/rust-constexpr.cc:3456 +#: cp/constexpr.cc:3098 rust/backend/rust-constexpr.cc:3456 #, gcc-internal-format msgid "%qD used before its definition" msgstr "" -#: cp/constexpr.cc:3172 rust/backend/rust-constexpr.cc:3498 +#: cp/constexpr.cc:3170 rust/backend/rust-constexpr.cc:3498 #, gcc-internal-format msgid "call has circular dependency" msgstr "" -#: cp/constexpr.cc:3183 rust/backend/rust-constexpr.cc:3509 +#: cp/constexpr.cc:3181 rust/backend/rust-constexpr.cc:3509 #, gcc-internal-format msgid "" "%<constexpr%> evaluation depth exceeds maximum of %d (use %<-fconstexpr-" "depth=%> to increase the maximum)" msgstr "" -#: cp/constexpr.cc:3538 +#: cp/constexpr.cc:3536 #, gcc-internal-format msgid "reference to %qD is not a constant expression" msgstr "" -#: cp/constexpr.cc:3541 +#: cp/constexpr.cc:3539 #, gcc-internal-format msgid "pointer to %qD is not a constant expression" msgstr "" -#: cp/constexpr.cc:3547 +#: cp/constexpr.cc:3545 #, gcc-internal-format msgid "" "address of non-static constexpr variable %qD may differ on each invocation " "of the enclosing function; add %<static%> to give it a constant address" msgstr "" -#: cp/constexpr.cc:3623 +#: cp/constexpr.cc:3621 #, gcc-internal-format msgid "right operand of shift expression %q+E is negative" msgstr "" -#: cp/constexpr.cc:3630 +#: cp/constexpr.cc:3628 #, gcc-internal-format msgid "" "right operand of shift expression %q+E is greater than or equal to the " "precision %wu of the left operand" msgstr "" -#: cp/constexpr.cc:3653 +#: cp/constexpr.cc:3651 #, gcc-internal-format msgid "left operand of shift expression %q+E is negative" msgstr "" -#: cp/constexpr.cc:3672 +#: cp/constexpr.cc:3670 #, gcc-internal-format msgid "shift expression %q+E overflows" msgstr "" -#: cp/constexpr.cc:3871 +#: cp/constexpr.cc:3869 #, gcc-internal-format msgid "arithmetic involving a null pointer in %qE" msgstr "" -#: cp/constexpr.cc:4306 rust/backend/rust-constexpr.cc:4399 +#: cp/constexpr.cc:4304 rust/backend/rust-constexpr.cc:4399 #, gcc-internal-format msgid "" "array subscript value %qE is outside the bounds of array %qD of type %qT" msgstr "" -#: cp/constexpr.cc:4309 rust/backend/rust-constexpr.cc:4404 +#: cp/constexpr.cc:4307 rust/backend/rust-constexpr.cc:4404 #, gcc-internal-format msgid "" "nonzero array subscript %qE is used with array %qD of type %qT with unknown " "bounds" msgstr "" -#: cp/constexpr.cc:4314 rust/backend/rust-constexpr.cc:4411 +#: cp/constexpr.cc:4312 rust/backend/rust-constexpr.cc:4411 #, gcc-internal-format msgid "array subscript value %qE is outside the bounds of array type %qT" msgstr "" -#: cp/constexpr.cc:4317 rust/backend/rust-constexpr.cc:4416 +#: cp/constexpr.cc:4315 rust/backend/rust-constexpr.cc:4416 #, gcc-internal-format msgid "" "nonzero array subscript %qE is used with array of type %qT with unknown " "bounds" msgstr "" -#: cp/constexpr.cc:4505 rust/backend/rust-constexpr.cc:1667 +#: cp/constexpr.cc:4503 rust/backend/rust-constexpr.cc:1667 #, gcc-internal-format msgid "accessing uninitialized array element" msgstr "" -#: cp/constexpr.cc:4567 rust/backend/rust-constexpr.cc:1724 +#: cp/constexpr.cc:4565 rust/backend/rust-constexpr.cc:1724 #, gcc-internal-format msgid "dereferencing a null pointer in %qE" msgstr "" -#: cp/constexpr.cc:4586 cp/constexpr.cc:4702 cp/constexpr.cc:4714 -#: cp/constexpr.cc:7408 cp/constexpr.cc:7528 cp/constexpr.cc:9614 +#: cp/constexpr.cc:4584 cp/constexpr.cc:4700 cp/constexpr.cc:4712 +#: cp/constexpr.cc:7406 cp/constexpr.cc:7526 cp/constexpr.cc:9612 #: rust/backend/rust-constexpr.cc:1738 rust/backend/rust-constexpr.cc:1983 #: rust/backend/rust-constexpr.cc:2225 rust/backend/rust-constexpr.cc:4743 #: rust/backend/rust-constexpr.cc:5712 @@ -55781,269 +56034,269 @@ msgstr "" msgid "%qE is not a constant expression" msgstr "" -#: cp/constexpr.cc:4594 rust/backend/rust-constexpr.cc:1744 +#: cp/constexpr.cc:4592 rust/backend/rust-constexpr.cc:1744 #, gcc-internal-format msgid "mutable %qD is not usable in a constant expression" msgstr "" -#: cp/constexpr.cc:4626 cp/constexpr.cc:4662 cp/constexpr.cc:6513 +#: cp/constexpr.cc:4624 cp/constexpr.cc:4660 cp/constexpr.cc:6511 #: rust/backend/rust-constexpr.cc:1774 rust/backend/rust-constexpr.cc:1797 #, gcc-internal-format msgid "accessing uninitialized member %qD" msgstr "" -#: cp/constexpr.cc:4628 cp/constexpr.cc:4641 cp/constexpr.cc:6508 +#: cp/constexpr.cc:4626 cp/constexpr.cc:4639 cp/constexpr.cc:6506 #: rust/backend/rust-constexpr.cc:1776 #, gcc-internal-format msgid "" "accessing %qD member instead of initialized %qD member in constant expression" msgstr "" -#: cp/constexpr.cc:4780 +#: cp/constexpr.cc:4778 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is a union type" msgstr "" -#: cp/constexpr.cc:4783 +#: cp/constexpr.cc:4781 #, gcc-internal-format msgid "%qs is not a constant expression because %qT contains a union type" msgstr "" -#: cp/constexpr.cc:4794 +#: cp/constexpr.cc:4792 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is a pointer type" msgstr "" -#: cp/constexpr.cc:4797 +#: cp/constexpr.cc:4795 #, gcc-internal-format msgid "%qs is not a constant expression because %qT contains a pointer type" msgstr "" -#: cp/constexpr.cc:4808 +#: cp/constexpr.cc:4806 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is a reference type" msgstr "" -#: cp/constexpr.cc:4811 +#: cp/constexpr.cc:4809 #, gcc-internal-format msgid "%qs is not a constant expression because %qT contains a reference type" msgstr "" -#: cp/constexpr.cc:4822 +#: cp/constexpr.cc:4820 #, gcc-internal-format msgid "" "%qs is not a constant expression because %qT is a pointer to member type" msgstr "" -#: cp/constexpr.cc:4826 +#: cp/constexpr.cc:4824 #, gcc-internal-format msgid "" "%qs is not a constant expression because %qT contains a pointer to member " "type" msgstr "" -#: cp/constexpr.cc:4837 +#: cp/constexpr.cc:4835 #, gcc-internal-format msgid "%qs is not a constant expression because %qT is volatile" msgstr "" -#: cp/constexpr.cc:4840 +#: cp/constexpr.cc:4838 #, gcc-internal-format msgid "" "%qs is not a constant expression because %qT contains a volatile subobject" msgstr "" -#: cp/constexpr.cc:4993 +#: cp/constexpr.cc:4991 #, gcc-internal-format msgid "%qs cannot be constant evaluated on the target" msgstr "" -#: cp/constexpr.cc:5002 cp/constexpr.cc:5012 +#: cp/constexpr.cc:5000 cp/constexpr.cc:5010 #, gcc-internal-format msgid "%qs cannot be constant evaluated because the type is too large" msgstr "" -#: cp/constexpr.cc:5032 +#: cp/constexpr.cc:5030 #, gcc-internal-format msgid "%qs cannot be constant evaluated because the argument cannot be encoded" msgstr "" -#: cp/constexpr.cc:5078 +#: cp/constexpr.cc:5076 #, gcc-internal-format msgid "%qs accessing uninitialized byte at offset %d" msgstr "" -#: cp/constexpr.cc:5090 +#: cp/constexpr.cc:5088 #, gcc-internal-format msgid "" "%qs cannot be constant evaluated because the argument cannot be interpreted" msgstr "" -#: cp/constexpr.cc:5935 rust/backend/rust-constexpr.cc:895 +#: cp/constexpr.cc:5933 rust/backend/rust-constexpr.cc:895 #, gcc-internal-format msgid "accessing value of %qE through a %qT glvalue in a constant expression" msgstr "" #. Provide a more accurate message for deleted variables. -#: cp/constexpr.cc:5975 cp/constexpr.cc:6008 +#: cp/constexpr.cc:5973 cp/constexpr.cc:6006 #, gcc-internal-format msgid "use of allocated storage after deallocation in a constant expression" msgstr "" -#: cp/constexpr.cc:5977 cp/constexpr.cc:6003 cp/constexpr.cc:6010 -#: cp/constexpr.cc:6344 +#: cp/constexpr.cc:5975 cp/constexpr.cc:6001 cp/constexpr.cc:6008 +#: cp/constexpr.cc:6342 #, gcc-internal-format msgid "allocated here" msgstr "" -#: cp/constexpr.cc:5981 +#: cp/constexpr.cc:5979 #, gcc-internal-format msgid "accessing %qE outside its lifetime" msgstr "" -#: cp/constexpr.cc:6001 +#: cp/constexpr.cc:5999 #, gcc-internal-format msgid "" "the content of uninitialized storage is not usable in a constant expression" msgstr "" -#: cp/constexpr.cc:6013 rust/backend/rust-constexpr.cc:4041 +#: cp/constexpr.cc:6011 rust/backend/rust-constexpr.cc:4041 #, gcc-internal-format msgid "the value of %qD is not usable in a constant expression" msgstr "" -#: cp/constexpr.cc:6021 +#: cp/constexpr.cc:6019 #, gcc-internal-format msgid "%qD used in its own initializer" msgstr "" -#: cp/constexpr.cc:6026 +#: cp/constexpr.cc:6024 #, gcc-internal-format msgid "%q#D is not const" msgstr "" -#: cp/constexpr.cc:6029 +#: cp/constexpr.cc:6027 #, gcc-internal-format msgid "%q#D is volatile" msgstr "" -#: cp/constexpr.cc:6034 cp/constexpr.cc:6041 +#: cp/constexpr.cc:6032 cp/constexpr.cc:6039 #, gcc-internal-format msgid "%qD was not initialized with a constant expression" msgstr "" -#: cp/constexpr.cc:6047 +#: cp/constexpr.cc:6045 #, gcc-internal-format msgid "%qD was not declared %<constexpr%>" msgstr "" -#: cp/constexpr.cc:6050 +#: cp/constexpr.cc:6048 #, gcc-internal-format msgid "%qD does not have integral or enumeration type" msgstr "" -#: cp/constexpr.cc:6342 +#: cp/constexpr.cc:6340 #, gcc-internal-format msgid "" "modification of allocated storage after deallocation is not a constant " "expression" msgstr "" -#: cp/constexpr.cc:6351 +#: cp/constexpr.cc:6349 #, gcc-internal-format msgid "modification of %qE outside its lifetime is not a constant expression" msgstr "" -#: cp/constexpr.cc:6358 +#: cp/constexpr.cc:6356 #, gcc-internal-format msgid "" "destroying %qE from outside current evaluation is not a constant expression" msgstr "" -#: cp/constexpr.cc:6361 +#: cp/constexpr.cc:6359 #, gcc-internal-format msgid "" "modification of %qE from outside current evaluation is not a constant " "expression" msgstr "" -#: cp/constexpr.cc:6488 +#: cp/constexpr.cc:6486 #, gcc-internal-format msgid "" "change of the active member of a union from %qD to %qD is not a constant " "expression before C++20" msgstr "" -#: cp/constexpr.cc:6517 +#: cp/constexpr.cc:6515 #, gcc-internal-format msgid "" "%qD does not implicitly begin its lifetime because %qT does not have a non-" "deleted trivial default constructor, use %<std::construct_at%> instead" msgstr "" -#: cp/constexpr.cc:6524 +#: cp/constexpr.cc:6522 #, gcc-internal-format msgid "" "initializing %qD requires a member access expression as the left operand of " "the assignment" msgstr "" -#: cp/constexpr.cc:6536 rust/backend/rust-constexpr.cc:2822 +#: cp/constexpr.cc:6534 rust/backend/rust-constexpr.cc:2822 #, gcc-internal-format msgid "" "change of the active member of a union from %qD to %qD during initialization" msgstr "" -#: cp/constexpr.cc:6984 cp/constexpr.cc:8563 cp/constexpr.cc:8575 +#: cp/constexpr.cc:6982 cp/constexpr.cc:8561 cp/constexpr.cc:8573 #: rust/backend/rust-constexpr.cc:4668 #, gcc-internal-format msgid "statement is not a constant expression" msgstr "" -#: cp/constexpr.cc:7080 rust/backend/rust-constexpr.cc:4933 +#: cp/constexpr.cc:7078 rust/backend/rust-constexpr.cc:4933 #, gcc-internal-format msgid "" "%<constexpr%> loop iteration count exceeds limit of %d (use %<-fconstexpr-" "loop-limit=%> to increase the limit)" msgstr "" -#: cp/constexpr.cc:7187 rust/backend/rust-constexpr.cc:999 +#: cp/constexpr.cc:7185 rust/backend/rust-constexpr.cc:999 #, gcc-internal-format msgid "inline assembly is not a constant expression" msgstr "" -#: cp/constexpr.cc:7189 rust/backend/rust-constexpr.cc:1000 +#: cp/constexpr.cc:7187 rust/backend/rust-constexpr.cc:1000 #, gcc-internal-format msgid "" "only unevaluated inline assembly is allowed in a %<constexpr%> function in C+" "+20" msgstr "" -#: cp/constexpr.cc:7207 +#: cp/constexpr.cc:7205 #, gcc-internal-format msgid "use of %qD" msgstr "" -#: cp/constexpr.cc:7211 +#: cp/constexpr.cc:7209 #, gcc-internal-format msgid "" "its value can vary between compiler versions or with different %<-mtune%> or " "%<-mcpu%> flags" msgstr "" -#: cp/constexpr.cc:7213 +#: cp/constexpr.cc:7211 #, gcc-internal-format msgid "" "if this use is part of a public ABI, change it to instead use a constant " "variable you define" msgstr "" -#: cp/constexpr.cc:7215 +#: cp/constexpr.cc:7213 #, gcc-internal-format, gfc-internal-format msgid "the default value for the current CPU tuning is %d bytes" msgstr "" -#: cp/constexpr.cc:7217 +#: cp/constexpr.cc:7215 #, gcc-internal-format msgid "" "you can stabilize this value with %<--param " @@ -56051,250 +56304,250 @@ msgid "" "Wno-interference-size%>" msgstr "" -#: cp/constexpr.cc:7370 +#: cp/constexpr.cc:7368 #, gcc-internal-format msgid "value %qE of type %qT is not a constant expression" msgstr "" -#: cp/constexpr.cc:7383 +#: cp/constexpr.cc:7381 #, gcc-internal-format msgid "" "%<constexpr%> evaluation operation count exceeds limit of %wd (use %<-" "fconstexpr-ops-limit=%> to increase the limit)" msgstr "" -#: cp/constexpr.cc:7558 +#: cp/constexpr.cc:7556 #, gcc-internal-format msgid "control passes through definition of %qD with thread storage duration" msgstr "" -#: cp/constexpr.cc:7561 +#: cp/constexpr.cc:7559 #, gcc-internal-format msgid "control passes through definition of %qD with static storage duration" msgstr "" -#: cp/constexpr.cc:7626 cp/constexpr.cc:10308 +#: cp/constexpr.cc:7624 cp/constexpr.cc:10306 #: rust/backend/rust-constexpr.cc:2056 rust/backend/rust-constexpr.cc:6206 #, gcc-internal-format msgid "temporary of non-literal type %qT in a constant expression" msgstr "" -#: cp/constexpr.cc:8075 cp/constexpr.cc:9815 +#: cp/constexpr.cc:8073 cp/constexpr.cc:9813 #, gcc-internal-format msgid "%<reinterpret_cast%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:8103 rust/backend/rust-constexpr.cc:2461 +#: cp/constexpr.cc:8101 rust/backend/rust-constexpr.cc:2461 #, gcc-internal-format msgid "" "conversion from pointer type %qT to arithmetic type %qT in a constant " "expression" msgstr "" -#: cp/constexpr.cc:8153 +#: cp/constexpr.cc:8151 #, gcc-internal-format msgid "" "cast from %qT is not allowed in a constant expression because pointed-to " "type %qT is not similar to %qT" msgstr "" -#: cp/constexpr.cc:8160 +#: cp/constexpr.cc:8158 #, gcc-internal-format msgid "pointed-to object declared here" msgstr "" -#: cp/constexpr.cc:8165 +#: cp/constexpr.cc:8163 #, gcc-internal-format msgid "" "cast from %qT is not allowed in a constant expression because %qE does not " "point to an object" msgstr "" -#: cp/constexpr.cc:8177 +#: cp/constexpr.cc:8175 #, gcc-internal-format msgid "cast from %qT is not allowed in a constant expression before C++26" msgstr "" -#: cp/constexpr.cc:8191 +#: cp/constexpr.cc:8189 #, gcc-internal-format msgid "%qE is not a constant expression when the class %qT is still incomplete" msgstr "" -#: cp/constexpr.cc:8225 rust/backend/rust-constexpr.cc:2506 +#: cp/constexpr.cc:8223 rust/backend/rust-constexpr.cc:2506 #, gcc-internal-format msgid "%<reinterpret_cast<%T>(%E)%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:8363 cp/constexpr.cc:10126 cp/constexpr.cc:10531 +#: cp/constexpr.cc:8361 cp/constexpr.cc:10124 cp/constexpr.cc:10529 #: rust/backend/rust-constexpr.cc:6100 rust/backend/rust-constexpr.cc:6415 #, gcc-internal-format msgid "expression %qE is not a constant expression" msgstr "" -#: cp/constexpr.cc:8408 cp/constexpr.cc:10572 +#: cp/constexpr.cc:8406 cp/constexpr.cc:10570 #, gcc-internal-format msgid "%<goto%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:8466 +#: cp/constexpr.cc:8464 #, gcc-internal-format msgid "contract predicate is false in constant expression" msgstr "" -#: cp/constexpr.cc:8482 +#: cp/constexpr.cc:8480 #, gcc-internal-format msgid "unexpected template-id %qE" msgstr "" -#: cp/constexpr.cc:8488 cp/constraint.cc:178 cp/constraint.cc:755 +#: cp/constexpr.cc:8486 cp/constraint.cc:178 cp/constraint.cc:755 #, gcc-internal-format msgid "function concept must be called" msgstr "" -#: cp/constexpr.cc:8513 +#: cp/constexpr.cc:8511 #, gcc-internal-format msgid "address of a call to %qs is not a constant expression" msgstr "" -#: cp/constexpr.cc:8578 +#: cp/constexpr.cc:8576 #, gcc-internal-format msgid "unexpected expression %qE of kind %s" msgstr "" -#: cp/constexpr.cc:8854 rust/backend/rust-constexpr.cc:5158 +#: cp/constexpr.cc:8852 rust/backend/rust-constexpr.cc:5158 #, gcc-internal-format msgid "" "%qE is not a constant expression because it refers to mutable subobjects of " "%qT" msgstr "" -#: cp/constexpr.cc:8862 rust/backend/rust-constexpr.cc:5167 +#: cp/constexpr.cc:8860 rust/backend/rust-constexpr.cc:5167 #, gcc-internal-format msgid "" "%qE is not a constant expression because it refers to an incompletely " "initialized variable" msgstr "" -#: cp/constexpr.cc:8878 rust/backend/rust-constexpr.cc:5183 +#: cp/constexpr.cc:8876 rust/backend/rust-constexpr.cc:5183 #, gcc-internal-format msgid "" "%qE is not a constant expression because it refers to a result of %<operator " "new%>" msgstr "" -#: cp/constexpr.cc:8889 rust/backend/rust-constexpr.cc:5195 +#: cp/constexpr.cc:8887 rust/backend/rust-constexpr.cc:5195 #, gcc-internal-format msgid "" "%qE is not a constant expression because allocated storage has not been " "deallocated" msgstr "" -#: cp/constexpr.cc:8909 rust/backend/rust-constexpr.cc:5213 +#: cp/constexpr.cc:8907 rust/backend/rust-constexpr.cc:5213 #, gcc-internal-format msgid "immediate evaluation returns address of immediate function %qD" msgstr "" -#: cp/constexpr.cc:8913 +#: cp/constexpr.cc:8911 #, gcc-internal-format msgid "constant evaluation returns address of immediate function %qD" msgstr "" -#: cp/constexpr.cc:9551 rust/backend/rust-constexpr.cc:5667 +#: cp/constexpr.cc:9549 rust/backend/rust-constexpr.cc:5667 #, gcc-internal-format msgid "lvalue-to-rvalue conversion of a volatile lvalue %qE with type %qT" msgstr "" -#: cp/constexpr.cc:9780 +#: cp/constexpr.cc:9778 #, gcc-internal-format msgid "lambda capture of %qE is not a constant expression" msgstr "" -#: cp/constexpr.cc:9783 +#: cp/constexpr.cc:9781 #, gcc-internal-format msgid "because it is used as a glvalue" msgstr "" -#: cp/constexpr.cc:9839 rust/backend/rust-constexpr.cc:5893 +#: cp/constexpr.cc:9837 rust/backend/rust-constexpr.cc:5893 #, gcc-internal-format msgid "%<reinterpret_cast%> from integer to pointer" msgstr "" -#: cp/constexpr.cc:9873 rust/backend/rust-constexpr.cc:5921 +#: cp/constexpr.cc:9871 rust/backend/rust-constexpr.cc:5921 #, gcc-internal-format msgid "" "address-of an object %qE with thread local or automatic storage is not a " "constant expression" msgstr "" -#: cp/constexpr.cc:9912 +#: cp/constexpr.cc:9910 #, gcc-internal-format msgid "use of %<this%> in a constant expression" msgstr "" -#: cp/constexpr.cc:10061 +#: cp/constexpr.cc:10059 #, gcc-internal-format msgid "lambda-expression is not a constant expression before C++17" msgstr "" -#: cp/constexpr.cc:10073 +#: cp/constexpr.cc:10071 #, gcc-internal-format msgid "new-expression is not a constant expression before C++20" msgstr "" -#: cp/constexpr.cc:10140 +#: cp/constexpr.cc:10138 #, gcc-internal-format msgid "virtual functions cannot be %<constexpr%> before C++20" msgstr "" -#: cp/constexpr.cc:10156 +#: cp/constexpr.cc:10154 #, gcc-internal-format msgid "" "%<typeid%> is not a constant expression because %qE is of polymorphic type" msgstr "" -#: cp/constexpr.cc:10219 +#: cp/constexpr.cc:10217 #, gcc-internal-format msgid "cast to non-integral type %qT in a constant expression" msgstr "" -#: cp/constexpr.cc:10272 +#: cp/constexpr.cc:10270 #, gcc-internal-format msgid "%qD defined %<thread_local%> in %<constexpr%> context" msgstr "" -#: cp/constexpr.cc:10280 +#: cp/constexpr.cc:10278 #, gcc-internal-format msgid "%qD defined %<static%> in %<constexpr%> context" msgstr "" -#: cp/constexpr.cc:10358 rust/backend/rust-constexpr.cc:6251 +#: cp/constexpr.cc:10356 rust/backend/rust-constexpr.cc:6251 #, gcc-internal-format msgid "division by zero is not a constant expression" msgstr "" -#: cp/constexpr.cc:10459 rust/backend/rust-constexpr.cc:6349 +#: cp/constexpr.cc:10457 rust/backend/rust-constexpr.cc:6349 #, gcc-internal-format msgid "%<delete[]%> is not a constant expression" msgstr "" -#: cp/constexpr.cc:10528 +#: cp/constexpr.cc:10526 #, gcc-internal-format msgid "neither branch of %<if%> is a constant expression" msgstr "" -#: cp/constexpr.cc:10541 +#: cp/constexpr.cc:10539 #, gcc-internal-format msgid "non-constant array initialization" msgstr "" -#: cp/constexpr.cc:10589 rust/backend/rust-constexpr.cc:6427 +#: cp/constexpr.cc:10587 rust/backend/rust-constexpr.cc:6427 #, gcc-internal-format msgid "" "label definition in %<constexpr%> function only available with %<-std=c+" "+2b%> or %<-std=gnu++2b%>" msgstr "" -#: cp/constexpr.cc:10620 rust/backend/rust-constexpr.cc:6438 +#: cp/constexpr.cc:10618 rust/backend/rust-constexpr.cc:6438 #, gcc-internal-format, gfc-internal-format msgid "unexpected AST of kind %s" msgstr "" @@ -56385,337 +56638,337 @@ msgstr "" msgid "the required type %qT is invalid" msgstr "" -#: cp/constraint.cc:2112 cp/constraint.cc:2185 +#: cp/constraint.cc:2112 cp/constraint.cc:2186 #, gcc-internal-format msgid "cannot convert %qE to %qT" msgstr "" -#: cp/constraint.cc:2140 +#: cp/constraint.cc:2141 #, gcc-internal-format msgid "%qE is not %<noexcept%>" msgstr "" -#: cp/constraint.cc:2162 +#: cp/constraint.cc:2163 #, gcc-internal-format msgid "%qE does not satisfy return-type-requirement, because" msgstr "" -#: cp/constraint.cc:2169 +#: cp/constraint.cc:2170 #, gcc-internal-format msgid "%qE does not satisfy return-type-requirement" msgstr "" -#: cp/constraint.cc:2180 +#: cp/constraint.cc:2181 #, gcc-internal-format msgid "cannot convert %qE to %qT because" msgstr "" #. Replay the substitution error. -#: cp/constraint.cc:2224 +#: cp/constraint.cc:2225 #, gcc-internal-format msgid "nested requirement %qE is not satisfied, because" msgstr "" -#: cp/constraint.cc:2228 +#: cp/constraint.cc:2229 #, gcc-internal-format msgid "nested requirement %qE is not satisfied" msgstr "" -#: cp/constraint.cc:2742 +#: cp/constraint.cc:2743 #, gcc-internal-format msgid "satisfaction of atomic constraint %qE depends on itself" msgstr "" -#: cp/constraint.cc:2788 +#: cp/constraint.cc:2789 #, gcc-internal-format msgid "satisfaction value of atomic constraint %qE changed from %qE to %qE" msgstr "" -#: cp/constraint.cc:2791 +#: cp/constraint.cc:2792 #, gcc-internal-format msgid "satisfaction value first evaluated to %qE from here" msgstr "" -#: cp/constraint.cc:2908 +#: cp/constraint.cc:2909 #, gcc-internal-format msgid "no operand of the disjunction is satisfied" msgstr "" -#: cp/constraint.cc:2921 +#: cp/constraint.cc:2922 #, gcc-internal-format msgid "the operand %qE is unsatisfied because" msgstr "" -#: cp/constraint.cc:3563 +#: cp/constraint.cc:3564 #, gcc-internal-format msgid "definition of concept %qD is empty" msgstr "" -#: cp/constraint.cc:3566 +#: cp/constraint.cc:3567 #, gcc-internal-format msgid "definition of concept %qD has multiple statements" msgstr "" -#: cp/constraint.cc:3722 +#: cp/constraint.cc:3723 #, gcc-internal-format msgid " %qT is not nothrow copy assignable" msgstr "" -#: cp/constraint.cc:3725 cp/constraint.cc:3810 +#: cp/constraint.cc:3726 cp/constraint.cc:3811 #, gcc-internal-format msgid " %qT is not nothrow default constructible" msgstr "" -#: cp/constraint.cc:3728 +#: cp/constraint.cc:3729 #, gcc-internal-format msgid " %qT is not nothrow copy constructible" msgstr "" -#: cp/constraint.cc:3731 +#: cp/constraint.cc:3732 #, gcc-internal-format msgid " %qT is not trivially copy assignable" msgstr "" -#: cp/constraint.cc:3734 cp/constraint.cc:3850 +#: cp/constraint.cc:3735 cp/constraint.cc:3851 #, gcc-internal-format msgid " %qT is not trivially default constructible" msgstr "" -#: cp/constraint.cc:3737 +#: cp/constraint.cc:3738 #, gcc-internal-format msgid " %qT is not trivially copy constructible" msgstr "" -#: cp/constraint.cc:3740 +#: cp/constraint.cc:3741 #, gcc-internal-format msgid " %qT is not trivially destructible" msgstr "" -#: cp/constraint.cc:3743 +#: cp/constraint.cc:3744 #, gcc-internal-format msgid " %qT does not have unique object representations" msgstr "" -#: cp/constraint.cc:3746 +#: cp/constraint.cc:3747 #, gcc-internal-format msgid " %qT does not have a virtual destructor" msgstr "" -#: cp/constraint.cc:3749 +#: cp/constraint.cc:3750 #, gcc-internal-format msgid " %qT is not an abstract class" msgstr "" -#: cp/constraint.cc:3752 +#: cp/constraint.cc:3753 #, gcc-internal-format msgid " %qT is not an aggregate" msgstr "" -#: cp/constraint.cc:3755 +#: cp/constraint.cc:3756 #, gcc-internal-format msgid " %qT is not an array" msgstr "" -#: cp/constraint.cc:3758 +#: cp/constraint.cc:3759 #, gcc-internal-format msgid " %qT is not assignable from %qT" msgstr "" -#: cp/constraint.cc:3761 +#: cp/constraint.cc:3762 #, gcc-internal-format msgid " %qT is not a base of %qT" msgstr "" -#: cp/constraint.cc:3764 +#: cp/constraint.cc:3765 #, gcc-internal-format msgid " %qT is not a bounded array" msgstr "" -#: cp/constraint.cc:3767 +#: cp/constraint.cc:3768 #, gcc-internal-format msgid " %qT is not a class" msgstr "" -#: cp/constraint.cc:3771 +#: cp/constraint.cc:3772 #, gcc-internal-format msgid " %qT is not default constructible" msgstr "" -#: cp/constraint.cc:3773 +#: cp/constraint.cc:3774 #, gcc-internal-format msgid " %qT is not constructible from %qE" msgstr "" -#: cp/constraint.cc:3776 +#: cp/constraint.cc:3777 #, gcc-internal-format msgid " %qT is not convertible from %qE" msgstr "" -#: cp/constraint.cc:3779 +#: cp/constraint.cc:3780 #, gcc-internal-format msgid " %qT is not an empty class" msgstr "" -#: cp/constraint.cc:3782 +#: cp/constraint.cc:3783 #, gcc-internal-format msgid " %qT is not an enum" msgstr "" -#: cp/constraint.cc:3785 +#: cp/constraint.cc:3786 #, gcc-internal-format msgid " %qT is not a final class" msgstr "" -#: cp/constraint.cc:3788 +#: cp/constraint.cc:3789 #, gcc-internal-format msgid " %qT is not a function" msgstr "" -#: cp/constraint.cc:3791 +#: cp/constraint.cc:3792 #, gcc-internal-format msgid " %qT is not layout compatible with %qT" msgstr "" -#: cp/constraint.cc:3794 +#: cp/constraint.cc:3795 #, gcc-internal-format msgid " %qT is not a literal type" msgstr "" -#: cp/constraint.cc:3797 +#: cp/constraint.cc:3798 #, gcc-internal-format msgid " %qT is not a member function pointer" msgstr "" -#: cp/constraint.cc:3800 +#: cp/constraint.cc:3801 #, gcc-internal-format msgid " %qT is not a member object pointer" msgstr "" -#: cp/constraint.cc:3803 +#: cp/constraint.cc:3804 #, gcc-internal-format msgid " %qT is not a member pointer" msgstr "" -#: cp/constraint.cc:3806 +#: cp/constraint.cc:3807 #, gcc-internal-format msgid " %qT is not nothrow assignable from %qT" msgstr "" -#: cp/constraint.cc:3812 +#: cp/constraint.cc:3813 #, gcc-internal-format msgid " %qT is not nothrow constructible from %qE" msgstr "" -#: cp/constraint.cc:3815 +#: cp/constraint.cc:3816 #, gcc-internal-format msgid " %qT is not nothrow convertible from %qE" msgstr "" -#: cp/constraint.cc:3818 +#: cp/constraint.cc:3819 #, gcc-internal-format msgid " %qT is not an object type" msgstr "" -#: cp/constraint.cc:3821 +#: cp/constraint.cc:3822 #, gcc-internal-format msgid " %qT is not pointer-interconvertible base of %qT" msgstr "" -#: cp/constraint.cc:3825 +#: cp/constraint.cc:3826 #, gcc-internal-format msgid " %qT is not a POD type" msgstr "" -#: cp/constraint.cc:3828 +#: cp/constraint.cc:3829 #, gcc-internal-format msgid " %qT is not a polymorphic type" msgstr "" -#: cp/constraint.cc:3831 +#: cp/constraint.cc:3832 #, gcc-internal-format msgid " %qT is not a reference" msgstr "" -#: cp/constraint.cc:3834 +#: cp/constraint.cc:3835 #, gcc-internal-format msgid " %qT is not the same as %qT" msgstr "" -#: cp/constraint.cc:3837 +#: cp/constraint.cc:3838 #, gcc-internal-format msgid " %qT is not a scoped enum" msgstr "" -#: cp/constraint.cc:3840 +#: cp/constraint.cc:3841 #, gcc-internal-format msgid " %qT is not an standard layout type" msgstr "" -#: cp/constraint.cc:3843 +#: cp/constraint.cc:3844 #, gcc-internal-format msgid " %qT is not a trivial type" msgstr "" -#: cp/constraint.cc:3846 +#: cp/constraint.cc:3847 #, gcc-internal-format msgid " %qT is not trivially assignable from %qT" msgstr "" -#: cp/constraint.cc:3852 +#: cp/constraint.cc:3853 #, gcc-internal-format msgid " %qT is not trivially constructible from %qE" msgstr "" -#: cp/constraint.cc:3855 +#: cp/constraint.cc:3856 #, gcc-internal-format msgid " %qT is not trivially copyable" msgstr "" -#: cp/constraint.cc:3858 +#: cp/constraint.cc:3859 #, gcc-internal-format msgid " %qT is not a union" msgstr "" -#: cp/constraint.cc:3861 +#: cp/constraint.cc:3862 #, gcc-internal-format msgid "" " %qT is not a reference that binds to a temporary object of type %qT " "(direct-initialization)" msgstr "" -#: cp/constraint.cc:3865 +#: cp/constraint.cc:3866 #, gcc-internal-format msgid "" " %qT is not a reference that binds to a temporary object of type %qT (copy-" "initialization)" msgstr "" -#: cp/constraint.cc:3869 +#: cp/constraint.cc:3870 #, gcc-internal-format msgid " %qD is not deducible from %qT" msgstr "" -#: cp/constraint.cc:3896 +#: cp/constraint.cc:3897 #, gcc-internal-format msgid "invalid constraints" msgstr "" -#: cp/constraint.cc:3921 +#: cp/constraint.cc:3922 #, gcc-internal-format msgid "constraint %qE has type %qT, not %<bool%>" msgstr "" -#: cp/constraint.cc:3924 +#: cp/constraint.cc:3925 #, gcc-internal-format msgid "the expression %qE evaluated to %<false%>" msgstr "" -#: cp/constraint.cc:3975 +#: cp/constraint.cc:3976 #, gcc-internal-format msgid "constraints not satisfied" msgstr "" -#: cp/constraint.cc:3990 +#: cp/constraint.cc:3991 #, gcc-internal-format msgid "set %qs to at least %d for more detail" msgstr "" @@ -57105,43 +57358,43 @@ msgid "" "to %<noexcept%>" msgstr "" -#: cp/cp-gimplify.cc:3604 +#: cp/cp-gimplify.cc:3614 #, gcc-internal-format msgid "ignoring attribute %qE after earlier %qE" msgstr "" -#: cp/cp-gimplify.cc:3646 +#: cp/cp-gimplify.cc:3656 #, gcc-internal-format msgid "pack expansion of %qE attribute" msgstr "" -#: cp/cp-gimplify.cc:3649 +#: cp/cp-gimplify.cc:3659 #, gcc-internal-format msgid "use fold expression in the attribute argument instead" msgstr "" -#: cp/cp-gimplify.cc:3688 cp/cp-gimplify.cc:3700 cp/decl.cc:4456 +#: cp/cp-gimplify.cc:3698 cp/cp-gimplify.cc:3710 cp/decl.cc:4456 #: cp/method.cc:984 #, gcc-internal-format msgid "%qD is not a type" msgstr "" -#: cp/cp-gimplify.cc:3706 +#: cp/cp-gimplify.cc:3716 #, gcc-internal-format msgid "%qD is not a class type" msgstr "" -#: cp/cp-gimplify.cc:3723 +#: cp/cp-gimplify.cc:3733 #, gcc-internal-format msgid "%qD does not have %<const char *%> type" msgstr "" -#: cp/cp-gimplify.cc:3733 +#: cp/cp-gimplify.cc:3743 #, gcc-internal-format msgid "%qD does not have integral type" msgstr "" -#: cp/cp-gimplify.cc:3745 +#: cp/cp-gimplify.cc:3755 #, gcc-internal-format msgid "" "%<std::source_location::__impl%> does not contain only non-static data " @@ -57184,7 +57437,7 @@ msgstr "" msgid "conversion from %qH to %qI discards qualifiers" msgstr "" -#: cp/cvt.cc:498 cp/typeck.cc:8825 +#: cp/cvt.cc:498 cp/typeck.cc:8826 #, gcc-internal-format msgid "casting %qT to %qT does not dereference pointer" msgstr "" @@ -57224,347 +57477,347 @@ msgstr "" msgid "conversion from %qH to non-scalar type %qI requested" msgstr "" -#: cp/cvt.cc:1074 +#: cp/cvt.cc:1088 #, gcc-internal-format msgid "" "ignoring return value of %qD, declared with attribute %<nodiscard%>: %<%s%>" msgstr "" -#: cp/cvt.cc:1076 +#: cp/cvt.cc:1090 #, gcc-internal-format msgid "ignoring return value of %qD, declared with attribute %<nodiscard%>%s" msgstr "" -#: cp/cvt.cc:1092 +#: cp/cvt.cc:1106 #, gcc-internal-format msgid "" "ignoring returned value of type %qT, declared with attribute %<nodiscard%>: " "%<%s%>" msgstr "" -#: cp/cvt.cc:1094 +#: cp/cvt.cc:1108 #, gcc-internal-format msgid "" "ignoring returned value of type %qT, declared with attribute %<nodiscard%>%s" msgstr "" -#: cp/cvt.cc:1116 +#: cp/cvt.cc:1130 #, gcc-internal-format msgid "" "ignoring return value of %qD, declared with attribute %<warn_unused_result%>" msgstr "" -#: cp/cvt.cc:1170 +#: cp/cvt.cc:1184 #, gcc-internal-format msgid "pseudo-destructor is not called" msgstr "" -#: cp/cvt.cc:1268 rust/backend/rust-tree.cc:339 +#: cp/cvt.cc:1282 rust/backend/rust-tree.cc:339 #, gcc-internal-format msgid "conversion to void will not access object of incomplete type %qT" msgstr "" -#: cp/cvt.cc:1272 rust/backend/rust-tree.cc:345 +#: cp/cvt.cc:1286 rust/backend/rust-tree.cc:345 #, gcc-internal-format msgid "" "indirection will not access object of incomplete type %qT in second operand " "of conditional expression" msgstr "" -#: cp/cvt.cc:1277 rust/backend/rust-tree.cc:352 +#: cp/cvt.cc:1291 rust/backend/rust-tree.cc:352 #, gcc-internal-format msgid "" "indirection will not access object of incomplete type %qT in third operand " "of conditional expression" msgstr "" -#: cp/cvt.cc:1282 rust/backend/rust-tree.cc:359 +#: cp/cvt.cc:1296 rust/backend/rust-tree.cc:359 #, gcc-internal-format msgid "" "indirection will not access object of incomplete type %qT in right operand " "of comma operator" msgstr "" -#: cp/cvt.cc:1287 rust/backend/rust-tree.cc:366 +#: cp/cvt.cc:1301 rust/backend/rust-tree.cc:366 #, gcc-internal-format msgid "" "indirection will not access object of incomplete type %qT in left operand of " "comma operator" msgstr "" -#: cp/cvt.cc:1292 rust/backend/rust-tree.cc:373 +#: cp/cvt.cc:1306 rust/backend/rust-tree.cc:373 #, gcc-internal-format msgid "indirection will not access object of incomplete type %qT in statement" msgstr "" -#: cp/cvt.cc:1296 rust/backend/rust-tree.cc:379 +#: cp/cvt.cc:1310 rust/backend/rust-tree.cc:379 #, gcc-internal-format msgid "" "indirection will not access object of incomplete type %qT in for increment " "expression" msgstr "" -#: cp/cvt.cc:1312 rust/backend/rust-tree.cc:396 +#: cp/cvt.cc:1326 rust/backend/rust-tree.cc:396 #, gcc-internal-format msgid "conversion to void will not access object of type %qT" msgstr "" -#: cp/cvt.cc:1316 rust/backend/rust-tree.cc:402 +#: cp/cvt.cc:1330 rust/backend/rust-tree.cc:402 #, gcc-internal-format msgid "" "implicit dereference will not access object of type %qT in second operand of " "conditional expression" msgstr "" -#: cp/cvt.cc:1321 rust/backend/rust-tree.cc:409 +#: cp/cvt.cc:1335 rust/backend/rust-tree.cc:409 #, gcc-internal-format msgid "" "implicit dereference will not access object of type %qT in third operand of " "conditional expression" msgstr "" -#: cp/cvt.cc:1326 rust/backend/rust-tree.cc:416 +#: cp/cvt.cc:1340 rust/backend/rust-tree.cc:416 #, gcc-internal-format msgid "" "implicit dereference will not access object of type %qT in right operand of " "comma operator" msgstr "" -#: cp/cvt.cc:1331 rust/backend/rust-tree.cc:423 +#: cp/cvt.cc:1345 rust/backend/rust-tree.cc:423 #, gcc-internal-format msgid "" "implicit dereference will not access object of type %qT in left operand of " "comma operator" msgstr "" -#: cp/cvt.cc:1336 rust/backend/rust-tree.cc:430 +#: cp/cvt.cc:1350 rust/backend/rust-tree.cc:430 #, gcc-internal-format msgid "implicit dereference will not access object of type %qT in statement" msgstr "" -#: cp/cvt.cc:1340 rust/backend/rust-tree.cc:436 +#: cp/cvt.cc:1354 rust/backend/rust-tree.cc:436 #, gcc-internal-format msgid "" "implicit dereference will not access object of type %qT in for increment " "expression" msgstr "" -#: cp/cvt.cc:1354 rust/backend/rust-tree.cc:450 +#: cp/cvt.cc:1368 rust/backend/rust-tree.cc:450 #, gcc-internal-format msgid "" "conversion to void will not access object of non-trivially-copyable type %qT" msgstr "" -#: cp/cvt.cc:1359 rust/backend/rust-tree.cc:456 +#: cp/cvt.cc:1373 rust/backend/rust-tree.cc:456 #, gcc-internal-format msgid "" "indirection will not access object of non-trivially-copyable type %qT in " "second operand of conditional expression" msgstr "" -#: cp/cvt.cc:1364 rust/backend/rust-tree.cc:463 +#: cp/cvt.cc:1378 rust/backend/rust-tree.cc:463 #, gcc-internal-format msgid "" "indirection will not access object of non-trivially-copyable type %qT in " "third operand of conditional expression" msgstr "" -#: cp/cvt.cc:1369 rust/backend/rust-tree.cc:470 +#: cp/cvt.cc:1383 rust/backend/rust-tree.cc:470 #, gcc-internal-format msgid "" "indirection will not access object of non-trivially-copyable type %qT in " "right operand of comma operator" msgstr "" -#: cp/cvt.cc:1374 rust/backend/rust-tree.cc:477 +#: cp/cvt.cc:1388 rust/backend/rust-tree.cc:477 #, gcc-internal-format msgid "" "indirection will not access object of non-trivially-copyable type %qT in " "left operand of comma operator" msgstr "" -#: cp/cvt.cc:1379 rust/backend/rust-tree.cc:484 +#: cp/cvt.cc:1393 rust/backend/rust-tree.cc:484 #, gcc-internal-format msgid "" "indirection will not access object of non-trivially-copyable type %qT in " "statement" msgstr "" -#: cp/cvt.cc:1384 rust/backend/rust-tree.cc:490 +#: cp/cvt.cc:1398 rust/backend/rust-tree.cc:490 #, gcc-internal-format msgid "" "indirection will not access object of non-trivially-copyable type %qT in for " "increment expression" msgstr "" -#: cp/cvt.cc:1426 rust/backend/rust-tree.cc:531 +#: cp/cvt.cc:1440 rust/backend/rust-tree.cc:531 #, gcc-internal-format msgid "conversion to void will not access object %qE of incomplete type %qT" msgstr "" -#: cp/cvt.cc:1430 rust/backend/rust-tree.cc:537 +#: cp/cvt.cc:1444 rust/backend/rust-tree.cc:537 #, gcc-internal-format msgid "" "variable %qE of incomplete type %qT will not be accessed in second operand " "of conditional expression" msgstr "" -#: cp/cvt.cc:1435 rust/backend/rust-tree.cc:544 +#: cp/cvt.cc:1449 rust/backend/rust-tree.cc:544 #, gcc-internal-format msgid "" "variable %qE of incomplete type %qT will not be accessed in third operand of " "conditional expression" msgstr "" -#: cp/cvt.cc:1440 rust/backend/rust-tree.cc:551 +#: cp/cvt.cc:1454 rust/backend/rust-tree.cc:551 #, gcc-internal-format msgid "" "variable %qE of incomplete type %qT will not be accessed in right operand of " "comma operator" msgstr "" -#: cp/cvt.cc:1445 rust/backend/rust-tree.cc:557 +#: cp/cvt.cc:1459 rust/backend/rust-tree.cc:557 #, gcc-internal-format msgid "" "variable %qE of incomplete type %qT will not be accessed in left operand of " "comma operator" msgstr "" -#: cp/cvt.cc:1450 rust/backend/rust-tree.cc:563 +#: cp/cvt.cc:1464 rust/backend/rust-tree.cc:563 #, gcc-internal-format msgid "variable %qE of incomplete type %qT will not be accessed in statement" msgstr "" -#: cp/cvt.cc:1454 rust/backend/rust-tree.cc:569 +#: cp/cvt.cc:1468 rust/backend/rust-tree.cc:569 #, gcc-internal-format msgid "" "variable %qE of incomplete type %qT will not be accessed in for increment " "expression" msgstr "" -#: cp/cvt.cc:1510 +#: cp/cvt.cc:1524 #, gcc-internal-format msgid "conversion to void cannot resolve address of overloaded function" msgstr "" -#: cp/cvt.cc:1514 +#: cp/cvt.cc:1528 #, gcc-internal-format msgid "" "second operand of conditional expression cannot resolve address of " "overloaded function" msgstr "" -#: cp/cvt.cc:1518 +#: cp/cvt.cc:1532 #, gcc-internal-format msgid "" "third operand of conditional expression cannot resolve address of overloaded " "function" msgstr "" -#: cp/cvt.cc:1522 +#: cp/cvt.cc:1536 #, gcc-internal-format msgid "" "right operand of comma operator cannot resolve address of overloaded function" msgstr "" -#: cp/cvt.cc:1526 +#: cp/cvt.cc:1540 #, gcc-internal-format msgid "" "left operand of comma operator cannot resolve address of overloaded function" msgstr "" -#: cp/cvt.cc:1530 +#: cp/cvt.cc:1544 #, gcc-internal-format msgid "statement cannot resolve address of overloaded function" msgstr "" -#: cp/cvt.cc:1534 +#: cp/cvt.cc:1548 #, gcc-internal-format msgid "for increment expression cannot resolve address of overloaded function" msgstr "" -#: cp/cvt.cc:1550 +#: cp/cvt.cc:1564 #, gcc-internal-format msgid "" "second operand of conditional expression is a reference, not call, to " "function %qE" msgstr "" -#: cp/cvt.cc:1555 +#: cp/cvt.cc:1569 #, gcc-internal-format msgid "" "third operand of conditional expression is a reference, not call, to " "function %qE" msgstr "" -#: cp/cvt.cc:1560 +#: cp/cvt.cc:1574 #, gcc-internal-format msgid "" "right operand of comma operator is a reference, not call, to function %qE" msgstr "" -#: cp/cvt.cc:1565 +#: cp/cvt.cc:1579 #, gcc-internal-format msgid "" "left operand of comma operator is a reference, not call, to function %qE" msgstr "" -#: cp/cvt.cc:1570 +#: cp/cvt.cc:1584 #, gcc-internal-format msgid "statement is a reference, not call, to function %qE" msgstr "" -#: cp/cvt.cc:1575 +#: cp/cvt.cc:1589 #, gcc-internal-format msgid "for increment expression is a reference, not call, to function %qE" msgstr "" -#: cp/cvt.cc:1604 +#: cp/cvt.cc:1618 #, gcc-internal-format msgid "second operand of conditional expression has no effect" msgstr "" -#: cp/cvt.cc:1609 +#: cp/cvt.cc:1623 #, gcc-internal-format msgid "third operand of conditional expression has no effect" msgstr "" -#: cp/cvt.cc:1614 +#: cp/cvt.cc:1628 #, gcc-internal-format msgid "right operand of comma operator has no effect" msgstr "" -#: cp/cvt.cc:1618 +#: cp/cvt.cc:1632 #, gcc-internal-format msgid "left operand of comma operator has no effect" msgstr "" -#: cp/cvt.cc:1622 +#: cp/cvt.cc:1636 #, gcc-internal-format msgid "statement has no effect" msgstr "" -#: cp/cvt.cc:1626 +#: cp/cvt.cc:1640 #, gcc-internal-format msgid "for increment expression has no effect" msgstr "" -#: cp/cvt.cc:1779 +#: cp/cvt.cc:1793 #, gcc-internal-format msgid "converting NULL to non-pointer type" msgstr "" -#: cp/cvt.cc:1897 +#: cp/cvt.cc:1911 #, gcc-internal-format msgid "default type conversion cannot deduce template argument for %qD" msgstr "" -#: cp/cvt.cc:1912 +#: cp/cvt.cc:1926 #, gcc-internal-format msgid "ambiguous default type conversion from %qT" msgstr "" -#: cp/cvt.cc:1915 +#: cp/cvt.cc:1929 #, gcc-internal-format msgid " candidate conversions include %qD and %qD" msgstr "" @@ -57629,7 +57882,7 @@ msgstr "" msgid "redeclaration %qD differs in %qs from previous declaration" msgstr "" -#: cp/decl.cc:1446 cp/decl.cc:16605 +#: cp/decl.cc:1446 cp/decl.cc:16614 #, gcc-internal-format msgid "previous declaration %qD" msgstr "" @@ -57862,12 +58115,12 @@ msgstr "" msgid "import declared %q#D here" msgstr "" -#: cp/decl.cc:2306 cp/decl.cc:16628 +#: cp/decl.cc:2306 cp/decl.cc:16637 #, gcc-internal-format msgid "conflicting exporting for declaration %qD" msgstr "" -#: cp/decl.cc:2308 cp/decl.cc:16630 +#: cp/decl.cc:2308 cp/decl.cc:16639 #, gcc-internal-format msgid "previously declared here without exporting" msgstr "" @@ -58336,7 +58589,8 @@ msgstr "" #: cp/decl.cc:6097 #, gcc-internal-format -msgid "block-scope extern declaration %q#D not permitted in module purview" +msgid "" +"block-scope extern declaration %q#D must not be attached to a named module" msgstr "" #: cp/decl.cc:6133 @@ -58484,7 +58738,7 @@ msgstr "" msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT" msgstr "" -#: cp/decl.cc:7044 cp/init.cc:3377 cp/search.cc:1230 +#: cp/decl.cc:7044 cp/init.cc:3407 cp/search.cc:1230 #, gcc-internal-format msgid "request for member %qD is ambiguous" msgstr "" @@ -58509,8 +58763,8 @@ msgstr "" msgid "C99 designator %qE outside aggregate initializer" msgstr "" -#: cp/decl.cc:7218 cp/decl.cc:7506 cp/typeck2.cc:1617 cp/typeck2.cc:1947 -#: cp/typeck2.cc:1995 cp/typeck2.cc:2042 +#: cp/decl.cc:7218 cp/decl.cc:7506 cp/typeck2.cc:1616 cp/typeck2.cc:1946 +#: cp/typeck2.cc:1994 cp/typeck2.cc:2041 #, gcc-internal-format msgid "too many initializers for %qT" msgstr "" @@ -58586,1970 +58840,1970 @@ msgstr "" msgid "(an out of class initialization is required)" msgstr "" -#: cp/decl.cc:8083 +#: cp/decl.cc:8079 #, gcc-internal-format msgid "reference %qD is initialized with itself" msgstr "" -#: cp/decl.cc:8342 +#: cp/decl.cc:8338 #, gcc-internal-format msgid "could not find variant declaration" msgstr "" -#: cp/decl.cc:8366 +#: cp/decl.cc:8362 #, gcc-internal-format msgid "%<declare variant%> on constructor %qD" msgstr "" -#: cp/decl.cc:8371 +#: cp/decl.cc:8367 #, gcc-internal-format msgid "%<declare variant%> on destructor %qD" msgstr "" -#: cp/decl.cc:8376 +#: cp/decl.cc:8372 #, gcc-internal-format msgid "%<declare variant%> on defaulted %qD" msgstr "" -#: cp/decl.cc:8381 +#: cp/decl.cc:8377 #, gcc-internal-format msgid "%<declare variant%> on deleted %qD" msgstr "" -#: cp/decl.cc:8386 +#: cp/decl.cc:8382 #, gcc-internal-format msgid "%<declare variant%> on virtual %qD" msgstr "" -#: cp/decl.cc:8440 +#: cp/decl.cc:8436 #, gcc-internal-format msgid "assignment (not initialization) in declaration" msgstr "" -#: cp/decl.cc:8461 cp/decl.cc:15224 +#: cp/decl.cc:8457 cp/decl.cc:15228 #, gcc-internal-format msgid "ISO C++17 does not allow %<register%> storage class specifier" msgstr "" -#: cp/decl.cc:8465 cp/decl.cc:15228 +#: cp/decl.cc:8461 cp/decl.cc:15232 #, gcc-internal-format msgid "%<register%> storage class specifier used" msgstr "" -#: cp/decl.cc:8510 cp/decl.cc:15191 +#: cp/decl.cc:8506 cp/decl.cc:15195 #, gcc-internal-format msgid "declaration of %q#D has no initializer" msgstr "" -#: cp/decl.cc:8546 +#: cp/decl.cc:8542 #, gcc-internal-format msgid "" "initializer for %<decltype(auto) %D%> has function type; did you forget the " "%<()%>?" msgstr "" -#: cp/decl.cc:8557 +#: cp/decl.cc:8553 #, gcc-internal-format msgid "deduced type %qT for %qD is incomplete" msgstr "" -#: cp/decl.cc:8695 +#: cp/decl.cc:8691 #, gcc-internal-format msgid "variable concept has no initializer" msgstr "" -#: cp/decl.cc:8754 +#: cp/decl.cc:8750 #, gcc-internal-format msgid "shadowing previous type declaration of %q#D" msgstr "" -#: cp/decl.cc:8797 +#: cp/decl.cc:8793 #, gcc-internal-format msgid "" "%<constinit%> can only be applied to a variable with static or thread " "storage duration" msgstr "" -#: cp/decl.cc:8992 +#: cp/decl.cc:8988 #, gcc-internal-format msgid "function %q#D is initialized like a variable" msgstr "" -#: cp/decl.cc:9103 +#: cp/decl.cc:9099 #, gcc-internal-format msgid "" "cannot decompose class type %qT because it has an anonymous struct member" msgstr "" -#: cp/decl.cc:9106 +#: cp/decl.cc:9102 #, gcc-internal-format msgid "" "cannot decompose class type %qT because it has an anonymous union member" msgstr "" -#: cp/decl.cc:9113 +#: cp/decl.cc:9109 #, gcc-internal-format msgid "cannot decompose inaccessible member %qD of %qT" msgstr "" -#: cp/decl.cc:9139 +#: cp/decl.cc:9135 #, gcc-internal-format msgid "" "cannot decompose class type %qT: both it and its base class %qT have non-" "static data members" msgstr "" -#: cp/decl.cc:9148 +#: cp/decl.cc:9144 #, gcc-internal-format msgid "" "cannot decompose class type %qT: its base classes %qT and %qT have non-" "static data members" msgstr "" -#: cp/decl.cc:9383 +#: cp/decl.cc:9381 #, gcc-internal-format msgid "structured binding refers to incomplete type %qT" msgstr "" -#: cp/decl.cc:9399 +#: cp/decl.cc:9397 #, gcc-internal-format msgid "cannot decompose variable length array %qT" msgstr "" -#: cp/decl.cc:9408 cp/decl.cc:9487 +#: cp/decl.cc:9406 cp/decl.cc:9485 #, gcc-internal-format, gfc-internal-format msgid "%u name provided for structured binding" msgid_plural "%u names provided for structured binding" msgstr[0] "" msgstr[1] "" -#: cp/decl.cc:9412 +#: cp/decl.cc:9410 #, gcc-internal-format, gfc-internal-format msgid "only %u name provided for structured binding" msgid_plural "only %u names provided for structured binding" msgstr[0] "" msgstr[1] "" -#: cp/decl.cc:9415 +#: cp/decl.cc:9413 #, gcc-internal-format msgid "while %qT decomposes into %wu element" msgid_plural "while %qT decomposes into %wu elements" msgstr[0] "" msgstr[1] "" -#: cp/decl.cc:9456 +#: cp/decl.cc:9454 #, gcc-internal-format msgid "cannot decompose variable length vector %qT" msgstr "" -#: cp/decl.cc:9480 +#: cp/decl.cc:9478 #, gcc-internal-format msgid "%<std::tuple_size<%T>::value%> is not an integral constant expression" msgstr "" -#: cp/decl.cc:9489 +#: cp/decl.cc:9487 #, gcc-internal-format msgid "while %qT decomposes into %E elements" msgstr "" -#: cp/decl.cc:9510 +#: cp/decl.cc:9508 #, gcc-internal-format msgid "%<std::tuple_element<%u, %T>::type%> is %<void%>" msgstr "" -#: cp/decl.cc:9516 +#: cp/decl.cc:9514 #, gcc-internal-format msgid "in initialization of structured binding variable %qD" msgstr "" -#: cp/decl.cc:9545 +#: cp/decl.cc:9543 #, gcc-internal-format msgid "cannot decompose union type %qT" msgstr "" -#: cp/decl.cc:9550 +#: cp/decl.cc:9548 #, gcc-internal-format msgid "cannot decompose non-array non-class type %qT" msgstr "" -#: cp/decl.cc:9555 +#: cp/decl.cc:9553 #, gcc-internal-format msgid "cannot decompose lambda closure type %qT" msgstr "" -#: cp/decl.cc:9561 +#: cp/decl.cc:9559 #, gcc-internal-format msgid "structured binding refers to incomplete class type %qT" msgstr "" -#: cp/decl.cc:9570 +#: cp/decl.cc:9568 #, gcc-internal-format msgid "cannot decompose class type %qT without non-static data members" msgstr "" -#: cp/decl.cc:10048 +#: cp/decl.cc:10046 #, gcc-internal-format msgid "" "non-local variable %qD declared %<__thread%> needs dynamic initialization" msgstr "" -#: cp/decl.cc:10051 +#: cp/decl.cc:10049 #, gcc-internal-format msgid "" "non-local variable %qD declared %<__thread%> has a non-trivial destructor" msgstr "" -#: cp/decl.cc:10056 +#: cp/decl.cc:10054 #, gcc-internal-format msgid "C++11 %<thread_local%> allows dynamic initialization and destruction" msgstr "" -#: cp/decl.cc:10275 +#: cp/decl.cc:10273 #, gcc-internal-format msgid "initializer fails to determine size of %qT" msgstr "" -#: cp/decl.cc:10279 +#: cp/decl.cc:10277 #, gcc-internal-format msgid "array size missing in %qT" msgstr "" -#: cp/decl.cc:10282 +#: cp/decl.cc:10280 #, gcc-internal-format msgid "zero-size array %qT" msgstr "" -#: cp/decl.cc:10298 +#: cp/decl.cc:10296 #, gcc-internal-format msgid "destructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.cc:10300 +#: cp/decl.cc:10298 #, gcc-internal-format msgid "constructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.cc:10326 +#: cp/decl.cc:10324 #, gcc-internal-format msgid "%qD declared as a %<virtual%> variable" msgstr "" -#: cp/decl.cc:10328 +#: cp/decl.cc:10326 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in variable " "declaration" msgstr "" -#: cp/decl.cc:10334 +#: cp/decl.cc:10332 #, gcc-internal-format msgid "%qD declared as a %<virtual%> parameter" msgstr "" -#: cp/decl.cc:10337 +#: cp/decl.cc:10335 #, gcc-internal-format msgid "%qD declared as an %<inline%> parameter" msgstr "" -#: cp/decl.cc:10339 +#: cp/decl.cc:10337 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in parameter " "declaration" msgstr "" -#: cp/decl.cc:10345 +#: cp/decl.cc:10343 #, gcc-internal-format msgid "%qD declared as a %<virtual%> type" msgstr "" -#: cp/decl.cc:10348 +#: cp/decl.cc:10346 #, gcc-internal-format msgid "%qD declared as an %<inline%> type" msgstr "" -#: cp/decl.cc:10350 +#: cp/decl.cc:10348 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in type " "declaration" msgstr "" -#: cp/decl.cc:10356 +#: cp/decl.cc:10354 #, gcc-internal-format msgid "%qD declared as a %<virtual%> field" msgstr "" -#: cp/decl.cc:10359 +#: cp/decl.cc:10357 #, gcc-internal-format msgid "%qD declared as an %<inline%> field" msgstr "" -#: cp/decl.cc:10361 +#: cp/decl.cc:10359 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in field " "declaration" msgstr "" -#: cp/decl.cc:10368 +#: cp/decl.cc:10366 #, gcc-internal-format msgid "%q+D declared as a friend" msgstr "" -#: cp/decl.cc:10375 +#: cp/decl.cc:10373 #, gcc-internal-format msgid "%q+D declared with an exception specification" msgstr "" -#: cp/decl.cc:10407 +#: cp/decl.cc:10405 #, gcc-internal-format msgid "definition of %qD is not in namespace enclosing %qT" msgstr "" -#: cp/decl.cc:10447 +#: cp/decl.cc:10445 #, gcc-internal-format msgid "static member function %q#D declared with type qualifiers" msgstr "" -#: cp/decl.cc:10458 +#: cp/decl.cc:10456 #, gcc-internal-format msgid "concept %q#D declared with function parameters" msgstr "" -#: cp/decl.cc:10465 +#: cp/decl.cc:10463 #, gcc-internal-format msgid "concept %q#D declared with a deduced return type" msgstr "" -#: cp/decl.cc:10468 +#: cp/decl.cc:10466 #, gcc-internal-format msgid "concept %q#D with non-%<bool%> return type %qT" msgstr "" -#: cp/decl.cc:10544 +#: cp/decl.cc:10542 #, gcc-internal-format msgid "concept %qD has no definition" msgstr "" -#: cp/decl.cc:10573 +#: cp/decl.cc:10571 #, gcc-internal-format msgid "a function concept cannot be constrained" msgstr "" -#: cp/decl.cc:10588 +#: cp/decl.cc:10586 #, gcc-internal-format msgid "constraints on a non-templated function" msgstr "" -#: cp/decl.cc:10590 +#: cp/decl.cc:10588 #, gcc-internal-format msgid "constrained non-template friend declaration must be a definition" msgstr "" -#: cp/decl.cc:10597 +#: cp/decl.cc:10595 #, gcc-internal-format msgid "" "friend function template with constraints that depend on outer template " "parameters must be a definition" msgstr "" -#: cp/decl.cc:10646 +#: cp/decl.cc:10644 #, gcc-internal-format msgid "defining explicit specialization %qD in friend declaration" msgstr "" -#: cp/decl.cc:10657 +#: cp/decl.cc:10655 #, gcc-internal-format msgid "invalid use of template-id %qD in declaration of primary template" msgstr "" -#: cp/decl.cc:10675 +#: cp/decl.cc:10673 #, gcc-internal-format msgid "" "default arguments are not allowed in declaration of friend template " "specialization %qD" msgstr "" -#: cp/decl.cc:10684 +#: cp/decl.cc:10682 #, gcc-internal-format msgid "" "%<inline%> is not allowed in declaration of friend template specialization " "%qD" msgstr "" -#: cp/decl.cc:10701 +#: cp/decl.cc:10699 #, gcc-internal-format msgid "" "friend declaration of %qD specifies default arguments and isn%'t a definition" msgstr "" -#: cp/decl.cc:10743 +#: cp/decl.cc:10741 #, gcc-internal-format msgid "cannot declare %<::main%> to be a template" msgstr "" -#: cp/decl.cc:10746 +#: cp/decl.cc:10744 #, gcc-internal-format msgid "cannot declare %<::main%> to be inline" msgstr "" -#: cp/decl.cc:10749 cp/decl.cc:10752 +#: cp/decl.cc:10747 cp/decl.cc:10750 #, gcc-internal-format msgid "cannot declare %<::main%> to be %qs" msgstr "" -#: cp/decl.cc:10754 +#: cp/decl.cc:10752 #, gcc-internal-format msgid "cannot declare %<::main%> to be static" msgstr "" -#: cp/decl.cc:10815 +#: cp/decl.cc:10819 #, gcc-internal-format msgid "non-member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.cc:10817 +#: cp/decl.cc:10821 #, gcc-internal-format msgid "static member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.cc:10818 +#: cp/decl.cc:10822 #, gcc-internal-format msgid "explicit object member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.cc:10823 +#: cp/decl.cc:10827 #, gcc-internal-format msgid "non-member function %qD cannot have ref-qualifier" msgstr "" -#: cp/decl.cc:10825 +#: cp/decl.cc:10829 #, gcc-internal-format msgid "static member function %qD cannot have ref-qualifier" msgstr "" -#: cp/decl.cc:10826 +#: cp/decl.cc:10830 #, gcc-internal-format msgid "explicit object member function %qD cannot have ref-qualifier" msgstr "" -#: cp/decl.cc:10832 cp/decl.cc:13715 cp/decl.cc:13725 cp/parser.cc:11972 +#: cp/decl.cc:10836 cp/decl.cc:13719 cp/decl.cc:13729 cp/parser.cc:11972 #, gcc-internal-format msgid "explicit object parameter declared here" msgstr "" -#: cp/decl.cc:10844 +#: cp/decl.cc:10848 #, gcc-internal-format msgid "deduction guide %qD must be declared in the same scope as %qT" msgstr "" -#: cp/decl.cc:10852 +#: cp/decl.cc:10856 #, gcc-internal-format msgid "deduction guide %qD must have the same access as %qT" msgstr "" -#: cp/decl.cc:10858 +#: cp/decl.cc:10862 #, gcc-internal-format msgid "deduction guide %qD must not have a function body" msgstr "" -#: cp/decl.cc:10871 +#: cp/decl.cc:10875 #, gcc-internal-format msgid "literal operator with C linkage" msgstr "" -#: cp/decl.cc:10881 +#: cp/decl.cc:10885 #, gcc-internal-format msgid "%qD has invalid argument list" msgstr "" -#: cp/decl.cc:10889 +#: cp/decl.cc:10893 #, gcc-internal-format msgid "integer suffix %qs shadowed by implementation" msgstr "" -#: cp/decl.cc:10895 +#: cp/decl.cc:10899 #, gcc-internal-format msgid "floating-point suffix %qs shadowed by implementation" msgstr "" -#: cp/decl.cc:10902 +#: cp/decl.cc:10906 #, gcc-internal-format msgid "" "literal operator suffixes not preceded by %<_%> are reserved for future " "standardization" msgstr "" -#: cp/decl.cc:10907 +#: cp/decl.cc:10911 #, gcc-internal-format msgid "%qD must be a non-member function" msgstr "" -#: cp/decl.cc:10993 +#: cp/decl.cc:10997 #, gcc-internal-format msgid "%<::main%> must return %<int%>" msgstr "" -#: cp/decl.cc:11033 +#: cp/decl.cc:11037 #, gcc-internal-format msgid "definition of implicitly-declared %qD" msgstr "" -#: cp/decl.cc:11038 +#: cp/decl.cc:11042 #, gcc-internal-format msgid "definition of explicitly-defaulted %q+D" msgstr "" -#: cp/decl.cc:11040 +#: cp/decl.cc:11044 #, gcc-internal-format msgid "%q#D explicitly defaulted here" msgstr "" -#: cp/decl.cc:11057 +#: cp/decl.cc:11061 #, gcc-internal-format msgid "no %q#D member function declared in class %qT" msgstr "" -#: cp/decl.cc:11251 +#: cp/decl.cc:11255 #, gcc-internal-format msgid "cannot declare %<::main%> to be a global variable" msgstr "" -#: cp/decl.cc:11260 +#: cp/decl.cc:11264 #, gcc-internal-format msgid "a non-template variable cannot be %<concept%>" msgstr "" -#: cp/decl.cc:11266 +#: cp/decl.cc:11270 #, gcc-internal-format msgid "concept must be defined at namespace scope" msgstr "" -#: cp/decl.cc:11273 +#: cp/decl.cc:11277 #, gcc-internal-format msgid "concept must have type %<bool%>" msgstr "" -#: cp/decl.cc:11276 +#: cp/decl.cc:11280 #, gcc-internal-format msgid "a variable concept cannot be constrained" msgstr "" -#: cp/decl.cc:11398 +#: cp/decl.cc:11402 #, gcc-internal-format msgid "in-class initialization of static data member %q#D of incomplete type" msgstr "" -#: cp/decl.cc:11402 +#: cp/decl.cc:11406 #, gcc-internal-format msgid "" "%<constexpr%> needed for in-class initialization of static data member %q#D " "of non-integral type" msgstr "" -#: cp/decl.cc:11406 +#: cp/decl.cc:11410 #, gcc-internal-format msgid "in-class initialization of static data member %q#D of non-literal type" msgstr "" -#: cp/decl.cc:11417 +#: cp/decl.cc:11421 #, gcc-internal-format msgid "" "invalid in-class initialization of static data member of non-integral type " "%qT" msgstr "" -#: cp/decl.cc:11422 +#: cp/decl.cc:11426 #, gcc-internal-format msgid "ISO C++ forbids in-class initialization of non-const static member %qD" msgstr "" -#: cp/decl.cc:11427 +#: cp/decl.cc:11431 #, gcc-internal-format msgid "" "ISO C++ forbids initialization of member constant %qD of non-integral type " "%qT" msgstr "" -#: cp/decl.cc:11538 +#: cp/decl.cc:11542 #, gcc-internal-format msgid "size of array %qD has non-integral type %qT" msgstr "" -#: cp/decl.cc:11541 +#: cp/decl.cc:11545 #, gcc-internal-format msgid "size of array has non-integral type %qT" msgstr "" -#: cp/decl.cc:11572 cp/decl.cc:11644 +#: cp/decl.cc:11576 cp/decl.cc:11648 #, gcc-internal-format msgid "size of array %qD is not an integral constant-expression" msgstr "" -#: cp/decl.cc:11576 cp/decl.cc:11647 +#: cp/decl.cc:11580 cp/decl.cc:11651 #, gcc-internal-format msgid "size of array is not an integral constant-expression" msgstr "" -#: cp/decl.cc:11627 +#: cp/decl.cc:11631 #, gcc-internal-format msgid "ISO C++ forbids zero-size array %qD" msgstr "" -#: cp/decl.cc:11630 +#: cp/decl.cc:11634 #, gcc-internal-format msgid "ISO C++ forbids zero-size array" msgstr "" -#: cp/decl.cc:11654 +#: cp/decl.cc:11658 #, gcc-internal-format msgid "ISO C++ forbids variable length array %qD" msgstr "" -#: cp/decl.cc:11657 +#: cp/decl.cc:11661 #, gcc-internal-format msgid "ISO C++ forbids variable length array" msgstr "" -#: cp/decl.cc:11663 +#: cp/decl.cc:11667 #, gcc-internal-format msgid "variable length array %qD is used" msgstr "" -#: cp/decl.cc:11666 +#: cp/decl.cc:11670 #, gcc-internal-format msgid "variable length array is used" msgstr "" -#: cp/decl.cc:11718 +#: cp/decl.cc:11722 #, gcc-internal-format msgid "overflow in array dimension" msgstr "" -#: cp/decl.cc:11778 +#: cp/decl.cc:11782 #, gcc-internal-format msgid "%qD declared as array of template placeholder type %qT" msgstr "" -#: cp/decl.cc:11781 +#: cp/decl.cc:11785 #, gcc-internal-format msgid "creating array of template placeholder type %qT" msgstr "" -#: cp/decl.cc:11791 +#: cp/decl.cc:11795 #, gcc-internal-format msgid "declaration of %qD as array of void" msgstr "" -#: cp/decl.cc:11793 +#: cp/decl.cc:11797 #, gcc-internal-format msgid "creating array of void" msgstr "" -#: cp/decl.cc:11798 +#: cp/decl.cc:11802 #, gcc-internal-format msgid "declaration of %qD as array of functions" msgstr "" -#: cp/decl.cc:11800 +#: cp/decl.cc:11804 #, gcc-internal-format msgid "creating array of functions" msgstr "" -#: cp/decl.cc:11805 +#: cp/decl.cc:11809 #, gcc-internal-format msgid "declaration of %qD as array of references" msgstr "" -#: cp/decl.cc:11807 +#: cp/decl.cc:11811 #, gcc-internal-format msgid "creating array of references" msgstr "" -#: cp/decl.cc:11812 +#: cp/decl.cc:11816 #, gcc-internal-format msgid "declaration of %qD as array of function members" msgstr "" -#: cp/decl.cc:11815 +#: cp/decl.cc:11819 #, gcc-internal-format msgid "creating array of function members" msgstr "" -#: cp/decl.cc:11833 +#: cp/decl.cc:11837 #, gcc-internal-format msgid "" "declaration of %qD as multidimensional array must have bounds for all " "dimensions except the first" msgstr "" -#: cp/decl.cc:11837 +#: cp/decl.cc:11841 #, gcc-internal-format msgid "" "multidimensional array must have bounds for all dimensions except the first" msgstr "" -#: cp/decl.cc:11851 +#: cp/decl.cc:11855 #, gcc-internal-format msgid "variable-length array of %<auto%>" msgstr "" -#: cp/decl.cc:11927 +#: cp/decl.cc:11931 #, gcc-internal-format msgid "return type specification for constructor invalid" msgstr "" -#: cp/decl.cc:11930 +#: cp/decl.cc:11934 #, gcc-internal-format msgid "qualifiers are not allowed on constructor declaration" msgstr "" -#: cp/decl.cc:11941 +#: cp/decl.cc:11945 #, gcc-internal-format msgid "return type specification for destructor invalid" msgstr "" -#: cp/decl.cc:11944 +#: cp/decl.cc:11948 #, gcc-internal-format msgid "qualifiers are not allowed on destructor declaration" msgstr "" -#: cp/decl.cc:11957 +#: cp/decl.cc:11961 #, gcc-internal-format msgid "return type specified for %<operator %T%>" msgstr "" -#: cp/decl.cc:11960 +#: cp/decl.cc:11964 #, gcc-internal-format msgid "qualifiers are not allowed on declaration of %<operator %T%>" msgstr "" -#: cp/decl.cc:11969 +#: cp/decl.cc:11973 #, gcc-internal-format msgid "return type specified for deduction guide" msgstr "" -#: cp/decl.cc:11972 +#: cp/decl.cc:11976 #, gcc-internal-format msgid "qualifiers are not allowed on declaration of deduction guide" msgstr "" -#: cp/decl.cc:11976 +#: cp/decl.cc:11980 #, gcc-internal-format msgid "template template parameter %qT in declaration of deduction guide" msgstr "" -#: cp/decl.cc:11985 +#: cp/decl.cc:11989 #, gcc-internal-format msgid "%<decl-specifier%> in declaration of deduction guide" msgstr "" -#: cp/decl.cc:12006 +#: cp/decl.cc:12010 #, gcc-internal-format msgid "unnamed variable or field declared void" msgstr "" -#: cp/decl.cc:12014 +#: cp/decl.cc:12018 #, gcc-internal-format msgid "variable or field declared void" msgstr "" -#: cp/decl.cc:12029 +#: cp/decl.cc:12033 #, gcc-internal-format msgid "%<inline%> specifier invalid for variable %qD declared at block scope" msgstr "" -#: cp/decl.cc:12034 +#: cp/decl.cc:12038 #, gcc-internal-format msgid "" "inline variables are only available with %<-std=c++17%> or %<-std=gnu++17%>" msgstr "" -#: cp/decl.cc:12090 +#: cp/decl.cc:12094 #, gcc-internal-format msgid "%qT as type rather than plain %<decltype(auto)%>" msgstr "" -#: cp/decl.cc:12096 +#: cp/decl.cc:12100 #, gcc-internal-format msgid "%<decltype(auto)%> cannot be cv-qualified" msgstr "" -#: cp/decl.cc:12312 +#: cp/decl.cc:12316 #, gcc-internal-format msgid "invalid use of qualified-name %<::%D%>" msgstr "" -#: cp/decl.cc:12315 cp/decl.cc:12337 +#: cp/decl.cc:12319 cp/decl.cc:12341 #, gcc-internal-format msgid "invalid use of qualified-name %<%T::%D%>" msgstr "" -#: cp/decl.cc:12318 +#: cp/decl.cc:12322 #, gcc-internal-format msgid "invalid use of qualified-name %<%D::%D%>" msgstr "" -#: cp/decl.cc:12328 +#: cp/decl.cc:12332 #, gcc-internal-format msgid "%q#T is not a class or namespace" msgstr "" -#: cp/decl.cc:12352 +#: cp/decl.cc:12356 #, gcc-internal-format msgid "declaration of %qE as non-function" msgstr "" -#: cp/decl.cc:12359 +#: cp/decl.cc:12363 #, gcc-internal-format msgid "declaration of %qE as non-member" msgstr "" -#: cp/decl.cc:12387 +#: cp/decl.cc:12391 #, gcc-internal-format msgid "declarator-id missing; using reserved word %qD" msgstr "" -#: cp/decl.cc:12438 +#: cp/decl.cc:12442 #, gcc-internal-format msgid "function definition does not declare parameters" msgstr "" -#: cp/decl.cc:12446 cp/decl.cc:12455 cp/decl.cc:14434 +#: cp/decl.cc:12450 cp/decl.cc:12459 cp/decl.cc:14438 #, gcc-internal-format msgid "declaration of %qD as non-function" msgstr "" -#: cp/decl.cc:12463 +#: cp/decl.cc:12467 #, gcc-internal-format msgid "declaration of %qD as %<typedef%>" msgstr "" -#: cp/decl.cc:12468 +#: cp/decl.cc:12472 #, gcc-internal-format msgid "declaration of %qD as parameter" msgstr "" -#: cp/decl.cc:12503 +#: cp/decl.cc:12507 #, gcc-internal-format msgid "both %qs and %qs specified" msgstr "" -#: cp/decl.cc:12510 cp/decl.cc:12517 cp/decl.cc:12524 cp/decl.cc:12531 +#: cp/decl.cc:12514 cp/decl.cc:12521 cp/decl.cc:12528 cp/decl.cc:12535 #, gcc-internal-format msgid "%qs cannot appear in a typedef declaration" msgstr "" -#: cp/decl.cc:12542 +#: cp/decl.cc:12546 #, gcc-internal-format msgid "can use at most one of the %<constinit%> and %<constexpr%> specifiers" msgstr "" -#: cp/decl.cc:12552 +#: cp/decl.cc:12556 #, gcc-internal-format msgid "two or more data types in declaration of %qs" msgstr "" -#: cp/decl.cc:12606 +#: cp/decl.cc:12610 #, gcc-internal-format msgid "ISO C++ does not support plain %<complex%> meaning %<double complex%>" msgstr "" -#: cp/decl.cc:12655 cp/decl.cc:12659 cp/decl.cc:12662 +#: cp/decl.cc:12659 cp/decl.cc:12663 cp/decl.cc:12666 #, gcc-internal-format msgid "ISO C++ forbids declaration of %qs with no type" msgstr "" -#: cp/decl.cc:12679 +#: cp/decl.cc:12683 #, gcc-internal-format msgid "%<__int%d%> is not supported by this target" msgstr "" -#: cp/decl.cc:12687 +#: cp/decl.cc:12691 #, gcc-internal-format msgid "ISO C++ does not support %<__int%d%> for %qs" msgstr "" -#: cp/decl.cc:12741 +#: cp/decl.cc:12745 #, gcc-internal-format msgid "%<signed%> and %<unsigned%> specified together" msgstr "" -#: cp/decl.cc:12747 +#: cp/decl.cc:12751 #, gcc-internal-format msgid "%<long%> and %<short%> specified together" msgstr "" -#: cp/decl.cc:12755 +#: cp/decl.cc:12759 #, gcc-internal-format msgid "%qs specified with %qT" msgstr "" -#: cp/decl.cc:12762 +#: cp/decl.cc:12766 #, gcc-internal-format msgid "%qs specified with typedef-name %qD" msgstr "" -#: cp/decl.cc:12771 +#: cp/decl.cc:12775 #, gcc-internal-format msgid "%qs specified with %<decltype%>" msgstr "" -#: cp/decl.cc:12773 +#: cp/decl.cc:12777 #, gcc-internal-format msgid "%qs specified with %<typeof%>" msgstr "" -#: cp/decl.cc:12842 +#: cp/decl.cc:12846 #, gcc-internal-format msgid "complex invalid for %qs" msgstr "" -#: cp/decl.cc:12886 +#: cp/decl.cc:12890 #, gcc-internal-format msgid "" "missing template argument list after %qE; for deduction, template " "placeholder must be followed by a simple declarator-id" msgstr "" -#: cp/decl.cc:12912 +#: cp/decl.cc:12916 #, gcc-internal-format msgid "member %qD cannot be declared both %<virtual%> and %<static%>" msgstr "" -#: cp/decl.cc:12921 +#: cp/decl.cc:12925 #, gcc-internal-format msgid "" "member %qD can be declared both %<virtual%> and %<constexpr%> only in %<-" "std=c++20%> or %<-std=gnu++20%>" msgstr "" -#: cp/decl.cc:12934 +#: cp/decl.cc:12938 #, gcc-internal-format msgid "typedef declaration invalid in parameter declaration" msgstr "" -#: cp/decl.cc:12941 +#: cp/decl.cc:12945 #, gcc-internal-format msgid "storage class specified for template parameter %qs" msgstr "" -#: cp/decl.cc:12951 cp/decl.cc:13128 +#: cp/decl.cc:12955 cp/decl.cc:13132 #, gcc-internal-format msgid "storage class specified for parameter %qs" msgstr "" -#: cp/decl.cc:12959 cp/decl.cc:12968 cp/decl.cc:12974 cp/decl.cc:12980 +#: cp/decl.cc:12963 cp/decl.cc:12972 cp/decl.cc:12978 cp/decl.cc:12984 #, gcc-internal-format msgid "a parameter cannot be declared %qs" msgstr "" -#: cp/decl.cc:12990 +#: cp/decl.cc:12994 #, gcc-internal-format msgid "%<virtual%> outside class declaration" msgstr "" -#: cp/decl.cc:13000 cp/decl.cc:13003 cp/decl.cc:13005 cp/decl.cc:13008 -#: cp/decl.cc:13018 cp/decl.cc:13028 cp/decl.cc:13038 cp/decl.cc:13042 +#: cp/decl.cc:13004 cp/decl.cc:13007 cp/decl.cc:13009 cp/decl.cc:13012 +#: cp/decl.cc:13022 cp/decl.cc:13032 cp/decl.cc:13042 cp/decl.cc:13046 #, gcc-internal-format msgid "structured binding declaration cannot be %qs" msgstr "" -#: cp/decl.cc:13012 cp/decl.cc:13034 +#: cp/decl.cc:13016 cp/decl.cc:13038 #, gcc-internal-format msgid "" "structured binding declaration can be %qs only in %<-std=c++20%> or %<-" "std=gnu++20%>" msgstr "" -#: cp/decl.cc:13022 +#: cp/decl.cc:13026 #, gcc-internal-format msgid "%<volatile%>-qualified structured binding is deprecated" msgstr "" -#: cp/decl.cc:13046 +#: cp/decl.cc:13050 #, gcc-internal-format msgid "structured binding declaration cannot be C++98 %<auto%>" msgstr "" -#: cp/decl.cc:13058 +#: cp/decl.cc:13062 #, gcc-internal-format msgid "structured binding declaration cannot have type %qT" msgstr "" -#: cp/decl.cc:13061 +#: cp/decl.cc:13065 #, gcc-internal-format msgid "" "type must be cv-qualified %<auto%> or reference to cv-qualified %<auto%>" msgstr "" -#: cp/decl.cc:13069 +#: cp/decl.cc:13073 #, gcc-internal-format msgid "" "structured binding declaration cannot have constrained %<auto%> type %qT" msgstr "" -#: cp/decl.cc:13100 +#: cp/decl.cc:13104 #, gcc-internal-format msgid "multiple storage classes in declaration of %qs" msgstr "" -#: cp/decl.cc:13126 +#: cp/decl.cc:13130 #, gcc-internal-format msgid "storage class specified for %qs" msgstr "" -#: cp/decl.cc:13140 +#: cp/decl.cc:13144 #, gcc-internal-format msgid "nested function %qs declared %<extern%>" msgstr "" -#: cp/decl.cc:13145 +#: cp/decl.cc:13149 #, gcc-internal-format msgid "top-level declaration of %qs specifies %<auto%>" msgstr "" -#: cp/decl.cc:13153 +#: cp/decl.cc:13157 #, gcc-internal-format msgid "function-scope %qs implicitly auto and declared %<__thread%>" msgstr "" -#: cp/decl.cc:13167 +#: cp/decl.cc:13171 #, gcc-internal-format msgid "storage class specifiers invalid in friend function declarations" msgstr "" -#: cp/decl.cc:13200 cp/decl.cc:14824 cp/parser.cc:15434 cp/parser.cc:21379 -#: cp/parser.cc:28056 +#: cp/decl.cc:13204 cp/decl.cc:14828 cp/parser.cc:15434 cp/parser.cc:21379 +#: cp/parser.cc:28062 #, gcc-internal-format msgid "attribute ignored" msgstr "" -#: cp/decl.cc:13201 +#: cp/decl.cc:13205 #, gcc-internal-format msgid "an attribute that appertains to a type-specifier is ignored" msgstr "" -#: cp/decl.cc:13271 +#: cp/decl.cc:13275 #, gcc-internal-format msgid "unnecessary parentheses in declaration of %qs" msgstr "" -#: cp/decl.cc:13277 +#: cp/decl.cc:13281 #, gcc-internal-format msgid "remove parentheses" msgstr "" -#: cp/decl.cc:13345 +#: cp/decl.cc:13349 #, gcc-internal-format msgid "" "explicit object member function only available with %<-std=c++23%> or %<-" "std=gnu++23%>" msgstr "" -#: cp/decl.cc:13359 +#: cp/decl.cc:13363 #, gcc-internal-format msgid "a function type cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:13365 +#: cp/decl.cc:13369 #, gcc-internal-format msgid "a pointer to function type cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:13369 +#: cp/decl.cc:13373 #, gcc-internal-format msgid "" "a pointer to member function type cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:13377 +#: cp/decl.cc:13381 #, gcc-internal-format msgid "" "the type of a pointer to explicit object member function is a regular " "pointer to function type" msgstr "" -#: cp/decl.cc:13381 +#: cp/decl.cc:13385 #, gcc-internal-format msgid "" "the type of an explicit object member function is a regular function type" msgstr "" -#: cp/decl.cc:13402 +#: cp/decl.cc:13406 #, gcc-internal-format msgid "" "only the first parameter of a member function can be declared as an explicit " "object parameter" msgstr "" -#: cp/decl.cc:13407 +#: cp/decl.cc:13411 #, gcc-internal-format msgid "valid explicit object parameter declared here" msgstr "" -#: cp/decl.cc:13411 +#: cp/decl.cc:13415 #, gcc-internal-format msgid "requires-clause on return type" msgstr "" -#: cp/decl.cc:13431 +#: cp/decl.cc:13435 #, gcc-internal-format msgid "%qs function uses %<auto%> type specifier without trailing return type" msgstr "" -#: cp/decl.cc:13435 +#: cp/decl.cc:13439 #, gcc-internal-format msgid "" "deduced return type only available with %<-std=c++14%> or %<-std=gnu++14%>" msgstr "" -#: cp/decl.cc:13440 +#: cp/decl.cc:13444 #, gcc-internal-format msgid "virtual function cannot have deduced return type" msgstr "" -#: cp/decl.cc:13447 +#: cp/decl.cc:13451 #, gcc-internal-format msgid "" "%qs function with trailing return type has %qT as its type rather than plain " "%<auto%>" msgstr "" -#: cp/decl.cc:13456 +#: cp/decl.cc:13460 #, gcc-internal-format msgid "" "%qs function with trailing return type has %<decltype(auto)%> as its type " "rather than plain %<auto%>" msgstr "" -#: cp/decl.cc:13461 +#: cp/decl.cc:13465 #, gcc-internal-format msgid "invalid use of %<decltype(auto)%>" msgstr "" -#: cp/decl.cc:13473 +#: cp/decl.cc:13477 #, gcc-internal-format msgid "deduced class type %qD in function return type" msgstr "" -#: cp/decl.cc:13482 +#: cp/decl.cc:13486 #, gcc-internal-format msgid "deduction guide for %qT must have trailing return type" msgstr "" -#: cp/decl.cc:13495 +#: cp/decl.cc:13499 #, gcc-internal-format msgid "" "trailing return type %qT of deduction guide is not a specialization of %qT" msgstr "" -#: cp/decl.cc:13509 +#: cp/decl.cc:13513 #, gcc-internal-format msgid "" "trailing return type only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/decl.cc:13512 +#: cp/decl.cc:13516 #, gcc-internal-format msgid "" "%qs function with trailing return type not declared with %<auto%> type " "specifier" msgstr "" -#: cp/decl.cc:13519 +#: cp/decl.cc:13523 #, gcc-internal-format msgid "a conversion function cannot have a trailing return type" msgstr "" -#: cp/decl.cc:13545 +#: cp/decl.cc:13549 #, gcc-internal-format msgid "%<volatile%>-qualified return type is deprecated" msgstr "" -#: cp/decl.cc:13557 +#: cp/decl.cc:13561 #, gcc-internal-format msgid "%qs declared as function returning a function" msgstr "" -#: cp/decl.cc:13563 +#: cp/decl.cc:13567 #, gcc-internal-format msgid "%qs declared as function returning an array" msgstr "" -#: cp/decl.cc:13570 +#: cp/decl.cc:13574 #, gcc-internal-format msgid "%<constinit%> on function return type is not allowed" msgstr "" -#: cp/decl.cc:13603 +#: cp/decl.cc:13607 #, gcc-internal-format msgid "destructor cannot be static member function" msgstr "" -#: cp/decl.cc:13605 +#: cp/decl.cc:13609 #, gcc-internal-format msgid "constructor cannot be static member function" msgstr "" -#: cp/decl.cc:13610 +#: cp/decl.cc:13614 #, gcc-internal-format msgid "destructors may not be cv-qualified" msgstr "" -#: cp/decl.cc:13611 +#: cp/decl.cc:13615 #, gcc-internal-format msgid "constructors may not be cv-qualified" msgstr "" -#: cp/decl.cc:13619 +#: cp/decl.cc:13623 #, gcc-internal-format msgid "destructors may not be ref-qualified" msgstr "" -#: cp/decl.cc:13620 +#: cp/decl.cc:13624 #, gcc-internal-format msgid "constructors may not be ref-qualified" msgstr "" -#: cp/decl.cc:13638 +#: cp/decl.cc:13642 #, gcc-internal-format msgid "constructors cannot be declared %<virtual%>" msgstr "" -#: cp/decl.cc:13655 +#: cp/decl.cc:13659 #, gcc-internal-format msgid "virtual functions cannot be friends" msgstr "" -#: cp/decl.cc:13660 +#: cp/decl.cc:13664 #, gcc-internal-format msgid "friend declaration not in class definition" msgstr "" -#: cp/decl.cc:13664 +#: cp/decl.cc:13668 #, gcc-internal-format msgid "cannot define friend function %qs in a local class definition" msgstr "" -#: cp/decl.cc:13674 +#: cp/decl.cc:13678 #, gcc-internal-format msgid "friend function definition %qs cannot have a name qualified with %<::%>" msgstr "" -#: cp/decl.cc:13678 +#: cp/decl.cc:13682 #, gcc-internal-format msgid "" "friend function definition %qs cannot have a name qualified with %<%D::%>" msgstr "" -#: cp/decl.cc:13704 +#: cp/decl.cc:13708 #, gcc-internal-format msgid "a non-member function cannot have an explicit object parameter" msgstr "" -#: cp/decl.cc:13712 +#: cp/decl.cc:13716 #, gcc-internal-format msgid "an explicit object member function cannot be %<virtual%>" msgstr "" -#: cp/decl.cc:13722 +#: cp/decl.cc:13726 #, gcc-internal-format msgid "an explicit object member function cannot be %<static%>" msgstr "" -#: cp/decl.cc:13748 +#: cp/decl.cc:13752 #, gcc-internal-format msgid "destructors may not have parameters" msgstr "" -#: cp/decl.cc:13806 +#: cp/decl.cc:13810 #, gcc-internal-format msgid "cannot declare pointer to %q#T" msgstr "" -#: cp/decl.cc:13819 cp/decl.cc:13826 +#: cp/decl.cc:13823 cp/decl.cc:13830 #, gcc-internal-format msgid "cannot declare reference to %q#T" msgstr "" -#: cp/decl.cc:13828 +#: cp/decl.cc:13832 #, gcc-internal-format msgid "cannot declare pointer to %q#T member" msgstr "" -#: cp/decl.cc:13857 +#: cp/decl.cc:13861 #, gcc-internal-format msgid "cannot declare reference to qualified function type %qT" msgstr "" -#: cp/decl.cc:13858 +#: cp/decl.cc:13862 #, gcc-internal-format msgid "cannot declare pointer to qualified function type %qT" msgstr "" -#: cp/decl.cc:13931 +#: cp/decl.cc:13935 #, gcc-internal-format msgid "" "cannot declare reference to %q#T, which is not a typedef or a template type " "argument" msgstr "" -#: cp/decl.cc:14011 +#: cp/decl.cc:14015 #, gcc-internal-format msgid "template-id %qD used as a declarator" msgstr "" -#: cp/decl.cc:14037 +#: cp/decl.cc:14041 #, gcc-internal-format msgid "member functions are implicitly friends of their class" msgstr "" -#: cp/decl.cc:14042 +#: cp/decl.cc:14046 #, gcc-internal-format msgid "extra qualification %<%T::%> on member %qs" msgstr "" -#: cp/decl.cc:14072 +#: cp/decl.cc:14076 #, gcc-internal-format msgid "cannot define member function %<%T::%s%> within %qT" msgstr "" -#: cp/decl.cc:14074 +#: cp/decl.cc:14078 #, gcc-internal-format msgid "cannot declare member function %<%T::%s%> within %qT" msgstr "" -#: cp/decl.cc:14082 +#: cp/decl.cc:14086 #, gcc-internal-format msgid "cannot declare member %<%T::%s%> within %qT" msgstr "" -#: cp/decl.cc:14122 +#: cp/decl.cc:14126 #, gcc-internal-format msgid "non-parameter %qs cannot be a parameter pack" msgstr "" -#: cp/decl.cc:14131 +#: cp/decl.cc:14135 #, gcc-internal-format msgid "data member may not have variably modified type %qT" msgstr "" -#: cp/decl.cc:14134 +#: cp/decl.cc:14138 #, gcc-internal-format msgid "parameter may not have variably modified type %qT" msgstr "" -#: cp/decl.cc:14145 +#: cp/decl.cc:14149 #, gcc-internal-format msgid "%<explicit%> outside class declaration" msgstr "" -#: cp/decl.cc:14148 +#: cp/decl.cc:14152 #, gcc-internal-format msgid "%<explicit%> in friend declaration" msgstr "" -#: cp/decl.cc:14151 +#: cp/decl.cc:14155 #, gcc-internal-format msgid "" "only declarations of constructors and conversion operators can be " "%<explicit%>" msgstr "" -#: cp/decl.cc:14161 +#: cp/decl.cc:14165 #, gcc-internal-format msgid "non-member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14168 +#: cp/decl.cc:14172 #, gcc-internal-format msgid "non-object member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14174 +#: cp/decl.cc:14178 #, gcc-internal-format msgid "function %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14180 +#: cp/decl.cc:14184 #, gcc-internal-format msgid "%<static%> %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14186 +#: cp/decl.cc:14190 #, gcc-internal-format msgid "%<const%> %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14192 +#: cp/decl.cc:14196 #, gcc-internal-format msgid "reference %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.cc:14208 +#: cp/decl.cc:14212 #, gcc-internal-format msgid "typedef may not be a function definition" msgstr "" -#: cp/decl.cc:14211 +#: cp/decl.cc:14215 #, gcc-internal-format msgid "typedef may not be a member function definition" msgstr "" -#: cp/decl.cc:14237 +#: cp/decl.cc:14241 #, gcc-internal-format msgid "%<auto%> not allowed in alias declaration" msgstr "" -#: cp/decl.cc:14240 +#: cp/decl.cc:14244 #, gcc-internal-format msgid "typedef declared %<auto%>" msgstr "" -#: cp/decl.cc:14245 +#: cp/decl.cc:14249 #, gcc-internal-format msgid "requires-clause on typedef" msgstr "" -#: cp/decl.cc:14249 +#: cp/decl.cc:14253 #, gcc-internal-format msgid "typedef name may not be a nested-name-specifier" msgstr "" -#: cp/decl.cc:14275 +#: cp/decl.cc:14279 #, gcc-internal-format msgid "ISO C++ forbids nested type %qD with same name as enclosing class" msgstr "" -#: cp/decl.cc:14364 +#: cp/decl.cc:14368 #, gcc-internal-format msgid "%<inline%> specified for friend class declaration" msgstr "" -#: cp/decl.cc:14372 +#: cp/decl.cc:14376 #, gcc-internal-format msgid "template parameters cannot be friends" msgstr "" -#: cp/decl.cc:14374 +#: cp/decl.cc:14378 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>" msgstr "" -#: cp/decl.cc:14378 +#: cp/decl.cc:14382 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend %#T%>" msgstr "" -#: cp/decl.cc:14391 +#: cp/decl.cc:14395 #, gcc-internal-format msgid "trying to make class %qT a friend of global scope" msgstr "" -#: cp/decl.cc:14411 +#: cp/decl.cc:14415 #, gcc-internal-format msgid "invalid qualifiers on non-member function type" msgstr "" -#: cp/decl.cc:14415 +#: cp/decl.cc:14419 #, gcc-internal-format msgid "requires-clause on type-id" msgstr "" -#: cp/decl.cc:14425 +#: cp/decl.cc:14429 #, gcc-internal-format msgid "abstract declarator %qT used as declaration" msgstr "" -#: cp/decl.cc:14440 +#: cp/decl.cc:14444 #, gcc-internal-format msgid "requires-clause on declaration of non-function type %qT" msgstr "" -#: cp/decl.cc:14459 +#: cp/decl.cc:14463 #, gcc-internal-format msgid "cannot use %<::%> in parameter declaration" msgstr "" -#: cp/decl.cc:14469 cp/parser.cc:20813 +#: cp/decl.cc:14473 cp/parser.cc:20813 #, gcc-internal-format msgid "cannot declare a parameter with %<decltype(auto)%>" msgstr "" -#: cp/decl.cc:14476 +#: cp/decl.cc:14480 #, gcc-internal-format msgid "" "missing template argument list after %qE; template placeholder not permitted " "in parameter" msgstr "" -#: cp/decl.cc:14479 +#: cp/decl.cc:14483 #, gcc-internal-format msgid "or use %<auto%> for an abbreviated function template" msgstr "" -#: cp/decl.cc:14485 cp/parser.cc:25355 +#: cp/decl.cc:14489 cp/parser.cc:25355 #, gcc-internal-format msgid "%<auto%> parameter not permitted in this context" msgstr "" -#: cp/decl.cc:14495 +#: cp/decl.cc:14499 #, gcc-internal-format msgid "parameter declared %<auto%>" msgstr "" -#: cp/decl.cc:14549 cp/parser.cc:3687 +#: cp/decl.cc:14553 cp/parser.cc:3687 #, gcc-internal-format msgid "invalid use of template-name %qE without an argument list" msgstr "" -#: cp/decl.cc:14553 +#: cp/decl.cc:14557 #, gcc-internal-format msgid "non-static data member declared with placeholder %qT" msgstr "" -#: cp/decl.cc:14574 +#: cp/decl.cc:14578 #, gcc-internal-format msgid "ISO C++ forbids flexible array member %qs" msgstr "" -#: cp/decl.cc:14577 +#: cp/decl.cc:14581 #, gcc-internal-format msgid "ISO C++ forbids flexible array members" msgstr "" #. Something like struct S { int N::j; }; -#: cp/decl.cc:14593 +#: cp/decl.cc:14597 #, gcc-internal-format msgid "invalid use of %<::%>" msgstr "" -#: cp/decl.cc:14614 +#: cp/decl.cc:14618 #, gcc-internal-format msgid "declaration of function %qD in invalid context" msgstr "" -#: cp/decl.cc:14624 +#: cp/decl.cc:14628 #, gcc-internal-format msgid "function %qD declared %<virtual%> inside a union" msgstr "" -#: cp/decl.cc:14634 +#: cp/decl.cc:14638 #, gcc-internal-format msgid "%qD cannot be declared %<virtual%>, since it is always static" msgstr "" -#: cp/decl.cc:14648 +#: cp/decl.cc:14652 #, gcc-internal-format msgid "expected qualified name in friend declaration for destructor %qD" msgstr "" -#: cp/decl.cc:14655 +#: cp/decl.cc:14659 #, gcc-internal-format msgid "declaration of %qD as member of %qT" msgstr "" -#: cp/decl.cc:14662 cp/decl.cc:14675 +#: cp/decl.cc:14666 cp/decl.cc:14679 #, gcc-internal-format msgid "a destructor cannot be %qs" msgstr "" -#: cp/decl.cc:14681 +#: cp/decl.cc:14685 #, gcc-internal-format msgid "expected qualified name in friend declaration for constructor %qD" msgstr "" -#: cp/decl.cc:14690 +#: cp/decl.cc:14694 #, gcc-internal-format msgid "a constructor cannot be %<concept%>" msgstr "" -#: cp/decl.cc:14696 +#: cp/decl.cc:14700 #, gcc-internal-format msgid "a concept cannot be a member function" msgstr "" -#: cp/decl.cc:14704 cp/decl.cc:15059 +#: cp/decl.cc:14708 cp/decl.cc:15063 #, gcc-internal-format msgid "%qD cannot be %qs" msgstr "" -#: cp/decl.cc:14713 +#: cp/decl.cc:14717 #, gcc-internal-format msgid "specialization of variable template %qD declared as function" msgstr "" -#: cp/decl.cc:14716 +#: cp/decl.cc:14720 #, gcc-internal-format msgid "variable template declared here" msgstr "" -#: cp/decl.cc:14779 +#: cp/decl.cc:14783 #, gcc-internal-format msgid "field %qD has incomplete type %qT" msgstr "" -#: cp/decl.cc:14784 +#: cp/decl.cc:14788 #, gcc-internal-format msgid "name %qT has incomplete type" msgstr "" -#: cp/decl.cc:14804 +#: cp/decl.cc:14808 #, gcc-internal-format msgid "%qE is neither function nor member function; cannot be declared friend" msgstr "" -#: cp/decl.cc:14807 +#: cp/decl.cc:14811 #, gcc-internal-format msgid "" "unnamed field is neither function nor member function; cannot be declared " "friend" msgstr "" -#: cp/decl.cc:14825 cp/parser.cc:21380 cp/parser.cc:28057 +#: cp/decl.cc:14829 cp/parser.cc:21380 cp/parser.cc:28063 #, gcc-internal-format msgid "" "an attribute that appertains to a friend declaration that is not a " "definition is ignored" msgstr "" -#: cp/decl.cc:14875 cp/decl.cc:14886 +#: cp/decl.cc:14879 cp/decl.cc:14890 #, gcc-internal-format msgid "static data member %qE declared %qs" msgstr "" -#: cp/decl.cc:14880 +#: cp/decl.cc:14884 #, gcc-internal-format msgid "%<constexpr%> static data member %qD must have an initializer" msgstr "" -#: cp/decl.cc:14923 cp/decl.cc:14931 cp/decl.cc:14938 cp/decl.cc:14945 +#: cp/decl.cc:14927 cp/decl.cc:14935 cp/decl.cc:14942 cp/decl.cc:14949 #, gcc-internal-format msgid "non-static data member %qE declared %qs" msgstr "" -#: cp/decl.cc:14997 +#: cp/decl.cc:15001 #, gcc-internal-format msgid "storage class %<auto%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15000 +#: cp/decl.cc:15004 #, gcc-internal-format msgid "storage class %<register%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15006 +#: cp/decl.cc:15010 #, gcc-internal-format msgid "storage class %<__thread%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15010 +#: cp/decl.cc:15014 #, gcc-internal-format msgid "storage class %<thread_local%> invalid for function %qs" msgstr "" -#: cp/decl.cc:15015 +#: cp/decl.cc:15019 #, gcc-internal-format msgid "%<constinit%> specifier invalid for function %qs" msgstr "" -#: cp/decl.cc:15018 +#: cp/decl.cc:15022 #, gcc-internal-format msgid "virt-specifiers in %qs not allowed outside a class definition" msgstr "" -#: cp/decl.cc:15030 +#: cp/decl.cc:15034 #, gcc-internal-format msgid "" "%<static%> specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.cc:15034 +#: cp/decl.cc:15038 #, gcc-internal-format msgid "" "%<inline%> specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.cc:15042 +#: cp/decl.cc:15046 #, gcc-internal-format msgid "virtual non-class function %qs" msgstr "" -#: cp/decl.cc:15049 +#: cp/decl.cc:15053 #, gcc-internal-format msgid "%qs defined in a non-class scope" msgstr "" -#: cp/decl.cc:15050 +#: cp/decl.cc:15054 #, gcc-internal-format msgid "%qs declared in a non-class scope" msgstr "" -#: cp/decl.cc:15093 +#: cp/decl.cc:15097 #, gcc-internal-format msgid "cannot declare member function %qD to have static linkage" msgstr "" -#: cp/decl.cc:15102 +#: cp/decl.cc:15106 #, gcc-internal-format msgid "cannot declare static function inside another function" msgstr "" -#: cp/decl.cc:15143 +#: cp/decl.cc:15147 #, gcc-internal-format msgid "" "%<static%> may not be used when defining (as opposed to declaring) a static " "data member" msgstr "" -#: cp/decl.cc:15150 +#: cp/decl.cc:15154 #, gcc-internal-format msgid "static member %qD declared %<register%>" msgstr "" -#: cp/decl.cc:15156 +#: cp/decl.cc:15160 #, gcc-internal-format msgid "cannot explicitly declare member %q#D to have extern linkage" msgstr "" -#: cp/decl.cc:15164 +#: cp/decl.cc:15168 #, gcc-internal-format msgid "declaration of %<constexpr%> variable %qD is not a definition" msgstr "" -#: cp/decl.cc:15171 +#: cp/decl.cc:15175 #, gcc-internal-format msgid "a variable cannot be declared %<consteval%>" msgstr "" -#: cp/decl.cc:15203 +#: cp/decl.cc:15207 #, gcc-internal-format msgid "%qs initialized and declared %<extern%>" msgstr "" -#: cp/decl.cc:15208 +#: cp/decl.cc:15212 #, gcc-internal-format msgid "%qs has both %<extern%> and initializer" msgstr "" -#: cp/decl.cc:15405 +#: cp/decl.cc:15414 #, gcc-internal-format msgid "default argument %qE uses %qD" msgstr "" -#: cp/decl.cc:15408 +#: cp/decl.cc:15417 #, gcc-internal-format msgid "default argument %qE uses local variable %qD" msgstr "" -#: cp/decl.cc:15535 +#: cp/decl.cc:15544 #, gcc-internal-format msgid "invalid use of cv-qualified type %qT in parameter declaration" msgstr "" -#: cp/decl.cc:15539 +#: cp/decl.cc:15548 #, gcc-internal-format msgid "invalid use of type %<void%> in parameter declaration" msgstr "" -#: cp/decl.cc:15568 +#: cp/decl.cc:15577 #, gcc-internal-format msgid "%<volatile%>-qualified parameter is deprecated" msgstr "" -#: cp/decl.cc:15576 +#: cp/decl.cc:15585 #, gcc-internal-format msgid "parameter %qD invalidly declared method type" msgstr "" -#: cp/decl.cc:15601 +#: cp/decl.cc:15610 #, gcc-internal-format msgid "parameter %qD includes pointer to array of unknown bound %qT" msgstr "" -#: cp/decl.cc:15603 +#: cp/decl.cc:15612 #, gcc-internal-format msgid "parameter %qD includes reference to array of unknown bound %qT" msgstr "" -#: cp/decl.cc:15886 +#: cp/decl.cc:15895 #, gcc-internal-format msgid "invalid constructor; you probably meant %<%T (const %T&)%>" msgstr "" -#: cp/decl.cc:15965 +#: cp/decl.cc:15974 #, gcc-internal-format msgid "%qD may not be declared within a namespace" msgstr "" -#: cp/decl.cc:15972 +#: cp/decl.cc:15981 #, gcc-internal-format msgid "%qD may not be declared as static" msgstr "" -#: cp/decl.cc:16000 +#: cp/decl.cc:16009 #, gcc-internal-format msgid "%qD must be a non-static member function" msgstr "" -#: cp/decl.cc:16008 +#: cp/decl.cc:16017 #, gcc-internal-format msgid "%qD must be a member function" msgstr "" -#: cp/decl.cc:16016 +#: cp/decl.cc:16025 #, gcc-internal-format msgid "" "%qD may be a static member function only with %<-std=c++23%> or %<-std=gnu+" "+23%>" msgstr "" -#: cp/decl.cc:16026 +#: cp/decl.cc:16035 #, gcc-internal-format msgid "" "%qD must be either a non-static member function or a non-member function" msgstr "" -#: cp/decl.cc:16036 +#: cp/decl.cc:16045 #, gcc-internal-format msgid "%qD must have an argument of class or enumerated type" msgstr "" #. 13.4.0.3 -#: cp/decl.cc:16067 +#: cp/decl.cc:16076 #, gcc-internal-format msgid "ISO C++ prohibits overloading %<operator ?:%>" msgstr "" -#: cp/decl.cc:16077 +#: cp/decl.cc:16086 #, gcc-internal-format msgid "%qD must not have variable number of arguments" msgstr "" -#: cp/decl.cc:16103 +#: cp/decl.cc:16112 #, gcc-internal-format msgid "%qD must have either zero or one argument" msgstr "" -#: cp/decl.cc:16104 +#: cp/decl.cc:16113 #, gcc-internal-format msgid "%qD must have either one or two arguments" msgstr "" -#: cp/decl.cc:16116 +#: cp/decl.cc:16125 #, gcc-internal-format msgid "postfix %qD must have %<int%> as its argument" msgstr "" -#: cp/decl.cc:16117 +#: cp/decl.cc:16126 #, gcc-internal-format msgid "postfix %qD must have %<int%> as its second argument" msgstr "" -#: cp/decl.cc:16128 +#: cp/decl.cc:16137 #, gcc-internal-format msgid "%qD must have no arguments" msgstr "" -#: cp/decl.cc:16129 cp/decl.cc:16139 +#: cp/decl.cc:16138 cp/decl.cc:16148 #, gcc-internal-format msgid "%qD must have exactly one argument" msgstr "" -#: cp/decl.cc:16140 +#: cp/decl.cc:16149 #, gcc-internal-format msgid "%qD must have exactly two arguments" msgstr "" -#: cp/decl.cc:16155 +#: cp/decl.cc:16164 #, gcc-internal-format msgid "%qD cannot have default arguments" msgstr "" -#: cp/decl.cc:16179 +#: cp/decl.cc:16188 #, gcc-internal-format msgid "converting %qT to %<void%> will never use a type conversion operator" msgstr "" -#: cp/decl.cc:16186 +#: cp/decl.cc:16195 #, gcc-internal-format msgid "" "converting %qT to a reference to the same type will never use a type " "conversion operator" msgstr "" -#: cp/decl.cc:16188 +#: cp/decl.cc:16197 #, gcc-internal-format msgid "" "converting %qT to the same type will never use a type conversion operator" msgstr "" -#: cp/decl.cc:16197 +#: cp/decl.cc:16206 #, gcc-internal-format msgid "" "converting %qT to a reference to a base class %qT will never use a type " "conversion operator" msgstr "" -#: cp/decl.cc:16199 +#: cp/decl.cc:16208 #, gcc-internal-format msgid "" "converting %qT to a base class %qT will never use a type conversion operator" msgstr "" -#: cp/decl.cc:16215 +#: cp/decl.cc:16224 #, gcc-internal-format msgid "user-defined %qD always evaluates both arguments" msgstr "" -#: cp/decl.cc:16234 +#: cp/decl.cc:16243 #, gcc-internal-format msgid "prefix %qD should return %qT" msgstr "" -#: cp/decl.cc:16241 +#: cp/decl.cc:16250 #, gcc-internal-format msgid "postfix %qD should return %qT" msgstr "" -#: cp/decl.cc:16253 +#: cp/decl.cc:16262 #, gcc-internal-format msgid "%qD should return by value" msgstr "" -#: cp/decl.cc:16308 +#: cp/decl.cc:16317 #, gcc-internal-format msgid "using template type parameter %qT after %qs" msgstr "" -#: cp/decl.cc:16331 +#: cp/decl.cc:16340 #, gcc-internal-format msgid "using alias template specialization %qT after %qs" msgstr "" -#: cp/decl.cc:16334 +#: cp/decl.cc:16343 #, gcc-internal-format msgid "using typedef-name %qD after %qs" msgstr "" -#: cp/decl.cc:16336 +#: cp/decl.cc:16345 #, gcc-internal-format msgid "%qD has a previous declaration here" msgstr "" -#: cp/decl.cc:16344 +#: cp/decl.cc:16353 #, gcc-internal-format msgid "%qT referred to as %qs" msgstr "" -#: cp/decl.cc:16345 cp/decl.cc:16352 +#: cp/decl.cc:16354 cp/decl.cc:16361 #, gcc-internal-format msgid "%qT has a previous declaration here" msgstr "" -#: cp/decl.cc:16351 +#: cp/decl.cc:16360 #, gcc-internal-format msgid "%qT referred to as enum" msgstr "" @@ -60561,115 +60815,115 @@ msgstr "" #. void f(class C); // No template header here #. #. then the required template argument is missing. -#: cp/decl.cc:16366 +#: cp/decl.cc:16375 #, gcc-internal-format msgid "template argument required for %<%s %T%>" msgstr "" -#: cp/decl.cc:16409 cp/name-lookup.cc:6040 cp/name-lookup.cc:6172 -#: cp/parser.cc:7215 cp/parser.cc:32107 +#: cp/decl.cc:16418 cp/name-lookup.cc:6074 cp/name-lookup.cc:6206 +#: cp/parser.cc:7215 cp/parser.cc:32113 #, gcc-internal-format msgid "reference to %qD is ambiguous" msgstr "" -#: cp/decl.cc:16418 +#: cp/decl.cc:16427 #, gcc-internal-format msgid "class template %qD redeclared as non-template" msgstr "" -#: cp/decl.cc:16440 cp/name-lookup.cc:5730 +#: cp/decl.cc:16449 cp/name-lookup.cc:5764 #, gcc-internal-format msgid "%qD has the same name as the class in which it is declared" msgstr "" -#: cp/decl.cc:16468 cp/friend.cc:317 cp/parser.cc:3512 cp/parser.cc:6920 -#: cp/pt.cc:9970 +#: cp/decl.cc:16477 cp/friend.cc:317 cp/parser.cc:3512 cp/parser.cc:6920 +#: cp/pt.cc:9971 #, gcc-internal-format msgid "%qT is not a template" msgstr "" -#: cp/decl.cc:16473 +#: cp/decl.cc:16482 #, gcc-internal-format msgid "perhaps you want to explicitly add %<%T::%>" msgstr "" -#: cp/decl.cc:16578 +#: cp/decl.cc:16587 #, gcc-internal-format msgid "use of enum %q#D without previous declaration" msgstr "" -#: cp/decl.cc:16604 +#: cp/decl.cc:16613 #, gcc-internal-format msgid "redeclaration of %qT as a non-template" msgstr "" -#: cp/decl.cc:16616 cp/semantics.cc:3712 +#: cp/decl.cc:16625 cp/semantics.cc:3777 #, gcc-internal-format msgid "cannot declare %qD in a different module" msgstr "" -#: cp/decl.cc:16617 cp/decl.cc:16970 lto/lto-symtab.cc:865 +#: cp/decl.cc:16626 cp/decl.cc:16979 lto/lto-symtab.cc:865 #, gcc-internal-format msgid "previously declared here" msgstr "" -#: cp/decl.cc:16744 +#: cp/decl.cc:16753 #, gcc-internal-format msgid "derived union %qT invalid" msgstr "" -#: cp/decl.cc:16751 +#: cp/decl.cc:16760 #, gcc-internal-format msgid "%qT defined with multiple direct bases" msgstr "" -#: cp/decl.cc:16762 +#: cp/decl.cc:16771 #, gcc-internal-format msgid "%qT defined with direct virtual base" msgstr "" -#: cp/decl.cc:16787 +#: cp/decl.cc:16796 #, gcc-internal-format msgid "base type %qT fails to be a struct or class type" msgstr "" -#: cp/decl.cc:16817 +#: cp/decl.cc:16826 #, gcc-internal-format msgid "recursive type %qT undefined" msgstr "" -#: cp/decl.cc:16819 +#: cp/decl.cc:16828 #, gcc-internal-format msgid "duplicate base type %qT invalid" msgstr "" -#: cp/decl.cc:16969 +#: cp/decl.cc:16978 #, gcc-internal-format msgid "cannot declare %qD in different module" msgstr "" -#: cp/decl.cc:16982 +#: cp/decl.cc:16991 #, gcc-internal-format msgid "scoped/unscoped mismatch in enum %q#T" msgstr "" -#: cp/decl.cc:16985 cp/decl.cc:16994 cp/decl.cc:17005 cp/decl.cc:17597 +#: cp/decl.cc:16994 cp/decl.cc:17003 cp/decl.cc:17014 cp/decl.cc:17606 #: cp/parser.cc:21734 #, gcc-internal-format msgid "previous definition here" msgstr "" -#: cp/decl.cc:16991 +#: cp/decl.cc:17000 #, gcc-internal-format msgid "underlying type mismatch in enum %q#T" msgstr "" -#: cp/decl.cc:17002 +#: cp/decl.cc:17011 #, gcc-internal-format msgid "different underlying type in enum %q#T" msgstr "" -#: cp/decl.cc:17075 +#: cp/decl.cc:17084 #, gcc-internal-format msgid "underlying type %qT of %qT must be an integral type" msgstr "" @@ -60678,83 +60932,83 @@ msgstr "" #. #. IF no integral type can represent all the enumerator values, the #. enumeration is ill-formed. -#: cp/decl.cc:17224 +#: cp/decl.cc:17233 #, gcc-internal-format msgid "no integral type can represent all of the enumerator values for %qT" msgstr "" -#: cp/decl.cc:17405 +#: cp/decl.cc:17414 #, gcc-internal-format msgid "" "enumerator value for %qD must have integral or unscoped enumeration type" msgstr "" -#: cp/decl.cc:17415 +#: cp/decl.cc:17424 #, gcc-internal-format msgid "enumerator value for %qD is not an integer constant" msgstr "" -#: cp/decl.cc:17464 +#: cp/decl.cc:17473 #, gcc-internal-format msgid "incremented enumerator value is too large for %<unsigned long%>" msgstr "" -#: cp/decl.cc:17465 +#: cp/decl.cc:17474 #, gcc-internal-format msgid "incremented enumerator value is too large for %<long%>" msgstr "" -#: cp/decl.cc:17476 +#: cp/decl.cc:17485 #, gcc-internal-format msgid "overflow in enumeration values at %qD" msgstr "" -#: cp/decl.cc:17496 +#: cp/decl.cc:17505 #, gcc-internal-format msgid "enumerator value %qE is outside the range of underlying type %qT" msgstr "" -#: cp/decl.cc:17595 cp/parser.cc:21732 +#: cp/decl.cc:17604 cp/parser.cc:21732 #, gcc-internal-format msgid "multiple definition of %q#T" msgstr "" -#: cp/decl.cc:17669 +#: cp/decl.cc:17678 #, gcc-internal-format msgid "return type %q#T is incomplete" msgstr "" -#: cp/decl.cc:17827 cp/typeck.cc:11238 +#: cp/decl.cc:17836 cp/typeck.cc:11241 #, gcc-internal-format msgid "%<operator=%> should return a reference to %<*this%>" msgstr "" -#: cp/decl.cc:18657 +#: cp/decl.cc:18666 #, gcc-internal-format msgid "no return statements in function returning %qT" msgstr "" -#: cp/decl.cc:18659 cp/typeck.cc:11118 +#: cp/decl.cc:18668 cp/typeck.cc:11121 #, gcc-internal-format msgid "only plain %<auto%> return type can be deduced to %<void%>" msgstr "" -#: cp/decl.cc:18719 +#: cp/decl.cc:18728 #, gcc-internal-format msgid "no return statement in %<constexpr%> function returning non-void" msgstr "" -#: cp/decl.cc:18899 +#: cp/decl.cc:18908 #, gcc-internal-format msgid "%qD is already defined in class %qT" msgstr "" -#: cp/decl.cc:19287 +#: cp/decl.cc:19298 #, gcc-internal-format msgid "using %qs" msgstr "" -#: cp/decl.cc:19299 +#: cp/decl.cc:19310 #, gcc-internal-format msgid "use of %qD before deduction of %<auto%>" msgstr "" @@ -60812,7 +61066,7 @@ msgstr "" msgid "deleting %qT is undefined" msgstr "" -#: cp/decl2.cc:768 cp/pt.cc:5939 +#: cp/decl2.cc:768 cp/pt.cc:5940 #, gcc-internal-format msgid "template declaration of %q#D" msgstr "" @@ -60823,7 +61077,7 @@ msgid "" "template parameter lists provided don%'t match the template parameters of %qD" msgstr "" -#: cp/decl2.cc:823 cp/pt.cc:5907 +#: cp/decl2.cc:823 cp/pt.cc:5908 #, gcc-internal-format msgid "destructor %qD declared as member template" msgstr "" @@ -61007,307 +61261,317 @@ msgstr "" msgid "%<operator delete%> takes type %qT as first parameter" msgstr "" -#: cp/decl2.cc:3154 +#: cp/decl2.cc:3159 #, gcc-internal-format msgid "%qT has a field %q#D whose type has no linkage" msgstr "" -#: cp/decl2.cc:3158 +#: cp/decl2.cc:3163 #, gcc-internal-format msgid "" "%qT has a field %qD whose type depends on the type %qT which has no linkage" msgstr "" -#: cp/decl2.cc:3164 +#: cp/decl2.cc:3169 #, gcc-internal-format msgid "%qT has a field %q#D whose type has internal linkage" msgstr "" #. In C++98 this can only happen with unnamed namespaces. -#: cp/decl2.cc:3168 +#: cp/decl2.cc:3173 #, gcc-internal-format msgid "%qT has a field %q#D whose type uses the anonymous namespace" msgstr "" -#: cp/decl2.cc:3176 +#: cp/decl2.cc:3181 #, gcc-internal-format msgid "%qT declared with greater visibility than the type of its field %qD" msgstr "" -#: cp/decl2.cc:3195 +#: cp/decl2.cc:3200 #, gcc-internal-format msgid "%qT has a base %qT which has no linkage" msgstr "" -#: cp/decl2.cc:3199 +#: cp/decl2.cc:3204 #, gcc-internal-format msgid "%qT has a base %qT which depends on the type %qT which has no linkage" msgstr "" -#: cp/decl2.cc:3205 +#: cp/decl2.cc:3210 #, gcc-internal-format msgid "%qT has a base %qT which has internal linkage" msgstr "" #. In C++98 this can only happen with unnamed namespaces. -#: cp/decl2.cc:3209 +#: cp/decl2.cc:3214 #, gcc-internal-format msgid "%qT has a base %qT which uses the anonymous namespace" msgstr "" -#: cp/decl2.cc:3216 +#: cp/decl2.cc:3221 #, gcc-internal-format msgid "%qT declared with greater visibility than its base %qT" msgstr "" -#: cp/decl2.cc:4695 +#: cp/decl2.cc:4710 +#, gcc-internal-format +msgid "%q#D, declared using an unnamed type, is used but never defined" +msgstr "" + +#: cp/decl2.cc:4714 #, gcc-internal-format -msgid "%q#D, declared using unnamed type, is used but never defined" +msgid "%q#D, declared using an unnamed type, is used but not defined" msgstr "" #. DRs 132, 319 and 389 seem to indicate types with #. no linkage can only be used to declare extern "C" #. entities. Since it's not always an error in the #. ISO C++ 90 Standard, we only issue a warning. -#: cp/decl2.cc:4704 +#: cp/decl2.cc:4724 #, gcc-internal-format msgid "unnamed type with no linkage used to declare variable %q#D with linkage" msgstr "" -#: cp/decl2.cc:4708 +#: cp/decl2.cc:4728 #, gcc-internal-format msgid "unnamed type with no linkage used to declare function %q#D with linkage" msgstr "" -#: cp/decl2.cc:4712 +#: cp/decl2.cc:4732 #, gcc-internal-format msgid "" "%q#D does not refer to the unqualified type, so it is not used for linkage" msgstr "" -#: cp/decl2.cc:4720 +#: cp/decl2.cc:4750 #, gcc-internal-format msgid "%q#D, declared using local type %qT, is used but never defined" msgstr "" -#: cp/decl2.cc:4724 +#: cp/decl2.cc:4754 +#, gcc-internal-format +msgid "%q#D, declared using local type %qT, is used but not defined here" +msgstr "" + +#: cp/decl2.cc:4762 #, gcc-internal-format msgid "type %qT with no linkage used to declare variable %q#D with linkage" msgstr "" -#: cp/decl2.cc:4727 +#: cp/decl2.cc:4765 #, gcc-internal-format msgid "type %qT with no linkage used to declare function %q#D with linkage" msgstr "" -#: cp/decl2.cc:4924 +#: cp/decl2.cc:4962 #, gcc-internal-format msgid "mangling of %q#D as %qE conflicts with a previous mangle" msgstr "" -#: cp/decl2.cc:4927 +#: cp/decl2.cc:4965 #, gcc-internal-format msgid "previous mangling %q#D" msgstr "" -#: cp/decl2.cc:4929 +#: cp/decl2.cc:4967 #, gcc-internal-format msgid "" "a later %<-fabi-version=%> (or =0) avoids this error with a change in " "mangling" msgstr "" -#: cp/decl2.cc:5001 cp/decl2.cc:5004 +#: cp/decl2.cc:5039 cp/decl2.cc:5042 #, gcc-internal-format msgid "the program should also define %qD" msgstr "" -#: cp/decl2.cc:5343 +#: cp/decl2.cc:5381 #, gcc-internal-format msgid "inline function %qD used but never defined" msgstr "" -#: cp/decl2.cc:5569 +#: cp/decl2.cc:5607 #, gcc-internal-format msgid "default argument missing for parameter %P of %q#D" msgstr "" -#: cp/decl2.cc:5574 +#: cp/decl2.cc:5612 #, gcc-internal-format msgid "...following parameter %P which has a default argument" msgstr "" -#: cp/decl2.cc:5698 +#: cp/decl2.cc:5736 #, gcc-internal-format msgid "implicitly-declared %qD is deprecated" msgstr "" -#: cp/decl2.cc:5702 +#: cp/decl2.cc:5740 #, gcc-internal-format msgid "because %qT has user-provided %qD" msgstr "" #. We mark a lambda conversion op as deleted if we can't #. generate it properly; see maybe_add_lambda_conv_op. -#: cp/decl2.cc:5843 +#: cp/decl2.cc:5881 #, gcc-internal-format msgid "converting lambda that uses %<...%> to function pointer" msgstr "" -#: cp/decl2.cc:5846 +#: cp/decl2.cc:5884 #, gcc-internal-format msgid "use of deleted function %qD" msgstr "" -#: cp/decl2.cc:5900 +#: cp/decl2.cc:5938 #, gcc-internal-format msgid "use of function %qD with unsatisfied constraints" msgstr "" -#: cp/decl2.cc:5930 +#: cp/decl2.cc:5968 #, gcc-internal-format msgid "use of built-in parameter pack %qD outside of a template" msgstr "" -#: cp/error.cc:4112 +#: cp/error.cc:4113 #, gcc-internal-format msgid "(no argument)" msgstr "" -#: cp/error.cc:4204 +#: cp/error.cc:4205 #, gcc-internal-format msgid "[...]" msgstr "" -#: cp/error.cc:4551 +#: cp/error.cc:4552 #, gcc-internal-format msgid "" "extended initializer lists only available with %<-std=c++11%> or %<-std=gnu+" "+11%>" msgstr "" -#: cp/error.cc:4556 +#: cp/error.cc:4557 #, gcc-internal-format msgid "" "explicit conversion operators only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4561 +#: cp/error.cc:4562 #, gcc-internal-format msgid "" "variadic templates only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4566 +#: cp/error.cc:4567 #, gcc-internal-format msgid "" "lambda expressions only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4571 +#: cp/error.cc:4572 #, gcc-internal-format msgid "C++11 auto only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4576 +#: cp/error.cc:4577 #, gcc-internal-format msgid "scoped enums only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4581 +#: cp/error.cc:4582 #, gcc-internal-format msgid "" "defaulted and deleted functions only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4587 +#: cp/error.cc:4588 #, gcc-internal-format msgid "" "inline namespaces only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4592 +#: cp/error.cc:4593 #, gcc-internal-format msgid "" "override controls (override/final) only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4597 +#: cp/error.cc:4598 #, gcc-internal-format msgid "" "non-static data member initializers only available with %<-std=c++11%> or %<-" "std=gnu++11%>" msgstr "" -#: cp/error.cc:4602 +#: cp/error.cc:4603 #, gcc-internal-format msgid "" "user-defined literals only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4607 +#: cp/error.cc:4608 #, gcc-internal-format msgid "" "delegating constructors only available with %<-std=c++11%> or %<-std=gnu+" "+11%>" msgstr "" -#: cp/error.cc:4612 +#: cp/error.cc:4613 #, gcc-internal-format msgid "" "inheriting constructors only available with %<-std=c++11%> or %<-std=gnu+" "+11%>" msgstr "" -#: cp/error.cc:4617 +#: cp/error.cc:4618 #, gcc-internal-format msgid "C++11 attributes only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4622 +#: cp/error.cc:4623 #, gcc-internal-format msgid "ref-qualifiers only available with %<-std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/error.cc:4672 +#: cp/error.cc:4673 #, gcc-internal-format msgid "incomplete type %qT used in nested name specifier" msgstr "" -#: cp/error.cc:4676 +#: cp/error.cc:4677 #, gcc-internal-format msgid "reference to %<%T::%D%> is ambiguous" msgstr "" -#: cp/error.cc:4690 +#: cp/error.cc:4691 #, gcc-internal-format msgid "%qD is not a member of %qT; did you mean %qs?" msgstr "" -#: cp/error.cc:4694 cp/typeck.cc:2874 +#: cp/error.cc:4695 cp/typeck.cc:2875 #, gcc-internal-format msgid "%qD is not a member of %qT" msgstr "" -#: cp/error.cc:4716 +#: cp/error.cc:4717 #, gcc-internal-format msgid "%qD is not a member of %qD; did you mean %qs?" msgstr "" -#: cp/error.cc:4720 cp/typeck.cc:3466 +#: cp/error.cc:4721 cp/typeck.cc:3467 #, gcc-internal-format msgid "%qD is not a member of %qD" msgstr "" -#: cp/error.cc:4731 +#: cp/error.cc:4732 #, gcc-internal-format msgid "%<::%D%> has not been declared; did you mean %qs?" msgstr "" -#: cp/error.cc:4735 +#: cp/error.cc:4736 #, gcc-internal-format msgid "%<::%D%> has not been declared" msgstr "" @@ -61514,7 +61778,7 @@ msgid "" "array" msgstr "" -#: cp/init.cc:901 cp/init.cc:982 +#: cp/init.cc:901 cp/init.cc:1014 #, gcc-internal-format msgid "%qD is initialized with itself" msgstr "" @@ -61524,376 +61788,376 @@ msgstr "" msgid "reference %qD is not yet bound to a value when used here" msgstr "" -#: cp/init.cc:911 +#: cp/init.cc:912 #, gcc-internal-format msgid "member %qD is used uninitialized" msgstr "" -#: cp/init.cc:959 +#: cp/init.cc:991 #, gcc-internal-format msgid "%qD should be initialized in the member initialization list" msgstr "" -#: cp/init.cc:1103 +#: cp/init.cc:1133 #, gcc-internal-format msgid "invalid initializer for array member %q#D" msgstr "" -#: cp/init.cc:1118 cp/init.cc:1144 cp/init.cc:2739 cp/method.cc:2494 +#: cp/init.cc:1148 cp/init.cc:1174 cp/init.cc:2769 cp/method.cc:2494 #, gcc-internal-format msgid "uninitialized const member in %q#T" msgstr "" -#: cp/init.cc:1120 cp/init.cc:1138 cp/init.cc:1146 cp/init.cc:2724 -#: cp/init.cc:2752 cp/method.cc:2497 cp/method.cc:2508 +#: cp/init.cc:1150 cp/init.cc:1168 cp/init.cc:1176 cp/init.cc:2754 +#: cp/init.cc:2782 cp/method.cc:2497 cp/method.cc:2508 #, gcc-internal-format msgid "%q#D should be initialized" msgstr "" -#: cp/init.cc:1136 cp/init.cc:2711 cp/method.cc:2505 +#: cp/init.cc:1166 cp/init.cc:2741 cp/method.cc:2505 #, gcc-internal-format msgid "uninitialized reference member in %q#T" msgstr "" -#: cp/init.cc:1321 +#: cp/init.cc:1351 #, gcc-internal-format msgid "%qD will be initialized after" msgstr "" -#: cp/init.cc:1324 +#: cp/init.cc:1354 #, gcc-internal-format msgid "base %qT will be initialized after" msgstr "" -#: cp/init.cc:1328 +#: cp/init.cc:1358 #, gcc-internal-format msgid " %q#D" msgstr "" -#: cp/init.cc:1330 +#: cp/init.cc:1360 #, gcc-internal-format msgid " base %qT" msgstr "" -#: cp/init.cc:1332 +#: cp/init.cc:1362 #, gcc-internal-format msgid " when initialized here" msgstr "" -#: cp/init.cc:1349 +#: cp/init.cc:1379 #, gcc-internal-format msgid "multiple initializations given for %qD" msgstr "" -#: cp/init.cc:1353 +#: cp/init.cc:1383 #, gcc-internal-format msgid "multiple initializations given for base %qT" msgstr "" -#: cp/init.cc:1440 +#: cp/init.cc:1470 #, gcc-internal-format msgid "initializations for multiple members of %qT" msgstr "" -#: cp/init.cc:1549 +#: cp/init.cc:1579 #, gcc-internal-format msgid "" "base class %q#T should be explicitly initialized in the copy constructor" msgstr "" -#: cp/init.cc:1785 cp/init.cc:1804 +#: cp/init.cc:1815 cp/init.cc:1834 #, gcc-internal-format msgid "class %qT does not have any field named %qD" msgstr "" -#: cp/init.cc:1791 +#: cp/init.cc:1821 #, gcc-internal-format msgid "" "%q#D is a static data member; it can only be initialized at its definition" msgstr "" -#: cp/init.cc:1798 +#: cp/init.cc:1828 #, gcc-internal-format msgid "%q#D is not a non-static data member of %qT" msgstr "" -#: cp/init.cc:1837 +#: cp/init.cc:1867 #, gcc-internal-format msgid "unnamed initializer for %qT, which has no base classes" msgstr "" -#: cp/init.cc:1845 +#: cp/init.cc:1875 #, gcc-internal-format msgid "unnamed initializer for %qT, which uses multiple inheritance" msgstr "" -#: cp/init.cc:1892 +#: cp/init.cc:1922 #, gcc-internal-format msgid "%qD is both a direct base and an indirect virtual base" msgstr "" -#: cp/init.cc:1900 +#: cp/init.cc:1930 #, gcc-internal-format msgid "type %qT is not a direct or virtual base of %qT" msgstr "" -#: cp/init.cc:1903 +#: cp/init.cc:1933 #, gcc-internal-format msgid "type %qT is not a direct base of %qT" msgstr "" -#: cp/init.cc:2015 cp/init.cc:4914 cp/typeck2.cc:1379 +#: cp/init.cc:2045 cp/init.cc:4944 cp/typeck2.cc:1378 #, gcc-internal-format msgid "array must be initialized with a brace-enclosed initializer" msgstr "" -#: cp/init.cc:2336 cp/semantics.cc:3989 rust/backend/rust-tree.cc:4168 +#: cp/init.cc:2366 cp/semantics.cc:4054 rust/backend/rust-tree.cc:4168 #, gcc-internal-format msgid "%qT is not a class type" msgstr "" -#: cp/init.cc:2394 +#: cp/init.cc:2424 #, gcc-internal-format msgid "incomplete type %qT does not have member %qD" msgstr "" -#: cp/init.cc:2408 +#: cp/init.cc:2438 #, gcc-internal-format msgid "invalid pointer to bit-field %qD" msgstr "" -#: cp/init.cc:2494 cp/typeck.cc:2361 rust/backend/rust-tree.cc:3811 +#: cp/init.cc:2524 cp/typeck.cc:2361 rust/backend/rust-tree.cc:3811 #, gcc-internal-format msgid "invalid use of non-static member function %qD" msgstr "" -#: cp/init.cc:2501 cp/semantics.cc:2308 +#: cp/init.cc:2531 cp/semantics.cc:2373 #, gcc-internal-format msgid "invalid use of non-static data member %qD" msgstr "" -#: cp/init.cc:2708 +#: cp/init.cc:2738 #, gcc-internal-format msgid "" "uninitialized reference member in %q#T using %<new%> without new-initializer" msgstr "" -#: cp/init.cc:2716 +#: cp/init.cc:2746 #, gcc-internal-format msgid "" "uninitialized reference member in base %q#T of %q#T using %<new%> without " "new-initializer" msgstr "" -#: cp/init.cc:2720 +#: cp/init.cc:2750 #, gcc-internal-format msgid "uninitialized reference member in base %q#T of %q#T" msgstr "" -#: cp/init.cc:2736 +#: cp/init.cc:2766 #, gcc-internal-format msgid "" "uninitialized const member in %q#T using %<new%> without new-initializer" msgstr "" -#: cp/init.cc:2744 +#: cp/init.cc:2774 #, gcc-internal-format msgid "" "uninitialized const member in base %q#T of %q#T using %<new%> without new-" "initializer" msgstr "" -#: cp/init.cc:2748 +#: cp/init.cc:2778 #, gcc-internal-format msgid "uninitialized const member in base %q#T of %q#T" msgstr "" -#: cp/init.cc:2863 +#: cp/init.cc:2893 #, gcc-internal-format msgid "" "placement new constructing an object of type %<%T [%wu]%> and size %qwu in a " "region of type %qT and size %qwi" msgstr "" -#: cp/init.cc:2866 +#: cp/init.cc:2896 #, gcc-internal-format msgid "" "placement new constructing an object of type %<%T [%wu]%> and size %qwu in a " "region of type %qT and size at most %qwu" msgstr "" -#: cp/init.cc:2876 +#: cp/init.cc:2906 #, gcc-internal-format msgid "" "placement new constructing an array of objects of type %qT and size %qwu in " "a region of type %qT and size %qwi" msgstr "" -#: cp/init.cc:2879 +#: cp/init.cc:2909 #, gcc-internal-format msgid "" "placement new constructing an array of objects of type %qT and size %qwu in " "a region of type %qT and size at most %qwu" msgstr "" -#: cp/init.cc:2888 +#: cp/init.cc:2918 #, gcc-internal-format msgid "" "placement new constructing an object of type %qT and size %qwu in a region " "of type %qT and size %qwi" msgstr "" -#: cp/init.cc:2891 +#: cp/init.cc:2921 #, gcc-internal-format msgid "" "placement new constructing an object of type %qT and size %qwu in a region " "of type %qT and size at most %qwu" msgstr "" -#: cp/init.cc:2908 +#: cp/init.cc:2938 #, gcc-internal-format msgid "at offset %wi from %qD declared here" msgstr "" -#: cp/init.cc:2912 +#: cp/init.cc:2942 #, gcc-internal-format msgid "at offset [%wi, %wi] from %qD declared here" msgstr "" -#: cp/init.cc:3110 +#: cp/init.cc:3140 #, gcc-internal-format msgid "integer overflow in array size" msgstr "" -#: cp/init.cc:3120 +#: cp/init.cc:3150 #, gcc-internal-format msgid "array size in new-expression must be constant" msgstr "" -#: cp/init.cc:3138 +#: cp/init.cc:3168 #, gcc-internal-format msgid "variably modified type not allowed in new-expression" msgstr "" -#: cp/init.cc:3154 +#: cp/init.cc:3184 #, gcc-internal-format msgid "" "non-constant array new length must be specified directly, not by %<typedef%>" msgstr "" -#: cp/init.cc:3156 +#: cp/init.cc:3186 #, gcc-internal-format msgid "" "non-constant array new length must be specified without parentheses around " "the type-id" msgstr "" -#: cp/init.cc:3166 +#: cp/init.cc:3196 #, gcc-internal-format msgid "invalid type %<void%> for %<new%>" msgstr "" -#: cp/init.cc:3172 +#: cp/init.cc:3202 #, gcc-internal-format msgid "" "%<new%> of %<initializer_list%> does not extend the lifetime of the " "underlying array" msgstr "" -#: cp/init.cc:3214 +#: cp/init.cc:3244 #, gcc-internal-format msgid "uninitialized const in %<new%> of %q#T" msgstr "" -#: cp/init.cc:3370 +#: cp/init.cc:3400 #, gcc-internal-format msgid "no suitable %qD found in class %qT" msgstr "" -#: cp/init.cc:3459 +#: cp/init.cc:3489 #, gcc-internal-format msgid "%<new%> of type %qT with extended alignment %d" msgstr "" -#: cp/init.cc:3462 +#: cp/init.cc:3492 #, gcc-internal-format msgid "uses %qD, which does not have an alignment parameter" msgstr "" -#: cp/init.cc:3465 +#: cp/init.cc:3495 #, gcc-internal-format msgid "use %<-faligned-new%> to enable C++17 over-aligned new support" msgstr "" -#: cp/init.cc:3661 +#: cp/init.cc:3691 #, gcc-internal-format msgid "parenthesized initializer in array new" msgstr "" -#: cp/init.cc:3932 +#: cp/init.cc:3962 #, gcc-internal-format msgid "size in array new must have integral type" msgstr "" -#: cp/init.cc:3961 +#: cp/init.cc:3991 #, gcc-internal-format msgid "new cannot be applied to a reference type" msgstr "" -#: cp/init.cc:3970 +#: cp/init.cc:4000 #, gcc-internal-format msgid "new cannot be applied to a function type" msgstr "" -#: cp/init.cc:4090 +#: cp/init.cc:4120 #, gcc-internal-format msgid "possible problem detected in invocation of operator %<delete []%>" msgstr "" -#: cp/init.cc:4094 +#: cp/init.cc:4124 #, gcc-internal-format msgid "" "neither the destructor nor the class-specific operator %<delete []%> will be " "called, even if they are declared when the class is defined" msgstr "" -#: cp/init.cc:4816 +#: cp/init.cc:4846 #, gcc-internal-format msgid "initializer ends prematurely" msgstr "" -#: cp/init.cc:5114 +#: cp/init.cc:5144 #, gcc-internal-format msgid "unknown array size in delete" msgstr "" -#: cp/init.cc:5148 +#: cp/init.cc:5178 #, gcc-internal-format msgid "possible problem detected in invocation of %<operator delete%>" msgstr "" -#: cp/init.cc:5153 +#: cp/init.cc:5183 #, gcc-internal-format msgid "" "neither the destructor nor the class-specific %<operator delete%> will be " "called, even if they are declared when the class is defined" msgstr "" -#: cp/init.cc:5168 +#: cp/init.cc:5198 #, gcc-internal-format msgid "" "deleting object of abstract class type %qT which has non-virtual destructor " "will cause undefined behavior" msgstr "" -#: cp/init.cc:5173 +#: cp/init.cc:5203 #, gcc-internal-format msgid "" "deleting object of polymorphic class type %qT which has non-virtual " "destructor might cause undefined behavior" msgstr "" -#: cp/init.cc:5480 +#: cp/init.cc:5510 #, gcc-internal-format msgid "type to vector delete is neither pointer or array type" msgstr "" @@ -62344,225 +62608,225 @@ msgstr "" msgid "encapsulation is malformed" msgstr "" -#: cp/module.cc:11383 +#: cp/module.cc:11377 #, gcc-internal-format msgid "conflicting global module declaration %#qD" msgstr "" -#: cp/module.cc:11385 +#: cp/module.cc:11379 #, gcc-internal-format msgid "existing declaration %#qD" msgstr "" -#: cp/module.cc:12423 +#: cp/module.cc:12419 #, gcc-internal-format msgid "definition of %qD does not match" msgstr "" -#: cp/module.cc:12425 +#: cp/module.cc:12421 #, gcc-internal-format msgid "existing definition %qD" msgstr "" -#: cp/module.cc:12437 +#: cp/module.cc:12433 #, gcc-internal-format msgid "... this enumerator %qD" msgstr "" -#: cp/module.cc:12439 +#: cp/module.cc:12435 #, gcc-internal-format msgid "enumerator %qD does not match ..." msgstr "" -#: cp/module.cc:12445 +#: cp/module.cc:12441 #, gcc-internal-format msgid "additional enumerators beginning with %qD" msgstr "" -#: cp/module.cc:12449 +#: cp/module.cc:12445 #, gcc-internal-format msgid "enumeration range differs" msgstr "" -#: cp/module.cc:13580 +#: cp/module.cc:13540 #, gcc-internal-format msgid "%q#D references internal linkage entity %q#D" msgstr "" -#: cp/module.cc:14163 +#: cp/module.cc:14123 #, gcc-internal-format msgid "recursive lazy load" msgstr "" #. Cannot import the current module. -#: cp/module.cc:14182 +#: cp/module.cc:14142 #, gcc-internal-format msgid "cannot import module in its own purview" msgstr "" -#: cp/module.cc:14183 cp/module.cc:19383 +#: cp/module.cc:14143 cp/module.cc:19380 #, gcc-internal-format msgid "module %qs declared here" msgstr "" -#: cp/module.cc:14527 +#: cp/module.cc:14487 #, gcc-internal-format msgid "indirect import %qs is not already loaded" msgstr "" -#: cp/module.cc:14533 +#: cp/module.cc:14493 #, gcc-internal-format msgid "import %qs has CRC mismatch" msgstr "" -#: cp/module.cc:16333 +#: cp/module.cc:16321 #, gcc-internal-format msgid "unable to represent further imported source locations" msgstr "" -#: cp/module.cc:17206 +#: cp/module.cc:17194 #, gcc-internal-format msgid "not exporting %<#define %E%> as it is a keyword" msgstr "" -#: cp/module.cc:17446 +#: cp/module.cc:17434 #, gcc-internal-format msgid "macro definitions of %qE corrupted" msgstr "" -#: cp/module.cc:17470 cp/module.cc:17473 +#: cp/module.cc:17458 cp/module.cc:17461 #, gcc-internal-format msgid "inconsistent imported macro definition %qE" msgstr "" -#: cp/module.cc:17479 +#: cp/module.cc:17467 #, gcc-internal-format msgid "%<#undef %E%>" msgstr "" -#: cp/module.cc:17481 +#: cp/module.cc:17469 #, gcc-internal-format msgid "%<#define %s%>" msgstr "" -#: cp/module.cc:17713 +#: cp/module.cc:17702 #, gcc-internal-format msgid "compiled module file is %qs" msgstr "" -#: cp/module.cc:17750 cp/module.cc:17755 +#: cp/module.cc:17739 cp/module.cc:17744 #, gcc-internal-format, gfc-internal-format msgid "compiled module is %sversion %s" msgstr "" -#: cp/module.cc:17761 +#: cp/module.cc:17750 #, gcc-internal-format, gfc-internal-format msgid "compiler is %sversion %s%s%s" msgstr "" -#: cp/module.cc:17791 +#: cp/module.cc:17780 #, gcc-internal-format msgid "module %qs found" msgstr "" -#: cp/module.cc:17793 +#: cp/module.cc:17782 #, gcc-internal-format msgid "header module expected, module %qs found" msgstr "" -#: cp/module.cc:17794 +#: cp/module.cc:17783 #, gcc-internal-format msgid "module %qs expected, header module found" msgstr "" -#: cp/module.cc:17809 +#: cp/module.cc:17798 #, gcc-internal-format msgid "module %qs CRC mismatch" msgstr "" -#: cp/module.cc:17823 +#: cp/module.cc:17812 #, gcc-internal-format msgid "target & host is %qs:%qs, expected %qs:%qs" msgstr "" -#: cp/module.cc:17835 +#: cp/module.cc:17824 #, gcc-internal-format msgid "language dialect differs %qs, expected %qs" msgstr "" -#: cp/module.cc:17851 +#: cp/module.cc:17840 #, gcc-internal-format msgid "module contains OpenMP, use %<-fopenmp%> to enable" msgstr "" -#: cp/module.cc:17868 +#: cp/module.cc:17857 #, gcc-internal-format msgid "fixed tree mismatch" msgstr "" -#: cp/module.cc:17959 +#: cp/module.cc:17948 #, gcc-internal-format msgid "interface partition is not exported" msgstr "" -#: cp/module.cc:18516 +#: cp/module.cc:18505 #, gcc-internal-format, gfc-internal-format msgid "failed to read compiled module cluster %u: %s" msgstr "" -#: cp/module.cc:18554 +#: cp/module.cc:18543 #, gcc-internal-format, gfc-internal-format msgid "failed to read compiled module: %s" msgstr "" -#: cp/module.cc:18564 +#: cp/module.cc:18553 #, gcc-internal-format msgid "" "consider using %<-fno-module-lazy%>, increasing %<-param-lazy-modules=%u%> " "value, or increasing the per-process file descriptor limit" msgstr "" -#: cp/module.cc:18569 +#: cp/module.cc:18558 #, gcc-internal-format msgid "imports must be built before being imported" msgstr "" -#: cp/module.cc:18572 +#: cp/module.cc:18561 #, gcc-internal-format msgid "returning to the gate for a mechanical issue" msgstr "" -#: cp/module.cc:19077 +#: cp/module.cc:19074 #, gcc-internal-format msgid "reading CMI %qs" msgstr "" -#: cp/module.cc:19228 +#: cp/module.cc:19225 #, gcc-internal-format msgid "failed to load binding %<%E%s%E%>" msgstr "" -#: cp/module.cc:19229 +#: cp/module.cc:19226 #, gcc-internal-format msgid "failed to load binding %<%E%s%E@%s%>" msgstr "" -#: cp/module.cc:19236 +#: cp/module.cc:19233 #, gcc-internal-format msgid "during load of binding %<%E%s%E%>" msgstr "" -#: cp/module.cc:19237 +#: cp/module.cc:19234 #, gcc-internal-format msgid "during load of binding %<%E%s%E@%s%>" msgstr "" -#: cp/module.cc:19299 +#: cp/module.cc:19296 #, gcc-internal-format msgid "failed to load pendings for %<%E%s%E%>" msgstr "" -#: cp/module.cc:19303 +#: cp/module.cc:19300 #, gcc-internal-format msgid "during load of pendings for %<%E%s%E%>" msgstr "" @@ -62574,102 +62838,102 @@ msgstr "" #. module, so we don't want to confuse things by having to think #. about whether 'extern "C++" { import foo; }' puts foo's #. contents into the global module all of a sudden. -#: cp/module.cc:19348 +#: cp/module.cc:19345 #, gcc-internal-format msgid "import of named module %qs inside language-linkage block" msgstr "" -#: cp/module.cc:19378 +#: cp/module.cc:19375 #, gcc-internal-format msgid "module already declared" msgstr "" -#: cp/module.cc:19379 +#: cp/module.cc:19376 #, gcc-internal-format msgid "module already imported" msgstr "" -#: cp/module.cc:19384 +#: cp/module.cc:19381 #, gcc-internal-format msgid "module %qs imported here" msgstr "" -#: cp/module.cc:19591 +#: cp/module.cc:19588 #, gcc-internal-format, gfc-internal-format msgid "unknown Compiled Module Interface: %s" msgstr "" -#: cp/module.cc:19634 +#: cp/module.cc:19631 #, gcc-internal-format msgid "cannot determine %<#include%> translation of %s: %s" msgstr "" -#: cp/module.cc:19652 +#: cp/module.cc:19649 #, gcc-internal-format msgid "include %qs translated to import" msgstr "" -#: cp/module.cc:19653 +#: cp/module.cc:19650 #, gcc-internal-format msgid "include %qs processed textually" msgstr "" -#: cp/module.cc:20012 +#: cp/module.cc:20009 #, gcc-internal-format msgid "C++ modules are incompatible with precompiled headers" msgstr "" -#: cp/module.cc:20016 +#: cp/module.cc:20013 #, gcc-internal-format msgid "C++ modules are incompatible with traditional preprocessing" msgstr "" -#: cp/module.cc:20026 +#: cp/module.cc:20023 #, gcc-internal-format msgid "macro debug output may be incomplete with modules" msgstr "" -#: cp/module.cc:20027 +#: cp/module.cc:20024 #, gcc-internal-format msgid "module dependencies require preprocessing" msgstr "" -#: cp/module.cc:20029 +#: cp/module.cc:20026 #, gcc-internal-format msgid "you should use the %<-%s%> option" msgstr "" -#: cp/module.cc:20064 cp/module.cc:20093 +#: cp/module.cc:20061 cp/module.cc:20090 #, gcc-internal-format msgid "invalid header name %qs" msgstr "" -#: cp/module.cc:20103 +#: cp/module.cc:20100 #, gcc-internal-format msgid "invalid module name %qs" msgstr "" -#: cp/module.cc:20293 +#: cp/module.cc:20298 #, gcc-internal-format msgid "%<-fmodule-only%> used for non-interface" msgstr "" -#: cp/module.cc:20333 +#: cp/module.cc:20338 #, gcc-internal-format msgid "writing CMI %qs" msgstr "" -#: cp/module.cc:20340 +#: cp/module.cc:20345 #, gcc-internal-format msgid "not writing module %qs due to errors" msgstr "" -#: cp/module.cc:20405 +#: cp/module.cc:20410 #, gcc-internal-format, gfc-internal-format msgid "failed to write compiled module: %s" msgstr "" -#: cp/module.cc:20502 +#: cp/module.cc:20507 #, gcc-internal-format msgid "unknown header kind %qs" msgstr "" @@ -62756,218 +63020,218 @@ msgstr "" msgid "%q#D declared here with module linkage" msgstr "" -#: cp/name-lookup.cc:5877 +#: cp/name-lookup.cc:5911 #, gcc-internal-format msgid "%<%T%s%D%> names destructor" msgstr "" -#: cp/name-lookup.cc:5893 +#: cp/name-lookup.cc:5927 #, gcc-internal-format msgid "using-declaration for non-member at class scope" msgstr "" -#: cp/name-lookup.cc:5901 +#: cp/name-lookup.cc:5935 #, gcc-internal-format msgid "" "%<using%> with enumeration scope %q#T only available with %<-std=c++20%> or " "%<-std=gnu++20%>" msgstr "" -#: cp/name-lookup.cc:5917 cp/pt.cc:18456 +#: cp/name-lookup.cc:5951 cp/pt.cc:18459 #, gcc-internal-format msgid "%qT is not a class, namespace, or enumeration" msgstr "" -#: cp/name-lookup.cc:5927 +#: cp/name-lookup.cc:5961 #, gcc-internal-format msgid "non-member using-declaration names constructor of %qT" msgstr "" -#: cp/name-lookup.cc:5938 cp/name-lookup.cc:6011 +#: cp/name-lookup.cc:5972 cp/name-lookup.cc:6045 #, gcc-internal-format msgid "using-declaration for member at non-class scope" msgstr "" -#: cp/name-lookup.cc:5961 +#: cp/name-lookup.cc:5995 #, gcc-internal-format msgid "%qT is not a direct base of %qT" msgstr "" -#: cp/name-lookup.cc:6021 +#: cp/name-lookup.cc:6055 #, gcc-internal-format msgid "did you mean %<using enum %T::%D%>?" msgstr "" -#: cp/name-lookup.cc:6033 +#: cp/name-lookup.cc:6067 #, gcc-internal-format msgid "%qD has not been declared in %qD" msgstr "" -#: cp/name-lookup.cc:6047 +#: cp/name-lookup.cc:6081 #, gcc-internal-format msgid "using-declaration may not name namespace %qD" msgstr "" -#: cp/name-lookup.cc:6058 +#: cp/name-lookup.cc:6092 #, gcc-internal-format msgid "%<%T::%D%> names constructor in %qT" msgstr "" -#: cp/name-lookup.cc:6151 +#: cp/name-lookup.cc:6185 #, gcc-internal-format msgid "declaration of %qD not in a namespace surrounding %qD" msgstr "" -#: cp/name-lookup.cc:6192 +#: cp/name-lookup.cc:6226 #, gcc-internal-format msgid "explicit qualification in declaration of %qD" msgstr "" -#: cp/name-lookup.cc:6202 +#: cp/name-lookup.cc:6236 #, gcc-internal-format msgid "%qD should have been declared inside %qD" msgstr "" -#: cp/name-lookup.cc:6271 +#: cp/name-lookup.cc:6305 #, gcc-internal-format msgid "%qD has not been declared within %qD" msgstr "" -#: cp/name-lookup.cc:6273 +#: cp/name-lookup.cc:6307 #, gcc-internal-format msgid "only here as a %<friend%>" msgstr "" -#: cp/name-lookup.cc:6327 +#: cp/name-lookup.cc:6361 #, gcc-internal-format msgid "%qD attribute requires a single NTBS argument" msgstr "" -#: cp/name-lookup.cc:6334 +#: cp/name-lookup.cc:6368 #, gcc-internal-format msgid "" "%qD attribute is meaningless since members of the anonymous namespace get " "local symbols" msgstr "" -#: cp/name-lookup.cc:6344 cp/name-lookup.cc:6371 +#: cp/name-lookup.cc:6378 cp/name-lookup.cc:6405 #, gcc-internal-format msgid "ignoring %qD attribute on anonymous namespace" msgstr "" -#: cp/name-lookup.cc:6350 +#: cp/name-lookup.cc:6384 #, gcc-internal-format msgid "ignoring %qD attribute on non-inline namespace" msgstr "" -#: cp/name-lookup.cc:6387 cp/name-lookup.cc:8778 +#: cp/name-lookup.cc:6421 cp/name-lookup.cc:8815 #, gcc-internal-format msgid "%qD attribute directive ignored" msgstr "" -#: cp/name-lookup.cc:6713 +#: cp/name-lookup.cc:6747 #, gcc-internal-format msgid "maximum limit of %d namespaces searched for %qE" msgstr "" -#: cp/name-lookup.cc:6765 +#: cp/name-lookup.cc:6799 #, gcc-internal-format msgid "suggested alternative:" msgid_plural "suggested alternatives:" msgstr[0] "" msgstr[1] "" -#: cp/name-lookup.cc:6771 +#: cp/name-lookup.cc:6805 #, gcc-internal-format msgid " %qE" msgstr "" -#: cp/name-lookup.cc:7085 +#: cp/name-lookup.cc:7119 #, gcc-internal-format msgid "" "%<std::%s%> is defined in header %qs; this is probably fixable by adding " "%<#include %s%>" msgstr "" -#: cp/name-lookup.cc:7091 +#: cp/name-lookup.cc:7125 #, gcc-internal-format msgid "%<std::%s%> is only available from %s onwards" msgstr "" -#: cp/name-lookup.cc:7527 +#: cp/name-lookup.cc:7561 #, gcc-internal-format msgid "the macro %qs had not yet been defined" msgstr "" -#: cp/name-lookup.cc:7530 +#: cp/name-lookup.cc:7564 #, gcc-internal-format msgid "it was later defined here" msgstr "" -#: cp/name-lookup.cc:8325 +#: cp/name-lookup.cc:8359 #, gcc-internal-format msgid "" "declaration of %<std::initializer_list%> does not match %<#include " "<initializer_list>%>, isn%'t a template" msgstr "" -#: cp/name-lookup.cc:8750 +#: cp/name-lookup.cc:8787 #, gcc-internal-format msgid "%<strong%> using directive no longer supported" msgstr "" -#: cp/name-lookup.cc:8753 +#: cp/name-lookup.cc:8790 #, gcc-internal-format msgid "you can use an inline namespace instead" msgstr "" -#: cp/name-lookup.cc:8772 +#: cp/name-lookup.cc:8809 #, gcc-internal-format msgid "%<omp::%E%> not allowed to be specified in this context" msgstr "" #. We only allow depth 255. -#: cp/name-lookup.cc:8864 +#: cp/name-lookup.cc:8901 #, gcc-internal-format, gfc-internal-format msgid "cannot nest more than %d namespaces" msgstr "" -#: cp/name-lookup.cc:8961 +#: cp/name-lookup.cc:8998 #, gcc-internal-format msgid "%<namespace %E%> is ambiguous" msgstr "" -#: cp/name-lookup.cc:8977 +#: cp/name-lookup.cc:9014 #, gcc-internal-format msgid "namespace alias %qD not allowed here, assuming %qD" msgstr "" -#: cp/name-lookup.cc:9064 +#: cp/name-lookup.cc:9101 #, gcc-internal-format msgid "inline namespace must be specified at initial definition" msgstr "" -#: cp/name-lookup.cc:9065 +#: cp/name-lookup.cc:9102 #, gcc-internal-format msgid "%qD defined here" msgstr "" -#: cp/name-lookup.cc:9113 +#: cp/name-lookup.cc:9150 #, gcc-internal-format msgid "%s namespace %qD conflicts with reachable definition" msgstr "" -#: cp/name-lookup.cc:9115 +#: cp/name-lookup.cc:9152 #, gcc-internal-format, gfc-internal-format msgid "reachable %s definition here" msgstr "" -#: cp/name-lookup.cc:9158 +#: cp/name-lookup.cc:9195 #, gcc-internal-format msgid "XXX entering %<pop_everything ()%>" msgstr "" -#: cp/name-lookup.cc:9167 +#: cp/name-lookup.cc:9204 #, gcc-internal-format msgid "XXX leaving %<pop_everything ()%>" msgstr "" @@ -62992,7 +63256,7 @@ msgstr "" msgid "%<LEXER_DEBUGGING_ENABLED_P%> is not set to true" msgstr "" -#: cp/parser.cc:1607 cp/parser.cc:47814 +#: cp/parser.cc:1607 cp/parser.cc:47880 #, gcc-internal-format msgid "" "%<#pragma omp declare %s%> not immediately followed by function declaration " @@ -63252,7 +63516,7 @@ msgstr "" msgid "%<concept%> only available with %<-std=c++20%> or %<-fconcepts%>" msgstr "" -#: cp/parser.cc:3754 cp/parser.cc:31344 +#: cp/parser.cc:3754 cp/parser.cc:31350 #, gcc-internal-format msgid "%<requires%> only available with %<-std=c++20%> or %<-fconcepts%>" msgstr "" @@ -63439,7 +63703,7 @@ msgstr "" msgid "fold-expressions only available with %<-std=c++17%> or %<-std=gnu++17%>" msgstr "" -#: cp/parser.cc:5995 cp/parser.cc:6150 cp/parser.cc:6334 cp/semantics.cc:4336 +#: cp/parser.cc:5995 cp/parser.cc:6150 cp/parser.cc:6334 cp/semantics.cc:4401 #, gcc-internal-format msgid "expected primary-expression" msgstr "" @@ -63494,7 +63758,7 @@ msgstr "" msgid "template-id not allowed for destructor in C++20" msgstr "" -#: cp/parser.cc:6735 cp/parser.cc:32577 +#: cp/parser.cc:6735 cp/parser.cc:32583 #, gcc-internal-format msgid "remove the %qs" msgstr "" @@ -63514,7 +63778,7 @@ msgstr "" msgid "expected unqualified-id" msgstr "" -#: cp/parser.cc:6921 cp/typeck.cc:3164 cp/typeck.cc:3167 cp/typeck.cc:3184 +#: cp/parser.cc:6921 cp/typeck.cc:3165 cp/typeck.cc:3168 cp/typeck.cc:3185 #, gcc-internal-format msgid "%qD is not a template" msgstr "" @@ -63564,7 +63828,7 @@ msgstr "" msgid "wrong number of arguments to %<__builtin_addressof%>" msgstr "" -#: cp/parser.cc:7734 cp/pt.cc:20917 +#: cp/parser.cc:7734 cp/pt.cc:20928 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_launder%>" msgstr "" @@ -63599,7 +63863,7 @@ msgstr "" msgid "cannot use multidimensional subscript in OpenMP array section" msgstr "" -#: cp/parser.cc:8687 cp/typeck.cc:3052 +#: cp/parser.cc:8687 cp/typeck.cc:3053 #, gcc-internal-format msgid "invalid use of %qD" msgstr "" @@ -63624,7 +63888,7 @@ msgstr "" msgid "types may not be defined in %<noexcept%> expressions" msgstr "" -#: cp/parser.cc:9444 cp/parser.cc:33979 +#: cp/parser.cc:9444 cp/parser.cc:33996 #, gcc-internal-format msgid "types may not be defined in %qs expressions" msgstr "" @@ -63786,8 +64050,8 @@ msgstr "" msgid "capture of non-variable %qE" msgstr "" -#: cp/parser.cc:11688 cp/parser.cc:11698 cp/semantics.cc:4178 -#: cp/semantics.cc:4193 +#: cp/parser.cc:11688 cp/parser.cc:11698 cp/semantics.cc:4243 +#: cp/semantics.cc:4258 #, gcc-internal-format msgid "%q#D declared here" msgstr "" @@ -63832,7 +64096,7 @@ msgid "" "with %<-std=c++2b%> or %<-std=gnu++2b%>" msgstr "" -#: cp/parser.cc:11932 cp/pt.cc:14718 +#: cp/parser.cc:11932 cp/pt.cc:14711 #, gcc-internal-format msgid "" "a lambda with captures may not have an explicit object parameter of an " @@ -63971,7 +64235,7 @@ msgid "" "%<-std=gnu++17%>" msgstr "" -#: cp/parser.cc:13819 cp/parser.cc:34491 +#: cp/parser.cc:13819 cp/parser.cc:34508 #, gcc-internal-format msgid "expected selection-statement" msgstr "" @@ -64039,7 +64303,7 @@ msgid "" "inconsistent begin/end types in range-based %<for%> statement: %qT and %qT" msgstr "" -#: cp/parser.cc:14700 cp/parser.cc:34494 +#: cp/parser.cc:14700 cp/parser.cc:34511 #, gcc-internal-format msgid "expected iteration-statement" msgstr "" @@ -64071,7 +64335,7 @@ msgstr "" msgid "ISO C++ forbids computed gotos" msgstr "" -#: cp/parser.cc:14915 cp/parser.cc:34497 +#: cp/parser.cc:14915 cp/parser.cc:34514 #, gcc-internal-format msgid "expected jump-statement" msgstr "" @@ -64165,7 +64429,7 @@ msgstr "" msgid "%<export%> not part of following module-directive" msgstr "" -#: cp/parser.cc:15403 cp/parser.cc:28013 +#: cp/parser.cc:15403 cp/parser.cc:28019 #, gcc-internal-format msgid "extra %<;%>" msgstr "" @@ -64300,7 +64564,7 @@ msgstr "" msgid "class definition may not be declared a friend" msgstr "" -#: cp/parser.cc:16746 cp/parser.cc:28555 +#: cp/parser.cc:16746 cp/parser.cc:28561 #, gcc-internal-format msgid "templates may not be %<virtual%>" msgstr "" @@ -64373,12 +64637,12 @@ msgstr "" msgid "cannot expand initializer for member %qD" msgstr "" -#: cp/parser.cc:17514 cp/pt.cc:27578 +#: cp/parser.cc:17514 cp/pt.cc:27598 #, gcc-internal-format msgid "mem-initializer for %qD follows constructor delegation" msgstr "" -#: cp/parser.cc:17526 cp/pt.cc:27590 +#: cp/parser.cc:17526 cp/pt.cc:27610 #, gcc-internal-format msgid "constructor delegation follows mem-initializer for %qD" msgstr "" @@ -65052,7 +65316,7 @@ msgstr "" msgid "%qT not permitted in template argument" msgstr "" -#: cp/parser.cc:25052 cp/typeck2.cc:336 cp/typeck2.cc:383 cp/typeck2.cc:2497 +#: cp/parser.cc:25052 cp/typeck2.cc:336 cp/typeck2.cc:382 cp/typeck2.cc:2496 #: rust/backend/rust-tree.cc:3909 #, gcc-internal-format msgid "invalid use of %qT" @@ -65088,7 +65352,7 @@ msgstr "" msgid "%<this%> specifier in template parameter declaration" msgstr "" -#: cp/parser.cc:25746 +#: cp/parser.cc:25791 #, gcc-internal-format msgid "an explicit object parameter cannot be a function parameter pack" msgstr "" @@ -65238,255 +65502,255 @@ msgstr "" #. In a lambda this should work, but doesn't currently. #. We're in a lambda, but it isn't the innermost class. #. This should work, but currently doesn't. -#: cp/parser.cc:27653 cp/pt.cc:4305 +#: cp/parser.cc:27653 cp/pt.cc:4306 #, gcc-internal-format msgid "unexpanded parameter pack in local class in lambda" msgstr "" -#: cp/parser.cc:27753 cp/parser.cc:34500 +#: cp/parser.cc:27759 cp/parser.cc:34517 #, gcc-internal-format msgid "expected class-key" msgstr "" -#: cp/parser.cc:27778 +#: cp/parser.cc:27784 #, gcc-internal-format msgid "" "ISO C++ forbids typename key in template template parameter; use %<-std=c+" "+17%> or %<-std=gnu++17%>" msgstr "" -#: cp/parser.cc:27782 +#: cp/parser.cc:27788 #, gcc-internal-format msgid "expected %<class%> or %<typename%>" msgstr "" -#: cp/parser.cc:28032 +#: cp/parser.cc:28038 #, gcc-internal-format msgid "in C++03 a class-key must be used when declaring a friend" msgstr "" -#: cp/parser.cc:28063 +#: cp/parser.cc:28069 #, gcc-internal-format msgid "friend declaration does not name a class or function" msgstr "" -#: cp/parser.cc:28081 +#: cp/parser.cc:28087 #, gcc-internal-format msgid "a storage class on an anonymous aggregate in class scope is not allowed" msgstr "" -#: cp/parser.cc:28183 +#: cp/parser.cc:28189 #, gcc-internal-format msgid "" "default member initializers for bit-fields only available with %<-std=c+" "+20%> or %<-std=gnu++20%>" msgstr "" -#: cp/parser.cc:28190 +#: cp/parser.cc:28196 #, gcc-internal-format msgid "default member initializer for unnamed bit-field" msgstr "" -#: cp/parser.cc:28203 +#: cp/parser.cc:28209 #, gcc-internal-format msgid "ISO C++ allows bit-field attributes only before the %<:%> token" msgstr "" -#: cp/parser.cc:28362 +#: cp/parser.cc:28368 #, gcc-internal-format msgid "bit-field %qD has non-integral type %qT" msgstr "" -#: cp/parser.cc:28390 +#: cp/parser.cc:28396 #, gcc-internal-format msgid "pure-specifier on function-definition" msgstr "" -#: cp/parser.cc:28411 +#: cp/parser.cc:28417 #, gcc-internal-format msgid "extra %<;%> after in-class function definition" msgstr "" -#: cp/parser.cc:28460 +#: cp/parser.cc:28466 #, gcc-internal-format msgid "stray %<,%> at end of member declaration" msgstr "" -#: cp/parser.cc:28474 +#: cp/parser.cc:28480 #, gcc-internal-format msgid "expected %<;%> at end of member declaration" msgstr "" -#: cp/parser.cc:28549 +#: cp/parser.cc:28555 #, gcc-internal-format msgid "invalid pure specifier (only %<= 0%> is allowed)" msgstr "" -#: cp/parser.cc:28584 +#: cp/parser.cc:28590 #, gcc-internal-format msgid "a brace-enclosed initializer is not allowed here" msgstr "" -#: cp/parser.cc:28714 +#: cp/parser.cc:28720 #, gcc-internal-format msgid "%<virtual%> specified more than once in base-specifier" msgstr "" -#: cp/parser.cc:28734 +#: cp/parser.cc:28740 #, gcc-internal-format msgid "more than one access specifier in base-specifier" msgstr "" -#: cp/parser.cc:28758 +#: cp/parser.cc:28764 #, gcc-internal-format msgid "keyword %<typename%> not allowed outside of templates" msgstr "" -#: cp/parser.cc:28761 +#: cp/parser.cc:28767 #, gcc-internal-format msgid "" "keyword %<typename%> not allowed in this context (the base class is " "implicitly a type)" msgstr "" -#: cp/parser.cc:28960 cp/parser.cc:29054 +#: cp/parser.cc:28966 cp/parser.cc:29060 #, gcc-internal-format msgid "types may not be defined in an exception-specification" msgstr "" -#: cp/parser.cc:29062 +#: cp/parser.cc:29068 #, gcc-internal-format msgid "ISO C++17 does not allow dynamic exception specifications" msgstr "" -#: cp/parser.cc:29068 +#: cp/parser.cc:29074 #, gcc-internal-format msgid "dynamic exception specifications are deprecated in C++11" msgstr "" -#: cp/parser.cc:29112 +#: cp/parser.cc:29118 #, gcc-internal-format msgid "invalid use of %<auto%> in exception-specification" msgstr "" -#: cp/parser.cc:29153 +#: cp/parser.cc:29159 #, gcc-internal-format msgid "" "%<try%> in %<constexpr%> function only available with %<-std=c++20%> or %<-" "std=gnu++20%>" msgstr "" -#: cp/parser.cc:29265 +#: cp/parser.cc:29271 #, gcc-internal-format msgid "types may not be defined in exception-declarations" msgstr "" -#: cp/parser.cc:29831 +#: cp/parser.cc:29837 #, gcc-internal-format msgid "expected attribute argument as balanced token sequence" msgstr "" -#: cp/parser.cc:29977 +#: cp/parser.cc:29983 #, gcc-internal-format msgid "attribute using prefix used together with scoped attribute token" msgstr "" -#: cp/parser.cc:29991 +#: cp/parser.cc:29997 #, gcc-internal-format msgid "expected an identifier for the attribute name" msgstr "" #. e.g. [[attr()]]. -#: cp/parser.cc:30134 +#: cp/parser.cc:30140 #, gcc-internal-format msgid "parentheses must be omitted if %qE attribute argument list is empty" msgstr "" -#: cp/parser.cc:30169 +#: cp/parser.cc:30175 #, gcc-internal-format msgid "attribute %qs specified multiple times" msgstr "" -#: cp/parser.cc:30211 +#: cp/parser.cc:30217 #, gcc-internal-format msgid "expected attribute before %<...%>" msgstr "" -#: cp/parser.cc:30214 +#: cp/parser.cc:30220 #, gcc-internal-format msgid "attribute with no arguments contains no parameter packs" msgstr "" -#: cp/parser.cc:30260 +#: cp/parser.cc:30266 #, gcc-internal-format msgid "expected contract-role" msgstr "" #. We got some other token other than a ':'. -#: cp/parser.cc:30341 +#: cp/parser.cc:30347 #, gcc-internal-format msgid "expected contract semantic or level" msgstr "" -#: cp/parser.cc:30351 +#: cp/parser.cc:30357 #, gcc-internal-format msgid "expected contract level: %<default%>, %<audit%>, or %<axiom%>" msgstr "" -#: cp/parser.cc:30361 +#: cp/parser.cc:30367 #, gcc-internal-format msgid "invalid use of contract role for explicit semantic" msgstr "" -#: cp/parser.cc:30498 +#: cp/parser.cc:30504 #, gcc-internal-format msgid "contracts are only available with %<-fcontracts%>" msgstr "" -#: cp/parser.cc:30657 +#: cp/parser.cc:30663 #, gcc-internal-format msgid "" "attribute using prefix only available with %<-std=c++17%> or %<-std=gnu++17%>" msgstr "" -#: cp/parser.cc:31006 cp/parser.cc:31015 +#: cp/parser.cc:31012 cp/parser.cc:31021 #, gcc-internal-format msgid "expression must be enclosed in parentheses" msgstr "" -#: cp/parser.cc:31361 +#: cp/parser.cc:31367 #, gcc-internal-format msgid "missing additional %<requires%> to start a requires-expression" msgstr "" -#: cp/parser.cc:31604 +#: cp/parser.cc:31610 #, gcc-internal-format msgid "" "testing if a concept-id is a valid expression; add %<requires%> to check " "satisfaction" msgstr "" -#: cp/parser.cc:31742 +#: cp/parser.cc:31748 #, gcc-internal-format msgid "result type is not a plain type-constraint" msgstr "" -#: cp/parser.cc:31750 +#: cp/parser.cc:31756 #, gcc-internal-format msgid "return-type-requirement is not a type-constraint" msgstr "" -#: cp/parser.cc:32268 +#: cp/parser.cc:32274 #, gcc-internal-format msgid "specializing member %<%T::%E%> requires %<template<>%> syntax" msgstr "" -#: cp/parser.cc:32273 +#: cp/parser.cc:32279 #, gcc-internal-format msgid "invalid declaration of %<%T::%E%>" msgstr "" -#: cp/parser.cc:32277 +#: cp/parser.cc:32283 #, gcc-internal-format msgid "too few template-parameter-lists" msgstr "" @@ -65495,29 +65759,29 @@ msgstr "" #. something like: #. #. template <class T> template <class U> void S::f(); -#: cp/parser.cc:32284 +#: cp/parser.cc:32290 #, gcc-internal-format msgid "too many template-parameter-lists" msgstr "" -#: cp/parser.cc:32576 +#: cp/parser.cc:32582 #, gcc-internal-format msgid "template-id not allowed for constructor in C++20" msgstr "" -#: cp/parser.cc:32687 +#: cp/parser.cc:32693 #, gcc-internal-format msgid "named return values are no longer supported" msgstr "" -#: cp/parser.cc:32860 +#: cp/parser.cc:32866 #, gcc-internal-format msgid "" "ISO C++ did not adopt string literal operator templates taking an argument " "pack of characters" msgstr "" -#: cp/parser.cc:32869 +#: cp/parser.cc:32875 #, gcc-internal-format msgid "" "literal operator template %qD has invalid parameter list; expected non-type " @@ -65525,417 +65789,417 @@ msgid "" "type" msgstr "" -#: cp/parser.cc:32875 +#: cp/parser.cc:32881 #, gcc-internal-format msgid "" "literal operator template %qD has invalid parameter list; expected non-type " "template parameter pack %<<char...>%>" msgstr "" -#: cp/parser.cc:32982 +#: cp/parser.cc:32988 #, gcc-internal-format msgid "" "template-introductions are not part of C++20 concepts; use %qs to enable" msgstr "" -#: cp/parser.cc:32992 +#: cp/parser.cc:32998 #, gcc-internal-format msgid "no matching concept for template-introduction" msgstr "" -#: cp/parser.cc:33015 +#: cp/parser.cc:33021 #, gcc-internal-format msgid "invalid declaration of member template in local class" msgstr "" -#: cp/parser.cc:33024 +#: cp/parser.cc:33030 #, gcc-internal-format msgid "template with C linkage" msgstr "" -#: cp/parser.cc:33044 +#: cp/parser.cc:33050 #, gcc-internal-format msgid "invalid explicit specialization" msgstr "" -#: cp/parser.cc:33156 +#: cp/parser.cc:33162 #, gcc-internal-format msgid "template declaration of %<typedef%>" msgstr "" -#: cp/parser.cc:33207 +#: cp/parser.cc:33213 #, gcc-internal-format msgid "a class template declaration must not declare anything else" msgstr "" -#: cp/parser.cc:33259 +#: cp/parser.cc:33265 #, gcc-internal-format msgid "explicit template specialization cannot have a storage class" msgstr "" -#: cp/parser.cc:33565 +#: cp/parser.cc:33582 #, gcc-internal-format msgid "%<>>%> should be %<> >%> within a nested template argument list" msgstr "" -#: cp/parser.cc:33578 +#: cp/parser.cc:33595 #, gcc-internal-format msgid "spurious %<>>%>, use %<>%> to terminate a template argument list" msgstr "" -#: cp/parser.cc:33609 +#: cp/parser.cc:33626 #, gcc-internal-format msgid "%qs should be %qs to terminate a template argument list" msgstr "" -#: cp/parser.cc:33926 +#: cp/parser.cc:33943 #, gcc-internal-format msgid "%<sizeof...%> argument must be surrounded by parentheses" msgstr "" -#: cp/parser.cc:34103 +#: cp/parser.cc:34120 #, gcc-internal-format msgid "invalid use of %qD in linkage specification" msgstr "" -#: cp/parser.cc:34114 +#: cp/parser.cc:34131 #, gcc-internal-format msgid "duplicate %qD specifier" msgstr "" -#: cp/parser.cc:34117 +#: cp/parser.cc:34134 #, gcc-internal-format msgid "%qD specifier conflicts with %qs" msgstr "" -#: cp/parser.cc:34129 +#: cp/parser.cc:34146 #, gcc-internal-format msgid "%<__thread%> before %qD" msgstr "" -#: cp/parser.cc:34145 +#: cp/parser.cc:34162 #, gcc-internal-format msgid "%qD specifier conflicts with %<typedef%>" msgstr "" -#: cp/parser.cc:34254 +#: cp/parser.cc:34271 #, gcc-internal-format msgid "ISO C++ 1998 does not support %<long long%>" msgstr "" -#: cp/parser.cc:34265 +#: cp/parser.cc:34282 #, gcc-internal-format msgid "both %<__thread%> and %<thread_local%> specified" msgstr "" -#: cp/parser.cc:34270 +#: cp/parser.cc:34287 #, gcc-internal-format msgid "duplicate %qD" msgstr "" -#: cp/parser.cc:34299 +#: cp/parser.cc:34316 #, gcc-internal-format msgid "duplicate %qs" msgstr "" -#: cp/parser.cc:34351 +#: cp/parser.cc:34368 #, gcc-internal-format msgid "expected %<new%>" msgstr "" -#: cp/parser.cc:34354 +#: cp/parser.cc:34371 #, gcc-internal-format msgid "expected %<delete%>" msgstr "" -#: cp/parser.cc:34357 +#: cp/parser.cc:34374 #, gcc-internal-format msgid "expected %<return%>" msgstr "" -#: cp/parser.cc:34363 +#: cp/parser.cc:34380 #, gcc-internal-format msgid "expected %<extern%>" msgstr "" -#: cp/parser.cc:34366 +#: cp/parser.cc:34383 #, gcc-internal-format msgid "expected %<static_assert%>" msgstr "" -#: cp/parser.cc:34369 +#: cp/parser.cc:34386 #, gcc-internal-format msgid "expected %<decltype%>" msgstr "" -#: cp/parser.cc:34372 +#: cp/parser.cc:34389 #, gcc-internal-format msgid "expected %<operator%>" msgstr "" -#: cp/parser.cc:34375 +#: cp/parser.cc:34392 #, gcc-internal-format msgid "expected %<class%>" msgstr "" -#: cp/parser.cc:34378 +#: cp/parser.cc:34395 #, gcc-internal-format msgid "expected %<template%>" msgstr "" -#: cp/parser.cc:34381 +#: cp/parser.cc:34398 #, gcc-internal-format msgid "expected %<namespace%>" msgstr "" -#: cp/parser.cc:34384 +#: cp/parser.cc:34401 #, gcc-internal-format msgid "expected %<using%>" msgstr "" -#: cp/parser.cc:34387 +#: cp/parser.cc:34404 #, gcc-internal-format msgid "expected %<asm%>" msgstr "" -#: cp/parser.cc:34390 +#: cp/parser.cc:34407 #, gcc-internal-format msgid "expected %<try%>" msgstr "" -#: cp/parser.cc:34393 +#: cp/parser.cc:34410 #, gcc-internal-format msgid "expected %<catch%>" msgstr "" -#: cp/parser.cc:34396 +#: cp/parser.cc:34413 #, gcc-internal-format msgid "expected %<throw%>" msgstr "" -#: cp/parser.cc:34399 +#: cp/parser.cc:34416 #, gcc-internal-format msgid "expected %<auto%>" msgstr "" -#: cp/parser.cc:34402 +#: cp/parser.cc:34419 #, gcc-internal-format msgid "expected %<__label__%>" msgstr "" -#: cp/parser.cc:34405 +#: cp/parser.cc:34422 #, gcc-internal-format msgid "expected %<@try%>" msgstr "" -#: cp/parser.cc:34408 +#: cp/parser.cc:34425 #, gcc-internal-format msgid "expected %<@synchronized%>" msgstr "" -#: cp/parser.cc:34411 +#: cp/parser.cc:34428 #, gcc-internal-format msgid "expected %<@throw%>" msgstr "" -#: cp/parser.cc:34414 +#: cp/parser.cc:34431 #, gcc-internal-format msgid "expected %<__transaction_atomic%>" msgstr "" -#: cp/parser.cc:34417 +#: cp/parser.cc:34434 #, gcc-internal-format msgid "expected %<__transaction_relaxed%>" msgstr "" -#: cp/parser.cc:34420 +#: cp/parser.cc:34437 #, gcc-internal-format msgid "expected %<co_yield%>" msgstr "" -#: cp/parser.cc:34452 +#: cp/parser.cc:34469 #, gcc-internal-format msgid "expected %<::%>" msgstr "" -#: cp/parser.cc:34464 +#: cp/parser.cc:34481 #, gcc-internal-format msgid "expected %<...%>" msgstr "" -#: cp/parser.cc:34467 +#: cp/parser.cc:34484 #, gcc-internal-format msgid "expected %<*%>" msgstr "" -#: cp/parser.cc:34470 +#: cp/parser.cc:34487 #, gcc-internal-format msgid "expected %<~%>" msgstr "" -#: cp/parser.cc:34476 +#: cp/parser.cc:34493 #, gcc-internal-format msgid "expected %<:%> or %<::%>" msgstr "" -#: cp/parser.cc:34503 +#: cp/parser.cc:34520 #, gcc-internal-format msgid "expected %<class%>, %<typename%>, or %<template%>" msgstr "" -#: cp/parser.cc:34838 +#: cp/parser.cc:34855 #, gcc-internal-format msgid "redundant enum-key %<enum%s%> in reference to %q#T" msgstr "" -#: cp/parser.cc:34989 +#: cp/parser.cc:35006 #, gcc-internal-format msgid "%qs tag used in naming %q#T" msgstr "" -#: cp/parser.cc:34994 +#: cp/parser.cc:35011 #, gcc-internal-format msgid "%q#T was previously declared here" msgstr "" -#: cp/parser.cc:35115 +#: cp/parser.cc:35132 #, gcc-internal-format msgid "redundant class-key %qs in reference to %q#T" msgstr "" -#: cp/parser.cc:35273 cp/parser.cc:35307 +#: cp/parser.cc:35290 cp/parser.cc:35324 #, gcc-internal-format msgid "%qT declared with a mismatched class-key %qs" msgstr "" -#: cp/parser.cc:35280 cp/parser.cc:35313 +#: cp/parser.cc:35297 cp/parser.cc:35330 #, gcc-internal-format msgid "remove the class-key or replace it with %qs" msgstr "" -#: cp/parser.cc:35281 cp/parser.cc:35314 +#: cp/parser.cc:35298 cp/parser.cc:35331 #, gcc-internal-format msgid "replace the class-key with %qs" msgstr "" -#: cp/parser.cc:35288 +#: cp/parser.cc:35305 #, gcc-internal-format msgid "%qT defined as %qs here" msgstr "" -#: cp/parser.cc:35289 +#: cp/parser.cc:35306 #, gcc-internal-format msgid "%qT first declared as %qs here" msgstr "" -#: cp/parser.cc:35372 +#: cp/parser.cc:35389 #, gcc-internal-format msgid "%qD redeclared with different access" msgstr "" -#: cp/parser.cc:35393 +#: cp/parser.cc:35410 #, gcc-internal-format msgid "" "in C++98 %<template%> (as a disambiguator) is only allowed within templates" msgstr "" -#: cp/parser.cc:35643 +#: cp/parser.cc:35660 #, gcc-internal-format msgid "file ends in default argument" msgstr "" -#: cp/parser.cc:35884 cp/parser.cc:37192 cp/parser.cc:37381 +#: cp/parser.cc:35901 cp/parser.cc:37209 cp/parser.cc:37398 #, gcc-internal-format msgid "misplaced %<@%D%> Objective-C++ construct" msgstr "" -#: cp/parser.cc:35955 +#: cp/parser.cc:35972 #, gcc-internal-format msgid "objective-c++ message receiver expected" msgstr "" -#: cp/parser.cc:36025 +#: cp/parser.cc:36042 #, gcc-internal-format msgid "objective-c++ message argument(s) are expected" msgstr "" -#: cp/parser.cc:36056 +#: cp/parser.cc:36073 #, gcc-internal-format msgid "%<@encode%> must specify a type as an argument" msgstr "" -#: cp/parser.cc:36460 +#: cp/parser.cc:36477 #, gcc-internal-format msgid "invalid Objective-C++ selector name" msgstr "" -#: cp/parser.cc:36535 cp/parser.cc:36553 +#: cp/parser.cc:36552 cp/parser.cc:36570 #, gcc-internal-format msgid "objective-c++ method declaration is expected" msgstr "" -#: cp/parser.cc:36547 cp/parser.cc:36613 +#: cp/parser.cc:36564 cp/parser.cc:36630 #, gcc-internal-format msgid "method attributes must be specified at the end" msgstr "" -#: cp/parser.cc:36656 +#: cp/parser.cc:36673 #, gcc-internal-format msgid "stray %qs between Objective-C++ methods" msgstr "" -#: cp/parser.cc:36853 cp/parser.cc:36860 cp/parser.cc:36867 +#: cp/parser.cc:36870 cp/parser.cc:36877 cp/parser.cc:36884 #, gcc-internal-format msgid "invalid type for instance variable" msgstr "" -#: cp/parser.cc:36984 +#: cp/parser.cc:37001 #, gcc-internal-format msgid "identifier expected after %<@protocol%>" msgstr "" -#: cp/parser.cc:37157 +#: cp/parser.cc:37174 #, gcc-internal-format msgid "" "attributes may not be specified before the %<@%D%> Objective-C++ keyword" msgstr "" -#: cp/parser.cc:37164 +#: cp/parser.cc:37181 #, gcc-internal-format msgid "prefix attributes are ignored before %<@%D%>" msgstr "" -#: cp/parser.cc:37444 cp/parser.cc:37451 cp/parser.cc:37458 +#: cp/parser.cc:37461 cp/parser.cc:37468 cp/parser.cc:37475 #, gcc-internal-format msgid "invalid type for property" msgstr "" -#: cp/parser.cc:37620 +#: cp/parser.cc:37637 #, gcc-internal-format msgid "unknown property attribute %qE" msgstr "" -#: cp/parser.cc:38865 +#: cp/parser.cc:38909 #, gcc-internal-format msgid "expected integer expression list" msgstr "" -#: cp/parser.cc:38882 +#: cp/parser.cc:38926 #, gcc-internal-format msgid "%<wait%> expression must be integral" msgstr "" -#: cp/parser.cc:39638 +#: cp/parser.cc:39682 #, gcc-internal-format msgid "expected %<scalar%>, %<aggregate%>, %<all%>" msgstr "" -#: cp/parser.cc:40029 +#: cp/parser.cc:40073 #, gcc-internal-format msgid "invalid reduction-identifier" msgstr "" -#: cp/parser.cc:40998 +#: cp/parser.cc:41042 #, gcc-internal-format msgid "types may not be defined in iterator type" msgstr "" @@ -65944,154 +66208,154 @@ msgstr "" #. check above and add one in semantics.cc (to properly handle templates). #. Base this on the allocator/align modifiers check for the 'allocate' clause #. in semantics.cc's finish_omp_clauses. -#: cp/parser.cc:42626 +#: cp/parser.cc:42670 #, gcc-internal-format msgid "%<#pragma omp allocate%> not yet supported" msgstr "" -#: cp/parser.cc:44077 +#: cp/parser.cc:44121 #, gcc-internal-format msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop" msgstr "" -#: cp/parser.cc:44817 +#: cp/parser.cc:44861 #, gcc-internal-format msgid "%<ordered%> clause with parameter on range-based %<for%> loop" msgstr "" -#: cp/parser.cc:44899 cp/pt.cc:18116 +#: cp/parser.cc:44943 cp/pt.cc:18119 #, gcc-internal-format msgid "iteration variable %qD should not be reduction" msgstr "" -#: cp/parser.cc:47776 +#: cp/parser.cc:47842 #, gcc-internal-format msgid "%<#pragma omp declare %s%> followed by %<#pragma omp declare %s%>" msgstr "" -#: cp/parser.cc:48546 +#: cp/parser.cc:48612 #, gcc-internal-format msgid "" "OpenMP directive other than %<declare simd%> or %<declare variant%> " "appertains to a declaration" msgstr "" -#: cp/parser.cc:49153 +#: cp/parser.cc:49219 #, gcc-internal-format msgid "invalid initializer clause" msgstr "" -#: cp/parser.cc:49184 +#: cp/parser.cc:49250 #, gcc-internal-format msgid "expected id-expression (arguments)" msgstr "" -#: cp/parser.cc:49196 +#: cp/parser.cc:49262 #, gcc-internal-format msgid "" "one of the initializer call arguments should be %<omp_priv%> or %<&omp_priv%>" msgstr "" -#: cp/parser.cc:49299 +#: cp/parser.cc:49365 #, gcc-internal-format msgid "types may not be defined in declare reduction type list" msgstr "" -#: cp/parser.cc:49319 cp/semantics.cc:6373 +#: cp/parser.cc:49385 cp/semantics.cc:6442 #, gcc-internal-format msgid "predeclared arithmetic type %qT in %<#pragma omp declare reduction%>" msgstr "" -#: cp/parser.cc:49323 cp/semantics.cc:6381 +#: cp/parser.cc:49389 cp/semantics.cc:6450 #, gcc-internal-format msgid "function or array type %qT in %<#pragma omp declare reduction%>" msgstr "" -#: cp/parser.cc:49326 cp/pt.cc:14611 cp/semantics.cc:6387 +#: cp/parser.cc:49392 cp/pt.cc:14604 cp/semantics.cc:6456 #, gcc-internal-format msgid "reference type %qT in %<#pragma omp declare reduction%>" msgstr "" -#: cp/parser.cc:49329 cp/semantics.cc:6393 +#: cp/parser.cc:49395 cp/semantics.cc:6462 #, gcc-internal-format msgid "" "%<const%>, %<volatile%> or %<__restrict%>-qualified type %qT in %<#pragma " "omp declare reduction%>" msgstr "" -#: cp/parser.cc:50049 +#: cp/parser.cc:50115 #, gcc-internal-format msgid "%<#pragma acc routine%> names a set of overloads" msgstr "" -#: cp/parser.cc:50059 +#: cp/parser.cc:50125 #, gcc-internal-format msgid "%qD does not refer to a namespace scope function" msgstr "" #. cancel-and-throw is unimplemented. -#: cp/parser.cc:50420 +#: cp/parser.cc:50486 #, gcc-internal-format msgid "%<atomic_cancel%>" msgstr "" -#: cp/parser.cc:50467 cp/semantics.cc:11405 +#: cp/parser.cc:50533 cp/semantics.cc:11474 #, gcc-internal-format msgid "%<__transaction_relaxed%> without transactional memory support enabled" msgstr "" -#: cp/parser.cc:50469 cp/semantics.cc:11407 +#: cp/parser.cc:50535 cp/semantics.cc:11476 #, gcc-internal-format msgid "%<__transaction_atomic%> without transactional memory support enabled" msgstr "" -#: cp/parser.cc:50615 +#: cp/parser.cc:50681 #, gcc-internal-format msgid "" "outer %<__transaction_cancel%> not within outer %<__transaction_atomic%>" msgstr "" -#: cp/parser.cc:50618 +#: cp/parser.cc:50684 #, gcc-internal-format msgid " or a %<transaction_may_cancel_outer%> function" msgstr "" -#: cp/parser.cc:50665 +#: cp/parser.cc:50731 #, gcc-internal-format msgid "malformed %<#pragma GCC pch_preprocess%>" msgstr "" -#: cp/parser.cc:50965 +#: cp/parser.cc:51031 #, gcc-internal-format msgid "%<#pragma omp requires%> may only be used at file or namespace scope" msgstr "" -#: cp/parser.cc:50976 +#: cp/parser.cc:51042 #, gcc-internal-format msgid "%<#pragma omp assumes%> may only be used at file or namespace scope" msgstr "" -#: cp/parser.cc:51053 +#: cp/parser.cc:51119 #, gcc-internal-format msgid "%<#pragma GCC %s%> must be inside a function" msgstr "" -#: cp/parser.cc:51195 +#: cp/parser.cc:51261 #, gcc-internal-format msgid "multi-source compilation not implemented for C++" msgstr "" -#: cp/parser.cc:51232 +#: cp/parser.cc:51298 #, gcc-internal-format msgid "placeholder type not allowed in this context" msgstr "" -#: cp/parser.cc:51441 +#: cp/parser.cc:51507 #, gcc-internal-format msgid "implicit templates may not be %<virtual%>" msgstr "" -#: cp/parser.cc:51497 +#: cp/parser.cc:51563 #, gcc-internal-format msgid "%<extern \"C\"%> linkage started here" msgstr "" @@ -66180,7 +66444,7 @@ msgstr "" msgid "specialization of %qD after instantiation" msgstr "" -#: cp/pt.cc:2046 cp/semantics.cc:6243 +#: cp/pt.cc:2046 cp/semantics.cc:6312 #, gcc-internal-format msgid "%s %#qD" msgstr "" @@ -66352,69 +66616,69 @@ msgstr "" msgid "argument to %<__integer_pack%> must be between 0 and %d" msgstr "" -#: cp/pt.cc:4168 +#: cp/pt.cc:4169 #, gcc-internal-format msgid "base initializer expansion %qT contains no parameter packs" msgstr "" -#: cp/pt.cc:4236 +#: cp/pt.cc:4237 #, gcc-internal-format msgid "expansion pattern %qT contains no parameter packs" msgstr "" -#: cp/pt.cc:4238 +#: cp/pt.cc:4239 #, gcc-internal-format msgid "expansion pattern %qE contains no parameter packs" msgstr "" -#: cp/pt.cc:4322 +#: cp/pt.cc:4323 #, gcc-internal-format msgid "parameter packs not expanded with %<...%>:" msgstr "" -#: cp/pt.cc:4339 cp/pt.cc:5220 +#: cp/pt.cc:4340 cp/pt.cc:5221 #, gcc-internal-format msgid " %qD" msgstr "" -#: cp/pt.cc:4341 +#: cp/pt.cc:4342 #, gcc-internal-format, gfc-internal-format msgid " %s" msgstr "" -#: cp/pt.cc:4467 +#: cp/pt.cc:4468 #, gcc-internal-format msgid "declaration of template parameter %q+D shadows template parameter" msgstr "" -#: cp/pt.cc:4470 +#: cp/pt.cc:4471 #, gcc-internal-format msgid "declaration of %q+#D shadows template parameter" msgstr "" -#: cp/pt.cc:4472 +#: cp/pt.cc:4473 #, gcc-internal-format msgid "template parameter %qD declared here" msgstr "" -#: cp/pt.cc:5156 +#: cp/pt.cc:5157 #, gcc-internal-format msgid "specialization of variable concept %q#D" msgstr "" -#: cp/pt.cc:5215 +#: cp/pt.cc:5216 #, gcc-internal-format msgid "template parameters not deducible in partial specialization:" msgstr "" -#: cp/pt.cc:5238 +#: cp/pt.cc:5239 #, gcc-internal-format msgid "" "partial specialization %q+D does not specialize any template arguments; to " "define the primary template, remove the template argument list" msgstr "" -#: cp/pt.cc:5242 +#: cp/pt.cc:5243 #, gcc-internal-format msgid "" "partial specialization %q+D does not specialize any template arguments and " @@ -66422,63 +66686,63 @@ msgid "" "template, remove the template argument list" msgstr "" -#: cp/pt.cc:5246 cp/pt.cc:5257 cp/pt.cc:5265 +#: cp/pt.cc:5247 cp/pt.cc:5258 cp/pt.cc:5266 #, gcc-internal-format msgid "primary template here" msgstr "" -#: cp/pt.cc:5254 +#: cp/pt.cc:5255 #, gcc-internal-format msgid "" "partial specialization is not more specialized than the primary template " "because it replaces multiple parameters with a pack expansion" msgstr "" -#: cp/pt.cc:5264 +#: cp/pt.cc:5265 #, gcc-internal-format msgid "too many arguments for partial specialization %qT" msgstr "" -#: cp/pt.cc:5279 +#: cp/pt.cc:5280 #, gcc-internal-format msgid "partial specialization %qD is not more specialized than" msgstr "" -#: cp/pt.cc:5281 +#: cp/pt.cc:5282 #, gcc-internal-format msgid "primary template %qD" msgstr "" -#: cp/pt.cc:5323 +#: cp/pt.cc:5324 #, gcc-internal-format msgid "" "parameter pack argument %qE must be at the end of the template argument list" msgstr "" -#: cp/pt.cc:5326 +#: cp/pt.cc:5327 #, gcc-internal-format msgid "" "parameter pack argument %qT must be at the end of the template argument list" msgstr "" -#: cp/pt.cc:5388 +#: cp/pt.cc:5389 #, gcc-internal-format msgid "type %qT of template argument %qE depends on a template parameter" msgid_plural "type %qT of template argument %qE depends on template parameters" msgstr[0] "" msgstr[1] "" -#: cp/pt.cc:5456 +#: cp/pt.cc:5457 #, gcc-internal-format msgid "declaration of %qD ambiguates earlier template instantiation for %qD" msgstr "" -#: cp/pt.cc:5460 +#: cp/pt.cc:5461 #, gcc-internal-format msgid "partial specialization of %qD after instantiation of %qD" msgstr "" -#: cp/pt.cc:5643 +#: cp/pt.cc:5644 #, gcc-internal-format msgid "no default argument for %qD" msgstr "" @@ -66487,52 +66751,52 @@ msgstr "" #. (DR 2032), or alias template can only have one #. parameter pack, at the end of the template #. parameter list. -#: cp/pt.cc:5666 +#: cp/pt.cc:5667 #, gcc-internal-format msgid "parameter pack %q+D must be at the end of the template parameter list" msgstr "" -#: cp/pt.cc:5702 +#: cp/pt.cc:5703 #, gcc-internal-format msgid "" "default template arguments may not be used in function template friend re-" "declaration" msgstr "" -#: cp/pt.cc:5705 +#: cp/pt.cc:5706 #, gcc-internal-format msgid "" "default template arguments may not be used in template friend declarations" msgstr "" -#: cp/pt.cc:5708 +#: cp/pt.cc:5709 #, gcc-internal-format msgid "" "default template arguments may not be used in function templates without %<-" "std=c++11%> or %<-std=gnu++11%>" msgstr "" -#: cp/pt.cc:5711 +#: cp/pt.cc:5712 #, gcc-internal-format msgid "default template arguments may not be used in partial specializations" msgstr "" -#: cp/pt.cc:5714 cp/pt.cc:5772 +#: cp/pt.cc:5715 cp/pt.cc:5773 #, gcc-internal-format msgid "default argument for template parameter for class enclosing %qD" msgstr "" -#: cp/pt.cc:5883 +#: cp/pt.cc:5884 #, gcc-internal-format msgid "template %qD declared" msgstr "" -#: cp/pt.cc:5891 +#: cp/pt.cc:5892 #, gcc-internal-format msgid "template class without a name" msgstr "" -#: cp/pt.cc:5899 +#: cp/pt.cc:5900 #, gcc-internal-format msgid "member template %qD may not have virt-specifiers" msgstr "" @@ -66542,538 +66806,538 @@ msgstr "" #. An allocation function can be a function #. template. ... Template allocation functions shall #. have two or more parameters. -#: cp/pt.cc:5922 +#: cp/pt.cc:5923 #, gcc-internal-format msgid "invalid template declaration of %qD" msgstr "" -#: cp/pt.cc:6074 +#: cp/pt.cc:6075 #, gcc-internal-format msgid "template definition of non-template %q#D" msgstr "" -#: cp/pt.cc:6113 +#: cp/pt.cc:6114 #, gcc-internal-format msgid "expected %d levels of template parms for %q#D, got %d" msgstr "" -#: cp/pt.cc:6127 +#: cp/pt.cc:6128 #, gcc-internal-format msgid "got %d template parameters for %q#D" msgstr "" -#: cp/pt.cc:6130 +#: cp/pt.cc:6131 #, gcc-internal-format msgid "got %d template parameters for %q#T" msgstr "" -#: cp/pt.cc:6132 +#: cp/pt.cc:6133 #, gcc-internal-format, gfc-internal-format msgid " but %d required" msgstr "" -#: cp/pt.cc:6153 +#: cp/pt.cc:6154 #, gcc-internal-format msgid "template arguments to %qD do not match original template %qD" msgstr "" -#: cp/pt.cc:6156 +#: cp/pt.cc:6157 #, gcc-internal-format msgid "use %<template<>%> for an explicit specialization" msgstr "" -#: cp/pt.cc:6178 +#: cp/pt.cc:6179 #, gcc-internal-format msgid "redeclaration of %qD with different constraints" msgstr "" -#: cp/pt.cc:6323 +#: cp/pt.cc:6324 #, gcc-internal-format msgid "%qT is not a template type" msgstr "" -#: cp/pt.cc:6336 +#: cp/pt.cc:6337 #, gcc-internal-format msgid "template specifiers not specified in declaration of %qD" msgstr "" -#: cp/pt.cc:6347 +#: cp/pt.cc:6348 #, gcc-internal-format, gfc-internal-format msgid "redeclared with %d template parameter" msgid_plural "redeclared with %d template parameters" msgstr[0] "" msgstr[1] "" -#: cp/pt.cc:6351 +#: cp/pt.cc:6352 #, gcc-internal-format msgid "previous declaration %qD used %d template parameter" msgid_plural "previous declaration %qD used %d template parameters" msgstr[0] "" msgstr[1] "" -#: cp/pt.cc:6385 +#: cp/pt.cc:6386 #, gcc-internal-format msgid "template parameter %q+#D" msgstr "" -#: cp/pt.cc:6387 +#: cp/pt.cc:6388 #, gcc-internal-format msgid "redeclared here as %q#D" msgstr "" -#: cp/pt.cc:6389 +#: cp/pt.cc:6390 #, gcc-internal-format msgid "redeclared here" msgstr "" -#: cp/pt.cc:6400 +#: cp/pt.cc:6401 #, gcc-internal-format msgid "declaration of template parameter %q+#D with different constraints" msgstr "" -#: cp/pt.cc:6403 cp/pt.cc:6431 +#: cp/pt.cc:6404 cp/pt.cc:6432 #, gcc-internal-format msgid "original declaration appeared here" msgstr "" -#: cp/pt.cc:6428 +#: cp/pt.cc:6429 #, gcc-internal-format msgid "redeclaration of %q#D with different constraints" msgstr "" -#: cp/pt.cc:6839 cp/pt.cc:6909 +#: cp/pt.cc:6840 cp/pt.cc:6910 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT" msgstr "" -#: cp/pt.cc:6842 +#: cp/pt.cc:6843 #, gcc-internal-format msgid "it must be the address of a function with external linkage" msgstr "" -#: cp/pt.cc:6845 +#: cp/pt.cc:6846 #, gcc-internal-format msgid "it must be the name of a function with external linkage" msgstr "" -#: cp/pt.cc:6859 +#: cp/pt.cc:6860 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because %qD has no linkage" msgstr "" -#: cp/pt.cc:6863 +#: cp/pt.cc:6864 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because %qD does not have " "external linkage" msgstr "" -#: cp/pt.cc:6912 +#: cp/pt.cc:6913 #, gcc-internal-format msgid "it must be a pointer-to-member of the form %<&X::Y%>" msgstr "" -#: cp/pt.cc:6914 +#: cp/pt.cc:6915 #, gcc-internal-format msgid "because it is a member of %qT" msgstr "" -#: cp/pt.cc:6983 +#: cp/pt.cc:6984 #, gcc-internal-format msgid " couldn%'t deduce template parameter %qD" msgstr "" -#: cp/pt.cc:6992 +#: cp/pt.cc:6993 #, gcc-internal-format msgid " types %qT and %qT have incompatible cv-qualifiers" msgstr "" -#: cp/pt.cc:7001 +#: cp/pt.cc:7002 #, gcc-internal-format msgid " mismatched types %qT and %qT" msgstr "" -#: cp/pt.cc:7010 +#: cp/pt.cc:7011 #, gcc-internal-format msgid " template parameter %qD is not a parameter pack, but argument %qD is" msgstr "" -#: cp/pt.cc:7021 +#: cp/pt.cc:7022 #, gcc-internal-format msgid " template argument %qE does not match pointer-to-member constant %qE" msgstr "" -#: cp/pt.cc:7031 +#: cp/pt.cc:7032 #, gcc-internal-format msgid " %qE is not equivalent to %qE" msgstr "" -#: cp/pt.cc:7040 +#: cp/pt.cc:7041 #, gcc-internal-format msgid " inconsistent parameter pack deduction with %qT and %qT" msgstr "" -#: cp/pt.cc:7052 +#: cp/pt.cc:7053 #, gcc-internal-format msgid " deduced conflicting types for parameter %qT (%qT and %qT)" msgstr "" -#: cp/pt.cc:7056 +#: cp/pt.cc:7057 #, gcc-internal-format msgid " deduced conflicting values for non-type parameter %qE (%qE and %qE)" msgstr "" -#: cp/pt.cc:7067 +#: cp/pt.cc:7068 #, gcc-internal-format msgid " variable-sized array type %qT is not a valid template argument" msgstr "" -#: cp/pt.cc:7078 +#: cp/pt.cc:7079 #, gcc-internal-format msgid " member function type %qT is not a valid template argument" msgstr "" -#: cp/pt.cc:7121 +#: cp/pt.cc:7122 #, gcc-internal-format msgid " cannot convert %qE (type %qT) to type %qT" msgstr "" -#: cp/pt.cc:7134 +#: cp/pt.cc:7135 #, gcc-internal-format msgid " %qT is an ambiguous base class of %qT" msgstr "" -#: cp/pt.cc:7138 +#: cp/pt.cc:7139 #, gcc-internal-format msgid " %qT is not derived from %qT" msgstr "" -#: cp/pt.cc:7149 +#: cp/pt.cc:7150 #, gcc-internal-format msgid "" " template parameters of a template template argument are inconsistent with " "other deduced template arguments" msgstr "" -#: cp/pt.cc:7159 +#: cp/pt.cc:7160 #, gcc-internal-format msgid " cannot deduce a template for %qT from non-template type %qT" msgstr "" -#: cp/pt.cc:7169 +#: cp/pt.cc:7170 #, gcc-internal-format msgid " template argument %qE does not match %qE" msgstr "" -#: cp/pt.cc:7220 +#: cp/pt.cc:7221 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT because %qE is not a " "variable or function" msgstr "" -#: cp/pt.cc:7229 +#: cp/pt.cc:7230 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT in C++98 because %qD does " "not have external linkage" msgstr "" -#: cp/pt.cc:7239 +#: cp/pt.cc:7240 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT because %qD has no linkage" msgstr "" -#: cp/pt.cc:7256 +#: cp/pt.cc:7257 #, gcc-internal-format msgid "the address of %qD is not a valid template argument" msgstr "" -#: cp/pt.cc:7266 +#: cp/pt.cc:7267 #, gcc-internal-format msgid "" "the address of the %qT subobject of %qD is not a valid template argument" msgstr "" -#: cp/pt.cc:7273 +#: cp/pt.cc:7274 #, gcc-internal-format msgid "" "the address of %qD is not a valid template argument because it does not have " "static storage duration" msgstr "" -#: cp/pt.cc:7291 +#: cp/pt.cc:7292 #, gcc-internal-format msgid "" "%qD is not a valid template argument because %qD is a variable, not the " "address of a variable" msgstr "" -#: cp/pt.cc:7299 +#: cp/pt.cc:7300 #, gcc-internal-format msgid "" "%qE is not a valid template argument for %qT because it is not the address " "of a variable" msgstr "" -#: cp/pt.cc:7421 +#: cp/pt.cc:7422 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because string literals " "can never be used in this context" msgstr "" -#: cp/pt.cc:7586 +#: cp/pt.cc:7587 #, gcc-internal-format msgid "in template argument for type %qT" msgstr "" -#: cp/pt.cc:7600 +#: cp/pt.cc:7601 #, gcc-internal-format msgid "template argument %qE for type %qT not a compile-time constant" msgstr "" -#: cp/pt.cc:7686 +#: cp/pt.cc:7687 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because of conflicts in cv-" "qualification" msgstr "" -#: cp/pt.cc:7694 +#: cp/pt.cc:7695 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is not an lvalue" msgstr "" -#: cp/pt.cc:7712 +#: cp/pt.cc:7713 #, gcc-internal-format msgid "" "%q#D is not a valid template argument for type %qT because a reference " "variable does not have a constant address" msgstr "" -#: cp/pt.cc:7771 +#: cp/pt.cc:7772 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is a pointer" msgstr "" -#: cp/pt.cc:7773 +#: cp/pt.cc:7774 #, gcc-internal-format msgid "try using %qE instead" msgstr "" -#: cp/pt.cc:7827 +#: cp/pt.cc:7828 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is of type %qT" msgstr "" -#: cp/pt.cc:8419 +#: cp/pt.cc:8420 #, gcc-internal-format msgid "ignoring attributes on template argument %qT" msgstr "" -#: cp/pt.cc:8435 +#: cp/pt.cc:8436 #, gcc-internal-format msgid "ignoring attributes in template argument %qE" msgstr "" -#: cp/pt.cc:8579 +#: cp/pt.cc:8580 #, gcc-internal-format msgid "injected-class-name %qD used as template template argument" msgstr "" -#: cp/pt.cc:8608 +#: cp/pt.cc:8609 #, gcc-internal-format msgid "invalid use of destructor %qE as a type" msgstr "" -#: cp/pt.cc:8613 +#: cp/pt.cc:8614 #, gcc-internal-format msgid "to refer to a type member of a template parameter, use %<typename %E%>" msgstr "" -#: cp/pt.cc:8629 cp/pt.cc:8663 cp/pt.cc:8713 +#: cp/pt.cc:8630 cp/pt.cc:8664 cp/pt.cc:8714 #, gcc-internal-format msgid "type/value mismatch at argument %d in template parameter list for %qD" msgstr "" -#: cp/pt.cc:8637 +#: cp/pt.cc:8638 #, gcc-internal-format msgid " expected a constant of type %qT, got %qT" msgstr "" -#: cp/pt.cc:8645 +#: cp/pt.cc:8646 #, gcc-internal-format msgid "" " ambiguous template argument for non-type template parameter is treated as " "function type" msgstr "" -#: cp/pt.cc:8651 +#: cp/pt.cc:8652 #, gcc-internal-format msgid " expected a class template, got %qE" msgstr "" -#: cp/pt.cc:8654 +#: cp/pt.cc:8655 #, gcc-internal-format msgid " expected a type, got %qE" msgstr "" -#: cp/pt.cc:8668 +#: cp/pt.cc:8669 #, gcc-internal-format msgid " expected a type, got %qT" msgstr "" -#: cp/pt.cc:8671 +#: cp/pt.cc:8672 #, gcc-internal-format msgid " expected a class template, got %qT" msgstr "" -#: cp/pt.cc:8717 +#: cp/pt.cc:8718 #, gcc-internal-format msgid " expected a template of type %qD, got %qT" msgstr "" -#: cp/pt.cc:8731 +#: cp/pt.cc:8732 #, gcc-internal-format msgid "constraint mismatch at argument %d in template parameter list for %qD" msgstr "" -#: cp/pt.cc:8734 +#: cp/pt.cc:8735 #, gcc-internal-format msgid " expected %qD but got %qD" msgstr "" -#: cp/pt.cc:8822 +#: cp/pt.cc:8823 #, gcc-internal-format msgid "could not convert template argument %qE from %qT to %qT" msgstr "" -#: cp/pt.cc:8960 cp/pt.cc:9286 +#: cp/pt.cc:8961 cp/pt.cc:9287 #, gcc-internal-format, gfc-internal-format msgid "template argument %d is invalid" msgstr "" -#: cp/pt.cc:8975 cp/pt.cc:9120 +#: cp/pt.cc:8976 cp/pt.cc:9121 #, gcc-internal-format, gfc-internal-format msgid "wrong number of template arguments (%d, should be %d)" msgstr "" -#: cp/pt.cc:9116 +#: cp/pt.cc:9117 #, gcc-internal-format, gfc-internal-format msgid "wrong number of template arguments (%d, should be at least %d)" msgstr "" -#: cp/pt.cc:9125 +#: cp/pt.cc:9126 #, gcc-internal-format msgid "provided for %qD" msgstr "" -#: cp/pt.cc:9150 +#: cp/pt.cc:9151 #, gcc-internal-format msgid "" "pack expansion argument for non-pack parameter %qD of alias template %qD" msgstr "" -#: cp/pt.cc:9154 +#: cp/pt.cc:9155 #, gcc-internal-format msgid "pack expansion argument for non-pack parameter %qD of concept %qD" msgstr "" -#: cp/pt.cc:9252 +#: cp/pt.cc:9253 #, gcc-internal-format msgid "" "so any instantiation with a non-empty parameter pack would be ill-formed" msgstr "" -#: cp/pt.cc:9819 +#: cp/pt.cc:9820 #, gcc-internal-format msgid "%q#D is not a function template" msgstr "" -#: cp/pt.cc:9982 +#: cp/pt.cc:9983 #, gcc-internal-format msgid "non-template type %qT used as a template" msgstr "" -#: cp/pt.cc:9984 +#: cp/pt.cc:9985 #, gcc-internal-format msgid "for template declaration %q+D" msgstr "" -#: cp/pt.cc:10128 cp/pt.cc:22190 +#: cp/pt.cc:10154 cp/pt.cc:22201 #, gcc-internal-format msgid "template constraint failure for %qD" msgstr "" -#: cp/pt.cc:10515 +#: cp/pt.cc:10507 #, gcc-internal-format msgid "use of invalid variable template %qE" msgstr "" -#: cp/pt.cc:11238 +#: cp/pt.cc:11231 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d (use %<-ftemplate-" "depth=%> to increase the maximum)" msgstr "" -#: cp/pt.cc:11982 +#: cp/pt.cc:11975 #, gcc-internal-format msgid "score argument must be constant integer expression" msgstr "" -#: cp/pt.cc:11991 +#: cp/pt.cc:11984 #, gcc-internal-format msgid "score argument must be non-negative" msgstr "" -#: cp/pt.cc:12018 +#: cp/pt.cc:12011 #, gcc-internal-format msgid "property must be constant integer expression or string literal" msgstr "" -#: cp/pt.cc:12567 +#: cp/pt.cc:12560 #, gcc-internal-format msgid "flexible array member %qD in union" msgstr "" -#: cp/pt.cc:13057 +#: cp/pt.cc:13050 #, gcc-internal-format msgid "fold of empty expansion over %O" msgstr "" -#: cp/pt.cc:13507 +#: cp/pt.cc:13500 #, gcc-internal-format msgid "%qE is not the entire pattern of the pack expansion" msgstr "" -#: cp/pt.cc:13595 +#: cp/pt.cc:13588 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %qT" msgstr "" -#: cp/pt.cc:13598 +#: cp/pt.cc:13591 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %qE" msgstr "" -#: cp/pt.cc:14286 +#: cp/pt.cc:14279 #, gcc-internal-format msgid " when instantiating default argument for call to %qD" msgstr "" -#: cp/pt.cc:14382 +#: cp/pt.cc:14375 #, gcc-internal-format msgid "creating pointer to member function of non-class type %qT" msgstr "" -#: cp/pt.cc:15374 +#: cp/pt.cc:15367 #, gcc-internal-format, gfc-internal-format msgid "mismatched argument pack lengths (%d vs %d)" msgstr "" @@ -67091,305 +67355,305 @@ msgstr "" #. #. is an attempt to declare a variable with function #. type. -#: cp/pt.cc:15563 +#: cp/pt.cc:15556 #, gcc-internal-format msgid "variable %qD has function type" msgstr "" -#: cp/pt.cc:15764 +#: cp/pt.cc:15757 #, gcc-internal-format msgid "invalid parameter type %qT" msgstr "" -#: cp/pt.cc:15766 +#: cp/pt.cc:15759 #, gcc-internal-format msgid "in declaration %q+D" msgstr "" -#: cp/pt.cc:15893 +#: cp/pt.cc:15886 #, gcc-internal-format msgid "function returning an array" msgstr "" -#: cp/pt.cc:15895 +#: cp/pt.cc:15888 #, gcc-internal-format msgid "function returning a function" msgstr "" -#: cp/pt.cc:16591 +#: cp/pt.cc:16594 #, gcc-internal-format msgid "forming reference to void" msgstr "" -#: cp/pt.cc:16593 +#: cp/pt.cc:16596 #, gcc-internal-format msgid "forming pointer to reference type %qT" msgstr "" -#: cp/pt.cc:16595 +#: cp/pt.cc:16598 #, gcc-internal-format msgid "forming reference to reference type %qT" msgstr "" -#: cp/pt.cc:16608 +#: cp/pt.cc:16611 #, gcc-internal-format msgid "forming pointer to qualified function type %qT" msgstr "" -#: cp/pt.cc:16611 +#: cp/pt.cc:16614 #, gcc-internal-format msgid "forming reference to qualified function type %qT" msgstr "" -#: cp/pt.cc:16659 +#: cp/pt.cc:16662 #, gcc-internal-format msgid "creating pointer to member of non-class type %qT" msgstr "" -#: cp/pt.cc:16665 +#: cp/pt.cc:16668 #, gcc-internal-format msgid "creating pointer to member reference type %qT" msgstr "" -#: cp/pt.cc:16671 +#: cp/pt.cc:16674 #, gcc-internal-format msgid "creating pointer to member of type void" msgstr "" -#: cp/pt.cc:16737 +#: cp/pt.cc:16740 #, gcc-internal-format msgid "creating array of %qT" msgstr "" -#: cp/pt.cc:16774 +#: cp/pt.cc:16777 #, gcc-internal-format msgid "%qD is instantiated for an empty pack" msgstr "" -#: cp/pt.cc:16795 +#: cp/pt.cc:16798 #, gcc-internal-format msgid "%qT is not a class, struct, or union type" msgstr "" -#: cp/pt.cc:16835 +#: cp/pt.cc:16838 #, gcc-internal-format msgid "%qT resolves to %qT, which is not an enumeration type" msgstr "" -#: cp/pt.cc:16843 +#: cp/pt.cc:16846 #, gcc-internal-format msgid "%qT resolves to %qT, which is not a class type" msgstr "" -#: cp/pt.cc:16961 +#: cp/pt.cc:16964 #, gcc-internal-format msgid "use of %qs in template" msgstr "" -#: cp/pt.cc:17280 +#: cp/pt.cc:17283 #, gcc-internal-format msgid "qualifying type %qT does not match destructor name ~%qT" msgstr "" -#: cp/pt.cc:17295 +#: cp/pt.cc:17298 #, gcc-internal-format msgid "" "dependent-name %qE is parsed as a non-type, but instantiation yields a type" msgstr "" -#: cp/pt.cc:17297 +#: cp/pt.cc:17300 #, gcc-internal-format msgid "say %<typename %E%> if a type is meant" msgstr "" -#: cp/pt.cc:17390 +#: cp/pt.cc:17393 #, gcc-internal-format msgid "initializer for %q#D expands to an empty list of expressions" msgstr "" -#: cp/pt.cc:19413 cp/pt.cc:21558 +#: cp/pt.cc:19416 cp/pt.cc:21569 #, gcc-internal-format msgid "invalid use of pack expansion expression" msgstr "" -#: cp/pt.cc:19417 cp/pt.cc:21562 +#: cp/pt.cc:19420 cp/pt.cc:21573 #, gcc-internal-format msgid "use %<...%> to expand argument pack" msgstr "" -#: cp/pt.cc:19547 +#: cp/pt.cc:19550 #, gcc-internal-format msgid "empty initializer in lambda init-capture" msgstr "" -#: cp/pt.cc:20832 +#: cp/pt.cc:20843 #, gcc-internal-format msgid "" "%qD was not declared in this scope, and no declarations were found by " "argument-dependent lookup at the point of instantiation" msgstr "" -#: cp/pt.cc:20867 +#: cp/pt.cc:20878 #, gcc-internal-format msgid "declarations in dependent base %qT are not found by unqualified lookup" msgstr "" -#: cp/pt.cc:20872 +#: cp/pt.cc:20883 #, gcc-internal-format msgid "use %<this->%D%> instead" msgstr "" -#: cp/pt.cc:20875 +#: cp/pt.cc:20886 #, gcc-internal-format msgid "use %<%T::%D%> instead" msgstr "" -#: cp/pt.cc:20880 +#: cp/pt.cc:20891 #, gcc-internal-format msgid "%qD declared here, later in the translation unit" msgstr "" -#: cp/pt.cc:20931 +#: cp/pt.cc:20942 #, gcc-internal-format msgid "wrong number of arguments to %<__builtin_convertvector%>" msgstr "" -#: cp/pt.cc:20958 +#: cp/pt.cc:20969 #, gcc-internal-format msgid "wrong number of arguments to %<assume%> attribute" msgstr "" -#: cp/pt.cc:21169 +#: cp/pt.cc:21180 #, gcc-internal-format msgid "%qT is not a class or namespace" msgstr "" -#: cp/pt.cc:21172 +#: cp/pt.cc:21183 #, gcc-internal-format msgid "%qD is not a class or namespace" msgstr "" -#: cp/pt.cc:21490 +#: cp/pt.cc:21501 #, gcc-internal-format msgid "using invalid field %qD" msgstr "" -#: cp/pt.cc:21836 +#: cp/pt.cc:21847 #, gcc-internal-format msgid "%qT is/uses unnamed type" msgstr "" -#: cp/pt.cc:21838 +#: cp/pt.cc:21849 #, gcc-internal-format msgid "template argument for %qD uses local type %qT" msgstr "" -#: cp/pt.cc:21848 +#: cp/pt.cc:21859 #, gcc-internal-format msgid "%qT is a variably modified type" msgstr "" -#: cp/pt.cc:21863 +#: cp/pt.cc:21874 #, gcc-internal-format msgid "integral expression %qE is not constant" msgstr "" -#: cp/pt.cc:21881 +#: cp/pt.cc:21892 #, gcc-internal-format msgid " trying to instantiate %qD" msgstr "" -#: cp/pt.cc:26264 +#: cp/pt.cc:26285 #, gcc-internal-format msgid "ambiguous template instantiation for %q#T" msgstr "" -#: cp/pt.cc:26266 +#: cp/pt.cc:26287 #, gcc-internal-format msgid "ambiguous template instantiation for %q#D" msgstr "" -#: cp/pt.cc:26272 +#: cp/pt.cc:26293 msgid "%s %#qS" msgstr "" -#: cp/pt.cc:26299 cp/pt.cc:26394 +#: cp/pt.cc:26320 cp/pt.cc:26415 #, gcc-internal-format msgid "explicit instantiation of non-template %q#D" msgstr "" -#: cp/pt.cc:26305 +#: cp/pt.cc:26326 #, gcc-internal-format msgid "explicit instantiation of variable concept %q#D" msgstr "" -#: cp/pt.cc:26307 +#: cp/pt.cc:26328 #, gcc-internal-format msgid "explicit instantiation of function concept %q#D" msgstr "" -#: cp/pt.cc:26326 +#: cp/pt.cc:26347 #, gcc-internal-format msgid "%qD is not a static data member of a class template" msgstr "" -#: cp/pt.cc:26332 cp/pt.cc:26389 +#: cp/pt.cc:26353 cp/pt.cc:26410 #, gcc-internal-format msgid "no matching template for %qD found" msgstr "" -#: cp/pt.cc:26337 +#: cp/pt.cc:26358 #, gcc-internal-format msgid "" "type %qT for explicit instantiation %qD does not match declared type %qT" msgstr "" -#: cp/pt.cc:26345 +#: cp/pt.cc:26366 #, gcc-internal-format msgid "explicit instantiation of %q#D" msgstr "" -#: cp/pt.cc:26381 +#: cp/pt.cc:26402 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#D" msgstr "" -#: cp/pt.cc:26404 cp/pt.cc:26471 +#: cp/pt.cc:26425 cp/pt.cc:26492 #, gcc-internal-format msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations" msgstr "" -#: cp/pt.cc:26409 cp/pt.cc:26486 +#: cp/pt.cc:26430 cp/pt.cc:26507 #, gcc-internal-format msgid "storage class %qD applied to template instantiation" msgstr "" -#: cp/pt.cc:26443 +#: cp/pt.cc:26464 #, gcc-internal-format msgid "explicit instantiation of non-class template %qD" msgstr "" -#: cp/pt.cc:26446 +#: cp/pt.cc:26467 #, gcc-internal-format msgid "explicit instantiation of non-template type %qT" msgstr "" -#: cp/pt.cc:26455 +#: cp/pt.cc:26476 #, gcc-internal-format msgid "explicit instantiation of %q#T before definition of template" msgstr "" -#: cp/pt.cc:26476 +#: cp/pt.cc:26497 #, gcc-internal-format msgid "ISO C++ forbids the use of %qE on explicit instantiations" msgstr "" -#: cp/pt.cc:26516 +#: cp/pt.cc:26537 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#T" msgstr "" -#: cp/pt.cc:26832 +#: cp/pt.cc:26853 #, gcc-internal-format msgid "exception specification of %qD depends on itself" msgstr "" @@ -67401,12 +67665,12 @@ msgstr "" #. member function or static data member of a class template #. shall be present in every translation unit in which it is #. explicitly instantiated. -#: cp/pt.cc:27306 +#: cp/pt.cc:27326 #, gcc-internal-format msgid "explicit instantiation of %qD but no definition available" msgstr "" -#: cp/pt.cc:27351 +#: cp/pt.cc:27371 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d instantiating %q+D, " @@ -67414,170 +67678,170 @@ msgid "" "increase the maximum)" msgstr "" -#: cp/pt.cc:27725 +#: cp/pt.cc:27745 #, gcc-internal-format msgid "" "non-type template parameters of deduced class type only available with %<-" "std=c++20%> or %<-std=gnu++20%>" msgstr "" -#: cp/pt.cc:27755 +#: cp/pt.cc:27775 #, gcc-internal-format msgid "" "%qT is not a valid type for a template non-type parameter because it is not " "structural" msgstr "" -#: cp/pt.cc:27764 +#: cp/pt.cc:27784 #, gcc-internal-format msgid "" "non-type template parameters of class type only available with %<-std=c+" "+20%> or %<-std=gnu++20%>" msgstr "" -#: cp/pt.cc:27772 +#: cp/pt.cc:27792 #, gcc-internal-format msgid "invalid template non-type parameter" msgstr "" -#: cp/pt.cc:27774 +#: cp/pt.cc:27794 #, gcc-internal-format msgid "%q#T is not a valid type for a template non-type parameter" msgstr "" -#: cp/pt.cc:29218 +#: cp/pt.cc:29238 #, gcc-internal-format msgid "keyword %<template%> not allowed in declarator-id" msgstr "" -#: cp/pt.cc:29398 +#: cp/pt.cc:29429 #, gcc-internal-format msgid "a concept cannot be constrained" msgstr "" -#: cp/pt.cc:29407 +#: cp/pt.cc:29438 #, gcc-internal-format msgid "concept %qE not in namespace scope" msgstr "" -#: cp/pt.cc:29413 +#: cp/pt.cc:29444 #, gcc-internal-format msgid "concept %qE has multiple template parameter lists" msgstr "" -#: cp/pt.cc:29444 +#: cp/pt.cc:29475 #, gcc-internal-format msgid "" "deducing from brace-enclosed initializer list requires %<#include " "<initializer_list>%>" msgstr "" -#: cp/pt.cc:30722 +#: cp/pt.cc:30753 #, gcc-internal-format msgid "non-deducible template %qT used without template arguments" msgstr "" -#: cp/pt.cc:30734 +#: cp/pt.cc:30765 #, gcc-internal-format msgid "" "alias template deduction only available with %<-std=c++20%> or %<-std=gnu+" "+20%>" msgstr "" -#: cp/pt.cc:30740 +#: cp/pt.cc:30771 #, gcc-internal-format msgid "use %qD directly instead" msgstr "" -#: cp/pt.cc:30868 +#: cp/pt.cc:30899 #, gcc-internal-format msgid "" "cannot deduce template arguments for copy-initialization of %qT, as it has " "no non-explicit deduction guides or user-declared constructors" msgstr "" -#: cp/pt.cc:30875 +#: cp/pt.cc:30906 #, gcc-internal-format msgid "" "cannot deduce template arguments of %qT, as it has no viable deduction guides" msgstr "" -#: cp/pt.cc:30887 +#: cp/pt.cc:30918 #, gcc-internal-format msgid "class template argument deduction failed:" msgstr "" -#: cp/pt.cc:30890 +#: cp/pt.cc:30921 #, gcc-internal-format msgid "explicit deduction guides not considered for copy-initialization" msgstr "" #. TODO: Pass down location from cp_finish_decl. -#: cp/pt.cc:30904 +#: cp/pt.cc:30935 #, gcc-internal-format msgid "" "class template argument deduction for %qT failed: explicit deduction guide " "selected in copy-list-initialization" msgstr "" -#: cp/pt.cc:30908 +#: cp/pt.cc:30939 #, gcc-internal-format msgid "explicit deduction guide declared here" msgstr "" -#: cp/pt.cc:30922 +#: cp/pt.cc:30953 #, gcc-internal-format msgid "%qT may not intend to support class template argument deduction" msgstr "" -#: cp/pt.cc:30924 +#: cp/pt.cc:30955 #, gcc-internal-format msgid "add a deduction guide to suppress this warning" msgstr "" -#: cp/pt.cc:31046 +#: cp/pt.cc:31077 #, gcc-internal-format msgid "direct-list-initialization of %<auto%> requires exactly one element" msgstr "" -#: cp/pt.cc:31049 +#: cp/pt.cc:31080 #, gcc-internal-format msgid "" "for deduction to %<std::initializer_list%>, use copy-list-initialization (i." "e. add %<=%> before the %<{%>)" msgstr "" -#: cp/pt.cc:31116 +#: cp/pt.cc:31147 #, gcc-internal-format msgid "unable to deduce lambda return type from %qE" msgstr "" -#: cp/pt.cc:31119 +#: cp/pt.cc:31150 #, gcc-internal-format msgid "unable to deduce %qT from %qE" msgstr "" -#: cp/pt.cc:31194 +#: cp/pt.cc:31225 #, gcc-internal-format msgid "placeholder constraints not satisfied" msgstr "" -#: cp/pt.cc:31198 +#: cp/pt.cc:31229 #, gcc-internal-format msgid "deduced initializer does not satisfy placeholder constraints" msgstr "" -#: cp/pt.cc:31202 +#: cp/pt.cc:31233 #, gcc-internal-format msgid "deduced return type does not satisfy placeholder constraints" msgstr "" -#: cp/pt.cc:31206 +#: cp/pt.cc:31237 #, gcc-internal-format msgid "deduced expression type does not satisfy placeholder constraints" msgstr "" -#: cp/pt.cc:31351 +#: cp/pt.cc:31392 #, gcc-internal-format msgid "invalid use of %qT in template argument" msgstr "" @@ -67629,809 +67893,823 @@ msgstr "" msgid "%qT is an inaccessible base of %qT" msgstr "" -#: cp/search.cc:1981 +#: cp/search.cc:1992 #, gcc-internal-format msgid "looser exception specification on overriding virtual function %q+#F" msgstr "" -#: cp/search.cc:1984 +#: cp/search.cc:1995 #, gcc-internal-format msgid "overridden function is %q#F" msgstr "" -#: cp/search.cc:2059 +#: cp/search.cc:2070 #, gcc-internal-format msgid "invalid covariant return type for %q#D" msgstr "" -#: cp/search.cc:2061 cp/search.cc:2078 cp/search.cc:2095 +#: cp/search.cc:2072 cp/search.cc:2089 cp/search.cc:2106 #, gcc-internal-format msgid "overridden function is %q#D" msgstr "" -#: cp/search.cc:2074 +#: cp/search.cc:2085 #, gcc-internal-format msgid "invalid covariant return type for %q+#D" msgstr "" -#: cp/search.cc:2076 +#: cp/search.cc:2087 #, gcc-internal-format msgid "conflicting return type specified for %q+#D" msgstr "" -#: cp/search.cc:2093 +#: cp/search.cc:2104 #, gcc-internal-format msgid "conflicting type attributes specified for %q+#D" msgstr "" -#: cp/search.cc:2108 +#: cp/search.cc:2119 #, gcc-internal-format msgid "%<consteval%> function %q+D overriding non-%<consteval%> function" msgstr "" -#: cp/search.cc:2111 +#: cp/search.cc:2122 #, gcc-internal-format msgid "non-%<consteval%> function %q+D overriding %<consteval%> function" msgstr "" -#: cp/search.cc:2114 cp/search.cc:2143 cp/search.cc:2152 cp/search.cc:2163 -#: cp/search.cc:2188 +#: cp/search.cc:2125 cp/search.cc:2154 cp/search.cc:2163 cp/search.cc:2174 +#: cp/search.cc:2199 #, gcc-internal-format msgid "overridden function is %qD" msgstr "" -#: cp/search.cc:2130 +#: cp/search.cc:2141 #, gcc-internal-format msgid "%qD declared %<transaction_safe_dynamic%>" msgstr "" -#: cp/search.cc:2132 +#: cp/search.cc:2143 #, gcc-internal-format msgid "overriding %qD declared %<transaction_safe%>" msgstr "" -#: cp/search.cc:2140 +#: cp/search.cc:2151 #, gcc-internal-format msgid "deleted function %q+D overriding non-deleted function" msgstr "" -#: cp/search.cc:2149 +#: cp/search.cc:2160 #, gcc-internal-format msgid "non-deleted function %q+D overriding deleted function" msgstr "" -#: cp/search.cc:2160 +#: cp/search.cc:2171 #, gcc-internal-format msgid "function with contracts %q+D overriding contractless function" msgstr "" -#: cp/search.cc:2186 +#: cp/search.cc:2197 #, gcc-internal-format msgid "virtual function %q+D overriding final function" msgstr "" -#: cp/search.cc:2274 +#: cp/search.cc:2285 #, gcc-internal-format msgid "%q+#D cannot be declared" msgstr "" -#: cp/search.cc:2275 +#: cp/search.cc:2286 #, gcc-internal-format msgid " since %q+#D declared in base class" msgstr "" -#: cp/search.cc:2281 +#: cp/search.cc:2292 #, gcc-internal-format msgid "explicit object member function overrides virtual function" msgstr "" -#: cp/search.cc:2284 +#: cp/search.cc:2295 #, gcc-internal-format msgid "virtual function declared here" msgstr "" -#: cp/semantics.cc:1109 +#: cp/semantics.cc:1110 #, gcc-internal-format msgid "" "%<std::is_constant_evaluated%> always evaluates to true in %<if constexpr%>" msgstr "" -#: cp/semantics.cc:1113 +#: cp/semantics.cc:1116 +#, gcc-internal-format +msgid "" +"%<std::is_constant_evaluated%> evaluates to true when checking if trivially " +"empty iteration statement is trivial infinite loop" +msgstr "" + +#: cp/semantics.cc:1121 +#, gcc-internal-format +msgid "" +"and evaluates to false when actually evaluating the condition in non-" +"%<constexpr%> function" +msgstr "" + +#: cp/semantics.cc:1126 #, gcc-internal-format msgid "" "%<std::is_constant_evaluated%> always evaluates to false in a non-" "%<constexpr%> function" msgstr "" -#: cp/semantics.cc:1117 +#: cp/semantics.cc:1130 #, gcc-internal-format msgid "" "%<std::is_constant_evaluated%> always evaluates to true in a %<consteval%> " "function" msgstr "" -#: cp/semantics.cc:1294 +#: cp/semantics.cc:1347 #, gcc-internal-format msgid "suggest explicit braces around empty body in %<do%> statement" msgstr "" -#: cp/semantics.cc:1821 +#: cp/semantics.cc:1886 #, gcc-internal-format msgid "catching polymorphic type %q#T by value" msgstr "" -#: cp/semantics.cc:1826 +#: cp/semantics.cc:1891 #, gcc-internal-format msgid "catching type %q#T by value" msgstr "" -#: cp/semantics.cc:1831 +#: cp/semantics.cc:1896 #, gcc-internal-format msgid "catching non-reference type %q#T" msgstr "" -#: cp/semantics.cc:2043 +#: cp/semantics.cc:2108 #, gcc-internal-format msgid "type of %<asm%> operand %qE could not be determined" msgstr "" -#: cp/semantics.cc:2125 +#: cp/semantics.cc:2190 #, gcc-internal-format msgid "%<__label__%> declarations are only allowed in function scopes" msgstr "" -#: cp/semantics.cc:2298 +#: cp/semantics.cc:2363 #, gcc-internal-format msgid "invalid use of member %qD in static member function" msgstr "" -#: cp/semantics.cc:2302 +#: cp/semantics.cc:2367 #, gcc-internal-format msgid "invalid use of member %qD in constructor %<pre%> contract" msgstr "" -#: cp/semantics.cc:2306 +#: cp/semantics.cc:2371 #, gcc-internal-format msgid "invalid use of member %qD in destructor %<post%> contract" msgstr "" -#: cp/semantics.cc:2569 +#: cp/semantics.cc:2634 #, gcc-internal-format msgid "%qE missing template arguments" msgstr "" -#: cp/semantics.cc:2629 +#: cp/semantics.cc:2694 #, gcc-internal-format msgid "" "a statement expression is an insufficient context for overload resolution" msgstr "" -#: cp/semantics.cc:2988 +#: cp/semantics.cc:3053 #, gcc-internal-format msgid "cannot call a concept as a function" msgstr "" -#: cp/semantics.cc:3071 +#: cp/semantics.cc:3136 #, gcc-internal-format msgid "arguments to destructor are not allowed" msgstr "" -#: cp/semantics.cc:3175 +#: cp/semantics.cc:3240 #, gcc-internal-format msgid "%<this%> is unavailable for explicit object member functions" msgstr "" -#: cp/semantics.cc:3187 +#: cp/semantics.cc:3252 #, gcc-internal-format msgid "use explicit object parameter %qs instead" msgstr "" -#: cp/semantics.cc:3191 +#: cp/semantics.cc:3256 #, gcc-internal-format msgid "name the explicit object parameter" msgstr "" -#: cp/semantics.cc:3196 +#: cp/semantics.cc:3261 #, gcc-internal-format msgid "%<this%> is unavailable for static member functions" msgstr "" -#: cp/semantics.cc:3198 +#: cp/semantics.cc:3263 #, gcc-internal-format msgid "invalid use of %<this%> before it is valid" msgstr "" -#: cp/semantics.cc:3200 +#: cp/semantics.cc:3265 #, gcc-internal-format msgid "invalid use of %<this%> after it is valid" msgstr "" -#: cp/semantics.cc:3202 +#: cp/semantics.cc:3267 #, gcc-internal-format msgid "invalid use of %<this%> in non-member function" msgstr "" -#: cp/semantics.cc:3204 +#: cp/semantics.cc:3269 #, gcc-internal-format msgid "invalid use of %<this%> at top level" msgstr "" -#: cp/semantics.cc:3226 +#: cp/semantics.cc:3291 #, gcc-internal-format msgid "invalid qualifying scope in pseudo-destructor name" msgstr "" -#: cp/semantics.cc:3234 cp/typeck.cc:3084 +#: cp/semantics.cc:3299 cp/typeck.cc:3085 #, gcc-internal-format msgid "qualified type %qT does not match destructor name ~%qT" msgstr "" -#: cp/semantics.cc:3256 +#: cp/semantics.cc:3321 #, gcc-internal-format msgid "%qE is not of type %qT" msgstr "" -#: cp/semantics.cc:3370 +#: cp/semantics.cc:3435 #, gcc-internal-format msgid "compound literal of non-object type %qT" msgstr "" -#: cp/semantics.cc:3390 +#: cp/semantics.cc:3455 #, gcc-internal-format msgid "%<auto{x}%> cannot be constrained" msgstr "" -#: cp/semantics.cc:3395 +#: cp/semantics.cc:3460 #, gcc-internal-format msgid "%<auto{x}%> only available with %<-std=c++2b%> or %<-std=gnu++2b%>" msgstr "" -#: cp/semantics.cc:3587 +#: cp/semantics.cc:3652 #, gcc-internal-format msgid "template type parameters must use the keyword %<class%> or %<typename%>" msgstr "" -#: cp/semantics.cc:3640 +#: cp/semantics.cc:3705 #, gcc-internal-format msgid "" "invalid use of type %qT as a default value for a template template-parameter" msgstr "" -#: cp/semantics.cc:3644 +#: cp/semantics.cc:3709 #, gcc-internal-format msgid "invalid default argument for a template template parameter" msgstr "" -#: cp/semantics.cc:3661 +#: cp/semantics.cc:3726 #, gcc-internal-format msgid "definition of %q#T inside template parameter list" msgstr "" -#: cp/semantics.cc:3692 +#: cp/semantics.cc:3757 #, gcc-internal-format msgid "invalid definition of qualified type %qT" msgstr "" -#: cp/semantics.cc:3984 +#: cp/semantics.cc:4049 #, gcc-internal-format msgid "invalid base-class specification" msgstr "" -#: cp/semantics.cc:4152 +#: cp/semantics.cc:4217 #, gcc-internal-format msgid "cannot capture member %qD of anonymous union" msgstr "" -#: cp/semantics.cc:4169 +#: cp/semantics.cc:4234 #, gcc-internal-format msgid "%qD is not captured" msgstr "" -#: cp/semantics.cc:4173 +#: cp/semantics.cc:4238 #, gcc-internal-format msgid "the lambda has no capture-default" msgstr "" -#: cp/semantics.cc:4175 +#: cp/semantics.cc:4240 #, gcc-internal-format msgid "" "lambda in local class %q+T cannot capture variables from the enclosing " "context" msgstr "" -#: cp/semantics.cc:4190 +#: cp/semantics.cc:4255 #, gcc-internal-format msgid "use of local variable with automatic storage from containing function" msgstr "" -#: cp/semantics.cc:4192 +#: cp/semantics.cc:4257 #, gcc-internal-format msgid "use of parameter from containing function" msgstr "" -#: cp/semantics.cc:4320 +#: cp/semantics.cc:4385 #, gcc-internal-format msgid "use of parameter outside function body" msgstr "" -#: cp/semantics.cc:4330 +#: cp/semantics.cc:4395 #, gcc-internal-format msgid "missing template arguments" msgstr "" -#: cp/semantics.cc:4366 +#: cp/semantics.cc:4431 #, gcc-internal-format msgid "" "template parameter %qD of type %qT is not allowed in an integral constant " "expression because it is not of integral or enumeration type" msgstr "" -#: cp/semantics.cc:4417 +#: cp/semantics.cc:4482 #, gcc-internal-format msgid "use of class template %qT as expression" msgstr "" #. Ambiguous reference to base members. -#: cp/semantics.cc:4424 +#: cp/semantics.cc:4489 #, gcc-internal-format msgid "request for member %qD is ambiguous in multiple inheritance lattice" msgstr "" -#: cp/semantics.cc:4452 +#: cp/semantics.cc:4517 #, gcc-internal-format msgid "%qD cannot appear in a constant-expression" msgstr "" -#: cp/semantics.cc:4605 +#: cp/semantics.cc:4670 #, gcc-internal-format msgid "type of %qE is unknown" msgstr "" -#: cp/semantics.cc:4623 rust/backend/rust-tree.cc:5511 +#: cp/semantics.cc:4688 rust/backend/rust-tree.cc:5511 #, gcc-internal-format msgid "%qT is not an enumeration type" msgstr "" -#: cp/semantics.cc:4650 +#: cp/semantics.cc:4715 #, gcc-internal-format msgid "%<__type_pack_element%> index is not an integral constant" msgstr "" -#: cp/semantics.cc:4656 +#: cp/semantics.cc:4721 #, gcc-internal-format msgid "%<__type_pack_element%> index is negative" msgstr "" -#: cp/semantics.cc:4662 +#: cp/semantics.cc:4727 #, gcc-internal-format msgid "%<__type_pack_element%> index is out of range" msgstr "" #. Parameter packs can only be used in templates -#: cp/semantics.cc:4785 +#: cp/semantics.cc:4850 #, gcc-internal-format msgid "parameter pack %<__bases%> only valid in template declaration" msgstr "" -#: cp/semantics.cc:4817 +#: cp/semantics.cc:4882 #, gcc-internal-format msgid "cannot apply %<offsetof%> to destructor %<~%T%>" msgstr "" -#: cp/semantics.cc:4830 +#: cp/semantics.cc:4895 #, gcc-internal-format msgid "cannot apply %<offsetof%> to member function %qD" msgstr "" -#: cp/semantics.cc:4834 +#: cp/semantics.cc:4899 #, gcc-internal-format msgid "cannot apply %<offsetof%> to member function" msgstr "" -#: cp/semantics.cc:4839 +#: cp/semantics.cc:4904 #, gcc-internal-format msgid "cannot apply %<offsetof%> to an enumerator %qD" msgstr "" -#: cp/semantics.cc:4850 +#: cp/semantics.cc:4915 #, gcc-internal-format msgid "" "%<offsetof%> within non-standard-layout type %qT is conditionally-supported" msgstr "" -#: cp/semantics.cc:6046 +#: cp/semantics.cc:6115 #, gcc-internal-format msgid "pointer-to-member mapping %qE not supported" msgstr "" -#: cp/semantics.cc:6240 +#: cp/semantics.cc:6309 #, gcc-internal-format msgid "user defined reduction lookup is ambiguous" msgstr "" -#: cp/semantics.cc:6513 +#: cp/semantics.cc:6582 #, gcc-internal-format msgid "%qE in %<reduction%> clause is a zero size array" msgstr "" -#: cp/semantics.cc:6559 +#: cp/semantics.cc:6628 #, gcc-internal-format msgid "%qE has const type for %<reduction%>" msgstr "" -#: cp/semantics.cc:6678 +#: cp/semantics.cc:6747 #, gcc-internal-format msgid "user defined reduction with constructor initializer for base class %qT" msgstr "" -#: cp/semantics.cc:7150 +#: cp/semantics.cc:7219 #, gcc-internal-format msgid "" "modifier other than %<val%> specified in %<linear%> clause on %<simd%> or " "%<for%> constructs when using OpenMP 5.2 modifiers" msgstr "" -#: cp/semantics.cc:7165 +#: cp/semantics.cc:7234 #, gcc-internal-format msgid "" "linear clause with %qs modifier applied to non-reference variable with %qT " "type" msgstr "" -#: cp/semantics.cc:7180 +#: cp/semantics.cc:7249 #, gcc-internal-format msgid "" "linear clause applied to non-integral non-pointer variable with %qT type" msgstr "" -#: cp/semantics.cc:7204 +#: cp/semantics.cc:7273 #, gcc-internal-format msgid "linear step expression must be integral" msgstr "" -#: cp/semantics.cc:7297 cp/semantics.cc:7429 cp/semantics.cc:7489 -#: cp/semantics.cc:7890 cp/semantics.cc:9016 +#: cp/semantics.cc:7366 cp/semantics.cc:7498 cp/semantics.cc:7558 +#: cp/semantics.cc:7959 cp/semantics.cc:9085 #, gcc-internal-format msgid "%<this%> allowed in OpenMP only in %<declare simd%> clauses" msgstr "" -#: cp/semantics.cc:7309 cp/semantics.cc:9029 +#: cp/semantics.cc:7378 cp/semantics.cc:9098 #, gcc-internal-format msgid "%qD is not a variable in clause %qs" msgstr "" -#: cp/semantics.cc:7442 +#: cp/semantics.cc:7511 #, gcc-internal-format msgid "%qD is not a variable in clause %<firstprivate%>" msgstr "" -#: cp/semantics.cc:7502 +#: cp/semantics.cc:7571 #, gcc-internal-format msgid "%qD is not a variable in clause %<lastprivate%>" msgstr "" -#: cp/semantics.cc:7553 +#: cp/semantics.cc:7622 #, gcc-internal-format msgid "%<gang%> static expression must be integral" msgstr "" -#: cp/semantics.cc:7567 +#: cp/semantics.cc:7636 #, gcc-internal-format msgid "%<gang%> static value must be positive" msgstr "" -#: cp/semantics.cc:7601 +#: cp/semantics.cc:7670 #, gcc-internal-format msgid "%<gang%> num expression must be integral" msgstr "" -#: cp/semantics.cc:7604 +#: cp/semantics.cc:7673 #, gcc-internal-format msgid "%<vector%> length expression must be integral" msgstr "" -#: cp/semantics.cc:7608 +#: cp/semantics.cc:7677 #, gcc-internal-format msgid "%<worker%> num expression must be integral" msgstr "" -#: cp/semantics.cc:7630 +#: cp/semantics.cc:7699 #, gcc-internal-format msgid "%<gang%> num value must be positive" msgstr "" -#: cp/semantics.cc:7634 +#: cp/semantics.cc:7703 #, gcc-internal-format msgid "%<vector%> length value must be positive" msgstr "" -#: cp/semantics.cc:7639 +#: cp/semantics.cc:7708 #, gcc-internal-format msgid "%<worker%> num value must be positive" msgstr "" -#: cp/semantics.cc:7715 +#: cp/semantics.cc:7784 #, gcc-internal-format msgid "schedule chunk size expression must be integral" msgstr "" -#: cp/semantics.cc:7748 +#: cp/semantics.cc:7817 #, gcc-internal-format msgid "%qs length expression must be integral" msgstr "" -#: cp/semantics.cc:7762 +#: cp/semantics.cc:7831 #, gcc-internal-format msgid "%qs length expression must be positive constant integer expression" msgstr "" -#: cp/semantics.cc:7782 +#: cp/semantics.cc:7851 #, gcc-internal-format msgid "%<async%> expression must be integral" msgstr "" -#: cp/semantics.cc:7811 +#: cp/semantics.cc:7880 #, gcc-internal-format msgid "%<thread_limit%> expression must be integral" msgstr "" -#: cp/semantics.cc:7841 +#: cp/semantics.cc:7910 #, gcc-internal-format msgid "%<device%> id must be integral" msgstr "" -#: cp/semantics.cc:7872 +#: cp/semantics.cc:7941 #, gcc-internal-format msgid "%<dist_schedule%> chunk size expression must be integral" msgstr "" -#: cp/semantics.cc:7901 +#: cp/semantics.cc:7970 #, gcc-internal-format msgid "%qD is not a variable in %<aligned%> clause" msgstr "" -#: cp/semantics.cc:7916 +#: cp/semantics.cc:7985 #, gcc-internal-format msgid "" "%qE in %<aligned%> clause is neither a pointer nor an array nor a reference " "to pointer or array" msgstr "" -#: cp/semantics.cc:7923 +#: cp/semantics.cc:7992 #, gcc-internal-format msgid "%qD appears more than once in %<aligned%> clauses" msgstr "" -#: cp/semantics.cc:7938 +#: cp/semantics.cc:8007 #, gcc-internal-format msgid "%<aligned%> clause alignment expression must be integral" msgstr "" -#: cp/semantics.cc:7971 +#: cp/semantics.cc:8040 #, gcc-internal-format msgid "%qD is not a variable in %<nontemporal%> clause" msgstr "" -#: cp/semantics.cc:7982 +#: cp/semantics.cc:8051 #, gcc-internal-format msgid "%qD appears more than once in %<nontemporal%> clauses" msgstr "" -#: cp/semantics.cc:7999 +#: cp/semantics.cc:8068 #, gcc-internal-format msgid "%<this%> not allowed in %<allocate%> clause" msgstr "" -#: cp/semantics.cc:8011 +#: cp/semantics.cc:8080 #, gcc-internal-format msgid "%qD is not a variable in %<allocate%> clause" msgstr "" -#: cp/semantics.cc:8020 +#: cp/semantics.cc:8089 #, gcc-internal-format msgid "%qD appears more than once in %<allocate%> clauses" msgstr "" -#: cp/semantics.cc:8168 +#: cp/semantics.cc:8237 #, gcc-internal-format msgid "%qD is not lvalue expression nor array section in %qs clause" msgstr "" -#: cp/semantics.cc:8670 +#: cp/semantics.cc:8739 #, gcc-internal-format msgid "template %qE in clause %qs" msgstr "" -#: cp/semantics.cc:8673 +#: cp/semantics.cc:8742 #, gcc-internal-format msgid "overloaded function name %qE in clause %qs" msgstr "" -#: cp/semantics.cc:8742 +#: cp/semantics.cc:8811 #, gcc-internal-format msgid "%<grainsize%> expression must be integral" msgstr "" -#: cp/semantics.cc:8772 +#: cp/semantics.cc:8841 #, gcc-internal-format msgid "%<priority%> expression must be integral" msgstr "" -#: cp/semantics.cc:8802 +#: cp/semantics.cc:8871 #, gcc-internal-format msgid "%<hint%> expression must be integral" msgstr "" -#: cp/semantics.cc:8815 +#: cp/semantics.cc:8884 #, gcc-internal-format msgid "%<hint%> expression must be constant integer expression" msgstr "" -#: cp/semantics.cc:8832 +#: cp/semantics.cc:8901 #, gcc-internal-format msgid "%<filter%> expression must be integral" msgstr "" -#: cp/semantics.cc:8863 +#: cp/semantics.cc:8932 #, gcc-internal-format msgid "%qs variable is neither a pointer nor reference to pointer" msgstr "" -#: cp/semantics.cc:8873 +#: cp/semantics.cc:8942 #, gcc-internal-format msgid "" "%qs variable is neither a pointer, nor an array nor reference to pointer or " "array" msgstr "" -#: cp/semantics.cc:8957 +#: cp/semantics.cc:9026 #, gcc-internal-format msgid "%<tile%> argument needs integral type" msgstr "" -#: cp/semantics.cc:9374 +#: cp/semantics.cc:9443 #, gcc-internal-format msgid "" "%<const%> qualified %qE without %<mutable%> member may appear only in " "%<shared%> or %<firstprivate%> clauses" msgstr "" -#: cp/semantics.cc:9601 +#: cp/semantics.cc:9670 #, gcc-internal-format msgid "%<threadprivate%> %qD is not file, namespace or block scope variable" msgstr "" -#: cp/semantics.cc:9615 +#: cp/semantics.cc:9684 #, gcc-internal-format msgid "%<threadprivate%> %qE directive not in %qT definition" msgstr "" -#: cp/semantics.cc:10352 +#: cp/semantics.cc:10421 #, gcc-internal-format msgid "difference between %qE and %qD does not have integer type" msgstr "" -#: cp/semantics.cc:10837 +#: cp/semantics.cc:10906 #, gcc-internal-format msgid "%<#pragma omp simd%> used with class iteration variable %qE" msgstr "" -#: cp/semantics.cc:11157 cp/semantics.cc:11167 +#: cp/semantics.cc:11226 cp/semantics.cc:11236 #, gcc-internal-format msgid "%<#pragma omp atomic update%> uses two different expressions for memory" msgstr "" -#: cp/semantics.cc:11509 +#: cp/semantics.cc:11578 #, gcc-internal-format msgid "" "%<static_assert%> message must be a string literal or object with %<size%> " "and %<data%> members" msgstr "" -#: cp/semantics.cc:11525 +#: cp/semantics.cc:11594 #, gcc-internal-format msgid "" "%<static_assert%> message %<size()%> must be implicitly convertible to " "%<std::size_t%>" msgstr "" -#: cp/semantics.cc:11534 +#: cp/semantics.cc:11603 #, gcc-internal-format msgid "" "%<static_assert%> message %<data()%> must be implicitly convertible to " "%<const char*%>" msgstr "" -#: cp/semantics.cc:11592 +#: cp/semantics.cc:11661 #, gcc-internal-format msgid "%<static_assert%> message %<size()%> must be a constant expression" msgstr "" -#: cp/semantics.cc:11600 +#: cp/semantics.cc:11669 #, gcc-internal-format msgid "%<static_assert%> message %<size()%> %qE too large" msgstr "" -#: cp/semantics.cc:11627 +#: cp/semantics.cc:11696 #, gcc-internal-format msgid "%<static_assert%> message %<data()[%d]%> must be a constant expression" msgstr "" -#: cp/semantics.cc:11654 +#: cp/semantics.cc:11723 #, gcc-internal-format msgid "%<static_assert%> message %<data()%> must be a core constant expression" msgstr "" -#: cp/semantics.cc:11680 +#: cp/semantics.cc:11749 #, gcc-internal-format msgid "static assertion failed: %.*s" msgstr "" -#: cp/semantics.cc:11688 +#: cp/semantics.cc:11757 #, gcc-internal-format msgid "non-constant condition for static assertion" msgstr "" -#: cp/semantics.cc:11717 +#: cp/semantics.cc:11786 #, gcc-internal-format msgid "argument to %<decltype%> must be an expression" msgstr "" -#: cp/semantics.cc:11763 +#: cp/semantics.cc:11832 #, gcc-internal-format msgid "%<decltype%> cannot resolve address of overloaded function" msgstr "" -#: cp/semantics.cc:12066 rust/backend/rust-tree.cc:5225 +#: cp/semantics.cc:12144 rust/backend/rust-tree.cc:5225 #, gcc-internal-format msgid "" "%<__builtin_is_pointer_interconvertible_with_class%> needs a single argument" msgstr "" -#: cp/semantics.cc:12075 rust/backend/rust-tree.cc:5234 +#: cp/semantics.cc:12153 rust/backend/rust-tree.cc:5234 #, gcc-internal-format msgid "" "%<__builtin_is_pointer_interconvertible_with_class%> argument is not pointer " "to member" msgstr "" -#: cp/semantics.cc:12246 rust/backend/rust-tree.cc:5838 +#: cp/semantics.cc:12324 rust/backend/rust-tree.cc:5838 #, gcc-internal-format msgid "" "%<__builtin_is_corresponding_member%> not well defined for anonymous unions" msgstr "" -#: cp/semantics.cc:12270 rust/backend/rust-tree.cc:5882 +#: cp/semantics.cc:12348 rust/backend/rust-tree.cc:5882 #, gcc-internal-format msgid "%<__builtin_is_corresponding_member%> needs two arguments" msgstr "" -#: cp/semantics.cc:12281 rust/backend/rust-tree.cc:5892 +#: cp/semantics.cc:12359 rust/backend/rust-tree.cc:5892 #, gcc-internal-format msgid "%<__builtin_is_corresponding_member%> argument is not pointer to member" msgstr "" -#: cp/semantics.cc:12719 +#: cp/semantics.cc:12843 #, gcc-internal-format msgid "%qD is not a class or alias template" msgstr "" -#: cp/semantics.cc:12908 +#: cp/semantics.cc:13032 #, gcc-internal-format msgid "operand of fold expression has no unexpanded parameter packs" msgstr "" -#: cp/semantics.cc:12968 +#: cp/semantics.cc:13092 #, gcc-internal-format msgid "both arguments in binary fold have unexpanded parameter packs" msgstr "" -#: cp/semantics.cc:12970 +#: cp/semantics.cc:13094 #, gcc-internal-format msgid "no unexpanded parameter packs in binary fold" msgstr "" -#: cp/semantics.cc:12988 +#: cp/semantics.cc:13112 #, gcc-internal-format msgid "non-pointer argument to %<__builtin_launder%>" msgstr "" @@ -68439,213 +68717,219 @@ msgstr "" #. std::bit_cast for destination ARRAY_TYPE is not possible, #. as functions may not return an array, so don't bother trying #. to support this (and then deal with VLAs etc.). -#: cp/semantics.cc:13037 +#: cp/semantics.cc:13161 #, gcc-internal-format msgid "%<__builtin_bit_cast%> destination type %qT is an array type" msgstr "" -#: cp/semantics.cc:13043 +#: cp/semantics.cc:13167 #, gcc-internal-format msgid "%<__builtin_bit_cast%> destination type %qT is not trivially copyable" msgstr "" -#: cp/semantics.cc:13070 +#: cp/semantics.cc:13194 #, gcc-internal-format msgid "%<__builtin_bit_cast%> source type %qT is not trivially copyable" msgstr "" -#: cp/semantics.cc:13078 +#: cp/semantics.cc:13202 #, gcc-internal-format msgid "" "%<__builtin_bit_cast%> source size %qE not equal to destination type size %qE" msgstr "" -#: cp/tree.cc:1485 rust/backend/rust-tree.cc:2609 +#: cp/tree.cc:1486 rust/backend/rust-tree.cc:2609 #, gcc-internal-format msgid "%qV qualifiers cannot be applied to %qT" msgstr "" -#: cp/tree.cc:2003 +#: cp/tree.cc:2004 #, gcc-internal-format msgid "statement-expression in a constant expression" msgstr "" -#: cp/tree.cc:4512 +#: cp/tree.cc:4524 #, gcc-internal-format msgid "" "%<-fabi-version=13%> (GCC 8.2) fixes the calling convention for %qT, which " "was accidentally changed in 8.1" msgstr "" -#: cp/tree.cc:4516 +#: cp/tree.cc:4528 #, gcc-internal-format msgid "" "%<-fabi-version=12%> (GCC 8.1) accidentally changes the calling convention " "for %qT" msgstr "" -#: cp/tree.cc:4520 +#: cp/tree.cc:4532 #, gcc-internal-format msgid " declared here" msgstr "" -#: cp/tree.cc:4525 +#: cp/tree.cc:4537 #, gcc-internal-format msgid "" "the calling convention for %qT changes in %<-fabi-version=13%> (GCC 8.2)" msgstr "" -#: cp/tree.cc:4527 +#: cp/tree.cc:4539 #, gcc-internal-format msgid " because all of its copy and move constructors are deleted" msgstr "" -#: cp/tree.cc:4954 +#: cp/tree.cc:4966 #, gcc-internal-format msgid "base class %qT is not public" msgstr "" -#: cp/tree.cc:4957 +#: cp/tree.cc:4969 #, gcc-internal-format msgid "%qD is not public" msgstr "" -#: cp/tree.cc:4964 +#: cp/tree.cc:4976 #, gcc-internal-format msgid "%qD is mutable" msgstr "" -#: cp/tree.cc:4972 +#: cp/tree.cc:4984 #, gcc-internal-format msgid "%qD has a non-structural type" msgstr "" -#: cp/tree.cc:4995 +#: cp/tree.cc:5007 #, gcc-internal-format msgid "%qE attribute can only be applied to functions or parameters" msgstr "" -#: cp/tree.cc:5016 +#: cp/tree.cc:5028 #, gcc-internal-format msgid "%qE attribute argument must be a string constant" msgstr "" -#: cp/tree.cc:5031 +#: cp/tree.cc:5043 #, gcc-internal-format msgid "" "%qE attribute can only be applied to functions or to class or enumeration " "types" msgstr "" -#: cp/tree.cc:5051 cp/tree.cc:5056 +#: cp/tree.cc:5063 cp/tree.cc:5068 #, gcc-internal-format msgid "%qE attribute can only be applied to non-static data members" msgstr "" -#: cp/tree.cc:5062 +#: cp/tree.cc:5074 #, gcc-internal-format msgid "%qE attribute cannot be applied to a bit-field" msgstr "" -#: cp/tree.cc:5082 +#: cp/tree.cc:5094 #, gcc-internal-format msgid "%qE attribute takes no arguments" msgstr "" -#: cp/tree.cc:5086 +#: cp/tree.cc:5098 #, gcc-internal-format msgid "" "ISO C++ %qE attribute does not apply to functions; treating as %<[[gnu::" "%E]]%>" msgstr "" -#: cp/tree.cc:5168 +#: cp/tree.cc:5182 #, gcc-internal-format msgid "requested %<init_priority%> is not an integer constant" msgstr "" -#: cp/tree.cc:5190 +#: cp/tree.cc:5204 #, gcc-internal-format msgid "" "can only use %qE attribute on file-scope definitions of objects of class type" msgstr "" -#: cp/tree.cc:5198 +#: cp/tree.cc:5212 #, gcc-internal-format msgid "requested %<init_priority%> %i is out of range [0, %i]" msgstr "" -#: cp/tree.cc:5209 +#: cp/tree.cc:5223 #, gcc-internal-format msgid "requested %<init_priority%> %i is reserved for internal use" msgstr "" -#: cp/tree.cc:5239 +#: cp/tree.cc:5253 #, gcc-internal-format msgid "redeclaration of %qD adds abi tag %qE" msgstr "" -#: cp/tree.cc:5259 +#: cp/tree.cc:5273 #, gcc-internal-format msgid "the %qE attribute requires arguments" msgstr "" -#: cp/tree.cc:5270 +#: cp/tree.cc:5284 #, gcc-internal-format msgid "arguments to the %qE attribute must be narrow string literals" msgstr "" -#: cp/tree.cc:5283 cp/tree.cc:5296 +#: cp/tree.cc:5297 cp/tree.cc:5310 #, gcc-internal-format msgid "arguments to the %qE attribute must contain valid identifiers" msgstr "" -#: cp/tree.cc:5285 +#: cp/tree.cc:5299 #, gcc-internal-format msgid "%<%c%> is not a valid first character for an identifier" msgstr "" -#: cp/tree.cc:5298 +#: cp/tree.cc:5312 #, gcc-internal-format msgid "%<%c%> is not a valid character in an identifier" msgstr "" -#: cp/tree.cc:5322 +#: cp/tree.cc:5336 #, gcc-internal-format msgid "%qE attribute applied to non-class, non-enum type %qT" msgstr "" -#: cp/tree.cc:5328 +#: cp/tree.cc:5342 #, gcc-internal-format msgid "%qE attribute applied to %qT after its definition" msgstr "" -#: cp/tree.cc:5335 +#: cp/tree.cc:5349 #, gcc-internal-format msgid "ignoring %qE attribute applied to template instantiation %qT" msgstr "" -#: cp/tree.cc:5342 +#: cp/tree.cc:5356 #, gcc-internal-format msgid "ignoring %qE attribute applied to template specialization %qT" msgstr "" -#: cp/tree.cc:5364 +#: cp/tree.cc:5378 #, gcc-internal-format msgid "%qE attribute applied to non-function, non-variable %qD" msgstr "" -#: cp/tree.cc:5370 +#: cp/tree.cc:5384 #, gcc-internal-format msgid "%qE attribute applied to extern \"C\" declaration %qD" msgstr "" -#: cp/tree.cc:6246 +#: cp/tree.cc:5417 +#, gcc-internal-format +msgid "" +"%qE attribute argument must be an expression that evaluates to true or false" +msgstr "" + +#: cp/tree.cc:6283 #, gcc-internal-format msgid "zero as null pointer constant" msgstr "" -#: cp/tree.cc:6287 rust/backend/rust-tree.cc:3189 +#: cp/tree.cc:6324 rust/backend/rust-tree.cc:3189 #, gcc-internal-format msgid "%<lang_*%> check: failed in %s, at %s:%d" msgstr "" @@ -68753,441 +69037,441 @@ msgstr "" msgid "invalid use of non-static member function of type %qT" msgstr "" -#: cp/typeck.cc:2715 +#: cp/typeck.cc:2716 #, gcc-internal-format msgid "ISO C++ forbids converting a string constant to %qT" msgstr "" -#: cp/typeck.cc:2719 +#: cp/typeck.cc:2720 #, gcc-internal-format msgid "deprecated conversion from string constant to %qT" msgstr "" -#: cp/typeck.cc:2834 cp/typeck.cc:3398 +#: cp/typeck.cc:2835 cp/typeck.cc:3399 #, gcc-internal-format msgid "" "request for member %qD in %qE, which is of pointer type %qT (maybe you meant " "to use %<->%> ?)" msgstr "" -#: cp/typeck.cc:2838 cp/typeck.cc:3402 +#: cp/typeck.cc:2839 cp/typeck.cc:3403 #, gcc-internal-format msgid "request for member %qD in %qE, which is of non-class type %qT" msgstr "" -#: cp/typeck.cc:2872 +#: cp/typeck.cc:2873 #, gcc-internal-format msgid "invalid use of non-static data member %qE" msgstr "" -#: cp/typeck.cc:2949 +#: cp/typeck.cc:2950 #, gcc-internal-format msgid "" "invalid access to non-static data member %qD in virtual base of NULL object" msgstr "" -#: cp/typeck.cc:3099 +#: cp/typeck.cc:3100 #, gcc-internal-format msgid "object type %qT does not match destructor name ~%qT" msgstr "" -#: cp/typeck.cc:3108 +#: cp/typeck.cc:3109 #, gcc-internal-format msgid "the type being destroyed is %qT, but the destructor refers to %qT" msgstr "" -#: cp/typeck.cc:3250 +#: cp/typeck.cc:3251 #, gcc-internal-format msgid "field %q#D can be accessed via %q#D" msgstr "" #. No hint. -#: cp/typeck.cc:3269 +#: cp/typeck.cc:3270 #, gcc-internal-format msgid "%q#T has no member named %qE" msgstr "" -#: cp/typeck.cc:3292 +#: cp/typeck.cc:3293 #, gcc-internal-format msgid "%q#T has no member named %qE; did you mean %q#D? (accessible via %q#D)" msgstr "" -#: cp/typeck.cc:3303 +#: cp/typeck.cc:3304 #, gcc-internal-format msgid "" "%q#T has no member named %qE; did you mean %q#D? (not accessible from this " "context)" msgstr "" -#: cp/typeck.cc:3318 +#: cp/typeck.cc:3319 #, gcc-internal-format msgid "%q#T has no member named %qE; did you mean %qE?" msgstr "" -#: cp/typeck.cc:3432 cp/typeck.cc:3458 +#: cp/typeck.cc:3433 cp/typeck.cc:3459 #, gcc-internal-format msgid "%<%D::%D%> is not a member of %qT" msgstr "" -#: cp/typeck.cc:3512 +#: cp/typeck.cc:3513 #, gcc-internal-format msgid "%qT is not a base of %qT" msgstr "" -#: cp/typeck.cc:3575 +#: cp/typeck.cc:3576 #, gcc-internal-format msgid "%qD is not a member template function" msgstr "" -#: cp/typeck.cc:3840 +#: cp/typeck.cc:3841 #, gcc-internal-format msgid "%qT is not a pointer-to-object type" msgstr "" -#: cp/typeck.cc:3872 +#: cp/typeck.cc:3873 #, gcc-internal-format msgid "invalid use of array indexing on pointer to member" msgstr "" -#: cp/typeck.cc:3875 +#: cp/typeck.cc:3876 #, gcc-internal-format msgid "invalid use of unary %<*%> on pointer to member" msgstr "" -#: cp/typeck.cc:3878 +#: cp/typeck.cc:3879 #, gcc-internal-format msgid "invalid use of implicit conversion on pointer to member" msgstr "" -#: cp/typeck.cc:3882 +#: cp/typeck.cc:3883 #, gcc-internal-format msgid "" "left hand operand of %<->*%> must be a pointer to class, but is a pointer to " "member of type %qT" msgstr "" -#: cp/typeck.cc:3948 +#: cp/typeck.cc:3949 #, gcc-internal-format msgid "subscript missing in array reference" msgstr "" -#: cp/typeck.cc:4053 +#: cp/typeck.cc:4054 #, gcc-internal-format msgid "subscripting array declared %<register%>" msgstr "" -#: cp/typeck.cc:4092 +#: cp/typeck.cc:4093 #, gcc-internal-format msgid "subscripted value is neither array nor pointer" msgstr "" -#: cp/typeck.cc:4164 +#: cp/typeck.cc:4165 #, gcc-internal-format msgid "object missing in use of %qE" msgstr "" -#: cp/typeck.cc:4389 +#: cp/typeck.cc:4390 #, gcc-internal-format msgid "ISO C++ forbids calling %<::main%> from within program" msgstr "" -#: cp/typeck.cc:4410 +#: cp/typeck.cc:4411 #, gcc-internal-format msgid "" "must use %<.*%> or %<->*%> to call pointer-to-member function in %<%E " "(...)%>, e.g. %<(... ->* %E) (...)%>" msgstr "" -#: cp/typeck.cc:4427 +#: cp/typeck.cc:4428 #, gcc-internal-format msgid "%qE cannot be used as a function" msgstr "" -#: cp/typeck.cc:4430 +#: cp/typeck.cc:4431 #, gcc-internal-format msgid "%qD cannot be used as a function" msgstr "" -#: cp/typeck.cc:4433 +#: cp/typeck.cc:4434 #, gcc-internal-format msgid "expression cannot be used as a function" msgstr "" -#: cp/typeck.cc:4491 +#: cp/typeck.cc:4492 #, gcc-internal-format msgid "too many arguments to constructor %q#D" msgstr "" -#: cp/typeck.cc:4492 +#: cp/typeck.cc:4493 #, gcc-internal-format msgid "too few arguments to constructor %q#D" msgstr "" -#: cp/typeck.cc:4497 +#: cp/typeck.cc:4498 #, gcc-internal-format msgid "too many arguments to member function %q#D" msgstr "" -#: cp/typeck.cc:4498 +#: cp/typeck.cc:4499 #, gcc-internal-format msgid "too few arguments to member function %q#D" msgstr "" -#: cp/typeck.cc:4504 +#: cp/typeck.cc:4505 #, gcc-internal-format msgid "too many arguments to function %q#D" msgstr "" -#: cp/typeck.cc:4505 +#: cp/typeck.cc:4506 #, gcc-internal-format msgid "too few arguments to function %q#D" msgstr "" -#: cp/typeck.cc:4515 +#: cp/typeck.cc:4516 #, gcc-internal-format msgid "too many arguments to method %q#D" msgstr "" -#: cp/typeck.cc:4516 +#: cp/typeck.cc:4517 #, gcc-internal-format msgid "too few arguments to method %q#D" msgstr "" -#: cp/typeck.cc:4519 +#: cp/typeck.cc:4520 #, gcc-internal-format msgid "too many arguments to function" msgstr "" -#: cp/typeck.cc:4520 +#: cp/typeck.cc:4521 #, gcc-internal-format msgid "too few arguments to function" msgstr "" -#: cp/typeck.cc:4602 +#: cp/typeck.cc:4603 #, gcc-internal-format msgid "parameter %P of %qD has incomplete type %qT" msgstr "" -#: cp/typeck.cc:4608 +#: cp/typeck.cc:4609 #, gcc-internal-format msgid "parameter %P has incomplete type %qT" msgstr "" -#: cp/typeck.cc:4917 +#: cp/typeck.cc:4918 #, gcc-internal-format msgid "the address %qE will never be NULL" msgstr "" -#: cp/typeck.cc:4963 +#: cp/typeck.cc:4964 #, gcc-internal-format msgid "the address of %qD will never be NULL" msgstr "" -#: cp/typeck.cc:4978 +#: cp/typeck.cc:4979 #, gcc-internal-format msgid "the compiler can assume that the address of %qE will never be NULL" msgstr "" -#: cp/typeck.cc:4981 +#: cp/typeck.cc:4982 #, gcc-internal-format msgid "comparing the result of pointer addition %qE and NULL" msgstr "" -#: cp/typeck.cc:4996 +#: cp/typeck.cc:4997 #, gcc-internal-format msgid "the compiler can assume that the address of %qD will never be NULL" msgstr "" -#: cp/typeck.cc:5055 +#: cp/typeck.cc:5056 #, gcc-internal-format msgid "bitwise operation between different enumeration types %qT and %qT" msgstr "" -#: cp/typeck.cc:5058 +#: cp/typeck.cc:5059 #, gcc-internal-format msgid "" "bitwise operation between different enumeration types %qT and %qT is " "deprecated" msgstr "" -#: cp/typeck.cc:5064 +#: cp/typeck.cc:5065 #, gcc-internal-format msgid "arithmetic between different enumeration types %qT and %qT" msgstr "" -#: cp/typeck.cc:5067 +#: cp/typeck.cc:5068 #, gcc-internal-format msgid "" "arithmetic between different enumeration types %qT and %qT is deprecated" msgstr "" -#: cp/typeck.cc:5104 +#: cp/typeck.cc:5105 #, gcc-internal-format msgid "comparison of enumeration type %qT with floating-point type %qT" msgstr "" -#: cp/typeck.cc:5107 +#: cp/typeck.cc:5108 #, gcc-internal-format msgid "comparison of floating-point type %qT with enumeration type %qT" msgstr "" -#: cp/typeck.cc:5110 +#: cp/typeck.cc:5111 #, gcc-internal-format msgid "" "comparison of enumeration type %qT with floating-point type %qT is deprecated" msgstr "" -#: cp/typeck.cc:5114 +#: cp/typeck.cc:5115 #, gcc-internal-format msgid "" "comparison of floating-point type %qT with enumeration type %qT is deprecated" msgstr "" -#: cp/typeck.cc:5123 +#: cp/typeck.cc:5124 #, gcc-internal-format msgid "arithmetic between enumeration type %qT and floating-point type %qT" msgstr "" -#: cp/typeck.cc:5126 +#: cp/typeck.cc:5127 #, gcc-internal-format msgid "arithmetic between floating-point type %qT and enumeration type %qT" msgstr "" -#: cp/typeck.cc:5129 +#: cp/typeck.cc:5130 #, gcc-internal-format msgid "" "arithmetic between enumeration type %qT and floating-point type %qT is " "deprecated" msgstr "" -#: cp/typeck.cc:5133 +#: cp/typeck.cc:5134 #, gcc-internal-format msgid "" "arithmetic between floating-point type %qT and enumeration type %qT is " "deprecated" msgstr "" -#: cp/typeck.cc:5268 cp/typeck.cc:5280 +#: cp/typeck.cc:5269 cp/typeck.cc:5281 #, gcc-internal-format msgid "assuming cast to type %qT from overloaded function" msgstr "" -#: cp/typeck.cc:5394 +#: cp/typeck.cc:5395 #, gcc-internal-format msgid "NULL used in arithmetic" msgstr "" -#: cp/typeck.cc:5855 cp/typeck.cc:5864 cp/typeck.cc:6165 cp/typeck.cc:6174 +#: cp/typeck.cc:5856 cp/typeck.cc:5865 cp/typeck.cc:6166 cp/typeck.cc:6175 #, gcc-internal-format msgid "ISO C++ forbids comparison between pointer and integer" msgstr "" -#: cp/typeck.cc:6087 cp/typeck.cc:6100 +#: cp/typeck.cc:6088 cp/typeck.cc:6101 #, gcc-internal-format msgid "operand types are %qT and %qT" msgstr "" -#: cp/typeck.cc:6123 +#: cp/typeck.cc:6124 #, gcc-internal-format msgid "three-way comparison of vectors" msgstr "" -#: cp/typeck.cc:6157 +#: cp/typeck.cc:6158 #, gcc-internal-format msgid "ordered comparison of pointer with integer zero (%qT and %qT)" msgstr "" -#: cp/typeck.cc:6204 +#: cp/typeck.cc:6205 #, gcc-internal-format msgid "unordered comparison on non-floating-point argument" msgstr "" -#: cp/typeck.cc:6270 +#: cp/typeck.cc:6271 msgid "" "implicit conversion from %qH to %qI to match other operand of binary " "expression" msgstr "" -#: cp/typeck.cc:6379 +#: cp/typeck.cc:6380 #, gcc-internal-format msgid "invalid operands of types %qT and %qT to binary %qO" msgstr "" -#: cp/typeck.cc:6780 +#: cp/typeck.cc:6781 #, gcc-internal-format msgid "ISO C++ forbids using pointer of type %<void *%> in subtraction" msgstr "" -#: cp/typeck.cc:6788 +#: cp/typeck.cc:6789 #, gcc-internal-format msgid "ISO C++ forbids using pointer to a function in subtraction" msgstr "" -#: cp/typeck.cc:6796 +#: cp/typeck.cc:6797 #, gcc-internal-format msgid "ISO C++ forbids using pointer to a method in subtraction" msgstr "" -#: cp/typeck.cc:6849 +#: cp/typeck.cc:6850 #, gcc-internal-format msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" msgstr "" -#: cp/typeck.cc:6926 +#: cp/typeck.cc:6927 #, gcc-internal-format msgid "taking address of constructor %qD" msgstr "" -#: cp/typeck.cc:6927 +#: cp/typeck.cc:6928 #, gcc-internal-format msgid "taking address of destructor %qD" msgstr "" -#: cp/typeck.cc:6943 +#: cp/typeck.cc:6944 #, gcc-internal-format msgid "invalid use of %qE to form a pointer-to-member-function" msgstr "" -#: cp/typeck.cc:6946 +#: cp/typeck.cc:6947 #, gcc-internal-format msgid " a qualified-id is required" msgstr "" -#: cp/typeck.cc:6953 +#: cp/typeck.cc:6954 #, gcc-internal-format msgid "" "parentheses around %qE cannot be used to form a pointer-to-member-function" msgstr "" -#: cp/typeck.cc:7148 +#: cp/typeck.cc:7149 #, gcc-internal-format msgid "" "ISO C++ forbids taking the address of an unqualified or parenthesized non-" "static member function to form a pointer to member function. Say %<&%T::%D%>" msgstr "" -#: cp/typeck.cc:7154 +#: cp/typeck.cc:7155 #, gcc-internal-format msgid "" "ISO C++ forbids taking the address of an unqualified or parenthesized non-" "static member function to form a pointer to explicit object member function" msgstr "" -#: cp/typeck.cc:7160 +#: cp/typeck.cc:7161 #, gcc-internal-format msgid "" "ISO C++ forbids taking the address of a bound member function to form a " "pointer to member function. Say %<&%T::%D%>" msgstr "" -#: cp/typeck.cc:7166 +#: cp/typeck.cc:7167 #, gcc-internal-format msgid "" "ISO C++ forbids taking the address of a bound member function to form a " "pointer to explicit object member function" msgstr "" -#: cp/typeck.cc:7171 +#: cp/typeck.cc:7172 #, gcc-internal-format msgid "" "a pointer to explicit object member function can only be formed with %<&%T::" @@ -69195,465 +69479,465 @@ msgid "" msgstr "" #. Make this a permerror because we used to accept it. -#: cp/typeck.cc:7204 +#: cp/typeck.cc:7205 #, gcc-internal-format msgid "taking address of rvalue" msgstr "" -#: cp/typeck.cc:7221 +#: cp/typeck.cc:7222 #, gcc-internal-format msgid "ISO C++ forbids taking address of function %<::main%>" msgstr "" -#: cp/typeck.cc:7279 +#: cp/typeck.cc:7280 #, gcc-internal-format msgid "cannot create pointer to reference member %qD" msgstr "" -#: cp/typeck.cc:7314 cp/typeck.cc:7890 rust/backend/rust-tree.cc:4714 +#: cp/typeck.cc:7315 cp/typeck.cc:7891 rust/backend/rust-tree.cc:4714 #, gcc-internal-format msgid "attempt to take address of bit-field" msgstr "" -#: cp/typeck.cc:7476 +#: cp/typeck.cc:7477 #, gcc-internal-format msgid "%<~%> on an expression of type %<bool%>" msgstr "" -#: cp/typeck.cc:7477 +#: cp/typeck.cc:7478 #, gcc-internal-format msgid "did you mean to use logical not (%<!%>)?" msgstr "" -#: cp/typeck.cc:7609 +#: cp/typeck.cc:7610 #, gcc-internal-format msgid "ISO C++ forbids incrementing an enum" msgstr "" -#: cp/typeck.cc:7610 +#: cp/typeck.cc:7611 #, gcc-internal-format msgid "ISO C++ forbids decrementing an enum" msgstr "" -#: cp/typeck.cc:7626 +#: cp/typeck.cc:7627 #, gcc-internal-format msgid "cannot increment a pointer to incomplete type %qT" msgstr "" -#: cp/typeck.cc:7628 +#: cp/typeck.cc:7629 #, gcc-internal-format msgid "cannot decrement a pointer to incomplete type %qT" msgstr "" -#: cp/typeck.cc:7640 +#: cp/typeck.cc:7641 #, gcc-internal-format msgid "ISO C++ forbids incrementing a pointer of type %qT" msgstr "" -#: cp/typeck.cc:7642 +#: cp/typeck.cc:7643 #, gcc-internal-format msgid "ISO C++ forbids decrementing a pointer of type %qT" msgstr "" -#: cp/typeck.cc:7682 +#: cp/typeck.cc:7683 #, gcc-internal-format msgid "%qs expression of %<volatile%>-qualified type is deprecated" msgstr "" -#: cp/typeck.cc:7695 +#: cp/typeck.cc:7696 #, gcc-internal-format msgid "use of an operand of type %qT in %<operator--%> is forbidden" msgstr "" -#: cp/typeck.cc:7705 +#: cp/typeck.cc:7706 #, gcc-internal-format msgid "use of an operand of type %qT in %<operator++%> is forbidden in C++17" msgstr "" -#: cp/typeck.cc:7713 +#: cp/typeck.cc:7714 #, gcc-internal-format msgid "use of an operand of type %qT in %<operator++%> is deprecated" msgstr "" -#: cp/typeck.cc:7902 rust/backend/rust-tree.cc:4726 +#: cp/typeck.cc:7903 rust/backend/rust-tree.cc:4726 #, gcc-internal-format msgid "cannot take the address of %<this%>, which is an rvalue expression" msgstr "" -#: cp/typeck.cc:7924 d/d-codegen.cc:719 rust/backend/rust-tree.cc:4745 +#: cp/typeck.cc:7925 d/d-codegen.cc:719 rust/backend/rust-tree.cc:4745 #, gcc-internal-format msgid "address of explicit register variable %qD requested" msgstr "" -#: cp/typeck.cc:7929 rust/backend/rust-tree.cc:4752 +#: cp/typeck.cc:7930 rust/backend/rust-tree.cc:4752 #, gcc-internal-format msgid "address requested for %qD, which is declared %<register%>" msgstr "" -#: cp/typeck.cc:8000 +#: cp/typeck.cc:8001 #, gcc-internal-format msgid "list-initializer for non-class type must not be parenthesized" msgstr "" -#: cp/typeck.cc:8012 +#: cp/typeck.cc:8013 #, gcc-internal-format msgid "expression list treated as compound expression in initializer" msgstr "" -#: cp/typeck.cc:8016 +#: cp/typeck.cc:8017 #, gcc-internal-format msgid "expression list treated as compound expression in mem-initializer" msgstr "" -#: cp/typeck.cc:8020 +#: cp/typeck.cc:8021 #, gcc-internal-format msgid "expression list treated as compound expression in functional cast" msgstr "" -#: cp/typeck.cc:8058 +#: cp/typeck.cc:8059 #, gcc-internal-format, gfc-internal-format msgid "%s expression list treated as compound expression" msgstr "" -#: cp/typeck.cc:8159 +#: cp/typeck.cc:8160 #, gcc-internal-format msgid "no context to resolve type of %qE" msgstr "" -#: cp/typeck.cc:8196 +#: cp/typeck.cc:8197 #, gcc-internal-format msgid "cast from type %qT to type %qT casts away qualifiers" msgstr "" -#: cp/typeck.cc:8202 +#: cp/typeck.cc:8203 #, gcc-internal-format msgid "%<static_cast%> from type %qT to type %qT casts away qualifiers" msgstr "" -#: cp/typeck.cc:8209 +#: cp/typeck.cc:8210 #, gcc-internal-format msgid "%<reinterpret_cast%> from type %qT to type %qT casts away qualifiers" msgstr "" -#: cp/typeck.cc:8235 +#: cp/typeck.cc:8236 #, gcc-internal-format msgid "useless cast to type %q#T" msgstr "" -#: cp/typeck.cc:8249 +#: cp/typeck.cc:8250 #, gcc-internal-format msgid "type qualifiers ignored on cast result type" msgstr "" -#: cp/typeck.cc:8697 +#: cp/typeck.cc:8698 #, gcc-internal-format msgid "invalid %<static_cast%> from type %qT to type %qT" msgstr "" -#: cp/typeck.cc:8703 cp/typeck.cc:8709 cp/typeck.cc:10420 +#: cp/typeck.cc:8704 cp/typeck.cc:8710 cp/typeck.cc:10421 #, gcc-internal-format msgid "class type %qT is incomplete" msgstr "" -#: cp/typeck.cc:8737 +#: cp/typeck.cc:8738 msgid "converting from %qH to %qI" msgstr "" -#: cp/typeck.cc:8812 +#: cp/typeck.cc:8813 #, gcc-internal-format msgid "invalid cast of a prvalue expression of type %qT to type %qT" msgstr "" -#: cp/typeck.cc:8882 +#: cp/typeck.cc:8883 msgid "cast from %qH to %qI loses precision" msgstr "" -#: cp/typeck.cc:8907 +#: cp/typeck.cc:8908 msgid "cast between incompatible function types from %qH to %qI" msgstr "" -#: cp/typeck.cc:8918 +#: cp/typeck.cc:8919 msgid "cast between incompatible pointer to member types from %qH to %qI" msgstr "" -#: cp/typeck.cc:8939 cp/typeck.cc:9129 +#: cp/typeck.cc:8940 cp/typeck.cc:9130 msgid "cast from %qH to %qI increases required alignment of target type" msgstr "" -#: cp/typeck.cc:8956 +#: cp/typeck.cc:8957 #, gcc-internal-format msgid "" "casting between pointer-to-function and pointer-to-object is conditionally-" "supported" msgstr "" -#: cp/typeck.cc:8970 +#: cp/typeck.cc:8971 #, gcc-internal-format msgid "invalid cast from type %qT to type %qT" msgstr "" -#: cp/typeck.cc:9043 +#: cp/typeck.cc:9044 #, gcc-internal-format msgid "" "invalid use of %<const_cast%> with type %qT, which is not a pointer, " "reference, nor a pointer-to-data-member type" msgstr "" -#: cp/typeck.cc:9052 +#: cp/typeck.cc:9053 #, gcc-internal-format msgid "" "invalid use of %<const_cast%> with type %qT, which is a pointer or reference " "to a function type" msgstr "" -#: cp/typeck.cc:9094 +#: cp/typeck.cc:9095 #, gcc-internal-format msgid "invalid %<const_cast%> of an rvalue of type %qT to type %qT" msgstr "" -#: cp/typeck.cc:9164 +#: cp/typeck.cc:9165 #, gcc-internal-format msgid "invalid %<const_cast%> from type %qT to type %qT" msgstr "" -#: cp/typeck.cc:9265 cp/typeck.cc:9274 +#: cp/typeck.cc:9266 cp/typeck.cc:9275 #, gcc-internal-format msgid "ISO C++ forbids casting to an array type %qT" msgstr "" -#: cp/typeck.cc:9283 +#: cp/typeck.cc:9284 #, gcc-internal-format msgid "invalid cast to function type %qT" msgstr "" -#: cp/typeck.cc:9396 +#: cp/typeck.cc:9397 #, gcc-internal-format msgid "moving %qE of type %qT to itself" msgstr "" -#: cp/typeck.cc:9397 cp/typeck.cc:10947 cp/typeck.cc:10963 cp/typeck.cc:10988 -#: cp/typeck.cc:11025 +#: cp/typeck.cc:9398 cp/typeck.cc:10950 cp/typeck.cc:10966 cp/typeck.cc:10991 +#: cp/typeck.cc:11028 #, gcc-internal-format msgid "remove %<std::move%> call" msgstr "" -#: cp/typeck.cc:9657 +#: cp/typeck.cc:9658 #, gcc-internal-format msgid " in evaluation of %<%Q(%#T, %#T)%>" msgstr "" -#: cp/typeck.cc:9717 +#: cp/typeck.cc:9718 #, gcc-internal-format msgid "assigning to an array from an initializer list" msgstr "" -#: cp/typeck.cc:9744 +#: cp/typeck.cc:9745 #, gcc-internal-format msgid "incompatible types in assignment of %qT to %qT" msgstr "" -#: cp/typeck.cc:9760 +#: cp/typeck.cc:9761 #, gcc-internal-format msgid "array used as initializer" msgstr "" -#: cp/typeck.cc:9762 +#: cp/typeck.cc:9763 #, gcc-internal-format msgid "invalid array assignment" msgstr "" -#: cp/typeck.cc:9898 +#: cp/typeck.cc:9899 #, gcc-internal-format msgid " in pointer to member function conversion" msgstr "" -#: cp/typeck.cc:9912 +#: cp/typeck.cc:9913 #, gcc-internal-format msgid "pointer to member conversion via virtual base %qT" msgstr "" -#: cp/typeck.cc:9959 cp/typeck.cc:9978 +#: cp/typeck.cc:9960 cp/typeck.cc:9979 #, gcc-internal-format msgid " in pointer to member conversion" msgstr "" -#: cp/typeck.cc:10059 +#: cp/typeck.cc:10060 #, gcc-internal-format msgid "invalid conversion to type %qT from type %qT" msgstr "" -#: cp/typeck.cc:10379 +#: cp/typeck.cc:10380 msgid "cannot convert %qH to %qI in default argument" msgstr "" -#: cp/typeck.cc:10384 +#: cp/typeck.cc:10385 msgid "cannot convert %qH to %qI in argument passing" msgstr "" -#: cp/typeck.cc:10393 +#: cp/typeck.cc:10394 msgid "cannot convert %qH to %qI in initialization" msgstr "" -#: cp/typeck.cc:10397 +#: cp/typeck.cc:10398 msgid "cannot convert %qH to %qI in return" msgstr "" -#: cp/typeck.cc:10402 +#: cp/typeck.cc:10403 msgid "cannot convert %qH to %qI in assignment" msgstr "" -#: cp/typeck.cc:10438 +#: cp/typeck.cc:10439 #, gcc-internal-format msgid "parameter %qP of %qD might be a candidate for a format attribute" msgstr "" -#: cp/typeck.cc:10442 +#: cp/typeck.cc:10443 #, gcc-internal-format msgid "parameter might be a candidate for a format attribute" msgstr "" -#: cp/typeck.cc:10447 +#: cp/typeck.cc:10448 #, gcc-internal-format msgid "target of conversion might be a candidate for a format attribute" msgstr "" -#: cp/typeck.cc:10452 +#: cp/typeck.cc:10453 #, gcc-internal-format msgid "target of initialization might be a candidate for a format attribute" msgstr "" -#: cp/typeck.cc:10462 +#: cp/typeck.cc:10463 #, gcc-internal-format msgid "" "left-hand side of assignment might be a candidate for a format attribute" msgstr "" -#: cp/typeck.cc:10548 +#: cp/typeck.cc:10549 #, gcc-internal-format msgid "in passing argument %P of %qD" msgstr "" -#: cp/typeck.cc:10630 +#: cp/typeck.cc:10633 #, gcc-internal-format msgid "returning reference to temporary" msgstr "" -#: cp/typeck.cc:10633 +#: cp/typeck.cc:10636 #, gcc-internal-format msgid "returning pointer to temporary" msgstr "" -#: cp/typeck.cc:10636 +#: cp/typeck.cc:10639 #, gcc-internal-format msgid "" "returning temporary %<initializer_list%> does not extend the lifetime of the " "underlying array" msgstr "" -#: cp/typeck.cc:10672 +#: cp/typeck.cc:10675 #, gcc-internal-format msgid "reference to local variable %qD returned" msgstr "" -#: cp/typeck.cc:10676 +#: cp/typeck.cc:10679 #, gcc-internal-format msgid "" "returning local %<initializer_list%> variable %qD does not extend the " "lifetime of the underlying array" msgstr "" -#: cp/typeck.cc:10682 +#: cp/typeck.cc:10685 #, gcc-internal-format msgid "address of label %qD returned" msgstr "" -#: cp/typeck.cc:10686 +#: cp/typeck.cc:10689 #, gcc-internal-format msgid "address of local variable %qD returned" msgstr "" -#: cp/typeck.cc:10946 +#: cp/typeck.cc:10949 #, gcc-internal-format msgid "moving a temporary object prevents copy elision" msgstr "" -#: cp/typeck.cc:10961 +#: cp/typeck.cc:10964 #, gcc-internal-format msgid "moving a local object in a return statement prevents copy elision" msgstr "" -#: cp/typeck.cc:10987 cp/typeck.cc:11022 +#: cp/typeck.cc:10990 cp/typeck.cc:11025 #, gcc-internal-format msgid "redundant move in return statement" msgstr "" -#: cp/typeck.cc:11024 +#: cp/typeck.cc:11027 #, gcc-internal-format msgid "redundant move in initialization" msgstr "" -#: cp/typeck.cc:11062 +#: cp/typeck.cc:11065 #, gcc-internal-format msgid "returning a value from a destructor" msgstr "" #. If a return statement appears in a handler of the #. function-try-block of a constructor, the program is ill-formed. -#: cp/typeck.cc:11074 +#: cp/typeck.cc:11077 #, gcc-internal-format msgid "cannot return from a handler of a function-try-block of a constructor" msgstr "" #. You can't return a value from a constructor. -#: cp/typeck.cc:11077 +#: cp/typeck.cc:11080 #, gcc-internal-format msgid "returning a value from a constructor" msgstr "" #. Give a helpful error message. -#: cp/typeck.cc:11116 cp/typeck.cc:11162 +#: cp/typeck.cc:11119 cp/typeck.cc:11165 #, gcc-internal-format msgid "return-statement with no value, in function returning %qT" msgstr "" -#: cp/typeck.cc:11124 +#: cp/typeck.cc:11127 #, gcc-internal-format msgid "returning initializer list" msgstr "" -#: cp/typeck.cc:11143 +#: cp/typeck.cc:11146 #, gcc-internal-format msgid "inconsistent types %qT and %qT deduced for lambda return type" msgstr "" -#: cp/typeck.cc:11146 +#: cp/typeck.cc:11149 #, gcc-internal-format msgid "inconsistent deduction for auto return type: %qT and then %qT" msgstr "" -#: cp/typeck.cc:11181 +#: cp/typeck.cc:11184 #, gcc-internal-format msgid "return-statement with a value, in function returning %qT" msgstr "" -#: cp/typeck.cc:11210 +#: cp/typeck.cc:11213 #, gcc-internal-format msgid "" "%<operator new%> must not return NULL unless it is declared %<throw()%> (or " "%<-fcheck-new%> is in effect)" msgstr "" -#: cp/typeck.cc:11299 +#: cp/typeck.cc:11302 #, gcc-internal-format msgid "not eliding copy on return from %qD" msgstr "" -#: cp/typeck.cc:11311 +#: cp/typeck.cc:11314 #, gcc-internal-format msgid "not eliding copy on return in %qD" msgstr "" -#: cp/typeck.cc:11898 +#: cp/typeck.cc:11901 #, gcc-internal-format msgid "using rvalue as lvalue" msgstr "" @@ -69820,211 +70104,211 @@ msgstr "" msgid "invalid use of incomplete type %q#T" msgstr "" -#: cp/typeck2.cc:365 rust/backend/rust-tree.cc:3936 +#: cp/typeck2.cc:364 rust/backend/rust-tree.cc:3936 #, gcc-internal-format msgid "invalid use of member function %qD (did you forget the %<()%> ?)" msgstr "" -#: cp/typeck2.cc:370 rust/backend/rust-tree.cc:3942 +#: cp/typeck2.cc:369 rust/backend/rust-tree.cc:3942 #, gcc-internal-format msgid "invalid use of member %qD (did you forget the %<&%> ?)" msgstr "" -#: cp/typeck2.cc:380 +#: cp/typeck2.cc:379 #, gcc-internal-format msgid "invalid use of placeholder %qT" msgstr "" -#: cp/typeck2.cc:387 +#: cp/typeck2.cc:386 #, gcc-internal-format msgid "invalid use of template type parameter %qT" msgstr "" -#: cp/typeck2.cc:392 +#: cp/typeck2.cc:391 #, gcc-internal-format msgid "invalid use of template template parameter %qT" msgstr "" -#: cp/typeck2.cc:398 +#: cp/typeck2.cc:397 #, gcc-internal-format msgid "invalid use of pack expansion %qT" msgstr "" -#: cp/typeck2.cc:404 +#: cp/typeck2.cc:403 #, gcc-internal-format msgid "invalid use of dependent type %qT" msgstr "" -#: cp/typeck2.cc:411 rust/backend/rust-tree.cc:3952 +#: cp/typeck2.cc:410 rust/backend/rust-tree.cc:3952 #, gcc-internal-format msgid "invalid use of brace-enclosed initializer list" msgstr "" -#: cp/typeck2.cc:419 rust/backend/rust-tree.cc:3960 +#: cp/typeck2.cc:418 rust/backend/rust-tree.cc:3960 #, gcc-internal-format msgid "address of overloaded function with no contextual type information" msgstr "" -#: cp/typeck2.cc:423 rust/backend/rust-tree.cc:3965 +#: cp/typeck2.cc:422 rust/backend/rust-tree.cc:3965 #, gcc-internal-format msgid "overloaded function with no contextual type information" msgstr "" -#: cp/typeck2.cc:426 rust/backend/rust-tree.cc:3969 +#: cp/typeck2.cc:425 rust/backend/rust-tree.cc:3969 #, gcc-internal-format msgid "insufficient contextual information to determine type" msgstr "" -#: cp/typeck2.cc:833 +#: cp/typeck2.cc:832 #, gcc-internal-format msgid "constructor syntax used, but no constructor declared for type %qT" msgstr "" -#: cp/typeck2.cc:884 cp/typeck2.cc:901 +#: cp/typeck2.cc:883 cp/typeck2.cc:900 #, gcc-internal-format msgid "%<constinit%> variable %qD does not have a constant initializer" msgstr "" -#: cp/typeck2.cc:1089 +#: cp/typeck2.cc:1088 msgid "narrowing conversion of %qE from %qH to %qI is ill-formed in C++11" msgstr "" -#: cp/typeck2.cc:1101 cp/typeck2.cc:1113 +#: cp/typeck2.cc:1100 cp/typeck2.cc:1112 msgid "narrowing conversion of %qE from %qH to %qI" msgstr "" -#: cp/typeck2.cc:1104 +#: cp/typeck2.cc:1103 #, gcc-internal-format msgid "" " the expression has a constant value but is not a C++ constant-expression" msgstr "" -#: cp/typeck2.cc:1276 +#: cp/typeck2.cc:1275 #, gcc-internal-format msgid "initializer-string for %qT is too long" msgstr "" -#: cp/typeck2.cc:1339 +#: cp/typeck2.cc:1338 #, gcc-internal-format msgid "initializing a base class of type %qT results in object slicing" msgstr "" -#: cp/typeck2.cc:1341 +#: cp/typeck2.cc:1340 #, gcc-internal-format msgid "remove %<{ }%> around initializer" msgstr "" -#: cp/typeck2.cc:1361 +#: cp/typeck2.cc:1360 #, gcc-internal-format msgid "cannot initialize aggregate of type %qT with a compound literal" msgstr "" -#: cp/typeck2.cc:1844 cp/typeck2.cc:1875 +#: cp/typeck2.cc:1843 cp/typeck2.cc:1874 #, gcc-internal-format msgid "missing initializer for member %qD" msgstr "" -#: cp/typeck2.cc:1851 +#: cp/typeck2.cc:1850 #, gcc-internal-format msgid "member %qD is uninitialized reference" msgstr "" -#: cp/typeck2.cc:1858 +#: cp/typeck2.cc:1857 #, gcc-internal-format msgid "member %qD with uninitialized reference fields" msgstr "" -#: cp/typeck2.cc:1944 +#: cp/typeck2.cc:1943 #, gcc-internal-format msgid "designator order for field %qD does not match declaration order in %qT" msgstr "" -#: cp/typeck2.cc:2017 +#: cp/typeck2.cc:2016 #, gcc-internal-format msgid "no field %qD found in union being initialized" msgstr "" -#: cp/typeck2.cc:2028 +#: cp/typeck2.cc:2027 #, gcc-internal-format msgid "index value instead of field name in union initializer" msgstr "" -#: cp/typeck2.cc:2243 +#: cp/typeck2.cc:2242 #, gcc-internal-format msgid "circular pointer delegation detected" msgstr "" -#: cp/typeck2.cc:2257 +#: cp/typeck2.cc:2256 #, gcc-internal-format msgid "base operand of %<->%> has non-pointer type %qT" msgstr "" -#: cp/typeck2.cc:2287 +#: cp/typeck2.cc:2286 #, gcc-internal-format msgid "result of %<operator->()%> yields non-pointer result" msgstr "" -#: cp/typeck2.cc:2289 +#: cp/typeck2.cc:2288 #, gcc-internal-format msgid "base operand of %<->%> is not a pointer" msgstr "" -#: cp/typeck2.cc:2316 +#: cp/typeck2.cc:2315 #, gcc-internal-format msgid "%qE cannot be used as a member pointer, since it is of type %qT" msgstr "" -#: cp/typeck2.cc:2325 +#: cp/typeck2.cc:2324 #, gcc-internal-format msgid "cannot apply member pointer %qE to %qE, which is of non-class type %qT" msgstr "" -#: cp/typeck2.cc:2347 +#: cp/typeck2.cc:2346 #, gcc-internal-format msgid "pointer to member type %qT incompatible with object type %qT" msgstr "" -#: cp/typeck2.cc:2409 +#: cp/typeck2.cc:2408 #, gcc-internal-format msgid "pointer-to-member-function type %qT requires an rvalue" msgstr "" -#: cp/typeck2.cc:2420 +#: cp/typeck2.cc:2419 #, gcc-internal-format msgid "pointer-to-member-function type %qT requires an lvalue" msgstr "" -#: cp/typeck2.cc:2428 +#: cp/typeck2.cc:2427 #, gcc-internal-format msgid "pointer-to-member-function type %qT requires an lvalue before C++20" msgstr "" -#: cp/typeck2.cc:2469 +#: cp/typeck2.cc:2468 #, gcc-internal-format msgid "functional cast to array type %qT" msgstr "" -#: cp/typeck2.cc:2486 +#: cp/typeck2.cc:2485 #, gcc-internal-format msgid "%<auto(x)%> cannot be constrained" msgstr "" -#: cp/typeck2.cc:2491 +#: cp/typeck2.cc:2490 #, gcc-internal-format msgid "%<auto(x)%> only available with %<-std=c++2b%> or %<-std=gnu++2b%>" msgstr "" -#: cp/typeck2.cc:2516 +#: cp/typeck2.cc:2515 #, gcc-internal-format msgid "invalid value-initialization of reference type" msgstr "" -#: cp/typeck2.cc:2757 +#: cp/typeck2.cc:2756 #, gcc-internal-format msgid "call to function %qD which throws incomplete type %q#T" msgstr "" -#: cp/typeck2.cc:2760 +#: cp/typeck2.cc:2759 #, gcc-internal-format msgid "call to function which throws incomplete type %q#T" msgstr "" @@ -70061,7 +70345,7 @@ msgid "" "attribute" msgstr "" -#: d/d-builtins.cc:823 +#: d/d-builtins.cc:824 #, gcc-internal-format msgid "conflicting types for built-in function %qs; expected %qs" msgstr "" @@ -70071,53 +70355,53 @@ msgstr "" msgid "cannot determine the length of a %qs" msgstr "" -#: d/d-codegen.cc:1241 +#: d/d-codegen.cc:1242 #, gcc-internal-format msgid "overlapping initializer for field %qT.%qD" msgstr "" -#: d/d-codegen.cc:1436 +#: d/d-codegen.cc:1437 #, gcc-internal-format msgid "the address of %qD will never be %<null%>" msgstr "" -#: d/d-codegen.cc:2221 +#: d/d-codegen.cc:2222 #, gcc-internal-format msgid "need %<this%> to access member %qE" msgstr "" -#: d/d-codegen.cc:2369 +#: d/d-codegen.cc:2370 #, gcc-internal-format msgid "tried to perform floating-point modulo division on %qT" msgstr "" -#: d/d-codegen.cc:2420 +#: d/d-codegen.cc:2421 #, gcc-internal-format msgid "cannot get frame pointer to %qs" msgstr "" #. Should instead error on line that references `fd'. -#: d/d-codegen.cc:2446 +#: d/d-codegen.cc:2447 #, gcc-internal-format msgid "nested function missing body" msgstr "" -#: d/d-codegen.cc:2488 +#: d/d-codegen.cc:2489 #, gcc-internal-format msgid "%qs is a nested function and cannot be accessed from %qs" msgstr "" -#: d/d-codegen.cc:2797 +#: d/d-codegen.cc:2798 #, gcc-internal-format msgid "variable %qs has scoped destruction, cannot build closure" msgstr "" -#: d/d-codegen.cc:2805 +#: d/d-codegen.cc:2806 #, gcc-internal-format msgid "explicit register variable %qs cannot be used in nested function" msgstr "" -#: d/d-codegen.cc:3030 +#: d/d-codegen.cc:3031 #, gcc-internal-format msgid "forward reference to frame of %qs" msgstr "" @@ -70238,53 +70522,53 @@ msgstr "" msgid "cannot represent built-in %<va_list%> type in D" msgstr "" -#: d/decl.cc:375 +#: d/decl.cc:383 #, gcc-internal-format, gfc-internal-format msgid "pragma(%s) not implemented" msgstr "" -#: d/decl.cc:482 d/decl.cc:600 d/decl.cc:674 d/decl.cc:717 d/decl.cc:756 +#: d/decl.cc:490 d/decl.cc:608 d/decl.cc:682 d/decl.cc:725 d/decl.cc:764 #, gcc-internal-format msgid "had semantic errors when compiling" msgstr "" #. Hiding detected; same name, overlapping specializations. -#: d/decl.cc:573 +#: d/decl.cc:581 #, gcc-internal-format msgid "use of %qs" msgstr "" -#: d/decl.cc:575 +#: d/decl.cc:583 #, gcc-internal-format msgid "is hidden by %qs" msgstr "" -#: d/decl.cc:578 +#: d/decl.cc:586 #, gcc-internal-format msgid "use %<alias %s = %s.%s;%> to introduce base class overload set" msgstr "" -#: d/decl.cc:814 +#: d/decl.cc:822 #, gcc-internal-format msgid "size is too large" msgstr "" -#: d/decl.cc:1415 +#: d/decl.cc:1424 #, gcc-internal-format msgid "function requires a dual-context, which is not yet supported by GDC" msgstr "" -#: d/decl.cc:1592 +#: d/decl.cc:1601 #, gcc-internal-format msgid "explicit register variable %qs declared %<extern%>" msgstr "" -#: d/decl.cc:1595 +#: d/decl.cc:1604 #, gcc-internal-format msgid "explicit register variable %qs declared thread local" msgstr "" -#: d/decl.cc:1808 +#: d/decl.cc:1817 #, gcc-internal-format msgid "" "mismatch between declaration %qE size (%wd) and its initializer size (%wd)" @@ -70310,52 +70594,52 @@ msgid "" msgstr "" #. Static arrays have already been handled by the front-end. -#: d/expr.cc:1285 +#: d/expr.cc:1286 #, gcc-internal-format msgid "unexpected type for array length: %qs" msgstr "" -#: d/expr.cc:1420 +#: d/expr.cc:1421 #, gcc-internal-format msgid "don%'t know how to delete %qs" msgstr "" -#: d/expr.cc:1444 +#: d/expr.cc:1445 #, gcc-internal-format msgid "%qs is not an associative array" msgstr "" -#: d/expr.cc:1728 d/expr.cc:2108 +#: d/expr.cc:1729 d/expr.cc:2109 #, gcc-internal-format msgid "need %<this%> to access member %qs" msgstr "" -#: d/expr.cc:1810 +#: d/expr.cc:1811 #, gcc-internal-format msgid "delegates are only for non-static functions" msgstr "" -#: d/expr.cc:1882 +#: d/expr.cc:1883 #, gcc-internal-format msgid "%qs is not a field, but a %qs" msgstr "" -#: d/expr.cc:2134 +#: d/expr.cc:2135 #, gcc-internal-format msgid "recursive reference %qs" msgstr "" -#: d/expr.cc:2153 d/expr.cc:3024 +#: d/expr.cc:2155 d/expr.cc:3027 #, gcc-internal-format msgid "non-constant expression %qs" msgstr "" -#: d/expr.cc:2991 +#: d/expr.cc:2994 #, gcc-internal-format msgid "%qs is not an expression" msgstr "" -#: d/expr.cc:2998 +#: d/expr.cc:3001 #, gcc-internal-format msgid "type %qs is not an expression" msgstr "" @@ -70532,169 +70816,169 @@ msgstr "" msgid "Invalid type in arithmetic operation at %L" msgstr "" -#: fortran/arith.cc:126 fortran/arith.cc:2076 +#: fortran/arith.cc:126 fortran/arith.cc:2130 #, gcc-internal-format msgid "gfc_arith_error(): Bad error code" msgstr "" -#: fortran/arith.cc:159 +#: fortran/arith.cc:183 #, gcc-internal-format msgid "Fix min_int calculation" msgstr "" -#: fortran/arith.cc:554 +#: fortran/arith.cc:578 #, gcc-internal-format msgid "gfc_range_check(): Bad type" msgstr "" -#: fortran/arith.cc:627 +#: fortran/arith.cc:651 #, gcc-internal-format msgid "gfc_arith_uminus(): Bad basic type" msgstr "" -#: fortran/arith.cc:664 +#: fortran/arith.cc:688 #, gcc-internal-format msgid "gfc_arith_plus(): Bad basic type" msgstr "" -#: fortran/arith.cc:701 +#: fortran/arith.cc:725 #, gcc-internal-format msgid "gfc_arith_minus(): Bad basic type" msgstr "" -#: fortran/arith.cc:739 +#: fortran/arith.cc:763 #, gcc-internal-format msgid "gfc_arith_times(): Bad basic type" msgstr "" -#: fortran/arith.cc:781 +#: fortran/arith.cc:805 #, gcc-internal-format msgid "Integer division truncated to constant %qs at %L" msgstr "" -#: fortran/arith.cc:827 +#: fortran/arith.cc:854 #, gcc-internal-format msgid "gfc_arith_divide(): Bad basic type" msgstr "" -#: fortran/arith.cc:883 +#: fortran/arith.cc:910 #, gcc-internal-format msgid "arith_power(): Bad base" msgstr "" -#: fortran/arith.cc:922 +#: fortran/arith.cc:949 #, gcc-internal-format, gfc-internal-format msgid "Negative exponent of integer has zero result at %L" msgstr "" -#: fortran/arith.cc:942 +#: fortran/arith.cc:969 #, gcc-internal-format, gfc-internal-format msgid "Result of exponentiation at %L exceeds the range of %s" msgstr "" -#: fortran/arith.cc:979 fortran/arith.cc:1004 +#: fortran/arith.cc:1006 fortran/arith.cc:1031 #, gcc-internal-format, gfc-internal-format msgid "Noninteger exponent in an initialization expression at %L" msgstr "" -#: fortran/arith.cc:990 +#: fortran/arith.cc:1017 #, gcc-internal-format, gfc-internal-format msgid "Raising a negative REAL at %L to a REAL power is prohibited" msgstr "" -#: fortran/arith.cc:1018 +#: fortran/arith.cc:1045 #, gcc-internal-format msgid "arith_power(): unknown type" msgstr "" -#: fortran/arith.cc:1089 +#: fortran/arith.cc:1116 #, gcc-internal-format msgid "compare_real(): Bad operator" msgstr "" -#: fortran/arith.cc:1129 +#: fortran/arith.cc:1156 #, gcc-internal-format msgid "gfc_compare_expr(): Bad basic type" msgstr "" -#: fortran/arith.cc:1723 +#: fortran/arith.cc:1777 #, gcc-internal-format msgid "eval_intrinsic(): Bad operator" msgstr "" -#: fortran/arith.cc:1782 +#: fortran/arith.cc:1836 #, gcc-internal-format msgid "eval_type_intrinsic0(): op NULL" msgstr "" -#: fortran/arith.cc:2044 +#: fortran/arith.cc:2098 #, gcc-internal-format, gfc-internal-format msgid "Arithmetic OK converting %s to %s at %L" msgstr "" -#: fortran/arith.cc:2048 +#: fortran/arith.cc:2102 #, gcc-internal-format msgid "" "Arithmetic overflow converting %s to %s at %L. This check can be disabled " "with the option %<-fno-range-check%>" msgstr "" -#: fortran/arith.cc:2053 +#: fortran/arith.cc:2107 #, gcc-internal-format msgid "" "Arithmetic underflow converting %s to %s at %L. This check can be disabled " "with the option %<-fno-range-check%>" msgstr "" -#: fortran/arith.cc:2058 +#: fortran/arith.cc:2112 #, gcc-internal-format msgid "" "Arithmetic NaN converting %s to %s at %L. This check can be disabled with " "the option %<-fno-range-check%>" msgstr "" -#: fortran/arith.cc:2063 +#: fortran/arith.cc:2117 #, gcc-internal-format, gfc-internal-format msgid "Division by zero converting %s to %s at %L" msgstr "" -#: fortran/arith.cc:2067 +#: fortran/arith.cc:2121 #, gcc-internal-format, gfc-internal-format msgid "Array operands are incommensurate converting %s to %s at %L" msgstr "" -#: fortran/arith.cc:2071 +#: fortran/arith.cc:2125 #, gcc-internal-format, gfc-internal-format msgid "" "Integer outside symmetric range implied by Standard Fortran converting %s to " "%s at %L" msgstr "" -#: fortran/arith.cc:2161 fortran/arith.cc:2280 fortran/arith.cc:2343 -#: fortran/arith.cc:2398 fortran/arith.cc:2461 fortran/arith.cc:2533 -#: fortran/arith.cc:2603 +#: fortran/arith.cc:2215 fortran/arith.cc:2334 fortran/arith.cc:2397 +#: fortran/arith.cc:2452 fortran/arith.cc:2515 fortran/arith.cc:2587 +#: fortran/arith.cc:2657 #, gcc-internal-format msgid "Conversion from %qs to %qs at %L" msgstr "" -#: fortran/arith.cc:2193 fortran/arith.cc:2229 fortran/arith.cc:2271 -#: fortran/arith.cc:2333 fortran/arith.cc:2388 fortran/arith.cc:2451 -#: fortran/arith.cc:2523 fortran/arith.cc:2595 +#: fortran/arith.cc:2247 fortran/arith.cc:2283 fortran/arith.cc:2325 +#: fortran/arith.cc:2387 fortran/arith.cc:2442 fortran/arith.cc:2505 +#: fortran/arith.cc:2577 fortran/arith.cc:2649 #, gcc-internal-format msgid "Change of value in conversion from %qs to %qs at %L" msgstr "" -#: fortran/arith.cc:2437 fortran/arith.cc:2509 +#: fortran/arith.cc:2491 fortran/arith.cc:2563 #, gcc-internal-format msgid "Non-zero imaginary part discarded in conversion from %qs to %qs at %L" msgstr "" -#: fortran/arith.cc:2688 +#: fortran/arith.cc:2742 #, gcc-internal-format msgid "The Hollerith constant at %L is truncated in conversion to %qs" msgstr "" -#: fortran/arith.cc:2717 +#: fortran/arith.cc:2771 #, gcc-internal-format, gfc-internal-format msgid "The character constant at %L is truncated in conversion to %s" msgstr "" @@ -70745,8 +71029,8 @@ msgid "Array reference at %C cannot have more than %d dimensions" msgstr "" #: fortran/array.cc:248 fortran/array.cc:716 fortran/check.cc:3445 -#: fortran/check.cc:5969 fortran/check.cc:6014 fortran/check.cc:6056 -#: fortran/check.cc:6083 fortran/check.cc:6346 fortran/match.cc:1854 +#: fortran/check.cc:5976 fortran/check.cc:6021 fortran/check.cc:6063 +#: fortran/check.cc:6090 fortran/check.cc:6353 fortran/match.cc:1854 #: fortran/match.cc:3316 fortran/match.cc:3658 fortran/match.cc:3854 #: fortran/simplify.cc:3026 fortran/simplify.cc:3056 fortran/simplify.cc:6409 #: fortran/simplify.cc:8450 @@ -71005,12 +71289,12 @@ msgstr "" msgid "gfc_array_dimen_size(): Bad dimension" msgstr "" -#: fortran/array.cc:2637 +#: fortran/array.cc:2644 #, gcc-internal-format msgid "gfc_array_dimen_size(): Bad EXPR_ARRAY expr" msgstr "" -#: fortran/array.cc:2785 +#: fortran/array.cc:2792 #, gcc-internal-format msgid "gfc_find_array_ref(): No ref found" msgstr "" @@ -71031,7 +71315,7 @@ msgstr "" msgid "Arguments of %qs at %L and %L cannot both be BOZ literal constants" msgstr "" -#: fortran/check.cc:123 fortran/resolve.cc:11270 +#: fortran/check.cc:123 fortran/resolve.cc:11517 #, gcc-internal-format, gfc-internal-format msgid "Invalid use of BOZ literal constant at %L" msgstr "" @@ -71087,7 +71371,7 @@ msgstr "" msgid "%qs argument of %qs intrinsic at %L must be INTEGER or PROCEDURE" msgstr "" -#: fortran/check.cc:651 fortran/check.cc:7625 +#: fortran/check.cc:651 fortran/check.cc:7632 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be a constant" msgstr "" @@ -71237,7 +71521,7 @@ msgstr "" msgid "%qs argument of %qs intrinsic at %L must be a POINTER" msgstr "" -#: fortran/check.cc:1486 fortran/check.cc:1521 fortran/check.cc:4409 +#: fortran/check.cc:1486 fortran/check.cc:1521 fortran/check.cc:4412 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be coindexed" msgstr "" @@ -71507,9 +71791,9 @@ msgid "BOZ constant at %L cannot appear in the COMPLEX intrinsic subprogram" msgstr "" #: fortran/check.cc:2496 fortran/check.cc:3126 fortran/check.cc:3209 -#: fortran/check.cc:3431 fortran/check.cc:3479 fortran/check.cc:4956 -#: fortran/check.cc:5081 fortran/check.cc:5151 fortran/check.cc:6332 -#: fortran/check.cc:6463 +#: fortran/check.cc:3431 fortran/check.cc:3479 fortran/check.cc:4959 +#: fortran/check.cc:5084 fortran/check.cc:5154 fortran/check.cc:6339 +#: fortran/check.cc:6470 #, gcc-internal-format msgid "%qs intrinsic with KIND argument at %L" msgstr "" @@ -71688,7 +71972,7 @@ msgid "" "%qs at %L" msgstr "" -#: fortran/check.cc:4153 fortran/check.cc:7545 fortran/check.cc:7560 +#: fortran/check.cc:4153 fortran/check.cc:7552 fortran/check.cc:7567 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be INTEGER" msgstr "" @@ -71736,508 +72020,513 @@ msgstr "" msgid "Argument %<S%> of NEAREST at %L shall not be zero" msgstr "" -#: fortran/check.cc:4394 +#: fortran/check.cc:4397 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be a POINTER, ALLOCATABLE or " "procedure pointer" msgstr "" -#: fortran/check.cc:4402 +#: fortran/check.cc:4405 #, gcc-internal-format, gfc-internal-format msgid "NULL intrinsic with allocatable MOLD at %L" msgstr "" -#: fortran/check.cc:4481 fortran/check.cc:6410 +#: fortran/check.cc:4484 fortran/check.cc:6417 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must provide at least as many elements " "as there are .TRUE. values in %qs (%ld/%d)" msgstr "" -#: fortran/check.cc:4542 +#: fortran/check.cc:4545 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be of a dummy variable" msgstr "" -#: fortran/check.cc:4552 +#: fortran/check.cc:4555 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be of an OPTIONAL dummy variable" msgstr "" -#: fortran/check.cc:4571 +#: fortran/check.cc:4574 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must not be a subobject of %qs" msgstr "" -#: fortran/check.cc:4622 +#: fortran/check.cc:4625 #, gcc-internal-format, gfc-internal-format msgid "The argument of the RANK intrinsic at %L must be a data object" msgstr "" -#: fortran/check.cc:4730 +#: fortran/check.cc:4733 #, gcc-internal-format msgid "" "%<shape%> argument of %<reshape%> intrinsic at %L must be an array of " "constant size" msgstr "" -#: fortran/check.cc:4740 +#: fortran/check.cc:4743 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L is empty" msgstr "" -#: fortran/check.cc:4747 +#: fortran/check.cc:4750 #, gcc-internal-format msgid "" "%<shape%> argument of %<reshape%> intrinsic at %L has more than %d elements" msgstr "" -#: fortran/check.cc:4770 +#: fortran/check.cc:4773 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L has negative element (%d)" msgstr "" -#: fortran/check.cc:4810 +#: fortran/check.cc:4813 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L has wrong number of elements (%d/%d)" msgstr "" -#: fortran/check.cc:4828 +#: fortran/check.cc:4831 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L has out-of-range dimension (%d)" msgstr "" -#: fortran/check.cc:4837 +#: fortran/check.cc:4840 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L has invalid permutation of dimensions " "(dimension %qd duplicated)" msgstr "" -#: fortran/check.cc:4872 fortran/simplify.cc:7050 +#: fortran/check.cc:4875 fortran/simplify.cc:7050 #, gcc-internal-format, gfc-internal-format msgid "" "Without padding, there are not enough elements in the intrinsic RESHAPE " "source at %L to match the shape" msgstr "" -#: fortran/check.cc:4889 fortran/check.cc:4908 +#: fortran/check.cc:4892 fortran/check.cc:4911 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L cannot be of type %s" msgstr "" -#: fortran/check.cc:4899 fortran/check.cc:4918 +#: fortran/check.cc:4902 fortran/check.cc:4921 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be of an extensible type" msgstr "" -#: fortran/check.cc:5017 +#: fortran/check.cc:5020 #, gcc-internal-format msgid "SELECTED_REAL_KIND with neither %<P%> nor %<R%> argument at %L" msgstr "" -#: fortran/check.cc:5048 +#: fortran/check.cc:5051 #, gcc-internal-format msgid "%qs intrinsic with RADIX argument at %L" msgstr "" -#: fortran/check.cc:5096 +#: fortran/check.cc:5099 #, gcc-internal-format msgid "" "%<source%> argument of %<shape%> intrinsic at %L must not be an assumed size " "array" msgstr "" -#: fortran/check.cc:5169 fortran/check.cc:7605 +#: fortran/check.cc:5172 fortran/check.cc:7612 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be a procedure" msgstr "" -#: fortran/check.cc:5185 fortran/check.cc:5335 fortran/check.cc:7597 +#: fortran/check.cc:5188 fortran/check.cc:5334 fortran/check.cc:7604 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be TYPE(*)" msgstr "" -#: fortran/check.cc:5196 fortran/check.cc:5347 +#: fortran/check.cc:5199 fortran/check.cc:5346 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L shall not be an assumed-size array" msgstr "" -#: fortran/check.cc:5278 +#: fortran/check.cc:5281 #, gcc-internal-format msgid "is_c_interoperable(): gfc_simplify_expr failed" msgstr "" -#: fortran/check.cc:5326 +#: fortran/check.cc:5325 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be an interoperable data entity: %s" msgstr "" -#: fortran/check.cc:5365 +#: fortran/check.cc:5364 #, gcc-internal-format, gfc-internal-format msgid "" "Argument C_PTR_1 at %L to C_ASSOCIATED shall have the type TYPE(C_PTR) or " "TYPE(C_FUNPTR)" msgstr "" -#: fortran/check.cc:5379 +#: fortran/check.cc:5378 #, gcc-internal-format, gfc-internal-format msgid "" "Argument C_PTR_2 at %L to C_ASSOCIATED shall have the same type as C_PTR_1: " "%s instead of %s" msgstr "" -#: fortran/check.cc:5403 +#: fortran/check.cc:5402 #, gcc-internal-format, gfc-internal-format msgid "Argument CPTR at %L to C_F_POINTER shall have the type TYPE(C_PTR)" msgstr "" -#: fortran/check.cc:5415 +#: fortran/check.cc:5414 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_POINTER must be a pointer" msgstr "" -#: fortran/check.cc:5422 +#: fortran/check.cc:5421 #, gcc-internal-format, gfc-internal-format msgid "FPTR argument at %L to C_F_POINTER shall not be polymorphic" msgstr "" -#: fortran/check.cc:5429 +#: fortran/check.cc:5428 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_POINTER shall not be coindexed" msgstr "" -#: fortran/check.cc:5436 +#: fortran/check.cc:5435 #, gcc-internal-format, gfc-internal-format msgid "Unexpected SHAPE argument at %L to C_F_POINTER with scalar FPTR" msgstr "" -#: fortran/check.cc:5442 +#: fortran/check.cc:5441 #, gcc-internal-format, gfc-internal-format msgid "Expected SHAPE argument to C_F_POINTER with array FPTR at %L" msgstr "" -#: fortran/check.cc:5461 +#: fortran/check.cc:5460 #, gcc-internal-format, gfc-internal-format msgid "" "SHAPE argument at %L to C_F_POINTER must have the same size as the RANK of " "FPTR" msgstr "" -#: fortran/check.cc:5471 +#: fortran/check.cc:5470 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic FPTR at %L to C_F_POINTER" msgstr "" #: fortran/check.cc:5476 #, gcc-internal-format, gfc-internal-format -msgid "Noninteroperable array FPTR at %L to C_F_POINTER: %s" +msgid "FPTR argument to C_F_POINTER at %L is a function returning a pointer" +msgstr "" + +#: fortran/check.cc:5483 +#, gcc-internal-format, gfc-internal-format +msgid "Noninteroperable array FPTR argument to C_F_POINTER at %L: %s" msgstr "" -#: fortran/check.cc:5492 +#: fortran/check.cc:5499 #, gcc-internal-format, gfc-internal-format msgid "" "Argument CPTR at %L to C_F_PROCPOINTER shall have the type TYPE(C_FUNPTR)" msgstr "" -#: fortran/check.cc:5504 +#: fortran/check.cc:5511 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure pointer" msgstr "" -#: fortran/check.cc:5511 +#: fortran/check.cc:5518 #, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_PROCPOINTER shall not be coindexed" msgstr "" -#: fortran/check.cc:5517 +#: fortran/check.cc:5524 #, gcc-internal-format, gfc-internal-format msgid "Noninteroperable procedure pointer at %L to C_F_PROCPOINTER" msgstr "" -#: fortran/check.cc:5531 +#: fortran/check.cc:5538 #, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_FUNLOC shall not be coindexed" msgstr "" -#: fortran/check.cc:5543 +#: fortran/check.cc:5550 #, gcc-internal-format msgid "Function result %qs at %L is invalid as X argument to C_FUNLOC" msgstr "" -#: fortran/check.cc:5550 +#: fortran/check.cc:5557 #, gcc-internal-format, gfc-internal-format msgid "" "Argument X at %L to C_FUNLOC shall be a procedure or a procedure pointer" msgstr "" -#: fortran/check.cc:5556 +#: fortran/check.cc:5563 #, gcc-internal-format, gfc-internal-format msgid "Noninteroperable procedure at %L to C_FUNLOC" msgstr "" -#: fortran/check.cc:5570 +#: fortran/check.cc:5577 #, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_LOC shall not be coindexed" msgstr "" -#: fortran/check.cc:5576 +#: fortran/check.cc:5583 #, gcc-internal-format, gfc-internal-format msgid "X argument at %L to C_LOC shall not be polymorphic" msgstr "" -#: fortran/check.cc:5587 +#: fortran/check.cc:5594 #, gcc-internal-format, gfc-internal-format msgid "" "Argument X at %L to C_LOC shall have either the POINTER or the TARGET " "attribute" msgstr "" -#: fortran/check.cc:5595 +#: fortran/check.cc:5602 #, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_LOC shall be not be a zero-sized string" msgstr "" -#: fortran/check.cc:5604 +#: fortran/check.cc:5611 #, gcc-internal-format, gfc-internal-format msgid "Argument at %L to C_LOC shall not be polymorphic" msgstr "" -#: fortran/check.cc:5611 +#: fortran/check.cc:5618 #, gcc-internal-format, gfc-internal-format msgid "Noninteroperable array at %L as argument to C_LOC: %s" msgstr "" -#: fortran/check.cc:5622 +#: fortran/check.cc:5629 #, gcc-internal-format, gfc-internal-format msgid "" "Array of interoperable type at %L to C_LOC which is nonallocatable and " "neither assumed size nor explicit size" msgstr "" -#: fortran/check.cc:5627 +#: fortran/check.cc:5634 #, gcc-internal-format, gfc-internal-format msgid "Array section at %L to C_LOC" msgstr "" -#: fortran/check.cc:5655 +#: fortran/check.cc:5662 #, gcc-internal-format, gfc-internal-format msgid "non double precision REAL argument to %s intrinsic at %L" msgstr "" -#: fortran/check.cc:5671 +#: fortran/check.cc:5678 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must be less than rank %d" msgstr "" -#: fortran/check.cc:5690 +#: fortran/check.cc:5697 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L is not a valid dimension index" msgstr "" -#: fortran/check.cc:5714 +#: fortran/check.cc:5721 #, gcc-internal-format msgid "%qs argument of %qs intrinsic at %L must have length at least 1" msgstr "" -#: fortran/check.cc:5978 +#: fortran/check.cc:5985 #, gcc-internal-format, gfc-internal-format msgid "%s argument to IMAGE_INDEX must be a rank one array at %L" msgstr "" -#: fortran/check.cc:5985 +#: fortran/check.cc:5992 #, gcc-internal-format, gfc-internal-format msgid "Type of %s argument of IMAGE_INDEX at %L shall be INTEGER" msgstr "" -#: fortran/check.cc:5996 +#: fortran/check.cc:6003 #, gcc-internal-format, gfc-internal-format msgid "" "The number of array elements of the SUB argument to IMAGE_INDEX at %L shall " "be %d (corank) not %d" msgstr "" -#: fortran/check.cc:6029 +#: fortran/check.cc:6036 #, gcc-internal-format, gfc-internal-format msgid "DISTANCE= argument to NUM_IMAGES at %L" msgstr "" -#: fortran/check.cc:6042 +#: fortran/check.cc:6049 #, gcc-internal-format, gfc-internal-format msgid "FAILED= argument to NUM_IMAGES at %L" msgstr "" -#: fortran/check.cc:6066 +#: fortran/check.cc:6073 #, gcc-internal-format, gfc-internal-format msgid "" "TEAM argument at %L to the intrinsic TEAM_NUMBER shall be of type TEAM_TYPE" msgstr "" -#: fortran/check.cc:6092 +#: fortran/check.cc:6099 #, gcc-internal-format, gfc-internal-format msgid "" "DIM argument without COARRAY argument not allowed for THIS_IMAGE intrinsic " "at %L" msgstr "" -#: fortran/check.cc:6099 +#: fortran/check.cc:6106 #, gcc-internal-format, gfc-internal-format msgid "" "The DISTANCE argument may not be specified together with the COARRAY or DIM " "argument in intrinsic at %L" msgstr "" -#: fortran/check.cc:6110 +#: fortran/check.cc:6117 #, gcc-internal-format, gfc-internal-format msgid "Unexpected DIM argument with noncoarray argument at %L" msgstr "" -#: fortran/check.cc:6128 +#: fortran/check.cc:6135 #, gcc-internal-format, gfc-internal-format msgid "DISTANCE= argument to THIS_IMAGE at %L" msgstr "" -#: fortran/check.cc:6186 +#: fortran/check.cc:6193 #, gcc-internal-format msgid "" "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L is an array and shall not " "have storage size 0 when %<SOURCE%> argument has size greater than 0" msgstr "" -#: fortran/check.cc:6238 +#: fortran/check.cc:6245 #, gcc-internal-format msgid "%<SOURCE%> argument of %<TRANSFER%> intrinsic at %L must not be a %s" msgstr "" -#: fortran/check.cc:6257 +#: fortran/check.cc:6264 #, gcc-internal-format msgid "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be a %s" msgstr "" -#: fortran/check.cc:6265 +#: fortran/check.cc:6272 #, gcc-internal-format msgid "%<MOLD%> argument of %<TRANSFER%> intrinsic at %L must not be %s" msgstr "" -#: fortran/check.cc:6300 +#: fortran/check.cc:6307 msgid "" "Intrinsic TRANSFER at %L has partly undefined result: source size %zd < " "result size %zd" msgstr "" -#: fortran/check.cc:6424 +#: fortran/check.cc:6431 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must have the same rank as %qs or be a " "scalar" msgstr "" -#: fortran/check.cc:6437 +#: fortran/check.cc:6444 #, gcc-internal-format msgid "%qs and %qs arguments of %qs intrinsic at %L must have identical shape." msgstr "" -#: fortran/check.cc:6573 +#: fortran/check.cc:6580 #, gcc-internal-format, gfc-internal-format msgid "VALUES argument of DATE_AND_TIME at %L has non-default kind" msgstr "" -#: fortran/check.cc:6585 +#: fortran/check.cc:6592 #, gcc-internal-format, gfc-internal-format msgid "" "VALUES argument of DATE_AND_TIME at %L must have a decimal exponent range of " "at least four" msgstr "" -#: fortran/check.cc:6724 fortran/check.cc:6756 +#: fortran/check.cc:6731 fortran/check.cc:6763 #, gcc-internal-format msgid "Size of %qs argument of %qs intrinsic at %L too small (%i/%i)" msgstr "" -#: fortran/check.cc:6764 +#: fortran/check.cc:6771 #, gcc-internal-format, gfc-internal-format msgid "Too many arguments to %s at %L" msgstr "" -#: fortran/check.cc:6782 +#: fortran/check.cc:6789 #, gcc-internal-format msgid "fe_runtime_error string must be null terminated" msgstr "" -#: fortran/check.cc:6794 +#: fortran/check.cc:6801 #, gcc-internal-format, gfc-internal-format msgid "fe_runtime_error: Wrong number of arguments (%d instead of %d)" msgstr "" -#: fortran/check.cc:6836 +#: fortran/check.cc:6843 #, gcc-internal-format, gfc-internal-format msgid "COUNT argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "" -#: fortran/check.cc:6843 +#: fortran/check.cc:6850 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT argument to SYSTEM_CLOCK at %L with kind smaller than default integer" msgstr "" -#: fortran/check.cc:6864 +#: fortran/check.cc:6871 #, gcc-internal-format, gfc-internal-format msgid "Real COUNT_RATE argument to SYSTEM_CLOCK at %L" msgstr "" -#: fortran/check.cc:6874 +#: fortran/check.cc:6881 #, gcc-internal-format, gfc-internal-format msgid "COUNT_RATE argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "" -#: fortran/check.cc:6881 +#: fortran/check.cc:6888 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT_RATE argument to SYSTEM_CLOCK at %L with kind smaller than default " "integer" msgstr "" -#: fortran/check.cc:6901 +#: fortran/check.cc:6908 #, gcc-internal-format, gfc-internal-format msgid "COUNT_MAX argument to SYSTEM_CLOCK at %L has non-default kind" msgstr "" -#: fortran/check.cc:6911 +#: fortran/check.cc:6918 #, gcc-internal-format, gfc-internal-format msgid "" "COUNT_MAX argument to SYSTEM_CLOCK at %L with kind smaller than default " "integer" msgstr "" -#: fortran/check.cc:6926 fortran/check.cc:6933 +#: fortran/check.cc:6933 fortran/check.cc:6940 #, gcc-internal-format, gfc-internal-format msgid "integer arguments to SYSTEM_CLOCK at %L with different kind parameters" msgstr "" -#: fortran/check.cc:7147 +#: fortran/check.cc:7154 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be of a kind not wider than the " "default kind (%d)" msgstr "" -#: fortran/check.cc:7329 +#: fortran/check.cc:7336 #, gcc-internal-format msgid "Actual argument at %L of %qs intrinsic shall be an associated pointer" msgstr "" -#: fortran/check.cc:7518 fortran/check.cc:7529 +#: fortran/check.cc:7525 fortran/check.cc:7536 #, gcc-internal-format msgid "" "%qs argument of %qs intrinsic at %L must be INTEGER, LOGICAL, or a BOZ " "literal constant" msgstr "" -#: fortran/check.cc:7589 +#: fortran/check.cc:7596 #, gcc-internal-format, gfc-internal-format msgid "" "Intrinsic function NULL at %L cannot be an actual argument to STORAGE_SIZE, " @@ -72246,12 +72535,12 @@ msgstr "" #. Since the extension field is 8 bit wide, we can only have #. up to 255 extension levels. -#: fortran/class.cc:799 fortran/decl.cc:4076 fortran/decl.cc:10767 +#: fortran/class.cc:799 fortran/decl.cc:4076 fortran/decl.cc:10782 #, gcc-internal-format msgid "Maximum extension level reached with type %qs at %L" msgstr "" -#: fortran/class.cc:3059 fortran/class.cc:3133 +#: fortran/class.cc:3109 fortran/class.cc:3183 #, gcc-internal-format msgid "%qs of %qs is PRIVATE at %L" msgstr "" @@ -72296,12 +72585,12 @@ msgstr "" msgid "Initialization string at %L was truncated to fit the variable (%wd/%wd)" msgstr "" -#: fortran/data.cc:220 fortran/resolve.cc:5287 +#: fortran/data.cc:220 fortran/resolve.cc:5289 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L is less than one" msgstr "" -#: fortran/data.cc:226 fortran/resolve.cc:5317 +#: fortran/data.cc:226 fortran/resolve.cc:5319 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L exceeds the string length" msgstr "" @@ -72486,7 +72775,7 @@ msgstr "" msgid "deferred type parameter at %C" msgstr "" -#: fortran/decl.cc:1162 fortran/resolve.cc:13060 +#: fortran/decl.cc:1162 fortran/resolve.cc:13307 #, gcc-internal-format, gfc-internal-format msgid "Scalar INTEGER expression expected at %L" msgstr "" @@ -72739,7 +73028,7 @@ msgstr "" msgid "Array component of structure at %C must have explicit or deferred shape" msgstr "" -#: fortran/decl.cc:2355 fortran/symbol.cc:2270 +#: fortran/decl.cc:2355 fortran/symbol.cc:2283 #, gcc-internal-format msgid "Component %qs at %C already declared at %L" msgstr "" @@ -72851,7 +73140,7 @@ msgstr "" msgid "%qs entity cannot have an initializer at %C" msgstr "" -#: fortran/decl.cc:2915 fortran/decl.cc:8997 +#: fortran/decl.cc:2915 fortran/decl.cc:9012 #, gcc-internal-format, gfc-internal-format msgid "Duplicate array spec for Cray pointee at %C" msgstr "" @@ -72876,7 +73165,7 @@ msgstr "" msgid "Syntax error in old style initialization of %s at %C" msgstr "" -#: fortran/decl.cc:3027 fortran/decl.cc:7212 +#: fortran/decl.cc:3027 fortran/decl.cc:7227 #, gcc-internal-format, gfc-internal-format msgid "Initialization at %C isn't for a pointer variable" msgstr "" @@ -72886,7 +73175,7 @@ msgstr "" msgid "Pointer initialization at %C requires %<=>%>, not %<=%>" msgstr "" -#: fortran/decl.cc:3059 fortran/decl.cc:10941 +#: fortran/decl.cc:3059 fortran/decl.cc:10956 #, gcc-internal-format, gfc-internal-format msgid "Expected an initialization expression at %C" msgstr "" @@ -72964,7 +73253,7 @@ msgstr "" msgid "Expected scalar initialization expression at %C" msgstr "" -#: fortran/decl.cc:3362 fortran/decl.cc:4097 +#: fortran/decl.cc:3362 fortran/decl.cc:4112 #, gcc-internal-format, gfc-internal-format msgid "Kind %d not supported for type %s at %C" msgstr "" @@ -73051,302 +73340,302 @@ msgstr "" msgid "Parameterized derived type at %C is ambiguous" msgstr "" -#: fortran/decl.cc:4232 +#: fortran/decl.cc:4247 #, gcc-internal-format, gfc-internal-format msgid "BYTE type at %C" msgstr "" -#: fortran/decl.cc:4244 +#: fortran/decl.cc:4259 #, gcc-internal-format, gfc-internal-format msgid "BYTE type used at %C is not available on the target machine" msgstr "" -#: fortran/decl.cc:4306 +#: fortran/decl.cc:4321 #, gcc-internal-format, gfc-internal-format msgid "Assumed type at %C is not allowed for components" msgstr "" -#: fortran/decl.cc:4309 +#: fortran/decl.cc:4324 #, gcc-internal-format, gfc-internal-format msgid "Assumed type at %C" msgstr "" -#: fortran/decl.cc:4331 fortran/decl.cc:4365 fortran/decl.cc:4398 -#: fortran/decl.cc:4697 +#: fortran/decl.cc:4346 fortran/decl.cc:4380 fortran/decl.cc:4413 +#: fortran/decl.cc:4712 #, gcc-internal-format, gfc-internal-format msgid "TYPE with intrinsic-type-spec at %C" msgstr "" -#: fortran/decl.cc:4343 fortran/decl.cc:4371 fortran/decl.cc:4404 -#: fortran/decl.cc:4430 fortran/decl.cc:4722 fortran/decl.cc:4740 +#: fortran/decl.cc:4358 fortran/decl.cc:4386 fortran/decl.cc:4419 +#: fortran/decl.cc:4445 fortran/decl.cc:4737 fortran/decl.cc:4755 #, gcc-internal-format, gfc-internal-format msgid "Malformed type-spec at %C" msgstr "" -#: fortran/decl.cc:4394 +#: fortran/decl.cc:4409 #, gcc-internal-format, gfc-internal-format msgid "DOUBLE COMPLEX at %C" msgstr "" -#: fortran/decl.cc:4446 fortran/decl.cc:4588 fortran/decl.cc:4600 -#: fortran/decl.cc:4614 fortran/decl.cc:5099 fortran/decl.cc:5107 +#: fortran/decl.cc:4461 fortran/decl.cc:4603 fortran/decl.cc:4615 +#: fortran/decl.cc:4629 fortran/decl.cc:5114 fortran/decl.cc:5122 #, gcc-internal-format msgid "Type name %qs at %C is ambiguous" msgstr "" -#: fortran/decl.cc:4547 +#: fortran/decl.cc:4562 #, gcc-internal-format, gfc-internal-format msgid "CLASS statement at %C" msgstr "" -#: fortran/decl.cc:4629 +#: fortran/decl.cc:4644 #, gcc-internal-format msgid "" "Type name %qs at %C conflicts with previously declared entity at %L, which " "has the same name" msgstr "" -#: fortran/decl.cc:4775 +#: fortran/decl.cc:4790 #, gcc-internal-format, gfc-internal-format msgid "Duplicate IMPLICIT NONE statement at %C" msgstr "" -#: fortran/decl.cc:4784 +#: fortran/decl.cc:4799 #, gcc-internal-format, gfc-internal-format msgid "IMPLICIT NONE with spec list at %C" msgstr "" -#: fortran/decl.cc:4843 +#: fortran/decl.cc:4858 #, gcc-internal-format, gfc-internal-format msgid "Missing character range in IMPLICIT at %C" msgstr "" -#: fortran/decl.cc:4889 +#: fortran/decl.cc:4904 #, gcc-internal-format, gfc-internal-format msgid "Letters must be in alphabetic order in IMPLICIT statement at %C" msgstr "" -#: fortran/decl.cc:4942 +#: fortran/decl.cc:4957 #, gcc-internal-format, gfc-internal-format msgid "IMPLICIT statement at %C following an IMPLICIT NONE (type) statement" msgstr "" -#: fortran/decl.cc:4952 +#: fortran/decl.cc:4967 #, gcc-internal-format, gfc-internal-format msgid "Empty IMPLICIT statement at %C" msgstr "" -#: fortran/decl.cc:5058 +#: fortran/decl.cc:5073 #, gcc-internal-format, gfc-internal-format msgid "IMPORT statement at %C only permitted in an INTERFACE body" msgstr "" -#: fortran/decl.cc:5065 +#: fortran/decl.cc:5080 #, gcc-internal-format, gfc-internal-format msgid "" "F2008: C1210 IMPORT statement at %C is not permitted in a module procedure " "interface body" msgstr "" -#: fortran/decl.cc:5070 +#: fortran/decl.cc:5085 #, gcc-internal-format, gfc-internal-format msgid "IMPORT statement at %C" msgstr "" -#: fortran/decl.cc:5084 +#: fortran/decl.cc:5099 #, gcc-internal-format, gfc-internal-format msgid "Expecting list of named entities at %C" msgstr "" -#: fortran/decl.cc:5113 +#: fortran/decl.cc:5128 #, gcc-internal-format msgid "Cannot IMPORT %qs from host scoping unit at %C - does not exist." msgstr "" -#: fortran/decl.cc:5120 +#: fortran/decl.cc:5135 #, gcc-internal-format msgid "%qs is already IMPORTed from host scoping unit at %C" msgstr "" -#: fortran/decl.cc:5161 +#: fortran/decl.cc:5176 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in IMPORT statement at %C" msgstr "" -#: fortran/decl.cc:5501 +#: fortran/decl.cc:5516 #, gcc-internal-format, gfc-internal-format msgid "Missing codimension specification at %C" msgstr "" -#: fortran/decl.cc:5503 +#: fortran/decl.cc:5518 #, gcc-internal-format, gfc-internal-format msgid "Missing dimension specification at %C" msgstr "" -#: fortran/decl.cc:5598 +#: fortran/decl.cc:5613 #, gcc-internal-format, gfc-internal-format msgid "Duplicate %s attribute at %L" msgstr "" -#: fortran/decl.cc:5615 +#: fortran/decl.cc:5630 #, gcc-internal-format msgid "%s at %L is a DEC extension, enable with %<-fdec-static%>" msgstr "" -#: fortran/decl.cc:5634 +#: fortran/decl.cc:5649 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATABLE attribute at %C in a TYPE definition" msgstr "" -#: fortran/decl.cc:5636 +#: fortran/decl.cc:5651 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATABLE attribute at %C in a STRUCTURE definition" msgstr "" -#: fortran/decl.cc:5646 +#: fortran/decl.cc:5661 #, gcc-internal-format, gfc-internal-format msgid "KIND attribute at %C in a TYPE definition" msgstr "" -#: fortran/decl.cc:5648 +#: fortran/decl.cc:5663 #, gcc-internal-format, gfc-internal-format msgid "KIND attribute at %C in a STRUCTURE definition" msgstr "" -#: fortran/decl.cc:5656 +#: fortran/decl.cc:5671 #, gcc-internal-format, gfc-internal-format msgid "Component with KIND attribute at %C must be INTEGER" msgstr "" -#: fortran/decl.cc:5665 +#: fortran/decl.cc:5680 #, gcc-internal-format, gfc-internal-format msgid "LEN attribute at %C in a TYPE definition" msgstr "" -#: fortran/decl.cc:5667 +#: fortran/decl.cc:5682 #, gcc-internal-format, gfc-internal-format msgid "LEN attribute at %C in a STRUCTURE definition" msgstr "" -#: fortran/decl.cc:5675 +#: fortran/decl.cc:5690 #, gcc-internal-format, gfc-internal-format msgid "Component with LEN attribute at %C must be INTEGER" msgstr "" -#: fortran/decl.cc:5683 +#: fortran/decl.cc:5698 #, gcc-internal-format, gfc-internal-format msgid "Attribute at %L is not allowed in a TYPE definition" msgstr "" -#: fortran/decl.cc:5685 +#: fortran/decl.cc:5700 #, gcc-internal-format, gfc-internal-format msgid "Attribute at %L is not allowed in a STRUCTURE definition" msgstr "" -#: fortran/decl.cc:5703 +#: fortran/decl.cc:5718 #, gcc-internal-format, gfc-internal-format msgid "Attribute %s at %L in a TYPE definition" msgstr "" -#: fortran/decl.cc:5713 +#: fortran/decl.cc:5728 #, gcc-internal-format, gfc-internal-format msgid "" "%s attribute at %L is not allowed outside of the specification part of a " "module" msgstr "" -#: fortran/decl.cc:5723 +#: fortran/decl.cc:5738 #, gcc-internal-format, gfc-internal-format msgid "Attribute at %L is not allowed outside a TYPE definition" msgstr "" -#: fortran/decl.cc:5736 +#: fortran/decl.cc:5751 #, gcc-internal-format, gfc-internal-format msgid "ASYNCHRONOUS attribute at %C" msgstr "" -#: fortran/decl.cc:5747 +#: fortran/decl.cc:5762 #, gcc-internal-format, gfc-internal-format msgid "CONTIGUOUS attribute at %C" msgstr "" -#: fortran/decl.cc:5802 fortran/decl.cc:9299 +#: fortran/decl.cc:5817 fortran/decl.cc:9314 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED at %C only allowed in specification part of a module" msgstr "" -#: fortran/decl.cc:5808 +#: fortran/decl.cc:5823 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED attribute at %C" msgstr "" -#: fortran/decl.cc:5842 +#: fortran/decl.cc:5857 #, gcc-internal-format, gfc-internal-format msgid "VALUE attribute at %C" msgstr "" -#: fortran/decl.cc:5849 +#: fortran/decl.cc:5864 #, gcc-internal-format, gfc-internal-format msgid "VOLATILE attribute at %C" msgstr "" -#: fortran/decl.cc:5856 +#: fortran/decl.cc:5871 #, gcc-internal-format msgid "match_attr_spec(): Bad attribute" msgstr "" -#: fortran/decl.cc:5897 +#: fortran/decl.cc:5912 #, gcc-internal-format, gfc-internal-format msgid "Multiple identifiers provided with single NAME= specifier at %C" msgstr "" -#: fortran/decl.cc:5995 +#: fortran/decl.cc:6010 #, gcc-internal-format msgid "" "Implicitly declared BIND(C) function %qs at %L may not be C interoperable" msgstr "" -#: fortran/decl.cc:6017 +#: fortran/decl.cc:6032 #, gcc-internal-format msgid "" "Variable %qs in common block %qs at %L may not be a C interoperable kind " "though common block %qs is BIND(C)" msgstr "" -#: fortran/decl.cc:6028 +#: fortran/decl.cc:6043 #, gcc-internal-format msgid "Type declaration %qs at %L is not C interoperable but it is BIND(C)" msgstr "" -#: fortran/decl.cc:6034 +#: fortran/decl.cc:6049 #, gcc-internal-format msgid "Variable %qs at %L may not be a C interoperable kind but it is BIND(C)" msgstr "" -#: fortran/decl.cc:6046 +#: fortran/decl.cc:6061 #, gcc-internal-format msgid "" "Variable %qs in common block %qs at %L cannot be declared with BIND(C) since " "it is not a global" msgstr "" -#: fortran/decl.cc:6060 +#: fortran/decl.cc:6075 #, gcc-internal-format msgid "Variable %qs at %L cannot have both the POINTER and BIND(C) attributes" msgstr "" -#: fortran/decl.cc:6068 +#: fortran/decl.cc:6083 #, gcc-internal-format msgid "" "Variable %qs at %L cannot have both the ALLOCATABLE and BIND(C) attributes" msgstr "" -#: fortran/decl.cc:6080 +#: fortran/decl.cc:6095 #, gcc-internal-format msgid "Return type of BIND(C) function %qs at %L cannot be an array" msgstr "" -#: fortran/decl.cc:6086 +#: fortran/decl.cc:6101 #, gcc-internal-format msgid "" "Return type of BIND(C) function %qs of character type at %L must have length " @@ -73355,1050 +73644,1050 @@ msgstr "" #. Use gfc_warning_now because we won't say that the symbol fails #. just because of this. -#: fortran/decl.cc:6097 +#: fortran/decl.cc:6112 #, gcc-internal-format msgid "" "Symbol %qs at %L is marked PRIVATE but has been given the binding label %qs" msgstr "" -#: fortran/decl.cc:6171 +#: fortran/decl.cc:6186 #, gcc-internal-format, gfc-internal-format msgid "" "Need either entity or common block name for attribute specification " "statement at %C" msgstr "" -#: fortran/decl.cc:6216 +#: fortran/decl.cc:6231 #, gcc-internal-format, gfc-internal-format msgid "" "Missing entity or common block name for attribute specification statement at " "%C" msgstr "" -#: fortran/decl.cc:6223 +#: fortran/decl.cc:6238 #, gcc-internal-format msgid "Missing symbol" msgstr "" -#: fortran/decl.cc:6252 +#: fortran/decl.cc:6267 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) statement at %C" msgstr "" -#: fortran/decl.cc:6314 +#: fortran/decl.cc:6329 #, gcc-internal-format, gfc-internal-format msgid "CLASS entity at %C cannot have the PARAMETER attribute" msgstr "" -#: fortran/decl.cc:6346 +#: fortran/decl.cc:6361 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C has not been previously defined and so cannot appear in a " "derived type definition" msgstr "" -#: fortran/decl.cc:6388 +#: fortran/decl.cc:6403 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in anonymous structure declaration at %C" msgstr "" -#: fortran/decl.cc:6397 +#: fortran/decl.cc:6412 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in data declaration at %C" msgstr "" -#: fortran/decl.cc:6469 +#: fortran/decl.cc:6484 #, gcc-internal-format, gfc-internal-format msgid "MODULE prefix at %C" msgstr "" -#: fortran/decl.cc:6474 +#: fortran/decl.cc:6489 #, gcc-internal-format, gfc-internal-format msgid "MODULE prefix at %C found outside of a module, submodule, or interface" msgstr "" -#: fortran/decl.cc:6525 +#: fortran/decl.cc:6540 #, gcc-internal-format, gfc-internal-format msgid "IMPURE procedure at %C" msgstr "" -#: fortran/decl.cc:6537 +#: fortran/decl.cc:6552 #, gcc-internal-format, gfc-internal-format msgid "PURE and IMPURE must not appear both at %C" msgstr "" -#: fortran/decl.cc:6583 +#: fortran/decl.cc:6598 #, gcc-internal-format, gfc-internal-format msgid "ELEMENTAL prefix in MODULE PROCEDURE interface is missing at %L" msgstr "" -#: fortran/decl.cc:6590 +#: fortran/decl.cc:6605 #, gcc-internal-format, gfc-internal-format msgid "PURE prefix in MODULE PROCEDURE interface is missing at %L" msgstr "" -#: fortran/decl.cc:6597 +#: fortran/decl.cc:6612 #, gcc-internal-format, gfc-internal-format msgid "RECURSIVE prefix in MODULE PROCEDURE interface is missing at %L" msgstr "" -#: fortran/decl.cc:6658 +#: fortran/decl.cc:6673 #, gcc-internal-format, gfc-internal-format msgid "A type parameter list is required at %C" msgstr "" -#: fortran/decl.cc:6672 fortran/primary.cc:1885 +#: fortran/decl.cc:6687 fortran/primary.cc:1885 #, gcc-internal-format, gfc-internal-format msgid "Alternate-return argument at %C" msgstr "" -#: fortran/decl.cc:6678 fortran/decl.cc:6686 +#: fortran/decl.cc:6693 fortran/decl.cc:6701 #, gcc-internal-format, gfc-internal-format msgid "A parameter name is required at %C" msgstr "" -#: fortran/decl.cc:6726 +#: fortran/decl.cc:6741 #, gcc-internal-format msgid "Name %qs at %C is the name of the procedure" msgstr "" -#: fortran/decl.cc:6739 +#: fortran/decl.cc:6754 #, gcc-internal-format, gfc-internal-format msgid "Expected parameter list in type declaration at %C" msgstr "" -#: fortran/decl.cc:6742 +#: fortran/decl.cc:6757 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk in formal argument list at %C" msgstr "" -#: fortran/decl.cc:6760 +#: fortran/decl.cc:6775 #, gcc-internal-format msgid "Duplicate name %qs in parameter list at %C" msgstr "" -#: fortran/decl.cc:6763 +#: fortran/decl.cc:6778 #, gcc-internal-format msgid "Duplicate symbol %qs in formal argument list at %C" msgstr "" -#: fortran/decl.cc:6805 +#: fortran/decl.cc:6820 #, gcc-internal-format msgid "" "MODULE PROCEDURE formal argument %qs conflicts with alternate return at %C" msgstr "" -#: fortran/decl.cc:6809 +#: fortran/decl.cc:6824 #, gcc-internal-format msgid "" "MODULE PROCEDURE formal argument is alternate return and conflicts with %qs " "in the separate declaration at %C" msgstr "" -#: fortran/decl.cc:6814 +#: fortran/decl.cc:6829 #, gcc-internal-format, gfc-internal-format msgid "Mismatch in MODULE PROCEDURE formal argument names (%s/%s) at %C" msgstr "" -#: fortran/decl.cc:6821 +#: fortran/decl.cc:6836 #, gcc-internal-format, gfc-internal-format msgid "Mismatch in number of MODULE PROCEDURE formal arguments at %C" msgstr "" -#: fortran/decl.cc:6860 +#: fortran/decl.cc:6875 #, gcc-internal-format, gfc-internal-format msgid "RESULT variable at %C must be different than function name" msgstr "" -#: fortran/decl.cc:6937 +#: fortran/decl.cc:6952 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after function declaration at %C" msgstr "" -#: fortran/decl.cc:6947 fortran/decl.cc:8085 +#: fortran/decl.cc:6962 fortran/decl.cc:8100 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) attribute at %L may not be specified for an internal procedure" msgstr "" -#: fortran/decl.cc:7151 +#: fortran/decl.cc:7166 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) attribute at %C requires an interface with BIND(C)" msgstr "" -#: fortran/decl.cc:7158 +#: fortran/decl.cc:7173 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) procedure with NAME may not have POINTER attribute at %C" msgstr "" -#: fortran/decl.cc:7164 +#: fortran/decl.cc:7179 #, gcc-internal-format, gfc-internal-format msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME" msgstr "" -#: fortran/decl.cc:7187 +#: fortran/decl.cc:7202 #, gcc-internal-format msgid "Procedure %qs at %L already has basic type of %s" msgstr "" -#: fortran/decl.cc:7233 fortran/decl.cc:7421 fortran/decl.cc:11425 +#: fortran/decl.cc:7248 fortran/decl.cc:7436 fortran/decl.cc:11440 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in PROCEDURE statement at %C" msgstr "" -#: fortran/decl.cc:7282 fortran/decl.cc:11325 +#: fortran/decl.cc:7297 fortran/decl.cc:11340 #, gcc-internal-format msgid "Expected %<::%> after binding-attributes at %C" msgstr "" -#: fortran/decl.cc:7289 +#: fortran/decl.cc:7304 #, gcc-internal-format, gfc-internal-format msgid "NOPASS or explicit interface required at %C" msgstr "" -#: fortran/decl.cc:7293 +#: fortran/decl.cc:7308 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer component at %C" msgstr "" -#: fortran/decl.cc:7365 +#: fortran/decl.cc:7380 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in procedure pointer component at %C" msgstr "" -#: fortran/decl.cc:7383 +#: fortran/decl.cc:7398 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE at %C must be in a generic interface" msgstr "" -#: fortran/decl.cc:7392 fortran/decl.cc:10065 +#: fortran/decl.cc:7407 fortran/decl.cc:10080 #, gcc-internal-format, gfc-internal-format msgid "double colon in MODULE PROCEDURE statement at %L" msgstr "" -#: fortran/decl.cc:7462 +#: fortran/decl.cc:7477 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE statement at %C" msgstr "" -#: fortran/decl.cc:7534 +#: fortran/decl.cc:7549 #, gcc-internal-format, gfc-internal-format msgid "Expected formal argument list in function definition at %C" msgstr "" -#: fortran/decl.cc:7564 fortran/decl.cc:7843 fortran/decl.cc:8052 -#: fortran/symbol.cc:1910 +#: fortran/decl.cc:7579 fortran/decl.cc:7858 fortran/decl.cc:8067 +#: fortran/symbol.cc:1923 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) attribute at %L can only be used for variables or common blocks" msgstr "" -#: fortran/decl.cc:7594 fortran/decl.cc:8110 +#: fortran/decl.cc:7609 fortran/decl.cc:8125 #, gcc-internal-format msgid "Mismatch in BIND(C) names (%qs/%qs) at %C" msgstr "" -#: fortran/decl.cc:7737 +#: fortran/decl.cc:7752 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C" msgstr "" -#: fortran/decl.cc:7746 +#: fortran/decl.cc:7761 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a PROGRAM" msgstr "" -#: fortran/decl.cc:7749 +#: fortran/decl.cc:7764 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a MODULE" msgstr "" -#: fortran/decl.cc:7752 +#: fortran/decl.cc:7767 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a SUBMODULE" msgstr "" -#: fortran/decl.cc:7755 +#: fortran/decl.cc:7770 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a BLOCK DATA" msgstr "" -#: fortran/decl.cc:7759 fortran/decl.cc:7804 +#: fortran/decl.cc:7774 fortran/decl.cc:7819 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within an INTERFACE" msgstr "" -#: fortran/decl.cc:7763 +#: fortran/decl.cc:7778 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a STRUCTURE block" msgstr "" -#: fortran/decl.cc:7767 +#: fortran/decl.cc:7782 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block" msgstr "" -#: fortran/decl.cc:7771 +#: fortran/decl.cc:7786 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within an IF-THEN block" msgstr "" -#: fortran/decl.cc:7776 +#: fortran/decl.cc:7791 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a DO block" msgstr "" -#: fortran/decl.cc:7780 +#: fortran/decl.cc:7795 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a SELECT block" msgstr "" -#: fortran/decl.cc:7784 +#: fortran/decl.cc:7799 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a FORALL block" msgstr "" -#: fortran/decl.cc:7788 +#: fortran/decl.cc:7803 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a WHERE block" msgstr "" -#: fortran/decl.cc:7792 +#: fortran/decl.cc:7807 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear within a contained subprogram" msgstr "" -#: fortran/decl.cc:7796 +#: fortran/decl.cc:7811 #, gcc-internal-format, gfc-internal-format msgid "Unexpected ENTRY statement at %C" msgstr "" -#: fortran/decl.cc:7817 +#: fortran/decl.cc:7832 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %C cannot appear in a contained procedure" msgstr "" -#: fortran/decl.cc:7868 fortran/decl.cc:8092 +#: fortran/decl.cc:7883 fortran/decl.cc:8107 #, gcc-internal-format, gfc-internal-format msgid "Missing required parentheses before BIND(C) at %C" msgstr "" -#: fortran/decl.cc:7962 +#: fortran/decl.cc:7977 #, gcc-internal-format, gfc-internal-format msgid "ENTRY statement at %L with BIND(C) prohibited in an elemental procedure" msgstr "" -#: fortran/decl.cc:8119 +#: fortran/decl.cc:8134 #, gcc-internal-format, gfc-internal-format msgid "" "Alternate return dummy argument cannot appear in a SUBROUTINE with the " "BIND(C) attribute at %L" msgstr "" -#: fortran/decl.cc:8182 fortran/decl.cc:8189 +#: fortran/decl.cc:8197 fortran/decl.cc:8204 #, gcc-internal-format, gfc-internal-format msgid "Invalid C identifier in NAME= specifier at %C" msgstr "" -#: fortran/decl.cc:8229 +#: fortran/decl.cc:8244 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in NAME= specifier for binding label at %C" msgstr "" -#: fortran/decl.cc:8245 +#: fortran/decl.cc:8260 #, gcc-internal-format, gfc-internal-format msgid "NAME= specifier at %C should be a constant expression" msgstr "" -#: fortran/decl.cc:8253 +#: fortran/decl.cc:8268 #, gcc-internal-format, gfc-internal-format msgid "NAME= specifier at %C should be a scalar of default character kind" msgstr "" -#: fortran/decl.cc:8272 +#: fortran/decl.cc:8287 #, gcc-internal-format, gfc-internal-format msgid "Missing closing paren for binding label at %C" msgstr "" -#: fortran/decl.cc:8278 +#: fortran/decl.cc:8293 #, gcc-internal-format, gfc-internal-format msgid "No binding name is allowed in BIND(C) at %C" msgstr "" -#: fortran/decl.cc:8284 +#: fortran/decl.cc:8299 #, gcc-internal-format, gfc-internal-format msgid "For dummy procedure %s, no binding name is allowed in BIND(C) at %C" msgstr "" -#: fortran/decl.cc:8313 +#: fortran/decl.cc:8328 #, gcc-internal-format, gfc-internal-format msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C" msgstr "" -#: fortran/decl.cc:8560 +#: fortran/decl.cc:8575 #, gcc-internal-format, gfc-internal-format msgid "Unexpected END statement at %C" msgstr "" -#: fortran/decl.cc:8569 +#: fortran/decl.cc:8584 #, gcc-internal-format, gfc-internal-format msgid "END statement instead of %s statement at %L" msgstr "" #. We would have required END [something]. -#: fortran/decl.cc:8578 +#: fortran/decl.cc:8593 #, gcc-internal-format, gfc-internal-format msgid "%s statement expected at %L" msgstr "" -#: fortran/decl.cc:8589 +#: fortran/decl.cc:8604 #, gcc-internal-format, gfc-internal-format msgid "Expecting %s statement at %L" msgstr "" -#: fortran/decl.cc:8609 +#: fortran/decl.cc:8624 #, gcc-internal-format msgid "Expected block name of %qs in %s statement at %L" msgstr "" -#: fortran/decl.cc:8626 +#: fortran/decl.cc:8641 #, gcc-internal-format, gfc-internal-format msgid "Expected terminating name at %C" msgstr "" -#: fortran/decl.cc:8640 fortran/decl.cc:8648 +#: fortran/decl.cc:8655 fortran/decl.cc:8663 #, gcc-internal-format msgid "Expected label %qs for %s statement at %C" msgstr "" -#: fortran/decl.cc:8747 +#: fortran/decl.cc:8762 #, gcc-internal-format, gfc-internal-format msgid "Missing array specification at %L in DIMENSION statement" msgstr "" -#: fortran/decl.cc:8755 +#: fortran/decl.cc:8770 #, gcc-internal-format, gfc-internal-format msgid "Dimensions specified for %s at %L after its initialization" msgstr "" -#: fortran/decl.cc:8763 +#: fortran/decl.cc:8778 #, gcc-internal-format, gfc-internal-format msgid "Missing array specification at %L in CODIMENSION statement" msgstr "" -#: fortran/decl.cc:8772 +#: fortran/decl.cc:8787 #, gcc-internal-format, gfc-internal-format msgid "Array specification must be deferred at %L" msgstr "" -#: fortran/decl.cc:8877 +#: fortran/decl.cc:8892 #, gcc-internal-format, gfc-internal-format msgid "Unexpected character in variable list at %C" msgstr "" -#: fortran/decl.cc:8914 +#: fortran/decl.cc:8929 #, gcc-internal-format msgid "Expected %<(%> at %C" msgstr "" -#: fortran/decl.cc:8928 fortran/decl.cc:8968 +#: fortran/decl.cc:8943 fortran/decl.cc:8983 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C" msgstr "" -#: fortran/decl.cc:8944 +#: fortran/decl.cc:8959 #, gcc-internal-format, gfc-internal-format msgid "Cray pointer at %C must be an integer" msgstr "" -#: fortran/decl.cc:8948 +#: fortran/decl.cc:8963 #, gcc-internal-format, gfc-internal-format msgid "" "Cray pointer at %C has %d bytes of precision; memory addresses require %d " "bytes" msgstr "" -#: fortran/decl.cc:8954 +#: fortran/decl.cc:8969 #, gcc-internal-format, gfc-internal-format msgid "Expected \",\" at %C" msgstr "" -#: fortran/decl.cc:8993 +#: fortran/decl.cc:9008 #, gcc-internal-format msgid "Cannot set Cray pointee array spec." msgstr "" -#: fortran/decl.cc:9017 +#: fortran/decl.cc:9032 #, gcc-internal-format, gfc-internal-format msgid "Expected \")\" at %C" msgstr "" -#: fortran/decl.cc:9029 +#: fortran/decl.cc:9044 #, gcc-internal-format msgid "Expected %<,%> or end of statement at %C" msgstr "" -#: fortran/decl.cc:9055 +#: fortran/decl.cc:9070 #, gcc-internal-format, gfc-internal-format msgid "INTENT is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.cc:9087 +#: fortran/decl.cc:9102 #, gcc-internal-format, gfc-internal-format msgid "OPTIONAL is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.cc:9106 +#: fortran/decl.cc:9121 #, gcc-internal-format msgid "Cray pointer declaration at %C requires %<-fcray-pointer%> flag" msgstr "" -#: fortran/decl.cc:9145 +#: fortran/decl.cc:9160 #, gcc-internal-format, gfc-internal-format msgid "CONTIGUOUS statement at %C" msgstr "" -#: fortran/decl.cc:9243 +#: fortran/decl.cc:9258 #, gcc-internal-format, gfc-internal-format msgid "" "Access specification of the %s operator at %C has already been specified" msgstr "" -#: fortran/decl.cc:9259 +#: fortran/decl.cc:9274 #, gcc-internal-format, gfc-internal-format msgid "" "Access specification of the .%s. operator at %C has already been specified" msgstr "" -#: fortran/decl.cc:9307 +#: fortran/decl.cc:9322 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED statement at %C" msgstr "" -#: fortran/decl.cc:9341 +#: fortran/decl.cc:9356 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in PROTECTED statement at %C" msgstr "" -#: fortran/decl.cc:9368 fortran/decl.cc:9393 +#: fortran/decl.cc:9383 fortran/decl.cc:9408 #, gcc-internal-format, gfc-internal-format msgid "" "PRIVATE statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.cc:9414 fortran/decl.cc:9434 +#: fortran/decl.cc:9429 fortran/decl.cc:9449 #, gcc-internal-format, gfc-internal-format msgid "" "PUBLIC statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.cc:9456 +#: fortran/decl.cc:9471 #, gcc-internal-format, gfc-internal-format msgid "Expected variable name at %C in PARAMETER statement" msgstr "" -#: fortran/decl.cc:9463 +#: fortran/decl.cc:9478 #, gcc-internal-format, gfc-internal-format msgid "Expected = sign in PARAMETER statement at %C" msgstr "" -#: fortran/decl.cc:9469 +#: fortran/decl.cc:9484 #, gcc-internal-format, gfc-internal-format msgid "Expected expression at %C in PARAMETER statement" msgstr "" -#: fortran/decl.cc:9489 +#: fortran/decl.cc:9504 #, gcc-internal-format, gfc-internal-format msgid "Initializing already initialized variable at %C" msgstr "" #. With legacy PARAMETER statements, don't expect a terminating ')'. -#: fortran/decl.cc:9514 +#: fortran/decl.cc:9529 #, gcc-internal-format, gfc-internal-format msgid "PARAMETER without '()' at %C" msgstr "" -#: fortran/decl.cc:9530 +#: fortran/decl.cc:9545 #, gcc-internal-format, gfc-internal-format msgid "Unexpected characters in PARAMETER statement at %C" msgstr "" -#: fortran/decl.cc:9549 fortran/decl.cc:9605 +#: fortran/decl.cc:9564 fortran/decl.cc:9620 #, gcc-internal-format msgid "%s at %C is a DEC extension, enable with %<-fdec-static%>" msgstr "" -#: fortran/decl.cc:9584 +#: fortran/decl.cc:9599 #, gcc-internal-format, gfc-internal-format msgid "Expected entity-list in AUTOMATIC statement at %C" msgstr "" -#: fortran/decl.cc:9591 +#: fortran/decl.cc:9606 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in AUTOMATIC statement at %C" msgstr "" -#: fortran/decl.cc:9640 +#: fortran/decl.cc:9655 #, gcc-internal-format, gfc-internal-format msgid "Expected entity-list in STATIC statement at %C" msgstr "" -#: fortran/decl.cc:9647 +#: fortran/decl.cc:9662 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in STATIC statement at %C" msgstr "" -#: fortran/decl.cc:9666 +#: fortran/decl.cc:9681 #, gcc-internal-format, gfc-internal-format msgid "Blanket SAVE statement at %C follows previous SAVE statement" msgstr "" -#: fortran/decl.cc:9677 +#: fortran/decl.cc:9692 #, gcc-internal-format, gfc-internal-format msgid "SAVE statement at %C follows blanket SAVE statement" msgstr "" -#: fortran/decl.cc:9725 +#: fortran/decl.cc:9740 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in SAVE statement at %C" msgstr "" -#: fortran/decl.cc:9742 +#: fortran/decl.cc:9757 #, gcc-internal-format, gfc-internal-format msgid "VALUE is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/decl.cc:9746 +#: fortran/decl.cc:9761 #, gcc-internal-format, gfc-internal-format msgid "VALUE statement at %C" msgstr "" -#: fortran/decl.cc:9784 +#: fortran/decl.cc:9799 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in VALUE statement at %C" msgstr "" -#: fortran/decl.cc:9796 +#: fortran/decl.cc:9811 #, gcc-internal-format, gfc-internal-format msgid "VOLATILE statement at %C" msgstr "" -#: fortran/decl.cc:9823 +#: fortran/decl.cc:9838 #, gcc-internal-format msgid "" "Specifying VOLATILE for coarray variable %qs at %C, which is use-/host-" "associated" msgstr "" -#: fortran/decl.cc:9848 +#: fortran/decl.cc:9863 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in VOLATILE statement at %C" msgstr "" -#: fortran/decl.cc:9860 +#: fortran/decl.cc:9875 #, gcc-internal-format, gfc-internal-format msgid "ASYNCHRONOUS statement at %C" msgstr "" -#: fortran/decl.cc:9904 +#: fortran/decl.cc:9919 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in ASYNCHRONOUS statement at %C" msgstr "" -#: fortran/decl.cc:9929 +#: fortran/decl.cc:9944 #, gcc-internal-format, gfc-internal-format msgid "MODULE PROCEDURE declaration at %C" msgstr "" -#: fortran/decl.cc:10040 +#: fortran/decl.cc:10055 #, gcc-internal-format, gfc-internal-format msgid "MODULE PROCEDURE at %C must be in a generic module interface" msgstr "" -#: fortran/decl.cc:10098 +#: fortran/decl.cc:10113 #, gcc-internal-format, gfc-internal-format msgid "Intrinsic procedure at %L cannot be a MODULE PROCEDURE" msgstr "" -#: fortran/decl.cc:10147 +#: fortran/decl.cc:10162 #, gcc-internal-format, gfc-internal-format msgid "Ambiguous symbol in TYPE definition at %C" msgstr "" -#: fortran/decl.cc:10156 +#: fortran/decl.cc:10171 #, gcc-internal-format msgid "Symbol %qs at %C has not been previously defined" msgstr "" -#: fortran/decl.cc:10162 +#: fortran/decl.cc:10177 #, gcc-internal-format msgid "%qs in EXTENDS expression at %C is not a derived type" msgstr "" -#: fortran/decl.cc:10169 +#: fortran/decl.cc:10184 #, gcc-internal-format msgid "%qs cannot be extended at %C because it is BIND(C)" msgstr "" -#: fortran/decl.cc:10176 +#: fortran/decl.cc:10191 #, gcc-internal-format msgid "%qs cannot be extended at %C because it is a SEQUENCE type" msgstr "" -#: fortran/decl.cc:10199 +#: fortran/decl.cc:10214 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C can only be PRIVATE in the specification part of a module" msgstr "" -#: fortran/decl.cc:10211 +#: fortran/decl.cc:10226 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type at %C can only be PUBLIC in the specification part of a module" msgstr "" -#: fortran/decl.cc:10232 +#: fortran/decl.cc:10247 #, gcc-internal-format, gfc-internal-format msgid "ABSTRACT type at %C" msgstr "" -#: fortran/decl.cc:10278 +#: fortran/decl.cc:10293 #, gcc-internal-format, gfc-internal-format msgid "Failed to create structure type '%s' at %C" msgstr "" -#: fortran/decl.cc:10284 +#: fortran/decl.cc:10299 #, gcc-internal-format msgid "Type definition of %qs at %C was already defined at %L" msgstr "" -#: fortran/decl.cc:10331 +#: fortran/decl.cc:10346 #, gcc-internal-format, gfc-internal-format msgid "Junk after MAP statement at %C" msgstr "" -#: fortran/decl.cc:10364 +#: fortran/decl.cc:10379 #, gcc-internal-format, gfc-internal-format msgid "Junk after UNION statement at %C" msgstr "" -#: fortran/decl.cc:10399 +#: fortran/decl.cc:10414 #, gcc-internal-format msgid "%s at %C is a DEC extension, enable with %<-fdec-structure%>" msgstr "" -#: fortran/decl.cc:10413 +#: fortran/decl.cc:10428 #, gcc-internal-format, gfc-internal-format msgid "Structure name expected in non-nested structure declaration at %C" msgstr "" -#: fortran/decl.cc:10431 +#: fortran/decl.cc:10446 #, gcc-internal-format, gfc-internal-format msgid "Junk after non-nested STRUCTURE statement at %C" msgstr "" -#: fortran/decl.cc:10438 +#: fortran/decl.cc:10453 #, gcc-internal-format msgid "Structure name %qs at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/decl.cc:10601 +#: fortran/decl.cc:10616 #, gcc-internal-format, gfc-internal-format msgid "Expected :: in TYPE definition at %C" msgstr "" -#: fortran/decl.cc:10614 +#: fortran/decl.cc:10629 #, gcc-internal-format, gfc-internal-format msgid "Mangled derived type definition at %C" msgstr "" -#: fortran/decl.cc:10643 +#: fortran/decl.cc:10658 #, gcc-internal-format msgid "Type name %qs at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/decl.cc:10654 +#: fortran/decl.cc:10669 #, gcc-internal-format msgid "Derived type name %qs at %C already has a basic type of %s" msgstr "" -#: fortran/decl.cc:10657 +#: fortran/decl.cc:10672 #, gcc-internal-format msgid "Derived type name %qs at %C already has a basic type" msgstr "" -#: fortran/decl.cc:10672 +#: fortran/decl.cc:10687 #, gcc-internal-format msgid "Dummy argument %qs at %L cannot be a derived type at %C" msgstr "" -#: fortran/decl.cc:10681 +#: fortran/decl.cc:10696 #, gcc-internal-format msgid "Derived type definition of %qs at %C has already been defined" msgstr "" -#: fortran/decl.cc:10744 +#: fortran/decl.cc:10759 #, gcc-internal-format, gfc-internal-format msgid "Garbage after PARAMETERIZED TYPE declaration at %C" msgstr "" -#: fortran/decl.cc:10827 +#: fortran/decl.cc:10842 #, gcc-internal-format, gfc-internal-format msgid "Cray Pointee at %C cannot be assumed shape array" msgstr "" -#: fortran/decl.cc:10847 +#: fortran/decl.cc:10862 #, gcc-internal-format, gfc-internal-format msgid "ENUM and ENUMERATOR at %C" msgstr "" -#: fortran/decl.cc:10879 +#: fortran/decl.cc:10894 #, gcc-internal-format, gfc-internal-format msgid "Enumerator exceeds the C integer type at %C" msgstr "" -#: fortran/decl.cc:10958 +#: fortran/decl.cc:10973 #, gcc-internal-format, gfc-internal-format msgid "ENUMERATOR %L not initialized with integer expression" msgstr "" -#: fortran/decl.cc:11006 +#: fortran/decl.cc:11021 #, gcc-internal-format, gfc-internal-format msgid "ENUM definition statement expected before %C" msgstr "" -#: fortran/decl.cc:11042 +#: fortran/decl.cc:11057 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in ENUMERATOR definition at %C" msgstr "" -#: fortran/decl.cc:11089 fortran/decl.cc:11104 +#: fortran/decl.cc:11104 fortran/decl.cc:11119 #, gcc-internal-format, gfc-internal-format msgid "Duplicate access-specifier at %C" msgstr "" -#: fortran/decl.cc:11124 +#: fortran/decl.cc:11139 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal NOPASS at %C" msgstr "" -#: fortran/decl.cc:11144 +#: fortran/decl.cc:11159 #, gcc-internal-format, gfc-internal-format msgid "Binding attributes already specify passing, illegal PASS at %C" msgstr "" -#: fortran/decl.cc:11171 +#: fortran/decl.cc:11186 #, gcc-internal-format, gfc-internal-format msgid "Duplicate POINTER attribute at %C" msgstr "" -#: fortran/decl.cc:11189 +#: fortran/decl.cc:11204 #, gcc-internal-format, gfc-internal-format msgid "Duplicate NON_OVERRIDABLE at %C" msgstr "" -#: fortran/decl.cc:11205 +#: fortran/decl.cc:11220 #, gcc-internal-format, gfc-internal-format msgid "Duplicate DEFERRED at %C" msgstr "" -#: fortran/decl.cc:11218 +#: fortran/decl.cc:11233 #, gcc-internal-format, gfc-internal-format msgid "Expected access-specifier at %C" msgstr "" -#: fortran/decl.cc:11220 +#: fortran/decl.cc:11235 #, gcc-internal-format, gfc-internal-format msgid "Expected binding attribute at %C" msgstr "" -#: fortran/decl.cc:11228 +#: fortran/decl.cc:11243 #, gcc-internal-format, gfc-internal-format msgid "NON_OVERRIDABLE and DEFERRED cannot both appear at %C" msgstr "" -#: fortran/decl.cc:11241 +#: fortran/decl.cc:11256 #, gcc-internal-format, gfc-internal-format msgid "POINTER attribute is required for procedure pointer component at %C" msgstr "" -#: fortran/decl.cc:11283 +#: fortran/decl.cc:11298 #, gcc-internal-format msgid "Interface-name expected after %<(%> at %C" msgstr "" -#: fortran/decl.cc:11289 +#: fortran/decl.cc:11304 #, gcc-internal-format msgid "%<)%> expected at %C" msgstr "" -#: fortran/decl.cc:11309 +#: fortran/decl.cc:11324 #, gcc-internal-format, gfc-internal-format msgid "Interface must be specified for DEFERRED binding at %C" msgstr "" -#: fortran/decl.cc:11314 +#: fortran/decl.cc:11329 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE(interface) at %C should be declared DEFERRED" msgstr "" -#: fortran/decl.cc:11337 +#: fortran/decl.cc:11352 #, gcc-internal-format, gfc-internal-format msgid "Expected binding name at %C" msgstr "" -#: fortran/decl.cc:11341 +#: fortran/decl.cc:11356 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE list at %C" msgstr "" -#: fortran/decl.cc:11353 +#: fortran/decl.cc:11368 #, gcc-internal-format msgid "%<=> target%> is invalid for DEFERRED binding at %C" msgstr "" -#: fortran/decl.cc:11359 +#: fortran/decl.cc:11374 #, gcc-internal-format msgid "%<::%> needed in PROCEDURE binding with explicit target at %C" msgstr "" -#: fortran/decl.cc:11369 +#: fortran/decl.cc:11384 #, gcc-internal-format msgid "Expected binding target after %<=>%> at %C" msgstr "" -#: fortran/decl.cc:11386 +#: fortran/decl.cc:11401 #, gcc-internal-format msgid "Type %qs containing DEFERRED binding at %C is not ABSTRACT" msgstr "" -#: fortran/decl.cc:11397 +#: fortran/decl.cc:11412 #, gcc-internal-format msgid "" "There is already a procedure with binding name %qs for the derived type %qs " "at %C" msgstr "" -#: fortran/decl.cc:11448 +#: fortran/decl.cc:11463 #, gcc-internal-format, gfc-internal-format msgid "GENERIC at %C must be inside a derived-type CONTAINS" msgstr "" -#: fortran/decl.cc:11468 +#: fortran/decl.cc:11483 #, gcc-internal-format msgid "Expected %<::%> at %C" msgstr "" -#: fortran/decl.cc:11480 +#: fortran/decl.cc:11495 #, gcc-internal-format, gfc-internal-format msgid "Expected generic name or operator descriptor at %C" msgstr "" -#: fortran/decl.cc:11501 +#: fortran/decl.cc:11516 #, gcc-internal-format, gfc-internal-format msgid "Malformed GENERIC statement at %C" msgstr "" -#: fortran/decl.cc:11512 +#: fortran/decl.cc:11527 #, gcc-internal-format msgid "Expected %<=>%> at %C" msgstr "" -#: fortran/decl.cc:11548 +#: fortran/decl.cc:11563 #, gcc-internal-format msgid "" "There's already a non-generic procedure with binding name %qs for the " "derived type %qs at %C" msgstr "" -#: fortran/decl.cc:11556 +#: fortran/decl.cc:11571 #, gcc-internal-format msgid "Binding at %C must have the same access as already defined binding %qs" msgstr "" -#: fortran/decl.cc:11604 +#: fortran/decl.cc:11619 #, gcc-internal-format, gfc-internal-format msgid "Expected specific binding name at %C" msgstr "" -#: fortran/decl.cc:11614 +#: fortran/decl.cc:11629 #, gcc-internal-format msgid "%qs already defined as specific binding for the generic %qs at %C" msgstr "" -#: fortran/decl.cc:11632 +#: fortran/decl.cc:11647 #, gcc-internal-format, gfc-internal-format msgid "Junk after GENERIC binding at %C" msgstr "" -#: fortran/decl.cc:11667 +#: fortran/decl.cc:11682 #, gcc-internal-format, gfc-internal-format msgid "FINAL declaration at %C must be inside a derived type CONTAINS section" msgstr "" -#: fortran/decl.cc:11679 +#: fortran/decl.cc:11694 #, gcc-internal-format, gfc-internal-format msgid "" "Derived type declaration with FINAL at %C must be in the specification part " "of a MODULE" msgstr "" -#: fortran/decl.cc:11701 +#: fortran/decl.cc:11716 #, gcc-internal-format, gfc-internal-format msgid "Empty FINAL at %C" msgstr "" -#: fortran/decl.cc:11708 +#: fortran/decl.cc:11723 #, gcc-internal-format, gfc-internal-format msgid "Expected module procedure name at %C" msgstr "" -#: fortran/decl.cc:11718 +#: fortran/decl.cc:11733 #, gcc-internal-format msgid "Expected %<,%> at %C" msgstr "" -#: fortran/decl.cc:11724 +#: fortran/decl.cc:11739 #, gcc-internal-format msgid "Unknown procedure name %qs at %C" msgstr "" -#: fortran/decl.cc:11737 +#: fortran/decl.cc:11752 #, gcc-internal-format msgid "%qs at %C is already defined as FINAL procedure" msgstr "" -#: fortran/decl.cc:11811 +#: fortran/decl.cc:11826 #, gcc-internal-format, gfc-internal-format msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C" msgstr "" -#: fortran/decl.cc:11857 +#: fortran/decl.cc:11872 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ ATTRIBUTES statement at %C" msgstr "" -#: fortran/decl.cc:11878 +#: fortran/decl.cc:11893 #, gcc-internal-format msgid "" "%<GCC unroll%> directive requires a non-negative integral constant less than " "or equal to %u at %C" msgstr "" -#: fortran/decl.cc:11892 +#: fortran/decl.cc:11907 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ UNROLL directive at %C" msgstr "" -#: fortran/decl.cc:11956 +#: fortran/decl.cc:11971 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ IVDEP directive at %C" msgstr "" -#: fortran/decl.cc:11973 +#: fortran/decl.cc:11988 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ VECTOR directive at %C" msgstr "" -#: fortran/decl.cc:11990 +#: fortran/decl.cc:12005 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !GCC$ NOVECTOR directive at %C" msgstr "" @@ -74449,12 +74738,12 @@ msgstr "" msgid "show_expr(): Don't know how to show expr" msgstr "" -#: fortran/dump-parse-tree.cc:3549 +#: fortran/dump-parse-tree.cc:3567 #, gcc-internal-format msgid "show_code_node(): Bad statement code" msgstr "" -#: fortran/dump-parse-tree.cc:3885 fortran/dump-parse-tree.cc:3990 +#: fortran/dump-parse-tree.cc:3903 fortran/dump-parse-tree.cc:4008 #, gcc-internal-format msgid "Cannot convert %qs to interoperable type at %L" msgstr "" @@ -74534,191 +74823,191 @@ msgstr "" msgid "Error in array constructor referenced at %L" msgstr "" -#: fortran/expr.cc:1856 fortran/primary.cc:2292 fortran/primary.cc:2436 +#: fortran/expr.cc:1861 fortran/primary.cc:2389 fortran/primary.cc:2566 #, gcc-internal-format, gfc-internal-format msgid "LEN part_ref at %C" msgstr "" -#: fortran/expr.cc:1881 fortran/primary.cc:2287 fortran/primary.cc:2451 +#: fortran/expr.cc:1886 fortran/primary.cc:2384 fortran/primary.cc:2581 #, gcc-internal-format, gfc-internal-format msgid "KIND part_ref at %C" msgstr "" -#: fortran/expr.cc:1892 +#: fortran/expr.cc:1897 #, gcc-internal-format, gfc-internal-format msgid "RE part_ref at %C" msgstr "" -#: fortran/expr.cc:1904 +#: fortran/expr.cc:1909 #, gcc-internal-format, gfc-internal-format msgid "IM part_ref at %C" msgstr "" -#: fortran/expr.cc:2554 +#: fortran/expr.cc:2559 #, gcc-internal-format, gfc-internal-format msgid "elemental function arguments at %C are not compliant" msgstr "" -#: fortran/expr.cc:2598 +#: fortran/expr.cc:2603 #, gcc-internal-format, gfc-internal-format msgid "Numeric or CHARACTER operands are required in expression at %L" msgstr "" -#: fortran/expr.cc:2623 +#: fortran/expr.cc:2628 #, gcc-internal-format, gfc-internal-format msgid "" "Concatenation operator in expression at %L must have two CHARACTER operands" msgstr "" -#: fortran/expr.cc:2630 +#: fortran/expr.cc:2635 #, gcc-internal-format, gfc-internal-format msgid "Concat operator at %L must concatenate strings of the same kind" msgstr "" -#: fortran/expr.cc:2640 +#: fortran/expr.cc:2645 #, gcc-internal-format, gfc-internal-format msgid ".NOT. operator in expression at %L must have a LOGICAL operand" msgstr "" -#: fortran/expr.cc:2656 +#: fortran/expr.cc:2661 #, gcc-internal-format, gfc-internal-format msgid "LOGICAL operands are required in expression at %L" msgstr "" -#: fortran/expr.cc:2667 +#: fortran/expr.cc:2672 #, gcc-internal-format, gfc-internal-format msgid "Only intrinsic operators can be used in expression at %L" msgstr "" -#: fortran/expr.cc:2675 +#: fortran/expr.cc:2680 #, gcc-internal-format, gfc-internal-format msgid "Numeric operands are required in expression at %L" msgstr "" -#: fortran/expr.cc:2698 +#: fortran/expr.cc:2703 #, gcc-internal-format msgid "" "Invalid initialization expression for ALLOCATABLE component %qs in structure " "constructor at %L" msgstr "" -#: fortran/expr.cc:2835 +#: fortran/expr.cc:2840 #, gcc-internal-format msgid "" "Assumed or deferred character length variable %qs in constant expression at " "%L" msgstr "" -#: fortran/expr.cc:2910 +#: fortran/expr.cc:2915 #, gcc-internal-format msgid "" "transformational intrinsic %qs at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.cc:2941 +#: fortran/expr.cc:2946 #, gcc-internal-format, gfc-internal-format msgid "Evaluation of nonstandard initialization expression at %L" msgstr "" -#: fortran/expr.cc:3018 fortran/resolve.cc:2852 +#: fortran/expr.cc:3023 fortran/resolve.cc:2854 #, gcc-internal-format msgid "" "Function %qs in initialization expression at %L must be an intrinsic function" msgstr "" -#: fortran/expr.cc:3030 +#: fortran/expr.cc:3035 #, gcc-internal-format msgid "" "Intrinsic function %qs at %L is not permitted in an initialization expression" msgstr "" -#: fortran/expr.cc:3069 +#: fortran/expr.cc:3074 #, gcc-internal-format msgid "PARAMETER %qs is used at %L before its definition is complete" msgstr "" -#: fortran/expr.cc:3089 +#: fortran/expr.cc:3094 #, gcc-internal-format msgid "" "Assumed size array %qs at %L is not permitted in an initialization expression" msgstr "" -#: fortran/expr.cc:3095 +#: fortran/expr.cc:3100 #, gcc-internal-format msgid "" "Assumed shape array %qs at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.cc:3104 +#: fortran/expr.cc:3109 #, gcc-internal-format msgid "" "Assumed-shape array %qs at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.cc:3108 +#: fortran/expr.cc:3113 #, gcc-internal-format msgid "" "Deferred array %qs at %L is not permitted in an initialization expression" msgstr "" -#: fortran/expr.cc:3114 +#: fortran/expr.cc:3119 #, gcc-internal-format msgid "" "Array %qs at %L is a variable, which does not reduce to a constant expression" msgstr "" -#: fortran/expr.cc:3120 +#: fortran/expr.cc:3125 #, gcc-internal-format msgid "" "Assumed-rank array %qs at %L is not permitted in an initialization expression" msgstr "" -#: fortran/expr.cc:3130 +#: fortran/expr.cc:3135 #, gcc-internal-format msgid "" "Parameter %qs at %L has not been declared or is a variable, which does not " "reduce to a constant expression" msgstr "" -#: fortran/expr.cc:3184 +#: fortran/expr.cc:3189 #, gcc-internal-format msgid "check_init_expr(): Unknown expression type" msgstr "" -#: fortran/expr.cc:3319 +#: fortran/expr.cc:3324 #, gcc-internal-format msgid "Specification function %qs at %L cannot be a statement function" msgstr "" -#: fortran/expr.cc:3326 +#: fortran/expr.cc:3331 #, gcc-internal-format msgid "Specification function %qs at %L cannot be an internal function" msgstr "" -#: fortran/expr.cc:3333 +#: fortran/expr.cc:3338 #, gcc-internal-format msgid "Specification function %qs at %L must be PURE" msgstr "" -#: fortran/expr.cc:3341 +#: fortran/expr.cc:3346 #, gcc-internal-format msgid "Specification function %qs at %L cannot be RECURSIVE" msgstr "" -#: fortran/expr.cc:3488 +#: fortran/expr.cc:3493 #, gcc-internal-format msgid "Dummy argument %qs not allowed in expression at %L" msgstr "" -#: fortran/expr.cc:3496 +#: fortran/expr.cc:3501 #, gcc-internal-format msgid "Dummy argument %qs at %L cannot be OPTIONAL" msgstr "" -#: fortran/expr.cc:3503 +#: fortran/expr.cc:3508 #, gcc-internal-format msgid "Dummy argument %qs at %L cannot be INTENT(OUT)" msgstr "" @@ -74921,7 +75210,7 @@ msgstr "" msgid "Explicit interface required for component %qs at %L: %s" msgstr "" -#: fortran/expr.cc:4232 fortran/expr.cc:4247 fortran/resolve.cc:2732 +#: fortran/expr.cc:4232 fortran/expr.cc:4247 fortran/resolve.cc:2734 #, gcc-internal-format msgid "Explicit interface required for %qs at %L: %s" msgstr "" @@ -75054,7 +75343,7 @@ msgstr "" msgid "Pointer at %L in pointer assignment might outlive the pointer target" msgstr "" -#: fortran/expr.cc:4638 fortran/resolve.cc:1571 +#: fortran/expr.cc:4638 fortran/resolve.cc:1565 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must not be ALLOCATABLE" msgstr "" @@ -75064,7 +75353,7 @@ msgstr "" msgid "Pointer initialization target at %L must have the TARGET attribute" msgstr "" -#: fortran/expr.cc:4659 fortran/resolve.cc:1577 +#: fortran/expr.cc:4659 fortran/resolve.cc:1571 #, gcc-internal-format, gfc-internal-format msgid "Pointer initialization target at %L must have the SAVE attribute" msgstr "" @@ -75094,114 +75383,114 @@ msgid "" "%<c_ptr%> or %<c_funptr%>" msgstr "" -#: fortran/expr.cc:6266 +#: fortran/expr.cc:6267 #, gcc-internal-format, gfc-internal-format msgid "" "Fortran 2008: Pointer functions in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6274 +#: fortran/expr.cc:6275 #, gcc-internal-format, gfc-internal-format msgid "Non-variable expression in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6282 +#: fortran/expr.cc:6283 #, gcc-internal-format msgid "Named constant %qs in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6293 +#: fortran/expr.cc:6294 #, gcc-internal-format msgid "%qs in variable definition context (%s) at %L is not a variable" msgstr "" -#: fortran/expr.cc:6304 +#: fortran/expr.cc:6305 #, gcc-internal-format, gfc-internal-format msgid "Non-POINTER in pointer association context (%s) at %L" msgstr "" -#: fortran/expr.cc:6313 +#: fortran/expr.cc:6314 #, gcc-internal-format, gfc-internal-format msgid "Type inaccessible in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6326 +#: fortran/expr.cc:6327 #, gcc-internal-format, gfc-internal-format msgid "LOCK_TYPE in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6339 +#: fortran/expr.cc:6340 #, gcc-internal-format, gfc-internal-format msgid "LOCK_EVENT in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6370 +#: fortran/expr.cc:6371 #, gcc-internal-format msgid "%qs parameter inquiry for %qs in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6387 +#: fortran/expr.cc:6388 #, gcc-internal-format msgid "" "Dummy argument %qs with INTENT(IN) in pointer association context (%s) at %L" msgstr "" -#: fortran/expr.cc:6397 +#: fortran/expr.cc:6398 #, gcc-internal-format msgid "" "Dummy argument %qs with INTENT(IN) in variable definition context (%s) at %L" msgstr "" -#: fortran/expr.cc:6410 +#: fortran/expr.cc:6411 #, gcc-internal-format msgid "" "Variable %qs is PROTECTED and cannot appear in a pointer association context " "(%s) at %L" msgstr "" -#: fortran/expr.cc:6418 +#: fortran/expr.cc:6419 #, gcc-internal-format msgid "" "Variable %qs is PROTECTED and cannot appear in a variable definition context " "(%s) at %L" msgstr "" -#: fortran/expr.cc:6433 +#: fortran/expr.cc:6434 #, gcc-internal-format msgid "" "Variable %qs cannot appear in a variable definition context (%s) at %L in " "PURE procedure" msgstr "" -#: fortran/expr.cc:6493 fortran/expr.cc:6514 +#: fortran/expr.cc:6494 fortran/expr.cc:6515 #, gcc-internal-format msgid "" "%qs at %L associated to vector-indexed target cannot be used in a variable " "definition context (%s)" msgstr "" -#: fortran/expr.cc:6498 +#: fortran/expr.cc:6499 #, gcc-internal-format msgid "" "%qs at %L associated to expression cannot be used in a variable definition " "context (%s)" msgstr "" -#: fortran/expr.cc:6507 +#: fortran/expr.cc:6508 #, gcc-internal-format msgid "" "%qs at %L associated to pointer function target being used in a variable " "definition context (%s)" msgstr "" -#: fortran/expr.cc:6526 +#: fortran/expr.cc:6527 #, gcc-internal-format msgid "" "Associate-name %qs cannot appear in a variable definition context (%s) at %L " "because its target at %L cannot, either" msgstr "" -#: fortran/expr.cc:6568 +#: fortran/expr.cc:6569 #, gcc-internal-format, gfc-internal-format msgid "" "Elements with the same value at %L and %L in vector subscript in a variable " @@ -75224,7 +75513,7 @@ msgid "Illegal id in copy_walk_reduction_arg" msgstr "" #: fortran/frontend-passes.cc:870 fortran/trans-array.cc:1514 -#: fortran/trans-array.cc:7156 fortran/trans-array.cc:8807 +#: fortran/trans-array.cc:7194 fortran/trans-array.cc:8856 #: fortran/trans-intrinsic.cc:8475 #, gcc-internal-format, gfc-internal-format msgid "Creating array temporary at %L" @@ -75321,7 +75610,7 @@ msgid "" "INTENT(INOUT) argument to function %qs" msgstr "" -#: fortran/frontend-passes.cc:3481 fortran/trans-expr.cc:1900 +#: fortran/frontend-passes.cc:3481 fortran/trans-expr.cc:1924 #, gcc-internal-format, gfc-internal-format msgid "Code for reallocating the allocatable array at %L will be added" msgstr "" @@ -75336,7 +75625,7 @@ msgstr "" msgid "Interchanging loops at %L" msgstr "" -#: fortran/frontend-passes.cc:5852 +#: fortran/frontend-passes.cc:5855 #, gcc-internal-format, gfc-internal-format msgid "%s between %L and %L" msgstr "" @@ -75460,12 +75749,12 @@ msgstr "" msgid "Second argument of defined assignment at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.cc:1035 fortran/resolve.cc:17916 +#: fortran/interface.cc:1035 fortran/resolve.cc:18209 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.cc:1042 fortran/resolve.cc:17934 +#: fortran/interface.cc:1042 fortran/resolve.cc:18227 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L must be INTENT(IN)" msgstr "" @@ -75495,157 +75784,158 @@ msgid "" "gfc_dep_compare_expr" msgstr "" -#: fortran/interface.cc:1932 +#: fortran/interface.cc:1940 #, gcc-internal-format msgid "Procedure %qs in %s at %L has no explicit interface; did you mean %qs?" msgstr "" -#: fortran/interface.cc:1937 +#: fortran/interface.cc:1945 #, gcc-internal-format msgid "Procedure %qs in %s at %L has no explicit interface" msgstr "" -#: fortran/interface.cc:1941 +#: fortran/interface.cc:1949 #, gcc-internal-format msgid "" "Procedure %qs in %s at %L is neither function nor subroutine; did you mean " "%qs?" msgstr "" -#: fortran/interface.cc:1945 +#: fortran/interface.cc:1953 #, gcc-internal-format msgid "Procedure %qs in %s at %L is neither function nor subroutine" msgstr "" -#: fortran/interface.cc:1957 +#: fortran/interface.cc:1965 #, gcc-internal-format, gfc-internal-format msgid "In %s at %L procedures must be either all SUBROUTINEs or all FUNCTIONs" msgstr "" -#: fortran/interface.cc:1961 +#: fortran/interface.cc:1969 #, gcc-internal-format, gfc-internal-format msgid "" "In %s at %L procedures must be all FUNCTIONs as the generic name is also the " "name of a derived type" msgstr "" -#: fortran/interface.cc:1969 +#: fortran/interface.cc:1977 #, gcc-internal-format msgid "Internal procedure %qs in %s at %L" msgstr "" -#: fortran/interface.cc:2026 fortran/interface.cc:2031 +#: fortran/interface.cc:2034 fortran/interface.cc:2039 #, gcc-internal-format msgid "Ambiguous interfaces in %s for %qs at %L and %qs at %L" msgstr "" -#: fortran/interface.cc:2036 +#: fortran/interface.cc:2044 #, gcc-internal-format msgid "Although not referenced, %qs has ambiguous interfaces at %L" msgstr "" -#: fortran/interface.cc:2074 +#: fortran/interface.cc:2082 #, gcc-internal-format msgid "%qs at %L is not a module procedure" msgstr "" -#: fortran/interface.cc:2279 +#: fortran/interface.cc:2287 #, gcc-internal-format msgid "" "The assumed-rank array at %L requires that the dummy argument %qs has " "assumed-rank" msgstr "" -#: fortran/interface.cc:2282 +#: fortran/interface.cc:2290 #, gcc-internal-format msgid "Rank mismatch in argument %qs at %L (scalar and rank-%d)" msgstr "" -#: fortran/interface.cc:2285 +#: fortran/interface.cc:2293 #, gcc-internal-format msgid "Rank mismatch in argument %qs at %L (rank-%d and scalar)" msgstr "" -#: fortran/interface.cc:2288 +#: fortran/interface.cc:2296 #, gcc-internal-format msgid "Rank mismatch in argument %qs at %L (rank-%d and rank-%d)" msgstr "" -#: fortran/interface.cc:2300 +#: fortran/interface.cc:2308 #, gcc-internal-format, gfc-internal-format msgid "" "Rank mismatch between actual argument at %L and actual argument at %L " "(scalar and rank-%d)" msgstr "" -#: fortran/interface.cc:2304 +#: fortran/interface.cc:2312 #, gcc-internal-format, gfc-internal-format msgid "" "Rank mismatch between actual argument at %L and actual argument at %L (rank-" "%d and scalar)" msgstr "" -#: fortran/interface.cc:2308 +#: fortran/interface.cc:2316 #, gcc-internal-format, gfc-internal-format msgid "" "Rank mismatch between actual argument at %L and actual argument at %L (rank-" "%d and rank-%d)" msgstr "" -#: fortran/interface.cc:2431 +#: fortran/interface.cc:2439 #, gcc-internal-format, gfc-internal-format msgid "Invalid procedure argument at %L" msgstr "" -#: fortran/interface.cc:2439 fortran/interface.cc:2466 +#: fortran/interface.cc:2448 fortran/interface.cc:2457 +#: fortran/interface.cc:2484 #, gcc-internal-format msgid "Interface mismatch in dummy procedure %qs at %L: %s" msgstr "" -#: fortran/interface.cc:2477 +#: fortran/interface.cc:2495 #, gcc-internal-format msgid "" "Actual argument to contiguous pointer dummy %qs at %L must be simply " "contiguous" msgstr "" -#: fortran/interface.cc:2500 +#: fortran/interface.cc:2518 #, gcc-internal-format, gfc-internal-format msgid "" "Type mismatch between actual argument at %L and actual argument at %L (%s/" "%s)." msgstr "" -#: fortran/interface.cc:2510 +#: fortran/interface.cc:2528 #, gcc-internal-format msgid "Type mismatch in argument %qs at %L; passed %s to %s" msgstr "" -#: fortran/interface.cc:2520 +#: fortran/interface.cc:2538 #, gcc-internal-format msgid "" "Assumed-type actual argument at %L requires that dummy argument %qs is of " "assumed type" msgstr "" -#: fortran/interface.cc:2534 +#: fortran/interface.cc:2552 #, gcc-internal-format msgid "" "Assumed-type actual argument at %L corresponding to assumed-rank dummy " "argument %qs must be assumed-shape or assumed-rank" msgstr "" -#: fortran/interface.cc:2551 +#: fortran/interface.cc:2569 #, gcc-internal-format msgid "Actual argument to %qs at %L must be polymorphic" msgstr "" -#: fortran/interface.cc:2561 +#: fortran/interface.cc:2579 #, gcc-internal-format msgid "Actual argument to %qs at %L must have the same declared type" msgstr "" -#: fortran/interface.cc:2576 +#: fortran/interface.cc:2594 #, gcc-internal-format msgid "" "Actual argument to %qs at %L must be unlimited polymorphic since the formal " @@ -75653,38 +75943,38 @@ msgid "" "12.5.2.5]" msgstr "" -#: fortran/interface.cc:2592 +#: fortran/interface.cc:2610 #, gcc-internal-format msgid "Actual argument to %qs at %L must be a coarray" msgstr "" -#: fortran/interface.cc:2614 +#: fortran/interface.cc:2632 #, gcc-internal-format msgid "Corank mismatch in argument %qs at %L (%d and %d)" msgstr "" -#: fortran/interface.cc:2632 +#: fortran/interface.cc:2650 #, gcc-internal-format msgid "" "Actual argument to %qs at %L must be simply contiguous or an element of such " "an array" msgstr "" -#: fortran/interface.cc:2647 +#: fortran/interface.cc:2665 #, gcc-internal-format msgid "" "Actual argument to non-INTENT(INOUT) dummy %qs at %L, which is LOCK_TYPE or " "has a LOCK_TYPE component" msgstr "" -#: fortran/interface.cc:2662 +#: fortran/interface.cc:2680 #, gcc-internal-format msgid "" "Actual argument to non-INTENT(INOUT) dummy %qs at %L, which is EVENT_TYPE or " "has a EVENT_TYPE component" msgstr "" -#: fortran/interface.cc:2681 +#: fortran/interface.cc:2699 #, gcc-internal-format msgid "" "Dummy argument %qs has to be a pointer, assumed-shape or assumed-rank array " @@ -75692,230 +75982,244 @@ msgid "" "contiguous and both are ASYNCHRONOUS or VOLATILE" msgstr "" -#: fortran/interface.cc:2694 +#: fortran/interface.cc:2712 #, gcc-internal-format msgid "" "Passing coarray at %L to allocatable, noncoarray, INTENT(OUT) dummy argument " "%qs" msgstr "" -#: fortran/interface.cc:2701 +#: fortran/interface.cc:2719 #, gcc-internal-format msgid "" "Passing coarray at %L to allocatable, noncoarray dummy argument %qs, which " "is invalid if the allocation status is modified" msgstr "" -#: fortran/interface.cc:2787 +#: fortran/interface.cc:2805 #, gcc-internal-format msgid "Polymorphic scalar passed to array dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:2798 +#: fortran/interface.cc:2816 #, gcc-internal-format, gfc-internal-format msgid "" "Element of assumed-shape or pointer array as actual argument at %L cannot " "correspond to actual argument at %L" msgstr "" -#: fortran/interface.cc:2803 +#: fortran/interface.cc:2821 #, gcc-internal-format msgid "" "Element of assumed-shape or pointer array passed to array dummy argument %qs " "at %L" msgstr "" -#: fortran/interface.cc:2816 +#: fortran/interface.cc:2834 #, gcc-internal-format msgid "" "Extension: Scalar non-default-kind, non-C_CHAR-kind CHARACTER actual " "argument with array dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:2824 +#: fortran/interface.cc:2842 #, gcc-internal-format msgid "" "Fortran 2003: Scalar CHARACTER actual argument with array dummy argument %qs " "at %L" msgstr "" -#: fortran/interface.cc:3212 +#: fortran/interface.cc:3230 #, gcc-internal-format msgid "Keyword argument %qs at %L is invalid in a statement function" msgstr "" -#: fortran/interface.cc:3235 +#: fortran/interface.cc:3253 #, gcc-internal-format msgid "Keyword argument %qs at %L is not in the procedure; did you mean %qs?" msgstr "" -#: fortran/interface.cc:3239 +#: fortran/interface.cc:3257 #, gcc-internal-format msgid "Keyword argument %qs at %L is not in the procedure" msgstr "" -#: fortran/interface.cc:3248 +#: fortran/interface.cc:3266 #, gcc-internal-format msgid "" "Keyword argument %qs at %L is already associated with another actual argument" msgstr "" -#: fortran/interface.cc:3258 +#: fortran/interface.cc:3276 #, gcc-internal-format, gfc-internal-format msgid "More actual than formal arguments in procedure call at %L" msgstr "" -#: fortran/interface.cc:3271 +#: fortran/interface.cc:3289 #, gcc-internal-format, gfc-internal-format msgid "Missing alternate return specifier in subroutine call at %L" msgstr "" -#: fortran/interface.cc:3285 +#: fortran/interface.cc:3303 #, gcc-internal-format, gfc-internal-format msgid "Unexpected alternate return specifier in subroutine call at %L" msgstr "" -#: fortran/interface.cc:3314 +#: fortran/interface.cc:3326 +#, gcc-internal-format +msgid "" +"Intrinsic %<NULL()%> without %<MOLD%> argument at %L passed to assumed-rank " +"dummy %qs" +msgstr "" + +#: fortran/interface.cc:3340 +#, gcc-internal-format +msgid "" +"Intrinsic %<NULL()%> without %<MOLD%> argument at %L passed to assumed-" +"length dummy %qs" +msgstr "" + +#: fortran/interface.cc:3362 #, gcc-internal-format msgid "Unexpected NULL() intrinsic at %L to dummy %qs" msgstr "" -#: fortran/interface.cc:3317 +#: fortran/interface.cc:3365 #, gcc-internal-format msgid "Fortran 2008: Null pointer at %L to non-pointer dummy %qs" msgstr "" -#: fortran/interface.cc:3343 +#: fortran/interface.cc:3391 #, gcc-internal-format, gfc-internal-format msgid "" "Actual argument at %L to assumed-type dummy has type parameters or is of " "derived type with type-bound or FINAL procedures" msgstr "" -#: fortran/interface.cc:3355 +#: fortran/interface.cc:3403 #, gcc-internal-format, gfc-internal-format msgid "" "Unlimited polymorphic actual argument at %L is not matched with either an " "unlimited polymorphic or assumed type dummy argument" msgstr "" -#: fortran/interface.cc:3379 +#: fortran/interface.cc:3427 #, gcc-internal-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and pointer or " "allocatable dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:3386 +#: fortran/interface.cc:3434 #, gcc-internal-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and assumed-" "shape dummy argument %qs at %L" msgstr "" -#: fortran/interface.cc:3401 +#: fortran/interface.cc:3449 #, gcc-internal-format msgid "" "Actual argument at %L to allocatable or pointer dummy argument %qs must have " "a deferred length type parameter if and only if the dummy has one" msgstr "" -#: fortran/interface.cc:3420 +#: fortran/interface.cc:3472 #, gcc-internal-format msgid "" "Character length of actual argument shorter than of dummy argument %qs (%lu/" "%lu) at %L" msgstr "" -#: fortran/interface.cc:3430 fortran/interface.cc:3435 +#: fortran/interface.cc:3482 fortran/interface.cc:3487 #, gcc-internal-format msgid "" "Actual argument contains too few elements for dummy argument %qs (%lu/%lu) " "at %L" msgstr "" -#: fortran/interface.cc:3456 +#: fortran/interface.cc:3508 #, gcc-internal-format msgid "Expected a procedure pointer for argument %qs at %L" msgstr "" -#: fortran/interface.cc:3473 +#: fortran/interface.cc:3525 #, gcc-internal-format msgid "Expected a procedure for argument %qs at %L" msgstr "" -#: fortran/interface.cc:3538 +#: fortran/interface.cc:3590 #, gcc-internal-format msgid "Actual argument for %qs cannot be an assumed-size array at %L" msgstr "" -#: fortran/interface.cc:3567 +#: fortran/interface.cc:3619 #, gcc-internal-format msgid "" "Actual argument to assumed-rank INTENT(OUT) dummy %qs at %L cannot be of " "unknown size" msgstr "" -#: fortran/interface.cc:3582 +#: fortran/interface.cc:3634 #, gcc-internal-format msgid "Actual argument for %qs at %L must be a pointer" msgstr "" -#: fortran/interface.cc:3591 +#: fortran/interface.cc:3643 #, gcc-internal-format msgid "Fortran 2008: Non-pointer actual argument at %L to pointer dummy %qs" msgstr "" -#: fortran/interface.cc:3600 +#: fortran/interface.cc:3652 #, gcc-internal-format msgid "" "Actual argument for %qs at %L must be a pointer or a valid target for the " "dummy pointer in a pointer assignment statement" msgstr "" -#: fortran/interface.cc:3614 +#: fortran/interface.cc:3666 #, gcc-internal-format msgid "Coindexed actual argument at %L to pointer dummy %qs" msgstr "" -#: fortran/interface.cc:3628 +#: fortran/interface.cc:3680 #, gcc-internal-format msgid "" "Coindexed actual argument at %L to allocatable dummy %qs requires INTENT(IN)" msgstr "" -#: fortran/interface.cc:3643 +#: fortran/interface.cc:3695 #, gcc-internal-format msgid "" "Coindexed ASYNCHRONOUS or VOLATILE actual argument at %L requires that dummy " "%qs has neither ASYNCHRONOUS nor VOLATILE" msgstr "" -#: fortran/interface.cc:3658 +#: fortran/interface.cc:3710 #, gcc-internal-format msgid "" "Coindexed actual argument at %L with allocatable ultimate component to dummy " "%qs requires either VALUE or INTENT(IN)" msgstr "" -#: fortran/interface.cc:3671 +#: fortran/interface.cc:3723 #, gcc-internal-format msgid "Actual CLASS array argument for %qs must be a full array at %L" msgstr "" -#: fortran/interface.cc:3682 +#: fortran/interface.cc:3734 #, gcc-internal-format msgid "Actual argument for %qs must be ALLOCATABLE at %L" msgstr "" -#: fortran/interface.cc:3693 +#: fortran/interface.cc:3745 #, gcc-internal-format msgid "" "Actual argument for %qs at %L is a function result and the dummy argument is " "ALLOCATABLE" msgstr "" -#: fortran/interface.cc:3731 +#: fortran/interface.cc:3783 #, gcc-internal-format msgid "" "Array-section actual argument with vector subscripts at %L is incompatible " @@ -75923,341 +76227,341 @@ msgid "" "dummy argument %qs" msgstr "" -#: fortran/interface.cc:3751 +#: fortran/interface.cc:3803 #, gcc-internal-format msgid "" "Assumed-shape actual argument at %L is incompatible with the non-assumed-" "shape dummy argument %qs due to VOLATILE attribute" msgstr "" -#: fortran/interface.cc:3769 +#: fortran/interface.cc:3821 #, gcc-internal-format msgid "" "Array-section actual argument at %L is incompatible with the non-assumed-" "shape dummy argument %qs due to VOLATILE attribute" msgstr "" -#: fortran/interface.cc:3790 +#: fortran/interface.cc:3842 #, gcc-internal-format msgid "" "Pointer-array actual argument at %L requires an assumed-shape or pointer-" "array dummy argument %qs due to VOLATILE attribute" msgstr "" -#: fortran/interface.cc:3818 +#: fortran/interface.cc:3870 #, gcc-internal-format, gfc-internal-format msgid "Missing alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.cc:3831 +#: fortran/interface.cc:3883 #, gcc-internal-format msgid "Missing actual argument for argument %qs at %L" msgstr "" -#: fortran/interface.cc:3959 +#: fortran/interface.cc:4011 #, gcc-internal-format msgid "compare_actual_expr(): Bad component code" msgstr "" -#: fortran/interface.cc:3988 +#: fortran/interface.cc:4040 #, gcc-internal-format msgid "check_some_aliasing(): List mismatch" msgstr "" -#: fortran/interface.cc:4014 +#: fortran/interface.cc:4066 #, gcc-internal-format msgid "check_some_aliasing(): corrupted data" msgstr "" -#: fortran/interface.cc:4024 +#: fortran/interface.cc:4076 #, gcc-internal-format msgid "" "Same actual argument associated with INTENT(%s) argument %qs and INTENT(%s) " "argument %qs at %L" msgstr "" -#: fortran/interface.cc:4054 +#: fortran/interface.cc:4106 #, gcc-internal-format msgid "check_intents(): List mismatch" msgstr "" -#: fortran/interface.cc:4074 +#: fortran/interface.cc:4126 #, gcc-internal-format, gfc-internal-format msgid "" "Procedure argument at %L is local to a PURE procedure and has the POINTER " "attribute" msgstr "" -#: fortran/interface.cc:4086 +#: fortran/interface.cc:4138 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L in PURE procedure is passed to an INTENT(%s) " "argument" msgstr "" -#: fortran/interface.cc:4096 +#: fortran/interface.cc:4148 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed actual argument at %L in PURE procedure is passed to a POINTER " "dummy argument" msgstr "" -#: fortran/interface.cc:4107 +#: fortran/interface.cc:4159 #, gcc-internal-format msgid "" "Coindexed polymorphic actual argument at %L is passed polymorphic dummy " "argument %qs" msgstr "" -#: fortran/interface.cc:4149 +#: fortran/interface.cc:4201 #, gcc-internal-format msgid "" "Procedure %qs called at %L is not explicitly declared; did you mean %qs?" msgstr "" -#: fortran/interface.cc:4153 fortran/interface.cc:4163 +#: fortran/interface.cc:4205 fortran/interface.cc:4215 #, gcc-internal-format msgid "Procedure %qs called at %L is not explicitly declared" msgstr "" -#: fortran/interface.cc:4159 +#: fortran/interface.cc:4211 #, gcc-internal-format msgid "Procedure %qs called with an implicit interface at %L" msgstr "" -#: fortran/interface.cc:4172 +#: fortran/interface.cc:4224 #, gcc-internal-format msgid "" "The pointer object %qs at %L must have an explicit function interface or be " "declared as array" msgstr "" -#: fortran/interface.cc:4180 +#: fortran/interface.cc:4232 #, gcc-internal-format msgid "" "The allocatable object %qs at %L must have an explicit function interface or " "be declared as array" msgstr "" -#: fortran/interface.cc:4188 +#: fortran/interface.cc:4240 #, gcc-internal-format msgid "Allocatable function %qs at %L must have an explicit function interface" msgstr "" -#: fortran/interface.cc:4205 +#: fortran/interface.cc:4257 #, gcc-internal-format, gfc-internal-format msgid "Explicit interface required for polymorphic argument at %L" msgstr "" -#: fortran/interface.cc:4214 +#: fortran/interface.cc:4266 #, gcc-internal-format msgid "Keyword argument requires explicit interface for procedure %qs at %L" msgstr "" -#: fortran/interface.cc:4223 +#: fortran/interface.cc:4275 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type argument %s at %L requires an explicit interface" msgstr "" -#: fortran/interface.cc:4238 +#: fortran/interface.cc:4290 #, gcc-internal-format msgid "" "Actual argument of LOCK_TYPE or with LOCK_TYPE component at %L requires an " "explicit interface for procedure %qs" msgstr "" -#: fortran/interface.cc:4253 +#: fortran/interface.cc:4305 #, gcc-internal-format msgid "" "Actual argument of EVENT_TYPE or with EVENT_TYPE component at %L requires an " "explicit interface for procedure %qs" msgstr "" -#: fortran/interface.cc:4263 +#: fortran/interface.cc:4315 #, gcc-internal-format, gfc-internal-format msgid "MOLD argument to NULL required at %L" msgstr "" -#: fortran/interface.cc:4271 +#: fortran/interface.cc:4323 #, gcc-internal-format, gfc-internal-format msgid "" "Passing intrinsic NULL as actual argument at %L requires an explicit " "interface" msgstr "" -#: fortran/interface.cc:4281 +#: fortran/interface.cc:4333 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank argument requires an explicit interface at %L" msgstr "" -#: fortran/interface.cc:4323 +#: fortran/interface.cc:4375 #, gcc-internal-format msgid "Procedure pointer component %qs called with an implicit interface at %L" msgstr "" -#: fortran/interface.cc:4334 +#: fortran/interface.cc:4386 #, gcc-internal-format msgid "" "Keyword argument requires explicit interface for procedure pointer component " "%qs at %L" msgstr "" -#: fortran/interface.cc:4419 +#: fortran/interface.cc:4471 #, gcc-internal-format, gfc-internal-format msgid "" "MOLD= required in NULL() argument at %L: Ambiguity between specific " "functions %s and %s" msgstr "" -#: fortran/interface.cc:4489 +#: fortran/interface.cc:4541 #, gcc-internal-format msgid "Unable to find symbol %qs" msgstr "" -#: fortran/interface.cc:4873 +#: fortran/interface.cc:4925 #, gcc-internal-format msgid "Entity %qs at %L is already present in the interface" msgstr "" -#: fortran/interface.cc:4990 +#: fortran/interface.cc:5042 #, gcc-internal-format msgid "gfc_add_interface(): Bad interface type" msgstr "" -#: fortran/interface.cc:5084 +#: fortran/interface.cc:5136 #, gcc-internal-format msgid "Cannot overwrite GENERIC %qs at %L" msgstr "" -#: fortran/interface.cc:5096 +#: fortran/interface.cc:5148 #, gcc-internal-format msgid "%qs at %L overrides a procedure binding declared NON_OVERRIDABLE" msgstr "" -#: fortran/interface.cc:5104 +#: fortran/interface.cc:5156 #, gcc-internal-format msgid "%qs at %L must not be DEFERRED as it overrides a non-DEFERRED binding" msgstr "" -#: fortran/interface.cc:5112 +#: fortran/interface.cc:5164 #, gcc-internal-format msgid "%qs at %L overrides a PURE procedure and must also be PURE" msgstr "" -#: fortran/interface.cc:5121 +#: fortran/interface.cc:5173 #, gcc-internal-format msgid "%qs at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL" msgstr "" -#: fortran/interface.cc:5127 +#: fortran/interface.cc:5179 #, gcc-internal-format msgid "" "%qs at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, " "either" msgstr "" -#: fortran/interface.cc:5136 +#: fortran/interface.cc:5188 #, gcc-internal-format msgid "%qs at %L overrides a SUBROUTINE and must also be a SUBROUTINE" msgstr "" -#: fortran/interface.cc:5147 +#: fortran/interface.cc:5199 #, gcc-internal-format msgid "%qs at %L overrides a FUNCTION and must also be a FUNCTION" msgstr "" -#: fortran/interface.cc:5155 +#: fortran/interface.cc:5207 #, gcc-internal-format msgid "Result mismatch for the overriding procedure %qs at %L: %s" msgstr "" -#: fortran/interface.cc:5166 +#: fortran/interface.cc:5218 #, gcc-internal-format msgid "%qs at %L overrides a PUBLIC procedure and must not be PRIVATE" msgstr "" -#: fortran/interface.cc:5196 +#: fortran/interface.cc:5248 #, gcc-internal-format msgid "" "Dummy argument %qs of %qs at %L should be named %qs as to match the " "corresponding argument of the overridden procedure" msgstr "" -#: fortran/interface.cc:5207 +#: fortran/interface.cc:5259 #, gcc-internal-format msgid "Argument mismatch for the overriding procedure %qs at %L: %s" msgstr "" -#: fortran/interface.cc:5216 +#: fortran/interface.cc:5268 #, gcc-internal-format msgid "" "%qs at %L must have the same number of formal arguments as the overridden " "procedure" msgstr "" -#: fortran/interface.cc:5225 +#: fortran/interface.cc:5277 #, gcc-internal-format msgid "%qs at %L overrides a NOPASS binding and must also be NOPASS" msgstr "" -#: fortran/interface.cc:5236 +#: fortran/interface.cc:5288 #, gcc-internal-format msgid "%qs at %L overrides a binding with PASS and must also be PASS" msgstr "" -#: fortran/interface.cc:5243 +#: fortran/interface.cc:5295 #, gcc-internal-format msgid "" "Passed-object dummy argument of %qs at %L must be at the same position as " "the passed-object dummy argument of the overridden procedure" msgstr "" -#: fortran/interface.cc:5264 +#: fortran/interface.cc:5316 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be of type %s" msgstr "" -#: fortran/interface.cc:5271 +#: fortran/interface.cc:5323 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be of KIND = %d" msgstr "" -#: fortran/interface.cc:5278 +#: fortran/interface.cc:5330 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be a scalar" msgstr "" -#: fortran/interface.cc:5282 +#: fortran/interface.cc:5334 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must be an ASSUMED SHAPE ARRAY" msgstr "" -#: fortran/interface.cc:5286 +#: fortran/interface.cc:5338 #, gcc-internal-format, gfc-internal-format msgid "DTIO character argument at %L must have assumed length" msgstr "" -#: fortran/interface.cc:5290 +#: fortran/interface.cc:5342 #, gcc-internal-format, gfc-internal-format msgid "DTIO dummy argument at %L must have INTENT %s" msgstr "" -#: fortran/interface.cc:5348 fortran/interface.cc:5394 +#: fortran/interface.cc:5400 fortran/interface.cc:5446 #, gcc-internal-format, gfc-internal-format msgid "Alternate return at %L is not permitted in a DTIO procedure" msgstr "" -#: fortran/interface.cc:5360 +#: fortran/interface.cc:5412 #, gcc-internal-format msgid "DTIO procedure %qs at %L must be a subroutine" msgstr "" -#: fortran/interface.cc:5372 +#: fortran/interface.cc:5424 #, gcc-internal-format msgid "Too few dummy arguments in DTIO procedure %qs at %L" msgstr "" -#: fortran/interface.cc:5379 +#: fortran/interface.cc:5431 #, gcc-internal-format msgid "Too many dummy arguments in DTIO procedure %qs at %L" msgstr "" @@ -76462,7 +76766,7 @@ msgstr "" #. Use of -fdec-char-conversions allows assignment of character data #. to non-character variables. This not permitted for nonconstant #. strings. -#: fortran/intrinsic.cc:5413 fortran/resolve.cc:11245 +#: fortran/intrinsic.cc:5413 fortran/resolve.cc:11492 #, gcc-internal-format, gfc-internal-format msgid "Cannot convert %s to %s at %L" msgstr "" @@ -77030,7 +77334,7 @@ msgid "" "defined input/output procedure" msgstr "" -#: fortran/io.cc:3422 fortran/resolve.cc:15736 +#: fortran/io.cc:3422 fortran/resolve.cc:16037 #, gcc-internal-format msgid "" "NAMELIST object %qs in namelist %qs at %L with ALLOCATABLE or POINTER " @@ -77613,7 +77917,7 @@ msgstr "" msgid "STOP code at %L must be default integer KIND=%d" msgstr "" -#: fortran/match.cc:3210 fortran/resolve.cc:12384 +#: fortran/match.cc:3210 fortran/resolve.cc:12631 #, gcc-internal-format, gfc-internal-format msgid "QUIET specifier at %L must be a scalar LOGICAL" msgstr "" @@ -78146,104 +78450,104 @@ msgstr "" msgid "Expected block name %qs of SELECT construct at %C" msgstr "" -#: fortran/match.cc:6635 +#: fortran/match.cc:6654 #, gcc-internal-format, gfc-internal-format msgid "SELECT TYPE at %C cannot appear in this scope" msgstr "" -#: fortran/match.cc:6663 +#: fortran/match.cc:6682 #, gcc-internal-format, gfc-internal-format msgid "parse error in SELECT TYPE statement at %C" msgstr "" -#: fortran/match.cc:6688 +#: fortran/match.cc:6707 #, gcc-internal-format, gfc-internal-format msgid "" "Selector in SELECT TYPE at %C is not a named variable; use associate-name=>" msgstr "" -#: fortran/match.cc:6855 +#: fortran/match.cc:6874 #, gcc-internal-format, gfc-internal-format msgid "SELECT RANK statement at %C" msgstr "" -#: fortran/match.cc:6896 fortran/match.cc:6950 +#: fortran/match.cc:6915 fortran/match.cc:6969 #, gcc-internal-format, gfc-internal-format msgid "The SELECT RANK selector at %C must be an assumed rank variable" msgstr "" -#: fortran/match.cc:6960 +#: fortran/match.cc:6979 #, gcc-internal-format, gfc-internal-format msgid "parse error in SELECT RANK statement at %C" msgstr "" -#: fortran/match.cc:6996 +#: fortran/match.cc:7015 #, gcc-internal-format, gfc-internal-format msgid "Unexpected CASE statement at %C" msgstr "" -#: fortran/match.cc:7048 +#: fortran/match.cc:7067 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in CASE specification at %C" msgstr "" -#: fortran/match.cc:7066 +#: fortran/match.cc:7085 #, gcc-internal-format, gfc-internal-format msgid "Unexpected TYPE IS statement at %C" msgstr "" -#: fortran/match.cc:7098 +#: fortran/match.cc:7117 #, gcc-internal-format, gfc-internal-format msgid "" "The type-spec shall not specify a sequence derived type or a type with the " "BIND attribute in SELECT TYPE at %C [F2003:C815]" msgstr "" -#: fortran/match.cc:7109 +#: fortran/match.cc:7128 #, gcc-internal-format, gfc-internal-format msgid "" "All the LEN type parameters in the TYPE IS statement at %C must be ASSUMED" msgstr "" -#: fortran/match.cc:7120 +#: fortran/match.cc:7139 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in TYPE IS specification at %C" msgstr "" -#: fortran/match.cc:7196 +#: fortran/match.cc:7215 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in CLASS IS specification at %C" msgstr "" -#: fortran/match.cc:7216 +#: fortran/match.cc:7235 #, gcc-internal-format, gfc-internal-format msgid "Unexpected RANK statement at %C" msgstr "" -#: fortran/match.cc:7262 +#: fortran/match.cc:7281 #, gcc-internal-format, gfc-internal-format msgid "" "The SELECT RANK CASE expression at %C must be a scalar, integer constant" msgstr "" -#: fortran/match.cc:7271 +#: fortran/match.cc:7290 #, gcc-internal-format, gfc-internal-format msgid "" "The value of the SELECT RANK CASE expression at %C must not be less than " "zero or greater than %d" msgstr "" -#: fortran/match.cc:7298 +#: fortran/match.cc:7317 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in RANK specification at %C" msgstr "" -#: fortran/match.cc:7420 +#: fortran/match.cc:7439 #, gcc-internal-format, gfc-internal-format msgid "ELSEWHERE statement at %C not enclosed in WHERE block" msgstr "" -#: fortran/match.cc:7458 +#: fortran/match.cc:7477 #, gcc-internal-format msgid "Label %qs at %C doesn't match WHERE label %qs" msgstr "" @@ -78296,1157 +78600,1157 @@ msgstr "" msgid "gfc_code2string(): Bad code" msgstr "" -#: fortran/module.cc:238 +#: fortran/module.cc:243 #, gcc-internal-format msgid "free_pi_tree(): Unresolved fixup" msgstr "" -#: fortran/module.cc:455 +#: fortran/module.cc:460 #, gcc-internal-format msgid "associate_integer_pointer(): Already associated" msgstr "" -#: fortran/module.cc:539 +#: fortran/module.cc:544 #, gcc-internal-format, gfc-internal-format msgid "module nature in USE statement at %C" msgstr "" -#: fortran/module.cc:551 +#: fortran/module.cc:556 #, gcc-internal-format, gfc-internal-format msgid "" "Module nature in USE statement at %C shall be either INTRINSIC or " "NON_INTRINSIC" msgstr "" -#: fortran/module.cc:564 +#: fortran/module.cc:569 #, gcc-internal-format, gfc-internal-format msgid "\"::\" was expected after module nature at %C but was not found" msgstr "" -#: fortran/module.cc:574 +#: fortran/module.cc:579 #, gcc-internal-format, gfc-internal-format msgid "\"USE :: module\" at %C" msgstr "" -#: fortran/module.cc:633 +#: fortran/module.cc:638 #, gcc-internal-format, gfc-internal-format msgid "Missing generic specification in USE statement at %C" msgstr "" -#: fortran/module.cc:644 +#: fortran/module.cc:649 #, gcc-internal-format, gfc-internal-format msgid "Renaming operators in USE statements at %C" msgstr "" -#: fortran/module.cc:688 +#: fortran/module.cc:693 #, gcc-internal-format msgid "Symbol %qs at %L conflicts with the rename symbol at %L" msgstr "" -#: fortran/module.cc:691 +#: fortran/module.cc:696 #, gcc-internal-format msgid "Symbol %qs at %L conflicts with the symbol at %L" msgstr "" -#: fortran/module.cc:699 +#: fortran/module.cc:704 #, gcc-internal-format msgid "The name %qs at %C has already been used as an external module name" msgstr "" -#: fortran/module.cc:762 +#: fortran/module.cc:767 #, gcc-internal-format, gfc-internal-format msgid "SUBMODULE declaration at %C" msgstr "" -#: fortran/module.cc:767 +#: fortran/module.cc:772 #, gcc-internal-format, gfc-internal-format msgid "SUBMODULE declaration at %C cannot appear within another scoping unit" msgstr "" -#: fortran/module.cc:842 +#: fortran/module.cc:847 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in SUBMODULE statement at %C" msgstr "" -#: fortran/module.cc:1202 +#: fortran/module.cc:1207 #, gcc-internal-format msgid "Reading module %qs at line %d column %d: %s" msgstr "" -#: fortran/module.cc:1206 +#: fortran/module.cc:1211 #, gcc-internal-format msgid "Writing module %qs at line %d column %d: %s" msgstr "" -#: fortran/module.cc:1210 +#: fortran/module.cc:1215 #, gcc-internal-format msgid "Module %qs at line %d column %d: %s" msgstr "" -#: fortran/module.cc:1643 +#: fortran/module.cc:1648 #, gcc-internal-format msgid "require_atom(): bad atom type required" msgstr "" -#: fortran/module.cc:1692 +#: fortran/module.cc:1697 #, gcc-internal-format, gfc-internal-format msgid "Error writing modules file: %s" msgstr "" -#: fortran/module.cc:1742 +#: fortran/module.cc:1747 #, gcc-internal-format msgid "write_atom(): Trying to write dab atom" msgstr "" -#: fortran/module.cc:1963 +#: fortran/module.cc:1968 #, gcc-internal-format msgid "unquote_string(): got bad string" msgstr "" -#: fortran/module.cc:2979 +#: fortran/module.cc:2984 #, gcc-internal-format msgid "mio_array_ref(): Unknown array ref" msgstr "" -#: fortran/module.cc:5114 +#: fortran/module.cc:5119 #, gcc-internal-format, gfc-internal-format msgid "Ambiguous !$OMP DECLARE REDUCTION from module %s at %L" msgstr "" -#: fortran/module.cc:5117 +#: fortran/module.cc:5122 #, gcc-internal-format, gfc-internal-format msgid "Previous !$OMP DECLARE REDUCTION from module %s at %L" msgstr "" -#: fortran/module.cc:5311 +#: fortran/module.cc:5316 #, gcc-internal-format msgid "" "%qs of module %qs, imported at %C, is also the name of the current program " "unit" msgstr "" -#: fortran/module.cc:5448 +#: fortran/module.cc:5453 #, gcc-internal-format msgid "" "Mismatch in components of derived type %qs from %qs at %C: expecting %qs, " "but got %qs" msgstr "" -#: fortran/module.cc:5727 +#: fortran/module.cc:5732 #, gcc-internal-format msgid "Symbol %qs referenced at %L not found in module %qs" msgstr "" -#: fortran/module.cc:5734 +#: fortran/module.cc:5739 #, gcc-internal-format msgid "User operator %qs referenced at %L not found in module %qs" msgstr "" -#: fortran/module.cc:5739 +#: fortran/module.cc:5744 #, gcc-internal-format msgid "Intrinsic operator %qs referenced at %L not found in module %qs" msgstr "" -#: fortran/module.cc:5975 +#: fortran/module.cc:5980 #, gcc-internal-format msgid "write_symbol(): bad module symbol %qs" msgstr "" -#: fortran/module.cc:6319 +#: fortran/module.cc:6324 #, gcc-internal-format msgid "write_symtree(): Symbol not written" msgstr "" -#: fortran/module.cc:6509 +#: fortran/module.cc:6514 #, gcc-internal-format msgid "Cannot open module file %qs for writing at %C: %s" msgstr "" -#: fortran/module.cc:6530 +#: fortran/module.cc:6535 #, gcc-internal-format msgid "Error writing module file %qs for writing: %s" msgstr "" -#: fortran/module.cc:6541 +#: fortran/module.cc:6546 #, gcc-internal-format msgid "Cannot delete module file %qs: %s" msgstr "" -#: fortran/module.cc:6544 +#: fortran/module.cc:6549 #, gcc-internal-format msgid "Cannot rename module file %qs to %qs: %s" msgstr "" -#: fortran/module.cc:6550 +#: fortran/module.cc:6555 #, gcc-internal-format msgid "Cannot delete temporary module file %qs: %s" msgstr "" -#: fortran/module.cc:6607 +#: fortran/module.cc:6612 #, gcc-internal-format msgid "Symbol %qs at %C already declared" msgstr "" -#: fortran/module.cc:6678 +#: fortran/module.cc:6683 #, gcc-internal-format, gfc-internal-format msgid "import_iso_c_binding_module(): Unable to create symbol for %s" msgstr "" -#: fortran/module.cc:6786 fortran/module.cc:7130 +#: fortran/module.cc:6791 fortran/module.cc:7135 #, gcc-internal-format msgid "The symbol %qs, referenced at %L, is not in the selected standard" msgstr "" -#: fortran/module.cc:6914 +#: fortran/module.cc:6919 #, gcc-internal-format msgid "Symbol %qs referenced at %L not found in intrinsic module ISO_C_BINDING" msgstr "" -#: fortran/module.cc:6935 fortran/module.cc:6968 fortran/module.cc:7010 +#: fortran/module.cc:6940 fortran/module.cc:6973 fortran/module.cc:7015 #, gcc-internal-format msgid "Symbol %qs already declared" msgstr "" -#: fortran/module.cc:7115 +#: fortran/module.cc:7120 #, gcc-internal-format msgid "" "Use of intrinsic module %qs at %C conflicts with non-intrinsic module name " "used previously" msgstr "" -#: fortran/module.cc:7137 +#: fortran/module.cc:7142 #, gcc-internal-format msgid "" "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module " "ISO_FORTRAN_ENV at %L is incompatible with option %qs" msgstr "" -#: fortran/module.cc:7205 +#: fortran/module.cc:7210 #, gcc-internal-format, gfc-internal-format msgid "" "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module " "ISO_FORTRAN_ENV at %C is incompatible with option %s" msgstr "" -#: fortran/module.cc:7259 +#: fortran/module.cc:7264 #, gcc-internal-format msgid "" "Symbol %qs referenced at %L not found in intrinsic module ISO_FORTRAN_ENV" msgstr "" -#: fortran/module.cc:7285 +#: fortran/module.cc:7290 #, gcc-internal-format, gfc-internal-format msgid "USE statement at %C has no ONLY qualifier" msgstr "" -#: fortran/module.cc:7314 +#: fortran/module.cc:7319 #, gcc-internal-format, gfc-internal-format msgid "ISO_FORTRAN_ENV intrinsic module at %C" msgstr "" -#: fortran/module.cc:7326 +#: fortran/module.cc:7331 #, gcc-internal-format, gfc-internal-format msgid "ISO_C_BINDING module at %C" msgstr "" -#: fortran/module.cc:7339 +#: fortran/module.cc:7344 #, gcc-internal-format msgid "Cannot find an intrinsic module named %qs at %C" msgstr "" -#: fortran/module.cc:7345 +#: fortran/module.cc:7350 #, gcc-internal-format, gfc-internal-format msgid "IEEE_FEATURES module at %C" msgstr "" -#: fortran/module.cc:7351 +#: fortran/module.cc:7356 #, gcc-internal-format, gfc-internal-format msgid "IEEE_EXCEPTIONS module at %C" msgstr "" -#: fortran/module.cc:7357 +#: fortran/module.cc:7362 #, gcc-internal-format, gfc-internal-format msgid "IEEE_ARITHMETIC module at %C" msgstr "" -#: fortran/module.cc:7367 +#: fortran/module.cc:7372 #, gcc-internal-format msgid "Cannot open module file %qs for reading at %C: %s" msgstr "" -#: fortran/module.cc:7370 +#: fortran/module.cc:7375 #, gcc-internal-format msgid "" "Module file %qs has not been generated, either because the module does not " "contain a MODULE PROCEDURE or there is an error in the module." msgstr "" -#: fortran/module.cc:7381 +#: fortran/module.cc:7386 #, gcc-internal-format msgid "" "Use of non-intrinsic module %qs at %C conflicts with intrinsic module name " "used previously" msgstr "" -#: fortran/module.cc:7404 +#: fortran/module.cc:7409 #, gcc-internal-format msgid "File %qs opened at %C is not a GNU Fortran module file" msgstr "" -#: fortran/module.cc:7412 +#: fortran/module.cc:7417 #, gcc-internal-format msgid "" "Cannot read module file %qs opened at %C, because it was created by a " "different version of GNU Fortran" msgstr "" -#: fortran/module.cc:7429 +#: fortran/module.cc:7434 #, gcc-internal-format msgid "Cannot USE a submodule that is currently built" msgstr "" -#: fortran/module.cc:7431 +#: fortran/module.cc:7436 #, gcc-internal-format msgid "Cannot USE a module that is currently built" msgstr "" -#: fortran/openmp.cc:150 fortran/openmp.cc:7083 +#: fortran/openmp.cc:150 fortran/openmp.cc:7113 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk at %C" msgstr "" -#: fortran/openmp.cc:428 +#: fortran/openmp.cc:429 #, gcc-internal-format msgid "%<omp_all_memory%> at %C not permitted in this clause" msgstr "" -#: fortran/openmp.cc:473 +#: fortran/openmp.cc:474 #, gcc-internal-format, gfc-internal-format msgid "List item shall not be coindexed at %C" msgstr "" -#: fortran/openmp.cc:492 +#: fortran/openmp.cc:493 #, gcc-internal-format msgid "" "%qs at %L is part of the common block %</%s/%> and may only be specificed " "implicitly via the named common block" msgstr "" -#: fortran/openmp.cc:517 fortran/openmp.cc:618 fortran/openmp.cc:948 -#: fortran/openmp.cc:6135 +#: fortran/openmp.cc:518 fortran/openmp.cc:619 fortran/openmp.cc:949 +#: fortran/openmp.cc:6165 #, gcc-internal-format, gfc-internal-format msgid "COMMON block /%s/ not found at %C" msgstr "" -#: fortran/openmp.cc:556 fortran/openmp.cc:646 +#: fortran/openmp.cc:557 fortran/openmp.cc:647 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in OpenMP variable list at %C" msgstr "" -#: fortran/openmp.cc:673 +#: fortran/openmp.cc:674 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in OpenMP detach clause at %C" msgstr "" -#: fortran/openmp.cc:702 +#: fortran/openmp.cc:703 #, gcc-internal-format msgid "" "%<omp_all_memory%> used with dependence-type other than OUT or INOUT at %C" msgstr "" -#: fortran/openmp.cc:755 +#: fortran/openmp.cc:756 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in OpenMP SINK dependence-type list at %C" msgstr "" -#: fortran/openmp.cc:817 +#: fortran/openmp.cc:818 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in OpenACC expression list at %C" msgstr "" -#: fortran/openmp.cc:884 +#: fortran/openmp.cc:885 #, gcc-internal-format msgid "Unexpected OpenACC parallelism." msgstr "" -#: fortran/openmp.cc:916 +#: fortran/openmp.cc:917 #, gcc-internal-format, gfc-internal-format msgid "Variable at %C is an element of a COMMON block" msgstr "" -#: fortran/openmp.cc:976 +#: fortran/openmp.cc:977 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after !$ACC DECLARE at %C" msgstr "" -#: fortran/openmp.cc:986 +#: fortran/openmp.cc:987 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !$ACC DECLARE list at %C" msgstr "" -#: fortran/openmp.cc:1241 +#: fortran/openmp.cc:1242 #, gcc-internal-format, gfc-internal-format msgid "Expected INTEGER type at %L" msgstr "" -#: fortran/openmp.cc:1255 +#: fortran/openmp.cc:1256 #, gcc-internal-format, gfc-internal-format msgid "Expected identifier at %C" msgstr "" -#: fortran/openmp.cc:1260 +#: fortran/openmp.cc:1261 #, gcc-internal-format msgid "Same identifier %qs specified again at %C" msgstr "" -#: fortran/openmp.cc:1287 +#: fortran/openmp.cc:1288 #, gcc-internal-format, gfc-internal-format msgid "Expected range-specification at %C" msgstr "" -#: fortran/openmp.cc:1397 +#: fortran/openmp.cc:1398 #, gcc-internal-format, gfc-internal-format msgid "Comma expected at %C" msgstr "" -#: fortran/openmp.cc:1509 +#: fortran/openmp.cc:1510 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DECLARE REDUCTION %s not found at %L" msgstr "" -#: fortran/openmp.cc:1569 +#: fortran/openmp.cc:1570 #, gcc-internal-format, gfc-internal-format msgid "Unknown directive at %L" msgstr "" -#: fortran/openmp.cc:1571 +#: fortran/openmp.cc:1572 #, gcc-internal-format, gfc-internal-format msgid "Invalid combined or composite directive at %L" msgstr "" -#: fortran/openmp.cc:1579 +#: fortran/openmp.cc:1580 #, gcc-internal-format msgid "" "Invalid %qs directive at %L in %s clause: declarative, informational and " "meta directives not permitted" msgstr "" -#: fortran/openmp.cc:1611 +#: fortran/openmp.cc:1612 #, gcc-internal-format msgid "Expected %<,%> or %<)%> at %C" msgstr "" -#: fortran/openmp.cc:1637 fortran/openmp.cc:1647 +#: fortran/openmp.cc:1638 fortran/openmp.cc:1648 #, gcc-internal-format msgid "" "%qs directive mentioned multiple times in %s clause in %s directive at %L" msgstr "" -#: fortran/openmp.cc:1655 +#: fortran/openmp.cc:1656 #, gcc-internal-format msgid "" "%qs directive mentioned both times in ABSENT and CONTAINS clauses in %s " "directive at %L" msgstr "" -#: fortran/openmp.cc:1745 +#: fortran/openmp.cc:1746 #, gcc-internal-format, gfc-internal-format msgid "Duplicate %s modifier at %L in USES_ALLOCATORS clause" msgstr "" -#: fortran/openmp.cc:1779 +#: fortran/openmp.cc:1780 #, gcc-internal-format msgid "Unexpected %<(%> at %C" msgstr "" -#: fortran/openmp.cc:1826 +#: fortran/openmp.cc:1827 #, gcc-internal-format msgid "Duplicated %qs clause at %L" msgstr "" -#: fortran/openmp.cc:1833 +#: fortran/openmp.cc:1834 #, gcc-internal-format msgid "Expected %<(%> after %qs at %C" msgstr "" -#: fortran/openmp.cc:1840 +#: fortran/openmp.cc:1841 #, gcc-internal-format msgid "Invalid expression after %<%s(%> at %C" msgstr "" -#: fortran/openmp.cc:1901 +#: fortran/openmp.cc:1902 #, gcc-internal-format, gfc-internal-format msgid "Clause expected at %C after trailing comma" msgstr "" -#: fortran/openmp.cc:1971 fortran/openmp.cc:2007 fortran/openmp.cc:2403 -#: fortran/openmp.cc:2428 +#: fortran/openmp.cc:1972 fortran/openmp.cc:2008 fortran/openmp.cc:2418 +#: fortran/openmp.cc:2443 #, gcc-internal-format msgid "Expected %<:%> at %C" msgstr "" -#: fortran/openmp.cc:2031 +#: fortran/openmp.cc:2032 #, gcc-internal-format, gfc-internal-format msgid "Expected variable list at %C" msgstr "" -#: fortran/openmp.cc:2055 +#: fortran/openmp.cc:2056 #, gcc-internal-format, gfc-internal-format msgid "Expected COMPILATION or EXECUTION in AT clause at %C" msgstr "" -#: fortran/openmp.cc:2116 +#: fortran/openmp.cc:2117 #, gcc-internal-format, gfc-internal-format msgid "Expected TEAMS, PARALLEL or THREAD as binding in BIND at %C" msgstr "" -#: fortran/openmp.cc:2147 +#: fortran/openmp.cc:2148 #, gcc-internal-format, gfc-internal-format msgid "COLLAPSE clause argument not constant positive integer at %C" msgstr "" -#: fortran/openmp.cc:2236 +#: fortran/openmp.cc:2251 #, gcc-internal-format, gfc-internal-format msgid "" "Expected ALLOC, TO, FROM, TOFROM, FIRSTPRIVATE, PRESENT, NONE or DEFAULT at " "%C" msgstr "" -#: fortran/openmp.cc:2258 +#: fortran/openmp.cc:2273 #, gcc-internal-format, gfc-internal-format msgid "Expected SCALAR, AGGREGATE, ALLOCATABLE, POINTER or ALL at %C" msgstr "" -#: fortran/openmp.cc:2291 +#: fortran/openmp.cc:2306 #, gcc-internal-format, gfc-internal-format msgid "DEFAULTMAP at %C but prior DEFAULTMAP with unspecified category" msgstr "" -#: fortran/openmp.cc:2294 +#: fortran/openmp.cc:2309 #, gcc-internal-format, gfc-internal-format msgid "DEFAULTMAP at %C but prior DEFAULTMAP for category %s" msgstr "" -#: fortran/openmp.cc:2330 +#: fortran/openmp.cc:2345 #, gcc-internal-format, gfc-internal-format msgid "Expected NONE or PRESENT in DEFAULT clause at %C" msgstr "" -#: fortran/openmp.cc:2333 +#: fortran/openmp.cc:2348 #, gcc-internal-format, gfc-internal-format msgid "Expected NONE, FIRSTPRIVATE, PRIVATE or SHARED in DEFAULT clause at %C" msgstr "" -#: fortran/openmp.cc:2383 +#: fortran/openmp.cc:2398 #, gcc-internal-format, gfc-internal-format msgid "ITERATOR may not be combined with SOURCE at %C" msgstr "" -#: fortran/openmp.cc:2389 +#: fortran/openmp.cc:2404 #, gcc-internal-format, gfc-internal-format msgid "SOURCE at %C not permitted as dependence-type for this directive" msgstr "" -#: fortran/openmp.cc:2395 +#: fortran/openmp.cc:2410 #, gcc-internal-format, gfc-internal-format msgid "Duplicated clause with SOURCE dependence-type at %C" msgstr "" -#: fortran/openmp.cc:2410 +#: fortran/openmp.cc:2425 #, gcc-internal-format msgid "Expected %<)%> or %<omp_cur_iteration)%> at %C" msgstr "" -#: fortran/openmp.cc:2422 +#: fortran/openmp.cc:2437 #, gcc-internal-format, gfc-internal-format msgid "SINK at %C not permitted as dependence-type for this directive" msgstr "" -#: fortran/openmp.cc:2433 +#: fortran/openmp.cc:2448 #, gcc-internal-format, gfc-internal-format msgid "ITERATOR may not be combined with SINK at %C" msgstr "" -#: fortran/openmp.cc:2447 +#: fortran/openmp.cc:2462 #, gcc-internal-format, gfc-internal-format msgid "Expected dependence-type SINK or SOURCE at %C" msgstr "" -#: fortran/openmp.cc:2464 +#: fortran/openmp.cc:2479 #, gcc-internal-format msgid "%<omp_all_memory%> used with DEPEND kind other than OUT or INOUT at %C" msgstr "" -#: fortran/openmp.cc:2502 fortran/openmp.cc:2537 +#: fortran/openmp.cc:2517 fortran/openmp.cc:2552 #, gcc-internal-format, gfc-internal-format msgid "Expected integer expression at %C" msgstr "" -#: fortran/openmp.cc:2518 +#: fortran/openmp.cc:2533 #, gcc-internal-format msgid "" "%<ancestor%> device modifier not preceded by %<requires%> directive with " "%<reverse_offload%> clause at %C" msgstr "" -#: fortran/openmp.cc:2530 +#: fortran/openmp.cc:2545 #, gcc-internal-format msgid "the %<device%> clause expression must evaluate to %<1%> at %C" msgstr "" -#: fortran/openmp.cc:2543 +#: fortran/openmp.cc:2558 #, gcc-internal-format msgid "" "Expected integer expression or a single device-modifier %<device_num%> or " "%<ancestor%> at %C" msgstr "" -#: fortran/openmp.cc:2573 +#: fortran/openmp.cc:2588 #, gcc-internal-format, gfc-internal-format msgid "Expected HOST, NOHOST or ANY at %C" msgstr "" -#: fortran/openmp.cc:2628 +#: fortran/openmp.cc:2643 #, gcc-internal-format, gfc-internal-format msgid "Expected SEQ_CST, ACQUIRE or RELAXED at %C" msgstr "" -#: fortran/openmp.cc:2816 +#: fortran/openmp.cc:2831 #, gcc-internal-format, gfc-internal-format msgid "INDIRECT clause at %C requires a constant logical expression" msgstr "" -#: fortran/openmp.cc:3003 +#: fortran/openmp.cc:3018 #, gcc-internal-format msgid "Multiple %qs modifiers specified at %C" msgstr "" -#: fortran/openmp.cc:3113 +#: fortran/openmp.cc:3128 #, gcc-internal-format msgid "too many %<always%> modifiers at %L" msgstr "" -#: fortran/openmp.cc:3119 +#: fortran/openmp.cc:3134 #, gcc-internal-format msgid "too many %<close%> modifiers at %L" msgstr "" -#: fortran/openmp.cc:3125 +#: fortran/openmp.cc:3140 #, gcc-internal-format msgid "too many %<present%> modifiers at %L" msgstr "" -#: fortran/openmp.cc:3316 +#: fortran/openmp.cc:3331 #, gcc-internal-format msgid "" "Expected ORDER(CONCURRENT) at %C with optional %<reproducible%> or " "%<unconstrained%> modifier" msgstr "" -#: fortran/openmp.cc:3341 +#: fortran/openmp.cc:3356 #, gcc-internal-format, gfc-internal-format msgid "ORDERED clause argument not constant positive integer at %C" msgstr "" -#: fortran/openmp.cc:3631 +#: fortran/openmp.cc:3646 #, gcc-internal-format, gfc-internal-format msgid "Expected FATAL or WARNING in SEVERITY clause at %C" msgstr "" -#: fortran/openmp.cc:3824 +#: fortran/openmp.cc:3839 #, gcc-internal-format, gfc-internal-format msgid "Failed to match clause at %C" msgstr "" -#: fortran/openmp.cc:4007 +#: fortran/openmp.cc:4022 #, gcc-internal-format, gfc-internal-format msgid "Invalid clause in module with !$ACC DECLARE at %L" msgstr "" -#: fortran/openmp.cc:4017 +#: fortran/openmp.cc:4032 #, gcc-internal-format, gfc-internal-format msgid "Variable is USE-associated with !$ACC DECLARE at %L" msgstr "" -#: fortran/openmp.cc:4026 +#: fortran/openmp.cc:4041 #, gcc-internal-format msgid "" "Variable %qs shall be declared in the same scoping unit as !$ACC DECLARE at " "%L" msgstr "" -#: fortran/openmp.cc:4034 +#: fortran/openmp.cc:4049 #, gcc-internal-format, gfc-internal-format msgid "Assumed-size dummy array with !$ACC DECLARE at %L" msgstr "" -#: fortran/openmp.cc:4083 +#: fortran/openmp.cc:4098 #, gcc-internal-format msgid "" "%<acc update%> must contain at least one %<device%> or %<host%> or %<self%> " "clause at %L" msgstr "" -#: fortran/openmp.cc:4131 +#: fortran/openmp.cc:4146 #, gcc-internal-format, gfc-internal-format msgid "Invalid argument to !$ACC WAIT at %C" msgstr "" -#: fortran/openmp.cc:4138 +#: fortran/openmp.cc:4153 #, gcc-internal-format, gfc-internal-format msgid "WAIT clause at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.cc:4171 +#: fortran/openmp.cc:4201 #, gcc-internal-format, gfc-internal-format msgid "ACC CACHE directive must be inside of loop %C" msgstr "" -#: fortran/openmp.cc:4240 +#: fortran/openmp.cc:4270 #, gcc-internal-format, gfc-internal-format msgid "" "Only the !$ACC ROUTINE form without list is allowed in interface block at %C" msgstr "" -#: fortran/openmp.cc:4274 +#: fortran/openmp.cc:4304 #, gcc-internal-format msgid "Invalid NAME %qs in !$ACC ROUTINE ( NAME ) at %C" msgstr "" -#: fortran/openmp.cc:4282 +#: fortran/openmp.cc:4312 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !$ACC ROUTINE ( NAME ) at %C" msgstr "" -#: fortran/openmp.cc:4289 +#: fortran/openmp.cc:4319 #, gcc-internal-format msgid "" "Syntax error in !$ACC ROUTINE ( NAME ) at %C, expecting %<)%> after NAME" msgstr "" -#: fortran/openmp.cc:4304 +#: fortran/openmp.cc:4334 #, gcc-internal-format, gfc-internal-format msgid "Multiple loop axes specified for routine at %C" msgstr "" -#: fortran/openmp.cc:4315 +#: fortran/openmp.cc:4345 #, gcc-internal-format, gfc-internal-format msgid "" "Intrinsic symbol specified in !$ACC ROUTINE ( NAME ) at %C marked with " "incompatible GANG, WORKER, or VECTOR clause" msgstr "" -#: fortran/openmp.cc:4323 +#: fortran/openmp.cc:4353 #, gcc-internal-format, gfc-internal-format msgid "" "Intrinsic symbol specified in !$ACC ROUTINE ( NAME ) at %C marked with " "incompatible NOHOST clause" msgstr "" -#: fortran/openmp.cc:4344 fortran/openmp.cc:4372 +#: fortran/openmp.cc:4374 fortran/openmp.cc:4402 #, gcc-internal-format, gfc-internal-format msgid "!$ACC ROUTINE already applied at %C" msgstr "" -#: fortran/openmp.cc:4389 +#: fortran/openmp.cc:4419 #, gcc-internal-format, gfc-internal-format msgid "" "!$ACC ROUTINE with GANG, WORKER, or VECTOR clause is not permitted in PURE " "procedure at %C" msgstr "" -#: fortran/openmp.cc:4568 +#: fortran/openmp.cc:4598 #, gcc-internal-format, gfc-internal-format msgid "Expected ALIGN or ALLOCATOR clause at %C" msgstr "" -#: fortran/openmp.cc:4576 +#: fortran/openmp.cc:4606 #, gcc-internal-format, gfc-internal-format msgid "" "Sorry, structure-element list item at %L in ALLOCATE directive is not yet " "supported" msgstr "" -#: fortran/openmp.cc:4579 +#: fortran/openmp.cc:4609 #, gcc-internal-format, gfc-internal-format msgid "Unexpected expression as list item at %L in ALLOCATE directive" msgstr "" -#: fortran/openmp.cc:4650 +#: fortran/openmp.cc:4680 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ASSUMES at %C must be in the specification part of a subprogram or " "module" msgstr "" -#: fortran/openmp.cc:4717 +#: fortran/openmp.cc:4747 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP CRITICAL statement at %C" msgstr "" -#: fortran/openmp.cc:4739 +#: fortran/openmp.cc:4769 #, gcc-internal-format msgid "Expected %<( depobj )%> at %C" msgstr "" -#: fortran/openmp.cc:4757 +#: fortran/openmp.cc:4787 #, gcc-internal-format msgid "" "Expected IN, OUT, INOUT, INOUTSET or MUTEXINOUTSET followed by %<)%> at %C" msgstr "" -#: fortran/openmp.cc:4771 +#: fortran/openmp.cc:4801 #, gcc-internal-format, gfc-internal-format msgid "" "The same depend object should be used as DEPOBJ argument at %L and as " "DESTROY argument at %L" msgstr "" -#: fortran/openmp.cc:4785 +#: fortran/openmp.cc:4815 #, gcc-internal-format, gfc-internal-format msgid "Expected DEPEND, UPDATE, or DESTROY clause at %C" msgstr "" -#: fortran/openmp.cc:4790 +#: fortran/openmp.cc:4820 #, gcc-internal-format, gfc-internal-format msgid "" "DEPEND clause at %L of OMP DEPOBJ construct shall not have dependence-type " "DEPOBJ" msgstr "" -#: fortran/openmp.cc:4798 +#: fortran/openmp.cc:4828 #, gcc-internal-format, gfc-internal-format msgid "" "DEPEND clause at %L of OMP DEPOBJ construct shall have only a single locator" msgstr "" -#: fortran/openmp.cc:4924 fortran/openmp.cc:9176 +#: fortran/openmp.cc:4954 fortran/openmp.cc:9206 #, gcc-internal-format, gfc-internal-format msgid "" "MESSAGE clause at %L requires a scalar default-kind CHARACTER expression" msgstr "" -#: fortran/openmp.cc:4931 +#: fortran/openmp.cc:4961 #, gcc-internal-format, gfc-internal-format msgid "Constant character expression required in MESSAGE clause at %L" msgstr "" -#: fortran/openmp.cc:4937 +#: fortran/openmp.cc:4967 #, gcc-internal-format, gfc-internal-format msgid "$OMP ERROR encountered at %L: %s" msgstr "" -#: fortran/openmp.cc:4956 +#: fortran/openmp.cc:4986 #, gcc-internal-format, gfc-internal-format msgid "$OMP ERROR encountered at %L" msgstr "" -#: fortran/openmp.cc:4984 +#: fortran/openmp.cc:5014 #, gcc-internal-format, gfc-internal-format msgid "Expected SEQ_CST, AQC_REL, RELEASE, or ACQUIRE at %C" msgstr "" -#: fortran/openmp.cc:4993 +#: fortran/openmp.cc:5023 #, gcc-internal-format, gfc-internal-format msgid "" "List specified together with memory order clause in FLUSH directive at %C" msgstr "" -#: fortran/openmp.cc:5001 +#: fortran/openmp.cc:5031 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP FLUSH statement at %C" msgstr "" -#: fortran/openmp.cc:5401 fortran/openmp.cc:11748 +#: fortran/openmp.cc:5431 fortran/openmp.cc:11778 #, gcc-internal-format, gfc-internal-format msgid "Redefinition of predefined %s !$OMP DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:5405 fortran/openmp.cc:11752 +#: fortran/openmp.cc:5435 fortran/openmp.cc:11782 #, gcc-internal-format, gfc-internal-format msgid "Redefinition of predefined !$OMP DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:5410 +#: fortran/openmp.cc:5440 #, gcc-internal-format, gfc-internal-format msgid "Redefinition of !$OMP DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:5412 +#: fortran/openmp.cc:5442 #, gcc-internal-format, gfc-internal-format msgid "Previous !$OMP DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:5432 +#: fortran/openmp.cc:5462 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after !$OMP DECLARE REDUCTION at %C" msgstr "" -#: fortran/openmp.cc:5469 +#: fortran/openmp.cc:5499 #, gcc-internal-format, gfc-internal-format msgid "" "Only the !$OMP DECLARE TARGET form without clauses is allowed in interface " "block at %C" msgstr "" -#: fortran/openmp.cc:5484 +#: fortran/openmp.cc:5514 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after !$OMP DECLARE TARGET at %C" msgstr "" -#: fortran/openmp.cc:5509 +#: fortran/openmp.cc:5539 #, gcc-internal-format, gfc-internal-format msgid "OMP DECLARE TARGET variable at %L is an element of a COMMON block" msgstr "" -#: fortran/openmp.cc:5512 +#: fortran/openmp.cc:5542 #, gcc-internal-format, gfc-internal-format msgid "" "Variable at %L mentioned multiple times in clauses of the same OMP DECLARE " "TARGET directive" msgstr "" -#: fortran/openmp.cc:5518 +#: fortran/openmp.cc:5548 #, gcc-internal-format, gfc-internal-format msgid "" "OMP DECLARE TARGET variable at %L previously mentioned in LINK clause and " "later in %s clause" msgstr "" -#: fortran/openmp.cc:5524 +#: fortran/openmp.cc:5554 #, gcc-internal-format, gfc-internal-format msgid "" "OMP DECLARE TARGET variable at %L previously mentioned in TO or ENTER clause " "and later in LINK clause" msgstr "" -#: fortran/openmp.cc:5538 fortran/openmp.cc:5593 +#: fortran/openmp.cc:5568 fortran/openmp.cc:5623 #, gcc-internal-format msgid "" "List item %qs at %L set in previous OMP DECLARE TARGET directive to a " "different DEVICE_TYPE" msgstr "" -#: fortran/openmp.cc:5547 fortran/openmp.cc:5601 +#: fortran/openmp.cc:5577 fortran/openmp.cc:5631 #, gcc-internal-format, gfc-internal-format msgid "DEVICE_TYPE must be ANY when used with INDIRECT at %L" msgstr "" -#: fortran/openmp.cc:5557 +#: fortran/openmp.cc:5587 #, gcc-internal-format, gfc-internal-format msgid "" "OMP DECLARE TARGET COMMON at %L previously mentioned in LINK clause and " "later in %s clause" msgstr "" -#: fortran/openmp.cc:5563 +#: fortran/openmp.cc:5593 #, gcc-internal-format, gfc-internal-format msgid "" "OMP DECLARE TARGET COMMON at %L previously mentioned in TO or ENTER clause " "and later in LINK clause" msgstr "" -#: fortran/openmp.cc:5567 +#: fortran/openmp.cc:5597 #, gcc-internal-format, gfc-internal-format msgid "" "COMMON at %L mentioned multiple times in clauses of the same OMP DECLARE " "TARGET directive" msgstr "" -#: fortran/openmp.cc:5576 +#: fortran/openmp.cc:5606 #, gcc-internal-format, gfc-internal-format msgid "" "COMMON at %L set in previous OMP DECLARE TARGET directive to a different " "DEVICE_TYPE" msgstr "" -#: fortran/openmp.cc:5611 +#: fortran/openmp.cc:5641 #, gcc-internal-format, gfc-internal-format msgid "" "OMP DECLARE TARGET directive at %L with only DEVICE_TYPE or INDIRECT clauses " "is ignored" msgstr "" -#: fortran/openmp.cc:5622 +#: fortran/openmp.cc:5652 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !$OMP DECLARE TARGET list at %C" msgstr "" #. FIXME: constant integer expressions. -#: fortran/openmp.cc:5661 +#: fortran/openmp.cc:5691 #, gcc-internal-format, gfc-internal-format msgid "Expected trait-property-extension at %C" msgstr "" -#: fortran/openmp.cc:5676 fortran/openmp.cc:5773 fortran/openmp.cc:5904 -#: fortran/openmp.cc:6054 fortran/openmp.cc:6082 +#: fortran/openmp.cc:5706 fortran/openmp.cc:5803 fortran/openmp.cc:5934 +#: fortran/openmp.cc:6084 fortran/openmp.cc:6112 #, gcc-internal-format msgid "expected %<)%> at %C" msgstr "" -#: fortran/openmp.cc:5698 +#: fortran/openmp.cc:5728 #, gcc-internal-format, gfc-internal-format msgid "expected trait selector name at %C" msgstr "" -#: fortran/openmp.cc:5717 +#: fortran/openmp.cc:5747 #, gcc-internal-format msgid "unknown selector %qs for context selector set %qs at %C" msgstr "" -#: fortran/openmp.cc:5735 +#: fortran/openmp.cc:5765 #, gcc-internal-format msgid "selector %qs does not accept any properties at %C" msgstr "" -#: fortran/openmp.cc:5744 +#: fortran/openmp.cc:5774 #, gcc-internal-format msgid "" "%<score%> cannot be specified in traits in the %qs trait-selector-set at %C" msgstr "" -#: fortran/openmp.cc:5751 fortran/openmp.cc:5914 fortran/openmp.cc:6006 -#: fortran/openmp.cc:6073 +#: fortran/openmp.cc:5781 fortran/openmp.cc:5944 fortran/openmp.cc:6036 +#: fortran/openmp.cc:6103 #, gcc-internal-format msgid "expected %<(%> at %C" msgstr "" -#: fortran/openmp.cc:5759 +#: fortran/openmp.cc:5789 #, gcc-internal-format msgid "%<score%> argument must be constant integer expression at %C" msgstr "" -#: fortran/openmp.cc:5767 +#: fortran/openmp.cc:5797 #, gcc-internal-format msgid "%<score%> argument must be non-negative at %C" msgstr "" -#: fortran/openmp.cc:5779 +#: fortran/openmp.cc:5809 #, gcc-internal-format, gfc-internal-format msgid "expected : at %C" msgstr "" -#: fortran/openmp.cc:5801 +#: fortran/openmp.cc:5831 #, gcc-internal-format, gfc-internal-format msgid "expected identifier at %C" msgstr "" -#: fortran/openmp.cc:5820 +#: fortran/openmp.cc:5850 #, gcc-internal-format, gfc-internal-format msgid "expected identifier or string literal at %C" msgstr "" -#: fortran/openmp.cc:5841 +#: fortran/openmp.cc:5871 #, gcc-internal-format, gfc-internal-format msgid "expected expression at %C" msgstr "" -#: fortran/openmp.cc:5853 +#: fortran/openmp.cc:5883 #, gcc-internal-format, gfc-internal-format msgid "property must be a constant logical expression at %C" msgstr "" -#: fortran/openmp.cc:5856 +#: fortran/openmp.cc:5886 #, gcc-internal-format, gfc-internal-format msgid "property must be a constant integer expression at %C" msgstr "" -#: fortran/openmp.cc:5868 +#: fortran/openmp.cc:5898 #, gcc-internal-format, gfc-internal-format msgid "property must be a conforming device number at %C" msgstr "" -#: fortran/openmp.cc:5882 +#: fortran/openmp.cc:5912 #, gcc-internal-format, gfc-internal-format msgid "expected simd clause at %C" msgstr "" -#: fortran/openmp.cc:5955 +#: fortran/openmp.cc:5985 #, gcc-internal-format, gfc-internal-format msgid "expected context selector set name at %C" msgstr "" -#: fortran/openmp.cc:5962 +#: fortran/openmp.cc:5992 #, gcc-internal-format msgid "expected %<=%> at %C" msgstr "" -#: fortran/openmp.cc:5969 +#: fortran/openmp.cc:5999 #, gcc-internal-format msgid "expected %<{%> at %C" msgstr "" -#: fortran/openmp.cc:5984 +#: fortran/openmp.cc:6014 #, gcc-internal-format msgid "expected %<}%> at %C" msgstr "" -#: fortran/openmp.cc:6013 +#: fortran/openmp.cc:6043 #, gcc-internal-format, gfc-internal-format msgid "expected name at %C" msgstr "" -#: fortran/openmp.cc:6024 +#: fortran/openmp.cc:6054 #, gcc-internal-format, gfc-internal-format msgid "expected variant name at %C" msgstr "" -#: fortran/openmp.cc:6064 +#: fortran/openmp.cc:6094 #, gcc-internal-format msgid "expected %<match%> at %C" msgstr "" -#: fortran/openmp.cc:6115 +#: fortran/openmp.cc:6145 #, gcc-internal-format, gfc-internal-format msgid "Threadprivate variable at %C is an element of a COMMON block" msgstr "" -#: fortran/openmp.cc:6152 +#: fortran/openmp.cc:6182 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after OMP THREADPRIVATE at %C" msgstr "" -#: fortran/openmp.cc:6159 +#: fortran/openmp.cc:6189 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in !$OMP THREADPRIVATE list at %C" msgstr "" -#: fortran/openmp.cc:6265 +#: fortran/openmp.cc:6295 #, gcc-internal-format, gfc-internal-format msgid "" "Program unit at %L has OpenMP device constructs/routines but does not set !" "$OMP REQUIRES REVERSE_OFFLOAD but other program units do" msgstr "" -#: fortran/openmp.cc:6270 +#: fortran/openmp.cc:6300 #, gcc-internal-format, gfc-internal-format msgid "" "Program unit at %L has OpenMP device constructs/routines but does not set !" "$OMP REQUIRES UNIFIED_ADDRESS but other program units do" msgstr "" -#: fortran/openmp.cc:6275 +#: fortran/openmp.cc:6305 #, gcc-internal-format, gfc-internal-format msgid "" "Program unit at %L has OpenMP device constructs/routines but does not set !" "$OMP REQUIRES UNIFIED_SHARED_MEMORY but other program units do" msgstr "" -#: fortran/openmp.cc:6301 +#: fortran/openmp.cc:6331 #, gcc-internal-format msgid "" "!$OMP REQUIRES clause %qs specified via module %qs use at %L comes after " "using a device construct/routine" msgstr "" -#: fortran/openmp.cc:6305 +#: fortran/openmp.cc:6335 #, gcc-internal-format msgid "" "!$OMP REQUIRES clause %qs specified at %L comes after using a device " "construct/routine" msgstr "" -#: fortran/openmp.cc:6328 +#: fortran/openmp.cc:6358 #, gcc-internal-format msgid "" "!$OMP REQUIRES clause %<atomic_default_mem_order(%s)%> specified via module " @@ -79454,7 +79758,7 @@ msgid "" "might be through using a module)" msgstr "" -#: fortran/openmp.cc:6333 +#: fortran/openmp.cc:6363 #, gcc-internal-format msgid "" "!$OMP REQUIRES clause %<atomic_default_mem_order(%s)%> specified at %L " @@ -79462,477 +79766,477 @@ msgid "" "through using a module)" msgstr "" -#: fortran/openmp.cc:6344 +#: fortran/openmp.cc:6374 #, gcc-internal-format msgid "" "!$OMP REQUIRES clause %<atomic_default_mem_order(%s)%> specified via module " "%qs use at %L but same clause is not specified for the program unit" msgstr "" -#: fortran/openmp.cc:6349 +#: fortran/openmp.cc:6379 #, gcc-internal-format msgid "" "!$OMP REQUIRES clause %qs specified via module %qs use at %L but same clause " "is not specified for the program unit" msgstr "" -#: fortran/openmp.cc:6378 +#: fortran/openmp.cc:6408 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP REQUIRES at %C must appear in the specification part of a program unit" msgstr "" -#: fortran/openmp.cc:6456 +#: fortran/openmp.cc:6486 #, gcc-internal-format, gfc-internal-format msgid "" "Expected ACQ_REL, ACQUIRE, RELAXED, RELEASE or SEQ_CST for " "ATOMIC_DEFAULT_MEM_ORDER clause at %C" msgstr "" -#: fortran/openmp.cc:6472 +#: fortran/openmp.cc:6502 #, gcc-internal-format, gfc-internal-format msgid "Clause expected at %C" msgstr "" -#: fortran/openmp.cc:6478 +#: fortran/openmp.cc:6508 #, gcc-internal-format msgid "%qs clause at %L specified more than once" msgstr "" -#: fortran/openmp.cc:6481 +#: fortran/openmp.cc:6511 #, gcc-internal-format, gfc-internal-format msgid "" "Expected UNIFIED_ADDRESS, UNIFIED_SHARED_MEMORY, DYNAMIC_ALLOCATORS, " "REVERSE_OFFLOAD, or ATOMIC_DEFAULT_MEM_ORDER clause at %L" msgstr "" -#: fortran/openmp.cc:6507 +#: fortran/openmp.cc:6537 #, gcc-internal-format, gfc-internal-format msgid "Expected INCLUSIVE or EXCLUSIVE clause at %C" msgstr "" -#: fortran/openmp.cc:6513 +#: fortran/openmp.cc:6543 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after !$OMP SCAN at %C" msgstr "" -#: fortran/openmp.cc:6712 +#: fortran/openmp.cc:6742 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after TASKYIELD clause at %C" msgstr "" -#: fortran/openmp.cc:6800 +#: fortran/openmp.cc:6830 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP MASTER statement at %C" msgstr "" -#: fortran/openmp.cc:6832 +#: fortran/openmp.cc:6862 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP NOTHING statement at %C" msgstr "" -#: fortran/openmp.cc:6867 fortran/openmp.cc:6870 fortran/openmp.cc:6873 +#: fortran/openmp.cc:6897 fortran/openmp.cc:6900 fortran/openmp.cc:6903 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC at %L with %s clause is incompatible with READ or WRITE" msgstr "" -#: fortran/openmp.cc:6877 +#: fortran/openmp.cc:6907 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC at %L with %s clause requires %s clause" msgstr "" -#: fortran/openmp.cc:6907 +#: fortran/openmp.cc:6937 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC WRITE at %L incompatible with ACQUIRES clause implicitly " "provided by a REQUIRES directive" msgstr "" -#: fortran/openmp.cc:6918 +#: fortran/openmp.cc:6948 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC READ at %L incompatible with RELEASE clause implicitly provided " "by a REQUIRES directive" msgstr "" -#: fortran/openmp.cc:6936 +#: fortran/openmp.cc:6966 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC READ at %L incompatible with RELEASE clause" msgstr "" -#: fortran/openmp.cc:6946 +#: fortran/openmp.cc:6976 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC WRITE at %L incompatible with ACQUIRE clause" msgstr "" -#: fortran/openmp.cc:6983 +#: fortran/openmp.cc:7013 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after !$ACC ATOMIC statement at %C" msgstr "" -#: fortran/openmp.cc:6998 +#: fortran/openmp.cc:7028 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP BARRIER statement at %C" msgstr "" -#: fortran/openmp.cc:7054 +#: fortran/openmp.cc:7084 #, gcc-internal-format, gfc-internal-format msgid "" "Expected construct-type PARALLEL, SECTIONS, DO or TASKGROUP in $OMP " "CANCELLATION POINT statement at %C" msgstr "" -#: fortran/openmp.cc:7060 +#: fortran/openmp.cc:7090 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after $OMP CANCELLATION POINT statement at %C" msgstr "" -#: fortran/openmp.cc:7081 +#: fortran/openmp.cc:7111 #, gcc-internal-format, gfc-internal-format msgid "Unexpected junk after NOWAIT clause at %C" msgstr "" -#: fortran/openmp.cc:7120 +#: fortran/openmp.cc:7150 #, gcc-internal-format, gfc-internal-format msgid "%s clause at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.cc:7132 +#: fortran/openmp.cc:7162 #, gcc-internal-format, gfc-internal-format msgid "INTEGER expression of %s clause at %L must be positive" msgstr "" -#: fortran/openmp.cc:7144 +#: fortran/openmp.cc:7174 #, gcc-internal-format, gfc-internal-format msgid "INTEGER expression of %s clause at %L must be non-negative" msgstr "" -#: fortran/openmp.cc:7155 +#: fortran/openmp.cc:7185 #, gcc-internal-format msgid "Cray pointer object %qs of derived type in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7158 +#: fortran/openmp.cc:7188 #, gcc-internal-format msgid "Cray pointee object %qs of derived type in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7164 fortran/openmp.cc:9044 +#: fortran/openmp.cc:7194 fortran/openmp.cc:9074 #, gcc-internal-format msgid "POINTER object %qs of polymorphic type in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7169 +#: fortran/openmp.cc:7199 #, gcc-internal-format msgid "Cray pointer object %qs of polymorphic type in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7174 +#: fortran/openmp.cc:7204 #, gcc-internal-format msgid "Cray pointee object %qs of polymorphic type in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7184 fortran/openmp.cc:8529 fortran/openmp.cc:8806 +#: fortran/openmp.cc:7214 fortran/openmp.cc:8559 fortran/openmp.cc:8836 #, gcc-internal-format msgid "Assumed size array %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7187 +#: fortran/openmp.cc:7217 #, gcc-internal-format msgid "Assumed rank array %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7203 fortran/openmp.cc:8793 +#: fortran/openmp.cc:7233 fortran/openmp.cc:8823 #, gcc-internal-format msgid "POINTER object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7208 fortran/openmp.cc:9048 +#: fortran/openmp.cc:7238 fortran/openmp.cc:9078 #, gcc-internal-format msgid "Cray pointer object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7213 fortran/openmp.cc:9051 +#: fortran/openmp.cc:7243 fortran/openmp.cc:9081 #, gcc-internal-format msgid "Cray pointee object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7218 fortran/openmp.cc:9039 +#: fortran/openmp.cc:7248 fortran/openmp.cc:9069 #, gcc-internal-format msgid "ALLOCATABLE object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7221 +#: fortran/openmp.cc:7251 #, gcc-internal-format msgid "VALUE object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:7264 +#: fortran/openmp.cc:7294 #, gcc-internal-format, gfc-internal-format msgid "Implicitly declared function %s used in !$OMP DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:7313 +#: fortran/openmp.cc:7343 #, gcc-internal-format, gfc-internal-format msgid "Implicitly declared subroutine %s used in !$OMP DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:7349 +#: fortran/openmp.cc:7379 #, gcc-internal-format msgid "" "Unexpected function-result variable %qs at %L in declarative !$OMP ALLOCATE" msgstr "" -#: fortran/openmp.cc:7355 +#: fortran/openmp.cc:7385 #, gcc-internal-format msgid "Procedure pointer %qs not supported with !$OMP ALLOCATE at %L" msgstr "" -#: fortran/openmp.cc:7361 +#: fortran/openmp.cc:7391 #, gcc-internal-format msgid "" "Argument %qs at %L to declarative !$OMP ALLOCATE directive must be a variable" msgstr "" -#: fortran/openmp.cc:7368 +#: fortran/openmp.cc:7398 #, gcc-internal-format msgid "" "Argument %qs at %L to declarative !$OMP ALLOCATE shall be in the same scope " "as the variable declaration" msgstr "" -#: fortran/openmp.cc:7375 +#: fortran/openmp.cc:7405 #, gcc-internal-format msgid "" "Unexpected dummy argument %qs as argument at %L to declarative !$OMP ALLOCATE" msgstr "" -#: fortran/openmp.cc:7381 +#: fortran/openmp.cc:7411 #, gcc-internal-format msgid "" "Unexpected coarray argument %qs as argument at %L to declarative !$OMP " "ALLOCATE" msgstr "" -#: fortran/openmp.cc:7389 +#: fortran/openmp.cc:7419 #, gcc-internal-format msgid "Duplicated common block %</%s/%> in !$OMP ALLOCATE at %L" msgstr "" -#: fortran/openmp.cc:7396 +#: fortran/openmp.cc:7426 #, gcc-internal-format msgid "Duplicated variable %qs in !$OMP ALLOCATE at %L" msgstr "" -#: fortran/openmp.cc:7407 +#: fortran/openmp.cc:7437 #, gcc-internal-format msgid "Sorry, EQUIVALENCE object %qs not supported with !$OMP ALLOCATE at %L" msgstr "" -#: fortran/openmp.cc:7416 +#: fortran/openmp.cc:7446 #, gcc-internal-format msgid "" "Sorry, Cray pointers and pointees such as %qs are not supported with !$OMP " "ALLOCATE at %L" msgstr "" -#: fortran/openmp.cc:7425 +#: fortran/openmp.cc:7455 #, gcc-internal-format msgid "" "Unexpected allocatable variable %qs at %L in declarative !$OMP ALLOCATE " "directive" msgstr "" -#: fortran/openmp.cc:7430 +#: fortran/openmp.cc:7460 #, gcc-internal-format msgid "" "Unexpected pointer variable %qs at %L in declarative !$OMP ALLOCATE directive" msgstr "" -#: fortran/openmp.cc:7441 fortran/openmp.cc:7996 +#: fortran/openmp.cc:7471 fortran/openmp.cc:8026 #, gcc-internal-format, gfc-internal-format msgid "" "ALIGN requires a scalar positive constant integer alignment expression at %L " "that is a power of two" msgstr "" -#: fortran/openmp.cc:7456 +#: fortran/openmp.cc:7486 #, gcc-internal-format msgid "" "An ALLOCATOR clause is required as the list item %<%s%s%s%> at %L has the " "SAVE attribute" msgstr "" -#: fortran/openmp.cc:7461 +#: fortran/openmp.cc:7491 #, gcc-internal-format msgid "" "Predefined allocator required in ALLOCATOR clause at %L as the list item " "%<%s%s%s%> at %L has the SAVE attribute" msgstr "" -#: fortran/openmp.cc:7475 fortran/openmp.cc:7980 +#: fortran/openmp.cc:7505 fortran/openmp.cc:8010 #, gcc-internal-format msgid "" "Expected integer expression of the %<omp_allocator_handle_kind%> kind at %L" msgstr "" -#: fortran/openmp.cc:7491 +#: fortran/openmp.cc:7521 #, gcc-internal-format, gfc-internal-format msgid "HOLDS expression at %L must be a scalar logical expression" msgstr "" -#: fortran/openmp.cc:7527 +#: fortran/openmp.cc:7557 #, gcc-internal-format, gfc-internal-format msgid "ORDERED clause parameter is less than COLLAPSE at %L" msgstr "" -#: fortran/openmp.cc:7530 +#: fortran/openmp.cc:7560 #, gcc-internal-format, gfc-internal-format msgid "ORDER clause must not be used together ORDERED at %L" msgstr "" -#: fortran/openmp.cc:7537 fortran/openmp.cc:7548 fortran/resolve.cc:11043 -#: fortran/resolve.cc:12612 +#: fortran/openmp.cc:7567 fortran/openmp.cc:7578 fortran/resolve.cc:11290 +#: fortran/resolve.cc:12859 #, gcc-internal-format, gfc-internal-format msgid "IF clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/openmp.cc:7552 +#: fortran/openmp.cc:7582 #, gcc-internal-format, gfc-internal-format msgid "" "IF clause without modifier at %L used together with IF clauses with modifiers" msgstr "" -#: fortran/openmp.cc:7677 +#: fortran/openmp.cc:7707 #, gcc-internal-format, gfc-internal-format msgid "" "IF clause modifier %s at %L not appropriate for the current OpenMP construct" msgstr "" -#: fortran/openmp.cc:7687 +#: fortran/openmp.cc:7717 #, gcc-internal-format, gfc-internal-format msgid "SELF clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/openmp.cc:7696 +#: fortran/openmp.cc:7726 #, gcc-internal-format, gfc-internal-format msgid "FINAL clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/openmp.cc:7706 +#: fortran/openmp.cc:7736 #, gcc-internal-format, gfc-internal-format msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.cc:7711 +#: fortran/openmp.cc:7741 #, gcc-internal-format, gfc-internal-format msgid "" "INTEGER expression of SCHEDULE clause's chunk_size at %L must be positive" msgstr "" -#: fortran/openmp.cc:7718 +#: fortran/openmp.cc:7748 #, gcc-internal-format, gfc-internal-format msgid "Both MONOTONIC and NONMONOTONIC schedule modifiers specified at %L" msgstr "" -#: fortran/openmp.cc:7721 +#: fortran/openmp.cc:7751 #, gcc-internal-format, gfc-internal-format msgid "NONMONOTONIC schedule modifier specified with ORDERED clause at %L" msgstr "" -#: fortran/openmp.cc:7730 +#: fortran/openmp.cc:7760 #, gcc-internal-format, gfc-internal-format msgid "" "DEPOBJ in DEPOBJ construct at %L shall be a scalar integer of " "OMP_DEPEND_KIND kind" msgstr "" -#: fortran/openmp.cc:7751 +#: fortran/openmp.cc:7781 #, gcc-internal-format msgid "Variable %qs is not a dummy argument at %L" msgstr "" -#: fortran/openmp.cc:7786 +#: fortran/openmp.cc:7816 #, gcc-internal-format msgid "" "Object %qs is not a variable at %L; parameters cannot be and need not be " "copied" msgstr "" -#: fortran/openmp.cc:7790 +#: fortran/openmp.cc:7820 #, gcc-internal-format msgid "" "Object %qs is not a variable at %L; parameters cannot be and need not be " "mapped" msgstr "" -#: fortran/openmp.cc:7795 fortran/openmp.cc:11411 +#: fortran/openmp.cc:7825 fortran/openmp.cc:11441 #, gcc-internal-format msgid "Object %qs is not a variable at %L" msgstr "" -#: fortran/openmp.cc:7806 +#: fortran/openmp.cc:7836 #, gcc-internal-format msgid "" "%<inscan%> REDUCTION clause on construct other than DO, SIMD, DO SIMD, " "PARALLEL DO, PARALLEL DO SIMD at %L" msgstr "" -#: fortran/openmp.cc:7810 +#: fortran/openmp.cc:7840 #, gcc-internal-format msgid "" "ORDERED clause specified together with %<inscan%> REDUCTION clause at %L" msgstr "" -#: fortran/openmp.cc:7813 +#: fortran/openmp.cc:7843 #, gcc-internal-format msgid "" "SCHEDULE clause specified together with %<inscan%> REDUCTION clause at %L" msgstr "" -#: fortran/openmp.cc:7844 fortran/openmp.cc:7856 fortran/openmp.cc:7877 -#: fortran/openmp.cc:7889 fortran/openmp.cc:7912 fortran/openmp.cc:7920 -#: fortran/openmp.cc:7941 fortran/openmp.cc:7952 fortran/openmp.cc:7964 -#: fortran/openmp.cc:8199 fortran/openmp.cc:11435 +#: fortran/openmp.cc:7874 fortran/openmp.cc:7886 fortran/openmp.cc:7907 +#: fortran/openmp.cc:7919 fortran/openmp.cc:7942 fortran/openmp.cc:7950 +#: fortran/openmp.cc:7971 fortran/openmp.cc:7982 fortran/openmp.cc:7994 +#: fortran/openmp.cc:8229 fortran/openmp.cc:11465 #, gcc-internal-format msgid "Symbol %qs present on multiple clauses at %L" msgstr "" -#: fortran/openmp.cc:7885 +#: fortran/openmp.cc:7915 #, gcc-internal-format msgid "Symbol %qs has mixed component and non-component accesses at %L" msgstr "" -#: fortran/openmp.cc:7935 +#: fortran/openmp.cc:7965 #, gcc-internal-format msgid "Symbol %qs present on both data and map clauses at %L" msgstr "" -#: fortran/openmp.cc:8021 +#: fortran/openmp.cc:8051 #, gcc-internal-format msgid "%qs appears more than once in %<allocate%> at %L" msgstr "" -#: fortran/openmp.cc:8063 +#: fortran/openmp.cc:8093 #, gcc-internal-format msgid "" "%qs specified in %<allocate%> clause at %L but not in an explicit " "privatization clause" msgstr "" -#: fortran/openmp.cc:8091 +#: fortran/openmp.cc:8121 #, gcc-internal-format msgid "Unexpected coarray %qs in %<allocate%> at %L" msgstr "" -#: fortran/openmp.cc:8105 +#: fortran/openmp.cc:8135 #, gcc-internal-format msgid "" "%qs specified in %<allocate%> at %L but not in the associated ALLOCATE " "statement" msgstr "" -#: fortran/openmp.cc:8139 +#: fortran/openmp.cc:8169 #, gcc-internal-format msgid "" "%qs listed in %<allocate%> statement at %L but it is neither explicitly in " @@ -79940,772 +80244,772 @@ msgid "" "argument list" msgstr "" -#: fortran/openmp.cc:8150 +#: fortran/openmp.cc:8180 #, gcc-internal-format msgid "" "Unexpected coarray %qs in %<allocate%> at %L, implicitly listed in %<!$OMP " "ALLOCATE%> at %L" msgstr "" -#: fortran/openmp.cc:8175 +#: fortran/openmp.cc:8205 #, gcc-internal-format msgid "" "ALLOCATORS directive at %L inside a target region must specify an ALLOCATOR " "modifier for %qs" msgstr "" -#: fortran/openmp.cc:8179 +#: fortran/openmp.cc:8209 #, gcc-internal-format msgid "" "ALLOCATE directive at %L inside a target region must specify an ALLOCATOR " "clause for %qs" msgstr "" -#: fortran/openmp.cc:8183 +#: fortran/openmp.cc:8213 #, gcc-internal-format, gfc-internal-format msgid "" "ALLOCATE directive at %L inside a target region must specify an ALLOCATOR " "clause" msgstr "" -#: fortran/openmp.cc:8206 +#: fortran/openmp.cc:8236 #, gcc-internal-format msgid "Array %qs is not permitted in reduction at %L" msgstr "" -#: fortran/openmp.cc:8219 +#: fortran/openmp.cc:8249 #, gcc-internal-format msgid "Symbol %qs present on both FROM and TO clauses at %L" msgstr "" -#: fortran/openmp.cc:8237 +#: fortran/openmp.cc:8267 #, gcc-internal-format msgid "Non-THREADPRIVATE object %qs in COPYIN clause at %L" msgstr "" -#: fortran/openmp.cc:8243 +#: fortran/openmp.cc:8273 #, gcc-internal-format, gfc-internal-format msgid "NOWAIT clause must not be used with COPYPRIVATE clause at %L" msgstr "" -#: fortran/openmp.cc:8248 +#: fortran/openmp.cc:8278 #, gcc-internal-format msgid "Assumed size array %qs in COPYPRIVATE clause at %L" msgstr "" -#: fortran/openmp.cc:8251 +#: fortran/openmp.cc:8281 #, gcc-internal-format msgid "INTENT(IN) POINTER %qs in COPYPRIVATE clause at %L" msgstr "" -#: fortran/openmp.cc:8259 +#: fortran/openmp.cc:8289 #, gcc-internal-format msgid "THREADPRIVATE object %qs in SHARED clause at %L" msgstr "" -#: fortran/openmp.cc:8262 +#: fortran/openmp.cc:8292 #, gcc-internal-format msgid "Cray pointee %qs in SHARED clause at %L" msgstr "" -#: fortran/openmp.cc:8265 +#: fortran/openmp.cc:8295 #, gcc-internal-format msgid "Associate name %qs in SHARED clause at %L" msgstr "" -#: fortran/openmp.cc:8271 +#: fortran/openmp.cc:8301 #, gcc-internal-format msgid "DETACH event handle %qs in SHARED clause at %L" msgstr "" -#: fortran/openmp.cc:8286 +#: fortran/openmp.cc:8316 #, gcc-internal-format msgid "" "%qs in ALIGNED clause must be POINTER, ALLOCATABLE, Cray pointer or C_PTR at " "%L" msgstr "" -#: fortran/openmp.cc:8296 +#: fortran/openmp.cc:8326 #, gcc-internal-format msgid "" "%qs in ALIGNED clause at %L requires a scalar positive constant integer " "alignment expression" msgstr "" -#: fortran/openmp.cc:8322 +#: fortran/openmp.cc:8352 #, gcc-internal-format, gfc-internal-format msgid "Scalar integer expression for range begin expected at %L" msgstr "" -#: fortran/openmp.cc:8328 +#: fortran/openmp.cc:8358 #, gcc-internal-format, gfc-internal-format msgid "Scalar integer expression for range end expected at %L" msgstr "" -#: fortran/openmp.cc:8334 +#: fortran/openmp.cc:8364 #, gcc-internal-format, gfc-internal-format msgid "Scalar integer expression for range step expected at %L" msgstr "" -#: fortran/openmp.cc:8339 +#: fortran/openmp.cc:8369 #, gcc-internal-format, gfc-internal-format msgid "Nonzero range step expected at %L" msgstr "" -#: fortran/openmp.cc:8352 +#: fortran/openmp.cc:8382 #, gcc-internal-format, gfc-internal-format msgid "" "Dependence-type SINK used together with SOURCE on the same construct at %L" msgstr "" -#: fortran/openmp.cc:8362 +#: fortran/openmp.cc:8392 #, gcc-internal-format, gfc-internal-format msgid "SINK addend not a constant integer at %L" msgstr "" -#: fortran/openmp.cc:8368 +#: fortran/openmp.cc:8398 #, gcc-internal-format msgid "omp_cur_iteration at %L requires %<-1%> as logical offset" msgstr "" -#: fortran/openmp.cc:8378 +#: fortran/openmp.cc:8408 #, gcc-internal-format msgid "" "Locator %qs at %L in DEPEND clause of depobj type shall be a scalar integer " "of OMP_DEPEND_KIND kind" msgstr "" -#: fortran/openmp.cc:8389 +#: fortran/openmp.cc:8419 #, gcc-internal-format, gfc-internal-format msgid "" "Locator at %L in DEPEND clause of depobj type shall be a scalar integer of " "OMP_DEPEND_KIND kind" msgstr "" -#: fortran/openmp.cc:8433 +#: fortran/openmp.cc:8463 #, gcc-internal-format, gfc-internal-format msgid "Array is not contiguous at %L" msgstr "" -#: fortran/openmp.cc:8448 +#: fortran/openmp.cc:8478 #, gcc-internal-format msgid "%qs clause argument must be ALLOCATABLE or a POINTER at %L" msgstr "" -#: fortran/openmp.cc:8460 +#: fortran/openmp.cc:8490 #, gcc-internal-format, gfc-internal-format msgid "Unexpected substring reference in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8468 +#: fortran/openmp.cc:8498 #, gcc-internal-format, gfc-internal-format msgid "Unexpected complex-parts designator reference in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8477 fortran/openmp.cc:8495 +#: fortran/openmp.cc:8507 fortran/openmp.cc:8525 #, gcc-internal-format msgid "%qs in %s clause at %L is not a proper array section" msgstr "" -#: fortran/openmp.cc:8487 +#: fortran/openmp.cc:8517 #, gcc-internal-format, gfc-internal-format msgid "Stride should not be specified for array section in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8509 +#: fortran/openmp.cc:8539 #, gcc-internal-format msgid "%qs in %s clause at %L is a zero size array section" msgstr "" -#: fortran/openmp.cc:8535 +#: fortran/openmp.cc:8565 #, gcc-internal-format msgid "" "List item %qs with allocatable components is not permitted in map clause at " "%L" msgstr "" -#: fortran/openmp.cc:8561 +#: fortran/openmp.cc:8591 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET%s with map-type other than TO, FROM, TOFROM, or ALLOC on MAP clause " "at %L" msgstr "" -#: fortran/openmp.cc:8592 +#: fortran/openmp.cc:8622 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET ENTER DATA with map-type other than TO, TOFROM or ALLOC on MAP clause " "at %L" msgstr "" -#: fortran/openmp.cc:8621 +#: fortran/openmp.cc:8651 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET EXIT DATA with map-type other than FROM, TOFROM, RELEASE, or DELETE " "on MAP clause at %L" msgstr "" -#: fortran/openmp.cc:8637 fortran/openmp.cc:8777 +#: fortran/openmp.cc:8667 fortran/openmp.cc:8807 #, gcc-internal-format msgid "THREADPRIVATE object %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8640 fortran/openmp.cc:8780 +#: fortran/openmp.cc:8670 fortran/openmp.cc:8810 #, gcc-internal-format msgid "Cray pointee %qs in %s clause at %L" msgstr "" #. Non-TARGET (i.e. DISPATCH) requires a C_PTR. -#: fortran/openmp.cc:8652 +#: fortran/openmp.cc:8682 #, gcc-internal-format msgid "List item %qs in %s clause at %L must be of TYPE(C_PTR)" msgstr "" -#: fortran/openmp.cc:8709 +#: fortran/openmp.cc:8739 #, gcc-internal-format msgid "Memspace %qs at %L in USES_ALLOCATORS must be a predefined memory space" msgstr "" -#: fortran/openmp.cc:8717 +#: fortran/openmp.cc:8747 #, gcc-internal-format msgid "" "Allocator %qs at %L in USES_ALLOCATORS must be a scalar integer of kind " "%<omp_allocator_handle_kind%>" msgstr "" -#: fortran/openmp.cc:8725 +#: fortran/openmp.cc:8755 #, gcc-internal-format msgid "" "Allocator %qs at %L in USES_ALLOCATORS must either a variable or a " "predefined allocator" msgstr "" -#: fortran/openmp.cc:8730 +#: fortran/openmp.cc:8760 #, gcc-internal-format msgid "" "A memory space or traits array may not be specified for predefined allocator " "%qs at %L" msgstr "" -#: fortran/openmp.cc:8741 +#: fortran/openmp.cc:8771 #, gcc-internal-format msgid "" "Traits array %qs in USES_ALLOCATORS %L must be a one-dimensional named " "constant array of type %<omp_alloctrait%>" msgstr "" -#: fortran/openmp.cc:8771 +#: fortran/openmp.cc:8801 #, gcc-internal-format msgid "" "%<inscan%> and non-%<inscan%> %<reduction%> clauses on the same construct at " "%L" msgstr "" -#: fortran/openmp.cc:8783 +#: fortran/openmp.cc:8813 #, gcc-internal-format msgid "Associate name %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8790 +#: fortran/openmp.cc:8820 #, gcc-internal-format msgid "Procedure pointer %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8796 +#: fortran/openmp.cc:8826 #, gcc-internal-format msgid "Cray pointer %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8809 +#: fortran/openmp.cc:8839 #, gcc-internal-format msgid "Variable %qs in %s clause is used in NAMELIST statement at %L" msgstr "" #. case OMP_LIST_REDUCTION: -#: fortran/openmp.cc:8819 +#: fortran/openmp.cc:8849 #, gcc-internal-format msgid "INTENT(IN) POINTER %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8830 +#: fortran/openmp.cc:8860 #, gcc-internal-format msgid "DETACH event handle %qs in %s clause at %L" msgstr "" -#: fortran/openmp.cc:8854 +#: fortran/openmp.cc:8884 #, gcc-internal-format, gfc-internal-format msgid "Only DEFAULT permitted as reduction-modifier in REDUCTION clause at %L" msgstr "" -#: fortran/openmp.cc:8947 +#: fortran/openmp.cc:8977 #, gcc-internal-format, gfc-internal-format msgid "!$OMP DECLARE REDUCTION %s not found for type %s at %L" msgstr "" -#: fortran/openmp.cc:8975 +#: fortran/openmp.cc:9005 #, gcc-internal-format, gfc-internal-format msgid "LINEAR clause modifier used on DO or SIMD construct at %L" msgstr "" -#: fortran/openmp.cc:8981 +#: fortran/openmp.cc:9011 #, gcc-internal-format, gfc-internal-format msgid "" "LINEAR clause modifier other than VAL used on DO or SIMD construct at %L" msgstr "" -#: fortran/openmp.cc:8989 +#: fortran/openmp.cc:9019 #, gcc-internal-format msgid "LINEAR variable %qs must be INTEGER at %L" msgstr "" -#: fortran/openmp.cc:8994 +#: fortran/openmp.cc:9024 #, gcc-internal-format msgid "LINEAR dummy argument %qs with VALUE attribute with %s modifier at %L" msgstr "" -#: fortran/openmp.cc:9005 +#: fortran/openmp.cc:9035 #, gcc-internal-format msgid "" "%qs in LINEAR clause at %L requires a scalar integer linear-step expression" msgstr "" -#: fortran/openmp.cc:9022 +#: fortran/openmp.cc:9052 #, gcc-internal-format msgid "" "%qs in LINEAR clause at %L requires a constant integer linear-step " "expression or dummy argument specified in UNIFORM clause" msgstr "" -#: fortran/openmp.cc:9056 +#: fortran/openmp.cc:9086 #, gcc-internal-format msgid "%s clause variable %qs at %L is neither a POINTER nor an array" msgstr "" -#: fortran/openmp.cc:9116 +#: fortran/openmp.cc:9146 #, gcc-internal-format, gfc-internal-format msgid "NUM_TEAMS lower bound at %L larger than upper bound at %L" msgstr "" -#: fortran/openmp.cc:9129 +#: fortran/openmp.cc:9159 #, gcc-internal-format, gfc-internal-format msgid "Value of HINT clause at %L shall be a valid constant hint expression" msgstr "" -#: fortran/openmp.cc:9139 +#: fortran/openmp.cc:9169 #, gcc-internal-format, gfc-internal-format msgid "" "DIST_SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.cc:9169 +#: fortran/openmp.cc:9199 #, gcc-internal-format, gfc-internal-format msgid "Incompatible use of TILE and COLLAPSE at %L" msgstr "" -#: fortran/openmp.cc:9193 +#: fortran/openmp.cc:9223 #, gcc-internal-format, gfc-internal-format msgid "" "TARGET DATA must contain at least one MAP, USE_DEVICE_PTR, or " "USE_DEVICE_ADDR clause at %L" msgstr "" -#: fortran/openmp.cc:9196 +#: fortran/openmp.cc:9226 #, gcc-internal-format, gfc-internal-format msgid "%s must contain at least one MAP clause at %L" msgstr "" -#: fortran/openmp.cc:9206 +#: fortran/openmp.cc:9236 #, gcc-internal-format msgid "" "%qs at %L should be a scalar of type integer(kind=omp_event_handle_kind)" msgstr "" -#: fortran/openmp.cc:9211 +#: fortran/openmp.cc:9241 #, gcc-internal-format, gfc-internal-format msgid "The event handle at %L must not be an array element" msgstr "" -#: fortran/openmp.cc:9215 +#: fortran/openmp.cc:9245 #, gcc-internal-format, gfc-internal-format msgid "The event handle at %L must not be part of a derived type or class" msgstr "" -#: fortran/openmp.cc:9219 +#: fortran/openmp.cc:9249 #, gcc-internal-format msgid "" "%<DETACH%> clause at %L must not be used together with %<MERGEABLE%> clause" msgstr "" -#: fortran/openmp.cc:9226 +#: fortran/openmp.cc:9256 #, gcc-internal-format msgid "%<host_data%> construct at %L requires %<use_device%> clause" msgstr "" -#: fortran/openmp.cc:9380 +#: fortran/openmp.cc:9410 #, gcc-internal-format, gfc-internal-format msgid "Expected IF at %L in atomic compare capture" msgstr "" -#: fortran/openmp.cc:9388 +#: fortran/openmp.cc:9418 #, gcc-internal-format, gfc-internal-format msgid "Expected ELSE at %L in atomic compare capture" msgstr "" -#: fortran/openmp.cc:9500 +#: fortran/openmp.cc:9530 #, gcc-internal-format msgid "" "Expected %<==%>, %<.EQ.%> or %<.EQV.%> atomic comparison expression at %L" msgstr "" -#: fortran/openmp.cc:9506 +#: fortran/openmp.cc:9536 #, gcc-internal-format, gfc-internal-format msgid "Expected scalar intrinsic variable at %L in atomic comparison" msgstr "" -#: fortran/openmp.cc:9514 +#: fortran/openmp.cc:9544 #, gcc-internal-format, gfc-internal-format msgid "Expected scalar intrinsic expression at %L in atomic comparison" msgstr "" -#: fortran/openmp.cc:9522 +#: fortran/openmp.cc:9552 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L" msgstr "" -#: fortran/openmp.cc:9531 +#: fortran/openmp.cc:9561 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC statement must assign an expression of intrinsic type at %L" msgstr "" -#: fortran/openmp.cc:9538 +#: fortran/openmp.cc:9568 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC with ALLOCATABLE variable at %L" msgstr "" -#: fortran/openmp.cc:9555 +#: fortran/openmp.cc:9585 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC READ statement must read from a scalar variable of intrinsic " "type at %L" msgstr "" -#: fortran/openmp.cc:9560 +#: fortran/openmp.cc:9590 #, gcc-internal-format, gfc-internal-format msgid "" "expr in !$OMP ATOMIC WRITE assignment var = expr must be scalar and cannot " "reference var at %L" msgstr "" -#: fortran/openmp.cc:9572 +#: fortran/openmp.cc:9602 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC capture-statement must set a scalar variable of intrinsic type " "at %L" msgstr "" -#: fortran/openmp.cc:9580 +#: fortran/openmp.cc:9610 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC capture-statement requires a scalar variable of intrinsic type " "at %L" msgstr "" -#: fortran/openmp.cc:9590 +#: fortran/openmp.cc:9620 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC CAPTURE capture statement reads from different variable than " "update statement writes into at %L" msgstr "" -#: fortran/openmp.cc:9606 +#: fortran/openmp.cc:9636 #, gcc-internal-format msgid "" "For !$OMP ATOMIC COMPARE, the first operand in comparison at %L must be the " "variable %qs that the update statement writes into at %L" msgstr "" -#: fortran/openmp.cc:9614 +#: fortran/openmp.cc:9644 #, gcc-internal-format, gfc-internal-format msgid "" "expr in !$OMP ATOMIC COMPARE assignment var = expr must be scalar and cannot " "reference var at %L" msgstr "" -#: fortran/openmp.cc:9632 +#: fortran/openmp.cc:9662 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC UPDATE at %L with FAIL clause requiries either the COMPARE " "clause or using the intrinsic MIN/MAX procedure" msgstr "" -#: fortran/openmp.cc:9659 +#: fortran/openmp.cc:9689 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment operator must be binary +, *, -, /, .AND., .OR., ." "EQV. or .NEQV. at %L" msgstr "" -#: fortran/openmp.cc:9707 +#: fortran/openmp.cc:9737 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment must be var = var op expr or var = expr op var at %L" msgstr "" -#: fortran/openmp.cc:9721 +#: fortran/openmp.cc:9751 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC var = var op expr not mathematically equivalent to var = var op " "(expr) at %L" msgstr "" -#: fortran/openmp.cc:9754 +#: fortran/openmp.cc:9784 #, gcc-internal-format, gfc-internal-format msgid "" "expr in !$OMP ATOMIC assignment var = var op expr must be scalar and cannot " "reference var at %L" msgstr "" -#: fortran/openmp.cc:9778 +#: fortran/openmp.cc:9808 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment intrinsic IAND, IOR or IEOR must have two arguments " "at %L" msgstr "" -#: fortran/openmp.cc:9785 +#: fortran/openmp.cc:9815 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment intrinsic must be MIN, MAX, IAND, IOR or IEOR at %L" msgstr "" -#: fortran/openmp.cc:9808 +#: fortran/openmp.cc:9838 #, gcc-internal-format msgid "" "!$OMP ATOMIC intrinsic arguments except one must not reference %qs at %L" msgstr "" -#: fortran/openmp.cc:9815 +#: fortran/openmp.cc:9845 #, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L" msgstr "" -#: fortran/openmp.cc:9823 +#: fortran/openmp.cc:9853 #, gcc-internal-format msgid "First or last !$OMP ATOMIC intrinsic argument must be %qs at %L" msgstr "" -#: fortran/openmp.cc:9841 +#: fortran/openmp.cc:9871 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP ATOMIC assignment must have an operator or intrinsic on right hand " "side at %L" msgstr "" -#: fortran/openmp.cc:9846 +#: fortran/openmp.cc:9876 #, gcc-internal-format, gfc-internal-format msgid "unexpected !$OMP ATOMIC expression at %L" msgstr "" -#: fortran/openmp.cc:9948 +#: fortran/openmp.cc:9978 #, gcc-internal-format, gfc-internal-format msgid "" "With INSCAN at %L, expected loop body with !$OMP SCAN between two structured " "block sequences" msgstr "" -#: fortran/openmp.cc:9955 +#: fortran/openmp.cc:9985 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP SCAN at %L with zero executable statements in preceding structured " "block sequence" msgstr "" -#: fortran/openmp.cc:9962 +#: fortran/openmp.cc:9992 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP SCAN at %L with zero executable statements in succeeding structured " "block sequence" msgstr "" -#: fortran/openmp.cc:10176 +#: fortran/openmp.cc:10206 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain loop in intervening code at %L" msgstr "" -#: fortran/openmp.cc:10256 +#: fortran/openmp.cc:10286 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP directive in intervening code at %L" msgstr "" -#: fortran/openmp.cc:10268 fortran/openmp.cc:10294 +#: fortran/openmp.cc:10298 fortran/openmp.cc:10324 #, gcc-internal-format, gfc-internal-format msgid "%s cannot contain OpenMP API call in intervening code at %L" msgstr "" -#: fortran/openmp.cc:10822 +#: fortran/openmp.cc:10852 #, gcc-internal-format, gfc-internal-format msgid "%s cannot be a DO WHILE or DO without loop control at %L" msgstr "" -#: fortran/openmp.cc:10828 +#: fortran/openmp.cc:10858 #, gcc-internal-format, gfc-internal-format msgid "%s cannot be a DO CONCURRENT loop at %L" msgstr "" -#: fortran/openmp.cc:10835 +#: fortran/openmp.cc:10865 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable must be of type integer at %L" msgstr "" -#: fortran/openmp.cc:10842 +#: fortran/openmp.cc:10872 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable must not be THREADPRIVATE at %L" msgstr "" -#: fortran/openmp.cc:10857 +#: fortran/openmp.cc:10887 #, gcc-internal-format, gfc-internal-format msgid "" "%s iteration variable present on clause other than PRIVATE, LASTPRIVATE or " "ALLOCATE at %L" msgstr "" -#: fortran/openmp.cc:10861 +#: fortran/openmp.cc:10891 #, gcc-internal-format, gfc-internal-format msgid "" "%s iteration variable present on clause other than PRIVATE, LASTPRIVATE, " "ALLOCATE or LINEAR at %L" msgstr "" -#: fortran/openmp.cc:10868 +#: fortran/openmp.cc:10898 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable used in more than one loop at %L" msgstr "" -#: fortran/openmp.cc:10874 +#: fortran/openmp.cc:10904 #, gcc-internal-format, gfc-internal-format msgid "%s iteration variable at %L is bound in intervening code" msgstr "" -#: fortran/openmp.cc:10883 +#: fortran/openmp.cc:10913 #, gcc-internal-format, gfc-internal-format msgid "%s loop start expression not in canonical form at %L" msgstr "" -#: fortran/openmp.cc:10890 +#: fortran/openmp.cc:10920 #, gcc-internal-format, gfc-internal-format msgid "%s loop start expression at %L uses variable bound in intervening code" msgstr "" -#: fortran/openmp.cc:10899 +#: fortran/openmp.cc:10929 #, gcc-internal-format, gfc-internal-format msgid "%s loop end expression not in canonical form at %L" msgstr "" -#: fortran/openmp.cc:10906 +#: fortran/openmp.cc:10936 #, gcc-internal-format, gfc-internal-format msgid "%s loop end expression at %L uses variable bound in intervening code" msgstr "" -#: fortran/openmp.cc:10913 +#: fortran/openmp.cc:10943 #, gcc-internal-format, gfc-internal-format msgid "%s loop bounds reference different iteration variables at %L" msgstr "" -#: fortran/openmp.cc:10919 +#: fortran/openmp.cc:10949 #, gcc-internal-format, gfc-internal-format msgid "%s loop increment not in canonical form at %L" msgstr "" -#: fortran/openmp.cc:10926 +#: fortran/openmp.cc:10956 #, gcc-internal-format, gfc-internal-format msgid "" "%s loop increment expression at %L uses variable bound in intervening code" msgstr "" #. Parse error, can't recover from this. -#: fortran/openmp.cc:10944 +#: fortran/openmp.cc:10974 #, gcc-internal-format, gfc-internal-format msgid "not enough DO loops for collapsed %s (level %d) at %L" msgstr "" -#: fortran/openmp.cc:10956 +#: fortran/openmp.cc:10986 #, gcc-internal-format, gfc-internal-format msgid "%s inner loops must be perfectly nested with ORDERED clause at %L" msgstr "" -#: fortran/openmp.cc:10963 +#: fortran/openmp.cc:10993 #, gcc-internal-format, gfc-internal-format msgid "" "%s inner loops must be perfectly nested with REDUCTION INSCAN clause at %L" msgstr "" -#: fortran/openmp.cc:11190 fortran/openmp.cc:11203 +#: fortran/openmp.cc:11220 fortran/openmp.cc:11233 #, gcc-internal-format, gfc-internal-format msgid "The %s directive cannot be specified within a %s region at %L" msgstr "" -#: fortran/openmp.cc:11222 +#: fortran/openmp.cc:11252 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP cannot be a DO WHILE or DO without loop control at %L" msgstr "" -#: fortran/openmp.cc:11228 +#: fortran/openmp.cc:11258 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP cannot be a DO CONCURRENT loop at %L" msgstr "" -#: fortran/openmp.cc:11234 +#: fortran/openmp.cc:11264 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP iteration variable must be of type integer at %L" msgstr "" -#: fortran/openmp.cc:11250 +#: fortran/openmp.cc:11280 #, gcc-internal-format, gfc-internal-format msgid "!$ACC LOOP %s loops don't form rectangular iteration space at %L" msgstr "" -#: fortran/openmp.cc:11262 +#: fortran/openmp.cc:11292 #, gcc-internal-format, gfc-internal-format msgid "%s !$ACC LOOP loops not perfectly nested at %L" msgstr "" -#: fortran/openmp.cc:11272 fortran/openmp.cc:11281 +#: fortran/openmp.cc:11302 fortran/openmp.cc:11311 #, gcc-internal-format, gfc-internal-format msgid "not enough DO loops for %s !$ACC LOOP at %L" msgstr "" -#: fortran/openmp.cc:11297 +#: fortran/openmp.cc:11327 #, gcc-internal-format, gfc-internal-format msgid "" "Tiled loop cannot be parallelized across gangs, workers and vectors at the " "same time at %L" msgstr "" -#: fortran/openmp.cc:11318 +#: fortran/openmp.cc:11348 #, gcc-internal-format, gfc-internal-format msgid "TILE requires constant expression at %L" msgstr "" -#: fortran/openmp.cc:11418 +#: fortran/openmp.cc:11448 #, gcc-internal-format msgid "Array sections: %qs not allowed in !$ACC DECLARE at %L" msgstr "" -#: fortran/openmp.cc:11465 +#: fortran/openmp.cc:11495 #, gcc-internal-format msgid "" "NAME %qs does not refer to a subroutine or function in !$ACC ROUTINE " "( NAME ) at %L" msgstr "" -#: fortran/openmp.cc:11471 +#: fortran/openmp.cc:11501 #, gcc-internal-format msgid "NAME %qs invalid in !$ACC ROUTINE ( NAME ) at %L" msgstr "" -#: fortran/openmp.cc:11539 +#: fortran/openmp.cc:11569 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP TARGET region at %L with a nested TEAMS at %L may not contain any " @@ -80713,83 +81017,83 @@ msgid "" "construct" msgstr "" -#: fortran/openmp.cc:11543 +#: fortran/openmp.cc:11573 #, gcc-internal-format, gfc-internal-format msgid "" "!$OMP TARGET region at %L with a nested TEAMS may not contain any other " "statement, declaration or directive outside of the single TEAMS construct" msgstr "" -#: fortran/openmp.cc:11637 +#: fortran/openmp.cc:11667 #, gcc-internal-format, gfc-internal-format msgid "OMP TARGET UPDATE at %L requires at least one TO or FROM clause" msgstr "" -#: fortran/openmp.cc:11651 +#: fortran/openmp.cc:11681 #, gcc-internal-format, gfc-internal-format msgid "" "OMP CRITICAL at %L with HINT clause requires a NAME, except when " "omp_sync_hint_none is used" msgstr "" -#: fortran/openmp.cc:11657 +#: fortran/openmp.cc:11687 #, gcc-internal-format msgid "" "Unexpected !$OMP SCAN at %L outside loop construct with %<inscan%> REDUCTION " "clause" msgstr "" -#: fortran/openmp.cc:11678 +#: fortran/openmp.cc:11708 #, gcc-internal-format msgid "!$OMP DECLARE SIMD should refer to containing procedure %qs at %L" msgstr "" -#: fortran/openmp.cc:11702 +#: fortran/openmp.cc:11732 #, gcc-internal-format, gfc-internal-format msgid "" "Variable other than OMP_PRIV or OMP_ORIG used in INITIALIZER clause of !$OMP " "DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:11710 +#: fortran/openmp.cc:11740 #, gcc-internal-format, gfc-internal-format msgid "" "Variable other than OMP_OUT or OMP_IN used in combiner of !$OMP DECLARE " "REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:11739 +#: fortran/openmp.cc:11769 #, gcc-internal-format, gfc-internal-format msgid "Invalid operator for !$OMP DECLARE REDUCTION %s at %L" msgstr "" -#: fortran/openmp.cc:11761 +#: fortran/openmp.cc:11791 #, gcc-internal-format, gfc-internal-format msgid "CHARACTER length in !$OMP DECLARE REDUCTION %s not constant at %L" msgstr "" -#: fortran/openmp.cc:11777 +#: fortran/openmp.cc:11807 #, gcc-internal-format, gfc-internal-format msgid "" "Subroutine call with alternate returns in combiner of !$OMP DECLARE " "REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:11792 +#: fortran/openmp.cc:11822 #, gcc-internal-format, gfc-internal-format msgid "" "Subroutine call with alternate returns in INITIALIZER clause of !$OMP " "DECLARE REDUCTION at %L" msgstr "" -#: fortran/openmp.cc:11802 +#: fortran/openmp.cc:11832 #, gcc-internal-format, gfc-internal-format msgid "" "One of actual subroutine arguments in INITIALIZER clause of !$OMP DECLARE " "REDUCTION must be OMP_PRIV at %L" msgstr "" -#: fortran/openmp.cc:11810 +#: fortran/openmp.cc:11840 #, gcc-internal-format, gfc-internal-format msgid "" "Missing INITIALIZER clause for !$OMP DECLARE REDUCTION of derived type " @@ -80996,92 +81300,92 @@ msgstr "" msgid "Bad continuation line at %C" msgstr "" -#: fortran/parse.cc:2059 +#: fortran/parse.cc:2060 #, gcc-internal-format, gfc-internal-format msgid "FORMAT statement at %L does not have a statement label" msgstr "" -#: fortran/parse.cc:2974 +#: fortran/parse.cc:2975 #, gcc-internal-format msgid "gfc_ascii_statement(): Bad statement code" msgstr "" -#: fortran/parse.cc:3120 +#: fortran/parse.cc:3124 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement at %C" msgstr "" -#: fortran/parse.cc:3277 +#: fortran/parse.cc:3281 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C cannot follow %s statement at %L" msgstr "" -#: fortran/parse.cc:3294 +#: fortran/parse.cc:3298 #, gcc-internal-format msgid "Unexpected end of file in %qs" msgstr "" -#: fortran/parse.cc:3329 +#: fortran/parse.cc:3333 #, gcc-internal-format msgid "Derived-type %qs with SEQUENCE must not have a CONTAINS section at %C" msgstr "" -#: fortran/parse.cc:3332 +#: fortran/parse.cc:3336 #, gcc-internal-format msgid "Derived-type %qs with BIND(C) must not have a CONTAINS section at %C" msgstr "" -#: fortran/parse.cc:3352 +#: fortran/parse.cc:3356 #, gcc-internal-format, gfc-internal-format msgid "Components in TYPE at %C must precede CONTAINS" msgstr "" -#: fortran/parse.cc:3356 +#: fortran/parse.cc:3360 #, gcc-internal-format, gfc-internal-format msgid "Type-bound procedure at %C" msgstr "" -#: fortran/parse.cc:3364 +#: fortran/parse.cc:3368 #, gcc-internal-format, gfc-internal-format msgid "GENERIC binding at %C" msgstr "" -#: fortran/parse.cc:3372 +#: fortran/parse.cc:3376 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure declaration at %C" msgstr "" -#: fortran/parse.cc:3384 +#: fortran/parse.cc:3388 #, gcc-internal-format, gfc-internal-format msgid "Derived type definition at %C with empty CONTAINS section" msgstr "" -#: fortran/parse.cc:3394 fortran/parse.cc:3849 +#: fortran/parse.cc:3398 fortran/parse.cc:3853 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement in TYPE at %C must be inside a MODULE" msgstr "" -#: fortran/parse.cc:3401 +#: fortran/parse.cc:3405 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement at %C must precede procedure bindings" msgstr "" -#: fortran/parse.cc:3408 fortran/parse.cc:3862 +#: fortran/parse.cc:3412 fortran/parse.cc:3866 #, gcc-internal-format, gfc-internal-format msgid "Duplicate PRIVATE statement at %C" msgstr "" -#: fortran/parse.cc:3418 +#: fortran/parse.cc:3422 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE statement at %C must precede CONTAINS" msgstr "" -#: fortran/parse.cc:3422 +#: fortran/parse.cc:3426 #, gcc-internal-format, gfc-internal-format msgid "Already inside a CONTAINS block at %C" msgstr "" -#: fortran/parse.cc:3541 +#: fortran/parse.cc:3545 #, gcc-internal-format, gfc-internal-format msgid "" "Component %s at %L of type LOCK_TYPE must have a codimension or be a " @@ -81089,27 +81393,27 @@ msgid "" "pointer attribute" msgstr "" -#: fortran/parse.cc:3547 +#: fortran/parse.cc:3551 #, gcc-internal-format, gfc-internal-format msgid "" "Pointer component %s at %L has a noncoarray subcomponent of type LOCK_TYPE, " "which must have a codimension or be a subcomponent of a coarray" msgstr "" -#: fortran/parse.cc:3552 +#: fortran/parse.cc:3556 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L of type LOCK_TYPE must have a codimension" msgstr "" -#: fortran/parse.cc:3556 +#: fortran/parse.cc:3560 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L must have a codimension as it has a " "noncoarray subcomponent of type LOCK_TYPE" msgstr "" -#: fortran/parse.cc:3561 +#: fortran/parse.cc:3565 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type LOCK_TYPE or with subcomponent of type " @@ -81118,7 +81422,7 @@ msgid "" "subcomponent exists)" msgstr "" -#: fortran/parse.cc:3568 +#: fortran/parse.cc:3572 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type LOCK_TYPE or with subcomponent of type " @@ -81127,7 +81431,7 @@ msgid "" "codimension or a coarray subcomponent)" msgstr "" -#: fortran/parse.cc:3578 +#: fortran/parse.cc:3582 #, gcc-internal-format, gfc-internal-format msgid "" "Component %s at %L of type EVENT_TYPE must have a codimension or be a " @@ -81135,27 +81439,27 @@ msgid "" "pointer attribute" msgstr "" -#: fortran/parse.cc:3584 +#: fortran/parse.cc:3588 #, gcc-internal-format, gfc-internal-format msgid "" "Pointer component %s at %L has a noncoarray subcomponent of type EVENT_TYPE, " "which must have a codimension or be a subcomponent of a coarray" msgstr "" -#: fortran/parse.cc:3589 +#: fortran/parse.cc:3593 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L of type EVENT_TYPE must have a codimension" msgstr "" -#: fortran/parse.cc:3593 +#: fortran/parse.cc:3597 #, gcc-internal-format, gfc-internal-format msgid "" "Allocatable component %s at %L must have a codimension as it has a " "noncoarray subcomponent of type EVENT_TYPE" msgstr "" -#: fortran/parse.cc:3598 +#: fortran/parse.cc:3602 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type EVENT_TYPE or with subcomponent of " @@ -81164,7 +81468,7 @@ msgid "" "subcomponent exists)" msgstr "" -#: fortran/parse.cc:3605 +#: fortran/parse.cc:3609 #, gcc-internal-format, gfc-internal-format msgid "" "Noncoarray component %s at %L of type EVENT_TYPE or with subcomponent of " @@ -81173,331 +81477,331 @@ msgid "" "codimension or a coarray subcomponent)" msgstr "" -#: fortran/parse.cc:3657 +#: fortran/parse.cc:3661 #, gcc-internal-format, gfc-internal-format msgid "failed to create map component '%s'" msgstr "" -#: fortran/parse.cc:3690 +#: fortran/parse.cc:3694 #, gcc-internal-format, gfc-internal-format msgid "failed to create union component '%s'" msgstr "" -#: fortran/parse.cc:3745 +#: fortran/parse.cc:3749 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in nested structure declaration at %C" msgstr "" -#: fortran/parse.cc:3832 +#: fortran/parse.cc:3836 #, gcc-internal-format, gfc-internal-format msgid "FINAL declaration at %C must be inside CONTAINS" msgstr "" -#: fortran/parse.cc:3840 +#: fortran/parse.cc:3844 #, gcc-internal-format, gfc-internal-format msgid "Derived type definition at %C without components" msgstr "" -#: fortran/parse.cc:3856 +#: fortran/parse.cc:3860 #, gcc-internal-format, gfc-internal-format msgid "PRIVATE statement at %C must precede structure components" msgstr "" -#: fortran/parse.cc:3873 +#: fortran/parse.cc:3877 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE statement at %C must precede structure components" msgstr "" -#: fortran/parse.cc:3879 +#: fortran/parse.cc:3883 #, gcc-internal-format, gfc-internal-format msgid "SEQUENCE attribute at %C already specified in TYPE statement" msgstr "" -#: fortran/parse.cc:3884 +#: fortran/parse.cc:3888 #, gcc-internal-format, gfc-internal-format msgid "Duplicate SEQUENCE statement at %C" msgstr "" -#: fortran/parse.cc:3894 +#: fortran/parse.cc:3898 #, gcc-internal-format, gfc-internal-format msgid "CONTAINS block in derived type definition at %C" msgstr "" -#: fortran/parse.cc:3952 +#: fortran/parse.cc:3956 #, gcc-internal-format, gfc-internal-format msgid "ENUM declaration at %C has no ENUMERATORS" msgstr "" -#: fortran/parse.cc:4039 +#: fortran/parse.cc:4043 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in INTERFACE block at %C" msgstr "" -#: fortran/parse.cc:4064 +#: fortran/parse.cc:4068 #, gcc-internal-format msgid "" "Name %qs of ABSTRACT INTERFACE at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/parse.cc:4095 +#: fortran/parse.cc:4099 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement at %C in INTERFACE body" msgstr "" -#: fortran/parse.cc:4113 +#: fortran/parse.cc:4117 #, gcc-internal-format msgid "" "INTERFACE procedure %qs at %L has the same name as the enclosing procedure" msgstr "" -#: fortran/parse.cc:4252 +#: fortran/parse.cc:4256 #, gcc-internal-format, gfc-internal-format msgid "%s statement is not allowed inside of BLOCK at %C" msgstr "" -#: fortran/parse.cc:4284 +#: fortran/parse.cc:4288 #, gcc-internal-format, gfc-internal-format msgid "%s statement is not allowed inside of BLOCK DATA at %C" msgstr "" -#: fortran/parse.cc:4368 +#: fortran/parse.cc:4372 #, gcc-internal-format, gfc-internal-format msgid "%s statement must appear in a MODULE" msgstr "" -#: fortran/parse.cc:4376 +#: fortran/parse.cc:4380 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C follows another accessibility specification" msgstr "" -#: fortran/parse.cc:4428 +#: fortran/parse.cc:4432 #, gcc-internal-format msgid "Bad kind expression for function %qs at %L" msgstr "" -#: fortran/parse.cc:4432 +#: fortran/parse.cc:4436 #, gcc-internal-format msgid "The type for function %qs at %L is not accessible" msgstr "" -#: fortran/parse.cc:4492 +#: fortran/parse.cc:4496 #, gcc-internal-format, gfc-internal-format msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE" msgstr "" -#: fortran/parse.cc:4514 +#: fortran/parse.cc:4518 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in WHERE block at %C" msgstr "" -#: fortran/parse.cc:4573 +#: fortran/parse.cc:4577 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in FORALL block at %C" msgstr "" -#: fortran/parse.cc:4624 +#: fortran/parse.cc:4628 #, gcc-internal-format, gfc-internal-format msgid "ELSE IF statement at %C cannot follow ELSE statement at %L" msgstr "" -#: fortran/parse.cc:4642 +#: fortran/parse.cc:4646 #, gcc-internal-format, gfc-internal-format msgid "Duplicate ELSE statements at %L and %C" msgstr "" -#: fortran/parse.cc:4703 +#: fortran/parse.cc:4707 #, gcc-internal-format, gfc-internal-format msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C" msgstr "" -#: fortran/parse.cc:4787 +#: fortran/parse.cc:4791 #, gcc-internal-format, gfc-internal-format msgid "" "Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at " "%C" msgstr "" -#: fortran/parse.cc:4863 +#: fortran/parse.cc:4867 #, gcc-internal-format, gfc-internal-format msgid "Expected RANK or RANK DEFAULT following SELECT RANK at %C" msgstr "" -#: fortran/parse.cc:4927 +#: fortran/parse.cc:4931 #, gcc-internal-format msgid "Variable %qs at %C cannot be redefined inside loop beginning at %L" msgstr "" -#: fortran/parse.cc:4960 +#: fortran/parse.cc:4964 #, gcc-internal-format, gfc-internal-format msgid "End of nonblock DO statement at %C is within another block" msgstr "" -#: fortran/parse.cc:4970 +#: fortran/parse.cc:4974 #, gcc-internal-format, gfc-internal-format msgid "End of nonblock DO statement at %C is interwoven with another DO loop" msgstr "" -#: fortran/parse.cc:4996 +#: fortran/parse.cc:5000 #, gcc-internal-format, gfc-internal-format msgid "CRITICAL block inside of OpenACC region at %C" msgstr "" -#: fortran/parse.cc:4997 +#: fortran/parse.cc:5001 #, gcc-internal-format, gfc-internal-format msgid "CRITICAL block inside of OpenMP region at %C" msgstr "" -#: fortran/parse.cc:5023 +#: fortran/parse.cc:5027 #, gcc-internal-format, gfc-internal-format msgid "Statement label in END CRITICAL at %C does not match CRITICAL label" msgstr "" -#: fortran/parse.cc:5092 fortran/parse.cc:5951 +#: fortran/parse.cc:5096 fortran/parse.cc:5977 #, gcc-internal-format, gfc-internal-format msgid "BLOCK construct at %C" msgstr "" -#: fortran/parse.cc:5127 +#: fortran/parse.cc:5131 #, gcc-internal-format, gfc-internal-format msgid "ASSOCIATE construct at %C" msgstr "" -#: fortran/parse.cc:5384 +#: fortran/parse.cc:5410 #, gcc-internal-format, gfc-internal-format msgid "Statement label in ENDDO at %C doesn't match DO label" msgstr "" -#: fortran/parse.cc:5400 +#: fortran/parse.cc:5426 #, gcc-internal-format, gfc-internal-format msgid "Named block DO at %L requires matching ENDDO name" msgstr "" -#: fortran/parse.cc:5557 fortran/parse.cc:6109 fortran/parse.cc:6127 +#: fortran/parse.cc:5583 fortran/parse.cc:6135 fortran/parse.cc:6153 #, gcc-internal-format, gfc-internal-format msgid "Duplicated NOWAIT clause on %s and %s at %C" msgstr "" -#: fortran/parse.cc:5658 fortran/parse.cc:5720 +#: fortran/parse.cc:5684 fortran/parse.cc:5746 #, gcc-internal-format, gfc-internal-format msgid "OpenACC directive inside of CRITICAL block at %C" msgstr "" -#: fortran/parse.cc:5695 +#: fortran/parse.cc:5721 #, gcc-internal-format, gfc-internal-format msgid "Expecting %s at %C" msgstr "" -#: fortran/parse.cc:5739 +#: fortran/parse.cc:5765 #, gcc-internal-format, gfc-internal-format msgid "Expected DO loop at %C" msgstr "" -#: fortran/parse.cc:5759 +#: fortran/parse.cc:5785 #, gcc-internal-format, gfc-internal-format msgid "Redundant !$ACC END LOOP at %C" msgstr "" -#: fortran/parse.cc:5809 +#: fortran/parse.cc:5835 #, gcc-internal-format, gfc-internal-format msgid "%s statements at %L and %L have both no list item but only one may" msgstr "" -#: fortran/parse.cc:5829 +#: fortran/parse.cc:5855 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE or %s statement" msgstr "" -#: fortran/parse.cc:5832 +#: fortran/parse.cc:5858 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s at %C; expected ALLOCATE statement after %s" msgstr "" -#: fortran/parse.cc:6120 +#: fortran/parse.cc:6146 #, gcc-internal-format, gfc-internal-format msgid "Name after !$omp critical and !$omp end critical does not match at %C" msgstr "" -#: fortran/parse.cc:6195 +#: fortran/parse.cc:6221 #, gcc-internal-format, gfc-internal-format msgid "%s statement at %C cannot terminate a non-block DO loop" msgstr "" -#: fortran/parse.cc:6209 +#: fortran/parse.cc:6235 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %C after the first executable statement" msgstr "" -#: fortran/parse.cc:6365 +#: fortran/parse.cc:6391 #, gcc-internal-format msgid "%<GCC unroll%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6368 +#: fortran/parse.cc:6394 #, gcc-internal-format msgid "%<GCC ivdep%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6371 +#: fortran/parse.cc:6397 #, gcc-internal-format msgid "%<GCC vector%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6374 +#: fortran/parse.cc:6400 #, gcc-internal-format msgid "%<GCC novector%> directive not at the start of a loop at %C" msgstr "" -#: fortran/parse.cc:6490 +#: fortran/parse.cc:6516 #, gcc-internal-format msgid "Contained procedure %qs at %C is already ambiguous" msgstr "" -#: fortran/parse.cc:6547 +#: fortran/parse.cc:6573 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in CONTAINS section at %C" msgstr "" -#: fortran/parse.cc:6572 +#: fortran/parse.cc:6598 #, gcc-internal-format, gfc-internal-format msgid "CONTAINS statement without FUNCTION or SUBROUTINE statement at %L" msgstr "" -#: fortran/parse.cc:6686 +#: fortran/parse.cc:6712 #, gcc-internal-format, gfc-internal-format msgid "CONTAINS statement at %C is already in a contained program unit" msgstr "" -#: fortran/parse.cc:6738 +#: fortran/parse.cc:6764 #, gcc-internal-format msgid "Global binding name %qs at %L is already being used as a %s at %L" msgstr "" -#: fortran/parse.cc:6742 +#: fortran/parse.cc:6768 #, gcc-internal-format msgid "Global name %qs at %L is already being used as a %s at %L" msgstr "" -#: fortran/parse.cc:6748 +#: fortran/parse.cc:6774 #, gcc-internal-format msgid "Global binding name %qs at %L is already being used at %L" msgstr "" -#: fortran/parse.cc:6751 +#: fortran/parse.cc:6777 #, gcc-internal-format msgid "Global name %qs at %L is already being used at %L" msgstr "" -#: fortran/parse.cc:6773 +#: fortran/parse.cc:6799 #, gcc-internal-format, gfc-internal-format msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L" msgstr "" -#: fortran/parse.cc:6799 +#: fortran/parse.cc:6825 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in BLOCK DATA at %C" msgstr "" -#: fortran/parse.cc:6902 +#: fortran/parse.cc:6928 #, gcc-internal-format, gfc-internal-format msgid "Unexpected %s statement in MODULE at %C" msgstr "" @@ -81505,7 +81809,7 @@ msgstr "" #. If we see a duplicate main program, shut down. If the second #. instance is an implied main program, i.e. data decls or executable #. statements, we're in for lots of errors. -#: fortran/parse.cc:7403 +#: fortran/parse.cc:7429 #, gcc-internal-format, gfc-internal-format msgid "Two main PROGRAMs at %L and %C" msgstr "" @@ -81740,349 +82044,349 @@ msgstr "" msgid "extend_ref(): Bad tail" msgstr "" -#: fortran/primary.cc:2073 +#: fortran/primary.cc:2097 #, gcc-internal-format msgid "" "Array section designator, e.g. %<(:)%>, is required besides the coarray " "designator %<[...]%> at %C" msgstr "" -#: fortran/primary.cc:2081 +#: fortran/primary.cc:2105 #, gcc-internal-format msgid "Coarray designator at %C but %qs is not a coarray" msgstr "" -#: fortran/primary.cc:2233 +#: fortran/primary.cc:2329 #, gcc-internal-format msgid "Symbol %qs at %C has no IMPLICIT type" msgstr "" -#: fortran/primary.cc:2240 +#: fortran/primary.cc:2336 #, gcc-internal-format msgid "Unexpected %<%c%> for nonderived-type variable %qs at %C" msgstr "" -#: fortran/primary.cc:2261 +#: fortran/primary.cc:2357 #, gcc-internal-format, gfc-internal-format msgid "Expected structure component name at %C" msgstr "" -#: fortran/primary.cc:2281 fortran/primary.cc:2423 +#: fortran/primary.cc:2378 fortran/primary.cc:2553 #, gcc-internal-format, gfc-internal-format msgid "RE or IM part_ref at %C" msgstr "" -#: fortran/primary.cc:2300 fortran/primary.cc:2428 +#: fortran/primary.cc:2430 fortran/primary.cc:2558 #, gcc-internal-format, gfc-internal-format msgid "The RE or IM part_ref at %C must be applied to a COMPLEX expression" msgstr "" -#: fortran/primary.cc:2307 fortran/primary.cc:2441 +#: fortran/primary.cc:2437 fortran/primary.cc:2571 #, gcc-internal-format, gfc-internal-format msgid "The LEN part_ref at %C must be applied to a CHARACTER expression" msgstr "" -#: fortran/primary.cc:2366 +#: fortran/primary.cc:2496 #, gcc-internal-format, gfc-internal-format msgid "Expected argument list at %C" msgstr "" -#: fortran/primary.cc:2384 +#: fortran/primary.cc:2514 #, gcc-internal-format msgid "" "%qs at %C is not an inquiry reference to an intrinsic type component %qs" msgstr "" -#: fortran/primary.cc:2387 +#: fortran/primary.cc:2517 #, gcc-internal-format msgid "%qs at %C is not an inquiry reference to an intrinsic type component" msgstr "" -#: fortran/primary.cc:2457 +#: fortran/primary.cc:2587 #, gcc-internal-format, gfc-internal-format msgid "" "The KIND part_ref at %C must be applied to an expression of intrinsic type" msgstr "" -#: fortran/primary.cc:2485 +#: fortran/primary.cc:2615 #, gcc-internal-format msgid "Procedure pointer component %qs requires an argument list at %C" msgstr "" -#: fortran/primary.cc:2588 +#: fortran/primary.cc:2718 #, gcc-internal-format, gfc-internal-format msgid "Nonpolymorphic reference to abstract type at %C" msgstr "" -#: fortran/primary.cc:2595 +#: fortran/primary.cc:2725 #, gcc-internal-format, gfc-internal-format msgid "Coindexed procedure-pointer component at %C" msgstr "" -#: fortran/primary.cc:2633 +#: fortran/primary.cc:2763 #, gcc-internal-format msgid "gfc_variable_attr(): Expression isn't a variable" msgstr "" -#: fortran/primary.cc:2839 +#: fortran/primary.cc:2981 #, gcc-internal-format msgid "gfc_caf_attr(): Expression isn't a variable" msgstr "" -#: fortran/primary.cc:2896 +#: fortran/primary.cc:3038 #, gcc-internal-format msgid "gfc_caf_attr(): Bad array reference" msgstr "" -#: fortran/primary.cc:3075 +#: fortran/primary.cc:3217 #, gcc-internal-format msgid "" "No initializer for allocatable component %qs given in the structure " "constructor at %C" msgstr "" -#: fortran/primary.cc:3086 +#: fortran/primary.cc:3228 #, gcc-internal-format, gfc-internal-format msgid "Structure constructor with missing optional arguments at %C" msgstr "" -#: fortran/primary.cc:3095 +#: fortran/primary.cc:3237 #, gcc-internal-format msgid "" "No initializer for component %qs given in the structure constructor at %C" msgstr "" -#: fortran/primary.cc:3143 +#: fortran/primary.cc:3285 #, gcc-internal-format msgid "Cannot construct ABSTRACT type %qs at %L" msgstr "" -#: fortran/primary.cc:3163 +#: fortran/primary.cc:3305 #, gcc-internal-format, gfc-internal-format msgid "Structure constructor with named arguments at %C" msgstr "" -#: fortran/primary.cc:3178 +#: fortran/primary.cc:3320 #, gcc-internal-format, gfc-internal-format msgid "Component initializer without name after component named %s at %L" msgstr "" -#: fortran/primary.cc:3183 +#: fortran/primary.cc:3325 #, gcc-internal-format, gfc-internal-format msgid "Too many components in structure constructor at %L" msgstr "" -#: fortran/primary.cc:3242 +#: fortran/primary.cc:3384 msgid "CHARACTER expression will be truncated in constructor (%td/%td) at %L" msgstr "" -#: fortran/primary.cc:3260 +#: fortran/primary.cc:3402 #, gcc-internal-format msgid "Component %qs is initialized twice in the structure constructor at %L" msgstr "" -#: fortran/primary.cc:3272 +#: fortran/primary.cc:3414 #, gcc-internal-format msgid "" "Coindexed expression to pointer component %qs in structure constructor at %L" msgstr "" -#: fortran/primary.cc:3326 +#: fortran/primary.cc:3468 #, gcc-internal-format msgid "" "component %qs at %L has already been set by a parent derived type constructor" msgstr "" -#: fortran/primary.cc:3491 +#: fortran/primary.cc:3633 #, gcc-internal-format, gfc-internal-format msgid "%%LOC() as an rvalue at %C" msgstr "" -#: fortran/primary.cc:3550 +#: fortran/primary.cc:3692 #, gcc-internal-format msgid "" "%qs at %C is the name of a recursive function and so refers to the result " "variable. Use an explicit RESULT variable for direct recursion (12.5.2.1)" msgstr "" -#: fortran/primary.cc:3581 fortran/primary.cc:3983 +#: fortran/primary.cc:3723 fortran/primary.cc:4125 #, gcc-internal-format, gfc-internal-format msgid "Symbol at %C is not appropriate for an expression" msgstr "" -#: fortran/primary.cc:3686 +#: fortran/primary.cc:3828 #, gcc-internal-format msgid "Unexpected use of subroutine name %qs at %C" msgstr "" -#: fortran/primary.cc:3718 +#: fortran/primary.cc:3860 #, gcc-internal-format msgid "Statement function %qs requires argument list at %C" msgstr "" -#: fortran/primary.cc:3721 +#: fortran/primary.cc:3863 #, gcc-internal-format msgid "Function %qs requires an argument list at %C" msgstr "" -#: fortran/primary.cc:3771 +#: fortran/primary.cc:3913 #, gcc-internal-format msgid "Missing argument to %qs at %C" msgstr "" -#: fortran/primary.cc:3784 +#: fortran/primary.cc:3926 #, gcc-internal-format, gfc-internal-format msgid "" "The leftmost part-ref in a data-ref cannot be a function reference at %C" msgstr "" -#: fortran/primary.cc:3939 +#: fortran/primary.cc:4081 #, gcc-internal-format msgid "Missing argument list in function %qs at %C" msgstr "" -#: fortran/primary.cc:4053 +#: fortran/primary.cc:4195 #, gcc-internal-format msgid "Derived type %qs cannot be used as a variable at %C" msgstr "" -#: fortran/primary.cc:4094 +#: fortran/primary.cc:4236 #, gcc-internal-format, gfc-internal-format msgid "Named constant at %C in an EQUIVALENCE" msgstr "" -#: fortran/primary.cc:4099 +#: fortran/primary.cc:4241 #, gcc-internal-format msgid "PARAMETER %qs shall not appear in a DATA statement at %C" msgstr "" -#: fortran/primary.cc:4135 +#: fortran/primary.cc:4277 #, gcc-internal-format msgid "%qs at %C is not a variable" msgstr "" -#: fortran/resolve.cc:123 +#: fortran/resolve.cc:114 #, gcc-internal-format msgid "%qs at %L is of the ABSTRACT type %qs" msgstr "" -#: fortran/resolve.cc:126 +#: fortran/resolve.cc:117 #, gcc-internal-format msgid "ABSTRACT type %qs used at %L" msgstr "" -#: fortran/resolve.cc:143 +#: fortran/resolve.cc:134 #, gcc-internal-format msgid "Interface %qs at %L is declared in a later PROCEDURE statement" msgstr "" -#: fortran/resolve.cc:156 +#: fortran/resolve.cc:147 #, gcc-internal-format msgid "Interface %qs at %L may not be generic" msgstr "" -#: fortran/resolve.cc:163 +#: fortran/resolve.cc:154 #, gcc-internal-format msgid "Interface %qs at %L may not be a statement function" msgstr "" -#: fortran/resolve.cc:172 +#: fortran/resolve.cc:163 #, gcc-internal-format msgid "Intrinsic procedure %qs not allowed in PROCEDURE statement at %L" msgstr "" -#: fortran/resolve.cc:178 +#: fortran/resolve.cc:169 #, gcc-internal-format msgid "Interface %qs at %L must be explicit" msgstr "" -#: fortran/resolve.cc:200 +#: fortran/resolve.cc:191 #, gcc-internal-format msgid "PROCEDURE %qs at %L may not be used as its own interface" msgstr "" -#: fortran/resolve.cc:300 +#: fortran/resolve.cc:292 #, gcc-internal-format msgid "" "Alternate return specifier in elemental subroutine %qs at %L is not allowed" msgstr "" -#: fortran/resolve.cc:304 +#: fortran/resolve.cc:296 #, gcc-internal-format msgid "Alternate return specifier in function %qs at %L is not allowed" msgstr "" -#: fortran/resolve.cc:315 +#: fortran/resolve.cc:308 #, gcc-internal-format msgid "Self-referential argument %qs at %L is not allowed" msgstr "" -#: fortran/resolve.cc:387 +#: fortran/resolve.cc:380 #, gcc-internal-format msgid "Dummy procedure %qs of PURE procedure at %L must also be PURE" msgstr "" -#: fortran/resolve.cc:397 +#: fortran/resolve.cc:390 #, gcc-internal-format msgid "" "Argument %qs of pure function %qs at %L with VALUE attribute but without " "INTENT(IN)" msgstr "" -#: fortran/resolve.cc:402 +#: fortran/resolve.cc:395 #, gcc-internal-format msgid "Argument %qs of pure function %qs at %L must be INTENT(IN) or VALUE" msgstr "" -#: fortran/resolve.cc:410 +#: fortran/resolve.cc:403 #, gcc-internal-format msgid "" "Argument %qs of pure subroutine %qs at %L with VALUE attribute but without " "INTENT" msgstr "" -#: fortran/resolve.cc:415 +#: fortran/resolve.cc:408 #, gcc-internal-format msgid "" "Argument %qs of pure subroutine %qs at %L must have its INTENT specified or " "have the VALUE attribute" msgstr "" -#: fortran/resolve.cc:425 +#: fortran/resolve.cc:418 #, gcc-internal-format msgid "" "INTENT(OUT) argument %qs of pure procedure %qs at %L may not be polymorphic" msgstr "" -#: fortran/resolve.cc:458 +#: fortran/resolve.cc:451 #, gcc-internal-format msgid "Coarray dummy argument %qs at %L to elemental procedure" msgstr "" -#: fortran/resolve.cc:466 +#: fortran/resolve.cc:459 #, gcc-internal-format msgid "Argument %qs of elemental procedure at %L must be scalar" msgstr "" -#: fortran/resolve.cc:475 +#: fortran/resolve.cc:468 #, gcc-internal-format msgid "" "Argument %qs of elemental procedure at %L cannot have the ALLOCATABLE " "attribute" msgstr "" -#: fortran/resolve.cc:485 +#: fortran/resolve.cc:478 #, gcc-internal-format msgid "" "Argument %qs of elemental procedure at %L cannot have the POINTER attribute" msgstr "" -#: fortran/resolve.cc:493 +#: fortran/resolve.cc:486 #, gcc-internal-format msgid "Dummy procedure %qs not allowed in elemental procedure %qs at %L" msgstr "" -#: fortran/resolve.cc:502 +#: fortran/resolve.cc:495 #, gcc-internal-format msgid "" "Argument %qs of elemental procedure %qs at %L must have its INTENT specified " @@ -82091,311 +82395,311 @@ msgstr "" #. F03:C1263 (R1238) The function-name and each dummy-arg-name #. shall be specified, explicitly or implicitly, to be scalar. -#: fortran/resolve.cc:517 +#: fortran/resolve.cc:510 #, gcc-internal-format msgid "Argument %qs of statement function %qs at %L must be scalar" msgstr "" -#: fortran/resolve.cc:528 +#: fortran/resolve.cc:521 #, gcc-internal-format msgid "" "Character-valued argument %qs of statement function at %L must have constant " "length" msgstr "" -#: fortran/resolve.cc:577 +#: fortran/resolve.cc:571 #, gcc-internal-format msgid "" "Contained procedure %qs at %L has the same name as its encompassing procedure" msgstr "" -#: fortran/resolve.cc:597 +#: fortran/resolve.cc:591 #, gcc-internal-format msgid "Contained function %qs at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.cc:600 +#: fortran/resolve.cc:594 #, gcc-internal-format msgid "Result %qs of contained function %qs at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.cc:626 +#: fortran/resolve.cc:620 #, gcc-internal-format msgid "Character-valued module procedure %qs at %L must not be assumed length" msgstr "" -#: fortran/resolve.cc:628 +#: fortran/resolve.cc:622 #, gcc-internal-format msgid "Character-valued internal function %qs at %L must not be assumed length" msgstr "" -#: fortran/resolve.cc:801 +#: fortran/resolve.cc:795 #, gcc-internal-format, gfc-internal-format msgid "Function %s at %L has entries with mismatched array specifications" msgstr "" -#: fortran/resolve.cc:812 +#: fortran/resolve.cc:806 #, gcc-internal-format, gfc-internal-format msgid "Function %s at %L has entry %s with mismatched characteristics" msgstr "" -#: fortran/resolve.cc:827 +#: fortran/resolve.cc:821 #, gcc-internal-format, gfc-internal-format msgid "" "Function %s at %L with entries returning variables of different string " "lengths" msgstr "" -#: fortran/resolve.cc:859 +#: fortran/resolve.cc:853 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s cannot be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:863 +#: fortran/resolve.cc:857 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s cannot be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:870 +#: fortran/resolve.cc:864 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s cannot be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:874 +#: fortran/resolve.cc:868 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s cannot be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:881 +#: fortran/resolve.cc:875 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s cannot be ALLOCATABLE in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:885 +#: fortran/resolve.cc:879 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s cannot be ALLOCATABLE in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:923 +#: fortran/resolve.cc:917 #, gcc-internal-format, gfc-internal-format msgid "FUNCTION result %s cannot be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:928 +#: fortran/resolve.cc:922 #, gcc-internal-format, gfc-internal-format msgid "ENTRY result %s cannot be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.cc:979 +#: fortran/resolve.cc:973 #, gcc-internal-format msgid "Global entity %qs at %L cannot appear in a COMMON block at %L" msgstr "" -#: fortran/resolve.cc:983 +#: fortran/resolve.cc:977 #, gcc-internal-format msgid "Global entity %qs at %L cannot appear in a COMMON block" msgstr "" -#: fortran/resolve.cc:993 +#: fortran/resolve.cc:987 #, gcc-internal-format, gfc-internal-format msgid "COMMON block at %L" msgstr "" -#: fortran/resolve.cc:1000 +#: fortran/resolve.cc:994 #, gcc-internal-format msgid "" "Variable %qs at %L is in COMMON but only in BLOCK DATA initialization is " "allowed" msgstr "" -#: fortran/resolve.cc:1004 +#: fortran/resolve.cc:998 #, gcc-internal-format msgid "" "Initialized variable %qs at %L is in a blank COMMON but initialization is " "only allowed in named common blocks" msgstr "" -#: fortran/resolve.cc:1011 +#: fortran/resolve.cc:1005 #, gcc-internal-format msgid "%qs at %L cannot appear in COMMON [F2008:C5100]" msgstr "" -#: fortran/resolve.cc:1016 +#: fortran/resolve.cc:1010 #, gcc-internal-format msgid "Automatic object %qs at %L cannot appear in COMMON at %L" msgstr "" -#: fortran/resolve.cc:1028 +#: fortran/resolve.cc:1022 #, gcc-internal-format msgid "" "Derived type variable %qs in COMMON at %L has neither the SEQUENCE nor the " "BIND(C) attribute" msgstr "" -#: fortran/resolve.cc:1032 +#: fortran/resolve.cc:1026 #, gcc-internal-format msgid "" "Derived type variable %qs in COMMON at %L has an ultimate component that is " "allocatable" msgstr "" -#: fortran/resolve.cc:1036 +#: fortran/resolve.cc:1030 #, gcc-internal-format msgid "" "Derived type variable %qs in COMMON at %L may not have default initializer" msgstr "" -#: fortran/resolve.cc:1080 +#: fortran/resolve.cc:1074 #, gcc-internal-format msgid "" "In Fortran 2003 COMMON %qs block at %L is a global identifier and must thus " "have the same binding name as the same-named COMMON block at %L: %s vs %s" msgstr "" -#: fortran/resolve.cc:1094 +#: fortran/resolve.cc:1088 #, gcc-internal-format msgid "COMMON block %qs at %L uses the same global identifier as entity at %L" msgstr "" -#: fortran/resolve.cc:1102 +#: fortran/resolve.cc:1096 #, gcc-internal-format msgid "" "Fortran 2008: COMMON block %qs with binding label at %L sharing the " "identifier with global non-COMMON-block entity at %L" msgstr "" -#: fortran/resolve.cc:1124 +#: fortran/resolve.cc:1118 #, gcc-internal-format msgid "" "COMMON block at %L with binding label %qs uses the same global identifier as " "entity at %L" msgstr "" -#: fortran/resolve.cc:1145 +#: fortran/resolve.cc:1139 #, gcc-internal-format msgid "COMMON block %qs at %L is used as PARAMETER at %L" msgstr "" -#: fortran/resolve.cc:1149 +#: fortran/resolve.cc:1143 #, gcc-internal-format msgid "COMMON block %qs at %L cannot have the EXTERNAL attribute" msgstr "" -#: fortran/resolve.cc:1153 +#: fortran/resolve.cc:1147 #, gcc-internal-format msgid "COMMON block %qs at %L is also an intrinsic procedure" msgstr "" -#: fortran/resolve.cc:1157 +#: fortran/resolve.cc:1151 #, gcc-internal-format msgid "COMMON block %qs at %L that is also a function result" msgstr "" -#: fortran/resolve.cc:1162 +#: fortran/resolve.cc:1156 #, gcc-internal-format msgid "COMMON block %qs at %L that is also a global procedure" msgstr "" -#: fortran/resolve.cc:1229 +#: fortran/resolve.cc:1223 #, gcc-internal-format msgid "The KIND parameter %qs in the PDT constructor at %C has no value" msgstr "" -#: fortran/resolve.cc:1372 +#: fortran/resolve.cc:1366 #, gcc-internal-format, gfc-internal-format msgid "" "The rank of the element in the structure constructor at %L does not match " "that of the component (%d/%d)" msgstr "" -#: fortran/resolve.cc:1393 +#: fortran/resolve.cc:1387 #, gcc-internal-format msgid "" "The element in the structure constructor at %L, for pointer component %qs, " "is %s but should be %s" msgstr "" -#: fortran/resolve.cc:1428 +#: fortran/resolve.cc:1422 #, gcc-internal-format msgid "" "Unequal character lengths (%wd/%wd) for pointer component %qs in constructor " "at %L" msgstr "" -#: fortran/resolve.cc:1473 +#: fortran/resolve.cc:1467 #, gcc-internal-format msgid "" "The NULL in the structure constructor at %L is being applied to component " "%qs, which is neither a POINTER nor ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:1507 +#: fortran/resolve.cc:1501 #, gcc-internal-format msgid "" "Interface mismatch for procedure-pointer component %qs in structure " "constructor at %L: %s" msgstr "" -#: fortran/resolve.cc:1526 +#: fortran/resolve.cc:1520 #, gcc-internal-format msgid "" "Bad array spec of component %qs referenced in structure constructor at %L" msgstr "" -#: fortran/resolve.cc:1539 +#: fortran/resolve.cc:1533 #, gcc-internal-format msgid "" "The shape of component %qs in the structure constructor at %L differs from " "the shape of the declared component for dimension %d (%ld/%ld)" msgstr "" -#: fortran/resolve.cc:1560 +#: fortran/resolve.cc:1554 #, gcc-internal-format msgid "" "The element in the structure constructor at %L, for pointer component %qs " "should be a POINTER or a TARGET" msgstr "" -#: fortran/resolve.cc:1589 +#: fortran/resolve.cc:1583 #, gcc-internal-format msgid "" "Invalid expression in the structure constructor for pointer component %qs at " "%L in PURE procedure" msgstr "" -#: fortran/resolve.cc:1715 +#: fortran/resolve.cc:1709 #, gcc-internal-format msgid "" "The upper bound in the last dimension must appear in the reference to the " "assumed size array %qs at %L" msgstr "" -#: fortran/resolve.cc:1777 +#: fortran/resolve.cc:1771 #, gcc-internal-format msgid "%qs at %L is ambiguous" msgstr "" -#: fortran/resolve.cc:1781 +#: fortran/resolve.cc:1775 #, gcc-internal-format msgid "GENERIC procedure %qs is not allowed as an actual argument at %L" msgstr "" -#: fortran/resolve.cc:1902 +#: fortran/resolve.cc:1896 #, gcc-internal-format msgid "Type specified for intrinsic function %qs at %L is ignored" msgstr "" -#: fortran/resolve.cc:1915 +#: fortran/resolve.cc:1909 #, gcc-internal-format msgid "Intrinsic subroutine %qs at %L shall not have a type specifier" msgstr "" -#: fortran/resolve.cc:1926 +#: fortran/resolve.cc:1920 #, gcc-internal-format msgid "%qs declared INTRINSIC at %L does not exist" msgstr "" -#: fortran/resolve.cc:1939 +#: fortran/resolve.cc:1933 #, gcc-internal-format msgid "" "The intrinsic %qs declared INTRINSIC at %L is not available in the current " @@ -82403,89 +82707,96 @@ msgid "" "fall-intrinsics%> in order to use it." msgstr "" -#: fortran/resolve.cc:1975 +#: fortran/resolve.cc:1971 +#, gcc-internal-format +msgid "" +"Non-RECURSIVE procedure %qs from module %qs is possibly calling itself " +"recursively in procedure %qs. Declare it RECURSIVE or use %<-frecursive%>" +msgstr "" + +#: fortran/resolve.cc:1976 fortran/resolve.cc:6834 #, gcc-internal-format msgid "" "Non-RECURSIVE procedure %qs at %L is possibly calling itself recursively. " "Declare it RECURSIVE or use %<-frecursive%>" msgstr "" -#: fortran/resolve.cc:2033 fortran/resolve.cc:10557 fortran/resolve.cc:12539 +#: fortran/resolve.cc:2035 fortran/resolve.cc:10804 fortran/resolve.cc:12786 #, gcc-internal-format, gfc-internal-format msgid "Label %d referenced at %L is never defined" msgstr "" -#: fortran/resolve.cc:2065 +#: fortran/resolve.cc:2067 #, gcc-internal-format msgid "Derived type %qs is used as an actual argument at %L" msgstr "" -#: fortran/resolve.cc:2083 +#: fortran/resolve.cc:2085 #, gcc-internal-format msgid "Statement function %qs at %L is not allowed as an actual argument" msgstr "" -#: fortran/resolve.cc:2091 +#: fortran/resolve.cc:2093 #, gcc-internal-format msgid "Intrinsic %qs at %L is not allowed as an actual argument" msgstr "" -#: fortran/resolve.cc:2098 +#: fortran/resolve.cc:2100 #, gcc-internal-format msgid "Internal procedure %qs is used as actual argument at %L" msgstr "" -#: fortran/resolve.cc:2106 +#: fortran/resolve.cc:2108 #, gcc-internal-format msgid "" "ELEMENTAL non-INTRINSIC procedure %qs is not allowed as an actual argument " "at %L" msgstr "" -#: fortran/resolve.cc:2133 +#: fortran/resolve.cc:2135 #, gcc-internal-format msgid "" "Unable to find a specific INTRINSIC procedure for the reference %qs at %L" msgstr "" -#: fortran/resolve.cc:2155 +#: fortran/resolve.cc:2157 #, gcc-internal-format msgid "Symbol %qs at %L is ambiguous" msgstr "" -#: fortran/resolve.cc:2210 +#: fortran/resolve.cc:2212 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L is not of numeric type" msgstr "" -#: fortran/resolve.cc:2217 +#: fortran/resolve.cc:2219 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L cannot be an array or an array section" msgstr "" -#: fortran/resolve.cc:2231 +#: fortran/resolve.cc:2233 #, gcc-internal-format, gfc-internal-format msgid "By-value argument at %L is not allowed in this context" msgstr "" -#: fortran/resolve.cc:2243 +#: fortran/resolve.cc:2245 #, gcc-internal-format, gfc-internal-format msgid "Passing internal procedure at %L by location not allowed" msgstr "" -#: fortran/resolve.cc:2254 +#: fortran/resolve.cc:2256 #, gcc-internal-format msgid "" "ELEMENTAL procedure pointer component %qs is not allowed as an actual " "argument at %L" msgstr "" -#: fortran/resolve.cc:2263 +#: fortran/resolve.cc:2265 #, gcc-internal-format, gfc-internal-format msgid "Coindexed actual argument at %L with ultimate pointer component" msgstr "" -#: fortran/resolve.cc:2410 +#: fortran/resolve.cc:2412 #, gcc-internal-format msgid "" "%qs at %L is an array and OPTIONAL; If it is not present, then it cannot be " @@ -82493,92 +82804,92 @@ msgid "" "argument with the same rank (Fortran 2018, 15.5.2.12)" msgstr "" -#: fortran/resolve.cc:2449 +#: fortran/resolve.cc:2451 #, gcc-internal-format msgid "" "Actual argument at %L for INTENT(%s) dummy %qs of ELEMENTAL subroutine %qs " "is a scalar, but another actual argument is an array" msgstr "" -#: fortran/resolve.cc:2723 +#: fortran/resolve.cc:2725 #, gcc-internal-format msgid "Return type mismatch of function %qs at %L (%s/%s)" msgstr "" -#: fortran/resolve.cc:2750 +#: fortran/resolve.cc:2752 #, gcc-internal-format msgid "Interface mismatch in global procedure %qs at %L: %s" msgstr "" -#: fortran/resolve.cc:2856 +#: fortran/resolve.cc:2858 #, gcc-internal-format msgid "There is no specific function for the generic %qs at %L" msgstr "" -#: fortran/resolve.cc:2876 +#: fortran/resolve.cc:2878 #, gcc-internal-format msgid "" "Generic function %qs at %L is not consistent with a specific intrinsic " "interface" msgstr "" -#: fortran/resolve.cc:2914 +#: fortran/resolve.cc:2916 #, gcc-internal-format msgid "Function %qs at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.cc:2969 +#: fortran/resolve.cc:2971 #, gcc-internal-format msgid "Unable to resolve the specific function %qs at %L" msgstr "" -#: fortran/resolve.cc:3046 +#: fortran/resolve.cc:3048 #, gcc-internal-format msgid "" "Missing explicit declaration with EXTERNAL attribute for symbol %qs at %L" msgstr "" -#: fortran/resolve.cc:3078 +#: fortran/resolve.cc:3080 #, gcc-internal-format msgid "Function %qs at %L has no IMPLICIT type; did you mean %qs?" msgstr "" -#: fortran/resolve.cc:3082 fortran/resolve.cc:17846 +#: fortran/resolve.cc:3084 fortran/resolve.cc:18139 #, gcc-internal-format msgid "Function %qs at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.cc:3206 +#: fortran/resolve.cc:3208 #, gcc-internal-format msgid "Reference to impure function %qs at %L inside a FORALL %s" msgstr "" -#: fortran/resolve.cc:3213 +#: fortran/resolve.cc:3215 #, gcc-internal-format msgid "Reference to impure function %qs at %L inside a DO CONCURRENT %s" msgstr "" -#: fortran/resolve.cc:3220 +#: fortran/resolve.cc:3222 #, gcc-internal-format msgid "Reference to impure function %qs at %L within a PURE procedure" msgstr "" -#: fortran/resolve.cc:3287 +#: fortran/resolve.cc:3289 #, gcc-internal-format msgid "Unexpected junk after %qs at %L" msgstr "" -#: fortran/resolve.cc:3298 +#: fortran/resolve.cc:3300 #, gcc-internal-format msgid "%qs at %L is not a function" msgstr "" -#: fortran/resolve.cc:3306 fortran/resolve.cc:3821 +#: fortran/resolve.cc:3308 fortran/resolve.cc:3823 #, gcc-internal-format msgid "ABSTRACT INTERFACE %qs must not be referenced at %L" msgstr "" -#: fortran/resolve.cc:3318 +#: fortran/resolve.cc:3320 #, gcc-internal-format msgid "" "ABSTRACT INTERFACE %qs at %L must not have an assumed character length " @@ -82586,349 +82897,349 @@ msgid "" msgstr "" #. Internal procedures are taken care of in resolve_contained_fntype. -#: fortran/resolve.cc:3361 +#: fortran/resolve.cc:3363 #, gcc-internal-format msgid "" "Function %qs is declared CHARACTER(*) and cannot be used at %L since it is " "not a dummy argument" msgstr "" -#: fortran/resolve.cc:3395 +#: fortran/resolve.cc:3397 #, gcc-internal-format msgid "resolve_function(): bad function type" msgstr "" -#: fortran/resolve.cc:3409 +#: fortran/resolve.cc:3411 #, gcc-internal-format, gfc-internal-format msgid "" "A BOZ literal constant at %L cannot appear as an actual argument in a " "function reference" msgstr "" -#: fortran/resolve.cc:3425 +#: fortran/resolve.cc:3427 #, gcc-internal-format msgid "" "User defined non-ELEMENTAL function %qs at %L not allowed in WORKSHARE " "construct" msgstr "" -#: fortran/resolve.cc:3487 +#: fortran/resolve.cc:3489 #, gcc-internal-format msgid "" "ENTRY %qs at %L cannot be called recursively, as function %qs is not " "RECURSIVE" msgstr "" -#: fortran/resolve.cc:3491 +#: fortran/resolve.cc:3493 #, gcc-internal-format msgid "Function %qs at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.cc:3549 +#: fortran/resolve.cc:3551 #, gcc-internal-format msgid "Using function %qs at %L is deprecated" msgstr "" -#: fortran/resolve.cc:3565 +#: fortran/resolve.cc:3567 #, gcc-internal-format msgid "Subroutine call to %qs in FORALL block at %L is not PURE" msgstr "" -#: fortran/resolve.cc:3571 +#: fortran/resolve.cc:3573 #, gcc-internal-format msgid "Subroutine call to %qs in DO CONCURRENT block at %L is not PURE" msgstr "" -#: fortran/resolve.cc:3577 +#: fortran/resolve.cc:3579 #, gcc-internal-format msgid "Subroutine call to %qs at %L is not PURE" msgstr "" -#: fortran/resolve.cc:3645 +#: fortran/resolve.cc:3647 #, gcc-internal-format msgid "There is no specific subroutine for the generic %qs at %L" msgstr "" -#: fortran/resolve.cc:3654 +#: fortran/resolve.cc:3656 #, gcc-internal-format msgid "" "Generic subroutine %qs at %L is not consistent with an intrinsic subroutine " "interface" msgstr "" -#: fortran/resolve.cc:3689 +#: fortran/resolve.cc:3691 #, gcc-internal-format msgid "" "Subroutine %qs at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.cc:3734 +#: fortran/resolve.cc:3736 #, gcc-internal-format msgid "Unable to resolve the specific subroutine %qs at %L" msgstr "" -#: fortran/resolve.cc:3792 +#: fortran/resolve.cc:3794 #, gcc-internal-format msgid "%qs at %L has a type, which is not consistent with the CALL at %L" msgstr "" -#: fortran/resolve.cc:3831 +#: fortran/resolve.cc:3833 #, gcc-internal-format msgid "" "ENTRY %qs at %L cannot be called recursively, as subroutine %qs is not " "RECURSIVE" msgstr "" -#: fortran/resolve.cc:3835 +#: fortran/resolve.cc:3837 #, gcc-internal-format msgid "" "SUBROUTINE %qs at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.cc:3880 +#: fortran/resolve.cc:3882 #, gcc-internal-format msgid "resolve_subroutine(): bad function type" msgstr "" -#: fortran/resolve.cc:3897 +#: fortran/resolve.cc:3899 #, gcc-internal-format msgid "Using subroutine %qs at %L is deprecated" msgstr "" -#: fortran/resolve.cc:3924 +#: fortran/resolve.cc:3926 #, gcc-internal-format, gfc-internal-format msgid "Shapes for operands at %L and %L are not conformable" msgstr "" -#: fortran/resolve.cc:3976 +#: fortran/resolve.cc:3978 #, gcc-internal-format msgid "logical_to_bitwise(): Bad intrinsic" msgstr "" -#: fortran/resolve.cc:4079 +#: fortran/resolve.cc:4081 #, gcc-internal-format msgid "Impure function %qs at %L might not be evaluated" msgstr "" -#: fortran/resolve.cc:4083 +#: fortran/resolve.cc:4085 #, gcc-internal-format, gfc-internal-format msgid "Impure function at %L might not be evaluated" msgstr "" -#: fortran/resolve.cc:4170 +#: fortran/resolve.cc:4172 #, gcc-internal-format msgid "BOZ literal constant at %L cannot be an operand of unary operator %qs" msgstr "" -#: fortran/resolve.cc:4194 +#: fortran/resolve.cc:4196 #, gcc-internal-format msgid "Operands at %L and %L cannot appear as operands of binary operator %qs" msgstr "" -#: fortran/resolve.cc:4379 fortran/resolve.cc:4394 +#: fortran/resolve.cc:4381 fortran/resolve.cc:4396 #, gcc-internal-format, gfc-internal-format msgid "" "BOZ literal constant near %L cannot appear as an operand of a relational " "operator" msgstr "" -#: fortran/resolve.cc:4444 +#: fortran/resolve.cc:4446 #, gcc-internal-format, gfc-internal-format msgid "Equality comparison for %s at %L" msgstr "" -#: fortran/resolve.cc:4446 +#: fortran/resolve.cc:4448 #, gcc-internal-format, gfc-internal-format msgid "Inequality comparison for %s at %L" msgstr "" -#: fortran/resolve.cc:4506 +#: fortran/resolve.cc:4508 #, gcc-internal-format msgid "resolve_operator(): Bad intrinsic" msgstr "" -#: fortran/resolve.cc:4792 +#: fortran/resolve.cc:4794 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:4797 +#: fortran/resolve.cc:4799 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld < %ld) in codimension %d" msgstr "" -#: fortran/resolve.cc:4807 +#: fortran/resolve.cc:4809 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:4812 +#: fortran/resolve.cc:4814 #, gcc-internal-format, gfc-internal-format msgid "Array reference at %L is out of bounds (%ld > %ld) in codimension %d" msgstr "" -#: fortran/resolve.cc:4833 +#: fortran/resolve.cc:4835 #, gcc-internal-format, gfc-internal-format msgid "Illegal stride of zero at %L" msgstr "" -#: fortran/resolve.cc:4850 +#: fortran/resolve.cc:4852 #, gcc-internal-format, gfc-internal-format msgid "" "Lower array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:4858 +#: fortran/resolve.cc:4860 #, gcc-internal-format, gfc-internal-format msgid "" "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:4874 +#: fortran/resolve.cc:4876 #, gcc-internal-format, gfc-internal-format msgid "" "Upper array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:4883 +#: fortran/resolve.cc:4885 #, gcc-internal-format, gfc-internal-format msgid "" "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.cc:4899 +#: fortran/resolve.cc:4901 #, gcc-internal-format msgid "check_dimension(): Bad array reference" msgstr "" -#: fortran/resolve.cc:4922 +#: fortran/resolve.cc:4924 #, gcc-internal-format, gfc-internal-format msgid "Rightmost upper bound of assumed size array section not specified at %L" msgstr "" -#: fortran/resolve.cc:4932 +#: fortran/resolve.cc:4934 #, gcc-internal-format, gfc-internal-format msgid "Rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.cc:4940 +#: fortran/resolve.cc:4942 #, gcc-internal-format, gfc-internal-format msgid "Coindex rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.cc:4956 +#: fortran/resolve.cc:4958 #, gcc-internal-format, gfc-internal-format msgid "Coindex of codimension %d must be a scalar at %L" msgstr "" -#: fortran/resolve.cc:4984 +#: fortran/resolve.cc:4986 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be scalar" msgstr "" -#: fortran/resolve.cc:4990 +#: fortran/resolve.cc:4992 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/resolve.cc:4996 +#: fortran/resolve.cc:4998 #, gcc-internal-format, gfc-internal-format msgid "REAL array index at %L" msgstr "" -#: fortran/resolve.cc:5035 +#: fortran/resolve.cc:5037 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5042 +#: fortran/resolve.cc:5044 #, gcc-internal-format, gfc-internal-format msgid "Argument dim at %L must be of INTEGER type" msgstr "" -#: fortran/resolve.cc:5102 +#: fortran/resolve.cc:5104 #, gcc-internal-format, gfc-internal-format msgid "Invalid array reference of a non-array entity at %L" msgstr "" -#: fortran/resolve.cc:5116 +#: fortran/resolve.cc:5118 #, gcc-internal-format msgid "find_array_spec(): unused as(1)" msgstr "" -#: fortran/resolve.cc:5128 +#: fortran/resolve.cc:5130 #, gcc-internal-format msgid "find_array_spec(): unused as(2)" msgstr "" -#: fortran/resolve.cc:5173 +#: fortran/resolve.cc:5175 #, gcc-internal-format, gfc-internal-format msgid "Array index at %L is an array of rank %d" msgstr "" -#: fortran/resolve.cc:5271 +#: fortran/resolve.cc:5273 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.cc:5278 +#: fortran/resolve.cc:5280 #, gcc-internal-format, gfc-internal-format msgid "Substring start index at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5300 +#: fortran/resolve.cc:5302 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.cc:5307 +#: fortran/resolve.cc:5309 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L must be scalar" msgstr "" -#: fortran/resolve.cc:5327 +#: fortran/resolve.cc:5329 #, gcc-internal-format, gfc-internal-format msgid "Substring end index at %L is too large" msgstr "" -#: fortran/resolve.cc:5518 +#: fortran/resolve.cc:5520 #, gcc-internal-format msgid "resolve_ref(): Bad array reference" msgstr "" -#: fortran/resolve.cc:5532 +#: fortran/resolve.cc:5534 #, gcc-internal-format, gfc-internal-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the POINTER attribute at %L" msgstr "" -#: fortran/resolve.cc:5542 +#: fortran/resolve.cc:5544 #, gcc-internal-format, gfc-internal-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the ALLOCATABLE attribute at %L" msgstr "" -#: fortran/resolve.cc:5590 +#: fortran/resolve.cc:5592 #, gcc-internal-format, gfc-internal-format msgid "" "Two or more part references with nonzero rank must not be specified at %L" msgstr "" -#: fortran/resolve.cc:5682 +#: fortran/resolve.cc:5684 #, gcc-internal-format msgid "gfc_expression_rank(): Two array specs" msgstr "" -#: fortran/resolve.cc:5779 +#: fortran/resolve.cc:5781 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute may only be used as actual " "argument" msgstr "" -#: fortran/resolve.cc:5789 +#: fortran/resolve.cc:5791 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L may only be used as actual argument" msgstr "" @@ -82937,14 +83248,14 @@ msgstr "" #. for all inquiry functions in resolve_function; the reason is #. that the function-name resolution happens too late in that #. function. -#: fortran/resolve.cc:5799 +#: fortran/resolve.cc:5801 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-type variable %s at %L as actual argument to an inquiry function " "shall be the first argument" msgstr "" -#: fortran/resolve.cc:5818 +#: fortran/resolve.cc:5820 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank variable %s at %L may only be used as actual argument" msgstr "" @@ -82953,326 +83264,326 @@ msgstr "" #. for all inquiry functions in resolve_function; the reason is #. that the function-name resolution happens too late in that #. function. -#: fortran/resolve.cc:5828 +#: fortran/resolve.cc:5830 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-rank variable %s at %L as actual argument to an inquiry function " "shall be the first argument" msgstr "" -#: fortran/resolve.cc:5839 +#: fortran/resolve.cc:5841 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute shall not have a subobject " "reference" msgstr "" -#: fortran/resolve.cc:5848 +#: fortran/resolve.cc:5850 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L shall not have a subobject reference" msgstr "" -#: fortran/resolve.cc:5864 +#: fortran/resolve.cc:5866 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank variable %s at %L shall not have a subobject reference" msgstr "" -#: fortran/resolve.cc:5909 +#: fortran/resolve.cc:5923 #, gcc-internal-format msgid "Scalar variable %qs has an array reference at %L" msgstr "" -#: fortran/resolve.cc:6054 +#: fortran/resolve.cc:6068 #, gcc-internal-format msgid "" "Variable %qs, used in a specification expression, is referenced at %L before " "the ENTRY statement in which it is a parameter" msgstr "" -#: fortran/resolve.cc:6059 +#: fortran/resolve.cc:6073 #, gcc-internal-format msgid "" "Variable %qs is used at %L before the ENTRY statement in which it is a " "parameter" msgstr "" -#: fortran/resolve.cc:6129 +#: fortran/resolve.cc:6143 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic subobject of coindexed object at %L" msgstr "" -#: fortran/resolve.cc:6142 +#: fortran/resolve.cc:6156 #, gcc-internal-format, gfc-internal-format msgid "Coindexed object with polymorphic allocatable subcomponent at %L" msgstr "" -#: fortran/resolve.cc:6158 +#: fortran/resolve.cc:6172 #, gcc-internal-format msgid "Using variable %qs at %L is deprecated" msgstr "" -#: fortran/resolve.cc:6248 +#: fortran/resolve.cc:6415 #, gcc-internal-format msgid "" "%qs at %L is host associated at %L into a contained procedure with an " "internal procedure of the same name" msgstr "" -#: fortran/resolve.cc:6426 fortran/resolve.cc:6578 +#: fortran/resolve.cc:6593 fortran/resolve.cc:6745 #, gcc-internal-format, gfc-internal-format msgid "Error in typebound call at %L" msgstr "" -#: fortran/resolve.cc:6542 +#: fortran/resolve.cc:6709 #, gcc-internal-format, gfc-internal-format msgid "Passed-object at %L must be scalar" msgstr "" -#: fortran/resolve.cc:6549 +#: fortran/resolve.cc:6716 #, gcc-internal-format msgid "" "Base object for procedure-pointer component call at %L is of ABSTRACT type " "%qs" msgstr "" -#: fortran/resolve.cc:6588 +#: fortran/resolve.cc:6755 #, gcc-internal-format msgid "Base object for type-bound procedure call at %L is of ABSTRACT type %qs" msgstr "" -#: fortran/resolve.cc:6597 +#: fortran/resolve.cc:6764 #, gcc-internal-format, gfc-internal-format msgid "Base object for NOPASS type-bound procedure call at %L must be scalar" msgstr "" #. Nothing matching found! -#: fortran/resolve.cc:6785 +#: fortran/resolve.cc:6959 #, gcc-internal-format msgid "" "Found no matching specific binding for the call to the GENERIC %qs at %L" msgstr "" -#: fortran/resolve.cc:6819 +#: fortran/resolve.cc:6993 #, gcc-internal-format msgid "%qs at %L should be a SUBROUTINE" msgstr "" -#: fortran/resolve.cc:6871 +#: fortran/resolve.cc:7045 #, gcc-internal-format msgid "%qs at %L should be a FUNCTION" msgstr "" -#: fortran/resolve.cc:7406 +#: fortran/resolve.cc:7580 #, gcc-internal-format msgid "gfc_resolve_expr(): Bad expression type" msgstr "" -#: fortran/resolve.cc:7439 +#: fortran/resolve.cc:7613 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be a scalar" msgstr "" -#: fortran/resolve.cc:7449 +#: fortran/resolve.cc:7623 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be integer" msgstr "" -#: fortran/resolve.cc:7453 fortran/resolve.cc:7460 +#: fortran/resolve.cc:7627 fortran/resolve.cc:7634 #, gcc-internal-format, gfc-internal-format msgid "%s at %L must be INTEGER" msgstr "" -#: fortran/resolve.cc:7515 +#: fortran/resolve.cc:7689 #, gcc-internal-format, gfc-internal-format msgid "Step expression in DO loop at %L cannot be zero" msgstr "" -#: fortran/resolve.cc:7538 +#: fortran/resolve.cc:7712 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L will be executed zero times" msgstr "" -#: fortran/resolve.cc:7555 +#: fortran/resolve.cc:7729 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L is undefined as it overflows" msgstr "" -#: fortran/resolve.cc:7561 +#: fortran/resolve.cc:7735 #, gcc-internal-format, gfc-internal-format msgid "DO loop at %L is undefined as it underflows" msgstr "" -#: fortran/resolve.cc:7622 +#: fortran/resolve.cc:7796 #, gcc-internal-format, gfc-internal-format msgid "FORALL index-name at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.cc:7627 +#: fortran/resolve.cc:7801 #, gcc-internal-format, gfc-internal-format msgid "FORALL start expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.cc:7634 +#: fortran/resolve.cc:7808 #, gcc-internal-format, gfc-internal-format msgid "FORALL end expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.cc:7642 +#: fortran/resolve.cc:7816 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L must be a scalar %s" msgstr "" -#: fortran/resolve.cc:7647 +#: fortran/resolve.cc:7821 #, gcc-internal-format, gfc-internal-format msgid "FORALL stride expression at %L cannot be zero" msgstr "" -#: fortran/resolve.cc:7660 +#: fortran/resolve.cc:7834 #, gcc-internal-format msgid "FORALL index %qs may not appear in triplet specification at %L" msgstr "" -#: fortran/resolve.cc:7765 fortran/resolve.cc:8063 +#: fortran/resolve.cc:7939 fortran/resolve.cc:8237 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L must be ALLOCATABLE or a POINTER" msgstr "" -#: fortran/resolve.cc:7773 fortran/resolve.cc:8026 +#: fortran/resolve.cc:7947 fortran/resolve.cc:8200 #, gcc-internal-format, gfc-internal-format msgid "Coindexed allocatable object at %L" msgstr "" -#: fortran/resolve.cc:7883 +#: fortran/resolve.cc:8057 #, gcc-internal-format, gfc-internal-format msgid "" "Source-expr at %L must be scalar or have the same rank as the allocate-" "object at %L" msgstr "" -#: fortran/resolve.cc:7914 +#: fortran/resolve.cc:8088 #, gcc-internal-format, gfc-internal-format msgid "Source-expr at %L and allocate-object at %L must have the same shape" msgstr "" -#: fortran/resolve.cc:8074 +#: fortran/resolve.cc:8248 #, gcc-internal-format, gfc-internal-format msgid "Type of entity at %L is type incompatible with source-expr at %L" msgstr "" -#: fortran/resolve.cc:8086 +#: fortran/resolve.cc:8260 #, gcc-internal-format, gfc-internal-format msgid "" "The allocate-object at %L and the source-expr at %L shall have the same kind " "type parameter" msgstr "" -#: fortran/resolve.cc:8100 +#: fortran/resolve.cc:8274 #, gcc-internal-format, gfc-internal-format msgid "" "The source-expr at %L shall neither be of type LOCK_TYPE nor have a " "LOCK_TYPE component if allocate-object at %L is a coarray" msgstr "" -#: fortran/resolve.cc:8115 +#: fortran/resolve.cc:8289 #, gcc-internal-format, gfc-internal-format msgid "" "The source-expr at %L shall neither be of type EVENT_TYPE nor have a " "EVENT_TYPE component if allocate-object at %L is a coarray" msgstr "" -#: fortran/resolve.cc:8128 +#: fortran/resolve.cc:8302 #, gcc-internal-format, gfc-internal-format msgid "" "Allocating %s of ABSTRACT base type at %L requires a type-spec or source-expr" msgstr "" -#: fortran/resolve.cc:8146 +#: fortran/resolve.cc:8320 #, gcc-internal-format, gfc-internal-format msgid "" "Allocating %s at %L with type-spec requires the same character-length " "parameter as in the declaration" msgstr "" -#: fortran/resolve.cc:8230 fortran/resolve.cc:8245 +#: fortran/resolve.cc:8404 fortran/resolve.cc:8419 #, gcc-internal-format, gfc-internal-format msgid "Array specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:8237 +#: fortran/resolve.cc:8411 #, gcc-internal-format, gfc-internal-format msgid "" "Array specification or array-valued SOURCE= expression required in ALLOCATE " "statement at %L" msgstr "" -#: fortran/resolve.cc:8262 +#: fortran/resolve.cc:8436 #, gcc-internal-format, gfc-internal-format msgid "Coarray specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:8272 fortran/resolve.cc:8374 +#: fortran/resolve.cc:8446 fortran/resolve.cc:8548 #, gcc-internal-format, gfc-internal-format msgid "Bad coarray specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:8278 +#: fortran/resolve.cc:8452 #, gcc-internal-format, gfc-internal-format msgid "Upper cobound is less than lower cobound at %L" msgstr "" -#: fortran/resolve.cc:8290 +#: fortran/resolve.cc:8464 #, gcc-internal-format, gfc-internal-format msgid "Upper cobound is less than lower cobound of 1 at %L" msgstr "" -#: fortran/resolve.cc:8301 fortran/resolve.cc:8329 +#: fortran/resolve.cc:8475 fortran/resolve.cc:8503 #, gcc-internal-format, gfc-internal-format msgid "Bad array specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:8348 +#: fortran/resolve.cc:8522 #, gcc-internal-format msgid "" "%qs must not appear in the array specification at %L in the same ALLOCATE " "statement where it is itself allocated" msgstr "" -#: fortran/resolve.cc:8363 +#: fortran/resolve.cc:8537 #, gcc-internal-format msgid "Expected %<*%> in coindex specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.cc:8405 +#: fortran/resolve.cc:8579 #, gcc-internal-format, gfc-internal-format msgid "Stat-variable at %L must be a scalar INTEGER variable" msgstr "" -#: fortran/resolve.cc:8434 +#: fortran/resolve.cc:8608 #, gcc-internal-format, gfc-internal-format msgid "Stat-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.cc:8447 +#: fortran/resolve.cc:8621 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG at %L is useless without a STAT tag" msgstr "" -#: fortran/resolve.cc:8461 +#: fortran/resolve.cc:8635 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG variable at %L shall be a scalar default CHARACTER variable" msgstr "" -#: fortran/resolve.cc:8490 +#: fortran/resolve.cc:8664 #, gcc-internal-format, gfc-internal-format msgid "Errmsg-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.cc:8522 +#: fortran/resolve.cc:8696 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L also appears at %L" msgstr "" -#: fortran/resolve.cc:8528 fortran/resolve.cc:8534 +#: fortran/resolve.cc:8702 fortran/resolve.cc:8708 #, gcc-internal-format, gfc-internal-format msgid "Allocate-object at %L is subobject of object at %L" msgstr "" @@ -83281,301 +83592,301 @@ msgstr "" #. element in the list. Either way, we must #. issue an error and get the next case from P. #. FIXME: Sort P and Q by line number. -#: fortran/resolve.cc:8762 +#: fortran/resolve.cc:8936 #, gcc-internal-format, gfc-internal-format msgid "CASE label at %L overlaps with CASE label at %L" msgstr "" -#: fortran/resolve.cc:8813 +#: fortran/resolve.cc:8987 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of type %s" msgstr "" -#: fortran/resolve.cc:8824 +#: fortran/resolve.cc:8998 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be of kind %d" msgstr "" -#: fortran/resolve.cc:8837 +#: fortran/resolve.cc:9011 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L must be scalar" msgstr "" -#: fortran/resolve.cc:8883 +#: fortran/resolve.cc:9057 #, gcc-internal-format, gfc-internal-format msgid "" "Selection expression in computed GOTO statement at %L must be a scalar " "integer expression" msgstr "" -#: fortran/resolve.cc:8902 +#: fortran/resolve.cc:9076 #, gcc-internal-format, gfc-internal-format msgid "Argument of SELECT statement at %L cannot be %s" msgstr "" -#: fortran/resolve.cc:8912 +#: fortran/resolve.cc:9086 #, gcc-internal-format, gfc-internal-format msgid "Argument of SELECT statement at %L must be a scalar expression" msgstr "" -#: fortran/resolve.cc:8930 fortran/resolve.cc:8938 +#: fortran/resolve.cc:9104 fortran/resolve.cc:9112 #, gcc-internal-format, gfc-internal-format msgid "Expression in CASE statement at %L is not in the range of %s" msgstr "" -#: fortran/resolve.cc:9000 fortran/resolve.cc:9691 +#: fortran/resolve.cc:9174 fortran/resolve.cc:9938 #, gcc-internal-format, gfc-internal-format msgid "" "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L" msgstr "" -#: fortran/resolve.cc:9026 +#: fortran/resolve.cc:9200 #, gcc-internal-format, gfc-internal-format msgid "Logical range in CASE statement at %L is not allowed" msgstr "" -#: fortran/resolve.cc:9039 +#: fortran/resolve.cc:9213 #, gcc-internal-format, gfc-internal-format msgid "Constant logical value in CASE statement is repeated at %L" msgstr "" -#: fortran/resolve.cc:9054 +#: fortran/resolve.cc:9228 #, gcc-internal-format, gfc-internal-format msgid "Range specification at %L can never be matched" msgstr "" -#: fortran/resolve.cc:9157 +#: fortran/resolve.cc:9331 #, gcc-internal-format, gfc-internal-format msgid "Logical SELECT CASE block at %L has more that two cases" msgstr "" -#: fortran/resolve.cc:9219 +#: fortran/resolve.cc:9393 #, gcc-internal-format msgid "Associating entity %qs at %L is a procedure pointer" msgstr "" -#: fortran/resolve.cc:9228 +#: fortran/resolve.cc:9402 #, gcc-internal-format msgid "Derived type %qs cannot be used as a variable at %L" msgstr "" -#: fortran/resolve.cc:9245 +#: fortran/resolve.cc:9419 #, gcc-internal-format msgid "Associating entity %qs at %L is a procedure name" msgstr "" -#: fortran/resolve.cc:9261 +#: fortran/resolve.cc:9435 #, gcc-internal-format, gfc-internal-format msgid "Associating selector-expression at %L yields a procedure" msgstr "" -#: fortran/resolve.cc:9268 +#: fortran/resolve.cc:9489 #, gcc-internal-format, gfc-internal-format msgid "Selector at %L cannot be NULL()" msgstr "" -#: fortran/resolve.cc:9273 +#: fortran/resolve.cc:9494 #, gcc-internal-format, gfc-internal-format msgid "Selector at %L has no type" msgstr "" -#: fortran/resolve.cc:9297 +#: fortran/resolve.cc:9552 #, gcc-internal-format msgid "Associate-name %qs at %L is used as array" msgstr "" -#: fortran/resolve.cc:9307 +#: fortran/resolve.cc:9563 #, gcc-internal-format, gfc-internal-format msgid "CLASS selector at %L needs a temporary which is not yet implemented" msgstr "" -#: fortran/resolve.cc:9555 +#: fortran/resolve.cc:9802 #, gcc-internal-format, gfc-internal-format msgid "Selector shall be polymorphic in SELECT TYPE statement at %L" msgstr "" -#: fortran/resolve.cc:9599 fortran/resolve.cc:9611 +#: fortran/resolve.cc:9846 fortran/resolve.cc:9858 #, gcc-internal-format, gfc-internal-format msgid "Selector at %L must not be coindexed" msgstr "" -#: fortran/resolve.cc:9640 +#: fortran/resolve.cc:9887 #, gcc-internal-format, gfc-internal-format msgid "TYPE IS at %L overlaps with TYPE IS at %L" msgstr "" -#: fortran/resolve.cc:9653 +#: fortran/resolve.cc:9900 #, gcc-internal-format msgid "Derived type %qs at %L must be extensible" msgstr "" -#: fortran/resolve.cc:9666 +#: fortran/resolve.cc:9913 #, gcc-internal-format msgid "Derived type %qs at %L must be an extension of %qs" msgstr "" -#: fortran/resolve.cc:9669 +#: fortran/resolve.cc:9916 #, gcc-internal-format msgid "Unexpected intrinsic type %qs at %L" msgstr "" -#: fortran/resolve.cc:9679 +#: fortran/resolve.cc:9926 #, gcc-internal-format, gfc-internal-format msgid "" "The type-spec at %L shall specify that each length type parameter is assumed" msgstr "" -#: fortran/resolve.cc:9926 +#: fortran/resolve.cc:10173 #, gcc-internal-format, gfc-internal-format msgid "Double CLASS IS block in SELECT TYPE statement at %L" msgstr "" -#: fortran/resolve.cc:10059 +#: fortran/resolve.cc:10306 #, gcc-internal-format, gfc-internal-format msgid "RANK DEFAULT at %L is repeated at %L" msgstr "" -#: fortran/resolve.cc:10068 +#: fortran/resolve.cc:10315 #, gcc-internal-format, gfc-internal-format msgid "RANK (*) at %L is repeated at %L" msgstr "" -#: fortran/resolve.cc:10071 +#: fortran/resolve.cc:10318 #, gcc-internal-format, gfc-internal-format msgid "RANK (%i) at %L is repeated at %L" msgstr "" -#: fortran/resolve.cc:10081 +#: fortran/resolve.cc:10328 #, gcc-internal-format, gfc-internal-format msgid "" "RANK (*) at %L cannot be used with the pointer or allocatable selector at %L" msgstr "" -#: fortran/resolve.cc:10190 +#: fortran/resolve.cc:10437 #, gcc-internal-format, gfc-internal-format msgid "Invalid context for NULL () intrinsic at %L" msgstr "" -#: fortran/resolve.cc:10244 +#: fortran/resolve.cc:10491 #, gcc-internal-format, gfc-internal-format msgid "DTIO %s procedure at %L must be recursive" msgstr "" -#: fortran/resolve.cc:10254 +#: fortran/resolve.cc:10501 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot be polymorphic unless it is processed by " "a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:10267 +#: fortran/resolve.cc:10514 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have POINTER components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:10276 +#: fortran/resolve.cc:10523 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have procedure pointer components" msgstr "" -#: fortran/resolve.cc:10283 +#: fortran/resolve.cc:10530 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have ALLOCATABLE components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:10294 +#: fortran/resolve.cc:10541 #, gcc-internal-format, gfc-internal-format msgid "Data transfer element at %L cannot have PRIVATE components" msgstr "" -#: fortran/resolve.cc:10300 +#: fortran/resolve.cc:10547 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot have PRIVATE components unless it is " "processed by a defined input/output procedure" msgstr "" -#: fortran/resolve.cc:10318 +#: fortran/resolve.cc:10565 #, gcc-internal-format, gfc-internal-format msgid "" "Data transfer element at %L cannot be a full reference to an assumed-size " "array" msgstr "" -#: fortran/resolve.cc:10375 +#: fortran/resolve.cc:10622 #, gcc-internal-format, gfc-internal-format msgid "Lock variable at %L must be a scalar of type LOCK_TYPE" msgstr "" -#: fortran/resolve.cc:10385 +#: fortran/resolve.cc:10632 #, gcc-internal-format, gfc-internal-format msgid "Event variable at %L must be a scalar of type EVENT_TYPE" msgstr "" -#: fortran/resolve.cc:10389 +#: fortran/resolve.cc:10636 #, gcc-internal-format, gfc-internal-format msgid "Event variable argument at %L must be a coarray or coindexed" msgstr "" -#: fortran/resolve.cc:10392 +#: fortran/resolve.cc:10639 #, gcc-internal-format, gfc-internal-format msgid "Event variable argument at %L must be a coarray but not coindexed" msgstr "" -#: fortran/resolve.cc:10399 fortran/resolve.cc:10521 +#: fortran/resolve.cc:10646 fortran/resolve.cc:10768 #, gcc-internal-format, gfc-internal-format msgid "STAT= argument at %L must be a scalar INTEGER variable" msgstr "" -#: fortran/resolve.cc:10411 fortran/resolve.cc:10533 +#: fortran/resolve.cc:10658 fortran/resolve.cc:10780 #, gcc-internal-format, gfc-internal-format msgid "ERRMSG= argument at %L must be a scalar CHARACTER variable" msgstr "" -#: fortran/resolve.cc:10423 +#: fortran/resolve.cc:10670 #, gcc-internal-format, gfc-internal-format msgid "ACQUIRED_LOCK= argument at %L must be a scalar LOGICAL variable" msgstr "" -#: fortran/resolve.cc:10436 +#: fortran/resolve.cc:10683 #, gcc-internal-format, gfc-internal-format msgid "UNTIL_COUNT= argument at %L must be a scalar INTEGER expression" msgstr "" -#: fortran/resolve.cc:10497 +#: fortran/resolve.cc:10744 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must be a scalar or rank-1 INTEGER expression" msgstr "" -#: fortran/resolve.cc:10501 fortran/resolve.cc:10511 +#: fortran/resolve.cc:10748 fortran/resolve.cc:10758 #, gcc-internal-format, gfc-internal-format msgid "Imageset argument at %L must between 1 and num_images()" msgstr "" -#: fortran/resolve.cc:10564 +#: fortran/resolve.cc:10811 #, gcc-internal-format, gfc-internal-format msgid "" "Statement at %L is not a valid branch target statement for the branch " "statement at %L" msgstr "" -#: fortran/resolve.cc:10574 +#: fortran/resolve.cc:10821 #, gcc-internal-format, gfc-internal-format msgid "Branch at %L may result in an infinite loop" msgstr "" #. Note: A label at END CRITICAL does not leave the CRITICAL #. construct as END CRITICAL is still part of it. -#: fortran/resolve.cc:10591 fortran/resolve.cc:10614 +#: fortran/resolve.cc:10838 fortran/resolve.cc:10861 #, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves CRITICAL construct for label at %L" msgstr "" -#: fortran/resolve.cc:10595 fortran/resolve.cc:10620 +#: fortran/resolve.cc:10842 fortran/resolve.cc:10867 #, gcc-internal-format, gfc-internal-format msgid "GOTO statement at %L leaves DO CONCURRENT construct for label at %L" msgstr "" @@ -83583,80 +83894,80 @@ msgstr "" #. The label is not in an enclosing block, so illegal. This was #. allowed in Fortran 66, so we allow it as extension. No #. further checks are necessary in this case. -#: fortran/resolve.cc:10635 +#: fortran/resolve.cc:10882 #, gcc-internal-format, gfc-internal-format msgid "Label at %L is not in the same block as the GOTO statement at %L" msgstr "" -#: fortran/resolve.cc:10707 +#: fortran/resolve.cc:10954 #, gcc-internal-format, gfc-internal-format msgid "WHERE mask at %L has inconsistent shape" msgstr "" -#: fortran/resolve.cc:10723 +#: fortran/resolve.cc:10970 #, gcc-internal-format, gfc-internal-format msgid "WHERE assignment target at %L has inconsistent shape" msgstr "" -#: fortran/resolve.cc:10736 fortran/resolve.cc:10828 +#: fortran/resolve.cc:10983 fortran/resolve.cc:11075 #, gcc-internal-format, gfc-internal-format msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L" msgstr "" -#: fortran/resolve.cc:10746 fortran/resolve.cc:10838 +#: fortran/resolve.cc:10993 fortran/resolve.cc:11085 #, gcc-internal-format, gfc-internal-format msgid "Unsupported statement inside WHERE at %L" msgstr "" -#: fortran/resolve.cc:10777 +#: fortran/resolve.cc:11024 #, gcc-internal-format, gfc-internal-format msgid "Assignment to a FORALL index variable at %L" msgstr "" -#: fortran/resolve.cc:10786 +#: fortran/resolve.cc:11033 #, gcc-internal-format msgid "" "The FORALL with index %qs is not used on the left side of the assignment at " "%L and so might cause multiple assignment to this object" msgstr "" -#: fortran/resolve.cc:10943 +#: fortran/resolve.cc:11190 #, gcc-internal-format, gfc-internal-format msgid "FORALL construct at %L" msgstr "" -#: fortran/resolve.cc:10964 +#: fortran/resolve.cc:11211 #, gcc-internal-format, gfc-internal-format msgid "FORALL index-name at %L must be a scalar variable of type integer" msgstr "" -#: fortran/resolve.cc:10974 +#: fortran/resolve.cc:11221 #, gcc-internal-format, gfc-internal-format msgid "An outer FORALL construct already has an index with this name %L" msgstr "" -#: fortran/resolve.cc:11051 +#: fortran/resolve.cc:11298 #, gcc-internal-format, gfc-internal-format msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array" msgstr "" -#: fortran/resolve.cc:11169 +#: fortran/resolve.cc:11416 #, gcc-internal-format msgid "gfc_resolve_blocks(): Bad block type" msgstr "" -#: fortran/resolve.cc:11232 +#: fortran/resolve.cc:11479 #, gcc-internal-format, gfc-internal-format msgid "" "Variable in the ordinary assignment at %L is a procedure pointer component" msgstr "" -#: fortran/resolve.cc:11293 +#: fortran/resolve.cc:11540 #, gcc-internal-format msgid "CHARACTER expression will be truncated in assignment (%wd/%wd) at %L" msgstr "" -#: fortran/resolve.cc:11325 +#: fortran/resolve.cc:11572 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed expression at %L is assigned to a derived type variable with a " @@ -83664,7 +83975,7 @@ msgid "" msgstr "" #. F2008, C1283 (4). -#: fortran/resolve.cc:11331 +#: fortran/resolve.cc:11578 #, gcc-internal-format, gfc-internal-format msgid "" "In a pure subprogram an INTENT(IN) dummy argument shall not be used as the " @@ -83673,43 +83984,43 @@ msgid "" "component selection." msgstr "" -#: fortran/resolve.cc:11343 +#: fortran/resolve.cc:11590 #, gcc-internal-format, gfc-internal-format msgid "Assignment to coindexed variable at %L in a PURE procedure" msgstr "" -#: fortran/resolve.cc:11375 +#: fortran/resolve.cc:11622 #, gcc-internal-format, gfc-internal-format msgid "Assignment to polymorphic coarray at %L is not permitted" msgstr "" -#: fortran/resolve.cc:11379 +#: fortran/resolve.cc:11626 #, gcc-internal-format, gfc-internal-format msgid "Assignment to an allocatable polymorphic variable at %L" msgstr "" -#: fortran/resolve.cc:11384 +#: fortran/resolve.cc:11631 #, gcc-internal-format msgid "" "Assignment to an allocatable polymorphic variable at %L requires %<-frealloc-" "lhs%>" msgstr "" -#: fortran/resolve.cc:11391 +#: fortran/resolve.cc:11638 #, gcc-internal-format msgid "" "Nonallocatable variable must not be polymorphic in intrinsic assignment at " "%L - check that there is a matching specific subroutine for %<=%> operator" msgstr "" -#: fortran/resolve.cc:11402 +#: fortran/resolve.cc:11649 #, gcc-internal-format, gfc-internal-format msgid "" "Coindexed variable must not have an allocatable ultimate component in " "assignment at %L" msgstr "" -#: fortran/resolve.cc:11825 +#: fortran/resolve.cc:12072 #, gcc-internal-format, gfc-internal-format msgid "" "TODO: type-bound defined assignment(s) at %L not done because multiple part " @@ -83718,93 +84029,93 @@ msgstr "" #. Even if standard does not support this feature, continue to build #. the two statements to avoid upsetting frontend_passes.c. -#: fortran/resolve.cc:12129 +#: fortran/resolve.cc:12376 #, gcc-internal-format, gfc-internal-format msgid "Pointer procedure assignment at %L" msgstr "" -#: fortran/resolve.cc:12141 +#: fortran/resolve.cc:12388 #, gcc-internal-format, gfc-internal-format msgid "" "The function result on the lhs of the assignment at %L must have the pointer " "attribute." msgstr "" -#: fortran/resolve.cc:12226 +#: fortran/resolve.cc:12473 #, gcc-internal-format msgid "" "TEAM argument to %qs at %L must be a scalar expression of type TEAM_TYPE" msgstr "" -#: fortran/resolve.cc:12417 +#: fortran/resolve.cc:12664 #, gcc-internal-format, gfc-internal-format msgid "TEAM NUMBER argument to FORM TEAM at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.cc:12453 +#: fortran/resolve.cc:12700 #, gcc-internal-format, gfc-internal-format msgid "ASSIGNED GOTO statement at %L requires a scalar INTEGER variable" msgstr "" -#: fortran/resolve.cc:12457 +#: fortran/resolve.cc:12704 #, gcc-internal-format msgid "Variable %qs has not been assigned a target label at %L" msgstr "" -#: fortran/resolve.cc:12468 +#: fortran/resolve.cc:12715 #, gcc-internal-format, gfc-internal-format msgid "" "Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier" msgstr "" -#: fortran/resolve.cc:12506 +#: fortran/resolve.cc:12753 #, gcc-internal-format, gfc-internal-format msgid "Expected intrinsic assignment in OMP WORKSHARE at %L" msgstr "" -#: fortran/resolve.cc:12548 +#: fortran/resolve.cc:12795 #, gcc-internal-format, gfc-internal-format msgid "ASSIGN statement at %L requires a scalar default INTEGER variable" msgstr "" -#: fortran/resolve.cc:12595 +#: fortran/resolve.cc:12842 #, gcc-internal-format, gfc-internal-format msgid "Invalid NULL at %L" msgstr "" -#: fortran/resolve.cc:12599 +#: fortran/resolve.cc:12846 #, gcc-internal-format, gfc-internal-format msgid "" "Arithmetic IF statement at %L requires a scalar REAL or INTEGER expression" msgstr "" -#: fortran/resolve.cc:12660 +#: fortran/resolve.cc:12907 #, gcc-internal-format msgid "gfc_resolve_code(): No expression on DO WHILE" msgstr "" -#: fortran/resolve.cc:12665 +#: fortran/resolve.cc:12912 #, gcc-internal-format, gfc-internal-format msgid "" "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.cc:12749 +#: fortran/resolve.cc:12996 #, gcc-internal-format, gfc-internal-format msgid "FORALL mask clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.cc:12853 +#: fortran/resolve.cc:13100 #, gcc-internal-format msgid "gfc_resolve_code(): Bad statement code" msgstr "" -#: fortran/resolve.cc:12874 +#: fortran/resolve.cc:13121 #, gcc-internal-format msgid "Using parameter %qs declared at %L is deprecated" msgstr "" -#: fortran/resolve.cc:12968 +#: fortran/resolve.cc:13215 #, gcc-internal-format msgid "" "Variable %qs with binding label %qs at %L uses the same global identifier as " @@ -83813,7 +84124,7 @@ msgstr "" #. This can only happen if the variable is defined in a module - if it #. isn't the same module, reject it. -#: fortran/resolve.cc:12982 +#: fortran/resolve.cc:13229 #, gcc-internal-format msgid "" "Variable %qs from module %qs with binding label %qs at %L uses the same " @@ -83823,63 +84134,63 @@ msgstr "" #. Print an error if the procedure is defined multiple times; we have to #. exclude references to the same procedure via module association or #. multiple checks for the same procedure. -#: fortran/resolve.cc:13001 +#: fortran/resolve.cc:13248 #, gcc-internal-format msgid "" "Procedure %qs with binding label %qs at %L uses the same global identifier " "as entity at %L" msgstr "" -#: fortran/resolve.cc:13087 +#: fortran/resolve.cc:13334 #, gcc-internal-format, gfc-internal-format msgid "String length at %L is too large" msgstr "" -#: fortran/resolve.cc:13325 +#: fortran/resolve.cc:13572 #, gcc-internal-format msgid "Allocatable array %qs at %L must have a deferred shape or assumed rank" msgstr "" -#: fortran/resolve.cc:13329 +#: fortran/resolve.cc:13576 #, gcc-internal-format msgid "Scalar object %qs at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:13337 +#: fortran/resolve.cc:13584 #, gcc-internal-format msgid "Array pointer %qs at %L must have a deferred shape or assumed rank" msgstr "" -#: fortran/resolve.cc:13348 +#: fortran/resolve.cc:13595 #, gcc-internal-format msgid "Array %qs at %L cannot have a deferred shape" msgstr "" -#: fortran/resolve.cc:13366 +#: fortran/resolve.cc:13613 #, gcc-internal-format msgid "Type %qs of CLASS variable %qs at %L is not extensible" msgstr "" -#: fortran/resolve.cc:13378 +#: fortran/resolve.cc:13625 #, gcc-internal-format msgid "CLASS variable %qs at %L must be dummy, allocatable or pointer" msgstr "" -#: fortran/resolve.cc:13411 +#: fortran/resolve.cc:13658 #, gcc-internal-format msgid "" "The type %qs cannot be host associated at %L because it is blocked by an " "incompatible object of the same name declared at %L" msgstr "" -#: fortran/resolve.cc:13433 +#: fortran/resolve.cc:13680 #, gcc-internal-format msgid "" "Implied SAVE for module variable %qs at %L, needed due to the default " "initialization" msgstr "" -#: fortran/resolve.cc:13466 +#: fortran/resolve.cc:13713 #, gcc-internal-format msgid "" "Entity %qs at %L has a deferred type parameter and requires either the " @@ -83888,1057 +84199,1071 @@ msgstr "" #. F08:C541. The shape of an array defined in a main program or module #. * needs to be constant. -#: fortran/resolve.cc:13502 +#: fortran/resolve.cc:13749 #, gcc-internal-format msgid "The module or main program array %qs at %L must have constant shape" msgstr "" -#: fortran/resolve.cc:13527 +#: fortran/resolve.cc:13774 #, gcc-internal-format, gfc-internal-format msgid "" "Entity with assumed character length at %L must be a dummy argument or a " "PARAMETER" msgstr "" -#: fortran/resolve.cc:13548 +#: fortran/resolve.cc:13795 #, gcc-internal-format msgid "%qs at %L must have constant character length in this context" msgstr "" -#: fortran/resolve.cc:13555 +#: fortran/resolve.cc:13802 #, gcc-internal-format msgid "COMMON variable %qs at %L must have constant character length" msgstr "" -#: fortran/resolve.cc:13603 +#: fortran/resolve.cc:13850 #, gcc-internal-format msgid "Allocatable %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:13606 +#: fortran/resolve.cc:13853 #, gcc-internal-format msgid "External %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:13609 +#: fortran/resolve.cc:13856 #, gcc-internal-format msgid "Dummy %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:13612 +#: fortran/resolve.cc:13859 #, gcc-internal-format msgid "Intrinsic %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:13615 +#: fortran/resolve.cc:13862 #, gcc-internal-format msgid "Function result %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:13618 +#: fortran/resolve.cc:13865 #, gcc-internal-format msgid "Automatic array %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:13660 +#: fortran/resolve.cc:13907 #, gcc-internal-format, gfc-internal-format msgid "%s at %L" msgstr "" -#: fortran/resolve.cc:13692 +#: fortran/resolve.cc:13939 #, gcc-internal-format msgid "Character-valued statement function %qs at %L must have constant length" msgstr "" -#: fortran/resolve.cc:13715 +#: fortran/resolve.cc:13962 #, gcc-internal-format msgid "" "%qs is of a PRIVATE type and cannot be a dummy argument of %qs, which is " "PUBLIC at %L" msgstr "" -#: fortran/resolve.cc:13737 +#: fortran/resolve.cc:13984 #, gcc-internal-format msgid "" "Procedure %qs in PUBLIC interface %qs at %L takes dummy arguments of %qs " "which is PRIVATE" msgstr "" -#: fortran/resolve.cc:13755 +#: fortran/resolve.cc:14002 #, gcc-internal-format msgid "Function %qs at %L cannot have an initializer" msgstr "" -#: fortran/resolve.cc:13767 +#: fortran/resolve.cc:14014 #, gcc-internal-format msgid "External object %qs at %L may not have an initializer" msgstr "" -#: fortran/resolve.cc:13777 +#: fortran/resolve.cc:14024 #, gcc-internal-format msgid "ELEMENTAL function %qs at %L must have a scalar result" msgstr "" -#: fortran/resolve.cc:13787 +#: fortran/resolve.cc:14034 #, gcc-internal-format msgid "" "Statement function %qs at %L may not have pointer or allocatable attribute" msgstr "" -#: fortran/resolve.cc:13806 +#: fortran/resolve.cc:14053 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be array-valued" msgstr "" -#: fortran/resolve.cc:13810 +#: fortran/resolve.cc:14057 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be pointer-valued" msgstr "" -#: fortran/resolve.cc:13814 +#: fortran/resolve.cc:14061 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be pure" msgstr "" -#: fortran/resolve.cc:13818 +#: fortran/resolve.cc:14065 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L cannot be recursive" msgstr "" -#: fortran/resolve.cc:13831 +#: fortran/resolve.cc:14078 #, gcc-internal-format msgid "CHARACTER(*) function %qs at %L" msgstr "" -#: fortran/resolve.cc:13842 +#: fortran/resolve.cc:14089 #, gcc-internal-format msgid "Procedure pointer %qs at %L shall not be elemental" msgstr "" -#: fortran/resolve.cc:13848 +#: fortran/resolve.cc:14095 #, gcc-internal-format msgid "Dummy procedure %qs at %L shall not be elemental" msgstr "" -#: fortran/resolve.cc:13868 +#: fortran/resolve.cc:14115 #, gcc-internal-format msgid "" "Function result variable %qs at %L of elemental function %qs shall not have " "an ALLOCATABLE or POINTER attribute" msgstr "" -#: fortran/resolve.cc:13925 +#: fortran/resolve.cc:14172 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with SAVE attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:13931 +#: fortran/resolve.cc:14178 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with INTENT attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:13937 +#: fortran/resolve.cc:14184 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with RESULT attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:13945 +#: fortran/resolve.cc:14192 #, gcc-internal-format msgid "EXTERNAL attribute conflicts with FUNCTION attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:13951 +#: fortran/resolve.cc:14198 #, gcc-internal-format msgid "Procedure pointer result %qs at %L is missing the pointer attribute" msgstr "" -#: fortran/resolve.cc:13994 +#: fortran/resolve.cc:14241 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in ELEMENTAL attribute between MODULE PROCEDURE at %L and its " "interface in %s" msgstr "" -#: fortran/resolve.cc:14002 +#: fortran/resolve.cc:14249 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in PURE attribute between MODULE PROCEDURE at %L and its interface " "in %s" msgstr "" -#: fortran/resolve.cc:14010 +#: fortran/resolve.cc:14257 #, gcc-internal-format, gfc-internal-format msgid "" "Mismatch in RECURSIVE attribute between MODULE PROCEDURE at %L and its " "interface in %s" msgstr "" -#: fortran/resolve.cc:14019 +#: fortran/resolve.cc:14266 #, gcc-internal-format msgid "" "%s between the MODULE PROCEDURE declaration in MODULE %qs and the " "declaration at %L in (SUB)MODULE %qs" msgstr "" -#: fortran/resolve.cc:14043 +#: fortran/resolve.cc:14290 #, gcc-internal-format msgid "Interface of %qs at %L must be explicit" msgstr "" -#: fortran/resolve.cc:14113 +#: fortran/resolve.cc:14360 #, gcc-internal-format msgid "FINAL procedure %qs at %L is not a SUBROUTINE" msgstr "" -#: fortran/resolve.cc:14122 +#: fortran/resolve.cc:14369 #, gcc-internal-format, gfc-internal-format msgid "FINAL procedure at %L must have exactly one argument" msgstr "" -#: fortran/resolve.cc:14130 fortran/resolve.cc:14147 +#: fortran/resolve.cc:14377 fortran/resolve.cc:14394 #, gcc-internal-format msgid "Argument of FINAL procedure at %L must be of type %qs" msgstr "" -#: fortran/resolve.cc:14138 +#: fortran/resolve.cc:14385 #, gcc-internal-format, gfc-internal-format msgid "" "FINAL procedure at %L with assumed rank argument must be the only finalizer " "with the same kind/type (F2018: C790)" msgstr "" -#: fortran/resolve.cc:14155 +#: fortran/resolve.cc:14402 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be a POINTER" msgstr "" -#: fortran/resolve.cc:14161 +#: fortran/resolve.cc:14408 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:14167 +#: fortran/resolve.cc:14414 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be OPTIONAL" msgstr "" -#: fortran/resolve.cc:14175 +#: fortran/resolve.cc:14422 #, gcc-internal-format, gfc-internal-format msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)" msgstr "" -#: fortran/resolve.cc:14184 +#: fortran/resolve.cc:14431 #, gcc-internal-format, gfc-internal-format msgid "Non-scalar FINAL procedure at %L should have assumed shape argument" msgstr "" -#: fortran/resolve.cc:14206 +#: fortran/resolve.cc:14453 #, gcc-internal-format msgid "FINAL procedure %qs declared at %L has the same rank (%d) as %qs" msgstr "" -#: fortran/resolve.cc:14243 +#: fortran/resolve.cc:14490 #, gcc-internal-format msgid "" "Only array FINAL procedures declared for derived type %qs defined at %L, " "suggest also scalar one unless an assumed rank finalizer has been declared" msgstr "" -#: fortran/resolve.cc:14284 +#: fortran/resolve.cc:14531 #, gcc-internal-format msgid "%qs and %qs cannot be mixed FUNCTION/SUBROUTINE for GENERIC %qs at %L" msgstr "" -#: fortran/resolve.cc:14320 +#: fortran/resolve.cc:14567 #, gcc-internal-format msgid "%qs and %qs for GENERIC %qs at %L are ambiguous" msgstr "" -#: fortran/resolve.cc:14379 +#: fortran/resolve.cc:14626 #, gcc-internal-format msgid "Undefined specific binding %qs as target of GENERIC %qs at %L" msgstr "" -#: fortran/resolve.cc:14391 +#: fortran/resolve.cc:14638 #, gcc-internal-format msgid "GENERIC %qs at %L must target a specific binding, %qs is GENERIC, too" msgstr "" -#: fortran/resolve.cc:14419 +#: fortran/resolve.cc:14666 #, gcc-internal-format msgid "GENERIC %qs at %L cannot overwrite specific binding with the same name" msgstr "" -#: fortran/resolve.cc:14475 +#: fortran/resolve.cc:14722 #, gcc-internal-format, gfc-internal-format msgid "Type-bound operator at %L cannot be NOPASS" msgstr "" -#: fortran/resolve.cc:14687 +#: fortran/resolve.cc:14934 #, gcc-internal-format msgid "" "%qs must be a module procedure or an external procedure with an explicit " "interface at %L" msgstr "" -#: fortran/resolve.cc:14730 +#: fortran/resolve.cc:14977 #, gcc-internal-format msgid "Procedure %qs with PASS(%s) at %L has no argument %qs" msgstr "" -#: fortran/resolve.cc:14744 +#: fortran/resolve.cc:14991 #, gcc-internal-format msgid "Procedure %qs with PASS at %L must have at least one argument" msgstr "" -#: fortran/resolve.cc:14758 fortran/resolve.cc:15246 +#: fortran/resolve.cc:15005 fortran/resolve.cc:15547 #, gcc-internal-format msgid "Non-polymorphic passed-object dummy argument of %qs at %L" msgstr "" -#: fortran/resolve.cc:14766 +#: fortran/resolve.cc:15014 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived-type %qs" msgstr "" -#: fortran/resolve.cc:14775 +#: fortran/resolve.cc:15024 +#, gcc-internal-format +msgid "" +"Argument %qs of %qs with PASS(%s) at %L must be of the parametric derived-" +"type %qs" +msgstr "" + +#: fortran/resolve.cc:15066 +#, gcc-internal-format +msgid "" +"All LEN type parameters of the passed dummy argument %qs of %qs at %L must " +"be ASSUMED." +msgstr "" + +#: fortran/resolve.cc:15076 #, gcc-internal-format msgid "Passed-object dummy argument of %qs at %L must be scalar" msgstr "" -#: fortran/resolve.cc:14781 +#: fortran/resolve.cc:15082 #, gcc-internal-format msgid "Passed-object dummy argument of %qs at %L must not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:14787 +#: fortran/resolve.cc:15088 #, gcc-internal-format msgid "Passed-object dummy argument of %qs at %L must not be POINTER" msgstr "" -#: fortran/resolve.cc:14816 +#: fortran/resolve.cc:15117 #, gcc-internal-format msgid "Procedure %qs at %L has the same name as a component of %qs" msgstr "" -#: fortran/resolve.cc:14826 +#: fortran/resolve.cc:15127 #, gcc-internal-format msgid "Procedure %qs at %L has the same name as an inherited component of %qs" msgstr "" -#: fortran/resolve.cc:14921 +#: fortran/resolve.cc:15222 #, gcc-internal-format msgid "" "Derived-type %qs declared at %L must be ABSTRACT because %qs is DEFERRED and " "not overridden" msgstr "" -#: fortran/resolve.cc:15026 +#: fortran/resolve.cc:15327 #, gcc-internal-format msgid "Coarray component %qs at %L must be allocatable with deferred shape" msgstr "" -#: fortran/resolve.cc:15035 +#: fortran/resolve.cc:15336 #, gcc-internal-format msgid "" "Component %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" msgstr "" -#: fortran/resolve.cc:15045 +#: fortran/resolve.cc:15346 #, gcc-internal-format msgid "" "Component %qs at %L with coarray component shall be a nonpointer, " "nonallocatable scalar" msgstr "" -#: fortran/resolve.cc:15070 +#: fortran/resolve.cc:15371 #, gcc-internal-format msgid "" "Component %qs at %L has the CONTIGUOUS attribute but is not an array pointer" msgstr "" -#: fortran/resolve.cc:15081 +#: fortran/resolve.cc:15382 #, gcc-internal-format msgid "Component %qs of BIND(C) type at %L must have length one" msgstr "" -#: fortran/resolve.cc:15179 +#: fortran/resolve.cc:15480 #, gcc-internal-format msgid "Procedure pointer component %qs with PASS(%s) at %L has no argument %qs" msgstr "" -#: fortran/resolve.cc:15193 +#: fortran/resolve.cc:15494 #, gcc-internal-format msgid "" "Procedure pointer component %qs with PASS at %L must have at least one " "argument" msgstr "" -#: fortran/resolve.cc:15209 +#: fortran/resolve.cc:15510 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L must be of the derived type %qs" msgstr "" -#: fortran/resolve.cc:15219 +#: fortran/resolve.cc:15520 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L must be scalar" msgstr "" -#: fortran/resolve.cc:15228 +#: fortran/resolve.cc:15529 #, gcc-internal-format msgid "" "Argument %qs of %qs with PASS(%s) at %L may not have the POINTER attribute" msgstr "" -#: fortran/resolve.cc:15237 +#: fortran/resolve.cc:15538 #, gcc-internal-format msgid "Argument %qs of %qs with PASS(%s) at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:15279 +#: fortran/resolve.cc:15580 #, gcc-internal-format msgid "" "Component %qs of %qs at %L has the same name as an inherited type-bound " "procedure" msgstr "" -#: fortran/resolve.cc:15292 +#: fortran/resolve.cc:15593 #, gcc-internal-format msgid "" "Character length of component %qs needs to be a constant specification " "expression at %L" msgstr "" -#: fortran/resolve.cc:15303 +#: fortran/resolve.cc:15604 #, gcc-internal-format msgid "" "Character length expression of component %qs at %L must be of INTEGER type, " "found %s" msgstr "" -#: fortran/resolve.cc:15316 +#: fortran/resolve.cc:15617 #, gcc-internal-format msgid "" "Character component %qs of %qs at %L with deferred length must be a POINTER " "or ALLOCATABLE" msgstr "" -#: fortran/resolve.cc:15349 +#: fortran/resolve.cc:15650 #, gcc-internal-format msgid "" "the component %qs is a PRIVATE type and cannot be a component of %qs, which " "is PUBLIC at %L" msgstr "" -#: fortran/resolve.cc:15357 +#: fortran/resolve.cc:15658 #, gcc-internal-format, gfc-internal-format msgid "Polymorphic component %s at %L in SEQUENCE or BIND(C) type %s" msgstr "" -#: fortran/resolve.cc:15366 +#: fortran/resolve.cc:15667 #, gcc-internal-format, gfc-internal-format msgid "" "Component %s of SEQUENCE type declared at %L does not have the SEQUENCE " "attribute" msgstr "" -#: fortran/resolve.cc:15452 +#: fortran/resolve.cc:15753 #, gcc-internal-format, gfc-internal-format msgid "Conflicting initializers in union at %L and %L" msgstr "" -#: fortran/resolve.cc:15497 +#: fortran/resolve.cc:15798 #, gcc-internal-format msgid "" "As extending type %qs at %L has a coarray component, parent type %qs shall " "also have one" msgstr "" -#: fortran/resolve.cc:15510 +#: fortran/resolve.cc:15811 #, gcc-internal-format msgid "Non-extensible derived-type %qs at %L must not be ABSTRACT" msgstr "" -#: fortran/resolve.cc:15574 +#: fortran/resolve.cc:15875 #, gcc-internal-format msgid "" "Parameterized type %qs does not have a component corresponding to parameter " "%qs at %L" msgstr "" -#: fortran/resolve.cc:15607 +#: fortran/resolve.cc:15908 #, gcc-internal-format msgid "" "Generic name %qs of function %qs at %L being the same name as derived type " "at %L" msgstr "" -#: fortran/resolve.cc:15621 +#: fortran/resolve.cc:15922 #, gcc-internal-format msgid "Derived type %qs at %L has not been declared" msgstr "" -#: fortran/resolve.cc:15689 +#: fortran/resolve.cc:15990 #, gcc-internal-format msgid "Assumed size array %qs in namelist %qs at %L is not allowed" msgstr "" -#: fortran/resolve.cc:15695 +#: fortran/resolve.cc:15996 #, gcc-internal-format msgid "NAMELIST array object %qs with assumed shape in namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:15701 +#: fortran/resolve.cc:16002 #, gcc-internal-format msgid "NAMELIST array object %qs with nonconstant shape in namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:15709 +#: fortran/resolve.cc:16010 #, gcc-internal-format msgid "" "NAMELIST object %qs with nonconstant character length in namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:15726 +#: fortran/resolve.cc:16027 #, gcc-internal-format msgid "" "NAMELIST object %qs was declared PRIVATE and cannot be member of PUBLIC " "namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:15748 +#: fortran/resolve.cc:16049 #, gcc-internal-format msgid "" "NAMELIST object %qs has use-associated PRIVATE components and cannot be " "member of namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:15759 +#: fortran/resolve.cc:16060 #, gcc-internal-format msgid "" "NAMELIST object %qs has PRIVATE components and cannot be a member of PUBLIC " "namelist %qs at %L" msgstr "" -#: fortran/resolve.cc:15786 +#: fortran/resolve.cc:16087 #, gcc-internal-format msgid "PROCEDURE attribute conflicts with NAMELIST attribute in %qs at %L" msgstr "" -#: fortran/resolve.cc:15805 +#: fortran/resolve.cc:16106 #, gcc-internal-format msgid "Parameter array %qs at %L cannot be automatic or of deferred shape" msgstr "" -#: fortran/resolve.cc:15821 +#: fortran/resolve.cc:16122 #, gcc-internal-format msgid "" "Implicitly typed PARAMETER %qs at %L doesn't match a later IMPLICIT type" msgstr "" -#: fortran/resolve.cc:15832 +#: fortran/resolve.cc:16133 #, gcc-internal-format, gfc-internal-format msgid "Incompatible derived type in PARAMETER at %L" msgstr "" -#: fortran/resolve.cc:15840 +#: fortran/resolve.cc:16141 #, gcc-internal-format msgid "CLASS variable %qs at %L cannot have the PARAMETER attribute" msgstr "" -#: fortran/resolve.cc:15891 +#: fortran/resolve.cc:16193 #, gcc-internal-format msgid "" -"The object %qs at %L has a deferred LEN parameter %qs and is neither " -"allocatable nor a pointer" +"Entity %qs at %L has a deferred LEN parameter %qs and requires either the " +"POINTER or ALLOCATABLE attribute" msgstr "" -#: fortran/resolve.cc:15902 +#: fortran/resolve.cc:16205 #, gcc-internal-format msgid "" "The AUTOMATIC object %qs at %L must not have the SAVE attribute or be a " "variable declared in the main program, a module or a submodule(F08/C513)" msgstr "" -#: fortran/resolve.cc:15909 +#: fortran/resolve.cc:16212 #, gcc-internal-format msgid "" "The object %qs at %L with ASSUMED type parameters must be a dummy or a " "SELECT TYPE selector(F08/4.2)" msgstr "" -#: fortran/resolve.cc:15949 +#: fortran/resolve.cc:16271 #, gcc-internal-format, gfc-internal-format msgid "" "Sorry, allocatable/pointer components in polymorphic (CLASS) type coarrays " "at %L are unsupported" msgstr "" -#: fortran/resolve.cc:15962 +#: fortran/resolve.cc:16284 #, gcc-internal-format msgid "" "%<omp_all_memory%>, declared at %L, may only be used in the OpenMP DEPEND " "clause" msgstr "" -#: fortran/resolve.cc:16020 +#: fortran/resolve.cc:16342 #, gcc-internal-format, gfc-internal-format msgid "PROTECTED attribute conflicts with EXTERNAL attribute at %L" msgstr "" -#: fortran/resolve.cc:16023 +#: fortran/resolve.cc:16345 #, gcc-internal-format, gfc-internal-format msgid "PROCEDURE attribute conflicts with PROTECTED attribute at %L" msgstr "" -#: fortran/resolve.cc:16129 +#: fortran/resolve.cc:16442 #, gcc-internal-format msgid "" "%qs at %L has the CONTIGUOUS attribute but is not an array pointer or an " "assumed-shape or assumed-rank array" msgstr "" -#: fortran/resolve.cc:16150 +#: fortran/resolve.cc:16463 #, gcc-internal-format, gfc-internal-format msgid "Bad specification for assumed size array at %L" msgstr "" -#: fortran/resolve.cc:16164 +#: fortran/resolve.cc:16477 #, gcc-internal-format, gfc-internal-format msgid "Assumed size array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.cc:16167 +#: fortran/resolve.cc:16480 #, gcc-internal-format, gfc-internal-format msgid "Assumed shape array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.cc:16177 +#: fortran/resolve.cc:16490 #, gcc-internal-format, gfc-internal-format msgid "Assumed-rank array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.cc:16184 +#: fortran/resolve.cc:16497 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-rank array at %L may not have the VALUE or CODIMENSION attribute" msgstr "" -#: fortran/resolve.cc:16197 +#: fortran/resolve.cc:16510 #, gcc-internal-format, gfc-internal-format msgid "Symbol at %L is not a DUMMY variable" msgstr "" -#: fortran/resolve.cc:16203 +#: fortran/resolve.cc:16516 #, gcc-internal-format msgid "" "%qs at %L cannot have the VALUE attribute because it is not a dummy argument" msgstr "" -#: fortran/resolve.cc:16213 +#: fortran/resolve.cc:16526 #, gcc-internal-format msgid "" "Character dummy variable %qs at %L with VALUE attribute must have constant " "length" msgstr "" -#: fortran/resolve.cc:16222 +#: fortran/resolve.cc:16535 #, gcc-internal-format msgid "" "C interoperable character dummy variable %qs at %L with VALUE attribute must " "have length one" msgstr "" -#: fortran/resolve.cc:16235 fortran/resolve.cc:16412 +#: fortran/resolve.cc:16548 fortran/resolve.cc:16725 #, gcc-internal-format msgid "The derived type %qs at %L is of type %qs, which has not been defined" msgstr "" -#: fortran/resolve.cc:16249 +#: fortran/resolve.cc:16562 #, gcc-internal-format, gfc-internal-format msgid "Variable %s at %L with NO_ARG_CHECK attribute shall be a dummy argument" msgstr "" -#: fortran/resolve.cc:16258 +#: fortran/resolve.cc:16571 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute shall be of type TYPE(*) or of " "an numeric intrinsic type" msgstr "" -#: fortran/resolve.cc:16267 +#: fortran/resolve.cc:16580 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute may not have the ALLOCATABLE, " "CODIMENSION, POINTER or VALUE attribute" msgstr "" -#: fortran/resolve.cc:16275 +#: fortran/resolve.cc:16588 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute may not have the INTENT(OUT) " "attribute" msgstr "" -#: fortran/resolve.cc:16282 +#: fortran/resolve.cc:16595 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L with NO_ARG_CHECK attribute shall either be a scalar or an " "assumed-size array" msgstr "" -#: fortran/resolve.cc:16302 +#: fortran/resolve.cc:16615 #, gcc-internal-format, gfc-internal-format msgid "Assumed type of variable %s at %L is only permitted for dummy variables" msgstr "" -#: fortran/resolve.cc:16309 +#: fortran/resolve.cc:16622 #, gcc-internal-format, gfc-internal-format msgid "" "Assumed-type variable %s at %L may not have the ALLOCATABLE, CODIMENSION, " "POINTER or VALUE attribute" msgstr "" -#: fortran/resolve.cc:16316 +#: fortran/resolve.cc:16629 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L may not have the INTENT(OUT) attribute" msgstr "" -#: fortran/resolve.cc:16323 +#: fortran/resolve.cc:16636 #, gcc-internal-format, gfc-internal-format msgid "Assumed-type variable %s at %L shall not be an explicit-shape array" msgstr "" -#: fortran/resolve.cc:16349 +#: fortran/resolve.cc:16662 #, gcc-internal-format msgid "" "Variable %qs at %L cannot be BIND(C) because it is neither a COMMON block " "nor declared at the module level scope" msgstr "" -#: fortran/resolve.cc:16359 +#: fortran/resolve.cc:16672 #, gcc-internal-format msgid "BIND(C) Variable %qs at %L must have length one" msgstr "" -#: fortran/resolve.cc:16438 +#: fortran/resolve.cc:16751 #, gcc-internal-format msgid "PUBLIC %s %qs at %L of PRIVATE derived type %qs" msgstr "" -#: fortran/resolve.cc:16453 +#: fortran/resolve.cc:16766 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L of type LOCK_TYPE or with subcomponent of type LOCK_TYPE " "must be a coarray" msgstr "" -#: fortran/resolve.cc:16466 +#: fortran/resolve.cc:16779 #, gcc-internal-format, gfc-internal-format msgid "" "Variable %s at %L of type EVENT_TYPE or with subcomponent of type EVENT_TYPE " "must be a coarray" msgstr "" -#: fortran/resolve.cc:16484 +#: fortran/resolve.cc:16797 #, gcc-internal-format msgid "" "The INTENT(OUT) dummy argument %qs at %L is ASSUMED SIZE and so cannot have " "a default initializer" msgstr "" -#: fortran/resolve.cc:16496 +#: fortran/resolve.cc:16809 #, gcc-internal-format msgid "Dummy argument %qs at %L of LOCK_TYPE shall not be INTENT(OUT)" msgstr "" -#: fortran/resolve.cc:16505 +#: fortran/resolve.cc:16818 #, gcc-internal-format msgid "Dummy argument %qs at %L of EVENT_TYPE shall not be INTENT(OUT)" msgstr "" -#: fortran/resolve.cc:16518 +#: fortran/resolve.cc:16831 #, gcc-internal-format msgid "" "Function result %qs at %L shall not be a coarray or have a coarray component" msgstr "" -#: fortran/resolve.cc:16527 +#: fortran/resolve.cc:16840 #, gcc-internal-format msgid "" "Variable %qs at %L of TYPE(C_PTR) or TYPE(C_FUNPTR) shall not be a coarray" msgstr "" -#: fortran/resolve.cc:16540 +#: fortran/resolve.cc:16853 #, gcc-internal-format msgid "" "Variable %qs at %L with coarray component shall be a nonpointer, " "nonallocatable scalar, which is not a coarray" msgstr "" -#: fortran/resolve.cc:16556 +#: fortran/resolve.cc:16869 #, gcc-internal-format msgid "" "Variable %qs at %L is a coarray and is not ALLOCATABLE, SAVE nor a dummy " "argument" msgstr "" -#: fortran/resolve.cc:16564 +#: fortran/resolve.cc:16877 #, gcc-internal-format msgid "" "Coarray variable %qs at %L shall not have codimensions with deferred shape" msgstr "" -#: fortran/resolve.cc:16571 +#: fortran/resolve.cc:16884 #, gcc-internal-format msgid "Allocatable coarray variable %qs at %L must have deferred shape" msgstr "" -#: fortran/resolve.cc:16584 +#: fortran/resolve.cc:16897 #, gcc-internal-format msgid "" "Variable %qs at %L is INTENT(OUT) and can thus not be an allocatable coarray " "or have coarray components" msgstr "" -#: fortran/resolve.cc:16593 +#: fortran/resolve.cc:16906 #, gcc-internal-format msgid "Coarray dummy variable %qs at %L not allowed in BIND(C) procedure %qs" msgstr "" -#: fortran/resolve.cc:16609 +#: fortran/resolve.cc:16922 #, gcc-internal-format msgid "" "LOGICAL dummy argument %qs at %L with non-C_Bool kind in BIND(C) procedure " "%qs" msgstr "" -#: fortran/resolve.cc:16615 +#: fortran/resolve.cc:16928 #, gcc-internal-format msgid "" "LOGICAL result variable %qs at %L with non-C_Bool kind in BIND(C) procedure " "%qs" msgstr "" -#: fortran/resolve.cc:16640 +#: fortran/resolve.cc:16953 #, gcc-internal-format msgid "Namelist %qs cannot be an argument to subroutine or function at %L" msgstr "" -#: fortran/resolve.cc:16711 +#: fortran/resolve.cc:17013 #, gcc-internal-format, gfc-internal-format msgid "Threadprivate at %L isn't SAVEd" msgstr "" -#: fortran/resolve.cc:16723 +#: fortran/resolve.cc:17025 #, gcc-internal-format msgid "!$OMP DECLARE TARGET variable %qs at %L isn't SAVEd" msgstr "" -#: fortran/resolve.cc:16839 +#: fortran/resolve.cc:17132 #, gcc-internal-format, gfc-internal-format msgid "Expecting definable entity near %L" msgstr "" -#: fortran/resolve.cc:16847 +#: fortran/resolve.cc:17140 #, gcc-internal-format msgid "BLOCK DATA element %qs at %L must be in COMMON" msgstr "" -#: fortran/resolve.cc:16854 +#: fortran/resolve.cc:17147 #, gcc-internal-format msgid "DATA array %qs at %L must be specified in a previous declaration" msgstr "" -#: fortran/resolve.cc:16861 +#: fortran/resolve.cc:17154 #, gcc-internal-format msgid "DATA element %qs at %L cannot have a coindex" msgstr "" -#: fortran/resolve.cc:16877 +#: fortran/resolve.cc:17170 #, gcc-internal-format msgid "DATA element %qs at %L is a pointer and so must be a full array" msgstr "" -#: fortran/resolve.cc:16884 +#: fortran/resolve.cc:17177 #, gcc-internal-format, gfc-internal-format msgid "" "DATA object near %L has the pointer attribute and the corresponding DATA " "value is not a valid initial-data-target" msgstr "" -#: fortran/resolve.cc:16893 +#: fortran/resolve.cc:17186 #, gcc-internal-format msgid "DATA element %qs at %L cannot have the ALLOCATABLE attribute" msgstr "" -#: fortran/resolve.cc:16955 +#: fortran/resolve.cc:17248 #, gcc-internal-format, gfc-internal-format msgid "Nonconstant array section at %L in DATA statement" msgstr "" -#: fortran/resolve.cc:16968 +#: fortran/resolve.cc:17261 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more variables than values" msgstr "" -#: fortran/resolve.cc:17044 +#: fortran/resolve.cc:17337 #, gcc-internal-format, gfc-internal-format msgid "Non-constant character length at %L in DATA statement" msgstr "" -#: fortran/resolve.cc:17072 +#: fortran/resolve.cc:17365 #, gcc-internal-format, gfc-internal-format msgid "" "start of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.cc:17080 +#: fortran/resolve.cc:17373 #, gcc-internal-format, gfc-internal-format msgid "" "end of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.cc:17088 +#: fortran/resolve.cc:17381 #, gcc-internal-format, gfc-internal-format msgid "" "step of implied-do loop at %L could not be simplified to a constant value" msgstr "" -#: fortran/resolve.cc:17095 +#: fortran/resolve.cc:17388 #, gcc-internal-format, gfc-internal-format msgid "step of implied-do loop at %L shall not be zero" msgstr "" -#: fortran/resolve.cc:17220 +#: fortran/resolve.cc:17513 #, gcc-internal-format, gfc-internal-format msgid "DATA statement at %L has more values than variables" msgstr "" -#: fortran/resolve.cc:17386 +#: fortran/resolve.cc:17679 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but not used" msgstr "" -#: fortran/resolve.cc:17392 +#: fortran/resolve.cc:17685 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %L defined but cannot be used" msgstr "" -#: fortran/resolve.cc:17476 +#: fortran/resolve.cc:17769 #, gcc-internal-format msgid "" "Derived type variable %qs at %L must have SEQUENCE attribute to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:17485 +#: fortran/resolve.cc:17778 #, gcc-internal-format msgid "" "Derived type variable %qs at %L cannot have ALLOCATABLE components to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:17493 +#: fortran/resolve.cc:17786 #, gcc-internal-format msgid "" "Derived type variable %qs at %L with default initialization cannot be in " "EQUIVALENCE with a variable in COMMON" msgstr "" -#: fortran/resolve.cc:17509 +#: fortran/resolve.cc:17802 #, gcc-internal-format msgid "" "Derived type variable %qs at %L with pointer component(s) cannot be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:17612 +#: fortran/resolve.cc:17905 #, gcc-internal-format, gfc-internal-format msgid "Syntax error in EQUIVALENCE statement at %L" msgstr "" -#: fortran/resolve.cc:17627 +#: fortran/resolve.cc:17920 #, gcc-internal-format, gfc-internal-format msgid "" "Either all or none of the objects in the EQUIVALENCE set at %L shall have " "the PROTECTED attribute" msgstr "" -#: fortran/resolve.cc:17652 +#: fortran/resolve.cc:17945 #, gcc-internal-format msgid "" "COMMON block member %qs at %L cannot be an EQUIVALENCE object in the pure " "procedure %qs" msgstr "" -#: fortran/resolve.cc:17661 +#: fortran/resolve.cc:17954 #, gcc-internal-format msgid "Named constant %qs at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:17736 +#: fortran/resolve.cc:18029 #, gcc-internal-format msgid "" "Array %qs at %L with non-constant bounds cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:17747 +#: fortran/resolve.cc:18040 #, gcc-internal-format msgid "Structure component %qs at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.cc:17758 +#: fortran/resolve.cc:18051 #, gcc-internal-format, gfc-internal-format msgid "Substring at %L has length zero" msgstr "" -#: fortran/resolve.cc:17789 +#: fortran/resolve.cc:18082 #, gcc-internal-format msgid "Self reference in character length expression for %qs at %L" msgstr "" -#: fortran/resolve.cc:17856 +#: fortran/resolve.cc:18149 #, gcc-internal-format msgid "PUBLIC function %qs at %L of PRIVATE type %qs" msgstr "" -#: fortran/resolve.cc:17869 +#: fortran/resolve.cc:18162 #, gcc-internal-format msgid "ENTRY %qs at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.cc:17891 +#: fortran/resolve.cc:18184 #, gcc-internal-format msgid "User operator procedure %qs at %L must be a FUNCTION" msgstr "" -#: fortran/resolve.cc:17901 +#: fortran/resolve.cc:18194 #, gcc-internal-format msgid "User operator procedure %qs at %L cannot be assumed character length" msgstr "" -#: fortran/resolve.cc:17909 +#: fortran/resolve.cc:18202 #, gcc-internal-format msgid "User operator procedure %qs at %L must have at least one argument" msgstr "" -#: fortran/resolve.cc:17923 +#: fortran/resolve.cc:18216 #, gcc-internal-format, gfc-internal-format msgid "First argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.cc:17941 +#: fortran/resolve.cc:18234 #, gcc-internal-format, gfc-internal-format msgid "Second argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.cc:17948 +#: fortran/resolve.cc:18241 #, gcc-internal-format, gfc-internal-format msgid "Operator interface at %L must have, at most, two arguments" msgstr "" -#: fortran/resolve.cc:18030 +#: fortran/resolve.cc:18323 #, gcc-internal-format msgid "Contained procedure %qs at %L of a PURE procedure must also be PURE" msgstr "" @@ -85476,23 +85801,23 @@ msgstr "" msgid "gfc_get_default_type(): Bad symbol %qs" msgstr "" -#: fortran/symbol.cc:296 +#: fortran/symbol.cc:309 #, gcc-internal-format msgid "gfc_set_default_type(): symbol already has a type" msgstr "" -#: fortran/symbol.cc:306 +#: fortran/symbol.cc:319 #, gcc-internal-format msgid "Symbol %qs at %L has no IMPLICIT type; did you mean %qs?" msgstr "" -#: fortran/symbol.cc:310 +#: fortran/symbol.cc:323 #, gcc-internal-format -msgid "Symbol %qs at %L has no IMPLICIT type" +msgid "Symbol %qs at %L has no IMPLICIT type(symbol)" msgstr "" #. BIND(C) variables should not be implicitly declared. -#: fortran/symbol.cc:330 +#: fortran/symbol.cc:343 #, gcc-internal-format msgid "" "Implicitly declared BIND(C) variable %qs at %L may not be C interoperable" @@ -85500,139 +85825,139 @@ msgstr "" #. Dummy args to a BIND(C) routine may not be interoperable if #. they are implicitly typed. -#: fortran/symbol.cc:346 +#: fortran/symbol.cc:359 #, gcc-internal-format msgid "" "Implicitly declared variable %qs at %L may not be C interoperable but it is " "a dummy argument to the BIND(C) procedure %qs at %L" msgstr "" -#: fortran/symbol.cc:387 +#: fortran/symbol.cc:400 #, gcc-internal-format msgid "Function result %qs at %L has no IMPLICIT type" msgstr "" -#: fortran/symbol.cc:488 +#: fortran/symbol.cc:501 #, gcc-internal-format, gfc-internal-format msgid "%s attribute not allowed in BLOCK DATA program unit at %L" msgstr "" -#: fortran/symbol.cc:513 +#: fortran/symbol.cc:526 #, gcc-internal-format, gfc-internal-format msgid "Namelist group name at %L cannot have the SAVE attribute" msgstr "" -#: fortran/symbol.cc:532 +#: fortran/symbol.cc:545 #, gcc-internal-format msgid "internal procedure %qs at %L conflicts with DUMMY argument" msgstr "" -#: fortran/symbol.cc:565 +#: fortran/symbol.cc:578 #, gcc-internal-format, gfc-internal-format msgid "Procedure pointer at %C" msgstr "" -#: fortran/symbol.cc:777 +#: fortran/symbol.cc:790 #, gcc-internal-format, gfc-internal-format msgid "%s attribute applied to %s %s at %L" msgstr "" -#: fortran/symbol.cc:784 +#: fortran/symbol.cc:797 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) applied to %s %s at %L" msgstr "" -#: fortran/symbol.cc:905 fortran/symbol.cc:916 fortran/symbol.cc:1796 +#: fortran/symbol.cc:918 fortran/symbol.cc:929 fortran/symbol.cc:1809 #, gcc-internal-format, gfc-internal-format msgid "%s attribute conflicts with %s attribute at %L" msgstr "" -#: fortran/symbol.cc:908 fortran/symbol.cc:922 +#: fortran/symbol.cc:921 fortran/symbol.cc:935 #, gcc-internal-format msgid "%s attribute conflicts with %s attribute in %qs at %L" msgstr "" -#: fortran/symbol.cc:966 +#: fortran/symbol.cc:979 #, gcc-internal-format, gfc-internal-format msgid "Cannot change attributes of USE-associated symbol at %L" msgstr "" -#: fortran/symbol.cc:969 +#: fortran/symbol.cc:982 #, gcc-internal-format, gfc-internal-format msgid "Cannot change attributes of USE-associated symbol %s at %L" msgstr "" -#: fortran/symbol.cc:985 +#: fortran/symbol.cc:998 #, gcc-internal-format, gfc-internal-format msgid "Duplicate %s attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1027 +#: fortran/symbol.cc:1040 #, gcc-internal-format, gfc-internal-format msgid "ALLOCATABLE specified outside of INTERFACE body at %L" msgstr "" -#: fortran/symbol.cc:1044 +#: fortran/symbol.cc:1057 #, gcc-internal-format, gfc-internal-format msgid "Duplicate AUTOMATIC attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1068 +#: fortran/symbol.cc:1081 #, gcc-internal-format msgid "CODIMENSION specified for %qs outside its INTERFACE body at %L" msgstr "" -#: fortran/symbol.cc:1094 +#: fortran/symbol.cc:1107 #, gcc-internal-format msgid "DIMENSION specified for %qs outside its INTERFACE body at %L" msgstr "" -#: fortran/symbol.cc:1257 +#: fortran/symbol.cc:1270 #, gcc-internal-format, gfc-internal-format msgid "Cray Pointee at %L appears in multiple pointer() statements" msgstr "" -#: fortran/symbol.cc:1276 +#: fortran/symbol.cc:1289 #, gcc-internal-format, gfc-internal-format msgid "Duplicate PROTECTED attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1309 +#: fortran/symbol.cc:1322 #, gcc-internal-format, gfc-internal-format msgid "SAVE attribute at %L cannot be specified in a PURE procedure" msgstr "" -#: fortran/symbol.cc:1321 +#: fortran/symbol.cc:1334 #, gcc-internal-format, gfc-internal-format msgid "Duplicate SAVE attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1341 +#: fortran/symbol.cc:1354 #, gcc-internal-format, gfc-internal-format msgid "Duplicate VALUE attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1360 +#: fortran/symbol.cc:1373 #, gcc-internal-format, gfc-internal-format msgid "Duplicate VOLATILE attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1372 +#: fortran/symbol.cc:1385 #, gcc-internal-format, gfc-internal-format msgid "VOLATILE attribute at %L cannot be specified in a PURE procedure" msgstr "" -#: fortran/symbol.cc:1393 +#: fortran/symbol.cc:1406 #, gcc-internal-format, gfc-internal-format msgid "Duplicate ASYNCHRONOUS attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1792 +#: fortran/symbol.cc:1805 #, gcc-internal-format msgid "%s attribute of %qs conflicts with %s attribute at %L" msgstr "" -#: fortran/symbol.cc:1829 +#: fortran/symbol.cc:1842 #, gcc-internal-format, gfc-internal-format msgid "" "%s procedure at %L is already declared as %s procedure. \n" @@ -85641,220 +85966,220 @@ msgid "" "kind of executable statement before it. FIXME" msgstr "" -#: fortran/symbol.cc:1837 +#: fortran/symbol.cc:1850 #, gcc-internal-format, gfc-internal-format msgid "%s procedure at %L is already declared as %s procedure" msgstr "" -#: fortran/symbol.cc:1872 +#: fortran/symbol.cc:1885 #, gcc-internal-format, gfc-internal-format msgid "INTENT (%s) conflicts with INTENT(%s) at %L" msgstr "" -#: fortran/symbol.cc:1896 +#: fortran/symbol.cc:1909 #, gcc-internal-format, gfc-internal-format msgid "ACCESS specification at %L was already specified" msgstr "" -#: fortran/symbol.cc:1913 +#: fortran/symbol.cc:1926 #, gcc-internal-format, gfc-internal-format msgid "Duplicate BIND attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1920 +#: fortran/symbol.cc:1933 #, gcc-internal-format, gfc-internal-format msgid "BIND(C) at %L" msgstr "" -#: fortran/symbol.cc:1936 +#: fortran/symbol.cc:1949 #, gcc-internal-format, gfc-internal-format msgid "Duplicate EXTENDS attribute specified at %L" msgstr "" -#: fortran/symbol.cc:1940 +#: fortran/symbol.cc:1953 #, gcc-internal-format, gfc-internal-format msgid "EXTENDS at %L" msgstr "" -#: fortran/symbol.cc:1966 +#: fortran/symbol.cc:1979 #, gcc-internal-format msgid "Symbol %qs at %L already has an explicit interface" msgstr "" -#: fortran/symbol.cc:1973 +#: fortran/symbol.cc:1986 #, gcc-internal-format msgid "%qs at %L has attributes specified outside its INTERFACE body" msgstr "" -#: fortran/symbol.cc:2011 +#: fortran/symbol.cc:2024 #, gcc-internal-format msgid "" "Symbol %qs at %L conflicts with symbol from module %qs, use-associated at %L" msgstr "" -#: fortran/symbol.cc:2015 fortran/symbol.cc:2018 +#: fortran/symbol.cc:2028 fortran/symbol.cc:2031 #, gcc-internal-format msgid "Symbol %qs at %L already has basic type of %s" msgstr "" -#: fortran/symbol.cc:2025 +#: fortran/symbol.cc:2038 #, gcc-internal-format msgid "Procedure %qs at %L may not have basic type of %s" msgstr "" -#: fortran/symbol.cc:2037 +#: fortran/symbol.cc:2050 #, gcc-internal-format msgid "Symbol %qs at %L cannot have a type" msgstr "" -#: fortran/symbol.cc:2282 +#: fortran/symbol.cc:2295 #, gcc-internal-format msgid "Component %qs at %C already in the parent type at %L" msgstr "" -#: fortran/symbol.cc:2367 +#: fortran/symbol.cc:2380 #, gcc-internal-format msgid "Symbol %qs at %C is ambiguous" msgstr "" -#: fortran/symbol.cc:2399 +#: fortran/symbol.cc:2412 #, gcc-internal-format msgid "Derived type %qs at %C is being used before it is defined" msgstr "" -#: fortran/symbol.cc:2548 +#: fortran/symbol.cc:2622 #, gcc-internal-format msgid "Component %qs at %C is a PRIVATE component of %qs" msgstr "" -#: fortran/symbol.cc:2569 +#: fortran/symbol.cc:2643 #, gcc-internal-format msgid "%qs at %C is not a member of the %qs structure; did you mean %qs?" msgstr "" -#: fortran/symbol.cc:2573 +#: fortran/symbol.cc:2647 #, gcc-internal-format msgid "%qs at %C is not a member of the %qs structure" msgstr "" -#: fortran/symbol.cc:2737 +#: fortran/symbol.cc:2811 #, gcc-internal-format, gfc-internal-format msgid "Duplicate statement label %d at %L and %L" msgstr "" -#: fortran/symbol.cc:2748 +#: fortran/symbol.cc:2822 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C already referenced as branch target" msgstr "" -#: fortran/symbol.cc:2758 +#: fortran/symbol.cc:2832 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C already referenced as a format label" msgstr "" -#: fortran/symbol.cc:2765 +#: fortran/symbol.cc:2839 #, gcc-internal-format, gfc-internal-format msgid "" "DO termination statement which is not END DO or CONTINUE with label %d at %C" msgstr "" -#: fortran/symbol.cc:2806 +#: fortran/symbol.cc:2880 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C previously used as a FORMAT label" msgstr "" -#: fortran/symbol.cc:2815 +#: fortran/symbol.cc:2889 #, gcc-internal-format, gfc-internal-format msgid "Label %d at %C previously used as branch target" msgstr "" -#: fortran/symbol.cc:2822 +#: fortran/symbol.cc:2896 #, gcc-internal-format, gfc-internal-format msgid "Shared DO termination label %d at %C" msgstr "" -#: fortran/symbol.cc:2826 +#: fortran/symbol.cc:2900 #, gcc-internal-format, gfc-internal-format msgid "Labeled DO statement at %L" msgstr "" -#: fortran/symbol.cc:3167 +#: fortran/symbol.cc:3241 #, gcc-internal-format msgid "Name %qs at %C is an ambiguous reference to %qs from module %qs" msgstr "" -#: fortran/symbol.cc:3170 +#: fortran/symbol.cc:3244 #, gcc-internal-format msgid "" "Name %qs at %C is an ambiguous reference to %qs from current program unit" msgstr "" #. Symbol is from another namespace. -#: fortran/symbol.cc:3415 +#: fortran/symbol.cc:3489 #, gcc-internal-format msgid "Symbol %qs at %C has already been host associated" msgstr "" -#: fortran/symbol.cc:4469 +#: fortran/symbol.cc:4543 #, gcc-internal-format msgid "verify_bind_c_derived_type(): Given symbol is unexpectedly NULL" msgstr "" -#: fortran/symbol.cc:4482 +#: fortran/symbol.cc:4556 #, gcc-internal-format msgid "" "Derived type %qs declared at %L must have the BIND attribute to be C " "interoperable" msgstr "" -#: fortran/symbol.cc:4500 +#: fortran/symbol.cc:4574 #, gcc-internal-format msgid "" "Derived type %qs with BIND(C) attribute at %L is empty, and may be " "inaccessible by the C companion processor" msgstr "" -#: fortran/symbol.cc:4521 +#: fortran/symbol.cc:4595 #, gcc-internal-format msgid "" "Component %qs at %L cannot have the POINTER attribute because it is a member " "of the BIND(C) derived type %qs at %L" msgstr "" -#: fortran/symbol.cc:4531 +#: fortran/symbol.cc:4605 #, gcc-internal-format msgid "" "Procedure pointer component %qs at %L cannot be a member of the BIND(C) " "derived type %qs at %L" msgstr "" -#: fortran/symbol.cc:4542 +#: fortran/symbol.cc:4616 #, gcc-internal-format msgid "" "Component %qs at %L cannot have the ALLOCATABLE attribute because it is a " "member of the BIND(C) derived type %qs at %L" msgstr "" -#: fortran/symbol.cc:4581 +#: fortran/symbol.cc:4655 #, gcc-internal-format msgid "" "Component %qs in derived type %qs at %L may not be C interoperable, even " "though derived type %qs is BIND(C)" msgstr "" -#: fortran/symbol.cc:4591 +#: fortran/symbol.cc:4665 #, gcc-internal-format msgid "Component %qs in derived type %qs at %L may not be C interoperable" msgstr "" -#: fortran/symbol.cc:4603 +#: fortran/symbol.cc:4677 #, gcc-internal-format msgid "" "Derived type %qs at %L cannot have the SEQUENCE attribute because it is " "BIND(C)" msgstr "" -#: fortran/symbol.cc:5107 fortran/symbol.cc:5112 +#: fortran/symbol.cc:5181 fortran/symbol.cc:5186 #, gcc-internal-format msgid "Symbol %qs is used before it is typed at %L" msgstr "" @@ -85884,7 +86209,7 @@ msgstr "" msgid "Overlapping unequal initializers in EQUIVALENCE at %C" msgstr "" -#: fortran/trans-array.cc:2338 fortran/trans-expr.cc:9810 +#: fortran/trans-array.cc:2338 fortran/trans-expr.cc:9840 #, gcc-internal-format, gfc-internal-format msgid "" "The structure constructor at %C has been finalized. This feature was removed " @@ -85893,19 +86218,19 @@ msgstr "" #. Problems occur when we get something like #. integer :: a(lots) = (/(i, i=1, lots)/) -#: fortran/trans-array.cc:6570 +#: fortran/trans-array.cc:6608 #, gcc-internal-format msgid "" "The number of elements in the array constructor at %L requires an increase " "of the allowed %d upper limit. See %<-fmax-array-constructor%> option" msgstr "" -#: fortran/trans-array.cc:8803 +#: fortran/trans-array.cc:8852 #, gcc-internal-format msgid "Creating array temporary at %L for argument %qs" msgstr "" -#: fortran/trans-array.cc:12166 +#: fortran/trans-array.cc:12215 #, gcc-internal-format, gfc-internal-format msgid "bad expression type during walk (%d)" msgstr "" @@ -86116,41 +86441,41 @@ msgstr "" msgid "Sorry, !$ACC DECLARE at %L is not allowed in BLOCK construct" msgstr "" -#: fortran/trans-expr.cc:1124 +#: fortran/trans-expr.cc:1132 #, gcc-internal-format, gfc-internal-format msgid "Cannot compute the length of the char array at %L." msgstr "" -#: fortran/trans-expr.cc:1904 +#: fortran/trans-expr.cc:1928 #, gcc-internal-format, gfc-internal-format msgid "Code for reallocating the allocatable variable at %L will be added" msgstr "" -#: fortran/trans-expr.cc:2240 +#: fortran/trans-expr.cc:2264 #, gcc-internal-format, gfc-internal-format msgid "" "Sorry, coindexed access to an unlimited polymorphic object at %L is not " "supported" msgstr "" -#: fortran/trans-expr.cc:2249 +#: fortran/trans-expr.cc:2273 #, gcc-internal-format, gfc-internal-format msgid "" "Sorry, coindexed access to an unlimited polymorphic component at %L is not " "supported" msgstr "" -#: fortran/trans-expr.cc:3944 +#: fortran/trans-expr.cc:3972 #, gcc-internal-format msgid "Unknown intrinsic op" msgstr "" -#: fortran/trans-expr.cc:5463 +#: fortran/trans-expr.cc:5491 #, gcc-internal-format, gfc-internal-format msgid "Unknown argument list function at %L" msgstr "" -#: fortran/trans-expr.cc:10388 +#: fortran/trans-expr.cc:10418 #, gcc-internal-format, gfc-internal-format msgid "" "If bounds remapping is specified at %L, the pointer target shall not be NULL" @@ -86187,49 +86512,49 @@ msgstr "" msgid "Bad IO basetype (%d)" msgstr "" -#: fortran/trans-openmp.cc:872 fortran/trans-openmp.cc:1389 +#: fortran/trans-openmp.cc:881 fortran/trans-openmp.cc:1398 #, gcc-internal-format msgid "Sorry, polymorphic arrays not yet supported for firstprivate" msgstr "" -#: fortran/trans-openmp.cc:1543 +#: fortran/trans-openmp.cc:1552 #, gcc-internal-format msgid "implicit mapping of assumed size array %qD" msgstr "" -#: fortran/trans-openmp.cc:3284 +#: fortran/trans-openmp.cc:3296 #, gcc-internal-format msgid "optional class parameter" msgstr "" -#: fortran/trans-openmp.cc:3700 +#: fortran/trans-openmp.cc:3712 #, gcc-internal-format msgid "unhandled expression type" msgstr "" -#: fortran/trans-openmp.cc:3980 +#: fortran/trans-openmp.cc:3992 #, gcc-internal-format msgid "unhandled expression" msgstr "" -#: fortran/trans-openmp.cc:4100 +#: fortran/trans-openmp.cc:4114 #, gcc-internal-format msgid "%<uses_allocators%> clause with traits and memory spaces" msgstr "" -#: fortran/trans-openmp.cc:5024 +#: fortran/trans-openmp.cc:5038 #, gcc-internal-format msgid "%<!$OMP %s%> at %L requires %<-fopenmp-allocators%>" msgstr "" -#: fortran/trans-openmp.cc:5027 +#: fortran/trans-openmp.cc:5041 #, gcc-internal-format msgid "" "All files that might deallocate such a variable must be compiled with %<-" "fopenmp-allocators%>" msgstr "" -#: fortran/trans-openmp.cc:5030 +#: fortran/trans-openmp.cc:5044 #, gcc-internal-format msgid "" "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, " @@ -86237,69 +86562,69 @@ msgid "" "components allocated with an OpenMP allocator" msgstr "" -#: fortran/trans-openmp.cc:5607 fortran/trans-openmp.cc:5627 +#: fortran/trans-openmp.cc:5621 fortran/trans-openmp.cc:5641 #, gcc-internal-format msgid "non-rectangular loop nest with non-constant step for %qs" msgstr "" -#: fortran/trans-openmp.cc:5629 +#: fortran/trans-openmp.cc:5643 #, gcc-internal-format msgid "Used here" msgstr "" -#: fortran/trans-openmp.cc:7153 +#: fortran/trans-openmp.cc:7165 #, gcc-internal-format msgid "" "%qs specified in 'allocate' clause at %L but not in an explicit " "privatization clause" msgstr "" -#: fortran/trans-openmp.cc:8053 +#: fortran/trans-openmp.cc:8065 #, gcc-internal-format msgid "gfc_trans_omp_workshare(): Bad statement code" msgstr "" -#: fortran/trans-openmp.cc:8356 +#: fortran/trans-openmp.cc:8368 #, gcc-internal-format, gfc-internal-format msgid "The base name for 'declare variant' must be specified at %L " msgstr "" -#: fortran/trans-openmp.cc:8366 +#: fortran/trans-openmp.cc:8378 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L does not match the name of the current procedure" msgstr "" -#: fortran/trans-openmp.cc:8369 +#: fortran/trans-openmp.cc:8381 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L must not be an entry name" msgstr "" -#: fortran/trans-openmp.cc:8372 +#: fortran/trans-openmp.cc:8384 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L must not be a generic name" msgstr "" -#: fortran/trans-openmp.cc:8375 +#: fortran/trans-openmp.cc:8387 #, gcc-internal-format, gfc-internal-format msgid "The base name at %L must not be a procedure pointer" msgstr "" -#: fortran/trans-openmp.cc:8378 +#: fortran/trans-openmp.cc:8390 #, gcc-internal-format, gfc-internal-format msgid "The base procedure at %L must have an explicit interface" msgstr "" -#: fortran/trans-openmp.cc:8491 +#: fortran/trans-openmp.cc:8503 #, gcc-internal-format msgid "Cannot find symbol %qs" msgstr "" -#: fortran/trans-openmp.cc:8502 +#: fortran/trans-openmp.cc:8514 #, gcc-internal-format msgid "variant %qs at %L is not a function or subroutine" msgstr "" -#: fortran/trans-openmp.cc:8516 +#: fortran/trans-openmp.cc:8528 #, gcc-internal-format msgid "variant %qs and base %qs at %L have incompatible types: %s" msgstr "" @@ -86319,7 +86644,7 @@ msgstr "" msgid "Sorry, only support for integer kind %d implemented for image-set at %L" msgstr "" -#: fortran/trans-stmt.cc:3686 +#: fortran/trans-stmt.cc:3700 #, gcc-internal-format msgid "gfc_trans_select(): Bad type for case expr." msgstr "" @@ -86487,82 +86812,82 @@ msgstr "" msgid "unexpected EOF" msgstr "" -#: lto/lto-common.cc:2028 +#: lto/lto-common.cc:2030 #, gcc-internal-format msgid "bytecode stream: garbage at the end of symbols section" msgstr "" -#: lto/lto-common.cc:2055 +#: lto/lto-common.cc:2057 #, gcc-internal-format msgid "could not parse hex number" msgstr "" -#: lto/lto-common.cc:2087 +#: lto/lto-common.cc:2089 #, gcc-internal-format, gfc-internal-format msgid "unexpected file name %s in linker resolution file. Expected %s" msgstr "" -#: lto/lto-common.cc:2096 +#: lto/lto-common.cc:2098 #, gcc-internal-format msgid "could not parse file offset" msgstr "" -#: lto/lto-common.cc:2099 +#: lto/lto-common.cc:2101 #, gcc-internal-format msgid "unexpected offset" msgstr "" -#: lto/lto-common.cc:2120 +#: lto/lto-common.cc:2122 #, gcc-internal-format msgid "invalid line in the resolution file" msgstr "" -#: lto/lto-common.cc:2142 +#: lto/lto-common.cc:2144 #, gcc-internal-format msgid "invalid resolution in the resolution file" msgstr "" -#: lto/lto-common.cc:2148 +#: lto/lto-common.cc:2150 #, gcc-internal-format msgid "resolution sub id %wx not in object file" msgstr "" -#: lto/lto-common.cc:2265 +#: lto/lto-common.cc:2267 #, gcc-internal-format msgid "bytecode stream in file %qs generated with GCC compiler older than 10.0" msgstr "" -#: lto/lto-common.cc:2285 +#: lto/lto-common.cc:2287 #, gcc-internal-format msgid "cannot read %<LTO_section_decls%> from %s" msgstr "" -#: lto/lto-common.cc:2406 +#: lto/lto-common.cc:2408 #, gcc-internal-format, gfc-internal-format msgid "Cannot open %s" msgstr "" -#: lto/lto-common.cc:2427 +#: lto/lto-common.cc:2429 #, gcc-internal-format, gfc-internal-format msgid "Cannot map %s" msgstr "" -#: lto/lto-common.cc:2438 +#: lto/lto-common.cc:2440 #, gcc-internal-format, gfc-internal-format msgid "Cannot read %s" msgstr "" -#: lto/lto-common.cc:2755 +#: lto/lto-common.cc:2757 #, gcc-internal-format msgid "could not open symbol resolution file: %m" msgstr "" -#: lto/lto-common.cc:2880 +#: lto/lto-common.cc:2882 #, gcc-internal-format, gfc-internal-format msgid "missing resolution data for %s" msgstr "" -#: lto/lto-common.cc:2917 +#: lto/lto-common.cc:2919 #, gcc-internal-format msgid "errors during merging of translation units" msgstr "" @@ -86617,7 +86942,7 @@ msgstr "" msgid "two or more sections for %s" msgstr "" -#: lto/lto-partition.cc:534 +#: lto/lto-partition.cc:535 #, gcc-internal-format msgid "min partition size cannot be greater than max partition size" msgstr "" @@ -86687,47 +87012,47 @@ msgstr "" msgid "function %qD redeclared as variable" msgstr "" -#: lto/lto.cc:172 +#: lto/lto.cc:174 #, gcc-internal-format msgid "%<lto_obj_file_open()%> failed" msgstr "" -#: lto/lto.cc:204 +#: lto/lto.cc:206 #, gcc-internal-format msgid "waitpid failed" msgstr "" -#: lto/lto.cc:207 +#: lto/lto.cc:209 #, gcc-internal-format msgid "streaming subprocess failed" msgstr "" -#: lto/lto.cc:210 +#: lto/lto.cc:212 #, gcc-internal-format msgid "streaming subprocess was killed by signal" msgstr "" -#: lto/lto.cc:317 +#: lto/lto.cc:319 #, gcc-internal-format msgid "no LTRANS output list filename provided" msgstr "" -#: lto/lto.cc:425 +#: lto/lto.cc:427 #, gcc-internal-format msgid "opening LTRANS output list %s: %m" msgstr "" -#: lto/lto.cc:432 +#: lto/lto.cc:434 #, gcc-internal-format msgid "writing to LTRANS output list %s: %m" msgstr "" -#: lto/lto.cc:442 +#: lto/lto.cc:444 #, gcc-internal-format msgid "closing LTRANS output list %s: %m" msgstr "" -#: m2/gm2-lang.cc:1119 +#: m2/gm2-lang.cc:1151 #, gcc-internal-format msgid "cannot convert expression, only base types can be converted" msgstr "" @@ -86804,48 +87129,48 @@ msgstr "" msgid "constant %qs is too large" msgstr "" -#: m2/gm2-gcc/m2expr.cc:2609 +#: m2/gm2-gcc/m2expr.cc:2617 #, gcc-internal-format msgid "not expecting different types to binary operator" msgstr "" -#: m2/gm2-gcc/m2expr.cc:2867 +#: m2/gm2-gcc/m2expr.cc:2875 #, gcc-internal-format msgid "cannot take the address of this expression" msgstr "" -#: m2/gm2-gcc/m2expr.cc:3634 +#: m2/gm2-gcc/m2expr.cc:3642 #, gcc-internal-format msgid "argument to CAP is not a constant or variable of type CHAR" msgstr "" -#: m2/gm2-gcc/m2expr.cc:3914 m2/gm2-gcc/m2expr.cc:4020 -#: m2/gm2-gcc/m2expr.cc:4029 +#: m2/gm2-gcc/m2expr.cc:3922 m2/gm2-gcc/m2expr.cc:4028 +#: m2/gm2-gcc/m2expr.cc:4037 #, gcc-internal-format msgid "constant literal %qs exceeds internal ZTYPE range" msgstr "" -#: m2/gm2-gcc/m2expr.cc:3949 +#: m2/gm2-gcc/m2expr.cc:3957 #, gcc-internal-format msgid "constant literal %qs contains %qc, expected 0 or 1" msgstr "" -#: m2/gm2-gcc/m2expr.cc:3964 m2/gm2-gcc/m2expr.cc:3976 +#: m2/gm2-gcc/m2expr.cc:3972 m2/gm2-gcc/m2expr.cc:3984 #, gcc-internal-format msgid "constant literal %qs contains %qc, expected %qs" msgstr "" -#: m2/gm2-gcc/m2expr.cc:3995 +#: m2/gm2-gcc/m2expr.cc:4003 #, gcc-internal-format msgid "constant literal %qs contains %qc, expected %qs or %qs" msgstr "" -#: m2/gm2-gcc/m2expr.cc:4061 +#: m2/gm2-gcc/m2expr.cc:4069 #, gcc-internal-format msgid "%qs applied to a void type" msgstr "" -#: m2/gm2-gcc/m2expr.cc:4082 m2/gm2-gcc/m2expr.cc:4126 +#: m2/gm2-gcc/m2expr.cc:4090 m2/gm2-gcc/m2expr.cc:4134 #, gcc-internal-format msgid "%qs applied to an incomplete type" msgstr "" @@ -86860,12 +87185,12 @@ msgstr "" msgid "at %s, %s" msgstr "" -#: m2/gm2-gcc/m2statement.cc:558 +#: m2/gm2-gcc/m2statement.cc:563 #, gcc-internal-format msgid "internal error: not expecting operand1 to be a constant set" msgstr "" -#: m2/gm2-gcc/m2statement.cc:952 +#: m2/gm2-gcc/m2statement.cc:957 #, gcc-internal-format msgid "expecting one and only one label to be declared" msgstr "" From d09d70cdb2a4bc45825fc887047ef4a20de590c6 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:27 -0400 Subject: [PATCH 482/551] testsuite: add some missing -fanalyzer to plugin tests gcc/testsuite/ChangeLog: * gcc.dg/plugin/copy_from_user-1.c: Add missing directives for an analyzer test. * gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c: Add missing -fanalyzer to options. * gcc.dg/plugin/taint-CVE-2011-0521-1.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c: Likewise. (dvb_usercopy): Add default case to avoid complaints about NULL derefs. * gcc.dg/plugin/taint-CVE-2011-0521-2.c: Likewise. * gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c: Add missing -fanalyzer to options. * gcc.dg/plugin/taint-CVE-2011-0521-3.c: Likewise. Drop xfail. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c | 4 ++++ gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c | 2 +- gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c | 2 +- gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c | 4 +++- gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c | 4 +++- gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c | 2 +- gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c | 5 ++--- 7 files changed, 15 insertions(+), 8 deletions(-) diff --git a/gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c b/gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c index a1415f38aa65..1acedc2e2ce8 100644 --- a/gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c +++ b/gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c @@ -1,3 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-fanalyzer" } */ +/* { dg-require-effective-target analyzer } */ + typedef __SIZE_TYPE__ size_t; #define __user diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c index 51526b831c02..9ad05ff670a2 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target analyzer } */ -/* { dg-additional-options "-Wno-pedantic" } */ +/* { dg-additional-options "-fanalyzer -Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c index 3d11a75073c1..688d014956ec 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-Wno-pedantic" } */ +/* { dg-additional-options "-fanalyzer -Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* See notes in this header. */ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c index d035266b16ad..7e597037ec24 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-Wno-pedantic" } */ +/* { dg-additional-options "-fanalyzer -Wno-pedantic" } */ /* { dg-require-effective-target analyzer } */ /* See notes in this header. */ @@ -67,6 +67,8 @@ int dvb_usercopy(struct file *file, if (copy_from_user(parg, (void __user *)arg, _IOC_SIZE(cmd))) goto out; break; + default: + goto out; } /* call driver */ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c index 5270e22f1a32..9189cdb2c37c 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-2.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target analyzer } */ -/* { dg-additional-options "-Wno-pedantic" } */ +/* { dg-additional-options "-fanalyzer -Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" @@ -67,6 +67,8 @@ int dvb_usercopy(struct file *file, if (copy_from_user(parg, (void __user *)arg, _IOC_SIZE(cmd))) goto out; break; + default: + goto out; } /* call driver */ diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c index b8268fa4a826..d10ce28b40e2 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target analyzer } */ -/* { dg-additional-options "-Wno-pedantic" } */ +/* { dg-additional-options "-fanalyzer -Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" diff --git a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c index 86868a017c4c..5185ffd223d0 100644 --- a/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c +++ b/gcc/testsuite/gcc.dg/plugin/taint-CVE-2011-0521-3.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target analyzer } */ -/* { dg-additional-options "-Wno-pedantic" } */ +/* { dg-additional-options "-fanalyzer -Wno-pedantic" } */ /* See notes in this header. */ #include "taint-CVE-2011-0521.h" @@ -19,8 +19,7 @@ int dvb_ca_ioctl(struct file *file, unsigned int cmd, void *parg) if (info->num > 1) return -EINVAL; - av7110->ci_slot[info->num].num = info->num; /* { dg-warning "attacker-controlled value" "" { xfail *-*-* } } */ - /* TODO(xfail). */ + av7110->ci_slot[info->num].num = info->num; /* { dg-warning "attacker-controlled value" } */ av7110->ci_slot[info->num].type = FW_CI_LL_SUPPORT(av7110->arm_app) ? CA_CI_LINK : CA_CI; memcpy(info, &av7110->ci_slot[info->num], sizeof(ca_slot_info_t)); From 082374f6570a311b0ef95cdf712dbc6eb1e7cd17 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:27 -0400 Subject: [PATCH 483/551] analyzer, testuite: comment fixes gcc/testsuite/ChangeLog: * c-c++-common/analyzer/memset-1.c: Clarify some comments. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/testsuite/c-c++-common/analyzer/memset-1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/c-c++-common/analyzer/memset-1.c b/gcc/testsuite/c-c++-common/analyzer/memset-1.c index 75aef53d3487..d6695d494111 100644 --- a/gcc/testsuite/c-c++-common/analyzer/memset-1.c +++ b/gcc/testsuite/c-c++-common/analyzer/memset-1.c @@ -58,7 +58,7 @@ void test_5 (int n) __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */ memset (buf, 0, n); - /* We can't know if buf[42] was written to or not. */ + /* We can't know if buf[42] was overwritten by the memset or not. */ __analyzer_eval (buf[42] == 'A'); /* { dg-warning "UNKNOWN" } */ __analyzer_eval (buf[42] == '\0'); /* { dg-warning "UNKNOWN" } */ } @@ -72,7 +72,7 @@ void test_5a (int n) __analyzer_eval (buf[42] == 'A'); /* { dg-warning "TRUE" } */ __builtin___memset_chk (buf, 0, n, __builtin_object_size (buf, 0)); - /* We can't know if buf[42] was written to or not. */ + /* We can't know if buf[42] was overwritten by the memset or not. */ __analyzer_eval (buf[42] == 'A'); /* { dg-warning "UNKNOWN" } */ __analyzer_eval (buf[42] == '\0'); /* { dg-warning "UNKNOWN" } */ } From 7f6599a201be2a3f7d1d799087e4ba283ec0bee8 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:28 -0400 Subject: [PATCH 484/551] analyzer: fixes to internal docs gcc/ChangeLog: * doc/analyzer.texi: Various tweaks. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/doc/analyzer.texi | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/doc/analyzer.texi b/gcc/doc/analyzer.texi index 8eb40272cb71..b53096e7b7d9 100644 --- a/gcc/doc/analyzer.texi +++ b/gcc/doc/analyzer.texi @@ -21,6 +21,9 @@ @subsection Overview +At a high-level, we're doing coverage-guided symbolic execution of the +user's code. + The analyzer implementation works on the gimple-SSA representation. (I chose this in the hopes of making it easy to work with LTO to do whole-program analysis). @@ -55,7 +58,9 @@ Next is the heart of the analyzer: we use a worklist to explore state within the supergraph, building an "exploded graph". Nodes in the exploded graph correspond to <point,@w{ }state> pairs, as in "Precise Interprocedural Dataflow Analysis via Graph Reachability" - (Thomas Reps, Susan Horwitz and Mooly Sagiv). + (Thomas Reps, Susan Horwitz and Mooly Sagiv) - but note that +we're not using the algorithm described in that paper, just the +``exploded graph'' terminology. We reuse nodes for <point, state> pairs we've already seen, and avoid tracking state too closely, so that (hopefully) we rapidly converge @@ -499,7 +504,8 @@ which dumps a @file{SRC.eg.txt} file containing the full @code{exploded_graph}. Assuming that you have the @uref{https://gcc-newbies-guide.readthedocs.io/en/latest/debugging.html,,python support scripts for gdb} -installed, you can use: +installed (which you should do, it makes debugging GCC much easier), +you can use: @smallexample (gdb) break-on-saved-diagnostic From 115d5c6b009456e7e817dc5f1aeaea8d38929c93 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:28 -0400 Subject: [PATCH 485/551] analyzer: show size in SARIF property bag for -Wanalyzer-tainted-allocation-size gcc/analyzer/ChangeLog: * sm-taint.cc (tainted_allocation_size::tainted_allocation_size): Add "size_in_bytes" param. (tainted_allocation_size::maybe_add_sarif_properties): New. (tainted_allocation_size::m_size_in_bytes): New field. (region_model::check_dynamic_size_for_taint): Pass size_in_bytes to tainted_allocation_size ctor. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/sm-taint.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gcc/analyzer/sm-taint.cc b/gcc/analyzer/sm-taint.cc index 1d1e208fdf49..a9c6d4db43f4 100644 --- a/gcc/analyzer/sm-taint.cc +++ b/gcc/analyzer/sm-taint.cc @@ -645,8 +645,10 @@ class tainted_allocation_size : public taint_diagnostic { public: tainted_allocation_size (const taint_state_machine &sm, tree arg, + const svalue *size_in_bytes, enum bounds has_bounds, enum memory_space mem_space) : taint_diagnostic (sm, arg, has_bounds), + m_size_in_bytes (size_in_bytes), m_mem_space (mem_space) { } @@ -781,7 +783,18 @@ class tainted_allocation_size : public taint_diagnostic } } + void maybe_add_sarif_properties (sarif_object &result_obj) + const final override + { + taint_diagnostic::maybe_add_sarif_properties (result_obj); + sarif_property_bag &props = result_obj.get_or_create_properties (); +#define PROPERTY_PREFIX "gcc/analyzer/tainted_allocation_size/" + props.set (PROPERTY_PREFIX "size_in_bytes", m_size_in_bytes->to_json ()); +#undef PROPERTY_PREFIX + } + private: + const svalue *m_size_in_bytes; enum memory_space m_mem_space; }; @@ -1678,7 +1691,7 @@ region_model::check_dynamic_size_for_taint (enum memory_space mem_space, { tree arg = get_representative_tree (size_in_bytes); ctxt->warn (make_unique<tainted_allocation_size> - (taint_sm, arg, b, mem_space)); + (taint_sm, arg, size_in_bytes, b, mem_space)); } } From 7a49d5dc0ef345fb2cb19a242272c973ead220e7 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:28 -0400 Subject: [PATCH 486/551] analyzer: add SARIF property bags to -Wanalyzer-overlapping-buffers gcc/analyzer/ChangeLog: * call-details.cc: Include "diagnostic-format-sarif.h". (overlapping_buffers::overlapping_buffers): Add params for new fields. (overlapping_buffers::maybe_add_sarif_properties): New. (overlapping_buffers::m_byte_range_a): New field. (overlapping_buffers::byte_range_b): New field. (overlapping_buffers::m_num_bytes_read_sval): New field. (call_details::complain_about_overlap): Pass new params to overlapping_buffers ctor. * ranges.cc (symbolic_byte_offset::to_json): New. (symbolic_byte_range::to_json): New. * ranges.h (symbolic_byte_offset::to_json): New decl. (symbolic_byte_range::to_json): New decl. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/call-details.cc | 33 ++++++++++++++++++++++++++++++--- gcc/analyzer/ranges.cc | 15 +++++++++++++++ gcc/analyzer/ranges.h | 4 ++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/gcc/analyzer/call-details.cc b/gcc/analyzer/call-details.cc index 5b145a2ce638..ca47953f1461 100644 --- a/gcc/analyzer/call-details.cc +++ b/gcc/analyzer/call-details.cc @@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see #include "stringpool.h" #include "attribs.h" #include "make-unique.h" +#include "diagnostic-format-sarif.h" #if ENABLE_ANALYZER @@ -425,8 +426,14 @@ class overlapping_buffers : public pending_diagnostic_subclass<overlapping_buffers> { public: - overlapping_buffers (tree fndecl) - : m_fndecl (fndecl) + overlapping_buffers (tree fndecl, + const symbolic_byte_range &byte_range_a, + const symbolic_byte_range &byte_range_b, + const svalue *num_bytes_read_sval) + : m_fndecl (fndecl), + m_byte_range_a (byte_range_a), + m_byte_range_b (byte_range_b), + m_num_bytes_read_sval (num_bytes_read_sval) { } @@ -469,8 +476,25 @@ class overlapping_buffers m_fndecl); } + void maybe_add_sarif_properties (sarif_object &result_obj) + const final override + { + sarif_property_bag &props = result_obj.get_or_create_properties (); +#define PROPERTY_PREFIX "gcc/analyzer/overlapping_buffers/" + props.set (PROPERTY_PREFIX "bytes_range_a", + m_byte_range_a.to_json ()); + props.set (PROPERTY_PREFIX "bytes_range_b", + m_byte_range_b.to_json ()); + props.set (PROPERTY_PREFIX "num_bytes_read_sval", + m_num_bytes_read_sval->to_json ()); +#undef PROPERTY_PREFIX + } + private: tree m_fndecl; + symbolic_byte_range m_byte_range_a; + symbolic_byte_range m_byte_range_b; + const svalue *m_num_bytes_read_sval; }; @@ -517,7 +541,10 @@ call_details::complain_about_overlap (unsigned arg_idx_a, if (!byte_range_a.intersection (byte_range_b, *model).is_true ()) return; - ctxt->warn (make_unique<overlapping_buffers> (get_fndecl_for_call ())); + ctxt->warn (make_unique<overlapping_buffers> (get_fndecl_for_call (), + byte_range_a, + byte_range_b, + num_bytes_read_sval)); } } // namespace ana diff --git a/gcc/analyzer/ranges.cc b/gcc/analyzer/ranges.cc index ffdd0d4c5722..659ada7609d6 100644 --- a/gcc/analyzer/ranges.cc +++ b/gcc/analyzer/ranges.cc @@ -103,6 +103,12 @@ symbolic_byte_offset::dump (bool simple) const pp_flush (&pp); } +json::value * +symbolic_byte_offset::to_json () const +{ + return m_num_bytes_sval->to_json (); +} + tree symbolic_byte_offset::maybe_get_constant () const { @@ -156,6 +162,15 @@ symbolic_byte_range::dump (bool simple, region_model_manager &mgr) const pp_flush (&pp); } +json::value * +symbolic_byte_range::to_json () const +{ + json::object *obj = new json::object (); + obj->set ("start", m_start.to_json ()); + obj->set ("size", m_size.to_json ()); + return obj; +} + bool symbolic_byte_range::empty_p () const { diff --git a/gcc/analyzer/ranges.h b/gcc/analyzer/ranges.h index 92d963b7a2bc..aca4554bde69 100644 --- a/gcc/analyzer/ranges.h +++ b/gcc/analyzer/ranges.h @@ -39,6 +39,8 @@ class symbolic_byte_offset void dump_to_pp (pretty_printer *pp, bool) const; void dump (bool) const; + json::value *to_json () const; + bool operator== (const symbolic_byte_offset &other) const { return m_num_bytes_sval == other.m_num_bytes_sval; @@ -70,6 +72,8 @@ class symbolic_byte_range region_model_manager &mgr) const; void dump (bool, region_model_manager &mgr) const; + json::value *to_json () const; + bool empty_p () const; symbolic_byte_offset get_start_byte_offset () const From 960e07d73a5295adf059053907bcb395115606d2 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:29 -0400 Subject: [PATCH 487/551] analyzer: add SARIF property bag to -Wanalyzer-infinite-recursion gcc/analyzer/ChangeLog: * infinite-recursion.cc: Include "diagnostic-format-sarif.h". (infinite_recursion_diagnostic::maybe_add_sarif_properties): New. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/infinite-recursion.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/gcc/analyzer/infinite-recursion.cc b/gcc/analyzer/infinite-recursion.cc index 112e4bd08f28..65f136ddad6b 100644 --- a/gcc/analyzer/infinite-recursion.cc +++ b/gcc/analyzer/infinite-recursion.cc @@ -62,6 +62,7 @@ along with GCC; see the file COPYING3. If not see #include "make-unique.h" #include "analyzer/checker-path.h" #include "analyzer/feasible-graph.h" +#include "diagnostic-format-sarif.h" /* A subclass of pending_diagnostic for complaining about suspected infinite recursion. */ @@ -236,6 +237,18 @@ class infinite_recursion_diagnostic return false; } + void maybe_add_sarif_properties (sarif_object &result_obj) + const final override + { + sarif_property_bag &props = result_obj.get_or_create_properties (); +#define PROPERTY_PREFIX "gcc/analyzer/infinite_recursion_diagnostic/" + props.set_integer (PROPERTY_PREFIX "prev_entry_enode", + m_prev_entry_enode->m_index); + props.set_integer (PROPERTY_PREFIX "new_entry_enode", + m_new_entry_enode->m_index); +#undef PROPERTY_PREFIX + } + private: /* Return true iff control flow along FEDGE was affected by a conjured_svalue. */ From 107b0e63be023c11017aa53625a6557950df4d99 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:29 -0400 Subject: [PATCH 488/551] analyzer: add SARIF property bag to -Wanalyzer-infinite-loop gcc/analyzer/ChangeLog: * infinite-loop.cc: Include "diagnostic-format-sarif.h". (infinite_loop::to_json): New. (infinite_loop_diagnostic::maybe_add_sarif_properties): New. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/infinite-loop.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gcc/analyzer/infinite-loop.cc b/gcc/analyzer/infinite-loop.cc index 296489b1146d..e277a8384a04 100644 --- a/gcc/analyzer/infinite-loop.cc +++ b/gcc/analyzer/infinite-loop.cc @@ -63,6 +63,7 @@ along with GCC; see the file COPYING3. If not see #include "analyzer/checker-path.h" #include "analyzer/feasible-graph.h" #include "make-unique.h" +#include "diagnostic-format-sarif.h" /* A bundle of data characterizing a particular infinite loop identified within the exploded graph. */ @@ -105,6 +106,18 @@ struct infinite_loop && m_loc == other.m_loc); } + json::object * + to_json () const + { + json::object *loop_obj = new json::object (); + loop_obj->set_integer ("enode", m_enode.m_index); + json::array *edge_arr = new json::array (); + for (auto eedge : m_eedge_vec) + edge_arr->append (eedge->to_json ()); + loop_obj->set ("eedges", edge_arr); + return loop_obj; + } + const exploded_node &m_enode; location_t m_loc; std::vector<const exploded_edge *> m_eedge_vec; @@ -297,6 +310,15 @@ class infinite_loop_diagnostic } } + void maybe_add_sarif_properties (sarif_object &result_obj) + const final override + { + sarif_property_bag &props = result_obj.get_or_create_properties (); +#define PROPERTY_PREFIX "gcc/analyzer/infinite_loop_diagnostic/" + props.set (PROPERTY_PREFIX "inf_loop", m_inf_loop->to_json ()); +#undef PROPERTY_PREFIX + } + private: std::unique_ptr<infinite_loop> m_inf_loop; }; From 4a94551d7eaaf7a75c5195fc0bf4af94185a04c7 Mon Sep 17 00:00:00 2001 From: David Malcolm <dmalcolm@redhat.com> Date: Wed, 10 Apr 2024 16:43:30 -0400 Subject: [PATCH 489/551] analyzer: fix ICE on negative values for size_t [PR114472] I made several attempts to fix this properly, but for now apply a band-aid to at least prevent crashing on such cases. gcc/analyzer/ChangeLog: PR analyzer/114472 * access-diagram.cc (bit_size_expr::maybe_get_formatted_str): Reject attempts to print sizes that are too large. * region.cc (region_offset::calc_symbolic_bit_offset): Use a typeless svalue for the bit offset. * store.cc (bit_range::intersects_p): Replace assertion with test. (bit_range::exceeds_p): Likewise. (bit_range::falls_short_of_p): Likewise. gcc/testsuite/ChangeLog: * c-c++-common/analyzer/out-of-bounds-pr114472.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com> --- gcc/analyzer/access-diagram.cc | 4 ++++ gcc/analyzer/region.cc | 2 +- gcc/analyzer/store.cc | 20 +++++++++++++++---- .../analyzer/out-of-bounds-pr114472.c | 17 ++++++++++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c diff --git a/gcc/analyzer/access-diagram.cc b/gcc/analyzer/access-diagram.cc index 85e1049bb898..500480b68328 100644 --- a/gcc/analyzer/access-diagram.cc +++ b/gcc/analyzer/access-diagram.cc @@ -373,6 +373,8 @@ bit_size_expr::maybe_get_formatted_str (text_art::style_manager &sm, if (tree cst = num_bytes->maybe_get_constant ()) { byte_size_t concrete_num_bytes = wi::to_offset (cst); + if (!wi::fits_uhwi_p (concrete_num_bytes)) + return nullptr; if (concrete_num_bytes == 1) return ::make_unique <text_art::styled_string> (fmt_styled_string (sm, concrete_single_byte_fmt, @@ -396,6 +398,8 @@ bit_size_expr::maybe_get_formatted_str (text_art::style_manager &sm, else if (tree cst = m_num_bits.maybe_get_constant ()) { bit_size_t concrete_num_bits = wi::to_offset (cst); + if (!wi::fits_uhwi_p (concrete_num_bits)) + return nullptr; if (concrete_num_bits == 1) return ::make_unique <text_art::styled_string> (fmt_styled_string (sm, concrete_single_bit_fmt, diff --git a/gcc/analyzer/region.cc b/gcc/analyzer/region.cc index 705816b62454..7d79b45563fd 100644 --- a/gcc/analyzer/region.cc +++ b/gcc/analyzer/region.cc @@ -89,7 +89,7 @@ region_offset::calc_symbolic_bit_offset (region_model_manager *mgr) const m_sym_offset, bits_per_byte); } else - return *mgr->get_or_create_int_cst (size_type_node, m_offset); + return *mgr->get_or_create_int_cst (NULL_TREE, m_offset); } const svalue * diff --git a/gcc/analyzer/store.cc b/gcc/analyzer/store.cc index e85a19647f7e..a36de13c1743 100644 --- a/gcc/analyzer/store.cc +++ b/gcc/analyzer/store.cc @@ -290,7 +290,10 @@ bit_range::intersects_p (const bit_range &other, bit_offset_t overlap_next = MIN (get_next_bit_offset (), other.get_next_bit_offset ()); - gcc_assert (overlap_next > overlap_start); + if (overlap_next <= overlap_start) + /* If this has happened, some kind of overflow has happened in + our arithmetic. For now, reject such cases. */ + return false; bit_range abs_overlap_bits (overlap_start, overlap_next - overlap_start); *out_this = abs_overlap_bits - get_start_bit_offset (); *out_other = abs_overlap_bits - other.get_start_bit_offset (); @@ -316,7 +319,10 @@ bit_range::intersects_p (const bit_range &other, other.get_start_bit_offset ()); bit_offset_t overlap_next = MIN (get_next_bit_offset (), other.get_next_bit_offset ()); - gcc_assert (overlap_next > overlap_start); + if (overlap_next <= overlap_start) + /* If this has happened, some kind of overflow has happened in + our arithmetic. For now, reject such cases. */ + return false; *out_num_overlap_bits = overlap_next - overlap_start; return true; } @@ -339,7 +345,10 @@ bit_range::exceeds_p (const bit_range &other, bit_offset_t start = MAX (get_start_bit_offset (), other.get_next_bit_offset ()); bit_offset_t size = get_next_bit_offset () - start; - gcc_assert (size > 0); + if (size <= 0) + /* If this has happened, some kind of overflow has happened in + our arithmetic. For now, reject such cases. */ + return false; out_overhanging_bit_range->m_start_bit_offset = start; out_overhanging_bit_range->m_size_in_bits = size; return true; @@ -362,7 +371,10 @@ bit_range::falls_short_of_p (bit_offset_t offset, /* THIS falls short of OFFSET. */ bit_offset_t start = get_start_bit_offset (); bit_offset_t size = MIN (offset, get_next_bit_offset ()) - start; - gcc_assert (size > 0); + if (size <= 0) + /* If this has happened, some kind of overflow has happened in + our arithmetic. For now, reject such cases. */ + return false; out_fall_short_bits->m_start_bit_offset = start; out_fall_short_bits->m_size_in_bits = size; return true; diff --git a/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c new file mode 100644 index 000000000000..ef9e7711a2e4 --- /dev/null +++ b/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c @@ -0,0 +1,17 @@ +/* Verify we don't ICE on cases involving very large values for size. */ + +char s, d; + +void +foo(void) +{ + __builtin_strncpy(&d, &s + 3, -1); /* { dg-warning "Wstringop-overflow" } */ + __builtin_strncpy(&d + 3, &s, -1); /* { dg-warning "Wstringop-overflow" } */ +} + +void +bar(void) +{ + __builtin_strncpy(&d, &s - 3, -1); /* { dg-warning "Wstringop-overflow" } */ + __builtin_strncpy(&d - 3, &s, -1); /* { dg-warning "Wstringop-overflow" } */ +} From b8b148bc22673689fda19711b428b544462be2e4 Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Fri, 5 Apr 2024 12:37:19 -0400 Subject: [PATCH 490/551] target: missing -Whardened with -fcf-protection=none [PR114606] -Whardened warns when -fhardened couldn't enable a hardening option because that option was disabled on the command line, e.g.: $ ./cc1plus -quiet g.C -fhardened -O2 -fstack-protector cc1plus: warning: '-fstack-protector-strong' is not enabled by '-fhardened' because it was specified on the command line [-Whardened] but it doesn't work as expected with -fcf-protection=none: $ ./cc1plus -quiet g.C -fhardened -O2 -fcf-protection=none because we're checking == CF_NONE which doesn't distinguish between nothing and -fcf-protection=none. I should have used opts_set, like below. PR target/114606 gcc/ChangeLog: * config/i386/i386-options.cc (ix86_option_override_internal): Use opts_set rather than checking == CF_NONE. gcc/testsuite/ChangeLog: * gcc.target/i386/fhardened-1.c: New test. * gcc.target/i386/fhardened-2.c: New test. Reviewed-by: Jakub Jelinek <jakub@redhat.com> --- gcc/config/i386/i386-options.cc | 2 +- gcc/testsuite/gcc.target/i386/fhardened-1.c | 8 ++++++++ gcc/testsuite/gcc.target/i386/fhardened-2.c | 8 ++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/fhardened-1.c create mode 100644 gcc/testsuite/gcc.target/i386/fhardened-2.c diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index 7896d5769773..68a2e1c69109 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -3242,7 +3242,7 @@ ix86_option_override_internal (bool main_args_p, on the command line. */ if (opts->x_flag_hardened && cf_okay_p) { - if (opts->x_flag_cf_protection == CF_NONE) + if (!opts_set->x_flag_cf_protection) opts->x_flag_cf_protection = CF_FULL; else if (opts->x_flag_cf_protection != CF_FULL) warning_at (UNKNOWN_LOCATION, OPT_Whardened, diff --git a/gcc/testsuite/gcc.target/i386/fhardened-1.c b/gcc/testsuite/gcc.target/i386/fhardened-1.c new file mode 100644 index 000000000000..55d1718ff557 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/fhardened-1.c @@ -0,0 +1,8 @@ +/* PR target/114606 */ +/* { dg-options "-fhardened -O2 -fcf-protection=none" } */ + +#ifdef __CET__ +# error "-fcf-protection enabled when it should not be" +#endif + +/* { dg-warning ".-fcf-protection=full. is not enabled by .-fhardened. because it was specified" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.target/i386/fhardened-2.c b/gcc/testsuite/gcc.target/i386/fhardened-2.c new file mode 100644 index 000000000000..9b8c1381c194 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/fhardened-2.c @@ -0,0 +1,8 @@ +/* PR target/114606 */ +/* { dg-options "-fhardened -O2" } */ + +#if __CET__ != 3 +# error "-fcf-protection not enabled" +#endif + +/* { dg-bogus ".-fcf-protection=full. is not enabled by .-fhardened. because it was specified" "" { target *-*-* } 0 } */ From 39f81924d88e3cc197fc3df74204c9b5e01e12f7 Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson <hp@axis.com> Date: Wed, 10 Apr 2024 17:24:10 +0200 Subject: [PATCH 491/551] Revert "testsuite/gcc.target/cris/pr93372-2.c: Handle xpass from combine improvement" This reverts commit 4c8b3600c4856f7915281ae3ff4d97271c83a540. --- gcc/testsuite/gcc.target/cris/pr93372-2.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/gcc/testsuite/gcc.target/cris/pr93372-2.c b/gcc/testsuite/gcc.target/cris/pr93372-2.c index 2ef6471a990b..912069c018d5 100644 --- a/gcc/testsuite/gcc.target/cris/pr93372-2.c +++ b/gcc/testsuite/gcc.target/cris/pr93372-2.c @@ -1,20 +1,19 @@ /* Check that eliminable compare-instructions are eliminated. */ /* { dg-do compile } */ /* { dg-options "-O2" } */ -/* { dg-final { scan-assembler-not "\tcmp|\ttest" } } */ -/* { dg-final { scan-assembler-not "\tnot" } } */ -/* { dg-final { scan-assembler-not "\tlsr" } } */ -/* We should get just one move, storing the result into *d. */ -/* { dg-final { scan-assembler-times "\tmove" 1 } } */ +/* { dg-final { scan-assembler-not "\tcmp|\ttest" { xfail *-*-* } } } */ +/* { dg-final { scan-assembler-not "\tnot" { xfail cc0 } } } */ +/* { dg-final { scan-assembler-not "\tlsr" { xfail cc0 } } } */ int f(int a, int b, int *d) { int c = a - b; - /* We used to get a cmp.d with the original operands here. */ + /* Whoops! We get a cmp.d with the original operands here. */ *d = (c == 0); - /* We used to get a suboptimal sequence, but now we get the optimal "sge" - (a.k.a "spl") re-using flags from the subtraction. */ + /* Whoops! While we don't get a test.d for the result here for cc0, + we get a sequence of insns: a move, a "not" and a shift of the + subtraction-result, where a simple "spl" would have done. */ return c >= 0; } From 0f3e76ee53a610a80e0fa032a252ed9d2505e6b7 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Thu, 11 Apr 2024 00:17:54 +0000 Subject: [PATCH 492/551] Daily bump. --- gcc/ChangeLog | 87 ++++++++++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 48 ++++++++++++++++++++++ gcc/cp/ChangeLog | 25 ++++++++++++ gcc/fortran/ChangeLog | 7 ++++ gcc/po/ChangeLog | 4 ++ gcc/testsuite/ChangeLog | 88 +++++++++++++++++++++++++++++++++++++++++ libgcc/ChangeLog | 7 ++++ libstdc++-v3/ChangeLog | 14 +++++++ 9 files changed, 281 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ec107302a44f..8fff7c41ace5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,90 @@ +2024-04-10 Marek Polacek <polacek@redhat.com> + + PR target/114606 + * config/i386/i386-options.cc (ix86_option_override_internal): Use + opts_set rather than checking == CF_NONE. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * doc/analyzer.texi: Various tweaks. + +2024-04-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114672 + * tree-ssa-math-opts.cc (convert_plusminus_to_widen): Only + allow mode-precision results. + +2024-04-10 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * config/aarch64/aarch64.cc (TARGET_C_BITINT_TYPE_INFO): Declare MACRO. + (aarch64_bitint_type_info): New function. + (aarch64_return_in_memory_1): Return large _BitInt's in memory. + (aarch64_function_arg_alignment): Adapt to correctly return the ABI + mandated alignment of _BitInt(N) where N > 128 as the alignment of + TImode. + (aarch64_composite_type_p): Return true for _BitInt(N), where N > 128. + +2024-04-10 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * config/aarch64/aarch64.cc (bitint_or_aggr_of_bitint_p): New function. + (aarch64_layout_arg): Don't emit diagnostics for types involving + _BitInt(N). + +2024-04-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/114462 + * tree-core.h (enum annot_expr_kind): Add + annot_expr_maybe_infinite_kind enumerator. + * gimplify.cc (gimple_boolify): Handle annot_expr_maybe_infinite_kind. + * tree-cfg.cc (replace_loop_annotate_in_block): Likewise. + (replace_loop_annotate): Likewise. Move loop->finite_p initialization + before the replace_loop_annotate_in_block calls. + * tree-pretty-print.cc (dump_generic_node): Handle + annot_expr_maybe_infinite_kind. + +2024-04-10 Richard Biener <rguenther@suse.de> + + Revert: + 2024-03-27 Segher Boessenkool <segher@kernel.crashing.org> + + PR rtl-optimization/101523 + * combine.cc (try_combine): Don't do a 2-insn combination if + it does not in fact change I2. + +2024-04-10 Peter Bergner <bergner@linux.ibm.com> + + PR target/101865 + * config/rs6000/rs6000.h (TARGET_DIRECT_MOVE): Define. + * config/rs6000/rs6000.cc (rs6000_option_override_internal): Replace + OPTION_MASK_DIRECT_MOVE with OPTION_MASK_P8_VECTOR. Delete redundant + OPTION_MASK_DIRECT_MOVE usage. Delete TARGET_DIRECT_MOVE dead code. + (rs6000_opt_masks): Neuter the "direct-move" option. + * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Replace + OPTION_MASK_DIRECT_MOVE with OPTION_MASK_P8_VECTOR. Delete useless + comment. + * config/rs6000/rs6000-cpus.def (ISA_2_7_MASKS_SERVER): Delete + OPTION_MASK_DIRECT_MOVE. + (OTHER_VSX_VECTOR_MASKS): Likewise. + (POWERPC_MASKS): Likewise. + * config/rs6000/rs6000.opt (mdirect-move): Remove Mask and Var. + +2024-04-10 Hongyu Wang <hongyu.wang@intel.com> + + * config/i386/sse.md (sha1msg1): Use "ja" instead of "Bm" for + memory constraint. + (sha1msg2): Likewise. + (sha1nexte): Likewise. + (sha1rnds4): Likewise. + (sha256msg1): Likewise. + (sha256msg2): Likewise. + (sha256rnds2): Likewise. + (aes<aesklvariant>u8): Use "jm" instead of "m" for memory + constraint. + (*aes<aeswideklvariant>u8): Likewise. + (*encodekey128u32): Use "jr" instead of "r" for register + constraints. + (*encodekey256u32): Likewise. + 2024-04-09 Juergen Christ <jchrist@linux.ibm.com> * config/s390/s390.cc (expand_perm_as_replicate): Implement. diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 017b58270a73..8dbf8633f534 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240410 +20240411 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index abfb157660d1..7f200cf20718 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,51 @@ +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + PR analyzer/114472 + * access-diagram.cc (bit_size_expr::maybe_get_formatted_str): + Reject attempts to print sizes that are too large. + * region.cc (region_offset::calc_symbolic_bit_offset): Use a + typeless svalue for the bit offset. + * store.cc (bit_range::intersects_p): Replace assertion with + test. + (bit_range::exceeds_p): Likewise. + (bit_range::falls_short_of_p): Likewise. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * infinite-loop.cc: Include "diagnostic-format-sarif.h". + (infinite_loop::to_json): New. + (infinite_loop_diagnostic::maybe_add_sarif_properties): New. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * infinite-recursion.cc: Include "diagnostic-format-sarif.h". + (infinite_recursion_diagnostic::maybe_add_sarif_properties): New. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * call-details.cc: Include "diagnostic-format-sarif.h". + (overlapping_buffers::overlapping_buffers): Add params for new + fields. + (overlapping_buffers::maybe_add_sarif_properties): New. + (overlapping_buffers::m_byte_range_a): New field. + (overlapping_buffers::byte_range_b): New field. + (overlapping_buffers::m_num_bytes_read_sval): New field. + (call_details::complain_about_overlap): Pass new params to + overlapping_buffers ctor. + * ranges.cc (symbolic_byte_offset::to_json): New. + (symbolic_byte_range::to_json): New. + * ranges.h (symbolic_byte_offset::to_json): New decl. + (symbolic_byte_range::to_json): New decl. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * sm-taint.cc (tainted_allocation_size::tainted_allocation_size): + Add "size_in_bytes" param. + (tainted_allocation_size::maybe_add_sarif_properties): New. + (tainted_allocation_size::m_size_in_bytes): New field. + (region_model::check_dynamic_size_for_taint): Pass size_in_bytes + to tainted_allocation_size ctor. + 2024-04-09 Jakub Jelinek <jakub@redhat.com> * analyzer.opt (Wanalyzer-undefined-behavior-strtok): Fix duplicated diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 537c6a23e62f..c466ce670fd0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,28 @@ +2024-04-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/114462 + * semantics.cc: Implement C++26 P2809R3 - Trivial infinite + loops are not Undefined Behavior. + (maybe_warn_for_constant_evaluated): Add trivial_infinite argument + and emit special diagnostics for that case. + (finish_if_stmt_cond): Adjust caller. + (finish_loop_cond): New function. + (finish_while_stmt): Use it. + (finish_do_stmt): Likewise. + (finish_for_stmt): Likewise. + +2024-04-10 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/104040 + * semantics.cc (expand_or_defer_fn_1): Keep DECL_SAVED_TREE for + all vague linkage cdtors with modules. + +2024-04-10 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/99377 + * module.cc (trees_in::install_entity): Overwrite entity map + index if installing from a partition. + 2024-04-09 Jakub Jelinek <jakub@redhat.com> PR c++/114580 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d0bfcef2ad18..a270aea0c569 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2024-04-10 Harald Anlauf <anlauf@gmx.de> + + PR fortran/106500 + * check.cc (is_c_interoperable): Fix checks for C_SIZEOF. + (gfc_check_c_f_pointer): Reject function returning a pointer as FPTR, + and improve an error message. + 2024-04-09 Paul Thomas <pault@gcc.gnu.org> PR fortran/114535 diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index fd264defc9cc..94470aa8ff86 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2024-04-10 Joseph Myers <josmyers@redhat.com> + + * gcc.pot: Regenerate. + 2024-04-08 Joseph Myers <josmyers@redhat.com> * fr.po: Update. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0bb7c408c535..4bf575b25c77 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,91 @@ +2024-04-10 Hans-Peter Nilsson <hp@axis.com> + + Revert: + 2024-04-05 Hans-Peter Nilsson <hp@axis.com> + + * gcc.target/cris/pr93372-2.c: Tweak scan-assembler + checks to cover recent combine improvement. + +2024-04-10 Marek Polacek <polacek@redhat.com> + + PR target/114606 + * gcc.target/i386/fhardened-1.c: New test. + * gcc.target/i386/fhardened-2.c: New test. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * c-c++-common/analyzer/out-of-bounds-pr114472.c: New test. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * c-c++-common/analyzer/memset-1.c: Clarify some comments. + +2024-04-10 David Malcolm <dmalcolm@redhat.com> + + * gcc.dg/plugin/copy_from_user-1.c: Add missing directives for an + analyzer test. + * gcc.dg/plugin/taint-CVE-2011-0521-1-fixed.c: Add missing + -fanalyzer to options. + * gcc.dg/plugin/taint-CVE-2011-0521-1.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-2-fixed.c: Likewise. + (dvb_usercopy): Add default case to avoid complaints about NULL + derefs. + * gcc.dg/plugin/taint-CVE-2011-0521-2.c: Likewise. + * gcc.dg/plugin/taint-CVE-2011-0521-3-fixed.c: Add missing + -fanalyzer to options. + * gcc.dg/plugin/taint-CVE-2011-0521-3.c: Likewise. Drop + xfail. + +2024-04-10 Harald Anlauf <anlauf@gmx.de> + + PR fortran/106500 + * gfortran.dg/c_sizeof_6.f90: Remove wrong dg-error. + * gfortran.dg/sizeof_2.f90: Adjust pattern. + * gfortran.dg/c_f_pointer_tests_9.f90: New test. + * gfortran.dg/c_sizeof_7.f90: New test. + +2024-04-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/114672 + * gcc.dg/torture/pr114672.c: New testcase. + +2024-04-10 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * gcc.target/aarch64/bitint-alignments.c: New test. + * gcc.target/aarch64/bitint-args.c: New test. + * gcc.target/aarch64/bitint-sizes.c: New test. + * gcc.target/aarch64/bitfield-bitint-abi.h: New header. + * gcc.target/aarch64/bitfield-bitint-abi-align16.c: New test. + * gcc.target/aarch64/bitfield-bitint-abi-align8.c: New test. + +2024-04-10 Jakub Jelinek <jakub@redhat.com> + + PR c++/114462 + * g++.dg/cpp26/trivial-infinite-loop1.C: New test. + * g++.dg/cpp26/trivial-infinite-loop2.C: New test. + * g++.dg/cpp26/trivial-infinite-loop3.C: New test. + +2024-04-10 Kewen Lin <linkw@linux.ibm.com> + + PR testsuite/114662 + * gcc.dg/lto/pr113359-2_0.c: Use unsigned long long instead of + unsigned long. + * gcc.dg/lto/pr113359-2_1.c: Likewise. + +2024-04-10 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/104040 + * g++.dg/modules/pr104040_a.C: New test. + * g++.dg/modules/pr104040_b.C: New test. + +2024-04-10 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/99377 + * g++.dg/modules/pr99377-3_a.H: New test. + * g++.dg/modules/pr99377-3_b.C: New test. + * g++.dg/modules/pr99377-3_c.C: New test. + * g++.dg/modules/pr99377-3_d.C: New test. + 2024-04-09 David Faust <david.faust@oracle.com> PR testsuite/114642 diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index f3206978020f..79ce55c62933 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,10 @@ +2024-04-10 Andre Vieira <andre.simoesdiasvieira@arm.com> + + * config/aarch64/t-softfp (softfp_extras): Add floatbitinthf, + floatbitintbf, floatbitinttf and fixtfbitint. + * config/aarch64/libgcc-softfp.ver (GCC_14.0.0): Add __floatbitinthf, + __floatbitintbf, __floatbitinttf and __fixtfbitint. + 2024-04-09 Sergey Bugaev <bugaevc@gmail.com> * config.host: Recognize aarch64*-*-gnu* hosts. diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1ed8b9bc93f0..3a05795065e5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,17 @@ +2024-04-10 Jonathan Wakely <jwakely@redhat.com> + + * testsuite/27_io/manipulators/extended/get_time/char/2.cc: + Adjust input string so that it matches %a with or without a + trailing period. + * testsuite/std/time/year_month_day/io.cc: Adjust expected + format for %x in the fr_FR locale. + +2024-04-10 Jonathan Wakely <jwakely@redhat.com> + + * src/c++17/fs_ops.cc (remove_all) [__FreeBSD__ || __DragonFly__]: + Check for EMLINK as well as ELOOP. + [__NetBSD__]: Check for EFTYPE as well as ELOOP. + 2024-04-09 Jonathan Wakely <jwakely@redhat.com> PR libstdc++/114633 From 5c869aa8a4538b218d9e59de6c96133971e7b965 Mon Sep 17 00:00:00 2001 From: Indu Bhagat <indu.bhagat@oracle.com> Date: Wed, 10 Apr 2024 17:27:52 -0700 Subject: [PATCH 493/551] ctf: fix PR debug/112878 PR debug/112878: ICE: in ctf_add_slice, at ctfc.cc:499 with _BitInt > 255 in a struct and -gctf1 The CTF generation in GCC does not have a mechanism to roll-back an already added type. In this testcase presented in the PR, we hit a representation limit in CTF slices (for a member of a struct) and ICE, after the type for struct (CTF_K_STRUCT) has already been added to the container. To exit gracefully instead, we now check for both the offset and size of the bitfield to be explicitly <= 255. If the check fails, we emit the member with type CTF_K_UNKNOWN. Note that, the value 255 stems from the existing binutils libctf checks which were motivated to guard against malformed inputs. Although it is not accurate to say that this is a CTF representation limit, mark the code with TBD_CTF_REPRESENTATION_LIMIT for now so that this can be taken care of with the next format version bump, when libctf's checks for the slice data can be lifted as well. gcc/ChangeLog: PR debug/112878 * dwarf2ctf.cc (gen_ctf_sou_type): Check for conditions before call to ctf_add_slice. Use CTF_K_UNKNOWN type if fail. gcc/testsuite/ChangeLog: PR debug/112878 * gcc.dg/debug/ctf/ctf-bitfields-5.c: New test. --- gcc/dwarf2ctf.cc | 15 ++++++++++----- .../gcc.dg/debug/ctf/ctf-bitfields-5.c | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-5.c diff --git a/gcc/dwarf2ctf.cc b/gcc/dwarf2ctf.cc index 77d6bf896893..dc59569fe560 100644 --- a/gcc/dwarf2ctf.cc +++ b/gcc/dwarf2ctf.cc @@ -606,11 +606,16 @@ gen_ctf_sou_type (ctf_container_ref ctfc, dw_die_ref sou, uint32_t kind) if (attr) bitpos += AT_unsigned (attr); - field_type_id = ctf_add_slice (ctfc, CTF_ADD_NONROOT, - field_type_id, - bitpos - field_location, - bitsize, - c); + /* This is not precisely a TBD_CTF_REPRESENTATION_LIMIT, but + surely something to look at for the next format version bump + for CTF. */ + if (bitsize <= 255 && (bitpos - field_location) <= 255) + field_type_id = ctf_add_slice (ctfc, CTF_ADD_NONROOT, + field_type_id, + bitpos - field_location, + bitsize, c); + else + field_type_id = gen_ctf_unknown_type (ctfc); } /* Add the field type to the struct or union type. */ diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-5.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-5.c new file mode 100644 index 000000000000..fee8228647cd --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-5.c @@ -0,0 +1,17 @@ +/* Bitfield where the bit offset is > 255 is not allowed in CTF. + + PR debug/112878. + This testcase is to ensure graceful handling. No slices are expected. */ + +/* { dg-do compile { target bitint } } */ +/* { dg-options "-O0 -gctf -dA" } */ + +/* No slices are expected, but a struct with one member is expected. + CTF_K_UNKNOWN is also expected. */ +/* { dg-final { scan-assembler-times "cts_type" 0 } } */ +/* { dg-final { scan-assembler-times "\[\t \]0x1a000001\[\t \]+\[^\n\]*ctt_info" 1 } } */ +/* { dg-final { scan-assembler-times "ascii \"unknown.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */ + +struct { + _BitInt(282) a : 280; +} b; From 936dd627cd90bdfa3f796712c043406958131d7c Mon Sep 17 00:00:00 2001 From: Indu Bhagat <indu.bhagat@oracle.com> Date: Mon, 8 Apr 2024 11:01:45 -0700 Subject: [PATCH 494/551] btf: do not skip members of data type with type id BTF_VOID_TYPEID The previous fix in gen_ctf_sou_type () exposes an issue in BTF generation, however: BTF emission was currently decrementing the vlen (indicating the number of members) to skip members of type CTF_K_UNKNOWN altogether, but still emitting the BTF for the corresponding member (in output_asm_btf_sou_fields ()). One can see malformed BTF by executing the newly added CTF testcase (gcc.dg/debug/ctf/ctf-bitfields-5.c) with -gbtf instead or even existing btf-struct-2.c without this patch. To fix the issue, it makes sense to rather _not_ skip members of data type of type id BTF_VOID_TYPEID. gcc/ChangeLog: * btfout.cc (btf_asm_type): Do not skip emitting members of unknown type. gcc/testsuite/ChangeLog: * gcc.dg/debug/btf/btf-bitfields-4.c: Update the vlen check. * gcc.dg/debug/btf/btf-struct-2.c: Check that member named 'f' with void data type is emitted. --- gcc/btfout.cc | 5 ----- gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c | 6 +++--- gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c | 9 +++++---- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/gcc/btfout.cc b/gcc/btfout.cc index 4a8ec4d1ff04..ab491f0297fb 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -820,11 +820,6 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) /* Set kflag if this member is a representable bitfield. */ if (btf_dmd_representable_bitfield_p (ctfc, dmd)) btf_kflag = 1; - - /* Struct members that refer to unsupported types or bitfield formats - shall be skipped. These are marked during preprocessing. */ - else if (!btf_emit_id_p (dmd->dmd_type)) - btf_vlen -= 1; } } diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c index c00c8b3d87f3..d4a6ef6a1eb8 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c @@ -6,14 +6,14 @@ In this test, we construct a structure such that the bitfield will have an offset so large as to be unrepresentable in BTF. We expect that the resulting BTF will describe the rest of the structure, ignoring the - non-representable bitfield. */ + non-representable bitfield by simply using void data type for the same. */ /* { dg-do compile } */ /* { dg-options "-O0 -gbtf -dA" } */ /* { dg-require-effective-target size32plus } */ -/* Struct with 3 members and no bitfield (kind_flag not set). */ -/* { dg-final { scan-assembler-times "\[\t \]0x4000003\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* Struct with 4 members and no bitfield (kind_flag not set). */ +/* { dg-final { scan-assembler-times "\[\t \]0x4000004\[\t \]+\[^\n\]*btt_info" 1 } } */ struct bigly { diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c index e9ff06883dbe..fa7231be75c8 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-struct-2.c @@ -2,14 +2,15 @@ unsupported type. BTF does not support vector types (among other things). When - generating BTF for a struct (or union) type, members which refer to - unsupported types should be skipped. */ + generating BTF for a struct (or union) type. Members which refer to + unsupported types should not be skipped, however. */ /* { dg-do compile } */ /* { dg-options "-O0 -gbtf -dA" } */ -/* Expect a struct with only 2 members - 'f' should not be present. */ -/* { dg-final { scan-assembler-times "\[\t \]0x4000002\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* Expect a struct with 3 members - 'f' is present but is of data type void. */ +/* { dg-final { scan-assembler-times "\[\t \]0x4000003\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* { dg-final { scan-assembler-times " MEMBER 'f' idx=1\[\\r\\n\]+\[^\\r\\n\]*0\[\t \]+\[^\n\]*btm_type: void" 1 } } */ struct with_float { From e40a3d86511efcea71e9eadde8fb9f96be52f790 Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Thu, 11 Apr 2024 09:39:44 +0800 Subject: [PATCH 495/551] RISC-V: Bugfix ICE for the vector return arg in mode switch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch would like to fix a ICE in mode sw for below example code. during RTL pass: mode_sw test.c: In function ‘vbool16_t j(vuint64m4_t)’: test.c:15:1: internal compiler error: in create_pre_exit, at mode-switching.cc:451 15 | } | ^ 0x3978f12 create_pre_exit __RISCV_BUILD__/../gcc/mode-switching.cc:451 0x3979e9e optimize_mode_switching __RISCV_BUILD__/../gcc/mode-switching.cc:849 0x397b9bc execute __RISCV_BUILD__/../gcc/mode-switching.cc:1324 extern size_t get_vl (); vbool16_t test (vuint64m4_t a) { unsigned long b; return __riscv_vmsne_vx_u64m4_b16 (a, b, get_vl ()); } The create_pre_exit would like to find a return value copy. If not, there will be a reason in assert but not available for above sample code when vector calling convension is enabled by default. This patch would like to override the TARGET_FUNCTION_VALUE_REGNO_P for vector register and then we will have hard_regno_nregs for copy_num, aka there is a return value copy. As a side-effect of allow vector in TARGET_FUNCTION_VALUE_REGNO_P, the TARGET_GET_RAW_RESULT_MODE will have vector mode and which is sizeless cannot be converted to fixed_size_mode. Thus override the hook TARGET_GET_RAW_RESULT_MODE and return VOIDmode when the regno is-not-a fixed_size_mode. The below tests are passed for this patch. * The fully riscv regression tests. * The reproducing test in bugzilla PR114639. PR target/114639 gcc/ChangeLog: * config/riscv/riscv.cc (riscv_function_value_regno_p): New func impl for hook TARGET_FUNCTION_VALUE_REGNO_P. (riscv_get_raw_result_mode): New func imple for hook TARGET_GET_RAW_RESULT_MODE. (TARGET_FUNCTION_VALUE_REGNO_P): Impl the hook. (TARGET_GET_RAW_RESULT_MODE): Ditto. * config/riscv/riscv.h (V_RETURN): New macro for vector return. (GP_RETURN_FIRST): New macro for the first GPR in return. (GP_RETURN_LAST): New macro for the last GPR in return. (FP_RETURN_FIRST): Diito but for FPR. (FP_RETURN_LAST): Ditto. (FUNCTION_VALUE_REGNO_P): Remove as deprecated and replace by TARGET_FUNCTION_VALUE_REGNO_P. gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/base/pr114639-1.C: New test. * gcc.target/riscv/rvv/base/pr114639-1.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv.cc | 34 +++++++++++++++++++ gcc/config/riscv/riscv.h | 8 +++-- .../g++.target/riscv/rvv/base/pr114639-1.C | 25 ++++++++++++++ .../gcc.target/riscv/rvv/base/pr114639-1.c | 14 ++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.target/riscv/rvv/base/pr114639-1.C create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 00defa69fd8e..91f017dd52a0 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -10997,6 +10997,34 @@ riscv_vector_mode_supported_any_target_p (machine_mode) return true; } +/* Implements hook TARGET_FUNCTION_VALUE_REGNO_P. */ + +static bool +riscv_function_value_regno_p (const unsigned regno) +{ + if (GP_RETURN_FIRST <= regno && regno <= GP_RETURN_LAST) + return true; + + if (FP_RETURN_FIRST <= regno && regno <= FP_RETURN_LAST) + return true; + + if (regno == V_RETURN) + return true; + + return false; +} + +/* Implements hook TARGET_GET_RAW_RESULT_MODE. */ + +static fixed_size_mode +riscv_get_raw_result_mode (int regno) +{ + if (!is_a <fixed_size_mode> (reg_raw_mode[regno])) + return as_a <fixed_size_mode> (VOIDmode); + + return default_get_reg_raw_mode (regno); +} + /* Initialize the GCC target structure. */ #undef TARGET_ASM_ALIGNED_HI_OP #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t" @@ -11343,6 +11371,12 @@ riscv_vector_mode_supported_any_target_p (machine_mode) #undef TARGET_VECTOR_MODE_SUPPORTED_ANY_TARGET_P #define TARGET_VECTOR_MODE_SUPPORTED_ANY_TARGET_P riscv_vector_mode_supported_any_target_p +#undef TARGET_FUNCTION_VALUE_REGNO_P +#define TARGET_FUNCTION_VALUE_REGNO_P riscv_function_value_regno_p + +#undef TARGET_GET_RAW_RESULT_MODE +#define TARGET_GET_RAW_RESULT_MODE riscv_get_raw_result_mode + struct gcc_target targetm = TARGET_INITIALIZER; #include "gt-riscv.h" diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index 269b8c1f0763..7797e67317a6 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -683,6 +683,12 @@ enum reg_class #define GP_RETURN GP_ARG_FIRST #define FP_RETURN (UNITS_PER_FP_ARG == 0 ? GP_RETURN : FP_ARG_FIRST) +#define V_RETURN V_REG_FIRST + +#define GP_RETURN_FIRST GP_ARG_FIRST +#define GP_RETURN_LAST GP_ARG_FIRST + 1 +#define FP_RETURN_FIRST FP_RETURN +#define FP_RETURN_LAST FP_RETURN + 1 #define MAX_ARGS_IN_REGISTERS \ (riscv_abi == ABI_ILP32E || riscv_abi == ABI_LP64E \ @@ -714,8 +720,6 @@ enum reg_class #define FUNCTION_VALUE(VALTYPE, FUNC) \ riscv_function_value (VALTYPE, FUNC, VOIDmode) -#define FUNCTION_VALUE_REGNO_P(N) ((N) == GP_RETURN || (N) == FP_RETURN) - /* 1 if N is a possible register number for function argument passing. We have no FP argument registers when soft-float. */ diff --git a/gcc/testsuite/g++.target/riscv/rvv/base/pr114639-1.C b/gcc/testsuite/g++.target/riscv/rvv/base/pr114639-1.C new file mode 100644 index 000000000000..9450b108ae57 --- /dev/null +++ b/gcc/testsuite/g++.target/riscv/rvv/base/pr114639-1.C @@ -0,0 +1,25 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +typedef long c; + +#pragma riscv intrinsic "vector" + +template <unsigned long> struct d {}; + +struct e { + using f = d<0>; +}; + +struct g { + using f = e::f; +}; + +template <typename, int> using h = g::f; +template <unsigned long i> long get_vl (d<i>); + +vbool16_t test (vuint64m4_t a) { + c b; + return __riscv_vmsne_vx_u64m4_b16(a, b, get_vl (h<c, 2>())); +} diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c new file mode 100644 index 000000000000..3ad91dbf6bbe --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c @@ -0,0 +1,14 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ + +#include <riscv_vector.h> + +extern size_t get_vl (); + +vbool16_t +test (vuint64m4_t a) +{ + unsigned long b; + return __riscv_vmsne_vx_u64m4_b16 (a, b, get_vl ()); +} From f3fdcf4a37a7be07f2acbf5c8ed5e3399440a0ef Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Thu, 11 Apr 2024 11:42:40 +0800 Subject: [PATCH 496/551] RISC-V: Remove -Wno-psabi for test build option [NFC] Just notice there are some test case still have -Wno-psabi option, which is deprecated now. Remove them all for riscv test cases. The below test are passed for this patch. * The riscv rvv regression test. gcc/testsuite/ChangeLog: * g++.target/riscv/rvv/base/pr109244.C: Remove deprecated -Wno-psabi option. * g++.target/riscv/rvv/base/pr109535.C: Ditto. * gcc.target/riscv/rvv/autovec/fixed-vlmax-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-5.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-6.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-5.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-6.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-5.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-6.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-7.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-5.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-6.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-7.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-5.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-6.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-7.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-5.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-6.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-7.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-1.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-2.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-3.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c: Ditto. * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c: Ditto. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/testsuite/g++.target/riscv/rvv/base/pr109244.C | 2 +- gcc/testsuite/g++.target/riscv/rvv/base/pr109535.C | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/fixed-vlmax-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-2.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-1.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-2.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-3.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-5.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-6.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-7.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-1.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-2.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-3.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-5.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-6.c | 2 +- gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-5.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-6.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-7.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-1.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-2.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-3.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c | 2 +- .../gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c | 2 +- 62 files changed, 62 insertions(+), 62 deletions(-) diff --git a/gcc/testsuite/g++.target/riscv/rvv/base/pr109244.C b/gcc/testsuite/g++.target/riscv/rvv/base/pr109244.C index b0ce04f49210..eebfc239d3a8 100644 --- a/gcc/testsuite/g++.target/riscv/rvv/base/pr109244.C +++ b/gcc/testsuite/g++.target/riscv/rvv/base/pr109244.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O2 -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" } */ typedef int a; using c = float; template < typename > using e = int; diff --git a/gcc/testsuite/g++.target/riscv/rvv/base/pr109535.C b/gcc/testsuite/g++.target/riscv/rvv/base/pr109535.C index aec613f3f970..7013cfcf4ee5 100644 --- a/gcc/testsuite/g++.target/riscv/rvv/base/pr109535.C +++ b/gcc/testsuite/g++.target/riscv/rvv/base/pr109535.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */ typedef long size_t; typedef signed char int8_t; diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/fixed-vlmax-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/fixed-vlmax-1.c index ee5f18c9f8ba..d8112ae48517 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/fixed-vlmax-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/fixed-vlmax-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -fno-schedule-insns -fno-schedule-insns2 -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -fno-schedule-insns -fno-schedule-insns2 -O3 -mrvv-vector-bits=zvl" } */ #include "riscv_vector.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-1.c index 216ecb40bf8c..bdd17774225b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-2.c index 481f409c4a42..f783433672e8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-3.c index d30a0d4ef808..9d76ef3a94e4 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-4.c index 1b0a1913bf5f..77b2b15ef027 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-5.c index 1ea57b8f2103..07d47093e628 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-6.c index 39b7e8125fbe..dada929d80df 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-1.c index b3d859d2cba2..79c52b6ae8a0 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-1.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "compress-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-2.c index 5aa7b3f81121..187c6fea1839 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-2.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "compress-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-3.c index cf3477d389dd..4a102fe09037 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-3.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "compress-3.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-4.c index d5480ed93a76..ce819de1ade8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-4.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "compress-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-5.c index 5c0ce6b7d562..75520eed1445 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-5.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "compress-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-6.c index a1d2696bb27d..43d83c9274a2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-6.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "compress-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-1.c index cb9423440f97..ccc17d7add7f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-2.c index ce96aa504c7d..d6e49e29a14f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-1.c index ea41ae3a3f4a..035fe95bfff1 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-1.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "consecutive-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-2.c index 8a7a67971c85..bafdcb971750 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-2.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include <assert.h> #include "consecutive-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-1.c index 2b39e0b5ed9b..fc3c528acfad 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-2.c index 4b2d077100da..ee6ad76a65e8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-3.c index 3b6895e95095..03441a86a8d9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c index 5ef7036c8330..3095a6df1890 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-5.c index ec8f198534ad..9e83320c2be5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-6.c index 986b85cd425f..4c7ebe1497c8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-7.c index b5ebce07e363..dcb1d7744bae 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-march=rv64gcv_zvfhmin -mabi=lp64d -O3 -mrvv-vector-bits=zvl" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-1.c index b960d99f06ad..ad1c961e3a69 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-1.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include "merge-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-2.c index e907320c0753..2f0845adca2a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-2.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include "merge-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-3.c index db16077a0a91..f3a172a505f2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-3.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include "merge-3.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-4.c index dda8b3beecfd..d2321c7ba482 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-4.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include "merge-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-5.c index 8d429b807657..cc02aa7eb46d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-5.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include "merge-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-6.c index 7945baab39cf..e49f1cca91bb 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-6.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include "merge-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-7.c index 8401f1da5ba9..988b21e5dd80 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-7.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-O3 -mrvv-vector-bits=zvl -Wno-psabi" } */ +/* { dg-options "-O3 -mrvv-vector-bits=zvl" } */ #include "merge-7.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-1.c index b361a04836ef..58c2cd8ce23f 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d" } */ #include "perm.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-2.c index 9e9123a6ceff..d88b6461da54 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d" } */ #include "perm.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-3.c index 0cefb2416475..110df490c6e3 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d" } */ #include "perm.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c index 7ab310435476..0ba3affb008a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d" } */ #include "perm.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-5.c index e03f8e1ad51b..7117a492dc73 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d" } */ #include "perm.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-6.c index c74ad03935e0..67b2e6f680ee 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-6.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d" } */ #include "perm.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-7.c index 46c4a71256d0..0ac982872544 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d" } */ #include "perm.h" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-1.c index 2172d7794efd..1f9740ccd168 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-1.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 -Wno-psabi" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3" } */ #include "perm-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-2.c index 8874c0521fcc..7168068def85 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-2.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 -Wno-psabi" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3" } */ #include "perm-2.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-3.c index 139ff0879852..40a20918a981 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-3.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 -Wno-psabi" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3" } */ #include "perm-3.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-4.c index 08f03dec7088..3cbe609a8d54 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-4.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 -Wno-psabi" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3" } */ #include "perm-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-5.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-5.c index 6b7db30b2596..af2036919334 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-5.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-5.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 -Wno-psabi" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3" } */ #include "perm-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-6.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-6.c index 240acf2b1e35..50848b5e6375 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-6.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-6.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O3 -Wno-psabi" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O3" } */ #include "perm-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-7.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-7.c index dce65f91ec88..2d2c1a9ecaa9 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-7.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-7.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-options "-mrvv-vector-bits=zvl -O0 -Wno-psabi" } */ +/* { dg-options "-mrvv-vector-bits=zvl -O0" } */ #include "perm-7.c" diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c index 34a821280422..725f56b21d25 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c index 98f6c7dc17eb..14334ba1a947 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c index 4288a6d2411a..d9959a38ecb2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c index 9223bc56f911..b9865948087a 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c index 0102848656ab..c8bca3c29dc5 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c index c4047b6eba5f..552c48ecc490 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c index d8deb7dc3ed3..e872c94e492d 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c index a276700cd94b..36d4926e4f88 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c index 5df7e08c42f3..86351d481ea2 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-additional-options "-std=c99 -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-std=c99 -Wno-pedantic" } */ #include <assert.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c index 7c77ae87f08f..5b609a9fb8f8 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-additional-options "-std=c99 -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-std=c99 -Wno-pedantic" } */ #include <assert.h> #include <limits.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-1.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-1.c index e97f6f5f8eec..ecb160933d60 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-1.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-2.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-2.c index 6d077d649b39..194abff77ccc 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-2.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-3.c index 5f6cb321ac96..9495d5163d4b 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-3.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c index c6f696409f4b..9992bc24c345 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic" } */ #include <stdint-gcc.h> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c index 5dc095cce51a..e0c8ff8b9352 100644 --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c @@ -1,5 +1,5 @@ /* { dg-do run { target { riscv_v } } } */ -/* { dg-additional-options "-std=c99 -Wno-pedantic -Wno-psabi" } */ +/* { dg-additional-options "-std=c99 -Wno-pedantic" } */ #include <assert.h> From cb46aca0a07355abf2f0b04f52087bca8f848524 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 11 Apr 2024 09:46:00 +0200 Subject: [PATCH 497/551] c++: Fix ANNOTATE_EXPR instantiation [PR114409] The following testcase ICEs starting with the r14-4229 PR111529 change which moved ANNOTATE_EXPR handling from tsubst_expr to tsubst_copy_and_build. ANNOTATE_EXPR is only allowed in the IL to wrap a loop condition, and the loop condition of while/for loops can be a COMPOUND_EXPR with DECL_EXPR in the first operand and the corresponding VAR_DECL in the second, as created by finish_cond else if (!empty_expr_stmt_p (cond)) expr = build2 (COMPOUND_EXPR, TREE_TYPE (expr), cond, expr); Since then Patrick reworked the instantiation, so that we have now tsubst_stmt and tsubst_expr and ANNOTATE_EXPR ended up in the latter, while only tsubst_stmt can handle DECL_EXPR. Now, the reason why the while/for loops with variable declaration in the condition works in templates without the pragmas (i.e. without ANNOTATE_EXPR) is that both the FOR_STMT and WHILE_STMT handling uses RECUR aka tsubst_stmt in handling of the *_COND operand: case FOR_STMT: stmt = begin_for_stmt (NULL_TREE, NULL_TREE); RECUR (FOR_INIT_STMT (t)); finish_init_stmt (stmt); tmp = RECUR (FOR_COND (t)); finish_for_cond (tmp, stmt, false, 0, false); and case WHILE_STMT: stmt = begin_while_stmt (); tmp = RECUR (WHILE_COND (t)); finish_while_stmt_cond (tmp, stmt, false, 0, false); Therefore, it will handle DECL_EXPR embedded in COMPOUND_EXPR of the {WHILE,FOR}_COND just fine. But if that COMPOUND_EXPR with DECL_EXPR is wrapped with one or more ANNOTATE_EXPRs, because ANNOTATE_EXPR is now done solely in tsubst_expr and uses RECUR there (i.e. tsubst_expr), it will ICE on DECL_EXPR in there. This could be fixed by keeping ANNOTATE_EXPR handling in tsubst_expr but using tsubst_stmt for the first operand, but this patch instead moves ANNOTATE_EXPR handling to tsubst_stmt (and uses tsubst_expr for the second/third operand). 2024-04-11 Jakub Jelinek <jakub@redhat.com> PR c++/114409 * pt.cc (tsubst_expr) <case ANNOTATE_EXPR>: Move to ... (tsubst_stmt) <case ANNOTATE_EXPR>: ... here. Use tsubst_expr instead of RECUR for the last 2 arguments. * g++.dg/ext/pr114409-2.C: New test. --- gcc/cp/pt.cc | 30 ++++++++++++---------- gcc/testsuite/g++.dg/ext/pr114409-2.C | 36 +++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/pr114409-2.C diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index bf4b89d84130..767778e53efa 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -19433,6 +19433,23 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl) case PREDICT_EXPR: RETURN (add_stmt (copy_node (t))); + case ANNOTATE_EXPR: + { + /* Although ANNOTATE_EXPR is an expression, it can only appear in + WHILE_COND, DO_COND or FOR_COND expressions, which are tsubsted + using tsubst_stmt rather than tsubst_expr and can contain + DECL_EXPRs. */ + tree op1 = RECUR (TREE_OPERAND (t, 0)); + tree op2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl); + tree op3 = tsubst_expr (TREE_OPERAND (t, 2), args, complain, in_decl); + if (TREE_CODE (op2) == INTEGER_CST + && wi::to_widest (op2) == (int) annot_expr_unroll_kind) + op3 = cp_check_pragma_unroll (EXPR_LOCATION (TREE_OPERAND (t, 2)), + op3); + RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR, + TREE_TYPE (op1), op1, op2, op3)); + } + default: gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t))); @@ -21772,19 +21789,6 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) RETURN (op); } - case ANNOTATE_EXPR: - { - op1 = RECUR (TREE_OPERAND (t, 0)); - tree op2 = RECUR (TREE_OPERAND (t, 1)); - tree op3 = RECUR (TREE_OPERAND (t, 2)); - if (TREE_CODE (op2) == INTEGER_CST - && wi::to_widest (op2) == (int) annot_expr_unroll_kind) - op3 = cp_check_pragma_unroll (EXPR_LOCATION (TREE_OPERAND (t, 2)), - op3); - RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR, - TREE_TYPE (op1), op1, op2, op3)); - } - default: /* Handle Objective-C++ constructs, if appropriate. */ if (tree subst = objcp_tsubst_expr (t, args, complain, in_decl)) diff --git a/gcc/testsuite/g++.dg/ext/pr114409-2.C b/gcc/testsuite/g++.dg/ext/pr114409-2.C new file mode 100644 index 000000000000..3c2bb984fc3b --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/pr114409-2.C @@ -0,0 +1,36 @@ +// PR c++/114409 +// { dg-do compile } +// { dg-options "-O2" } + +template <typename T> +T +foo (T) +{ + static T t; + return 42 - ++t; +} + +template <typename T> +void +bar (T x) +{ + #pragma GCC novector + while (T y = foo (x)) + ++y; +} + +template <typename T> +void +baz (T x) +{ + #pragma GCC novector + for (; T y = foo (x); ) + ++y; +} + +void +qux () +{ + bar (0); + baz (0); +} From 52b63100b1eda433120e726d4e8f8dfca6fc94fa Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Thu, 11 Apr 2024 08:47:19 +0200 Subject: [PATCH 498/551] middle-end/114681 - condition coverage and inlining When inlining a gcond it can map to multiple stmts, esp. with non-call EH. The following makes sure to pick up the remapped condition when dealing with condition coverage. PR middle-end/114681 * tree-inline.cc (copy_bb): Key on the remapped stmt to identify gconds to have condition coverage data remapped. * gcc.misc-tests/gcov-pr114681.c: New testcase. --- gcc/testsuite/gcc.misc-tests/gcov-pr114681.c | 18 ++++++++++++++++++ gcc/tree-inline.cc | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-pr114681.c diff --git a/gcc/testsuite/gcc.misc-tests/gcov-pr114681.c b/gcc/testsuite/gcc.misc-tests/gcov-pr114681.c new file mode 100644 index 000000000000..a8dc666a452d --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-pr114681.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fnon-call-exceptions -fno-exceptions -fcondition-coverage" } */ + +float f, g; + +static void +bar () +{ + if (g < f) + for (;;) + ; +} + +void +foo () +{ + bar (); +} diff --git a/gcc/tree-inline.cc b/gcc/tree-inline.cc index 5f852885e7f1..238afb7de80e 100644 --- a/gcc/tree-inline.cc +++ b/gcc/tree-inline.cc @@ -2090,7 +2090,7 @@ copy_bb (copy_body_data *id, basic_block bb, /* If -fcondition-coverage is used, register the inlined conditions in the cond->expression mapping of the caller. The expression tag is shifted conditions from the two bodies are not mixed. */ - if (id->src_cfun->cond_uids && is_a <gcond*> (orig_stmt)) + if (id->src_cfun->cond_uids && is_a <gcond*> (stmt)) { gcond *orig_cond = as_a <gcond*> (orig_stmt); gcond *cond = as_a <gcond*> (stmt); From c7e8a8d814229fd6fc4c16c2452f15dddc613479 Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Thu, 11 Apr 2024 11:08:07 +0200 Subject: [PATCH 499/551] tree-optimization/109596 - wrong debug stmt move by copyheader The following fixes an omission in r14-162-gcda246f8b421ba causing wrong-debug and a bunch of guality regressions. PR tree-optimization/109596 * tree-ssa-loop-ch.cc (ch_base::copy_headers): Propagate debug stmts to nonexit->dest rather than exit->dest. --- gcc/tree-ssa-loop-ch.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/tree-ssa-loop-ch.cc b/gcc/tree-ssa-loop-ch.cc index 1f0033be4c43..b7ef485c4cc8 100644 --- a/gcc/tree-ssa-loop-ch.cc +++ b/gcc/tree-ssa-loop-ch.cc @@ -957,7 +957,7 @@ ch_base::copy_headers (function *fun) edge entry = loop_preheader_edge (loop); - propagate_threaded_block_debug_into (exit->dest, entry->dest); + propagate_threaded_block_debug_into (nonexit->dest, entry->dest); if (!gimple_duplicate_seme_region (entry, exit, bbs, n_bbs, copied_bbs, true)) { From 467898d513e602f5b5fc4183052217d7e6d6e8ab Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 11 Apr 2024 11:12:11 +0200 Subject: [PATCH 500/551] asan, v3: Fix up handling of > 32 byte aligned variables with -fsanitize=address -fstack-protector* [PR110027] On Tue, Mar 26, 2024 at 02:08:02PM +0800, liuhongt wrote: > > > So, try to add some other variable with larger size and smaller alignment > > > to the frame (and make sure it isn't optimized away). > > > > > > alignb above is the alignment of the first partition's var, if > > > align_frame_offset really needs to depend on the var alignment, it probably > > > should be the maximum alignment of all the vars with alignment > > > alignb * BITS_PER_UNIT <=3D MAX_SUPPORTED_STACK_ALIGNMENT > > > > > In asan_emit_stack_protection, when it allocated fake stack, it assume > bottom of stack is also aligned to alignb. And the place violated this > is the first var partition. which is 32 bytes offsets, it should be > BIGGEST_ALIGNMENT / BITS_PER_UNIT. > So I think we need to use MAX (BIGGEST_ALIGNMENT / > BITS_PER_UNIT, ASAN_RED_ZONE_SIZE) for the first var partition. Your first patch aligned offsets[0] to maximum of alignb and ASAN_RED_ZONE_SIZE. But as I wrote in the reply to that mail, alignb there is the alignment of just a single variable which is the first one to appear in the sorted list and is placed in the highest spot in the stack frame. That is not necessarily the largest alignment, the sorting ensures that it is a variable with the largest size in the frame (and only if several of them have equal size, largest alignment from the same sized ones). Your second patch used maximum of BIGGEST_ALIGNMENT / BITS_PER_UNIT and ASAN_RED_ZONE_SIZE. That doesn't change anything at all when using -mno-avx512f - offsets[0] is still just 32-byte aligned in that case relative to top of frame, just changes the -mavx512f case to be 64-byte aligned offsets[0] (aka offsets[0] is then either 0 or -64 instead of either 0 or -32). That will not help if any variable in the frame needs 128-byte, 256-byte, 512-byte ... 4096-byte alignment. If you want to fix the bug in the spot you've touched, you'd need to walk all the stack_vars[stack_vars_sorted[si2]] for si2 [si + 1, n - 1] and for those where the loop would do anything (i.e. stack_vars[i2].representative == i2 && TREE_CODE (decl2) == SSA_NAME ? SA.partition_to_pseudo[var_to_partition (SA.map, decl2)] == NULL_RTX : DECL_RTL (decl2) == pc_rtx and the pred applies (but that means also walking the earlier ones! because with -fstack-protector* the vars can be processed in several calls) and alignb2 * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT and compute maximum of those alignments. That maximum is already computed, data->asan_alignb = MAX (data->asan_alignb, alignb); computes that, but you get the final result only after you do all the expand_stack_vars calls. You'd need to compute it before. Though, that change would be still in the wrong place. The thing is, it would be a waste of the precious stack space when it isn't needed at all (e.g. when asan will not at compile time do the use after return checking, or if it won't do it at runtime, or even if it will do at runtime it will waste the space on the stack). The following patch fixes it solely for the __asan_stack_malloc_N allocations, doesn't enlarge unnecessarily further the actual stack frame. Because asan is only supported on FRAME_GROWS_DOWNWARD architectures (mips, rs6000 and xtensa are conditional FRAME_GROWS_DOWNWARD arches, which for -fsanitize=address or -fstack-protector* use FRAME_GROWS_DOWNWARD 1, otherwise 0, others supporting asan always just use 1), the assumption for the dynamic stack realignment is that the top of the stack frame (aka offset 0) is aligned to alignb passed to the function (which is the maximum of alignb of all the vars in the frame). As checked by the assertion in the patch, offsets[0] is 0 most of the time and so that assumption is correct, the only case when it is not 0 is if -fstack-protector* is on together with -fsanitize=address and cfgexpand.cc (create_stack_guard) created a stack guard. That is the only variable which is allocated in the stack frame right away, for all others with -fsanitize=address defer_stack_allocation (or -fstack-protector*) returns true and so they aren't allocated immediately but handled during the frame layout phases. So, the original frame_offset of 0 is changed because of the stack guard to -pointer_size_in_bytes and later at the if (data->asan_vec.is_empty ()) { align_frame_offset (ASAN_RED_ZONE_SIZE); prev_offset = frame_offset.to_constant (); } to -ASAN_RED_ZONE_SIZE. The asan_emit_stack_protection code wasn't taking this into account though, so essentially assumed in the __asan_stack_malloc_N allocated memory it needs to align it such that pointer corresponding to offsets[0] is alignb aligned. But that isn't correct if alignb > ASAN_RED_ZONE_SIZE, in that case it needs to ensure that pointer corresponding to frame offset 0 is alignb aligned. The following patch fixes that. Unlike the previous case where we knew that asan_frame_size + base_align_bias falls into the same bucket as asan_frame_size, this isn't in some cases true anymore, so the patch recomputes which bucket to use and if going to bucket 11 (because there is no __asan_stack_malloc_11 function in the library) disables the after return sanitization. 2024-04-11 Jakub Jelinek <jakub@redhat.com> PR middle-end/110027 * asan.cc (asan_emit_stack_protection): Assert offsets[0] is zero if there is no stack protect guard, otherwise -ASAN_RED_ZONE_SIZE. If alignb > ASAN_RED_ZONE_SIZE and there is stack pointer guard, take the ASAN_RED_ZONE_SIZE bytes allocated at the top of the stack into account when computing base_align_bias. Recompute use_after_return_class from asan_frame_size + base_align_bias and set to -1 if that would overflow to 11. * gcc.dg/asan/pr110027.c: New test. --- gcc/asan.cc | 26 +++++++++++++-- gcc/testsuite/gcc.dg/asan/pr110027.c | 50 ++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/asan/pr110027.c diff --git a/gcc/asan.cc b/gcc/asan.cc index 7f91cc616fca..57c3a9b00e19 100644 --- a/gcc/asan.cc +++ b/gcc/asan.cc @@ -1911,19 +1911,39 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb, } str_cst = asan_pp_string (&asan_pp); + gcc_checking_assert (offsets[0] == (crtl->stack_protect_guard + ? -ASAN_RED_ZONE_SIZE : 0)); /* Emit the prologue sequence. */ if (asan_frame_size > 32 && asan_frame_size <= 65536 && pbase && param_asan_use_after_return) { + HOST_WIDE_INT adjusted_frame_size = asan_frame_size; + /* The stack protector guard is allocated at the top of the frame + and cfgexpand.cc then uses align_frame_offset (ASAN_RED_ZONE_SIZE); + while in that case we can still use asan_frame_size, we need to take + that into account when computing base_align_bias. */ + if (alignb > ASAN_RED_ZONE_SIZE && crtl->stack_protect_guard) + adjusted_frame_size += ASAN_RED_ZONE_SIZE; use_after_return_class = floor_log2 (asan_frame_size - 1) - 5; /* __asan_stack_malloc_N guarantees alignment N < 6 ? (64 << N) : 4096 bytes. */ if (alignb > (use_after_return_class < 6 ? (64U << use_after_return_class) : 4096U)) use_after_return_class = -1; - else if (alignb > ASAN_RED_ZONE_SIZE && (asan_frame_size & (alignb - 1))) - base_align_bias = ((asan_frame_size + alignb - 1) - & ~(alignb - HOST_WIDE_INT_1)) - asan_frame_size; + else if (alignb > ASAN_RED_ZONE_SIZE + && (adjusted_frame_size & (alignb - 1))) + { + base_align_bias + = ((adjusted_frame_size + alignb - 1) + & ~(alignb - HOST_WIDE_INT_1)) - adjusted_frame_size; + use_after_return_class + = floor_log2 (asan_frame_size + base_align_bias - 1) - 5; + if (use_after_return_class > 10) + { + base_align_bias = 0; + use_after_return_class = -1; + } + } } /* Align base if target is STRICT_ALIGNMENT. */ diff --git a/gcc/testsuite/gcc.dg/asan/pr110027.c b/gcc/testsuite/gcc.dg/asan/pr110027.c new file mode 100644 index 000000000000..6d646899bc9e --- /dev/null +++ b/gcc/testsuite/gcc.dg/asan/pr110027.c @@ -0,0 +1,50 @@ +/* PR middle-end/110027 */ +/* { dg-do run } */ +/* { dg-additional-options "-fstack-protector-strong" { target fstack_protector } } */ +/* { dg-set-target-env-var ASAN_OPTIONS "detect_stack_use_after_return=1" } */ + +struct __attribute__((aligned (128))) S { char s[128]; }; +struct __attribute__((aligned (64))) T { char s[192]; }; +struct __attribute__((aligned (32))) U { char s[256]; }; +struct __attribute__((aligned (64))) V { char s[320]; }; +struct __attribute__((aligned (128))) W { char s[512]; }; + +__attribute__((noipa)) void +foo (void *p, void *q, void *r, void *s) +{ + if (((__UINTPTR_TYPE__) p & 31) != 0 + || ((__UINTPTR_TYPE__) q & 127) != 0 + || ((__UINTPTR_TYPE__) r & 63) != 0) + __builtin_abort (); + (void *) s; +} + +__attribute__((noipa)) int +bar (void) +{ + struct U u; + struct S s; + struct T t; + char p[4]; + foo (&u, &s, &t, &p); + return 42; +} + +__attribute__((noipa)) int +baz (void) +{ + struct W w; + struct U u; + struct V v; + char p[4]; + foo (&u, &w, &v, &p); + return 42; +} + +int +main () +{ + bar (); + baz (); + return 0; +} From 508b2b9df12b1049a0850e3a29193b1277dcd817 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 11 Apr 2024 15:55:53 +0200 Subject: [PATCH 501/551] libstdc++: Regenerate baseline_symbols.txt files for Linux The following patch regenerates the ABI files for 13 branch (I've only changed the Linux files which were updated in r13-7289, all but m68k, riscv64 and powerpc64 are from actual Fedora 39 gcc builds, the rest hand edited). We've added one symbol very early in the 13.2 cycle, but then added 2 further ones very soon afterwards, quite a long time before 13.2 release and haven't regenerated. The patch applies cleanly to trunk as well. 2024-04-11 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/m68k-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/riscv64-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update. --- .../config/abi/post/aarch64-linux-gnu/baseline_symbols.txt | 2 ++ .../config/abi/post/i486-linux-gnu/baseline_symbols.txt | 2 ++ .../config/abi/post/m68k-linux-gnu/baseline_symbols.txt | 2 ++ .../config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt | 2 ++ .../config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt | 2 ++ .../config/abi/post/riscv64-linux-gnu/baseline_symbols.txt | 2 ++ .../config/abi/post/s390x-linux-gnu/baseline_symbols.txt | 2 ++ .../config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt | 2 ++ .../config/abi/post/x86_64-linux-gnu/baseline_symbols.txt | 2 ++ 9 files changed, 18 insertions(+) diff --git a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt index 975af4cdff1d..550a181772b2 100644 --- a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt @@ -3214,6 +3214,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3366,6 +3367,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt index 2e1d8b3d8b29..62970e9c58a7 100644 --- a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt @@ -3214,6 +3214,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEjjPKcj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3366,6 +3367,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEjjPKwj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt index 975e7e97cbf9..87fa5d6c6fc6 100644 --- a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt @@ -3214,6 +3214,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEjjPKcj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3366,6 +3367,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEjjPKwj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt index 340c7de1f1f5..f1540fc7cef0 100644 --- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt @@ -3404,6 +3404,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3556,6 +3557,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt index 5250925ce4e1..356878636944 100644 --- a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt @@ -3575,6 +3575,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3727,6 +3728,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt index 5ee7f5a04603..b0c7561063d3 100644 --- a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt @@ -3210,6 +3210,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3362,6 +3363,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt index fae1e9d97735..660115ab7e58 100644 --- a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt @@ -3404,6 +3404,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3556,6 +3557,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt index 2e1d8b3d8b29..62970e9c58a7 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt @@ -3214,6 +3214,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEjjPKcj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3366,6 +3367,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEjjPKwj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt index de46f8055a33..9923963933d4 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt @@ -3214,6 +3214,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3366,6 +3367,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEmm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEm@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_m@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 From 0dc39dee836761f1bc993d760f4ed5f3d127897a Mon Sep 17 00:00:00 2001 From: Gaius Mulley <gaiusmod2@gmail.com> Date: Thu, 11 Apr 2024 15:04:49 +0100 Subject: [PATCH 502/551] modula2: add modula-2 language section to languages supported by GCC This patch introduces a small modula-2 language section to the Language Standards Supported by GCC node. gcc/ChangeLog: * doc/standards.texi (Language Standards Supported by GCC): Add Modula-2 language section. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com> --- gcc/doc/standards.texi | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gcc/doc/standards.texi b/gcc/doc/standards.texi index 06444ee15f74..586835b28f31 100644 --- a/gcc/doc/standards.texi +++ b/gcc/doc/standards.texi @@ -332,6 +332,17 @@ GCC supports the D 2.0 programming language. The D language itself is currently defined by its reference implementation and supporting language specification, described at @uref{https://dlang.org/spec/spec.html}. +@section Modula-2 language + +GCC supports the Modula-2 language and is compliant with the PIM2, +PIM3, PIM4 and ISO dialects. Also implemented are a complete set of +free ISO libraries. It also contains a collection of PIM libraries +and some Logitech compatible libraries. + +For more information on Modula-2 see +@uref{https://gcc.gnu.org/readings.html}. The online manual is +available at @uref{https://gcc.gnu.org/onlinedocs/gm2/index.html}. + @section References for Other Languages @xref{Top, GNAT Reference Manual, About This Guide, gnat_rm, From b262b17636e47ae969a74f16e86ccb00678d5e88 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Thu, 11 Apr 2024 10:16:41 -0400 Subject: [PATCH 503/551] c++: build_extra_args recapturing local specs [PR114303] r13-6452-g341e6cd8d603a3 made build_extra_args walk evaluated contexts first so that we prefer processing a local specialization in an evaluated context even if its first use is in an unevaluated context. But this means we need to avoid walking a tree that already has extra args/specs saved because the list of saved specs appears to be an evaluated context which we'll now walk first. It seems then that we should be calculating the saved specs from scratch each time, rather than potentially walking the saved specs list from an earlier partial instantiation when calling build_extra_args a second time around. PR c++/114303 gcc/cp/ChangeLog: * constraint.cc (tsubst_requires_expr): Clear REQUIRES_EXPR_EXTRA_ARGS before calling build_extra_args. * pt.cc (tree_extra_args): Define. (extract_locals_r): Assert *_EXTRA_ARGS is empty. (tsubst_stmt) <case IF_STMT>: Clear IF_SCOPE on the new IF_STMT. Call build_extra_args on the new IF_STMT instead of t which might already have IF_STMT_EXTRA_ARGS. gcc/testsuite/ChangeLog: * g++.dg/cpp1z/constexpr-if-lambda6.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/constraint.cc | 1 + gcc/cp/pt.cc | 31 ++++++++++++++++++- .../g++.dg/cpp1z/constexpr-if-lambda6.C | 16 ++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index 49de3211d4c7..8a3b5d80ba7c 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -2362,6 +2362,7 @@ tsubst_requires_expr (tree t, tree args, sat_info info) matching or dguide constraint rewriting), in which case we need to partially substitute. */ t = copy_node (t); + REQUIRES_EXPR_EXTRA_ARGS (t) = NULL_TREE; REQUIRES_EXPR_EXTRA_ARGS (t) = build_extra_args (t, args, info.complain); return t; } diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 767778e53efa..7c91c6959aa7 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -3858,6 +3858,24 @@ has_extra_args_mechanism_p (const_tree t) && IF_STMT_CONSTEXPR_P (t))); /* IF_STMT_EXTRA_ARGS */ } +/* Return *_EXTRA_ARGS of the given supported tree T. */ + +static tree& +tree_extra_args (tree t) +{ + gcc_checking_assert (has_extra_args_mechanism_p (t)); + + if (PACK_EXPANSION_P (t)) + return PACK_EXPANSION_EXTRA_ARGS (t); + else if (TREE_CODE (t) == REQUIRES_EXPR) + return REQUIRES_EXPR_EXTRA_ARGS (t); + else if (TREE_CODE (t) == IF_STMT + && IF_STMT_CONSTEXPR_P (t)) + return IF_STMT_EXTRA_ARGS (t); + + gcc_unreachable (); +} + /* Structure used to track the progress of find_parameter_packs_r. */ struct find_parameter_pack_data { @@ -13291,6 +13309,16 @@ extract_locals_r (tree *tp, int *walk_subtrees, void *data_) /* Remember local typedefs (85214). */ tp = &TYPE_NAME (*tp); + if (has_extra_args_mechanism_p (*tp)) + /* Assert *_EXTRA_ARGS is empty, because we don't want to walk it and + potentially see a previously captured local in an evaluated context + that's really only used in an unevaluated context (PR114303). This + means callers of build_extra_args need to clear *_EXTRA_ARGS of the + outermost tree. Nested *_EXTRA_ARGS should naturally be empty since + the outermost (extra-args) tree will intercept any substitution before + a nested tree can. */ + gcc_checking_assert (tree_extra_args (*tp) == NULL_TREE); + if (TREE_CODE (*tp) == DECL_EXPR) { tree decl = DECL_EXPR_DECL (*tp); @@ -18716,10 +18744,11 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl) of the constexpr if is still dependent. Don't substitute into the branches now, just remember the template arguments. */ do_poplevel (IF_SCOPE (stmt)); + IF_SCOPE (stmt) = NULL_TREE; IF_COND (stmt) = IF_COND (t); THEN_CLAUSE (stmt) = THEN_CLAUSE (t); ELSE_CLAUSE (stmt) = ELSE_CLAUSE (t); - IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (t, args, complain); + IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (stmt, args, complain); add_stmt (stmt); break; } diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C new file mode 100644 index 000000000000..038c2a41210f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if-lambda6.C @@ -0,0 +1,16 @@ +// PR c++/114303 +// { dg-do compile { target c++17 } } + +struct A { static constexpr bool value = true; }; + +int main() { + [](auto x1) { + return [&](auto) { + return [&](auto x3) { + if constexpr (decltype(x3)::value) { + static_assert(decltype(x1)::value); + } + }(A{}); + }(0); + }(A{}); +} From 1defe743aeb19532f6d6f4cab37e10f11467abd8 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely <jwakely@redhat.com> Date: Thu, 11 Apr 2024 12:28:25 +0100 Subject: [PATCH 504/551] libstdc++: Export std::__basic_file::native_handle as GLIBCXX_3.4.33 [PR114692] I added this new symbol in the wrong version. GLIBCXX_3.4.32 was already used for the GCC 13.2.0 release, so the new symbol should have been in a new GLIBCXX_3.4.33 version. Additionally, the pattern doesn't need to use [cw] because we only ever use __basic_file<char>, even for std::basic_filebuf<wchar_t>. libstdc++-v3/ChangeLog: PR libstdc++/114692 * config/abi/pre/gnu.ver (GLIBCXX_3.4.32): Move new exports for __basic_file::native_handle to ... (GLIBCXX_3.4.33): ... here. Adjust to not match wchar_t specialization, which isn't used. * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.33 and update latest version check. --- libstdc++-v3/config/abi/pre/gnu.ver | 9 +++++++-- libstdc++-v3/testsuite/util/testsuite_abi.cc | 3 ++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index db20d75b68ef..31449b5b87b8 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -2516,13 +2516,18 @@ GLIBCXX_3.4.31 { } GLIBCXX_3.4.30; +# GCC 13.2.0 GLIBCXX_3.4.32 { _ZSt21ios_base_library_initv; _ZNSt7__cxx1112basic_stringI[cw]St11char_traitsI[cw]ESaI[cw]EE11_S_allocateERS3_[jmy]; - # std::basic_file<>::native_handle() - _ZNKSt12__basic_fileI[cw]E13native_handleEv; } GLIBCXX_3.4.31; +# GCC 14.1.0 +GLIBCXX_3.4.33 { + # std::basic_file<char>::native_handle() + _ZNKSt12__basic_fileIcE13native_handleEv; +} GLIBCXX_3.4.32; + # Symbols in the support library (libsupc++) have their own tag. CXXABI_1.3 { diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc index 4f3846b9cc20..e4bf3cdc8e07 100644 --- a/libstdc++-v3/testsuite/util/testsuite_abi.cc +++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc @@ -214,6 +214,7 @@ check_version(symbol& test, bool added) known_versions.push_back("GLIBCXX_3.4.30"); known_versions.push_back("GLIBCXX_3.4.31"); known_versions.push_back("GLIBCXX_3.4.32"); + known_versions.push_back("GLIBCXX_3.4.33"); known_versions.push_back("GLIBCXX_LDBL_3.4.31"); known_versions.push_back("GLIBCXX_IEEE128_3.4.29"); known_versions.push_back("GLIBCXX_IEEE128_3.4.30"); @@ -253,7 +254,7 @@ check_version(symbol& test, bool added) test.version_status = symbol::incompatible; // Check that added symbols are added in the latest pre-release version. - bool latestp = (test.version_name == "GLIBCXX_3.4.32" + bool latestp = (test.version_name == "GLIBCXX_3.4.33" || test.version_name == "CXXABI_1.3.15" || test.version_name == "CXXABI_FLOAT128" || test.version_name == "CXXABI_TM_1"); From e33fc847d5457bd56734cad056955102a23f405b Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Wed, 3 Apr 2024 23:32:12 +0100 Subject: [PATCH 505/551] aarch64: Reorder FMV feature priorities Some higher priority FMV features were dependent subsets of lower priority features. Fix this, using the new priorities specified in https://github.com/ARM-software/acle/pull/279. gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def: Reorder FMV entries. gcc/testsuite/ChangeLog: * gcc.target/aarch64/cpunative/native_cpu_21.c: Reorder features. * gcc.target/aarch64/cpunative/native_cpu_22.c: Ditto. --- .../aarch64/aarch64-option-extensions.def | 18 +++++++----------- .../aarch64/cpunative/native_cpu_21.c | 2 +- .../aarch64/cpunative/native_cpu_22.c | 2 +- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index aa3cd99f791c..0078dd092884 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -99,17 +99,17 @@ AARCH64_OPT_EXTENSION(NAME, IDENT, REQUIRES, EXPLICIT_ON, EXPLICIT_OFF, \ AARCH64_FMV_FEATURE(NAME, IDENT, (IDENT)) -AARCH64_OPT_EXTENSION("fp", FP, (), (), (), "fp") - -AARCH64_OPT_EXTENSION("simd", SIMD, (FP), (), (), "asimd") - AARCH64_OPT_FMV_EXTENSION("rng", RNG, (), (), (), "rng") AARCH64_OPT_FMV_EXTENSION("flagm", FLAGM, (), (), (), "flagm") AARCH64_FMV_FEATURE("flagm2", FLAGM2, (FLAGM)) -AARCH64_FMV_FEATURE("fp16fml", FP16FML, (F16FML)) +AARCH64_OPT_FMV_EXTENSION("lse", LSE, (), (), (), "atomics") + +AARCH64_OPT_FMV_EXTENSION("fp", FP, (), (), (), "fp") + +AARCH64_OPT_FMV_EXTENSION("simd", SIMD, (FP), (), (), "asimd") AARCH64_OPT_FMV_EXTENSION("dotprod", DOTPROD, (SIMD), (), (), "asimddp") @@ -121,12 +121,6 @@ AARCH64_OPT_EXTENSION("rdma", RDMA, (), (SIMD), (), "asimdrdm") AARCH64_FMV_FEATURE("rmd", RDM, (RDMA)) -AARCH64_OPT_FMV_EXTENSION("lse", LSE, (), (), (), "atomics") - -AARCH64_FMV_FEATURE("fp", FP, (FP)) - -AARCH64_FMV_FEATURE("simd", SIMD, (SIMD)) - AARCH64_OPT_FMV_EXTENSION("crc", CRC, (), (), (), "crc32") AARCH64_FMV_FEATURE("sha1", SHA1, ()) @@ -160,6 +154,8 @@ AARCH64_FMV_FEATURE("fp16", FP16, (F16)) -march=armv8.4-a+nofp16+fp16 enables F16 but not F16FML. */ AARCH64_OPT_EXTENSION("fp16fml", F16FML, (), (F16), (), "asimdfhm") +AARCH64_FMV_FEATURE("fp16fml", FP16FML, (F16FML)) + AARCH64_FMV_FEATURE("dit", DIT, ()) AARCH64_FMV_FEATURE("dpb", DPB, ()) diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c index 920e1d65711c..1d90e9ec9d97 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_21.c @@ -7,7 +7,7 @@ int main() return 0; } -/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+dotprod\+rdma\+lse\+crc\+fp16fml\+rcpc\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\n} } } */ +/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+lse\+dotprod\+rdma\+crc\+fp16fml\+rcpc\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\n} } } */ /* Check that an Armv8-A core doesn't fall apart on extensions without midr values. */ diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c index 416a29b514ab..17050a0b72c9 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_22.c @@ -7,7 +7,7 @@ int main() return 0; } -/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+dotprod\+rdma\+lse\+crc\+fp16fml\+rcpc\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\+pauth\n} } } */ +/* { dg-final { scan-assembler {\.arch armv8-a\+flagm\+lse\+dotprod\+rdma\+crc\+fp16fml\+rcpc\+i8mm\+bf16\+sve2-aes\+sve2-bitperm\+sve2-sha3\+sve2-sm4\+sb\+ssbs\+pauth\n} } } */ /* Check that an Armv8-A core doesn't fall apart on extensions without midr values and that it enables optional features. */ From 3ef14f56343ad3445f874638700f6b82f032a1ae Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Wed, 3 Apr 2024 23:35:08 +0100 Subject: [PATCH 506/551] aarch64: Fix FMV array iteration bounds There was an assumption in some places that the aarch64_fmv_feature_data array contained FEAT_MAX elements. While this assumption held up till now, it is safer and more flexible to use the array size directly. Also fix the lower bound in compare_feature_masks to use ">=0" instead of ">0", and add a test using the features at index 0 and 1. However, the test already passed, because the earlier popcount check makes it impossible to reach the loop if the masks differ in exactly one location. gcc/ChangeLog: * config/aarch64/aarch64.cc (compare_feature_masks): Use ARRAY_SIZE and >=0 for iteration bounds. (aarch64_mangle_decl_assembler_name): Use ARRAY_SIZE. gcc/testsuite/ChangeLog: * g++.target/aarch64/mv-1.C: New test. --- gcc/config/aarch64/aarch64.cc | 8 ++++-- gcc/testsuite/g++.target/aarch64/mv-1.C | 38 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.target/aarch64/mv-1.C diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index c763a8a62982..91481f9fada6 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -19738,7 +19738,7 @@ aarch64_parse_fmv_features (const char *str, aarch64_feature_flags *isa_flags, if (len == 0) return AARCH_PARSE_MISSING_ARG; - static const int num_features = ARRAY_SIZE (aarch64_fmv_feature_data); + int num_features = ARRAY_SIZE (aarch64_fmv_feature_data); int i; for (i = 0; i < num_features; i++) { @@ -19937,7 +19937,8 @@ compare_feature_masks (aarch64_fmv_feature_mask mask1, auto diff_mask = mask1 ^ mask2; if (diff_mask == 0ULL) return 0; - for (int i = FEAT_MAX - 1; i > 0; i--) + int num_features = ARRAY_SIZE (aarch64_fmv_feature_data); + for (int i = num_features - 1; i >= 0; i--) { auto bit_mask = aarch64_fmv_feature_data[i].feature_mask; if (diff_mask & bit_mask) @@ -20020,7 +20021,8 @@ aarch64_mangle_decl_assembler_name (tree decl, tree id) name += "._"; - for (int i = 0; i < FEAT_MAX; i++) + int num_features = ARRAY_SIZE (aarch64_fmv_feature_data); + for (int i = 0; i < num_features; i++) { if (feature_mask & aarch64_fmv_feature_data[i].feature_mask) { diff --git a/gcc/testsuite/g++.target/aarch64/mv-1.C b/gcc/testsuite/g++.target/aarch64/mv-1.C new file mode 100644 index 000000000000..b4b0e5e3fea0 --- /dev/null +++ b/gcc/testsuite/g++.target/aarch64/mv-1.C @@ -0,0 +1,38 @@ +/* { dg-do compile } */ +/* { dg-require-ifunc "" } */ +/* { dg-options "-O0" } */ + +__attribute__((target_version("default"))) +int foo () +{ + return 1; +} + +__attribute__((target_version("rng"))) +int foo () +{ + return 1; +} + +__attribute__((target_version("flagm"))) +int foo () +{ + return 1; +} + +__attribute__((target_version("rng+flagm"))) +int foo () +{ + return 1; +} + +int bar() +{ + return foo (); +} + +/* Check usage of the first two FMV features, in case of off-by-one errors. */ +/* { dg-final { scan-assembler-times "\n_Z3foov\.default:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mrng:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._MrngMflagm:\n" 1 } } */ +/* { dg-final { scan-assembler-times "\n_Z3foov\._Mflagm:\n" 1 } } */ From a28df11276647da16316d0621cb69ff5f878cd91 Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Wed, 3 Apr 2024 23:37:16 +0100 Subject: [PATCH 507/551] aarch64: Fix typo and make rdma/rdm alias for FMV gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def: Fix "rmd"->"rdm", and add FMV to "rdma". * config/aarch64/aarch64.cc (FEAT_RDMA): Define as FEAT_RDM. --- gcc/config/aarch64/aarch64-option-extensions.def | 5 +++-- gcc/config/aarch64/aarch64.cc | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 0078dd092884..b7b307b24ead 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -117,9 +117,10 @@ AARCH64_OPT_FMV_EXTENSION("sm4", SM4, (SIMD), (), (), "sm3 sm4") /* An explicit +rdma implies +simd, but +rdma+nosimd still enables scalar RDMA instructions. */ -AARCH64_OPT_EXTENSION("rdma", RDMA, (), (SIMD), (), "asimdrdm") +AARCH64_OPT_FMV_EXTENSION("rdma", RDMA, (), (SIMD), (), "asimdrdm") -AARCH64_FMV_FEATURE("rmd", RDM, (RDMA)) +/* rdm is an alias for rdma. */ +AARCH64_FMV_FEATURE("rdm", RDM, (RDMA)) AARCH64_OPT_FMV_EXTENSION("crc", CRC, (), (), (), "crc32") diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 91481f9fada6..a2e3d208d761 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -19695,6 +19695,10 @@ typedef struct #define AARCH64_FMV_FEATURE(NAME, FEAT_NAME, C) \ {NAME, 1ULL << FEAT_##FEAT_NAME, ::feature_deps::fmv_deps_##FEAT_NAME}, +/* The "rdma" alias uses a different FEAT_NAME to avoid a duplicate + feature_deps name. */ +#define FEAT_RDMA FEAT_RDM + /* FMV features are listed in priority order, to make it easier to sort target strings. */ static aarch64_fmv_feature_datum aarch64_fmv_feature_data[] = { From 27e34311760456683d8316532dc57db24b3f410b Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Wed, 3 Apr 2024 23:53:52 +0100 Subject: [PATCH 508/551] aarch64: Remove unsupported FMV features It currently isn't possible to support function multiversioning features properly in GCC without also enabling the extension in the command line options (with the exception of features such as "rpres" that do not require assembler support). We therefore remove unsupported features from GCC's list of FMV features. Some of these features ("fcma", "jscvt", "frintts", "flagm2", "wfxt", "rcpc2", and perhaps "dpb" and "dpb2") will be added back in the future once support for the command line option has been added. The rest of the removed features I have proposed removing from the ACLE specification as well, since it doesn't seem worthwhile to include support for them; see the ACLE pull request for more detailed justification: https://github.com/ARM-software/acle/pull/315 gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def: Remove "flagm2", "sha1", "pmull", "dit", "dpb", "dpb2", "jscvt", "fcma", "rcpc2", "frintts", "dgh", "ebf16", "sve-bf16", "sve-ebf16", "sve-i8mm", "sve2-pmull128", "memtag3", "bti" and "wfxt" entries. --- .../aarch64/aarch64-option-extensions.def | 38 ------------------- 1 file changed, 38 deletions(-) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index b7b307b24ead..54bbf9c41e79 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -103,8 +103,6 @@ AARCH64_OPT_FMV_EXTENSION("rng", RNG, (), (), (), "rng") AARCH64_OPT_FMV_EXTENSION("flagm", FLAGM, (), (), (), "flagm") -AARCH64_FMV_FEATURE("flagm2", FLAGM2, (FLAGM)) - AARCH64_OPT_FMV_EXTENSION("lse", LSE, (), (), (), "atomics") AARCH64_OPT_FMV_EXTENSION("fp", FP, (), (), (), "fp") @@ -124,16 +122,12 @@ AARCH64_FMV_FEATURE("rdm", RDM, (RDMA)) AARCH64_OPT_FMV_EXTENSION("crc", CRC, (), (), (), "crc32") -AARCH64_FMV_FEATURE("sha1", SHA1, ()) - AARCH64_OPT_FMV_EXTENSION("sha2", SHA2, (SIMD), (), (), "sha1 sha2") AARCH64_FMV_FEATURE("sha3", SHA3, (SHA3)) AARCH64_OPT_FMV_EXTENSION("aes", AES, (SIMD), (), (), "aes") -AARCH64_FMV_FEATURE("pmull", PMULL, ()) - /* +nocrypto disables AES, SHA2 and SM4, and anything that depends on them (such as SHA3 and the SVE2 crypto extensions). */ AARCH64_OPT_EXTENSION("crypto", CRYPTO, (AES, SHA2), (), (AES, SHA2, SM4), @@ -157,44 +151,20 @@ AARCH64_OPT_EXTENSION("fp16fml", F16FML, (), (F16), (), "asimdfhm") AARCH64_FMV_FEATURE("fp16fml", FP16FML, (F16FML)) -AARCH64_FMV_FEATURE("dit", DIT, ()) - -AARCH64_FMV_FEATURE("dpb", DPB, ()) - -AARCH64_FMV_FEATURE("dpb2", DPB2, ()) - -AARCH64_FMV_FEATURE("jscvt", JSCVT, ()) - -AARCH64_FMV_FEATURE("fcma", FCMA, (SIMD)) - AARCH64_OPT_FMV_EXTENSION("rcpc", RCPC, (), (), (), "lrcpc") -AARCH64_FMV_FEATURE("rcpc2", RCPC2, (RCPC)) - AARCH64_OPT_FMV_EXTENSION("rcpc3", RCPC3, (), (), (), "lrcpc3") -AARCH64_FMV_FEATURE("frintts", FRINTTS, ()) - -AARCH64_FMV_FEATURE("dgh", DGH, ()) - AARCH64_OPT_FMV_EXTENSION("i8mm", I8MM, (SIMD), (), (), "i8mm") /* An explicit +bf16 implies +simd, but +bf16+nosimd still enables scalar BF16 instructions. */ AARCH64_OPT_FMV_EXTENSION("bf16", BF16, (FP), (SIMD), (), "bf16") -AARCH64_FMV_FEATURE("ebf16", EBF16, (BF16)) - AARCH64_FMV_FEATURE("rpres", RPRES, ()) AARCH64_OPT_FMV_EXTENSION("sve", SVE, (SIMD, F16), (), (), "sve") -AARCH64_FMV_FEATURE("sve-bf16", SVE_BF16, (SVE, BF16)) - -AARCH64_FMV_FEATURE("sve-ebf16", SVE_EBF16, (SVE, BF16)) - -AARCH64_FMV_FEATURE("sve-i8mm", SVE_I8MM, (SVE, I8MM)) - AARCH64_OPT_EXTENSION("f32mm", F32MM, (SVE), (), (), "f32mm") AARCH64_FMV_FEATURE("f32mm", SVE_F32MM, (F32MM)) @@ -209,8 +179,6 @@ AARCH64_OPT_EXTENSION("sve2-aes", SVE2_AES, (SVE2, AES), (), (), "sveaes") AARCH64_FMV_FEATURE("sve2-aes", SVE_AES, (SVE2_AES)) -AARCH64_FMV_FEATURE("sve2-pmull128", SVE_PMULL128, (SVE2)) - AARCH64_OPT_EXTENSION("sve2-bitperm", SVE2_BITPERM, (SVE2), (), (), "svebitperm") @@ -230,8 +198,6 @@ AARCH64_OPT_FMV_EXTENSION("memtag", MEMTAG, (), (), (), "") AARCH64_FMV_FEATURE("memtag2", MEMTAG2, (MEMTAG)) -AARCH64_FMV_FEATURE("memtag3", MEMTAG3, (MEMTAG)) - AARCH64_OPT_FMV_EXTENSION("sb", SB, (), (), (), "sb") AARCH64_OPT_FMV_EXTENSION("predres", PREDRES, (), (), (), "") @@ -240,8 +206,6 @@ AARCH64_OPT_FMV_EXTENSION("ssbs", SSBS, (), (), (), "ssbs") AARCH64_FMV_FEATURE("ssbs2", SSBS2, (SSBS)) -AARCH64_FMV_FEATURE("bti", BTI, ()) - AARCH64_OPT_EXTENSION("profile", PROFILE, (), (), (), "") AARCH64_OPT_EXTENSION("tme", TME, (), (), (), "") @@ -256,8 +220,6 @@ AARCH64_FMV_FEATURE("ls64_v", LS64_V, ()) AARCH64_FMV_FEATURE("ls64_accdata", LS64_ACCDATA, (LS64)) -AARCH64_FMV_FEATURE("wfxt", WFXT, ()) - AARCH64_OPT_EXTENSION("sme-f64f64", SME_F64F64, (SME), (), (), "") AARCH64_FMV_FEATURE("sme-f64f64", SME_F64, (SME_F64F64)) From d33ec3b78fe9f6e0234bc08669b5021f324d67b3 Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Fri, 5 Apr 2024 17:12:46 +0100 Subject: [PATCH 509/551] aarch64: Remove FMV features whose names may change Some architecture features have been combined under a single command line flag, but have been assigned multiple FMV feature names with the command line flag name enabling only a subset of these features in the FMV specification. I've proposed reallocating names in the FMV specification to match the command line flags [1], but for GCC 14 we'll just remove them from the FMV feature list. [1] https://github.com/ARM-software/acle/pull/315 gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def: Remove "memtag", "memtag2", "ssbs", "ssbs2", "ls64", "ls64_v" and "ls64_accdata" FMV features. --- gcc/config/aarch64/aarch64-option-extensions.def | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 54bbf9c41e79..3155eccd39c8 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -194,17 +194,13 @@ AARCH64_FMV_FEATURE("sve2-sm4", SVE_SM4, (SVE2_SM4)) AARCH64_OPT_FMV_EXTENSION("sme", SME, (BF16, SVE2), (), (), "sme") -AARCH64_OPT_FMV_EXTENSION("memtag", MEMTAG, (), (), (), "") - -AARCH64_FMV_FEATURE("memtag2", MEMTAG2, (MEMTAG)) +AARCH64_OPT_EXTENSION("memtag", MEMTAG, (), (), (), "") AARCH64_OPT_FMV_EXTENSION("sb", SB, (), (), (), "sb") AARCH64_OPT_FMV_EXTENSION("predres", PREDRES, (), (), (), "") -AARCH64_OPT_FMV_EXTENSION("ssbs", SSBS, (), (), (), "ssbs") - -AARCH64_FMV_FEATURE("ssbs2", SSBS2, (SSBS)) +AARCH64_OPT_EXTENSION("ssbs", SSBS, (), (), (), "ssbs") AARCH64_OPT_EXTENSION("profile", PROFILE, (), (), (), "") @@ -214,12 +210,6 @@ AARCH64_OPT_EXTENSION("pauth", PAUTH, (), (), (), "paca pacg") AARCH64_OPT_EXTENSION("ls64", LS64, (), (), (), "") -AARCH64_FMV_FEATURE("ls64", LS64, ()) - -AARCH64_FMV_FEATURE("ls64_v", LS64_V, ()) - -AARCH64_FMV_FEATURE("ls64_accdata", LS64_ACCDATA, (LS64)) - AARCH64_OPT_EXTENSION("sme-f64f64", SME_F64F64, (SME), (), (), "") AARCH64_FMV_FEATURE("sme-f64f64", SME_F64, (SME_F64F64)) From a975d8961d7cdb7e6b5176cd2d3891fdc218d776 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 11 Apr 2024 16:37:26 +0200 Subject: [PATCH 510/551] libstdc++: Regenerate trunk baseline_symbols.txt files for Linux While the previous patch was regeneration from 13.2 release (with hand edits for arches I don't have libraries for but which are still well maintained), thius one is regeneration from the trunk (this time for hand edits everywhere for the PR114692 https://gcc.gnu.org/pipermail/libstdc++/2024-April/058570.html patch; plus again hand edits for arches I don't have libraries for). 2024-04-11 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/m68k-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/riscv64-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt: Update. * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update. --- .../config/abi/post/aarch64-linux-gnu/baseline_symbols.txt | 4 ++++ .../config/abi/post/i486-linux-gnu/baseline_symbols.txt | 4 ++++ .../config/abi/post/m68k-linux-gnu/baseline_symbols.txt | 4 ++++ .../config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt | 4 ++++ .../abi/post/powerpc64le-linux-gnu/baseline_symbols.txt | 4 ++++ .../config/abi/post/riscv64-linux-gnu/baseline_symbols.txt | 4 ++++ .../config/abi/post/s390x-linux-gnu/baseline_symbols.txt | 4 ++++ .../config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt | 4 ++++ .../config/abi/post/x86_64-linux-gnu/baseline_symbols.txt | 4 ++++ 9 files changed, 36 insertions(+) diff --git a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt index 550a181772b2..27b5937ad9bd 100644 --- a/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4529,6 +4530,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4572,6 +4574,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4608,6 +4611,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt index 62970e9c58a7..4228453c8cc5 100644 --- a/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4533,6 +4534,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4576,6 +4578,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4613,6 +4616,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt index 87fa5d6c6fc6..675a94987249 100644 --- a/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/m68k-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4529,6 +4530,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4572,6 +4574,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4608,6 +4611,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt index f1540fc7cef0..a8438853077b 100644 --- a/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4752,6 +4753,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4817,6 +4819,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4854,6 +4857,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt index 356878636944..18ec97dc6c38 100644 --- a/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4960,6 +4961,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -5025,6 +5027,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -5063,6 +5066,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt index b0c7561063d3..9423cfb8efcb 100644 --- a/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/riscv64-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12bad_weak_ptr4whatEv@@GLIBCXX_3.4.15 FUNC:_ZNKSt12future_error4whatEv@@GLIBCXX_3.4.14 @@ -4525,6 +4526,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4568,6 +4570,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4604,6 +4607,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt index 660115ab7e58..771d87ae99de 100644 --- a/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4752,6 +4753,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4817,6 +4819,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4854,6 +4857,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt index 62970e9c58a7..4228453c8cc5 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4533,6 +4534,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4576,6 +4578,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4613,6 +4616,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt index 9923963933d4..2470f81a9cf2 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -4533,6 +4534,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4576,6 +4578,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4613,6 +4616,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 From eec220142b95d77277238b30f4e08d41ba969e1b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Thu, 11 Apr 2024 16:52:45 +0200 Subject: [PATCH 511/551] Update GCC 14.1 library versions in docs When we are already touching this topic, here is a patch like r13-5126 which documents the upcoming release symbol versions in the documentation. 2024-04-11 Jakub Jelinek <jakub@redhat.com> * doc/xml/manual/abi.xml: Add latest library versions. * doc/html/manual/abi.html: Regenerate. --- libstdc++-v3/doc/html/manual/abi.html | 2 +- libstdc++-v3/doc/xml/manual/abi.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/doc/html/manual/abi.html b/libstdc++-v3/doc/html/manual/abi.html index a0e7bc69484f..3075477cc349 100644 --- a/libstdc++-v3/doc/html/manual/abi.html +++ b/libstdc++-v3/doc/html/manual/abi.html @@ -128,7 +128,7 @@ GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0 release.) If a particular release is not listed, it has the same version labels as the preceding release. - </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</p></li><li class="listitem"><p>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.9.0: GLIBCXX_3.4.20, CXXABI_1.3.8</p></li><li class="listitem"><p>GCC 5.1.0: GLIBCXX_3.4.21, CXXABI_1.3.9</p></li><li class="listitem"><p>GCC 6.1.0: GLIBCXX_3.4.22, CXXABI_1.3.10</p></li><li class="listitem"><p>GCC 7.1.0: GLIBCXX_3.4.23, CXXABI_1.3.11</p></li><li class="listitem"><p>GCC 7.2.0: GLIBCXX_3.4.24, CXXABI_1.3.11</p></li><li class="listitem"><p>GCC 8.1.0: GLIBCXX_3.4.25, CXXABI_1.3.11</p></li><li class="listitem"><p>GCC 9.1.0: GLIBCXX_3.4.26, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 9.2.0: GLIBCXX_3.4.27, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 9.3.0: GLIBCXX_3.4.28, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 10.1.0: GLIBCXX_3.4.28, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 11.1.0: GLIBCXX_3.4.29, CXXABI_1.3.13</p></li><li class="listitem"><p>GCC 12.1.0: GLIBCXX_3.4.30, CXXABI_1.3.13</p></li><li class="listitem"><p>GCC 13.1.0: GLIBCXX_3.4.31, CXXABI_1.3.14</p></li><li class="listitem"><p>GCC 13.2.0: GLIBCXX_3.4.32, CXXABI_1.3.14</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro, + </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</p></li><li class="listitem"><p>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</p></li><li class="listitem"><p>GCC 4.9.0: GLIBCXX_3.4.20, CXXABI_1.3.8</p></li><li class="listitem"><p>GCC 5.1.0: GLIBCXX_3.4.21, CXXABI_1.3.9</p></li><li class="listitem"><p>GCC 6.1.0: GLIBCXX_3.4.22, CXXABI_1.3.10</p></li><li class="listitem"><p>GCC 7.1.0: GLIBCXX_3.4.23, CXXABI_1.3.11</p></li><li class="listitem"><p>GCC 7.2.0: GLIBCXX_3.4.24, CXXABI_1.3.11</p></li><li class="listitem"><p>GCC 8.1.0: GLIBCXX_3.4.25, CXXABI_1.3.11</p></li><li class="listitem"><p>GCC 9.1.0: GLIBCXX_3.4.26, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 9.2.0: GLIBCXX_3.4.27, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 9.3.0: GLIBCXX_3.4.28, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 10.1.0: GLIBCXX_3.4.28, CXXABI_1.3.12</p></li><li class="listitem"><p>GCC 11.1.0: GLIBCXX_3.4.29, CXXABI_1.3.13</p></li><li class="listitem"><p>GCC 12.1.0: GLIBCXX_3.4.30, CXXABI_1.3.13</p></li><li class="listitem"><p>GCC 13.1.0: GLIBCXX_3.4.31, CXXABI_1.3.14</p></li><li class="listitem"><p>GCC 13.2.0: GLIBCXX_3.4.32, CXXABI_1.3.14</p></li><li class="listitem"><p>GCC 14.1.0: GLIBCXX_3.4.33, CXXABI_1.3.15</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro, __GXX_ABI_VERSION. This macro is defined as the version of the compiler v3 ABI, with g++ 3.0 being version 100. This macro will be automatically defined whenever g++ is used (the curious can diff --git a/libstdc++-v3/doc/xml/manual/abi.xml b/libstdc++-v3/doc/xml/manual/abi.xml index 44063831779b..ef66faa82248 100644 --- a/libstdc++-v3/doc/xml/manual/abi.xml +++ b/libstdc++-v3/doc/xml/manual/abi.xml @@ -360,6 +360,7 @@ compatible. <listitem><para>GCC 12.1.0: GLIBCXX_3.4.30, CXXABI_1.3.13</para></listitem> <listitem><para>GCC 13.1.0: GLIBCXX_3.4.31, CXXABI_1.3.14</para></listitem> <listitem><para>GCC 13.2.0: GLIBCXX_3.4.32, CXXABI_1.3.14</para></listitem> + <listitem><para>GCC 14.1.0: GLIBCXX_3.4.33, CXXABI_1.3.15</para></listitem> </itemizedlist> </listitem> From b87ba79200f2a727aa5c523abcc5c03fa11fc007 Mon Sep 17 00:00:00 2001 From: "Andre Vieira (lists)" <andre.simoesdiasvieira@arm.com> Date: Thu, 11 Apr 2024 17:54:37 +0100 Subject: [PATCH 512/551] aarch64: Fix _BitInt testcases This patch fixes some testisms introduced by: commit 5aa3fec38cc6f52285168b161bab1a869d864b44 Author: Andre Vieira <andre.simoesdiasvieira@arm.com> Date: Wed Apr 10 16:29:46 2024 +0100 aarch64: Add support for _BitInt The testcases were relying on an unnecessary sign-extend that is no longer generated. The tested version was just slightly behind top of trunk when the patch was committed, and the codegen had changed, for the better, by then. gcc/testsuite/ChangeLog: * gcc.target/aarch64/bitfield-bitint-abi-align16.c (g1, g8, g16, g1p, g8p, g16p): Remove unnecessary sbfx. * gcc.target/aarch64/bitfield-bitint-abi-align8.c (g1, g8, g16, g1p, g8p, g16p): Likewise. --- .../aarch64/bitfield-bitint-abi-align16.c | 30 ++++++++----------- .../aarch64/bitfield-bitint-abi-align8.c | 30 ++++++++----------- 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c index 3f292a45f955..4a228b0a1ce6 100644 --- a/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c +++ b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align16.c @@ -55,9 +55,8 @@ ** g1: ** mov (x[0-9]+), x0 ** mov w0, w1 -** sbfx (x[0-9]+), \1, 0, 63 -** and x4, \2, 9223372036854775807 -** and x2, \2, 1 +** and x4, \1, 9223372036854775807 +** and x2, \1, 1 ** mov x3, 0 ** b f1 */ @@ -66,9 +65,8 @@ ** g8: ** mov (x[0-9]+), x0 ** mov w0, w1 -** sbfx (x[0-9]+), \1, 0, 63 -** and x4, \2, 9223372036854775807 -** and x2, \2, 1 +** and x4, \1, 9223372036854775807 +** and x2, \1, 1 ** mov x3, 0 ** b f8 */ @@ -76,9 +74,8 @@ ** g16: ** mov (x[0-9]+), x0 ** mov w0, w1 -** sbfx (x[0-9]+), \1, 0, 63 -** and x4, \2, 9223372036854775807 -** and x2, \2, 1 +** and x4, \1, 9223372036854775807 +** and x2, \1, 1 ** mov x3, 0 ** b f16 */ @@ -107,9 +104,8 @@ /* ** g1p: ** mov (w[0-9]+), w1 -** sbfx (x[0-9]+), x0, 0, 63 -** and x3, \2, 9223372036854775807 -** and x1, \2, 1 +** and x3, x0, 9223372036854775807 +** and x1, x0, 1 ** mov x2, 0 ** mov w0, \1 ** b f1p @@ -117,9 +113,8 @@ /* ** g8p: ** mov (w[0-9]+), w1 -** sbfx (x[0-9]+), x0, 0, 63 -** and x3, \2, 9223372036854775807 -** and x1, \2, 1 +** and x3, x0, 9223372036854775807 +** and x1, x0, 1 ** mov x2, 0 ** mov w0, \1 ** b f8p @@ -128,9 +123,8 @@ ** g16p: ** mov (x[0-9]+), x0 ** mov w0, w1 -** sbfx (x[0-9]+), \1, 0, 63 -** and x4, \2, 9223372036854775807 -** and x2, \2, 1 +** and x4, \1, 9223372036854775807 +** and x2, \1, 1 ** mov x3, 0 ** b f16p */ diff --git a/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c index da3c23550bae..e7f773640f04 100644 --- a/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c +++ b/gcc/testsuite/gcc.target/aarch64/bitfield-bitint-abi-align8.c @@ -54,9 +54,8 @@ /* ** g1: ** mov (w[0-9]+), w1 -** sbfx (x[0-9]+), x0, 0, 63 -** and x3, \2, 9223372036854775807 -** and x1, \2, 1 +** and x3, x0, 9223372036854775807 +** and x1, x0, 1 ** mov x2, 0 ** mov w0, \1 ** b f1 @@ -65,9 +64,8 @@ /* ** g8: ** mov (w[0-9]+), w1 -** sbfx (x[0-9]+), x0, 0, 63 -** and x3, \2, 9223372036854775807 -** and x1, \2, 1 +** and x3, x0, 9223372036854775807 +** and x1, x0, 1 ** mov x2, 0 ** mov w0, \1 ** b f8 @@ -76,9 +74,8 @@ ** g16: ** mov (x[0-9]+), x0 ** mov w0, w1 -** sbfx (x[0-9]+), \1, 0, 63 -** and x4, \2, 9223372036854775807 -** and x2, \2, 1 +** and x4, \1, 9223372036854775807 +** and x2, \1, 1 ** mov x3, 0 ** b f16 */ @@ -107,9 +104,8 @@ /* ** g1p: ** mov (w[0-9]+), w1 -** sbfx (x[0-9]+), x0, 0, 63 -** and x3, \2, 9223372036854775807 -** and x1, \2, 1 +** and x3, x0, 9223372036854775807 +** and x1, x0, 1 ** mov x2, 0 ** mov w0, \1 ** b f1p @@ -117,9 +113,8 @@ /* ** g8p: ** mov (w[0-9]+), w1 -** sbfx (x[0-9]+), x0, 0, 63 -** and x3, \2, 9223372036854775807 -** and x1, \2, 1 +** and x3, x0, 9223372036854775807 +** and x1, x0, 1 ** mov x2, 0 ** mov w0, \1 ** b f8p @@ -128,9 +123,8 @@ ** g16p: ** mov (x[0-9]+), x0 ** mov w0, w1 -** sbfx (x[0-9]+), \1, 0, 63 -** and x4, \2, 9223372036854775807 -** and x2, \2, 1 +** and x4, \1, 9223372036854775807 +** and x2, \1, 1 ** mov x3, 0 ** b f16p */ From 33f83d3cd84f9876180a2e2a9d1ea082debdaa37 Mon Sep 17 00:00:00 2001 From: Martin Jambor <mjambor@suse.cz> Date: Thu, 11 Apr 2024 19:37:45 +0200 Subject: [PATCH 513/551] contrib/check-params-in-docs.py: Ignore gcn-preferred-vectorization-factor contrib/check-params-in-docs.py is a script that checks that all options reported with ./gcc/xgcc -Bgcc --help=param are in gcc/doc/invoke.texi and vice versa. gcn-preferred-vectorization-factor is in the manual but normally not reported by --help, probably because I do not have gcn offload configured. This patch makes the script silently about this particular fact. contrib/ChangeLog: 2024-04-11 Martin Jambor <mjambor@suse.cz> * check-params-in-docs.py (ignored): Add gcn-preferred-vectorization-factor. --- contrib/check-params-in-docs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/check-params-in-docs.py b/contrib/check-params-in-docs.py index 623c82284e26..f7879dd8e08c 100755 --- a/contrib/check-params-in-docs.py +++ b/contrib/check-params-in-docs.py @@ -45,7 +45,7 @@ def get_param_tuple(line): args = parser.parse_args() -ignored = {'logical-op-non-short-circuit'} +ignored = {'logical-op-non-short-circuit', 'gcn-preferred-vectorization-factor'} params = {} for line in open(args.params_output).readlines(): From f079d69d7b1338522562516537d96e9e1285c95e Mon Sep 17 00:00:00 2001 From: David Faust <david.faust@oracle.com> Date: Thu, 11 Apr 2024 11:18:55 -0700 Subject: [PATCH 514/551] btf: emit non-representable bitfield as void This patch fixes an issue with mangled BTF that could occur when a struct type contains a bitfield member which cannot be represented in BTF. It is undefined what should happen in such cases, but we can at least do something reasonable. Commit 936dd627cd9 "btf: do not skip members of data type with type id BTF_VOID_TYPEID" made a similar change for un-representable non-bitfield members, but had an unintended side-effect of mangling BTF for un-representable bitfields: the struct (or union) would account for the offending bitfield in its member count but the bitfield member itself was not emitted, making the member count incorrect. This change ensures that non-representable bitfield members of struct and union types are always emitted with BTF_VOID_TYPEID. This avoids corrupting the BTF information for the entire struct or union type. gcc/ * btfout.cc (btf_asm_sou_member): Always emit non-representable bitfield members as having 'void' type. Refactor slightly. gcc/testsuite/ * gcc.dg/debug/btf/btf-bitfields-4.c: Add two new checks. --- gcc/btfout.cc | 54 +++++++++---------- .../gcc.dg/debug/btf/btf-bitfields-4.c | 2 + 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/gcc/btfout.cc b/gcc/btfout.cc index ab491f0297fb..a1510574a93e 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -922,41 +922,39 @@ static void btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd, unsigned int idx) { ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[dmd->dmd_type]; + ctf_id_t base_type = get_btf_id (dmd->dmd_type); + uint64_t sou_offset = dmd->dmd_offset; + + dw2_asm_output_data (4, dmd->dmd_name_offset, + "MEMBER '%s' idx=%u", + dmd->dmd_name, idx); /* Re-encode bitfields to BTF representation. */ if (CTF_V2_INFO_KIND (ref_type->dtd_data.ctti_info) == CTF_K_SLICE) { - ctf_id_t base_type = ref_type->dtd_u.dtu_slice.cts_type; - unsigned short word_offset = ref_type->dtd_u.dtu_slice.cts_offset; - unsigned short bits = ref_type->dtd_u.dtu_slice.cts_bits; - uint64_t sou_offset = dmd->dmd_offset; - - /* Pack the bit offset and bitfield size together. */ - sou_offset += word_offset; - - /* If this bitfield cannot be represented, do not output anything. - The parent struct/union 'vlen' field has already been updated. */ - if ((bits > 0xff) || (sou_offset > 0xffffff)) - return; + if (btf_dmd_representable_bitfield_p (ctfc, dmd)) + { + unsigned short word_offset = ref_type->dtd_u.dtu_slice.cts_offset; + unsigned short bits = ref_type->dtd_u.dtu_slice.cts_bits; - sou_offset &= 0x00ffffff; - sou_offset |= ((bits & 0xff) << 24); + /* Pack the bit offset and bitfield size together. */ + sou_offset += word_offset; + sou_offset &= 0x00ffffff; + sou_offset |= ((bits & 0xff) << 24); - dw2_asm_output_data (4, dmd->dmd_name_offset, - "MEMBER '%s' idx=%u", - dmd->dmd_name, idx); - /* Refer to the base type of the slice. */ - btf_asm_type_ref ("btm_type", ctfc, get_btf_id (base_type)); - dw2_asm_output_data (4, sou_offset, "btm_offset"); - } - else - { - dw2_asm_output_data (4, dmd->dmd_name_offset, - "MEMBER '%s' idx=%u", - dmd->dmd_name, idx); - btf_asm_type_ref ("btm_type", ctfc, get_btf_id (dmd->dmd_type)); - dw2_asm_output_data (4, dmd->dmd_offset, "btm_offset"); + /* Refer to the base type of the slice. */ + base_type = get_btf_id (ref_type->dtd_u.dtu_slice.cts_type); + } + else + { + /* Bitfield cannot be represented in BTF. Emit the member as having + 'void' type. */ + base_type = BTF_VOID_TYPEID; + } } + + btf_asm_type_ref ("btm_type", ctfc, base_type); + dw2_asm_output_data (4, sou_offset, "btm_offset"); } /* Asm'out an enum constant following a BTF_KIND_ENUM{,64}. */ diff --git a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c index d4a6ef6a1eb8..20cdfaa057ae 100644 --- a/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c +++ b/gcc/testsuite/gcc.dg/debug/btf/btf-bitfields-4.c @@ -14,6 +14,8 @@ /* Struct with 4 members and no bitfield (kind_flag not set). */ /* { dg-final { scan-assembler-times "\[\t \]0x4000004\[\t \]+\[^\n\]*btt_info" 1 } } */ +/* { dg-final { scan-assembler-times " MEMBER" 4 } } */ +/* { dg-final { scan-assembler-times " MEMBER 'unsup' idx=2\[\\r\\n\]+\[^\\r\\n\]*0\[\t \]+\[^\n\]*btm_type: void" 1 } } */ struct bigly { From 9b8bc02037eeaf4d6365010bb0533385deb4a90d Mon Sep 17 00:00:00 2001 From: David Faust <david.faust@oracle.com> Date: Thu, 11 Apr 2024 12:52:36 -0700 Subject: [PATCH 515/551] btf: fix a possibly misleading asm debug comment This patch fixes a small error that could occur in the debug comment when emitting a type reference with btf_asm_type_ref. While working on a previous patch, I noticed the following in the asm output for the test btf-bitfields-4.c: ... .long 0x39 # MEMBER 'c' idx=3 .long 0x6 # btm_type: (BTF_KIND_UNKN '') ... .long 0x34 # TYPE 6 BTF_KIND_INT 'char' The type for member 'c' is correct, but the comment for the member incorrectly reads "BTF_KIND_UNKN ''". This was caused by an incorrect type lookup in btf_asm_type_ref that could happen if the source file has types which can be represented in CTF but not in BTF. This patch fixes the issue by changing btf_asm_type_ref to work fully in the CTF ID space until writing out the final BTF ID. That ensures types are correctly identified when writing the asm debug comments, like the following fixed comment for the above case. ... .long 0x39 # MEMBER 'c' idx=3 .long 0x6 # btm_type: (BTF_KIND_INT 'char') ... Note that there was no problem with the actual BTF information, the only error was in the comment. This patch does not change the output BTF information, and no tests were affected. gcc/ * btfout.cc (btf_asm_type_ref): Convert IDs to BTF internally and fix potentially looking up wrong type for asm debug comment info. Split into... (btf_asm_datasec_type_ref): ... This. New. (btf_asm_datasec_entry): Call it here, instead of btf_asm_type_ref. (btf_asm_type, btf_asm_array, btf_asm_varent, btf_asm_sou_member) (btf_asm_func_arg, btf_asm_func_type): Adapt btf_asm_type_ref call. --- gcc/btfout.cc | 84 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/gcc/btfout.cc b/gcc/btfout.cc index a1510574a93e..07f066a47068 100644 --- a/gcc/btfout.cc +++ b/gcc/btfout.cc @@ -738,36 +738,22 @@ btf_dmd_representable_bitfield_p (ctf_container_ref ctfc, ctf_dmdef_t *dmd) /* Asm'out a reference to another BTF type. */ static void -btf_asm_type_ref (const char *prefix, ctf_container_ref ctfc, ctf_id_t ref_id) +btf_asm_type_ref (const char *prefix, ctf_container_ref ctfc, ctf_id_t ctf_id) { - if (ref_id == BTF_VOID_TYPEID || ref_id == BTF_INVALID_TYPEID) + ctf_id_t btf_id = get_btf_id (ctf_id); + if (btf_id == BTF_VOID_TYPEID || btf_id == BTF_INVALID_TYPEID) { /* There is no explicit void type. Also handle any invalid refs that made it this far, just in case. */ - dw2_asm_output_data (4, ref_id, "%s: void", prefix); - } - else if (ref_id >= num_types_added + 1 - && ref_id < num_types_added + num_vars_added + 1) - { - /* Ref to a variable. Should only appear in DATASEC entries. */ - ctf_id_t var_id = btf_relative_var_id (ref_id); - ctf_dvdef_ref dvd = ctfc->ctfc_vars_list[var_id]; - dw2_asm_output_data (4, ref_id, "%s: (BTF_KIND_VAR '%s')", - prefix, dvd->dvd_name); - - } - else if (ref_id >= num_types_added + num_vars_added + 1) - { - /* Ref to a FUNC record. */ - size_t func_id = btf_relative_func_id (ref_id); - ctf_dtdef_ref ref_type = (*funcs)[func_id]; - dw2_asm_output_data (4, ref_id, "%s: (BTF_KIND_FUNC '%s')", - prefix, get_btf_type_name (ref_type)); + dw2_asm_output_data (4, btf_id, "%s: void", prefix); } else { - /* Ref to a standard type in the types list. */ - ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[ref_id]; + gcc_assert (btf_id <= num_types_added); + + /* Ref to a standard type in the types list. Note: take care that we + must index the type list by the original CTF id, not the BTF id. */ + ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[ctf_id]; uint32_t ref_kind = get_btf_kind (CTF_V2_INFO_KIND (ref_type->dtd_data.ctti_info)); @@ -775,12 +761,43 @@ btf_asm_type_ref (const char *prefix, ctf_container_ref ctfc, ctf_id_t ref_id) ? btf_kind_name (BTF_KIND_ENUM) : btf_kind_name (ref_kind); - dw2_asm_output_data (4, ref_id, "%s: (BTF_KIND_%s '%s')", + dw2_asm_output_data (4, btf_id, "%s: (BTF_KIND_%s '%s')", prefix, kind_name, get_btf_type_name (ref_type)); } } +/* Asm'out a reference to a BTF_KIND_VAR or BTF_KIND_FUNC type. These type + kinds are BTF-specific, and should only be referred to by entries in + BTF_KIND_DATASEC records. */ + +static void +btf_asm_datasec_type_ref (const char *prefix, ctf_container_ref ctfc, + ctf_id_t btf_id) +{ + if (btf_id >= num_types_added + 1 + && btf_id < num_types_added + num_vars_added + 1) + { + /* Ref to a variable. Should only appear in DATASEC entries. */ + ctf_id_t var_id = btf_relative_var_id (btf_id); + ctf_dvdef_ref dvd = ctfc->ctfc_vars_list[var_id]; + dw2_asm_output_data (4, btf_id, "%s: (BTF_KIND_VAR '%s')", + prefix, dvd->dvd_name); + + } + else if (btf_id >= num_types_added + num_vars_added + 1) + { + /* Ref to a FUNC record. */ + size_t func_id = btf_relative_func_id (btf_id); + ctf_dtdef_ref ref_type = (*funcs)[func_id]; + dw2_asm_output_data (4, btf_id, "%s: (BTF_KIND_FUNC '%s')", + prefix, get_btf_type_name (ref_type)); + } + else + /* The caller should not be calling this. */ + gcc_unreachable (); +} + /* Asm'out a BTF type. This routine is responsible for the bulk of the task of converting CTF types to their BTF representation. */ @@ -887,7 +904,7 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) break; } - ctf_id_t ref_id = get_btf_id (dtd->dtd_data.ctti_type); + ctf_id_t ref_id = dtd->dtd_data.ctti_type; btf_asm_type_ref ("btt_type", ctfc, ref_id); } @@ -896,8 +913,8 @@ btf_asm_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd) static void btf_asm_array (ctf_container_ref ctfc, ctf_arinfo_t arr) { - btf_asm_type_ref ("bta_elem_type", ctfc, get_btf_id (arr.ctr_contents)); - btf_asm_type_ref ("bta_index_type", ctfc, get_btf_id (arr.ctr_index)); + btf_asm_type_ref ("bta_elem_type", ctfc, arr.ctr_contents); + btf_asm_type_ref ("bta_index_type", ctfc, arr.ctr_index); dw2_asm_output_data (4, arr.ctr_nelems, "bta_nelems"); } @@ -906,12 +923,11 @@ btf_asm_array (ctf_container_ref ctfc, ctf_arinfo_t arr) static void btf_asm_varent (ctf_container_ref ctfc, ctf_dvdef_ref var) { - ctf_id_t ref_id = get_btf_id (var->dvd_type); dw2_asm_output_data (4, var->dvd_name_offset, "TYPE %u BTF_KIND_VAR '%s'", (*(btf_var_ids->get (var)) + num_types_added + 1), var->dvd_name); dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_VAR, 0, 0), "btv_info"); - btf_asm_type_ref ("btv_type", ctfc, ref_id); + btf_asm_type_ref ("btv_type", ctfc, var->dvd_type); dw2_asm_output_data (4, var->dvd_visibility, "btv_linkage"); } @@ -922,7 +938,7 @@ static void btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd, unsigned int idx) { ctf_dtdef_ref ref_type = ctfc->ctfc_types_list[dmd->dmd_type]; - ctf_id_t base_type = get_btf_id (dmd->dmd_type); + ctf_id_t base_type = dmd->dmd_type; uint64_t sou_offset = dmd->dmd_offset; dw2_asm_output_data (4, dmd->dmd_name_offset, @@ -943,7 +959,7 @@ btf_asm_sou_member (ctf_container_ref ctfc, ctf_dmdef_t * dmd, unsigned int idx) sou_offset |= ((bits & 0xff) << 24); /* Refer to the base type of the slice. */ - base_type = get_btf_id (ref_type->dtd_u.dtu_slice.cts_type); + base_type = ref_type->dtd_u.dtu_slice.cts_type; } else { @@ -989,7 +1005,7 @@ btf_asm_func_arg (ctf_container_ref ctfc, ctf_func_arg_t * farg, btf_asm_type_ref ("farg_type", ctfc, (btf_removed_type_p (farg->farg_type) ? BTF_VOID_TYPEID - : get_btf_id (farg->farg_type))); + : farg->farg_type)); } /* Asm'out a BTF_KIND_FUNC type. */ @@ -1004,7 +1020,7 @@ btf_asm_func_type (ctf_container_ref ctfc, ctf_dtdef_ref dtd, ctf_id_t id) dw2_asm_output_data (4, BTF_TYPE_INFO (BTF_KIND_FUNC, 0, dtd->linkage), "btt_info: kind=%u, kflag=%u, linkage=%u", BTF_KIND_FUNC, 0, dtd->linkage); - btf_asm_type_ref ("btt_type", ctfc, get_btf_id (ref_id)); + btf_asm_type_ref ("btt_type", ctfc, ref_id); } /* Collect the name for the DATASEC reference required to be output as a @@ -1037,7 +1053,7 @@ static void btf_asm_datasec_entry (ctf_container_ref ctfc, struct btf_var_secinfo info) { const char *symbol_name = get_name_for_datasec_entry (ctfc, info.type); - btf_asm_type_ref ("bts_type", ctfc, info.type); + btf_asm_datasec_type_ref ("bts_type", ctfc, info.type); if (!btf_with_core_debuginfo_p () || symbol_name == NULL) dw2_asm_output_data (4, info.offset, "bts_offset"); else From d1a21a6f9474e519926d20a7c6d664be03aff3ee Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Fri, 12 Apr 2024 00:17:05 +0000 Subject: [PATCH 516/551] Daily bump. --- contrib/ChangeLog | 5 ++ gcc/ChangeLog | 101 +++++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 18 ++++++ gcc/testsuite/ChangeLog | 123 ++++++++++++++++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 39 +++++++++++++ 6 files changed, 287 insertions(+), 1 deletion(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 17a4afd5c18e..3df6ae6e8dea 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,8 @@ +2024-04-11 Martin Jambor <mjambor@suse.cz> + + * check-params-in-docs.py (ignored): Add + gcn-preferred-vectorization-factor. + 2024-04-08 Jakub Jelinek <jakub@redhat.com> * gcc-changelog/git_update_version.py: Add diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8fff7c41ace5..36dabbd2503c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,104 @@ +2024-04-11 David Faust <david.faust@oracle.com> + + * btfout.cc (btf_asm_type_ref): Convert IDs to BTF internally and + fix potentially looking up wrong type for asm debug comment info. + Split into... + (btf_asm_datasec_type_ref): ... This. New. + (btf_asm_datasec_entry): Call it here, instead of btf_asm_type_ref. + (btf_asm_type, btf_asm_array, btf_asm_varent, btf_asm_sou_member) + (btf_asm_func_arg, btf_asm_func_type): Adapt btf_asm_type_ref call. + +2024-04-11 David Faust <david.faust@oracle.com> + + * btfout.cc (btf_asm_sou_member): Always emit non-representable + bitfield members as having 'void' type. Refactor slightly. + +2024-04-11 Andrew Carlotti <andrew.carlotti@arm.com> + + * config/aarch64/aarch64-option-extensions.def: + Remove "memtag", "memtag2", "ssbs", "ssbs2", "ls64", "ls64_v" + and "ls64_accdata" FMV features. + +2024-04-11 Andrew Carlotti <andrew.carlotti@arm.com> + + * config/aarch64/aarch64-option-extensions.def: + Remove "flagm2", "sha1", "pmull", "dit", "dpb", "dpb2", "jscvt", + "fcma", "rcpc2", "frintts", "dgh", "ebf16", "sve-bf16", + "sve-ebf16", "sve-i8mm", "sve2-pmull128", "memtag3", "bti" and + "wfxt" entries. + +2024-04-11 Andrew Carlotti <andrew.carlotti@arm.com> + + * config/aarch64/aarch64-option-extensions.def: + Fix "rmd"->"rdm", and add FMV to "rdma". + * config/aarch64/aarch64.cc (FEAT_RDMA): Define as FEAT_RDM. + +2024-04-11 Andrew Carlotti <andrew.carlotti@arm.com> + + * config/aarch64/aarch64.cc (compare_feature_masks): + Use ARRAY_SIZE and >=0 for iteration bounds. + (aarch64_mangle_decl_assembler_name): Use ARRAY_SIZE. + +2024-04-11 Andrew Carlotti <andrew.carlotti@arm.com> + + * config/aarch64/aarch64-option-extensions.def: Reorder FMV entries. + +2024-04-11 Gaius Mulley <gaiusmod2@gmail.com> + + * doc/standards.texi (Language Standards Supported by GCC): + Add Modula-2 language section. + +2024-04-11 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/110027 + * asan.cc (asan_emit_stack_protection): Assert offsets[0] is + zero if there is no stack protect guard, otherwise + -ASAN_RED_ZONE_SIZE. If alignb > ASAN_RED_ZONE_SIZE and there is + stack pointer guard, take the ASAN_RED_ZONE_SIZE bytes allocated at + the top of the stack into account when computing base_align_bias. + Recompute use_after_return_class from asan_frame_size + base_align_bias + and set to -1 if that would overflow to 11. + +2024-04-11 Richard Biener <rguenther@suse.de> + + PR tree-optimization/109596 + * tree-ssa-loop-ch.cc (ch_base::copy_headers): Propagate + debug stmts to nonexit->dest rather than exit->dest. + +2024-04-11 Richard Biener <rguenther@suse.de> + + PR middle-end/114681 + * tree-inline.cc (copy_bb): Key on the remapped stmt + to identify gconds to have condition coverage data remapped. + +2024-04-11 Pan Li <pan2.li@intel.com> + + PR target/114639 + * config/riscv/riscv.cc (riscv_function_value_regno_p): New func + impl for hook TARGET_FUNCTION_VALUE_REGNO_P. + (riscv_get_raw_result_mode): New func imple for hook + TARGET_GET_RAW_RESULT_MODE. + (TARGET_FUNCTION_VALUE_REGNO_P): Impl the hook. + (TARGET_GET_RAW_RESULT_MODE): Ditto. + * config/riscv/riscv.h (V_RETURN): New macro for vector return. + (GP_RETURN_FIRST): New macro for the first GPR in return. + (GP_RETURN_LAST): New macro for the last GPR in return. + (FP_RETURN_FIRST): Diito but for FPR. + (FP_RETURN_LAST): Ditto. + (FUNCTION_VALUE_REGNO_P): Remove as deprecated and replace by + TARGET_FUNCTION_VALUE_REGNO_P. + +2024-04-11 Indu Bhagat <indu.bhagat@oracle.com> + + * btfout.cc (btf_asm_type): Do not skip emitting members of + unknown type. + +2024-04-11 Indu Bhagat <indu.bhagat@oracle.com> + + PR debug/112878 + * dwarf2ctf.cc (gen_ctf_sou_type): Check for conditions before + call to ctf_add_slice. Use CTF_K_UNKNOWN type if fail. + 2024-04-10 Marek Polacek <polacek@redhat.com> PR target/114606 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 8dbf8633f534..ec62272a850d 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240411 +20240412 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c466ce670fd0..c77e28013166 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,21 @@ +2024-04-11 Patrick Palka <ppalka@redhat.com> + + PR c++/114303 + * constraint.cc (tsubst_requires_expr): Clear + REQUIRES_EXPR_EXTRA_ARGS before calling build_extra_args. + * pt.cc (tree_extra_args): Define. + (extract_locals_r): Assert *_EXTRA_ARGS is empty. + (tsubst_stmt) <case IF_STMT>: Clear IF_SCOPE on the new + IF_STMT. Call build_extra_args on the new IF_STMT instead + of t which might already have IF_STMT_EXTRA_ARGS. + +2024-04-11 Jakub Jelinek <jakub@redhat.com> + + PR c++/114409 + * pt.cc (tsubst_expr) <case ANNOTATE_EXPR>: Move to ... + (tsubst_stmt) <case ANNOTATE_EXPR>: ... here. Use tsubst_expr + instead of RECUR for the last 2 arguments. + 2024-04-10 Jakub Jelinek <jakub@redhat.com> PR c++/114462 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4bf575b25c77..65897f77ab47 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,126 @@ +2024-04-11 David Faust <david.faust@oracle.com> + + * gcc.dg/debug/btf/btf-bitfields-4.c: Add two new checks. + +2024-04-11 Andre Vieira (lists) <andre.simoesdiasvieira@arm.com> + + * gcc.target/aarch64/bitfield-bitint-abi-align16.c (g1, g8, g16, g1p, g8p, + g16p): Remove unnecessary sbfx. + * gcc.target/aarch64/bitfield-bitint-abi-align8.c (g1, g8, g16, g1p, g8p, + g16p): Likewise. + +2024-04-11 Andrew Carlotti <andrew.carlotti@arm.com> + + * g++.target/aarch64/mv-1.C: New test. + +2024-04-11 Andrew Carlotti <andrew.carlotti@arm.com> + + * gcc.target/aarch64/cpunative/native_cpu_21.c: Reorder features. + * gcc.target/aarch64/cpunative/native_cpu_22.c: Ditto. + +2024-04-11 Patrick Palka <ppalka@redhat.com> + + PR c++/114303 + * g++.dg/cpp1z/constexpr-if-lambda6.C: New test. + +2024-04-11 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/110027 + * gcc.dg/asan/pr110027.c: New test. + +2024-04-11 Richard Biener <rguenther@suse.de> + + PR middle-end/114681 + * gcc.misc-tests/gcov-pr114681.c: New testcase. + +2024-04-11 Jakub Jelinek <jakub@redhat.com> + + PR c++/114409 + * g++.dg/ext/pr114409-2.C: New test. + +2024-04-11 Pan Li <pan2.li@intel.com> + + * g++.target/riscv/rvv/base/pr109244.C: Remove deprecated + -Wno-psabi option. + * g++.target/riscv/rvv/base/pr109535.C: Ditto. + * gcc.target/riscv/rvv/autovec/fixed-vlmax-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-5.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress-6.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-5.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/compress_run-6.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/consecutive_run-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-5.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-6.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge-7.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-5.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-6.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/merge_run-7.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-5.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-6.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm-7.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-5.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-6.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/perm_run-7.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-1u.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-2u.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-3u.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-4u.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-run.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_extract-runu.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-1.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-2.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-3.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-4.c: Ditto. + * gcc.target/riscv/rvv/autovec/vls-vlmax/vec_set-run.c: Ditto. + +2024-04-11 Pan Li <pan2.li@intel.com> + + PR target/114639 + * g++.target/riscv/rvv/base/pr114639-1.C: New test. + * gcc.target/riscv/rvv/base/pr114639-1.c: New test. + +2024-04-11 Indu Bhagat <indu.bhagat@oracle.com> + + * gcc.dg/debug/btf/btf-bitfields-4.c: Update the vlen check. + * gcc.dg/debug/btf/btf-struct-2.c: Check that member named 'f' + with void data type is emitted. + +2024-04-11 Indu Bhagat <indu.bhagat@oracle.com> + + PR debug/112878 + * gcc.dg/debug/ctf/ctf-bitfields-5.c: New test. + 2024-04-10 Hans-Peter Nilsson <hp@axis.com> Revert: diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 3a05795065e5..8c64ad9a1c7d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,42 @@ +2024-04-11 Jakub Jelinek <jakub@redhat.com> + + * doc/xml/manual/abi.xml: Add latest library versions. + * doc/html/manual/abi.html: Regenerate. + +2024-04-11 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/m68k-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/riscv64-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update. + +2024-04-11 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/114692 + * config/abi/pre/gnu.ver (GLIBCXX_3.4.32): Move new exports for + __basic_file::native_handle to ... + (GLIBCXX_3.4.33): ... here. Adjust to not match wchar_t + specialization, which isn't used. + * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.33 and update + latest version check. + +2024-04-11 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/m68k-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/riscv64-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/powerpc64le-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update. + 2024-04-10 Jonathan Wakely <jwakely@redhat.com> * testsuite/27_io/manipulators/extended/get_time/char/2.cc: From dc51a6428f6d8e5a57b8b1bf559145288e87660b Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Fri, 12 Apr 2024 11:12:24 +0800 Subject: [PATCH 517/551] RISC-V: Bugfix ICE non-vector in TARGET_FUNCTION_VALUE_REGNO_P This patch would like to fix one ICE when vector is not enabled in hook TARGET_FUNCTION_VALUE_REGNO_P implementation. The vector regno is available if and only if the TARGET_VECTOR is true. The previous implement missed this condition and then result in ICE when rv64gc build option without vector. The below test suite is passed for this patch. * The rv64gcv fully regression tests. * The rv64gc fully regression tests. PR target/114639 gcc/ChangeLog: * config/riscv/riscv.cc (riscv_function_value_regno_p): Add TARGET_VECTOR predicate for V_RETURN regno. gcc/testsuite/ChangeLog: * gcc.target/riscv/pr114639-1.c: New test. * gcc.target/riscv/pr114639-2.c: New test. * gcc.target/riscv/pr114639-3.c: New test. * gcc.target/riscv/pr114639-4.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv.cc | 2 +- gcc/testsuite/gcc.target/riscv/pr114639-1.c | 11 +++++++++++ gcc/testsuite/gcc.target/riscv/pr114639-2.c | 11 +++++++++++ gcc/testsuite/gcc.target/riscv/pr114639-3.c | 11 +++++++++++ gcc/testsuite/gcc.target/riscv/pr114639-4.c | 11 +++++++++++ 5 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/riscv/pr114639-1.c create mode 100644 gcc/testsuite/gcc.target/riscv/pr114639-2.c create mode 100644 gcc/testsuite/gcc.target/riscv/pr114639-3.c create mode 100644 gcc/testsuite/gcc.target/riscv/pr114639-4.c diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index 91f017dd52a0..e5f00806bb96 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -11008,7 +11008,7 @@ riscv_function_value_regno_p (const unsigned regno) if (FP_RETURN_FIRST <= regno && regno <= FP_RETURN_LAST) return true; - if (regno == V_RETURN) + if (TARGET_VECTOR && regno == V_RETURN) return true; return false; diff --git a/gcc/testsuite/gcc.target/riscv/pr114639-1.c b/gcc/testsuite/gcc.target/riscv/pr114639-1.c new file mode 100644 index 000000000000..f41723193a40 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr114639-1.c @@ -0,0 +1,11 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -std=gnu89 -O3" } */ + +g (a, b) {} + +f (xx) + void* xx; +{ + __builtin_apply ((void*)g, xx, 200); +} diff --git a/gcc/testsuite/gcc.target/riscv/pr114639-2.c b/gcc/testsuite/gcc.target/riscv/pr114639-2.c new file mode 100644 index 000000000000..0c402c4b2546 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr114639-2.c @@ -0,0 +1,11 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv64imac -mabi=lp64 -std=gnu89 -O3" } */ + +g (a, b) {} + +f (xx) + void* xx; +{ + __builtin_apply ((void*)g, xx, 200); +} diff --git a/gcc/testsuite/gcc.target/riscv/pr114639-3.c b/gcc/testsuite/gcc.target/riscv/pr114639-3.c new file mode 100644 index 000000000000..ffb0d6d162d8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr114639-3.c @@ -0,0 +1,11 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv32gc -mabi=ilp32d -std=gnu89 -O3" } */ + +g (a, b) {} + +f (xx) + void* xx; +{ + __builtin_apply ((void*)g, xx, 200); +} diff --git a/gcc/testsuite/gcc.target/riscv/pr114639-4.c b/gcc/testsuite/gcc.target/riscv/pr114639-4.c new file mode 100644 index 000000000000..a6e229101ef6 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr114639-4.c @@ -0,0 +1,11 @@ +/* Test that we do not have ice when compile */ +/* { dg-do compile } */ +/* { dg-options "-march=rv32imac -mabi=ilp32 -std=gnu89 -O3" } */ + +g (a, b) {} + +f (xx) + void* xx; +{ + __builtin_apply ((void*)g, xx, 200); +} From b6c8259076a336e8082853ed6dda083c25a465d0 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Fri, 12 Apr 2024 09:20:53 +0200 Subject: [PATCH 518/551] testsuite: Fix loop-interchange-16.c Prevent loop unrolling of the innermost loop because otherwise we are left with no loop interchange for targets like s390 which have a more aggressive loop unrolling strategy. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/loop-interchange-16.c: Prevent loop unrolling of the innermost loop. --- gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-16.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-16.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-16.c index 781555e085d1..bbcb14f9c6c5 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-16.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-interchange-16.c @@ -11,6 +11,7 @@ double s231(int iterations) // loop with data dependency for (int nl = 0; nl < 100*(iterations/LEN_2D); nl++) { for (int i = 0; i < LEN_2D; ++i) { +#pragma GCC unroll 0 for (int j = 1; j < LEN_2D; j++) { aa[j][i] = aa[j - 1][i] + bb[j][i]; } From e30e760b51b108786946e04a26e92531762b022d Mon Sep 17 00:00:00 2001 From: Filip Kastl <fkastl@suse.cz> Date: Fri, 12 Apr 2024 09:52:27 +0200 Subject: [PATCH 519/551] contrib/check-params-in-docs.py: Ignore target-specific params contrib/check-params-in-docs.py is a script that checks that all options reported with gcc --help=params are in gcc/doc/invoke.texi and vice versa. gcc/doc/invoke.texi lists target-specific params but gcc --help=params doesn't. This meant that the script would mistakenly complain about parms missing from --help=params. Previously, the script was just set to ignore aarch64 and gcn params which solved this issue only for x86. This patch sets the script to ignore all target-specific params. contrib/ChangeLog: * check-params-in-docs.py: Ignore target specific params. Signed-off-by: Filip Kastl <fkastl@suse.cz> --- contrib/check-params-in-docs.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/contrib/check-params-in-docs.py b/contrib/check-params-in-docs.py index f7879dd8e08c..ccdb8d721696 100755 --- a/contrib/check-params-in-docs.py +++ b/contrib/check-params-in-docs.py @@ -38,6 +38,9 @@ def get_param_tuple(line): description = line[i:].strip() return (name, description) +def target_specific(param): + return param.split('-')[0] in ('aarch64', 'gcn', 'x86') + parser = argparse.ArgumentParser() parser.add_argument('texi_file') @@ -45,13 +48,16 @@ def get_param_tuple(line): args = parser.parse_args() -ignored = {'logical-op-non-short-circuit', 'gcn-preferred-vectorization-factor'} -params = {} +ignored = {'logical-op-non-short-circuit'} +help_params = {} for line in open(args.params_output).readlines(): if line.startswith(' ' * 2) and not line.startswith(' ' * 8): r = get_param_tuple(line) - params[r[0]] = r[1] + help_params[r[0]] = r[1] + +# Skip target-specific params +help_params = [x for x in help_params.keys() if not target_specific(x)] # Find section in .texi manual with parameters texi = ([x.strip() for x in open(args.texi_file).readlines()]) @@ -66,14 +72,13 @@ def get_param_tuple(line): texi_params.append(line[len(token):]) break -# skip digits +# Skip digits texi_params = [x for x in texi_params if not x[0].isdigit()] -# skip aarch64 params -texi_params = [x for x in texi_params if not x.startswith('aarch64')] -sorted_params = sorted(texi_params) +# Skip target-specific params +texi_params = [x for x in texi_params if not target_specific(x)] texi_set = set(texi_params) - ignored -params_set = set(params.keys()) - ignored +params_set = set(help_params) - ignored success = True extra = texi_set - params_set From c9e94ae448ba309dba74de3ee1974a3ed9248889 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 12 Apr 2024 10:59:54 +0200 Subject: [PATCH 520/551] Limit special asan/ubsan/bitint returns_twice handling to calls in bbs with abnormal pred [PR114687] The tree-cfg.cc verifier only diagnoses returns_twice calls preceded by non-label/debug stmts if it is in a bb with abnormal predecessor. The following testcase shows that if a user lies in the attributes (a function which never returns can't be pure, and can't return twice when it doesn't ever return at all), when we figure it out, we can remove the abnormal edges to the "returns_twice" call and perhaps whole .ABNORMAL_DISPATCHER etc. edge_before_returns_twice_call then ICEs because it can't find such an edge. The following patch limits the special handling to calls in bbs where the verifier requires that. 2024-04-12 Jakub Jelinek <jakub@redhat.com> PR sanitizer/114687 * gimple-iterator.cc (gsi_safe_insert_before): Only use edge_before_returns_twice_call if bb_has_abnormal_pred. (gsi_safe_insert_seq_before): Likewise. * gimple-lower-bitint.cc (bitint_large_huge::lower_call): Only push to m_returns_twice_calls if bb_has_abnormal_pred. * gcc.dg/asan/pr114687.c: New test. --- gcc/gimple-iterator.cc | 6 ++++-- gcc/gimple-lower-bitint.cc | 2 +- gcc/testsuite/gcc.dg/asan/pr114687.c | 22 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/asan/pr114687.c diff --git a/gcc/gimple-iterator.cc b/gcc/gimple-iterator.cc index ac6cb4aa414d..93646262eac5 100644 --- a/gcc/gimple-iterator.cc +++ b/gcc/gimple-iterator.cc @@ -1049,7 +1049,8 @@ gsi_safe_insert_before (gimple_stmt_iterator *iter, gimple *g) gimple *stmt = gsi_stmt (*iter); if (stmt && is_gimple_call (stmt) - && (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) != 0) + && (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) != 0 + && bb_has_abnormal_pred (gsi_bb (*iter))) { edge e = edge_before_returns_twice_call (gsi_bb (*iter)); basic_block new_bb = gsi_insert_on_edge_immediate (e, g); @@ -1072,7 +1073,8 @@ gsi_safe_insert_seq_before (gimple_stmt_iterator *iter, gimple_seq seq) gimple *stmt = gsi_stmt (*iter); if (stmt && is_gimple_call (stmt) - && (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) != 0) + && (gimple_call_flags (stmt) & ECF_RETURNS_TWICE) != 0 + && bb_has_abnormal_pred (gsi_bb (*iter))) { edge e = edge_before_returns_twice_call (gsi_bb (*iter)); gimple *f = gimple_seq_first_stmt (seq); diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc index 4c3b7f7b68ed..7e8b6e3c51a0 100644 --- a/gcc/gimple-lower-bitint.cc +++ b/gcc/gimple-lower-bitint.cc @@ -5320,7 +5320,7 @@ bitint_large_huge::lower_call (tree obj, gimple *stmt) arg = make_ssa_name (TREE_TYPE (arg)); gimple *g = gimple_build_assign (arg, v); gsi_insert_before (&gsi, g, GSI_SAME_STMT); - if (returns_twice) + if (returns_twice && bb_has_abnormal_pred (gimple_bb (stmt))) { m_returns_twice_calls.safe_push (stmt); returns_twice = false; diff --git a/gcc/testsuite/gcc.dg/asan/pr114687.c b/gcc/testsuite/gcc.dg/asan/pr114687.c new file mode 100644 index 000000000000..48cc86881767 --- /dev/null +++ b/gcc/testsuite/gcc.dg/asan/pr114687.c @@ -0,0 +1,22 @@ +/* PR sanitizer/114687 */ +/* { dg-do compile } */ + +int a; +int foo (int); + +__attribute__((pure, returns_twice)) int +bar (void) +{ + a = 1; + while (a) + a = 2; + return a; +} + +int +baz (void) +{ + int d = bar (); + foo (d); + return 0; +} From 8c6f13d2cc1884921e7c532e03786f0344bededd Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 12 Apr 2024 11:00:43 +0200 Subject: [PATCH 521/551] tree-cfg: Make the verifier returns_twice message translatable While translation of the verifier messages is questionable, that case is something that ideally should never happen except to gcc developers and so pressumably English should be fine, we use error etc. APIs and those imply translatations and some translators translate it. The following patch adjusts the code such that we don't emit appel returns_twice est not first dans le bloc de base 33 in French (i.e. 2 English word in the middle of a French message). Similarly Swedish or Ukrainian. Note, the German translator did differentiate between these verifier messages vs. normal user facing and translated it to: "Interner Fehler: returns_twice call is %s in basic block %d" so just a German prefix before English message. 2024-04-12 Jakub Jelinek <jakub@redhat.com> * tree-cfg.cc (gimple_verify_flow_info): Make the misplaced returns_twice diagnostics translatable. --- gcc/tree-cfg.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc index 96686db8ed3b..d98b68d67871 100644 --- a/gcc/tree-cfg.cc +++ b/gcc/tree-cfg.cc @@ -5818,7 +5818,7 @@ gimple_verify_flow_info (void) if (gimple_code (stmt) == GIMPLE_CALL && gimple_call_flags (stmt) & ECF_RETURNS_TWICE) { - const char *misplaced = NULL; + bool misplaced = false; /* TM is an exception: it points abnormal edges just after the call that starts a transaction, i.e. it must end the BB. */ if (gimple_call_builtin_p (stmt, BUILT_IN_TM_START)) @@ -5826,18 +5826,23 @@ gimple_verify_flow_info (void) if (single_succ_p (bb) && bb_has_abnormal_pred (single_succ (bb)) && !gsi_one_nondebug_before_end_p (gsi)) - misplaced = "not last"; + { + error ("returns_twice call is not last in basic block " + "%d", bb->index); + misplaced = true; + } } else { - if (seen_nondebug_stmt - && bb_has_abnormal_pred (bb)) - misplaced = "not first"; + if (seen_nondebug_stmt && bb_has_abnormal_pred (bb)) + { + error ("returns_twice call is not first in basic block " + "%d", bb->index); + misplaced = true; + } } if (misplaced) { - error ("returns_twice call is %s in basic block %d", - misplaced, bb->index); print_gimple_stmt (stderr, stmt, 0, TDF_SLIM); err = true; } From 67e1433a94f8ca82e2c36b79af44256430c73c38 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Fri, 12 Apr 2024 11:06:24 +0200 Subject: [PATCH 522/551] analyzer: Bail out on function pointer for -Wanalyzer-allocation-size On s390 pr94688.c is failing due to excess error pr94688.c:6:5: warning: allocated buffer size is not a multiple of the pointee's size [CWE-131] [-Wanalyzer-allocation-size] This is because on s390 functions are by default aligned to an 8-byte boundary and during function type construction size is set to function boundary. Thus, for the assignment a.0_1 = (void (*<T237>) ()) &a; we have that the right-hand side is pointing to a 4-byte memory region whereas the size of the function pointer is 8 byte and a warning is emitted. Since -Wanalyzer-allocation-size is not about pointers to code, bail out early. gcc/analyzer/ChangeLog: * region-model.cc (region_model::check_region_size): Bail out early on function pointers. --- gcc/analyzer/region-model.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index 665873dbe947..bebe2ed3cd69 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -3514,6 +3514,10 @@ region_model::check_region_size (const region *lhs_reg, const svalue *rhs_sval, || TYPE_SIZE_UNIT (pointee_type) == NULL_TREE) return; + /* Bail out early on function pointers. */ + if (TREE_CODE (pointee_type) == FUNCTION_TYPE) + return; + /* Bail out early on pointers to structs where we can not deduce whether the buffer size is compatible. */ bool is_struct = RECORD_OR_UNION_TYPE_P (pointee_type); From 6e7e5943619a2c20d93fc7089c885483786558bc Mon Sep 17 00:00:00 2001 From: Pan Li <pan2.li@intel.com> Date: Fri, 12 Apr 2024 16:38:18 +0800 Subject: [PATCH 523/551] RISC-V: Fix Werror=sign-compare in riscv_validate_vector_type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch would like to fix the Werror=sign-compare similar to below: gcc/config/riscv/riscv.cc: In function ‘void riscv_validate_vector_type(const_tree, const char*)’: gcc/config/riscv/riscv.cc:5614:23: error: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Werror=sign-compare] 5614 | if (TARGET_MIN_VLEN < required_min_vlen) The TARGET_MIN_VLEN is *int* by default but the required_min_vlen returned from riscv_vector_required_min_vlen is **unsigned**. Thus, adjust the related function and reference variable(s) to int type to avoid such kind of Werror. The below test suite is passed for this patch. * The rv64gcv fully regression tests. gcc/ChangeLog: * config/riscv/riscv.cc (riscv_vector_float_type_p): Take int as the return value instead of unsigned. (riscv_vector_element_bitsize): Ditto. (riscv_vector_required_min_vlen): Ditto. (riscv_validate_vector_type): Take int type for local variable(s). Signed-off-by: Pan Li <pan2.li@intel.com> --- gcc/config/riscv/riscv.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc index e5f00806bb96..74445bc977c6 100644 --- a/gcc/config/riscv/riscv.cc +++ b/gcc/config/riscv/riscv.cc @@ -5499,7 +5499,7 @@ riscv_vector_float_type_p (const_tree type) return strstr (name, "vfloat") != NULL; } -static unsigned +static int riscv_vector_element_bitsize (const_tree type) { machine_mode mode = TYPE_MODE (type); @@ -5523,7 +5523,7 @@ riscv_vector_element_bitsize (const_tree type) gcc_unreachable (); } -static unsigned +static int riscv_vector_required_min_vlen (const_tree type) { machine_mode mode = TYPE_MODE (type); @@ -5531,7 +5531,7 @@ riscv_vector_required_min_vlen (const_tree type) if (riscv_v_ext_mode_p (mode)) return TARGET_MIN_VLEN; - unsigned element_bitsize = riscv_vector_element_bitsize (type); + int element_bitsize = riscv_vector_element_bitsize (type); const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); if (strstr (name, "bool64") != NULL) @@ -5569,7 +5569,7 @@ riscv_validate_vector_type (const_tree type, const char *hint) return; } - unsigned element_bitsize = riscv_vector_element_bitsize (type); + int element_bitsize = riscv_vector_element_bitsize (type); bool int_type_p = riscv_vector_int_type_p (type); if (int_type_p && element_bitsize == 64 @@ -5609,7 +5609,7 @@ riscv_validate_vector_type (const_tree type, const char *hint) return; } - unsigned required_min_vlen = riscv_vector_required_min_vlen (type); + int required_min_vlen = riscv_vector_required_min_vlen (type); if (TARGET_MIN_VLEN < required_min_vlen) { From 3bd3ca05b519b99b5ea570c10fd80737cd4c6c49 Mon Sep 17 00:00:00 2001 From: Ian McInerney <i.mcinerney17@imperial.ac.uk> Date: Thu, 4 Apr 2024 16:16:32 +0100 Subject: [PATCH 524/551] libgfortran: Fix compilation of gf_vsnprintf The fallback function (gf_vsnprintf) to provide a vsnprintf function if the system library doesn't have one would not compile due to the variable name for the string's destination buffer not being updated after the refactor in 2018 in edaaef601d0d6d263fba87b42d6d04c99dd23dba. This updates the internal logic of gf_vsnprintf to now use the str variable defined in the function signature. libgfortran/ChangeLog: 2024-04-04 Ian McInerney <i.mcinerney17@imperial.ac.uk> * runtime/error.c (gf_vsnprintf): Fix compilation Signed-off-by: Ian McInerney <i.mcinerney17@imperial.ac.uk> --- libgfortran/runtime/error.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libgfortran/runtime/error.c b/libgfortran/runtime/error.c index e840f5395992..044298294d82 100644 --- a/libgfortran/runtime/error.c +++ b/libgfortran/runtime/error.c @@ -142,15 +142,15 @@ gf_vsnprintf (char *str, size_t size, const char *format, va_list ap) { int written; - written = vsprintf(buffer, format, ap); + written = vsprintf(str, format, ap); if (written >= size - 1) { - /* The error message was longer than our buffer. Ouch. Because + /* The error message was longer than the string size. Ouch. Because we may have messed up things badly, report the error and quit. */ -#define ERROR_MESSAGE "Internal error: buffer overrun in gf_vsnprintf()\n" - write (STDERR_FILENO, buffer, size - 1); +#define ERROR_MESSAGE "Internal error: string overrun in gf_vsnprintf()\n" + write (STDERR_FILENO, str, size - 1); write (STDERR_FILENO, ERROR_MESSAGE, strlen (ERROR_MESSAGE)); sys_abort (); #undef ERROR_MESSAGE From 081c1e93d56d35c7314ed68e6d87628b430de917 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Fri, 12 Apr 2024 08:59:27 -0400 Subject: [PATCH 525/551] c++: templated substitution into lambda-expr [PR114393] The below testcases use a lambda-expr as a template argument and they all trip over the below added tsubst_lambda_expr sanity check ultimately because current_template_parms is empty which causes push_template_decl to return error_mark_node from the call to begin_lambda_type. Were it not for the sanity check this silent error_mark_node result leads to nonsensical errors down the line, or silent breakage. In the first testcase, we hit this assert during instantiation of the dependent alias template-id c1_t<_Data> from instantiate_template, which clears current_template_parms via push_to_top_level. Similar story for the second testcase. For the third testcase we hit the assert during partial instantiation of the member template from instantiate_class_template which similarly calls push_to_top_level. These testcases illustrate that templated substitution into a lambda-expr is not always possible, in particular when we lost the relevant template context. I experimented with recovering the template context by making tsubst_lambda_expr fall back to using scope_chain->prev->template_parms if current_template_parms is empty which worked but seemed like a hack. I also experimented with preserving the template context by keeping current_template_parms set during instantiate_template for a dependent specialization which also worked but it's at odds with the fact that we cache dependent specializations (and so they should be independent of the template context). So instead of trying to make such substitution work, this patch uses the extra-args mechanism to defer templated substitution into a lambda-expr when we lost the relevant template context. PR c++/114393 PR c++/107457 PR c++/93595 gcc/cp/ChangeLog: * cp-tree.h (LAMBDA_EXPR_EXTRA_ARGS): Define. (tree_lambda_expr::extra_args): New field. * module.cc (trees_out::core_vals) <case LAMBDA_EXPR>: Stream LAMBDA_EXPR_EXTRA_ARGS. (trees_in::core_vals) <case LAMBDA_EXPR>: Likewise. * pt.cc (has_extra_args_mechanism_p): Return true for LAMBDA_EXPR. (tree_extra_args): Handle LAMBDA_EXPR. (tsubst_lambda_expr): Use LAMBDA_EXPR_EXTRA_ARGS to defer templated substitution into a lambda-expr if we lost the template context. Add sanity check for error_mark_node result from begin_lambda_type. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-targ2.C: New test. * g++.dg/cpp2a/lambda-targ3.C: New test. * g++.dg/cpp2a/lambda-targ4.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/cp-tree.h | 5 +++++ gcc/cp/module.cc | 2 ++ gcc/cp/pt.cc | 22 ++++++++++++++++++++-- gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C | 19 +++++++++++++++++++ gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C | 12 ++++++++++++ gcc/testsuite/g++.dg/cpp2a/lambda-targ4.C | 12 ++++++++++++ 6 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/lambda-targ4.C diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 52d53589e51d..1dbb577a38d7 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -1538,6 +1538,10 @@ enum cp_lambda_default_capture_mode_type { #define LAMBDA_EXPR_REGEN_INFO(NODE) \ (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->regen_info) +/* Like PACK_EXPANSION_EXTRA_ARGS, for lambda-expressions. */ +#define LAMBDA_EXPR_EXTRA_ARGS(NODE) \ + (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->extra_args) + /* The closure type of the lambda, which is also the type of the LAMBDA_EXPR. */ #define LAMBDA_EXPR_CLOSURE(NODE) \ @@ -1550,6 +1554,7 @@ struct GTY (()) tree_lambda_expr tree this_capture; tree extra_scope; tree regen_info; + tree extra_args; vec<tree, va_gc> *pending_proxies; location_t locus; enum cp_lambda_default_capture_mode_type default_capture_mode : 2; diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 4e91fa6e052a..ad1b6bf5ca41 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -6312,6 +6312,7 @@ trees_out::core_vals (tree t) WT (((lang_tree_node *)t)->lambda_expression.this_capture); WT (((lang_tree_node *)t)->lambda_expression.extra_scope); WT (((lang_tree_node *)t)->lambda_expression.regen_info); + WT (((lang_tree_node *)t)->lambda_expression.extra_args); /* pending_proxies is a parse-time thing. */ gcc_assert (!((lang_tree_node *)t)->lambda_expression.pending_proxies); if (state) @@ -6814,6 +6815,7 @@ trees_in::core_vals (tree t) RT (((lang_tree_node *)t)->lambda_expression.this_capture); RT (((lang_tree_node *)t)->lambda_expression.extra_scope); RT (((lang_tree_node *)t)->lambda_expression.regen_info); + RT (((lang_tree_node *)t)->lambda_expression.extra_args); /* lambda_expression.pending_proxies is NULL */ ((lang_tree_node *)t)->lambda_expression.locus = state->read_location (*this); diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index 7c91c6959aa7..ec259ee0fbff 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -3855,7 +3855,8 @@ has_extra_args_mechanism_p (const_tree t) return (PACK_EXPANSION_P (t) /* PACK_EXPANSION_EXTRA_ARGS */ || TREE_CODE (t) == REQUIRES_EXPR /* REQUIRES_EXPR_EXTRA_ARGS */ || (TREE_CODE (t) == IF_STMT - && IF_STMT_CONSTEXPR_P (t))); /* IF_STMT_EXTRA_ARGS */ + && IF_STMT_CONSTEXPR_P (t)) /* IF_STMT_EXTRA_ARGS */ + || TREE_CODE (t) == LAMBDA_EXPR); /* LAMBDA_EXPR_EXTRA_ARGS */ } /* Return *_EXTRA_ARGS of the given supported tree T. */ @@ -3872,6 +3873,8 @@ tree_extra_args (tree t) else if (TREE_CODE (t) == IF_STMT && IF_STMT_CONSTEXPR_P (t)) return IF_STMT_EXTRA_ARGS (t); + else if (TREE_CODE (t) == LAMBDA_EXPR) + return LAMBDA_EXPR_EXTRA_ARGS (t); gcc_unreachable (); } @@ -19618,6 +19621,18 @@ tsubst_lambda_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) tree oldfn = lambda_function (t); in_decl = oldfn; + args = add_extra_args (LAMBDA_EXPR_EXTRA_ARGS (t), args, complain, in_decl); + if (processing_template_decl && !in_template_context) + { + /* Defer templated substitution into a lambda-expr if we lost the + necessary template context. This may happen for a lambda-expr + used as a default template argument. */ + t = copy_node (t); + LAMBDA_EXPR_EXTRA_ARGS (t) = NULL_TREE; + LAMBDA_EXPR_EXTRA_ARGS (t) = build_extra_args (t, args, complain); + return t; + } + tree r = build_lambda_expr (); LAMBDA_EXPR_LOCATION (r) @@ -19709,7 +19724,10 @@ tsubst_lambda_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) tree type = begin_lambda_type (r); if (type == error_mark_node) - return error_mark_node; + { + gcc_checking_assert (!(complain & tf_error) || seen_error ()); + return error_mark_node; + } if (LAMBDA_EXPR_EXTRA_SCOPE (t)) record_lambda_scope (r); diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C new file mode 100644 index 000000000000..41b8d8749f2b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C @@ -0,0 +1,19 @@ +// PR c++/114393 +// { dg-do compile { target c++20 } } + +template <auto _DescriptorFn> struct c1 {}; + +template <class _Descriptor, auto t = [] { return _Descriptor(); }> +inline constexpr auto b_v = t; + +template <class _Tag> +using c1_t = c1<b_v<int>>; + +template <class _Data> +constexpr auto g(_Data __data) { + return c1_t<_Data>{}; +} + +void f() { + auto &&b = g(0); +} diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C new file mode 100644 index 000000000000..31d08add2777 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C @@ -0,0 +1,12 @@ +// PR c++/107457 +// { dg-do compile { target c++20 } } + +template<class T> +using lambda = decltype([]() {}); + +template<class R, class F = lambda<R>> +void test() { } + +int main() { + test<int>(); +} diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ4.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ4.C new file mode 100644 index 000000000000..341a1aa5bb1c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ4.C @@ -0,0 +1,12 @@ +// PR c++/93595 +// { dg-do compile { target c++20 } } + +template<int> +struct bad { + template<class T, auto = []{ return T(); }> + static void f(T) { } +}; + +int main() { + bad<0>::f(0); +} From a76f236e084cbd02e4e3711cdfc3191dc7eeb460 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> Date: Fri, 12 Apr 2024 16:54:38 +0200 Subject: [PATCH 526/551] s390: testsuite: Xfail range-sincos.c and vrp-float-abs-1.c As mentioned in PR114678 those failures will be fixed by https://gcc.gnu.org/pipermail/gcc-patches/2024-March/648303.html For GCC 14 just xfail them which should be reverted once the patch is applied. gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/range-sincos.c: Xfail for s390. * gcc.dg/tree-ssa/vrp-float-abs-1.c: Dito. --- gcc/testsuite/gcc.dg/tree-ssa/range-sincos.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/range-sincos.c b/gcc/testsuite/gcc.dg/tree-ssa/range-sincos.c index 337f9cda02f2..35b38c3c9147 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/range-sincos.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/range-sincos.c @@ -40,4 +40,4 @@ stool (double x) link_error (); } -// { dg-final { scan-tree-dump-not "link_error" "evrp" { target { { *-*-linux* } && { glibc } } } } } +// { dg-final { scan-tree-dump-not "link_error" "evrp" { target { { *-*-linux* } && { glibc } } xfail s390*-*-* } } } xfail: PR114678 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c index 4b7b75833e01..a814a9739633 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp-float-abs-1.c @@ -14,4 +14,4 @@ foo (double x, double y) } } -// { dg-final { scan-tree-dump-not "link_error" "evrp" } } +// { dg-final { scan-tree-dump-not "link_error" "evrp" { xfail s390*-*-* } } } xfail: PR114678 From 9b8c6fffcb199b51bb9c4f46f2834f5fd0149d01 Mon Sep 17 00:00:00 2001 From: Richard Sandiford <richard.sandiford@arm.com> Date: Fri, 12 Apr 2024 17:41:32 +0100 Subject: [PATCH 527/551] aarch64: Avoid using mismatched ZERO ZA sizes The svzero_mask_za intrinsic tried to use the shortest combination of .b, .h, .s and .d tiles, allowing mixtures of sizes where necessary. However, Iain S pointed out that LLVM instead requires the tiles to have the same suffix. GAS supports both versions, so this patch generates the LLVM-friendly form. gcc/ * config/aarch64/aarch64.cc (aarch64_output_sme_zero_za): Require all tiles to have the same suffix. gcc/testsuite/ * gcc.target/aarch64/sme/acle-asm/zero_mask_za.c (zero_mask_za_ab) (zero_mask_za_d7, zero_mask_za_bf): Expect a list of .d tiles instead of a mixture. --- gcc/config/aarch64/aarch64.cc | 20 +++++++++++-------- .../aarch64/sme/acle-asm/zero_mask_za.c | 6 +++--- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index a2e3d208d761..1beec94629d1 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -13210,29 +13210,33 @@ aarch64_output_sme_zero_za (rtx mask) /* The last entry in the list has the form "za7.d }", but that's the same length as "za7.d, ". */ static char buffer[sizeof("zero\t{ ") + sizeof ("za7.d, ") * 8 + 1]; - unsigned int i = 0; - i += snprintf (buffer + i, sizeof (buffer) - i, "zero\t"); - const char *prefix = "{ "; for (auto &tile : tiles) { unsigned int tile_mask = tile.mask; unsigned int tile_index = 0; + unsigned int i = snprintf (buffer, sizeof (buffer), "zero\t"); + const char *prefix = "{ "; + auto remaining_mask = mask_val; while (tile_mask < 0x100) { - if ((mask_val & tile_mask) == tile_mask) + if ((remaining_mask & tile_mask) == tile_mask) { i += snprintf (buffer + i, sizeof (buffer) - i, "%sza%d.%c", prefix, tile_index, tile.letter); prefix = ", "; - mask_val &= ~tile_mask; + remaining_mask &= ~tile_mask; } tile_mask <<= 1; tile_index += 1; } + if (remaining_mask == 0) + { + gcc_assert (i + 3 <= sizeof (buffer)); + snprintf (buffer + i, sizeof (buffer) - i, " }"); + return buffer; + } } - gcc_assert (mask_val == 0 && i + 3 <= sizeof (buffer)); - snprintf (buffer + i, sizeof (buffer) - i, " }"); - return buffer; + gcc_unreachable (); } /* Return size in bits of an arithmetic operand which is shifted/scaled and diff --git a/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_mask_za.c b/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_mask_za.c index 9ce7331ebdd6..2ba8f8cc3326 100644 --- a/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_mask_za.c +++ b/gcc/testsuite/gcc.target/aarch64/sme/acle-asm/zero_mask_za.c @@ -103,21 +103,21 @@ PROTO (zero_mask_za_aa, void, ()) { svzero_mask_za (0xaa); } /* ** zero_mask_za_ab: -** zero { za1\.h, za0\.d } +** zero { za0\.d, za1\.d, za3\.d, za5\.d, za7\.d } ** ret */ PROTO (zero_mask_za_ab, void, ()) { svzero_mask_za (0xab); } /* ** zero_mask_za_d7: -** zero { za0\.h, za1\.d, za7\.d } +** zero { za0\.d, za1\.d, za2\.d, za4\.d, za6\.d, za7\.d } ** ret */ PROTO (zero_mask_za_d7, void, ()) { svzero_mask_za (0xd7); } /* ** zero_mask_za_bf: -** zero { za1\.h, za0\.s, za2\.d } +** zero { za0\.d, za1\.d, za2\.d, za3\.d, za4\.d, za5\.d, za7\.d } ** ret */ PROTO (zero_mask_za_bf, void, ()) { svzero_mask_za (0xbf); } From 245595d72818526e2ca857848831e8afa87ae2de Mon Sep 17 00:00:00 2001 From: Andrew Pinski <quic_apinski@quicinc.com> Date: Wed, 10 Apr 2024 13:39:01 -0700 Subject: [PATCH 528/551] match: Fix `!a?b:c` and `a?~t:t` patterns for signed 1 bit types [PR114666] The problem is `!a?b:c` pattern will create a COND_EXPR with an 1bit signed integer which breaks patterns like `a?~t:t`. This rejects when we have a signed operand for both patterns. Note for GCC 15, I am going to look at the canonicalization of `a?~t:t` where t was a constant since I think keeping it a COND_EXPR might be more canonical and is what VPR produces from the same IR; if anything expand should handle which one is better. Bootstrapped and tested on x86_64-linux-gnu with no regressions. PR tree-optimization/114666 gcc/ChangeLog: * match.pd (`!a?b:c`): Reject signed types for the condition. (`a?~t:t`): Likewise. gcc/testsuite/ChangeLog: * gcc.c-torture/execute/bitfld-signed1-1.c: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com> --- gcc/match.pd | 6 +++++- .../gcc.c-torture/execute/bitfld-signed1-1.c | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/bitfld-signed1-1.c diff --git a/gcc/match.pd b/gcc/match.pd index 15a1e7350d4a..d401e7503e62 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -5895,7 +5895,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) /* !A ? B : C -> A ? C : B. */ (simplify (cnd (logical_inverted_value truth_valued_p@0) @1 @2) - (cnd @0 @2 @1))) + /* For CONDs, don't handle signed values here. */ + (if (cnd == VEC_COND_EXPR + || TYPE_UNSIGNED (TREE_TYPE (@0))) + (cnd @0 @2 @1)))) /* abs/negative simplifications moved from fold_cond_expr_with_comparison. @@ -7095,6 +7098,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (cond @0 @1 @2) (with { bool wascmp; } (if (INTEGRAL_TYPE_P (type) + && TYPE_UNSIGNED (TREE_TYPE (@0)) && bitwise_inverted_equal_p (@1, @2, wascmp) && (!wascmp || TYPE_PRECISION (type) == 1)) (if ((!TYPE_UNSIGNED (type) && TREE_CODE (type) == BOOLEAN_TYPE) diff --git a/gcc/testsuite/gcc.c-torture/execute/bitfld-signed1-1.c b/gcc/testsuite/gcc.c-torture/execute/bitfld-signed1-1.c new file mode 100644 index 000000000000..b0ff120ea516 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bitfld-signed1-1.c @@ -0,0 +1,13 @@ +/* PR tree-optimization/114666 */ +/* We used to miscompile this to be always aborting + due to the use of the signed 1bit into the COND_EXPR. */ + +struct { + signed a : 1; +} b = {-1}; +char c; +int main() +{ + if ((b.a ^ 1UL) < 3) + __builtin_abort(); +} From 0fd824d717ca901319864a5eeba4e62b278f8329 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 12 Apr 2024 19:57:04 +0200 Subject: [PATCH 529/551] c++: Diagnose or avoid constexpr dtors in classes with virtual bases [PR114426] I had another look at this P1 PR today. You said in the "c++: fix in-charge parm in constexpr" mail back in December (as well as in the r14-6507 commit message): "Since a class with vbases can't have constexpr 'tors there isn't actually a need for an in-charge parameter in a destructor" but the ICE is because the destructor is marked implicitly constexpr. https://eel.is/c++draft/dcl.constexpr#3.2 says that a destructor of a class with virtual bases is not constexpr-suitable, but we were actually implementing this just for constructors, so clearly my fault from the https://wg21.link/P0784R7 implementation. That paper clearly added that sentence in there and removed similar sentence just from the constructor case. So, the following patch makes sure the else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun))) { ret = false; if (complain) error ("%q#T has virtual base classes", DECL_CONTEXT (fun)); } hunk is done no just for DECL_CONSTRUCTOR_P (fun), but also DECL_DESTRUCTOR_P (fun) - in that case just for cxx_dialect >= cxx20, as for cxx_dialect < cxx20 we already set ret = false; and diagnose a different error, so no need to diagnose two. 2024-04-12 Jakub Jelinek <jakub@redhat.com> PR c++/114426 * constexpr.cc (is_valid_constexpr_fn): Return false/diagnose with complain destructors in classes with virtual bases. * g++.dg/cpp2a/pr114426.C: New test. * g++.dg/cpp2a/constexpr-dtor16.C: New test. --- gcc/cp/constexpr.cc | 17 +++++++---------- gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C | 7 +++++++ gcc/testsuite/g++.dg/cpp2a/pr114426.C | 7 +++++++ 3 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C create mode 100644 gcc/testsuite/g++.dg/cpp2a/pr114426.C diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 02b34cc060ad..fcc847d85df3 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -262,18 +262,15 @@ is_valid_constexpr_fn (tree fun, bool complain) inform (DECL_SOURCE_LOCATION (fun), "lambdas are implicitly %<constexpr%> only in C++17 and later"); } - else if (DECL_DESTRUCTOR_P (fun)) + else if (DECL_DESTRUCTOR_P (fun) && cxx_dialect < cxx20) { - if (cxx_dialect < cxx20) - { - ret = false; - if (complain) - error_at (DECL_SOURCE_LOCATION (fun), - "%<constexpr%> destructors only available" - " with %<-std=c++20%> or %<-std=gnu++20%>"); - } + ret = false; + if (complain) + error_at (DECL_SOURCE_LOCATION (fun), + "%<constexpr%> destructors only available with " + "%<-std=c++20%> or %<-std=gnu++20%>"); } - else if (!DECL_CONSTRUCTOR_P (fun)) + else if (!DECL_CONSTRUCTOR_P (fun) && !DECL_DESTRUCTOR_P (fun)) { tree rettype = TREE_TYPE (TREE_TYPE (fun)); if (!literal_type_p (rettype)) diff --git a/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C b/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C new file mode 100644 index 000000000000..b84aaf95b9d0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/constexpr-dtor16.C @@ -0,0 +1,7 @@ +// PR c++/114426 +// { dg-do compile { target c++11 } } + +struct A { virtual ~A (); }; +struct B : virtual A { constexpr ~B () {} }; +// { dg-error "'struct B' has virtual base classes" "" { target c++20 } .-1 } +// { dg-error "'constexpr' destructors only available with" "" { target c++17_down } .-2 } diff --git a/gcc/testsuite/g++.dg/cpp2a/pr114426.C b/gcc/testsuite/g++.dg/cpp2a/pr114426.C new file mode 100644 index 000000000000..9000fa747d7e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/pr114426.C @@ -0,0 +1,7 @@ +// PR c++/114426 +// { dg-do compile } +// { dg-additional-options "-O2" } + +struct A { virtual ~A (); }; +struct B : virtual A { virtual void foo () = 0; }; +struct C : B { C () {} }; From d74fe10b13336b9de2e025ced4af00a25ff1d3e7 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Fri, 12 Apr 2024 14:52:31 -0400 Subject: [PATCH 530/551] c++: templated substitution into lambda-expr, cont [PR114393] The original PR114393 testcase is unfortunately still not accepted after r14-9938-g081c1e93d56d35 due to return type deduction confusion when a lambda-expr is used as a default template argument. The below reduced testcase demonstrates the bug. Here when forming the dependent specialization b_v<U> we substitute the default argument of F, a lambda-expr, with _Descriptor=U. (In this case in_template_context is true since we're in the context of the template c_v, so we don't defer.) This substitution in turn lowers the level of the lambda's auto return type from 2 to 1 and so later, when instantiating c_v<int, char> we wrongly substitute this auto with the template argument at level=0,index=0, i.e. int, instead of going through do_auto_deduction which would yield char. One way to fix this would be to use a level-less auto to represent a deduced return type of a lambda, but that might be too invasive of a change at this stage, and it might be better to do this across the board for all deduced return types. Another way would be to pass tf_partial from coerce_template_parms during dependent substitution into a default template argument so that the substitution doesn't do any level-lowering, but that wouldn't do the right thing in this case due to the tf_partial early exit in the LAMBDA_EXPR case of tsubst_expr. Yet another way, and the approach that this patch takes, is to just defer all dependent substitution into a lambda-expr, building upon the logic added in r14-9938-g081c1e93d56d35. This also helps ensure LAMBDA_EXPR_REGEN_INFO consists only of the concrete template arguments that were ultimately substituted into the most general lambda. PR c++/114393 gcc/cp/ChangeLog: * pt.cc (tsubst_lambda_expr): Also defer all dependent substitution. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-targ2a.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/pt.cc | 9 +++++++-- gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc index ec259ee0fbff..3b2106dd3f65 100644 --- a/gcc/cp/pt.cc +++ b/gcc/cp/pt.cc @@ -19622,11 +19622,16 @@ tsubst_lambda_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl) in_decl = oldfn; args = add_extra_args (LAMBDA_EXPR_EXTRA_ARGS (t), args, complain, in_decl); - if (processing_template_decl && !in_template_context) + if (processing_template_decl + && (!in_template_context || any_dependent_template_arguments_p (args))) { /* Defer templated substitution into a lambda-expr if we lost the necessary template context. This may happen for a lambda-expr - used as a default template argument. */ + used as a default template argument. + + Defer dependent substitution as well so that we don't prematurely + lower the level of a deduced return type or any other auto or + template parameter belonging to the lambda. */ t = copy_node (t); LAMBDA_EXPR_EXTRA_ARGS (t) = NULL_TREE; LAMBDA_EXPR_EXTRA_ARGS (t) = build_extra_args (t, args, complain); diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C new file mode 100644 index 000000000000..7136ce798720 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C @@ -0,0 +1,14 @@ +// PR c++/114393 +// { dg-do compile { target c++20 } } + +template <auto _DescriptorFn> struct c1 {}; + +template <class _Descriptor, auto F = [] { return _Descriptor(); }> +inline constexpr auto b_v = F; + +template <class T, class U> +inline constexpr auto c_v = b_v<U>; + +auto f = c_v<int, char>; +using type = decltype(f()); +using type = char; From 91146346f57cc54dfeb2669347edd0eb3d13af7f Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Fri, 12 Apr 2024 20:53:10 +0200 Subject: [PATCH 531/551] c++: Fix bogus warnings about ignored annotations [PR114691] The middle-end warns about the ANNOTATE_EXPR added for while/for loops if they declare a var inside of the loop condition. This is because the assumption is that ANNOTATE_EXPR argument is used immediately in a COND_EXPR (later GIMPLE_COND), but simplify_loop_decl_cond wraps the ANNOTATE_EXPR inside of a TRUTH_NOT_EXPR, so it no longer holds. The following patch fixes that by adding the TRUTH_NOT_EXPR inside of the ANNOTATE_EXPR argument if any. 2024-04-12 Jakub Jelinek <jakub@redhat.com> PR c++/114691 * semantics.cc (simplify_loop_decl_cond): Use cp_build_unary_op with TRUTH_NOT_EXPR on ANNOTATE_EXPR argument (if any) rather than ANNOTATE_EXPR itself. * g++.dg/ext/pr114691.C: New test. --- gcc/cp/semantics.cc | 6 +++++- gcc/testsuite/g++.dg/ext/pr114691.C | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/pr114691.C diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc index abaa4a3ca531..02c7c1bf5a41 100644 --- a/gcc/cp/semantics.cc +++ b/gcc/cp/semantics.cc @@ -799,7 +799,11 @@ simplify_loop_decl_cond (tree *cond_p, tree body) *cond_p = boolean_true_node; if_stmt = begin_if_stmt (); - cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, false, tf_warning_or_error); + cond_p = &cond; + while (TREE_CODE (*cond_p) == ANNOTATE_EXPR) + cond_p = &TREE_OPERAND (*cond_p, 0); + *cond_p = cp_build_unary_op (TRUTH_NOT_EXPR, *cond_p, false, + tf_warning_or_error); finish_if_stmt_cond (cond, if_stmt); finish_break_stmt (); finish_then_clause (if_stmt); diff --git a/gcc/testsuite/g++.dg/ext/pr114691.C b/gcc/testsuite/g++.dg/ext/pr114691.C new file mode 100644 index 000000000000..f11731f2d5d0 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/pr114691.C @@ -0,0 +1,22 @@ +// PR c++/114691 +// { dg-do compile } +// { dg-options "-O2 -Wall" } + +void qux (int); +int foo (int); + +void +bar (int x) +{ + #pragma GCC novector + while (int y = foo (x)) // { dg-bogus "ignoring loop annotation" } + qux (y); +} + +void +baz (int x) +{ + #pragma GCC novector + for (; int y = foo (x); ) // { dg-bogus "ignoring loop annotation" } + qux (y); +} From c9500083073ff5e0f5c1c9db92d7ce6e51a62919 Mon Sep 17 00:00:00 2001 From: Tatsuyuki Ishi <ishitatsuyuki@gmail.com> Date: Tue, 9 Apr 2024 23:57:24 +0900 Subject: [PATCH 532/551] Regenerate opt.urls Fixes: 97069657c4e ("RISC-V: Implement TLS Descriptors.") gcc/ChangeLog: * config/riscv/riscv.opt.urls: Regenerated. Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com> Acked-by: Palmer Dabbelt <palmer@rivosinc.com> --- gcc/config/riscv/riscv.opt.urls | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/config/riscv/riscv.opt.urls b/gcc/config/riscv/riscv.opt.urls index da31820e2343..351f7f0dda27 100644 --- a/gcc/config/riscv/riscv.opt.urls +++ b/gcc/config/riscv/riscv.opt.urls @@ -89,3 +89,5 @@ UrlSuffix(gcc/RISC-V-Options.html#index-minline-strncmp) minline-strlen UrlSuffix(gcc/RISC-V-Options.html#index-minline-strlen) +; skipping UrlSuffix for 'mtls-dialect=' due to finding no URLs + From d435571b54b02946c97b5b24f20e5a7058fd96a1 Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Fri, 12 Apr 2024 13:24:44 -0400 Subject: [PATCH 533/551] c++: reference list-init, conversion fn [PR113141] The original testcase in PR113141 is an instance of CWG1996; the standard fails to consider conversion functions when initializing a reference directly from an initializer-list of one element, but then does consider them when initializing a temporary. I have a proposed fix for this defect, which is implemented here. DR 1996 PR c++/113141 gcc/cp/ChangeLog: * call.cc (reference_binding): Check direct binding from a single-element list. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/initlist-ref1.C: New test. * g++.dg/cpp0x/initlist-ref2.C: New test. * g++.dg/cpp0x/initlist-ref3.C: New test. Co-authored-by: Patrick Palka <ppalka@redhat.com> --- gcc/cp/call.cc | 21 +++++++++++++++++---- gcc/testsuite/g++.dg/cpp0x/initlist-ref1.C | 16 ++++++++++++++++ gcc/testsuite/g++.dg/cpp0x/initlist-ref2.C | 10 ++++++++++ gcc/testsuite/g++.dg/cpp0x/initlist-ref3.C | 13 +++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist-ref1.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist-ref2.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist-ref3.C diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 9568b5eb2c44..15b5647298e4 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -1596,7 +1596,9 @@ standard_conversion (tree to, tree from, tree expr, bool c_cast_p, return conv; } -/* Returns nonzero if T1 is reference-related to T2. */ +/* Returns nonzero if T1 is reference-related to T2. + + This is considered when a reference to T1 is initialized by a T2. */ bool reference_related_p (tree t1, tree t2) @@ -1757,6 +1759,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags, } bool copy_list_init = false; + bool single_list_conv = false; if (expr && BRACE_ENCLOSED_INITIALIZER_P (expr)) { maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS); @@ -1783,6 +1786,11 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags, from = etype; goto skip; } + else if (CLASS_TYPE_P (etype) && TYPE_HAS_CONVERSION (etype)) + /* CWG1996: jason's proposed drafting adds "or initializing T from E + would bind directly". We check that in the direct binding with + conversion code below. */ + single_list_conv = true; } /* Otherwise, if T is a reference type, a prvalue temporary of the type referenced by T is copy-list-initialized, and the reference is bound @@ -1907,9 +1915,14 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags, (possibly cv-qualified) object to the (possibly cv-qualified) same object type (or a reference to it), to a (possibly cv-qualified) base class of that type (or a reference to it).... */ - else if (CLASS_TYPE_P (from) && !related_p - && !(flags & LOOKUP_NO_CONVERSION)) + else if (!related_p + && !(flags & LOOKUP_NO_CONVERSION) + && (CLASS_TYPE_P (from) || single_list_conv)) { + tree rexpr = expr; + if (single_list_conv) + rexpr = CONSTRUCTOR_ELT (expr, 0)->value; + /* [dcl.init.ref] If the initializer expression @@ -1923,7 +1936,7 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags, the reference is bound to the lvalue result of the conversion in the second case. */ - z_candidate *cand = build_user_type_conversion_1 (rto, expr, flags, + z_candidate *cand = build_user_type_conversion_1 (rto, rexpr, flags, complain); if (cand) { diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-ref1.C b/gcc/testsuite/g++.dg/cpp0x/initlist-ref1.C new file mode 100644 index 000000000000..f893f12dafa1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist-ref1.C @@ -0,0 +1,16 @@ +// PR c++/113141 +// { dg-do compile { target c++11 } } + +struct ConvToRef { + operator int&(); +}; + +struct A { int& r; }; + +void f(A); + +int main() { + ConvToRef c; + A a{{c}}; + f({{c}}); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-ref2.C b/gcc/testsuite/g++.dg/cpp0x/initlist-ref2.C new file mode 100644 index 000000000000..401d868d8206 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist-ref2.C @@ -0,0 +1,10 @@ +// CWG1996 +// { dg-do compile { target c++11 } } + +struct S { operator struct D &(); } s; +D &d{s}; // OK, direct binding + +namespace N1 { + struct S { operator volatile struct D &(); } s; + const D &dr{s}; // { dg-error "invalid user-defined|discards qualifiers" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist-ref3.C b/gcc/testsuite/g++.dg/cpp0x/initlist-ref3.C new file mode 100644 index 000000000000..e2cc1deace57 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist-ref3.C @@ -0,0 +1,13 @@ +// CWG1996 +// { dg-do compile { target c++11 } } + +struct D { constexpr D() {} } d; +struct S { + template <class T> + constexpr operator T& () const { return d; } +}; +constexpr S s; +constexpr const D &dr1(s); +static_assert (&dr1 == &d, ""); +constexpr const D &dr2{s}; +static_assert (&dr2 == &d, ""); From df7bfdb7dbf2d46aa5768a0280d4dcfcc868b7f9 Mon Sep 17 00:00:00 2001 From: Jason Merrill <jason@redhat.com> Date: Wed, 10 Apr 2024 15:12:26 -0400 Subject: [PATCH 534/551] c++: reference cast, conversion fn [PR113141] The second testcase in 113141 is a separate issue: we first decide that the conversion is ill-formed, but then when recalculating the special c_cast_p handling makes us think it's OK. We don't want that, it should continue to fall back to the reinterpret_cast interpretation. And while we're here, let's warn that we're not using the conversion function. Note that the standard seems to say that in this case we should treat (Matrix &) as const_cast<Matrix &>(static_cast<const Matrix &>(X)), which would use the conversion operator, but that doesn't match existing practice, so let's resolve that another day. I've raised this issue with CWG; at the moment I lean toward never binding a temporary in a C-style cast to reference type, which would also be a change from existing practice. PR c++/113141 gcc/c-family/ChangeLog: * c.opt: Add -Wcast-user-defined. gcc/ChangeLog: * doc/invoke.texi: Document -Wcast-user-defined. gcc/cp/ChangeLog: * call.cc (reference_binding): For an invalid cast, warn and don't recalculate. gcc/testsuite/ChangeLog: * g++.dg/conversion/ref12.C: New test. Co-authored-by: Patrick Palka <ppalka@redhat.com> --- gcc/c-family/c.opt | 4 ++++ gcc/cp/call.cc | 12 +++++++++++- gcc/doc/invoke.texi | 13 +++++++++++++ gcc/testsuite/g++.dg/conversion/ref12.C | 20 ++++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/conversion/ref12.C diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index 56cccf2a67bd..848c2fda2038 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -514,6 +514,10 @@ Wcast-qual C ObjC C++ ObjC++ Var(warn_cast_qual) Warning Warn about casts which discard qualifiers. +Wcast-user-defined +C++ ObjC++ Var(warn_cast_user_defined) Warning Init(1) +Warn about a cast to reference type that does not use a related user-defined conversion function. + Wcatch-value C++ ObjC++ Warning Alias(Wcatch-value=, 1, 0) Warn about catch handlers of non-reference type. diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 15b5647298e4..dbdd7c29fe88 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -2034,7 +2034,17 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags, recalculate the second conversion sequence. */ for (conversion *t = conv; t; t = next_conversion (t)) if (t->kind == ck_user - && DECL_CONV_FN_P (t->cand->fn)) + && c_cast_p && !maybe_valid_p) + { + if (complain & tf_warning) + warning (OPT_Wcast_user_defined, + "casting %qT to %qT does not use %qD", + from, rto, t->cand->fn); + /* Don't let recalculation try to make this valid. */ + break; + } + else if (t->kind == ck_user + && DECL_CONV_FN_P (t->cand->fn)) { tree ftype = TREE_TYPE (TREE_TYPE (t->cand->fn)); /* A prvalue of non-class type is cv-unqualified. */ diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 5d5e70c30331..e3285587e4e7 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -9391,6 +9391,19 @@ In a cast involving pointer to member types this warning warns whenever the type cast is changing the pointer to member type. This warning is enabled by @option{-Wextra}. +@opindex Wcast-user-defined +@opindex Wno-cast-user-defined +@item -Wcast-user-defined +Warn when a cast to reference type does not involve a user-defined +conversion that the programmer might expect to be called. + +@smallexample +struct A @{ operator const int&(); @} a; +auto r = (int&)a; // warning +@end smallexample + +This warning is enabled by default. + @opindex Wwrite-strings @opindex Wno-write-strings @item -Wwrite-strings diff --git a/gcc/testsuite/g++.dg/conversion/ref12.C b/gcc/testsuite/g++.dg/conversion/ref12.C new file mode 100644 index 000000000000..27ed91227694 --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/ref12.C @@ -0,0 +1,20 @@ +// PR c++/113141 + +struct Matrix { }; + +struct TPoint3 { private: operator const Matrix(); }; + +void f(Matrix&); + +int main() { + TPoint3 X; + Matrix& m = (Matrix &)X; // { dg-warning "does not use" } + f((Matrix &)X); // { dg-warning "does not use" } +} + +struct A { private: operator const int&(); } a; +int &r = (int&)a; // { dg-warning "does not use" } + +struct B { B(int); }; +int i; +B &br = (B&)i; // { dg-warning "does not use" } From 716af95fd454871473c4b118b8412b6a68459b75 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Fri, 12 Apr 2024 15:50:04 -0400 Subject: [PATCH 535/551] c++/modules: local type merging [PR99426] One known missing piece in the modules implementation is merging of a streamed-in local type (class or enum) with the corresponding in-TU version of the local type. This missing piece turns out to cause a hard-to-reduce use-after-free GC issue due to the entity_ary not being marked as a GC root (deliberately), and manifests as a serialization error on stream-in as in PR99426 (see comment #6 for a reduction). It's also reproducible on trunk when running the xtreme-header tests without -fno-module-lazy. This patch implements this missing piece, making us merge such local types according to their position within the containing function's definition, analogous to how we merge FIELD_DECLs of a class according to their index in the TYPE_FIELDS list. PR c++/99426 gcc/cp/ChangeLog: * module.cc (merge_kind::MK_local_type): New enumerator. (merge_kind_name): Update. (trees_out::chained_decls): Move BLOCK-specific handling of DECL_LOCAL_DECL_P decls to ... (trees_out::core_vals) <case BLOCK>: ... here. Stream BLOCK_VARS manually. (trees_in::core_vals) <case BLOCK>: Stream BLOCK_VARS manually. Handle deduplicated local types.. (trees_out::key_local_type): Define. (trees_in::key_local_type): Define. (trees_out::get_merge_kind) <case FUNCTION_DECL>: Return MK_local_type for a local type. (trees_out::key_mergeable) <case FUNCTION_DECL>: Use key_local_type. (trees_in::key_mergeable) <case FUNCTION_DECL>: Likewise. (trees_in::is_matching_decl): Be flexible with type mismatches for local entities. (trees_in::register_duplicate): Also register the DECL_TEMPLATE_RESULT of a TEMPLATE_DECL as a duplicate. (depset_cmp): Return 0 for equal IDENTIFIER_HASH_VALUEs. gcc/testsuite/ChangeLog: * g++.dg/modules/merge-17.h: New test. * g++.dg/modules/merge-17_a.H: New test. * g++.dg/modules/merge-17_b.C: New test. * g++.dg/modules/xtreme-header-7_a.H: New test. * g++.dg/modules/xtreme-header-7_b.C: New test. Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/module.cc | 180 +++++++++++++++--- gcc/testsuite/g++.dg/modules/merge-17.h | 58 ++++++ gcc/testsuite/g++.dg/modules/merge-17_a.H | 3 + gcc/testsuite/g++.dg/modules/merge-17_b.C | 3 + .../g++.dg/modules/xtreme-header-7_a.H | 4 + .../g++.dg/modules/xtreme-header-7_b.C | 5 + 6 files changed, 222 insertions(+), 31 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/merge-17.h create mode 100644 gcc/testsuite/g++.dg/modules/merge-17_a.H create mode 100644 gcc/testsuite/g++.dg/modules/merge-17_b.C create mode 100644 gcc/testsuite/g++.dg/modules/xtreme-header-7_a.H create mode 100644 gcc/testsuite/g++.dg/modules/xtreme-header-7_b.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index ad1b6bf5ca41..9917a6abe4f8 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -2758,6 +2758,7 @@ enum merge_kind MK_enum, /* Found by CTX, & 1stMemberNAME. */ MK_keyed, /* Found by key & index. */ + MK_local_type, /* Found by CTX, index. */ MK_friend_spec, /* Like named, but has a tmpl & args too. */ MK_local_friend, /* Found by CTX, index. */ @@ -2784,7 +2785,7 @@ static char const *const merge_kind_name[MK_hwm] = "unique", "named", "field", "vtable", /* 0...3 */ "asbase", "partial", "enum", "attached", /* 4...7 */ - "friend spec", "local friend", NULL, NULL, /* 8...11 */ + "local type", "friend spec", "local friend", NULL, /* 8...11 */ NULL, NULL, NULL, NULL, "type spec", "type tmpl spec", /* 16,17 type (template). */ @@ -2913,6 +2914,7 @@ class trees_in : public bytes_in { unsigned binfo_mergeable (tree *); private: + tree key_local_type (const merge_key&, tree, tree); uintptr_t *find_duplicate (tree existing); void register_duplicate (tree decl, tree existing); /* Mark as an already diagnosed bad duplicate. */ @@ -3071,6 +3073,7 @@ class trees_out : public bytes_out { void binfo_mergeable (tree binfo); private: + void key_local_type (merge_key&, tree, tree); bool decl_node (tree, walk_kind ref); void type_node (tree); void tree_value (tree); @@ -4937,18 +4940,7 @@ void trees_out::chained_decls (tree decls) { for (; decls; decls = DECL_CHAIN (decls)) - { - if (VAR_OR_FUNCTION_DECL_P (decls) - && DECL_LOCAL_DECL_P (decls)) - { - /* Make sure this is the first encounter, and mark for - walk-by-value. */ - gcc_checking_assert (!TREE_VISITED (decls) - && !DECL_TEMPLATE_INFO (decls)); - mark_by_value (decls); - } - tree_node (decls); - } + tree_node (decls); tree_node (NULL_TREE); } @@ -6198,7 +6190,21 @@ trees_out::core_vals (tree t) /* DECL_LOCAL_DECL_P decls are first encountered here and streamed by value. */ - chained_decls (t->block.vars); + for (tree decls = t->block.vars; decls; decls = DECL_CHAIN (decls)) + { + if (VAR_OR_FUNCTION_DECL_P (decls) + && DECL_LOCAL_DECL_P (decls)) + { + /* Make sure this is the first encounter, and mark for + walk-by-value. */ + gcc_checking_assert (!TREE_VISITED (decls) + && !DECL_TEMPLATE_INFO (decls)); + mark_by_value (decls); + } + tree_node (decls); + } + tree_node (NULL_TREE); + /* nonlocalized_vars is a middle-end thing. */ WT (t->block.subblocks); WT (t->block.supercontext); @@ -6712,7 +6718,29 @@ trees_in::core_vals (tree t) case BLOCK: t->block.locus = state->read_location (*this); t->block.end_locus = state->read_location (*this); - t->block.vars = chained_decls (); + + for (tree *chain = &t->block.vars;;) + if (tree decl = tree_node ()) + { + /* For a deduplicated local type or enumerator, chain the + duplicate decl instead of the canonical in-TU decl. Seeing + a duplicate here means the containing function whose body + we're streaming in is a duplicate too, so we'll end up + discarding this BLOCK (and the rest of the duplicate function + body) anyway. */ + decl = maybe_duplicate (decl); + + if (!DECL_P (decl) || DECL_CHAIN (decl)) + { + set_overrun (); + break; + } + *chain = decl; + chain = &DECL_CHAIN (decl); + } + else + break; + /* nonlocalized_vars is middle-end. */ RT (t->block.subblocks); RT (t->block.supercontext); @@ -10327,6 +10355,88 @@ trees_in::fn_parms_fini (int tag, tree fn, tree existing, bool is_defn) } } +/* Encode into KEY the position of the local type (class or enum) + declaration DECL within FN. The position is encoded as the + index of the innermost BLOCK (numbered in BFS order) along with + the index within its BLOCK_VARS list. */ + +void +trees_out::key_local_type (merge_key& key, tree decl, tree fn) +{ + auto_vec<tree, 4> blocks; + blocks.quick_push (DECL_INITIAL (fn)); + unsigned block_ix = 0; + while (block_ix != blocks.length ()) + { + tree block = blocks[block_ix]; + unsigned decl_ix = 0; + for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var)) + { + if (TREE_CODE (var) != TYPE_DECL) + continue; + if (var == decl) + { + key.index = (block_ix << 10) | decl_ix; + return; + } + ++decl_ix; + } + for (tree sub = BLOCK_SUBBLOCKS (block); sub; sub = BLOCK_CHAIN (sub)) + blocks.safe_push (sub); + ++block_ix; + } + + /* Not-found value. */ + key.index = 1023; +} + +/* Look up the local type corresponding at the position encoded by + KEY within FN and named NAME. */ + +tree +trees_in::key_local_type (const merge_key& key, tree fn, tree name) +{ + if (!DECL_INITIAL (fn)) + return NULL_TREE; + + const unsigned block_pos = key.index >> 10; + const unsigned decl_pos = key.index & 1023; + + if (decl_pos == 1023) + return NULL_TREE; + + auto_vec<tree, 4> blocks; + blocks.quick_push (DECL_INITIAL (fn)); + unsigned block_ix = 0; + while (block_ix != blocks.length ()) + { + tree block = blocks[block_ix]; + if (block_ix == block_pos) + { + unsigned decl_ix = 0; + for (tree var = BLOCK_VARS (block); var; var = DECL_CHAIN (var)) + { + if (TREE_CODE (var) != TYPE_DECL) + continue; + /* Prefer using the identifier as the key for more robustness + to ODR violations, except for anonymous types since their + compiler-generated identifiers aren't stable. */ + if (IDENTIFIER_ANON_P (name) + ? decl_ix == decl_pos + : DECL_NAME (var) == name) + return var; + ++decl_ix; + } + return NULL_TREE; + } + for (tree sub = BLOCK_SUBBLOCKS (block); sub; sub = BLOCK_CHAIN (sub)) + blocks.safe_push (sub); + ++block_ix; + } + + return NULL_TREE; +} + /* DEP is the depset of some decl we're streaming by value. Determine the merging behaviour. */ @@ -10446,17 +10556,10 @@ trees_out::get_merge_kind (tree decl, depset *dep) gcc_unreachable (); case FUNCTION_DECL: - // FIXME: This can occur for (a) voldemorty TYPE_DECLS - // (which are returned from a function), or (b) - // block-scope class definitions in template functions. - // These are as unique as the containing function. While - // on read-back we can discover if the CTX was a - // duplicate, we don't have a mechanism to get from the - // existing CTX to the existing version of this decl. gcc_checking_assert (DECL_IMPLICIT_TYPEDEF_P (STRIP_TEMPLATE (decl))); - mk = MK_unique; + mk = MK_local_type; break; case RECORD_TYPE: @@ -10758,6 +10861,10 @@ trees_out::key_mergeable (int tag, merge_kind mk, tree decl, tree inner, } break; + case MK_local_type: + key_local_type (key, STRIP_TEMPLATE (decl), container); + break; + case MK_enum: { /* Anonymous enums are located by their first identifier, @@ -11114,11 +11221,10 @@ trees_in::key_mergeable (int tag, merge_kind mk, tree decl, tree inner, break; case FUNCTION_DECL: - // FIXME: What about a voldemort? how do we find what it - // duplicates? Do we have to number vmorts relative to - // their containing function? But how would that work - // when matching an in-TU declaration? - kind = "unique"; + gcc_checking_assert (mk == MK_local_type); + existing = key_local_type (key, container, name); + if (existing && inner != decl) + existing = TYPE_TI_TEMPLATE (TREE_TYPE (existing)); break; case TYPE_DECL: @@ -11371,6 +11477,11 @@ trees_in::is_matching_decl (tree existing, tree decl, bool is_typedef) /* Just like duplicate_decls, presum the user knows what they're doing in overriding a builtin. */ TREE_TYPE (existing) = TREE_TYPE (decl); + else if (decl_function_context (decl)) + /* The type of a mergeable local entity (such as a function scope + capturing lambda's closure type fields) can depend on an + unmergeable local entity (such as a local variable), so type + equality isn't feasible in general for local entities. */; else { // FIXME:QOI Might be template specialization from a module, @@ -11620,6 +11731,13 @@ trees_in::register_duplicate (tree decl, tree existing) uintptr_t &slot = duplicates->get_or_insert (existing, &existed); gcc_checking_assert (!existed); slot = reinterpret_cast<uintptr_t> (decl); + + if (TREE_CODE (decl) == TEMPLATE_DECL) + /* Also register the DECL_TEMPLATE_RESULT as a duplicate so + that passing decl's _RESULT to maybe_duplicate naturally + gives us existing's _RESULT back. */ + register_duplicate (DECL_TEMPLATE_RESULT (decl), + DECL_TEMPLATE_RESULT (existing)); } /* We've read a definition of MAYBE_EXISTING. If not a duplicate, @@ -13643,9 +13761,9 @@ depset_cmp (const void *a_, const void *b_) { /* Both are bindings. Order by identifier hash. */ gcc_checking_assert (a->get_name () != b->get_name ()); - return (IDENTIFIER_HASH_VALUE (a->get_name ()) - < IDENTIFIER_HASH_VALUE (b->get_name ()) - ? -1 : +1); + hashval_t ah = IDENTIFIER_HASH_VALUE (a->get_name ()); + hashval_t bh = IDENTIFIER_HASH_VALUE (b->get_name ()); + return (ah == bh ? 0 : ah < bh ? -1 : +1); } /* They are the same decl. This can happen with two using decls diff --git a/gcc/testsuite/g++.dg/modules/merge-17.h b/gcc/testsuite/g++.dg/modules/merge-17.h new file mode 100644 index 000000000000..5ce52cec3dd7 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/merge-17.h @@ -0,0 +1,58 @@ +// PR c++/99426 + +inline auto f() { + struct A { int m = 42; }; + return A{}; +} + +template<class T> +auto ft() { + decltype(+T()) x; + return [&x] { }; +} + +inline auto g() { + enum E { e }; + return e; +} + +template<class T> +auto gt() { + enum E : T { e }; + return e; +} + +inline auto h0() { + struct { int m; } a0; + struct { char n; } a1; + return a0; +} + +inline auto h1() { + struct { int m; } a0; + struct { char n; } a1; + return a1; +} + +template<class T> +inline auto h0t() { + struct { int m; } a0; + struct { char n; } a1; + return a0; +} + +template<class T> +inline auto h1t() { + struct { int m; } a0; + struct { char n; } a1; + return a1; +} + +using ty1 = decltype(f()); +using ty2 = decltype(ft<int>()); +using ty3 = decltype(g()); +using ty4 = decltype(gt<int>()); +using ty5 = decltype(h0()); +using ty6 = decltype(h0t<int>()); +using ty7 = decltype(h1()); +using ty8 = decltype(h1t<int>()); diff --git a/gcc/testsuite/g++.dg/modules/merge-17_a.H b/gcc/testsuite/g++.dg/modules/merge-17_a.H new file mode 100644 index 000000000000..0440cd765e93 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/merge-17_a.H @@ -0,0 +1,3 @@ +// { dg-additional-options "-fmodule-header" } +// { dg-module-cmi {} } +#include "merge-17.h" diff --git a/gcc/testsuite/g++.dg/modules/merge-17_b.C b/gcc/testsuite/g++.dg/modules/merge-17_b.C new file mode 100644 index 000000000000..4315b99f1725 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/merge-17_b.C @@ -0,0 +1,3 @@ +// { dg-additional-options "-fmodules-ts -fno-module-lazy" } +#include "merge-17.h" +import "merge-17_a.H"; diff --git a/gcc/testsuite/g++.dg/modules/xtreme-header-7_a.H b/gcc/testsuite/g++.dg/modules/xtreme-header-7_a.H new file mode 100644 index 000000000000..bf7859fba991 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/xtreme-header-7_a.H @@ -0,0 +1,4 @@ +// { dg-additional-options -fmodule-header } + +// { dg-module-cmi {} } +#include "xtreme-header.h" diff --git a/gcc/testsuite/g++.dg/modules/xtreme-header-7_b.C b/gcc/testsuite/g++.dg/modules/xtreme-header-7_b.C new file mode 100644 index 000000000000..3992a24501b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/xtreme-header-7_b.C @@ -0,0 +1,5 @@ +// A version of xtreme-header_b.C that doesn't use -fno-module-lazy. +// { dg-additional-options -fmodules-ts } + +#include "xtreme-header.h" +import "xtreme-header-7_a.H"; From aa57af93ba22865be747f926e4e5f219e7f8758a Mon Sep 17 00:00:00 2001 From: Will Schmidt <will_schmidt@linux.ibm.com> Date: Fri, 12 Apr 2024 14:55:16 -0500 Subject: [PATCH 536/551] rs6000: Add OPTION_MASK_POWER8 [PR101865] The bug in PR101865 is the _ARCH_PWR8 predefine macro is conditional upon TARGET_DIRECT_MOVE, which can be false for some -mcpu=power8 compiles if the -mno-altivec or -mno-vsx options are used. The solution here is to create a new OPTION_MASK_POWER8 mask that is true for -mcpu=power8, regardless of Altivec or VSX enablement. Unfortunately, the only way to create an OPTION_MASK_* mask is to create a new option, which we have done here, but marked it as WarnRemoved since we do not want users using it. For stage1, we will look into how we can create ISA mask flags for use in the compiler without the need for explicit options. 2024-04-12 Will Schmidt <will_schmidt@linux.ibm.com> Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/101865 * config/rs6000/rs6000-builtin.cc (rs6000_builtin_is_supported): Use TARGET_POWER8. * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Use OPTION_MASK_POWER8. * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Add OPTION_MASK_POWER8. (ISA_2_7_MASKS_SERVER): Likewise. * config/rs6000/rs6000.cc (rs6000_option_override_internal): Update comment. Use OPTION_MASK_POWER8 and TARGET_POWER8. * config/rs6000/rs6000.h (TARGET_SYNC_HI_QI): Use TARGET_POWER8. * config/rs6000/rs6000.md (define_attr "isa"): Add p8. (define_attr "enabled"): Handle it. (define_insn "prefetch"): Use TARGET_POWER8. * config/rs6000/rs6000.opt (mpower8-internal): New. gcc/testsuite/ PR target/101865 * gcc.target/powerpc/predefine-p7-novsx.c: New test. * gcc.target/powerpc/predefine-p8-noaltivec-novsx.c: New test. * gcc.target/powerpc/predefine-p8-noaltivec.c: New test. * gcc.target/powerpc/predefine-p8-novsx.c: New test. * gcc.target/powerpc/predefine-p8-pragma-vsx.c: New test. * gcc.target/powerpc/predefine-p9-novsx.c: New test. --- gcc/config/rs6000/rs6000-builtin.cc | 2 +- gcc/config/rs6000/rs6000-c.cc | 2 +- gcc/config/rs6000/rs6000-cpus.def | 2 + gcc/config/rs6000/rs6000.cc | 7 +- gcc/config/rs6000/rs6000.h | 2 +- gcc/config/rs6000/rs6000.md | 8 +- gcc/config/rs6000/rs6000.opt | 4 + .../gcc.target/powerpc/predefine-p7-novsx.c | 22 ++++ .../powerpc/predefine-p8-noaltivec-novsx.c | 26 +++++ .../powerpc/predefine-p8-noaltivec.c | 26 +++++ .../gcc.target/powerpc/predefine-p8-novsx.c | 26 +++++ .../powerpc/predefine-p8-pragma-vsx.c | 101 ++++++++++++++++++ .../gcc.target/powerpc/predefine-p9-novsx.c | 26 +++++ 13 files changed, 245 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/gcc.target/powerpc/predefine-p7-novsx.c create mode 100644 gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec-novsx.c create mode 100644 gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec.c create mode 100644 gcc/testsuite/gcc.target/powerpc/predefine-p8-novsx.c create mode 100644 gcc/testsuite/gcc.target/powerpc/predefine-p8-pragma-vsx.c create mode 100644 gcc/testsuite/gcc.target/powerpc/predefine-p9-novsx.c diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc index e7d6204074cc..320affd79e36 100644 --- a/gcc/config/rs6000/rs6000-builtin.cc +++ b/gcc/config/rs6000/rs6000-builtin.cc @@ -165,7 +165,7 @@ rs6000_builtin_is_supported (enum rs6000_gen_builtins fncode) case ENB_P7_64: return TARGET_POPCNTD && TARGET_POWERPC64; case ENB_P8: - return TARGET_DIRECT_MOVE; + return TARGET_POWER8; case ENB_P8V: return TARGET_P8_VECTOR; case ENB_P9: diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc index 647f20de7f2a..bd493ab87c5a 100644 --- a/gcc/config/rs6000/rs6000-c.cc +++ b/gcc/config/rs6000/rs6000-c.cc @@ -429,7 +429,7 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR6"); if ((flags & OPTION_MASK_POPCNTD) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR7"); - if ((flags & OPTION_MASK_P8_VECTOR) != 0) + if ((flags & OPTION_MASK_POWER8) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR8"); if ((flags & OPTION_MASK_MODULO) != 0) rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR9"); diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def index 45dd5a859012..6ee678e69c32 100644 --- a/gcc/config/rs6000/rs6000-cpus.def +++ b/gcc/config/rs6000/rs6000-cpus.def @@ -47,6 +47,7 @@ fusion here, instead set it in rs6000.cc if we are tuning for a power8 system. */ #define ISA_2_7_MASKS_SERVER (ISA_2_6_MASKS_SERVER \ + | OPTION_MASK_POWER8 \ | OPTION_MASK_P8_VECTOR \ | OPTION_MASK_CRYPTO \ | OPTION_MASK_EFFICIENT_UNALIGNED_VSX \ @@ -130,6 +131,7 @@ | OPTION_MASK_MODULO \ | OPTION_MASK_MULHW \ | OPTION_MASK_NO_UPDATE \ + | OPTION_MASK_POWER8 \ | OPTION_MASK_P8_FUSION \ | OPTION_MASK_P8_VECTOR \ | OPTION_MASK_P9_MINMAX \ diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc index c241371147c4..117999613d83 100644 --- a/gcc/config/rs6000/rs6000.cc +++ b/gcc/config/rs6000/rs6000.cc @@ -3807,11 +3807,10 @@ rs6000_option_override_internal (bool global_init_p) "-mmultiple"); } - /* If little-endian, default to -mstrict-align on older processors. - Testing for direct_move matches power8 and later. */ + /* If little-endian, default to -mstrict-align on older processors. */ if (!BYTES_BIG_ENDIAN && !(processor_target_table[tune_index].target_enable - & OPTION_MASK_P8_VECTOR)) + & OPTION_MASK_POWER8)) rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN; /* Add some warnings for VSX. */ @@ -3897,7 +3896,7 @@ rs6000_option_override_internal (bool global_init_p) else rs6000_isa_flags |= ISA_3_0_MASKS_SERVER; } - else if (TARGET_P8_VECTOR || TARGET_DIRECT_MOVE || TARGET_CRYPTO) + else if (TARGET_P8_VECTOR || TARGET_POWER8 || TARGET_CRYPTO) rs6000_isa_flags |= (ISA_2_7_MASKS_SERVER & ~ignore_masks); else if (TARGET_VSX) rs6000_isa_flags |= (ISA_2_6_MASKS_SERVER & ~ignore_masks); diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 77d045c9f6e6..2cde2e329b0d 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -490,7 +490,7 @@ extern int rs6000_vector_align[]; memory support. */ #define TARGET_SYNC_HI_QI (TARGET_QUAD_MEMORY \ || TARGET_QUAD_MEMORY_ATOMIC \ - || TARGET_DIRECT_MOVE) + || TARGET_POWER8) #define TARGET_SYNC_TI TARGET_QUAD_MEMORY_ATOMIC diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index bc8bc6ab060b..ac5651d7420c 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -355,7 +355,7 @@ (const (symbol_ref "(enum attr_cpu) rs6000_tune"))) ;; The ISA we implement. -(define_attr "isa" "any,p5,p6,p7,p7v,p8v,p9,p9v,p9kf,p9tf,p10" +(define_attr "isa" "any,p5,p6,p7,p7v,p8,p8v,p9,p9v,p9kf,p9tf,p10" (const_string "any")) ;; Is this alternative enabled for the current CPU/ISA/etc.? @@ -380,6 +380,10 @@ (match_test "TARGET_VSX")) (const_int 1) + (and (eq_attr "isa" "p8") + (match_test "TARGET_POWER8")) + (const_int 1) + (and (eq_attr "isa" "p8v") (match_test "TARGET_P8_VECTOR")) (const_int 1) @@ -14305,7 +14309,7 @@ AIX does not support the dcbtstt and dcbtt extended mnemonics. The AIX assembler does not support the three operand form of dcbt and dcbtst on Power 7 (-mpwr7). */ - int inst_select = INTVAL (operands[2]) || !TARGET_DIRECT_MOVE; + int inst_select = INTVAL (operands[2]) || !TARGET_POWER8; if (REG_P (operands[0])) { diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index dfd5051b964e..e8ca70340df3 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -470,6 +470,10 @@ Save the TOC in the prologue for indirect calls rather than inline. mvsx-timode Target RejectNegative Undocumented Ignore +;; This option exists only to create its MASK. It is not intended for users. +mpower8-internal +Target Undocumented Mask(POWER8) Var(rs6000_isa_flags) Warn(Do not use %<-mpower8-internal%>; use %<-mcpu=power8%> instead) + mpower8-fusion Target Mask(P8_FUSION) Var(rs6000_isa_flags) Fuse certain integer operations together for better performance on power8. diff --git a/gcc/testsuite/gcc.target/powerpc/predefine-p7-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefine-p7-novsx.c new file mode 100644 index 000000000000..bebe62d8f48c --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefine-p7-novsx.c @@ -0,0 +1,22 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power7 -mno-vsx" } */ + +/* Verify we correctly set the correct set of predefined macros + for the given set of options. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef __ALTIVEC__ +#error "__ALTIVEC__ should be defined for this test" +#endif + +#ifdef _ARCH_PWR8 +#error "_ARCH_PWR8 should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec-novsx.c new file mode 100644 index 000000000000..9d118b44fe84 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec-novsx.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power8 -mno-altivec -mno-vsx" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power8 and after disabling + both altivec and vsx. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifdef _ARCH_PWR9 +#error "_ARCH_PWR9 should not be defined for this test" +#endif + +#ifdef __ALTIVEC__ +#error "__ALTIVEC__ should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec.c b/gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec.c new file mode 100644 index 000000000000..5d2a7b852b10 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefine-p8-noaltivec.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power8 -mno-altivec -w" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power8 and after disabling altivec. + The -w option is used to silence the -mno-altivec disables -mvsx warning. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifdef _ARCH_PWR9 +#error "_ARCH_PWR9 should not be defined for this test" +#endif + +#ifdef __ALTIVEC__ +#error "__ALTIVEC__ should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefine-p8-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefine-p8-novsx.c new file mode 100644 index 000000000000..5eeadf421b20 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefine-p8-novsx.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power8 -mno-vsx" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power8 and after disabling vsx. + This also confirms __ALTIVEC__ remains set when VSX is disabled. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifndef __ALTIVEC__ +#error "__ALTIVEC__ should be defined for this test" +#endif + +#ifdef _ARCH_PWR9 +#error "_ARCH_PWR9 should not be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif diff --git a/gcc/testsuite/gcc.target/powerpc/predefine-p8-pragma-vsx.c b/gcc/testsuite/gcc.target/powerpc/predefine-p8-pragma-vsx.c new file mode 100644 index 000000000000..aed3068f1174 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefine-p8-pragma-vsx.c @@ -0,0 +1,101 @@ +/* PR target/101865 */ +/* { dg-do run } */ +/* { dg-require-effective-target p8vector_hw } */ +/* { dg-options "-mdejagnu-cpu=power8 -mvsx" } */ + +/* Verify we correctly set our predefined macros in the face of #pragma usage. */ + +#include <stdio.h> +#include <stdlib.h> + +volatile int power8_set; +volatile int vsx_set; + +void +test_default (void) +{ +#ifdef _ARCH_PWR8 + power8_set=1; +#else + power8_set=0; +#endif +#ifdef __VSX__ + vsx_set=1; +#else + vsx_set=0; +#endif +} + +#pragma GCC target "no-vsx" +void +test_no_vsx (void) +{ +#ifdef _ARCH_PWR8 + power8_set=1; +#else + power8_set=0; +#endif +#ifdef __VSX__ + vsx_set=1; +#else + vsx_set=0; +#endif +} + +#pragma GCC reset_options +void +test_reset_options (void) +{ +#ifdef _ARCH_PWR8 + power8_set=1; +#else + power8_set=0; +#endif +#ifdef __VSX__ + vsx_set=1; +#else + vsx_set=0; +#endif +} + +int +main (void) +{ + test_default (); + if (!power8_set) + { + printf ("_ARCH_PWR8 is not set.\n"); + abort (); + } + if (!vsx_set) + { + printf ("__VSX__ is not set.\n"); + abort (); + } + + test_no_vsx (); + if (!power8_set) + { + printf ("_ARCH_PWR8 is not set.\n"); + abort (); + } + if (vsx_set) + { + printf ("__VSX__ is unexpectedly set.\n"); + abort (); + } + + test_reset_options (); + if (!power8_set) + { + printf ("_ARCH_PWR8 is not set.\n"); + abort (); + } + if (!vsx_set) + { + printf ("__VSX__ is not set.\n"); + abort (); + } + + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/predefine-p9-novsx.c b/gcc/testsuite/gcc.target/powerpc/predefine-p9-novsx.c new file mode 100644 index 000000000000..d8f12275fd0e --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/predefine-p9-novsx.c @@ -0,0 +1,26 @@ +/* PR target/101865 */ +/* { dg-do preprocess } */ +/* { dg-options "-mdejagnu-cpu=power9 -mno-vsx" } */ + +/* Verify _ARCH_PWR8 is defined for -mcpu=power9 and after disabling vsx. + This also confirms __ALTIVEC__ remains set when VSX is disabled. */ + +#ifndef _ARCH_PWR7 +#error "_ARCH_PWR7 should be defined for this test" +#endif + +#ifndef _ARCH_PWR8 +#error "_ARCH_PWR8 should be defined for this test" +#endif + +#ifndef _ARCH_PWR9 +#error "_ARCH_PWR9 should be defined for this test" +#endif + +#ifndef __ALTIVEC__ +#error "__ALTIVEC__ should be defined for this test" +#endif + +#ifdef __VSX__ +#error "__VSX__ should not be defined for this test" +#endif From 6039925631780741ba77666ef2ef743aa2a925a8 Mon Sep 17 00:00:00 2001 From: Marek Polacek <polacek@redhat.com> Date: Mon, 11 Mar 2024 17:45:55 -0400 Subject: [PATCH 537/551] c++: ICE with temporary of class type in array DMI [PR109966] This ICE started with the fairly complicated r13-765. We crash in gimplify_var_or_parm_decl because a stray VAR_DECL leaked there. The problem is ultimately that potential_prvalue_result_of wasn't correctly handling arrays and replace_placeholders_for_class_temp_r replaced a PLACEHOLDER_EXPR in a TARGET_EXPR which is used in the context of copy elision. If I have M m[2] = { M{""}, M{""} }; then we don't invoke the M(const M&) copy-ctor. One part of the fix is to use TARGET_EXPR_ELIDING_P rather than potential_prvalue_result_of. That unfortunately doesn't handle the case like struct N { N(M); }; N arr[2] = { M{""}, M{""} }; because TARGET_EXPRs that initialize a function argument are not marked TARGET_EXPR_ELIDING_P even though gimplify_arg drops such TARGET_EXPRs on the floor. We can use a pset to avoid replacing placeholders in them. I made an attempt to use set_target_expr_eliding in convert_for_arg_passing but that regressed constexpr-diag1.C, and does not seem like a prudent change in stage 4 anyway. PR c++/109966 gcc/cp/ChangeLog: * typeck2.cc (potential_prvalue_result_of): Remove. (replace_placeholders_for_class_temp_r): Check TARGET_EXPR_ELIDING_P. Use a pset. Don't replace_placeholders in TARGET_EXPRs that initialize a function argument. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/nsdmi-aggr20.C: New test. * g++.dg/cpp1y/nsdmi-aggr21.C: New test. --- gcc/cp/typeck2.cc | 55 ++++++--------------- gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C | 17 +++++++ gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C | 59 +++++++++++++++++++++++ 3 files changed, 92 insertions(+), 39 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C create mode 100644 gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C diff --git a/gcc/cp/typeck2.cc b/gcc/cp/typeck2.cc index 31198b2f9f58..2985bfdf9ec1 100644 --- a/gcc/cp/typeck2.cc +++ b/gcc/cp/typeck2.cc @@ -1399,41 +1399,6 @@ digest_init_flags (tree type, tree init, int flags, tsubst_flags_t complain) return digest_init_r (type, init, 0, flags, complain); } -/* Return true if SUBOB initializes the same object as FULL_EXPR. - For instance: - - A a = A{}; // initializer - A a = (A{}); // initializer - A a = (1, A{}); // initializer - A a = true ? A{} : A{}; // initializer - auto x = A{}.x; // temporary materialization - auto x = foo(A{}); // temporary materialization - - FULL_EXPR is the whole expression, SUBOB is its TARGET_EXPR subobject. */ - -static bool -potential_prvalue_result_of (tree subob, tree full_expr) -{ - if (subob == full_expr) - return true; - else if (TREE_CODE (full_expr) == TARGET_EXPR) - { - tree init = TARGET_EXPR_INITIAL (full_expr); - if (TREE_CODE (init) == COND_EXPR) - return (potential_prvalue_result_of (subob, TREE_OPERAND (init, 1)) - || potential_prvalue_result_of (subob, TREE_OPERAND (init, 2))); - else if (TREE_CODE (init) == COMPOUND_EXPR) - return potential_prvalue_result_of (subob, TREE_OPERAND (init, 1)); - /* ??? I don't know if this can be hit. */ - else if (TREE_CODE (init) == PAREN_EXPR) - { - gcc_checking_assert (false); - return potential_prvalue_result_of (subob, TREE_OPERAND (init, 0)); - } - } - return false; -} - /* Callback to replace PLACEHOLDER_EXPRs in a TARGET_EXPR (which isn't used in the context of guaranteed copy elision). */ @@ -1441,11 +1406,13 @@ static tree replace_placeholders_for_class_temp_r (tree *tp, int *, void *data) { tree t = *tp; - tree full_expr = *static_cast<tree *>(data); + auto pset = static_cast<hash_set<tree> *>(data); /* We're looking for a TARGET_EXPR nested in the whole expression. */ if (TREE_CODE (t) == TARGET_EXPR - && !potential_prvalue_result_of (t, full_expr)) + /* That serves as temporary materialization, not an initializer. */ + && !TARGET_EXPR_ELIDING_P (t) + && !pset->add (t)) { tree init = TARGET_EXPR_INITIAL (t); while (TREE_CODE (init) == COMPOUND_EXPR) @@ -1460,6 +1427,16 @@ replace_placeholders_for_class_temp_r (tree *tp, int *, void *data) gcc_checking_assert (!find_placeholders (init)); } } + /* TARGET_EXPRs initializing function arguments are not marked as eliding, + even though gimplify_arg drops them on the floor. Don't go replacing + placeholders in them. */ + else if (TREE_CODE (t) == CALL_EXPR || TREE_CODE (t) == AGGR_INIT_EXPR) + for (int i = 0; i < call_expr_nargs (t); ++i) + { + tree arg = get_nth_callarg (t, i); + if (TREE_CODE (arg) == TARGET_EXPR && !TARGET_EXPR_ELIDING_P (arg)) + pset->add (arg); + } return NULL_TREE; } @@ -1507,8 +1484,8 @@ digest_nsdmi_init (tree decl, tree init, tsubst_flags_t complain) temporary materialization does not occur when initializing an object from a prvalue of the same type, therefore we must not replace the placeholder with a temporary object so that it can be elided. */ - cp_walk_tree (&init, replace_placeholders_for_class_temp_r, &init, - nullptr); + hash_set<tree> pset; + cp_walk_tree (&init, replace_placeholders_for_class_temp_r, &pset, nullptr); return init; } diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C new file mode 100644 index 000000000000..4796d861e83f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr20.C @@ -0,0 +1,17 @@ +// PR c++/109966 +// { dg-do compile { target c++14 } } + +#define SA(X) static_assert ((X),#X) + +struct A { + int a; + int b = a; +}; + +struct B { + int x = 0; + int y[1]{A{x}.b}; +}; + +constexpr B b = { }; +SA(b.y[0] == 0); diff --git a/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C new file mode 100644 index 000000000000..efec45bc1a82 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/nsdmi-aggr21.C @@ -0,0 +1,59 @@ +// PR c++/109966 +// { dg-do compile { target c++14 } } + +struct k { + k(const char *); +}; +struct M { + k name; + int j = 42; + int i = j; +}; + +M m = M{""}; + +struct S { + M arr1[1]{M{""}}; + M a1[1] = { (M{""}) }; + M a2[1] = { (true, M{""}) }; + M a3[1] = { true ? M{""} : M{""} }; + M arr2[2]{M{""}, M{""}}; + M arr3[3]{M{""}, M{""}, M{""}}; + + M arr1e[1] = {M{""}}; + M arr2e[2] = {M{""}, M{""}}; + M arr3e[3] = {M{""}, M{""}, M{""}}; + + M arr1l[1] = { m }; + M arr2l[2] = { m, m }; + M arr3l[3] = { m, m, m }; + + M m1 = M{""}; + M m2 = m; + M m3{M{""}}; + M m4 = {M{""}}; +} o; + +struct N { + N(M); +}; + +struct Z { + N arr1[1]{ M{""} }; + N arr2[2]{ M{""}, M{""} }; + N arr1e[1] = { M{""} }; + N arr2e[2] = { M{""}, M{""} }; +} z; + +struct Y { + k name; + int j = 42; + int i = j; + operator M(); +}; + +struct W { + M arr1[1]{ Y{""} }; + M arr2[2]{ Y{""}, Y{""} }; + M arr3[3]{ Y{""}, Y{""}, Y{""} }; +} w; From b18162759a6d464256b0195bc6447f0a1c9dd5dd Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Thu, 11 Apr 2024 17:00:30 +0100 Subject: [PATCH 538/551] aarch64: Enable +cssc for armv8.9-a FEAT_CSSC is mandatory in the architecture from Armv8.9. gcc/ChangeLog: * config/aarch64/aarch64-arches.def: Add CSSC to V8_9A dependencies. --- gcc/config/aarch64/aarch64-arches.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/aarch64/aarch64-arches.def b/gcc/config/aarch64/aarch64-arches.def index 9bec30e9203b..4634b272e280 100644 --- a/gcc/config/aarch64/aarch64-arches.def +++ b/gcc/config/aarch64/aarch64-arches.def @@ -39,7 +39,7 @@ AARCH64_ARCH("armv8.5-a", generic_armv8_a, V8_5A, 8, (V8_4A, SB, SSBS AARCH64_ARCH("armv8.6-a", generic_armv8_a, V8_6A, 8, (V8_5A, I8MM, BF16)) AARCH64_ARCH("armv8.7-a", generic_armv8_a, V8_7A, 8, (V8_6A)) AARCH64_ARCH("armv8.8-a", generic_armv8_a, V8_8A, 8, (V8_7A, MOPS)) -AARCH64_ARCH("armv8.9-a", generic_armv8_a, V8_9A, 8, (V8_8A)) +AARCH64_ARCH("armv8.9-a", generic_armv8_a, V8_9A, 8, (V8_8A, CSSC)) AARCH64_ARCH("armv8-r", generic_armv8_a, V8R , 8, (V8_4A)) AARCH64_ARCH("armv9-a", generic_armv9_a, V9A , 9, (V8_5A, SVE2)) AARCH64_ARCH("armv9.1-a", generic_armv9_a, V9_1A, 9, (V8_6A, V9A)) From 967424dcde6bf2d821b581b8f75b5a839e650fed Mon Sep 17 00:00:00 2001 From: Andrew Carlotti <andrew.carlotti@arm.com> Date: Fri, 12 Apr 2024 02:09:57 +0100 Subject: [PATCH 539/551] aarch64: Add rcpc3 dependency on rcpc2 and rcpc We don't yet have a separate feature flag for FEAT_LRCPC2 (and adding one will require extending the feature bitmask). Instead, make the FEAT_LRCPC2 patterns available when either armv8.4-a or +rcpc3 is specified. We already have a +rcpc flag, so this dependency can be specified directly. Also add an explicit dependance on +rcpc to the FEAT_LRCPC2 patterns, so that they are disabled with armv8.4-a+norcpc. The cpunative test needed updating because it used an invalid Features list, since lrcpc3 requires both ilrcpc and lrcpc to be present. Without this change, host_detect_local_cpu would return the architecture string 'armv8-a+dotprod+crc+crypto+rcpc3+norcpc'. gcc/ChangeLog: * config/aarch64/aarch64-option-extensions.def: Add RCPC to RCPC3 dependencies. * config/aarch64/aarch64.h (AARCH64_ISA_RCPC8_4): Add test for RCPC3 bit gcc/testsuite/ChangeLog: * gcc.target/aarch64/cpunative/info_24: Include lrcpc and ilrcpc. --- gcc/config/aarch64/aarch64-option-extensions.def | 2 +- gcc/config/aarch64/aarch64.h | 3 ++- gcc/testsuite/gcc.target/aarch64/cpunative/info_24 | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 3155eccd39c8..42ec0eec31e2 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -153,7 +153,7 @@ AARCH64_FMV_FEATURE("fp16fml", FP16FML, (F16FML)) AARCH64_OPT_FMV_EXTENSION("rcpc", RCPC, (), (), (), "lrcpc") -AARCH64_OPT_FMV_EXTENSION("rcpc3", RCPC3, (), (), (), "lrcpc3") +AARCH64_OPT_FMV_EXTENSION("rcpc3", RCPC3, (RCPC), (), (), "lrcpc3") AARCH64_OPT_FMV_EXTENSION("i8mm", I8MM, (SIMD), (), (), "i8mm") diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 45e901cda644..4fa1dfc79065 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -242,7 +242,8 @@ constexpr auto AARCH64_FL_DEFAULT_ISA_MODE = AARCH64_FL_SM_OFF; #define AARCH64_ISA_SHA3 (aarch64_isa_flags & AARCH64_FL_SHA3) #define AARCH64_ISA_F16FML (aarch64_isa_flags & AARCH64_FL_F16FML) #define AARCH64_ISA_RCPC (aarch64_isa_flags & AARCH64_FL_RCPC) -#define AARCH64_ISA_RCPC8_4 (aarch64_isa_flags & AARCH64_FL_V8_4A) +#define AARCH64_ISA_RCPC8_4 ((AARCH64_ISA_RCPC && AARCH64_ISA_V8_4A) \ + || (aarch64_isa_flags & AARCH64_FL_RCPC3)) #define AARCH64_ISA_RNG (aarch64_isa_flags & AARCH64_FL_RNG) #define AARCH64_ISA_V8_5A (aarch64_isa_flags & AARCH64_FL_V8_5A) #define AARCH64_ISA_TME (aarch64_isa_flags & AARCH64_FL_TME) diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_24 b/gcc/testsuite/gcc.target/aarch64/cpunative/info_24 index 8d3c16a10910..3c64e00ca3a4 100644 --- a/gcc/testsuite/gcc.target/aarch64/cpunative/info_24 +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_24 @@ -1,8 +1,8 @@ processor : 0 BogoMIPS : 100.00 -Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp lrcpc3 +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp lrcpc ilrcpc lrcpc3 CPU implementer : 0xfe CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd08 -CPU revision : 2 \ No newline at end of file +CPU revision : 2 From 1667962ae755db27965778b8c8c684c6c0c4da21 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sat, 13 Apr 2024 00:17:47 +0000 Subject: [PATCH 540/551] Daily bump. --- contrib/ChangeLog | 4 ++ gcc/ChangeLog | 79 ++++++++++++++++++++++++++++++ gcc/DATESTAMP | 2 +- gcc/analyzer/ChangeLog | 5 ++ gcc/c-family/ChangeLog | 6 +++ gcc/cp/ChangeLog | 82 +++++++++++++++++++++++++++++++ gcc/testsuite/ChangeLog | 104 ++++++++++++++++++++++++++++++++++++++++ libgfortran/ChangeLog | 4 ++ 8 files changed, 285 insertions(+), 1 deletion(-) diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 3df6ae6e8dea..cdb63c3aaad4 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,7 @@ +2024-04-12 Filip Kastl <fkastl@suse.cz> + + * check-params-in-docs.py: Ignore target specific params. + 2024-04-11 Martin Jambor <mjambor@suse.cz> * check-params-in-docs.py (ignored): Add diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 36dabbd2503c..91060182dcd5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,82 @@ +2024-04-12 Andrew Carlotti <andrew.carlotti@arm.com> + + * config/aarch64/aarch64-option-extensions.def: Add RCPC to + RCPC3 dependencies. + * config/aarch64/aarch64.h (AARCH64_ISA_RCPC8_4): Add test for + RCPC3 bit + +2024-04-12 Andrew Carlotti <andrew.carlotti@arm.com> + + * config/aarch64/aarch64-arches.def: Add CSSC to V8_9A + dependencies. + +2024-04-12 Will Schmidt <will_schmidt@linux.ibm.com> + Peter Bergner <bergner@linux.ibm.com> + + PR target/101865 + * config/rs6000/rs6000-builtin.cc (rs6000_builtin_is_supported): Use + TARGET_POWER8. + * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Use + OPTION_MASK_POWER8. + * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Add OPTION_MASK_POWER8. + (ISA_2_7_MASKS_SERVER): Likewise. + * config/rs6000/rs6000.cc (rs6000_option_override_internal): Update + comment. Use OPTION_MASK_POWER8 and TARGET_POWER8. + * config/rs6000/rs6000.h (TARGET_SYNC_HI_QI): Use TARGET_POWER8. + * config/rs6000/rs6000.md (define_attr "isa"): Add p8. + (define_attr "enabled"): Handle it. + (define_insn "prefetch"): Use TARGET_POWER8. + * config/rs6000/rs6000.opt (mpower8-internal): New. + +2024-04-12 Jason Merrill <jason@redhat.com> + Patrick Palka <ppalka@redhat.com> + + PR c++/113141 + * doc/invoke.texi: Document -Wcast-user-defined. + +2024-04-12 Tatsuyuki Ishi <ishitatsuyuki@gmail.com> + + * config/riscv/riscv.opt.urls: Regenerated. + +2024-04-12 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/114666 + * match.pd (`!a?b:c`): Reject signed types for the condition. + (`a?~t:t`): Likewise. + +2024-04-12 Richard Sandiford <richard.sandiford@arm.com> + + * config/aarch64/aarch64.cc (aarch64_output_sme_zero_za): Require + all tiles to have the same suffix. + +2024-04-12 Pan Li <pan2.li@intel.com> + + * config/riscv/riscv.cc (riscv_vector_float_type_p): Take int + as the return value instead of unsigned. + (riscv_vector_element_bitsize): Ditto. + (riscv_vector_required_min_vlen): Ditto. + (riscv_validate_vector_type): Take int type for local variable(s). + +2024-04-12 Jakub Jelinek <jakub@redhat.com> + + * tree-cfg.cc (gimple_verify_flow_info): Make the misplaced + returns_twice diagnostics translatable. + +2024-04-12 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/114687 + * gimple-iterator.cc (gsi_safe_insert_before): Only use + edge_before_returns_twice_call if bb_has_abnormal_pred. + (gsi_safe_insert_seq_before): Likewise. + * gimple-lower-bitint.cc (bitint_large_huge::lower_call): Only + push to m_returns_twice_calls if bb_has_abnormal_pred. + +2024-04-12 Pan Li <pan2.li@intel.com> + + PR target/114639 + * config/riscv/riscv.cc (riscv_function_value_regno_p): Add + TARGET_VECTOR predicate for V_RETURN regno. + 2024-04-11 David Faust <david.faust@oracle.com> * btfout.cc (btf_asm_type_ref): Convert IDs to BTF internally and diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index ec62272a850d..a25dc7472c00 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240412 +20240413 diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog index 7f200cf20718..113dd8ade453 100644 --- a/gcc/analyzer/ChangeLog +++ b/gcc/analyzer/ChangeLog @@ -1,3 +1,8 @@ +2024-04-12 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * region-model.cc (region_model::check_region_size): Bail out + early on function pointers. + 2024-04-10 David Malcolm <dmalcolm@redhat.com> PR analyzer/114472 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index e2bf9e57728f..5c577bbc8149 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2024-04-12 Jason Merrill <jason@redhat.com> + Patrick Palka <ppalka@redhat.com> + + PR c++/113141 + * c.opt: Add -Wcast-user-defined. + 2024-04-05 Marek Polacek <polacek@redhat.com> * c-warn.cc (warn_about_parentheses): Remove an #undef. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c77e28013166..9282af5680ac 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,85 @@ +2024-04-12 Marek Polacek <polacek@redhat.com> + + PR c++/109966 + * typeck2.cc (potential_prvalue_result_of): Remove. + (replace_placeholders_for_class_temp_r): Check TARGET_EXPR_ELIDING_P. + Use a pset. Don't replace_placeholders in TARGET_EXPRs that initialize + a function argument. + +2024-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/99426 + * module.cc (merge_kind::MK_local_type): New enumerator. + (merge_kind_name): Update. + (trees_out::chained_decls): Move BLOCK-specific handling + of DECL_LOCAL_DECL_P decls to ... + (trees_out::core_vals) <case BLOCK>: ... here. Stream + BLOCK_VARS manually. + (trees_in::core_vals) <case BLOCK>: Stream BLOCK_VARS + manually. Handle deduplicated local types.. + (trees_out::key_local_type): Define. + (trees_in::key_local_type): Define. + (trees_out::get_merge_kind) <case FUNCTION_DECL>: Return + MK_local_type for a local type. + (trees_out::key_mergeable) <case FUNCTION_DECL>: Use + key_local_type. + (trees_in::key_mergeable) <case FUNCTION_DECL>: Likewise. + (trees_in::is_matching_decl): Be flexible with type mismatches + for local entities. + (trees_in::register_duplicate): Also register the + DECL_TEMPLATE_RESULT of a TEMPLATE_DECL as a duplicate. + (depset_cmp): Return 0 for equal IDENTIFIER_HASH_VALUEs. + +2024-04-12 Jason Merrill <jason@redhat.com> + Patrick Palka <ppalka@redhat.com> + + PR c++/113141 + * call.cc (reference_binding): For an invalid cast, warn and don't + recalculate. + +2024-04-12 Jason Merrill <jason@redhat.com> + Patrick Palka <ppalka@redhat.com> + + DR 1996 + PR c++/113141 + * call.cc (reference_binding): Check direct binding from + a single-element list. + +2024-04-12 Jakub Jelinek <jakub@redhat.com> + + PR c++/114691 + * semantics.cc (simplify_loop_decl_cond): Use cp_build_unary_op with + TRUTH_NOT_EXPR on ANNOTATE_EXPR argument (if any) rather than + ANNOTATE_EXPR itself. + +2024-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/114393 + * pt.cc (tsubst_lambda_expr): Also defer all dependent + substitution. + +2024-04-12 Jakub Jelinek <jakub@redhat.com> + + PR c++/114426 + * constexpr.cc (is_valid_constexpr_fn): Return false/diagnose with + complain destructors in classes with virtual bases. + +2024-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/114393 + PR c++/107457 + PR c++/93595 + * cp-tree.h (LAMBDA_EXPR_EXTRA_ARGS): Define. + (tree_lambda_expr::extra_args): New field. + * module.cc (trees_out::core_vals) <case LAMBDA_EXPR>: Stream + LAMBDA_EXPR_EXTRA_ARGS. + (trees_in::core_vals) <case LAMBDA_EXPR>: Likewise. + * pt.cc (has_extra_args_mechanism_p): Return true for LAMBDA_EXPR. + (tree_extra_args): Handle LAMBDA_EXPR. + (tsubst_lambda_expr): Use LAMBDA_EXPR_EXTRA_ARGS to defer templated + substitution into a lambda-expr if we lost the template context. + Add sanity check for error_mark_node result from begin_lambda_type. + 2024-04-11 Patrick Palka <ppalka@redhat.com> PR c++/114303 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 65897f77ab47..3561cfe9eac1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,107 @@ +2024-04-12 Andrew Carlotti <andrew.carlotti@arm.com> + + * gcc.target/aarch64/cpunative/info_24: Include lrcpc and ilrcpc. + +2024-04-12 Marek Polacek <polacek@redhat.com> + + PR c++/109966 + * g++.dg/cpp1y/nsdmi-aggr20.C: New test. + * g++.dg/cpp1y/nsdmi-aggr21.C: New test. + +2024-04-12 Will Schmidt <will_schmidt@linux.ibm.com> + Peter Bergner <bergner@linux.ibm.com> + + PR target/101865 + * gcc.target/powerpc/predefine-p7-novsx.c: New test. + * gcc.target/powerpc/predefine-p8-noaltivec-novsx.c: New test. + * gcc.target/powerpc/predefine-p8-noaltivec.c: New test. + * gcc.target/powerpc/predefine-p8-novsx.c: New test. + * gcc.target/powerpc/predefine-p8-pragma-vsx.c: New test. + * gcc.target/powerpc/predefine-p9-novsx.c: New test. + +2024-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/99426 + * g++.dg/modules/merge-17.h: New test. + * g++.dg/modules/merge-17_a.H: New test. + * g++.dg/modules/merge-17_b.C: New test. + * g++.dg/modules/xtreme-header-7_a.H: New test. + * g++.dg/modules/xtreme-header-7_b.C: New test. + +2024-04-12 Jason Merrill <jason@redhat.com> + Patrick Palka <ppalka@redhat.com> + + PR c++/113141 + * g++.dg/conversion/ref12.C: New test. + +2024-04-12 Jason Merrill <jason@redhat.com> + Patrick Palka <ppalka@redhat.com> + + DR 1996 + PR c++/113141 + * g++.dg/cpp0x/initlist-ref1.C: New test. + * g++.dg/cpp0x/initlist-ref2.C: New test. + * g++.dg/cpp0x/initlist-ref3.C: New test. + +2024-04-12 Jakub Jelinek <jakub@redhat.com> + + PR c++/114691 + * g++.dg/ext/pr114691.C: New test. + +2024-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/114393 + * g++.dg/cpp2a/lambda-targ2a.C: New test. + +2024-04-12 Jakub Jelinek <jakub@redhat.com> + + PR c++/114426 + * g++.dg/cpp2a/pr114426.C: New test. + * g++.dg/cpp2a/constexpr-dtor16.C: New test. + +2024-04-12 Andrew Pinski <quic_apinski@quicinc.com> + + PR tree-optimization/114666 + * gcc.c-torture/execute/bitfld-signed1-1.c: New test. + +2024-04-12 Richard Sandiford <richard.sandiford@arm.com> + + * gcc.target/aarch64/sme/acle-asm/zero_mask_za.c (zero_mask_za_ab) + (zero_mask_za_d7, zero_mask_za_bf): Expect a list of .d tiles instead + of a mixture. + +2024-04-12 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * gcc.dg/tree-ssa/range-sincos.c: Xfail for s390. + * gcc.dg/tree-ssa/vrp-float-abs-1.c: Dito. + +2024-04-12 Patrick Palka <ppalka@redhat.com> + + PR c++/114393 + PR c++/107457 + PR c++/93595 + * g++.dg/cpp2a/lambda-targ2.C: New test. + * g++.dg/cpp2a/lambda-targ3.C: New test. + * g++.dg/cpp2a/lambda-targ4.C: New test. + +2024-04-12 Jakub Jelinek <jakub@redhat.com> + + PR sanitizer/114687 + * gcc.dg/asan/pr114687.c: New test. + +2024-04-12 Stefan Schulze Frielinghaus <stefansf@linux.ibm.com> + + * gcc.dg/tree-ssa/loop-interchange-16.c: Prevent loop unrolling + of the innermost loop. + +2024-04-12 Pan Li <pan2.li@intel.com> + + PR target/114639 + * gcc.target/riscv/pr114639-1.c: New test. + * gcc.target/riscv/pr114639-2.c: New test. + * gcc.target/riscv/pr114639-3.c: New test. + * gcc.target/riscv/pr114639-4.c: New test. + 2024-04-11 David Faust <david.faust@oracle.com> * gcc.dg/debug/btf/btf-bitfields-4.c: Add two new checks. diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 2ca69f1617b8..cdd9326d6af9 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,7 @@ +2024-04-12 Ian McInerney <i.mcinerney17@imperial.ac.uk> + + * runtime/error.c (gf_vsnprintf): Fix compilation + 2024-04-08 Tobias Burnus <tburnus@baylibre.com> PR libfortran/114304 From 5ec5791105caf859e06c47093188dd655862ccb3 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Fri, 12 Apr 2024 13:49:52 -0700 Subject: [PATCH 541/551] libstdc++: Update some baseline_symbols.txt (x32) * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Updated. --- .../abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt index dc69c47f4d76..ac11d5dba4d3 100644 --- a/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt @@ -497,6 +497,7 @@ FUNC:_ZNKSt11__timepunctIwE7_M_daysEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE8_M_am_pmEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11__timepunctIwE9_M_monthsEPPKw@@GLIBCXX_3.4 FUNC:_ZNKSt11logic_error4whatEv@@GLIBCXX_3.4 +FUNC:_ZNKSt12__basic_fileIcE13native_handleEv@@GLIBCXX_3.4.33 FUNC:_ZNKSt12__basic_fileIcE7is_openEv@@GLIBCXX_3.4 FUNC:_ZNKSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 FUNC:_ZNKSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEcvbEv@@GLIBCXX_3.4.31 @@ -3214,6 +3215,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEjjPKcj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC2EPcOS3_@@GLIBCXX_3.4.23 @@ -3366,6 +3368,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_disposeEv@@GLIBCX FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_M_replaceEjjPKwj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_capacityEj@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_S_allocateERS3_j@@GLIBCXX_3.4.32 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwOS3_@@GLIBCXX_3.4.23 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwOS3_@@GLIBCXX_3.4.23 @@ -4531,6 +4534,7 @@ FUNC:__cxa_allocate_exception@@CXXABI_1.3 FUNC:__cxa_bad_cast@@CXXABI_1.3 FUNC:__cxa_bad_typeid@@CXXABI_1.3 FUNC:__cxa_begin_catch@@CXXABI_1.3 +FUNC:__cxa_call_terminate@@CXXABI_1.3.15 FUNC:__cxa_call_unexpected@@CXXABI_1.3 FUNC:__cxa_current_exception_type@@CXXABI_1.3 FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6 @@ -4574,6 +4578,7 @@ OBJECT:0:CXXABI_1.3.11 OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.13 OBJECT:0:CXXABI_1.3.14 +OBJECT:0:CXXABI_1.3.15 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4611,6 +4616,7 @@ OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.30 OBJECT:0:GLIBCXX_3.4.31 OBJECT:0:GLIBCXX_3.4.32 +OBJECT:0:GLIBCXX_3.4.33 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 OBJECT:0:GLIBCXX_3.4.6 From 436ab7e8e8b16866d8a807af242560ad4fdff0d6 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Sat, 13 Apr 2024 10:52:32 -0400 Subject: [PATCH 542/551] c++/modules: optimize tree flag streaming One would expect consecutive calls to bytes_in/out::b for streaming adjacent bits, as is done for tree flag streaming, to at least be optimized by the compiler into individual bit operations using statically known bit positions (and ideally combined into larger sized reads/writes). Unfortunately this doesn't happen because the compiler has trouble tracking the values of this->bit_pos and this->bit_val across the calls, likely because the compiler doesn't know the value of 'this'. Thus for each consecutive bit stream operation, bit_pos and bit_val are loaded from 'this', checked if buffering is needed, and finally the bit is extracted from bit_val according to the (unknown) bit_pos, even though relative to the previous operation (if we didn't need to buffer) bit_val is unchanged and bit_pos is just 1 larger. This ends up being quite slow, with tree_node_bools taking 10% of time when streaming in the std module. This patch improves this by making tracking of bit_pos and bit_val easier for the compiler. Rather than bit_pos and bit_val being members of the (effectively global) bytes_in/out objects, this patch factors out the bit streaming code/state into separate classes bits_in/out that get constructed locally as needed for bit streaming. Since these objects are now clearly local, the compiler can more easily track their values and optimize away redundant buffering checks. And since bit streaming is intended to be batched it's natural for these new classes to be RAII-enabled such that the bit stream is flushed upon destruction. In order to make the most of this improved tracking of bit position, this patch changes parts where we conditionally stream a tree flag to unconditionally stream (the flag or a dummy value). That way the number of bits streamed and the respective bit positions are as statically known as reasonably possible. In lang_decl_bools and lang_type_bools this patch makes us flush the current bit buffer at the start so that subsequent bit positions are in turn statically known. And in core_bools, we can add explicit early exits utilizing invariants that the compiler can't figure out itself (e.g. a tree code can't have both TS_TYPE_COMMON and TS_DECL_COMMON, and if a tree code doesn't have TS_DECL_COMMON then it doesn't have TS_DECL_WITH_VIS). This patch also moves the definitions of the relevant streaming classes into anonymous namespaces so that the compiler can make more informed decisions about inlining their member functions. After this patch, compile time for a simple Hello World using the std module is reduced by 7% with a release compiler. The on-disk size of the std module increases by 0.4% (presumably due to the extra flushing done in lang_decl_bools and lang_type_bools). The bit stream out performance isn't improved as much as the stream in due to the spans/lengths instrumentation performed on stream out (which maybe should be disabled for release builds?) gcc/cp/ChangeLog: * module.cc: Update comment about classes defined within. (class data): Enclose in an anonymous namespace. (data::calc_crc): Moved from bytes::calc_crc. (class bytes): Remove. Move bit_flush to namespace scope. (class bytes_in): Enclose in an anonymous namespace. Inherit directly from data and adjust accordingly. Move b and bflush members to bits_in. (class bytes_out): As above. Remove is_set static data member. (bit_flush): Moved from class bytes. (struct bytes_in::bits_in): Define. (struct bytes_out::bits_out): Define. (bytes_in::stream_bits): Define. (bytes_out::stream_bits): Define. (bytes_out::bflush): Moved to bits_out/in. (bytes_in::bflush): Likewise (bytes_in::bfill): Removed. (bytes_out::b): Moved to bits_out/in. (bytes_in::b): Likewise. (class trees_in): Enclose in an anonymous namespace. (class trees_out): Enclose in an anonymous namespace. (trees_out::core_bools): Add bits_out/in parameter and use it. Unconditionally stream a bit for public_flag. Add early exits as appropriate. (trees_out::core_bools): Likewise. (trees_out::lang_decl_bools): Add bits_out/in parameter and use it. Flush the current bit buffer at the start. Unconditionally stream a bit for module_keyed_decls_p. (trees_in::lang_decl_bools): Likewise. (trees_out::lang_type_bools): Add bits_out/in parameter and use it. Flush the current bit buffer at the start. (trees_in::lang_type_bools): Likewise. (trees_out::tree_node_bools): Construct a bits_out object and use/pass it. (trees_in::tree_node_bools): Likewise. (trees_out::decl_value): Likewise. (trees_in::decl_value): Likewise. (module_state::write_define): Likewise. (module_state::read_define): Likewise. Reviewed-by: Jason Merrill <jason@redhat.com> --- gcc/cp/module.cc | 455 +++++++++++++++++++++++++++-------------------- 1 file changed, 262 insertions(+), 193 deletions(-) diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 9917a6abe4f8..bbed82652d4a 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -153,9 +153,11 @@ Classes used: data - buffer - bytes - data streamer - bytes_in : bytes - scalar reader - bytes_out : bytes - scalar writer + bytes_in : data - scalar reader + bytes_out : data - scalar writer + + bytes_in::bits_in - bit stream reader + bytes_out::bits_out - bit stream writer elf - ELROND format elf_in : elf - ELROND reader @@ -346,6 +348,7 @@ typedef hash_map<void *,signed,ptr_int_traits> ptr_int_hash_map; /* Variable length buffer. */ +namespace { class data { public: class allocator { @@ -393,6 +396,8 @@ class data { return res; } + unsigned calc_crc (unsigned) const; + public: void unuse (unsigned count) { @@ -402,6 +407,7 @@ class data { public: static allocator simple_memory; }; +} // anon namespace /* The simple data allocator. */ data::allocator data::simple_memory; @@ -447,46 +453,11 @@ data::allocator::shrink (char *ptr) XDELETEVEC (ptr); } -/* Byte streamer base. Buffer with read/write position and smarts - for single bits. */ - -class bytes : public data { -public: - typedef data parent; - -protected: - uint32_t bit_val; /* Bit buffer. */ - unsigned bit_pos; /* Next bit in bit buffer. */ - -public: - bytes () - :parent (), bit_val (0), bit_pos (0) - {} - ~bytes () - { - } - -protected: - unsigned calc_crc (unsigned) const; - -protected: - /* Finish bit packet. Rewind the bytes not used. */ - unsigned bit_flush () - { - gcc_assert (bit_pos); - unsigned bytes = (bit_pos + 7) / 8; - unuse (4 - bytes); - bit_pos = 0; - bit_val = 0; - return bytes; - } -}; - /* Calculate the crc32 of the buffer. Note the CRC is stored in the first 4 bytes, so don't include them. */ unsigned -bytes::calc_crc (unsigned l) const +data::calc_crc (unsigned l) const { return crc32 (0, (unsigned char *)buffer + 4, l - 4); } @@ -495,8 +466,9 @@ class elf_in; /* Byte stream reader. */ -class bytes_in : public bytes { - typedef bytes parent; +namespace { +class bytes_in : public data { + typedef data parent; protected: bool overrun; /* Sticky read-too-much flag. */ @@ -531,7 +503,6 @@ class bytes_in : public bytes { if (offset > size) set_overrun (); pos = offset; - bit_pos = bit_val = 0; } public: @@ -573,14 +544,7 @@ class bytes_in : public bytes { unsigned u32 (); /* Read uncompressed integer. */ public: - bool b (); /* Read a bool. */ - void bflush (); /* Completed a block of bools. */ - -private: - void bfill (); /* Get the next block of bools. */ - -public: - int c (); /* Read a char. */ + int c () ATTRIBUTE_UNUSED; /* Read a char. */ int i (); /* Read a signed int. */ unsigned u (); /* Read an unsigned int. */ size_t z (); /* Read a size_t. */ @@ -589,7 +553,11 @@ class bytes_in : public bytes { const char *str (size_t * = NULL); /* Read a string. */ const void *buf (size_t); /* Read a fixed-length buffer. */ cpp_hashnode *cpp_node (); /* Read a cpp node. */ + + struct bits_in; + bits_in stream_bits (); }; +} // anon namespace /* Verify the buffer's CRC is correct. */ @@ -610,8 +578,9 @@ class elf_out; /* Byte stream writer. */ -class bytes_out : public bytes { - typedef bytes parent; +namespace { +class bytes_out : public data { + typedef data parent; public: allocator *memory; /* Obtainer of memory. */ @@ -659,11 +628,7 @@ class bytes_out : public bytes { void u32 (unsigned); /* Write uncompressed integer. */ public: - void b (bool); /* Write bool. */ - void bflush (); /* Finish block of bools. */ - -public: - void c (unsigned char); /* Write unsigned char. */ + void c (unsigned char) ATTRIBUTE_UNUSED; /* Write unsigned char. */ void i (int); /* Write signed int. */ void u (unsigned); /* Write unsigned int. */ void z (size_t s); /* Write size_t. */ @@ -681,6 +646,9 @@ class bytes_out : public bytes { void buf (const void *, size_t); /* Write fixed length buffer. */ void *buf (size_t); /* Create a writable buffer */ + struct bits_out; + bits_out stream_bits (); + public: /* Format a NUL-terminated raw string. */ void printf (const char *, ...) ATTRIBUTE_PRINTF_2; @@ -694,13 +662,143 @@ class bytes_out : public bytes { /* Instrumentation. */ static unsigned spans[4]; static unsigned lengths[4]; - static int is_set; }; +} // anon namespace + +/* Finish bit packet. Rewind the bytes not used. */ + +static unsigned +bit_flush (data& bits, uint32_t& bit_val, unsigned& bit_pos) +{ + gcc_assert (bit_pos); + unsigned bytes = (bit_pos + 7) / 8; + bits.unuse (4 - bytes); + bit_pos = 0; + bit_val = 0; + return bytes; +} + +/* Bit stream reader (RAII-enabled). Bools are packed into bytes. You + cannot mix bools and non-bools. Use bflush to flush the current stream + of bools on demand. Upon destruction bflush is called. + + When reading, we don't know how many bools we'll read in. So read + 4 bytes-worth, and then rewind when flushing if we didn't need them + all. You can't have a block of bools closer than 4 bytes to the + end of the buffer. + + Both bits_in and bits_out maintain the necessary state for bit packing, + and since these objects are locally constructed the compiler can more + easily track their state across consecutive reads/writes and optimize + away redundant buffering checks. */ + +struct bytes_in::bits_in { + bytes_in& in; + uint32_t bit_val = 0; + unsigned bit_pos = 0; + + bits_in (bytes_in& in) + : in (in) + { } + + ~bits_in () + { + bflush (); + } + + bits_in(const bits_in&) = delete; + bits_in& operator=(const bits_in&) = delete; + + /* Completed a block of bools. */ + void bflush () + { + if (bit_pos) + bit_flush (in, bit_val, bit_pos); + } + + /* Read one bit. */ + bool b () + { + if (!bit_pos) + bit_val = in.u32 (); + bool x = (bit_val >> bit_pos) & 1; + bit_pos = (bit_pos + 1) % 32; + return x; + } +}; + +/* Factory function for bits_in. */ + +bytes_in::bits_in +bytes_in::stream_bits () +{ + return bits_in (*this); +} + +/* Bit stream writer (RAII-enabled), counterpart to bits_in. */ + +struct bytes_out::bits_out { + bytes_out& out; + uint32_t bit_val = 0; + unsigned bit_pos = 0; + char is_set = -1; + + bits_out (bytes_out& out) + : out (out) + { } + + ~bits_out () + { + bflush (); + } + + bits_out(const bits_out&) = delete; + bits_out& operator=(const bits_out&) = delete; + + /* Completed a block of bools. */ + void bflush () + { + if (bit_pos) + { + out.u32 (bit_val); + out.lengths[2] += bit_flush (out, bit_val, bit_pos); + } + out.spans[2]++; + is_set = -1; + } + + /* Write one bit. + + It may be worth optimizing for most bools being zero. Some kind of + run-length encoding? */ + void b (bool x) + { + if (is_set != x) + { + is_set = x; + out.spans[x]++; + } + out.lengths[x]++; + bit_val |= unsigned (x) << bit_pos++; + if (bit_pos == 32) + { + out.u32 (bit_val); + out.lengths[2] += bit_flush (out, bit_val, bit_pos); + } + } +}; + +/* Factory function for bits_out. */ + +bytes_out::bits_out +bytes_out::stream_bits () +{ + return bits_out (*this); +} /* Instrumentation. */ unsigned bytes_out::spans[4]; unsigned bytes_out::lengths[4]; -int bytes_out::is_set = -1; /* If CRC_PTR non-null, set the CRC of the buffer. Mix the CRC into that pointed to by CRC_PTR. */ @@ -723,73 +821,6 @@ bytes_out::set_crc (unsigned *crc_ptr) } } -/* Finish a set of bools. */ - -void -bytes_out::bflush () -{ - if (bit_pos) - { - u32 (bit_val); - lengths[2] += bit_flush (); - } - spans[2]++; - is_set = -1; -} - -void -bytes_in::bflush () -{ - if (bit_pos) - bit_flush (); -} - -/* When reading, we don't know how many bools we'll read in. So read - 4 bytes-worth, and then rewind when flushing if we didn't need them - all. You can't have a block of bools closer than 4 bytes to the - end of the buffer. */ - -void -bytes_in::bfill () -{ - bit_val = u32 (); -} - -/* Bools are packed into bytes. You cannot mix bools and non-bools. - You must call bflush before emitting another type. So batch your - bools. - - It may be worth optimizing for most bools being zero. Some kind of - run-length encoding? */ - -void -bytes_out::b (bool x) -{ - if (is_set != x) - { - is_set = x; - spans[x]++; - } - lengths[x]++; - bit_val |= unsigned (x) << bit_pos++; - if (bit_pos == 32) - { - u32 (bit_val); - lengths[2] += bit_flush (); - } -} - -bool -bytes_in::b () -{ - if (!bit_pos) - bfill (); - bool v = (bit_val >> bit_pos++) & 1; - if (bit_pos == 32) - bit_flush (); - return v; -} - /* Exactly 4 bytes. Used internally for bool packing and a few other places. We can't simply use uint32_t because (a) alignment and (b) we need little-endian for the bool streaming rewinding to make @@ -2831,7 +2862,12 @@ struct post_process_data { /* Tree stream reader. Note that reading a stream doesn't mark the read trees with TREE_VISITED. Thus it's quite safe to have multiple concurrent readers. Which is good, because lazy - loading. */ + loading. + + It's important that trees_in/out have internal linkage so that the + compiler knows core_bools, lang_type_bools and lang_decl_bools have + only a single caller (tree_node_bools) and inlines them appropriately. */ +namespace { class trees_in : public bytes_in { typedef bytes_in parent; @@ -2856,15 +2892,15 @@ class trees_in : public bytes_in { public: /* Needed for binfo writing */ - bool core_bools (tree); + bool core_bools (tree, bits_in&); private: /* Stream tree_core, lang_decl_specific and lang_type_specific bits. */ bool core_vals (tree); - bool lang_type_bools (tree); + bool lang_type_bools (tree, bits_in&); bool lang_type_vals (tree); - bool lang_decl_bools (tree); + bool lang_decl_bools (tree, bits_in&); bool lang_decl_vals (tree); bool lang_vals (tree); bool tree_node_bools (tree); @@ -2952,6 +2988,7 @@ class trees_in : public bytes_in { private: void assert_definition (tree, bool installing); }; +} // anon namespace trees_in::trees_in (module_state *state) :parent (), state (state), unused (0) @@ -2969,6 +3006,7 @@ trees_in::~trees_in () } /* Tree stream writer. */ +namespace { class trees_out : public bytes_out { typedef bytes_out parent; @@ -3030,11 +3068,11 @@ class trees_out : public bytes_out { } private: - void core_bools (tree); + void core_bools (tree, bits_out&); void core_vals (tree); - void lang_type_bools (tree); + void lang_type_bools (tree, bits_out&); void lang_type_vals (tree); - void lang_decl_bools (tree); + void lang_decl_bools (tree, bits_out&); void lang_decl_vals (tree); void lang_vals (tree); void tree_node_bools (tree); @@ -3114,6 +3152,7 @@ class trees_out : public bytes_out { static unsigned back_ref_count; static unsigned null_count; }; +} // anon namespace /* Instrumentation counters. */ unsigned trees_out::tree_val_count; @@ -5267,9 +5306,13 @@ trees_in::start (unsigned code) /* Read & write the core boolean flags. */ void -trees_out::core_bools (tree t) +trees_out::core_bools (tree t, bits_out& bits) { -#define WB(X) (b (X)) +#define WB(X) (bits.b (X)) +/* Stream X if COND holds, and if !COND stream a dummy value so that the + overall number of bits streamed is independent of the runtime value + of COND, which allows the compiler to better optimize this function. */ +#define WB_IF(COND, X) WB ((COND) ? (X) : false) tree_code code = TREE_CODE (t); WB (t->base.side_effects_flag); @@ -5286,9 +5329,8 @@ trees_out::core_bools (tree t) decls they use. */ WB (t->base.nothrow_flag); WB (t->base.static_flag); - if (TREE_CODE_CLASS (code) != tcc_type) - /* This is TYPE_CACHED_VALUES_P for types. */ - WB (t->base.public_flag); + /* This is TYPE_CACHED_VALUES_P for types. */ + WB_IF (TREE_CODE_CLASS (code) != tcc_type, t->base.public_flag); WB (t->base.private_flag); WB (t->base.protected_flag); WB (t->base.deprecated_flag); @@ -5302,7 +5344,7 @@ trees_out::core_bools (tree t) case TARGET_MEM_REF: case TREE_VEC: /* These use different base.u fields. */ - break; + return; default: WB (t->base.u.bits.lang_flag_0); @@ -5335,7 +5377,7 @@ trees_out::core_bools (tree t) break; } - if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON)) + if (TREE_CODE_CLASS (code) == tcc_type) { WB (t->type_common.no_force_blk_flag); WB (t->type_common.needs_constructing_flag); @@ -5352,6 +5394,9 @@ trees_out::core_bools (tree t) WB (t->type_common.typeless_storage); } + if (TREE_CODE_CLASS (code) != tcc_declaration) + return; + if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON)) { WB (t->decl_common.nonlocal_flag); @@ -5425,6 +5470,8 @@ trees_out::core_bools (tree t) WB (t->decl_common.decl_nonshareable_flag); WB (t->decl_common.decl_not_flexarray); } + else + return; if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS)) { @@ -5445,6 +5492,8 @@ trees_out::core_bools (tree t) WB (t->decl_with_vis.final); WB (t->decl_with_vis.regdecl_flag); } + else + return; if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL)) { @@ -5471,13 +5520,17 @@ trees_out::core_bools (tree t) WB ((kind >> 0) & 1); WB ((kind >> 1) & 1); } +#undef WB_IF #undef WB } bool -trees_in::core_bools (tree t) +trees_in::core_bools (tree t, bits_in& bits) { -#define RB(X) ((X) = b ()) +#define RB(X) ((X) = bits.b ()) +/* See the comment for WB_IF in trees_out::core_bools. */ +#define RB_IF(COND, X) ((COND) ? RB (X) : bits.b ()) + tree_code code = TREE_CODE (t); RB (t->base.side_effects_flag); @@ -5491,8 +5544,7 @@ trees_in::core_bools (tree t) /* base.used_flag is not streamed. */ RB (t->base.nothrow_flag); RB (t->base.static_flag); - if (TREE_CODE_CLASS (code) != tcc_type) - RB (t->base.public_flag); + RB_IF (TREE_CODE_CLASS (code) != tcc_type, t->base.public_flag); RB (t->base.private_flag); RB (t->base.protected_flag); RB (t->base.deprecated_flag); @@ -5506,7 +5558,7 @@ trees_in::core_bools (tree t) case TARGET_MEM_REF: case TREE_VEC: /* These use different base.u fields. */ - break; + goto done; default: RB (t->base.u.bits.lang_flag_0); @@ -5526,7 +5578,7 @@ trees_in::core_bools (tree t) break; } - if (CODE_CONTAINS_STRUCT (code, TS_TYPE_COMMON)) + if (TREE_CODE_CLASS (code) == tcc_type) { RB (t->type_common.no_force_blk_flag); RB (t->type_common.needs_constructing_flag); @@ -5543,6 +5595,9 @@ trees_in::core_bools (tree t) RB (t->type_common.typeless_storage); } + if (TREE_CODE_CLASS (code) != tcc_declaration) + goto done; + if (CODE_CONTAINS_STRUCT (code, TS_DECL_COMMON)) { RB (t->decl_common.nonlocal_flag); @@ -5571,6 +5626,8 @@ trees_in::core_bools (tree t) RB (t->decl_common.decl_nonshareable_flag); RB (t->decl_common.decl_not_flexarray); } + else + goto done; if (CODE_CONTAINS_STRUCT (code, TS_DECL_WITH_VIS)) { @@ -5591,6 +5648,8 @@ trees_in::core_bools (tree t) RB (t->decl_with_vis.final); RB (t->decl_with_vis.regdecl_flag); } + else + goto done; if (CODE_CONTAINS_STRUCT (code, TS_FUNCTION_DECL)) { @@ -5614,20 +5673,23 @@ trees_in::core_bools (tree t) /* decl_type is a (misnamed) 2 bit discriminator. */ unsigned kind = 0; - kind |= unsigned (b ()) << 0; - kind |= unsigned (b ()) << 1; + kind |= unsigned (bits.b ()) << 0; + kind |= unsigned (bits.b ()) << 1; t->function_decl.decl_type = function_decl_type (kind); } +#undef RB_IF #undef RB +done: return !get_overrun (); } void -trees_out::lang_decl_bools (tree t) +trees_out::lang_decl_bools (tree t, bits_out& bits) { -#define WB(X) (b (X)) +#define WB(X) (bits.b (X)) const struct lang_decl *lang = DECL_LANG_SPECIFIC (t); + bits.bflush (); WB (lang->u.base.language == lang_cplusplus); WB ((lang->u.base.use_template >> 0) & 1); WB ((lang->u.base.use_template >> 1) & 1); @@ -5700,15 +5762,16 @@ trees_out::lang_decl_bools (tree t) } bool -trees_in::lang_decl_bools (tree t) +trees_in::lang_decl_bools (tree t, bits_in& bits) { -#define RB(X) ((X) = b ()) +#define RB(X) ((X) = bits.b ()) struct lang_decl *lang = DECL_LANG_SPECIFIC (t); - lang->u.base.language = b () ? lang_cplusplus : lang_c; + bits.bflush (); + lang->u.base.language = bits.b () ? lang_cplusplus : lang_c; unsigned v; - v = b () << 0; - v |= b () << 1; + v = bits.b () << 0; + v |= bits.b () << 1; lang->u.base.use_template = v; /* lang->u.base.not_really_extern is not streamed. */ RB (lang->u.base.initialized_in_class); @@ -5771,11 +5834,12 @@ trees_in::lang_decl_bools (tree t) } void -trees_out::lang_type_bools (tree t) +trees_out::lang_type_bools (tree t, bits_out& bits) { -#define WB(X) (b (X)) +#define WB(X) (bits.b (X)) const struct lang_type *lang = TYPE_LANG_SPECIFIC (t); + bits.bflush (); WB (lang->has_type_conversion); WB (lang->has_copy_ctor); WB (lang->has_default_ctor); @@ -5837,11 +5901,12 @@ trees_out::lang_type_bools (tree t) } bool -trees_in::lang_type_bools (tree t) +trees_in::lang_type_bools (tree t, bits_in& bits) { -#define RB(X) ((X) = b ()) +#define RB(X) ((X) = bits.b ()) struct lang_type *lang = TYPE_LANG_SPECIFIC (t); + bits.bflush (); RB (lang->has_type_conversion); RB (lang->has_copy_ctor); RB (lang->has_default_ctor); @@ -5849,8 +5914,8 @@ trees_in::lang_type_bools (tree t) RB (lang->ref_needs_init); RB (lang->has_const_copy_assign); unsigned v; - v = b () << 0; - v |= b () << 1; + v = bits.b () << 0; + v |= bits.b () << 1; lang->use_template = v; RB (lang->has_mutable); @@ -5862,8 +5927,8 @@ trees_in::lang_type_bools (tree t) RB (lang->has_new); RB (lang->has_array_new); - v = b () << 0; - v |= b () << 1; + v = bits.b () << 0; + v |= bits.b () << 1; lang->gets_delete = v; RB (lang->interface_only); RB (lang->interface_unknown); @@ -7134,18 +7199,19 @@ trees_out::tree_node_bools (tree t) gcc_checking_assert (TREE_CODE (t) != NAMESPACE_DECL || DECL_NAMESPACE_ALIAS (t)); - core_bools (t); + bits_out bits = stream_bits (); + core_bools (t, bits); switch (TREE_CODE_CLASS (TREE_CODE (t))) { case tcc_declaration: { bool specific = DECL_LANG_SPECIFIC (t) != NULL; - b (specific); + bits.b (specific); if (specific && VAR_P (t)) - b (DECL_DECOMPOSITION_P (t)); + bits.b (DECL_DECOMPOSITION_P (t)); if (specific) - lang_decl_bools (t); + lang_decl_bools (t, bits); } break; @@ -7156,9 +7222,9 @@ trees_out::tree_node_bools (tree t) gcc_assert (TYPE_LANG_SPECIFIC (t) == TYPE_LANG_SPECIFIC (TYPE_MAIN_VARIANT (t))); - b (specific); + bits.b (specific); if (specific) - lang_type_bools (t); + lang_type_bools (t, bits); } break; @@ -7166,34 +7232,35 @@ trees_out::tree_node_bools (tree t) break; } - bflush (); + bits.bflush (); } bool trees_in::tree_node_bools (tree t) { - bool ok = core_bools (t); + bits_in bits = stream_bits (); + bool ok = core_bools (t, bits); if (ok) switch (TREE_CODE_CLASS (TREE_CODE (t))) { case tcc_declaration: - if (b ()) + if (bits.b ()) { - bool decomp = VAR_P (t) && b (); + bool decomp = VAR_P (t) && bits.b (); ok = maybe_add_lang_decl_raw (t, decomp); if (ok) - ok = lang_decl_bools (t); - } + ok = lang_decl_bools (t, bits); + } break; case tcc_type: - if (b ()) + if (bits.b ()) { ok = maybe_add_lang_type_raw (t); if (ok) - ok = lang_type_bools (t); + ok = lang_type_bools (t, bits); } break; @@ -7201,7 +7268,7 @@ trees_in::tree_node_bools (tree t) break; } - bflush (); + bits.bflush (); if (!ok || get_overrun ()) return false; @@ -7737,11 +7804,11 @@ trees_out::decl_value (tree decl, depset *dep) if (mk != MK_unique) { + bits_out bits = stream_bits (); if (!(mk & MK_template_mask) && !state->is_header ()) { /* Tell the importer whether this is a global module entity, - or a module entity. This bool merges into the next block - of bools. Sneaky. */ + or a module entity. */ tree o = get_originating_module_decl (decl); bool is_attached = false; @@ -7750,9 +7817,9 @@ trees_out::decl_value (tree decl, depset *dep) && DECL_MODULE_ATTACH_P (not_tmpl)) is_attached = true; - b (is_attached); + bits.b (is_attached); } - b (dep && dep->has_defn ()); + bits.b (dep && dep->has_defn ()); } tree_node_bools (decl); } @@ -8021,11 +8088,11 @@ trees_in::decl_value () { if (mk != MK_unique) { + bits_in bits = stream_bits (); if (!(mk & MK_template_mask) && !state->is_header ()) - /* See note in trees_out about where this bool is sequenced. */ - is_attached = b (); + is_attached = bits.b (); - has_defn = b (); + has_defn = bits.b (); } if (!tree_node_bools (decl)) @@ -16794,10 +16861,11 @@ module_state::write_define (bytes_out &sec, const cpp_macro *macro) { sec.u (macro->count); - sec.b (macro->fun_like); - sec.b (macro->variadic); - sec.b (macro->syshdr); - sec.bflush (); + bytes_out::bits_out bits = sec.stream_bits (); + bits.b (macro->fun_like); + bits.b (macro->variadic); + bits.b (macro->syshdr); + bits.bflush (); write_location (sec, macro->line); if (macro->fun_like) @@ -16892,10 +16960,11 @@ module_state::read_define (bytes_in &sec, cpp_reader *reader) const macro->kind = cmk_macro; macro->imported_p = true; - macro->fun_like = sec.b (); - macro->variadic = sec.b (); - macro->syshdr = sec.b (); - sec.bflush (); + bytes_in::bits_in bits = sec.stream_bits (); + macro->fun_like = bits.b (); + macro->variadic = bits.b (); + macro->syshdr = bits.b (); + bits.bflush (); macro->line = read_location (sec); From da375baf54944298303f13c375a5756c6131d672 Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Sat, 13 Apr 2024 16:06:28 -0400 Subject: [PATCH 543/551] c++/modules: make bits_in/out move-constructible gcc/cp/ChangeLog: * module.cc (struct bytes_in::bits_in): Define defaulted move ctor. (struct bytes_out::bits_out): Likewise. --- gcc/cp/module.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index bbed82652d4a..c6f71e11515c 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -706,6 +706,7 @@ struct bytes_in::bits_in { bflush (); } + bits_in(bits_in&&) = default; bits_in(const bits_in&) = delete; bits_in& operator=(const bits_in&) = delete; @@ -752,6 +753,7 @@ struct bytes_out::bits_out { bflush (); } + bits_out(bits_out&&) = default; bits_out(const bits_out&) = delete; bits_out& operator=(const bits_out&) = delete; From a9d3b3caef87d76072c946145d21e7606b303e12 Mon Sep 17 00:00:00 2001 From: Mark Wielaard <mark@klomp.org> Date: Sat, 13 Apr 2024 23:02:14 +0200 Subject: [PATCH 544/551] Regenerate c.opt.urls Fixes: df7bfdb7dbf2 ("c++: reference cast, conversion fn [PR113141]") A new warning option -Wcast-user-defined was added to c.opt and documented in doc/invoke.texi. But c.opt.urls wasn't regenerate. gcc/c-family/ChangeLog: * c.opt.urls: Regenerate. --- gcc/c-family/c.opt.urls | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/c-family/c.opt.urls b/gcc/c-family/c.opt.urls index 631719863a5e..dd455d7c0dc7 100644 --- a/gcc/c-family/c.opt.urls +++ b/gcc/c-family/c.opt.urls @@ -208,6 +208,9 @@ UrlSuffix(gcc/Warning-Options.html#index-Wcast-function-type) Wcast-qual UrlSuffix(gcc/Warning-Options.html#index-Wcast-qual) +Wcast-user-defined +UrlSuffix(gcc/Warning-Options.html#index-Wcast-user-defined) + Wcatch-value UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wcatch-value) From 3319d1a4aa5ccadc22dcb80252ab884c792b263b Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Sun, 14 Apr 2024 00:16:53 +0000 Subject: [PATCH 545/551] Daily bump. --- gcc/DATESTAMP | 2 +- gcc/c-family/ChangeLog | 4 ++++ gcc/cp/ChangeLog | 47 ++++++++++++++++++++++++++++++++++++++++++ libstdc++-v3/ChangeLog | 5 +++++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index a25dc7472c00..e82c2e6627de 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240413 +20240414 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 5c577bbc8149..0e8784f98210 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,7 @@ +2024-04-13 Mark Wielaard <mark@klomp.org> + + * c.opt.urls: Regenerate. + 2024-04-12 Jason Merrill <jason@redhat.com> Patrick Palka <ppalka@redhat.com> diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9282af5680ac..ae1725e1663f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,50 @@ +2024-04-13 Patrick Palka <ppalka@redhat.com> + + * module.cc (struct bytes_in::bits_in): Define defaulted + move ctor. + (struct bytes_out::bits_out): Likewise. + +2024-04-13 Patrick Palka <ppalka@redhat.com> + + * module.cc: Update comment about classes defined within. + (class data): Enclose in an anonymous namespace. + (data::calc_crc): Moved from bytes::calc_crc. + (class bytes): Remove. Move bit_flush to namespace scope. + (class bytes_in): Enclose in an anonymous namespace. Inherit + directly from data and adjust accordingly. Move b and bflush + members to bits_in. + (class bytes_out): As above. Remove is_set static data member. + (bit_flush): Moved from class bytes. + (struct bytes_in::bits_in): Define. + (struct bytes_out::bits_out): Define. + (bytes_in::stream_bits): Define. + (bytes_out::stream_bits): Define. + (bytes_out::bflush): Moved to bits_out/in. + (bytes_in::bflush): Likewise + (bytes_in::bfill): Removed. + (bytes_out::b): Moved to bits_out/in. + (bytes_in::b): Likewise. + (class trees_in): Enclose in an anonymous namespace. + (class trees_out): Enclose in an anonymous namespace. + (trees_out::core_bools): Add bits_out/in parameter and use it. + Unconditionally stream a bit for public_flag. Add early exits + as appropriate. + (trees_out::core_bools): Likewise. + (trees_out::lang_decl_bools): Add bits_out/in parameter and use + it. Flush the current bit buffer at the start. Unconditionally + stream a bit for module_keyed_decls_p. + (trees_in::lang_decl_bools): Likewise. + (trees_out::lang_type_bools): Add bits_out/in parameter and use + it. Flush the current bit buffer at the start. + (trees_in::lang_type_bools): Likewise. + (trees_out::tree_node_bools): Construct a bits_out object and + use/pass it. + (trees_in::tree_node_bools): Likewise. + (trees_out::decl_value): Likewise. + (trees_in::decl_value): Likewise. + (module_state::write_define): Likewise. + (module_state::read_define): Likewise. + 2024-04-12 Marek Polacek <polacek@redhat.com> PR c++/109966 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8c64ad9a1c7d..ce4c07a39c1b 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2024-04-13 H.J. Lu <hjl.tools@gmail.com> + + * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: + Updated. + 2024-04-11 Jakub Jelinek <jakub@redhat.com> * doc/xml/manual/abi.xml: Add latest library versions. From 62a0ef0d02cbb74cd865c1db2ecb7ca1b11f87cd Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Sat, 17 Feb 2024 23:10:49 +1100 Subject: [PATCH 546/551] c++: Setup aliases imported from modules [PR106820] I wonder if more generally we need to be doing more work when importing definitions from header units especially to handle all the work that 'make_rtl_for_nonlocal_decl' and 'rest_of_decl_compilation' would have been performing. But this patch fixes at least one missing step. PR c++/106820 gcc/cp/ChangeLog: * module.cc (trees_in::decl_value): Assemble alias when needed. gcc/testsuite/ChangeLog: * g++.dg/modules/pr106820_a.H: New test. * g++.dg/modules/pr106820_b.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> --- gcc/cp/module.cc | 9 +++++++++ gcc/testsuite/g++.dg/modules/pr106820_a.H | 5 +++++ gcc/testsuite/g++.dg/modules/pr106820_b.C | 8 ++++++++ 3 files changed, 22 insertions(+) create mode 100644 gcc/testsuite/g++.dg/modules/pr106820_a.H create mode 100644 gcc/testsuite/g++.dg/modules/pr106820_b.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index c6f71e11515c..001430a4a8fe 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -219,6 +219,7 @@ Classes used: #include "dumpfile.h" #include "bitmap.h" #include "cgraph.h" +#include "varasm.h" #include "tree-iterator.h" #include "cpplib.h" #include "mkdeps.h" @@ -8414,6 +8415,14 @@ trees_in::decl_value () if (state->is_header () && decl_tls_wrapper_p (decl)) note_vague_linkage_fn (decl); + + /* Setup aliases for the declaration. */ + if (tree alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl))) + { + alias = TREE_VALUE (TREE_VALUE (alias)); + alias = get_identifier (TREE_STRING_POINTER (alias)); + assemble_alias (decl, alias); + } } else { diff --git a/gcc/testsuite/g++.dg/modules/pr106820_a.H b/gcc/testsuite/g++.dg/modules/pr106820_a.H new file mode 100644 index 000000000000..7d32d4e5fc32 --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr106820_a.H @@ -0,0 +1,5 @@ +// PR c++/106820 +// { dg-additional-options "-fmodules-ts" } +// { dg-module-cmi {} } + +static int __gthrw___pthread_key_create() __attribute__((__weakref__("foo"))); diff --git a/gcc/testsuite/g++.dg/modules/pr106820_b.C b/gcc/testsuite/g++.dg/modules/pr106820_b.C new file mode 100644 index 000000000000..247fe26e778f --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr106820_b.C @@ -0,0 +1,8 @@ +// PR c++/106820 +// { dg-additional-options "-fmodules-ts" } + +import "pr106820_a.H"; + +int main() { + __gthrw___pthread_key_create(); +} From fe99ab1f5e9920fd46ef8148fcffde6729d68523 Mon Sep 17 00:00:00 2001 From: GCC Administrator <gccadmin@gcc.gnu.org> Date: Mon, 15 Apr 2024 00:16:39 +0000 Subject: [PATCH 547/551] Daily bump. --- gcc/DATESTAMP | 2 +- gcc/cp/ChangeLog | 5 +++++ gcc/testsuite/ChangeLog | 6 ++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index e82c2e6627de..bc62afe9d00e 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20240414 +20240415 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ae1725e1663f..27afe2216821 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2024-04-14 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/106820 + * module.cc (trees_in::decl_value): Assemble alias when needed. + 2024-04-13 Patrick Palka <ppalka@redhat.com> * module.cc (struct bytes_in::bits_in): Define defaulted diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3561cfe9eac1..2fe3d61ace06 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2024-04-14 Nathaniel Shead <nathanieloshead@gmail.com> + + PR c++/106820 + * g++.dg/modules/pr106820_a.H: New test. + * g++.dg/modules/pr106820_b.C: New test. + 2024-04-12 Andrew Carlotti <andrew.carlotti@arm.com> * gcc.target/aarch64/cpunative/info_24: Include lrcpc and ilrcpc. From 3878e9aeb30cb192f769997c52743daf8190744c Mon Sep 17 00:00:00 2001 From: Nathaniel Shead <nathanieloshead@gmail.com> Date: Mon, 8 Apr 2024 23:34:42 +1000 Subject: [PATCH 548/551] c++: Only emit exported GMF usings [PR114600] A typo in r14-6978 made us emit too many things. This ensures that we don't emit using-declarations from the GMF that we don't need to. PR c++/114600 gcc/cp/ChangeLog: * module.cc (depset::hash::add_binding_entity): Require both WMB_Using and WMB_Export for GMF entities. gcc/testsuite/ChangeLog: * g++.dg/modules/using-14.C: New test. Signed-off-by: Nathaniel Shead <nathanieloshead@gmail.com> Co-authored-by: Patrick Palka <ppalka@redhat.com> --- gcc/cp/module.cc | 2 +- gcc/testsuite/g++.dg/modules/using-14.C | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/modules/using-14.C diff --git a/gcc/cp/module.cc b/gcc/cp/module.cc index 001430a4a8fe..d94d8ff4df99 100644 --- a/gcc/cp/module.cc +++ b/gcc/cp/module.cc @@ -13090,7 +13090,7 @@ depset::hash::add_binding_entity (tree decl, WMB_Flags flags, void *data_) inner = DECL_TEMPLATE_RESULT (inner); if ((!DECL_LANG_SPECIFIC (inner) || !DECL_MODULE_PURVIEW_P (inner)) - && !(flags & (WMB_Using | WMB_Export))) + && !((flags & WMB_Using) && (flags & WMB_Export))) /* Ignore global module fragment entities unless explicitly exported with a using declaration. */ return false; diff --git a/gcc/testsuite/g++.dg/modules/using-14.C b/gcc/testsuite/g++.dg/modules/using-14.C new file mode 100644 index 000000000000..0e15a952de5e --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/using-14.C @@ -0,0 +1,14 @@ +// PR c++/114600 +// { dg-additional-options "-fmodules-ts -Wno-global-module -fdump-lang-module" } +// { dg-module-cmi M } + +module; +namespace std { + template<class T> struct A { int n; }; + template<class T> A<T> f(); + namespace __swappable_details { using std::f; } +} +export module M; + +// The whole GMF should be discarded here +// { dg-final { scan-lang-dump "Wrote 0 clusters" module } } From 7ec54f5fdfec298812a749699874db4d6a7246bb Mon Sep 17 00:00:00 2001 From: Jakub Jelinek <jakub@redhat.com> Date: Mon, 15 Apr 2024 10:25:22 +0200 Subject: [PATCH 549/551] attribs: Don't crash on NULL TREE_TYPE in diag_attr_exclusions [PR114634] The enumerator still doesn't have TREE_TYPE set but diag_attr_exclusions assumes that all decls must have types. I think it is better in something as unimportant as diag_attr_exclusions to be more robust, if there is no type, it can just diagnose exclusions on the DECL_ATTRIBUTES, like for types it only diagnoses it on TYPE_ATTRIBUTES. 2024-04-15 Jakub Jelinek <jakub@redhat.com> PR c++/114634 * attribs.cc (diag_attr_exclusions): Set attrs[1] to NULL_TREE for decls with NULL TREE_TYPE. * g++.dg/ext/attrib68.C: New test. --- gcc/attribs.cc | 7 ++++++- gcc/testsuite/g++.dg/ext/attrib68.C | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ext/attrib68.C diff --git a/gcc/attribs.cc b/gcc/attribs.cc index fc7459c3850a..12ffc5f170a1 100644 --- a/gcc/attribs.cc +++ b/gcc/attribs.cc @@ -468,7 +468,12 @@ diag_attr_exclusions (tree last_decl, tree node, tree attrname, if (DECL_P (node)) { attrs[0] = DECL_ATTRIBUTES (node); - attrs[1] = TYPE_ATTRIBUTES (TREE_TYPE (node)); + if (TREE_TYPE (node)) + attrs[1] = TYPE_ATTRIBUTES (TREE_TYPE (node)); + else + /* TREE_TYPE can be NULL e.g. while processing attributes on + enumerators. */ + attrs[1] = NULL_TREE; } else { diff --git a/gcc/testsuite/g++.dg/ext/attrib68.C b/gcc/testsuite/g++.dg/ext/attrib68.C new file mode 100644 index 000000000000..be3b11084913 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attrib68.C @@ -0,0 +1,8 @@ +// PR c++/114634 +// { dg-do compile } + +template <int N> +struct A +{ + enum { e __attribute__ ((aligned (16))) }; // { dg-error "alignment may not be specified for 'e'" } +}; From 7f4ba5480e0ee5c03317d24d3fa858c0966f3464 Mon Sep 17 00:00:00 2001 From: Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> Date: Mon, 15 Apr 2024 11:16:23 +0200 Subject: [PATCH 550/551] testsuite: i386: Restrict gcc.target/i386/fhardened-1.c etc. to Linux/GNU The new gcc.target/i386/fhardened-1.c etc. tests FAIL on Solaris/x86 and Darwin/x86: FAIL: gcc.target/i386/fhardened-1.c (test for excess errors) FAIL: gcc.target/i386/fhardened-2.c (test for excess errors) Excess errors: cc1: warning: '-fhardened' not supported for this target Support for -fhardened is restricted to HAVE_FHARDENED_SUPPORT in toplev.cc (process_options) which again is only defined for linux*|gnu* targets in gcc/configure.ac. Accordingly, this patch restricts the tests to those two, as is already done in gcc.target/i386/cf_check-6.c. Tested on i386-pc-solaris2.11 and x86_64-pc-linux-gnu. 2024-04-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> gcc/testsuite: * gcc.target/i386/fhardened-1.c: Restrict to Linux/GNU. * gcc.target/i386/fhardened-2.c: Likewise. --- gcc/testsuite/gcc.target/i386/fhardened-1.c | 1 + gcc/testsuite/gcc.target/i386/fhardened-2.c | 1 + 2 files changed, 2 insertions(+) diff --git a/gcc/testsuite/gcc.target/i386/fhardened-1.c b/gcc/testsuite/gcc.target/i386/fhardened-1.c index 55d1718ff557..f51820e285f9 100644 --- a/gcc/testsuite/gcc.target/i386/fhardened-1.c +++ b/gcc/testsuite/gcc.target/i386/fhardened-1.c @@ -1,4 +1,5 @@ /* PR target/114606 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ /* { dg-options "-fhardened -O2 -fcf-protection=none" } */ #ifdef __CET__ diff --git a/gcc/testsuite/gcc.target/i386/fhardened-2.c b/gcc/testsuite/gcc.target/i386/fhardened-2.c index 9b8c1381c194..ed2a67449218 100644 --- a/gcc/testsuite/gcc.target/i386/fhardened-2.c +++ b/gcc/testsuite/gcc.target/i386/fhardened-2.c @@ -1,4 +1,5 @@ /* PR target/114606 */ +/* { dg-do compile { target *-*-linux* *-*-gnu* } } */ /* { dg-options "-fhardened -O2" } */ #if __CET__ != 3 From 950ec4a2616c89f422da8ef34d709c7733402315 Mon Sep 17 00:00:00 2001 From: Owen Avery <powerboat9.gamer@gmail.com> Date: Tue, 3 Dec 2024 13:37:14 -0500 Subject: [PATCH 551/551] Adjust expected warnings for CI ChangeLog: * .github/alpine_32bit_log_warnings: Adjust line numbers. * .github/log_expected_warnings: Likewise. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com> --- .github/alpine_32bit_log_warnings | 4 ++-- .github/log_expected_warnings | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/alpine_32bit_log_warnings b/.github/alpine_32bit_log_warnings index 32a83ef1078c..42363c995f85 100644 --- a/.github/alpine_32bit_log_warnings +++ b/.github/alpine_32bit_log_warnings @@ -82,8 +82,8 @@ ../../gcc/gcc.cc:2539:51: warning: unknown conversion type character 't' in format [-Wformat=] ../../gcc/gcc.cc:2553:22: warning: too many arguments for format [-Wformat-extra-args] ../../gcc/gcc.cc:2553:51: warning: unknown conversion type character 't' in format [-Wformat=] -../../gcc/text-art/style.cc:150:25: warning: spurious leading punctuation sequence ';' in format [-Wformat-diag] -../../gcc/text-art/style.cc:160:25: warning: spurious leading punctuation sequence ';' in format [-Wformat-diag] +../../gcc/text-art/style.cc:151:25: warning: spurious leading punctuation sequence ';' in format [-Wformat-diag] +../../gcc/text-art/style.cc:161:25: warning: spurious leading punctuation sequence ';' in format [-Wformat-diag] ../../gcc/text-art/table.cc:981:62: warning: unquoted keyword 'char' in format [-Wformat-diag] ../../gcc/text-art/table.cc:981:69: warning: spurious trailing punctuation sequence '])' in format [-Wformat-diag] /usr/include/c++/13.2.1/bits/new_allocator.h:172:33: warning: '*(std::_Vector_base<Rust::FreeRegion, std::allocator<Rust::FreeRegion> >*)((char*)&saved + offsetof(Rust::BIR::PatternBindingBuilder::SavedState, Rust::BIR::PatternBindingBuilder::SavedState::regions.tl::optional<Rust::FreeRegions>::<unnamed>.tl::detail::optional_move_assign_base<Rust::FreeRegions, false>::<unnamed>.tl::detail::optional_copy_assign_base<Rust::FreeRegions, false>::<unnamed>.tl::detail::optional_move_base<Rust::FreeRegions, false>::<unnamed>.tl::detail::optional_copy_base<Rust::FreeRegions, false>::<unnamed>.tl::detail::optional_operations_base<Rust::FreeRegions>::<unnamed>.tl::detail::optional_storage_base<Rust::FreeRegions, false>::<unnamed>)).std::_Vector_base<Rust::FreeRegion, std::allocator<Rust::FreeRegion> >::_M_impl.std::_Vector_base<Rust::FreeRegion, std::allocator<Rust::FreeRegion> >::_Vector_impl::<anonymous>.std::_Vector_base<Rust::FreeRegion, std::allocator<Rust::FreeRegion> >::_Vector_impl_data::_M_start' may be used uninitialized [-Wmaybe-uninitialized] diff --git a/.github/log_expected_warnings b/.github/log_expected_warnings index 989829d685f4..3a49ba66adae 100644 --- a/.github/log_expected_warnings +++ b/.github/log_expected_warnings @@ -72,8 +72,8 @@ ../../../libcpp/lex.cc:2120:39: warning: ‘loc’ may be used uninitialized [-Wmaybe-uninitialized] ../../../libcpp/macro.cc:185:26: warning: format not a string literal and no format arguments [-Wformat-security] ../../../libcpp/macro.cc:214:34: warning: format not a string literal and no format arguments [-Wformat-security] -../../../libcpp/macro.cc:3710:25: warning: format not a string literal and no format arguments [-Wformat-security] -../../../libcpp/macro.cc:3725:25: warning: format not a string literal and no format arguments [-Wformat-security] +../../../libcpp/macro.cc:3713:25: warning: format not a string literal and no format arguments [-Wformat-security] +../../../libcpp/macro.cc:3728:25: warning: format not a string literal and no format arguments [-Wformat-security] ../../c++tools/server.cc:490:11: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] ../../c++tools/server.cc:620:10: warning: ignoring return value of ‘int pipe(int*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] ../../gcc/../libgcc/libgcov-util.c:455:9: warning: ignoring return value of ‘int chdir(const char*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] @@ -87,8 +87,8 @@ ../../gcc/c/c-typeck.cc:4648:16: warning: format not a string literal and no format arguments [-Wformat-security] ../../gcc/c/c-typeck.cc:6913:23: warning: format not a string literal and no format arguments [-Wformat-security] ../../gcc/collect-utils.cc:237:21: warning: format not a string literal and no format arguments [-Wformat-security] -../../gcc/collect2.cc:2400:21: warning: format not a string literal and no format arguments [-Wformat-security] -../../gcc/diagnostic.cc:2316:15: warning: format not a string literal and no format arguments [-Wformat-security] +../../gcc/collect2.cc:2401:21: warning: format not a string literal and no format arguments [-Wformat-security] +../../gcc/diagnostic.cc:2333:15: warning: format not a string literal and no format arguments [-Wformat-security] ../../gcc/expmed.cc:1845:45: warning: ‘*(unsigned int*)((char*)&imode + offsetof(scalar_int_mode, scalar_int_mode::m_mode))’ may be used uninitialized in this function [-Wmaybe-uninitialized] ../../gcc/fold-const.cc:384:13: warning: format not a string literal and no format arguments [-Wformat-security] ../../gcc/gcc.cc:10668:12: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] @@ -120,18 +120,18 @@ ../../gcc/genhooks.cc:180:14: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] ../../gcc/gimple-range-gori.cc:318:19: warning: format not a string literal and no format arguments [-Wformat-security] ../../gcc/ipa-devirt.cc:967:10: warning: format not a string literal and no format arguments [-Wformat-security] -../../gcc/lto-wrapper.cc:1151:8: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] -../../gcc/lto-wrapper.cc:1369:10: warning: format not a string literal and no format arguments [-Wformat-security] -../../gcc/lto-wrapper.cc:1971:23: warning: format not a string literal and no format arguments [-Wformat-security] +../../gcc/lto-wrapper.cc:1155:8: warning: ignoring return value of ‘ssize_t read(int, void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] +../../gcc/lto-wrapper.cc:1373:10: warning: format not a string literal and no format arguments [-Wformat-security] +../../gcc/lto-wrapper.cc:1975:23: warning: format not a string literal and no format arguments [-Wformat-security] ../../gcc/lto/lto-common.cc:2084:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] ../../gcc/lto/lto-common.cc:2086:9: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] ../../gcc/lto/lto-common.cc:2106:10: warning: ignoring return value of ‘int fscanf(FILE*, const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] -../../gcc/text-art/style.cc:150:25: warning: spurious leading punctuation sequence ‘;’ in format [-Wformat-diag] -../../gcc/text-art/style.cc:160:25: warning: spurious leading punctuation sequence ‘;’ in format [-Wformat-diag] +../../gcc/text-art/style.cc:151:25: warning: spurious leading punctuation sequence ‘;’ in format [-Wformat-diag] +../../gcc/text-art/style.cc:161:25: warning: spurious leading punctuation sequence ‘;’ in format [-Wformat-diag] ../../gcc/text-art/table.cc:981:62: warning: unquoted keyword ‘char’ in format [-Wformat-diag] ../../gcc/text-art/table.cc:981:69: warning: spurious trailing punctuation sequence ‘])’ in format [-Wformat-diag] ../../gcc/tree-ssa-sccvn.cc:286:21: warning: format not a string literal and no format arguments [-Wformat-security] -../../gcc/tree-vect-stmts.cc:10397:47: warning: ‘stride_step’ may be used uninitialized in this function [-Wmaybe-uninitialized] +../../gcc/tree-vect-stmts.cc:10415:47: warning: ‘stride_step’ may be used uninitialized in this function [-Wmaybe-uninitialized] ../../gcc/vec.h:347:10: warning: ‘void free(void*)’ called on unallocated object ‘dest_bbs’ [-Wfree-nonheap-object] ../../libcpp/expr.cc:842:35: warning: format not a string literal and no format arguments [-Wformat-security] ../../libcpp/expr.cc:845:38: warning: format not a string literal and no format arguments [-Wformat-security] @@ -142,13 +142,13 @@ ../../libcpp/lex.cc:2120:39: warning: ‘loc’ may be used uninitialized [-Wmaybe-uninitialized] ../../libcpp/macro.cc:185:26: warning: format not a string literal and no format arguments [-Wformat-security] ../../libcpp/macro.cc:214:34: warning: format not a string literal and no format arguments [-Wformat-security] -../../libcpp/macro.cc:3710:25: warning: format not a string literal and no format arguments [-Wformat-security] -../../libcpp/macro.cc:3725:25: warning: format not a string literal and no format arguments [-Wformat-security] +../../libcpp/macro.cc:3713:25: warning: format not a string literal and no format arguments [-Wformat-security] +../../libcpp/macro.cc:3728:25: warning: format not a string literal and no format arguments [-Wformat-security] /home/runner/work/gccrs/gccrs/gccrs-build/x86_64-pc-linux-gnu/32/libssp/../../../../libssp/gets-chk.c:73: warning: the `gets' function is dangerous and should not be used. /home/runner/work/gccrs/gccrs/gccrs-build/x86_64-pc-linux-gnu/libssp/../../../libssp/gets-chk.c:73: warning: the `gets' function is dangerous and should not be used. gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=] gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=] gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=] gengtype-lex.cc:357:15: warning: this statement may fall through [-Wimplicit-fallthrough=] -install.texi:2231: warning: `.' or `,' must follow @xref, not f +install.texi:2242: warning: `.' or `,' must follow @xref, not f libtool: install: warning: remember to run `libtool --finish /usr/local/libexec/gcc/x86_64-pc-linux-gnu/14.0.1'