Fix lit-init nodes

There was a loop in the definitions which meant nothing ever got made
This commit is contained in:
Owen Mansel-Chan
2026-05-30 07:07:50 +01:00
parent ec77691718
commit e68a77db63
2 changed files with 14 additions and 3 deletions

View File

@@ -1153,9 +1153,18 @@ module GoCfg {
not exists(lit.getElement(_)) and n2.isAfter(lit)
)
or
// After element → lit-init → next element or After
// After element → optional lit-index → lit-init → next element or After
exists(int i |
n1.isAfter(lit.getElement(i)) and n2.isAdditional(lit.getElement(i), "lit-init")
n1.isAfter(lit.getElement(i)) and
(
n2.isAdditional(lit.getElement(i), "lit-index")
or
not exists(PreControlFlowNode idx | idx.isAdditional(lit.getElement(i), "lit-index")) and
n2.isAdditional(lit.getElement(i), "lit-init")
)
or
n1.isAdditional(lit.getElement(i), "lit-index") and
n2.isAdditional(lit.getElement(i), "lit-init")
or
n1.isAdditional(lit.getElement(i), "lit-init") and
(

View File

@@ -1226,7 +1226,9 @@ module IR {
)
} or
/** A composite literal element target. */
MkLiteralElementTarget(InitLiteralComponentInstruction elt) or
MkLiteralElementTarget(ControlFlow::Node write) {
write.isAdditional(any(CompositeLit lit).getAnElement(), "lit-init")
} or
/** A result variable write target. */
MkResultWriteTarget(WriteResultInstruction w)