diff options
| author | Chris Lattner <sabre@nondot.org> | 2008-04-10 02:22:51 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2008-04-10 02:22:51 +0000 |
| commit | 58258246ec920a7c83f8c2fd8b46646f8336f68b (patch) | |
| tree | 6e95a9d718f3a3c3477da857719d496224eca851 /clang/lib/Sema/SemaExpr.cpp | |
| parent | a29d2536aa5c35d8920518fa3c3401aedc310909 (diff) | |
| download | bcm5719-llvm-58258246ec920a7c83f8c2fd8b46646f8336f68b.tar.gz bcm5719-llvm-58258246ec920a7c83f8c2fd8b46646f8336f68b.zip | |
Several improvements from Doug Gregor related to default
argument handling. I'll fix up the c89 (void) thing next.
llvm-svn: 49459
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 6a6cd25575a..fa3a1883328 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -596,7 +596,6 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc, Expr **Args = reinterpret_cast<Expr**>(args); assert(Fn && "no function call expression"); FunctionDecl *FDecl = NULL; - unsigned NumArgsPassed = NumArgs; // Promote the function operand. UsualUnaryConversions(Fn); @@ -609,9 +608,7 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc, // Make the call expr early, before semantic checks. This guarantees cleanup // of arguments and function on error. - if (getLangOptions().CPlusPlus && FDecl && NumArgs < FDecl->getNumParams()) - NumArgsPassed = FDecl->getNumParams(); - llvm::OwningPtr<CallExpr> TheCall(new CallExpr(Fn, Args, NumArgsPassed, + llvm::OwningPtr<CallExpr> TheCall(new CallExpr(Fn, Args, NumArgs, Context.BoolTy, RParenLoc)); // C99 6.5.2.2p1 - "The expression that denotes the called function shall have @@ -637,11 +634,10 @@ ActOnCallExpr(ExprTy *fn, SourceLocation LParenLoc, // If too few arguments are available (and we don't have default // arguments for the remaining parameters), don't make the call. if (NumArgs < NumArgsInProto) { - if (getLangOptions().CPlusPlus && - FDecl && - FDecl->getParamDecl(NumArgs)->getDefaultArg()) { + if (FDecl && NumArgs >= FDecl->getMinRequiredArguments()) { // Use default arguments for missing arguments NumArgsToCheck = NumArgsInProto; + TheCall->setNumArgs(NumArgsInProto); } else return Diag(RParenLoc, diag::err_typecheck_call_too_few_args, Fn->getSourceRange()); |

