authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-02-22 15:25:50+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-02-22 15:25:50+02:00
logdf38c46bee9a54b9935f2e3372f6b86299730888
treefd7226c3b7380b6f650cf3864e95b3528f5ce9c2
parentc2a9a591f6f746c777800e4394ca0ee875be3688
parent176f7b86004b6e882d628ee50b272f859e5e9aba
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #10929 from davidmrt98/cbe

stage2: C backend: fix codegen for field_ptr/elem_ptr values

2 files changed, 18 insertions(+), 18 deletions(-)

src/codegen/c.zig+15-15
......@@ -389,19 +389,19 @@ pub const DeclGen = struct {
389389 // Determine if we must pointer cast.
390390 if (ty.eql(decl.ty)) {
391391 try writer.writeByte('&');
392 try dg.renderDeclName(decl, writer);
392 try dg.renderDeclName(writer, decl);
393393 return;
394394 }
395395
396396 try writer.writeAll("((");
397397 try dg.renderTypecast(writer, ty);
398398 try writer.writeAll(")&");
399 try dg.renderDeclName(decl, writer);
399 try dg.renderDeclName(writer, decl);
400400 try writer.writeByte(')');
401401 return;
402402 }
403403
404 try dg.renderDeclName(decl, writer);
404 try dg.renderDeclName(writer, decl);
405405 }
406406
407407 fn renderInt128(
......@@ -464,7 +464,7 @@ pub const DeclGen = struct {
464464 .variable => ptr_val.castTag(.variable).?.data.owner_decl,
465465 else => unreachable,
466466 };
467 try dg.renderDeclValue(writer, decl.ty, ptr_val, decl);
467 try dg.renderDeclName(writer, decl);
468468 return decl.ty;
469469 },
470470 .field_ptr => {
......@@ -490,7 +490,7 @@ pub const DeclGen = struct {
490490 },
491491 .elem_ptr => {
492492 const elem_ptr = ptr_val.castTag(.elem_ptr).?.data;
493 try writer.writeAll("&(*");
493 try writer.writeAll("&(");
494494 const container_ty = try dg.renderChildPtr(writer, elem_ptr.array_ptr);
495495 try writer.print(")[{d}]", .{elem_ptr.index});
496496 return container_ty.childType();
......@@ -599,11 +599,11 @@ pub const DeclGen = struct {
599599 },
600600 .function => {
601601 const func = val.castTag(.function).?.data;
602 try dg.renderDeclName(func.owner_decl, writer);
602 try dg.renderDeclName(writer, func.owner_decl);
603603 },
604604 .extern_fn => {
605605 const extern_fn = val.castTag(.extern_fn).?.data;
606 try dg.renderDeclName(extern_fn.owner_decl, writer);
606 try dg.renderDeclName(writer, extern_fn.owner_decl);
607607 },
608608 .int_u64, .one => {
609609 try writer.writeAll("((");
......@@ -834,7 +834,7 @@ pub const DeclGen = struct {
834834 try w.writeAll("void");
835835 }
836836 try w.writeAll(" ");
837 try dg.renderDeclName(dg.decl, w);
837 try dg.renderDeclName(w, dg.decl);
838838 try w.writeAll("(");
839839 const param_len = dg.decl.ty.fnParamLen();
840840
......@@ -1058,7 +1058,7 @@ pub const DeclGen = struct {
10581058 if (err_set_type.castTag(.error_set_inferred)) |inf_err_set_payload| {
10591059 const func = inf_err_set_payload.data.func;
10601060 try bw.writeAll("zig_E_");
1061 try dg.renderDeclName(func.owner_decl, bw);
1061 try dg.renderDeclName(bw, func.owner_decl);
10621062 try bw.writeAll(";\n");
10631063 } else {
10641064 try bw.print("zig_E_{s}_{s};\n", .{
......@@ -1391,10 +1391,10 @@ pub const DeclGen = struct {
13911391 .local_ref => |i| return w.print("&t{d}", .{i}),
13921392 .constant => unreachable,
13931393 .arg => |i| return w.print("a{d}", .{i}),
1394 .decl => |decl| return dg.renderDeclName(decl, w),
1394 .decl => |decl| return dg.renderDeclName(w, decl),
13951395 .decl_ref => |decl| {
13961396 try w.writeByte('&');
1397 return dg.renderDeclName(decl, w);
1397 return dg.renderDeclName(w, decl);
13981398 },
13991399 .undefined_ptr => {
14001400 const target = dg.module.getTarget();
......@@ -1418,10 +1418,10 @@ pub const DeclGen = struct {
14181418 .arg => |i| return w.print("(*a{d})", .{i}),
14191419 .decl => |decl| {
14201420 try w.writeAll("(*");
1421 try dg.renderDeclName(decl, w);
1421 try dg.renderDeclName(w, decl);
14221422 return w.writeByte(')');
14231423 },
1424 .decl_ref => |decl| return dg.renderDeclName(decl, w),
1424 .decl_ref => |decl| return dg.renderDeclName(w, decl),
14251425 .undefined_ptr => unreachable,
14261426 .identifier => |ident| return w.print("(*{ })", .{fmtIdent(ident)}),
14271427 .bytes => |bytes| {
......@@ -1432,7 +1432,7 @@ pub const DeclGen = struct {
14321432 }
14331433 }
14341434
1435 fn renderDeclName(dg: DeclGen, decl: *Decl, writer: anytype) !void {
1435 fn renderDeclName(dg: DeclGen, writer: anytype, decl: *Decl) !void {
14361436 if (dg.module.decl_exports.get(decl)) |exports| {
14371437 return writer.writeAll(exports[0].options.name);
14381438 } else if (decl.val.tag() == .extern_fn) {
......@@ -2586,7 +2586,7 @@ fn airCall(f: *Function, inst: Air.Inst.Index) !CValue {
25862586 else => break :known,
25872587 };
25882588 };
2589 try f.object.dg.renderDeclName(fn_decl, writer);
2589 try f.object.dg.renderDeclName(writer, fn_decl);
25902590 break :callee;
25912591 }
25922592 // Fall back to function pointer call.
test/behavior.zig+3-3
......@@ -101,19 +101,19 @@ test {
101101
102102 if (builtin.zig_backend != .stage2_wasm) {
103103 // Tests that pass for stage1, llvm backend, C backend
104 _ = @import("behavior/bugs/9584.zig");
104105 _ = @import("behavior/cast_int.zig");
106 _ = @import("behavior/eval.zig");
105107 _ = @import("behavior/int128.zig");
108 _ = @import("behavior/merge_error_sets.zig");
106109 _ = @import("behavior/translate_c_macros.zig");
107110
108111 if (builtin.zig_backend != .stage2_c) {
109112 // Tests that pass for stage1 and the llvm backend.
110113 _ = @import("behavior/atomics.zig");
111 _ = @import("behavior/bugs/9584.zig");
112 _ = @import("behavior/eval.zig");
113114 _ = @import("behavior/floatop.zig");
114115 _ = @import("behavior/math.zig");
115116 _ = @import("behavior/maximum_minimum.zig");
116 _ = @import("behavior/merge_error_sets.zig");
117117 _ = @import("behavior/popcount.zig");
118118 _ = @import("behavior/saturating_arithmetic.zig");
119119 _ = @import("behavior/sizeof_and_typeof.zig");