blob: 10316950fe9f8eeeb7b812603ea24c26e657ac68 [file] [log] [blame]
Daniel Dunbarffd408a2009-03-24 02:24:46 +00001// RUN: clang-cc -fsyntax-only -verify %s
Eli Friedman9c0e6f92009-02-28 05:41:13 +00002
3int test1(int x) {
Chris Lattnere44e5cc2009-04-18 09:36:27 +00004 goto L; // expected-error{{illegal goto into protected scope}}
Chris Lattner930cc9a2009-04-18 18:42:55 +00005 int a[x]; // expected-note {{jump bypasses initialization of variable length array}}
6 int b[x]; // expected-note {{jump bypasses initialization of variable length array}}
Eli Friedman9c0e6f92009-02-28 05:41:13 +00007 L:
8 return sizeof a;
9}
Eli Friedmanea917292009-02-28 06:22:14 +000010
11int test2(int x) {
Chris Lattnere44e5cc2009-04-18 09:36:27 +000012 goto L; // expected-error{{illegal goto into protected scope}}
Chris Lattner930cc9a2009-04-18 18:42:55 +000013 typedef int a[x]; // expected-note {{jump bypasses initialization of VLA typedef}}
Eli Friedmanea917292009-02-28 06:22:14 +000014 L:
15 return sizeof(a);
16}
17
18void test3clean(int*);
19
20int test3() {
Chris Lattnere44e5cc2009-04-18 09:36:27 +000021 goto L; // expected-error{{illegal goto into protected scope}}
Chris Lattner930cc9a2009-04-18 18:42:55 +000022int a __attribute((cleanup(test3clean))); // expected-note {{jump bypasses initialization of declaration with __attribute__((cleanup))}}
Chris Lattner01c5fc02009-04-18 07:54:11 +000023L:
Eli Friedmanea917292009-02-28 06:22:14 +000024 return a;
25}
Steve Naroffd91d1f82009-04-15 16:58:41 +000026
27int test4(int x) {
Chris Lattnere44e5cc2009-04-18 09:36:27 +000028 goto L; // expected-error{{illegal goto into protected scope}}
Chris Lattner930cc9a2009-04-18 18:42:55 +000029int a[x]; // expected-note {{jump bypasses initialization of variable length array}}
Chris Lattner01c5fc02009-04-18 07:54:11 +000030 test4(x);
31L:
32 return sizeof a;
Steve Naroffd91d1f82009-04-15 16:58:41 +000033}
Chris Lattner01c5fc02009-04-18 07:54:11 +000034
35int test5(int x) {
36 int a[x];
37 test5(x);
38 goto L; // Ok.
39L:
40 goto L; // Ok.
41 return sizeof a;
42}
43
Chris Lattnere44e5cc2009-04-18 09:36:27 +000044int test6() {
45 // just plain invalid.
46 goto x; // expected-error {{use of undeclared label 'x'}}
47}
48
Chris Lattner69a480e2009-04-18 19:42:37 +000049void test7(int x) {
Chris Lattner2c8f7ce2009-04-18 19:50:02 +000050 switch (x) {
Chris Lattner69a480e2009-04-18 19:42:37 +000051 case 1: ;
52 int a[x]; // expected-note {{jump bypasses initialization of variable length array}}
Chris Lattner2c8f7ce2009-04-18 19:50:02 +000053 case 2: // expected-error {{illegal switch case into protected scope}}
Chris Lattner69a480e2009-04-18 19:42:37 +000054 a[1] = 2;
55 break;
56 }
57}
58
Chris Lattnerbfff1992009-04-18 22:42:18 +000059int test8(int x) {
Chris Lattner0d1c0e22009-04-18 22:56:52 +000060 // For statement.
Chris Lattnerbfff1992009-04-18 22:42:18 +000061 goto L2; // expected-error {{illegal goto into protected scope}}
Chris Lattnerbfff1992009-04-18 22:42:18 +000062 for (int arr[x]; // expected-note {{jump bypasses initialization of variable length array}}
Chris Lattner0d1c0e22009-04-18 22:56:52 +000063 ; ++x)
Chris Lattnerbfff1992009-04-18 22:42:18 +000064 L2:;
Chris Lattner0d1c0e22009-04-18 22:56:52 +000065
66 // Statement expressions.
67 goto L3; // expected-error {{illegal goto into protected scope}}
68 int Y = ({ int a[x]; // expected-note {{jump bypasses initialization of variable length array}}
69 L3: 4; });
Chris Lattnerbfff1992009-04-18 22:42:18 +000070
Chris Lattner0d1c0e22009-04-18 22:56:52 +000071 // Statement expressions 2.
72 goto L1; // expected-error {{illegal goto into protected scope}}
Chris Lattnerbfff1992009-04-18 22:42:18 +000073 return x == ({
74 int a[x]; // expected-note {{jump bypasses initialization of variable length array}}
Chris Lattner0d1c0e22009-04-18 22:56:52 +000075 L1:
Chris Lattnerbfff1992009-04-18 22:42:18 +000076 42; });
77}