authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-11-06 15:21:28+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-11-06 15:21:28+01:00
log72769f6cec3093be0b82c52a50e4caff2eefa551
tree34b5afc36395643b647e2c627804e81f6beceacf
parent351031b6c7b01f45a4ee366eb1c0b28bce89145c

link-tests: add test case for parsing weak imports


3 files changed, 44 insertions(+), 0 deletions(-)

test/link.zig+5
...@@ -79,6 +79,11 @@ fn addWasmCases(cases: *tests.StandaloneContext) void {...@@ -79,6 +79,11 @@ fn addWasmCases(cases: *tests.StandaloneContext) void {
79}79}
8080
81fn addMachOCases(cases: *tests.StandaloneContext) void {81fn addMachOCases(cases: *tests.StandaloneContext) void {
82 cases.addBuildFile("test/link/macho/bugs/13056/build.zig", .{
83 .build_modes = true,
84 .requires_macos_sdk = true,
85 });
86
82 cases.addBuildFile("test/link/macho/bugs/13457/build.zig", .{87 cases.addBuildFile("test/link/macho/bugs/13457/build.zig", .{
83 .build_modes = true,88 .build_modes = true,
84 });89 });
test/link/macho/bugs/13056/build.zig created+29
...@@ -0,0 +1,29 @@
1const std = @import("std");
2const Builder = std.build.Builder;
3
4pub fn build(b: *Builder) void {
5 const mode = b.standardReleaseOptions();
6
7 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
8 const target_info = std.zig.system.NativeTargetInfo.detect(target) catch unreachable;
9 const sdk = std.zig.system.darwin.getDarwinSDK(b.allocator, target_info.target) orelse
10 @panic("macOS SDK is required to run the test");
11
12 const test_step = b.step("test", "Test the program");
13
14 const exe = b.addExecutable("test", null);
15 b.default_step.dependOn(&exe.step);
16 exe.addIncludePath(std.fs.path.join(b.allocator, &.{ sdk.path, "/usr/include" }) catch unreachable);
17 exe.addIncludePath(std.fs.path.join(b.allocator, &.{ sdk.path, "/usr/include/c++/v1" }) catch unreachable);
18 exe.addCSourceFile("test.cpp", &.{
19 "-nostdlib++",
20 "-nostdinc++",
21 });
22 exe.addObjectFile(std.fs.path.join(b.allocator, &.{ sdk.path, "/usr/lib/libc++.tbd" }) catch unreachable);
23 exe.setBuildMode(mode);
24
25 const run_cmd = exe.run();
26 run_cmd.expectStdErrEqual("x: 5\n");
27
28 test_step.dependOn(&run_cmd.step);
29}
test/link/macho/bugs/13056/test.cpp created+10
...@@ -0,0 +1,10 @@
1// test.cpp
2#include <new>
3#include <cstdio>
4
5int main() {
6 int *x = new int;
7 *x = 5;
8 fprintf(stderr, "x: %d\n", *x);
9 delete x;
10}