From: Richard Henderson Date: Sat, 11 Aug 2001 00:53:45 +0000 (-0700) Subject: extend.texi (Arrays and pointers implementation): Document behavior of pointer/intege... X-Git-Tag: prereleases/libstdc++-3.0.95~2743 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cbf4c36fa373f5c5c3d920098fe28b024a86a3ed;p=thirdparty%2Fgcc.git extend.texi (Arrays and pointers implementation): Document behavior of pointer/integer conversion. * doc/extend.texi (Arrays and pointers implementation): Document behavior of pointer/integer conversion. From-SVN: r44784 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fdf34944c394..9d9bbe1d4956 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-08-10 Richard Henderson + + * doc/extend.texi (Arrays and pointers implementation): Document + behavior of pointer/integer conversion. + 2001-08-10 Ulrich Weigand * glimits.h (__LONG_MAX__): Add s390x as 64-bit architecture. diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index cc2fda79d9f3..12b9e71bd5f8 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -201,6 +201,26 @@ IEC 60559 conformant implementation (F.9).} @cite{The result of converting a pointer to an integer or vice versa (6.3.2.3).} +A cast from pointer to integer discards most-significant bits if the +pointer representation is larger than the integer type, sign-extends +if the pointer representation is smaller than the integer type, otherwise +the bits are unchanged. +@c ??? We've always claimed that pointers were unsigned entities. +@c Shouldn't we therefore be doing zero-extension? If so, the bug +@c is in convert_to_integer, where we call type_for_size and request +@c a signed integral type. On the other hand, it might be most useful +@c for the target if we extend according to POINTERS_EXTEND_UNSIGNED. + +A cast from integer to pointer discards most-significant bits if the +pointer representation is smaller than the integer type, extends according +to the signedness of the integer type if the pointer representation +is larger than the integer type, otherwise the bits are unchanged. + +When casting from pointer to integer and back again, the resulting +pointer must reference the same object as the original pointer, otherwise +the behavior is undefined. That is, one may not use integer arithmetic to +avoid the undefined behavior of pointer arithmetic as proscribed in 6.5.6/8. + @item @cite{The size of the result of subtracting two pointers to elements of the same array (6.5.6).}