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>
36 lines
1.0 KiB
Plaintext
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
|
|
}
|
|
}
|