summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/constexpr-array-unknown-bound.cpp
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2017-05-02 19:21:42 +0000
committerDaniel Jasper <djasper@google.com>2017-05-02 19:21:42 +0000
commitffdee093504d8e4133ebc90855e13f87c94d82b1 (patch)
tree7c95d85741a8d2d0d08b9050773b4fea7dcd1203 /clang/test/SemaCXX/constexpr-array-unknown-bound.cpp
parentf9d8eee3db46db293afea65a50bf884580873627 (diff)
downloadbcm5719-llvm-ffdee093504d8e4133ebc90855e13f87c94d82b1.tar.gz
bcm5719-llvm-ffdee093504d8e4133ebc90855e13f87c94d82b1.zip
Revert r301822 (and dependent r301825), which tried to improve the
handling of constexprs with unknown bounds. This triggers a corner case of the language where it's not yet clear whether this should be an error: struct A { static void *const a[]; static void *const b[]; }; constexpr void *A::a[] = {&b[0]}; constexpr void *A::b[] = {&a[0]}; When discovering the initializer for A::a, the bounds of A::b aren't known yet. It is unclear whether warning about errors should be deferred until the end of the translation unit, possibly resolving errors that can be resolved. In practice, the compiler can know the bounds of all arrays in this example. Credits for reproducers and explanation go to Richard Smith. Richard, please add more info in case my explanation is wrong. llvm-svn: 301963
Diffstat (limited to 'clang/test/SemaCXX/constexpr-array-unknown-bound.cpp')
-rw-r--r--clang/test/SemaCXX/constexpr-array-unknown-bound.cpp25
1 files changed, 0 insertions, 25 deletions
diff --git a/clang/test/SemaCXX/constexpr-array-unknown-bound.cpp b/clang/test/SemaCXX/constexpr-array-unknown-bound.cpp
deleted file mode 100644
index 1d146237198..00000000000
--- a/clang/test/SemaCXX/constexpr-array-unknown-bound.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clang_cc1 %s -Wno-uninitialized -std=c++1z -fsyntax-only -verify
-
-const extern int arr[];
-constexpr auto p = arr; // ok
-constexpr int f(int i) {return p[i];} // expected-note {{read of dereferenced one-past-the-end pointer}}
-
-constexpr int arr[] {1, 2, 3};
-constexpr auto p2 = arr + 2; // ok
-constexpr int x = f(2); // ok
-constexpr int y = f(3); // expected-error {{constant expression}}
-// expected-note-re@-1 {{in call to 'f({{.*}})'}}
-
-struct A {int m[];} a;
-constexpr auto p3 = a.m; // ok
-constexpr auto p4 = a.m + 1; // expected-error {{constant expression}} expected-note {{constant bound}}
-
-void g(int i) {
- int arr[i];
- constexpr auto *p = arr + 2; // expected-error {{constant expression}} expected-note {{constant bound}}
-
- // FIXME: Give a better diagnostic here. The issue is that computing
- // sizeof(*arr2) within the array indexing fails due to the VLA.
- int arr2[2][i];
- constexpr int m = ((void)arr2[2], 0); // expected-error {{constant expression}}
-}
OpenPOWER on IntegriCloud