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