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