]> granicus.if.org Git - clang/commitdiff
Handle VarTemplateDecl in DeclContextPrinter
authorAlex Lorenz <arphaman@gmail.com>
Tue, 3 Jan 2017 12:14:59 +0000 (12:14 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Tue, 3 Jan 2017 12:14:59 +0000 (12:14 +0000)
This commit fixes a crash that occurs when -print-decl-contexts AST consumer
tries to print an unhandled declaration.

rdar://19467234

Differential Revision: https://reviews.llvm.org/D26964

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

lib/Frontend/ASTConsumers.cpp
test/Coverage/ast-printing.cpp
test/Coverage/cxx-language-features.inc

index c45b539a5698a012e7c71aa5b57a56b69ae157c6..7ae377a48938e8cf91aa2d6d7398739b013b2178 100644 (file)
@@ -522,6 +522,10 @@ void DeclContextPrinter::PrintDeclContext(const DeclContext* DC,
       Out << "<access specifier>\n";
       break;
     }
+    case Decl::VarTemplate: {
+      Out << "<var template> " << *cast<VarTemplateDecl>(I) << "\n";
+      break;
+    }
     default:
       Out << "DeclKind: " << DK << '"' << I << "\"\n";
       llvm_unreachable("decl unhandled");
index 5cff09defcff4ad35f3788d85b9cc191543155c8..e03c5173533598b76f9e73a3e476d27a2c755718 100644 (file)
@@ -1,9 +1,9 @@
-// RUN: %clang_cc1 -fsyntax-only %s
-// RUN: %clang_cc1 -ast-print %s -o %t.1.cpp
-// RUN: %clang_cc1 -ast-print %t.1.cpp -o %t.2.cpp
+// RUN: %clang_cc1 -std=c++14 -fsyntax-only %s
+// RUN: %clang_cc1 -std=c++14 -ast-print %s -o %t.1.cpp
+// RUN: %clang_cc1 -std=c++14 -ast-print %t.1.cpp -o %t.2.cpp
 // RUN: diff %t.1.cpp %t.2.cpp
-// RUN: %clang_cc1 -ast-dump %s
-// RUN: %clang_cc1 -print-decl-contexts %s
-// RUN: %clang_cc1 -fdump-record-layouts %s
+// RUN: %clang_cc1 -std=c++14 -ast-dump %s
+// RUN: %clang_cc1 -std=c++14 -print-decl-contexts %s
+// RUN: %clang_cc1 -std=c++14 -fdump-record-layouts %s
 
 #include "cxx-language-features.inc"
index be99eece7978e4921b707f36e228224da8ed1217..17a44760674aa16f2a7051b618341986429b2fa8 100644 (file)
@@ -60,3 +60,6 @@ struct ClassTemplatePartialSpecialization<T, true> { };
 struct AccessSpec {
 private:
 };
+
+// Variable template
+template <typename T> T varTemplate = 0;