cue-lang / cue

The home of the CUE language! Validate and define text-based and dynamic configuration
https://cuelang.org
Apache License 2.0
5.02k stars 287 forks source link

evalv3: stack overflow with `matchN` #3443

Open rogpeppe opened 1 week ago

rogpeppe commented 1 week ago

What version of CUE are you using (cue version)?

$ cue version
v0.11.0-alpha.1.0.20240910154854-15fbf7f75d7d

Does this issue reproduce with the latest stable release?

N/A

What did you do?

env CUE_EXPERIMENT=evalv3
exec cue vet x.cue
-- x.cue --
#S: matchN(1, [{n?: #S & (int | {})}])

What did you expect to see?

Passing test.

What did you see instead?

> env CUE_EXPERIMENT=evalv3
> exec cue vet x.cue
[stderr]
runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0xc050000330 stack=[0xc050000000, 0xc070000000]
fatal error: stack overflow

runtime stack:
runtime.throw({0xe104af?, 0x42c47c?})
    /home/rogpeppe/go/src/runtime/panic.go:1067 +0x48 fp=0x7aaf0bdffc98 sp=0x7aaf0bdffc68 pc=0x473048
runtime.newstack()
    /home/rogpeppe/go/src/runtime/stack.go:1117 +0x5bb fp=0x7aaf0bdffdd0 sp=0x7aaf0bdffc98 pc=0x4572fb
runtime.morestack()
    /home/rogpeppe/go/src/runtime/asm_amd64.s:621 +0x7a fp=0x7aaf0bdffdd8 sp=0x7aaf0bdffdd0 pc=0x4794fa

goroutine 1 gp=0xc000002380 m=8 mp=0xc000580008 [running]:
runtime.deductAssistCredit(0x40?)
    /home/rogpeppe/go/src/runtime/malloc.go:1333 +0x70 fp=0xc050000340 sp=0xc050000338 pc=0x4123b0
runtime.mallocgc(0x40, 0xd93460, 0x1)
    /home/rogpeppe/go/src/runtime/malloc.go:1037 +0xde fp=0xc0500003e0 sp=0xc050000340 pc=0x46d97e
runtime.growslice(0x0, 0x0?, 0x0?, 0x0?, 0xd93460)
    /home/rogpeppe/go/src/runtime/slice.go:272 +0x55d fp=0ts: exit 1
