diff --git a/test/cases/compile_errors/comptime_unreachable.zig b/test/cases/compile_errors/comptime_unreachable.zig new file mode 100644 index 0000000000000000000000000000000000000000..74b35165854f2bfa0bb9552b67da998ef0251b39 --- /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 0000000000000000000000000000000000000000..2b67390b05b2ec7e22608045d5e658810a4b596d --- /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 0000000000000000000000000000000000000000..4bfc6c596012082af8e971d5ab932f86a01c8c5c --- /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 0000000000000000000000000000000000000000..2003adb06199e8df8136ea6941d4ac346219f6bb --- /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 0000000000000000000000000000000000000000..59a75e2745a22d2f1b84d40d0555c4e7dc1ae881 --- /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 0000000000000000000000000000000000000000..3f5b71d530fdbe6f29ba8f2435a13a57f3e7b504 --- /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 0000000000000000000000000000000000000000..ad8596ebccd724074f8222b4543984d4faf98929 --- /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 0000000000000000000000000000000000000000..7f2c74a8a62bfc65116889043afdcd75e1d04ddd --- /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 74b35165854f2bfa0bb9552b67da998ef0251b39..0000000000000000000000000000000000000000 --- 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 2b67390b05b2ec7e22608045d5e658810a4b596d..0000000000000000000000000000000000000000 --- 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 4bfc6c596012082af8e971d5ab932f86a01c8c5c..0000000000000000000000000000000000000000 --- 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 2003adb06199e8df8136ea6941d4ac346219f6bb..0000000000000000000000000000000000000000 --- 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 59a75e2745a22d2f1b84d40d0555c4e7dc1ae881..0000000000000000000000000000000000000000 --- 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 3f5b71d530fdbe6f29ba8f2435a13a57f3e7b504..0000000000000000000000000000000000000000 --- 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 ad8596ebccd724074f8222b4543984d4faf98929..0000000000000000000000000000000000000000 --- 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 7f2c74a8a62bfc65116889043afdcd75e1d04ddd..0000000000000000000000000000000000000000 --- 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 7e4434f1d92fa353d9fccff5f2c403fae90c9978..0000000000000000000000000000000000000000 --- 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 24e4753563aa0d067c94c47fb5ea5260f5ff747c..0000000000000000000000000000000000000000 --- 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 4f72914216fce157fc689d84d177add5ade64fcc..0000000000000000000000000000000000000000 --- 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 44eb58e01449d22d53bf6382c8e61d0cc69b9cb9..0000000000000000000000000000000000000000 --- 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 7993f27141f54f163bc29e32dfe0ed46054c67c4..0000000000000000000000000000000000000000 --- 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 81bc83cf181d959f9519e9900650eb0110c49812..0000000000000000000000000000000000000000 --- 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 6d1c644bc6888e64140a2ce870d2b68c8b076982..0000000000000000000000000000000000000000 --- 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 9020e9d5d7d202ef14c9c2660bee33df59508901..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..7e4434f1d92fa353d9fccff5f2c403fae90c9978 --- /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 0000000000000000000000000000000000000000..24e4753563aa0d067c94c47fb5ea5260f5ff747c --- /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 0000000000000000000000000000000000000000..4f72914216fce157fc689d84d177add5ade64fcc --- /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 0000000000000000000000000000000000000000..44eb58e01449d22d53bf6382c8e61d0cc69b9cb9 --- /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 0000000000000000000000000000000000000000..7993f27141f54f163bc29e32dfe0ed46054c67c4 --- /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 0000000000000000000000000000000000000000..81bc83cf181d959f9519e9900650eb0110c49812 --- /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 0000000000000000000000000000000000000000..6d1c644bc6888e64140a2ce870d2b68c8b076982 --- /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 0000000000000000000000000000000000000000..9020e9d5d7d202ef14c9c2660bee33df59508901 --- /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