diff --git a/doc/langref.html.in b/doc/langref.html.in index ed3b369daa..c8830b796c 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -6242,10 +6242,6 @@ test "implicit unsigned integer to signed integer" { } test "float widening" { - // Note: there is an open issue preventing this from working on aarch64: - // https://github.com/ziglang/zig/issues/3282 - if (builtin.target.cpu.arch == .aarch64) return error.SkipZigTest; - var a: f16 = 12.34; var b: f32 = a; var c: f64 = b; diff --git a/lib/std/fmt/parse_float.zig b/lib/std/fmt/parse_float.zig index 427ac727c9..b84b222721 100644 --- a/lib/std/fmt/parse_float.zig +++ b/lib/std/fmt/parse_float.zig @@ -70,11 +70,6 @@ test "fmt.parseFloat" { } test "fmt.parseFloat nan and inf" { - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // https://github.com/ziglang/zig/issues/12027 - return error.SkipZigTest; - } - inline for ([_]type{ f16, f32, f64, f128 }) |T| { const Z = std.meta.Int(.unsigned, @typeInfo(T).Float.bits); diff --git a/lib/std/math.zig b/lib/std/math.zig index 4e1793c747..58b6585884 100644 --- a/lib/std/math.zig +++ b/lib/std/math.zig @@ -523,10 +523,6 @@ pub fn shl(comptime T: type, a: T, shift_amt: anytype) T { } test "shl" { - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // https://github.com/ziglang/zig/issues/12012 - return error.SkipZigTest; - } try testing.expect(shl(u8, 0b11111111, @as(usize, 3)) == 0b11111000); try testing.expect(shl(u8, 0b11111111, @as(usize, 8)) == 0); try testing.expect(shl(u8, 0b11111111, @as(usize, 9)) == 0); @@ -567,10 +563,6 @@ pub fn shr(comptime T: type, a: T, shift_amt: anytype) T { } test "shr" { - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // https://github.com/ziglang/zig/issues/12012 - return error.SkipZigTest; - } try testing.expect(shr(u8, 0b11111111, @as(usize, 3)) == 0b00011111); try testing.expect(shr(u8, 0b11111111, @as(usize, 8)) == 0); try testing.expect(shr(u8, 0b11111111, @as(usize, 9)) == 0); @@ -612,10 +604,6 @@ pub fn rotr(comptime T: type, x: T, r: anytype) T { } test "rotr" { - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // https://github.com/ziglang/zig/issues/12012 - return error.SkipZigTest; - } try testing.expect(rotr(u0, 0b0, @as(usize, 3)) == 0b0); try testing.expect(rotr(u5, 0b00001, @as(usize, 0)) == 0b00001); try testing.expect(rotr(u6, 0b000001, @as(usize, 7)) == 0b100000); @@ -656,10 +644,6 @@ pub fn rotl(comptime T: type, x: T, r: anytype) T { } test "rotl" { - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // https://github.com/ziglang/zig/issues/12012 - return error.SkipZigTest; - } try testing.expect(rotl(u0, 0b0, @as(usize, 3)) == 0b0); try testing.expect(rotl(u5, 0b00001, @as(usize, 0)) == 0b00001); try testing.expect(rotl(u6, 0b000001, @as(usize, 7)) == 0b000010); diff --git a/lib/std/segmented_list.zig b/lib/std/segmented_list.zig index 5e01316572..7c0a27b5b7 100644 --- a/lib/std/segmented_list.zig +++ b/lib/std/segmented_list.zig @@ -412,10 +412,7 @@ pub fn SegmentedList(comptime T: type, comptime prealloc_item_count: usize) type } test "SegmentedList basic usage" { - if (false) { - // https://github.com/ziglang/zig/issues/11787 - try testSegmentedList(0); - } + try testSegmentedList(0); try testSegmentedList(1); try testSegmentedList(2); try testSegmentedList(4); diff --git a/lib/std/simd.zig b/lib/std/simd.zig index 95de3cc11c..2179cb496e 100644 --- a/lib/std/simd.zig +++ b/lib/std/simd.zig @@ -191,10 +191,6 @@ pub fn extract( } test "vector patterns" { - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // https://github.com/ziglang/zig/issues/12012 - return error.SkipZigTest; - } const base = @Vector(4, u32){ 10, 20, 30, 40 }; const other_base = @Vector(4, u32){ 55, 66, 77, 88 }; diff --git a/test/behavior.zig b/test/behavior.zig index e4a04bbccb..55077d4ea2 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -43,7 +43,9 @@ test { _ = @import("behavior/bugs/2346.zig"); _ = @import("behavior/bugs/2557.zig"); _ = @import("behavior/bugs/2578.zig"); + _ = @import("behavior/bugs/2622.zig"); _ = @import("behavior/bugs/2692.zig"); + _ = @import("behavior/bugs/2727.zig"); _ = @import("behavior/bugs/2889.zig"); _ = @import("behavior/bugs/3007.zig"); _ = @import("behavior/bugs/3046.zig"); @@ -62,16 +64,22 @@ test { _ = @import("behavior/bugs/5413.zig"); _ = @import("behavior/bugs/5474.zig"); _ = @import("behavior/bugs/5487.zig"); + _ = @import("behavior/bugs/6047.zig"); _ = @import("behavior/bugs/6456.zig"); _ = @import("behavior/bugs/6781.zig"); _ = @import("behavior/bugs/6850.zig"); + _ = @import("behavior/bugs/6905.zig"); + _ = @import("behavior/bugs/6947.zig"); _ = @import("behavior/bugs/7003.zig"); _ = @import("behavior/bugs/7047.zig"); _ = @import("behavior/bugs/7187.zig"); + _ = @import("behavior/bugs/7325.zig"); + _ = @import("behavior/bugs/8646.zig"); _ = @import("behavior/bugs/9584.zig"); _ = @import("behavior/bugs/10138.zig"); _ = @import("behavior/bugs/10147.zig"); _ = @import("behavior/bugs/10970.zig"); + _ = @import("behavior/bugs/10684.zig"); _ = @import("behavior/bugs/11046.zig"); _ = @import("behavior/bugs/11100.zig"); _ = @import("behavior/bugs/11139.zig"); @@ -81,6 +89,7 @@ test { _ = @import("behavior/bugs/11179.zig"); _ = @import("behavior/bugs/11181.zig"); _ = @import("behavior/bugs/11213.zig"); + _ = @import("behavior/bugs/11787.zig"); _ = @import("behavior/bugs/11816.zig"); _ = @import("behavior/bugs/12003.zig"); _ = @import("behavior/bugs/12025.zig"); diff --git a/test/behavior/atomics.zig b/test/behavior/atomics.zig index 094be62bc7..ff15aa8dc0 100644 --- a/test/behavior/atomics.zig +++ b/test/behavior/atomics.zig @@ -151,11 +151,6 @@ test "cmpxchg on a global variable" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // https://github.com/ziglang/zig/issues/10627 - return error.SkipZigTest; - } - _ = @cmpxchgWeak(u32, &a_global_variable, 1234, 42, .Acquire, .Monotonic); try expect(a_global_variable == 42); } @@ -218,12 +213,6 @@ test "atomicrmw with floats" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO - if ((builtin.zig_backend == .stage2_llvm or builtin.zig_backend == .stage2_c) and - builtin.cpu.arch == .aarch64) - { - // https://github.com/ziglang/zig/issues/10627 - return error.SkipZigTest; - } try testAtomicRmwFloat(); comptime try testAtomicRmwFloat(); } diff --git a/test/behavior/bugs/10684.zig b/test/behavior/bugs/10684.zig new file mode 100644 index 0000000000..8b0bd6ebca --- /dev/null +++ b/test/behavior/bugs/10684.zig @@ -0,0 +1,19 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const expectEqualStrings = std.testing.expectEqualStrings; + +test "slicing slices" { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const foo = "1234"; + const bar = foo[0..4]; + try expectEqualStrings("1234", bar); + try expectEqualStrings("2", bar[1..2]); + try expectEqualStrings("3", bar[2..3]); + try expectEqualStrings("4", bar[3..4]); + try expectEqualStrings("34", bar[2..4]); +} diff --git a/test/behavior/bugs/11787.zig b/test/behavior/bugs/11787.zig new file mode 100644 index 0000000000..8678f0789a --- /dev/null +++ b/test/behavior/bugs/11787.zig @@ -0,0 +1,20 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const testing = std.testing; + +test "slicing zero length array field of struct" { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const S = struct { + a: [0]usize, + fn foo(self: *@This(), start: usize, end: usize) []usize { + return self.a[start..end]; + } + }; + var s: S = undefined; + try testing.expect(s.foo(0, 0).len == 0); +} diff --git a/test/behavior/bugs/2622.zig b/test/behavior/bugs/2622.zig new file mode 100644 index 0000000000..8a0d1a06ba --- /dev/null +++ b/test/behavior/bugs/2622.zig @@ -0,0 +1,16 @@ +const builtin = @import("builtin"); + +var buf: []u8 = undefined; + +test "reslice of undefined global var slice" { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + var mem: [100]u8 = [_]u8{0} ** 100; + buf = &mem; + const x = buf[0..1]; + try @import("std").testing.expect(x.len == 1 and x[0] == 0); +} diff --git a/test/behavior/bugs/2727.zig b/test/behavior/bugs/2727.zig new file mode 100644 index 0000000000..0478d41b63 --- /dev/null +++ b/test/behavior/bugs/2727.zig @@ -0,0 +1,18 @@ +const builtin = @import("builtin"); + +fn t() bool { + return true; +} + +test { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + comptime var i: usize = 0; + inline while (i < 2) : (i += 1) { + if (t()) {} else return; + } +} diff --git a/test/behavior/bugs/6047.zig b/test/behavior/bugs/6047.zig new file mode 100644 index 0000000000..22d660991a --- /dev/null +++ b/test/behavior/bugs/6047.zig @@ -0,0 +1,20 @@ +const builtin = @import("builtin"); + +fn getError() !void { + return error.Test; +} + +fn getError2() !void { + var a: u8 = 'c'; + try if (a == 'a') getError() else if (a == 'b') getError() else getError(); +} + +test "`try`ing an if/else expression" { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + try @import("std").testing.expectError(error.Test, getError2()); +} diff --git a/test/behavior/bugs/6905.zig b/test/behavior/bugs/6905.zig new file mode 100644 index 0000000000..f274c81a63 --- /dev/null +++ b/test/behavior/bugs/6905.zig @@ -0,0 +1,23 @@ +const expect = @import("std").testing.expect; +const builtin = @import("builtin"); + +test "sentinel-terminated 0-length slices" { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + var u32s: [4]u32 = [_]u32{ 0, 1, 2, 3 }; + + var index: u8 = 2; + var slice = u32s[index..index :2]; + var array_ptr = u32s[2..2 :2]; + const comptime_known_array_value = u32s[2..2 :2].*; + var runtime_array_value = u32s[2..2 :2].*; + + try expect(slice[0] == 2); + try expect(array_ptr[0] == 2); + try expect(comptime_known_array_value[0] == 2); + try expect(runtime_array_value[0] == 2); +} diff --git a/test/behavior/bugs/6947.zig b/test/behavior/bugs/6947.zig new file mode 100644 index 0000000000..2e891ac5b3 --- /dev/null +++ b/test/behavior/bugs/6947.zig @@ -0,0 +1,16 @@ +const builtin = @import("builtin"); + +fn destroy(ptr: *void) void { + _ = ptr; +} + +test { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + var slice: []void = undefined; + destroy(&slice[0]); +} diff --git a/test/behavior/bugs/7325.zig b/test/behavior/bugs/7325.zig new file mode 100644 index 0000000000..592f9cc80f --- /dev/null +++ b/test/behavior/bugs/7325.zig @@ -0,0 +1,113 @@ +const std = @import("std"); +const builtin = @import("builtin"); +const testing = std.testing; + +const string = "hello world"; + +const TempRef = struct { + index: usize, + is_weak: bool, +}; + +const BuiltinEnum = struct { + name: []const u8, +}; + +const ParamType = union(enum) { + boolean, + buffer, + one_of: BuiltinEnum, +}; + +const CallArg = struct { + value: Expression, +}; + +const Expression = union(enum) { + literal_boolean: bool, + literal_enum_value: EnumLiteral, +}; + +const EnumLiteral = struct { + label: []const u8, +}; + +const ExpressionResult = union(enum) { + temp_buffer: TempRef, + literal_boolean: bool, + literal_enum_value: []const u8, +}; + +fn commitCalleeParam(result: ExpressionResult, callee_param_type: ParamType) ExpressionResult { + switch (callee_param_type) { + .boolean => { + return result; + }, + .buffer => { + return ExpressionResult{ + .temp_buffer = .{ .index = 0, .is_weak = false }, + }; + }, + .one_of => { + return result; + }, + } +} + +fn genExpression(expr: Expression) !ExpressionResult { + switch (expr) { + .literal_boolean => |value| { + return ExpressionResult{ + .literal_boolean = value, + }; + }, + .literal_enum_value => |v| { + try testing.expectEqualStrings(string, v.label); + const result: ExpressionResult = .{ + .literal_enum_value = v.label, + }; + switch (result) { + .literal_enum_value => |w| { + try testing.expectEqualStrings(string, w); + }, + else => {}, + } + return result; + }, + } +} + +test { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + var param: ParamType = .{ + .one_of = .{ .name = "name" }, + }; + var arg: CallArg = .{ + .value = .{ + .literal_enum_value = .{ + .label = string, + }, + }, + }; + + const result = try genExpression(arg.value); + switch (result) { + .literal_enum_value => |w| { + try testing.expectEqualStrings(string, w); + }, + else => {}, + } + + const derp = commitCalleeParam(result, param); + switch (derp) { + .literal_enum_value => |w| { + try testing.expectEqualStrings(string, w); + }, + else => {}, + } +} diff --git a/test/behavior/bugs/8646.zig b/test/behavior/bugs/8646.zig new file mode 100644 index 0000000000..2e181a682e --- /dev/null +++ b/test/behavior/bugs/8646.zig @@ -0,0 +1,18 @@ +const std = @import("std"); +const builtin = @import("builtin"); + +const array = [_][]const []const u8{ + &.{"hello"}, + &.{ "world", "hello" }, +}; + +test { + if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + try std.testing.expect(array[0].len == 1); + try std.testing.expectEqualStrings("hello", array[0][0]); +} diff --git a/test/behavior/int128.zig b/test/behavior/int128.zig index 84c69ba499..4498752482 100644 --- a/test/behavior/int128.zig +++ b/test/behavior/int128.zig @@ -53,6 +53,11 @@ test "int128" { buff = -0x12341234123412341234123412341234; try expect(-buff == 0x12341234123412341234123412341234); + + const a: i128 = -170141183460469231731687303715884105728; + const b: i128 = -0x8000_0000_0000_0000_0000_0000_0000_0000; + try expect(@divFloor(b, 1_000_000) == -170141183460469231731687303715885); + try expect(a == b); } test "truncate int128" { diff --git a/test/behavior/math.zig b/test/behavior/math.zig index e07a252a4e..2ad73df060 100644 --- a/test/behavior/math.zig +++ b/test/behavior/math.zig @@ -161,12 +161,6 @@ test "@ctz vectors" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // This regressed with LLVM 14: - // https://github.com/ziglang/zig/issues/12013 - return error.SkipZigTest; - } - try testCtzVectors(); comptime try testCtzVectors(); } diff --git a/test/behavior/vector.zig b/test/behavior/vector.zig index ca38cb7ebc..f073a2b4bf 100644 --- a/test/behavior/vector.zig +++ b/test/behavior/vector.zig @@ -174,12 +174,6 @@ test "tuple to vector" { if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch == .aarch64) { - // Regressed with LLVM 14: - // https://github.com/ziglang/zig/issues/12012 - return error.SkipZigTest; - } - const S = struct { fn doTheTest() !void { const Vec3 = @Vector(3, i32); diff --git a/test/behavior/widening.zig b/test/behavior/widening.zig index b916e9ca87..44b1a22a95 100644 --- a/test/behavior/widening.zig +++ b/test/behavior/widening.zig @@ -60,10 +60,6 @@ test "float widening f16 to f128" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO - // TODO https://github.com/ziglang/zig/issues/3282 - if (builtin.cpu.arch == .aarch64) return error.SkipZigTest; - if (builtin.cpu.arch == .powerpc64le) return error.SkipZigTest; - var x: f16 = 12.34; var y: f128 = x; try expect(x == y); diff --git a/test/cases/compile_errors/invalid_store_to_comptime_field.zig b/test/cases/compile_errors/invalid_store_to_comptime_field.zig index 6c528e0799..a86cb500d2 100644 --- a/test/cases/compile_errors/invalid_store_to_comptime_field.zig +++ b/test/cases/compile_errors/invalid_store_to_comptime_field.zig @@ -41,7 +41,7 @@ pub export fn entry4() void { _ = U.foo(.{ .foo = 2, .bar = 2 }); } pub export fn entry5() void { - comptime var y = .{ 1, 2}; + comptime var y = .{ 1, 2 }; y = .{ 3, 4 }; } // pub export fn entry5() void { @@ -52,7 +52,15 @@ pub export fn entry5() void { // }; // _ = S.foo(.{ -1234, 5679, x }); // } - +pub export fn entry6() void { + const State = struct { + comptime id: bool = true, + fn init(comptime id: bool) @This() { + return @This(){ .id = id }; + } + }; + _ = State.init(false); +} // error // target=native @@ -65,3 +73,4 @@ pub export fn entry5() void { // :25:29: note: default value set here // :41:16: error: value stored in comptime field does not match the default value of the field // :45:12: error: value stored in comptime field does not match the default value of the field +// :59:35: error: value stored in comptime field does not match the default value of the field