1041080c2SHaojian Wu // RUN: %clang_cc1 -frecovery-ast -verify %s 2041080c2SHaojian Wu 3041080c2SHaojian Wu struct X { 4041080c2SHaojian Wu int Y; XX5*bd4662cdSHaojian Wu constexpr X() 6041080c2SHaojian Wu : Y(foo()) {} // expected-error {{use of undeclared identifier 'foo'}} 7041080c2SHaojian Wu }; 8041080c2SHaojian Wu // no crash on evaluating the constexpr ctor. 9041080c2SHaojian Wu constexpr int Z = X().Y; // expected-error {{constexpr variable 'Z' must be initialized by a constant expression}} 10041080c2SHaojian Wu 11041080c2SHaojian Wu struct X2 { 12f8f1e5fbSHaojian Wu int Y = foo(); // expected-error {{use of undeclared identifier 'foo'}} X2X213*bd4662cdSHaojian Wu constexpr X2() {} 14041080c2SHaojian Wu }; 15041080c2SHaojian Wu 1628ccd09dSHaojian Wu struct X3 { 1728ccd09dSHaojian Wu int Y; X3X318*bd4662cdSHaojian Wu constexpr X3() 1928ccd09dSHaojian Wu : Y(({foo();})) {} // expected-error {{use of undeclared identifier 'foo'}} 2028ccd09dSHaojian Wu }; 2128ccd09dSHaojian Wu 22041080c2SHaojian Wu struct CycleDelegate { 23041080c2SHaojian Wu int Y; CycleDelegateCycleDelegate24041080c2SHaojian Wu CycleDelegate(int) 25041080c2SHaojian Wu : Y(foo()) {} // expected-error {{use of undeclared identifier 'foo'}} 26041080c2SHaojian Wu // no bogus "delegation cycle" diagnostic CycleDelegateCycleDelegate27041080c2SHaojian Wu CycleDelegate(float) : CycleDelegate(1) {} 28041080c2SHaojian Wu }; 29f8f1e5fbSHaojian Wu 30f8f1e5fbSHaojian Wu struct X4 { 31f8f1e5fbSHaojian Wu int* p = new int(invalid()); // expected-error {{use of undeclared identifier}} 32f8f1e5fbSHaojian Wu }; 33f8f1e5fbSHaojian Wu // no crash on evaluating the CXXDefaultInitExpr. 34f8f1e5fbSHaojian Wu constexpr int* s = X4().p; // expected-error {{must be initialized by}} 35