aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/CppBackend/CallHandlers.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/Target/CppBackend/CallHandlers.h b/lib/Target/CppBackend/CallHandlers.h
index a5ed6e1ff0..0b16f5b653 100644
--- a/lib/Target/CppBackend/CallHandlers.h
+++ b/lib/Target/CppBackend/CallHandlers.h
@@ -71,10 +71,14 @@ void setupCallHandlers() {
}
std::string handleCall(const CallInst *CI) {
- std::string Name = getCppName(CI->getCalledValue());
+ const Value *CV = CI->getCalledValue();
+ std::string Name = getCppName(CV);
unsigned NumArgs = CI->getNumArgOperands();
- CallHandlerMap::iterator CH = CallHandlers->find(Name);
- if (CH == CallHandlers->end()) CH = CallHandlers->find("___default__");
+ CallHandlerMap::iterator CH = CallHandlers->find("___default__");
+ if (isa<Function>(CV)) {
+ CallHandlerMap::iterator Custom = CallHandlers->find(Name);
+ if (Custom != CallHandlers->end()) CH = Custom;
+ }
return (this->*(CH->second))(CI, Name, NumArgs);
}