1 // RUN: %clang_cc1 -std=c++11 -verify %s 2 3 // rdar://12240916 stack overflow. 4 namespace rdar12240916 { 5 6 struct S2 { 7 S2(const S2&); 8 S2(); 9 }; 10 11 struct S { // expected-note {{not complete}} 12 S x; // expected-error {{incomplete type}} 13 S2 y; 14 }; 15 16 S foo() { 17 S s; 18 return s; 19 } 20 21 struct S3; // expected-note {{forward declaration}} 22 23 struct S4 { 24 S3 x; // expected-error {{incomplete type}} 25 S2 y; 26 }; 27 28 struct S3 { 29 S4 x; 30 S2 y; 31 }; 32 33 S4 foo2() { 34 S4 s; 35 return s; 36 } 37 38 } 39 40 // rdar://12542261 stack overflow. 41 namespace rdar12542261 { 42 43 template <class _Tp> 44 struct check_complete 45 { 46 static_assert(sizeof(_Tp) > 0, "Type must be complete."); 47 }; 48 49 50 template<class _Rp> 51 class function // expected-note 2 {{candidate}} 52 { 53 public: 54 template<class _Fp> 55 function(_Fp, typename check_complete<_Fp>::type* = 0); // expected-note {{candidate}} 56 }; 57 58 void foobar() 59 { 60 auto LeftCanvas = new Canvas(); // expected-error {{unknown type name}} 61 function<void()> m_OnChange = [&, LeftCanvas]() { }; // expected-error {{no viable conversion}} 62 } 63 64 } 65 66 namespace b6981007 { 67 struct S {}; // expected-note 3{{candidate}} 68 void f() { 69 S s(1, 2, 3); // expected-error {{no matching}} 70 for (auto x : s) { 71 // We used to attempt to evaluate the initializer of this variable, 72 // and crash because it has an undeduced type. 73 // FIXME: We should set the loop variable to be invalid if we can't build 74 // the loop, to suppress this follow-on error. 75 const int &n(x); // expected-error {{could not bind to an lvalue of type 'auto'}} 76 } 77 } 78 } 79