diff options
author | Florian Hahn <flo@fhahn.com> | 2025-09-02 10:51:31 +0100 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2025-09-02 10:51:32 +0100 |
commit | cf444ac2adc45c1079856087b8ba9a04466f78db (patch) | |
tree | 1df73e5151818039fbe9a6919c4aac2eff808d59 /llvm/lib/Analysis/Loads.cpp | |
parent | a6bd36eb71cf8ad281311f6ea1428a04e8783382 (diff) | |
download | llvm-cf444ac2adc45c1079856087b8ba9a04466f78db.zip llvm-cf444ac2adc45c1079856087b8ba9a04466f78db.tar.gz llvm-cf444ac2adc45c1079856087b8ba9a04466f78db.tar.bz2 |
[Loads] Check for overflow when adding MaxPtrDiff + Offset.
MaxPtrDiff + Offset may wrap, leading to incorrect results. Use uadd_ov
to check for overflow.
Diffstat (limited to 'llvm/lib/Analysis/Loads.cpp')
-rw-r--r-- | llvm/lib/Analysis/Loads.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/Loads.cpp b/llvm/lib/Analysis/Loads.cpp index 7a8fbbd..58f559a 100644 --- a/llvm/lib/Analysis/Loads.cpp +++ b/llvm/lib/Analysis/Loads.cpp @@ -386,7 +386,10 @@ bool llvm::isDereferenceableAndAlignedInLoop( if (Offset->getAPInt().urem(Alignment.value()) != 0) return false; - AccessSize = MaxPtrDiff + Offset->getAPInt(); + bool Overflow = false; + AccessSize = MaxPtrDiff.uadd_ov(Offset->getAPInt(), Overflow); + if (Overflow) + return false; AccessSizeSCEV = SE.getAddExpr(PtrDiff, Offset); Base = NewBase->getValue(); } else |