diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-25 10:24:58 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-25 10:24:58 -0700 |
| commit | 69e4a21f71aca4954469063387063434af35e679 (patch) | |
| tree | 672e81600681625a22ed11f591b53d851f51c7d6 /docs | |
| parent | 4051ce7cd26314f01dc8c0237899a742e0ab2084 (diff) | |
| download | Simple-69e4a21f71aca4954469063387063434af35e679.tar.gz Simple-69e4a21f71aca4954469063387063434af35e679.zip | |
Backport a few missing guard checks
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/chapter-backports.md | 24 | ||||
| -rw-r--r-- | docs/stage-audit.md | 10 |
2 files changed, 8 insertions, 26 deletions
diff --git a/docs/chapter-backports.md b/docs/chapter-backports.md index 1c2ffb85..e7293d8c 100644 --- a/docs/chapter-backports.md +++ b/docs/chapter-backports.md @@ -132,30 +132,6 @@ Establish the first affected evaluator and check signed fields and floating rounding before propagating a fix. Do not change valid generated code to match an incorrect ideal evaluator. -### Constructor loop with break/continue: worklist assertion - -This fails in construction and in the unchanged escape compiler before the -final-field fix, even with a mutable field: - -```simple -struct C { - int x=0; - new C={int n -> - for(int i=0;i<n;i++) { - if(i==1) continue; - if(i==3) break; - x+=i+1; - } - }; -}; -return new C(arg).x; -``` - -`IterPeeps.progressOnList` asserts during Iter with seed 123. The expected value -for arg 3 is 4. This is independent of final-field mutability; retain the -reproducer while reviewing constructor coverage. Scratch probe: -`build/readme-review/mutable_break.smp`. - ### SCCP function revival: Chapter 24 `Opto.linkCG` uses `code.link(fidx)`, which clears a linker entry when its diff --git a/docs/stage-audit.md b/docs/stage-audit.md index dac2dc77..abf90ace 100644 --- a/docs/stage-audit.md +++ b/docs/stage-audit.md @@ -57,6 +57,14 @@ expectations remain unchanged. No allocator goldens were updated. ## Implemented, with narrower limits than earlier prose suggested +The constructor-loop assertion is fixed in Chapters 25–27. Load forwarding now +waits for a stored loop Phi to acquire a type at least as precise as the Load, +and records a dependency to retry. The reduced case needs only a conditional +assignment in a loop; break/continue and final fields are not required. +Regressions cover the reduced case and the original constructor loop across +worklist seeds and execution inputs. Chapters 28a/28b already had the guard; +the corresponding earlier-chapter probes pass in 23/24a/24b. + - Separate compilation imports types and optimized IR without source parsing; it reruns analysis and type checking with the new callers. - Loading is by object and recorded dependencies, not individual used members. @@ -76,8 +84,6 @@ expectations remain unchanged. No allocator goldens were updated. - The ideal evaluator does not truncate narrow stores in Chapter 23. A byte update can therefore disagree with generated code; the postfix-only reproducer is retained in the [queue](chapter-backports.md). -- A constructor loop with both break and continue still reproduces a worklist - assertion in Chapter 26. It is not caused by final-field mutability. - `testModule0` is an ignored historical incremental-build experiment. It assumes per-source output objects and unchanged explicit-input builds, neither of which matches the present compiler's contract. |
