cue
cue copied to clipboard
evalv3: panic: unexpected overlay in next
What version of CUE are you using (cue version)?
$ cue version
cue version v0.0.0-20240903133435-46fb300df650
go version go1.23.0
-buildmode exe
-compiler gc
DefaultGODEBUG asynctimerchan=1,gotypesalias=0,httpservecontentkeepheaders=1,tls3des=1,tlskyber=0,x509keypairleaf=0,x509negativeserial=1
CGO_ENABLED 1
GOARCH arm64
GOOS linux
GOARM64 v8.0
vcs git
vcs.revision 46fb300df650bbaefdbe70d646a1a5b45f968c1f
vcs.time 2024-09-03T13:34:35Z
vcs.modified false
cue.lang.version v0.11.0
Does this issue reproduce with the latest release?
n/a - happens with tip.
What did you do?
Not yet reduced:
export CUE_EXPERIMENT=evalv3
cd $(mktemp -d)
git init
git fetch https://review.gerrithub.io/cue-lang/vscode-cue refs/changes/95/1200595/1 && git checkout FETCH_HEAD
cue export ./internal/ci/github/
What did you expect to see?
No panic.
What did you see instead?
$ cue export ./internal/ci/github/
panic: unexpected overlay in next [recovered]
panic: unexpected overlay in next [recovered]
panic: unexpected overlay in next
goroutine 1 [running]:
cuelang.org/go/internal/core/adt.runTask.func1()
/home/myitcv/dev/cuelang/cue/internal/core/adt/sched.go:695 +0xa4
panic({0x83cf40?, 0xad06c0?})
/home/myitcv/gos/src/runtime/panic.go:785 +0x124
cuelang.org/go/internal/core/adt.runTask.func1()
/home/myitcv/dev/cuelang/cue/internal/core/adt/sched.go:695 +0xa4
panic({0x83cf40?, 0xad06c0?})
/home/myitcv/gos/src/runtime/panic.go:785 +0x124
cuelang.org/go/internal/core/adt.(*overlayContext).initCloneCC(0x4001268640?, 0x4000dd3a40)
/home/myitcv/dev/cuelang/cue/internal/core/adt/overlay.go:354 +0x5d4
cuelang.org/go/internal/core/adt.(*overlayContext).cloneRoot(0x4001268640, 0x4000dd22d0?)
/home/myitcv/dev/cuelang/cue/internal/core/adt/overlay.go:91 +0x60
cuelang.org/go/internal/core/adt.(*nodeContext).doDisjunct(0x4000dd0c08, {0x4001151ce0, {0xad6e38, 0x400033db00}, {0x0, 0x4000dd22d0, 0x0, 0x0, 0x0, 0x0, ...}}, ...)
/home/myitcv/dev/cuelang/cue/internal/core/adt/disjunct2.go:416 +0x200
cuelang.org/go/internal/core/adt.(*nodeContext).crossProduct(0x4000dd0c08, {0x4001268918?, 0x400134c8a0?, 0xae2a40?}, {0x40012689c8, 0x1, 0x10?}, 0x40010457a0, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/disjunct2.go:345 +0x2dc
cuelang.org/go/internal/core/adt.(*nodeContext).processDisjunctions(0x4000dd0c08)
/home/myitcv/dev/cuelang/cue/internal/core/adt/disjunct2.go:279 +0x114
cuelang.org/go/internal/core/adt.processDisjunctions(0x96e5b2?, 0x4000dc5040, 0xb8?)
/home/myitcv/dev/cuelang/cue/internal/core/adt/tasks.go:189 +0x24
cuelang.org/go/internal/core/adt.runTask(0x4000dc5040, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/sched.go:715 +0x450
cuelang.org/go/internal/core/adt.(*scheduler).process(0x4000dd0dd8, 0x7eff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/sched.go:408 +0x1cc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x4000dc4e60, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:160 +0x1fc
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0x4000d75208, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:504 +0x1dc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x4000d6c8c0, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:227 +0x70c
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0x4000d68008, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:504 +0x1dc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x4000d4d860, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:227 +0x70c
cuelang.org/go/internal/core/adt.(*nodeContext).doDisjunct(0x4000d58608, {0x400095c660, {0xad7138, 0x40005973f0}, {0x0, 0x4000d5eff0, 0x0, 0x0, 0x0, 0x0, ...}}, ...)
/home/myitcv/dev/cuelang/cue/internal/core/adt/disjunct2.go:441 +0x488
cuelang.org/go/internal/core/adt.(*nodeContext).crossProduct(0x4000d58608, {0x400051b9b8?, 0x0?, 0x0?}, {0x4001269a68, 0x1, 0x10?}, 0x4000348070, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/disjunct2.go:345 +0x2dc
cuelang.org/go/internal/core/adt.(*nodeContext).processDisjunctions(0x4000d58608)
/home/myitcv/dev/cuelang/cue/internal/core/adt/disjunct2.go:279 +0x114
cuelang.org/go/internal/core/adt.processDisjunctions(0x96e5b2?, 0x4000d4d4a0, 0xb8?)
/home/myitcv/dev/cuelang/cue/internal/core/adt/tasks.go:189 +0x24
cuelang.org/go/internal/core/adt.runTask(0x4000d4d4a0, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/sched.go:715 +0x450
cuelang.org/go/internal/core/adt.(*scheduler).process(0x4000d587d8, 0x7eff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/sched.go:408 +0x1cc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x4000d4caa0, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:160 +0x1fc
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0x4000311208, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:504 +0x1dc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x40002670e0, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:227 +0x70c
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0x40005da008, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:504 +0x1dc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x40004ed9a0, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:227 +0x70c
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x4000266be0, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:284 +0x98c
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0x40005d6608, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:504 +0x1dc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x40004ed720, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:227 +0x70c
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0x40005c3808, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:504 +0x1dc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x4000379900, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:227 +0x70c
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x40003d9b80, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:284 +0x98c
cuelang.org/go/internal/core/adt.(*nodeContext).completeAllArcs(0x40005c2008, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:504 +0x1dc
cuelang.org/go/internal/core/adt.(*Vertex).unify(0x40003799a0, 0x40005c0000, 0x7fff, 0x4)
/home/myitcv/dev/cuelang/cue/internal/core/adt/unify.go:227 +0x70c
cuelang.org/go/internal/core/adt.(*OpContext).unify(0x400051d698?, 0x2de6f8?, 0x51d668?)
/home/myitcv/dev/cuelang/cue/internal/core/adt/eval.go:158 +0x2fc
cuelang.org/go/internal/core/adt.(*Vertex).Finalize(0x400051d628?, 0x40005c0000)
/home/myitcv/dev/cuelang/cue/internal/core/adt/composite.go:821 +0x58
cuelang.org/go/cue.newVertexRoot(0x40001d9440, 0x908ae0?, 0x40003799a0)
/home/myitcv/dev/cuelang/cue/cue/types.go:602 +0x2c
cuelang.org/go/cue.newValueRoot(0x0?, 0x400051d740?, {0xadee80?, 0x40003799a0?})
/home/myitcv/dev/cuelang/cue/cue/types.go:611 +0x3c
cuelang.org/go/cue.(*Context).make(0x40001d9440, 0x40003799a0)
/home/myitcv/dev/cuelang/cue/cue/context.go:252 +0x84
cuelang.org/go/cue.(*Context).BuildInstances(0x40001d9440, {0x400007bc08, 0x1, 0x0?})
/home/myitcv/dev/cuelang/cue/cue/context.go:150 +0x1ac
cuelang.org/go/cmd/cue/cmd.buildInstances(0x40001ecdb0, {0x400007bc08, 0x1, 0x10843e0?}, 0x0)
/home/myitcv/dev/cuelang/cue/cmd/cue/cmd/common.go:718 +0x38
...
Two projects in Unity run into what I think is the same panic; the stack trace looks extremely similar.
Below is a mostly reduced reproducer, as of f5f947e77ec6877e5664168a1e47696f2393b116:
env CUE_EXPERIMENT=evalv3=0
exec cue export
env CUE_EXPERIMENT=evalv3=1
exec cue export
-- main.cue --
package p
out: #Schema & {
steps: [{run: "example"}]
}
#Schema: {
steps: [...{run: string}]
#matrixConfig: string | [...#matrixConfig]
matrix?: ({...} | string) & {
{[=~"^foo"]: [...{[string]: #matrixConfig}]}
{[=~"^bar"]: [...#matrixConfig] | string}
}
}
> env CUE_EXPERIMENT=evalv3=0
> exec cue export
[stdout]
{
"out": {
"steps": [
{
"run": "example"
}
]
}
}
> env CUE_EXPERIMENT=evalv3=1
> exec cue export
[stderr]
panic: unexpected overlay in next [recovered]
panic: unexpected overlay in next
[...]
Further reduced reproducer:
({} | {})
{["x"]: 1}
{["y"]: 2}