aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Peter Nilsson <hp@axis.com>2002-07-01 19:39:44 +0000
committerHans-Peter Nilsson <hp@gcc.gnu.org>2002-07-01 19:39:44 +0000
commit0a220b4a53f45676cb556c0f9ccc64f8cef6998a (patch)
tree98f714226fec6de1ca5b6c1a0b5b5f14a9736ba9
parentbbeb33f2620b2b0dfef64e80479ba1eada3a1feb (diff)
downloadgcc-0a220b4a53f45676cb556c0f9ccc64f8cef6998a.zip
gcc-0a220b4a53f45676cb556c0f9ccc64f8cef6998a.tar.gz
gcc-0a220b4a53f45676cb556c0f9ccc64f8cef6998a.tar.bz2
re PR target/7177 (cris-axis-elf: ICE at -O2, unrecognized insn, sign-extend mem)
PR target/7177 * gcc.c-torture/compile/20020701-1.c: New test. From-SVN: r55143
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20020701-1.c75
2 files changed, 80 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index deeb34a..2d7f830 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2002-07-01 Hans-Peter Nilsson <hp@axis.com>
+
+ PR target/7177
+ * gcc.c-torture/compile/20020701-1.c: New test.
+
2002-07-01 Stan Shebs <shebs@apple.com>
* lib/objc.exp (objc_target_compile): Add the -I path to ObjC
diff --git a/gcc/testsuite/gcc.c-torture/compile/20020701-1.c b/gcc/testsuite/gcc.c-torture/compile/20020701-1.c
new file mode 100644
index 0000000..1258cec
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20020701-1.c
@@ -0,0 +1,75 @@
+/* PR target/7177
+ Problem with cris-axis-elf: ICE in global.
+ Origin: hp@axis.com. */
+
+typedef __SIZE_TYPE__ size_t;
+void f1 (void *);
+char *f2 (const char *);
+int atoi (const char *);
+char *strchr (const char *, int);
+int strcmp (const char *, const char *);
+size_t strlen (const char *);
+typedef enum { A, B, C } t1;
+extern const char _v[];
+
+static t1
+f (const char* p1, const char* p2, char p3)
+{
+ char *v1;
+ char *v2;
+ char *a;
+ char *v3;
+ char *v4;
+ char *v5;
+ char *e;
+ char *v6;
+ t1 r = C;
+
+ v1 = f2 (p2);
+ v4 = f2 (p1);
+
+ a = v2 = v1;
+ e = v5 = v4;
+ memcpy (&e, &e, sizeof (e));
+
+ v3 = strchr (v2, ',');
+ v6 = strchr (v5, ',');
+
+ while ((_v + 1)[(unsigned) *a] & 4)
+ a++;
+ while ((_v + 1)[(unsigned) *e] & 4)
+ e++;
+
+ if (a == v3 && e == v6)
+ {
+ if (p3)
+ r = atoi (v5) < atoi (v2) ? B : A;
+ else
+ r = atoi (v5) > atoi (v2) ? B : A;
+ v2 = ++a;
+ v5 = ++e;
+ v3 = strchr (v2, ',');
+ v6 = strchr (v5, ',');
+
+ while ((_v + 1)[(unsigned) *a] & 4)
+ a++;
+ while ((_v + 1)[(unsigned) *e] & 4)
+ e++;
+
+ if (a == v3 && e == v6)
+ {
+ if (r == B)
+ r = B;
+ else if (p3)
+ r = atoi (v5) < atoi (v2) ? B : A;
+ else
+ r = atoi (v5) > atoi (v2) ? B : A;
+ }
+ else
+ r = C;
+ }
+
+ f1 (v1);
+ f1 (v4);
+ return r;
+}