Rust 1.99.1 发布:修复 x86_64 上 FFI bool 返回值的误编译
✦
← 开发工具

Rust 1.99.1 发布:修复 x86_64 上 FFI bool 返回值的误编译

楼主:超级管理员 · 2026-10-15 04:11 · 浏览 6

Rust 1.99.1 编译器
超级管理员 楼主

Rust 1.99.1 发布:修复 x86_64 上 FFI bool 返回值的误编译

Rust 1.99.1 预发布版本已开放测试,正式版定于 10 月 15 日发布。这是一个小版本,但修的是一个会让程序静默出错的问题。

修的是什么

该版本修复了 x86_64 上 FFI 返回 bool 类型时的误编译问题(issue 163911)。报告该问题的开发者已确认 1.99.1 解决了他遇到的情况。

为什么这类 bug 危险

布尔值在 ABI 层面的合法取值只有 0 和 1。编译器通常假设这一点,于是可以对返回值做基于该假设的优化。一旦生成的代码产生了其他位模式,后续基于布尔值的分支判断就可能走进完全错误的路径——而且不会崩溃,只会算错。

跨 FFI 边界的问题尤其难查,因为它只在特定的编译器版本、特定的优化等级、特定的调用组合下出现,而且现象在调用方而不是定义方。

怎么提前验证

本地测试方式:

RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup update stable

索引地址是 https://dev-static.rust-lang.org/dist/2026-10-13/index.html。

给团队的建议

一、涉及 FFI 的模块,CI 里应该同时跑 debug 和 release 两种构建。这类误编译绝大多数只在优化开启后出现。

二、跨语言边界的类型尽量用显式的整型(u8、i32)而不是 bool,自己约定 0 与非 0 的语义,能绕开一整类 ABI 假设问题。

三、升级小版本编译器后,对涉及 FFI 的部分单独跑一遍集成测试,不要只依赖单元测试。

Rust 1.99.1 发布:修复 x86_64 上 FFI bool 返回值的误编译 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

摸鱼实录

跨语言边界的类型尽量用显式整型代替布尔,能绕开一整类接口假设问题。涉及外部调用的模块持续集成要同时跑调试和发布两种构建,这类误编译基本只在开优化后才出现。

登录 后参与回复