|
|
e1d706d2e0
|
docs(phase131): Case C 調査完了 - InfiniteEarlyExit パターン追加方針
## 根本原因解明
- loop(true) が Pattern4 に誤ルーティング
- Pattern4 は BinaryOp 比較を期待、boolean literal で失敗
## 解決方針
- 新パターン InfiniteEarlyExit 追加(Pattern 2 拡張ではなく)
- classify() の優先度修正
- Shape guard で最小受理(break+continue 各1箇所)
## 作成ドキュメント
- case-c-infinite-loop-analysis.md (13KB詳細分析)
- phase131-11-case-c-summary.md (4KBサマリー)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2025-12-14 09:47:23 +09:00 |
|
|
|
18bf35e6d4
|
fix(llvm): Phase 131-10 - Smart console.log routing(Segfault修正)
## 問題
- Integer値をi8*ポインタに変換 → Segfault(Exit 139)
## 解決策
- String literal → nyash.console.log(i8*)
- Integer/Handle → nyash.console.log_handle(i64)
## 結果
- Case B (loop_min_while): LLVM outputs `0,1,2` ✅
- VM/LLVM完全パリティ達成
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2025-12-14 09:19:00 +09:00 |
|
|
|
35db1f8d78
|
docs(phase131): Phase 131-6 根治調査完了 - MIR正常/LLVM壊れてる確定
Phase 131-6 根治調査: SSA Dominance 診断完了
確定結果:
- ✅ MIR は正しい(SSA 形式完璧、use-before-def なし)
- ✅ Rust VM は正常(0,1,2 を出力して停止)
- ❌ LLVM backend が壊れている(0 を無限に出力)
根本原因特定:
- 場所: src/llvm_py/llvm_builder.py の finalize_phis() (lines 601-735)
- 問題: PHI incoming value wiring が壊れている
- 疑わしいコード: lines 679-681 の self-carry logic
- 結果: PHI %3 が常に初期値 0 を返す → ループカウンタ増えない
テスト結果:
- Simple Add: VM ✅ 1, LLVM ✅ 1 (PASS)
- Loop Min While: VM ✅ 0,1,2, LLVM ❌ 0 forever (BUG)
- Phase 87 Min: VM ✅ 42, LLVM ✅ 42 (PASS)
新規ドキュメント:
- phase131-6-ssa-dominance-diagnosis.md: 完全な診断結果
- phase131-6-next-steps.md: 修正戦略と実装チェックリスト
- phase131-3-llvm-lowering-inventory.md: 更新済み
Next: Phase 131-7 (finalize_phis 修正)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2025-12-14 07:03:38 +09:00 |
|
|
|
1510dcb7d8
|
fix(llvm): Phase 131-6 調査 - TAG-RUN 3バグ発見(1修正/1部分/1未修正)
Phase 131-6: Infinite Loop Bug 調査完了
発見したバグ(3件):
1. Bug #1: Copy-to-PHI 命令(SSA 違反)✅ 修正完了
- instruction_rewriter.rs: PHI destination への Copy をスキップ
2. Bug #2: Type Inference 混同(String vs Integer)⚠️ 部分修正
- binop.py: force_string ロジック削除
3. Bug #3: SSA Dominance Violation ❌ 未修正
- MIR builder が定義前に値を使用(根本問題)
変更ファイル:
- src/mir/builder/control_flow/joinir/merge/instruction_rewriter.rs:
- Lines 428-443: header PHI への Copy スキップ追加
- src/llvm_py/instructions/binop.py:
- Lines 128-159: force_string 削除、Phase 131-6 コメント追加
- docs/development/current/main/phase131-3-llvm-lowering-inventory.md:
- 3バグの詳細追記
テスト結果:
- Case A/B2: ✅ 退行なし
- Case B: ❌ infinite loop 継続(Bug #3 が原因)
- Simple Add: ❌ 0 を出力(期待: 1)
Next: Phase 131-6 続き - MIR SSA dominance 根治
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2025-12-14 06:52:50 +09:00 |
|
|
|
9e76173c99
|
fix(llvm): Phase 131-5 完了 - TAG-LINK 修正(ExternCall symbol mapping)
Phase 131-5: ExternCall Symbol Mapping 修正
問題:
- Case B (loop_min_while.hako) が TAG-LINK で失敗
- エラー: undefined reference to `nyash_console_log`
根本原因:
- Python harness が dot → underscore 変換を実行
(`nyash.console.log` → `nyash_console_log`)
- NyKernel は `nyash.console.log` をエクスポート
(ELF format では dot が有効)
修正:
- src/llvm_py/instructions/externcall.py から変換ロジックを削除(-4 lines)
- Symbol 名は NyKernel exports と完全一致
変更ファイル:
- src/llvm_py/instructions/externcall.py:
- 不要な dot→underscore 変換削除
- ELF symbol 仕様のコメント追加
テスト結果:
- Case B LINK: ❌→✅ (修正成功)
- Case B RUN: ❌ (新 TAG-RUN: infinite loop)
- Case A/B2: ✅ (退行なし)
箱化モジュール化:
- ✅ SSOT 達成: NyKernel exports を信頼
- ✅ クリーンな修正: 不要コード削除のみ
- 推奨: NyKernel symbol naming convention ドキュメント化
Next: Phase 131-6 (TAG-RUN 修正 - infinite loop)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2025-12-14 06:25:42 +09:00 |
|
|
|
73613dcef0
|
feat(llvm): Phase 131-4 P1 完了 - PHI ordering 修正(multi-pass architecture)
Phase 131-4 P1: PHI After Terminator Bug 修正
問題:
- LLVM IR で PHI が terminator の後に出現(LLVM invariant 違反)
- Case B (loop_min_while.hako) が TAG-EMIT で失敗
修正:
- Multi-pass block lowering architecture 実装:
- Pass A: non-terminator instructions のみ emit
- Pass B: PHI finalization(block head に確実に配置)
- Pass C: deferred terminators を最後に emit
変更ファイル:
- src/llvm_py/builders/block_lower.py (~40行):
- lower_blocks() で terminator を defer
- lower_terminators() 新設(Pass C)
- _deferred_terminators dict で管理
- src/llvm_py/builders/function_lower.py (3行):
- Pass 順序更新: A→B→C
- src/llvm_py/instructions/ret.py (5行):
- _disable_phi_synthesis flag で Pass C 中の PHI 生成を抑制
テスト結果:
- Case B EMIT: ❌→✅ (修正成功)
- Case B LINK: ❌ (新 TAG-LINK: undefined nyash_console_log)
- Case A/B2: ✅ (退行なし)
箱化モジュール化:
- ✅ Multi-pass で責務分離
- ✅ Flag mechanism で構造的制御
- ✅ ハードコード禁止原則遵守
Next: Phase 131-5 (TAG-LINK 修正)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2025-12-14 06:12:31 +09:00 |
|
|
|
5709026812
|
docs(phase131): Phase 131-3 完了 - LLVM lowering 棚卸し(3ケース)
Phase 131-3 完了: MIR→LLVM lowering 棚卸し
テスト結果マトリックス:
- Case A (phase87_llvm_exe_min.hako): ✅ PASS (baseline)
- Case B (loop_min_while.hako): ❌ TAG-EMIT (PHI after terminator)
- Case B2 (print(42) simple): ✅ PASS (BoxCall works)
- Case C (llvm_stage3_loop_only.hako): ❌ TAG-EMIT (JoinIR pattern gap)
Critical Bugs:
1. Bug #1: PHI After Terminator (Case B)
- 原因: function_lower.py が terminator を PHI より先に emit
- 修正: 4-pass block emission (2-3h)
2. Bug #2: JoinIR Pattern Gap (Case C)
- 原因: loop(true) { break } パターンが JoinIR 未対応
- 修正: Pattern 5 設計・実装 (3-4h)
Next Actions:
- P1 (推奨): PHI ordering 修正 → 80% のループを有効化
- P2: JoinIR Pattern 5 → infinite loop 対応
ドキュメント:
- phase131-3-llvm-lowering-inventory.md: 詳細棚卸し結果
- phase87-selfhost-llvm-exe-line.md: LLVM IR parsing error 追記
- CURRENT_TASK.md: phase131-3 参照追加
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2025-12-14 05:55:21 +09:00 |
|