From 1002373946a7c8452cd1a75b4f67515b49b43e3f Mon Sep 17 00:00:00 2001 From: Vassil Vassilev Date: Fri, 8 Jul 2016 21:09:08 +0000 Subject: [PATCH] Teach -ast-print to print constexpr variables. Patch reviewed by Richard Smith (D22168). llvm-svn: 274930 --- clang/lib/AST/DeclPrinter.cpp | 13 ++++++++++--- clang/test/SemaCXX/ast-print.cpp | 4 +++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp index bfdb47b..7e78699 100644 --- a/clang/lib/AST/DeclPrinter.cpp +++ b/clang/lib/AST/DeclPrinter.cpp @@ -715,6 +715,11 @@ void DeclPrinter::VisitLabelDecl(LabelDecl *D) { void DeclPrinter::VisitVarDecl(VarDecl *D) { prettyPrintPragmas(D); + + QualType T = D->getTypeSourceInfo() + ? D->getTypeSourceInfo()->getType() + : D->getASTContext().getUnqualifiedObjCPointerType(D->getType()); + if (!Policy.SuppressSpecifiers) { StorageClass SC = D->getStorageClass(); if (SC != SC_None) @@ -736,11 +741,13 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) { if (D->isModulePrivate()) Out << "__module_private__ "; + + if (D->isConstexpr()) { + Out << "constexpr "; + T.removeLocalConst(); + } } - QualType T = D->getTypeSourceInfo() - ? D->getTypeSourceInfo()->getType() - : D->getASTContext().getUnqualifiedObjCPointerType(D->getType()); printDeclType(T, D->getName()); Expr *Init = D->getInit(); if (!Policy.SuppressInitializers && Init) { diff --git a/clang/test/SemaCXX/ast-print.cpp b/clang/test/SemaCXX/ast-print.cpp index 7339318..408af35 100644 --- a/clang/test/SemaCXX/ast-print.cpp +++ b/clang/test/SemaCXX/ast-print.cpp @@ -228,11 +228,13 @@ template struct Foo : T { }; } -namespace dont_crash { +namespace dont_crash_on_auto_vars { 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; +constexpr auto var = T::X; +//CHECK: constexpr auto var = T::X; } -- 2.7.4