Skip to content

Commit 3787124

Browse files
committed
Fix temporary variable naming collision when using translate-c with __builtin_convertvector.
Fixes #23999.
1 parent 1a08c83 commit 3787124

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/translate_c.zig

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,7 +1257,12 @@ fn transConvertVectorExpr(
12571257
const src_vector_ty = @as(*const clang.VectorType, @ptrCast(src_type));
12581258
const src_element_qt = src_vector_ty.getElementType();
12591259

1260-
const src_expr_node = try transExpr(c, &block_scope.base, src_expr, .used);
1260+
const src_expr_var_name = try block_scope.makeMangledName(c, "tmp");
1261+
try block_scope.statements.append(try Tag.var_simple.create(c.arena, .{
1262+
.name = src_expr_var_name,
1263+
.init = try transExpr(c, &block_scope.base, src_expr, .used),
1264+
}));
1265+
const src_expr_var_node = try Tag.identifier.create(c.arena, src_expr_var_name);
12611266

12621267
const dst_qt = expr.getTypeSourceInfo_getType();
12631268
const dst_type_node = try transQualType(c, &block_scope.base, dst_qt, base_stmt.getBeginLoc());
@@ -1273,7 +1278,7 @@ fn transConvertVectorExpr(
12731278
while (i < num_elements) : (i += 1) {
12741279
const mangled_name = try block_scope.makeMangledName(c, "tmp");
12751280
const value = try Tag.array_access.create(c.arena, .{
1276-
.lhs = src_expr_node,
1281+
.lhs = src_expr_var_node,
12771282
.rhs = try transCreateNodeNumber(c, i, .int),
12781283
});
12791284
const tmp_decl_node = try Tag.var_simple.create(c.arena, .{
@@ -1284,7 +1289,7 @@ fn transConvertVectorExpr(
12841289
}
12851290

12861291
const init_list = try c.arena.alloc(Node, num_elements);
1287-
for (init_list, 0..) |*init, init_index| {
1292+
for (init_list, block_scope.statements.items.len - num_elements..) |*init, init_index| {
12881293
const tmp_decl = block_scope.statements.items[init_index];
12891294
const name = tmp_decl.castTag(.var_simple).?.data.name;
12901295
init.* = try Tag.identifier.create(c.arena, name);

0 commit comments

Comments
 (0)