aboutsummaryrefslogtreecommitdiff
path: root/test/compile_errors.zig
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-02-08 21:54:44 -0500
committerAndrew Kelley <superjoe30@gmail.com>2018-02-08 21:54:44 -0500
commit54c06bf7158ce52c5de8d09f109215c467a3bf6a (patch)
tree1087306b7a45c59ad1072877f34f65efd6dc2a1c /test/compile_errors.zig
parent8fc6e31567057ca39466a34b63917f6f22f2c288 (diff)
downloadzig-54c06bf7158ce52c5de8d09f109215c467a3bf6a.tar.gz
zig-54c06bf7158ce52c5de8d09f109215c467a3bf6a.zip
error sets: runtime safety for int-to-err and err set cast
Diffstat (limited to 'test/compile_errors.zig')
-rw-r--r--test/compile_errors.zig32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
index f497f938ed..0378d9366d 100644
--- a/test/compile_errors.zig
+++ b/test/compile_errors.zig
@@ -1,6 +1,38 @@
const tests = @import("tests.zig");
pub fn addCases(cases: &tests.CompileErrorContext) void {
+ cases.add("implicit cast of error set not a subset",
+ \\const Set1 = error{A, B};
+ \\const Set2 = error{A, C};
+ \\export fn entry() void {
+ \\ foo(Set1.B);
+ \\}
+ \\fn foo(set1: Set1) void {
+ \\ var x: Set2 = set1;
+ \\}
+ ,
+ ".tmp_source.zig:7:19: error: expected 'Set2', found 'Set1'",
+ ".tmp_source.zig:1:23: note: 'error.B' not a member of destination error set");
+
+ cases.add("int to err global invalid number",
+ \\const Set1 = error{A, B};
+ \\comptime {
+ \\ var x: usize = 3;
+ \\ var y = error(x);
+ \\}
+ ,
+ ".tmp_source.zig:4:18: error: integer value 3 represents no error");
+
+ cases.add("int to err non global invalid number",
+ \\const Set1 = error{A, B};
+ \\const Set2 = error{A, C};
+ \\comptime {
+ \\ var x = usize(Set1.B);
+ \\ var y = Set2(x);
+ \\}
+ ,
+ ".tmp_source.zig:5:17: error: integer value 2 represents no error in 'Set2'");
+
cases.add("@memberCount of error",
\\comptime {
\\ _ = @memberCount(error);