cuelang / cue

CUE has moved to https://github.com/cue-lang/cue
https://cuelang.org
Apache License 2.0
3.09k stars 171 forks source link

cue eval panic instead of erroing with circular definition #1042

Closed proppy closed 3 years ago

proppy commented 3 years ago

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

$ cue version
cue version v0.4.0 linux/amd64

Does this issue reproduce with the latest release?

Yes

What did you do?

#FullAdder: {
  // IN
  a: bool
  b: bool
  c: bool
  // OUT
  sum: bool
  carry: bool
}

#Add16: {
  // IN
  a: [bool] * 16
  b: [bool] * 16
  // OUT
  out: [bool] * 16

  // PARTS
  let fulladders = [
    for i in list.Range(0, 16, 1) {
      #FullAdder & {"a": a[i], "b": b[i], c: carries[i]}
    }
  ]
  let carries = [
    false,
    for i in list.Range(0, 16, 1) {
      fulladders[i].carry
    }
  ]
  out: [
    for i in list.Range(0, 16, 1) {
      fulladders[i].sum
    }
  ]
}

What did you expect to see?

Some error about circular definitions between fulladders and carries.

What did you see instead?

panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x48 pc=0x6d1828]

goroutine 1 [running]:
cuelang.org/go/cmd/cue/cmd.recoverError(0xc000213ec0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/root.go:221 +0x95
panic(0xc272a0, 0x12326b0)
    /usr/lib/go-1.15/src/runtime/panic.go:969 +0x1b9
cuelang.org/go/internal/core/adt.(*Environment).evalCached(0x0, 0xc0001c5d40, 0xe000e0, 0xc000448fa0, 0x1, 0x7f1bc4637db0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/composite.go:136 +0x88
cuelang.org/go/internal/core/adt.(*LetReference).evaluate(0xc000449120, 0xc0001c5d40, 0xc000449120, 0x7f1bc4637db0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:865 +0x66
cuelang.org/go/internal/core/adt.(*OpContext).unifyNode(0xc0001c5d40, 0xe000a0, 0xc000449120, 0x2, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:680 +0x3cc
cuelang.org/go/internal/core/adt.(*OpContext).node(0xc0001c5d40, 0xdf2240, 0xc0003a9260, 0xe000a0, 0xc000449120, 0xc000200201, 0x40d34a)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:873 +0x66
cuelang.org/go/internal/core/adt.(*IndexExpr).resolve(0xc0003a9260, 0xc0001c5d40, 0xc0003a9202, 0xdf9de0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:918 +0x65
cuelang.org/go/internal/core/adt.(*OpContext).unifyNode(0xc0001c5d40, 0xdfffe0, 0xc0003a9260, 0xce2402, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:684 +0x209
cuelang.org/go/internal/core/adt.(*OpContext).node(0xc0001c5d40, 0xdf2540, 0xc000449140, 0xdfffe0, 0xc0003a9260, 0x400201, 0xc000020000)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:873 +0x66
cuelang.org/go/internal/core/adt.(*SelectorExpr).resolve(0xc000449140, 0xc0001c5d40, 0xc0003a8a02, 0xdf2540)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:886 +0x6e
cuelang.org/go/internal/core/adt.(*OpContext).Resolve(0xc0001c5d40, 0xc000385e00, 0xdf9f20, 0xc000449140, 0xc000449140, 0xc0004cf401)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:392 +0xe2
cuelang.org/go/internal/core/adt.(*nodeContext).evalExpr(0xc00057b180, 0xc000385e00, 0xdf2540, 0xc000449140, 0xc000478a80, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1228 +0x571
cuelang.org/go/internal/core/adt.(*nodeContext).addExprConjunct(0xc00057b180, 0xc000385e00, 0xdf2540, 0xc000449140, 0xc000478a80, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1198 +0x245
cuelang.org/go/internal/core/adt.(*nodeContext).addStruct(0xc00057b180, 0xc000385810, 0xc0005557a0, 0xc000478a60, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1746 +0xbdb
cuelang.org/go/internal/core/adt.(*nodeContext).addExprConjunct(0xc00057b180, 0xc000385810, 0xdf2600, 0xc0005557a0, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1188 +0x208
cuelang.org/go/internal/core/adt.(*nodeContext).insertConjuncts(0xc00057b180)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:367 +0xfb
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc00057db00, 0x6e1205)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:227 +0x27f
cuelang.org/go/internal/core/adt.(*nodeContext).completeArcs(0xc00057a380, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:669 +0x13d
cuelang.org/go/internal/core/adt.(*nodeContext).postDisjunct(0xc00057a380, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:565 +0x53b
cuelang.org/go/internal/core/adt.(*nodeContext).expandDisjuncts(0xc00057a380, 0xc00057cd05, 0xc00057a380, 0x0, 0x100)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/disjunct.go:151 +0x1610
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc00057cd80, 0xc00036fc05)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:281 +0x479
cuelang.org/go/internal/core/adt.(*ListLit).evaluate(0xc000448ec0, 0xc0001c5d40, 0xc000448ec0, 0x7f1bc46317d0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:296 +0xde
cuelang.org/go/internal/core/adt.(*OpContext).evalState(0xc0001c5d40, 0xe000e0, 0xc000448ec0, 0x128b302, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:608 +0x39e
cuelang.org/go/internal/core/adt.(*Environment).evalCached(0xc00036fc70, 0xc0001c5d40, 0xe000e0, 0xc000448ec0, 0xcab101, 0x7f1bc4637db0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/composite.go:143 +0x1a5
cuelang.org/go/internal/core/adt.(*LetReference).evaluate(0xc000449180, 0xc0001c5d40, 0xc000449180, 0x7f1bc4637db0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:865 +0x66
cuelang.org/go/internal/core/adt.(*OpContext).unifyNode(0xc0001c5d40, 0xe000a0, 0xc000449180, 0xc000478702, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:680 +0x3cc
cuelang.org/go/internal/core/adt.(*OpContext).node(0xc0001c5d40, 0xdf2240, 0xc0003a9290, 0xe000a0, 0xc000449180, 0x201, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:873 +0x66
cuelang.org/go/internal/core/adt.(*IndexExpr).resolve(0xc0003a9290, 0xc0001c5d40, 0xc00036bc02, 0xdfffe0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:918 +0x65
cuelang.org/go/internal/core/adt.(*OpContext).Resolve(0xc0001c5d40, 0xc000384690, 0xdf9de0, 0xc0003a9290, 0xc0003a9290, 0x1)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:392 +0xe2
cuelang.org/go/internal/core/adt.(*nodeContext).evalExpr(0xc00057a000, 0xc000384690, 0xdf2100, 0xc0004491a0, 0xc000478680, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1228 +0x571
cuelang.org/go/internal/core/adt.(*nodeContext).addExprConjunct(0xc00057a000, 0xc000384690, 0xdf2100, 0xc0004491a0, 0xc000478680, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1198 +0x245
cuelang.org/go/internal/core/adt.(*nodeContext).insertConjuncts(0xc00057a000)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:367 +0xfb
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc00057cbd0, 0x6e1205)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:227 +0x27f
cuelang.org/go/internal/core/adt.(*nodeContext).completeArcs(0xc000575c00, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:669 +0x13d
cuelang.org/go/internal/core/adt.(*nodeContext).postDisjunct(0xc000575c00, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:565 +0x53b
cuelang.org/go/internal/core/adt.(*nodeContext).expandDisjuncts(0xc000575c00, 0xc000579005, 0xc000575c00, 0x0, 0x100)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/disjunct.go:151 +0x1610
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc000579050, 0x6e1205)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:281 +0x479
cuelang.org/go/internal/core/adt.(*nodeContext).completeArcs(0xc000562a80, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:669 +0x13d
cuelang.org/go/internal/core/adt.(*nodeContext).postDisjunct(0xc000562a80, 0x11f6505)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:565 +0x53b
cuelang.org/go/internal/core/adt.(*nodeContext).expandDisjuncts(0xc000562a80, 0xc000578305, 0xc000562a80, 0x0, 0x6e0100)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/disjunct.go:151 +0x1610
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc000578360, 0xc00036fc05)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:281 +0x479
cuelang.org/go/internal/core/adt.(*ListLit).evaluate(0xc000448d80, 0xc0001c5d40, 0xc000448d80, 0x7f1bc46317d0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:296 +0xde
cuelang.org/go/internal/core/adt.(*OpContext).evalState(0xc0001c5d40, 0xe000e0, 0xc000448d80, 0x128b302, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:608 +0x39e
cuelang.org/go/internal/core/adt.(*Environment).evalCached(0xc00036fc70, 0xc0001c5d40, 0xe000e0, 0xc000448d80, 0xc000478401, 0x7f1bc4637db0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/composite.go:143 +0x1a5
cuelang.org/go/internal/core/adt.(*LetReference).evaluate(0xc000449540, 0xc0001c5d40, 0xc000449540, 0x7f1bc4637db0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:865 +0x66
cuelang.org/go/internal/core/adt.(*OpContext).unifyNode(0xc0001c5d40, 0xe000a0, 0xc000449540, 0x2, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:680 +0x3cc
cuelang.org/go/internal/core/adt.(*OpContext).node(0xc0001c5d40, 0xdf2240, 0xc0003a94d0, 0xe000a0, 0xc000449540, 0xc000400201, 0x40d34a)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:873 +0x66
cuelang.org/go/internal/core/adt.(*IndexExpr).resolve(0xc0003a94d0, 0xc0001c5d40, 0xc0003a9402, 0xdf9de0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:918 +0x65
cuelang.org/go/internal/core/adt.(*OpContext).unifyNode(0xc0001c5d40, 0xdfffe0, 0xc0003a94d0, 0x2, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:684 +0x209
cuelang.org/go/internal/core/adt.(*OpContext).node(0xc0001c5d40, 0xdf2540, 0xc000449560, 0xdfffe0, 0xc0003a94d0, 0x400201, 0xc000020000)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:873 +0x66
cuelang.org/go/internal/core/adt.(*SelectorExpr).resolve(0xc000449560, 0xc0001c5d40, 0xc0003a8b02, 0xdf2540)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/expr.go:886 +0x6e
cuelang.org/go/internal/core/adt.(*OpContext).Resolve(0xc0001c5d40, 0xc000383130, 0xdf9f20, 0xc000449560, 0xc000449560, 0xc000284601)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/context.go:392 +0xe2
cuelang.org/go/internal/core/adt.(*nodeContext).evalExpr(0xc000562700, 0xc000383130, 0xdf2540, 0xc000449560, 0xc000478440, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1228 +0x571
cuelang.org/go/internal/core/adt.(*nodeContext).addExprConjunct(0xc000562700, 0xc000383130, 0xdf2540, 0xc000449560, 0xc000478440, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1198 +0x245
cuelang.org/go/internal/core/adt.(*nodeContext).addStruct(0xc000562700, 0xc0003824b0, 0xc0005559e0, 0xc000478420, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1746 +0xbdb
cuelang.org/go/internal/core/adt.(*nodeContext).addExprConjunct(0xc000562700, 0xc0003824b0, 0xdf2600, 0xc0005559e0, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:1188 +0x208
cuelang.org/go/internal/core/adt.(*nodeContext).insertConjuncts(0xc000562700)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:367 +0xfb
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc00056ebd0, 0x6e1205)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:227 +0x27f
cuelang.org/go/internal/core/adt.(*nodeContext).completeArcs(0xc000562380, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:669 +0x13d
cuelang.org/go/internal/core/adt.(*nodeContext).postDisjunct(0xc000562380, 0xc000455905)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:565 +0x53b
cuelang.org/go/internal/core/adt.(*nodeContext).expandDisjuncts(0xc000562380, 0xc000564005, 0xc000562380, 0x0, 0x100)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/disjunct.go:151 +0x1610
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc000564090, 0x6e1205)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:281 +0x479
cuelang.org/go/internal/core/adt.(*nodeContext).completeArcs(0xc000562000, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:669 +0x13d
cuelang.org/go/internal/core/adt.(*nodeContext).postDisjunct(0xc000562000, 0xc000562005)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:565 +0x53b
cuelang.org/go/internal/core/adt.(*nodeContext).expandDisjuncts(0xc000562000, 0xc000555b05, 0xc000562000, 0x0, 0x100)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/disjunct.go:151 +0x1610
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc000555b00, 0x6e1205)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:281 +0x479
cuelang.org/go/internal/core/adt.(*nodeContext).completeArcs(0xc000557c00, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:669 +0x13d
cuelang.org/go/internal/core/adt.(*nodeContext).postDisjunct(0xc000557c00, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:565 +0x53b
cuelang.org/go/internal/core/adt.(*nodeContext).expandDisjuncts(0xc000557c00, 0xc000555405, 0xc000557c00, 0x0, 0x100)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/disjunct.go:151 +0x1610
cuelang.org/go/internal/core/adt.(*OpContext).Unify(0xc0001c5d40, 0xc000555440, 0x5)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/eval.go:281 +0x479
cuelang.org/go/internal/core/adt.(*Vertex).Finalize(...)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/internal/core/adt/composite.go:445
cuelang.org/go/cue.(*Instance).Value(0xc00029ad20, 0x6, 0xc0003c0780, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cue/instance.go:214 +0x77
cuelang.org/go/cmd/cue/cmd.buildInstances(0xc0003c0780, 0xc00040d930, 0x1, 0x1, 0x0, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/common.go:737 +0x134
cuelang.org/go/cmd/cue/cmd.parseArgs(0xc0003c0780, 0xc0003fc020, 0x1, 0x1, 0xc0003d0a50, 0xc0003daf70, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/common.go:623 +0xe2c
cuelang.org/go/cmd/cue/cmd.runEval(0xc0003c0780, 0xc0003fc020, 0x1, 0x1, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/eval.go:88 +0xa6
cuelang.org/go/cmd/cue/cmd.mkRunE.func1(0xc00030d8c0, 0xc0003fc020, 0x1, 0x1, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/root.go:46 +0x6c
github.com/spf13/cobra.(*Command).execute(0xc00030d8c0, 0xc000335ff0, 0x1, 0x1, 0xc00030d8c0, 0xc000335ff0)
    /home/proppy/pkg/mod/github.com/spf13/cobra@v1.0.0/command.go:842 +0x47c
github.com/spf13/cobra.(*Command).ExecuteC(0xc00030d080, 0x0, 0x0, 0x0)
    /home/proppy/pkg/mod/github.com/spf13/cobra@v1.0.0/command.go:950 +0x375
github.com/spf13/cobra.(*Command).Execute(...)
    /home/proppy/pkg/mod/github.com/spf13/cobra@v1.0.0/command.go:887
cuelang.org/go/cmd/cue/cmd.(*Command).Run(0xc0003c0780, 0xdfd920, 0xc00003a140, 0x0, 0x0)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/root.go:206 +0x65
cuelang.org/go/cmd/cue/cmd.mainErr(0xdfd920, 0xc00003a140, 0xc0000320a0, 0x2, 0x2, 0xd37e90, 0xc000355f48)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/root.go:145 +0x8a
cuelang.org/go/cmd/cue/cmd.Main(0xc00010e058)
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/cmd/root.go:127 +0x9c
main.main()
    /home/proppy/pkg/mod/cuelang.org/go@v0.4.0/cmd/cue/main.go:24 +0x25
mpvl commented 3 years ago

Analysis: the problem here is the cyclic reference between let declarations, which is not allowed.

We could potentially allow this by treating let fields more like regular field (implementation-wise), which is something that was planned anyway. But for now the easiest is to disallow this.

Minimal reproducer:

let a = { c: b }
let b = a

out: a
cueckoo commented 3 years ago

This issue has been migrated to https://github.com/cue-lang/cue/issues/1042.

For more details about CUE's migration to a new home, please see https://github.com/cue-lang/cue/issues/1078.