111
|
1 /* PR debug/67192 */
|
|
2 /* { dg-do run } */
|
|
3 /* { dg-options "-g -Wmisleading-indentation" } */
|
|
4
|
|
5 volatile int cnt = 0;
|
|
6
|
|
7 __attribute__((noinline, noclone)) static int
|
|
8 last (void)
|
|
9 {
|
|
10 return ++cnt % 5 == 0;
|
|
11 }
|
|
12
|
|
13 __attribute__((noinline, noclone)) static void
|
|
14 do_it (void)
|
|
15 {
|
|
16 asm volatile ("" : : "r" (&cnt) : "memory");
|
|
17 }
|
|
18
|
|
19 __attribute__((noinline, noclone)) static void
|
|
20 f1 (void)
|
|
21 {
|
|
22 for (;; do_it())
|
|
23 {
|
|
24 if (last ())
|
|
25 break;
|
|
26 }
|
131
|
27 do_it (); /* { dg-final { gdb-test . "cnt" "5" } } */
|
111
|
28 }
|
|
29
|
|
30 __attribute__((noinline, noclone)) static void
|
|
31 f2 (void)
|
|
32 {
|
|
33 while (1)
|
|
34 {
|
|
35 if (last ())
|
|
36 break;
|
|
37 do_it ();
|
|
38 }
|
131
|
39 do_it (); /* { dg-final { gdb-test . "cnt" "10" } } */
|
111
|
40 }
|
|
41
|
|
42 __attribute__((noinline, noclone)) static void
|
|
43 f3 (void)
|
|
44 {
|
|
45 for (;; do_it())
|
|
46 if (last ())
|
|
47 break;
|
131
|
48 do_it (); /* { dg-final { gdb-test . "cnt" "15" } } */
|
111
|
49 }
|
|
50
|
|
51 __attribute__((noinline, noclone)) static void
|
|
52 f4 (void)
|
|
53 {
|
131
|
54 while (1) /* { dg-final { gdb-test . "cnt" "15" } } */
|
111
|
55 if (last ())
|
|
56 break;
|
|
57 else
|
|
58 do_it ();
|
131
|
59 do_it (); /* { dg-final { gdb-test . "cnt" "20" } } */
|
111
|
60 }
|
|
61
|
|
62 void (*volatile fnp1) (void) = f1;
|
|
63 void (*volatile fnp2) (void) = f2;
|
|
64 void (*volatile fnp3) (void) = f3;
|
|
65 void (*volatile fnp4) (void) = f4;
|
|
66
|
|
67 int
|
|
68 main ()
|
|
69 {
|
|
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;
|
|
79 }
|