diff options
-rw-r--r-- | lib/Sema/SemaOverload.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/cxx0x-initializer-aggregates.cpp | 11 | ||||
-rw-r--r-- | test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp | 8 |
3 files changed, 19 insertions, 2 deletions
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 57e74d06b9..cfbd33c0d3 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -4377,7 +4377,7 @@ TryListConversion(Sema &S, InitListExpr *From, QualType ToType, bool toStdInitializerList = false; QualType X; if (ToType->isArrayType()) - X = S.Context.getBaseElementType(ToType); + X = S.Context.getAsArrayType(ToType)->getElementType(); else toStdInitializerList = S.isStdInitializerList(ToType, &X); if (!X.isNull()) { diff --git a/test/SemaCXX/cxx0x-initializer-aggregates.cpp b/test/SemaCXX/cxx0x-initializer-aggregates.cpp index c83058a5e1..7d1fa7e3ec 100644 --- a/test/SemaCXX/cxx0x-initializer-aggregates.cpp +++ b/test/SemaCXX/cxx0x-initializer-aggregates.cpp @@ -115,4 +115,13 @@ namespace sub_constructor { Aggr invalid { {} , {&ok1} , {0,0} }; // expected-error {{no matching constructor for initialization}} NoDefaultConstructor2 array_ok[] = { {0,0} , {0,1} }; NoDefaultConstructor2 array_error[] = { {0,0} , {0} }; // expected-error {{no matching constructor for initialization}} -}
\ No newline at end of file +} + +namespace multidimensional_array { + void g(const int (&)[2][2]) {} + void g(const int (&)[2][2][2]) = delete; + + void h() { + g({{1,2},{3,4}}); + } +} diff --git a/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp b/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp index 0962253b98..4fd419dc74 100644 --- a/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp +++ b/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp @@ -191,3 +191,11 @@ namespace rdar11948732 { namespace PR14272 { auto x { { 0, 0 } }; // expected-error {{cannot deduce actual type for variable 'x' with type 'auto' from initializer list}} } + +namespace initlist_of_array { + void f(std::initializer_list<int[2]>) {} + void f(std::initializer_list<int[2][2]>) = delete; + void h() { + f({{1,2},{3,4}}); + } +} |