LINUX.ORG.RU

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

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

Ничего специфичного для раста. На сишечке это такой-же UB, так как &mut i32 соответствует int32_t * restrict. А, и без restrict тоже UB из-за strict aliasing.

https://godbolt.org/z/TGj9re8sP

Корректный (кажется) вариант на расте должен использовать &raw mut i.

https://godbolt.org/z/Ee6vjoeGq

В расте кажется strict aliasing нет, но точно не помню, потому что такой код я точно писать не стану: там есть функции чтобы сказать компилятору, что нужно прочитать содержимое памяти независимо от того что компилятор думает по поводу provenance или aliasing.

Исправление red75prim, :

Ничего специфичного для раста. На сишечке это такой-же UB, так как &mut i32 соответствует int32_t * restrict. А, и без restrict тоже UB из-за strict aliasing.

https://godbolt.org/z/TGj9re8sP

Корректный (кажется) вариант на расте должен использовать &raw mut i.

https://godbolt.org/z/Ee6vjoeGq

В расте кажется strict aliasing нет, но точно не помню, потому что такой код я точно писать не стану.

Исправление red75prim, :

Ничего специфичного для раста. На сишечке это такой-же UB, так как &mut i32 соответствует int32_t * restrict. А, и без restrict тоже UB из-за strict aliasing.

https://godbolt.org/z/TGj9re8sP

Корректный вариант на расте должен использовать &raw mut i

https://godbolt.org/z/Ee6vjoeGq

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

Ничего специфичного для раста. На сишечке это такой-же UB, так как &mut i32 соответствует int32_t * restrict.

https://godbolt.org/z/TGj9re8sP

Корректный вариант на расте должен использовать &raw mut i

https://godbolt.org/z/Ee6vjoeGq