mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-02 01:38:34 +00:00
Fix a bug where we would corrupt the offset when evaluating
a non-constant GEP. I don't have any test case that demonstrates this, Nadav (indirectly) pointed this out in code review. I'm not sure how possible it is to contrive a test case for the current users of this code that triggers the bad issue sadly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189188 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b31eebd3fd
commit
c99a0d8586
@ -411,8 +411,10 @@ Value *Value::stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
|
||||
if (GEPOperator *GEP = dyn_cast<GEPOperator>(V)) {
|
||||
if (!GEP->isInBounds())
|
||||
return V;
|
||||
if (!GEP->accumulateConstantOffset(DL, Offset))
|
||||
APInt GEPOffset(Offset);
|
||||
if (!GEP->accumulateConstantOffset(DL, GEPOffset))
|
||||
return V;
|
||||
Offset = GEPOffset;
|
||||
V = GEP->getPointerOperand();
|
||||
} else if (Operator::getOpcode(V) == Instruction::BitCast) {
|
||||
V = cast<Operator>(V)->getOperand(0);
|
||||
|
Loading…
Reference in New Issue
Block a user