diff options
Diffstat (limited to 'test/SemaCXX/cxx1y-array-runtime-bound.cpp')
-rw-r--r-- | test/SemaCXX/cxx1y-array-runtime-bound.cpp | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/test/SemaCXX/cxx1y-array-runtime-bound.cpp b/test/SemaCXX/cxx1y-array-runtime-bound.cpp deleted file mode 100644 index 1643adb..0000000 --- a/test/SemaCXX/cxx1y-array-runtime-bound.cpp +++ /dev/null @@ -1,68 +0,0 @@ -// RUN: %clang_cc1 -std=c++1y %s -verify -triple=x86_64-linux-gnu -pedantic-errors - -// FIXME: many diagnostics here say 'variably modified type'. -// catch this case and say 'array of runtime bound' instead. - -namespace std { struct type_info; } - -struct S { - int arr[__SIZE_MAX__ / 32]; -}; -S s[32]; // expected-error {{array is too large}} - -int n; -int a[n]; // expected-error {{not allowed at file scope}} - -struct T { - int a[n]; // expected-error {{fields must have a constant size}} - static int b[n]; // expected-error {{not allowed at file scope}} -}; - -int g(int n, int a[n]); - -template<typename T> struct X {}; -template<int N, int[N]> struct Y {}; -template<int[n]> struct Z {}; // expected-error {{of variably modified type}} - -int f(int n) { - int arb[n]; // expected-note 3{{here}} - [arb] {} (); // expected-error {{cannot be captured}} - - // FIXME: an array of runtime bound can be captured by reference. - [&arb] { // expected-error {{cannot be captured}} - // Capturing the array implicitly captures the bound, if we need it - // in a range-based for loop. - for (auto &n : arb) { } // expected-error {{cannot be captured}} - } (); - - X<int[n]> x; // expected-error {{variably modified type}} - - int arb_neg[-1]; // expected-error {{negative size}} - int arb_of_array[n][2]; - int arr[3] = { 1, 2, 3, 4 }; // expected-error {{excess elements}} - char foo[4] = "fool"; // expected-error {{initializer-string for char array is too long}} - - static int not_auto1[n]; // expected-error {{can not have 'static'}} - extern int not_auto2[n]; // expected-error {{can not have 'extern'}} - // FIXME: say 'thread_local' not 'static'. - thread_local int not_auto1[n]; // expected-error {{can not have 'static'}} - - // FIXME: these should all be invalid. - auto &&ti1 = typeid(arb); - auto &&ti2 = typeid(int[n]); - auto &&so1 = sizeof(arb); - auto &&so2 = sizeof(int[n]); - auto *p = &arb; - decltype(arb) arb2; - int (*arbp)[n] = 0; - const int (&arbr)[n] = arbr; // expected-warning {{not yet bound}} - typedef int arbty[n]; - int array_of_arb[2][n]; - - struct Dyn { Dyn() {} Dyn(int) {} ~Dyn() {} }; - - // FIXME: these should be valid. - int arb_dynamic[n] = { 1, 2, 3, 4 }; // expected-error {{may not be initialized}} - Dyn dyn[n]; // expected-error {{non-POD}} - Dyn dyn_init[n] = { 1, 2, 3, 4 }; // expected-error {{non-POD}} -} |