Hi!

The testcase uses char and can't work properly with unsigned char (otherwise
c >= 0 is always true).

In addition to that I've noticed that the testcase as is actually doesn't
fail with the unfixed gcc, it will just print 2 on stdout.

The following has been tested on x86_64-linux and i686-linux with both
the broken compiler (FAILs) and fixed one (PASSes).

Ok for trunk?

2016-11-23  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/78482
        * gcc.dg/torture/pr78482.c (c, d): Use signed char instead of char.
        (bar): New function.
        (main): Call bar instead of printf.

--- gcc/testsuite/gcc.dg/torture/pr78482.c.jj   2016-11-23 16:47:32.000000000 
+0100
+++ gcc/testsuite/gcc.dg/torture/pr78482.c      2016-11-23 19:59:31.000000000 
+0100
@@ -1,9 +1,9 @@
+/* PR tree-optimization/78482 */
 /* { dg-do run } */
 
-int printf(const char*, ...);
 short a = 65531;
 int b = 3, f;
-char c, d;
+signed char c, d;
 static void fn1(int p1)
 {
   short e;
@@ -22,13 +22,22 @@ static void fn1(int p1)
     }
 }
 
+__attribute__((noinline, noclone))
+int bar (const char *x, int y)
+{
+  asm volatile ("" : "+g" (x), "+g" (y) : : "memory");
+  if (y == 2)
+    __builtin_abort ();
+  return 0;
+}
+
 int main()
 {
   for (; c >= 0; c--)
     {
       if (!b)
        {
-         printf("%d\n", 2);
+         bar("%d\n", 2);
          continue;
        }
       fn1(a);

        Jakub

Reply via email to