diff options
Diffstat (limited to 'lib/AST/ExprCXX.cpp')
-rw-r--r-- | lib/AST/ExprCXX.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/lib/AST/ExprCXX.cpp b/lib/AST/ExprCXX.cpp index 7f39793c04..cba0e22095 100644 --- a/lib/AST/ExprCXX.cpp +++ b/lib/AST/ExprCXX.cpp @@ -392,26 +392,24 @@ CXXConstructExpr::CXXConstructExpr(ASTContext &C, StmtClass SC, QualType T, (T->isDependentType() || CallExpr::hasAnyValueDependentArguments(args, numargs))), Constructor(D), Elidable(elidable), Args(0), NumArgs(numargs) { - // leave room for default arguments; - const FunctionProtoType *FTy = - cast<FunctionDecl>(D)->getType()->getAsFunctionProtoType(); + if (NumArgs) { + Args = new (C) Stmt*[NumArgs]; - unsigned NumArgsInProto = FTy->getNumArgs(); - unsigned NumArgsToAllocate = FTy->isVariadic() ? NumArgs : NumArgsInProto; - if (NumArgsToAllocate) { - Args = new (C) Stmt*[NumArgsToAllocate]; - - for (unsigned i = 0; i != NumArgs; ++i) + for (unsigned i = 0; i != NumArgs; ++i) { + assert(args[i] && "NULL argument in CXXConstructExpr"); Args[i] = args[i]; - - // Set default arguments to 0. - for (unsigned i = NumArgs; i != NumArgsToAllocate; ++i) - Args[i] = 0; - - NumArgs = NumArgsToAllocate; + } } } +CXXConstructExpr::CXXConstructExpr(EmptyShell Empty, ASTContext &C, + unsigned numargs) + : Expr(CXXConstructExprClass, Empty), Args(0), NumArgs(numargs) +{ + if (NumArgs) + Args = new (C) Stmt*[NumArgs]; +} + void CXXConstructExpr::DoDestroy(ASTContext &C) { DestroyChildren(C); if (Args) |