| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- // RUN: %clang_cc1 -fsyntax-only -verify %s
- // RUN: cp %s %t
- // RUN: not %clang_cc1 -fixit %t -x c++ -DFIXIT
- // RUN: %clang_cc1 -fsyntax-only %t -x c++ -DFIXIT
- // RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s -strict-whitespace
- void test1() {
- int a[] = {0,1,1,2,3};
- int []b = {0,1,4,9,16};
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} int []b = {0,1,4,9,16};
- // CHECK: {{^}} ~~ ^
- // CHECK: {{^}} []
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:9}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:10-[[@LINE-6]]:10}:"[]"
- int c = a[0];
- int d = b[0]; // No undeclared identifer error here.
- int *e = a;
- int *f = b; // No undeclared identifer error here.
- int[1] g[2];
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} int[1] g[2];
- // CHECK: {{^}} ~~~ ^
- // CHECK: {{^}} [1]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:6-[[@LINE-5]]:9}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:14-[[@LINE-6]]:14}:"[1]"
- }
- void test2() {
- int [3] (*a) = 0;
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} int [3] (*a) = 0;
- // CHECK: {{^}} ~~~~ ^
- // CHECK: {{^}} [3]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:11}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:15-[[@LINE-6]]:15}:"[3]"
- #ifndef FIXIT
- // Make sure a is corrected to be like type y, instead of like type z.
- int (*b)[3] = a;
- int (*c[3]) = a; // expected-error{{}}
- #endif
- }
- struct A {
- static int [1][1]x;
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} static int [1][1]x;
- // CHECK: {{^}} ~~~~~~ ^
- // CHECK: {{^}} [1][1]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:14-[[@LINE-5]]:20}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:21-[[@LINE-6]]:21}:"[1][1]"
- };
- int [1][1]A::x = { {42} };
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}}int [1][1]A::x = { {42} };
- // CHECK: {{^}} ~~~~~~ ^
- // CHECK: {{^}} [1][1]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:5-[[@LINE-5]]:11}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:15-[[@LINE-6]]:15}:"[1][1]"
- struct B { static int (*x)[5]; };
- int [5] *B::x = 0;
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}}int [5] *B::x = 0;
- // CHECK: {{^}} ~~~~ ^
- // CHECK: {{^}} ( )[5]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:5-[[@LINE-5]]:9}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:9-[[@LINE-6]]:9}:"("
- // CHECK: fix-it:{{.*}}:{[[@LINE-7]]:14-[[@LINE-7]]:14}:")[5]"
- void test3() {
- int [3] *a;
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} int [3] *a;
- // CHECK: {{^}} ~~~~ ^
- // CHECK: {{^}} ( )[3]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:11}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:11-[[@LINE-6]]:11}:"("
- // CHECK: fix-it:{{.*}}:{[[@LINE-7]]:13-[[@LINE-7]]:13}:")[3]"
- int (*b)[3] = a; // no error
- }
- void test4() {
- int [2] a;
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} int [2] a;
- // CHECK: {{^}} ~~~~ ^
- // CHECK: {{^}} [2]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:11}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:12-[[@LINE-6]]:12}:"[2]"
- int [2] &b = a;
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} int [2] &b = a;
- // CHECK: {{^}} ~~~~ ^
- // CHECK: {{^}} ( )[2]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:11}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:11-[[@LINE-6]]:11}:"("
- // CHECK: fix-it:{{.*}}:{[[@LINE-7]]:13-[[@LINE-7]]:13}:")[2]"
- }
- namespace test5 {
- #ifndef FIXIT
- int [][][];
- // expected-error@-1{{expected unqualified-id}}
- // CHECK: {{^}}int [][][];
- // CHECK: {{^}} ^
- struct C {
- int [];
- // expected-error@-1{{expected member name or ';' after declaration specifiers}}
- // CHECK: {{^}} int [];
- // CHECK: {{^}} ~~~ ^
- };
- #endif
- }
- namespace test6 {
- struct A {
- static int arr[3];
- };
- int [3] ::test6::A::arr = {1,2,3};
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}}int [3] ::test6::A::arr = {1,2,3};
- // CHECK: {{^}} ~~~~ ^
- // CHECK: {{^}} [3]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:5-[[@LINE-5]]:9}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:24-[[@LINE-6]]:24}:"[3]"
- }
- namespace test7 {
- class A{};
- void test() {
- int [3] A::*a;
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- // CHECK: {{^}} int [3] A::*a;
- // CHECK: {{^}} ~~~~ ^
- // CHECK: {{^}} ( )[3]
- // CHECK: fix-it:{{.*}}:{[[@LINE-5]]:7-[[@LINE-5]]:11}:""
- // CHECK: fix-it:{{.*}}:{[[@LINE-6]]:11-[[@LINE-6]]:11}:"("
- // CHECK: fix-it:{{.*}}:{[[@LINE-7]]:16-[[@LINE-7]]:16}:")[3]"
- }
- }
- namespace test8 {
- struct A {
- static const char f[];
- };
- const char[] A::f = "f";
- // expected-error@-1{{brackets are not allowed here; to declare an array, place the brackets after the name}}
- }
- // CHECK: 15 errors generated.
|