2026年10月15日、Rust 1.99.1がリリースされました。
以前、Rust 1.99.0でFFIのbool戻り値が誤コンパイルされる問題が報告された という記事を書きました。
あの問題、今回の1.99.1で修正されたようです。
修正内容
原因は、x86_64環境でFFIのbool戻り値に必要なゼロ拡張の指定が欠落していたことでした。
具体的にはLLVM IRのzeroext属性が抜けていたため、戻り値レジスタのビット1〜7が適切にゼロクリアされていなかったようです。
今回の修正で、この指定が復活しています。
修正PRは10月10日にマージされ、10月15日に1.99.1として公開されました。
I-miscompile、P-criticalが付いていたIssueも無事クローズされています。
前回の記事から約1週間で修正版の公開となりました。
なお、1.99.0でビルドした該当ライブラリについては、1.99.1で再ビルドしておくのがよさそうです。
ほかにも2件修正
今回の1.99.1では、ほかにも2つのリグレッションが修正されています。
wcslenのリンクエラー
一部のUEFIや組み込み向けターゲットで、wcslenが見つからずリンクエラーになる問題です。
LLVMの最適化によってwcslenの呼び出しが生成されるものの、対象環境に関数が存在しない場合があったようです。
今回はcompiler-builtinsにフォールバック実装が追加されました。
macOSでrust-lldが起動できない問題
macOSでrustupのプロキシを介さずにコンパイラを実行すると、rust-lldがlibLLVM.dylibを見つけられない場合があったようです。
こちらはrpathの設定によって修正されています。
そのほか、最近のRustの動き
今回のリリースとは別に、いくつか気になる問題の報告や変更予告も出ています。
こちらは簡単に共有程度で。
未修正のコンパイラ不具合
ファイルパスのハッシュ衝突による誤コンパイル
ファイルパスのハッシュを意図的に衝突させることで、rustcが別のソースファイルの内容をコンパイルしてしまう問題です。
コードレビュー回避への悪用可能性も指摘されています。
safe Rustで寿命制約を回避できる問題
構造体のフィールドへの代入とDropの組み合わせで、本来許されない参照を扱えてしまう問題です。
約11年前から存在していたとみられ、メモリ安全性に関わる内容です。
メンテナーによれば、問題を引き起こすには意図的なDrop実装が必要で、偶発的に発生する可能性は低いとのこと。
どちらもP-highに分類され、10月16日時点では未解決です。
今回の1.99.1には修正が含まれていません。
今後のバージョンに向けた変更
Rust 1.100(11月12日予定)
never type(!)の型推論やInfallibleの扱い、Cargoの中間ビルド成果物の配置などに変更が予定されています。
特にtarget内部のパスを直接参照しているビルド・梱包スクリプトは、beta版で事前に確認しておいた方がよさそうです。
次世代trait solver(Rust 1.101を目標)
traitの制約を解決するコンパイラ内部の仕組みについて、安定化に向けた最終コメント期間に入っています。
性能やエラー診断などに課題も残っているようですが、今後のRustにとって大きな変更になりそうです。
まとめ
前回紹介したFFIのbool問題は、無事に修正されました。
こうした問題が報告されてから比較的短期間で修正されるのはありがたいですね。
一方で、safe Rustのメモリ安全性に関わるものを含め、新しい問題も報告されています。
前回の記事の続報と、最近の動向を共有程度に。