diff options
| author | Parker Liu <flyfish30@users.noreply.github.com> | 2025-04-01 01:22:03 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-31 20:22:03 +0300 |
| commit | 0bdc0bb534ed6d3cc787b5bca44173d2b49480da (patch) | |
| tree | 0344b4b07edca28ee5d306c04d46e7b442984684 /src | |
| parent | 0753af792a41645b6cac51d7bd29b2c526c3b81b (diff) | |
| download | zig-0bdc0bb534ed6d3cc787b5bca44173d2b49480da.tar.gz zig-0bdc0bb534ed6d3cc787b5bca44173d2b49480da.zip | |
translate-c: fix referencing extern locals from nested blocks
Diffstat (limited to 'src')
| -rw-r--r-- | src/translate_c.zig | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/translate_c.zig b/src/translate_c.zig index 19a2fde13c..20a5f75e21 100644 --- a/src/translate_c.zig +++ b/src/translate_c.zig @@ -1964,7 +1964,14 @@ fn transImplicitCastExpr( return maybeSuppressResult(c, result_used, sub_expr_node); } - const addr = try Tag.address_of.create(c.arena, sub_expr_node); + const index_val = try Tag.integer_literal.create(c.arena, "0"); + const index = try Tag.as.create(c.arena, .{ + .lhs = try Tag.type.create(c.arena, "usize"), + .rhs = try Tag.int_cast.create(c.arena, index_val), + }); + const array0_node = try Tag.array_access.create(c.arena, .{ .lhs = sub_expr_node, .rhs = index }); + // Convert array to pointer by expression: addr = &sub_expr[0] + const addr = try Tag.address_of.create(c.arena, array0_node); const casted = try transCPtrCast(c, scope, expr.getBeginLoc(), dest_type, src_type, addr); return maybeSuppressResult(c, result_used, casted); }, |
