#name: conflicts in optional fields are okay 
#evalFull
-- in.cue --
d: {a: 1, b?: 3} | {a: 2}

// the following conjunction should not eliminate any disjuncts
c: d & {b?: 4}
-- out/def --
d: {
	a:  1
	b?: 3
} | {
	a: 2
}

// the following conjunction should not eliminate any disjuncts
c: d & {
	b?: 4
}
-- out/legacy-debug --
<0>{d: (<1>{a: 1, b?: 3} | <2>{a: 2}), c: (<3>{a: 1, b?: (3 & 4)} | <4>{a: 2, b?: 4})}
-- out/compile --
--- in.cue
{
  d: ({
    a: 1
    b?: 3
  }|{
    a: 2
  })
  c: (〈0;d〉 & {
    b?: 4
  })
}
-- out/eval/stats --
Leaks:  0
Freed:  14
Reused: 9
Allocs: 5
Retain: 0

Unifications: 10
Conjuncts:    17
Disjuncts:    14
-- out/evalalpha --
(struct){
  d: (struct){ |((struct){
      a: (int){ 1 }
      b?: (int){ 3 }
    }, (struct){
      a: (int){ 2 }
    }) }
  c: (struct){ |((struct){
      b?: (_|_){
        // [eval] c.b: conflicting values 3 and 4:
        //     ./in.cue:1:15
        //     ./in.cue:4:13
      }
      a: (int){ 1 }
    }, (struct){
      b?: (int){ 4 }
      a: (int){ 2 }
    }) }
}
-- diff/-out/evalalpha<==>+out/eval --
diff old new
--- old
+++ new
@@ -9,7 +9,6 @@
       b?: (_|_){
         // [eval] c.b: conflicting values 3 and 4:
         //     ./in.cue:1:15
-        //     ./in.cue:4:4
         //     ./in.cue:4:13
       }
       a: (int){ 1 }
-- diff/todo/p3 --
Missing error position.
-- out/eval --
(struct){
  d: (struct){ |((struct){
      a: (int){ 1 }
      b?: (int){ 3 }
    }, (struct){
      a: (int){ 2 }
    }) }
  c: (struct){ |((struct){
      b?: (_|_){
        // [eval] c.b: conflicting values 3 and 4:
        //     ./in.cue:1:15
        //     ./in.cue:4:4
        //     ./in.cue:4:13
      }
      a: (int){ 1 }
    }, (struct){
      b?: (int){ 4 }
      a: (int){ 2 }
    }) }
}
