Lower zeroing array assignment to memset for allocatable arrays.
[official-gcc.git] / gcc / testsuite / c-c++-common / gomp / attrs-tile-4.c
blob6645c792b10983862948ee7bae4c8d096e351704
1 /* { dg-do compile { target { c || c++11 } } } */
2 /* { dg-additional-options "-std=c23" { target c } } */
4 extern void dummy (int);
6 void
7 test (void)
9 [[omp::directive (tile sizes(0))]] /* { dg-error "'sizes' argument needs positive integral constant" } */
10 for (int i = 0; i < 100; ++i)
11 dummy (i);
13 [[omp::directive (tile sizes(-1))]] /* { dg-error "'sizes' argument needs positive integral constant" } */
14 for (int i = 0; i < 100; ++i)
15 dummy (i);
17 [[omp::directive (tile sizes())]] /* { dg-error "expected expression before" "" { target c } } */
18 for (int i = 0; i < 100; ++i) /* { dg-error "expected primary-expression before" "" { target c++ } .-1 } */
19 dummy (i);
21 [[omp::directive (tile sizes)]] /* { dg-error "expected '\\\(' before end of line" } */
22 for (int i = 0; i < 100; ++i)
23 dummy (i);
25 [[omp::directive (tile sizes(1) sizes(1))]] /* { dg-error "expected end of line before 'sizes'" } */
26 for (int i = 0; i < 100; ++i)
27 dummy (i);
29 [[omp::directive (tile, sizes(1), sizes(1))]] /* { dg-error "expected end of line before ','" } */
30 for (int i = 0; i < 100; ++i)
31 dummy (i);
33 [[omp::sequence (directive (tile sizes(1, 2)),
34 directive (tile sizes(1)))]] /* { dg-error "'tile' construct generates 1 loops with canonical form but 2 loops are needed" } */
35 for (int i = 0; i < 100; ++i)
36 for (int j = 0; j < 100; ++j)
37 dummy (i);
39 [[omp::sequence (directive (tile sizes(1)),
40 directive (unroll partia), /* { dg-error "expected an OpenMP clause before 'partia'" } */
41 directive (tile sizes(1)))]] /* { dg-error "generated loop of 'unroll' construct without 'partial' clause does not have canonical form" "" { target *-*-* } .-1 } */
42 for (int i = 0; i < 100; ++i)
43 dummy (i);
45 [[omp::sequence (directive (tile sizes(1)),
46 directive (unroll))]] /* { dg-error "generated loop of 'unroll' construct without 'partial' clause does not have canonical form" } */
47 for (int i = 0; i < 100; ++i)
48 dummy (i);
50 [[omp::sequence (directive (tile sizes(1)),
51 directive (unroll full))]] /* { dg-error "generated loop of 'unroll' construct without 'partial' clause does not have canonical form" } */
52 for (int i = 0; i < 100; ++i)
53 dummy (i);
55 [[omp::sequence (directive (tile sizes(8,8)),
56 directive (unroll partial), /* { dg-error "'unroll' construct with 'partial' clause generates just one loop with canonical form but 2 loops are needed" } */
57 directive (tile sizes(1)))]]
58 for (int i = 0; i < 100; ++i)
59 dummy (i);
61 [[omp::sequence (directive (tile sizes(8,8)),
62 directive (unroll partial))]] /* { dg-error "'unroll' construct with 'partial' clause generates just one loop with canonical form but 2 loops are needed" } */
63 for (int i = 0; i < 100; ++i)
64 dummy (i);
66 [[omp::directive (tile sizes(1, 2))]] /* { dg-error "non-rectangular 'tile'" } */
67 for (int i = 0; i < 100; ++i)
68 for (int j = i; j < 100; ++j)
69 dummy (i);
71 [[omp::directive (tile sizes(1, 2))]] /* { dg-error "non-rectangular 'tile'" } */
72 for (int i = 0; i < 100; ++i)
73 for (int j = 2; j < i; ++j)
74 dummy (i);
76 [[omp::directive (tile sizes(1, 2, 3))]]
77 for (int i = 0; i < 100; ++i) /* { dg-error "not enough nested loops" } */
78 for (int j = 0; j < 100; ++j)
79 dummy (i);
81 [[omp::directive (tile sizes(1, 2))]]
82 for (int i = 0; i < 100; ++i) /* { dg-error "inner loops must be perfectly nested" } */
84 dummy (i);
85 for (int j = 0; j < 100; ++j)
86 dummy (j);
89 [[omp::directive (tile sizes(1, 2))]]
90 for (int i = 0; i < 100; ++i) /* { dg-error "inner loops must be perfectly nested" } */
92 for (int j = 0; j < 100; ++j)
93 dummy (j);
94 dummy (i);
97 int s;
98 [[omp::directive (tile sizes(s))]] /* { dg-error "'sizes' argument needs positive integral constant" "" { target { ! c++98_only } } } */
99 /* { dg-error "the value of 's' is not usable in a constant expression" "" { target { c++ && { ! c++98_only } } } .-1 } */
100 for (int i = 0; i < 100; ++i)
101 dummy (i);
103 [[omp::directive (tile sizes(42.0))]] /* { dg-error "'sizes' argument needs positive integral constant" } */
104 for (int i = 0; i < 100; ++i)
105 dummy (i);