mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 12:33:19 +00:00
AstGen: fix switch result location elision
It was eliding wrong instructions for nested break from labeled block
This commit is contained in:
parent
570ed7b3bf
commit
8ee0cbe50a
@ -5179,7 +5179,9 @@ fn switchExpr(
|
||||
}
|
||||
extra_index += body_len - 2;
|
||||
const store_inst = scalar_cases_payload.items[extra_index];
|
||||
if (zir_tags[store_inst] != .store_to_block_ptr) {
|
||||
if (zir_tags[store_inst] != .store_to_block_ptr or
|
||||
zir_datas[store_inst].bin.lhs != block_scope.rl_ptr)
|
||||
{
|
||||
extra_index += 2;
|
||||
astgen.extra.appendSliceAssumeCapacity(scalar_cases_payload.items[0..extra_index]);
|
||||
break :special_prong;
|
||||
@ -5220,7 +5222,9 @@ fn switchExpr(
|
||||
}
|
||||
extra_index += body_len - 2;
|
||||
const store_inst = scalar_cases_payload.items[extra_index];
|
||||
if (zir_tags[store_inst] != .store_to_block_ptr) {
|
||||
if (zir_tags[store_inst] != .store_to_block_ptr or
|
||||
zir_datas[store_inst].bin.lhs != block_scope.rl_ptr)
|
||||
{
|
||||
extra_index += 2;
|
||||
astgen.extra.appendSliceAssumeCapacity(scalar_cases_payload.items[start_index..extra_index]);
|
||||
continue;
|
||||
@ -5236,15 +5240,12 @@ fn switchExpr(
|
||||
.rhs = zir_datas[break_inst].@"break".operand,
|
||||
};
|
||||
zir_datas[break_inst].@"break".operand = parent_gz.indexToRef(store_inst);
|
||||
} else if (zir_datas[store_inst].bin.lhs == block_scope.rl_ptr) {
|
||||
} else {
|
||||
scalar_cases_payload.items[body_len_index] -= 1;
|
||||
astgen.extra.appendSliceAssumeCapacity(scalar_cases_payload.items[start_index..extra_index]);
|
||||
extra_index += 1;
|
||||
astgen.extra.appendAssumeCapacity(scalar_cases_payload.items[extra_index]);
|
||||
extra_index += 1;
|
||||
} else {
|
||||
extra_index += 2;
|
||||
astgen.extra.appendSliceAssumeCapacity(scalar_cases_payload.items[start_index..extra_index]);
|
||||
}
|
||||
}
|
||||
extra_index = 0;
|
||||
@ -5267,7 +5268,9 @@ fn switchExpr(
|
||||
}
|
||||
extra_index += body_len - 2;
|
||||
const store_inst = multi_cases_payload.items[extra_index];
|
||||
if (zir_tags[store_inst] != .store_to_block_ptr) {
|
||||
if (zir_tags[store_inst] != .store_to_block_ptr or
|
||||
zir_datas[store_inst].bin.lhs != block_scope.rl_ptr)
|
||||
{
|
||||
extra_index += 2;
|
||||
astgen.extra.appendSliceAssumeCapacity(multi_cases_payload.items[start_index..extra_index]);
|
||||
continue;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user