]> granicus.if.org Git - clang/commitdiff
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)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167506 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 6b5808781901f78a4a7ecd70746a8594023623e4..98e22c0b65e0b36ac49fedcf6cd18eed43744936 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 f11e19ae6f2c4b6eee32cc60570f4f858ea2a4cb..0962253b988ccf0ee098042ea4fec845a36992a8 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}}
+}