aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2005-09-02 12:24:21 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2005-09-02 12:24:21 +0000
commitb8d7f9febca57fbd2070e4c1c6148ae24f9b19ca (patch)
tree375f9014b5f5fcd8de13ed0af741997b3dc70e13 /gcc
parentf805670fc351f0dde9def27103567ad51125b4c8 (diff)
downloadgcc-b8d7f9febca57fbd2070e4c1c6148ae24f9b19ca.zip
gcc-b8d7f9febca57fbd2070e4c1c6148ae24f9b19ca.tar.gz
gcc-b8d7f9febca57fbd2070e4c1c6148ae24f9b19ca.tar.bz2
re PR c/22061 (internal compiler error: in find_function_data, at function.c:317)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr22061-1.c16
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr22061-2.c7
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr22061-3.c18
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr22061-4.c22
5 files changed, 71 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4e8fee8..515bd26 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..65375fe
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr22061-1.c
@@ -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
index 0000000..4e1be8f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr22061-2.c
@@ -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
index 0000000..a805948
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr22061-3.c
@@ -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
index 0000000..38ce3e8
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr22061-4.c
@@ -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);
+}