[PATCH] D38499: [BasicAA] Fix adjustToPointerSize in BasicAliasAnalysis.cpp for ptr > 64b

Hal Finkel via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 3 13:34:11 PDT 2017


hfinkel added a comment.

In https://reviews.llvm.org/D38499#887306, @efriedma wrote:

> Hang on, there's a more fundamental problem here this is papering over.  If your pointers are larger than 64 bits, those pointers can have offsets larger than 64 bits.  Since BasicAA is using 64-bit integers to represent pointer offsets, the math in DecomposeGEPExpression will overflow, so you'll get incorrect results, and eventually cause a miscompile.


Indeed; I made a similar comment in https://reviews.llvm.org/D38501. In this case, it looks like the main potential overflow comes from:

  Index = GetLinearExpression(Index, IndexScale, IndexOffset, ZExtBits,
                              SExtBits, DL, 0, AC, DT, NSW, NUW);
  
  // The GEP index scale ("Scale") scales C1*V+C2, yielding (C1*V+C2)*Scale.
  // This gives us an aggregate computation of (C1*Scale)*V + C2*Scale.
  Decomposed.OtherOffset += IndexOffset.getSExtValue() * Scale;
  Scale *= IndexScale.getSExtValue();

where Scale is multiplied by `IndexScale.getSExtValue();`. We might just bail out here if IndexScale, or IndexOffset, can't be represented in 64 bits.


https://reviews.llvm.org/D38499





More information about the llvm-commits mailing list