diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index 2ad8f917e117..f28aa2f6492f 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -1167,6 +1167,8 @@ void CodeGenFunction::EmitFunctionProlog(const CGFunctionInfo &FI, ++AI; } + assert(FI.arg_size() == Args.size() && + "Mismatch between function signature & arguments."); CGFunctionInfo::const_arg_iterator info_it = FI.arg_begin(); for (FunctionArgList::const_iterator i = Args.begin(), e = Args.end(); i != e; ++i, ++info_it) { @@ -1316,6 +1318,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, assert(0 && "Invalid ABI kind for return argument"); } + assert(CallInfo.arg_size() == CallArgs.size() && + "Mismatch between function signature & arguments."); CGFunctionInfo::const_arg_iterator info_it = CallInfo.arg_begin(); for (CallArgList::const_iterator I = CallArgs.begin(), E = CallArgs.end(); I != E; ++I, ++info_it) { diff --git a/clang/lib/CodeGen/CGCall.h b/clang/lib/CodeGen/CGCall.h index 95e561d6f9ad..562dfa911329 100644 --- a/clang/lib/CodeGen/CGCall.h +++ b/clang/lib/CodeGen/CGCall.h @@ -76,6 +76,8 @@ namespace CodeGen { arg_iterator arg_begin() { return Args + 1; } arg_iterator arg_end() { return Args + 1 + NumArgs; } + unsigned arg_size() const { return NumArgs; } + QualType getReturnType() const { return Args[0].type; } ABIArgInfo &getReturnInfo() { return Args[0].info; }