Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Can't use `usize::unchecked_mul()` because "checked mul is not supported yet"

Aperta
#537 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
rust
Ambito
compilers

Direzione di ricerca

Riproduci il fallimento della compilazione dello shader, poi inizia da core/src/num/mod.rs e segui usize::unchecked_mul attraverso assert_unsafe_precondition! e overflowing_mul. Confronta questo percorso con Layout::repeat e determina se il supporto per la moltiplicazione verificata o la disabilitazione delle precondizioni unsafe risolve l’errore segnalato; il lavoro è completato quando il riproduttore viene compilato correttamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

I've stumbled upon this while trying to use core::alloc::Layout type in my shader code.
You see, Layout::repeat() function uses checked math to return an error, but in my case this should not be possible, so I've reimplemented it using usize::unchecked_mul().
I expected my code to compile, but got this compiler error instead:

error: checked mul is not supported yet
      --> ***\.rustup\toolchains\nightly-2025-06-30-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\num\mod.rs:1224:5
       |
  1224 | /     uint_impl! {
  1225 | |         Self = usize,
  1226 | |         ActualT = u32,
  1227 | |         SignedT = isize,
  ...    |
  1241 | |         bound_condition = " on 32-bit targets",
  1242 | |     }
       | |_____^
       |
  note: used from within `<usize>::overflowing_mul`
      --> ***\.rustup\toolchains\nightly-2025-06-30-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\num\mod.rs:1224:5
       |
  1224 | /     uint_impl! {
  1225 | |         Self = usize,
  1226 | |         ActualT = u32,
  1227 | |         SignedT = isize,
  ...    |
  1241 | |         bound_condition = " on 32-bit targets",
  1242 | |     }
       | |_____^
  note: called by `<usize>::unchecked_mul::precondition_check`
      --> ***\.rustup\toolchains\nightly-2025-06-30-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\num\mod.rs:1224:5
       |
  1224 | /     uint_impl! {
  1225 | |         Self = usize,
  1226 | |         ActualT = u32,
  1227 | |         SignedT = isize,
  ...    |
  1241 | |         bound_condition = " on 32-bit targets",
  1242 | |     }
       | |_____^
  note: called by `<usize>::unchecked_mul`
      --> ***\.rustup\toolchains\nightly-2025-06-30-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core\src\num\mod.rs:1224:5
       |
  1224 | /     uint_impl! {
  1225 | |         Self = usize,
  1226 | |         ActualT = u32,
  1227 | |         SignedT = isize,
  ...    |
  1241 | |         bound_condition = " on 32-bit targets",
  1242 | |     }
       | |_____^
  note: 

I guess it tries to compile assert_unsafe_precondition! macro call which contains a call to usize::overflowing_mul() (which is used to do checked multiplication), and fails to do so.
I thought it should be compiled out because I'm compiling my shader in release mode (as by default) which suggests that debug_assertions are set to false (which should disable unsafe preconditions), but it seems this is not the case here.

I think it will be best to resolve such issue by implementing checked mul (as it is already implemented in Zig SPIR-V compiler, which I guess was the inspiration for rust-gpu's checked math functions)...
But if it is possible to disable unsafe preconditions completely, I can do just that.

Lingua principale
Rust
Stelle
3.4k
Fork
126
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Rust-GPU/rust-gpu

Tutte le issue di Rust-GPU/rust-gpu

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.