[BUG] `af_set_backend` is declared with the wrong parameter width

Offen Anfängerfreundlich
#388 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
1/5
Geschätzter Aufwand
Unter einer Stunde
Anfängerfreundlichkeit
88/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Ruhig
Tech-Stack
c, rust
Bereich
backend

Rechercherichtung

Beginne in src/core/backend.rs:7 und vergleiche af_set_backend mit den benachbarten Deklarationen im selben extern-Block. Prüfe include/af/backend.h:24, um den C-Enum-Typ zu bestätigen, aktualisiere dann die Rust-Deklaration so, dass sie zur ABI passt, und führe anschließend die Rust-Prüfungen oder -Tests des Repositorys aus. Die Aufgabe ist erledigt, wenn die Deklaration die korrekte Parameterbreite verwendet und die Prüfungen erfolgreich sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Bug

src/core/backend.rs:7:

extern "C" {
    fn af_set_backend(bknd: u8) -> c_int;

The C signature (include/af/backend.h:24) is:

AFAPI af_err af_set_backend(const af_backend bknd);

af_backend is a C enum, i.e. 4-byte int under both MSVC and GCC. Declaring the parameter as u8 is an ABI type mismatch.

In practice it works, because rustc emits zeroext for the u8 argument and the callee reads a clean value from the full register — I checked the IR (declare noundef i32 @af_set_backend(i8 noundef zeroext)). So this is as a latent correctness issue rather than an active bug, but it should still be c_uint to match the C ABI.

The three neighbouring declarations in the same extern block already use c_uint/c_int correctly.


Found by Claude Opus 5.

Vorherrschende Sprache
Rust
Sterne
827
Forks
59
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus arrayfire/arrayfire-rust

Alle Issues in arrayfire/arrayfire-rust

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.