File: pr67828.c

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (43 lines) | stat: -rw-r--r-- 666 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/* Check that we don't misoptimize the final value of d.  We used to
   apply loop unswitching on if(j), introducing undefined behavior
   that the original code wouldn't exercise, and this undefined
   behavior would get later passes to misoptimize the loop.  */

/* { dg-do run } */

#include <stdio.h>
#include <stdlib.h>

int x;

int __attribute__ ((noinline, noclone))
xprintf (int d) {
  if (d)
    {
      if (x)
	printf ("%d", d);
      abort ();
    }
}

int a, b;
short c;

int
main ()
{
  int j, d = 1;
  for (; c >= 0; c++)
    {
      a = d;
      d = 0;
      if (b)
	{
	  xprintf (0);
	  if (j)
	    xprintf (0);
	}
    }
  xprintf (d);
  exit (0);
}