From fa035541dae86a69cfc9f7ada69c9b79ce23dd2f Mon Sep 17 00:00:00 2001 From: Thomas Weber Date: Sat, 20 Sep 2025 13:41:23 -0500 Subject: [PATCH] Give up analyzing looped stack after 10000 iterations Temporary fix for an infinite loop, to be properly fixed later --- src/compiler/iroptimizer.js | 12 +++++++ ...cedure-reporter-infinite-analyzer-loop.sb3 | Bin 0 -> 35213 bytes ...ter-infinite-analyzer-loop.sb3.tw-snapshot | 29 +++++++++++++++++ ...ter-infinite-analyzer-loop.sb3.tw-snapshot | 30 ++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 test/fixtures/execute/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3 create mode 100644 test/snapshot/__snapshots__/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot create mode 100644 test/snapshot/__snapshots__/warp-timer/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot diff --git a/src/compiler/iroptimizer.js b/src/compiler/iroptimizer.js index 100f38900fa..f44dd730ce8 100644 --- a/src/compiler/iroptimizer.js +++ b/src/compiler/iroptimizer.js @@ -627,9 +627,21 @@ class IROptimizer { return this.analyzeStack(stack, state) || modified; } + let iterations = 0; let modified = false; let keepLooping; do { + // If we are stuck in an apparent infinite loop, give up and assume the worst. + if (iterations > 10000) { + console.error('analyzeLoopedStack stuck in likely infinite loop; quitting', block, state); + modified = state.clear(); + block.entryState = state.clone(); + block.exitState = state.clone(); + modified = this.analyzeInputs(block.inputs, state) || modified; + return this.analyzeStack(stack, state) || modified; + } + iterations++; + const newState = state.clone(); modified = this.analyzeStack(stack, newState) || modified; modified = (keepLooping = state.or(newState)) || modified; diff --git a/test/fixtures/execute/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3 b/test/fixtures/execute/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3 new file mode 100644 index 0000000000000000000000000000000000000000..1d91e7bc4db94f2ec92bdf34eb6ae9660b1fc418 GIT binary patch literal 35213 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 literal 0 HcmV?d00001 diff --git a/test/snapshot/__snapshots__/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot b/test/snapshot/__snapshots__/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot new file mode 100644 index 00000000000..2244a1bfbde --- /dev/null +++ b/test/snapshot/__snapshots__/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot @@ -0,0 +1,29 @@ +// TW Snapshot +// Input SHA-256: a12680688ca945364abe1e094b35cf53326f70189cb09b58d5f52b4de0c3b2a9 + +// Text script +(function factoryXYZ(thread) { const target = thread.target; const runtime = target.runtime; const stage = runtime.getTargetForStage(); +const b0 = runtime.getOpcodeFunction("looks_say"); +return function* genXYZ () { +yield* executeInCompatibilityLayer({"MESSAGE":"plan 0",}, b0, false, false, "a~", null); +thread.procedures["Wtest 1"](); +yield* executeInCompatibilityLayer({"MESSAGE":"end",}, b0, false, false, "dh", null); +retire(); return; +}; }) + +// Text Wtest 1 +(function factoryXYZ(thread) { const target = thread.target; const runtime = target.runtime; const stage = runtime.getTargetForStage(); +const b0 = target.variables["ts-.PQ{/]mN_9@MbG:m/"]; +return function funXYZ_test_1 () { +for (var a0 = (+thread.procedures["Wany procedure reporter"]() || 0); a0 >= 0.5; a0--) { +b0.value = ((+b0.value || 0) + 1); +} +return ""; +}; }) + +// Text Wany procedure reporter +(function factoryXYZ(thread) { const target = thread.target; const runtime = target.runtime; const stage = runtime.getTargetForStage(); +return function funXYZ_any_procedure_report () { +return 0; +return ""; +}; }) diff --git a/test/snapshot/__snapshots__/warp-timer/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot b/test/snapshot/__snapshots__/warp-timer/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot new file mode 100644 index 00000000000..f3b5937c508 --- /dev/null +++ b/test/snapshot/__snapshots__/warp-timer/tw-repeat-procedure-reporter-infinite-analyzer-loop.sb3.tw-snapshot @@ -0,0 +1,30 @@ +// TW Snapshot +// Input SHA-256: a12680688ca945364abe1e094b35cf53326f70189cb09b58d5f52b4de0c3b2a9 + +// Text script +(function factoryXYZ(thread) { const target = thread.target; const runtime = target.runtime; const stage = runtime.getTargetForStage(); +const b0 = runtime.getOpcodeFunction("looks_say"); +return function* genXYZ () { +yield* executeInCompatibilityLayer({"MESSAGE":"plan 0",}, b0, false, false, "a~", null); +yield* thread.procedures["Wtest 1"](); +yield* executeInCompatibilityLayer({"MESSAGE":"end",}, b0, false, false, "dh", null); +retire(); return; +}; }) + +// Text Wtest 1 +(function factoryXYZ(thread) { const target = thread.target; const runtime = target.runtime; const stage = runtime.getTargetForStage(); +const b0 = target.variables["ts-.PQ{/]mN_9@MbG:m/"]; +return function* genXYZ_test_1 () { +for (var a0 = (+thread.procedures["Wany procedure reporter"]() || 0); a0 >= 0.5; a0--) { +b0.value = ((+b0.value || 0) + 1); +if (isStuck()) yield; +} +return ""; +}; }) + +// Text Wany procedure reporter +(function factoryXYZ(thread) { const target = thread.target; const runtime = target.runtime; const stage = runtime.getTargetForStage(); +return function funXYZ_any_procedure_report () { +return 0; +return ""; +}; })