aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-12-03 19:47:06 -0500
committerAlon Zakai <alonzakai@gmail.com>2013-12-03 19:47:06 -0500
commitd6f9c26b7ab0ac8e6252d0214ecbc07e9c6c57ac (patch)
treec317d59b10e997633494157ba162307f3491f15d
parent250b2388a583b81841f62d459f85b6b75f69512f (diff)
don't look for custom call handlers if not calling a function but a pointer
-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);
}