[Migrated] spirv-std inline `asm!` should use `MaybeUninit<T>` instead of `let mut result = T::default();`.
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Rust
- Estrellas
- 3.4k
- Forks
- 126
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
Issue automatically imported from old repo: https://github.com/EmbarkStudios/rust-gpu/issues/1007
Old labels: t: enhancement,a: asm
Originally creatd by eddyb on 2023-03-17T20:01:45Z
We have a few different ways to extract results from asm!:
- old unsound approach (UB because of
OpReturnValue, so it's getting replaced)
asm! {
"%result = ...",
"OpReturnValue %result",
options(noreturn),
}
- old approach (sound, but requires
T: Default)
let mut result = T::default();
asm!(
"%result = ...",
"OpStore {result} %result",
result = in(reg) &mut result,
);
result
- new approach (using
MaybeUninit<T>), from #1006
let mut result_slot = core::mem::MaybeUninit::uninit();
asm! {
"%result = ...",
"OpStore {result_slot} %result",
result_slot = in(reg) result_slot.as_mut_ptr(),
}
result_slot.assume_init()
In #1006 only the unsound uses of asm!("OpReturnValue") were fixed (i.e. when dealing with opaque handles or &T/&mut T, neither of which implement Default).
However, it might be a good to transition everything uniformly, and maybe even provide a wrapper macro that allows uniformly using asm! with the result slot automatically handled (and even by-ref inputs as well?).
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Revisa los sitios existentes de extracción de resultados de spirv-std inline asm! y el enfoque MaybeUninit de #1006. Determina el alcance de reemplazar uniformemente los slots de resultados T::default(), incluido si se necesita una macro envolvente; se considera terminado cuando la extracción aplicable ya no requiere T: Default y el enfoque elegido es coherente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- rust
- Área
- compilers
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100