aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog457
-rw-r--r--gcc/testsuite/c-c++-common/analyzer/realloc-1.c2
-rw-r--r--gcc/testsuite/c-c++-common/gomp/append-args-interop.c4
-rw-r--r--gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob24
-rw-r--r--gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out5
-rw-r--r--gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob2
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob15
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob22
-rw-r--r--gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_overflow.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_overflow.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_underflow.cob16
-rw-r--r--gcc/testsuite/cobol.dg/group2/Offset_underflow.out1
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob20
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out9
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob29
-rw-r--r--gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out9
-rw-r--r--gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob19
-rw-r--r--gcc/testsuite/cobol.dg/group2/Static_reference_modification.out5
-rw-r--r--gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C21
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/constinit20.C18
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C8
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C12
-rw-r--r--gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C10
-rw-r--r--gcc/testsuite/g++.dg/gomp/append-args-8.C8
-rw-r--r--gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C20
-rw-r--r--gcc/testsuite/g++.dg/opt/pr119613.C2
-rw-r--r--gcc/testsuite/g++.dg/opt/pr119614.C30
-rw-r--r--gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C17
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr118924.C29
-rw-r--r--gcc/testsuite/g++.target/aarch64/sve/pr116595.C7
-rw-r--r--gcc/testsuite/g++.target/aarch64/sve/pr119706.C178
-rw-r--r--gcc/testsuite/g++.target/i386/pr119689.C44
-rw-r--r--gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C10
-rw-r--r--gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c9
-rw-r--r--gcc/testsuite/gcc.dg/bf-ms-attrib.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/pr118674.c5
-rw-r--r--gcc/testsuite/gcc.dg/gnu23-tag-6.c27
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr36728-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr41353-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr54693-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr68860-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/pr68860-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/sra-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/guality/vla-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/pr119594.c32
-rw-r--r--gcc/testsuite/gcc.dg/pr119612.c9
-rw-r--r--gcc/testsuite/gcc.dg/pr119664.c15
-rw-r--r--gcc/testsuite/gcc.dg/torture/bitint-76.c19
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr119399.c10
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr119640.c17
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr99102.c2
-rw-r--r--gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr100056.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp46
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c201
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c57
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c2049
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c4
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c3
-rw-r--r--gcc/testsuite/gcc.target/arm/ivopts.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/lob1.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/lob6.c2
-rw-r--r--gcc/testsuite/gcc.target/arm/short-vfp-1.c46
-rw-r--r--gcc/testsuite/gcc.target/arm/unsigned-extend-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr67215-1.c10
-rw-r--r--gcc/testsuite/gcc.target/i386/pr67215-2.c10
-rw-r--r--gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c7
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c36
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h21
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c3
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c4
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c24
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c24
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c2
-rw-r--r--gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c2
-rw-r--r--gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d36
-rw-r--r--gcc/testsuite/gdc.test/compilable/test21153.d8
-rw-r--r--gcc/testsuite/gdc.test/compilable/test21179.d11
-rw-r--r--gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d18
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_11.f9053
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_12.f90175
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_13.f90211
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_14.f90176
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_15.f9020
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f904
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_9.f902
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f901
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_local_init.f904
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f903
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/append-args-interop.f904
-rw-r--r--gcc/testsuite/gfortran.dg/optional_absent_13.f9048
-rw-r--r--gcc/testsuite/gfortran.dg/reduce_2.f908
-rw-r--r--gcc/testsuite/gfortran.dg/reduce_3.f9056
-rw-r--r--gcc/testsuite/gfortran.dg/reduce_4.f9048
-rw-r--r--gcc/testsuite/gnat.dg/renaming17.adb17
-rw-r--r--gcc/testsuite/lib/cobol.exp24
-rw-r--r--gcc/testsuite/lib/target-supports.exp12
-rw-r--r--gcc/testsuite/rust/compile/enum_discriminant1.rs7
-rw-r--r--gcc/testsuite/rust/compile/feature.rs2
-rw-r--r--gcc/testsuite/rust/compile/invalid_label_name.rs4
-rw-r--r--gcc/testsuite/rust/compile/issue-2812.rs4
-rw-r--r--gcc/testsuite/rust/compile/issue-3625.rs2
-rw-r--r--gcc/testsuite/rust/compile/issue-3643.rs4
-rw-r--r--gcc/testsuite/rust/compile/issue-3646.rs7
-rw-r--r--gcc/testsuite/rust/compile/issue-3647.rs7
-rw-r--r--gcc/testsuite/rust/compile/issue-3648.rs8
-rw-r--r--gcc/testsuite/rust/compile/issue-3654.rs3
-rw-r--r--gcc/testsuite/rust/compile/issue-3656.rs10
-rw-r--r--gcc/testsuite/rust/compile/issue-3657.rs8
-rw-r--r--gcc/testsuite/rust/compile/issue-3663.rs6
-rw-r--r--gcc/testsuite/rust/compile/issue-3665.rs6
-rw-r--r--gcc/testsuite/rust/compile/issue-3667.rs24
-rw-r--r--gcc/testsuite/rust/compile/issue-3671.rs2
-rw-r--r--gcc/testsuite/rust/compile/macros/mbe/macro6.rs2
-rw-r--r--gcc/testsuite/rust/compile/min_specialization1.rs15
-rw-r--r--gcc/testsuite/rust/compile/nr2/compile.exp32
-rw-r--r--gcc/testsuite/rust/compile/nr2/exclude12
-rw-r--r--gcc/testsuite/rust/compile/undeclared_label.rs4
178 files changed, 4903 insertions, 263 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 040dc1c..330a283 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,460 @@
+2025-04-11 Christophe Lyon <christophe.lyon@linaro.org>
+
+ * lib/target-supports.exp: Rename arm_v8_1_lob_ok into
+ arm_v8_1m_lob_hw.
+ Rename arm_thumb2_no_arm_v8_1_lob into
+ arm_thumb2_no_arm_v8_1m_lob.
+ Rename arm_thumb2_ok_no_arm_v8_1_lob into
+ arm_thumb2_ok_no_arm_v8_1m_lob.
+ * gcc.target/arm/lob1.c: Likewise.
+ * gcc.target/arm/lob6.c: Likewise.
+ * gcc.target/arm/ivopts.c: Likewise.
+ * gcc.target/arm/unsigned-extend-2.c: Likewise.
+
+2025-04-11 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR rtl-optimization/118502
+ * g++.dg/opt/shrink-wrapping-vector-1.C: New test.
+
+2025-04-11 Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/rvv/base/pr115068-run.c: Turn off pedantic diagnostics.
+ * gcc.target/riscv/rvv/base/pr115068.c: Likewise.
+ * gcc.target/riscv/rvv/base/vwaddsub-1.c: Likewise.
+
+2025-04-11 Jason Merrill <jason@redhat.com>
+
+ PR c++/114970
+ * g++.dg/opt/is_constant_evaluated4.C: New test.
+
+2025-04-11 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/119707
+ * gcc.dg/torture/bitint-76.c: New test.
+
+2025-04-11 Jennifer Schmitz <jschmitz@nvidia.com>
+
+ PR tree-optimization/119706
+ * g++.target/aarch64/sve/pr119706.C: New test.
+
+2025-04-11 Jonathan Yong <10walls@gmail.com>
+
+ PR target/113633
+ * gcc.dg/bf-ms-attrib.c: Fix expected __ms_struct__ layout
+ size.
+
+2025-04-11 Jonathan Yong <10walls@gmail.com>
+
+ * c-c++-common/analyzer/realloc-1.c: Make diagnostic accept
+ long long for __builtin_realloc warning.
+
+2025-04-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/119345
+ * g++.dg/cpp2a/lambda-targ14.C: New test.
+
+2025-04-10 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/119687
+ * g++.dg/cpp23/class-deduction-inherited8.C: New test.
+
+2025-04-10 Bob Dubner <rdubner@symas.com>
+
+ * cobol.dg/group2/Dynamic_reference_modification.cob: New testcase.
+ * cobol.dg/group2/Length_overflow__1_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow__2_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__1_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__2_.cob: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__3_.cob: Likewise.
+ * cobol.dg/group2/Offset_overflow.cob: Likewise.
+ * cobol.dg/group2/Offset_underflow.cob: Likewise.
+ * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob: Likewise.
+ * cobol.dg/group2/Refmod_sources_are_figurative_constants.cob: Likewise.
+ * cobol.dg/group2/Static_reference_modification.cob: Likewise.
+ * cobol.dg/group2/Dynamic_reference_modification.out: New known-good result.
+ * cobol.dg/group2/Length_overflow__1_.out: Likewise.
+ * cobol.dg/group2/Length_overflow__2_.out: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__1_.out: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__2_.out: Likewise.
+ * cobol.dg/group2/Length_overflow_with_offset__3_.out: Likewise.
+ * cobol.dg/group2/Offset_overflow.out: Likewise.
+ * cobol.dg/group2/Offset_underflow.out: Likewise.
+ * cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out: Likewise.
+ * cobol.dg/group2/Refmod_sources_are_figurative_constants.out: Likewise.
+ * cobol.dg/group2/Static_reference_modification.out: Likewise.
+
+2025-04-10 Jason Merrill <jason@redhat.com>
+
+ PR c++/119175
+ * g++.dg/cpp2a/concepts-lambda23.C: New test.
+
+2025-04-10 Iain Sandoe <iain@sandoe.co.uk>
+
+ * lib/cobol.exp: Add libquadmath paths.
+
+2025-04-10 Richard Sandiford <richard.sandiford@arm.com>
+
+ PR tree-optimization/119399
+ * gcc.dg/vect/pr119399.c: New test.
+
+2025-04-10 Kito Cheng <kito.cheng@sifive.com>
+
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c: Include local
+ riscv_vector.h.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c: Ditto.
+ * gcc.target/riscv/rvv/base/abi-callee-saved-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-10-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-10.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-7.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-8.c: Ditto.
+ * gcc.target/riscv/rvv/base/bug-9.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr110943.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr112431-21.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr114639-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr115068.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr117286.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr117544.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr117955.c: Ditto.
+ * gcc.target/riscv/rvv/base/pr118872.c: Ditto.
+ * gcc.target/riscv/rvv/base/vlmul_ext-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/vssubu-1.c: Ditto.
+ * gcc.target/riscv/rvv/base/vssubu-2.c: Ditto.
+ * gcc.target/riscv/rvv/base/vwaddsub-1.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/pr111234.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/pr115214.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/vsetvl-24.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c: Ditto.
+ * gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/pr116591.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/pr116592.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/pr118357.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/vsext.c: Ditto.
+ * gcc.target/riscv/rvv/xtheadvector/vzext.c: Ditto.
+
+2025-04-09 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/119574
+ * g++.dg/cpp2a/lambda-targ13.C: New test.
+ * g++.dg/cpp2a/lambda-targ13a.C: New test.
+ * g++.dg/cpp2a/lambda-targ13b.C: New test.
+
+2025-04-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/119664
+ * gcc.dg/pr119664.c: New test.
+
+2025-04-09 Andrew Pinski <quic_apinski@quicinc.com>
+
+ PR middle-end/116595
+ * g++.target/aarch64/sve/pr116595.C: New test.
+
+2025-04-09 Iain Buclaw <ibuclaw@gdcproject.org>
+
+ PR d/118309
+ * gdc.dg/debug/dwarf2/pr118309.d: New test.
+
+2025-04-09 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/119656
+ * gfortran.dg/optional_absent_13.f90: New test.
+
+2025-04-09 Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/sat/sat_s_sub-1-i64.c: Update expected output.
+ * gcc.target/riscv/sat/sat_s_sub-2-i64.c: Likewise.
+ * gcc.target/riscv/sat/sat_s_sub-3-i64.c: Likewise.
+ * gcc.target/riscv/sat/sat_s_sub-4-i64.c: Likewise.
+
+2025-04-09 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/pr67215-1.c: Correctly escape
+ asterisk in scan-assembler dirctive.
+ * gcc.target/i386/pr67215-2.c: Ditto.
+
+2025-04-09 Jonathan Yong <10walls@gmail.com>
+
+ PR analyzer/113253
+ * gcc.dg/analyzer/deref-before-check-pr113253.c:
+ (ptrdiff_t): use stddef.h type.
+ (uintptr_t): ditto.
+ (EMACS_INT): ditto.
+ (set_marker_internal): Add dummy 0 to suppress -Wreturn-type.
+
+2025-04-09 Jeff Law <jlaw@ventanamicro.com>
+
+ * gcc.target/riscv/rvv/autovec/pr117722.c: Adjust expected output.
+
+2025-04-09 Richard Biener <rguenther@suse.de>
+
+ PR rtl-optimization/119689
+ PR rtl-optimization/115568
+ * g++.target/i386/pr119689.C: New testcase.
+
+2025-04-09 Pan Li <pan2.li@intel.com>
+
+ Revert:
+ 2025-03-15 Pan Li <pan2.li@intel.com>
+
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c: Removed.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c: New test.
+ * gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h: New test.
+
+2025-04-09 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/118674
+ * gcc.dg/cpp/pr118674.c: New test.
+
+2025-04-09 Robin Dapp <rdapp@ventanamicro.com>
+
+ * g++.target/riscv/rvv/autovec/pr116595.C: Add -mabi.
+
+2025-04-09 Robin Dapp <rdapp@ventanamicro.com>
+
+ PR middle-end/116595
+ * g++.target/riscv/rvv/autovec/pr116595.C: New test.
+
+2025-04-09 Paul Thomas <pault@gcc.gnu.org>
+ and Harald Anlauf <anlauf@gcc.gnu.org>
+
+ PR fortran/119460
+ * gfortran.dg/reduce_2.f90: Add test to check that deferred len
+ characters cannot slip through.
+ * gfortran.dg/reduce_3.f90: New test
+ * gfortran.dg/reduce_4.f90: New test
+
+2025-04-09 Tobias Burnus <tburnus@baylibre.com>
+
+ PR fortran/101602
+ * gfortran.dg/do_concurrent_8_f2023.f90: Update for removed 'sorry,
+ unimplemented'.
+ * gfortran.dg/do_concurrent_9.f90: Likewise.
+ * gfortran.dg/do_concurrent_all_clauses.f90: Likewise.
+ * gfortran.dg/do_concurrent_local_init.f90: Likewise.
+ * gfortran.dg/do_concurrent_locality_specs.f90: Likewise.
+ * gfortran.dg/do_concurrent_11.f90: New test.
+ * gfortran.dg/do_concurrent_12.f90: New test.
+ * gfortran.dg/do_concurrent_13.f90: New test.
+ * gfortran.dg/do_concurrent_14.f90: New test.
+ * gfortran.dg/do_concurrent_15.f90: New test.
+
+2025-04-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/118698
+ * g++.dg/cpp2a/concepts-lambda22.C: New test.
+
+2025-04-08 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.dg/guality/pr36728-3.c: Update XFAILs for aarch64.
+ * gcc.dg/guality/pr41353-1.c: Likewise.
+ * gcc.dg/guality/pr54693-2.c: Likewise.
+ * gcc.dg/guality/pr68860-1.c: Likewise.
+ * gcc.dg/guality/pr68860-2.c: Likewise.
+ * gcc.dg/guality/sra-1.c: Likewise.
+ * gcc.dg/guality/vla-1.c: Likewise.
+
+2025-04-08 Richard Sandiford <richard.sandiford@arm.com>
+
+ * gcc.dg/vect/pr99102.c: Force SVE when forcing the vector length.
+
+2025-04-08 Martin Uecker <uecker@tugraz.at>
+
+ PR c/119612
+ * gcc.dg/gnu23-tag-6.c: New test.
+ * gcc.dg/pr119612.c: New test.
+
+2025-04-08 Tobias Burnus <tburnus@baylibre.com>
+
+ PR middle-end/119662
+ * c-c++-common/gomp/append-args-interop.c: Update for fixed
+ GOMP_interop call.
+ * g++.dg/gomp/append-args-8.C: Likewise.
+ * gfortran.dg/gomp/append-args-interop.f90: Likewise.
+
+2025-04-08 Jason Merrill <jason@redhat.com>
+
+ PR c++/117530
+ * g++.dg/cpp2a/lambda-uneval27.C: New test.
+
+2025-04-08 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/119594
+ * gcc.dg/pr119594.c: New test.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/macros/mbe/macro6.rs: Remove call of undefined
+ function.
+ * rust/compile/nr2/exclude: Remove macros/mbe/macro6.rs.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/issue-2812.rs: Avoid multiple definition error.
+ * rust/compile/nr2/exclude: Remove issue-2812.rs.
+
+2025-04-08 Matty Kuhn <matty.kuhn.1@gmail.com>
+
+ * rust/compile/feature.rs: add an invalid empty feature to produce an error
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/invalid_label_name.rs: Adapt test to nr2.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/nr2/exclude: Remove test.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/undeclared_label.rs: Change test
+ expected string.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/nr2/exclude: Remove test from exclusion list.
+
+2025-04-08 Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
+
+ * rust/compile/nr2/exclude: Remove passing test.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/nr2/compile.exp: Avoid absolute paths in output,
+ adjust phrasing of output, and avoid false XPASS output when
+ tests are run in parallel.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/nr2/exclude: Remove entry.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3647.rs: New test.
+
+2025-04-08 Arthur Cohen <arthur.cohen@embecosm.com>
+
+ * rust/compile/min_specialization1.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/nr2/exclude: nr2 is missing type path error
+ * rust/compile/issue-3643.rs: New test.
+ * rust/compile/issue-3646.rs: New test.
+ * rust/compile/issue-3654.rs: New test.
+ * rust/compile/issue-3663.rs: New test.
+ * rust/compile/issue-3671.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3667.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3656.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3625.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3648.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3657.rs: New test.
+
+2025-04-08 Philip Herron <herron.philip@googlemail.com>
+
+ * rust/compile/issue-3665.rs: New test.
+
+2025-04-08 Owen Avery <powerboat9.gamer@gmail.com>
+
+ * rust/compile/nr2/exclude: Remove entries.
+
+2025-04-08 Ryutaro Okada <1015ryu88@gmail.com>
+
+ * rust/compile/enum_discriminant1.rs: New test.
+
+2025-04-08 Tejas Belagod <tejas.belagod@arm.com>
+
+ * gcc.target/aarch64/sve/gomp/gomp.exp: Test driver.
+ * gcc.target/aarch64/sve/gomp/target-device.c: New test.
+ * gcc.target/aarch64/sve/gomp/target-link.c: Likewise.
+ * gcc.target/aarch64/sve/gomp/target.c: Likewise.
+
+2025-04-08 Jin Ma <jinma@linux.alibaba.com>
+
+ * gcc.target/riscv/rvv/xtheadvector/vsext.c: New test.
+ * gcc.target/riscv/rvv/xtheadvector/vzext.c: New test.
+
+2025-04-07 Jason Merrill <jason@redhat.com>
+
+ PR c++/119652
+ * g++.dg/cpp2a/constinit20.C: New test.
+
+2025-04-07 Thomas Schwinge <tschwinge@baylibre.com>
+
+ * gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c: Adjust.
+
+2025-04-07 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/118924
+ * g++.dg/tree-ssa/pr118924.C: New test.
+
+2025-04-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/119640
+ * gcc.dg/vect/pr119640.c: New testcase.
+
+2025-04-07 Christophe Lyon <christophe.lyon@linaro.org>
+
+ PR target/119556
+ * gcc.target/arm/short-vfp-1.c: Improve dg directives.
+
+2025-04-07 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/119614
+ * g++.dg/opt/pr119613.C: Change { c || c++11 } in obviously C++ only
+ test to just c++11.
+ * g++.dg/opt/pr119614.C: New test.
+
+2025-04-07 Richard Sandiford <richard.sandiford@arm.com>
+ Richard Biener <rguenther@suse.de>
+
+ * gcc.target/aarch64/popcnt-le-1.c: Account for commutativity of TST.
+ * gcc.target/aarch64/popcnt-le-3.c: Likewise AND.
+ * gcc.target/aarch64/pr100056.c: Revert previous patch.
+ * gcc.target/aarch64/sve/pred-not-gen-1.c: Likewise.
+ * gcc.target/aarch64/sve/pred-not-gen-4.c: Likewise.
+ * gcc.target/aarch64/sve/var_stride_2.c: Likewise.
+ * gcc.target/aarch64/sve/var_stride_4.c: Likewise.
+
+2025-04-06 Iain Sandoe <iain@sandoe.co.uk>
+
+ * lib/cobol.exp: Simplify the setting of COBOL_UNDER_TEST.
+
+2025-04-06 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/118626
+ * g++.dg/cpp2a/class-deduction-alias25a.C: New test.
+
+2025-04-06 Patrick Palka <ppalka@redhat.com>
+
+ PR c++/118626
+ * g++.dg/cpp2a/class-deduction-alias25.C: New test.
+
2025-04-05 Patrick Palka <ppalka@redhat.com>
PR c++/118249
diff --git a/gcc/testsuite/c-c++-common/analyzer/realloc-1.c b/gcc/testsuite/c-c++-common/analyzer/realloc-1.c
index 04925cf..0bb846c 100644
--- a/gcc/testsuite/c-c++-common/analyzer/realloc-1.c
+++ b/gcc/testsuite/c-c++-common/analyzer/realloc-1.c
@@ -92,5 +92,5 @@ void test_9 (void *p)
void test_10 (char *s, int n)
{
__builtin_realloc(s, n); /* { dg-warning "ignoring return value of '__builtin_realloc' declared with attribute 'warn_unused_result'" "" { target c } } */
- /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )?unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */
+ /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )*unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */
} /* { dg-warning "leak" } */
diff --git a/gcc/testsuite/c-c++-common/gomp/append-args-interop.c b/gcc/testsuite/c-c++-common/gomp/append-args-interop.c
index 1211450..e9b1ed4 100644
--- a/gcc/testsuite/c-c++-common/gomp/append-args-interop.c
+++ b/gcc/testsuite/c-c++-common/gomp/append-args-interop.c
@@ -39,6 +39,6 @@ test (int *a, int *b)
return x;
}
-/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 2, interopobjs\.\[0-9\]+, tgt_tgtsync\.\[0-9\]+," "gimple" } } */
-/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 2, interopobjs\.\[0-9\]+," "gimple" } } */
+/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 2, &interopobjs\.\[0-9\]+, &tgt_tgtsync\.\[0-9\]+," "gimple" } } */
+/* { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 2, &interopobjs\.\[0-9\]+," "gimple" } } */
/* { dg-final { scan-tree-dump "repl1 \\(obj1, interop\.\[0-9\]+, interop\.\[0-9\]+\\)" "gimple" } } */
diff --git a/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob b/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob
index 7a404fd..be58878 100644
--- a/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob
+++ b/gcc/testsuite/cobol.dg/group2/ACCEPT_DATE___DAY_and_intrinsic_functions__2_.cob
@@ -1,5 +1,5 @@
*> { dg-do run }
- *> { dg-set-target-env-var COB_CURRENT_DATE "2020/06/12 18:45:22" }
+ *> { dg-set-target-env-var GCOBOL_CURRENT_DATE "2020/06/12 18:45:22" }
IDENTIFICATION DIVISION.
PROGRAM-ID. prog.
diff --git a/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob b/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob
index 6014220..665787d 100644
--- a/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob
+++ b/gcc/testsuite/cobol.dg/group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.cob
@@ -1,5 +1,5 @@
*> { dg-do run }
- *> { dg-set-target-env-var COB_CURRENT_DATE "2015/04/05 18:45:22" }
+ *> { dg-set-target-env-var GCOBOL_CURRENT_DATE "2015/04/05 18:45:22" }
*> { dg-output-file "group2/ACCEPT_FROM_TIME___DATE___DAY___DAY-OF-WEEK__2_.out" }
IDENTIFICATION DIVISION.
diff --git a/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob
new file mode 100644
index 0000000..99690da
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.cob
@@ -0,0 +1,24 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Dynamic_reference_modification.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9.
+ PROCEDURE DIVISION.
+ MOVE 1 TO I.
+ DISPLAY X(I:1)
+ END-DISPLAY.
+ MOVE 4 TO I.
+ DISPLAY X(I:1)
+ END-DISPLAY.
+ MOVE 1 TO I.
+ DISPLAY X(1:I)
+ END-DISPLAY.
+ MOVE 4 TO I.
+ DISPLAY X(1:I)
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out
new file mode 100644
index 0000000..42a4b69
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Dynamic_reference_modification.out
@@ -0,0 +1,5 @@
+a
+d
+a
+abcd
+
diff --git a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
index bb48bb0..cc2a4e1 100644
--- a/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
+++ b/gcc/testsuite/cobol.dg/group2/FUNCTION_DATE___TIME_OMNIBUS.cob
@@ -79,7 +79,7 @@
01 minus10 pic s99 value -10.
- 01 forced_date_n pic X(64) VALUE Z"COB_CURRENT_DATE".
+ 01 forced_date_n pic X(64) VALUE Z"GCOBOL_CURRENT_DATE".
01 forced_date_v pic X(64) VALUE Z"1945/06/01 12:34:56".
procedure division.
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob
new file mode 100644
index 0000000..6475356
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 5.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(1:I) NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out
new file mode 100644
index 0000000..78981922
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__1_.out
@@ -0,0 +1 @@
+a
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob
new file mode 100644
index 0000000..351c9df
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog2.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 5.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(3:I) NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out
new file mode 100644
index 0000000..f2ad6c7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow__2_.out
@@ -0,0 +1 @@
+c
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob
new file mode 100644
index 0000000..9f7fa83
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.cob
@@ -0,0 +1,15 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow_with_offset__1_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 3.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(3:I) NO ADVANCING.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out
new file mode 100644
index 0000000..f2ad6c7
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__1_.out
@@ -0,0 +1 @@
+c
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob
new file mode 100644
index 0000000..d077373
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow_with_offset__2_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 3.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ IF X(3:I) <> SPACES
+ DISPLAY X(3:I) NO ADVANCING.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__2_.out
@@ -0,0 +1 @@
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob
new file mode 100644
index 0000000..7fa9843
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.cob
@@ -0,0 +1,22 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Length_overflow_with_offset__3_.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 3.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ EVALUATE TRUE
+ WHEN I < 2
+ AND X(3:I) <> SPACES
+ DISPLAY "1-" X(3:I) NO ADVANCING
+ WHEN I < 2
+ WHEN X(3:I) <> SPACES
+ DISPLAY "2-" X(3:I) NO ADVANCING
+ END-EVALUATE
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Length_overflow_with_offset__3_.out
@@ -0,0 +1 @@
+
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_overflow.cob b/gcc/testsuite/cobol.dg/group2/Offset_overflow.cob
new file mode 100644
index 0000000..8fd5421
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_overflow.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Offset_overflow.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01.
+ 03 X PIC X(4) VALUE "abcd".
+ 03 I PIC 9 VALUE 5.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(I:1) NO ADVANCING.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_overflow.out b/gcc/testsuite/cobol.dg/group2/Offset_overflow.out
new file mode 100644
index 0000000..7ed6ff8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_overflow.out
@@ -0,0 +1 @@
+5
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_underflow.cob b/gcc/testsuite/cobol.dg/group2/Offset_underflow.cob
new file mode 100644
index 0000000..51100a8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_underflow.cob
@@ -0,0 +1,16 @@
+ *> { dg-do run }
+ *> { dg-xfail-run-if "" { *-*-* } }
+ *> { dg-output-file "group2/Offset_underflow.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ 01 I PIC 9 VALUE 0.
+ PROCEDURE DIVISION.
+ >>TURN EC-ALL CHECKING ON
+ DISPLAY X(I:1) NO ADVANCING
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Offset_underflow.out b/gcc/testsuite/cobol.dg/group2/Offset_underflow.out
new file mode 100644
index 0000000..78981922
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Offset_underflow.out
@@ -0,0 +1 @@
+a
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob
new file mode 100644
index 0000000..6fb70f4
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.cob
@@ -0,0 +1,20 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Refmod__comparisons_inside_numeric-display.out" }
+ identification division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 n pic 9(9).
+ 01 i pic 99.
+ procedure division.
+ perform varying i from 1 by 1 until i > 8
+ move 88888888 to n
+ move "12" to n(i:2)
+ display n
+ if n(i:2) not equal to "12"
+ display "Equality is flawed"
+ end-if
+ end-perform.
+ goback.
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out
new file mode 100644
index 0000000..ac48dc8
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod__comparisons_inside_numeric-display.out
@@ -0,0 +1,9 @@
+128888888
+012888888
+081288888
+088128888
+088812888
+088881288
+088888128
+088888812
+
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob
new file mode 100644
index 0000000..c4af57d
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.cob
@@ -0,0 +1,29 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Refmod_sources_are_figurative_constants.out" }
+
+ id division.
+ program-id. prog.
+ data division.
+ working-storage section.
+ 01 varx pic x(8) VALUE '""""""""'.
+ 01 varp redefines varx pointer.
+ procedure division.
+ move "12345678" to varx
+ display """" varx """"
+ move "999" to varx(4:3)
+ display """" varx """"
+ move LOW-VALUE to varx(4:3).
+ display """" varx """"
+ move ZERO to varx(4:3).
+ display """" varx """"
+ move SPACE to varx(4:3).
+ display """" varx """"
+ move QUOTE to varx(4:3).
+ display """" varx """"
+ move HIGH-VALUE to varx(4:3).
+ display varp
+ initialize varx all to value
+ display """" varx """"
+ .
+ end program prog.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out
new file mode 100644
index 0000000..2f5dadc
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out
@@ -0,0 +1,9 @@
+"12345678"
+"12399978"
+"123"
+"12300078"
+"123 78"
+"123"""78"
+0x3837ffffff333231
+""""""""""
+
diff --git a/gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob
new file mode 100644
index 0000000..919ddb3
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.cob
@@ -0,0 +1,19 @@
+ *> { dg-do run }
+ *> { dg-output-file "group2/Static_reference_modification.out" }
+
+ IDENTIFICATION DIVISION.
+ PROGRAM-ID. prog.
+ DATA DIVISION.
+ WORKING-STORAGE SECTION.
+ 01 X PIC X(4) VALUE "abcd".
+ PROCEDURE DIVISION.
+ DISPLAY X(1:1) ":" X(1:2) ":" X(1:3) ":" X(1:4) ":" X(1:)
+ END-DISPLAY.
+ DISPLAY X(2:1) ":" X(2:2) ":" X(2:3) ":" X(2:)
+ END-DISPLAY.
+ DISPLAY X(3:1) ":" X(3:2) ":" X(3:)
+ END-DISPLAY.
+ DISPLAY X(4:1) ":" X(4:)
+ END-DISPLAY.
+ STOP RUN.
+
diff --git a/gcc/testsuite/cobol.dg/group2/Static_reference_modification.out b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.out
new file mode 100644
index 0000000..fe51165
--- /dev/null
+++ b/gcc/testsuite/cobol.dg/group2/Static_reference_modification.out
@@ -0,0 +1,5 @@
+a:ab:abc:abcd:abcd
+b:bc:bcd:bcd
+c:cd:cd
+d:d
+
diff --git a/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
new file mode 100644
index 0000000..4494c70
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp23/class-deduction-inherited8.C
@@ -0,0 +1,21 @@
+// PR c++/119687
+// { dg-do compile { target c++17 } }
+
+template <typename> class QFlagsStorage{};
+
+template <typename Enum> struct QFlagsStorageHelper : QFlagsStorage<Enum> {
+ using QFlagsStorage<Enum>::QFlagsStorage;
+
+public:
+ QFlagsStorageHelper(Enum);
+};
+
+template <typename Enum> struct QFlags : public QFlagsStorageHelper<Enum> {
+ using Base = QFlagsStorageHelper<Enum>;
+ using Base::Base;
+ QFlags(Enum);
+};
+
+void f(int flag) {
+ QFlags{int{}};
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C
new file mode 100644
index 0000000..2437b7e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda22.C
@@ -0,0 +1,21 @@
+// PR c++/118698
+// { dg-do compile { target c++20 } }
+
+template <typename T> struct foo {};
+template <typename T> struct bar {};
+
+template <class T> T&& declval ();
+
+template <typename T, typename U>
+concept callable = requires { declval<T>()(declval<U>()); };
+
+template <typename T, template <typename...> typename U>
+concept is_specialization_of = callable<decltype([]<typename... Args>( U<Args...> const& ) { }),T>;
+
+static_assert( is_specialization_of<foo<int>,foo> == true );
+static_assert( is_specialization_of<foo<int>,bar> == false );
+
+template <typename T> concept is_foo = is_specialization_of<T,foo>;
+
+static_assert( is_foo<foo<int>> );
+static_assert( is_foo<bar<int>> == false );
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C
new file mode 100644
index 0000000..f442120
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda23.C
@@ -0,0 +1,12 @@
+// PR c++/119175
+// { dg-do compile { target c++20 } }
+
+template<int = 0>
+static void from() requires requires {
+ []<int> requires requires { [] {}; } {};
+}
+{}
+
+int main() {
+ from();
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/constinit20.C b/gcc/testsuite/g++.dg/cpp2a/constinit20.C
new file mode 100644
index 0000000..9b04391
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/constinit20.C
@@ -0,0 +1,18 @@
+// PR c++/119652
+// { dg-do compile { target c++20 } }
+
+struct __shared_count {
+ constexpr __shared_count() {}
+ ~__shared_count();
+ int _M_pi = 0;
+};
+struct shared_ptr {
+ __shared_count _M_refcount;
+};
+struct A {
+ A() = default;
+ shared_ptr m;
+};
+constinit A a;
+constinit A b {};
+constinit A c = {};
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C
new file mode 100644
index 0000000..8fd0a31
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C
@@ -0,0 +1,7 @@
+// PR c++/119574
+// { dg-do compile { target c++20 } }
+
+template <class F = decltype([] <auto G = [] {}> () {})>
+void f(F op = {}) { op(); }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C
new file mode 100644
index 0000000..8aaefd9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C
@@ -0,0 +1,8 @@
+// PR c++/119574
+// A version of lambda-targ13.C with extra template parameters.
+// { dg-do compile { target c++20 } }
+
+template <int = 0, class F = decltype([] <int = 1, auto G = [] {}> () {})>
+void f(F op = {}) { op(); }
+
+int main() { f(); }
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C
new file mode 100644
index 0000000..7f541c7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ13b.C
@@ -0,0 +1,8 @@
+// PR c++/119574
+// A version of lambda-targ13.C where the inner lambda returns non-void.
+// { dg-do compile { target c++20 } }
+
+template <class F = decltype([] <auto G = [] { return 42; }> () { return G(); })>
+constexpr int f(F op = {}) { return op(); }
+
+static_assert(f() == 42);
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C b/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C
new file mode 100644
index 0000000..debb15e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C
@@ -0,0 +1,12 @@
+// PR c++/119345
+// { dg-do compile { target c++20 } }
+
+void f(auto... args) {
+ [args...]<int... i> {
+ (..., [args...] { i; });
+ }.template operator()<0>();
+}
+
+int main() {
+ f();
+}
diff --git a/gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C
new file mode 100644
index 0000000..941fe63
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/lambda-uneval27.C
@@ -0,0 +1,10 @@
+// PR c++/117530
+// { dg-do compile { target c++20 } }
+
+template <class> struct A;
+template <class T> using B = decltype([]() -> A<T>::X { return 0; });
+template <class T> struct A {
+ typedef int X;
+ typedef B<T> U;
+};
+B<short> b;
diff --git a/gcc/testsuite/g++.dg/gomp/append-args-8.C b/gcc/testsuite/g++.dg/gomp/append-args-8.C
index 379c767..3052c5b 100644
--- a/gcc/testsuite/g++.dg/gomp/append-args-8.C
+++ b/gcc/testsuite/g++.dg/gomp/append-args-8.C
@@ -82,11 +82,11 @@ test (int *a, int *b)
/* { dg-final { scan-tree-dump-times "__builtin_omp_set_default_device \\(D\.\[0-9\]+\\);" 2 "gimple" } } */
/* { dg-final { scan-tree-dump-times "D\.\[0-9\]+ = __builtin_omp_get_mapped_ptr \\(a, D\.\[0-9\]+\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 1, interopobjs\.\[0-9\], tgt_tgtsync\.\[0-9\]+, pref_type.2, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 1, &interopobjs\.\[0-9\], &tgt_tgtsync\.\[0-9\]+, &pref_type.2, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
/* { dg-final { scan-tree-dump-times "repl2<int\\*, int\\*, omp_interop_t> \\(b, D\.\[0-9\]+, obj1, interop\.\[0-9\]+\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 1, interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(D\.\[0-9\]+, 0, 0B, 0B, 0B, 0, 0B, 1, &interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 0, 0B, 0B, 0B, 0, 0B, 3, interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 0, 0B, 0B, 0B, 0, 0B, 3, &interopobjs\.\[0-9\]+, 0, 0B\\);" 1 "gimple" } } */
/* { dg-final { scan-tree-dump-times "repl3<int\\*, omp_interop_t> \\(a, interop\.\[0-9\]+, interop\.\[0-9\]+, interop\.\[0-9\]+, 1, 2, \"abc\"\\);" 1 "gimple" } } */
-/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 3, interopobjs\.\[0-9\]+, tgt_tgtsync\.\[0-9\]+, pref_type\.\[0-9\]+, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_GOMP_interop \\(-5, 3, &interopobjs\.\[0-9\]+, &tgt_tgtsync\.\[0-9\]+, &pref_type\.\[0-9\]+, 0, 0B, 0, 0B, 0, 0B\\);" 1 "gimple" } } */
diff --git a/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C b/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C
new file mode 100644
index 0000000..9650004
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/is_constant_evaluated4.C
@@ -0,0 +1,20 @@
+// PR c++/114970
+// { dg-do compile { target c++17 } }
+// { dg-additional-options "-O -Wunused-value" }
+
+struct sv
+{
+ const char* str;
+ unsigned len;
+
+ constexpr sv(const char *p): str(p), len(0)
+ {
+ if (__builtin_is_constant_evaluated ()) { len = 42; }
+ }
+};
+
+int main()
+{
+ sv s ("foo");
+ return s.len;
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr119613.C b/gcc/testsuite/g++.dg/opt/pr119613.C
index 432a30c..2ced2e8 100644
--- a/gcc/testsuite/g++.dg/opt/pr119613.C
+++ b/gcc/testsuite/g++.dg/opt/pr119613.C
@@ -1,5 +1,5 @@
// PR middle-end/119613
-// { dg-do compile { target { musttail && { c || c++11 } } } }
+// { dg-do compile { target { musttail && c++11 } } }
// { dg-options "-O0" }
struct S { S () {} };
diff --git a/gcc/testsuite/g++.dg/opt/pr119614.C b/gcc/testsuite/g++.dg/opt/pr119614.C
new file mode 100644
index 0000000..cb73fc3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr119614.C
@@ -0,0 +1,30 @@
+// PR tree-optimization/119614
+// { dg-do compile { target musttail } }
+// { dg-options "-O2" }
+
+struct S {} b;
+char *foo ();
+int e, g;
+void bar ();
+void corge (S);
+
+[[gnu::noinline]] char *
+baz ()
+{
+ bar ();
+ return 0;
+}
+
+const char *
+qux ()
+{
+ if (e)
+ {
+ S a = b;
+ corge (a);
+ if (g)
+ return 0;
+ [[gnu::musttail]] return baz ();
+ }
+ return foo ();
+}
diff --git a/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C
new file mode 100644
index 0000000..8b1ad53
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/shrink-wrapping-vector-1.C
@@ -0,0 +1,17 @@
+// { dg-do compile { target { { { i?86-*-* x86_64-*-* } && { ! ia32 } } || { powerpc*-*-* aarch64*-*-* riscv*-*-* } } } }
+// { dg-options "-O2 -fdump-rtl-pro_and_epilogue" }
+// { dg-skip-if "requires hosted libstdc++ for vector" { ! hostedlib } }
+
+// PR rtl-optimization/118502
+
+// The shrink-wrapping should happen around the slow path of vector<int>::push_back,
+// The fast path is just checking if there is enough space and doing a few stores.
+// We want to verify that shrink wrapping always happens.
+
+#include <vector>
+
+void push_back(std::vector<int>& xs, unsigned char x) {
+ xs.push_back(x);
+}
+
+/* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue" } } */
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr118924.C b/gcc/testsuite/g++.dg/tree-ssa/pr118924.C
new file mode 100644
index 0000000..c95eaca
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr118924.C
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-options "-std=c++17 -O2" } */
+
+template <int Size> struct Vector {
+ int m_data[Size];
+ Vector(int, int, int) {}
+};
+enum class E { POINTS, LINES, TRIANGLES };
+
+__attribute__((noipa))
+void getName(E type) {
+ static E check = E::POINTS;
+ if (type == check)
+ check = (E)((int)check + 1);
+ else
+ __builtin_abort ();
+}
+
+int main() {
+ int arr[]{0, 1, 2};
+ for (auto dim : arr) {
+ Vector<3> localInvs(1, 1, 1);
+ localInvs.m_data[dim] = 8;
+ }
+ E types[] = {E::POINTS, E::LINES, E::TRIANGLES};
+ for (auto primType : types)
+ getName(primType);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr116595.C b/gcc/testsuite/g++.target/aarch64/sve/pr116595.C
new file mode 100644
index 0000000..49874dd
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/sve/pr116595.C
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+#include <arm_sve.h>
+
+void transpose4x4_ps()
+{
+ svfloat32x4_t _r = svfloat32x4_t();
+}
diff --git a/gcc/testsuite/g++.target/aarch64/sve/pr119706.C b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C
new file mode 100644
index 0000000..40fefe5
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/sve/pr119706.C
@@ -0,0 +1,178 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -mcpu=neoverse-v2 --param=aarch64-autovec-preference=sve-only -w" } */
+
+namespace a {
+typedef long unsigned b;
+typedef int c;
+template <bool, typename d> struct e { using f = d; };
+template <bool g, typename d = void> using h = typename e<g, d>::f;
+template <typename aa, typename, template <typename> class> struct i {
+ using f = aa;
+};
+template <typename aa, template <typename> class j> using k = i<aa, void, j>;
+template <typename aa, template <typename> class j>
+using l = typename k<aa, j>::f;
+} // namespace a
+inline void *operator new(a::b, void *ab) { return ab; }
+namespace a {
+template <typename> class ac {
+public:
+ typedef b m;
+ template <typename ad, typename... n> void ae(ad *ab, n... w) {
+ new (ab) ad(w...);
+ }
+};
+template <typename d> using x = ac<d>;
+template <typename d> class af : public x<d> {
+public:
+ typedef d o;
+ template <typename> struct ag { typedef af ah; };
+};
+struct ai {};
+struct aj : ai {};
+struct ak : aj {};
+template <typename> struct al;
+template <typename d> struct al<d *> {
+ typedef ak an;
+ typedef c ao;
+ typedef d ap;
+};
+template <typename aq> typename aq ::an ar(aq) { return typename aq ::an(); }
+template <typename as> typename as ::ao at(as au, as av, ak) { return av - au; }
+template <typename aw> typename aw ::ao ax(aw au, aw av) {
+ return at(au, av, ar(au));
+}
+template <typename> struct ay { typedef c ao; };
+} // namespace a
+namespace az {
+template <typename am, typename> class ba {
+ am bb;
+ typedef a::al<am> bc;
+
+public:
+ typedef typename bc::an an;
+ typedef typename bc::ao ao;
+ typedef typename bc::ap ap;
+ ba(am bd) : bb(bd) {}
+ ap operator*() { return *bb; }
+ ba operator++() {
+ ++bb;
+ return *this;
+ }
+ am base() { return bb; }
+};
+template <typename be, typename bf, typename bg>
+bool operator!=(ba<be, bg> bh, ba<bf, bg> p) {
+ return bh.base() != p.base();
+}
+template <typename be, typename bf, typename bg>
+auto operator-(ba<be, bg> bh, ba<bf, bg> p) {
+ return bh.base() - p.base();
+}
+} // namespace az
+namespace a {
+struct bi {
+ template <typename d, typename> struct bj {
+ using f = typename d::ag<d>::ah;
+ };
+ template <typename> using bk = b;
+ template <typename...> static constexpr bool bl = false;
+ template <typename, typename> static constexpr bool bm = bl<>;
+ template <typename d, typename... n> static constexpr bool bn = bm<d, n...>;
+};
+template <typename bo, typename ad> using bp = typename bi::bj<bo, ad>::f;
+template <typename bo> struct bq : bi {
+ typedef typename bo::o o;
+ using br = l<o *, bk>;
+ template <typename, typename bs> struct bt { using f = typename ay<bs>::ao; };
+ template <typename bu, typename> struct bv { using f = typename bu::m; };
+ using ao = typename bt<bo, c>::f;
+ using m = typename bv<bo, ao>::f;
+ template <typename d> using bw = bp<bo, d>;
+ static br allocate(bo, m);
+ template <typename d, typename... n>
+ static h<bn<bo, d>> ae(bo ci, d ab, n... w) {
+ ci.ae(ab, w...);
+ }
+};
+template <typename d> struct bx {
+ static bool by(d &bz) try { d(bz.begin(), bz.ca(), bz.cb()); } catch (...) {
+ }
+};
+} // namespace a
+namespace az {
+template <typename bo> struct cc : a::bq<bo> {
+ typedef a::bq<bo> q;
+ template <typename d> struct ag { typedef typename q::bw<d> ah; };
+};
+} // namespace az
+enum cd {};
+using ce = double;
+namespace a {
+template <typename aw, typename cf, typename cg, typename ch>
+cg cj(aw au, cf av, cg ck, ch cl) {
+ typedef az::cc<ch> cx;
+ for (; au != av; ++au, ++ck)
+ cx::ae(cl, ck, *au);
+}
+template <typename d, typename bo> struct cm {
+ typedef typename az::cc<bo>::ag<d>::ah cn;
+ typedef typename az::cc<cn>::br br;
+ struct co {
+ br db;
+ br cp;
+ };
+ struct cq : cn, co {
+ cq(cn) {}
+ } typedef cr;
+ cn cs();
+ cr cb() noexcept;
+ cm(cr ci) : ct(ci) {}
+ cq ct;
+ br cu(b cv) {
+ typedef az::cc<cn> cw;
+ return cv ? cw::allocate(ct, cv) : c();
+ }
+};
+template <typename d, typename bo = af<d>> class cy : cm<d, bo> {
+ typedef cm<d, bo> cz;
+
+public:
+ typedef typename cz::br br;
+ typedef az::ba<br, cy> da;
+ typedef b m;
+ typedef bo cr;
+ cz::cs;
+ template <typename aw> cy(aw au, aw av, cr ci) : cz(ci) {
+ dg(au, av, ar(au));
+ }
+ cz::cb;
+ da begin() { return this->ct.db; }
+ da ca() { return this->ct.cp; }
+ void r() { s(); }
+ void clear() { t(this->ct.db); }
+ template <typename cg> void dg(cg au, cg av, ai) { y(au, av, ax(au, av)); }
+ template <typename am, typename cf> void y(am au, cf av, m cv) {
+ br z = this->cu(dc(cv, cs()));
+ cj(au, av, z, cs());
+ }
+ bool s();
+ m dc(m cv, cr) { return cv; }
+ void t(br dd) {
+ if (this->ct.cp - dd)
+ this->ct.cp = dd;
+ }
+};
+template <typename d, typename bo> bool cy<d, bo>::s() { bx<cy>::by(*this); }
+namespace basic {
+class u {
+ using de = ce;
+ void v(cd, b);
+ cy<de> df;
+};
+void u::v(cd, b) {
+ df.clear();
+ df.r();
+}
+} // namespace basic
+} // namespace a \ No newline at end of file
diff --git a/gcc/testsuite/g++.target/i386/pr119689.C b/gcc/testsuite/g++.target/i386/pr119689.C
new file mode 100644
index 0000000..cdc6d2d
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr119689.C
@@ -0,0 +1,44 @@
+// { dg-do compile }
+// { dg-options "-O2 -fcompare-debug" }
+// { dg-additional-options "-march=i586 -mtune=generic" { target ia32 } }
+// { dg-additional-options "-fPIC" { target { fpic } } }
+
+enum gimple_code { GIMPLE_ASSIGN, GIMPLE_RETURN };
+bool is_gimple_call();
+int m_sig, m_exp, sreal_new_exp;
+struct sreal {
+ sreal(long long sig) {
+ long long __trans_tmp_6 = sig >= 0 ? sig : -(unsigned long long)sig;
+ sig = __trans_tmp_6 <<= sreal_new_exp -= m_exp = __trans_tmp_6;
+ m_sig = sig;
+ }
+ void operator/(sreal);
+};
+struct ipa_predicate {
+ ipa_predicate(bool = true);
+ void operator&=(ipa_predicate);
+ void operator&(ipa_predicate);
+};
+void add_condition();
+gimple_code eliminated_by_inlining_prob_code;
+static int eliminated_by_inlining_prob() {
+ switch (eliminated_by_inlining_prob_code) {
+ case GIMPLE_RETURN:
+ return 2;
+ case GIMPLE_ASSIGN:
+ return 1;
+ }
+ return 0;
+}
+void fp_expression_p() {
+ ipa_predicate bb_predicate;
+ for (;;) {
+ int prob = eliminated_by_inlining_prob();
+ ipa_predicate sra_predicate;
+ sra_predicate &= add_condition;
+ if (is_gimple_call())
+ sreal(prob) / 2;
+ if (prob != 2)
+ bb_predicate & sra_predicate;
+ }
+}
diff --git a/gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C
new file mode 100644
index 0000000..3747549
--- /dev/null
+++ b/gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=rv64gcv -mabi=lp64d" } */
+
+#include <riscv_vector.h>
+
+void
+vsseg (float *a, vfloat32mf2_t b, vfloat32mf2_t c, unsigned long vl)
+{
+ vfloat32mf2x2_t foo = vfloat32mf2x2_t ();
+}
diff --git a/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c b/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
index d9015ac..1890312 100644
--- a/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
+++ b/gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
@@ -5,12 +5,12 @@
/* { dg-additional-options "-O2 -g" } */
-typedef long int ptrdiff_t;
-typedef unsigned long int uintptr_t;
-typedef long int EMACS_INT;
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+typedef __UINTPTR_TYPE__ uintptr_t;
+typedef __PTRDIFF_TYPE__ EMACS_INT;
enum
{
- EMACS_INT_WIDTH = 64,
+ EMACS_INT_WIDTH = sizeof(EMACS_INT) * 8,
VALBITS = EMACS_INT_WIDTH - 3,
};
typedef struct Lisp_X* Lisp_Word;
@@ -151,4 +151,5 @@ set_marker_internal(Lisp_Object position, Lisp_Object buffer)
struct buffer* b = live_buffer(buffer);
if (NILP(position) || (MARKERP(position) && !XMARKER(position)->buffer) || !b) /* { dg-bogus "Wanalyzer-deref-before-check" } */
unchain_marker();
+ return 0;
}
diff --git a/gcc/testsuite/gcc.dg/bf-ms-attrib.c b/gcc/testsuite/gcc.dg/bf-ms-attrib.c
index 2da4f03..5208c7f 100644
--- a/gcc/testsuite/gcc.dg/bf-ms-attrib.c
+++ b/gcc/testsuite/gcc.dg/bf-ms-attrib.c
@@ -32,7 +32,7 @@ main()
/* As long as the sizes are as expected, we know attributes are working.
bf-ms-layout.c makes sure the right thing happens when the attribute
is on. */
- if (sizeof(struct one_ms) != 8)
+ if (sizeof(struct one_ms) != 12)
abort();
if (sizeof(struct one_gcc) != 8)
abort();
diff --git a/gcc/testsuite/gcc.dg/cpp/pr118674.c b/gcc/testsuite/gcc.dg/cpp/pr118674.c
new file mode 100644
index 0000000..00ea438
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/pr118674.c
@@ -0,0 +1,5 @@
+/* PR preprocessor/118674 */
+/* { dg-do preprocess } */
+#define M(__VA_ARGS__, ...)
+/* { dg-error "'__VA_ARGS__' can only appear in the expansion of a C99 variadic macro" "" { target *-*-* } .-1 } */
+/* { dg-error "duplicate macro parameter '__VA_ARGS__'" "" { target *-*-* } .-2 } */
diff --git a/gcc/testsuite/gcc.dg/gnu23-tag-6.c b/gcc/testsuite/gcc.dg/gnu23-tag-6.c
new file mode 100644
index 0000000..b28c7b3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gnu23-tag-6.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-options "-std=gnu23" } */
+
+int f(int n)
+{
+ struct foo { struct { char (*x)[n]; }; } a;
+ {
+ struct foo { struct { char (*x)[n]; }; } b = a;
+ }
+}
+
+int g(int n)
+{
+ struct foo { struct { char (*x)[n]; }; } a;
+ {
+ struct foo { struct { char (*x)[n]; }; } *b = &a;
+ }
+}
+
+int h(int n)
+{
+ struct foo { struct { struct bar { char (*x)[n]; }* p; }; } a;
+ {
+ struct foo { struct { struct bar { char (*x)[n]; }* p; }; } *b = &a;
+ }
+}
+
diff --git a/gcc/testsuite/gcc.dg/guality/pr36728-3.c b/gcc/testsuite/gcc.dg/guality/pr36728-3.c
index 4700d50..589009b 100644
--- a/gcc/testsuite/gcc.dg/guality/pr36728-3.c
+++ b/gcc/testsuite/gcc.dg/guality/pr36728-3.c
@@ -30,7 +30,7 @@ foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7)
/* { dg-final { gdb-test 14 "arg5" "5" } } */
/* { dg-final { gdb-test 14 "arg6" "6" } } */
/* { dg-final { gdb-test 14 "arg7" "30" } } */
-/* { dg-final { gdb-test 14 "y" "2" } } */
+/* { dg-final { gdb-test 14 "y" "2" { xfail { aarch64*-*-* && { any-opts "-O3" } } } } } */
/* { dg-final { gdb-test 16 "arg1" "1" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg2" "2" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg3" "3" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/pr41353-1.c b/gcc/testsuite/gcc.dg/guality/pr41353-1.c
index 6639a52..ead9d89 100644
--- a/gcc/testsuite/gcc.dg/guality/pr41353-1.c
+++ b/gcc/testsuite/gcc.dg/guality/pr41353-1.c
@@ -22,7 +22,7 @@ f2 (int i, int j)
{
j += i;
/* { dg-final { gdb-test .+4 "i" "37" } } */
- /* { dg-final { gdb-test .+3 "j" "28 + 37" { xfail { no-opts "-O0" } } } } */
+ /* { dg-final { gdb-test .+3 "j" "28 + 37" { xfail { { ! aarch64-*-* } && { no-opts "-O0" } } } } } */
int i1 = 2 * i; /* { dg-final { gdb-test .+2 "i1" "2 * 37" } } */
int i2 = 3 * i; /* { dg-final { gdb-test .+1 "i2" "3 * 37" } } */
return j;
diff --git a/gcc/testsuite/gcc.dg/guality/pr54693-2.c b/gcc/testsuite/gcc.dg/guality/pr54693-2.c
index 7a0ae73..229ef0e 100644
--- a/gcc/testsuite/gcc.dg/guality/pr54693-2.c
+++ b/gcc/testsuite/gcc.dg/guality/pr54693-2.c
@@ -18,7 +18,7 @@ foo (int x, int y, int z)
while (x > 3 && y > 3 && z > 3)
{ /* { dg-final { gdb-test .+2 "i" "v + 1" } } */
/* { dg-final { gdb-test .+1 "x" "10 - i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
- bar (i); /* { dg-final { gdb-test . "y" "20 - 2 * i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
+ bar (i); /* { dg-final { gdb-test . "y" "20 - 2 * i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" "-Os" } } } } } */
/* { dg-final { gdb-test .-1 "z" "30 - 3 * i" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" "-Os" } } } } } */
i++, x--, y -= 2, z -= 3;
}
diff --git a/gcc/testsuite/gcc.dg/guality/pr68860-1.c b/gcc/testsuite/gcc.dg/guality/pr68860-1.c
index 8c8d835..96d3b43 100644
--- a/gcc/testsuite/gcc.dg/guality/pr68860-1.c
+++ b/gcc/testsuite/gcc.dg/guality/pr68860-1.c
@@ -31,7 +31,7 @@ foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int a
/* { dg-final { gdb-test 14 "arg6" "6" } } */
/* { dg-final { gdb-test 14 "arg7" "30" } } */
/* { dg-final { gdb-test 14 "arg8" "7" } } */
-/* { dg-final { gdb-test 14 "y" "2" } } */
+/* { dg-final { gdb-test 14 "y" "2" { xfail { aarch64*-*-* && { any-opts "-O3" } } } } } */
/* { dg-final { gdb-test 16 "arg1" "1" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg2" "2" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg3" "3" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/pr68860-2.c b/gcc/testsuite/gcc.dg/guality/pr68860-2.c
index 070efbc..a18a04e 100644
--- a/gcc/testsuite/gcc.dg/guality/pr68860-2.c
+++ b/gcc/testsuite/gcc.dg/guality/pr68860-2.c
@@ -31,7 +31,7 @@ foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int a
/* { dg-final { gdb-test 14 "arg6" "6" } } */
/* { dg-final { gdb-test 14 "arg7" "30" } } */
/* { dg-final { gdb-test 14 "arg8" "7" } } */
-/* { dg-final { gdb-test 14 "y" "2" } } */
+/* { dg-final { gdb-test 14 "y" "2" { xfail { aarch64*-*-* && { any-opts "-O3" } } } } } */
/* { dg-final { gdb-test 16 "arg1" "1" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg2" "2" { target { ! "s390*-*-*" } } } } */
/* { dg-final { gdb-test 16 "arg3" "3" } } */
diff --git a/gcc/testsuite/gcc.dg/guality/sra-1.c b/gcc/testsuite/gcc.dg/guality/sra-1.c
index c0d1cf6..9d4cafbf 100644
--- a/gcc/testsuite/gcc.dg/guality/sra-1.c
+++ b/gcc/testsuite/gcc.dg/guality/sra-1.c
@@ -39,7 +39,7 @@ f3 (int k)
struct B a = { 4, k + 6 };
asm ("" : "+r" (a.i));
a.j++;
- bar (a.i); /* { dg-final { gdb-test .+1 "a.i" "4" { xfail { aarch64*-*-* && { { any-opts "-Og" "-O2" "-O3" } && { ! { any-opts "-fno-fat-lto-objects" } } } } } } } */
+ bar (a.i); /* { dg-final { gdb-test .+1 "a.i" "4" { xfail { aarch64*-*-* && { any-opts "-Og" "-fno-fat-lto-objects" } } } } } */
bar (a.j); /* { dg-final { gdb-test . "a.j" "14" { xfail { aarch64*-*-* && { any-opts "-Og" "-fno-fat-lto-objects" } } } } } */
return a.i + a.j;
}
diff --git a/gcc/testsuite/gcc.dg/guality/vla-1.c b/gcc/testsuite/gcc.dg/guality/vla-1.c
index 264b9f3..f44474e 100644
--- a/gcc/testsuite/gcc.dg/guality/vla-1.c
+++ b/gcc/testsuite/gcc.dg/guality/vla-1.c
@@ -20,8 +20,8 @@ f1 (int i)
int __attribute__((noinline))
f2 (int i)
{
- short a[i * 2 + 7]; /* { dg-final { gdb-test .+1 "i" "5" } } */
- bar (a); /* { dg-final { gdb-test . "sizeof (a)" "17 * sizeof (short)" } } */
+ short a[i * 2 + 7]; /* { dg-final { gdb-test .+1 "i" "5" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
+ bar (a); /* { dg-final { gdb-test . "sizeof (a)" "17 * sizeof (short)" { xfail { aarch64*-*-* && { any-opts "-fno-fat-lto-objects" } } } } } */
return a[i + 4];
}
diff --git a/gcc/testsuite/gcc.dg/pr119594.c b/gcc/testsuite/gcc.dg/pr119594.c
new file mode 100644
index 0000000..5d1cb37
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr119594.c
@@ -0,0 +1,32 @@
+/* PR rtl-optimization/119594 */
+/* { dg-do run } */
+/* { dg-options "-Os -fno-dce -fno-tree-dce -fno-tree-dse" } */
+
+int a, b;
+static unsigned c = -1;
+
+void
+foo (int e)
+{
+ a = a ^ e;
+}
+
+void
+bar (long e)
+{
+ foo (e >> 1);
+}
+
+int
+main ()
+{
+ int g[2];
+ for (int h = 0; h < 2; h++)
+ g[h] = -1;
+ for (; b; b++)
+ ;
+ g[1] = 0;
+ bar (c);
+ if (!a)
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.dg/pr119612.c b/gcc/testsuite/gcc.dg/pr119612.c
new file mode 100644
index 0000000..82bc5d9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr119612.c
@@ -0,0 +1,9 @@
+/* PR c/119612
+ * { dg-do compile }
+ * { dg-options "-std=gnu23" }
+ * */
+
+int n = 3;
+void a(struct { char (*p)[n]; } *); /* { dg-warning "anonymous struct" } */
+void b(struct { char (*p)[n]; } *); /* { dg-warning "anonymous struct" } */
+
diff --git a/gcc/testsuite/gcc.dg/pr119664.c b/gcc/testsuite/gcc.dg/pr119664.c
new file mode 100644
index 0000000..23ffc30
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr119664.c
@@ -0,0 +1,15 @@
+/* PR target/119664 */
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+
+struct S { unsigned : 1, a : 1; } *s;
+int foo (void);
+void bar (void);
+
+int
+baz (void)
+{
+ int a = s->a;
+ bar ();
+ return a && foo ();
+}
diff --git a/gcc/testsuite/gcc.dg/torture/bitint-76.c b/gcc/testsuite/gcc.dg/torture/bitint-76.c
new file mode 100644
index 0000000..df47857
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/bitint-76.c
@@ -0,0 +1,19 @@
+/* PR tree-optimization/119707 */
+/* { dg-do run { target bitint } } */
+
+#if __BITINT_MAXWIDTH__ >= 256
+__attribute__((noipa)) unsigned _BitInt(256)
+foo (unsigned _BitInt(256) x, _BitInt(129) y)
+{
+ return x + (unsigned _BitInt(255)) y;
+}
+#endif
+
+int
+main ()
+{
+#if __BITINT_MAXWIDTH__ >= 256
+ if (foo (0, -1) != 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffuwb)
+ __builtin_abort ();
+#endif
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr119399.c b/gcc/testsuite/gcc.dg/vect/pr119399.c
new file mode 100644
index 0000000..8d868f4
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr119399.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-fdump-tree-vect-raw" } */
+
+void foo(int *p, int *q, int n)
+{
+ for (int i = 0; i < n; i++)
+ p[i] = q[i] + 1;
+}
+
+/* { dg-final { scan-tree-dump-not {<pointer_diff_expr,} "vect" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/pr119640.c b/gcc/testsuite/gcc.dg/vect/pr119640.c
new file mode 100644
index 0000000..8872817
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr119640.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-funswitch-loops" } */
+
+int save, mask_nbits;
+
+void execute(long imm)
+{
+ long shift = 0;
+ int destReg[4];
+ for (unsigned i = 0; i < 4; i++)
+ {
+ if (imm)
+ shift = 1ULL << mask_nbits;
+ destReg[i] = shift;
+ save = destReg[0];
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/vect/pr99102.c b/gcc/testsuite/gcc.dg/vect/pr99102.c
index 071741f..fcbf036 100644
--- a/gcc/testsuite/gcc.dg/vect/pr99102.c
+++ b/gcc/testsuite/gcc.dg/vect/pr99102.c
@@ -1,5 +1,5 @@
/* { 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 } } */
+/* { dg-additional-options "-march=armv8-a+sve -msve-vector-bits=256" { target aarch64_sve256_hw } } */
long a[44];
short d, e = -7;
__attribute__((noipa)) void b(char f, short j, short k, unsigned l) {
diff --git a/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c b/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
index b4141da..843fdac 100644
--- a/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
+++ b/gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
@@ -8,7 +8,7 @@
/*
** le32:
** sub w([0-9]+), w0, #1
-** tst w0, w\1
+** tst (?:w0, w\1|w\1, w0)
** cset w0, eq
** ret
*/
@@ -20,7 +20,7 @@ unsigned le32 (const unsigned int a) {
/*
** gt32:
** sub w([0-9]+), w0, #1
-** tst w0, w\1
+** tst (?:w0, w\1|w\1, w0)
** cset w0, ne
** ret
*/
diff --git a/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c b/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
index b811e6f..3b558e9 100644
--- a/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
+++ b/gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
@@ -8,7 +8,7 @@
/*
** le16:
** sub w([0-9]+), w0, #1
-** and w([0-9]+), w0, w\1
+** and w([0-9]+), (?:w0, w\1|w\1, w0)
** tst w\2, 65535
** cset w0, eq
** ret
@@ -21,7 +21,7 @@ unsigned le16 (const unsigned short a) {
/*
** gt16:
** sub w([0-9]+), w0, #1
-** and w([0-9]+), w0, w\1
+** and w([0-9]+), (?:w0, w\1|w\1, w0)
** tst w\2, 65535
** cset w0, ne
** ret
diff --git a/gcc/testsuite/gcc.target/aarch64/pr100056.c b/gcc/testsuite/gcc.target/aarch64/pr100056.c
index 0b77824..70499772 100644
--- a/gcc/testsuite/gcc.target/aarch64/pr100056.c
+++ b/gcc/testsuite/gcc.target/aarch64/pr100056.c
@@ -1,7 +1,9 @@
/* PR target/100056 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
-/* { dg-final { scan-assembler-not {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} } } */
+/* { dg-final { scan-assembler-not {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} { xfail *-*-* } } } */
+/* { dg-final { scan-assembler-times {\t[us]bfiz\tw[0-9]+, w[0-9]+, 11} 2 } } */
+/* { dg-final { scan-assembler-times {\tadd\tw[0-9]+, w[0-9]+, w[0-9]+, uxtb\n} 2 } } */
int
or_shift_u8 (unsigned char i)
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp b/gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp
new file mode 100644
index 0000000..376985d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/gomp.exp
@@ -0,0 +1,46 @@
+# Copyright (C) 2006-2025 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/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Exit immediately if this isn't an AArch64 target.
+if {![istarget aarch64*-*-*] } then {
+ return
+}
+
+# Load support procs.
+load_lib gcc-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+if ![check_effective_target_fopenmp] {
+ return
+}
+
+if { [check_effective_target_aarch64_sve] } {
+ set sve_flags ""
+} else {
+ set sve_flags "-march=armv8.2-a+sve"
+}
+
+# Main loop.
+dg-runtest [lsort [find $srcdir/$subdir *.c]] "$sve_flags -fopenmp" ""
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c
new file mode 100644
index 0000000..75dd39b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-device.c
@@ -0,0 +1,201 @@
+/* { dg-do compile } */
+/* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */
+
+#include <arm_sve.h>
+
+#define N __ARM_FEATURE_SVE_BITS
+
+int64_t __attribute__ ((noipa))
+target_device_ptr_vla (svbool_t vp, svint32_t *vptr)
+{
+
+ int a[N], b[N], c[N];
+ svint32_t va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+/* { dg-error {SVE type 'svint32_t \*' not allowed in 'target' device clauses} "" { target *-*-* } .+1 } */
+#pragma omp target data use_device_ptr (vptr) map (to: b, c)
+/* { dg-error {SVE type 'svint32_t \*' not allowed in 'target' device clauses} "" { target *-*-* } .+1 } */
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vb = *vptr;
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+2 } */
+ /* { dg-error "cannot reference 'svbool_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vc = svld1_s32 (vp, c);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_device_addr_vla (svbool_t vp, svint32_t *vptr)
+{
+
+ int a[N], b[N], c[N];
+ svint32_t va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'target' device clauses" "" { target *-*-* } .+1 } */
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+/* { dg-error {SVE type 'svint32_t \*' not allowed in 'target' device clauses} "" { target *-*-* } .+1 } */
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vb = *vptr;
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+2 } */
+ /* { dg-error "cannot reference 'svbool_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vc = svld1_s32 (vp, c);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_has_device_addr_vla (svbool_t vp, svint32_t *vptr)
+{
+
+ int a[N], b[N], c[N];
+ svint32_t va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'target' device clauses" "" { target *-*-* } .+1 } */
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+/* { dg-error "SVE type 'svint32_t' not allowed in 'target' device clauses" "" { target *-*-* } .+1 } */
+#pragma omp target has_device_addr (vb) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svbool_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vb = svld1_s32 (vp, b);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ vc = svld1_s32 (vp, c);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+#define FIXED_ATTR __attribute__ ((arm_sve_vector_bits (N)))
+
+typedef __SVInt32_t v8si FIXED_ATTR;
+typedef svbool_t v8bi FIXED_ATTR;
+
+int64_t __attribute__ ((noipa))
+target_device_ptr_vls (v8bi vp, v8si *vptr)
+{
+
+ int a[N], b[N], c[N];
+ v8si va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+#pragma omp target data use_device_ptr (vptr) map (to: b, c)
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ vb = *vptr;
+ vc = svld1_s32 (vp, c);
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_device_addr_vls (v8bi vp, v8si *vptr)
+{
+
+ int a[N], b[N], c[N];
+ v8si va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+#pragma omp target is_device_ptr (vptr) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ vb = *vptr;
+ vc = svld1_s32 (vp, c);
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
+
+int64_t __attribute__ ((noipa))
+target_has_device_addr_vls (v8bi vp, v8si *vptr)
+{
+
+ int a[N], b[N], c[N];
+ v8si va, vb, vc;
+ int64_t res;
+ int i;
+
+#pragma omp parallel for
+ for (i = 0; i < N; i++)
+ {
+ b[i] = i;
+ c[i] = i + 1;
+ }
+
+#pragma omp target data use_device_addr (vb) map (to: b, c)
+#pragma omp target has_device_addr (vb) map (to: b, c) map (from: res)
+ for (i = 0; i < 8; i++)
+ {
+ vb = svld1_s32 (vp, b);
+ vc = svld1_s32 (vp, c);
+ va = svadd_s32_z (vp, vb, vc);
+ res = svaddv_s32 (svptrue_b32 (), va);
+ }
+
+ return res;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c
new file mode 100644
index 0000000..2f6184b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target-link.c
@@ -0,0 +1,57 @@
+/* { dg-do compile } */
+/* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */
+
+#include <arm_sve.h>
+
+#define N __ARM_FEATURE_SVE_BITS
+#define FIXED_ATTR __attribute__((arm_sve_vector_bits (N)))
+
+typedef __SVInt32_t v8si FIXED_ATTR;
+
+static v8si local_vec;
+#pragma omp declare target link(local_vec)
+
+v8si global_vec;
+#pragma omp declare target link(global_vec)
+
+/* { dg-error {SVE type 'svint32_t' does not have a fixed size} "" { target *-*-* } .+1 } */
+static svint32_t slocal_vec;
+
+/* { dg-error {'slocal_vec' does not have a mappable type in 'link' clause} "" { target *-*-* } .+1 } */
+#pragma omp declare target link(slocal_vec)
+
+void
+one_get_inc2_local_vec_vls ()
+{
+ v8si res, res2, tmp;
+
+#pragma omp target map(from: res, res2)
+ {
+ res = local_vec;
+ local_vec = svadd_s32_z (svptrue_b32 (), local_vec, local_vec);
+ res2 = local_vec;
+ }
+
+ tmp = svadd_s32_z (svptrue_b32 (), res, res);
+ svbool_t p = svcmpne_s32 (svptrue_b32 (), tmp, res2);
+ if (svptest_any (svptrue_b32 (), p))
+ __builtin_abort ();
+}
+
+void
+one_get_inc3_global_vec_vls ()
+{
+ v8si res, res2, tmp;
+
+#pragma omp target map(from: res, res2)
+ {
+ res = global_vec;
+ global_vec = svadd_s32_z (svptrue_b32 (), global_vec, global_vec);
+ res2 = global_vec;
+ }
+
+ tmp = svadd_s32_z (svptrue_b32 (), res, res);
+ svbool_t p = svcmpne_s32 (svptrue_b32 (), tmp, res2);
+ if (svptest_any (svptrue_b32 (), p))
+ __builtin_abort ();
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c
new file mode 100644
index 0000000..812183d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/gomp/target.c
@@ -0,0 +1,2049 @@
+/* { dg-do compile } */
+/* { dg-options "-msve-vector-bits=256 -fopenmp -O2" } */
+
+#include <arm_sve.h>
+
+#define N __ARM_FEATURE_SVE_BITS
+#define FIXED_ATTR __attribute__((arm_sve_vector_bits (N)))
+
+typedef svint32_t v8si FIXED_ATTR;
+typedef svbool_t v8bi FIXED_ATTR;
+
+void
+target_vla1 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla1 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla1 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla1 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla1 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls1 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls1 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls1 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls1 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls1 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla2 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla2 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla2 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla2 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla2 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls2 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls2 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls2 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls2 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target parallel map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls2 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla3 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla3 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla3 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla3 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla3 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target parallel loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls3 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls3 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls3 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target parallel loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls3 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target parallel loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target parallel loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls3 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target parallel loop
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target parallel loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla4 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla4 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla4 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla4 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla4 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls4 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls4 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls4 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls4 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls4 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target simd
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla5 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla5 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla5 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla5 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla5 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls5 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls5 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls5 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls5 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls5 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla6 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla6 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla6 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla6 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla6 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls6 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls6 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls6 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams loop map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls6 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams loop map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams loop map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls6 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams loop
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams loop map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla7 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla7 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla7 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla7 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla7 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls7 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls7 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls7 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls7 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams distribute map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams distribute map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls7 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams distribute map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vla8 (svint32_t vb, svint32_t vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ svint32_t va;
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+svint32_t
+target_data_map_1_vla8 (svint32_t vb, svint32_t vc, int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+svint32_t
+target_data_map_2_vla8 (svint32_t vb, svint32_t vc, int *a, int *b,
+ int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+svint32_t
+target_map_data_enter_exit_vla8 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+svint32_t
+target_map_data_alloc_update_vla8 (svint32_t vb, svint32_t vc, int *a,
+ int *b, int *c)
+{
+ svint32_t va;
+ int i;
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ /* { dg-error "cannot reference 'svint32_t' object types in 'target' region" "" { target *-*-* } .+1 } */
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+/* { dg-error "SVE type 'svint32_t' not allowed in 'map' clause" "" { target *-*-* } .+1 } */
+#pragma omp target teams distribute simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+void
+target_vls8 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ int i;
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ v8si va;
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ }
+}
+
+v8si
+target_data_map_1_vls8 (v8si vb, v8si vc, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+ return va;
+}
+
+v8si
+target_data_map_2_vls8 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target teams distribute simd map(to: b, c, vb, vc) map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
+
+v8si
+target_map_data_enter_exit_vls8 (v8si vb, v8si vc, int *a, int *b, int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target enter data map(to: b, c, vb, vc)
+
+#pragma omp target teams distribute simd map(from: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target teams distribute simd map(to: va) map(to: a)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+
+#pragma omp target exit data map(from: va)
+
+ return va;
+}
+
+v8si
+target_map_data_alloc_update_vls8 (v8si vb, v8si vc, int *a, int *b,
+ int *c)
+{
+ v8si va;
+ int i;
+
+#pragma omp target data map(to: b, c, vb, vc) map(alloc: va)
+
+#pragma omp target teams distribute simd
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), b + i * 8, vb);
+ svst1_s32 (svptrue_b32 (), c + i * 8, vc);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), vb, vc);
+ }
+
+#pragma omp target update from(va)
+
+#pragma omp target teams distribute simd map(to: a) map(tofrom: va)
+ for (i = 0; i < 8; i++)
+ {
+ svst1_s32 (svptrue_b32 (), a + i * 8, va);
+ if (i == 7)
+ va = svadd_s32_z (svptrue_b32 (), va, svindex_s32 (1, 1));
+ }
+ return va;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c
index a7d2795..c9a8b82 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-1.c
@@ -19,6 +19,6 @@ void f10(double * restrict z, double * restrict w, double * restrict x, double *
}
}
-/* { dg-final { scan-assembler-not {\tbic\t} { xfail *-*-* } } } */
-/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 { xfail *-*-* } } } */
+/* { dg-final { scan-assembler-not {\tbic\t} } } */
+/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 } } */
/* { dg-final { scan-assembler-times {\tfcmgt\tp[0-9]+\.d, p[0-9]+/z, z[0-9]+\.d, #0} 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c
index 20cbd75..1845bd3 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/pred-not-gen-4.c
@@ -8,6 +8,6 @@ void f13(double * restrict z, double * restrict w, double * restrict x, double *
}
}
-/* { dg-final { scan-assembler-not {\tbic\t} { xfail *-*-* } } } */
-/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 { xfail *-*-* } } } */
+/* { dg-final { scan-assembler-not {\tbic\t} } } */
+/* { dg-final { scan-assembler-times {\tnot\tp[0-9]+\.b, p[0-9]+/z, p[0-9]+\.b\n} 1 } } */
/* { dg-final { scan-assembler-times {\tfcmuo\tp[0-9]+\.d, p[0-9]+/z, z[0-9]+\.d, z[0-9]+\.d} 1 } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c
index 33b9f0f..b8afea7 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_2.c
@@ -16,7 +16,8 @@ f (TYPE *x, TYPE *y, unsigned short n, unsigned short m)
/* { dg-final { scan-assembler {\tldr\tw[0-9]+} } } */
/* { dg-final { scan-assembler {\tstr\tw[0-9]+} } } */
/* Should multiply by (257-1)*4 rather than (VF-1)*4 or (VF-2)*4. */
-/* { dg-final { scan-assembler-times {\tadd\tx[0-9]+, x[0-9]+, x[0-9]+, lsl 10\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tubfiz\tx[0-9]+, x2, 10, 16\n} 1 } } */
+/* { dg-final { scan-assembler-times {\tubfiz\tx[0-9]+, x3, 10, 16\n} 1 } } */
/* { dg-final { scan-assembler-not {\tcmp\tx[0-9]+, 0} } } */
/* { dg-final { scan-assembler-not {\tcmp\tw[0-9]+, 0} } } */
/* { dg-final { scan-assembler-not {\tcsel\tx[0-9]+} } } */
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c
index 71b826a..d2e74f9 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/var_stride_4.c
@@ -16,7 +16,8 @@ f (TYPE *x, TYPE *y, int n, int m)
/* { dg-final { scan-assembler {\tldr\tw[0-9]+} } } */
/* { dg-final { scan-assembler {\tstr\tw[0-9]+} } } */
/* Should multiply by (257-1)*4 rather than (VF-1)*4. */
-/* { dg-final { scan-assembler-times {\t(?:lsl\tx[0-9]+, x[0-9]+, 10|sbfiz\tx[0-9]+, x[0-9]+, 10, 32)\n} 2 } } */
+/* { dg-final { scan-assembler-times {\tsbfiz\tx[0-9]+, x2, 10, 32\n} 1 } } */
+/* { dg-final { scan-assembler-times {\tsbfiz\tx[0-9]+, x3, 10, 32\n} 1 } } */
/* { dg-final { scan-assembler {\tcmp\tw2, 0} } } */
/* { dg-final { scan-assembler {\tcmp\tw3, 0} } } */
/* { dg-final { scan-assembler-times {\tcsel\tx[0-9]+} 4 } } */
diff --git a/gcc/testsuite/gcc.target/arm/ivopts.c b/gcc/testsuite/gcc.target/arm/ivopts.c
index d7d72a5..582fdab 100644
--- a/gcc/testsuite/gcc.target/arm/ivopts.c
+++ b/gcc/testsuite/gcc.target/arm/ivopts.c
@@ -11,6 +11,6 @@ tr5 (short array[], int n)
}
/* { dg-final { scan-tree-dump-times "PHI <" 1 "ivopts"} } */
-/* { dg-final { object-size text <= 20 { target { arm_thumb2_no_arm_v8_1_lob } } } } */
+/* { dg-final { object-size text <= 20 { target { arm_thumb2_no_arm_v8_1m_lob } } } } */
/* { dg-final { object-size text <= 32 { target { arm_nothumb && { ! arm_iwmmxt_ok } } } } } */
/* { dg-final { object-size text <= 36 { target { arm_nothumb && arm_iwmmxt_ok } } } } */
diff --git a/gcc/testsuite/gcc.target/arm/lob1.c b/gcc/testsuite/gcc.target/arm/lob1.c
index c8ce653..f42a367 100644
--- a/gcc/testsuite/gcc.target/arm/lob1.c
+++ b/gcc/testsuite/gcc.target/arm/lob1.c
@@ -1,7 +1,7 @@
/* Check that GCC generates Armv8.1-M low over head loop instructions
for some simple loops. */
/* { dg-do run } */
-/* { dg-require-effective-target arm_v8_1_lob_ok } */
+/* { dg-require-effective-target arm_v8_1m_lob_hw } */
/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */
/* { dg-options "-march=armv8.1-m.main -mthumb -O3 --save-temps" } */
#include <stdlib.h>
diff --git a/gcc/testsuite/gcc.target/arm/lob6.c b/gcc/testsuite/gcc.target/arm/lob6.c
index 4fe116e..e19635b 100644
--- a/gcc/testsuite/gcc.target/arm/lob6.c
+++ b/gcc/testsuite/gcc.target/arm/lob6.c
@@ -1,7 +1,7 @@
/* Check that GCC generates Armv8.1-M low over head loop instructions
with some less trivial loops and the result is correct. */
/* { dg-do run } */
-/* { dg-require-effective-target arm_v8_1_lob_ok } */
+/* { dg-require-effective-target arm_v8_1m_lob_hw } */
/* { dg-skip-if "avoid conflicting multilib options" { *-*-* } { "-marm" "-mcpu=*" } } */
/* { dg-options "-march=armv8.1-m.main -mthumb -O3 --save-temps" } */
#include <stdlib.h>
diff --git a/gcc/testsuite/gcc.target/arm/short-vfp-1.c b/gcc/testsuite/gcc.target/arm/short-vfp-1.c
index f6866c4..418fc27 100644
--- a/gcc/testsuite/gcc.target/arm/short-vfp-1.c
+++ b/gcc/testsuite/gcc.target/arm/short-vfp-1.c
@@ -1,45 +1,75 @@
/* { dg-do compile } */
-/* { dg-require-effective-target arm_vfp_ok } */
-/* { dg-add-options arm_vfp } */
+/* { dg-require-effective-target arm_arch_v7a_fp_hard_ok } */
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_arch_v7a_fp_hard } */
+/* { dg-final { check-function-bodies "**" "" } } */
+/*
+** test_sisf:
+** vcvt.s32.f32 (s[0-9]+), s0
+** vmov r0, \1 @ int
+** bx lr
+*/
int
test_sisf (float x)
{
return (int)x;
}
+/*
+** test_hisf:
+** vcvt.s32.f32 (s[0-9]+), s0
+** vmov (r[0-9]+), \1 @ int
+** sxth r0, \2
+** bx lr
+*/
short
test_hisf (float x)
{
return (short)x;
}
+/*
+** test_sfsi:
+** vmov (s[0-9]+), r0 @ int
+** vcvt.f32.s32 s0, \1
+** bx lr
+*/
float
test_sfsi (int x)
{
return (float)x;
}
+/*
+** test_sfhi:
+** vmov (s[0-9]+), r0 @ int
+** vcvt.f32.s32 s0, \1
+** bx lr
+*/
float
test_sfhi (short x)
{
return (float)x;
}
+/*
+** test_hisi:
+** sxth r0, r0
+** bx lr
+*/
short
test_hisi (int x)
{
return (short)x;
}
+/*
+** test_sihi:
+** bx lr
+*/
int
test_sihi (short x)
{
return (int)x;
}
-
-/* { dg-final { scan-assembler-times {vcvt\.s32\.f32\ts[0-9]+, s[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {vcvt\.f32\.s32\ts[0-9]+, s[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {vmov\tr[0-9]+, s[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {vmov\ts[0-9]+, r[0-9]+} 2 } } */
-/* { dg-final { scan-assembler-times {sxth\tr[0-9]+, r[0-9]+} 2 } } */
diff --git a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
index 9272e4c..41ee994 100644
--- a/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
+++ b/gcc/testsuite/gcc.target/arm/unsigned-extend-2.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-require-effective-target arm_thumb2_ok_no_arm_v8_1_lob } */
+/* { dg-require-effective-target arm_thumb2_ok_no_arm_v8_1m_lob } */
/* { dg-options "-O" } */
unsigned short foo (unsigned short x, unsigned short c)
diff --git a/gcc/testsuite/gcc.target/i386/pr67215-1.c b/gcc/testsuite/gcc.target/i386/pr67215-1.c
index fd37f8e..ab69550 100644
--- a/gcc/testsuite/gcc.target/i386/pr67215-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr67215-1.c
@@ -13,8 +13,8 @@ foo (void)
arr[i] = bar (128);
}
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler-not "movl\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "call\[ \t\]*.bar@PLT" } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]+bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler-not "movl\[ \t\]+bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "call\[ \t\]+\\*bar@PLT" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr67215-2.c b/gcc/testsuite/gcc.target/i386/pr67215-2.c
index ebf2919..9fd7469 100644
--- a/gcc/testsuite/gcc.target/i386/pr67215-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr67215-2.c
@@ -13,8 +13,8 @@ foo (void)
arr[i] = bar (128);
}
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler-not "movl\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
-/* { dg-final { scan-assembler-not "call\[ \t\]*.bar@PLT" } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler "call\[ \t\]+\\*bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "mov(l|q)\[ \t\]+bar@GOTPCREL" { target { ! ia32 } } } } */
+/* { dg-final { scan-assembler-not "movl\[ \t\]+bar@GOT\\(" { target ia32 } } } */
+/* { dg-final { scan-assembler-not "call\[ \t\]+\\*bar@PLT" } } */
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c b/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c
index 4cc4d0c..92562cd 100644
--- a/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c
@@ -1,4 +1,4 @@
-/* { dg-do link } */
+/* { dg-do run } */
/* { dg-options {-O0 -mno-soft-stack} } */
/* { dg-additional-options -march=sm_30 } */
/* { dg-additional-options -mfake-ptx-alloca } */
@@ -13,6 +13,7 @@ main(void)
/* { dg-final { scan-assembler-times {(?n)^\.extern \.func \(\.param\.u64 %value_out\) __GCC_nvptx__PTX_alloca_not_supported \(\.param\.u64 %in_ar0\);$} 1 } } */
-/* { dg-message __GCC_nvptx__PTX_alloca_not_supported {unresolved symbol} { target *-*-* } 0 } */
+/* { dg-bogus __GCC_nvptx__PTX_alloca_not_supported {unresolved symbol} { target *-*-* } 0 } */
-/* { dg-final output-exists-not } */
+/* { dg-output {GCC/nvptx: sorry, unimplemented: dynamic stack allocation not supported[\r\n]+} }
+ { dg-shouldfail __GCC_nvptx__PTX_alloca_not_supported } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c
deleted file mode 100644
index e4ff310..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f16.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -ffast-math" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (float, _Float16)
-
-/* { dg-final { scan-assembler-times {\tvfwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c
deleted file mode 100644
index 7d2b448..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-f32.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable -ffast-math" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (double, float)
-
-/* { dg-final { scan-assembler-times {\tvfwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c
deleted file mode 100644
index dc7e1da..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i16.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (int32_t, int16_t)
-
-/* { dg-final { scan-assembler-times {\tvwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c
deleted file mode 100644
index de1072f..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i32.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (int64_t, int32_t)
-
-/* { dg-final { scan-assembler-times {\tvwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c
deleted file mode 100644
index 8de5ef4..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-i8.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (int16_t, int8_t)
-
-/* { dg-final { scan-assembler-times {\tvwmul\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c
deleted file mode 100644
index a4aafd2..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u16.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (uint32_t, uint16_t)
-
-/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c
deleted file mode 100644
index 0deeaa0..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u32.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (uint64_t, uint32_t)
-
-/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c
deleted file mode 100644
index a6afcd0..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3-u8.c
+++ /dev/null
@@ -1,9 +0,0 @@
-/* { dg-do compile } */
-/* { dg-additional-options "-march=rv32gcv -mabi=ilp32d -mrvv-vector-bits=scalable" } */
-
-#include "cond_widen_complicate-3.h"
-
-TEST_TYPE (uint16_t, uint8_t)
-
-/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 1 } } */
-/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c
new file mode 100644
index 0000000..d02a8e2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.c
@@ -0,0 +1,36 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=rv32gcv_zvfh -mabi=ilp32d -mrvv-vector-bits=scalable -ffast-math" } */
+
+#include <stdint-gcc.h>
+
+#define TEST_TYPE(TYPE1, TYPE2) \
+ __attribute__ ((noipa)) void vwadd_##TYPE1_##TYPE2 ( \
+ TYPE1 *__restrict dst, TYPE1 *__restrict dst2, TYPE1 *__restrict dst3, \
+ TYPE1 *__restrict dst4, TYPE2 *__restrict a, TYPE2 *__restrict b, \
+ TYPE2 *__restrict a2, TYPE2 *__restrict b2, int *__restrict pred, int n) \
+ { \
+ for (int i = 0; i < n; i++) \
+ { \
+ dst[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b[i] : dst[i]; \
+ dst2[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) b[i] : dst2[i]; \
+ dst3[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) a[i] : dst3[i]; \
+ dst4[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b2[i] : dst4[i]; \
+ } \
+ }
+
+#define TEST_ALL() \
+ TEST_TYPE (int16_t, int8_t) \
+ TEST_TYPE (uint16_t, uint8_t) \
+ TEST_TYPE (int32_t, int16_t) \
+ TEST_TYPE (uint32_t, uint16_t) \
+ TEST_TYPE (int64_t, int32_t) \
+ TEST_TYPE (uint64_t, uint32_t) \
+ TEST_TYPE (float, _Float16) \
+ TEST_TYPE (double, float)
+
+TEST_ALL ()
+
+/* { dg-final { scan-assembler-times {\tvwmul\.vv} 12 } } */
+/* { dg-final { scan-assembler-times {\tvwmulu\.vv} 12 } } */
+/* { dg-final { scan-assembler-times {\tvfwmul\.vv} 8 } } */
+/* { dg-final { scan-assembler-not {\tvmerge\.vvm\t} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h
deleted file mode 100644
index 974846f..0000000
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/cond/cond_widen_complicate-3.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef COND_WIDEN_COMPLICATE_3_H
-#define COND_WIDEN_COMPLICATE_3_H
-
-#include <stdint-gcc.h>
-
-#define TEST_TYPE(TYPE1, TYPE2) \
- __attribute__ ((noipa)) void vwadd_##TYPE1##_##TYPE2 ( \
- TYPE1 *__restrict dst, TYPE1 *__restrict dst2, TYPE1 *__restrict dst3, \
- TYPE1 *__restrict dst4, TYPE2 *__restrict a, TYPE2 *__restrict b, \
- TYPE2 *__restrict a2, TYPE2 *__restrict b2, int *__restrict pred, int n) \
- { \
- for (int i = 0; i < n; i++) \
- { \
- dst[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b[i] : dst[i]; \
- dst2[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) b[i] : dst2[i]; \
- dst3[i] = pred[i] ? (TYPE1) a2[i] * (TYPE1) a[i] : dst3[i]; \
- dst4[i] = pred[i] ? (TYPE1) a[i] * (TYPE1) b2[i] : dst4[i]; \
- } \
- }
-
-#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c
index 493dab0..0267078 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr117722.c
@@ -18,6 +18,5 @@ int pixel_sad_n(unsigned char *pix1, unsigned char *pix2, int n)
return sum;
}
-/* { dg-final { scan-assembler {vrsub\.v} } } */
/* { dg-final { scan-assembler {vmax\.v} } } */
-/* { dg-final { scan-assembler {vwsubu\.v} } } */
+/* { dg-final { scan-assembler-times {vwsubu\.v} 2 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c
index 638e90f..69a94d5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-1.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gczve32x -mabi=lp64d -mrvv-vector-bits=zvl" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c
index 380d0c1..5e0f136 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-fixed-2.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zvl4096b -mabi=lp64d -mrvv-vector-bits=zvl" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c
index 9ed72a6..a3c0a6d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-save-restore.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d -msave-restore" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
index b6b708f..b1cf6aa 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1-zcmp.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c
index 13e3328..8838f0d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-1.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar (int8_t *data);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c
index d21b810..77f1c7c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-save-restore.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d -msave-restore" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar1 (vint8m1_t a);
void bar2 ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
index 70a32d7..37127a8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2-zcmp.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gv_zfh_zca_zcmp -mabi=lp64d -fno-shrink-wrap-separate" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar1 (vint8m1_t a);
void bar2 ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c
index 3f2cb2f..a8daeeb 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/abi-callee-saved-2.c
@@ -2,7 +2,7 @@
/* { dg-options "-O1 -march=rv64gcv_zfh -mabi=lp64d" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar1 (vint8m1_t a);
void bar2 ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c
index fe3a1ef..f8143b9 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10-2.c
@@ -4,7 +4,7 @@
/* { dg-require-effective-target riscv_zvfh_ok } */
/* { dg-options " -march=rv64gcv_zvfh -mabi=lp64d -O2" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
int8_t a[1];
uint16_t b[1];
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c
index 60fdfc4..05628d5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-10.c
@@ -4,7 +4,7 @@
/* { dg-require-effective-target riscv_zvfh_ok } */
/* { dg-options " -march=rv64gcv_zvfh -mabi=lp64d -O2 --param=vsetvl-strategy=optim -fno-schedule-insns -fno-schedule-insns2 -fno-schedule-fusion " } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void
__attribute__ ((noipa))
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c
index 28766ce..3180f71 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-7.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vint64m1_t f1 (vint64m1_t vd, vint64m1_t vs2, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c
index 975f755..31b68c4 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-8.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O0" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O0" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vint64m1_t f1 (vint64m1_t vd, vint64m1_t vs2, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c
index 8cfe965..f7c9ad1 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/bug-9.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat16m1_t f0 (vfloat16m1_t vs2, vfloat16m1_t vs1, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c
index 8a6c00f..a08ac6e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr110943.c
@@ -2,7 +2,7 @@
/* { dg-options "-O3 -march=rv64gcv -mabi=lp64d" } */
/* { dg-final { check-function-bodies "**" "" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
/*
** foo9:
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
index 3e43c94..a0ed793 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-21.c
@@ -1,7 +1,7 @@
/* { dg-do run { target { riscv_v } } } */
/* { dg-additional-options "-O3 -ansi -pedantic-errors -std=gnu99" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
size_t __attribute__ ((noinline))
sumation (size_t sum0, size_t sum1, size_t sum2, size_t sum3, size_t sum4,
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
index 3ad91db..c5b35c8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr114639-1.c
@@ -2,7 +2,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
extern size_t get_vl ();
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c
index d552eb5..e9e41f7 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068-run.c
@@ -1,6 +1,6 @@
/* { dg-do run } */
/* { dg-require-effective-target riscv_v_ok } */
/* { dg-add-options riscv_v } */
-/* { dg-additional-options "-std=gnu99" } */
+/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
#include "pr115068.c"
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c
index af2cba6..ce9a389 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr115068.c
@@ -1,9 +1,9 @@
/* { dg-do compile { target { ! riscv_abi_e } } } */
/* { dg-add-options riscv_v } */
-/* { dg-additional-options "-std=gnu99" } */
+/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
#include <stdint.h>
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat64m8_t
test_vfwadd_wf_f64m8_m (vbool8_t vm, vfloat64m8_t vs2, float rs1, size_t vl)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c
index dabb8ae..7b6eefe 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117286.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O1" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
_Float16 a[10];
void func(){
int placeholder0 = 10;
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c
index af3532a..81e0ec3 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117544.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void bar() __attribute__((riscv_vector_cc));
vint32m1_t foo(vint32m1_t a, vint32m1_t b) {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c
index 81e3a6e..4904c92 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr117955.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { rv64 } } } */
/* { dg-options "-march=rv64gcv_zvfh -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
_Float16 a (uint64_t);
int8_t b () {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
index adb54d6..d62751e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2" { target { rv64 } } } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2" { target { rv32 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat32m2_t foo (vfloat16m1_t a, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c
index 4253729..6bb7e1c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vlmul_ext-1.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O3 -fno-schedule-insns -fno-schedule-insns2" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vint16m8_t test_vlmul_ext_v_i16mf4_i16m8(vint16mf4_t op1) {
return __riscv_vlmul_ext_v_i16mf4_i16m8(op1);
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
index 606854b..a278709 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-1.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -march=rv64gcv -mabi=lp64d" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vuint64m1_t test_vssubu_vx_u64m1(vuint64m1_t op1)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
index 78abd09..2f8c146 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vssubu-2.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O2 -march=rv32gcv -mabi=ilp32d" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vuint64m1_t test_vssubu_vx_u64m1(vuint64m1_t op1)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
index 84d3c4c..43be202 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/base/vwaddsub-1.c
@@ -1,9 +1,9 @@
/* { dg-do compile { target { { ! riscv_abi_e } && rv64 } } } */
/* { dg-add-options riscv_v } */
-/* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-additional-options "-std=gnu99 -O3 -fno-schedule-insns -fno-schedule-insns2 -Wno-pedantic" } */
#include <stdint.h>
-#include <riscv_vector.h>
+#include "riscv_vector.h"
/*
** vwadd_wx_i64m8_m:
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c
index 871cf65..f594217 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr111234.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d -O3" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void
f (vint32m1_t *in, vint64m2_t *out, vbool32_t *m, int b)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c
index b76760b..48f200f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/pr115214.c
@@ -2,7 +2,7 @@
/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d -O3 -w -std=gnu17" } */
/* { dg-skip-if "" { *-*-* } { "-flto" } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
static inline __attribute__(()) int vaddq_f32();
static inline __attribute__(()) int vload_tillz_f32(int nlane) {
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
index 7096159e..3867681 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl-24.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-mrvv-vector-bits=scalable -march=rv64gcv -mabi=lp64d" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
size_t foo ()
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c
index c155f56..3acbc73 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-3.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv32gcv -mabi=ilp32d -O2 -fdump-rtl-vsetvl-details" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
uint64_t a[2], b[2];
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c
index 04a8ff2..2b2fe27 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vsetvl_bug-4.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-march=rv64gcv -mabi=lp64d -O2 -fno-schedule-insns -fdump-rtl-vsetvl-details" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vuint16m1_t
foo (vuint16m1_t a, vuint16m1_t b, size_t avl)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
index dfaf82c..ad27c38 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116591.c
@@ -2,7 +2,7 @@
/* { dg-options "-march=rv32gc_xtheadvector -mabi=ilp32d -O2 -save-temps" { target { rv32 } } } */
/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O2 -save-temps" { target { rv64 } } } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
void
foo (float *a, int b)
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
index a7cd8c5..c8056a8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr116592.c
@@ -3,7 +3,7 @@
/* { dg-options "-march=rv64gc_zfh_xtheadvector -mabi=lp64d -O2 -save-temps" { target { rv64 } } } */
#include <math.h>
-#include <riscv_vector.h>
+#include "riscv_vector.h"
static vfloat32m8_t atan2_ps(vfloat32m8_t a, vfloat32m8_t b, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c
index aebb0e3..b3c3428 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/pr118357.c
@@ -1,7 +1,7 @@
/* { dg-do compile { target { rv64 } } } */
/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O2" } */
-#include <riscv_vector.h>
+#include "riscv_vector.h"
vfloat16m4_t foo (float *ptr, size_t vl)
{
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
new file mode 100644
index 0000000..42fa43e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target { rv64 } } } */
+/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+struct a
+{
+ int b[];
+} c (vint32m4_t), d;
+
+char e;
+char *f;
+
+void g ()
+{
+ int h;
+ vint32m4_t i;
+ vint8m1_t j = __riscv_vlse8_v_i8m1 (&e, d.b[3], h);
+ vint16m2_t k = __riscv_vwadd_vx_i16m2 (j, 0, h);
+ i = __riscv_vwmacc_vx_i32m4 (i, f[0], k, h);
+ c (i);
+}
+
+/* { dg-final { scan-assembler-not {th\.vsext\.vf2} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
new file mode 100644
index 0000000..d622b72
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
@@ -0,0 +1,24 @@
+/* { dg-do compile { target { rv64 } } } */
+/* { dg-options "-march=rv64gc_xtheadvector -mabi=lp64d -O3" } */
+
+#include "riscv_vector.h"
+
+struct a
+{
+ int b[];
+} c (vuint32m4_t), d;
+
+char e;
+char *f;
+
+void g ()
+{
+ int h;
+ vuint32m4_t i;
+ vuint8m1_t j = __riscv_vlse8_v_u8m1 (&e, d.b[3], h);
+ vuint16m2_t k = __riscv_vwaddu_vx_u16m2 (j, 0, h);
+ i = __riscv_vwmaccu_vx_u32m4 (i, f[0], k, h);
+ c (i);
+}
+
+/* { dg-final { scan-assembler-not {th\.vzext\.vf2} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
index c0d643d..929de16 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-1-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
index 470e6b7..a540198 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-2-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
index bb94775..e3fe6c7 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-3-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
index cc598eb..f42ffea 100644
--- a/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_s_sub-4-i64.c
@@ -15,7 +15,7 @@
** li\s+[atx][0-9]+,\s*-1
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
-** neg\s+[atx][0-9]+,\s*[atx][0-9]+
+** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
diff --git a/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d b/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d
new file mode 100644
index 0000000..50e4216
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/debug/dwarf2/pr118309.d
@@ -0,0 +1,36 @@
+// { dg-do compile }
+// { dg-options "-fno-druntime -gdwarf-4 -dA -fno-merge-debug-strings" }
+// { dg-final { scan-assembler-times "DIE\[^\n\r\]*DW_TAG_enumeration_type" 1 } }
+// { dg-final { scan-assembler-times " DW_AT_enum_class" 1 } }
+// { dg-final { scan-assembler-times "\"E..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"E1..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C1..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C2..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C3..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"C4..\"\[^\n\]*DW_AT_name" 1 } }
+// { dg-final { scan-assembler-times "\"S1..\"\[^\n\]*DW_AT_name" 1 } }
+
+module expression;
+extern (C++):
+class C1
+{
+ bool bfn() { return true; }
+}
+class C2 : C1
+{
+ C4 cfn() { return null; }
+}
+class C3 : C2
+{
+ S1.E s;
+}
+class C4 : C3
+{
+ S1 s;
+}
+struct S1
+{
+ enum E : ubyte { E1 }
+ E e;
+ C3 c;
+}
diff --git a/gcc/testsuite/gdc.test/compilable/test21153.d b/gcc/testsuite/gdc.test/compilable/test21153.d
new file mode 100644
index 0000000..cd92a31
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test21153.d
@@ -0,0 +1,8 @@
+// https://github.com/dlang/dmd/issues/21153
+alias AliasSeq(TList...) = TList;
+class DataClass;
+void reduce(DataClass[] r)
+{
+ alias Args = AliasSeq!(DataClass);
+ Args result = r[0];
+}
diff --git a/gcc/testsuite/gdc.test/compilable/test21179.d b/gcc/testsuite/gdc.test/compilable/test21179.d
new file mode 100644
index 0000000..78bdffd
--- /dev/null
+++ b/gcc/testsuite/gdc.test/compilable/test21179.d
@@ -0,0 +1,11 @@
+// https://github.com/dlang/dmd/issues/21179
+
+void bigEndianToNative(ubyte[2] a) {}
+
+void main()
+{
+ ubyte[] arr;
+ const ubyte[2] bytes;
+ bigEndianToNative(bytes);
+ auto b = cast(const ubyte[2][]) arr;
+}
diff --git a/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d b/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
index 2016a50..79242b1 100644
--- a/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
+++ b/gcc/testsuite/gdc.test/fail_compilation/fail_pretty_errors.d
@@ -1,22 +1,24 @@
-/*
+/*
REQUIRED_ARGS: -verrors=context
TEST_OUTPUT:
---
-fail_compilation/fail_pretty_errors.d(27): Error: undefined identifier `a`
+fail_compilation/fail_pretty_errors.d(29): Error: undefined identifier `a`
a = 1;
^
-fail_compilation/fail_pretty_errors.d-mixin-32(32): Error: undefined identifier `b`
-fail_compilation/fail_pretty_errors.d(37): Error: cannot implicitly convert expression `5` of type `int` to `string`
+fail_compilation/fail_pretty_errors.d-mixin-34(34): Error: undefined identifier `b`
+b = 1;
+^
+fail_compilation/fail_pretty_errors.d(39): Error: cannot implicitly convert expression `5` of type `int` to `string`
string x = 5;
^
-fail_compilation/fail_pretty_errors.d(42): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating
+fail_compilation/fail_pretty_errors.d(44): Error: mixin `fail_pretty_errors.testMixin2.mixinTemplate!()` error instantiating
mixin mixinTemplate;
^
-fail_compilation/fail_pretty_errors.d(48): Error: invalid array operation `"" + ""` (possible missing [])
+fail_compilation/fail_pretty_errors.d(50): Error: invalid array operation `"" + ""` (possible missing [])
auto x = ""+"";
^
-fail_compilation/fail_pretty_errors.d(48): did you mean to concatenate (`"" ~ ""`) instead ?
-fail_compilation/fail_pretty_errors.d(51): Error: cannot implicitly convert expression `1111` of type `int` to `byte`
+fail_compilation/fail_pretty_errors.d(50): did you mean to concatenate (`"" ~ ""`) instead ?
+fail_compilation/fail_pretty_errors.d(53): Error: cannot implicitly convert expression `1111` of type `int` to `byte`
byte É‘ = 1111;
^
---
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_11.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_11.f90
new file mode 100644
index 0000000..d4890a3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_11.f90
@@ -0,0 +1,53 @@
+! { dg-do run }
+! { dg-additional-options "-fdump-tree-original" }
+
+module m
+implicit none
+contains
+subroutine sub(y,str)
+integer :: y, x, i
+character(len=5) :: str
+character(len=5) :: z = "abcde"
+logical :: error = .false.
+
+x = 5
+z = "12345"
+do concurrent (i = 1: 3) local_init(x) local_init(z) shared(error)default(none)
+ if (x /= 5) error = .true.
+ if (z /= "12345") error = .true.
+ x = 99
+ z = "XXXXX"
+end do
+if (x /= 5 .or. z /= "12345") stop 1
+if (error) stop 2
+
+do concurrent (i = 1: 3) local(y) local(str) shared(error) default(none)
+ y = 99
+ str = "XXXXX"
+end do
+if (y /= 42 .or. str /= "ABCDE") stop 3
+end
+end
+
+use m
+implicit none
+character(len=5) :: chars = "ABCDE"
+integer :: fourtytwo = 42
+call sub(fourtytwo, chars)
+end
+
+
+! { dg-final { scan-tree-dump-times " integer\\(kind=4\\) x;" 2 "original" } }
+! { dg-final { scan-tree-dump-times " static character\\(kind=1\\) z\\\[1:5\\\] = .abcde.;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " character\\(kind=1\\) z\\\[1:5\\\];" 1 "original" } }
+! { dg-final { scan-tree-dump-times " integer\\(kind=4\\) y;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " character\\(kind=1\\) str\\\[1:5\\\];" 1 "original" } }
+
+! { dg-final { scan-tree-dump-times " x = 5;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &z, \\(void \\*\\) &.12345.\\\[1\\\]\{lb: 1 sz: 1\}, 5\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times " x = x;" 1 "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &z, \\(void \\*\\)\\ &z, 5\\);" 1 "original" } }
+
+! { dg-final { scan-tree-dump-not " y = y;" "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &str, \\(void \\*\\)\\ &.XXXXX.\\\[1\\\]\{lb: 1 sz: 1\}, 5\\);" 1 "original" } }
+! { dg-final { scan-tree-dump-times " __builtin_memmove \\(\\(void \\*\\) &str," 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_12.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_12.f90
new file mode 100644
index 0000000..8a2acfa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_12.f90
@@ -0,0 +1,175 @@
+! { dg-do compile }
+
+! Fails to compile because default initializers aren't supported.
+! cf. do_concurrent_14.f90 and PR fortran/101602 (comment 6)
+
+module m
+implicit none
+type t
+ integer :: y = 44
+ integer, pointer :: ptr(:) => null()
+end type t
+
+contains
+
+subroutine sub(x, y)
+ integer :: i
+ type(t) :: x, y(4)
+ type(t) :: a, b(3)
+ logical :: error = .false.
+ integer, target :: tgt(6)
+ integer, target :: tgt2(7)
+
+ x%y = 100
+ x%ptr => tgt
+ y(1)%y = 101
+ y(2)%y = 102
+ y(3)%y = 103
+ y(4)%y = 104
+ y(1)%ptr => tgt
+ y(2)%ptr => tgt
+ y(3)%ptr => tgt
+ y(4)%ptr => tgt
+
+ a%y = 105
+ a%ptr => tgt
+ b(1)%y = 106
+ b(2)%y = 107
+ b(3)%y = 108
+ b(1)%ptr => tgt
+ b(2)%ptr => tgt
+ b(3)%ptr => tgt
+
+ do concurrent (i = 1: 3) local_init(x,y,a,b) shared(error,tgt,tgt2) default(none)
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ error = .true.
+
+ x%y = 900
+ x%ptr => tgt
+ y(1)%y = 901
+ y(2)%y = 902
+ y(3)%y = 903
+ y(4)%y = 904
+ y(1)%ptr => tgt2
+ y(2)%ptr => tgt2
+ y(3)%ptr => tgt2
+ y(4)%ptr => tgt2
+
+ a%y = 905
+ a%ptr => tgt
+ b(1)%y = 906
+ b(2)%y = 907
+ b(3)%y = 908
+ b(1)%ptr => tgt2
+ b(2)%ptr => tgt2
+ b(3)%ptr => tgt2
+ end do
+
+ if (error) stop 1
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 2
+
+ do concurrent (i = 1: 3) local(x,y,a,b) shared(error,tgt,tgt2) default(none)
+! { dg-error "34: Sorry, LOCAL specifier at .1. for 'x' of derived type with default initializer is not yet supported" "" { target *-*-* } .-1 }
+! { dg-error "36: Sorry, LOCAL specifier at .1. for 'y' of derived type with default initializer is not yet supported" "" { target *-*-* } .-2 }
+! { dg-error "38: Sorry, LOCAL specifier at .1. for 'a' of derived type with default initializer is not yet supported" "" { target *-*-* } .-3 }
+! { dg-error "40: Sorry, LOCAL specifier at .1. for 'b' of derived type with default initializer is not yet supported" "" { target *-*-* } .-4 }
+
+ if (x%y /= 44) error = .true.
+ if (any(y(:)%y /= 44)) error = .true.
+ if (a%y /= 44) error = .true.
+ if (any (b(:)%y /= 44)) error = .true.
+
+ if (associated(x%ptr)) error = .true.
+ if (associated(y(1)%ptr)) error = .true.
+ if (associated(y(2)%ptr)) error = .true.
+ if (associated(y(3)%ptr)) error = .true.
+ if (associated(y(4)%ptr)) error = .true.
+ if (associated(a%ptr)) error = .true.
+ if (associated(b(1)%ptr)) error = .true.
+ if (associated(b(2)%ptr)) error = .true.
+ if (associated(b(3)%ptr)) error = .true.
+
+ x%y = 900
+ x%ptr => tgt
+ y(1)%y = 901
+ y(2)%y = 902
+ y(3)%y = 903
+ y(4)%y = 904
+ y(1)%ptr => tgt2
+ y(2)%ptr => tgt2
+ y(3)%ptr => tgt2
+ y(4)%ptr => tgt2
+
+ a%y = 905
+ a%ptr => tgt
+ b(1)%y = 906
+ b(2)%y = 907
+ b(3)%y = 908
+ b(1)%ptr => tgt2
+ b(2)%ptr => tgt2
+ b(3)%ptr => tgt2
+ end do
+
+ if (error) stop 3
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 4
+end
+end
+
+use m
+implicit none
+type(t) :: q, r(4)
+call sub(q,r)
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_13.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_13.f90
new file mode 100644
index 0000000..6545780
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_13.f90
@@ -0,0 +1,211 @@
+! { dg-do run }
+! { dg-additional-options "-fdump-tree-original" }
+
+module m
+implicit none
+type t
+ integer :: y = 44
+ integer, pointer :: ptr(:) => null()
+end type t
+
+contains
+
+subroutine sub(x, y)
+ integer :: i
+ type(t), pointer :: x, y(:)
+ type(t), pointer :: a, b(:)
+ logical :: error = .false.
+ integer, target :: tgt(6)
+ integer, target :: tgt2(7)
+
+ type(t), pointer :: x_saved
+ type(t), pointer :: y_saved(:)
+ type(t), pointer :: a_saved
+ type(t), pointer :: b_saved(:)
+
+ allocate(a, b(3))
+
+ x_saved => x
+ y_saved => y
+ a_saved => a
+ b_saved => b
+
+ x%y = 100
+ x%ptr => tgt
+ y(1)%y = 101
+ y(2)%y = 102
+ y(3)%y = 103
+ y(4)%y = 104
+ y(1)%ptr => tgt
+ y(2)%ptr => tgt
+ y(3)%ptr => tgt
+ y(4)%ptr => tgt
+
+ a%y = 105
+ a%ptr => tgt
+ b(1)%y = 106
+ b(2)%y = 107
+ b(3)%y = 108
+ b(1)%ptr => tgt
+ b(2)%ptr => tgt
+ b(3)%ptr => tgt
+
+ do concurrent (i = 1: 3) local_init(x,y,a,b) shared(error,tgt,tgt2,x_saved,y_saved,a_saved,b_saved) default(none)
+ if (.not.associated(x,x_saved)) error = .true.
+ if (.not.associated(y,y_saved)) error = .true.
+ if (.not.associated(a,a_saved)) error = .true.
+ if (.not.associated(b,b_saved)) error = .true.
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ error = .true.
+
+ if (i == 3) then
+ ! This is a hack - assuming no concurrency!
+ x%y = 900
+ y(1)%y = 901
+ a%y = 905
+ b(1)%y = 906
+ endif
+ x => null()
+ y => null()
+ a => null()
+ b => null()
+ end do
+
+ if (error) stop 1
+ if (.not.associated(x,x_saved)) stop 2
+ if (.not.associated(y,y_saved)) stop 3
+ if (.not.associated(a,a_saved)) stop 4
+ if (.not.associated(b,b_saved)) stop 5
+ ! Value a bit changed because of the hack above!
+ if (x%y /= 900 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 901 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 905 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 906 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 6
+
+ ! Reset
+ x%y = 100
+ y(1)%y = 101
+ a%y = 105
+ b(1)%y = 106
+
+ do concurrent (i = 1: 3) local(x,y,a,b) shared(error) default(none)
+ x => null()
+ y => null()
+ a => null()
+ b => null()
+ end do
+
+ if (.not.associated(x,x_saved)) stop 7
+ if (.not.associated(y,y_saved)) stop 8
+ if (.not.associated(a,a_saved)) stop 9
+ if (.not.associated(b,b_saved)) stop 10
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 11
+
+ do concurrent (i = 1: 3) local(x,y,a,b) shared(error,tgt,tgt2,x_saved,y_saved,a_saved,b_saved) default(none)
+ x => a_saved
+ y => b_saved
+ a => x_saved
+ b => y_saved
+ if (a%y /= 100 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 101 &
+ .or. b(2)%y /= 102 &
+ .or. b(3)%y /= 103 &
+ .or. b(4)%y /= 104 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt) &
+ .or. .not.associated (b(4)%ptr, tgt) &
+ .or. x%y /= 105 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 106 &
+ .or. y(2)%y /= 107 &
+ .or. y(3)%y /= 108 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt)) &
+ error = .true.
+ end do
+
+ if (.not.associated(x,x_saved)) stop 12
+ if (.not.associated(y,y_saved)) stop 13
+ if (.not.associated(a,a_saved)) stop 14
+ if (.not.associated(b,b_saved)) stop 15
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 16
+end
+end
+
+use m
+implicit none
+type(t), pointer :: q, r(:)
+allocate(q, r(4))
+call sub(q,r)
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_14.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_14.f90
new file mode 100644
index 0000000..c0a90ff
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_14.f90
@@ -0,0 +1,176 @@
+! { dg-do run }
+
+module m
+implicit none
+type t
+ integer :: y = 44
+ integer, pointer :: ptr(:) => null()
+end type t
+
+! No default initializers, cf. do_concurrent_12.f90
+! and PR fortran/101602 (comment 6)
+type t2
+ integer :: y
+ integer, pointer :: ptr(:)
+end type t2
+
+contains
+
+subroutine sub(x, y)
+ integer :: i
+ type(t) :: x, y(4)
+ type(t) :: a, b(3)
+ type(t2) :: x2, y2(4)
+ type(t2) :: a2, b2(3)
+ logical :: error = .false.
+ integer, target :: tgt(6)
+ integer, target :: tgt2(7)
+
+ x%y = 100
+ x%ptr => tgt
+ y(1)%y = 101
+ y(2)%y = 102
+ y(3)%y = 103
+ y(4)%y = 104
+ y(1)%ptr => tgt
+ y(2)%ptr => tgt
+ y(3)%ptr => tgt
+ y(4)%ptr => tgt
+
+ a%y = 105
+ a%ptr => tgt
+ b(1)%y = 106
+ b(2)%y = 107
+ b(3)%y = 108
+ b(1)%ptr => tgt
+ b(2)%ptr => tgt
+ b(3)%ptr => tgt
+
+ ! Copy values from 't' to associated 't2' variables
+ x2%y = x%y
+ x2%ptr => x%ptr
+ a2%y = a%y
+ a2%ptr => a%ptr
+ y2(:)%y = y(:)%y
+ do i = 1, size(y)
+ y2(i)%ptr => y(i)%ptr
+ end do
+ b2(:)%y = b(:)%y
+ do i = 1, size(b)
+ b2(i)%ptr => b(i)%ptr
+ end do
+
+ do concurrent (i = 1: 3) local_init(x,y,a,b) shared(error,tgt,tgt2) default(none)
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ error = .true.
+
+ x%y = 900
+ x%ptr => tgt
+ y(1)%y = 901
+ y(2)%y = 902
+ y(3)%y = 903
+ y(4)%y = 904
+ y(1)%ptr => tgt2
+ y(2)%ptr => tgt2
+ y(3)%ptr => tgt2
+ y(4)%ptr => tgt2
+
+ a%y = 905
+ a%ptr => tgt
+ b(1)%y = 906
+ b(2)%y = 907
+ b(3)%y = 908
+ b(1)%ptr => tgt2
+ b(2)%ptr => tgt2
+ b(3)%ptr => tgt2
+ end do
+
+ if (error) stop 1
+ if (x%y /= 100 &
+ .or. .not.associated (x%ptr, tgt) &
+ .or. y(1)%y /= 101 &
+ .or. y(2)%y /= 102 &
+ .or. y(3)%y /= 103 &
+ .or. y(4)%y /= 104 &
+ .or. .not.associated (y(1)%ptr, tgt) &
+ .or. .not.associated (y(2)%ptr, tgt) &
+ .or. .not.associated (y(3)%ptr, tgt) &
+ .or. .not.associated (y(4)%ptr, tgt) &
+ .or. a%y /= 105 &
+ .or. .not.associated (a%ptr, tgt) &
+ .or. b(1)%y /= 106 &
+ .or. b(2)%y /= 107 &
+ .or. b(3)%y /= 108 &
+ .or. .not.associated (b(1)%ptr, tgt) &
+ .or. .not.associated (b(2)%ptr, tgt) &
+ .or. .not.associated (b(3)%ptr, tgt)) &
+ stop 2
+
+ ! Use version without default initializers
+ do concurrent (i = 1: 3) local(x2,y2,a2,b2) shared(error,tgt,tgt2) default(none)
+ x2%y = 900
+ x2%ptr => tgt
+ y2(1)%y = 901
+ y2(2)%y = 902
+ y2(3)%y = 903
+ y2(4)%y = 904
+ y2(1)%ptr => tgt2
+ y2(2)%ptr => tgt2
+ y2(3)%ptr => tgt2
+ y2(4)%ptr => tgt2
+
+ a2%y = 905
+ a2%ptr => tgt
+ b2(1)%y = 906
+ b2(2)%y = 907
+ b2(3)%y = 908
+ b2(1)%ptr => tgt2
+ b2(2)%ptr => tgt2
+ b2(3)%ptr => tgt2
+ end do
+
+ if (error) stop 3
+ if (x2%y /= 100 &
+ .or. .not.associated (x2%ptr, tgt) &
+ .or. y2(1)%y /= 101 &
+ .or. y2(2)%y /= 102 &
+ .or. y2(3)%y /= 103 &
+ .or. y2(4)%y /= 104 &
+ .or. .not.associated (y2(1)%ptr, tgt) &
+ .or. .not.associated (y2(2)%ptr, tgt) &
+ .or. .not.associated (y2(3)%ptr, tgt) &
+ .or. .not.associated (y2(4)%ptr, tgt) &
+ .or. a2%y /= 105 &
+ .or. .not.associated (a2%ptr, tgt) &
+ .or. b2(1)%y /= 106 &
+ .or. b2(2)%y /= 107 &
+ .or. b2(3)%y /= 108 &
+ .or. .not.associated (b2(1)%ptr, tgt) &
+ .or. .not.associated (b2(2)%ptr, tgt) &
+ .or. .not.associated (b2(3)%ptr, tgt)) &
+ stop 4
+end
+end
+
+use m
+implicit none
+type(t) :: q, r(4)
+call sub(q,r)
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_15.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_15.f90
new file mode 100644
index 0000000..f0003c8
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_15.f90
@@ -0,0 +1,20 @@
+! { dg-do compile }
+
+! Fails to compile because assumed-size arrays are not yet
+! handled with LOCAL / LOCAL_INIT, cf. PR fortran/101602 (comment 6)
+
+subroutine test_it(xx, yy)
+ implicit none
+ integer :: xx(:), yy(:,:)
+ integer :: i, sz1, sz2
+
+ sz1 = size(xx)
+ do , concurrent (i = 1 : sz1) local(xx) ! { dg-error "39: Sorry, LOCAL specifier at .1. for assumed-size array 'xx' is not yet supported" }
+ xx(i) = 1
+ end do
+
+ sz2 = size(yy,dim=1)
+ do , concurrent (i=1:sz2) local_init(yy) ! { dg-error "40: Sorry, LOCAL_INIT specifier at .1. for assumed-size array 'yy' is not yet supported" }
+ yy(i,:) = 1
+ end do
+end
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
index a99d81e..55eb97b 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90
@@ -8,10 +8,8 @@ program do_concurrent_complex
product = 1
do concurrent (i = 1:10) local(j) shared(sum) reduce(+:sum)
! { dg-error "Variable .sum. at .1. has already been specified in a locality-spec" "" { target *-*-* } .-1 }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-2 }
do concurrent (j = 1:10) local(k) shared(product) reduce(*:product)
! { dg-error "Variable .product. at .1. has already been specified in a locality-spec" "" { target *-*-* } .-1 }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-2 }
do concurrent (k = 1:10)
array(i,j,k) = i * j * k
sum = sum + array(i,j,k)
@@ -20,4 +18,4 @@ program do_concurrent_complex
end do
end do
print *, sum, product
-end program do_concurrent_complex \ No newline at end of file
+end program do_concurrent_complex
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_9.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_9.f90
index 98cef3e..9c1bca6 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_9.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_9.f90
@@ -6,7 +6,7 @@ program do_concurrent_default_none
x = 0
y = 0
z = 0
- do concurrent (i = 1:10) default(none) shared(x) local(y) ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported" }
+ do concurrent (i = 1:10) default(none) shared(x) local(y)
! { dg-error "Variable 'z' .* not specified in a locality spec .* but required due to DEFAULT \\(NONE\\)" "" { target *-*-* } .-1 }
x = x + i
y = i * 2
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
index 2e1c18c..0c8a6ad 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_all_clauses.f90
@@ -11,7 +11,6 @@ program do_concurrent_all_clauses
shared(arr, squared, sum, max_val) &
reduce(+:sum) & ! { dg-error "Variable 'sum' at \\(1\\) has already been specified in a locality-spec" }
reduce(max:max_val) ! { dg-error "Variable 'max_val' at \\(1\\) has already been specified in a locality-spec" }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported*" "" { target *-*-* } .-1 }
block
integer :: temp2
temp = i * 2
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
index 08e1fb9..6c5e87e 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_local_init.f90
@@ -3,9 +3,9 @@
program do_concurrent_local_init
implicit none
integer :: i, arr(10), temp
- do concurrent (i = 1:10) local_init(temp) ! { dg-error "LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" }
+ do concurrent (i = 1:10) local_init(temp)
temp = i
arr(i) = temp
end do
print *, arr
-end program do_concurrent_local_init \ No newline at end of file
+end program do_concurrent_local_init
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
index 0ee7a7e..ed3504e 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_locality_specs.f90
@@ -6,9 +6,8 @@ do , concurrent (i = 1:5) shared(j,jj) local(k,kk) local_init(ll,lll)
! { dg-warning "Variable 'kk' in locality-spec at \\(1\\) is not used \\\[-Wunused-variable\\\]" "" { target *-*-* } .-1 }
! { dg-warning "Variable 'll' in locality-spec at \\(1\\) is not used \\\[-Wunused-variable\\\]" "" { target *-*-* } .-2 }
! { dg-warning "Variable 'jj' in locality-spec at \\(1\\) is not used \\\[-Wunused-variable\\\]" "" { target *-*-* } .-3 }
- ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-4 }
j = 5
k = 7
lll = 8
end do
-end \ No newline at end of file
+end
diff --git a/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90 b/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
index f2c4d97..540079a 100644
--- a/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
+++ b/gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
@@ -23,6 +23,6 @@ use m
call f()
end
-! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 3, interopobjs\.\[0-9\]+, tgt_tgtsync\.\[0-9\]+, pref_type\.\[0-9\]+, " "gimple" } }
-! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 0, 0B, 0B, 0B, 0, 0B, 3, interopobjs\.\[0-9\]+," "gimple" } }
+! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 3, &interopobjs\.\[0-9\]+, &tgt_tgtsync\.\[0-9\]+, &pref_type\.\[0-9\]+, " "gimple" } }
+! { dg-final { scan-tree-dump "__builtin_GOMP_interop \\(99, 0, 0B, 0B, 0B, 0, 0B, 3, &interopobjs\.\[0-9\]+," "gimple" } }
! { dg-final { scan-tree-dump "g \\(&interop\.\[0-9\]+, interop\.\[0-9\]+, &interop\.\[0-9\]+\\)" "gimple" } }
diff --git a/gcc/testsuite/gfortran.dg/optional_absent_13.f90 b/gcc/testsuite/gfortran.dg/optional_absent_13.f90
new file mode 100644
index 0000000..9c2039b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/optional_absent_13.f90
@@ -0,0 +1,48 @@
+! { dg-do run }
+! PR fortran/119656 - wrong code with impure elemental subroutine and interface
+!
+! Derived from testcase at:
+! https://fortran-lang.discourse.group/t/
+! problem-with-impure-elemental-subroutine-in-interface-with-gfortran/9545
+
+module m2
+ implicit none
+ interface foo
+ module procedure foo_mat
+ module procedure foo_df
+ module procedure foo_cmat
+ end interface foo
+contains
+
+ subroutine foo_mat(x, nacf, label)
+ real, intent(in) :: x(:,:)
+ integer, intent(in) :: nacf
+ character(len=*), intent(in), optional :: label
+ end subroutine foo_mat
+
+ impure elemental subroutine foo_df(nacf, outu, xstr)
+ integer , intent(in) :: nacf
+ integer , intent(in), optional :: outu
+ character(len=*), intent(in), optional :: xstr
+ if (present(xstr)) then
+ if (len (xstr) /= 2) then
+ print *,"nacf, len(xstr) =", nacf, len(xstr)
+ stop nacf
+ end if
+ end if
+ end subroutine foo_df
+
+ subroutine foo_cmat(x, nacf, label)
+ complex, intent(in) :: x(:,:)
+ integer, intent(in) :: nacf
+ character(len=*), intent(in), optional :: label
+ end subroutine foo_cmat
+
+end module m2
+
+program main
+ use m2, only: foo, foo_df
+ implicit none
+ call foo_df(nacf = 1, xstr="ab")
+ call foo (nacf = 2, xstr="ab")
+end program main
diff --git a/gcc/testsuite/gfortran.dg/reduce_2.f90 b/gcc/testsuite/gfortran.dg/reduce_2.f90
index 52d7c68..cacd54a 100644
--- a/gcc/testsuite/gfortran.dg/reduce_2.f90
+++ b/gcc/testsuite/gfortran.dg/reduce_2.f90
@@ -8,6 +8,10 @@
integer, allocatable :: i(:,:,:)
integer :: n(2,2)
Logical :: l1(4), l2(2,3), l3(2,2)
+ type :: string_t
+ character(:), allocatable :: chr(:)
+ end type
+ type(string_t) :: str
! The ARRAY argument at (1) of REDUCE shall not be polymorphic
print *, reduce (cstar, add) ! { dg-error "shall not be polymorphic" }
@@ -54,6 +58,10 @@
! (2) shall be the same
print *, reduce ([character(4) :: 'abcd','efgh'], char_three) ! { dg-error "arguments of the OPERATION" }
+! The character length of the ARRAY argument at (1) and of the arguments of the OPERATION at (2)
+! shall be the same
+ str = reduce ([character(4) :: 'abcd','efgh'], char_one) ! { dg-error "character length of the ARRAY" }
+
! The DIM argument at (1), if present, must be an integer scalar
print *, reduce (i, add, dim = 2.0) ! { dg-error "must be an integer scalar" }
diff --git a/gcc/testsuite/gfortran.dg/reduce_3.f90 b/gcc/testsuite/gfortran.dg/reduce_3.f90
new file mode 100644
index 0000000..c0ed062
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/reduce_3.f90
@@ -0,0 +1,56 @@
+! { dg-do run }
+!
+! PR119460: Scalar reduce was failing with ARRAY elements larger than
+! an address size.
+!
+! Contributed by Rainer Orth <ro@gcc.gnu.org>
+!
+program test_reduce
+ implicit none
+ integer :: i
+ integer, parameter :: dp = kind(1.0_8), extent = 4
+
+ real(dp) :: rarray(extent,extent,extent), rmat(extent,extent), &
+ rvec (extent), rscl
+
+ type :: t
+ real(dp) :: field(extent)
+ end type t
+
+ type (t) :: tmat(extent, extent), tarray(extent), tscalar
+
+ rarray = reshape ([(real(i, kind = dp), i = 1, size(rarray))], &
+ shape (rarray))
+
+ rmat = reduce (rarray, add, dim = 1)
+ if (any (rmat /= sum (rarray, 1))) stop 1
+
+ rmat = reduce (rarray, add, dim = 2)
+ if (any (rmat /= sum (rarray, 2))) stop 2
+
+ rmat = reduce (rarray, add, dim = 3)
+ if (any (rmat /= sum (rarray, 3))) stop 3
+
+ rscl = reduce (rarray, add)
+ if (rscl /= sum (rarray)) stop 4
+
+ tmat%field(1) = rmat
+ tarray = reduce (tmat, t_add, dim =1)
+ rvec = reduce (rmat, add, dim = 1)
+ if (any (tarray%field(1) /= rvec)) stop 5
+
+ tscalar = reduce (tmat, t_add)
+ if (tscalar%field(1) /= sum (tmat%field(1))) stop 6
+contains
+
+ pure real(dp) function add (i, j)
+ real(dp), intent(in) :: i, j
+ add = i + j
+ end function add
+
+ pure type(t) function t_add (i, j)
+ type(t), intent(in) :: i, j
+ t_add%field(1) = i%field(1) + j%field(1)
+ end function t_add
+
+end
diff --git a/gcc/testsuite/gfortran.dg/reduce_4.f90 b/gcc/testsuite/gfortran.dg/reduce_4.f90
new file mode 100644
index 0000000..edea931
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/reduce_4.f90
@@ -0,0 +1,48 @@
+! { dg-do run }
+!
+! PR119540 comment2: REDUCE was getting the shape wrong. This testcase also
+! verifies that the longest possible name for the OPERATION wrapper function
+! is catered for.
+!
+! Contributed by Harald Anlauf <anlauf@gcc.gnu.org>
+!
+program p2345678901234567890123456789012345678901234567890123456789_123
+ implicit none
+ integer, parameter :: n = 3
+ integer, parameter :: vec(n) = [2, 5, 10]
+ integer, parameter :: mat(n,2) = reshape([vec,2*vec],[n,2])
+ integer :: mat_shape(2), reduce_shape(1), r
+ integer, dimension(:), allocatable :: res1
+
+ mat_shape = shape (mat)
+ reduce_shape = shape (reduce (mat, add, 1), 1)
+ if (reduce_shape(1) /= mat_shape(2)) stop 1
+
+ reduce_shape = shape (reduce (mat, add, 1), 1)
+ if (reduce_shape(1) /= mat_shape(2)) stop 2
+
+ res1 = reduce (mat, add, 1)
+ if (any (res1 /= [17, 34])) stop 3
+
+ res1 = reduce (mat, add, 2)
+ if (any (res1 /= [6, 15, 30])) stop 4
+
+ r = reduce (vec, &
+ o2345678901234567890123456789012345678901234567890123456789_123)
+ if (r /= 17) stop 5
+
+ deallocate (res1)
+contains
+ pure function add(i,j) result(sum_ij)
+ integer, intent(in) :: i, j
+ integer :: sum_ij
+ sum_ij = i + j
+ end function add
+
+ pure function o2345678901234567890123456789012345678901234567890123456789_123 (i, j) &
+ result (sum)
+ integer, intent(in) :: i, j
+ integer :: sum
+ sum = i + j
+ end function
+end
diff --git a/gcc/testsuite/gnat.dg/renaming17.adb b/gcc/testsuite/gnat.dg/renaming17.adb
new file mode 100644
index 0000000..d826433
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming17.adb
@@ -0,0 +1,17 @@
+-- { dg-do run }
+
+procedure Renaming17 is
+
+ function Incr (V : Integer; I : Integer := 1) return Integer is
+ (V + I);
+
+ function Incr_Ren (V : Integer; I : Positive := 1) return Positive
+ renames Incr;
+
+ I : Integer;
+
+begin
+ I := Incr_Ren (-3);
+ I := Incr_Ren (-3, 2);
+ I := Incr_Ren (-3, 0);
+end;
diff --git a/gcc/testsuite/lib/cobol.exp b/gcc/testsuite/lib/cobol.exp
index a0eeb4e..723989e 100644
--- a/gcc/testsuite/lib/cobol.exp
+++ b/gcc/testsuite/lib/cobol.exp
@@ -122,6 +122,15 @@ proc cobol_link_flags { paths } {
}
append ld_library_path ":${gccpath}/libgcobol/.libs"
}
+ if { [file exists "${gccpath}/libquadmath/.libs/libquadmath.a"] ||
+ [file exists "${gccpath}/libquadmath/.libs/libquadmath.${shlib_ext}"] } {
+ if { $target_wants_B_option } {
+ append flags "-B${gccpath}/libquadmath/.libs "
+ } else {
+ append flags "-L${gccpath}/libquadmath/.libs "
+ }
+ append ld_library_path ":${gccpath}/libquadmath/.libs"
+ }
if { [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] ||
[file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] } {
if { $target_wants_B_option } {
@@ -163,7 +172,6 @@ proc cobol_init { args } {
global gcc_warning_prefix
global gcc_error_prefix
global TEST_ALWAYS_FLAGS
- global cobol_init_set_COBOL_UNDER_TEST
# We set LC_ALL and LANG to C so that we get the same error messages as expected.
setenv LC_ALL C
@@ -179,24 +187,14 @@ proc cobol_init { args } {
setenv LANG C.ASCII
}
- # COBOL_UNDER_TEST as set below contains $specpath, which depends on
- # the used multilib config. Thus, its value may need to be reset;
- # that's tracked via gfortran_init_set_COBOL_UNDER_TEST.
- if { ![info exists COBOL_UNDER_TEST]
- || [info exists cobol_init_set_COBOL_UNDER_TEST] } then {
+ if ![info exists COBOL_UNDER_TEST] then {
if [info exists TOOL_EXECUTABLE] {
set COBOL_UNDER_TEST $TOOL_EXECUTABLE
} else {
if { [is_remote host] || ! [info exists TESTING_IN_BUILD_TREE] } {
set COBOL_UNDER_TEST [transform gcobol]
} else {
- if [info exists TOOL_OPTIONS] {
- set specpath [get_multilibs ${TOOL_OPTIONS}]
- } else {
- set specpath [get_multilibs]
- }
- set cobol_init_set_COBOL_UNDER_TEST 1
- set COBOL_UNDER_TEST [findfile $base_dir/../../gcobol "$base_dir/../../gcobol -B$base_dir/../../ -B$specpath/libgcobol/.libs" [findfile $base_dir/gcobol "$base_dir/gcobol -B$base_dir/" [transform gcobol]]]
+ set COBOL_UNDER_TEST [findfile $base_dir/../../gcobol "$base_dir/../../gcobol -B$base_dir/../../" [findfile $base_dir/gcobol "$base_dir/gcobol -B$base_dir/" [transform gcobol]]]
}
}
}
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index ee4138a..a62f459 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -13489,11 +13489,11 @@ proc check_effective_target_arm_v8_3a_bkey_directive { } {
# Return 1 if the target supports executing the Armv8.1-M Mainline Low
# Overhead Loop, 0 otherwise. The test is valid for ARM.
-proc check_effective_target_arm_v8_1_lob_ok { } {
+proc check_effective_target_arm_v8_1m_lob_hw { } {
if { ![check_effective_target_arm_cortex_m] } {
return 0;
} else {
- return [check_runtime arm_v8_1_lob_hw_available {
+ return [check_runtime arm_v8_1m_lob_hw_available {
int
main (void)
{ int i = 0;
@@ -13513,9 +13513,9 @@ proc check_effective_target_arm_v8_1_lob_ok { } {
# the Armv8.1-M Mainline Low Overhead Loop, 0 otherwise. The test is
# valid for ARM.
-proc check_effective_target_arm_thumb2_no_arm_v8_1_lob { } {
+proc check_effective_target_arm_thumb2_no_arm_v8_1m_lob { } {
if { [check_effective_target_arm_thumb2]
- && ![check_effective_target_arm_v8_1_lob_ok] } {
+ && ![check_effective_target_arm_v8_1m_lob_hw] } {
return 1
}
return 0
@@ -13525,9 +13525,9 @@ proc check_effective_target_arm_thumb2_no_arm_v8_1_lob { } {
# used and the target does not support executing the Armv8.1-M
# Mainline Low Overhead Loop, 0 otherwise. The test is valid for ARM.
-proc check_effective_target_arm_thumb2_ok_no_arm_v8_1_lob { } {
+proc check_effective_target_arm_thumb2_ok_no_arm_v8_1m_lob { } {
if { [check_effective_target_arm_thumb2_ok]
- && ![check_effective_target_arm_v8_1_lob_ok] } {
+ && ![check_effective_target_arm_v8_1m_lob_hw] } {
return 1
}
return 0
diff --git a/gcc/testsuite/rust/compile/enum_discriminant1.rs b/gcc/testsuite/rust/compile/enum_discriminant1.rs
new file mode 100644
index 0000000..32092b2
--- /dev/null
+++ b/gcc/testsuite/rust/compile/enum_discriminant1.rs
@@ -0,0 +1,7 @@
+enum Foo {
+ Bar = 3 + 12,
+}
+
+fn test() -> Foo { // { dg-warning "function is never used" }
+ return Foo::Bar;
+} \ No newline at end of file
diff --git a/gcc/testsuite/rust/compile/feature.rs b/gcc/testsuite/rust/compile/feature.rs
index f743f92..6f428f0 100644
--- a/gcc/testsuite/rust/compile/feature.rs
+++ b/gcc/testsuite/rust/compile/feature.rs
@@ -2,5 +2,7 @@
#![feature(AA)] //{ dg-error "unknown feature .AA." }
#![feature(iamcrabby)] // { dg-error "unknown feature .iamcrabby." }
#![feature(nonexistent_gccrs_feature)] // { dg-error "unknown feature .nonexistent_gccrs_feature." }
+// ErrorCode - E0556
+#![feature] // { dg-error "malformed .feature. attribute input" }
fn main() {}
diff --git a/gcc/testsuite/rust/compile/invalid_label_name.rs b/gcc/testsuite/rust/compile/invalid_label_name.rs
index 5c850da..66e40a6 100644
--- a/gcc/testsuite/rust/compile/invalid_label_name.rs
+++ b/gcc/testsuite/rust/compile/invalid_label_name.rs
@@ -1,20 +1,24 @@
+// { dg-additional-options "-frust-name-resolution-2.0" }
pub fn function() {
'continue: loop {
// { dg-error "invalid label name .'continue." "" { target *-*-* } .-1 }
break 'extern;
// { dg-error "invalid label name .'extern." "" { target *-*-* } .-1 }
+ // { dg-error "use of undeclared label .'extern." "" { target *-*-* } .-2 }
}
'break: loop {
// { dg-error "invalid label name .'break." "" { target *-*-* } .-1 }
break 'for;
// { dg-error "invalid label name .'for." "" { target *-*-* } .-1 }
+ // { dg-error "use of undeclared label .'for." "" { target *-*-* } .-2 }
}
'crate: loop {
// { dg-error "invalid label name .'crate." "" { target *-*-* } .-1 }
break 'loop;
// { dg-error "invalid label name .'loop." "" { target *-*-* } .-1 }
+ // { dg-error "use of undeclared label .'loop." "" { target *-*-* } .-2 }
}
'a: loop {
diff --git a/gcc/testsuite/rust/compile/issue-2812.rs b/gcc/testsuite/rust/compile/issue-2812.rs
index 173259b..0de1738 100644
--- a/gcc/testsuite/rust/compile/issue-2812.rs
+++ b/gcc/testsuite/rust/compile/issue-2812.rs
@@ -1,4 +1,4 @@
// { dg-additional-options "-frust-compile-until=astvalidation" }
fn foo_1(&self);
-fn foo_1(&mut self);
-fn foo_1(self);
+fn foo_2(&mut self);
+fn foo_3(self);
diff --git a/gcc/testsuite/rust/compile/issue-3625.rs b/gcc/testsuite/rust/compile/issue-3625.rs
new file mode 100644
index 0000000..91e0dc9
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3625.rs
@@ -0,0 +1,2 @@
+type A = crate::A;
+// { dg-error "failed to resolve type path segment: .A." "" { target *-*-* } .-2 }
diff --git a/gcc/testsuite/rust/compile/issue-3643.rs b/gcc/testsuite/rust/compile/issue-3643.rs
new file mode 100644
index 0000000..bed9ffc
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3643.rs
@@ -0,0 +1,4 @@
+fn foo() {
+ let x: usize<foo>;
+ // { dg-error "generic arguments are not allowed for this type .E0109." "" { target *-*-* } .-1 }
+}
diff --git a/gcc/testsuite/rust/compile/issue-3646.rs b/gcc/testsuite/rust/compile/issue-3646.rs
new file mode 100644
index 0000000..80693cb
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3646.rs
@@ -0,0 +1,7 @@
+trait Foo {
+ type T;
+ fn foo() -> Foo<main>;
+ // { dg-error "generic arguments are not allowed for this type .E0109." "" { target *-*-* } .-1 }
+}
+
+fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3647.rs b/gcc/testsuite/rust/compile/issue-3647.rs
new file mode 100644
index 0000000..51d9478d
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3647.rs
@@ -0,0 +1,7 @@
+#![allow(dead_code)]
+type A = fn();
+
+type B = for<'static> fn();
+// { dg-error "invalid lifetime parameter name: .static. .E0262." "" { target *-*-* } .-1 }
+
+pub fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3648.rs b/gcc/testsuite/rust/compile/issue-3648.rs
new file mode 100644
index 0000000..52ecbbf
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3648.rs
@@ -0,0 +1,8 @@
+struct B; // { dg-warning "struct is never constructed" }
+
+impl B {
+ fn main() {}
+ // { dg-warning "associated function is never used" "" { target *-*-* } .-1 }
+}
+
+fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3654.rs b/gcc/testsuite/rust/compile/issue-3654.rs
new file mode 100644
index 0000000..923488e
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3654.rs
@@ -0,0 +1,3 @@
+type Meeshka = Mow<!>;
+// { dg-error "generic arguments are not allowed for this type .E0109." "" { target *-*-* } .-1 }
+type Mow = &'static fn(!) -> !;
diff --git a/gcc/testsuite/rust/compile/issue-3656.rs b/gcc/testsuite/rust/compile/issue-3656.rs
new file mode 100644
index 0000000..e0bec2f
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3656.rs
@@ -0,0 +1,10 @@
+enum Foo {
+ Bar(isize),
+}
+
+fn main() {
+ match Foo::Bar(205) {
+ Foo { i } => (),
+ // { dg-error "expected struct, variant or union type, found enum .Foo. .E0574." "" { target *-*-* } .-1 }
+ }
+}
diff --git a/gcc/testsuite/rust/compile/issue-3657.rs b/gcc/testsuite/rust/compile/issue-3657.rs
new file mode 100644
index 0000000..978f3ce
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3657.rs
@@ -0,0 +1,8 @@
+struct Foo<'_>(&'_ u8);
+
+impl Foo<'a> {
+ // { dg-error "unresolved lifetime" "" { target *-*-* } .-1 }
+ fn x() {}
+}
+
+fn x() {}
diff --git a/gcc/testsuite/rust/compile/issue-3663.rs b/gcc/testsuite/rust/compile/issue-3663.rs
new file mode 100644
index 0000000..0f0559c
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3663.rs
@@ -0,0 +1,6 @@
+pub trait TypeFn {}
+
+impl TypeFn for Output<{ 42 }> {
+ // { dg-error "could not resolve type path .Output. .E0412." "" { target *-*-* } .-1 }
+ type Output = ();
+}
diff --git a/gcc/testsuite/rust/compile/issue-3665.rs b/gcc/testsuite/rust/compile/issue-3665.rs
new file mode 100644
index 0000000..d66a81f
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3665.rs
@@ -0,0 +1,6 @@
+pub const uint_val: usize = 1;
+pub const uint_expr: usize = 1 << uint_val;
+
+pub fn test() -> usize {
+ uint_expr
+}
diff --git a/gcc/testsuite/rust/compile/issue-3667.rs b/gcc/testsuite/rust/compile/issue-3667.rs
new file mode 100644
index 0000000..e72069c
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3667.rs
@@ -0,0 +1,24 @@
+// { dg-options "-w" }
+#![feature(raw_ref_op)]
+
+const pq1: () = {
+ let mut x = 2;
+ &raw mut x;
+}; //~ mutable reference
+
+static B: () = {
+ let mut x = 2;
+ &raw mut x;
+}; //~ mutable reference
+
+static mut C: () = {
+ let mut x = 2;
+ &raw mut x;
+}; //~ mutable reference
+
+const fn foo() {
+ let mut x = 0;
+ let y = &raw mut x; //~ mutable reference
+}
+
+fn main() {}
diff --git a/gcc/testsuite/rust/compile/issue-3671.rs b/gcc/testsuite/rust/compile/issue-3671.rs
new file mode 100644
index 0000000..e800d53
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3671.rs
@@ -0,0 +1,2 @@
+impl Self<0> {}
+// { dg-error "could not resolve type path" "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/macros/mbe/macro6.rs b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs
index 9c54a67..bbaaa25 100644
--- a/gcc/testsuite/rust/compile/macros/mbe/macro6.rs
+++ b/gcc/testsuite/rust/compile/macros/mbe/macro6.rs
@@ -1,6 +1,6 @@
macro_rules! zero_or_one {
($($a:literal)?) => {
- f();
+ 1 + 2;
}
}
diff --git a/gcc/testsuite/rust/compile/min_specialization1.rs b/gcc/testsuite/rust/compile/min_specialization1.rs
new file mode 100644
index 0000000..d38167e
--- /dev/null
+++ b/gcc/testsuite/rust/compile/min_specialization1.rs
@@ -0,0 +1,15 @@
+#![feature(min_specialization)]
+
+pub trait Foo {
+ fn foo(&self) -> bool {
+ false
+ }
+}
+
+pub struct Bar;
+
+impl Foo for Bar {
+ default fn foo(&self) -> bool { // { dg-warning "unused" }
+ true
+ }
+}
diff --git a/gcc/testsuite/rust/compile/nr2/compile.exp b/gcc/testsuite/rust/compile/nr2/compile.exp
index 35637f1..4d91dd0 100644
--- a/gcc/testsuite/rust/compile/nr2/compile.exp
+++ b/gcc/testsuite/rust/compile/nr2/compile.exp
@@ -47,18 +47,22 @@ namespace eval rust-nr2-ns {
set tests_expect_ok ""
set tests_expect_err ""
+ set compile_dir [list {*}[file split $srcdir] {*}[file split $subdir]]
+ set compile_dir [lreplace $compile_dir end end]
+
foreach test_dir $test_dirs {
- set directory [list {*}[file split $srcdir] {*}[file split $subdir]]
- set directory [lreplace $directory end end]
- set directory [list {*}$directory {*}$test_dir]
- foreach test [lsort [glob -nocomplain -tails -directory [file join {*}$directory] *.rs]] {
+ foreach test [lsort [glob -nocomplain -tails -directory [file join {*}$compile_dir {*}$test_dir] *.rs]] {
# use '/' as the path seperator for entries in the exclude file
set test_lbl [join [list {*}$test_dir $test] "/"]
set idx [lsearch -exact -sorted $exclude $test_lbl]
if {$idx == -1} {
- lappend tests_expect_ok [file join {*}$directory $test]
+ if {[runtest_file_p $runtests [file join {*}$compile_dir {*}$test_dir $test]]} {
+ lappend tests_expect_ok [list {*}$test_dir $test]
+ }
} else {
- lappend tests_expect_err [file join {*}$directory $test]
+ if {[runtest_file_p $runtests [file join {*}$compile_dir {*}$test_dir $test]]} {
+ lappend tests_expect_err [list {*}$test_dir $test]
+ }
set exclude [lreplace $exclude $idx $idx]
}
}
@@ -83,10 +87,10 @@ namespace eval rust-nr2-ns {
variable record_test_out
switch $type {
FAIL {
- lappend record_test_out "$type: $msg"
+ lappend record_test_out [list $type $msg]
}
XPASS {
- lappend record_test_out "$type: $msg"
+ lappend record_test_out [list $type $msg]
}
}
}
@@ -109,23 +113,23 @@ namespace eval rust-nr2-ns {
# check for unexpected failures
foreach test $tests_expect_ok {
- set fails [try_test $test]
+ set fails [try_test [file join {*}$compile_dir {*}$test]]
if {[llength $fails] != 0} {
foreach ent $fails {
- record_test FAIL "$test: nr2 failure: $ent"
+ record_test [lindex $ent 0] "on nr2: [lindex $ent 1]"
}
} else {
- record_test PASS "$test: nr2 success"
+ record_test PASS "[file join {*}$test] on nr2"
}
}
#check for unexpected successes
foreach test $tests_expect_err {
- set fails [try_test $test]
+ set fails [try_test [file join {*}$compile_dir {*}$test]]
if {[llength $fails] == 0} {
- record_test XPASS "$test: nr2 unexpectedly passed"
+ record_test XPASS "[file join {*}$test] on nr2"
} else {
- record_test XFAIL "$test: nr2 was rightfully excluded"
+ record_test XFAIL "[file join {*}$test] on nr2 was rightfully excluded"
}
}
}
diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude
index 19bf6f8..4772517 100644
--- a/gcc/testsuite/rust/compile/nr2/exclude
+++ b/gcc/testsuite/rust/compile/nr2/exclude
@@ -1,11 +1,8 @@
canonical_paths1.rs
cfg1.rs
generics9.rs
-issue-2043.rs
-issue-2812.rs
issue-3315-2.rs
lookup_err1.rs
-macros/mbe/macro6.rs
multiple_bindings1.rs
multiple_bindings2.rs
privacy5.rs
@@ -13,21 +10,16 @@ privacy8.rs
pub_restricted_1.rs
pub_restricted_2.rs
pub_restricted_3.rs
-undeclared_label.rs
use_1.rs
-while_break_expr.rs
issue-2905-2.rs
-issue-266.rs
derive_clone_enum3.rs
derive-debug1.rs
derive-default1.rs
-issue-3402-1.rs
-issue-3403.rs
derive-eq-invalid.rs
derive-hash1.rs
torture/alt_patterns1.rs
-torture/loop4.rs
-torture/loop8.rs
torture/name_resolve1.rs
issue-3568.rs
+issue-3663.rs
+issue-3671.rs
# please don't delete the trailing newline
diff --git a/gcc/testsuite/rust/compile/undeclared_label.rs b/gcc/testsuite/rust/compile/undeclared_label.rs
index 6efa2d9..9aa0553 100644
--- a/gcc/testsuite/rust/compile/undeclared_label.rs
+++ b/gcc/testsuite/rust/compile/undeclared_label.rs
@@ -2,12 +2,12 @@
#![allow(unused)]
fn resolve_label_continue() -> () {
loop {
- continue 'a; // { dg-error "use of undeclared label .a. in .continue." }
+ continue 'a; // { dg-error "use of undeclared label .'a." }
}
}
fn resolve_label_break() -> () {
loop {
- break 'crabby; // { dg-error "use of undeclared label .crabby. in .break." }
+ break 'crabby; // { dg-error "use of undeclared label .'crabby." }
}
}
fn main() {