]> granicus.if.org Git - clang/commitdiff
Decl printer: fix CXXConstructExpr with implicit default argument
authorDmitri Gribenko <gribozavr@gmail.com>
Sun, 27 Jan 2013 21:28:24 +0000 (21:28 +0000)
committerDmitri Gribenko <gribozavr@gmail.com>
Sun, 27 Jan 2013 21:28:24 +0000 (21:28 +0000)
Patch by Will Wilson.

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

lib/AST/DeclPrinter.cpp
test/SemaCXX/ast-print.cpp

index b4005221f47fbab72683f7d373410db1a77aaee5..6057f601362029394d9816c12fb0ad5c94bd0d55 100644 (file)
@@ -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 << "(";
index d41c347620f80ce4d4892afc91fc0953d8f79381..9ce1f8d5af8005174e013564818c028ad95eb4b9 100644 (file)
@@ -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;
+}
+