Skip to content

evalv3 "field set was already referenced" regression compared to evalv2 #3931

@mvdan

Description

@mvdan
# evalv2
env CUE_EXPERIMENT=evalv3=0
exec cue export in.cue

# evalv3
env CUE_EXPERIMENT=evalv3=1
exec cue export in.cue

-- in.cue --
bar: [string]: spec?: Spec

if true {
	foo: label: "foo"
	bar: bar1: spec: selector: foo
}
let Spec = {
	selector?: Selector
}
let Selector = {
	label?: string
	expr?: [...string]
}

As of 5548932:

# evalv2 (0.007s)
> env CUE_EXPERIMENT=evalv3=0
> exec cue export in.cue
[stdout]
{
    "foo": {
        "label": "foo"
    },
    "bar": {
        "bar1": {
            "spec": {
                "selector": {
                    "label": "foo"
                }
            }
        }
    }
}
# evalv3 (0.006s)
> env CUE_EXPERIMENT=evalv3=1
> exec cue export in.cue
[stderr]
bar.bar1.spec.selector: adding field expr not allowed as field set was already referenced:
    ./in.cue:8:13
[exit status 1]
FAIL: repro-evalv3.txtar:7: unexpected command failure

This is a recent regression; it bisects to f87800d.

Thanks to @mxey for reporting this via a pretty small reproducer!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bisectedRegression which has been bisected to one changeevaluatorevalv3issues affecting only the evaluator version 3

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions