1*67e74705SXin Li // RUN: %clang_cc1 -std=c++11 -verify %s 2*67e74705SXin Li 3*67e74705SXin Li // rdar://12240916 stack overflow. 4*67e74705SXin Li namespace rdar12240916 { 5*67e74705SXin Li 6*67e74705SXin Li struct S2 { 7*67e74705SXin Li S2(const S2&); 8*67e74705SXin Li S2(); 9*67e74705SXin Li }; 10*67e74705SXin Li 11*67e74705SXin Li struct S { // expected-note {{not complete}} 12*67e74705SXin Li S x; // expected-error {{incomplete type}} 13*67e74705SXin Li S2 y; 14*67e74705SXin Li }; 15*67e74705SXin Li foo()16*67e74705SXin LiS foo() { 17*67e74705SXin Li S s; 18*67e74705SXin Li return s; 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li struct S3; // expected-note {{forward declaration}} 22*67e74705SXin Li 23*67e74705SXin Li struct S4 { 24*67e74705SXin Li S3 x; // expected-error {{incomplete type}} 25*67e74705SXin Li S2 y; 26*67e74705SXin Li }; 27*67e74705SXin Li 28*67e74705SXin Li struct S3 { 29*67e74705SXin Li S4 x; 30*67e74705SXin Li S2 y; 31*67e74705SXin Li }; 32*67e74705SXin Li foo2()33*67e74705SXin LiS4 foo2() { 34*67e74705SXin Li S4 s; 35*67e74705SXin Li return s; 36*67e74705SXin Li } 37*67e74705SXin Li 38*67e74705SXin Li } 39*67e74705SXin Li 40*67e74705SXin Li // rdar://12542261 stack overflow. 41*67e74705SXin Li namespace rdar12542261 { 42*67e74705SXin Li 43*67e74705SXin Li template <class _Tp> 44*67e74705SXin Li struct check_complete 45*67e74705SXin Li { 46*67e74705SXin Li static_assert(sizeof(_Tp) > 0, "Type must be complete."); 47*67e74705SXin Li }; 48*67e74705SXin Li 49*67e74705SXin Li 50*67e74705SXin Li template<class _Rp> 51*67e74705SXin Li class function // expected-note 2 {{candidate}} 52*67e74705SXin Li { 53*67e74705SXin Li public: 54*67e74705SXin Li template<class _Fp> 55*67e74705SXin Li function(_Fp, typename check_complete<_Fp>::type* = 0); // expected-note {{candidate}} 56*67e74705SXin Li }; 57*67e74705SXin Li foobar()58*67e74705SXin Livoid foobar() 59*67e74705SXin Li { 60*67e74705SXin Li auto LeftCanvas = new Canvas(); // expected-error {{unknown type name}} 61*67e74705SXin Li function<void()> m_OnChange = [&, LeftCanvas]() { }; // expected-error {{no viable conversion}} 62*67e74705SXin Li } 63*67e74705SXin Li 64*67e74705SXin Li } 65*67e74705SXin Li 66*67e74705SXin Li namespace b6981007 { 67*67e74705SXin Li struct S {}; // expected-note 3{{candidate}} f()68*67e74705SXin Li void f() { 69*67e74705SXin Li S s(1, 2, 3); // expected-error {{no matching}} 70*67e74705SXin Li for (auto x : s) { 71*67e74705SXin Li // We used to attempt to evaluate the initializer of this variable, 72*67e74705SXin Li // and crash because it has an undeduced type. 73*67e74705SXin Li const int &n(x); 74*67e74705SXin Li } 75*67e74705SXin Li } 76*67e74705SXin Li } 77*67e74705SXin Li 78*67e74705SXin Li namespace incorrect_auto_type_deduction_for_typo { 79*67e74705SXin Li struct S { Sincorrect_auto_type_deduction_for_typo::S80*67e74705SXin Li template <typename T> S(T t) { 81*67e74705SXin Li (void)sizeof(t); 82*67e74705SXin Li (void)new auto(t); 83*67e74705SXin Li } 84*67e74705SXin Li }; 85*67e74705SXin Li 86*67e74705SXin Li void Foo(S); 87*67e74705SXin Li test(int some_number)88*67e74705SXin Livoid test(int some_number) { // expected-note {{'some_number' declared here}} 89*67e74705SXin Li auto x = sum_number; // expected-error {{use of undeclared identifier 'sum_number'; did you mean 'some_number'?}} 90*67e74705SXin Li auto lambda = [x] {}; 91*67e74705SXin Li Foo(lambda); 92*67e74705SXin Li } 93*67e74705SXin Li } 94