diff --git a/src/Sema.zig b/src/Sema.zig index 14511fe82d10146856f1fcf3448b0584c1068b5e..72256d6ae502cd054b069f751b1403616af854ac 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -4321,6 +4321,10 @@ pub fn analyzeExport( const Export = Module.Export; const mod = sema.mod; + if (borrowed_options.linkage == .Internal) { + return; + } + try mod.ensureDeclAnalyzed(exported_decl_index); const exported_decl = mod.declPtr(exported_decl_index); // TODO run the same checks as we do for C ABI struct fields diff --git a/test/behavior/export.zig b/test/behavior/export.zig index 5f8ccf02d44f15207dc369f4c9e40d5d73748440..3943fd2834d00260dcaf00aa97ce5633730fda76 100644 --- a/test/behavior/export.zig +++ b/test/behavior/export.zig @@ -45,3 +45,13 @@ test "exporting enum type and value" { }; try expect(S.e == .two); } + +test "exporting with internal linkage" { + const S = struct { + fn foo() callconv(.C) void {} + comptime { + @export(foo, .{ .name = "exporting_with_internal_linkage_foo", .linkage = .Internal }); + } + }; + S.foo(); +}