@@ -1257,7 +1257,12 @@ fn transConvertVectorExpr(
1257
1257
const src_vector_ty = @as (* const clang .VectorType , @ptrCast (src_type ));
1258
1258
const src_element_qt = src_vector_ty .getElementType ();
1259
1259
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 );
1261
1266
1262
1267
const dst_qt = expr .getTypeSourceInfo_getType ();
1263
1268
const dst_type_node = try transQualType (c , & block_scope .base , dst_qt , base_stmt .getBeginLoc ());
@@ -1273,7 +1278,7 @@ fn transConvertVectorExpr(
1273
1278
while (i < num_elements ) : (i += 1 ) {
1274
1279
const mangled_name = try block_scope .makeMangledName (c , "tmp" );
1275
1280
const value = try Tag .array_access .create (c .arena , .{
1276
- .lhs = src_expr_node ,
1281
+ .lhs = src_expr_var_node ,
1277
1282
.rhs = try transCreateNodeNumber (c , i , .int ),
1278
1283
});
1279
1284
const tmp_decl_node = try Tag .var_simple .create (c .arena , .{
@@ -1284,7 +1289,7 @@ fn transConvertVectorExpr(
1284
1289
}
1285
1290
1286
1291
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 | {
1288
1293
const tmp_decl = block_scope .statements .items [init_index ];
1289
1294
const name = tmp_decl .castTag (.var_simple ).? .data .name ;
1290
1295
init .* = try Tag .identifier .create (c .arena , name );
0 commit comments