aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-07-17 17:03:52 +0300
committerAndrew Kelley <andrew@ziglang.org>2022-07-21 12:21:30 -0700
commit8feb3987608945040c955bd7b24be3841ebf74ac (patch)
tree192a1ec257081c7f4771e59ee1fc3e499ae7cf6f /test
parentd851b24180fdf2b622b06e9a35e315541fb10aa1 (diff)
downloadzig-8feb3987608945040c955bd7b24be3841ebf74ac.tar.gz
zig-8feb3987608945040c955bd7b24be3841ebf74ac.zip
Sema: validate function parameter types and return type
Diffstat (limited to 'test')
-rw-r--r--test/cases/compile_errors/function_parameter_is_opaque.zig (renamed from test/cases/compile_errors/stage1/obj/function_parameter_is_opaque.zig)11
-rw-r--r--test/cases/compile_errors/function_returning_opaque_type.zig19
-rw-r--r--test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig11
-rw-r--r--test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig14
-rw-r--r--test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig14
-rw-r--r--test/cases/compile_errors/stage1/obj/function_returning_opaque_type.zig19
-rw-r--r--test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_enum_parameter.zig8
-rw-r--r--test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_struct_parameter.zig12
-rw-r--r--test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_union_parameter.zig12
9 files changed, 64 insertions, 56 deletions
diff --git a/test/cases/compile_errors/stage1/obj/function_parameter_is_opaque.zig b/test/cases/compile_errors/function_parameter_is_opaque.zig
index 5b52370d86..31c477e8bc 100644
--- a/test/cases/compile_errors/stage1/obj/function_parameter_is_opaque.zig
+++ b/test/cases/compile_errors/function_parameter_is_opaque.zig
@@ -20,10 +20,11 @@ export fn entry4() void {
}
// error
-// backend=stage1
+// backend=stage2
// target=native
//
-// tmp.zig:3:28: error: parameter of opaque type 'FooType' not allowed
-// tmp.zig:8:28: error: parameter of type '@Type(.Null)' not allowed
-// tmp.zig:12:11: error: parameter of opaque type 'FooType' not allowed
-// tmp.zig:17:11: error: parameter of type '@Type(.Null)' not allowed
+// :3:24: error: parameter of opaque type 'tmp.FooType' not allowed
+// :1:17: note: opaque declared here
+// :8:24: error: parameter of type '@TypeOf(null)' not allowed
+// :12:1: error: parameter of opaque type 'tmp.FooType' not allowed
+// :17:1: error: parameter of type '@TypeOf(null)' not allowed
diff --git a/test/cases/compile_errors/function_returning_opaque_type.zig b/test/cases/compile_errors/function_returning_opaque_type.zig
new file mode 100644
index 0000000000..caf5d74d40
--- /dev/null
+++ b/test/cases/compile_errors/function_returning_opaque_type.zig
@@ -0,0 +1,19 @@
+const FooType = opaque {};
+export fn bar() !FooType {
+ return error.InvalidValue;
+}
+export fn bav() !@TypeOf(null) {
+ return error.InvalidValue;
+}
+export fn baz() !@TypeOf(undefined) {
+ return error.InvalidValue;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :2:18: error: opaque return type 'tmp.FooType' not allowed
+// :1:17: note: opaque declared here
+// :5:18: error: return type '@TypeOf(null)' not allowed
+// :8:18: error: return type '@TypeOf(undefined)' not allowed
diff --git a/test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig b/test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig
new file mode 100644
index 0000000000..0cac6e1e0c
--- /dev/null
+++ b/test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig
@@ -0,0 +1,11 @@
+const Foo = enum { A, B, C };
+export fn entry(foo: Foo) void { _ = foo; }
+
+// error
+// backend=stage2
+// target=native
+//
+// :2:8: error: parameter of type 'tmp.Foo' not allowed in function with calling convention 'C'
+// :2:8: note: enum tag type 'u2' is not extern compatible
+// :2:8: note: only integers with power of two bits are extern compatible
+// :1:13: note: enum declared here
diff --git a/test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig b/test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig
new file mode 100644
index 0000000000..8ae4ef7523
--- /dev/null
+++ b/test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig
@@ -0,0 +1,14 @@
+const Foo = struct {
+ A: i32,
+ B: f32,
+ C: bool,
+};
+export fn entry(foo: Foo) void { _ = foo; }
+
+// error
+// backend=stage2
+// target=native
+//
+// :6:8: error: parameter of type 'tmp.Foo' not allowed in function with calling convention 'C'
+// :6:8: note: only structs with packed or extern layout are extern compatible
+// :1:13: note: struct declared here
diff --git a/test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig b/test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig
new file mode 100644
index 0000000000..a4a96d9172
--- /dev/null
+++ b/test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig
@@ -0,0 +1,14 @@
+const Foo = union {
+ A: i32,
+ B: f32,
+ C: bool,
+};
+export fn entry(foo: Foo) void { _ = foo; }
+
+// error
+// backend=stage2
+// target=native
+//
+// :6:8: error: parameter of type 'tmp.Foo' not allowed in function with calling convention 'C'
+// :6:8: note: only unions with packed or extern layout are extern compatible
+// :1:13: note: union declared here
diff --git a/test/cases/compile_errors/stage1/obj/function_returning_opaque_type.zig b/test/cases/compile_errors/stage1/obj/function_returning_opaque_type.zig
deleted file mode 100644
index e2c084b517..0000000000
--- a/test/cases/compile_errors/stage1/obj/function_returning_opaque_type.zig
+++ /dev/null
@@ -1,19 +0,0 @@
-const FooType = opaque {};
-export fn bar() !FooType {
- return error.InvalidValue;
-}
-export fn bav() !@TypeOf(null) {
- return error.InvalidValue;
-}
-export fn baz() !@TypeOf(undefined) {
- return error.InvalidValue;
-}
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:2:18: error: Opaque return type 'FooType' not allowed
-// tmp.zig:1:1: note: type declared here
-// tmp.zig:5:18: error: Null return type '@Type(.Null)' not allowed
-// tmp.zig:8:18: error: Undefined return type '@Type(.Undefined)' not allowed
diff --git a/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_enum_parameter.zig b/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_enum_parameter.zig
deleted file mode 100644
index 8de26c08b8..0000000000
--- a/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_enum_parameter.zig
+++ /dev/null
@@ -1,8 +0,0 @@
-const Foo = enum { A, B, C };
-export fn entry(foo: Foo) void { _ = foo; }
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:2:22: error: parameter of type 'Foo' not allowed in function with calling convention 'C'
diff --git a/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_struct_parameter.zig b/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_struct_parameter.zig
deleted file mode 100644
index ecb4a36267..0000000000
--- a/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_struct_parameter.zig
+++ /dev/null
@@ -1,12 +0,0 @@
-const Foo = struct {
- A: i32,
- B: f32,
- C: bool,
-};
-export fn entry(foo: Foo) void { _ = foo; }
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:6:22: error: parameter of type 'Foo' not allowed in function with calling convention 'C'
diff --git a/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_union_parameter.zig b/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_union_parameter.zig
deleted file mode 100644
index bfe2dc6cfa..0000000000
--- a/test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_union_parameter.zig
+++ /dev/null
@@ -1,12 +0,0 @@
-const Foo = union {
- A: i32,
- B: f32,
- C: bool,
-};
-export fn entry(foo: Foo) void { _ = foo; }
-
-// error
-// backend=stage1
-// target=native
-//
-// tmp.zig:6:22: error: parameter of type 'Foo' not allowed in function with calling convention 'C'