xc050000450 sp=0xc0500003e0 pc=0x47585d
cuelang.org/go/internal/core/adt.(*Vertex).addConjunctUnchecked(0xc09f80caa0, {0x0, {0xf78ed0, 0xc09f80e108}, {0x0, 0xc09f807e00, 0x0, 0x0, 0x0, 0x0, ...}})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/composite.go:1252 +0x4e fp=0xc0500004d8 sp=0xc050000450 pc=0x6e274e
cuelang.org/go/internal/core/adt.(*Vertex).assignConjunct(0x1000000000000?, 0x7aaf0379a6a8?, 0xc09f807e00, {0x0, {0xf78ed0, 0xc09f80e108}, {0x0, 0xc09f807e00, 0x0, 0x0, ...}}, ...)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/fields.go:365 +0xe5 fp=0xc050000548 sp=0xc0500004d8 pc=0x720b25
cuelang.org/go/internal/core/adt.(*closeContext).getKeyedCC(0xc09f807d10, 0xc0000e8a80, 0xc09f807e00, {0x80?, 0x7f?, 0xc09f814120?}, 0x0, 0x1)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/fields.go:385 +0x1df fp=0xc050000628 sp=0xc050000548 pc=0x720d7f
cuelang.org/go/internal/core/adt.(*closeContext).assignConjunct(0x0?, 0xc0500007b0?, 0x6de79a?, {0xc09f8045a0, {0xf78d78, 0xc000350bd0}, {0x0, 0xc09f807d10, 0x0, 0x0, ...}}, ...)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/fields.go:445 +0x4d fp=0xc050000738 sp=0xc050000628 pc=0x72110d
cuelang.org/go/internal/core/adt.(*closeContext).insertConjunct(0xc09f807d10, 0xc0000e8a80, 0xc09f807e00, {0xc09f8045a0, {0xf78d78, 0xc000350bd0}, {0x0, 0xc09f807d10, 0x0, 0x0, ...}}, ...)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/fields.go:744 +0x85 fp=0xc0500007f0 sp=0xc050000738 pc=0x722365
cuelang.org/go/internal/core/adt.(*nodeContext).insertArcCC(0xc09f813808, 0x2, 0x0, {0xc09f8045a0, {0xf78d78, 0xc000350bd0}, {0x0, 0xc09f807d10, 0x0, 0x0, ...}}, ...)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/fields.go:819 +0x225 fp=0xc050000940 sp=0xc0500007f0 pc=0x722865
cuelang.org/go/internal/core/adt.(*nodeContext).insertArc(...)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/fields.go:779
cuelang.org/go/internal/core/adt.processListLit(0xc0000e8a80, 0xc09f80ca00, 0x0?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/tasks.go:252 +0x4fa fp=0xc050000ad0 sp=0xc050000940 pc=0x72c59a
cuelang.org/go/internal/core/adt.runTask(0xc09f80ca00, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:715 +0x545 fp=0xc050000ce8 sp=0xc050000ad0 pc=0x7291c5
cuelang.org/go/internal/core/adt.(*scheduler).signal(0xc09f8139d8, 0x0?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:532 +0xdd fp=0xc050000d28 sp=0xc050000ce8 pc=0x72899d
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc09f80c960, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:156 +0x285 fp=0xc050000f70 sp=0xc050000d28 pc=0x72dea5
cuelang.org/go/internal/core/adt.(*OpContext).unify(0xa0?, 0xdeec80?, 0x3ef401?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/eval.go:162 +0x339 fp=0xc0500011c0 sp=0xc050000f70 pc=0x705dd9
cuelang.org/go/internal/core/adt.(*Vertex).CompleteArcs(0x10?, 0xc0000e8a80?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/composite.go:831 +0x25 fp=0xc0500011e8 sp=0xc0500011c0 pc=0x6e0705
cuelang.org/go/internal/core/adt.(*ListLit).evaluate(0xc00011d800, 0xc0000e8a80, 0x9f7c1c30?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:298 +0x149 fp=0xc050001230 sp=0xc0500011e8 pc=0x715209
cuelang.org/go/internal/core/adt.(*OpContext).evalState(0xc0000e8a80, {0xf80b20, 0xc00011d800}, 0x90200)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/context.go:716 +0x932 fp=0xc0500013a0 sp=0xc050001230 pc=0x6f1732
cuelang.org/go/internal/core/adt.(*CallExpr).evaluate(0xc00011d7d0, 0xc0000e8a80, 0x80200)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1521 +0x4a5 fp=0xc0500014a0 sp=0xc0500013a0 pc=0x71b265
cuelang.org/go/internal/core/adt.(*OpContext).evalState(0xc0000e8a80, {0xf80960, 0xc00011d7d0}, 0x80200)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/context.go:716 +0x932 fp=0xc050001610 sp=0xc0500014a0 pc=0x6f1732
cuelang.org/go/internal/core/adt.processExpr(0xc0002f79c0?, 0xc09f80c8c0, 0xd0?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/tasks.go:88 +0xbc fp=0xc050001698 sp=0xc050001610 pc=0x72b25c
cuelang.org/go/internal/core/adt.runTask(0xc09f80c8c0, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:715 +0x545 fp=0xc0500018b0 sp=0xc050001698 pc=0x7291c5
cuelang.org/go/internal/core/adt.(*scheduler).process(0xc09f8133d8, 0x24, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:408 +0x21f fp=0xc050001980 sp=0xc0500018b0 pc=0x72849f
cuelang.org/go/internal/core/adt.(*nodeContext).completeNodeTasks(0xc09f813208, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:391 +0x165 fp=0xc050001a00 sp=0xc050001980 pc=0x72f025
cuelang.org/go/internal/core/adt.runTask.func1()
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:681 +0x30 fp=0xc050001a28 sp=0xc050001a00 pc=0x729610
cuelang.org/go/internal/core/adt.runTask(0xc09f80c780, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:737 +0x6ff fp=0xc050001c40 sp=0xc050001a28 pc=0x72937f
cuelang.org/go/internal/core/adt.(*scheduler).process(0xc09f8133d8, 0x7eff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:408 +0x21f fp=0xc050001d10 sp=0xc050001c40 pc=0x72849f
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc09f80c6e0, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:160 +0x2bf fp=0xc050001f58 sp=0xc050001d10 pc=0x72dedf
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0xc09f812c08, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:504 +0x235 fp=0xc050002000 sp=0xc050001f58 pc=0x72f675
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc09f80c640, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:227 +0x8a6 fp=0xc050002248 sp=0xc050002000 pc=0x72e4c6
cuelang.org/go/internal/core/adt.(*OpContext).unify(0x412485?, 0xa0?, 0xdeec80?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/eval.go:162 +0x339 fp=0xc050002498 sp=0xc050002248 pc=0x705dd9
cuelang.org/go/internal/core/adt.(*Vertex).Finalize(0xc09f8044e0?, 0xc0000e8a80)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/composite.go:825 +0x59 fp=0xc0500024c8 sp=0xc050002498 pc=0x6e0679
cuelang.org/go/internal/core/compile.unifyValidator(0xc0000e8a80, {0xf84160, 0xc09f80c5a0}, {0xf84160, 0xc09f80c0a0})
    /home/rogpeppe/src/cuelabs/cue/internal/core/compile/validator.go:125 +0x27a fp=0xc0500025c8 sp=0xc0500024c8 pc=0x77f19a
cuelang.org/go/internal/core/compile.init.func9(0xc0000e8a80, {0xc09f814090, 0x3, 0x10?})
    /home/rogpeppe/src/cuelabs/cue/internal/core/compile/validator.go:47 +0x24e fp=0xc050002648 sp=0xc0500025c8 pc=0x773ece
cuelang.org/go/internal/core/adt.(*Builtin).call(0x1531d40, 0xc0000e8a80, {0xc00015d420?, 0xc000580008?}, 0x1, {0xc09f814090?, 0xc050002820?, 0x46d97e?})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1682 +0x89d fp=0xc050002750 sp=0xc050002648 pc=0x71c45d
cuelang.org/go/internal/core/adt.validateWithBuiltin(0xc0000e8a80, {0xc00015d420?, 0xc050002908?}, 0x1531d40, {0xc09f814090, 0x3, 0xdceba0?})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1730 +0x7d fp=0xc050002878 sp=0xc050002750 pc=0x71ccbd
cuelang.org/go/internal/core/adt.(*BuiltinValidator).validate(0xc09f7a9f50, 0xc0000e8a80, {0xf84160, 0xc09f80c500})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1723 +0xdb fp=0xc0500028d8 sp=0xc050002878 pc=0x71cbfb
cuelang.org/go/internal/core/adt.(*OpContext).Validate(0xc0000e8a80, {0xf85998, 0xc09f7a9f50}, {0xf84160, 0xc09f80c500})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/context.go:544 +0x99 fp=0xc050002918 sp=0xc0500028d8 pc=0x6efd99
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc09f80c500, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:248 +0xde7 fp=0xc050002b60 sp=0xc050002918 pc=0x72ea07
cuelang.org/go/internal/core/adt.(*nodeContext).doDisjunct(0xc09f809808, {0xc09f804220, {0xf78d78, 0xc000350c60}, {0x0, 0xc09f807770, 0x0, 0x0, 0x0, 0x0, ...}}, ...)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/disjunct2.go:439 +0x585 fp=0xc050002d70 sp=0xc050002b60 pc=0x700b45
cuelang.org/go/internal/core/adt.(*nodeContext).crossProduct(0xc09f809808, {0xc050002fe0?, 0x8?, 0xc09f805f80?}, {0xc050003078, 0x1, 0xc09f7c1f80?}, 0xc09f7e67e0, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/disjunct2.go:345 +0x3c5 fp=0xc050002f28 sp=0xc050002d70 pc=0x700205
cuelang.org/go/internal/core/adt.(*nodeContext).processDisjunctions(0xc09f809808)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/disjunct2.go:279 +0x165 fp=0xc050003098 sp=0xc050002f28 pc=0x6ffaa5
cuelang.org/go/internal/core/adt.processDisjunctions(0xe0eaf7?, 0xc09f7f9d60, 0x66?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/tasks.go:190 +0x1c fp=0xc0500030d8 sp=0xc050003098 pc=0x72c01c
cuelang.org/go/internal/core/adt.runTask(0xc09f7f9d60, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:715 +0x545 fp=0xc0500032f0 sp=0xc0500030d8 pc=0x7291c5
cuelang.org/go/internal/core/adt.(*scheduler).process(0xc09f8099d8, 0x24, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:408 +0x21f fp=0xc0500033c0 sp=0xc0500032f0 pc=0x72849f
cuelang.org/go/internal/core/adt.(*nodeContext).completeNodeTasks(0xc09f809808, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:391 +0x165 fp=0xc050003440 sp=0xc0500033c0 pc=0x72f025
cuelang.org/go/internal/core/adt.runTask.func1()
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:681 +0x30 fp=0xc050003468 sp=0xc050003440 pc=0x729610
cuelang.org/go/internal/core/adt.runTask(0xc09f7f9cc0, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:737 +0x6ff fp=0xc050003680 sp=0xc050003468 pc=0x72937f
cuelang.org/go/internal/core/adt.(*scheduler).process(0xc09f8099d8, 0x7eff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:408 +0x21f fp=0xc050003750 sp=0xc050003680 pc=0x72849f
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc09f7f9c20, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:160 +0x2bf fp=0xc050003998 sp=0xc050003750 pc=0x72dedf
...1757520 frames elided...
cuelang.org/go/internal/core/adt.(*Builtin).call(0x1531d40, 0xc0000e8a80, {0xc00015d420?, 0xc000076e08?}, 0x1, {0xc000266660?, 0xc00038ec20?, 0x46d97e?})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1682 +0x89d fp=0xc06fffcb50 sp=0xc06fffca48 pc=0x71c45d
cuelang.org/go/internal/core/adt.validateWithBuiltin(0xc0000e8a80, {0xc00015d420?, 0xc00038ed08?}, 0x1531d40, {0xc000266660, 0x3, 0xdceba0?})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1730 +0x7d fp=0xc06fffcc78 sp=0xc06fffcb50 pc=0x71ccbd
cuelang.org/go/internal/core/adt.(*BuiltinValidator).validate(0xc0002664b0, 0xc0000e8a80, {0xf84160, 0xc0000f40a0})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1723 +0xdb fp=0xc06fffccd8 sp=0xc06fffcc78 pc=0x71cbfb
cuelang.org/go/internal/core/adt.(*OpContext).Validate(0xc0000e8a80, {0xf85998, 0xc0002664b0}, {0xf84160, 0xc0000f40a0})
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/context.go:544 +0x99 fp=0xc06fffcd18 sp=0xc06fffccd8 pc=0x6efd99
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc0000f40a0, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:248 +0xde7 fp=0xc06fffcf60 sp=0xc06fffcd18 pc=0x72ea07
cuelang.org/go/internal/core/adt.(*nodeContext).doDisjunct(0xc0000f1208, {0xc0002f7a80, {0xf78d78, 0xc000350c60}, {0x0, 0xc0000ef770, 0x0, 0x0, 0x0, 0x0, ...}}, ...)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/disjunct2.go:439 +0x585 fp=0xc06fffd170 sp=0xc06fffcf60 pc=0x700b45
cuelang.org/go/internal/core/adt.(*nodeContext).crossProduct(0xc0000f1208, {0xc00038f3e0?, 0x6e364f?, 0x1519570?}, {0xc06fffd478, 0x1, 0xc000043f80?}, 0xc00015d490, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/disjunct2.go:345 +0x3c5 fp=0xc06fffd328 sp=0xc06fffd170 pc=0x700205
cuelang.org/go/internal/core/adt.(*nodeContext).processDisjunctions(0xc0000f1208)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/disjunct2.go:279 +0x165 fp=0xc06fffd498 sp=0xc06fffd328 pc=0x6ffaa5
cuelang.org/go/internal/core/adt.processDisjunctions(0xe0eaf7?, 0xc0000d7900, 0x66?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/tasks.go:190 +0x1c fp=0xc06fffd4d8 sp=0xc06fffd498 pc=0x72c01c
cuelang.org/go/internal/core/adt.runTask(0xc0000d7900, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:715 +0x545 fp=0xc06fffd6f0 sp=0xc06fffd4d8 pc=0x7291c5
cuelang.org/go/internal/core/adt.(*scheduler).process(0xc0000f13d8, 0x24, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:408 +0x21f fp=0xc06fffd7c0 sp=0xc06fffd6f0 pc=0x72849f
cuelang.org/go/internal/core/adt.(*nodeContext).completeNodeTasks(0xc0000f1208, 0x2)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:391 +0x165 fp=0xc06fffd840 sp=0xc06fffd7c0 pc=0x72f025
cuelang.org/go/internal/core/adt.runTask.func1()
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:681 +0x30 fp=0xc06fffd868 sp=0xc06fffd840 pc=0x729610
cuelang.org/go/internal/core/adt.runTask(0xc0000d7860, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:737 +0x6ff fp=0xc06fffda80 sp=0xc06fffd868 pc=0x72937f
cuelang.org/go/internal/core/adt.(*scheduler).process(0xc0000f13d8, 0x7eff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:408 +0x21f fp=0xc06fffdb50 sp=0xc06fffda80 pc=0x72849f
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc0000d77c0, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:160 +0x2bf fp=0xc06fffdd98 sp=0xc06fffdb50 pc=0x72dedf
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0xc0000f0c08, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:504 +0x235 fp=0xc06fffde40 sp=0xc06fffdd98 pc=0x72f675
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc0000d7720, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:227 +0x8a6 fp=0xc06fffe088 sp=0xc06fffde40 pc=0x72e4c6
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0xc0000f0608, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:504 +0x235 fp=0xc06fffe130 sp=0xc06fffe088 pc=0x72f675
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc0000d75e0, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:227 +0x8a6 fp=0xc06fffe378 sp=0xc06fffe130 pc=0x72e4c6
cuelang.org/go/internal/core/adt.(*OpContext).unify(0xa0?, 0xdeec80?, 0xd3e401?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/eval.go:162 +0x339 fp=0xc06fffe5c8 sp=0xc06fffe378 pc=0x705dd9
cuelang.org/go/internal/core/adt.(*Vertex).CompleteArcs(0x41019f?, 0xc0000e8a80?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/composite.go:831 +0x25 fp=0xc06fffe5f0 sp=0xc06fffe5c8 pc=0x6e0705
cuelang.org/go/internal/core/adt.(*ListLit).evaluate(0xc00011d800, 0xc0000e8a80, 0x42ac0?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:298 +0x149 fp=0xc06fffe638 sp=0xc06fffe5f0 pc=0x715209
cuelang.org/go/internal/core/adt.(*OpContext).evalState(0xc0000e8a80, {0xf80b20, 0xc00011d800}, 0x90400)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/context.go:716 +0x932 fp=0xc06fffe7a8 sp=0xc06fffe638 pc=0x6f1732
cuelang.org/go/internal/core/adt.(*CallExpr).evaluate(0xc00011d7d0, 0xc0000e8a80, 0x80400)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/expr.go:1521 +0x4a5 fp=0xc06fffe8a8 sp=0xc06fffe7a8 pc=0x71b265
cuelang.org/go/internal/core/adt.(*OpContext).evalState(0xc0000e8a80, {0xf80960, 0xc00011d7d0}, 0x80400)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/context.go:716 +0x932 fp=0xc06fffea18 sp=0xc06fffe8a8 pc=0x6f1732
cuelang.org/go/internal/core/adt.processExpr(0xc0000e8a80?, 0xc0000d7540, 0x4?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/tasks.go:88 +0xbc fp=0xc06fffeaa0 sp=0xc06fffea18 pc=0x72b25c
cuelang.org/go/internal/core/adt.runTask(0xc0000d7540, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:715 +0x545 fp=0xc06fffecb8 sp=0xc06fffeaa0 pc=0x7291c5
cuelang.org/go/internal/core/adt.(*scheduler).process(0xc0000f01d8, 0x7eff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/sched.go:408 +0x21f fp=0xc06fffed88 sp=0xc06fffecb8 pc=0x72849f
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc0000d74a0, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:160 +0x2bf fp=0xc06fffefd0 sp=0xc06fffed88 pc=0x72dedf
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0xc000381808, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:504 +0x235 fp=0xc06ffff078 sp=0xc06fffefd0 pc=0x72f675
cuelang.org/go/internal/core/adt.(*Vertex).unify(0xc0000d7400, 0xc0000e8a80, 0x7fff, 0x4)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/unify.go:227 +0x8a6 fp=0xc06ffff2c0 sp=0xc06ffff078 pc=0x72e4c6
cuelang.org/go/internal/core/adt.(*OpContext).unify(0x90?, 0xf78d78?, 0x3915c0?)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/eval.go:162 +0x339 fp=0xc06ffff510 sp=0xc06ffff2c0 pc=0x705dd9
cuelang.org/go/internal/core/adt.(*Vertex).Finalize(0x0?, 0xc0000e8a80)
    /home/rogpeppe/src/cuelabs/cue/internal/core/adt/composite.go:825 +0x59 fp=0xc06ffff540 sp=0xc06ffff510 pc=0x6e0679
cuelang.org/go/cue.newVertexRoot(0xc00026b400, 0x1?, 0xc0000d7400)
    /home/rogpeppe/src/cuelabs/cue/cue/types.go:602 +0x25 fp=0xc06ffff568 sp=0xc06ffff540 pc=0x94e585
cuelang.org/go/cue.newValueRoot(0x0?, 0xc000391680?, {0xf80620?, 0xc0000d7400?})
    /home/rogpeppe/src/cuelabs/cue/cue/types.go:611 +0x3e fp=0xc06ffff640 sp=0xc06ffff568 pc=0x94e61e
cuelang.org/go/cue.(*Context).make(0xc00026b400, 0xc0000d7400)
    /home/rogpeppe/src/cuelabs/cue/cue/context.go:252 +0x79 fp=0xc06ffff6a8 sp=0xc06ffff640 pc=0x93d8f9
cuelang.org/go/cue.(*Context).BuildInstances(0xc00026b400, {0xc06ffff950, 0x1, 0x1e0?})
    /home/rogpeppe/src/cuelabs/cue/cue/context.go:150 +0x1e5 fp=0xc06ffff758 sp=0xc06ffff6a8 pc=0x93cc05
cuelang.org/go/cmd/cue/cmd.buildInstances(0xc000282e10, {0xc06ffff950, 0x1, 0xc000157738?}, 0x1)
    /home/rogpeppe/src/cuelabs/cue/cmd/cue/cmd/common.go:718 +0x45 fp=0xc06ffff800 sp=0xc06ffff758 pc=0xc2dc45
cuelang.org/go/cmd/cue/cmd.parseArgs(0xc000282e10, {0xc0002b2180, 0x1, 0x1}, 0xc00026ec80)
    /home/rogpeppe/src/cuelabs/cue/cmd/cue/cmd/common.go:597 +0xc3c fp=0xc06ffff968 sp=0xc06ffff800 pc=0xc2ca7c
cuelang.org/go/cmd/cue/cmd.doVet(0xc000282e10, {0xc0002b2180, 0x1, 0x1})
    /home/rogpeppe/src/cuelabs/cue/cmd/cue/cmd/vet.go:92 +0x87 fp=0xc06ffffa60 sp=0xc06ffff968 pc=0xc5d207
cuelang.org/go/cmd/cue/cmd.newVetCmd.mkRunE.func1(0xc0001bba00?, {0xc0002b2180, 0x1, 0x1})
    /home/rogpeppe/src/cuelabs/cue/cmd/cue/cmd/root.go:136 +0x2c2 fp=0xc06ffffc48 sp=0xc06ffffa60 pc=0xc5cb42
github.com/spf13/cobra.(*Command).execute(0xc0002b0c08, {0xc0002b2140, 0x1, 0x1})
    /home/rogpeppe/src/go/pkg/mod/github.com/spf13/cobra@v1.8.1/command.go:985 +0xaaa fp=0xc06ffffdd0 sp=0xc06ffffc48 pc=0x5fd30a
github.com/spf13/cobra.(*Command).ExecuteC(0xc00027e308)
    /home/rogpeppe/src/go/pkg/mod/github.com/spf13/cobra@v1.8.1/command.go:1117 +0x3ff fp=0xc06ffffea8 sp=0xc06ffffdd0 pc=0x5fdbdf
github.com/spf13/cobra.(*Command).Execute(...)
    /home/rogpeppe/src/go/pkg/mod/github.com/spf13/cobra@v1.8.1/command.go:1041
cuelang.org/go/cmd/cue/cmd.(*Command).Run(0xc000282e10, {0x1571060?, 0xd26180?})
    /home/rogpeppe/src/cuelabs/cue/cmd/cue/cmd/root.go:368 +0x1c fp=0xc06ffffec0 sp=0xc06ffffea8 pc=0xc5acfc
cuelang.org/go/cmd/cue/cmd.Main()
    /home/rogpeppe/src/cuelabs/cue/cmd/cue/cmd/root.go:276 +0x95 fp=0xc06fffff38 sp=0xc06ffffec0 pc=0xc5a855
main.main()
    /home/rogpeppe/src/cuelabs/cue/cmd/cue/main.go:24 +0x13 fp=0xc06fffff50 sp=0xc06fffff38 pc=0xc7e0f3
runtime.main()
    /home/rogpeppe/go/src/runtime/proc.go:283 +0x28b fp=0xc06fffffe0 sp=0xc06fffff50 pc=0x43e46b
runtime.goexit({})
    /home/rogpeppe/go/src/runtime/asm_amd64.s:1700 +0x1 fp=0xc06fffffe8 sp=0xc06fffffe0 pc=0x47b3a1
[exit status 2]
FAIL: /tmp/y.txtar:2: unexpected command failure
rogpeppe commented 1 week ago

Note: this issue also applies to matchIf:

#S: matchIf({x?: "b"}, {n?: #S & (int | {})}, _)