From c39d7a632603c944732787e3ba1b77e26fccc3c1 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 27 Feb 2020 11:51:43 -0500 Subject: [PATCH] fix exported variable not respecting linkage --- src/ir.cpp | 1 + test/standalone/global_linkage/build.zig | 23 +++++++++++++++++++++++ test/standalone/global_linkage/main.zig | 9 +++++++++ test/standalone/global_linkage/obj1.zig | 7 +++++++ test/standalone/global_linkage/obj2.zig | 7 +++++++ 5 files changed, 47 insertions(+) create mode 100644 test/standalone/global_linkage/build.zig create mode 100644 test/standalone/global_linkage/main.zig create mode 100644 test/standalone/global_linkage/obj1.zig create mode 100644 test/standalone/global_linkage/obj2.zig diff --git a/src/ir.cpp b/src/ir.cpp index 7de45ebcd3..895cfa334c 100644 --- a/src/ir.cpp +++ b/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: diff --git a/test/standalone/global_linkage/build.zig b/test/standalone/global_linkage/build.zig new file mode 100644 index 0000000000..c6c45c008a --- /dev/null +++ b/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); +} diff --git a/test/standalone/global_linkage/main.zig b/test/standalone/global_linkage/main.zig new file mode 100644 index 0000000000..53d953765b --- /dev/null +++ b/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); +} diff --git a/test/standalone/global_linkage/obj1.zig b/test/standalone/global_linkage/obj1.zig new file mode 100644 index 0000000000..95814cda3d --- /dev/null +++ b/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 }); +} diff --git a/test/standalone/global_linkage/obj2.zig b/test/standalone/global_linkage/obj2.zig new file mode 100644 index 0000000000..f2d44b2dc0 --- /dev/null +++ b/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 }); +}