// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -verify=both,expected -std=c++11 %s // RUN: %clang_cc1 -verify=both,ref -std=c++11 %s namespace IntOrEnum { const int k = 0; const int &p = k; template struct S {}; S

s; } const int cval = 2; template struct C{}; template struct C; /// FIXME: This example does not get properly diagnosed in the new interpreter. extern const int recurse1; const int recurse2 = recurse1; // both-note {{here}} const int recurse1 = 1; int array1[recurse1]; int array2[recurse2]; // both-warning {{variable length arrays in C++}} \ // both-note {{initializer of 'recurse2' is not a constant expression}} \ // expected-error {{variable length array declaration not allowed at file scope}} \ // ref-warning {{variable length array folded to constant array as an extension}} struct S { int m; }; constexpr S s = { 5 }; constexpr const int *p = &s.m + 1; constexpr const int *np2 = &(*(int(*)[4])nullptr)[0]; // ok