* gcc.c-torture/execute/20010915-1.c: New test.
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Sep 2001 22:33:58 +0000 (22:33 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Sep 2001 22:33:58 +0000 (22:33 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@45618 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 86c3c01..89bd954 100644 (file)
@@ -1,3 +1,7 @@
+2001-09-15  Hans-Peter Nilsson  <hp@axis.com>
+
+       * gcc.c-torture/execute/20010915-1.c: New test.
+
 2001-09-14  Janis Johnson  <janis187@us.ibm.com>
 
        * g77.dg/bprob: New directory.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20010915-1.c b/gcc/testsuite/gcc.c-torture/execute/20010915-1.c
new file mode 100644 (file)
index 0000000..5615565
--- /dev/null
@@ -0,0 +1,71 @@
+/* Bug in reorg.c, deleting the "++" in the last loop in main.
+   Origin: <hp@axis.com>.  */
+
+extern void f (void);
+extern int x (int, char **);
+extern int r (const char *);
+extern char *s (char *, char **);
+extern char *m (char *);
+char *u;
+char *h;
+int check = 0;
+int o = 0;
+
+int main (int argc, char **argv)
+{
+  char *args[] = {"a", "b", "c", "d", "e"};
+  if (x (5, args) != 0 || check != 2 || o != 5)
+    abort ();
+  exit (0);
+}
+
+int x (int argc, char **argv)
+{
+  int opt = 0;
+  char *g = 0;
+  char *p = 0;
+
+  if (argc > o && argc > 2 && argv[o])
+    {
+      g = s (argv[o], &p);
+      if (g)
+       {
+         *g++ = '\0';
+         h = s (g, &p);
+         if (g == p)
+           h = m (g);
+       }
+      u = s (argv[o], &p);
+      if (argv[o] == p)
+       u = m (argv[o]);
+    }
+  else
+    abort ();
+
+  while (++o < argc)
+    if (r (argv[o]) == 0)
+      return 1;
+
+  return 0;
+}
+
+char *m (char *x) { abort (); }
+char *s (char *v, char **pp)
+{
+  if (strcmp (v, "a") != 0 || check++ > 1)
+    abort;
+  *pp = v+1;
+  return 0;
+}
+
+int r (const char *f)
+{
+  static char c[2] = "b";
+  static int cnt = 0;
+
+  if (*f != *c || f[1] != c[1] || cnt > 3)
+    abort ();
+  c[0]++;
+  cnt++;
+  return 1;
+}