1// RUN: %clang_cc1 -std=c++11 -verify %s 2 3// rdar://12240916 stack overflow. 4namespace rdar12240916 { 5 6struct S2 { 7 S2(const S2&); 8 S2(); 9}; 10 11struct S { // expected-note {{not complete}} 12 S x; // expected-error {{incomplete type}} 13 S2 y; 14}; 15 16S foo() { 17 S s; 18 return s; 19} 20 21struct S3; // expected-note {{forward declaration}} 22 23struct S4 { 24 S3 x; // expected-error {{incomplete type}} 25 S2 y; 26}; 27 28struct S3 { 29 S4 x; 30 S2 y; 31}; 32 33S4 foo2() { 34 S4 s; 35 return s; 36} 37 38} 39 40// rdar://12542261 stack overflow. 41namespace rdar12542261 { 42 43template <class _Tp> 44struct check_complete 45{ 46 static_assert(sizeof(_Tp) > 0, "Type must be complete."); 47}; 48 49 50template<class _Rp> 51class function // expected-note 2 {{candidate}} 52{ 53public: 54 template<class _Fp> 55 function(_Fp, typename check_complete<_Fp>::type* = 0); // expected-note {{candidate}} 56}; 57 58void 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 66namespace 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 const int &n(x); 74 } 75 } 76} 77