OSDN Git Service

PR target/7177
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Jul 2002 19:39:44 +0000 (19:39 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Jul 2002 19:39:44 +0000 (19:39 +0000)
* gcc.c-torture/compile/20020701-1.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@55143 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20020701-1.c [new file with mode: 0644]

index deeb34a..2d7f830 100644 (file)
@@ -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 (file)
index 0000000..1258cec
--- /dev/null
@@ -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;
+}