summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-10-25 10:24:58 -0700
committerCliff Click <cliffc@acm.org>2026-10-25 10:24:58 -0700
commit69e4a21f71aca4954469063387063434af35e679 (patch)
tree672e81600681625a22ed11f591b53d851f51c7d6 /docs
parent4051ce7cd26314f01dc8c0237899a742e0ab2084 (diff)
downloadSimple-69e4a21f71aca4954469063387063434af35e679.tar.gz
Simple-69e4a21f71aca4954469063387063434af35e679.zip
Backport a few missing guard checks
Diffstat (limited to 'docs')
-rw-r--r--docs/chapter-backports.md24
-rw-r--r--docs/stage-audit.md10
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.