+2004-12-14 Andrew Pinski <pinskia@physics.uc.edu>
+
+ * gcc.c-torture/20041214-1.c: New test.
+
2004-12-14 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/18965
2004-12-13 Kazu Hirata <kazu@cs.umass.edu>
- * gcc.c-torture/execute/20041213-1.c: New test.
+ * gcc.c-torture/execute/20041213-2.c: New test.
2004-12-13 Richard Henderson <rth@redhat.com>
--- /dev/null
+/* PR tree-optimization/18694
+
+ The dominator optimization didn't take the PHI evaluation order
+ into account when threading an edge. */
+
+extern void abort (void) __attribute__((noreturn));
+extern void exit (int) __attribute__((noreturn));
+
+void __attribute__((noinline))
+foo (int i)
+{
+ int next_n = 1;
+ int j = 0;
+
+ for (; i != 0; i--)
+ {
+ int n;
+
+ for (n = next_n; j < n; j++)
+ next_n++;
+
+ if (j != n)
+ abort ();
+ }
+}
+
+int
+main (void)
+{
+ foo (2);
+ exit (0);
+}
--- /dev/null
+typedef long unsigned int size_t;
+extern void abort (void);
+extern char *strcpy (char *, const char *);
+extern int strcmp (const char *, const char *);
+typedef __builtin_va_list va_list;
+static const char null[] = "(null)";
+int g (char *s, const char *format, va_list ap)
+{
+ const char *f;
+ const char *string;
+ char spec;
+ static const void *step0_jumps[] = {
+ &&do_precision,
+ &&do_form_integer,
+ &&do_form_string,
+ };
+ f = format;
+ if (*f == '\0')
+ goto all_done;
+ do
+ {
+ spec = (*++f);
+ goto *(step0_jumps[2]);
+
+ /* begin switch table. */
+ do_precision:
+ ++f;
+ __builtin_va_arg (ap, int);
+ spec = *f;
+ goto *(step0_jumps[2]);
+
+ do_form_integer:
+ __builtin_va_arg (ap, unsigned long int);
+ goto end;
+
+ do_form_string:
+ string = __builtin_va_arg (ap, const char *);
+ strcpy (s, string);
+
+ /* End of switch table. */
+ end:
+ ++f;
+ }
+ while (*f != '\0');
+
+all_done:
+ return 0;
+}
+
+void
+f (char *s, const char *f, ...)
+{
+ va_list ap;
+ __builtin_va_start (ap, f);
+ g (s, f, ap);
+ __builtin_va_end (ap);
+}
+
+int
+main (void)
+{
+ char buf[10];
+ f (buf, "%s", "asdf", 0);
+ if (strcmp (buf, "asdf"))
+ abort ();
+ return 0;
+}
+