1 | // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s |
2 | |
3 | // Make sure we don't run off the end of the stream when parsing a deferred |
4 | // initializer. |
5 | int a; // expected-note {{previous}} |
6 | struct S { |
7 | int n = 4 + ; // expected-error {{expected expression}} |
8 | } a; // expected-error {{redefinition}} |
9 | |
10 | // Make sure we use all of the tokens. |
11 | struct T { |
12 | int a = 1 // expected-error {{expected ';' at end of declaration list}} |
13 | int b = 2; |
14 | int c = b; // expected-error {{undeclared identifier}} |
15 | }; |
16 | |
17 | // Test recovery for bad constructor initializers |
18 | |
19 | struct R1 { |
20 | int a; |
21 | R1() : a {} |
22 | }; // expected-error {{expected '{' or ','}} |
23 | |
24 | // Test correct parsing. |
25 | |
26 | struct V1 { |
27 | int a, b; |
28 | V1() : a(), b{} {} |
29 | }; |
30 | |
31 | template <typename, typename> struct T1 { enum {V};}; |
32 | template <int, int> struct T2 { enum {V};}; |
33 | struct A { |
34 | T1<int, int> a1 = T1<int, int>(), *a2 = new T1<int,int>; |
35 | T2<0,0> b1 = T2<0,0>(), b2 = T2<0,0>(), b3; |
36 | bool c1 = 1 < 2, c2 = 2 < 1, c3 = false; |
37 | bool d1 = T1<int, T1<int, int>>::V < 3, d2; |
38 | T1<int, int()> e = T1<int, int()>(); |
39 | }; |
40 | |
41 | struct PR19993 { |
42 | static int n = delete; // expected-error {{only functions can have deleted definitions}} |
43 | }; |
44 | |