Hi!

The test FAILs on 32-bit targets, because when unsigned long
is 32-bit, (unsigned long) -1 isn't 0xffffffffffffffff.
The options to fix this would be either using -1UL, or switch
to unsigned long long and using -1ULL, I chose the latter because
the test then FAILs in r13-1242 even on 32-bit targets.
And while at it, some deobfuscation and formatting tweaks.

Tested on x86_64-linux with -m32/-m64 with a week old gcc (where it
FAILs now on both) and current gcc (where it succeeds), ok for trunk?

2022-06-27  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/106070
        * gcc.dg/torture/pr106070.c: Use unsigned long long instead of
        unsigned long and -1ULL instead of 0xffffffffffffffff, deobcuscate
        and improve formatting.

--- gcc/testsuite/gcc.dg/torture/pr106070.c.jj  2022-06-26 23:11:16.120254567 
+0200
+++ gcc/testsuite/gcc.dg/torture/pr106070.c     2022-06-27 11:30:02.475765731 
+0200
@@ -1,20 +1,22 @@
 /* { dg-do run } */
 
-unsigned int var_2 = 1;
-int var_4 = -1;
-int var_10 = 4;
-unsigned long arr_252;
-void __attribute__((noipa)) test() {
-  for (int a = 0; a < var_10; a += 2)
-    arr_252 = var_2 != (int)var_4 ? (unsigned long)var_4 : (unsigned 
long)var_2;
-}
+unsigned int a = 1;
+int b = -1;
+int c = 4;
+unsigned long long d;
 
-void test();
+void __attribute__((noipa))
+test (void)
+{
+  for (int i = 0; i < c; i += 2)
+    d = a != (int) b ? (unsigned long long) b : (unsigned long long) a;
+}
 
-int main()
+int
+main ()
 {
-  test();
-  if (arr_252 != 0xffffffffffffffff)
-    __builtin_abort();
+  test ();
+  if (d != -1ULL)
+    __builtin_abort ();
   return 0;
 }

        Jakub

Reply via email to