1*a07aba5dSTimm Baeder // RUN: %clang_cc1 -std=c++03 -verify=expected,both %s -fexperimental-new-constant-interpreter 2*a07aba5dSTimm Baeder // RUN: %clang_cc1 -std=c++03 -verify=ref,both %s 3*a07aba5dSTimm Baeder 4*a07aba5dSTimm Baeder namespace NonInitializingMemberExpr { 5*a07aba5dSTimm Baeder struct NonLit { 6*a07aba5dSTimm Baeder NonLit() : value(0) {} 7*a07aba5dSTimm Baeder int value; 8*a07aba5dSTimm Baeder }; 9*a07aba5dSTimm Baeder __attribute__((require_constant_initialization)) const int &nl_subobj_ref = NonLit().value; // both-error {{variable does not have a constant initializer}} \ 10*a07aba5dSTimm Baeder // both-note {{required by}} \ 11*a07aba5dSTimm Baeder // both-note {{subexpression not valid}} 12*a07aba5dSTimm Baeder } 13*a07aba5dSTimm Baeder 14*a07aba5dSTimm Baeder 15*a07aba5dSTimm Baeder namespace NonLValueMemberExpr { 16*a07aba5dSTimm Baeder struct PODType { 17*a07aba5dSTimm Baeder int value; 18*a07aba5dSTimm Baeder }; 19*a07aba5dSTimm Baeder 20*a07aba5dSTimm Baeder #define ATTR __attribute__((require_constant_initialization)) 21*a07aba5dSTimm Baeder struct TT1 { 22*a07aba5dSTimm Baeder ATTR static const int &subobj_init; 23*a07aba5dSTimm Baeder }; 24*a07aba5dSTimm Baeder 25*a07aba5dSTimm Baeder const int &TT1::subobj_init = PODType().value; 26*a07aba5dSTimm Baeder } 27*a07aba5dSTimm Baeder 28*a07aba5dSTimm Baeder void LambdaAccessingADummy() { 29*a07aba5dSTimm Baeder int d; 30*a07aba5dSTimm Baeder int a9[1] = {[d = 0] = 1}; // both-error {{is not an integral constant expression}} 31*a07aba5dSTimm Baeder } 32