blob: 7ac40fb99f0ddff5c3a934ebce11f4f570f20c4d [file] [log] [blame]
/* { dg-do compile { target { c || c++11 } } } */
/* { dg-additional-options "-std=c23" { target c } } */
extern void dummy (int);
void
test (void)
{
[[omp::sequence (directive (for),
directive (tile sizes(1, 2)))]] /* { dg-error "non-rectangular 'tile'" "" { target c } } */
for (int i = 0; i < 100; ++i) /* { dg-error "non-rectangular 'tile'" "" { target c++ } } */
for (int j = i; j < 100; ++j)
dummy (i);
[[omp::sequence (directive (for),
directive (tile sizes(1, 2)))]] /* { dg-error "non-rectangular 'tile'" "" { target c } } */
for (int i = 0; i < 100; ++i) /* { dg-error "non-rectangular 'tile'" "" { target c++ } } */
for (int j = 0; j < i; ++j)
dummy (i);
[[omp::sequence (directive (for collapse(2)),
directive (tile sizes(1)))]] /* { dg-error "'tile' construct generates 1 loops with canonical form but 2 loops are needed" } */
for (int i = 0; i < 100; ++i)
for (int j = 0; j < 100; ++j)
dummy (i);
[[omp::sequence (directive (for collapse(3)),
directive (tile sizes(1, 2)))]] /* { dg-error "'tile' construct generates 2 loops with canonical form but 3 loops are needed" } */
for (int i = 0; i < 100; ++i)
for (int j = 0; j < 100; ++j)
dummy (i);
[[omp::sequence (directive (for collapse(2)),
directive (tile sizes(1, 2)),
directive (tile sizes(1)))]] /* { dg-error "'tile' construct generates 1 loops with canonical form but 2 loops are needed" } */
for (int i = 0; i < 100; ++i)
dummy (i);
[[omp::sequence (directive (for collapse(2)),
directive (tile sizes(1, 2)),
directive (tile sizes(1, 2)))]]
for (int i = 0; i < 100; ++i) /* { dg-error "not enough nested loops" } */
dummy (i);
[[omp::sequence (directive (for collapse(2)),
directive (tile sizes(5, 6)),
directive (tile sizes(1, 2, 3)))]]
for (int i = 0; i < 100; ++i) /* { dg-error "not enough nested loops" } */
dummy (i);
[[omp::sequence (directive (for collapse(2)),
directive (tile sizes(1, 2)),
directive (tile sizes(1)))]] /* { dg-error "'tile' construct generates 1 loops with canonical form but 2 loops are needed" } */
for (int i = 0; i < 100; ++i)
for (int j = 0; j < 100; ++j)
dummy (i);
[[omp::sequence (directive (for collapse(3)),
directive (tile sizes(1, 2)), /* { dg-error "'tile' construct generates 2 loops with canonical form but 3 loops are needed" } */
directive (tile sizes(1, 2)))]]
for (int i = 0; i < 100; ++i)
for (int j = 0; j < 100; ++j)
dummy (i);
[[omp::sequence (directive (for collapse(3)),
directive (tile sizes(5, 6)), /* { dg-error "'tile' construct generates 2 loops with canonical form but 3 loops are needed" } */
directive (tile sizes(1, 2, 3)))]]
for (int i = 0; i < 100; ++i)
for (int j = 0; j < 100; ++j)
for (int k = 0; k < 100; ++k)
dummy (i);
}