diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-11-06 23:56:42 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-11-06 23:56:42 +0000 |
commit | e43109557c255b4178fdb007d385dbfd65c166c9 (patch) | |
tree | 78039672f87a5bf76616094bda16c9822ae2ffbc /clang | |
parent | 7d6ee3e1b498533f21ce6237f1f3d5e0c223a832 (diff) | |
download | bcm5719-llvm-e43109557c255b4178fdb007d385dbfd65c166c9.tar.gz bcm5719-llvm-e43109557c255b4178fdb007d385dbfd65c166c9.zip |
Fix assertion failure with auto and nested initializer list; PR14272.
llvm-svn: 167506
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Sema/SemaTemplateDeduction.cpp | 5 | ||||
-rw-r--r-- | clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateDeduction.cpp b/clang/lib/Sema/SemaTemplateDeduction.cpp index 6b580878190..98e22c0b65e 100644 --- a/clang/lib/Sema/SemaTemplateDeduction.cpp +++ b/clang/lib/Sema/SemaTemplateDeduction.cpp @@ -3649,10 +3649,11 @@ Sema::DeduceAutoType(TypeSourceInfo *Type, Expr *&Init, return DAR_Failed; } - QualType DeducedType = Deduced[0].getAsType(); - if (DeducedType.isNull()) + if (Deduced[0].getKind() != TemplateArgument::Type) return DAR_Failed; + QualType DeducedType = Deduced[0].getAsType(); + if (InitList) { DeducedType = BuildStdInitializerList(DeducedType, Loc); if (DeducedType.isNull()) diff --git a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp index f11e19ae6f2..0962253b988 100644 --- a/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp +++ b/clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp @@ -187,3 +187,7 @@ namespace rdar11948732 { XCtorInit xc = { xi, xi }; } } + +namespace PR14272 { + auto x { { 0, 0 } }; // expected-error {{cannot deduce actual type for variable 'x' with type 'auto' from initializer list}} +} |