-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ICE assertion
left == right failed: write_cvalue_transmute: types::I32 -> types::I64
#1452
Comments
another one auto-reduced (treereduce-rust): use std::mem;
struct PackedSized {
f: u8,
d: [u32; 4],
}
struct PackedUnsized {
f: u8,
d: [u32],
}
impl PackedSized {
fn unsize(&self) -> &PackedUnsized {
let len = 1;
unsafe { mem::transmute((self, len)) }
}
}
fn main() {
unsafe {
let p = PackedSized {
f: 0,
d: [1, 2, 3, 4],
};
let p = p.unsize() as *const PackedUnsized;
}
}
original: //@ run-pass
#![feature(layout_for_ptr)]
use std::mem;
#[repr(packed, C)]
struct PackedSized {
f: u8,
d: [u32; 4],
}
#[repr(packed, C)]
struct PackedUnsized {
f: u8,
d: [u32],
}
impl PackedSized {
fn unsize(&self) -> &PackedUnsized {
// We can't unsize via a generic type since then we get the error
// that packed structs with unsized tail don't work if the tail
// might need dropping.
let len = 1;
unsafe { mem::transmute((self, len)) }
}
}
fn main() { unsafe {
let p = PackedSized { f: 0, d: [1, 2, 3, 4] };
let p = p.unsize() as *const PackedUnsized;
// Make sure the size computation does *not* think there is
// any padding in front of the `d` field.
assert_eq!(mem::size_of_val_raw(p), 1 + 4*4);
// And likewise for the offset computation.
let d = std::ptr::addr_of!((*p).d);
assert_eq!(d.cast::<u32>().read_unaligned(), 1);
} } Version information
Command: Program output
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
auto-reduced (treereduce-rust):
original:
Version information
Command:
/home/matthias/.rustup/toolchains/master/bin/rustc -Zmir-opt-level=5 -Zcodegen-backend=cranelift
Program output
The text was updated successfully, but these errors were encountered: