From: Dmitri Gribenko Date: Sun, 27 Jan 2013 21:28:24 +0000 (+0000) Subject: Decl printer: fix CXXConstructExpr with implicit default argument X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5250e2b24f7288fb31dc6357831fcbc4ced26693;p=clang Decl printer: fix CXXConstructExpr with implicit default argument Patch by Will Wilson. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173630 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/DeclPrinter.cpp b/lib/AST/DeclPrinter.cpp index b4005221f4..6057f60136 100644 --- a/lib/AST/DeclPrinter.cpp +++ b/lib/AST/DeclPrinter.cpp @@ -646,9 +646,13 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) { Expr *Init = D->getInit(); if (!Policy.SuppressInitializers && Init) { bool ImplicitInit = false; - if (CXXConstructExpr *Construct = dyn_cast(Init)) - ImplicitInit = D->getInitStyle() == VarDecl::CallInit && - Construct->getNumArgs() == 0 && !Construct->isListInitialization(); + if (CXXConstructExpr *Construct = dyn_cast(Init)) { + if (D->getInitStyle() == VarDecl::CallInit && + !Construct->isListInitialization()) { + ImplicitInit = Construct->getNumArgs() == 0 || + Construct->getArg(0)->isDefaultArgument(); + } + } if (!ImplicitInit) { if ((D->getInitStyle() == VarDecl::CallInit) && !isa(Init)) Out << "("; diff --git a/test/SemaCXX/ast-print.cpp b/test/SemaCXX/ast-print.cpp index d41c347620..9ce1f8d5af 100644 --- a/test/SemaCXX/ast-print.cpp +++ b/test/SemaCXX/ast-print.cpp @@ -99,3 +99,24 @@ int test11() { return test10::M::X::value; } + +struct DefaultArgClass +{ + DefaultArgClass(int a = 1) {} +}; + +struct NoArgClass +{ + NoArgClass() {} +}; + +// CHECK: test12 +// CHECK-NEXT: DefaultArgClass useDefaultArg; +// CHECK-NEXT: DefaultArgClass overrideDefaultArg(1); +// CHECK-NEXT: NoArgClass noArg; +void test12() { + DefaultArgClass useDefaultArg; + DefaultArgClass overrideDefaultArg(1); + NoArgClass noArg; +} +