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