From bd926e5ea0f9b27677a270a4e8253b6a6f77379c Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Tue, 14 Dec 2021 23:58:17 +0100 Subject: [PATCH] add standalone tests for the new linker bug fixes This is just a temp addition until I figure out how to tweak the stage2 test harness to add the ability to test the linker too. --- test/standalone.zig | 4 ++++ .../standalone/link_common_symbols_alignment/a.c | 2 ++ .../link_common_symbols_alignment/build.zig | 16 ++++++++++++++++ .../link_common_symbols_alignment/main.zig | 9 +++++++++ test/standalone/link_import_tls_dylib/a.c | 1 + test/standalone/link_import_tls_dylib/build.zig | 16 ++++++++++++++++ test/standalone/link_import_tls_dylib/main.zig | 7 +++++++ 7 files changed, 55 insertions(+) create mode 100644 test/standalone/link_common_symbols_alignment/a.c create mode 100644 test/standalone/link_common_symbols_alignment/build.zig create mode 100644 test/standalone/link_common_symbols_alignment/main.zig create mode 100644 test/standalone/link_import_tls_dylib/a.c create mode 100644 test/standalone/link_import_tls_dylib/build.zig create mode 100644 test/standalone/link_import_tls_dylib/main.zig diff --git a/test/standalone.zig b/test/standalone.zig index ec35b89c40..4081e5aff3 100644 --- a/test/standalone.zig +++ b/test/standalone.zig @@ -34,6 +34,10 @@ pub fn addCases(cases: *tests.StandaloneContext) void { cases.addBuildFile("test/standalone/link_frameworks/build.zig", .{ .requires_macos_sdk = true, }); + cases.addBuildFile("test/standalone/link_common_symbols_alignment/build.zig", .{}); + if (builtin.os.tag == .macos) { + cases.addBuildFile("test/standalone/link_import_tls_dylib/build.zig", .{}); + } cases.addBuildFile("test/standalone/issue_339/build.zig", .{}); cases.addBuildFile("test/standalone/issue_8550/build.zig", .{}); cases.addBuildFile("test/standalone/issue_794/build.zig", .{}); diff --git a/test/standalone/link_common_symbols_alignment/a.c b/test/standalone/link_common_symbols_alignment/a.c new file mode 100644 index 0000000000..adff9d15f3 --- /dev/null +++ b/test/standalone/link_common_symbols_alignment/a.c @@ -0,0 +1,2 @@ +int foo; +__attribute__((aligned(4096))) int bar; diff --git a/test/standalone/link_common_symbols_alignment/build.zig b/test/standalone/link_common_symbols_alignment/build.zig new file mode 100644 index 0000000000..a62d86af4f --- /dev/null +++ b/test/standalone/link_common_symbols_alignment/build.zig @@ -0,0 +1,16 @@ +const Builder = @import("std").build.Builder; + +pub fn build(b: *Builder) void { + const mode = b.standardReleaseOptions(); + + const lib_a = b.addStaticLibrary("a", null); + lib_a.addCSourceFiles(&.{"a.c"}, &.{"-fcommon"}); + lib_a.setBuildMode(mode); + + const test_exe = b.addTest("main.zig"); + test_exe.setBuildMode(mode); + test_exe.linkLibrary(lib_a); + + const test_step = b.step("test", "Test it"); + test_step.dependOn(&test_exe.step); +} diff --git a/test/standalone/link_common_symbols_alignment/main.zig b/test/standalone/link_common_symbols_alignment/main.zig new file mode 100644 index 0000000000..3d3457c764 --- /dev/null +++ b/test/standalone/link_common_symbols_alignment/main.zig @@ -0,0 +1,9 @@ +const std = @import("std"); + +extern var foo: i32; +extern var bar: i32; + +test { + try std.testing.expect(@ptrToInt(&foo) % 4 == 0); + try std.testing.expect(@ptrToInt(&bar) % 4096 == 0); +} diff --git a/test/standalone/link_import_tls_dylib/a.c b/test/standalone/link_import_tls_dylib/a.c new file mode 100644 index 0000000000..5c5aa5bae4 --- /dev/null +++ b/test/standalone/link_import_tls_dylib/a.c @@ -0,0 +1 @@ +_Thread_local int a; diff --git a/test/standalone/link_import_tls_dylib/build.zig b/test/standalone/link_import_tls_dylib/build.zig new file mode 100644 index 0000000000..332173fbb6 --- /dev/null +++ b/test/standalone/link_import_tls_dylib/build.zig @@ -0,0 +1,16 @@ +const Builder = @import("std").build.Builder; + +pub fn build(b: *Builder) void { + const mode = b.standardReleaseOptions(); + + const lib = b.addSharedLibrary("a", null, b.version(1, 0, 0)); + lib.setBuildMode(mode); + lib.addCSourceFile("a.c", &.{}); + + const test_exe = b.addTest("main.zig"); + test_exe.setBuildMode(mode); + test_exe.linkLibrary(lib); + + const test_step = b.step("test", "Test it"); + test_step.dependOn(&test_exe.step); +} diff --git a/test/standalone/link_import_tls_dylib/main.zig b/test/standalone/link_import_tls_dylib/main.zig new file mode 100644 index 0000000000..354c6f545e --- /dev/null +++ b/test/standalone/link_import_tls_dylib/main.zig @@ -0,0 +1,7 @@ +const std = @import("std"); + +extern threadlocal var a: i32; + +test { + try std.testing.expect(a == 0); +}