diff --git a/ci/azure/pipelines.yml b/ci/azure/pipelines.yml index 5ff0a5d61b1506c1605ebe347988d430c5c52c8c..5d208b31a2f732703c288644faf12f25bb89d0e9 100644 --- a/ci/azure/pipelines.yml +++ b/ci/azure/pipelines.yml @@ -103,7 +103,7 @@ jobs: #& "$ZIGINSTALLDIR\bin\zig.exe" test "..\test\behavior.zig" -fno-stage1 -fLLVM -I "..\test" 2>&1 #CheckLastExitCode - & "$ZIGINSTALLDIR\bin\zig.exe" build test-toolchain -Dskip-non-native -Dskip-stage2-tests 2>&1 + & "$ZIGINSTALLDIR\bin\zig.exe" build test-toolchain -Dskip-non-native -Dskip-stage2-tests -Domit-stage2 2>&1 CheckLastExitCode & "$ZIGINSTALLDIR\bin\zig.exe" build test-std -Dskip-non-native 2>&1 CheckLastExitCode diff --git a/lib/std/os.zig b/lib/std/os.zig index 984758565cf9475e954ff41c292028ca45e09323..c757561b0717b53251238980ba40c5d28c0a68cb 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -2651,6 +2651,7 @@ pub fn renameatW( .creation = windows.FILE_OPEN, .io_mode = .blocking, .filter = .any, // This function is supposed to rename both files and directories. + .follow_symlinks = false, }) catch |err| switch (err) { error.WouldBlock => unreachable, // Not possible without `.share_access_nonblocking = true`. else => |e| return e, diff --git a/test/link.zig b/test/link.zig index 01edd07261d05ba943e449528ba410625951e68e..88b370f343503207a93dde2e0ce0576134bd4d0e 100644 --- a/test/link.zig +++ b/test/link.zig @@ -3,11 +3,6 @@ const builtin = @import("builtin"); const tests = @import("tests.zig"); pub fn addCases(cases: *tests.StandaloneContext) void { - if (builtin.os.tag == .windows) { - // https://github.com/ziglang/zig/issues/12421 - return; - } - cases.addBuildFile("test/link/bss/build.zig", .{ .build_modes = false, // we only guarantee zerofill for undefined in Debug }); @@ -28,11 +23,12 @@ pub fn addCases(cases: *tests.StandaloneContext) void { .build_modes = true, }); - cases.addBuildFile("test/link/tls/build.zig", .{ - .build_modes = true, - }); + addWasmCases(cases); + addMachOCases(cases); +} - cases.addBuildFile("test/link/wasm/type/build.zig", .{ +fn addWasmCases(cases: *tests.StandaloneContext) void { + cases.addBuildFile("test/link/wasm/bss/build.zig", .{ .build_modes = true, .requires_stage2 = true, }); @@ -47,23 +43,13 @@ pub fn addCases(cases: *tests.StandaloneContext) void { .requires_stage2 = true, }); - cases.addBuildFile("test/link/wasm/bss/build.zig", .{ + cases.addBuildFile("test/link/wasm/type/build.zig", .{ .build_modes = true, .requires_stage2 = true, }); +} - cases.addBuildFile("test/link/macho/entry/build.zig", .{ - .build_modes = true, - }); - - cases.addBuildFile("test/link/macho/pagezero/build.zig", .{ - .build_modes = false, - }); - - cases.addBuildFile("test/link/macho/dylib/build.zig", .{ - .build_modes = true, - }); - +fn addMachOCases(cases: *tests.StandaloneContext) void { cases.addBuildFile("test/link/macho/dead_strip/build.zig", .{ .build_modes = false, }); @@ -73,45 +59,59 @@ pub fn addCases(cases: *tests.StandaloneContext) void { .requires_macos_sdk = true, }); - cases.addBuildFile("test/link/macho/needed_library/build.zig", .{ + cases.addBuildFile("test/link/macho/dylib/build.zig", .{ .build_modes = true, }); - cases.addBuildFile("test/link/macho/weak_library/build.zig", .{ + cases.addBuildFile("test/link/macho/entry/build.zig", .{ .build_modes = true, }); + cases.addBuildFile("test/link/macho/headerpad/build.zig", .{ + .build_modes = true, + .requires_macos_sdk = true, + }); + cases.addBuildFile("test/link/macho/needed_framework/build.zig", .{ .build_modes = true, .requires_macos_sdk = true, }); - cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{ + cases.addBuildFile("test/link/macho/needed_library/build.zig", .{ .build_modes = true, - .requires_macos_sdk = true, }); - // Try to build and run an Objective-C executable. cases.addBuildFile("test/link/macho/objc/build.zig", .{ .build_modes = true, .requires_macos_sdk = true, }); - // Try to build and run an Objective-C++ executable. cases.addBuildFile("test/link/macho/objcpp/build.zig", .{ .build_modes = true, .requires_macos_sdk = true, }); - cases.addBuildFile("test/link/macho/stack_size/build.zig", .{ - .build_modes = true, + cases.addBuildFile("test/link/macho/pagezero/build.zig", .{ + .build_modes = false, }); cases.addBuildFile("test/link/macho/search_strategy/build.zig", .{ .build_modes = true, }); - cases.addBuildFile("test/link/macho/headerpad/build.zig", .{ + cases.addBuildFile("test/link/macho/stack_size/build.zig", .{ + .build_modes = true, + }); + + cases.addBuildFile("test/link/macho/tls/build.zig", .{ + .build_modes = true, + }); + + cases.addBuildFile("test/link/macho/weak_library/build.zig", .{ + .build_modes = true, + }); + + cases.addBuildFile("test/link/macho/weak_framework/build.zig", .{ .build_modes = true, .requires_macos_sdk = true, }); diff --git a/test/link/macho/dead_strip/build.zig b/test/link/macho/dead_strip/build.zig index dea225dd6fd72715d7364210a31cfcd03e12504c..25759f56192a874d08166af689e0f8b9af22d3c7 100644 --- a/test/link/macho/dead_strip/build.zig +++ b/test/link/macho/dead_strip/build.zig @@ -4,13 +4,14 @@ const LibExeObjectStep = std.build.LibExeObjStep; pub fn build(b: *Builder) void { const mode = b.standardReleaseOptions(); + const target: std.zig.CrossTarget = .{ .os_tag = .macos }; const test_step = b.step("test", "Test the program"); test_step.dependOn(b.getInstallStep()); { // Without -dead_strip, we expect `iAmUnused` symbol present - const exe = createScenario(b, mode); + const exe = createScenario(b, mode, target); const check = exe.checkObject(.macho); check.checkInSymtab(); @@ -23,7 +24,7 @@ pub fn build(b: *Builder) void { { // With -dead_strip, no `iAmUnused` symbol should be present - const exe = createScenario(b, mode); + const exe = createScenario(b, mode, target); exe.link_gc_sections = true; const check = exe.checkObject(.macho); @@ -36,10 +37,11 @@ pub fn build(b: *Builder) void { } } -fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep { +fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep { const exe = b.addExecutable("test", null); exe.addCSourceFile("main.c", &[0][]const u8{}); exe.setBuildMode(mode); + exe.setTarget(target); exe.linkLibC(); return exe; } diff --git a/test/link/macho/pagezero/build.zig b/test/link/macho/pagezero/build.zig index 9dbc0e64733fc272a1be4103406936da301bc4de..5a7044d960c29becc56acaf16e44e6110dfa8f75 100644 --- a/test/link/macho/pagezero/build.zig +++ b/test/link/macho/pagezero/build.zig @@ -3,13 +3,14 @@ const Builder = std.build.Builder; pub fn build(b: *Builder) void { const mode = b.standardReleaseOptions(); + const target: std.zig.CrossTarget = .{ .os_tag = .macos }; const test_step = b.step("test", "Test"); test_step.dependOn(b.getInstallStep()); { const exe = b.addExecutable("pagezero", null); - exe.setTarget(.{ .os_tag = .macos }); + exe.setTarget(target); exe.setBuildMode(mode); exe.addCSourceFile("main.c", &.{}); exe.linkLibC(); @@ -29,7 +30,7 @@ pub fn build(b: *Builder) void { { const exe = b.addExecutable("no_pagezero", null); - exe.setTarget(.{ .os_tag = .macos }); + exe.setTarget(target); exe.setBuildMode(mode); exe.addCSourceFile("main.c", &.{}); exe.linkLibC(); diff --git a/test/link/macho/search_strategy/build.zig b/test/link/macho/search_strategy/build.zig index 39a82bc6a74d7742598e8577adf860698d9b715a..e556b5bb23538c22c5be38252bf42248a3897f33 100644 --- a/test/link/macho/search_strategy/build.zig +++ b/test/link/macho/search_strategy/build.zig @@ -1,17 +1,17 @@ const std = @import("std"); const Builder = std.build.Builder; const LibExeObjectStep = std.build.LibExeObjStep; -const target: std.zig.CrossTarget = .{ .os_tag = .macos }; pub fn build(b: *Builder) void { const mode = b.standardReleaseOptions(); + const target: std.zig.CrossTarget = .{ .os_tag = .macos }; const test_step = b.step("test", "Test"); test_step.dependOn(b.getInstallStep()); { // -search_dylibs_first - const exe = createScenario(b, mode); + const exe = createScenario(b, mode, target); exe.search_strategy = .dylibs_first; const check = exe.checkObject(.macho); @@ -26,7 +26,7 @@ pub fn build(b: *Builder) void { { // -search_paths_first - const exe = createScenario(b, mode); + const exe = createScenario(b, mode, target); exe.search_strategy = .paths_first; const run = std.build.EmulatableRunStep.create(b, "run", exe); @@ -36,7 +36,7 @@ pub fn build(b: *Builder) void { } } -fn createScenario(b: *Builder, mode: std.builtin.Mode) *LibExeObjectStep { +fn createScenario(b: *Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *LibExeObjectStep { const static = b.addStaticLibrary("a", null); static.setTarget(target); static.setBuildMode(mode); diff --git a/test/link/macho/stack_size/build.zig b/test/link/macho/stack_size/build.zig index 3abf48df7af1863b3f0498a8be2659c6d42ca012..91c44baf5212de27b1934971602df431653df730 100644 --- a/test/link/macho/stack_size/build.zig +++ b/test/link/macho/stack_size/build.zig @@ -3,12 +3,13 @@ const Builder = std.build.Builder; pub fn build(b: *Builder) void { const mode = b.standardReleaseOptions(); + const target: std.zig.CrossTarget = .{ .os_tag = .macos }; const test_step = b.step("test", "Test"); test_step.dependOn(b.getInstallStep()); const exe = b.addExecutable("main", null); - exe.setTarget(.{ .os_tag = .macos }); + exe.setTarget(target); exe.setBuildMode(mode); exe.addCSourceFile("main.c", &.{}); exe.linkLibC(); diff --git a/test/link/macho/tls/a.c b/test/link/macho/tls/a.c new file mode 100644 index 0000000000000000000000000000000000000000..8602d0241945132d6e1248398d0986f15e6255ac --- /dev/null +++ b/test/link/macho/tls/a.c @@ -0,0 +1,5 @@ +_Thread_local int a; + +int getA() { + return a; +} diff --git a/test/link/macho/tls/build.zig b/test/link/macho/tls/build.zig new file mode 100644 index 0000000000000000000000000000000000000000..031a05cedf9907407592cce3c2e9b1e7ad8b536e --- /dev/null +++ b/test/link/macho/tls/build.zig @@ -0,0 +1,22 @@ +const std = @import("std"); +const Builder = std.build.Builder; + +pub fn build(b: *Builder) void { + const mode = b.standardReleaseOptions(); + const target: std.zig.CrossTarget = .{ .os_tag = .macos }; + + const lib = b.addSharedLibrary("a", null, b.version(1, 0, 0)); + lib.setBuildMode(mode); + lib.setTarget(target); + lib.addCSourceFile("a.c", &.{}); + lib.linkLibC(); + + const test_exe = b.addTest("main.zig"); + test_exe.setBuildMode(mode); + test_exe.setTarget(target); + test_exe.linkLibrary(lib); + test_exe.linkLibC(); + + const test_step = b.step("test", "Test it"); + test_step.dependOn(&test_exe.step); +} diff --git a/test/link/macho/tls/main.zig b/test/link/macho/tls/main.zig new file mode 100644 index 0000000000000000000000000000000000000000..ab01616e311ee7706b688fc2008ab7b056d4b124 --- /dev/null +++ b/test/link/macho/tls/main.zig @@ -0,0 +1,15 @@ +const std = @import("std"); + +extern threadlocal var a: i32; +extern fn getA() i32; + +fn getA2() i32 { + return a; +} + +test { + a = 2; + try std.testing.expect(getA() == 2); + try std.testing.expect(2 == getA2()); + try std.testing.expect(getA() == getA2()); +} diff --git a/test/link/tls/a.c b/test/link/tls/a.c deleted file mode 100644 index 8602d0241945132d6e1248398d0986f15e6255ac..0000000000000000000000000000000000000000 --- a/test/link/tls/a.c +++ /dev/null @@ -1,5 +0,0 @@ -_Thread_local int a; - -int getA() { - return a; -} diff --git a/test/link/tls/build.zig b/test/link/tls/build.zig deleted file mode 100644 index ebf15ca4399a349e29c8c9c5722b70dc25774cc6..0000000000000000000000000000000000000000 --- a/test/link/tls/build.zig +++ /dev/null @@ -1,18 +0,0 @@ -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", &.{}); - lib.linkLibC(); - - const test_exe = b.addTest("main.zig"); - test_exe.setBuildMode(mode); - test_exe.linkLibrary(lib); - test_exe.linkLibC(); - - const test_step = b.step("test", "Test it"); - test_step.dependOn(&test_exe.step); -} diff --git a/test/link/tls/main.zig b/test/link/tls/main.zig deleted file mode 100644 index ab01616e311ee7706b688fc2008ab7b056d4b124..0000000000000000000000000000000000000000 --- a/test/link/tls/main.zig +++ /dev/null @@ -1,15 +0,0 @@ -const std = @import("std"); - -extern threadlocal var a: i32; -extern fn getA() i32; - -fn getA2() i32 { - return a; -} - -test { - a = 2; - try std.testing.expect(getA() == 2); - try std.testing.expect(2 == getA2()); - try std.testing.expect(getA() == getA2()); -}