forked from OSchip/llvm-project
Expand the argument diagnostics for too many arguments and give
both number seen and number expected. Finishes fixing PR6501. llvm-svn: 101442
This commit is contained in:
parent
abf1e18e32
commit
2a5aafff30
|
@ -2366,7 +2366,11 @@ def err_typecheck_call_too_few_args_at_least : Error<
|
|||
"too few arguments to %select{function|block|method}0 call, "
|
||||
"expected at least %1, have %2">;
|
||||
def err_typecheck_call_too_many_args : Error<
|
||||
"too many arguments to %select{function|block|method}0 call">;
|
||||
"too many arguments to %select{function|block|method}0 call, "
|
||||
"expected %1, have %2">;
|
||||
def err_typecheck_call_too_many_args_at_most : Error<
|
||||
"too many arguments to %select{function|block|method}0 call, "
|
||||
"expected at most %1, have %2">;
|
||||
def warn_call_wrong_number_of_arguments : Warning<
|
||||
"too %select{few|many}0 arguments in call to %1">;
|
||||
def err_atomic_builtin_must_be_pointer : Error<
|
||||
|
|
|
@ -480,7 +480,8 @@ bool Sema::SemaBuiltinVAStart(CallExpr *TheCall) {
|
|||
if (TheCall->getNumArgs() > 2) {
|
||||
Diag(TheCall->getArg(2)->getLocStart(),
|
||||
diag::err_typecheck_call_too_many_args)
|
||||
<< 0 /*function call*/ << Fn->getSourceRange()
|
||||
<< 0 /*function call*/ << 2 << TheCall->getNumArgs()
|
||||
<< Fn->getSourceRange()
|
||||
<< SourceRange(TheCall->getArg(2)->getLocStart(),
|
||||
(*(TheCall->arg_end()-1))->getLocEnd());
|
||||
return true;
|
||||
|
@ -547,7 +548,7 @@ bool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {
|
|||
if (TheCall->getNumArgs() > 2)
|
||||
return Diag(TheCall->getArg(2)->getLocStart(),
|
||||
diag::err_typecheck_call_too_many_args)
|
||||
<< 0 /*function call*/
|
||||
<< 0 /*function call*/ << 2 << TheCall->getNumArgs()
|
||||
<< SourceRange(TheCall->getArg(2)->getLocStart(),
|
||||
(*(TheCall->arg_end()-1))->getLocEnd());
|
||||
|
||||
|
@ -589,7 +590,7 @@ bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {
|
|||
if (TheCall->getNumArgs() > NumArgs)
|
||||
return Diag(TheCall->getArg(NumArgs)->getLocStart(),
|
||||
diag::err_typecheck_call_too_many_args)
|
||||
<< 0 /*function call*/
|
||||
<< 0 /*function call*/ << NumArgs << TheCall->getNumArgs()
|
||||
<< SourceRange(TheCall->getArg(NumArgs)->getLocStart(),
|
||||
(*(TheCall->arg_end()-1))->getLocEnd());
|
||||
|
||||
|
@ -658,7 +659,9 @@ Action::OwningExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {
|
|||
<< TheCall->getSourceRange());
|
||||
return ExprError(Diag(TheCall->getLocEnd(),
|
||||
diag::err_typecheck_call_too_many_args)
|
||||
<< 0 /*function call*/ << TheCall->getSourceRange());
|
||||
<< 0 /*function call*/
|
||||
<< numElements+2 << TheCall->getNumArgs()
|
||||
<< TheCall->getSourceRange());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -699,8 +702,10 @@ bool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {
|
|||
unsigned NumArgs = TheCall->getNumArgs();
|
||||
|
||||
if (NumArgs > 3)
|
||||
return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_many_args)
|
||||
<< 0 /*function call*/ << TheCall->getSourceRange();
|
||||
return Diag(TheCall->getLocEnd(),
|
||||
diag::err_typecheck_call_too_many_args_at_most)
|
||||
<< 0 /*function call*/ << 3 << NumArgs
|
||||
<< TheCall->getSourceRange();
|
||||
|
||||
// Argument 0 is checked for us and the remaining arguments must be
|
||||
// constant integers.
|
||||
|
|
|
@ -3346,7 +3346,8 @@ Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn,
|
|||
if (!Proto->isVariadic()) {
|
||||
Diag(Args[NumArgsInProto]->getLocStart(),
|
||||
diag::err_typecheck_call_too_many_args)
|
||||
<< Fn->getType()->isBlockPointerType() << Fn->getSourceRange()
|
||||
<< Fn->getType()->isBlockPointerType()
|
||||
<< NumArgsInProto << NumArgs << Fn->getSourceRange()
|
||||
<< SourceRange(Args[NumArgsInProto]->getLocStart(),
|
||||
Args[NumArgs-1]->getLocEnd());
|
||||
// This deletes the extra arguments.
|
||||
|
|
|
@ -228,7 +228,8 @@ bool Sema::CheckMessageArgumentTypes(Expr **Args, unsigned NumArgs,
|
|||
if (NumArgs != NumNamedArgs) {
|
||||
Diag(Args[NumNamedArgs]->getLocStart(),
|
||||
diag::err_typecheck_call_too_many_args)
|
||||
<< 2 /*method*/ << Method->getSourceRange()
|
||||
<< 2 /*method*/ << NumNamedArgs << NumArgs
|
||||
<< Method->getSourceRange()
|
||||
<< SourceRange(Args[NumNamedArgs]->getLocStart(),
|
||||
Args[NumArgs-1]->getLocEnd());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue