Skip to content

Commit

Permalink
Merge pull request #15753 from Snektron/spirv-more-tests
Browse files Browse the repository at this point in the history
spirv: make more tests pass
  • Loading branch information
andrewrk authored May 20, 2023
2 parents 413ef3a + c92cc57 commit 7621e56
Show file tree
Hide file tree
Showing 44 changed files with 537 additions and 437 deletions.
818 changes: 511 additions & 307 deletions src/codegen/spirv.zig

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions src/codegen/spirv/Module.zig
Original file line number Diff line number Diff line change
Expand Up @@ -774,6 +774,16 @@ pub fn changePtrStorageClass(self: *Module, ptr_ty_ref: Type.Ref, new_storage_cl
return try self.resolveType(Type.initPayload(&payload.base));
}

pub fn constComposite(self: *Module, ty_ref: Type.Ref, members: []const IdRef) !IdRef {
const result_id = self.allocId();
try self.sections.types_globals_constants.emit(self.gpa, .OpSpecConstantComposite, .{
.id_result_type = self.typeId(ty_ref),
.id_result = result_id,
.constituents = members,
});
return result_id;
}

pub fn emitConstant(
self: *Module,
ty_id: IdRef,
Expand Down
6 changes: 0 additions & 6 deletions test/behavior/align.zig
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ test "default alignment allows unspecified in type syntax" {
}

test "implicitly decreasing pointer alignment" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const a: u32 align(4) = 3;
const b: u32 align(8) = 4;
try expect(addUnaligned(&a, &b) == 7);
Expand All @@ -45,8 +43,6 @@ fn addUnaligned(a: *align(1) const u32, b: *align(1) const u32) u32 {
}

test "@alignCast pointers" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

var x: u32 align(4) = 1;
expectsOnly1(&x);
try expect(x == 2);
Expand Down Expand Up @@ -219,8 +215,6 @@ test "alignment and size of structs with 128-bit fields" {
}

test "@ptrCast preserves alignment of bigger source" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

var x: u32 align(16) = 1234;
const ptr = @ptrCast(*u8, &x);
try expect(@TypeOf(ptr) == *align(16) u8);
Expand Down
2 changes: 0 additions & 2 deletions test/behavior/array.zig
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,6 @@ test "read/write through global variable array of struct fields initialized via
test "implicit cast single-item pointer" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try testImplicitCastSingleItemPtr();
comptime try testImplicitCastSingleItemPtr();
Expand Down Expand Up @@ -542,7 +541,6 @@ test "sentinel element count towards the ABI size calculation" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
fn doTheTest() !void {
Expand Down
5 changes: 4 additions & 1 deletion test/behavior/asm.zig
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ comptime {
\\.type this_is_my_alias, @function;
\\.set this_is_my_alias, derp;
);
} else if (builtin.zig_backend == .stage2_spirv64) {
asm (
\\%a = OpString "hello there"
);
}
}

Expand All @@ -24,7 +28,6 @@ test "module level assembly" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

if (builtin.zig_backend == .stage2_c and builtin.os.tag == .windows) return error.SkipZigTest; // MSVC doesn't support inline assembly

Expand Down
2 changes: 0 additions & 2 deletions test/behavior/atomics.zig
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ test "128-bit cmpxchg" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
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_spirv64) return error.SkipZigTest;

try test_u128_cmpxchg();
comptime try test_u128_cmpxchg();
Expand Down Expand Up @@ -313,7 +312,6 @@ test "atomicrmw with 128-bit ints" {

if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

// TODO "ld.lld: undefined symbol: __sync_lock_test_and_set_16" on -mcpu x86_64
if (builtin.cpu.arch == .x86_64 and builtin.zig_backend == .stage2_llvm) return error.SkipZigTest;
Expand Down
27 changes: 1 addition & 26 deletions test/behavior/basic.zig
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,6 @@ test "type equality" {
}

test "pointer dereferencing" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

var x = @as(i32, 3);
const y = &x;

Expand Down Expand Up @@ -134,21 +132,18 @@ fn first4KeysOfHomeRow() []const u8 {

test "return string from function" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(mem.eql(u8, first4KeysOfHomeRow(), "aoeu"));
}

test "hex escape" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(mem.eql(u8, "\x68\x65\x6c\x6c\x6f", "hello"));
}

