// RUN: %clang_cc1 -std=c++11 -verify %s // rdar://12240916 stack overflow. namespace rdar12240916 { struct S2 { S2(const S2&); S2(); }; struct S { // expected-note {{not complete}} S x; // expected-error {{incomplete type}} S2 y; }; S foo() { S s; return s; } struct S3; // expected-note {{forward declaration}} struct S4 { S3 x; // expected-error {{incomplete type}} S2 y; }; struct S3 { S4 x; S2 y; }; S4 foo2() { S4 s; return s; } } // rdar://12542261 stack overflow. namespace rdar12542261 { template struct check_complete { static_assert(sizeof(_Tp) > 0, "Type must be complete."); }; template class function // expected-note 2 {{candidate}} { public: template function(_Fp, typename check_complete<_Fp>::type* = 0); // expected-note {{candidate}} }; void foobar() { auto LeftCanvas = new Canvas(); // expected-error {{unknown type name}} function m_OnChange = [&, LeftCanvas]() { }; // expected-error {{no viable conversion}} } } namespace b6981007 { struct S {}; // expected-note 3{{candidate}} void f() { S s(1, 2, 3); // expected-error {{no matching}} for (auto x : s) { // We used to attempt to evaluate the initializer of this variable, // and crash because it has an undeduced type. // FIXME: We should set the loop variable to be invalid if we can't build // the loop, to suppress this follow-on error. const int &n(x); // expected-error {{could not bind to an lvalue of type 'auto'}} } } }