Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[BUG] `DType::from` rejects `S16`, `U16` and `F16`

Abierto Apto para principiantes
#386 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
rust
Área
backend

Línea de trabajo

Comienza con la conversión de DType en src/core/util.rs:76-81 y compara su rango aceptado con el enum en src/core/defines.rs:112-139. Sigue Array::get_type() en array.rs:427-432 y verifica que S16, U16 y F16 ya no provoquen un panic, incluso al aplicar el formato Debug a un array; los valores no reconocidos deben producir un error claro.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Bug

src/core/util.rs:76-81:

impl From<u32> for DType {
    fn from(t: u32) -> Self {
        assert!(DType::F32 as u32 <= t && t <= DType::U64 as u32);
        unsafe { mem::transmute(t) }
    }
}

The upper bound is DType::U64, which is 9. But the enum continues past it (src/core/defines.rs:112-139):

    U64 = 9,
    S16 = 10,
    U16 = 11,
    F16 = 12,

So the assert fires for three of the crate's own supported types. Array::get_type() (array.rs:427-432) is the caller, which means:

let a = randu::<half::f16>(dim4!(3, 3));
let t = a.get_type();     // panics
println!("{:?}", a);      // panics — Debug impl calls get_type()

This is not a version-skew problem — it's wrong against a correct 3.8 library, and has been since f16 support was added. It's also the inverse mistake to the one in AfError::from: that assert is too loose, this one is too tight.

Fix: bound at DType::F16 as u32, or better, use an exhaustive match with a clear error for unrecognised values. Note ArrayFire 3.10 adds s8 = 13, so a match would future-proof this.


Found by Claude Opus 5. Verified manually.

Lenguaje dominante
Rust
Estrellas
827
Forks
59
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de arrayfire/arrayfire-rust

Todos los issues de arrayfire/arrayfire-rust

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.