Explicitly state the behavior of inbounds with a null pointer.

See https://llvm.org/bugs/show_bug.cgi?id=31439; this reflects LLVM's
behavior in practice, and should be compatible with C/C++ rules.

Differential Revision: https://reviews.llvm.org/D28026

llvm-svn: 295916
This commit is contained in:
Eli Friedman 2017-02-23 00:48:18 +00:00
parent 3b7c7e1d64
commit 13f2e35311
1 changed files with 4 additions and 2 deletions

View File

@ -7734,8 +7734,10 @@ offsets implied by the indices to the base address with infinitely
precise signed arithmetic are not an *in bounds* address of that precise signed arithmetic are not an *in bounds* address of that
allocated object. The *in bounds* addresses for an allocated object are allocated object. The *in bounds* addresses for an allocated object are
all the addresses that point into the object, plus the address one byte all the addresses that point into the object, plus the address one byte
past the end. In cases where the base is a vector of pointers the past the end. The only *in bounds* address for a null pointer in the
``inbounds`` keyword applies to each of the computations element-wise. default address-space is the null pointer itself. In cases where the
base is a vector of pointers the ``inbounds`` keyword applies to each
of the computations element-wise.
If the ``inbounds`` keyword is not present, the offsets are added to the If the ``inbounds`` keyword is not present, the offsets are added to the
base address with silently-wrapping two's complement arithmetic. If the base address with silently-wrapping two's complement arithmetic. If the