์ด ๋ฌธ์ ๋ 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 ์์ด ๋ น์ฌ์ง ์๊ณ ์ฌํํ์ง ์์์ต๋๋ค. --emit llvm-ir ์ถ๋ ฅ์ ์ปดํ์ผํ๋ ค๊ณ ํ ๋ ๋ด ์์คํ llc(๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฒ์ ์์)๊ฐ ์ค๋จ๋์์ง๋ง ๋ ์ค ํ๋๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ํ ๋ segfaulted
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 ์์ด ๋ น์ฌ์ง ์๊ณ ์ฌํํ์ง ์์์ต๋๋ค. --emit llvm-ir ์ถ๋ ฅ์ ์ปดํ์ผํ๋ ค๊ณ ํ ๋ ๋ด ์์คํ llc(๋ฐ๋ผ์ ๋ค๋ฅธ ๋ฒ์ ์์)๊ฐ ์ค๋จ๋์์ง๋ง ๋ ์ค ํ๋๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ํ ๋ segfaulted
๋๋
๊ด๋ จ ๋ฌธ์ ์ผ ์๋ ์๊ณ ์๋ ์๋ ์์ต๋๋ค.