mirror of
https://github.com/JakeHillion/drgn.git
synced 2024-12-22 17:23:06 +00:00
libdrgn: document implementation-defined behavior in add_to_possibly_null_pointer()
Konrad Borowski pointed out that add_to_possibly_null_pointer() relies on GCC-specific behavior: https://fosstodon.org/@xfix/109542070338182493. CONTRIBUTING.rst mentions that we assume that casting between pointers and integers does not change the bit representation, but we might as well document it here, too. Signed-off-by: Omar Sandoval <osandov@osandov.com>
This commit is contained in:
parent
7b64aee4dd
commit
aa5f121ac9
@ -182,7 +182,10 @@ static inline uint64_t uint_max(int n)
|
|||||||
*
|
*
|
||||||
* A more natural definition would be `i == 0 ? ptr : ptr + i`, but some
|
* A more natural definition would be `i == 0 ? ptr : ptr + i`, but some
|
||||||
* versions of GCC and Clang generate an unnecessary branch or conditional move
|
* versions of GCC and Clang generate an unnecessary branch or conditional move
|
||||||
* (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97225).
|
* (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97225). Note that in standard
|
||||||
|
* C, it is undefined behavior to cast to `uintptr_t`, do arithmetic, and cast
|
||||||
|
* back, but GCC allows this as long as the result is within the same object:
|
||||||
|
* https://gcc.gnu.org/onlinedocs/gcc/Arrays-and-pointers-implementation.html.
|
||||||
*/
|
*/
|
||||||
#define add_to_possibly_null_pointer(ptr, i) \
|
#define add_to_possibly_null_pointer(ptr, i) \
|
||||||
((typeof(ptr))((uintptr_t)(ptr) + (i) * sizeof(*(ptr))))
|
((typeof(ptr))((uintptr_t)(ptr) + (i) * sizeof(*(ptr))))
|
||||||
|
Loading…
Reference in New Issue
Block a user