xref: /aosp_15_r20/external/clang/test/Parser/brackets.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li // RUN: cp %s %t
3*67e74705SXin Li // RUN: not %clang_cc1 -fixit %t -x c -DFIXIT
4*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only %t -x c -DFIXIT
5*67e74705SXin Li // RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s -strict-whitespace
6*67e74705SXin Li 
test1()7*67e74705SXin Li void test1() {
8*67e74705SXin Li   int a[] = {0,1,1,2,3};
9*67e74705SXin Li   int []b = {0,1,4,9,16};
10*67e74705SXin Li   // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the identifier}}
11*67e74705SXin Li   // CHECK: {{^}}  int []b = {0,1,4,9,16};
12*67e74705SXin Li   // CHECK: {{^}}      ~~ ^
13*67e74705SXin Li   // CHECK: {{^}}         []
14*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:9}:""
15*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:10-[[@LINE-6]]:10}:"[]"
16*67e74705SXin Li 
17*67e74705SXin Li   int c = a[0];
18*67e74705SXin Li   int d = b[0]; // No undeclared identifer error here.
19*67e74705SXin Li 
20*67e74705SXin Li   int *e = a;
21*67e74705SXin Li   int *f = b; // No undeclared identifer error here.
22*67e74705SXin Li }
23*67e74705SXin Li 
24*67e74705SXin Li struct S {
25*67e74705SXin Li   int [1][1]x;
26*67e74705SXin Li   // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the identifier}}
27*67e74705SXin Li   // CHECK: {{^}}  int [1][1]x;
28*67e74705SXin Li   // CHECK: {{^}}      ~~~~~~ ^
29*67e74705SXin Li   // CHECK: {{^}}             [1][1]
30*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:13}:""
31*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:14-[[@LINE-6]]:14}:"[1][1]"
32*67e74705SXin Li } s;
33*67e74705SXin Li 
34*67e74705SXin Li #ifndef FIXIT
test2()35*67e74705SXin Li void test2() {
36*67e74705SXin Li   int [][][];
37*67e74705SXin Li   // expected-error@-1{{expected identifier or '('}}
38*67e74705SXin Li   // CHECK: {{^}}  int [][][];
39*67e74705SXin Li   // CHECK: {{^}}      ^
40*67e74705SXin Li   // CHECK-NOT: fix-it
41*67e74705SXin Li   struct T {
42*67e74705SXin Li     int [];
43*67e74705SXin Li     // expected-error@-1{{expected member name or ';' after declaration specifiers}}
44*67e74705SXin Li     // CHECK: {{^}}    int [];
45*67e74705SXin Li     // CHECK: {{^}}    ~~~ ^
46*67e74705SXin Li     // CHECK-NOT: fix-it
47*67e74705SXin Li   };
48*67e74705SXin Li }
49*67e74705SXin Li 
test3()50*67e74705SXin Li void test3() {
51*67e74705SXin Li   int [5] *;
52*67e74705SXin Li   // expected-error@-1{{expected identifier or '('}}
53*67e74705SXin Li   // CHECK: {{^}}  int [5] *;
54*67e74705SXin Li   // CHECK: {{^}}           ^
55*67e74705SXin Li   // CHECK-NOT: fix-it
56*67e74705SXin Li   // expected-error@-5{{brackets are not allowed here; to declare an array, place the brackets after the identifier}}
57*67e74705SXin Li   // CHECK: {{^}}  int [5] *;
58*67e74705SXin Li   // CHECK: {{^}}      ~~~~ ^
59*67e74705SXin Li   // CHECK: {{^}}          ()[5]
60*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-9]]:7-[[@LINE-9]]:11}:""
61*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-10]]:11-[[@LINE-10]]:11}:"("
62*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-11]]:12-[[@LINE-11]]:12}:")[5]"
63*67e74705SXin Li 
64*67e74705SXin Li   int [5] * a;
65*67e74705SXin Li   // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the identifier}}
66*67e74705SXin Li   // CHECK: {{^}}  int [5] * a;
67*67e74705SXin Li   // CHECK: {{^}}      ~~~~   ^
68*67e74705SXin Li   // CHECK: {{^}}          (  )[5]
69*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:11}:""
70*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:11-[[@LINE-6]]:11}:"("
71*67e74705SXin Li   // CHECK: fix-it:{{.*}}:{[[@LINE-7]]:14-[[@LINE-7]]:14}:")[5]"
72*67e74705SXin Li 
73*67e74705SXin Li   int *b[5] = a;  // expected-error{{}} a should not be corrected to type b
74*67e74705SXin Li 
75*67e74705SXin Li   int (*c)[5] = a;  // a should be the same type as c
76*67e74705SXin Li }
77*67e74705SXin Li #endif
78*67e74705SXin Li 
79*67e74705SXin Li // CHECK: 8 errors generated.
80