Commit c39d7a6326

Andrew Kelley <andrew@ziglang.org>
2020-02-27 17:51:43
fix exported variable not respecting linkage
1 parent 2696c8b
Changed files (5)
src
test
standalone
src/ir.cpp
@@ -17841,6 +17841,7 @@ static IrInstGen *ir_analyze_instruction_export(IrAnalyze *ira, IrInstSrcExport
             }
         } break;
         case ZigTypeIdInt:
+            want_var_export = true;
             break;
         case ZigTypeIdVoid:
         case ZigTypeIdBool:
test/standalone/global_linkage/build.zig
@@ -0,0 +1,23 @@
+const Builder = @import("std").build.Builder;
+
+pub fn build(b: *Builder) void {
+    const mode = b.standardReleaseOptions();
+    const target = b.standardTargetOptions(null);
+
+    const obj1 = b.addStaticLibrary("obj1", "obj1.zig");
+    obj1.setBuildMode(mode);
+    obj1.setTheTarget(target);
+
+    const obj2 = b.addStaticLibrary("obj2", "obj2.zig");
+    obj2.setBuildMode(mode);
+    obj2.setTheTarget(target);
+
+    const main = b.addTest("main.zig");
+    main.setBuildMode(mode);
+    main.setTheTarget(target);
+    main.linkLibrary(obj1);
+    main.linkLibrary(obj2);
+
+    const test_step = b.step("test", "Test it");
+    test_step.dependOn(&main.step);
+}
test/standalone/global_linkage/main.zig
@@ -0,0 +1,9 @@
+const std = @import("std");
+
+extern var obj1_integer: usize;
+extern var obj2_integer: usize;
+
+test "access the external integers" {
+    std.testing.expect(obj1_integer == 421);
+    std.testing.expect(obj2_integer == 422);
+}
test/standalone/global_linkage/obj1.zig
@@ -0,0 +1,7 @@
+extern var internal_integer: usize = 1;
+extern var obj1_integer: usize = 421;
+
+comptime {
+    @export(internal_integer, .{ .name = "internal_integer", .linkage = .Internal });
+    @export(obj1_integer, .{ .name = "obj1_integer", .linkage = .Strong });
+}
test/standalone/global_linkage/obj2.zig
@@ -0,0 +1,7 @@
+extern var internal_integer: usize = 2;
+extern var obj2_integer: usize = 422;
+
+comptime {
+    @export(internal_integer, .{ .name = "internal_integer", .linkage = .Internal });
+    @export(obj2_integer, .{ .name = "obj2_integer", .linkage = .Strong });
+}