arrayfire / arrayfire/arrayfire-rust

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

Đang mở Phù hợp với người mới
#388 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Bug
Ngôn ngữ chính
Rust
Star
827
Fork
59
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

[`src/core/backend.rs:7`](https://github.com/arrayfire/arrayfire-rust/blob/master/src/core/backend.rs#L7):

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

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

```c
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.

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Hướng nghiên cứu

Start in src/core/backend.rs:7 and compare af_set_backend with the neighboring declarations in the same extern block. Check include/af/backend.h:24 to confirm the C enum type, update the Rust declaration to match the ABI, then run the repository's Rust checks or tests. Done means the declaration uses the correct parameter width and the checks pass.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
c, rust
Lĩnh vực
backend
Loại issue
Lỗi
Độ khó
1/5
Thời gian dự kiến
Dưới một giờ
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
88/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.