From 327fb798c3a2fb18588fc79b1f024cfdd166a4e9 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Sun, 11 Dec 2022 16:28:48 +0200 Subject: move stage2 compile errors out of special folder --- test/cases/compile_errors/comptime_unreachable.zig | 9 ++++++ ..._inside_comptime_function_has_compile_error.zig | 21 ++++++++++++++ .../compile_errors/duplicate-unused_labels.zig | 31 +++++++++++++++++++++ .../cases/compile_errors/embed_outside_package.zig | 8 ++++++ .../compile_errors/import_outside_package.zig | 8 ++++++ test/cases/compile_errors/out_of_bounds_index.zig | 29 ++++++++++++++++++++ .../reified_enum_field_value_overflow.zig | 20 ++++++++++++++ .../cases/compile_errors/slice_of_null_pointer.zig | 11 ++++++++ .../compile_errors/stage2/comptime_unreachable.zig | 9 ------ ..._inside_comptime_function_has_compile_error.zig | 21 -------------- .../stage2/duplicate-unused_labels.zig | 31 --------------------- .../stage2/embed_outside_package.zig | 8 ------ .../stage2/import_outside_package.zig | 8 ------ .../compile_errors/stage2/out_of_bounds_index.zig | 29 -------------------- .../stage2/reified_enum_field_value_overflow.zig | 20 -------------- .../stage2/slice_of_null_pointer.zig | 11 -------- .../stage2/struct_duplicate_field_name.zig | 16 ----------- .../stage2/tuple_ptr_to_mut_slice.zig | 32 ---------------------- .../stage2/union_access_of_inactive_field.zig | 15 ---------- .../stage2/union_duplicate_enum_field.zig | 17 ------------ .../stage2/union_duplicate_field_definition.zig | 16 ----------- .../stage2/union_enum_field_missing.zig | 21 -------------- .../compile_errors/stage2/union_extra_field.zig | 20 -------------- .../stage2/union_runtime_coercion_from_enum.zig | 23 ---------------- .../compile_errors/struct_duplicate_field_name.zig | 16 +++++++++++ .../compile_errors/tuple_ptr_to_mut_slice.zig | 32 ++++++++++++++++++++++ .../union_access_of_inactive_field.zig | 15 ++++++++++ .../compile_errors/union_duplicate_enum_field.zig | 17 ++++++++++++ .../union_duplicate_field_definition.zig | 16 +++++++++++ .../compile_errors/union_enum_field_missing.zig | 21 ++++++++++++++ test/cases/compile_errors/union_extra_field.zig | 20 ++++++++++++++ .../union_runtime_coercion_from_enum.zig | 23 ++++++++++++++++ 32 files changed, 297 insertions(+), 297 deletions(-) create mode 100644 test/cases/compile_errors/comptime_unreachable.zig create mode 100644 test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig create mode 100644 test/cases/compile_errors/duplicate-unused_labels.zig create mode 100644 test/cases/compile_errors/embed_outside_package.zig create mode 100644 test/cases/compile_errors/import_outside_package.zig create mode 100644 test/cases/compile_errors/out_of_bounds_index.zig create mode 100644 test/cases/compile_errors/reified_enum_field_value_overflow.zig create mode 100644 test/cases/compile_errors/slice_of_null_pointer.zig delete mode 100644 test/cases/compile_errors/stage2/comptime_unreachable.zig delete mode 100644 test/cases/compile_errors/stage2/constant_inside_comptime_function_has_compile_error.zig delete mode 100644 test/cases/compile_errors/stage2/duplicate-unused_labels.zig delete mode 100644 test/cases/compile_errors/stage2/embed_outside_package.zig delete mode 100644 test/cases/compile_errors/stage2/import_outside_package.zig delete mode 100644 test/cases/compile_errors/stage2/out_of_bounds_index.zig delete mode 100644 test/cases/compile_errors/stage2/reified_enum_field_value_overflow.zig delete mode 100644 test/cases/compile_errors/stage2/slice_of_null_pointer.zig delete mode 100644 test/cases/compile_errors/stage2/struct_duplicate_field_name.zig delete mode 100644 test/cases/compile_errors/stage2/tuple_ptr_to_mut_slice.zig delete mode 100644 test/cases/compile_errors/stage2/union_access_of_inactive_field.zig delete mode 100644 test/cases/compile_errors/stage2/union_duplicate_enum_field.zig delete mode 100644 test/cases/compile_errors/stage2/union_duplicate_field_definition.zig delete mode 100644 test/cases/compile_errors/stage2/union_enum_field_missing.zig delete mode 100644 test/cases/compile_errors/stage2/union_extra_field.zig delete mode 100644 test/cases/compile_errors/stage2/union_runtime_coercion_from_enum.zig create mode 100644 test/cases/compile_errors/struct_duplicate_field_name.zig create mode 100644 test/cases/compile_errors/tuple_ptr_to_mut_slice.zig create mode 100644 test/cases/compile_errors/union_access_of_inactive_field.zig create mode 100644 test/cases/compile_errors/union_duplicate_enum_field.zig create mode 100644 test/cases/compile_errors/union_duplicate_field_definition.zig create mode 100644 test/cases/compile_errors/union_enum_field_missing.zig create mode 100644 test/cases/compile_errors/union_extra_field.zig create mode 100644 test/cases/compile_errors/union_runtime_coercion_from_enum.zig (limited to 'test/cases') diff --git a/test/cases/compile_errors/comptime_unreachable.zig b/test/cases/compile_errors/comptime_unreachable.zig new file mode 100644 index 0000000000..74b3516585 --- /dev/null +++ b/test/cases/compile_errors/comptime_unreachable.zig @@ -0,0 +1,9 @@ +pub export fn entry() void { + comptime unreachable; +} + +// error +// target=native +// backend=stage2 +// +// :2:14: error: reached unreachable code diff --git a/test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig b/test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig new file mode 100644 index 0000000000..2b67390b05 --- /dev/null +++ b/test/cases/compile_errors/constant_inside_comptime_function_has_compile_error.zig @@ -0,0 +1,21 @@ +const ContextAllocator = MemoryPool(usize); + +pub fn MemoryPool(comptime T: type) type { + const free_list_t = @compileError("aoeu",); + _ = T; + + return struct { + free_list: free_list_t, + }; +} + +export fn entry() void { + var allocator: ContextAllocator = undefined; + _ = allocator; +} + +// error +// target=native +// +// :4:5: error: unreachable code +// :4:25: note: control flow is diverted here diff --git a/test/cases/compile_errors/duplicate-unused_labels.zig b/test/cases/compile_errors/duplicate-unused_labels.zig new file mode 100644 index 0000000000..4bfc6c5960 --- /dev/null +++ b/test/cases/compile_errors/duplicate-unused_labels.zig @@ -0,0 +1,31 @@ +comptime { + blk: { blk: while (false) {} } +} +comptime { + blk: while (false) { blk: for (@as([0]void, undefined)) |_| {} } +} +comptime { + blk: for (@as([0]void, undefined)) |_| { blk: {} } +} +comptime { + blk: {} +} +comptime { + blk: while(false) {} +} +comptime { + blk: for(@as([0]void, undefined)) |_| {} +} + +// error +// target=native +// +// :2:12: error: redefinition of label 'blk' +// :2:5: note: previous definition here +// :5:26: error: redefinition of label 'blk' +// :5:5: note: previous definition here +// :8:46: error: redefinition of label 'blk' +// :8:5: note: previous definition here +// :11:5: error: unused block label +// :14:5: error: unused while loop label +// :17:5: error: unused for loop label diff --git a/test/cases/compile_errors/embed_outside_package.zig b/test/cases/compile_errors/embed_outside_package.zig new file mode 100644 index 0000000000..2003adb061 --- /dev/null +++ b/test/cases/compile_errors/embed_outside_package.zig @@ -0,0 +1,8 @@ +export fn a() usize { + return @embedFile("/root/foo").len; +} + +// error +// target=native +// +//:2:23: error: embed of file outside package path: '/root/foo' diff --git a/test/cases/compile_errors/import_outside_package.zig b/test/cases/compile_errors/import_outside_package.zig new file mode 100644 index 0000000000..59a75e2745 --- /dev/null +++ b/test/cases/compile_errors/import_outside_package.zig @@ -0,0 +1,8 @@ +export fn a() usize { + return @import("../../above.zig").len; +} + +// error +// target=native +// +// :2:20: error: import of file outside package path: '../../above.zig' diff --git a/test/cases/compile_errors/out_of_bounds_index.zig b/test/cases/compile_errors/out_of_bounds_index.zig new file mode 100644 index 0000000000..3f5b71d530 --- /dev/null +++ b/test/cases/compile_errors/out_of_bounds_index.zig @@ -0,0 +1,29 @@ +comptime { + var array = [_:0]u8{ 1, 2, 3, 4 }; + var src_slice: [:0]u8 = &array; + var slice = src_slice[2..6]; + _ = slice; +} +comptime { + var array = [_:0]u8{ 1, 2, 3, 4 }; + var slice = array[2..6]; + _ = slice; +} +comptime { + var array = [_]u8{ 1, 2, 3, 4 }; + var slice = array[2..5]; + _ = slice; +} +comptime { + var array = [_:0]u8{ 1, 2, 3, 4 }; + var slice = array[3..2]; + _ = slice; +} + +// error +// target=native +// +// :4:30: error: end index 6 out of bounds for slice of length 4 +1 (sentinel) +// :9:26: error: end index 6 out of bounds for array of length 4 +1 (sentinel) +// :14:26: error: end index 5 out of bounds for array of length 4 +// :19:23: error: start index 3 is larger than end index 2 diff --git a/test/cases/compile_errors/reified_enum_field_value_overflow.zig b/test/cases/compile_errors/reified_enum_field_value_overflow.zig new file mode 100644 index 0000000000..ad8596ebcc --- /dev/null +++ b/test/cases/compile_errors/reified_enum_field_value_overflow.zig @@ -0,0 +1,20 @@ +comptime { + const E = @Type(.{ .Enum = .{ + .layout = .Auto, + .tag_type = u1, + .fields = &.{ + .{ .name = "f0", .value = 0 }, + .{ .name = "f1", .value = 1 }, + .{ .name = "f2", .value = 2 }, + }, + .decls = &.{}, + .is_exhaustive = true, + } }); + _ = E; +} + +// error +// target=native +// backend=stage2 +// +// :2:15: error: field 'f2' with enumeration value '2' is too large for backing int type 'u1' diff --git a/test/cases/compile_errors/slice_of_null_pointer.zig b/test/cases/compile_errors/slice_of_null_pointer.zig new file mode 100644 index 0000000000..7f2c74a8a6 --- /dev/null +++ b/test/cases/compile_errors/slice_of_null_pointer.zig @@ -0,0 +1,11 @@ +comptime { + var x: [*c]u8 = null; + var runtime_len: usize = 0; + var y = x[0..runtime_len]; + _ = y; +} + +// error +// target=native +// +// :4:14: error: slice of null pointer diff --git a/test/cases/compile_errors/stage2/comptime_unreachable.zig b/test/cases/compile_errors/stage2/comptime_unreachable.zig deleted file mode 100644 index 74b3516585..0000000000 --- a/test/cases/compile_errors/stage2/comptime_unreachable.zig +++ /dev/null @@ -1,9 +0,0 @@ -pub export fn entry() void { - comptime unreachable; -} - -// error -// target=native -// backend=stage2 -// -// :2:14: error: reached unreachable code diff --git a/test/cases/compile_errors/stage2/constant_inside_comptime_function_has_compile_error.zig b/test/cases/compile_errors/stage2/constant_inside_comptime_function_has_compile_error.zig deleted file mode 100644 index 2b67390b05..0000000000 --- a/test/cases/compile_errors/stage2/constant_inside_comptime_function_has_compile_error.zig +++ /dev/null @@ -1,21 +0,0 @@ -const ContextAllocator = MemoryPool(usize); - -pub fn MemoryPool(comptime T: type) type { - const free_list_t = @compileError("aoeu",); - _ = T; - - return struct { - free_list: free_list_t, - }; -} - -export fn entry() void { - var allocator: ContextAllocator = undefined; - _ = allocator; -} - -// error -// target=native -// -// :4:5: error: unreachable code -// :4:25: note: control flow is diverted here diff --git a/test/cases/compile_errors/stage2/duplicate-unused_labels.zig b/test/cases/compile_errors/stage2/duplicate-unused_labels.zig deleted file mode 100644 index 4bfc6c5960..0000000000 --- a/test/cases/compile_errors/stage2/duplicate-unused_labels.zig +++ /dev/null @@ -1,31 +0,0 @@ -comptime { - blk: { blk: while (false) {} } -} -comptime { - blk: while (false) { blk: for (@as([0]void, undefined)) |_| {} } -} -comptime { - blk: for (@as([0]void, undefined)) |_| { blk: {} } -} -comptime { - blk: {} -} -comptime { - blk: while(false) {} -} -comptime { - blk: for(@as([0]void, undefined)) |_| {} -} - -// error -// target=native -// -// :2:12: error: redefinition of label 'blk' -// :2:5: note: previous definition here -// :5:26: error: redefinition of label 'blk' -// :5:5: note: previous definition here -// :8:46: error: redefinition of label 'blk' -// :8:5: note: previous definition here -// :11:5: error: unused block label -// :14:5: error: unused while loop label -// :17:5: error: unused for loop label diff --git a/test/cases/compile_errors/stage2/embed_outside_package.zig b/test/cases/compile_errors/stage2/embed_outside_package.zig deleted file mode 100644 index 2003adb061..0000000000 --- a/test/cases/compile_errors/stage2/embed_outside_package.zig +++ /dev/null @@ -1,8 +0,0 @@ -export fn a() usize { - return @embedFile("/root/foo").len; -} - -// error -// target=native -// -//:2:23: error: embed of file outside package path: '/root/foo' diff --git a/test/cases/compile_errors/stage2/import_outside_package.zig b/test/cases/compile_errors/stage2/import_outside_package.zig deleted file mode 100644 index 59a75e2745..0000000000 --- a/test/cases/compile_errors/stage2/import_outside_package.zig +++ /dev/null @@ -1,8 +0,0 @@ -export fn a() usize { - return @import("../../above.zig").len; -} - -// error -// target=native -// -// :2:20: error: import of file outside package path: '../../above.zig' diff --git a/test/cases/compile_errors/stage2/out_of_bounds_index.zig b/test/cases/compile_errors/stage2/out_of_bounds_index.zig deleted file mode 100644 index 3f5b71d530..0000000000 --- a/test/cases/compile_errors/stage2/out_of_bounds_index.zig +++ /dev/null @@ -1,29 +0,0 @@ -comptime { - var array = [_:0]u8{ 1, 2, 3, 4 }; - var src_slice: [:0]u8 = &array; - var slice = src_slice[2..6]; - _ = slice; -} -comptime { - var array = [_:0]u8{ 1, 2, 3, 4 }; - var slice = array[2..6]; - _ = slice; -} -comptime { - var array = [_]u8{ 1, 2, 3, 4 }; - var slice = array[2..5]; - _ = slice; -} -comptime { - var array = [_:0]u8{ 1, 2, 3, 4 }; - var slice = array[3..2]; - _ = slice; -} - -// error -// target=native -// -// :4:30: error: end index 6 out of bounds for slice of length 4 +1 (sentinel) -// :9:26: error: end index 6 out of bounds for array of length 4 +1 (sentinel) -// :14:26: error: end index 5 out of bounds for array of length 4 -// :19:23: error: start index 3 is larger than end index 2 diff --git a/test/cases/compile_errors/stage2/reified_enum_field_value_overflow.zig b/test/cases/compile_errors/stage2/reified_enum_field_value_overflow.zig deleted file mode 100644 index ad8596ebcc..0000000000 --- a/test/cases/compile_errors/stage2/reified_enum_field_value_overflow.zig +++ /dev/null @@ -1,20 +0,0 @@ -comptime { - const E = @Type(.{ .Enum = .{ - .layout = .Auto, - .tag_type = u1, - .fields = &.{ - .{ .name = "f0", .value = 0 }, - .{ .name = "f1", .value = 1 }, - .{ .name = "f2", .value = 2 }, - }, - .decls = &.{}, - .is_exhaustive = true, - } }); - _ = E; -} - -// error -// target=native -// backend=stage2 -// -// :2:15: error: field 'f2' with enumeration value '2' is too large for backing int type 'u1' diff --git a/test/cases/compile_errors/stage2/slice_of_null_pointer.zig b/test/cases/compile_errors/stage2/slice_of_null_pointer.zig deleted file mode 100644 index 7f2c74a8a6..0000000000 --- a/test/cases/compile_errors/stage2/slice_of_null_pointer.zig +++ /dev/null @@ -1,11 +0,0 @@ -comptime { - var x: [*c]u8 = null; - var runtime_len: usize = 0; - var y = x[0..runtime_len]; - _ = y; -} - -// error -// target=native -// -// :4:14: error: slice of null pointer diff --git a/test/cases/compile_errors/stage2/struct_duplicate_field_name.zig b/test/cases/compile_errors/stage2/struct_duplicate_field_name.zig deleted file mode 100644 index 7e4434f1d9..0000000000 --- a/test/cases/compile_errors/stage2/struct_duplicate_field_name.zig +++ /dev/null @@ -1,16 +0,0 @@ -const S = struct { - foo: u32, - foo: u32, -}; - -export fn entry() void { - const s: S = .{ .foo = 100 }; - _ = s; -} - -// error -// target=native -// -// :3:5: error: duplicate struct field: 'foo' -// :2:5: note: other field here -// :1:11: note: struct declared here diff --git a/test/cases/compile_errors/stage2/tuple_ptr_to_mut_slice.zig b/test/cases/compile_errors/stage2/tuple_ptr_to_mut_slice.zig deleted file mode 100644 index 24e4753563..0000000000 --- a/test/cases/compile_errors/stage2/tuple_ptr_to_mut_slice.zig +++ /dev/null @@ -1,32 +0,0 @@ -export fn entry1() void { - var a = .{ 1, 2, 3 }; - _ = @as([]u8, &a); -} -export fn entry2() void { - var a = .{ @as(u8, 1), @as(u8, 2), @as(u8, 3) }; - _ = @as([]u8, &a); -} - -// runtime values -var vals = [_]u7{ 4, 5, 6 }; -export fn entry3() void { - var a = .{ vals[0], vals[1], vals[2] }; - _ = @as([]u8, &a); -} -export fn entry4() void { - var a = .{ @as(u8, vals[0]), @as(u8, vals[1]), @as(u8, vals[2]) }; - _ = @as([]u8, &a); -} - -// error -// backend=stage2 -// target=native -// -// :3:19: error: cannot cast pointer to tuple to '[]u8' -// :3:19: note: pointers to tuples can only coerce to constant pointers -// :7:19: error: cannot cast pointer to tuple to '[]u8' -// :7:19: note: pointers to tuples can only coerce to constant pointers -// :14:19: error: cannot cast pointer to tuple to '[]u8' -// :14:19: note: pointers to tuples can only coerce to constant pointers -// :18:19: error: cannot cast pointer to tuple to '[]u8' -// :18:19: note: pointers to tuples can only coerce to constant pointers diff --git a/test/cases/compile_errors/stage2/union_access_of_inactive_field.zig b/test/cases/compile_errors/stage2/union_access_of_inactive_field.zig deleted file mode 100644 index 4f72914216..0000000000 --- a/test/cases/compile_errors/stage2/union_access_of_inactive_field.zig +++ /dev/null @@ -1,15 +0,0 @@ -const U = union { - a: void, - b: u64, -}; -comptime { - var u: U = .{ .a = {} }; - const v = u.b; - _ = v; -} - -// error -// target=native -// -// :7:16: error: access of union field 'b' while field 'a' is active -// :1:11: note: union declared here diff --git a/test/cases/compile_errors/stage2/union_duplicate_enum_field.zig b/test/cases/compile_errors/stage2/union_duplicate_enum_field.zig deleted file mode 100644 index 44eb58e014..0000000000 --- a/test/cases/compile_errors/stage2/union_duplicate_enum_field.zig +++ /dev/null @@ -1,17 +0,0 @@ -const E = enum { a, b }; -const U = union(E) { - a: u32, - a: u32, -}; - -export fn foo() void { - var u: U = .{ .a = 123 }; - _ = u; -} - -// error -// target=native -// -// :4:5: error: duplicate union field: 'a' -// :3:5: note: other field here -// :2:11: note: union declared here diff --git a/test/cases/compile_errors/stage2/union_duplicate_field_definition.zig b/test/cases/compile_errors/stage2/union_duplicate_field_definition.zig deleted file mode 100644 index 7993f27141..0000000000 --- a/test/cases/compile_errors/stage2/union_duplicate_field_definition.zig +++ /dev/null @@ -1,16 +0,0 @@ -const U = union { - foo: u32, - foo: u32, -}; - -export fn entry() void { - const u: U = .{ .foo = 100 }; - _ = u; -} - -// error -// target=native -// -// :3:5: error: duplicate union field: 'foo' -// :2:5: note: other field here -// :1:11: note: union declared here diff --git a/test/cases/compile_errors/stage2/union_enum_field_missing.zig b/test/cases/compile_errors/stage2/union_enum_field_missing.zig deleted file mode 100644 index 81bc83cf18..0000000000 --- a/test/cases/compile_errors/stage2/union_enum_field_missing.zig +++ /dev/null @@ -1,21 +0,0 @@ -const E = enum { - a, - b, - c, -}; - -const U = union(E) { - a: i32, - b: f64, -}; - -export fn entry() usize { - return @sizeOf(U); -} - -// error -// target=native -// -// :7:11: error: enum field(s) missing in union -// :4:5: note: field 'c' missing, declared here -// :1:11: note: enum declared here diff --git a/test/cases/compile_errors/stage2/union_extra_field.zig b/test/cases/compile_errors/stage2/union_extra_field.zig deleted file mode 100644 index 6d1c644bc6..0000000000 --- a/test/cases/compile_errors/stage2/union_extra_field.zig +++ /dev/null @@ -1,20 +0,0 @@ -const E = enum { - a, - b, - c, -}; -const U = union(E) { - a: i32, - b: f64, - c: f64, - d: f64, -}; -export fn entry() usize { - return @sizeOf(U); -} - -// error -// target=native -// -// :10:5: error: no field named 'd' in enum 'tmp.E' -// :1:11: note: enum declared here diff --git a/test/cases/compile_errors/stage2/union_runtime_coercion_from_enum.zig b/test/cases/compile_errors/stage2/union_runtime_coercion_from_enum.zig deleted file mode 100644 index 9020e9d5d7..0000000000 --- a/test/cases/compile_errors/stage2/union_runtime_coercion_from_enum.zig +++ /dev/null @@ -1,23 +0,0 @@ -const E = enum { - a, - b, -}; -const U = union(E) { - a: u32, - b: u64, -}; -fn foo() E { - return E.b; -} -export fn doTheTest() u64 { - var u: U = foo(); - return u.b; -} - -// error -// target=native -// -// :13:19: error: runtime coercion from enum 'tmp.E' to union 'tmp.U' which has non-void fields -// :6:5: note: field 'a' has type 'u32' -// :7:5: note: field 'b' has type 'u64' -// :5:11: note: union declared here diff --git a/test/cases/compile_errors/struct_duplicate_field_name.zig b/test/cases/compile_errors/struct_duplicate_field_name.zig new file mode 100644 index 0000000000..7e4434f1d9 --- /dev/null +++ b/test/cases/compile_errors/struct_duplicate_field_name.zig @@ -0,0 +1,16 @@ +const S = struct { + foo: u32, + foo: u32, +}; + +export fn entry() void { + const s: S = .{ .foo = 100 }; + _ = s; +} + +// error +// target=native +// +// :3:5: error: duplicate struct field: 'foo' +// :2:5: note: other field here +// :1:11: note: struct declared here diff --git a/test/cases/compile_errors/tuple_ptr_to_mut_slice.zig b/test/cases/compile_errors/tuple_ptr_to_mut_slice.zig new file mode 100644 index 0000000000..24e4753563 --- /dev/null +++ b/test/cases/compile_errors/tuple_ptr_to_mut_slice.zig @@ -0,0 +1,32 @@ +export fn entry1() void { + var a = .{ 1, 2, 3 }; + _ = @as([]u8, &a); +} +export fn entry2() void { + var a = .{ @as(u8, 1), @as(u8, 2), @as(u8, 3) }; + _ = @as([]u8, &a); +} + +// runtime values +var vals = [_]u7{ 4, 5, 6 }; +export fn entry3() void { + var a = .{ vals[0], vals[1], vals[2] }; + _ = @as([]u8, &a); +} +export fn entry4() void { + var a = .{ @as(u8, vals[0]), @as(u8, vals[1]), @as(u8, vals[2]) }; + _ = @as([]u8, &a); +} + +// error +// backend=stage2 +// target=native +// +// :3:19: error: cannot cast pointer to tuple to '[]u8' +// :3:19: note: pointers to tuples can only coerce to constant pointers +// :7:19: error: cannot cast pointer to tuple to '[]u8' +// :7:19: note: pointers to tuples can only coerce to constant pointers +// :14:19: error: cannot cast pointer to tuple to '[]u8' +// :14:19: note: pointers to tuples can only coerce to constant pointers +// :18:19: error: cannot cast pointer to tuple to '[]u8' +// :18:19: note: pointers to tuples can only coerce to constant pointers diff --git a/test/cases/compile_errors/union_access_of_inactive_field.zig b/test/cases/compile_errors/union_access_of_inactive_field.zig new file mode 100644 index 0000000000..4f72914216 --- /dev/null +++ b/test/cases/compile_errors/union_access_of_inactive_field.zig @@ -0,0 +1,15 @@ +const U = union { + a: void, + b: u64, +}; +comptime { + var u: U = .{ .a = {} }; + const v = u.b; + _ = v; +} + +// error +// target=native +// +// :7:16: error: access of union field 'b' while field 'a' is active +// :1:11: note: union declared here diff --git a/test/cases/compile_errors/union_duplicate_enum_field.zig b/test/cases/compile_errors/union_duplicate_enum_field.zig new file mode 100644 index 0000000000..44eb58e014 --- /dev/null +++ b/test/cases/compile_errors/union_duplicate_enum_field.zig @@ -0,0 +1,17 @@ +const E = enum { a, b }; +const U = union(E) { + a: u32, + a: u32, +}; + +export fn foo() void { + var u: U = .{ .a = 123 }; + _ = u; +} + +// error +// target=native +// +// :4:5: error: duplicate union field: 'a' +// :3:5: note: other field here +// :2:11: note: union declared here diff --git a/test/cases/compile_errors/union_duplicate_field_definition.zig b/test/cases/compile_errors/union_duplicate_field_definition.zig new file mode 100644 index 0000000000..7993f27141 --- /dev/null +++ b/test/cases/compile_errors/union_duplicate_field_definition.zig @@ -0,0 +1,16 @@ +const U = union { + foo: u32, + foo: u32, +}; + +export fn entry() void { + const u: U = .{ .foo = 100 }; + _ = u; +} + +// error +// target=native +// +// :3:5: error: duplicate union field: 'foo' +// :2:5: note: other field here +// :1:11: note: union declared here diff --git a/test/cases/compile_errors/union_enum_field_missing.zig b/test/cases/compile_errors/union_enum_field_missing.zig new file mode 100644 index 0000000000..81bc83cf18 --- /dev/null +++ b/test/cases/compile_errors/union_enum_field_missing.zig @@ -0,0 +1,21 @@ +const E = enum { + a, + b, + c, +}; + +const U = union(E) { + a: i32, + b: f64, +}; + +export fn entry() usize { + return @sizeOf(U); +} + +// error +// target=native +// +// :7:11: error: enum field(s) missing in union +// :4:5: note: field 'c' missing, declared here +// :1:11: note: enum declared here diff --git a/test/cases/compile_errors/union_extra_field.zig b/test/cases/compile_errors/union_extra_field.zig new file mode 100644 index 0000000000..6d1c644bc6 --- /dev/null +++ b/test/cases/compile_errors/union_extra_field.zig @@ -0,0 +1,20 @@ +const E = enum { + a, + b, + c, +}; +const U = union(E) { + a: i32, + b: f64, + c: f64, + d: f64, +}; +export fn entry() usize { + return @sizeOf(U); +} + +// error +// target=native +// +// :10:5: error: no field named 'd' in enum 'tmp.E' +// :1:11: note: enum declared here diff --git a/test/cases/compile_errors/union_runtime_coercion_from_enum.zig b/test/cases/compile_errors/union_runtime_coercion_from_enum.zig new file mode 100644 index 0000000000..9020e9d5d7 --- /dev/null +++ b/test/cases/compile_errors/union_runtime_coercion_from_enum.zig @@ -0,0 +1,23 @@ +const E = enum { + a, + b, +}; +const U = union(E) { + a: u32, + b: u64, +}; +fn foo() E { + return E.b; +} +export fn doTheTest() u64 { + var u: U = foo(); + return u.b; +} + +// error +// target=native +// +// :13:19: error: runtime coercion from enum 'tmp.E' to union 'tmp.U' which has non-void fields +// :6:5: note: field 'a' has type 'u32' +// :7:5: note: field 'b' has type 'u64' +// :5:11: note: union declared here -- cgit v1.2.3