Rust: 使用 std::ptr::read_volatile 引用 [large] 数组时,Rustc 在 llvm 代码生成期间挂起

创建于 2018-08-27  ·  3评论  ·  资料来源: rust-lang/rust

此问题已在 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情况下复制它。

A-LLVM

最有用的评论

准确地说,我没有在没有 _volatile 的情况下用 Rust 复制它; 我的系统 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
}

这可能是一个相关的问题。

所有3条评论

准确地说,我没有在没有 _volatile 的情况下用 Rust 复制它; 我的系统 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 错误。

分类:看来这仍然是一个错误

此页面是否有帮助?
0 / 5 - 0 等级