fix [x]u65529 and above overflowing#15537
Conversation
Head branch was pushed to by a user without write access
Head branch was pushed to by a user without write access
|
Everything passed except aarch64-windows. I guess I'll try force-pushing. |
|
aarch64-windows failed again. Is this some alignment or too little stack memory thing? I don't see any text telling me what's wrong. The test is fairly target-unspecific. |
The test run failed the same way when I restarted it so you should either skip it or modify the test. |
```
$ cat overflow.zig
test {
var a: [1]u65535 = undefined;
_ = a;
}
$ zig-out/bin/zig test overflow.zig
thread 290266 panic: integer overflow
zig/src/type.zig:3604:55: 0xada43d in intAbiAlignment (zig)
std.math.ceilPowerOfTwoPromote(u16, (bits + 7) / 8),
^
zig/src/type.zig:3598:42: 0xadd4ea in intAbiSize (zig)
const alignment = intAbiAlignment(bits, target);
^
zig/src/type.zig:3500:61: 0x92be91 in abiSizeAdvanced (zig)
return AbiSizeAdvanced{ .scalar = intAbiSize(bits, target) };
^
zig/src/type.zig:3385:62: 0x928933 in abiSizeAdvanced (zig)
switch (try payload.elem_type.abiSizeAdvanced(target, strat)) {
^
zig/src/type.zig:3268:32: 0x92c012 in abiSize (zig)
return (abiSizeAdvanced(ty, target, .eager) catch unreachable).scalar;
^
```
This is only noticed in a debug build of zig and silently does the wrong
thing and overflows in release builds.
This happened to `[x]u65529` and above because of the ` + 7` on a `u16`.
|
And now it's not aarch64-windows but aarch64-macos failing? It has previously passed. A single, unrelated LOC changed. I can't help but think we still have some non-determinism in the compiler. |
This is only noticed in a debug build of zig and silently does the wrong thing and overflows in release builds.
This happened to
[x]u65529and above because of the+ 7on au16.