diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2013-01-27 21:28:24 +0000 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2013-01-27 21:28:24 +0000 |
commit | 6835e37cec0efb84cdaa476a1447aa7a2bec6432 (patch) | |
tree | 432e2c2297fd3ec48914c49ec845958190131617 | |
parent | f2ecd409297626d672d55c2fdaebbfea8fc2d401 (diff) | |
download | bcm5719-llvm-6835e37cec0efb84cdaa476a1447aa7a2bec6432.tar.gz bcm5719-llvm-6835e37cec0efb84cdaa476a1447aa7a2bec6432.zip |
Decl printer: fix CXXConstructExpr with implicit default argument
Patch by Will Wilson.
llvm-svn: 173630
-rw-r--r-- | clang/lib/AST/DeclPrinter.cpp | 10 | ||||
-rw-r--r-- | clang/test/SemaCXX/ast-print.cpp | 21 |
2 files changed, 28 insertions, 3 deletions
diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp index b4005221f47..6057f601362 100644 --- a/clang/lib/AST/DeclPrinter.cpp +++ b/clang/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<CXXConstructExpr>(Init)) - ImplicitInit = D->getInitStyle() == VarDecl::CallInit && - Construct->getNumArgs() == 0 && !Construct->isListInitialization(); + if (CXXConstructExpr *Construct = dyn_cast<CXXConstructExpr>(Init)) { + if (D->getInitStyle() == VarDecl::CallInit && + !Construct->isListInitialization()) { + ImplicitInit = Construct->getNumArgs() == 0 || + Construct->getArg(0)->isDefaultArgument(); + } + } if (!ImplicitInit) { if ((D->getInitStyle() == VarDecl::CallInit) && !isa<ParenListExpr>(Init)) Out << "("; diff --git a/clang/test/SemaCXX/ast-print.cpp b/clang/test/SemaCXX/ast-print.cpp index d41c347620f..9ce1f8d5af8 100644 --- a/clang/test/SemaCXX/ast-print.cpp +++ b/clang/test/SemaCXX/ast-print.cpp @@ -99,3 +99,24 @@ int test11() { return test10::M::X<INT>::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; +} + |