From b5b507a7425d2cf6b09c16db96fa10c3d13f7799 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 15 Nov 2022 23:15:55 -0500 Subject: zig.h: match float comparison signatures from compiler rt --- src/codegen/c.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/codegen/c.zig b/src/codegen/c.zig index e9dcbd8435..ad49a83510 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -4825,7 +4825,7 @@ fn airCmpBuiltinCall( try f.writeCValue(writer, try f.resolveInst(bin_op.lhs), .FunctionArgument); try writer.writeAll(", "); try f.writeCValue(writer, try f.resolveInst(bin_op.rhs), .FunctionArgument); - try writer.print(") {s} {};\n", .{ operator, try f.fmtIntLiteral(Type.initTag(.i8), Value.zero) }); + try writer.print(") {s} {};\n", .{ operator, try f.fmtIntLiteral(Type.initTag(.i32), Value.zero) }); return local; } -- cgit v1.2.3 From b82aec5a15acd3d10f2efbde52a0bfb9af411891 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 15 Nov 2022 23:18:00 -0500 Subject: cbe: fix indexing with a zero-bit element type Fixes void dereference warnings on gcc 11.3.0. --- src/codegen/c.zig | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/codegen/c.zig b/src/codegen/c.zig index ad49a83510..9b74a48a1a 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -2658,12 +2658,14 @@ fn airPtrElemPtr(f: *Function, inst: Air.Inst.Index) !CValue { const ty_pl = f.air.instructions.items(.data)[inst].ty_pl; const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data; const ptr_ty = f.air.typeOf(bin_op.lhs); + const child_ty = ptr_ty.childType(); const ptr = try f.resolveInst(bin_op.lhs); + if (!child_ty.hasRuntimeBitsIgnoreComptime()) return ptr; const index = try f.resolveInst(bin_op.rhs); + const writer = f.object.writer(); const local = try f.allocLocal(f.air.typeOfIndex(inst), .Const); - try writer.writeAll(" = &("); if (ptr_ty.ptrSize() == .One) { // It's a pointer to an array, so we need to de-reference. @@ -2717,15 +2719,23 @@ fn airSliceElemPtr(f: *Function, inst: Air.Inst.Index) !CValue { const ty_pl = f.air.instructions.items(.data)[inst].ty_pl; const bin_op = f.air.extraData(Air.Bin, ty_pl.payload).data; + const slice_ty = f.air.typeOf(bin_op.lhs); + const child_ty = slice_ty.elemType2(); const slice = try f.resolveInst(bin_op.lhs); - const index = try f.resolveInst(bin_op.rhs); + const writer = f.object.writer(); const local = try f.allocLocal(f.air.typeOfIndex(inst), .Const); - try writer.writeAll(" = &"); + try writer.writeAll(" = "); + if (child_ty.hasRuntimeBitsIgnoreComptime()) try writer.writeByte('&'); try f.writeCValue(writer, slice, .Other); - try writer.writeAll(".ptr["); - try f.writeCValue(writer, index, .Other); - try writer.writeAll("];\n"); + try writer.writeAll(".ptr"); + if (child_ty.hasRuntimeBitsIgnoreComptime()) { + const index = try f.resolveInst(bin_op.rhs); + try writer.writeByte('['); + try f.writeCValue(writer, index, .Other); + try writer.writeByte(']'); + } + try writer.writeAll(";\n"); return local; } -- cgit v1.2.3 From a9c005e0e48cb88467b97dcdc9a25dbf7a5a5b4b Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Tue, 15 Nov 2022 23:19:22 -0500 Subject: cbe: fixed tagged union initializers of a zero-bit field type Fixes missing braces warnings on gcc 11.3.0. --- src/codegen/c.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 9b74a48a1a..e7dadf6df2 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -1140,10 +1140,16 @@ pub const DeclGen = struct { const index = ty.unionTagFieldIndex(union_obj.tag, dg.module).?; const field_ty = ty.unionFields().values()[index].ty; const field_name = ty.unionFields().keys()[index]; + var it = ty.unionFields().iterator(); if (field_ty.hasRuntimeBits()) { try writer.print(".{ } = ", .{fmtIdent(field_name)}); try dg.renderValue(writer, field_ty, union_obj.val, .Initializer); - } else try writer.writeByte('0'); + } else while (it.next()) |field| { + if (!field.value_ptr.ty.hasRuntimeBits()) continue; + try writer.print(".{ } = ", .{fmtIdent(field.key_ptr.*)}); + try dg.renderValue(writer, field.value_ptr.ty, Value.undef, .Initializer); + break; + } else try writer.writeAll(".empty_union = 0"); if (ty.unionTagTypeSafety()) |_| try writer.writeByte('}'); try writer.writeByte('}'); }, -- cgit v1.2.3 From 3ae04ed949a68189950ae46f714a135b471f0bca Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Wed, 16 Nov 2022 01:26:09 -0500 Subject: cbe: fix identifiers colliding with the short keyword --- src/codegen/c.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/codegen/c.zig b/src/codegen/c.zig index e7dadf6df2..736eb02973 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -176,7 +176,7 @@ const reserved_idents = std.ComptimeStringMap(void, .{ .{ "register", {} }, .{ "restrict", {} }, .{ "return", {} }, - .{ "short ", {} }, + .{ "short", {} }, .{ "signed", {} }, .{ "size_t", {} }, .{ "sizeof", {} }, -- cgit v1.2.3