diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp index faafe307f03cfa..c6a392c9c01b51 100644 --- a/clang/lib/AST/DeclPrinter.cpp +++ b/clang/lib/AST/DeclPrinter.cpp @@ -895,12 +895,15 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) { Expr *Init = D->getInit(); if (!Policy.SuppressInitializers && Init) { bool ImplicitInit = false; - if (CXXConstructExpr *Construct = - dyn_cast(Init->IgnoreImplicit())) { + if (D->isCXXForRangeDecl()) { + // FIXME: We should print the range expression instead. + ImplicitInit = true; + } else if (CXXConstructExpr *Construct = + dyn_cast(Init->IgnoreImplicit())) { if (D->getInitStyle() == VarDecl::CallInit && !Construct->isListInitialization()) { ImplicitInit = Construct->getNumArgs() == 0 || - Construct->getArg(0)->isDefaultArgument(); + Construct->getArg(0)->isDefaultArgument(); } } if (!ImplicitInit) { diff --git a/clang/unittests/AST/DeclPrinterTest.cpp b/clang/unittests/AST/DeclPrinterTest.cpp index c2d7d78738f961..11dca6ed68167d 100644 --- a/clang/unittests/AST/DeclPrinterTest.cpp +++ b/clang/unittests/AST/DeclPrinterTest.cpp @@ -1426,4 +1426,7 @@ TEST(DeclPrinter, VarDeclWithInitializer) { ASSERT_TRUE(PrintedDeclCXX17Matches( "int a = 0x15;", namedDecl(hasName("a")).bind("id"), "int a = 0x15", [](PrintingPolicy &Policy) { Policy.ConstantsAsWritten = true; })); + ASSERT_TRUE( + PrintedDeclCXX17Matches("void foo() {int arr[42]; for(int a : arr);}", + namedDecl(hasName("a")).bind("id"), "int a")); }