summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExpr.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-04-10 02:22:51 +0000
committerChris Lattner <sabre@nondot.org>2008-04-10 02:22:51 +0000
commit58258246ec920a7c83f8c2fd8b46646f8336f68b (patch)
tree6e95a9d718f3a3c3477da857719d496224eca851 /clang/lib/Sema/SemaExpr.cpp
parenta29d2536aa5c35d8920518fa3c3401aedc310909 (diff)
downloadbcm5719-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.cpp10
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());
OpenPOWER on IntegriCloud