summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2015-12-09 23:18:38 +0000
committerReid Kleckner <rnk@google.com>2015-12-09 23:18:38 +0000
commit4a09e8872f37b191e70a0664e687aae38549390c (patch)
treefb17385d6e1d233250cedcd329b470fad24cbb6f /clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
parent5d2f7cfd44db983c5c21d36356c3319d792a90bc (diff)
downloadbcm5719-llvm-4a09e8872f37b191e70a0664e687aae38549390c.tar.gz
bcm5719-llvm-4a09e8872f37b191e70a0664e687aae38549390c.zip
Fix crash on invalid initialization with std::initializer_list
It is possible for CheckListElementTypes to fail without filling in any initializer list elements. llvm-svn: 255176
Diffstat (limited to 'clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp')
-rw-r--r--clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
index 3d119643710..060a0f236b4 100644
--- a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
+++ b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
@@ -284,3 +284,28 @@ namespace ParameterPackNestedInitializerLists_PR23904c3 {
void foo() { f({{0}}, {{'\0'}}); }
}
+
+namespace update_rbrace_loc_crash {
+ // We used to crash-on-invalid on this example when updating the right brace
+ // location.
+ template <typename T, T>
+ struct A {};
+ template <typename T, typename F, int... I>
+ std::initializer_list<T> ExplodeImpl(F p1, A<int, I...>) {
+ // expected-error@+1 {{reference to type 'const update_rbrace_loc_crash::Incomplete' could not bind to an rvalue of type 'void'}}
+ return {p1(I)...};
+ }
+ template <typename T, int N, typename F>
+ void Explode(F p1) {
+ // expected-note@+1 {{in instantiation of function template specialization}}
+ ExplodeImpl<T>(p1, A<int, N>());
+ }
+ class Incomplete;
+ struct ContainsIncomplete {
+ const Incomplete &obstacle;
+ };
+ void f() {
+ // expected-note@+1 {{in instantiation of function template specialization}}
+ Explode<ContainsIncomplete, 4>([](int) {});
+ }
+}
OpenPOWER on IntegriCloud