1 /* Check that we don't misoptimize the final value of d. We used to 2 apply loop unswitching on if(j), introducing undefined behavior 3 that the original code wouldn't exercise, and this undefined 4 behavior would get later passes to misoptimize the loop. */ 5 6 /* { dg-do run } */ 7 8 #include <stdio.h> 9 #include <stdlib.h> 10 11 int x; 12 13 int __attribute__ ((noinline, noclone)) xprintf(int d)14xprintf (int d) { 15 if (d) 16 { 17 if (x) 18 printf ("%d", d); 19 abort (); 20 } 21 } 22 23 int a, b; 24 short c; 25 26 int main()27main () 28 { 29 int j, d = 1; 30 for (; c >= 0; c++) 31 { 32 a = d; 33 d = 0; 34 if (b) 35 { 36 xprintf (0); 37 if (j) 38 xprintf (0); 39 } 40 } 41 xprintf (d); 42 exit (0); 43 } 44