[llvm-bugs] [Bug 33878] New: BasicAA incorrectly assumes different address spaces don't alias

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Jul 21 08:22:06 PDT 2017


https://bugs.llvm.org/show_bug.cgi?id=33878

            Bug ID: 33878
           Summary: BasicAA incorrectly assumes different address spaces
                    don't alias
           Product: libraries
           Version: trunk
          Hardware: All
                OS: All
            Status: NEW
          Keywords: miscompilation
          Severity: normal
          Priority: P
         Component: Global Analyses
          Assignee: unassignedbugs at nondot.org
          Reporter: nunoplopes at sapo.pt
                CC: davide at freebsd.org, dberlin at dberlin.org,
                    gil.hur at sf.snu.ac.kr, hfinkel at anl.gov,
                    jeehoon.kang at sf.snu.ac.kr, juneyoung.lee at sf.snu.ac.kr,
                    llvm-bugs at lists.llvm.org, regehr at cs.utah.edu,
                    sanjoy at playingwithpointers.com

BasicAA assumes that pointers of different address spaces can't alias.  This is
not true is general, though.

in function BasicAAResult::aliasCheck():

  if (O1 != O2) {
    // Most objects can't alias null.
    if ((isa<ConstantPointerNull>(O2) && isKnownNonNull(O1)) ||
        (isa<ConstantPointerNull>(O1) && isKnownNonNull(O2)))
      return NoAlias;


There are two bugs here:
 - if O1 is null, and O2 is non-null, but they are in different address spaces,
then nothing can be concluded (unless we add target-specific hooks to tell us
that information).

 - isKnownNonNull assumes alloca produces a non-null result, which is not true
in general for address space != 0:

  bool llvm::isKnownNonNull(const Value *V) {
    assert(V->getType()->isPointerTy() && "V must be pointer type");

    // Alloca never returns null, malloc might.
    if (isa<AllocaInst>(V)) return true;
    (...)
  }

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170721/07c15bf2/attachment.html>


More information about the llvm-bugs mailing list