arrayfire / arrayfire/arrayfire-rust

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

未关闭 适合新手
#388 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
Bug
主要语言
Rust
星标
827
派生
59
PR 合并指标
30 天内没有已合并 PR

描述

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

贡献指南

这个仓库没有索引到贡献指南

调研方向

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.

由索引模型根据 Issue 内容生成。

评估

技术栈
c, rust
领域
backend
Issue 类型
缺陷
难度
1/5
预计耗时
1 小时以内
活跃度
冷清
描述清晰度
描述清楚
新手友好度
88/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。