From: Martin Bohme Date: Wed, 30 Aug 2017 10:44:51 +0000 (+0000) Subject: Add test case that was broken by r311970. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=362362f51fcee8fdc49e0a2e15ad7b43c4f7fa76;p=clang Add test case that was broken by r311970. See also discussion here: https://reviews.llvm.org/rL301963 As far as I can tell, this discussion was never resolved. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@312109 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/SemaCXX/constant-expression-cxx11.cpp b/test/SemaCXX/constant-expression-cxx11.cpp index 3fda2d0a7f..b1575077cd 100644 --- a/test/SemaCXX/constant-expression-cxx11.cpp +++ b/test/SemaCXX/constant-expression-cxx11.cpp @@ -604,6 +604,22 @@ static_assert(NATDCArray{}[1][1].n == 0, ""); } +// Tests for indexes into arrays of unknown bounds. +namespace ArrayOfUnknownBound { + // This is a corner case of the language where it's not clear whether this + // should be an error: When we see the initializer for Z::a, the bounds of + // Z::b aren't known yet, but they will be known by the end of the translation + // unit, so the compiler can in theory check the indexing into Z::b. + // For the time being, as long as this is unclear, we want to make sure that + // this compiles. + struct Z { + static const void *const a[]; + static const void *const b[]; + }; + constexpr const void *Z::a[] = {&b[0], &b[1]}; + constexpr const void *Z::b[] = {&a[0], &a[1]}; +} + namespace DependentValues { struct I { int n; typedef I V[10]; };