]> gcc.gnu.org Git - gcc.git/commitdiff
re PR c/22061 (internal compiler error: in find_function_data, at function.c:317)
authorRichard Sandiford <richard@codesourcery.com>
Fri, 2 Sep 2005 12:24:21 +0000 (12:24 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 2 Sep 2005 12:24:21 +0000 (12:24 +0000)
PR c/22061
* gcc.c-torture/execute/pr22061-1.c,
* gcc.c-torture/execute/pr22061-2.c,
* gcc.c-torture/execute/pr22061-3.c,
* gcc.c-torture/execute/pr22061-4.c: New tests.

From-SVN: r103772

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr22061-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr22061-2.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr22061-3.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr22061-4.c [new file with mode: 0644]

index 4e8fee826a5772e64e5d7ed56f95a9f215888a76..515bd263deaf849ac1a25086db6aa07e5520c69a 100644 (file)
@@ -1,3 +1,11 @@
+2005-09-02  Richard Sandiford  <richard@codesourcery.com>
+
+       PR c/22061
+       * gcc.c-torture/execute/pr22061-1.c,
+       * gcc.c-torture/execute/pr22061-2.c,
+       * gcc.c-torture/execute/pr22061-3.c,
+       * gcc.c-torture/execute/pr22061-4.c: New tests.
+
 2005-09-01  Craig Rodrigues  <rodrigc@gcc.gnu.org>
 
        * gcc.dg/Wredundant-decls-2.c: New test to check that
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr22061-1.c b/gcc/testsuite/gcc.c-torture/execute/pr22061-1.c
new file mode 100644 (file)
index 0000000..65375fe
--- /dev/null
@@ -0,0 +1,16 @@
+int N = 1;
+void foo() {} /* Necessary to trigger the original ICE.  */
+void bar (char a[2][N]) { a[1][0] = N; }
+int
+main (void)
+{
+  void *x;
+
+  N = 4;
+  x = alloca (2 * N);
+  memset (x, 0, 2 * N);
+  bar (x);
+  if (N[(char *) x] != N)
+    abort ();
+  exit (0);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr22061-2.c b/gcc/testsuite/gcc.c-torture/execute/pr22061-2.c
new file mode 100644 (file)
index 0000000..4e1be8f
--- /dev/null
@@ -0,0 +1,7 @@
+int *x;
+static void bar (char a[2][(*x)++]) {}
+int
+main (void)
+{
+  exit (0);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr22061-3.c b/gcc/testsuite/gcc.c-torture/execute/pr22061-3.c
new file mode 100644 (file)
index 0000000..a805948
--- /dev/null
@@ -0,0 +1,18 @@
+void
+bar (int N)
+{
+  int foo (char a[2][++N]) { N += 4; return sizeof (a[0]); }
+  if (foo (0) != 2)
+    abort ();
+  if (foo (0) != 7)
+    abort ();
+  if (N != 11)
+    abort ();
+}
+
+int
+main()
+{
+  bar (1);
+  exit (0);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr22061-4.c b/gcc/testsuite/gcc.c-torture/execute/pr22061-4.c
new file mode 100644 (file)
index 0000000..38ce3e8
--- /dev/null
@@ -0,0 +1,22 @@
+void
+bar (int N)
+{
+  void foo (int a[2][N++]) {}
+  int a[2][N];
+  foo (a);
+  int b[2][N];
+  foo (b);
+  if (sizeof (a) != sizeof (int) * 2 * 1)
+    abort ();
+  if (sizeof (b) != sizeof (int) * 2 * 2)
+    abort ();
+  if (N != 3)
+    abort ();
+}
+
+int
+main (void)
+{
+  bar (1);
+  exit (0);
+}
This page took 0.105423 seconds and 5 git commands to generate.