diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-12-03 19:47:06 -0500 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-12-03 19:47:06 -0500 |
commit | d6f9c26b7ab0ac8e6252d0214ecbc07e9c6c57ac (patch) | |
tree | c317d59b10e997633494157ba162307f3491f15d | |
parent | 250b2388a583b81841f62d459f85b6b75f69512f (diff) |
don't look for custom call handlers if not calling a function but a pointer
-rw-r--r-- | lib/Target/CppBackend/CallHandlers.h | 10 |
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); } |