[PATCH] RISC-V: Bugfix for unrecognizable insn for XTheadVector
[official-gcc.git] / gcc / testsuite / g++.dg / gomp / tpl-imperfect-invalid-scope.C
blob1e85e64b14aed8e8ef0a4732fb3477ecd13d1bab
1 /* { dg-do compile } */
3 /* Check that various cases of invalid references to variables bound
4    in an intervening code scope are diagnosed and do not ICE.  This test
5    is expected to produce errors.  */
7 template<typename T>
8 extern void foo (T, T);
10 template<typename T>
11 void f1 (void)
13 #pragma omp for collapse (2)
14   for (T i = 0; i < 64; i++)
15     {
16       T v = (i + 4) * 2;
17       for (T j = v; j < 64; j++)  /* { dg-error "initializer is bound in intervening code" }  */
18         foo (i, j);
19     }
22 template<typename T>
23 void f2 (void)
25 #pragma omp for collapse (2)
26   for (T i = 0; i < 64; i++)
27     {
28       T v = (i + 4) * 2;
29       for (T j = 0; j < v; j++)  /* { dg-error "end test is bound in intervening code" }  */
30         foo (i, j);
31     }
34 template<typename T>
35 void f3 (void)
37 #pragma omp for collapse (2)
38   for (T i = 0; i < 64; i++)
39     {
40       T v = (i + 4) * 2;
41       for (T j = 0; j < 64; j = j + v)  /* { dg-error "increment expression is bound in intervening code" }  */
42         foo (i, j);
43     }
46 template<typename T>
47 void f4 (void)
49 #pragma omp for collapse (2)
50   for (T i = 0; i < 64; i++)
51     {
52       T v = 8;
53       for (T j = v; j < 64; j++)  /* { dg-error "initializer is bound in intervening code" }  */
54         foo (i, j);
55     }
58 template<typename T>
59 void f5 (void)
61 #pragma omp for collapse (2)
62   for (T i = 0; i < 64; i++)
63     {
64       T j;
65       for (j = 0; j < 64; j++)  /* { dg-error "loop variable is bound in intervening code" }  */
66         foo (i, j);
67     }
70 template<typename T>
71 void f6 (void)
73 #pragma omp for collapse (2)
74   for (T i = 0; i < 64; i++)
75     {
76       T j;
77       {
78         T v = 8;
79         for (j = v; j < 64; j++)    /* { dg-error "loop variable is bound in intervening code" }  */
80           /* { dg-error "initializer is bound in intervening code" "" { target *-*-* } .-1 } */
81           foo (i, j);
82       }
83     }
86 int main()
88   f1<int> ();
89   f2<int> ();
90   f3<int> ();
91   f4<int> ();
92   f5<int> ();
93   f6<int> ();