注目★★★★★Lobsters
Rust コンパイラの無限ループ追跡、3 つのバグが引き起こした 1 週間の謎解き
30秒で把握
- 1Ferrocene が Rust コンパイラ上流マージ後、fn_delegation 機能の reuse 構文で無限ハング発生・devpod が OOMKilled で強制終了
- 2GDB と詳細ログで 3 つのバグ (query cycle 検出不備・codegen_fn_attrs の相互作用・エラーメッセージの欠落) を特定・いずれも単体では顕在化しない
- 3unstable 機能と既存 query システムの組み合わせテスト不足が原因・統合時に循環依存テストの拡充が重要
要約
Ferrocene チームが Rust コンパイラの上流マージ後に CI テストの無限ハング問題に直面し、1 週間の調査で 3 つの異なるバグが組み合わさった根本原因を特定した。問題は fn_delegation 機能のテストケースで reuse 構文を使うと無限再帰に陥り、devpod メモリが枯渇するまで停止しなかった。GDB とログ解析により、rustc_middle の query cycle 検出ロジックの不完全な実装が query 実行中に自身を再帰的に呼び出していたこと、および codegen_fn_attrs モジュール追加後の相互作用が明らかになった。バグ組み合わせにより、通常なら query cycle を検出するはずの防御機構が機能せず、エラーメッセージも出さずにハングする挙動を引き起こしていた。
あなたへの影響
Rust コンパイラの query システムは循環依存を検出する重要な仕組みだが、新機能追加後の相互作用テストが不十分だと防御が無効化される可能性がある点を示唆しており。
推奨:unstable 機能の統合時には query cycle テストケースの充実と多様な組み合わせ検証が必須になり得る。