aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-11-09 18:24:38 -0500
committerGitHub <noreply@github.com>2021-11-09 18:24:38 -0500
commit7afa220f92dc0689116fc74935f6ddb73037f3c2 (patch)
treeff0818274a1d4f2af7ce6f4cf6fd51d321addcfc /src/codegen/c.zig
parentc715d512cbf513bc5a62a4b6022b037ee43900ba (diff)
parent684d9532c5ed0f8e213e6163d77d248ceb7393dd (diff)
downloadzig-7afa220f92dc0689116fc74935f6ddb73037f3c2.tar.gz
zig-7afa220f92dc0689116fc74935f6ddb73037f3c2.zip
Merge pull request #10102 from rainbowbismuth/c-while-tests
C backend: while, struct tests, better undefined global handling
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 5935985961..40f1efbae1 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -448,7 +448,14 @@ pub const DeclGen = struct {
try w.writeAll("ZIG_COLD ");
}
}
- try dg.renderType(w, dg.decl.ty.fnReturnType());
+ const return_ty = dg.decl.ty.fnReturnType();
+ if (return_ty.hasCodeGenBits()) {
+ try dg.renderType(w, return_ty);
+ } else if (return_ty.zigTypeTag() == .NoReturn) {
+ try w.writeAll("zig_noreturn void");
+ } else {
+ try w.writeAll("void");
+ }
try w.writeAll(" ");
try dg.renderDeclName(dg.decl, w);
try w.writeAll("(");
@@ -947,6 +954,10 @@ pub fn genDecl(o: *Object) !void {
}
try fwd_decl_writer.writeAll(";\n");
+ if (variable.init.isUndef()) {
+ return;
+ }
+
try o.indent_writer.insertNewline();
const w = o.writer();
try o.dg.renderType(w, o.dg.decl.ty);
@@ -1886,6 +1897,9 @@ fn airBr(f: *Function, inst: Air.Inst.Index) !CValue {
}
fn airBitcast(f: *Function, inst: Air.Inst.Index) !CValue {
+ if (f.liveness.isUnused(inst))
+ return CValue.none;
+
const ty_op = f.air.instructions.items(.data)[inst].ty_op;
const operand = try f.resolveInst(ty_op.operand);