analyzer: enable taint state machine by default [PR103533]
[official-gcc.git] / gcc / testsuite / c-c++-common / gomp / imperfect-pragmas.c
bloba9f55224158099957babbfb02b980a935b2a4b92
1 /* { dg-do compile } */
3 /* Check that non-statement pragmas are accepted in a canonical loop nest
4 even when perfect nesting is required. */
6 extern void do_something (void);
8 void imperfect1 (int x, int y)
10 #pragma omp for collapse (2)
11 for (int i = 0; i < x; i++)
13 #pragma GCC diagnostic push
14 for (int j = 0; j < y; j++)
15 do_something ();
16 #pragma GCC diagnostic pop
20 void perfect1 (int x, int y)
22 #pragma omp for ordered (2)
23 for (int i = 0; i < x; i++)
25 #pragma GCC diagnostic push
26 for (int j = 0; j < y; j++)
27 do_something ();
28 #pragma GCC diagnostic pop
33 /* "GCC unroll" is a statement pragma that consumes the following loop as
34 a substatement. Thus, the inner loop should be treated as intervening
35 code rather than part of the loop nest. */
37 void imperfect2 (int x, int y)
39 #pragma omp for collapse (2)
40 for (int i = 0; i < x; i++) /* { dg-error "not enough nested loops" } */
42 #pragma GCC unroll 4
43 for (int j = 0; j < y; j++) /* { dg-error "loop not permitted in intervening code" } */
44 do_something ();
48 void perfect2 (int x, int y)
50 #pragma omp for ordered (2)
51 for (int i = 0; i < x; i++) /* { dg-error "not enough nested loops" } */
52 /* { dg-error "inner loops must be perfectly nested" "" { target *-*-*} .-1 } */
54 #pragma GCC unroll 4
55 for (int j = 0; j < y; j++) /* { dg-error "loop not permitted in intervening code" } */
56 do_something ();
61 /* Check that statement pragmas are accepted in the innermost loop body. */
63 void imperfect3 (int x, int y)
65 #pragma omp for collapse (2)
66 for (int i = 0; i < x; i++)
67 for (int j = 0; j < y; j++)
69 #pragma GCC unroll 4
70 for (int k = 0; k < 4; k++)
71 do_something ();
75 void perfect3 (int x, int y)
77 #pragma omp for ordered (2)
78 for (int i = 0; i < x; i++)
79 for (int j = 0; j < y; j++)
81 #pragma GCC unroll 4
82 for (int k = 0; k < 4; k++)
83 do_something ();