OSDN Git Service

* gcc.c-torture/execute/20020529-1.c: New test.
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 May 2002 16:09:09 +0000 (16:09 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 May 2002 16:09:09 +0000 (16:09 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53998 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 2a9cf8b..a535db2 100644 (file)
@@ -1,3 +1,7 @@
+2002-05-29  Hans-Peter Nilsson  <hp@axis.com>
+
+       * gcc.c-torture/execute/20020529-1.c: New test.
+
 2002-05-27  Richard Henderson  <rth@redhat.com>
 
        * g++.dg/ext/attrib6.C: New test case.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20020529-1.c b/gcc/testsuite/gcc.c-torture/execute/20020529-1.c
new file mode 100644 (file)
index 0000000..d1b93c7
--- /dev/null
@@ -0,0 +1,78 @@
+/* PR target/6838 from cato@df.lth.se.
+   cris-elf got an ICE with -O2: the insn matching
+      (insn 49 48 52 (parallel[ 
+                 (set (mem/s:HI (plus:SI (reg/v/f:SI 0 r0 [24])
+                             (const_int 8 [0x8])) [5 <variable>.c+0 S2 A8])
+                     (reg:HI 2 r2 [27]))
+                 (set (reg/f:SI 2 r2 [31])
+                     (plus:SI (reg/v/f:SI 0 r0 [24])
+                         (const_int 8 [0x8])))
+             ] ) 24 {*mov_sidehi_mem} (nil)
+         (nil))
+   forced a splitter through the output pattern "#", but there was no
+   matching splitter.  */
+
+struct xx
+ {
+   int a;
+   struct xx *b;
+   short c;
+ };
+
+int f1 (struct xx *);
+void f2 (void);
+
+int
+foo (struct xx *p, int b, int c, int d)
+{
+  int a;
+
+  for (;;)
+    {
+      a = f1(p);
+      if (a)
+       return (0);
+      if (b)
+       continue;
+      p->c = d;
+      if (p->a)
+       f2 ();
+      if (c)
+       f2 ();
+      d = p->c;
+      switch (a)
+       {
+       case 1:
+         if (p->b)
+           f2 ();
+         if (c)
+           f2 ();
+       default:
+         break;
+       }
+    }
+  return d;
+}
+
+int main (void)
+{
+  struct xx s = {0, &s, 23};
+  if (foo (&s, 0, 0, 0) != 0 || s.a != 0 || s.b != &s || s.c != 0)
+    abort ();
+  exit (0);
+}
+
+int
+f1 (struct xx *p)
+{
+  static int beenhere = 0;
+  if (beenhere++ > 1)
+    abort ();
+  return beenhere > 1;
+}
+
+void
+f2 (void)
+{
+  abort ();
+}