Files
hakorune/apps/tests/phase286_pattern2_break_no_update_min.hako
tomoaki b235a5b6db feat(joinir): Phase 286 P3.1 - Pattern2 Plan line 完走(after_bb PHI)
Pattern2(Loop with Break)を Plan/Frag SSOT へ移行。

主な変更:
- Pattern2BreakPlan 追加(DomainPlan variant)
- extract_pattern2_plan() 実装(PoC サブセット厳守)
- normalize_pattern2_break() 実装(6-block CFG, 3 PHI)
- after_bb PHI が本質: carrier_out = PHI(header: carrier_current, break_then: carrier_break)
- router に Pattern2 追加(Pattern1 より前、より具体的)

テスト:
- Fixture B (break without update): PASS (出力 11)
- quick smoke: 154/154 PASS

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-26 05:56:30 +09:00

36 lines
1.0 KiB
Plaintext

// Phase 286 P3.1: Pattern2 "break without update" minimal fixture
//
// Purpose: Test Pattern2 where break path has NO carrier update
// Expected output: 11
//
// Structure:
// i = 0, sum = 10 // non-zero init to clarify intent
// loop(i < 3) {
// if (i == 1) { break } // NO sum update before break!
// sum = sum + 1 // i==0 only: sum = 11
// i = i + 1
// }
// return sum // expects 11 (value at break point)
//
// Key insight (after_bb PHI):
// - break path: carrier_break = carrier_current (no update)
// - natural exit: carrier_out = carrier_current (from header)
// - after_bb PHI: carrier_out = PHI(header: carrier_current, break_then: carrier_break)
//
// This fixture tests the case where carrier_break == carrier_current
// (i.e., no intermediate update before break)
static box Main {
main() {
local i, sum
i = 0
sum = 10
loop(i < 3) {
if (i == 1) { break }
sum = sum + 1
i = i + 1
}
return sum
}
}