xref: /llvm-project/clang/test/AST/ByteCode/cxx03.cpp (revision a07aba5d44204a7ca0d891a3da05af9960081e4c)
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