forked from OSchip/llvm-project
DeclPrinter: fix CXXConstructExpr printing with implicit default argument
This is an improvement of r173630, that handles the following case: struct VirualDestrClass { VirualDestrClass(int arg); virtual ~VirualDestrClass(); }; struct ConstrWithCleanupsClass { ConstrWithCleanupsClass(const VirualDestrClass& cplx = VirualDestrClass(42)); }; ConstrWithCleanupsClass cwcNoArg; That was printed as: ConstrWithCleanupsClass cwcNoArg(); llvm-svn: 174296
This commit is contained in:
parent
4c4ffd7783
commit
b614fab39d
|
@ -649,7 +649,8 @@ void DeclPrinter::VisitVarDecl(VarDecl *D) {
|
|||
Expr *Init = D->getInit();
|
||||
if (!Policy.SuppressInitializers && Init) {
|
||||
bool ImplicitInit = false;
|
||||
if (CXXConstructExpr *Construct = dyn_cast<CXXConstructExpr>(Init)) {
|
||||
if (CXXConstructExpr *Construct =
|
||||
dyn_cast<CXXConstructExpr>(Init->IgnoreImplicit())) {
|
||||
if (D->getInitStyle() == VarDecl::CallInit &&
|
||||
!Construct->isListInitialization()) {
|
||||
ImplicitInit = Construct->getNumArgs() == 0 ||
|
||||
|
|
|
@ -110,13 +110,30 @@ struct NoArgClass
|
|||
NoArgClass() {}
|
||||
};
|
||||
|
||||
struct VirualDestrClass
|
||||
{
|
||||
VirualDestrClass(int arg);
|
||||
virtual ~VirualDestrClass();
|
||||
};
|
||||
|
||||
struct ConstrWithCleanupsClass
|
||||
{
|
||||
ConstrWithCleanupsClass(const VirualDestrClass& cplx = VirualDestrClass(42));
|
||||
};
|
||||
|
||||
// CHECK: test12
|
||||
// CHECK-NEXT: DefaultArgClass useDefaultArg;
|
||||
// CHECK-NEXT: DefaultArgClass overrideDefaultArg(1);
|
||||
// CHECK-NEXT: NoArgClass noArg;
|
||||
// CHECK-NEXT: ConstrWithCleanupsClass cwcNoArg;
|
||||
// CHECK-NEXT: ConstrWithCleanupsClass cwcOverrideArg(48);
|
||||
// CHECK-NEXT: ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));
|
||||
void test12() {
|
||||
DefaultArgClass useDefaultArg;
|
||||
DefaultArgClass overrideDefaultArg(1);
|
||||
NoArgClass noArg;
|
||||
ConstrWithCleanupsClass cwcNoArg;
|
||||
ConstrWithCleanupsClass cwcOverrideArg(48);
|
||||
ConstrWithCleanupsClass cwcExplicitArg(VirualDestrClass(56));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue