cue icon indicating copy to clipboard operation
cue copied to clipboard

evalv3: panic: unexpected overlay in next

Open myitcv opened this issue 1 year ago • 3 comments

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
...

myitcv avatar Sep 03 '24 15:09 myitcv

Two projects in Unity run into what I think is the same panic; the stack trace looks extremely similar.

mvdan avatar Oct 10 '24 10:10 mvdan

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
[...]

mvdan avatar Oct 14 '24 16:10 mvdan

Further reduced reproducer:

({} | {})
{["x"]: 1}
{["y"]: 2}

mpvl avatar Oct 19 '24 12:10 mpvl