diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/SemaCXX/init-expr-crash.cpp | 8 | ||||
-rw-r--r-- | test/SemaTemplate/instantiate-init.cpp | 14 |
2 files changed, 22 insertions, 0 deletions
diff --git a/test/SemaCXX/init-expr-crash.cpp b/test/SemaCXX/init-expr-crash.cpp index 407da78e60..201ab03955 100644 --- a/test/SemaCXX/init-expr-crash.cpp +++ b/test/SemaCXX/init-expr-crash.cpp @@ -29,3 +29,11 @@ template <class T> struct B { return 0; } }; + +// This test checks for a crash that resulted from us miscomputing the +// dependence of a nested initializer list. +template<int> struct X { + static constexpr int n = 4; + static constexpr int a[1][1] = {n}; +}; + diff --git a/test/SemaTemplate/instantiate-init.cpp b/test/SemaTemplate/instantiate-init.cpp index 244e94f6d6..51fa6955d0 100644 --- a/test/SemaTemplate/instantiate-init.cpp +++ b/test/SemaTemplate/instantiate-init.cpp @@ -142,3 +142,17 @@ namespace ReturnStmtIsInitialization { template<typename T> X f() { return {}; } auto &&x = f<void>(); } + +namespace InitListUpdate { + struct A { int n; }; + using AA = A[1]; + + // Check that an init list update doesn't "lose" the pack-ness of an expression. + template <int... N> void f() { + g(AA{0, [0].n = N} ...); // expected-warning 3{{overrides prior init}} expected-note 3{{previous init}} + g(AA{N, [0].n = 0} ...); // expected-warning 3{{overrides prior init}} expected-note 3{{previous init}} + }; + + void g(AA, AA); + void h() { f<1, 2>(); } // expected-note {{instantiation of}} +} |