blob: 3b678952c7284ae8e2d73308197aa0c28b9a227a [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O3 -fcilkplus" } */
int *a, *b, *c;
int something;
void foo()
{
int i, j;
// Declaration and initialization is allowed.
#pragma simd
for (int i=0; i < 1000; i++)
a[i] = b[j];
// Empty initialization is not allowed.
#pragma simd
for (; i < 5; ++i) // { dg-error "expected iteration" }
a[i] = i;
// Empty condition is not allowed.
#pragma simd
for (int i=0; ; ++i) /* { dg-error "missing controlling" } */
a[i] = i;
// Empty increment is not allowed.
#pragma simd
for (int i=0; i < 1234; ) /* { dg-error "missing increment" } */
a[i] = i*2;
#pragma simd
i = 5; /* { dg-error "for statement expected" } */
// Initialization variables must be either integral or pointer types.
struct S {
int i;
};
#pragma simd
for (struct S ss = { 0 }; ss.i <= 1000; ++ss.i) /* { dg-error "invalid controlling\|invalid type for iteration\|invalid increment" } */
a[ss.i] = b[ss.i];
#pragma simd
for (float f=0.0; f < 15.0; ++f) /* { dg-error "invalid type" } */
a[(int)f] = (int) f;
// Pointers are OK.
#pragma simd
for (int *i=c; i < &c[100]; ++i)
*a = '5';
// Condition of '==' is not allowed.
#pragma simd
for (int i=j; i == 5; ++i) /* { dg-error "invalid controlling predicate" } */
a[i] = b[i];
// The LHS or RHS of the condition must be the initialization variable.
#pragma simd
for (int i=0; i+j < 1234; ++i) /* { dg-error "invalid controlling predicate" } */
a[i] = b[i];
// Likewise.
#pragma simd
for (int i=0; 1234 < i + j; ++i) /* { dg-error "invalid controlling predicate" } */
a[i] = b[i];
// Likewise, this is ok.
#pragma simd
for (int i=0; 1234 + j < i; ++i)
a[i] = b[i];
// According to the CilkPlus forum, casts are not allowed, even if
// they are no-ops.
#pragma simd
for (int i=0; (char)i < 1234; ++i) /* { dg-error "invalid controlling predicate" } */
a[i] = b[i];
#pragma simd
for (int i=255; i != something; --i)
a[i] = b[i];
#pragma simd
for (int i=100; i != 5; i += something)
a[i] = b[i];
// Increment must be on the induction variable.
#pragma simd
for (int i=0; i < 100; j++) /* { dg-error "invalid increment expression" } */
a[i] = b[i];
// Likewise.
#pragma simd
for (int i=0; i < 100; j = i + 1) /* { dg-error "invalid increment expression" } */
a[i] = b[i];
// Likewise.
#pragma simd
for (int i=0; i < 100; i = j + 1) /* { dg-error "invalid increment expression" } */
a[i] = b[i];
#pragma simd
for (int i=0; i < 100; i = i + 5)
a[i] = b[i];
// Only PLUS and MINUS increments are allowed.
#pragma simd
for (int i=0; i < 100; i *= 5) /* { dg-error "invalid increment expression" } */
a[i] = b[i];
#pragma simd
for (int i=0; i < 100; i -= j)
a[i] = b[i];
#pragma simd
for (int i=0; i < 100; i = i + j)
a[i] = b[i];
#pragma simd
for (int i=0; i < 100; i = j + i)
a[i] = b[i];
#pragma simd
for (int i=0; i < 100; ++i, ++j) /* { dg-error "invalid increment expression" } */
a[i] = b[i];
#pragma simd
for (int *point=0; point < b; ++point)
*point = 555;
#pragma simd
for (int *point=0; point > b; --point)
*point = 555;
}