Rust: Rustc se bloque pendant llvm codegen lors du référencement d'un [grand] tableau avec std::ptr::read_volatile

Créé le 27 août 2018  ·  3Commentaires  ·  Source: rust-lang/rust

Ce problème a été reproduit sur stable et tous les soirs sur Windows, OSX et 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

Code:

fn main() {
    let x = [0u8; 128 * 128 * 4];
    let _y = unsafe { std::ptr::read_volatile(&x) };
}

Merci à @talchas pour la reproduction minimale. Je crois qu'ils ont également pu le reproduire sans _volatile .

A-LLVM

Commentaire le plus utile

Pour être précis, je ne l'ai pas reproduit en rouille sans _volatile; mon système llc (et donc probablement d'une version différente) s'est bloqué lors de la tentative de compilation de la sortie --emit llvm-ir, mais a échoué lors de la tentative de compilation soit

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
}

ou

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
}

qui peut être un problème connexe ou non.

Tous les 3 commentaires

Pour être précis, je ne l'ai pas reproduit en rouille sans _volatile; mon système llc (et donc probablement d'une version différente) s'est bloqué lors de la tentative de compilation de la sortie --emit llvm-ir, mais a échoué lors de la tentative de compilation soit

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
}

ou

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
}

qui peut être un problème connexe ou non.

https://bugs.llvm.org/show_bug.cgi?id=37000 est le bogue LLVM que vous voyez ici.

Triage : il semble qu'il s'agisse toujours d'un bug

Cette page vous a été utile?
0 / 5 - 0 notes