diff --git a/mps/code/trans.c b/mps/code/trans.c index a8821d48e04..3fb0d2c304d 100644 --- a/mps/code/trans.c +++ b/mps/code/trans.c @@ -170,7 +170,10 @@ Res TransformAddOldNew(Transform transform, if (old_list[i] == new_list[i]) continue; /* ignore identity-transforms */ - /* Old refs must be in managed memory. */ + /* .old-white: Old refs must be in managed memory, because + transformFix is only reached when a reference is to something + in the condemned set. Other referenes are eliminated by + TraceFix, and we can't (currently) transformation of them. */ { Seg seg; AVER(SegOfAddr(&seg, transform->arena, old_list[i])); diff --git a/mps/design/transform.txt b/mps/design/transform.txt index 96403ce2577..5767283e882 100644 --- a/mps/design/transform.txt +++ b/mps/design/transform.txt @@ -92,6 +92,9 @@ Not yet written * Why the arena must be parked [When writing this up see impl.c.trans.park. RB 2023-06-16]. +* Why we can't transform arbitrary references (see + impl.c.trans.old-white). + References ---------- diff --git a/mps/manual/source/topic/transform.rst b/mps/manual/source/topic/transform.rst index 1d19809aece..9381603436e 100644 --- a/mps/manual/source/topic/transform.rst +++ b/mps/manual/source/topic/transform.rst @@ -104,7 +104,9 @@ Interface ``transform`` is the transform to which the mappings will be added. - ``old_array`` points to an array of old references. + ``old_array`` points to an array of old references, all of which + must be to objects in pools whose blocks are automatically managed + (see :ref:`pool-properties`). ``new_array`` points to an array of corresponding new references.