diff options
author | Anders Carlsson <andersca@mac.com> | 2009-09-08 01:23:37 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-09-08 01:23:37 +0000 |
commit | 6d5de59d09a9df73444fcb5a5ca51be4ca2301da (patch) | |
tree | bfdc9a0f8e05d07249abfee8039d49b5e4800816 /clang/lib | |
parent | 4ad0b4c544a59a12e6d3a7bc8ab7780c2904ccaa (diff) | |
download | bcm5719-llvm-6d5de59d09a9df73444fcb5a5ca51be4ca2301da.tar.gz bcm5719-llvm-6d5de59d09a9df73444fcb5a5ca51be4ca2301da.zip |
Clean up the CXXConstructExpr constructor, add Arg getters.
llvm-svn: 81178
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
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<FunctionDecl>(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<FunctionDecl>(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; } } |