1041080c2SHaojian Wu // RUN: %clang_cc1 -frecovery-ast -verify %s 2041080c2SHaojian Wu 3041080c2SHaojian Wu struct X { 4041080c2SHaojian Wu int Y; 5041080c2SHaojian Wu constexpr X() // expected-error {{constexpr constructor never produces}} 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 { 12*f8f1e5fbSHaojian Wu int Y = foo(); // expected-error {{use of undeclared identifier 'foo'}} 13041080c2SHaojian Wu constexpr X2() {} // expected-error {{constexpr constructor never produces a constant expression}} 14041080c2SHaojian Wu }; 15041080c2SHaojian Wu 1628ccd09dSHaojian Wu struct X3 { 1728ccd09dSHaojian Wu int Y; 1828ccd09dSHaojian Wu constexpr X3() // expected-error {{constexpr constructor never produces}} 1928ccd09dSHaojian Wu : Y(({foo();})) {} // expected-error {{use of undeclared identifier 'foo'}} 2028ccd09dSHaojian Wu }; 2128ccd09dSHaojian Wu 22041080c2SHaojian Wu struct CycleDelegate { 23041080c2SHaojian Wu int Y; 24041080c2SHaojian Wu CycleDelegate(int) 25041080c2SHaojian Wu : Y(foo()) {} // expected-error {{use of undeclared identifier 'foo'}} 26041080c2SHaojian Wu // no bogus "delegation cycle" diagnostic 27041080c2SHaojian Wu CycleDelegate(float) : CycleDelegate(1) {} 28041080c2SHaojian Wu }; 29*f8f1e5fbSHaojian Wu 30*f8f1e5fbSHaojian Wu struct X4 { 31*f8f1e5fbSHaojian Wu int* p = new int(invalid()); // expected-error {{use of undeclared identifier}} 32*f8f1e5fbSHaojian Wu }; 33*f8f1e5fbSHaojian Wu // no crash on evaluating the CXXDefaultInitExpr. 34*f8f1e5fbSHaojian Wu constexpr int* s = X4().p; // expected-error {{must be initialized by}} 35