mirror of
https://github.com/ziglang/zig.git
synced 2025-12-30 18:13:19 +00:00
Sema: fix merging stores instructions from a comptime struct value with -fstrip
The first instruction in the block was never checked resulting in `struct_is_comptime` being incorrectly cleared if there are no instructions before the first field of the comptime struct. Fixes #17119
This commit is contained in:
parent
ff17b11692
commit
b0dba46800
16
src/Sema.zig
16
src/Sema.zig
@ -4783,11 +4783,9 @@ fn validateStructInit(
|
||||
|
||||
const field_ptr_ref = sema.inst_map.get(field_ptr).?;
|
||||
|
||||
//std.debug.print("validateStructInit (field_ptr_air_inst=%{d}):\n", .{
|
||||
// field_ptr_air_inst,
|
||||
//});
|
||||
//std.debug.print("validateStructInit (field_ptr_ref=%{d}):\n", .{field_ptr_ref});
|
||||
//for (block.instructions.items) |item| {
|
||||
// std.debug.print(" %{d} = {s}\n", .{item, @tagName(air_tags[item])});
|
||||
// std.debug.print(" %{d} = {s}\n", .{item, @tagName(air_tags[@intFromEnum(item)])});
|
||||
//}
|
||||
|
||||
// We expect to see something like this in the current block AIR:
|
||||
@ -4804,8 +4802,9 @@ fn validateStructInit(
|
||||
|
||||
// Possible performance enhancement: save the `block_index` between iterations
|
||||
// of the for loop.
|
||||
var block_index = block.instructions.items.len -| 1;
|
||||
while (block_index > 0) : (block_index -= 1) {
|
||||
var block_index = block.instructions.items.len;
|
||||
while (block_index > 0) {
|
||||
block_index -= 1;
|
||||
const store_inst = block.instructions.items[block_index];
|
||||
if (store_inst.toRef() == field_ptr_ref) {
|
||||
struct_is_comptime = false;
|
||||
@ -5060,8 +5059,9 @@ fn zirValidatePtrArrayInit(
|
||||
|
||||
// Possible performance enhancement: save the `block_index` between iterations
|
||||
// of the for loop.
|
||||
var block_index = block.instructions.items.len -| 1;
|
||||
while (block_index > 0) : (block_index -= 1) {
|
||||
var block_index = block.instructions.items.len;
|
||||
while (block_index > 0) {
|
||||
block_index -= 1;
|
||||
const store_inst = block.instructions.items[block_index];
|
||||
if (store_inst.toRef() == elem_ptr_ref) {
|
||||
array_is_comptime = false;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user