Don't load values out of global constants with weak

linkage: the value may be replaced with something
different at link time.  (Frontends that want to
allow values to be loaded out of weak constants can
give their constants weak_odr linkage).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67407 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan Sands
2009-03-20 21:53:29 +00:00
parent db95fa131a
commit ab6b226978
5 changed files with 58 additions and 6 deletions

View File

@ -335,7 +335,8 @@ ConstantFoldMappedInstruction(const Instruction *I) {
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ops[0]))
if (!LI->isVolatile() && CE->getOpcode() == Instruction::GetElementPtr)
if (GlobalVariable *GV = dyn_cast<GlobalVariable>(CE->getOperand(0)))
if (GV->isConstant() && !GV->isDeclaration())
if (GV->isConstant() && !GV->isDeclaration() &&
!GV->mayBeOverridden())
return ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(),
CE);