test "multiline string" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const s1 =
\\one
Expand All @@ -161,7 +156,6 @@ test "multiline string" {

test "multiline string comments at start" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const s1 =
//\\one
Expand All @@ -174,7 +168,6 @@ test "multiline string comments at start" {

test "multiline string comments at end" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const s1 =
\\one
Expand All @@ -187,7 +180,6 @@ test "multiline string comments at end" {

test "multiline string comments in middle" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const s1 =
\\one
Expand All @@ -200,7 +192,6 @@ test "multiline string comments in middle" {

test "multiline string comments at multiple places" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const s1 =
\\one
Expand All @@ -214,14 +205,11 @@ test "multiline string comments at multiple places" {
}

test "string concatenation simple" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(mem.eql(u8, "OK" ++ " IT " ++ "WORKED", "OK IT WORKED"));
}

test "array mult operator" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(mem.eql(u8, "ab" ** 5, "ababababab"));
}
Expand Down Expand Up @@ -303,8 +291,6 @@ test "function closes over local const" {
}

test "volatile load and store" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

var number: i32 = 1234;
const ptr = @as(*volatile i32, &number);
ptr.* += 1;
Expand Down Expand Up @@ -387,7 +373,6 @@ test "take address of parameter" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try testTakeAddressOfParameter(12.34);
}
Expand Down Expand Up @@ -477,7 +462,6 @@ fn nine() u8 {
test "struct inside function" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try testStructInFn();
comptime try testStructInFn();
Expand Down Expand Up @@ -599,7 +583,7 @@ test "comptime cast fn to ptr" {
}

test "equality compare fn ptrs" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // Test passes but should not

var a = &emptyFn;
try expect(a == a);
Expand Down Expand Up @@ -690,8 +674,6 @@ test "explicit cast optional pointers" {
}

test "pointer comparison" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const a = @as([]const u8, "a");
const b = &a;
try expect(ptrEql(b, b));
Expand All @@ -704,7 +686,6 @@ test "string concatenation" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const a = "OK" ++ " IT " ++ "WORKED";
const b = "OK IT WORKED";
Expand Down Expand Up @@ -770,7 +751,6 @@ fn maybe(x: bool) anyerror!?u32 {
test "auto created variables have correct alignment" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
fn foo(str: [*]const u8) u32 {
Expand Down Expand Up @@ -892,8 +872,6 @@ test "catch in block has correct result location" {
}

test "labeled block with runtime branch forwards its result location type to break statements" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const E = enum { a, b };
var a = false;
const e: E = blk: {
Expand Down Expand Up @@ -1062,8 +1040,6 @@ test "switch inside @as gets correct type" {
}

test "inline call of function with a switch inside the return statement" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
inline fn foo(x: anytype) @TypeOf(x) {
return switch (x) {
Expand Down Expand Up @@ -1147,7 +1123,6 @@ test "returning an opaque type from a function" {
test "orelse coercion as function argument" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const Loc = struct { start: i32 = -1 };
const Container = struct {
Expand Down
1 change: 0 additions & 1 deletion test/behavior/bitcast.zig
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ const native_endian = builtin.target.cpu.arch.endian();

test "@bitCast iX -> uX (32, 64)" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const bit_values = [_]usize{ 32, 64 };

Expand Down
1 change: 0 additions & 1 deletion test/behavior/bitreverse.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const minInt = std.math.minInt;

test "@bitReverse large exotic integer" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(@bitReverse(@as(u95, 0x123456789abcdef111213141)) == 0x4146424447bd9eac8f351624);
}
Expand Down
5 changes: 0 additions & 5 deletions test/behavior/call.zig
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ test "result location of function call argument through runtime condition and st

test "function call with 40 arguments" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
fn doTheTest(thirty_nine: i32) !void {
Expand Down Expand Up @@ -374,8 +373,6 @@ test "Enum constructed by @Type passed as generic argument" {
}

test "generic function with generic function parameter" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
fn f(comptime a: fn (anytype) anyerror!void, b: anytype) anyerror!void {
try a(b);
Expand All @@ -388,8 +385,6 @@ test "generic function with generic function parameter" {
}

test "recursive inline call with comptime known argument" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
inline fn foo(x: i32) i32 {
if (x <= 0) {
Expand Down
3 changes: 0 additions & 3 deletions test/behavior/cast.zig
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,6 @@ test "peer result null and comptime_int" {
test "*const ?[*]const T to [*c]const [*c]const T" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

var array = [_]u8{ 'o', 'k' };
const opt_array_ptr: ?[*]const u8 = &array;
Expand Down Expand Up @@ -366,7 +365,6 @@ test "return u8 coercing into ?u32 return type" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
fn doTheTest() !void {
Expand Down Expand Up @@ -428,7 +426,6 @@ test "peer resolve array and const slice" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try testPeerResolveArrayConstSlice(true);
comptime try testPeerResolveArrayConstSlice(true);
Expand Down
2 changes: 0 additions & 2 deletions test/behavior/decltest.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,5 @@ pub fn the_add_function(a: u32, b: u32) u32 {
}

test the_add_function {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

if (the_add_function(1, 2) != 3) unreachable;
}
3 changes: 0 additions & 3 deletions test/behavior/defer.zig
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ fn testBreakContInDefer(x: usize) void {
}

test "defer and labeled break" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

var i = @as(usize, 0);

blk: {
Expand Down Expand Up @@ -58,7 +56,6 @@ test "return variable while defer expression in scope to modify it" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

const S = struct {
fn doTheTest() !void {
Expand Down
2 changes: 0 additions & 2 deletions test/behavior/duplicated_test_names.zig
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,5 @@ comptime {
test "thingy" {}

test thingy {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

if (thingy(1, 2) != 3) unreachable;
}
1 change: 0 additions & 1 deletion test/behavior/enum.zig
Original file line number Diff line number Diff line change
Expand Up @@ -1045,7 +1045,6 @@ test "tag name with assigned enum values" {
test "@tagName on enum literals" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
comptime try expect(mem.eql(u8, @tagName(.FooBar), "FooBar"));
Expand Down
2 changes: 0 additions & 2 deletions test/behavior/error.zig
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,12 @@ fn expectError(expected_err: anyerror, observed_err_union: anytype) !void {
}

test "error values" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
const a = @errorToInt(error.err1);
const b = @errorToInt(error.err2);
try expect(a != b);
}

test "redefinition of error values allowed" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
shouldBeNotEqual(error.AnError, error.SecondError);
}
fn shouldBeNotEqual(a: anyerror, b: anyerror) void {
Expand Down
3 changes: 0 additions & 3 deletions test/behavior/eval.zig
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ test "static add one" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(should_be_1235 == 1235);
}
Expand All @@ -48,8 +47,6 @@ test "inline variable gets result of const if" {
}

test "static function evaluation" {
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;

try expect(statically_added_number == 3);
}
const statically_added_number = staticAdd(1, 2);
Expand Down
Loading

0 comments on commit 7621e56

Please sign in to comment.