Conversation
The local multiple-value-call translator gives MERGE one phi per optional
parameter and, in each switch case, builds that case's argument values and
then records the case's own block as the phi's predecessor. Building a
value can emit an INVOKE -- the checked unbox of a declared single-float
optional does, whenever a landing pad is in scope -- and IRC-CREATE-INVOKE-WFT
ends the current block and continues in a fresh normal-destination block.
The phi is then told about a block that no longer branches to MERGE:
PHI node entries do not match predecessors!
%phi263 = phi float [ undef, %lmvc-optional-0 ], [ %single-float276, %lmvc-optional-1 ], ...
label %lmvc-optional-3
label %normal-dest295
and the module is rejected, killing the image. Both loops now read the
insert block AFTER the values are built and use that as the predecessor,
for the optional cases and for the more-than-enough case alike; the values
computed before an invoke still dominate, since the block they are in
dominates the invoke's normal destination.
Reproduced on NeoCLIM (a CLIM II toolkit compiled natively on Clasp) with
FiveAM compiling test bodies at run time: the image died at test 1582 of
2099, in a MULTIPLE-VALUE-BIND of three single-floats from a typed function
inside an UNWIND-PROTECT. With this change the same procedure completes all
2099 with no verifier error. A minimal standalone case is not yet in hand --
twelve shapes, including that source form on its own, compile cleanly, so
the trigger needs type information the running image has accumulated -- and
this commit therefore carries no regression test; the hunt continues.
Scope: full ninja test on the rebuilt boehmprecise image, exit 0, 2070
successes, the same five pre-existing unexpected successes, no new failure.
This was referenced Sep 9, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DIRECT-MV-LOCAL-CALL-VASgives MERGE one phi per optional parameter, then in each switch case builds that case's argument values and records the case's own block as the phi predecessor.Building a value can emit an
invoke— the checked unbox a generated type-checker performs, whenever a landing pad is in scope — andIRC-CREATE-INVOKE-WFTends the block and continues in a freshnormal-dest. The phi is then told about a block that no longer branches to MERGE:Broken module → the image dies.
Repro (no minimal case yet — see below): a CLIM toolkit compiled natively, FiveAM compiling test bodies at run time; died at test 1582/2101 in a
MULTIPLE-VALUE-BINDof threesingle-floats from a typed function inside anUNWIND-PROTECT. With this change the same run completes all 2101.ninja test: exit 0, 2070 successes, no new failure…-CHECKERlocal functions