ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡ Π² ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΈ Π΅ΠΆΠ΅Π½ΠΎΡΠ½ΠΎ Π² Windows, OSX ΠΈ Linux:
cargo 1.28.0 (96a2c7d16 2018-07-13)
release: 1.28.0
commit-hash: 96a2c7d16249cb47c61c887fc95ca8be60e7ef0a
commit-date: 2018-07-13
cargo 1.29.0-nightly (6a7672ef5 2018-08-14)
release: 1.29.0
commit-hash: 6a7672ef5344c1bb570610f2574250fbee932355
commit-date: 2018-08-14
ΠΠΎΠ΄:
fn main() {
let x = [0u8; 128 * 128 * 4];
let _y = unsafe { std::ptr::read_volatile(&x) };
}
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @talchas Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΌΠΎΠ³Π»ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π΅Π³ΠΎ ΠΈ Π±Π΅Π· _volatile
.
ΠΡΠ»ΠΈ Π±ΡΡΡ ΡΠΎΡΠ½ΡΠΌ, Ρ Π½Π΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ» Π΅Π³ΠΎ Π² ΡΠΆΠ°Π²ΡΠΈΠ½Π΅ Π±Π΅Π· _volatile; ΠΌΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ° llc (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ) Π·Π°Π²ΠΈΡΠ°Π»Π° ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ --emit llvm-ir, Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ
define internal void @_ZN3foo4main17hb80e1f71fc6968e1E() unnamed_addr #0 {
start:
%_y = alloca [65536 x i8], align 1
%0 = load volatile [65536 x i8], [65536 x i8]* %_y, align 1
ret void
}
ΠΈΠ»ΠΈ
define internal void @_ZN3foo4main17hb80e1f71fc6968e1E() unnamed_addr #0 {
start:
%_y = alloca [65536 x i8], align 1
%0 = load [65536 x i8], [65536 x i8]* %_y, align 1
ret void
}
ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ.
https://bugs.llvm.org/show_bug.cgi?id=37000 - ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° LLVM, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π·Π΄Π΅ΡΡ.
Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°: ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠ°
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠ»ΠΈ Π±ΡΡΡ ΡΠΎΡΠ½ΡΠΌ, Ρ Π½Π΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ» Π΅Π³ΠΎ Π² ΡΠΆΠ°Π²ΡΠΈΠ½Π΅ Π±Π΅Π· _volatile; ΠΌΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ° llc (ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ) Π·Π°Π²ΠΈΡΠ°Π»Π° ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ --emit llvm-ir, Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ
ΠΈΠ»ΠΈ
ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Ρ.