diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-07-17 17:03:52 +0300 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-07-21 12:21:30 -0700 |
| commit | 8feb3987608945040c955bd7b24be3841ebf74ac (patch) | |
| tree | 192a1ec257081c7f4771e59ee1fc3e499ae7cf6f /test/cases/compile_errors | |
| parent | d851b24180fdf2b622b06e9a35e315541fb10aa1 (diff) | |
| download | zig-8feb3987608945040c955bd7b24be3841ebf74ac.tar.gz zig-8feb3987608945040c955bd7b24be3841ebf74ac.zip | |
Sema: validate function parameter types and return type
Diffstat (limited to 'test/cases/compile_errors')
| -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.zig | 19 | ||||
| -rw-r--r-- | test/cases/compile_errors/function_with_non-extern_non-packed_enum_parameter.zig | 11 | ||||
| -rw-r--r-- | test/cases/compile_errors/function_with_non-extern_non-packed_struct_parameter.zig | 14 | ||||
| -rw-r--r-- | test/cases/compile_errors/function_with_non-extern_non-packed_union_parameter.zig | 14 | ||||
| -rw-r--r-- | test/cases/compile_errors/stage1/obj/function_returning_opaque_type.zig | 19 | ||||
| -rw-r--r-- | test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_enum_parameter.zig | 8 | ||||
| -rw-r--r-- | test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_struct_parameter.zig | 12 | ||||
| -rw-r--r-- | test/cases/compile_errors/stage1/obj/function_with_non-extern_non-packed_union_parameter.zig | 12 |
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' |
