X-Git-Url: https://git.ralfj.de/web.git/blobdiff_plain/f2e7fedc0197ea19bee98b6fd5fe304181246503..9fbe3ff304532d5adea51828c613468904c66f23:/personal/_posts/2020-12-14-provenance.md?ds=sidebyside diff --git a/personal/_posts/2020-12-14-provenance.md b/personal/_posts/2020-12-14-provenance.md index 249c3e4..78e2538 100644 --- a/personal/_posts/2020-12-14-provenance.md +++ b/personal/_posts/2020-12-14-provenance.md @@ -1,6 +1,6 @@ --- title: "Pointers Are Complicated II, or: We need better language specs" -categories: rust research +categories: rust research programming forum: https://internals.rust-lang.org/t/pointers-are-complicated-ii-or-we-need-better-language-specs/13562 license: CC BY-SA 4.0 license-url: https://creativecommons.org/licenses/by-sa/4.0/ @@ -123,7 +123,8 @@ This program has two possible behaviors: either `ip` (the address one-past-the-e Or the two are equal, in which case the program will print "10" (`iq` is the result of casting `q` to an integer, so casting it back will yield the original pointer, or at least a pointer pointing to the same object / location in memory). The first "optimization" we will perform is to exploit that if we enter the `if` body, we have `iq == ip`, so we can replace all `iq` by `ip`. -Subsequently the definition of `ip` is inlined: +The assignment thus becomes `*(char*)ip = 10`. +Subsequently, the definition of `ip` is inlined: {% highlight c %} char p[1], q[1] = {0}; uintptr_t ip = (uintptr_t)(p+1);