diff --git a/kmir/src/kmir/kdist/mir-semantics/rt/data.md b/kmir/src/kmir/kdist/mir-semantics/rt/data.md
index 5839521b4..4d10f37ca 100644
--- a/kmir/src/kmir/kdist/mir-semantics/rt/data.md
+++ b/kmir/src/kmir/kdist/mir-semantics/rt/data.md
@@ -1838,24 +1838,15 @@ the safety of this cast. The logic of the semantics and saftey of this cast for
```k
syntax MIRError ::= "#UBInvalidTransmuteMaybeUninit"
rule
- #cast( _VAL:Value , castKindTransmute , TY_FROM , TY_TO )
+ #cast( VAL:Value , castKindTransmute , _TY_FROM , TY_TO )
=>
- #UBInvalidTransmuteMaybeUninit
+ Union(fieldIdx(1), Aggregate(variantIdx(0), ListItem(VAL) .List))
...
requires #isUnionType(lookupTy(TY_TO))
andBool #typeNameIs(lookupTy(TY_TO), "std::mem::MaybeUninit<")
- andBool TY_FROM =/=K getFieldTy(#lookupMaybeTy(getFieldTy(lookupTy(TY_TO), 1)), 0)
-
- rule
- #cast( VAL:Value , castKindTransmute , TY_FROM , TY_TO )
- =>
- Union( fieldIdx ( 1 ) , Aggregate ( variantIdx ( 0 ) , ListItem(VAL) .List ))
- ...
-
- requires #isUnionType(lookupTy(TY_TO))
- andBool #typeNameIs(lookupTy(TY_TO), "std::mem::MaybeUninit<")
- andBool TY_FROM ==K getFieldTy(#lookupMaybeTy(getFieldTy(lookupTy(TY_TO), 1)), 0)
+ // `MaybeUninit` accepts arbitrary bit patterns, so any value can be
+ // reinterpreted into the union's initialized field.
// Converting static or dynamic sized array of `T` to array of `std::mem::MaybeUninit`.
// FIXME: Might need to check sizes as this cast could come from transmute_unchecked
diff --git a/kmir/src/tests/integration/data/prove-rs/show/transmute-maybe-uninit-fail.main.expected b/kmir/src/tests/integration/data/prove-rs/show/transmute-maybe-uninit-fail.main.expected
deleted file mode 100644
index 12948003f..000000000
--- a/kmir/src/tests/integration/data/prove-rs/show/transmute-maybe-uninit-fail.main.expected
+++ /dev/null
@@ -1,17 +0,0 @@
-
-┌─ 1 (root, init)
-│ #execTerminator ( terminator ( ... kind: terminatorKindCall ( ... func: operandC
-│ span: 0
-│
-│ (16 steps)
-└─ 3 (stuck, leaf)
- #ProgramError ( #UBInvalidTransmuteMaybeUninit )
-~> #freezer#setLocalValue(_,_)_
- function: main
- span: 60
-
-
-┌─ 2 (root, leaf, target, terminal)
-│ #EndProgram ~> .K
-
-
diff --git a/kmir/src/tests/integration/data/prove-rs/show/transmute-maybe-uninit-i128.main.expected b/kmir/src/tests/integration/data/prove-rs/show/transmute-maybe-uninit-i128.main.expected
new file mode 100644
index 000000000..20e9eaff3
--- /dev/null
+++ b/kmir/src/tests/integration/data/prove-rs/show/transmute-maybe-uninit-i128.main.expected
@@ -0,0 +1,17 @@
+
+┌─ 1 (root, init)
+│ #execTerminator ( terminator ( ... kind: terminatorKindCall ( ... func: operandC
+│ span: 0
+│
+│ (77 steps)
+├─ 3 (terminal)
+│ #EndProgram ~> .K
+│ function: main
+│
+┊ constraint: true
+┊ subst: ...
+└─ 2 (leaf, target, terminal)
+ #EndProgram ~> .K
+
+
+
diff --git a/kmir/src/tests/integration/data/prove-rs/transmute-maybe-uninit-fail.rs b/kmir/src/tests/integration/data/prove-rs/transmute-maybe-uninit-i128.rs
similarity index 74%
rename from kmir/src/tests/integration/data/prove-rs/transmute-maybe-uninit-fail.rs
rename to kmir/src/tests/integration/data/prove-rs/transmute-maybe-uninit-i128.rs
index 6207a3a7b..57d853530 100644
--- a/kmir/src/tests/integration/data/prove-rs/transmute-maybe-uninit-fail.rs
+++ b/kmir/src/tests/integration/data/prove-rs/transmute-maybe-uninit-i128.rs
@@ -4,7 +4,6 @@ use std::mem::MaybeUninit;
fn main() {
unsafe {
let maybe_unsigned = std::intrinsics::transmute::>(9999);
- // Note different types ^^^^ ^^^^
assert!(maybe_unsigned.assume_init() == 9999);
}
}
diff --git a/kmir/src/tests/integration/test_integration.py b/kmir/src/tests/integration/test_integration.py
index 14b5221c3..c622cb4fd 100644
--- a/kmir/src/tests/integration/test_integration.py
+++ b/kmir/src/tests/integration/test_integration.py
@@ -60,7 +60,7 @@
'assert-inhabited-fail',
'iterator-simple',
'unions-fail',
- 'transmute-maybe-uninit-fail',
+ 'transmute-maybe-uninit-i128',
'ptr-through-wrapper-fail',
'test_offset_from-fail',
'ref-ptr-cast-elem-fail',