]> granicus.if.org Git - clang/commitdiff
Don't crash when printing auto variables.
authorVassil Vassilev <v.g.vassilev@gmail.com>
Fri, 8 Jul 2016 16:04:22 +0000 (16:04 +0000)
committerVassil Vassilev <v.g.vassilev@gmail.com>
Fri, 8 Jul 2016 16:04:22 +0000 (16:04 +0000)
Patch by Axel Naumann!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274859 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/DeclPrinter.cpp
test/SemaCXX/ast-print.cpp

index 6868ea2a6d7d8b521810f5ac583d4297dca23f3d..bfdb47b90d8b513dc6936c1b606f142becc0a668 100644 (file)
@@ -132,6 +132,8 @@ static QualType GetBaseType(QualType T) {
       BaseType = VTy->getElementType();
     else if (const ReferenceType *RTy = BaseType->getAs<ReferenceType>())
       BaseType = RTy->getPointeeType();
+    else if (const AutoType *ATy = BaseType->getAs<AutoType>())
+      BaseType = ATy->getDeducedType();
     else
       llvm_unreachable("Unknown declarator!");
   }
index 39a52ab8d7e88adeab3d3175287e9250ca22a80a..733931803b435f26792899ff303f4a0736cadc21 100644 (file)
@@ -227,3 +227,12 @@ template <typename T> struct Foo : T {
   using T::operator-;
 };
 }
+
+namespace dont_crash {
+struct T { enum E {X = 12ll }; };
+struct S {
+  struct  { int I; } ADecl;
+  static const auto Y = T::X;
+};
+//CHECK: static const auto Y = T::X;
+}