comparison gcc/testsuite/c-c++-common/cilk-plus/PS/for1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fcilkplus" } */
3
4 int *a, *b, *c;
5 int something;
6
7 void foo()
8 {
9 int i, j;
10
11 // Declaration and initialization is allowed.
12 #pragma simd
13 for (int i=0; i < 1000; i++)
14 a[i] = b[j];
15
16 // Empty initialization is not allowed.
17 #pragma simd
18 for (; i < 5; ++i) // { dg-error "expected iteration" }
19 a[i] = i;
20
21 // Empty condition is not allowed.
22 #pragma simd
23 for (int i=0; ; ++i) /* { dg-error "missing controlling" } */
24 a[i] = i;
25
26 // Empty increment is not allowed.
27 #pragma simd
28 for (int i=0; i < 1234; ) /* { dg-error "missing increment" } */
29 a[i] = i*2;
30
31 #pragma simd
32 i = 5; /* { dg-error "for statement expected" } */
33
34 // Initialization variables must be either integral or pointer types.
35 struct S {
36 int i;
37 };
38 #pragma simd
39 for (struct S ss = { 0 }; ss.i <= 1000; ++ss.i) /* { dg-error "invalid controlling\|invalid type for iteration\|invalid increment" } */
40 a[ss.i] = b[ss.i];
41
42 #pragma simd
43 for (float f=0.0; f < 15.0; ++f) /* { dg-error "invalid type" } */
44 a[(int)f] = (int) f;
45
46 // Pointers are OK.
47 #pragma simd
48 for (int *i=c; i < &c[100]; ++i)
49 *a = '5';
50
51 // Condition of '==' is not allowed.
52 #pragma simd
53 for (int i=j; i == 5; ++i) /* { dg-error "invalid controlling predicate" } */
54 a[i] = b[i];
55
56 // The LHS or RHS of the condition must be the initialization variable.
57 #pragma simd
58 for (int i=0; i+j < 1234; ++i) /* { dg-error "invalid controlling predicate" } */
59 a[i] = b[i];
60
61 // Likewise.
62 #pragma simd
63 for (int i=0; 1234 < i + j; ++i) /* { dg-error "invalid controlling predicate" } */
64 a[i] = b[i];
65
66 // Likewise, this is ok.
67 #pragma simd
68 for (int i=0; 1234 + j < i; ++i)
69 a[i] = b[i];
70
71 // According to the CilkPlus forum, casts are not allowed, even if
72 // they are no-ops.
73 #pragma simd
74 for (int i=0; (char)i < 1234; ++i) /* { dg-error "invalid controlling predicate" } */
75 a[i] = b[i];
76
77 #pragma simd
78 for (int i=255; i != something; --i)
79 a[i] = b[i];
80
81 #pragma simd
82 for (int i=100; i != 5; i += something)
83 a[i] = b[i];
84
85 // Increment must be on the induction variable.
86 #pragma simd
87 for (int i=0; i < 100; j++) /* { dg-error "invalid increment expression" } */
88 a[i] = b[i];
89
90 // Likewise.
91 #pragma simd
92 for (int i=0; i < 100; j = i + 1) /* { dg-error "invalid increment expression" } */
93 a[i] = b[i];
94
95 // Likewise.
96 #pragma simd
97 for (int i=0; i < 100; i = j + 1) /* { dg-error "invalid increment expression" } */
98 a[i] = b[i];
99
100 #pragma simd
101 for (int i=0; i < 100; i = i + 5)
102 a[i] = b[i];
103
104 // Only PLUS and MINUS increments are allowed.
105 #pragma simd
106 for (int i=0; i < 100; i *= 5) /* { dg-error "invalid increment expression" } */
107 a[i] = b[i];
108
109 #pragma simd
110 for (int i=0; i < 100; i -= j)
111 a[i] = b[i];
112
113 #pragma simd
114 for (int i=0; i < 100; i = i + j)
115 a[i] = b[i];
116
117 #pragma simd
118 for (int i=0; i < 100; i = j + i)
119 a[i] = b[i];
120
121 #pragma simd
122 for (int i=0; i < 100; ++i, ++j) /* { dg-error "invalid increment expression" } */
123 a[i] = b[i];
124
125 #pragma simd
126 for (int *point=0; point < b; ++point)
127 *point = 555;
128
129 #pragma simd
130 for (int *point=0; point > b; --point)
131 *point = 555;
132 }