[LLVMdev] [cfe-dev] LTO "bug" and Clang warnings

Krzysztof Parzyszek kparzysz at codeaurora.org
Tue Jan 8 11:38:54 PST 2013


On 1/8/2013 1:11 PM, Renato Golin wrote:
  >
> Still, doesn't explicitly say it's undefined. I agree this gives the
> freedom of implementers to extend naturally, but it's at least arguable.
> I have the 2011 draft and couldn't find anything, nor in the current
> open issues.

It does, actually:

C++ 2003 [5.7.5]

When an expression that has integral type is added to or subtracted from 
a pointer, the result has the type of the pointer operand. If the 
pointer operand points to an element of an array object, and the array 
is large enough, the result points to an element offset from the 
original element such that the difference of the subscripts of the 
resulting and original array elements equals the integral expression. In 
other words, if the expression P points to the i-th element of an array 
object, the expressions (P)+N (equivalently, N+(P)) and (P)-N (where N 
has the value n) point to, respectively, the i+n-th and i–n-th elements 
of the array object, provided they exist. Moreover, if the expression P 
points to the last element of an array object, the expression (P)+1 
points one past the last element of the array object, and if the 
expression Q points one past the last element of an array object, the 
expression (Q)-1 points to the last element of the array object. If both 
the pointer operand and the result point to elements of the same array 
object, or one past the last element of the array object, the evaluation 
shall not produce an overflow; otherwise, the behavior is undefined.

-Krzysztof


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, 
hosted by The Linux Foundation



More information about the llvm-dev mailing list