diff --git a/kmir/src/kmir/kdist/mir-semantics/rt/data.md b/kmir/src/kmir/kdist/mir-semantics/rt/data.md
index f76620160..0dba629bd 100644
--- a/kmir/src/kmir/kdist/mir-semantics/rt/data.md
+++ b/kmir/src/kmir/kdist/mir-semantics/rt/data.md
@@ -452,6 +452,17 @@ This is done without consideration of the validity of the Downcast[^downcast].
[^downcast]: See discussion in https://github.com/rust-lang/rust/issues/93688#issuecomment-1032929496.
```k
+ // fast elimination: SingletonArray + Field(0) + ConstantIndex(0) on a single-element Aggregate
+ rule #traverseProjection(
+ DEST,
+ Aggregate(IDX, ARGS),
+ projectionElemSingletonArray projectionElemField(fieldIdx(0), TY) projectionElemConstantIndex(0, 0, false) PROJS,
+ CTXTS
+ )
+ => #traverseProjection(DEST, Aggregate(IDX, ARGS), projectionElemField(fieldIdx(0), TY) PROJS, CTXTS) ...
+ requires size(ARGS) ==Int 1
+ [preserves-definedness]
+
rule #traverseProjection(
DEST,
Aggregate(IDX, ARGS),
diff --git a/kmir/src/tests/integration/data/prove-rs/write_volatile_pubkey_array.rs b/kmir/src/tests/integration/data/prove-rs/write_volatile_pubkey_array.rs
new file mode 100644
index 000000000..226770ce2
--- /dev/null
+++ b/kmir/src/tests/integration/data/prove-rs/write_volatile_pubkey_array.rs
@@ -0,0 +1,37 @@
+#![allow(invalid_reference_casting)]
+
+fn main() {
+ let _keep: fn(&AccountInfo<'_>, Pubkey) = repro;
+}
+
+#[inline(never)]
+#[no_mangle]
+pub fn repro(account: &AccountInfo<'_>, replacement: Pubkey) {
+ account.assign(replacement);
+ assert_eq!(*account.owner, replacement);
+}
+
+struct AccountInfo<'a> {
+ owner: &'a Pubkey,
+}
+
+impl<'a> AccountInfo<'a> {
+ #[inline(never)]
+ fn assign(&self, new_owner: Pubkey) {
+ unsafe {
+ std::ptr::write_volatile(
+ self.owner as *const Pubkey as *mut [u8; 32],
+ new_owner.to_bytes(),
+ );
+ }
+ }
+}
+
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+struct Pubkey([u8; 32]);
+
+impl Pubkey {
+ fn to_bytes(self) -> [u8; 32] {
+ self.0
+ }
+}
diff --git a/kmir/src/tests/integration/test_integration.py b/kmir/src/tests/integration/test_integration.py
index 8c59cce9b..6e9ec7133 100644
--- a/kmir/src/tests/integration/test_integration.py
+++ b/kmir/src/tests/integration/test_integration.py
@@ -40,6 +40,7 @@
'test_offset_from-fail': ['testing'],
'iter-eq-copied-take-dereftruncate': ['repro'],
'spl-multisig-iter-eq-copied-next': ['repro'],
+ 'write_volatile_pubkey_array': ['repro'],
}
PROVE_SHOW_SPECS = [
'local-raw-fail',