Hi Mark, this list has been dead for a while now. You are probably looking for https://users.rust-lang.org/ or https://internals.rust-lang.org/
- µ
Am 22/01/2018 um 21:42 schrieb Mark S. Baranowski:
> Hello,
>
> I am working on a verifier for Rust, based on the generated LLVM code. I
> am having an issue with code generated similar to the following
>
> struct Point {
> pub x: u32,
> pub y: u32
> }
> fn double_point(p: Point) -> Point {
> Point { x: 2*p.x, y: 2*p.y }
> }
> fn main() {
> let p = Point { x: 2, y: 3 };
> let q = double_point(p);
> assert!(q.x == 4 && q.y == 6);
> }
>
> The call to the double_point function is what causes the issue, as shown
> in the following generated llvm-ir code
>
> %8 = bitcast %Point* %arg to i64*
> %9 = load i64, i64* %8, align 4
> %10 = call i64 @_ZN5point12double_point17h4b5ca79567fdc22dE(i64 %9)
> store i64 %10, i64* %abi_cast
>
> In the verifier's default mode, reads from the i64 don't work correctly,
> giving an assertion violation. This code works if the Point structure
> uses 64-bit ints instead, since no packing occurs.
>
> My question is: is there is a way to prevent the compiler from
> bit-casting the structure to an integer? I am using a December 2016
> nightly compiler, and have tried disabling all optimizations.
>
> Thanks,
>
> Mark
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
