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

Ouverte Adaptée aux débutants
#386 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Calme
Stack technique
rust
Domaine
backend

Piste de recherche

Commencez par la conversion de DType dans src/core/util.rs:76-81 et comparez sa plage de valeurs acceptées avec l’enum dans src/core/defines.rs:112-139. Suivez Array::get_type() dans array.rs:427-432 et vérifiez que S16, U16 et F16 ne provoquent plus de panic, y compris lors du formatage Debug d’un array ; les valeurs non reconnues doivent entraîner une erreur explicite.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.

Langage dominant
Rust
Étoiles
827
Forks
59
Métriques de merge des PR
Aucune PR mergée en 30 j

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de arrayfire/arrayfire-rust

Toutes les issues de arrayfire/arrayfire-rust

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.