2018-05-15 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / gcc.dg / guality / pr67192.c
blob946e68f8faadcd0c48cac98a2e2c1a61377a01aa
1 /* PR debug/67192 */
2 /* { dg-do run } */
3 /* { dg-options "-g -Wmisleading-indentation" } */
5 volatile int cnt = 0;
7 __attribute__((noinline, noclone)) static int
8 last (void)
10 return ++cnt % 5 == 0;
13 __attribute__((noinline, noclone)) static void
14 do_it (void)
16 asm volatile ("" : : "r" (&cnt) : "memory");
19 __attribute__((noinline, noclone)) static void
20 f1 (void)
22 for (;; do_it())
24 if (last ())
25 break;
27 do_it (); /* { dg-final { gdb-test 27 "cnt" "5" } } */
30 __attribute__((noinline, noclone)) static void
31 f2 (void)
33 while (1)
35 if (last ())
36 break;
37 do_it ();
39 do_it (); /* { dg-final { gdb-test 39 "cnt" "10" } } */
42 __attribute__((noinline, noclone)) static void
43 f3 (void)
45 for (;; do_it())
46 if (last ())
47 break;
48 do_it (); /* { dg-final { gdb-test 48 "cnt" "15" } } */
51 __attribute__((noinline, noclone)) static void
52 f4 (void)
54 while (1) /* { dg-final { gdb-test 54 "cnt" "15" } } */
55 if (last ())
56 break;
57 else
58 do_it ();
59 do_it (); /* { dg-final { gdb-test 59 "cnt" "20" } } */
62 void (*volatile fnp1) (void) = f1;
63 void (*volatile fnp2) (void) = f2;
64 void (*volatile fnp3) (void) = f3;
65 void (*volatile fnp4) (void) = f4;
67 int
68 main ()
70 asm volatile ("" : : "r" (&fnp1) : "memory");
71 asm volatile ("" : : "r" (&fnp2) : "memory");
72 asm volatile ("" : : "r" (&fnp3) : "memory");
73 asm volatile ("" : : "r" (&fnp4) : "memory");
74 fnp1 ();
75 fnp2 ();
76 fnp3 ();
77 fnp4 ();
78 return 0;