On 2010-08-31 21:51, Kostik Belousov wrote: > What is the undefined behaviour you are claiming there ?
Arithmetic on a NULL pointer, which is undefined. The C standard says in 6.5.6 (additive operators): 3. For subtraction, one of the following shall hold: — both operands have arithmetic type; — both operands are pointers to qualified or unqualified versions of compatible object types; or — the left operand is a pointer to an object type and the right operand has integer type. (Decrementing is equivalent to subtracting 1.) But NULL does not point to any specific object. A few paragraphs down it says: 9. When two pointers are subtracted, both shall point to elements of the same array object, or one past the last element of the array object; the result is the difference of the subscripts of the two array elements. NULL does not point to anything, so you cannot subtract NULL from a pointer, nor subtract a pointer from NULL (as is done here). Apparently gcc allows it, possibly as an extension? But clang does not, and will generate a 'unreachable' instruction for this expression. (I encountered this when I was trying to get boot2 compiled by clang small enough to fit in 7168 bytes.) _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"