From 6d5de59d09a9df73444fcb5a5ca51be4ca2301da Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Tue, 8 Sep 2009 01:23:37 +0000 Subject: Clean up the CXXConstructExpr constructor, add Arg getters. llvm-svn: 81178 --- clang/lib/AST/ExprCXX.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'clang/lib/AST/ExprCXX.cpp') diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index c532b8c590c..86c522795e7 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -396,15 +396,22 @@ CXXConstructExpr::CXXConstructExpr(ASTContext &C, StmtClass SC, QualType T, CallExpr::hasAnyValueDependentArguments(args, numargs))), Constructor(D), Elidable(elidable), Args(0), NumArgs(numargs) { // leave room for default arguments; - FunctionDecl *FDecl = cast(D); - unsigned NumArgsInProto = FDecl->param_size(); - NumArgs += (NumArgsInProto - numargs); - if (NumArgs > 0) { - Args = new (C) Stmt*[NumArgs]; - for (unsigned i = 0; i < numargs; ++i) + const FunctionProtoType *FTy = + cast(D)->getType()->getAsFunctionProtoType(); + + unsigned NumArgsInProto = FTy->getNumArgs(); + unsigned NumArgsToAllocate = FTy->isVariadic() ? NumArgs : NumArgsInProto; + if (NumArgsToAllocate) { + Args = new (C) Stmt*[NumArgsToAllocate]; + + for (unsigned i = 0; i != NumArgs; ++i) Args[i] = args[i]; - for (unsigned i = numargs; i < NumArgs; ++i) + + // Set default arguments to 0. + for (unsigned i = NumArgs; i != NumArgsToAllocate; ++i) Args[i] = 0; + + NumArgs = NumArgsToAllocate; } } -- cgit v1.2.3