summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2014-02-03 18:54:51 +0000
committerReid Kleckner <reid@kleckner.net>2014-02-03 18:54:51 +0000
commitb78257d0c10f1fe331744574eabc1e8987652b7f (patch)
tree98f3a2b17e4185b01d41bffd9c4f0616ed201643 /clang/lib/CodeGen/CodeGenModule.cpp
parent7a712cea7126b5b815051569fd5b4577530b7f64 (diff)
downloadbcm5719-llvm-b78257d0c10f1fe331744574eabc1e8987652b7f.tar.gz
bcm5719-llvm-b78257d0c10f1fe331744574eabc1e8987652b7f.zip
[ms-cxxabi] Fix cast when structor replacement is an alias
llvm-svn: 200711
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 2ee232284fd..c73e931c9d9 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -187,10 +187,14 @@ void CodeGenModule::applyReplacements() {
llvm::Function *OldF = cast<llvm::Function>(Entry);
llvm::Function *NewF = dyn_cast<llvm::Function>(Replacement);
if (!NewF) {
- llvm::ConstantExpr *CE = cast<llvm::ConstantExpr>(Replacement);
- assert(CE->getOpcode() == llvm::Instruction::BitCast ||
- CE->getOpcode() == llvm::Instruction::GetElementPtr);
- NewF = dyn_cast<llvm::Function>(CE->getOperand(0));
+ if (llvm::GlobalAlias *Alias = dyn_cast<llvm::GlobalAlias>(Replacement)) {
+ NewF = dyn_cast<llvm::Function>(Alias->getAliasedGlobal());
+ } else {
+ llvm::ConstantExpr *CE = cast<llvm::ConstantExpr>(Replacement);
+ assert(CE->getOpcode() == llvm::Instruction::BitCast ||
+ CE->getOpcode() == llvm::Instruction::GetElementPtr);
+ NewF = dyn_cast<llvm::Function>(CE->getOperand(0));
+ }
}
// Replace old with new, but keep the old order.
OpenPOWER on IntegriCloud