aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog93
-rw-r--r--gcc/testsuite/g++.dg/pr114025.C39
-rw-r--r--gcc/testsuite/gcc.dg/pr110405.c14
-rw-r--r--gcc/testsuite/gcc.dg/pr114331.c20
-rw-r--r--gcc/testsuite/gcc.dg/pr114725.c15
-rw-r--r--gcc/testsuite/gcc.dg/pr118254.c34
-rw-r--r--gcc/testsuite/gcc.dg/torture/vect-permute-ice.c15
-rw-r--r--gcc/testsuite/gcc.target/aarch64/auto-init-padding-2.c3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/auto-init-padding-4.c3
-rw-r--r--gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c17
-rw-r--r--gcc/testsuite/gfortran.dg/transfer_array_subref_2.f9052
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellabs.mod14
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspelladr.mod16
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellcap.mod13
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr.mod13
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr2.mod13
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspelldec.mod11
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellexcl.mod11
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellinc.mod12
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellincl.mod11
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellnew.mod13
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/badspellsize.mod14
-rw-r--r--gcc/testsuite/gm2.dg/spell/iso/fail/dg-spell-iso-fail.exp34
23 files changed, 478 insertions, 2 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 65fa7fa..4b9bd57 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,96 @@
+2025-10-24 Andrew MacLeod <amacleod@redhat.com>
+
+ * gcc.dg/pr110405.c: New.
+
+2025-10-24 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/114025
+ * g++.dg/pr114025.C: New.
+
+2025-10-24 Gaius Mulley <gaiusmod2@gmail.com>
+
+ PR modula2/122407
+ * gm2.dg/spell/iso/fail/badspellabs.mod: New test.
+ * gm2.dg/spell/iso/fail/badspelladr.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellcap.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellchr.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellchr2.mod: New test.
+ * gm2.dg/spell/iso/fail/badspelldec.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellexcl.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellinc.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellincl.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellnew.mod: New test.
+ * gm2.dg/spell/iso/fail/badspellsize.mod: New test.
+ * gm2.dg/spell/iso/fail/dg-spell-iso-fail.exp: New test.
+
+2025-10-24 Andrew Pinski <andrew.pinski@oss.qualcomm.com>
+
+ PR target/122402
+ * gcc.target/aarch64/auto-init-padding-2.c: Turn off SRA.
+ * gcc.target/aarch64/auto-init-padding-4.c: Likewise.
+
+2025-10-24 Harald Anlauf <anlauf@gmx.de>
+
+ PR fortran/122386
+ * gfortran.dg/transfer_array_subref_2.f90: New test.
+
+2025-10-24 Andrew MacLeod <amacleod@redhat.com>
+
+ * gcc.dg/pr114725.c: New.
+
+2025-10-24 Andrew MacLeod <amacleod@redhat.com>
+
+ PR tree-optimization/118254
+ PR tree-optimization/114331
+ * gcc.dg/pr114331.c: New.
+ * gcc.dg/pr118254.c: New.
+
+2025-10-24 Alex Coplan <alex.coplan@arm.com>
+
+ * gcc.dg/torture/vect-permute-ice.c: New test.
+
+2025-10-24 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/vect/vect-pr122406-1.c: Adjust to expect reduction
+ chain vectorization.
+ * gcc.dg/vect/vect-pr122406-2.c: Likewise.
+
+2025-10-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/122406
+ * gcc.dg/vect/vect-pr122406-1.c: New testcase.
+ * gcc.dg/vect/vect-pr122406-2.c: Likewise.
+
+2025-10-24 Paul-Antoine Arras <parras@baylibre.com>
+
+ PR fortran/121452
+ * c-c++-common/gomp/pr121452-1.c: New test.
+ * c-c++-common/gomp/pr121452-2.c: New test.
+ * gfortran.dg/gomp/pr121452-1.f90: New test.
+ * gfortran.dg/gomp/pr121452-2.f90: New test.
+ * gfortran.dg/gomp/pr121452-3.f90: New test.
+
+2025-10-24 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/122323
+ * gcc.target/i386/builtin-fabs-2.c: Also scan (%edi)for x32.
+
+2025-10-24 Pengfei Li <Pengfei.Li2@arm.com>
+
+ * gcc.dg/fold-vecperm-1.c: New test.
+
+2025-10-24 Olivier Hainque <hainque@adacore.com>
+
+ * lib/target-supports.exp (check_weak_available):
+ Return 1 for VxWorks7.
+
+2025-10-24 Joseph Myers <josmyers@redhat.com>
+
+ * gcc.dg/c23-static-assert-5.c, gcc.dg/c23-static-assert-6.c,
+ gcc.dg/c23-static-assert-7.c, gcc.dg/c23-static-assert-8.c,
+ gcc.dg/c2y-static-assert-2.c, gcc.dg/c2y-static-assert-3.c,
+ gcc.dg/c2y-static-assert-4.c: New tests.
+
2025-10-23 Robert Dubner <rdubner@symas.com>
* cobol.dg/group2/Length_overflow__2_.out: Updated test result.
diff --git a/gcc/testsuite/g++.dg/pr114025.C b/gcc/testsuite/g++.dg/pr114025.C
new file mode 100644
index 0000000..61bb8f1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr114025.C
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options " -O3 -std=gnu++17 -ffinite-math-only -fdump-tree-optimized" } */
+
+#include <algorithm>
+#include <stdexcept>
+
+#define AINLINE
+
+class TestClass
+{
+public:
+ AINLINE void SetValue(float value);
+
+private:
+ float m_Value;
+};
+
+AINLINE
+void TestClass::SetValue(float value)
+{
+ if (value >= 0.0f && value <= 100.0f) {
+ m_Value = value;
+ }
+ else {
+ throw std::out_of_range("Value must be [0, 100].");
+ }
+}
+
+void TestFunc(TestClass& t, float value)
+{
+ value = std::clamp(value, 30.0f, 50.0f);
+ // When TestClass::SetValue is inlined, the exception throwing code is not eliminated.
+ // Given that at this point we can prove that 'value' lies in the range [30.0f, 50.0f] well within the range required by the setter function, we can rid the not taken paths of code.
+ t.SetValue(value);
+}
+
+
+/* { dg-final { scan-tree-dump-times "std::out_of_range::out_of_range" 1 "optimized" } } */
+
diff --git a/gcc/testsuite/gcc.dg/pr110405.c b/gcc/testsuite/gcc.dg/pr110405.c
new file mode 100644
index 0000000..549cc7b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr110405.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+void foo (unsigned long);
+void
+f (unsigned long i)
+{
+ if ((i & 7) == 6)
+ if(i & 1)
+ foo (0);
+}
+
+/* { dg-final { scan-tree-dump-not "foo" "optimized" } } */
+
diff --git a/gcc/testsuite/gcc.dg/pr114331.c b/gcc/testsuite/gcc.dg/pr114331.c
new file mode 100644
index 0000000..e93289e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr114331.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+int src(int num) {
+ switch((short)num){
+ case 111:
+ /* Should fold to 110. */
+ return num & 0xfffe;
+ case 267:
+ case 204:
+ case 263:
+ return 0;
+ default:
+ return 0;
+ }
+}
+
+
+/* { dg-final { scan-tree-dump "110" "optimized" } } */
+
diff --git a/gcc/testsuite/gcc.dg/pr114725.c b/gcc/testsuite/gcc.dg/pr114725.c
new file mode 100644
index 0000000..01c3139
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr114725.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+//* This should fold to return 0
+bool
+src(int offset)
+{
+ if (offset > 128)
+ return 0;
+ else
+ return (offset & -9) == 258;
+}
+
+/* { dg-final { scan-tree-dump "return 0" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "PHI" "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr118254.c b/gcc/testsuite/gcc.dg/pr118254.c
new file mode 100644
index 0000000..5a0553b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr118254.c
@@ -0,0 +1,34 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-evrp" } */
+
+void foo(void);
+int il=1000;
+
+int m1(void)
+{
+ short t = il;
+ unsigned t1 = t;
+ if (t1 == 0) {
+ char b = t1;
+ if (b != 1)
+ return 0;
+ foo();
+ }
+ return 0;
+}
+
+int m2(void)
+{
+ short t = il;
+ unsigned t1 = t;
+ if (t1 == 0) {
+ char b = il;
+ if (b != 1)
+ return 0;
+ foo();
+ }
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-not "foo" "evrp" } } */
+
diff --git a/gcc/testsuite/gcc.dg/torture/vect-permute-ice.c b/gcc/testsuite/gcc.dg/torture/vect-permute-ice.c
new file mode 100644
index 0000000..05a1da5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/vect-permute-ice.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* This testcase triggered an ICE that was fixed by
+ g:1ceda79ca5fe1a1a296624a98de8fd04958fbe55. */
+char *a;
+char c, e;
+_Bool f() {
+ int g, d = 0;
+ for (int h = 0; h < 128; h += 8) {
+ char *b = &a[h];
+ g = e * b[0] + c * b[1] + 2 * b[2] + 3 * b[3] + 4 * b[4] + 5 * b[5] +
+ 6 * b[6] + 7 * b[7];
+ d += g;
+ }
+ return d;
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/auto-init-padding-2.c b/gcc/testsuite/gcc.target/aarch64/auto-init-padding-2.c
index d3b6591..25d06d7 100644
--- a/gcc/testsuite/gcc.target/aarch64/auto-init-padding-2.c
+++ b/gcc/testsuite/gcc.target/aarch64/auto-init-padding-2.c
@@ -1,7 +1,8 @@
/* Verify pattern initialization for structure type automatic variables with
padding. */
/* { dg-do compile } */
-/* { dg-options "-O -ftrivial-auto-var-init=pattern" } */
+/* SRA should be turned off as it can fully scalarize var as the padding is not touched. */
+/* { dg-options "-O -ftrivial-auto-var-init=pattern -fno-tree-sra" } */
struct test_aligned {
int internal1;
diff --git a/gcc/testsuite/gcc.target/aarch64/auto-init-padding-4.c b/gcc/testsuite/gcc.target/aarch64/auto-init-padding-4.c
index efd310f..fa9def7 100644
--- a/gcc/testsuite/gcc.target/aarch64/auto-init-padding-4.c
+++ b/gcc/testsuite/gcc.target/aarch64/auto-init-padding-4.c
@@ -1,7 +1,8 @@
/* Verify pattern initialization for nested structure type automatic variables with
padding. */
/* { dg-do compile } */
-/* { dg-options "-O -ftrivial-auto-var-init=pattern" } */
+/* SRA should be turned off as it can fully scalarize var as the padding is not touched. */
+/* { dg-options "-O -ftrivial-auto-var-init=pattern -fno-tree-sra" } */
struct test_aligned {
unsigned internal1;
diff --git a/gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c b/gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c
new file mode 100644
index 0000000..e449259
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -funsafe-math-optimizations -mlasx -fno-unroll-loops -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump-times "\.REDUC_PLUS" 4 "optimized" } } */
+
+#define DEFINE_SUM_FUNCTION(T, FUNC_NAME, SIZE) \
+T FUNC_NAME(const T arr[]) { \
+ arr = __builtin_assume_aligned(arr, 64); \
+ T sum = 0; \
+ for (int i = 0; i < SIZE; i++) \
+ sum += arr[i]; \
+ return sum; \
+}
+
+DEFINE_SUM_FUNCTION (int, sum_int_1040, 1028)
+DEFINE_SUM_FUNCTION (float, sum_float_1040, 1028)
+DEFINE_SUM_FUNCTION (long, sum_long_1040, 1026)
+DEFINE_SUM_FUNCTION (double, sum_double_1040, 1026)
diff --git a/gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90 b/gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90
new file mode 100644
index 0000000..9ff5198
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/transfer_array_subref_2.f90
@@ -0,0 +1,52 @@
+! { dg-do run }
+! { dg-additional-options "-O2 -fdump-tree-optimized" }
+!
+! PR fortran/122386 - passing of component ref of nested DT array to TRANSFER
+
+program main
+ implicit none
+ integer, parameter :: dp = 4
+
+ type cx
+ real(dp) :: re, im
+ end type cx
+
+ type complex_wrap1
+ type(cx) :: z(2)
+ end type complex_wrap1
+
+ type complex_wrap2
+ type(cx), dimension(:), allocatable :: z
+ end type complex_wrap2
+
+ type(complex_wrap1) :: x = complex_wrap1([cx(1,2), cx(3,4)])
+ type(complex_wrap2) :: w
+
+ w%z = x%z
+
+ ! The following statements should get optimized away...
+ if (size (transfer ( x%z%re ,[1.0_dp])) /= 2) error stop 1
+ if (size (transfer ((x%z%re),[1.0_dp])) /= 2) error stop 2
+ if (size (transfer ([x%z%re],[1.0_dp])) /= 2) error stop 3
+ if (size (transfer ( x%z%im ,[1.0_dp])) /= 2) error stop 4
+ if (size (transfer ((x%z%im),[1.0_dp])) /= 2) error stop 5
+ if (size (transfer ([x%z%im],[1.0_dp])) /= 2) error stop 6
+
+ ! ... while the following may not:
+ if (any (transfer ( x%z%re ,[1.0_dp]) /= x%z%re)) stop 7
+ if (any (transfer ( x%z%im ,[1.0_dp]) /= x%z%im)) stop 8
+
+ if (size (transfer ( w%z%re ,[1.0_dp])) /= 2) stop 11
+ if (size (transfer ((w%z%re),[1.0_dp])) /= 2) stop 12
+ if (size (transfer ([w%z%re],[1.0_dp])) /= 2) stop 13
+ if (size (transfer ( w%z%im ,[1.0_dp])) /= 2) stop 14
+ if (size (transfer ((w%z%im),[1.0_dp])) /= 2) stop 15
+ if (size (transfer ([w%z%im],[1.0_dp])) /= 2) stop 16
+
+ if (any (transfer ( w%z%re ,[1.0_dp]) /= x%z%re)) stop 17
+ if (any (transfer ( w%z%im ,[1.0_dp]) /= x%z%im)) stop 18
+
+ deallocate (w%z)
+end program main
+
+! { dg-final { scan-tree-dump-not "_gfortran_error_stop_numeric" "optimized" } }
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellabs.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellabs.mod
new file mode 100644
index 0000000..508d93a
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellabs.mod
@@ -0,0 +1,14 @@
+
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellabs ;
+
+VAR
+ foo: INTEGER ;
+BEGIN
+ IF ABS (Foo) = 1
+ (* { dg-error "the parameter to ABS must be a variable or constant, seen 'Foo', did you mean foo?" "Foo" { target *-*-* } 10 } *)
+ THEN
+ END
+END badspellabs.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspelladr.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspelladr.mod
new file mode 100644
index 0000000..7bad815
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspelladr.mod
@@ -0,0 +1,16 @@
+
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspelladr ;
+
+FROM SYSTEM IMPORT ADR ;
+
+VAR
+ foo: INTEGER ;
+BEGIN
+ IF ADR (Foo) = NIL
+ (* { dg-error "SYSTEM procedure ADR expects a variable, procedure or a constant string as its parameter, seen unknown, did you mean foo?" "Foo" { target *-*-* } 12 } *)
+ THEN
+ END
+END badspelladr.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellcap.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellcap.mod
new file mode 100644
index 0000000..8fc004c
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellcap.mod
@@ -0,0 +1,13 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellcap ;
+
+VAR
+ foo: CHAR ;
+BEGIN
+ IF CAP (Foo) = 'A'
+ (* { dg-error "the parameter to CAP must be a variable or constant, seen 'Foo', did you mean foo?" "Foo" { target *-*-* } 9 } *)
+ THEN
+ END
+END badspellcap.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr.mod
new file mode 100644
index 0000000..1f5beaa
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr.mod
@@ -0,0 +1,13 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellchr ;
+
+VAR
+ foo: CARDINAL ;
+BEGIN
+ IF CHR (Foo) = 'A'
+ (* { dg-error "the parameter to CHR must be a variable or constant, seen 'Foo', did you mean foo?" "Foo" { target *-*-* } 9 } *)
+ THEN
+ END
+END badspellchr.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr2.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr2.mod
new file mode 100644
index 0000000..9808a4f
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellchr2.mod
@@ -0,0 +1,13 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellchr2 ;
+
+VAR
+ foo: CARDINAL ;
+BEGIN
+ IF CHR (Foo+1) = 'A'
+ (* { dg-error "unknown symbol 'Foo', did you mean foo?" "Foo" { target *-*-* } 9 } *)
+ THEN
+ END
+END badspellchr2.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspelldec.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspelldec.mod
new file mode 100644
index 0000000..0c01fef
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspelldec.mod
@@ -0,0 +1,11 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspelldec ;
+
+VAR
+ foo: CARDINAL ;
+BEGIN
+ DEC (Foo)
+ (* { dg-error "base procedure DEC expects a variable as a parameter but was given unknown, did you mean foo?" "Foo" { target *-*-* } 9 } *)
+END badspelldec.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellexcl.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellexcl.mod
new file mode 100644
index 0000000..92cb932
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellexcl.mod
@@ -0,0 +1,11 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellexcl ;
+
+VAR
+ foo: BITSET ;
+BEGIN
+ EXCL (Foo, 1)
+ (* { dg-error "base procedure EXCL expects a variable as a parameter, seen unknown, did you mean foo?" "Foo" { target *-*-* } 9 } *)
+END badspellexcl.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellinc.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellinc.mod
new file mode 100644
index 0000000..1d913ec
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellinc.mod
@@ -0,0 +1,12 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellinc ;
+
+VAR
+ foo: CARDINAL ;
+BEGIN
+ INC (Foo)
+ (* { dg-error "base procedure INC expects a variable as a parameter but was given unknown, did you mean foo?" "Foo" { target *-*-* } 9 } *)
+
+END badspellinc.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellincl.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellincl.mod
new file mode 100644
index 0000000..ddaa727
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellincl.mod
@@ -0,0 +1,11 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellincl ;
+
+VAR
+ foo: BITSET ;
+BEGIN
+ INCL (Foo, 1)
+ (* { dg-error "base procedure INCL expects a variable as a parameter, seen unknown, did you mean foo?" "Foo" { target *-*-* } 9 } *)
+END badspellincl.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellnew.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellnew.mod
new file mode 100644
index 0000000..4007867
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellnew.mod
@@ -0,0 +1,13 @@
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellnew ;
+
+FROM Storage IMPORT ALLOCATE ;
+
+VAR
+ foo: POINTER TO CARDINAL ;
+BEGIN
+ NEW (Foo)
+ (* { dg-error "parameter to NEW must be a pointer, seen unknown, did you mean foo?" "Foo" { target *-*-* } 11 } *)
+END badspellnew.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/badspellsize.mod b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellsize.mod
new file mode 100644
index 0000000..6ae35a5
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/badspellsize.mod
@@ -0,0 +1,14 @@
+
+(* { dg-do compile } *)
+(* { dg-options "-g" } *)
+
+MODULE badspellsize ;
+
+VAR
+ foo: INTEGER ;
+BEGIN
+ IF SIZE (Foo) = NIL
+ (* { dg-error "SYSTEM procedure SIZE expects a variable or type as its parameter, seen unknown, did you mean foo?" "Foo" { target *-*-* } 10 } *)
+ THEN
+ END
+END badspellsize.
diff --git a/gcc/testsuite/gm2.dg/spell/iso/fail/dg-spell-iso-fail.exp b/gcc/testsuite/gm2.dg/spell/iso/fail/dg-spell-iso-fail.exp
new file mode 100644
index 0000000..145d7eb
--- /dev/null
+++ b/gcc/testsuite/gm2.dg/spell/iso/fail/dg-spell-iso-fail.exp
@@ -0,0 +1,34 @@
+# Copyright (C) 2025 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# Compile tests, no torture testing.
+#
+# These tests raise errors in the front end; torture testing doesn't apply.
+
+# Load support procs.
+load_lib gm2-dg.exp
+
+gm2_init_iso $srcdir/$subdir
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.mod]] "" ""
+
+# All done.
+dg-finish