aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-02-04 21:17:21 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-02-04 21:17:21 +0000
commit4b5f0a4bd6645e87e5feae4be4675ce87d97b4a5 (patch)
tree11a4c9d807c568e114691cf1a9192076bae0e6a1
parent42c9ffd02ef3691f04c63c4869d1f0530d7e88ff (diff)
Add asserts that the function signature matches the other arguments provide
to CGCall functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63775 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/CGCall.cpp4
-rw-r--r--lib/CodeGen/CGCall.h2
2 files changed, 6 insertions, 0 deletions
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp
index 2ad8f917e1..f28aa2f649 100644
--- a/lib/CodeGen/CGCall.cpp
+++ b/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/lib/CodeGen/CGCall.h b/lib/CodeGen/CGCall.h
index 95e561d6f9..562dfa9113 100644
--- a/lib/CodeGen/CGCall.h
+++ b/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; }