diff options
| author | Sean Callanan <scallanan@apple.com> | 2010-09-08 20:04:08 +0000 |
|---|---|---|
| committer | Sean Callanan <scallanan@apple.com> | 2010-09-08 20:04:08 +0000 |
| commit | afa4237d9bb155e5b28b5626d2e07757895b0153 (patch) | |
| tree | 6f5eab264edca777d1321e17bfd17ab8628fcc20 /lldb/source/Expression/IRForTarget.cpp | |
| parent | 22658bc0b7bdf89023bb7e7f0127e7b22aff7ec8 (diff) | |
| download | bcm5719-llvm-afa4237d9bb155e5b28b5626d2e07757895b0153.tar.gz bcm5719-llvm-afa4237d9bb155e5b28b5626d2e07757895b0153.zip | |
Fixed an expression parser bug that prevented
certain functions from being resolved correctly.
Some functions (particularly varargs functions)
are BitCast before being called, and the problem
was that a CallInst where getCalledValue()
returned a BitCast ConstantExpr was not being
relocated at all.
This problem should now be resolved for the case
of BitCast.
llvm-svn: 113396
Diffstat (limited to 'lldb/source/Expression/IRForTarget.cpp')
| -rw-r--r-- | lldb/source/Expression/IRForTarget.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/lldb/source/Expression/IRForTarget.cpp b/lldb/source/Expression/IRForTarget.cpp index 345ae349633..e220b16f00c 100644 --- a/lldb/source/Expression/IRForTarget.cpp +++ b/lldb/source/Expression/IRForTarget.cpp @@ -579,7 +579,23 @@ IRForTarget::MaybeHandleCall(Module &M, Function *fun = C->getCalledFunction(); if (fun == NULL) - return true; + { + Value *val = C->getCalledValue(); + + ConstantExpr *const_expr = dyn_cast<ConstantExpr>(val); + + if (const_expr && const_expr->getOpcode() == Instruction::BitCast) + { + fun = dyn_cast<Function>(const_expr->getOperand(0)); + + if (!fun) + return true; + } + else + { + return true; + } + } clang::NamedDecl *fun_decl = DeclForGlobalValue(M, fun); uint64_t fun_addr; |

