authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-08-18 00:50:14-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-08-18 00:50:14-04:00
logdf507edffe6c1087b5f4786cb64ccaffd02b6848
tree2134ba2f867db8bf4fbfab2b1aaed0f5759c0db9
parent79757f233d9bfc646caa13d20243266a19bbdf91
parentb6ce0cce69e4bf37509f99040abda4ca92bec6cb
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #12461 from ziglang/fix-12421

Fixes link-tests and `atomicSymLink` on Windows

13 files changed, 88 insertions(+), 79 deletions(-)

ci/azure/pipelines.yml+1-1
......@@ -103,7 +103,7 @@ jobs:
103103 #& "$ZIGINSTALLDIR\bin\zig.exe" test "..\test\behavior.zig" -fno-stage1 -fLLVM -I "..\test" 2>&1
104104 #CheckLastExitCode
105105
106 & "$ZIGINSTALLDIR\bin\zig.exe" build test-toolchain -Dskip-non-native -Dskip-stage2-tests 2>&1
106 & "$ZIGINSTALLDIR\bin\zig.exe" build test-toolchain -Dskip-non-native -Dskip-stage2-tests -Domit-stage2 2>&1
107107 CheckLastExitCode
108108 & "$ZIGINSTALLDIR\bin\zig.exe" build test-std -Dskip-non-native 2>&1
109109 CheckLastExitCode
lib/std/os.zig+1
......@@ -2651,6 +2651,7 @@ pub fn renameatW(
26512651 .creation = windows.FILE_OPEN,
26522652 .io_mode = .blocking,
26532653 .filter = .any, // This function is supposed to rename both files and directories.
2654 .follow_symlinks = false,
26542655 }) catch |err| switch (err) {
26552656 error.WouldBlock => unreachable, // Not possible without `.share_access_nonblocking = true`.
26562657 else => |e| return e,
test/link.zig+30-30
......@@ -3,11 +3,6 @@ const builtin = @import("builtin");
33const tests = @import("tests.zig");
44
55pub fn addCases(cases: *tests.StandaloneContext) void {
6 if (builtin.os.tag == .windows) {
7 // https://github.com/ziglang/zig/issues/12421
8 return;
9 }
10
116 cases.addBuildFile("test/link/bss/build.zig", .{
127 .build_modes = false, // we only guarantee zerofill for undefined in Debug
138 });
......@@ -28,11 +23,12 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
2823 .build_modes = true,
2924 });
3025
31 cases.addBuildFile("test/link/tls/build.zig", .{
32 .build_modes = true,
33 });
26 addWasmCases(cases);
27 addMachOCases(cases);
28}
3429
35 cases.addBuildFile("test/link/wasm/type/build.zig", .{
30fn addWasmCases(cases: *tests.StandaloneContext) void {
31 cases.addBuildFile("test/link/wasm/bss/build.zig", .{
3632 .build_modes = true,
3733 .requires_stage2 = true,
3834 });
......@@ -47,23 +43,13 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
4743 .requires_stage2 = true,
4844 });
4945
50 cases.addBuildFile("test/link/wasm/bss/build.zig", .{
46 cases.addBuildFile("test/link/wasm/type/build.zig", .{
5147 .build_modes = true,
5248 .requires_stage2 = true,
5349 });
50}
5451
55 cases.addBuildFile("test/link/macho/entry/build.zig", .{
56 .build_modes = true,
57 });
58
59 cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
60 .build_modes = false,
61 });
62
63 cases.addBuildFile("test/link/macho/dylib/build.zig", .{
64 .build_modes = true,
65 });
66
52fn addMachOCases(cases: *tests.StandaloneContext) void {
6753 cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{
6854 .build_modes = false,
6955 });
......@@ -73,45 +59,59 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
7359 .requires_macos_sdk = true,
7460 });
7561
76 cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
62 cases.addBuildFile("test/link/macho/dylib/build.zig", .{
7763 .build_modes = true,
7864 });
7965
80 cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
66 cases.addBuildFile("test/link/macho/entry/build.zig", .{
8167 .build_modes = true,
8268 });
8369
84 cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
70 cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
8571 .build_modes = true,
8672 .requires_macos_sdk = true,
8773 });
8874
89 cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
75 cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{
9076 .build_modes = true,
9177 .requires_macos_sdk = true,
9278 });
9379
94 // Try to build and run an Objective-C executable.
80 cases.addBuildFile("test/link/macho/needed_library/build.zig", .{
81 .build_modes = true,
82 });
83
9584 cases.addBuildFile("test/link/macho/objc/build.zig", .{
9685 .build_modes = true,
9786 .requires_macos_sdk = true,
9887 });
9988
100 // Try to build and run an Objective-C++ executable.
10189 cases.addBuildFile("test/link/macho/objcpp/build.zig", .{
10290 .build_modes = true,
10391 .requires_macos_sdk = true,
10492 });
10593
94 cases.addBuildFile("test/link/macho/pagezero/build.zig", .{
95 .build_modes = false,
96 });
97
98 cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
99 .build_modes = true,
100 });
101
106102 cases.addBuildFile("test/link/macho/stack_size/build.zig", .{
107103 .build_modes = true,
108104 });
109105
110 cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{
106 cases.addBuildFile("test/link/macho/tls/build.zig", .{
111107 .build_modes = true,
112108 });
113109
114 cases.addBuildFile("test/link/macho/headerpad/build.zig", .{
110 cases.addBuildFile("test/link/macho/weak_library/build.zig", .{
111 .build_modes = true,
112 });
113
114 cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{
115115 .build_modes = true,
116116 .requires_macos_sdk = true,
117117 });
test/link/macho/dead_strip/build.zig+5-3
......@@ -4,13 +4,14 @@ const LibExeObjectStep = std.build.LibExeObjStep;
44
55pub fn build(b: *Builder) void {
66 const mode = b.standardReleaseOptions();
7 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
78
89 const test_step = b.step("test", "Test the program");
910 test_step.dependOn(b.getInstallStep());
1011
1112 {
1213 // Without -dead_strip, we expect `iAmUnused` symbol present
13 const exe = createScenario(b, mode);
14 const exe = createScenario(b, mode, target);
1415
1516 const check = exe.checkObject(.macho);
1617 check.checkInSymtab();
......@@ -23,7 +24,7 @@ pub fn build(b: *Builder) void {
2324
2425 {
2526 // With -dead_strip, no `iAmUnused` symbol should be present
26 const exe = createScenario(b, mode);
27 const exe = createScenario(b, mode, target);
2728 exe.link_gc_sections = true;
2829
2930 const check = exe.checkObject(.macho);
......@@ -36,10 +37,11 @@ pub fn build(b: *Builder) void {
3637 }
3738}
3839
39fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep {
40fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep {
4041 const exe = b.addExecutable("test", null);
4142 exe.addCSourceFile("main.c", &[0][]const u8{});
4243 exe.setBuildMode(mode);
44 exe.setTarget(target);
4345 exe.linkLibC();
4446 return exe;
4547}
test/link/macho/pagezero/build.zig+3-2
......@@ -3,13 +3,14 @@ const Builder = std.build.Builder;
33
44pub fn build(b: *Builder) void {
55 const mode = b.standardReleaseOptions();
6 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
67
78 const test_step = b.step("test", "Test");
89 test_step.dependOn(b.getInstallStep());
910
1011 {
1112 const exe = b.addExecutable("pagezero", null);
12 exe.setTarget(.{ .os_tag = .macos });
13 exe.setTarget(target);
1314 exe.setBuildMode(mode);
1415 exe.addCSourceFile("main.c", &.{});
1516 exe.linkLibC();
......@@ -29,7 +30,7 @@ pub fn build(b: *Builder) void {
2930
3031 {
3132 const exe = b.addExecutable("no_pagezero", null);
32 exe.setTarget(.{ .os_tag = .macos });
33 exe.setTarget(target);
3334 exe.setBuildMode(mode);
3435 exe.addCSourceFile("main.c", &.{});
3536 exe.linkLibC();
test/link/macho/search_strategy/build.zig+4-4
......@@ -1,17 +1,17 @@
11const std = @import("std");
22const Builder = std.build.Builder;
33const LibExeObjectStep = std.build.LibExeObjStep;
4const target: std.zig.CrossTarget = .{ .os_tag = .macos };
54
65pub fn build(b: *Builder) void {
76 const mode = b.standardReleaseOptions();
7 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
88
99 const test_step = b.step("test", "Test");
1010 test_step.dependOn(b.getInstallStep());
1111
1212 {
1313 // -search_dylibs_first
14 const exe = createScenario(b, mode);
14 const exe = createScenario(b, mode, target);
1515 exe.search_strategy = .dylibs_first;
1616
1717 const check = exe.checkObject(.macho);
......@@ -26,7 +26,7 @@ pub fn build(b: *Builder) void {
2626
2727 {
2828 // -search_paths_first
29 const exe = createScenario(b, mode);
29 const exe = createScenario(b, mode, target);
3030 exe.search_strategy = .paths_first;
3131
3232 const run = std.build.EmulatableRunStep.create(b, "run", exe);
......@@ -36,7 +36,7 @@ pub fn build(b: *Builder) void {
3636 }
3737}
3838
39fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep {
39fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep {
4040 const static = b.addStaticLibrary("a", null);
4141 static.setTarget(target);
4242 static.setBuildMode(mode);
test/link/macho/stack_size/build.zig+2-1
......@@ -3,12 +3,13 @@ const Builder = std.build.Builder;
33
44pub fn build(b: *Builder) void {
55 const mode = b.standardReleaseOptions();
6 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
67
78 const test_step = b.step("test", "Test");
89 test_step.dependOn(b.getInstallStep());
910
1011 const exe = b.addExecutable("main", null);
11 exe.setTarget(.{ .os_tag = .macos });
12 exe.setTarget(target);
1213 exe.setBuildMode(mode);
1314 exe.addCSourceFile("main.c", &.{});
1415 exe.linkLibC();
test/link/macho/tls/a.c created+5
......@@ -0,0 +1,5 @@
1_Thread_local int a;
2
3int getA() {
4 return a;
5}
test/link/macho/tls/build.zig created+22
......@@ -0,0 +1,22 @@
1const std = @import("std");
2const Builder = std.build.Builder;
3
4pub fn build(b: *Builder) void {
5 const mode = b.standardReleaseOptions();
6 const target: std.zig.CrossTarget = .{ .os_tag = .macos };
7
8 const lib = b.addSharedLibrary("a", null, b.version(1, 0, 0));
9 lib.setBuildMode(mode);
10 lib.setTarget(target);
11 lib.addCSourceFile("a.c", &.{});
12 lib.linkLibC();
13
14 const test_exe = b.addTest("main.zig");
15 test_exe.setBuildMode(mode);
16 test_exe.setTarget(target);
17 test_exe.linkLibrary(lib);
18 test_exe.linkLibC();
19
20 const test_step = b.step("test", "Test it");
21 test_step.dependOn(&test_exe.step);
22}
test/link/macho/tls/main.zig created+15
......@@ -0,0 +1,15 @@
1const std = @import("std");
2
3extern threadlocal var a: i32;
4extern fn getA() i32;
5
6fn getA2() i32 {
7 return a;
8}
9
10test {
11 a = 2;
12 try std.testing.expect(getA() == 2);
13 try std.testing.expect(2 == getA2());
14 try std.testing.expect(getA() == getA2());
15}
test/link/tls/a.c deleted-5
......@@ -1,5 +0,0 @@
1_Thread_local int a;
2
3int getA() {
4 return a;
5}
test/link/tls/build.zig deleted-18
......@@ -1,18 +0,0 @@
1const Builder = @import("std").build.Builder;
2
3pub fn build(b: *Builder) void {
4 const mode = b.standardReleaseOptions();
5
6 const lib = b.addSharedLibrary("a", null, b.version(1, 0, 0));
7 lib.setBuildMode(mode);
8 lib.addCSourceFile("a.c", &.{});
9 lib.linkLibC();
10
11 const test_exe = b.addTest("main.zig");
12 test_exe.setBuildMode(mode);
13 test_exe.linkLibrary(lib);
14 test_exe.linkLibC();
15
16 const test_step = b.step("test", "Test it");
17 test_step.dependOn(&test_exe.step);
18}
test/link/tls/main.zig deleted-15
......@@ -1,15 +0,0 @@
1const std = @import("std");
2
3extern threadlocal var a: i32;
4extern fn getA() i32;
5
6fn getA2() i32 {
7 return a;
8}
9
10test {
11 a = 2;
12 try std.testing.expect(getA() == 2);
13 try std.testing.expect(2 == getA2());
14 try std.testing.expect(getA() == getA2());
15}