aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2022-11-02 22:58:55 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2022-11-02 23:00:10 -0400
commitf02b8a9cca4bf991146dab44ef8707b987ce7a1d (patch)
tree95e2d98faff34c8e76a22bb5df17a2518e5ea9ec /src/codegen/c.zig
parent085f6fd8f729423158b6f7a5f8e6f50f78fef18f (diff)
downloadzig-f02b8a9cca4bf991146dab44ef8707b987ce7a1d.tar.gz
zig-f02b8a9cca4bf991146dab44ef8707b987ce7a1d.zip
cbe: fix padding bits after a bitcast
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig12
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;
}