LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Так вот UB на расте типичное...

https://godbolt.org/z/WT16v5vfM

extern "C" {
    fn printf(fmt: *const i8, ...) -> i32;
}

pub fn aliasing(a: *mut i32, b: *mut f32) -> i32 {
    unsafe {
        *a = 1;
        *b = 0f32;
        return *a;
    }
}

fn main() {
    let mut i = 0;
    i = aliasing(&mut i as *mut i32,  &mut i as *mut i32 as *mut f32);
    unsafe {
        // Печатает 1, должно 0
        printf("%d" as *const str as *const i8, i);
    }
}

Исходная версия MOPKOBKA, :

Так вот UB на расте типичное...

https://godbolt.org/z/WT16v5vfM

extern "C" {
    fn printf(fmt: *const i8, ...) -> i32;
}

pub fn aliasing(a: *mut i32, b: *mut f32) -> i32 {
    unsafe {
        *a = 1;
        *b = 0f32;
        return *a;
    }
}

fn main() {
    let mut i = 0;
    i = aliasing(&mut i as *mut i32,  &mut i as *mut i32 as *mut f32);
    unsafe {
        // Печатает 1, должно 0
        printf("%d" as *const str as *const i8, i);
    }
}