Skip to content

Commit 4fc579c

Browse files
committed
internal/core/adt: disable structure sharing for pending arcs
Theoretically this is still possible, but CUE does not handle this properly at this moment. We disable it with and add a TODO. Besides fixing 3849, this brings V3 more in line with V2 for several other tests. Fixes #3849 Signed-off-by: Marcel van Lohuizen <[email protected]> Change-Id: Idb9f73d9f83cd868230fb298214bdaf289bfb632 Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/1212316 TryBot-Result: CUEcueckoo <[email protected]> Reviewed-by: Daniel Martí <[email protected]>
1 parent 6ade302 commit 4fc579c

File tree

4 files changed

+127
-175
lines changed

4 files changed

+127
-175
lines changed

Diff for: cue/testdata/comprehensions/pushdown.txtar

+54-71
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,8 @@ issue3729.withoutDisjunction.root.#sub1.#sub2: conflicting values null and {#sub
939939
./issue3729.cue:11:9
940940
noStackOverflowStructCycle.#list.tail: structural cycle
941941
noStackOverflowStructCycle.list.tail: structural cycle
942+
provideIncompleteSuccess.t2.a.c.d: field not allowed:
943+
./in.cue:203:8
942944
structShare.err1.x.d.e: field not allowed:
943945
./in.cue:591:9
944946
fieldMismatch.a: cannot combine regular field "x" with 2:
@@ -1099,7 +1101,8 @@ Result:
10991101
// [structural cycle] noStackOverflowStructCycle.list.tail: structural cycle
11001102
}
11011103
}
1102-
provideIncompleteSuccess: (struct){
1104+
provideIncompleteSuccess: (_|_){
1105+
// [eval]
11031106
t1: (struct){
11041107
#a: (_|_){
11051108
// [incomplete] provideIncompleteSuccess.t1.#a: incomplete bool: bool:
@@ -1112,15 +1115,22 @@ Result:
11121115
}
11131116
y: ~(provideIncompleteSuccess.t1.x)
11141117
}
1115-
t2: (struct){
1118+
t2: (_|_){
1119+
// [eval]
11161120
#a: (#struct){
11171121
c: (int){ 4 }
11181122
b: (bool){ true }
11191123
}
11201124
#c: (#struct){
11211125
}
1122-
a: (struct){
1123-
c: (#struct){
1126+
a: (_|_){
1127+
// [eval]
1128+
c: (_|_){
1129+
// [eval]
1130+
d: (_|_){
1131+
// [eval] provideIncompleteSuccess.t2.a.c.d: field not allowed:
1132+
// ./in.cue:203:8
1133+
}
11241134
}
11251135
b: (bool){ true }
11261136
}
@@ -1773,7 +1783,7 @@ Result:
17731783
diff old new
17741784
--- old
17751785
+++ new
1776-
@@ -1,39 +1,17 @@
1786+
@@ -1,39 +1,19 @@
17771787
Errors:
17781788
embed.fail1.p: field not allowed:
17791789
- ./in.cue:37:9
@@ -1801,10 +1811,10 @@ diff old new
18011811
./issue3729.cue:11:9
18021812
noStackOverflowStructCycle.#list.tail: structural cycle
18031813
noStackOverflowStructCycle.list.tail: structural cycle
1804-
-provideIncompleteSuccess.t2.a.c.d: field not allowed:
1814+
provideIncompleteSuccess.t2.a.c.d: field not allowed:
18051815
- ./in.cue:200:7
18061816
- ./in.cue:202:4
1807-
- ./in.cue:203:8
1817+
./in.cue:203:8
18081818
- ./in.cue:208:7
18091819
structShare.err1.x.d.e: field not allowed:
18101820
- ./in.cue:588:15
@@ -1813,7 +1823,7 @@ diff old new
18131823
./in.cue:591:9
18141824
fieldMismatch.a: cannot combine regular field "x" with 2:
18151825
./in.cue:152:7
1816-
@@ -79,8 +57,8 @@
1826+
@@ -79,8 +59,8 @@
18171827
}
18181828
fail: (struct){
18191829
a: (_|_){
@@ -1824,7 +1834,7 @@ diff old new
18241834
}
18251835
}
18261836
embed: (_|_){
1827-
@@ -89,10 +67,6 @@
1837+
@@ -89,10 +69,6 @@
18281838
// [eval]
18291839
p: (_|_){
18301840
// [eval] embed.fail1.p: field not allowed:
@@ -1835,7 +1845,7 @@ diff old new
18351845
// ./in.cue:46:4
18361846
// ./in.cue:49:9
18371847
}
1838-
@@ -121,12 +95,11 @@
1848+
@@ -121,12 +97,11 @@
18391849
// [eval]
18401850
p: (_|_){
18411851
// [eval] embed.fail4.p: field not allowed:
@@ -1852,17 +1862,7 @@ diff old new
18521862
}
18531863
}
18541864
#C4: (#struct){
1855-
@@ -198,8 +171,7 @@
1856-
// [structural cycle] noStackOverflowStructCycle.list.tail: structural cycle
1857-
}
1858-
}
1859-
- provideIncompleteSuccess: (_|_){
1860-
- // [eval]
1861-
+ provideIncompleteSuccess: (struct){
1862-
t1: (struct){
1863-
#a: (_|_){
1864-
// [incomplete] provideIncompleteSuccess.t1.#a: incomplete bool: bool:
1865-
@@ -207,16 +179,12 @@
1865+
@@ -207,13 +182,10 @@
18661866
b: (bool){ bool }
18671867
}
18681868
x: (#struct){
@@ -1873,39 +1873,25 @@ diff old new
18731873
- c: (int){ 4 }
18741874
- b: (bool){ true }
18751875
- }
1876-
- }
1877-
- t2: (_|_){
1878-
- // [eval]
18791876
+ b: (bool){ true }
18801877
+ c: (int){ 4 }
18811878
+ }
18821879
+ y: ~(provideIncompleteSuccess.t1.x)
1883-
+ }
1884-
+ t2: (struct){
1885-
#a: (#struct){
1886-
c: (int){ 4 }
1887-
b: (bool){ true }
1888-
@@ -223,17 +191,8 @@
1889-
}
1890-
#c: (#struct){
1891-
}
1892-
- a: (_|_){
1893-
- // [eval]
1894-
- c: (_|_){
1895-
- // [eval]
1896-
- d: (_|_){
1897-
- // [eval] provideIncompleteSuccess.t2.a.c.d: field not allowed:
1880+
}
1881+
t2: (_|_){
1882+
// [eval]
1883+
@@ -229,10 +201,7 @@
1884+
// [eval]
1885+
d: (_|_){
1886+
// [eval] provideIncompleteSuccess.t2.a.c.d: field not allowed:
18981887
- // ./in.cue:200:7
18991888
- // ./in.cue:202:4
1900-
- // ./in.cue:203:8
1889+
// ./in.cue:203:8
19011890
- // ./in.cue:208:7
1902-
- }
1903-
+ a: (struct){
1904-
+ c: (#struct){
1891+
}
19051892
}
19061893
b: (bool){ true }
1907-
}
1908-
@@ -263,9 +222,22 @@
1894+
@@ -263,9 +232,22 @@
19091895
}
19101896
cyclicError: (struct){
19111897
a: (_|_){
@@ -1931,7 +1917,7 @@ diff old new
19311917
}
19321918
}
19331919
midwayReferences: (struct){
1934-
@@ -279,24 +251,9 @@
1920+
@@ -279,24 +261,9 @@
19351921
}
19361922
}
19371923
}
@@ -1959,7 +1945,7 @@ diff old new
19591945
}
19601946
closedCheck: (struct){
19611947
success1: (struct){
1962-
@@ -399,13 +356,7 @@
1948+
@@ -399,13 +366,7 @@
19631949
}
19641950
}
19651951
}
@@ -1974,7 +1960,7 @@ diff old new
19741960
#F: (#struct){
19751961
e: (bool){ bool }
19761962
f: (_|_){
1977-
@@ -422,17 +373,11 @@
1963+
@@ -422,17 +383,11 @@
19781964
}
19791965
}
19801966
E: (_|_){
@@ -1993,7 +1979,7 @@ diff old new
19931979
}
19941980
}
19951981
derefDisj2: (struct){
1996-
@@ -443,17 +388,11 @@
1982+
@@ -443,17 +398,11 @@
19971983
}
19981984
}
19991985
E: (_|_){
@@ -2012,7 +1998,7 @@ diff old new
20121998
}
20131999
}
20142000
bulk1: (struct){
2015-
@@ -576,9 +515,6 @@
2001+
@@ -576,9 +525,6 @@
20162002
// [eval]
20172003
e: (_|_){
20182004
// [eval] structShare.err1.x.d.e: field not allowed:
@@ -2022,7 +2008,7 @@ diff old new
20222008
// ./in.cue:591:9
20232009
}
20242010
}
2025-
@@ -602,13 +538,13 @@
2011+
@@ -602,13 +548,13 @@
20262012
}
20272013
envs: (struct){
20282014
e1: (#struct){
@@ -2040,7 +2026,7 @@ diff old new
20402026
}
20412027
}
20422028
}
2043-
@@ -645,9 +581,8 @@
2029+
@@ -645,9 +591,8 @@
20442030
_c: (struct){
20452031
y: (int){ 1 }
20462032
}
@@ -2052,7 +2038,7 @@ diff old new
20522038
}
20532039
}
20542040
errorPropagation: (_|_){
2055-
@@ -705,10 +640,10 @@
2041+
@@ -705,10 +650,10 @@
20562042
}
20572043
foo: (#struct){
20582044
kind: (string){ "foo" }
@@ -2065,7 +2051,7 @@ diff old new
20652051
}
20662052
}
20672053
regular: (_|_){
2068-
@@ -721,16 +656,11 @@
2054+
@@ -721,16 +666,11 @@
20692055
foo: (_|_){
20702056
// [eval]
20712057
kind: (string){ "foo" }
@@ -2084,7 +2070,7 @@ diff old new
20842070
}
20852071
}
20862072
}
2087-
@@ -742,10 +672,10 @@
2073+
@@ -742,10 +682,10 @@
20882074
}
20892075
foo: (#struct){
20902076
kind: (string){ "foo" }
@@ -2097,15 +2083,15 @@ diff old new
20972083
}
20982084
}
20992085
}
2100-
@@ -816,7 +746,6 @@
2086+
@@ -816,7 +756,6 @@
21012087
root: (_|_){
21022088
// [eval] issue3729.withoutDisjunction.root.#sub1.#sub2: conflicting values null and {#sub1?:{#sub2:true}} (mismatched types null and struct):
21032089
// ./issue3729.cue:9:9
21042090
- // ./issue3729.cue:10:2
21052091
// ./issue3729.cue:11:9
21062092
#sub1?: (#struct){
21072093
#sub2: (bool){ true }
2108-
@@ -850,12 +779,7 @@
2094+
@@ -850,12 +789,7 @@
21092095
#sub2?: (bool){ bool }
21102096
}
21112097
}
@@ -2119,7 +2105,7 @@ diff old new
21192105
#sub1?: (#struct){
21202106
#sub2: (bool){ true }
21212107
}
2122-
@@ -864,14 +788,7 @@
2108+
@@ -864,14 +798,7 @@
21232109
}
21242110
full: (struct){
21252111
#Application: (#struct){
@@ -2136,15 +2122,15 @@ diff old new
21362122
#ApplicationSpec: (#struct){
21372123
syncPolicy?: ((null|struct)){ |((null){ null }, (#struct){
21382124
-- out/evalalpha/stats --
2139-
Leaks: 620
2125+
Leaks: 636
21402126
Freed: 0
21412127
Reused: 0
2142-
Allocs: 620
2128+
Allocs: 636
21432129
Retain: 0
21442130

2145-
Unifications: 570
2146-
Conjuncts: 943
2147-
Disjuncts: 28
2131+
Unifications: 578
2132+
Conjuncts: 965
2133+
Disjuncts: 32
21482134
-- diff/-out/evalalpha/stats<==>+out/eval/stats --
21492135
diff old new
21502136
--- old
@@ -2155,18 +2141,18 @@ diff old new
21552141
-Reused: 510
21562142
-Allocs: 71
21572143
-Retain: 107
2158-
+Leaks: 620
2144+
+Leaks: 636
21592145
+Freed: 0
21602146
+Reused: 0
2161-
+Allocs: 620
2147+
+Allocs: 636
21622148
+Retain: 0
21632149

21642150
-Unifications: 545
21652151
-Conjuncts: 870
21662152
-Disjuncts: 641
2167-
+Unifications: 570
2168-
+Conjuncts: 943
2169-
+Disjuncts: 28
2153+
+Unifications: 578
2154+
+Conjuncts: 965
2155+
+Disjuncts: 32
21702156
-- out/eval/stats --
21712157
Leaks: 63
21722158
Freed: 518
@@ -2177,9 +2163,6 @@ Retain: 107
21772163
Unifications: 545
21782164
Conjuncts: 870
21792165
Disjuncts: 641
2180-
-- diff/todo/p2 --
2181-
provideIncompleteSuccess.t2.a.c.d: missing error: probably correct.
2182-
A bit esoteric, but should probably work.
21832166
-- diff/explanation --
21842167
cyclicError: improved error message.
21852168
nestedWithDynamicFieldOK: fixed bug.

0 commit comments

Comments
 (0)