summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-01-05 23:12:16 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-01-05 23:12:16 +0000
commitc8a32e5ed2aaf0ab7478ffbdd20dcea9e86509b3 (patch)
tree8070b9f6b25b05c66e13efebd2af79f0a89b563f /clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
parentc92d206ce441934a28e5886b5d635748f865a808 (diff)
downloadbcm5719-llvm-c8a32e5ed2aaf0ab7478ffbdd20dcea9e86509b3.tar.gz
bcm5719-llvm-c8a32e5ed2aaf0ab7478ffbdd20dcea9e86509b3.zip
Fix bug where types other than 'cv auto', 'cv auto &', and 'cv auto &&' could
incorrectly be deduced from an initializer list in pathological cases. llvm-svn: 291191
Diffstat (limited to 'clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp')
-rw-r--r--clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
index 01d498a5e95..9b8fadd2f52 100644
--- a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
+++ b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp
@@ -337,3 +337,13 @@ namespace update_rbrace_loc_crash {
Explode<ContainsIncomplete, 4>([](int) {});
}
}
+
+namespace no_conversion_after_auto_list_deduction {
+ // We used to deduce 'auto' == 'std::initializer_list<X>' here, and then
+ // incorrectly accept the declaration of 'x'.
+ struct X { using T = std::initializer_list<X> X::*; operator T(); };
+ auto X::*x = { X() }; // expected-error {{from initializer list}}
+
+ struct Y { using T = std::initializer_list<Y>(*)(); operator T(); };
+ auto (*y)() = { Y() }; // expected-error {{from initializer list}}
+}
OpenPOWER on IntegriCloud