یک pointer فقط عددی برای نمایش آدرس حافظه نیست. این مطلب با مقایسهٔ نمونههایی از C++ و Rust، مفهوم Pointer Provenance را توضیح میدهد: رابطهای که مشخص میکند pointer از کدام allocation آمده و مجاز است به کدام حافظه دسترسی داشته باشد. نویسنده تأکید میکند که در مدل مورد بحث، این رابطه یک مفهوم انتزاعی برای compiler است، نه دادهای که الزاماً کنار آدرس در حافظه ذخیره شود.
مثال نخست در C++ تابعی است که متغیر محلی x را با مقدار ۱ میسازد، pointer ورودی p را به تابع ناشناختهٔ opaque میدهد و سپس x را برمیگرداند. Clang با گزینهٔ -O2 نتیجه را به بازگرداندن مستقیم ۱ تبدیل میکند. توضیح مطلب این است که p از allocation مربوط به x مشتق نشده؛ بنابراین compiler فراخوانی opaque(p) را تغییردهندهٔ x در نظر نمیگیرد. اما وقتی خود &x هم به opaque داده شود، مقدار x پس از فراخوانی از حافظه خوانده میشود.
نویسنده برای بررسی این رفتار سراغ LLVM IR میرود؛ یک Intermediate Representation میان زبانهایی مانند Rust و C++ و machine code. در نمونهٔ نمایشدادهشده، allocation محلی و مسیر استفاده از pointerها قابل بررسی است. هدف این بررسی، دنبالکردن منشأ pointerها و امکان دسترسی آنها به یک ناحیهٔ حافظه است.
در نمونهٔ بعدی C++، تبدیل &x به std::uintptr_t و ارسال آن به تابع دیگر، آدرس را exposed میکند. طبق توضیح مطلب، LLVM باید احتمال بازسازی pointer از این عدد را در نظر بگیرد و دیگر همان بهینهسازی قبلی را انجام نمیدهد.
Rust برای بیان صریحتر این قصد، APIهایی دارد. متد addr مقدار عددی آدرس را بدون exposed کردن provenance میگیرد. بااینحال، در آزمایش نویسنده، خروجی همچنان x را پس از opaque(p) دوباره از حافظه میخواند؛ پس این نمونه شاهد بهینهسازی فعلی نیست. مزیت مطرحشده، بیان روشنتر قصد برای compiler و Miri است.
بخش پایانیِ موجود به with_addr میپردازد: تغییر آدرس یک pointer همراه با حفظ provenance آن. نمونه، یک bit پایین آدرس را برای flag تنظیم و سپس پاک میکند. مقدار میانی همچنان pointer میماند، نه usize؛ چون عدد بهتنهایی provenance را حمل نمیکند.



