diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2022-11-02 22:58:55 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2022-11-02 23:00:10 -0400 |
| commit | f02b8a9cca4bf991146dab44ef8707b987ce7a1d (patch) | |
| tree | 95e2d98faff34c8e76a22bb5df17a2518e5ea9ec /src/codegen | |
| parent | 085f6fd8f729423158b6f7a5f8e6f50f78fef18f (diff) | |
| download | zig-f02b8a9cca4bf991146dab44ef8707b987ce7a1d.tar.gz zig-f02b8a9cca4bf991146dab44ef8707b987ce7a1d.zip | |
cbe: fix padding bits after a bitcast
Diffstat (limited to 'src/codegen')
| -rw-r--r-- | src/codegen/c.zig | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 980dfb5ff2..e9dcbd8435 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -3703,7 +3703,6 @@ fn airBitcast(f: *Function, inst: Air.Inst.Index) !CValue { const local = try f.allocLocal(inst_ty, .Const); try writer.writeAll(" = ("); try f.renderTypecast(writer, inst_ty); - try writer.writeByte(')'); try f.writeCValue(writer, operand, .Other); try writer.writeAll(";\n"); @@ -3721,6 +3720,17 @@ fn airBitcast(f: *Function, inst: Air.Inst.Index) !CValue { try f.renderTypecast(writer, inst_ty); try writer.writeAll("));\n"); + // Ensure padding bits have the expected value. + if (inst_ty.isAbiInt()) { + try f.writeCValue(writer, local, .Other); + try writer.writeAll(" = zig_wrap_"); + try f.object.dg.renderTypeForBuiltinFnName(writer, inst_ty); + try writer.writeByte('('); + try f.writeCValue(writer, local, .Other); + try f.object.dg.renderBuiltinInfo(writer, inst_ty, .Bits); + try writer.writeAll(");\n"); + } + return local; } |
