Fix assertion failure with auto and nested initializer list; PR14272.
authorEli Friedman <eli.friedman@gmail.com>
Tue, 6 Nov 2012 23:56:42 +0000 (23:56 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 6 Nov 2012 23:56:42 +0000 (23:56 +0000)
llvm-svn: 167506

clang/lib/Sema/SemaTemplateDeduction.cpp
clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp

index 6b58087..98e22c0 100644 (file)
@@ -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())
index f11e19a..0962253 100644 (file)
@@ -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}}
+}