Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/cue: stack overflow with cmd "identical" to export #3781

Open
myitcv opened this issue Feb 23, 2025 · 1 comment
Open

cmd/cue: stack overflow with cmd "identical" to export #3781

myitcv opened this issue Feb 23, 2025 · 1 comment

Comments

@myitcv
Copy link
Member

myitcv commented Feb 23, 2025

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

$ cue version
cue version v0.13.0-0.dev.0.20250221114952-15a702eab521

go version go1.24.0
      -buildmode exe
       -compiler gc
  DefaultGODEBUG gotestjsonbuildtext=1,multipathtcp=0,randseednop=0,rsa1024min=0,tlsmlkem=0,x509rsacrt=0,x509usepolicies=0
     CGO_ENABLED 1
          GOARCH arm64
            GOOS linux
         GOARM64 v8.0
             vcs git
    vcs.revision 15a702eab5214e8ee537e74c1ef3c5429a011eca
        vcs.time 2025-02-21T11:49:52Z
    vcs.modified false
cue.lang.version v0.13.0

Does this issue reproduce with the latest release?

Yes

What did you do?

env CUE_EXPERIMENT=evalv3=1
env CUE_DEBUG=openinline=0

# export
exec cue export -e xx
cmp stdout stdout.golden

# cmd
exec cue cmd other
cmp stdout stdout.golden

-- x.cue --
package site

xx: {
	for _, cmd in (command & {siteCueVersionLabels: []}).cue {
		"page.cue": Contents: "test"
	}
}

command: {
	siteCueVersionLabels: _

	cue: {
		[or(tags.cue.modules)]: tagSet: modules: _
	}
	tags: "cue": [_]: [...or([for command, _ in cue {command}])]
	tags: cue: {
		modules: [
			"cue",
		]
	}
}

-- x_tool.cue --
package site

import (
	"encoding/json"
	"tool/cli"
)

command: other: cli.Print & {
	text: json.Marshal(xx)
}

-- stdout.golden --
{}

What did you expect to see?

Passing test

What did you see instead?

Stack overflow in cue cmd call:

# export (0.054s)
# cmd (2.168s)
> exec cue cmd other
[stderr]
runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0x4022580360 stack=[0x4022580000, 0x4042580000]
fatal error: stack overflow

runtime stack:
runtime.throw({0xbb1fbb?, 0x0?})
        /home/myitcv/gos/src/runtime/panic.go:1096 +0x38 fp=0xffffede51670 sp=0xffffede51640 pc=0x89ca8
runtime.newstack()
        /home/myitcv/gos/src/runtime/stack.go:1107 +0x45c fp=0xffffede517b0 sp=0xffffede51670 pc=0x6e28c
runtime.morestack()
        /home/myitcv/gos/src/runtime/asm_arm64.s:342 +0x70 fp=0xffffede517b0 sp=0xffffede517b0 pc=0x8f9b0

