Skip to content

Commit 98c0bb7

Browse files
authored
Fix incorrect loads when setting Array#length (#923)
1 parent 4869f5d commit 98c0bb7

20 files changed

+1256
-1073
lines changed

std/assembly/array.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@ export class Array<T> extends ArrayBufferView {
6161
var oldLength = this.length_;
6262
if (isManaged<T>()) {
6363
if (oldLength > newLength) { // release no longer used refs
64-
let cur = (<usize>newLength << alignof<T>());
65-
let end = (<usize>oldLength << alignof<T>());
64+
let dataStart = this.dataStart;
65+
let cur = dataStart + (<usize>newLength << alignof<T>());
66+
let end = dataStart + (<usize>oldLength << alignof<T>());
6667
do __release(load<usize>(cur));
6768
while ((cur += sizeof<T>()) < end);
6869
} else {

tests/compiler/assert-nonnull.optimized.wat

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
if
6565
i32.const 24
6666
i32.const 80
67-
i32.const 92
67+
i32.const 93
6868
i32.const 41
6969
call $~lib/builtins/abort
7070
unreachable
@@ -76,7 +76,7 @@
7676
if
7777
i32.const 128
7878
i32.const 80
79-
i32.const 96
79+
i32.const 97
8080
i32.const 39
8181
call $~lib/builtins/abort
8282
unreachable
@@ -100,7 +100,7 @@
100100
if
101101
i32.const 24
102102
i32.const 80
103-
i32.const 92
103+
i32.const 93
104104
i32.const 41
105105
call $~lib/builtins/abort
106106
unreachable

tests/compiler/assert-nonnull.untouched.wat

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
if
108108
i32.const 24
109109
i32.const 80
110-
i32.const 92
110+
i32.const 93
111111
i32.const 41
112112
call $~lib/builtins/abort
113113
unreachable
@@ -123,7 +123,7 @@
123123
call $~lib/rt/stub/__release
124124
i32.const 128
125125
i32.const 80
126-
i32.const 96
126+
i32.const 97
127127
i32.const 39
128128
call $~lib/builtins/abort
129129
unreachable
@@ -168,7 +168,7 @@
168168
if
169169
i32.const 24
170170
i32.const 80
171-
i32.const 92
171+
i32.const 93
172172
i32.const 41
173173
call $~lib/builtins/abort
174174
unreachable

tests/compiler/resolve-access.optimized.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@
313313
if
314314
i32.const 48
315315
i32.const 104
316-
i32.const 92
316+
i32.const 93
317317
i32.const 41
318318
call $~lib/builtins/abort
319319
unreachable

tests/compiler/resolve-access.untouched.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1449,7 +1449,7 @@
14491449
if
14501450
i32.const 48
14511451
i32.const 104
1452-
i32.const 92
1452+
i32.const 93
14531453
i32.const 41
14541454
call $~lib/builtins/abort
14551455
unreachable

tests/compiler/retain-release-sanity.optimized.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2298,7 +2298,7 @@
22982298
if
22992299
i32.const 424
23002300
i32.const 376
2301-
i32.const 270
2301+
i32.const 271
23022302
i32.const 20
23032303
call $~lib/builtins/abort
23042304
unreachable

tests/compiler/retain-release-sanity.untouched.wat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3909,7 +3909,7 @@
39093909
if
39103910
i32.const 424
39113911
i32.const 376
3912-
i32.const 270
3912+
i32.const 271
39133913
i32.const 20
39143914
call $~lib/builtins/abort
39153915
unreachable

tests/compiler/std/array-access.optimized.wat

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
if
2626
i32.const 24
2727
i32.const 80
28-
i32.const 92
28+
i32.const 93
2929
i32.const 41
3030
call $~lib/builtins/abort
3131
unreachable
@@ -42,7 +42,7 @@
4242
if
4343
i32.const 128
4444
i32.const 80
45-
i32.const 96
45+
i32.const 97
4646
i32.const 39
4747
call $~lib/builtins/abort
4848
unreachable
@@ -57,7 +57,7 @@
5757
if
5858
i32.const 24
5959
i32.const 80
60-
i32.const 92
60+
i32.const 93
6161
i32.const 41
6262
call $~lib/builtins/abort
6363
unreachable

tests/compiler/std/array-access.untouched.wat

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
if
4848
i32.const 24
4949
i32.const 80
50-
i32.const 92
50+
i32.const 93
5151
i32.const 41
5252
call $~lib/builtins/abort
5353
unreachable
@@ -63,7 +63,7 @@
6363
call $~lib/rt/stub/__release
6464
i32.const 128
6565
i32.const 80
66-
i32.const 96
66+
i32.const 97
6767
i32.const 39
6868
call $~lib/builtins/abort
6969
unreachable
@@ -88,7 +88,7 @@
8888
if
8989
i32.const 24
9090
i32.const 80
91-
i32.const 92
91+
i32.const 93
9292
i32.const 41
9393
call $~lib/builtins/abort
9494
unreachable
@@ -137,7 +137,7 @@
137137
if
138138
i32.const 24
139139
i32.const 80
140-
i32.const 92
140+
i32.const 93
141141
i32.const 41
142142
call $~lib/builtins/abort
143143
unreachable
@@ -153,7 +153,7 @@
153153
call $~lib/rt/stub/__release
154154
i32.const 128
155155
i32.const 80
156-
i32.const 96
156+
i32.const 97
157157
i32.const 39
158158
call $~lib/builtins/abort
159159
unreachable
@@ -420,7 +420,7 @@
420420
if
421421
i32.const 24
422422
i32.const 80
423-
i32.const 92
423+
i32.const 93
424424
i32.const 41
425425
call $~lib/builtins/abort
426426
unreachable
@@ -436,7 +436,7 @@
436436
call $~lib/rt/stub/__release
437437
i32.const 128
438438
i32.const 80
439-
i32.const 96
439+
i32.const 97
440440
i32.const 39
441441
call $~lib/builtins/abort
442442
unreachable

tests/compiler/std/array-literal.optimized.wat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
if
4848
i32.const 136
4949
i32.const 192
50-
i32.const 92
50+
i32.const 93
5151
i32.const 41
5252
call $~lib/builtins/abort
5353
unreachable
@@ -66,7 +66,7 @@
6666
if
6767
i32.const 136
6868
i32.const 192
69-
i32.const 92
69+
i32.const 93
7070
i32.const 41
7171
call $~lib/builtins/abort
7272
unreachable

tests/compiler/std/array-literal.untouched.wat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
if
7272
i32.const 136
7373
i32.const 192
74-
i32.const 92
74+
i32.const 93
7575
i32.const 41
7676
call $~lib/builtins/abort
7777
unreachable
@@ -104,7 +104,7 @@
104104
if
105105
i32.const 136
106106
i32.const 192
107-
i32.const 92
107+
i32.const 93
108108
i32.const 41
109109
call $~lib/builtins/abort
110110
unreachable

0 commit comments

Comments
 (0)