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