goroutine 1 gp=0x40000021c0 m=0 mp=0x14610a0 [running]:
cuelang.org/go/internal/core/adt.(*FieldReference).resolve(0x400111c710, 0x4002540d20, 0x210302)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/expr.go:760 +0x84 fp=0x4022580360 sp=0x4022580360 pc=0x305f04
cuelang.org/go/internal/core/adt.(*OpContext).unifyNode(0x4002540d20, {0xd6a920, 0x400111c710}, 0x210302)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/context.go:817 +0x164 fp=0x4022580420 sp=0x4022580360 pc=0x2e1594
cuelang.org/go/internal/core/adt.(*OpContext).node(0x4002540d20, {0xd62880, 0x40024acb60}, {0xd6a920, 0x400111c710}, 0x1, 0x0?)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/context.go:1064 +0x88 fp=0x40225804f0 sp=0x4022580420 pc=0x2e3338
cuelang.org/go/internal/core/adt.(*SelectorExpr).resolve(0x40024acb60, 0x4002540d20, 0x210302)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/expr.go:1038 +0x6c fp=0x4022580540 sp=0x40225804f0 pc=0x306e2c
cuelang.org/go/internal/core/adt.(*OpContext).unifyNode(0x4002540d20, {0xd6aa20, 0x40024acb60}, 0x210302)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/context.go:817 +0x164 fp=0x4022580600 sp=0x4022580540 pc=0x2e1594
cuelang.org/go/internal/core/adt.(*OpContext).node(0x4002540d20, {0xd62880, 0x40024acb80}, {0xd6aa20, 0x40024acb60}, 0x1, 0x0?)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/context.go:1064 +0x88 fp=0x40225806d0 sp=0x4022580600 pc=0x2e3338
cuelang.org/go/internal/core/adt.(*SelectorExpr).resolve(0x40024acb80, 0x4002540d20, 0x7fff0405)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/expr.go:1038 +0x6c fp=0x4022580720 sp=0x40225806d0 pc=0x306e2c
cuelang.org/go/internal/core/adt.(*OpContext).resolveState(0x4002540d20, {0x4009727f60, {0xd62880, 0x40024acb80}, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...}}, ...)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/context.go:410 +0x10c fp=0x4022580820 sp=0x4022580720 pc=0x2dea6c
cuelang.org/go/internal/core/adt.(*OpContext).Resolve(0x1270200?, {0x4009727f60, {0xd62880, 0x40024acb80}, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...}}, ...)
        /home/myitcv/dev/cuelang/cue/internal/core/adt/context.go:404 +0x94 fp=0x4022580890 sp=0x4022580820 pc=0x2de8e4
cuelang.org/go/internal/core/dep.(*visitor).markResolver(0x4002529680, 0x4009727f60, {0xd672c0, 0x40024acb80})
        /home/myitcv/dev/cuelang/cue/internal/core/dep/dep.go:363 +0x124 fp=0x4022580980 sp=0x4022580890 pc=0x337474
cuelang.org/go/internal/core/dep.(*visitor).markExpr(0x4002529680, 0x4009727f60, {0xffff48312118?, 0x40024acb80})
        /home/myitcv/dev/cuelang/cue/internal/core/dep/dep.go:285 +0x320 fp=0x4022580a30 sp=0x4022580980 pc=0x336960
cuelang.org/go/internal/core/dep.(*visitor).markExpr(0x4002529680, 0x4009727f60, {0xd68b50?, 0x40024c0540})
        /home/myitcv/dev/cuelang/cue/internal/core/dep/dep.go:315 +0x428 fp=0x4022580ae0 sp=0x4022580a30 pc=0x336a68
cuelang.org/go/internal/core/dep.(*visitor).markDecl(0x4002529680, 0x4009727f60, {0xd658a0?, 0x40024c0570})
        /home/myitcv/dev/cuelang/cue/internal/core/dep/dep.go:633 +0x270 fp=0x4022580b40 sp=0x4022580ae0 pc=0x338ac0
cuelang.org/go/internal/core/dep.(*visitor).markExpr(0x4002529680, 0x4002539b40, {0xd68298?, 0x400200f050})
        /home/myitcv/dev/cuelang/cue/internal/core/dep/dep.go:350 +0xbfc fp=0x4022580bf0 sp=0x4022580b40 pc=0x33723c
cuelang.org/go/internal/core/dep.(*visitor).markInternalResolvers.(*visitor).markConjuncts.func2({0x4002539b40, {0xd627e0, 0x40024acba0}, {0x0, 0x400255d560, 0x0, 0x0, 0x0, 0x0, {0x0, ...}}})
        /home/myitcv/dev/cuelang/cue/internal/core/dep/dep.go:545 +0xa0 fp=0x4022580c50 sp=0x4022580bf0 pc=0x3382f0
cuelang.org/go/internal/core/adt.VisitConjuncts({0x4002562440?, 0x31?, 0x0?}, 0x4022580e78)
...
@mvdan
Copy link
Member

mvdan commented Feb 24, 2025

Note that this may be related to #3743. While this one uses cue cmd and that one uses export, the stack traces look pretty similar, and they both involve internal/core/dep.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants