From 4d6d6977b05571e6d164dbf5f26c7a48ee3541a3 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 16 Oct 2021 12:26:06 -0700 Subject: stage2: fixes to extern variables * Relax compile error for "unable to export type foo" to allow integers, structs, arrays, and floats. This will need to be further improved to do the same checks as we do for C ABI struct field types. * LLVM backend: fix extern variables * LLVM backend: implement AIR instruction `wrap_err_union_payload` --- src/Module.zig | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/Module.zig') diff --git a/src/Module.zig b/src/Module.zig index 43c0178863..a42ec3c2e1 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -754,6 +754,15 @@ pub const Decl = struct { fn removeDependency(decl: *Decl, other: *Decl) void { assert(decl.dependencies.swapRemove(other)); } + + pub fn isExtern(decl: Decl) bool { + assert(decl.has_tv); + return switch (decl.val.tag()) { + .extern_fn => true, + .variable => decl.val.castTag(.variable).?.data.init.tag() == .unreachable_value, + else => false, + }; + } }; /// This state is attached to every Decl when Module emit_h is non-null. -- cgit v1.2.3