From b78257d0c10f1fe331744574eabc1e8987652b7f Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Mon, 3 Feb 2014 18:54:51 +0000 Subject: [ms-cxxabi] Fix cast when structor replacement is an alias llvm-svn: 200711 --- clang/lib/CodeGen/CodeGenModule.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') 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(Entry); llvm::Function *NewF = dyn_cast(Replacement); if (!NewF) { - llvm::ConstantExpr *CE = cast(Replacement); - assert(CE->getOpcode() == llvm::Instruction::BitCast || - CE->getOpcode() == llvm::Instruction::GetElementPtr); - NewF = dyn_cast(CE->getOperand(0)); + if (llvm::GlobalAlias *Alias = dyn_cast(Replacement)) { + NewF = dyn_cast(Alias->getAliasedGlobal()); + } else { + llvm::ConstantExpr *CE = cast(Replacement); + assert(CE->getOpcode() == llvm::Instruction::BitCast || + CE->getOpcode() == llvm::Instruction::GetElementPtr); + NewF = dyn_cast(CE->getOperand(0)); + } } // Replace old with new, but keep the old order. -- cgit v1.2.3