Skip to content

Commit 87879b0

Browse files
committed
Update driver snapshots after decay tests.
Fix IR test failure. Regenerate ARM IR snapshots to reflect the corrected lowering. Restore ARM/RISC-V codegen files to original structure after earlier brace experiment. Treat zero-length array compound literals as constant zero during lowering so scalar uses don't load garbage. Fix coding style for parser.c according to cubic's suggestion. Ignore comment modification in tests/driver.sh
1 parent 7491947 commit 87879b0

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/parser.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,6 +1402,7 @@ var_t *scalarize_array_literal(block_t *parent,
14021402
scalar->init_val = array_var->init_val;
14031403

14041404
add_insn(parent, *bb, OP_read, scalar, array_var, NULL, elem_size, NULL);
1405+
14051406
return scalar;
14061407
}
14071408
void read_inner_var_decl(var_t *vd, bool anon, bool is_param)
@@ -2154,6 +2155,12 @@ void read_expr_operand(block_t *parent, basic_block_t **bb)
21542155
add_insn(parent, *bb, OP_allocat, compound_var, NULL, NULL, 0,
21552156
NULL);
21562157
parse_array_compound_literal(compound_var, parent, bb, true);
2158+
2159+
if (compound_var->array_size == 0) {
2160+
compound_var->init_val = 0;
2161+
add_insn(parent, *bb, OP_load_constant, compound_var, NULL,
2162+
NULL, 0, NULL);
2163+
}
21572164
opstack_push(compound_var);
21582165
consumed_close_brace = true;
21592166
} else if (cast_ptr_level > 0) {
@@ -4529,9 +4536,7 @@ basic_block_t *read_body_statement(block_t *parent, basic_block_t *bb)
45294536
read_expr(parent, &bb);
45304537
read_ternary_operation(parent, &bb);
45314538

4532-
var_t *expr_result = opstack_pop();
4533-
4534-
var_t *rhs = expr_result;
4539+
var_t *rhs = opstack_pop();
45354540
if (!var->ptr_level && var->array_size == 0)
45364541
rhs = scalarize_array_literal(parent, &bb, rhs,
45374542
var->type);
@@ -4628,8 +4633,7 @@ basic_block_t *read_body_statement(block_t *parent, basic_block_t *bb)
46284633
} else {
46294634
read_expr(parent, &bb);
46304635
read_ternary_operation(parent, &bb);
4631-
var_t *expr_result = opstack_pop();
4632-
var_t *rhs = expr_result;
4636+
var_t *rhs = opstack_pop();
46334637
if (!nv->ptr_level && nv->array_size == 0)
46344638
rhs = scalarize_array_literal(parent, &bb, rhs,
46354639
nv->type);

0 commit comments

Comments
 (0)