aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorr00ster91 <r00ster91@proton.me>2023-03-05 15:45:23 +0100
committerVeikka Tuominen <git@vexu.eu>2023-03-05 23:01:17 +0200
commitf1ae688d371f49fdbf65f952d655905c74871fdb (patch)
treeb1855222065aa9e9b9dee3db4e7bc5240fd327f3 /test
parent29c56a8aa74d1b1a19bece5ba5d738af1e3c9f6d (diff)
downloadzig-f1ae688d371f49fdbf65f952d655905c74871fdb.tar.gz
zig-f1ae688d371f49fdbf65f952d655905c74871fdb.zip
AstGen: ensure certain builtin functions return void
Fixes #14779 Co-authored-by: Veikka Tuominen <git@vexu.eu>
Diffstat (limited to 'test')
-rw-r--r--test/behavior/builtin_functions_returning_void_or_noreturn.zig32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/behavior/builtin_functions_returning_void_or_noreturn.zig b/test/behavior/builtin_functions_returning_void_or_noreturn.zig
new file mode 100644
index 0000000000..072f5576cc
--- /dev/null
+++ b/test/behavior/builtin_functions_returning_void_or_noreturn.zig
@@ -0,0 +1,32 @@
+const std = @import("std");
+const builtin = @import("builtin");
+const testing = std.testing;
+
+var x: u8 = 1;
+
+// This excludes builtin functions that return void or noreturn that cannot be tested.
+test {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ 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_riscv64) return error.SkipZigTest; // TODO
+
+ var val: u8 = undefined;
+ try testing.expectEqual({}, @atomicStore(u8, &val, 0, .Unordered));
+ try testing.expectEqual(void, @TypeOf(@breakpoint()));
+ try testing.expectEqual({}, @export(x, .{ .name = "x" }));
+ try testing.expectEqual({}, @fence(.Acquire));
+ try testing.expectEqual({}, @memcpy(@intToPtr([*]u8, 1), @intToPtr([*]u8, 1), 0));
+ try testing.expectEqual({}, @memset(@intToPtr([*]u8, 1), undefined, 0));
+ try testing.expectEqual(noreturn, @TypeOf(if (true) @panic("") else {}));
+ try testing.expectEqual({}, @prefetch(&val, .{}));
+ try testing.expectEqual({}, @setAlignStack(16));
+ try testing.expectEqual({}, @setCold(true));
+ try testing.expectEqual({}, @setEvalBranchQuota(0));
+ try testing.expectEqual({}, @setFloatMode(.Optimized));
+ try testing.expectEqual({}, @setRuntimeSafety(true));
+ try testing.expectEqual(noreturn, @TypeOf(if (true) @trap() else {}));
+}