diff options
-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); } |