authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-01 21:09:07+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-07 10:50:06+03:00
log226994cd7e33f2b5812e7bf5e894d9685431af8c
treee3c3bbfd509d5adb919aefa100851ad17a18f528
parentc07c2d68c7c8276f8d215cfd21f0dcd92db9cf79

Sema: misc error message fixes


46 files changed, 321 insertions(+), 297 deletions(-)

src/Sema.zig+27-18
......@@ -1718,9 +1718,17 @@ fn failWithExpectedOptionalType(sema: *Sema, block: *Block, src: LazySrcLoc, opt
17181718}
17191719
17201720fn failWithArrayInitNotSupported(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) CompileError {
1721 return sema.fail(block, src, "type '{}' does not support array initialization syntax", .{
1722 ty.fmt(sema.mod),
1723 });
1721 const msg = msg: {
1722 const msg = try sema.errMsg(block, src, "type '{}' does not support array initialization syntax", .{
1723 ty.fmt(sema.mod),
1724 });
1725 errdefer msg.destroy(sema.gpa);
1726 if (ty.isSlice()) {
1727 try sema.errNote(block, src, msg, "inferred array length is specified with an underscore: '[_]{}'", .{ty.elemType2().fmt(sema.mod)});
1728 }
1729 break :msg msg;
1730 };
1731 return sema.failWithOwnedErrorMsg(block, msg);
17241732}
17251733
17261734fn failWithStructInitNotSupported(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) CompileError {
......@@ -4817,14 +4825,16 @@ fn zirSetAlignStack(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.Inst
48174825 alignment,
48184826 });
48194827 }
4820 const func = sema.owner_func orelse
4828 const func = sema.func orelse
48214829 return sema.fail(block, src, "@setAlignStack outside function body", .{});
48224830
48234831 const fn_owner_decl = sema.mod.declPtr(func.owner_decl);
48244832 switch (fn_owner_decl.ty.fnCallingConvention()) {
48254833 .Naked => return sema.fail(block, src, "@setAlignStack in naked function", .{}),
48264834 .Inline => return sema.fail(block, src, "@setAlignStack in inline function", .{}),
4827 else => {},
4835 else => if (block.inlining != null) {
4836 return sema.fail(block, src, "@setAlignStack in inline call", .{});
4837 },
48284838 }
48294839
48304840 const gop = try sema.mod.align_stack_fns.getOrPut(sema.mod.gpa, func);
......@@ -7451,11 +7461,11 @@ fn analyzeAs(
74517461 zir_operand: Zir.Inst.Ref,
74527462) CompileError!Air.Inst.Ref {
74537463 const dest_ty = try sema.resolveType(block, src, zir_dest_type);
7464 const operand = try sema.resolveInst(zir_operand);
7465 if (dest_ty.tag() == .var_args_param) return operand;
74547466 if (dest_ty.zigTypeTag() == .NoReturn) {
74557467 return sema.fail(block, src, "cannot cast to noreturn", .{});
74567468 }
7457 const operand = try sema.resolveInst(zir_operand);
7458 if (dest_ty.tag() == .var_args_param) return operand;
74597469 return sema.coerce(block, dest_ty, operand, src);
74607470}
74617471
......@@ -8123,9 +8133,11 @@ fn zirSwitchCond(
81238133 const union_ty = try sema.resolveTypeFields(block, operand_src, operand_ty);
81248134 const enum_ty = union_ty.unionTagType() orelse {
81258135 const msg = msg: {
8126 const msg = try sema.errMsg(block, src, "switch on untagged union", .{});
8136 const msg = try sema.errMsg(block, src, "switch on union with no attached enum", .{});
81278137 errdefer msg.destroy(sema.gpa);
8128 try sema.addDeclaredHereNote(msg, union_ty);
8138 if (union_ty.declSrcLocOrNull(sema.mod)) |union_src| {
8139 try sema.mod.errNoteNonLazy(union_src, msg, "consider 'union(enum)' here", .{});
8140 }
81298141 break :msg msg;
81308142 };
81318143 return sema.failWithOwnedErrorMsg(block, msg);
......@@ -8616,7 +8628,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
86168628 if (true_count + false_count == 2) {
86178629 return sema.fail(
86188630 block,
8619 src,
8631 special_prong_src,
86208632 "unreachable else prong; all cases already handled",
86218633 .{},
86228634 );
......@@ -11965,7 +11977,6 @@ fn runtimeBoolCmp(
1196511977
1196611978fn zirSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
1196711979 const inst_data = sema.code.instructions.items(.data)[inst].un_node;
11968 const src = inst_data.src();
1196911980 const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node };
1197011981 const ty = try sema.resolveType(block, operand_src, inst_data.operand);
1197111982 switch (ty.zigTypeTag()) {
......@@ -11975,7 +11986,7 @@ fn zirSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
1197511986 .Null,
1197611987 .BoundFn,
1197711988 .Opaque,
11978 => return sema.fail(block, src, "no size available for type '{}'", .{ty.fmt(sema.mod)}),
11989 => return sema.fail(block, operand_src, "no size available for type '{}'", .{ty.fmt(sema.mod)}),
1197911990
1198011991 .Type,
1198111992 .EnumLiteral,
......@@ -12101,7 +12112,7 @@ fn zirBuiltinSrc(
1210112112 const tracy = trace(@src());
1210212113 defer tracy.end();
1210312114
12104 const src = LazySrcLoc.nodeOffset(@bitCast(i32, extended.operand));
12115 const src = sema.src; // TODO better source location
1210512116 const extra = sema.code.extraData(Zir.Inst.LineColumn, extended.operand).data;
1210612117 const func = sema.func orelse return sema.fail(block, src, "@src outside function", .{});
1210712118 const fn_owner_decl = sema.mod.declPtr(func.owner_decl);
......@@ -14606,14 +14617,12 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1460614617 },
1460714618 .Enum => operand_ty,
1460814619 .Union => operand_ty.unionTagType() orelse {
14609 const decl_index = operand_ty.getOwnerDecl();
14610 const decl = mod.declPtr(decl_index);
1461114620 const msg = msg: {
14612 const msg = try sema.errMsg(block, src, "union '{s}' is untagged", .{
14613 decl.name,
14621 const msg = try sema.errMsg(block, src, "union '{}' is untagged", .{
14622 operand_ty.fmt(sema.mod),
1461414623 });
1461514624 errdefer msg.destroy(sema.gpa);
14616 try mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{});
14625 try sema.addDeclaredHereNote(msg, operand_ty);
1461714626 break :msg msg;
1461814627 };
1461914628 return sema.failWithOwnedErrorMsg(block, msg);
test/cases/compile_errors/array_access_of_type.zig created+10
......@@ -0,0 +1,10 @@
1export fn foo() void {
2 var b: u8[40] = undefined;
3 _ = b;
4}
5
6// error
7// backend=stage2
8// target=native
9//
10// :2:14: error: element access of non-indexable type 'type'
test/cases/compile_errors/non_constant_expression_in_array_size.zig created+14
......@@ -0,0 +1,14 @@
1const Foo = struct {
2 y: [get()]u8,
3};
4var global_var: usize = 1;
5fn get() usize { return global_var; }
6
7export fn entry() usize { return @offsetOf(Foo, "y"); }
8
9// error
10// backend=stage2
11// target=native
12//
13// :5:25: error: unable to resolve comptime value
14// :2:15: note: called from here
test/cases/compile_errors/runtime_index_into_comptime_type_slice.zig+2-3
......@@ -15,6 +15,5 @@ export fn entry() void {
1515// target=native
1616//
1717// :9:51: error: values of type '[]const builtin.Type.StructField' must be comptime known, but index value is runtime known
18// :287:21: note: struct requires comptime because of this field
19// :287:21: note: types are not available at runtime
20// :290:20: note: struct requires comptime because of this field
18// :?:21: note: struct requires comptime because of this field
19// :?:21: note: types are not available at runtime
test/cases/compile_errors/setAlignStack_in_inline_function.zig created+23
......@@ -0,0 +1,23 @@
1export fn entry() void {
2 foo();
3}
4fn foo() callconv(.Inline) void {
5 @setAlignStack(16);
6}
7
8export fn entry1() void {
9 comptime bar();
10}
11fn bar() void {
12 @setAlignStack(16);
13}
14
15
16// error
17// backend=stage2
18// target=native
19//
20// :5:5: error: @setAlignStack in inline function
21// :2:8: note: called from here
22// :12:5: error: @setAlignStack in inline call
23// :9:17: note: called from here
test/cases/compile_errors/signed_integer_remainder_division.zig created+9
......@@ -0,0 +1,9 @@
1export fn foo(a: i32, b: i32) i32 {
2 return a % b;
3}
4
5// error
6// backend=stage2
7// target=native
8//
9// :2:12: error: remainder division with 'i32' and 'i32': signed integers and floats must use @rem or @mod
test/cases/compile_errors/sizeOf_bad_type.zig created+9
......@@ -0,0 +1,9 @@
1export fn entry() usize {
2 return @sizeOf(@TypeOf(null));
3}
4
5// error
6// backend=stage2
7// target=native
8//
9// :2:20: error: no size available for type '@TypeOf(null)'
test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig created+11
......@@ -0,0 +1,11 @@
1export fn foo() void {
2 const bytes = [1]u8{ 0xfa } ** 16;
3 var value = @ptrCast(*const []const u8, &bytes).*;
4 _ = value;
5}
6
7// error
8// backend=stage2
9// target=native
10//
11// :3:52: error: comptime dereference requires '[]const u8' to have a well-defined layout, but it does not.
test/cases/compile_errors/slice_passed_as_array_init_type.zig created+11
......@@ -0,0 +1,11 @@
1export fn entry() void {
2 const x = []u8{};
3 _ = x;
4}
5
6// error
7// backend=stage2
8// target=native
9//
10// :2:19: error: type '[]u8' does not support array initialization syntax
11// :2:19: note: inferred array length is specified with an underscore: '[_]u8'
test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig created+11
......@@ -0,0 +1,11 @@
1export fn entry() void {
2 const x = []u8{1, 2};
3 _ = x;
4}
5
6// error
7// backend=stage2
8// target=native
9//
10// :2:19: error: type '[]u8' does not support array initialization syntax
11// :2:19: note: inferred array length is specified with an underscore: '[_]u8'
test/cases/compile_errors/stage1/obj/array_access_of_type.zig deleted-10
......@@ -1,10 +0,0 @@
1export fn foo() void {
2 var b: u8[40] = undefined;
3 _ = b;
4}
5
6// error
7// backend=stage1
8// target=native
9//
10// tmp.zig:2:14: error: array access of non-array type 'type'
test/cases/compile_errors/stage1/obj/non_constant_expression_in_array_size.zig deleted-14
......@@ -1,14 +0,0 @@
1const Foo = struct {
2 y: [get()]u8,
3};
4var global_var: usize = 1;
5fn get() usize { return global_var; }
6
7export fn entry() usize { return @sizeOf(@TypeOf(Foo)); }
8
9// error
10// backend=stage1
11// target=native
12//
13// tmp.zig:5:25: error: cannot store runtime value in compile time variable
14// tmp.zig:2:12: note: called from here
test/cases/compile_errors/stage1/obj/setAlignStack_in_inline_function.zig deleted-12
......@@ -1,12 +0,0 @@
1export fn entry() void {
2 foo();
3}
4fn foo() callconv(.Inline) void {
5 @setAlignStack(16);
6}
7
8// error
9// backend=stage1
10// target=native
11//
12// tmp.zig:5:5: error: @setAlignStack in inline function
test/cases/compile_errors/stage1/obj/signed_integer_remainder_division.zig deleted-9
......@@ -1,9 +0,0 @@
1export fn foo(a: i32, b: i32) i32 {
2 return a % b;
3}
4
5// error
6// backend=stage1
7// target=native
8//
9// tmp.zig:2:14: error: remainder division with 'i32' and 'i32': signed integers and floats must use @rem or @mod
test/cases/compile_errors/stage1/obj/sizeOf_bad_type.zig deleted-9
......@@ -1,9 +0,0 @@
1export fn entry() usize {
2 return @sizeOf(@TypeOf(null));
3}
4
5// error
6// backend=stage1
7// target=native
8//
9// tmp.zig:2:20: error: no size available for type '@Type(.Null)'
test/cases/compile_errors/stage1/obj/slice_cannot_have_its_bytes_reinterpreted.zig deleted-11
......@@ -1,11 +0,0 @@
1export fn foo() void {
2 const bytes = [1]u8{ 0xfa } ** 16;
3 var value = @ptrCast(*const []const u8, &bytes).*;
4 _ = value;
5}
6
7// error
8// backend=stage1
9// target=native
10//
11// :3:52: error: slice '[]const u8' cannot have its bytes reinterpreted
test/cases/compile_errors/stage1/obj/slice_passed_as_array_init_type.zig deleted-10
......@@ -1,10 +0,0 @@
1export fn entry() void {
2 const x = []u8{};
3 _ = x;
4}
5
6// error
7// backend=stage1
8// target=native
9//
10// tmp.zig:2:15: error: array literal requires address-of operator (&) to coerce to slice type '[]u8'
test/cases/compile_errors/stage1/obj/slice_passed_as_array_init_type_with_elems.zig deleted-10
......@@ -1,10 +0,0 @@
1export fn entry() void {
2 const x = []u8{1, 2};
3 _ = x;
4}
5
6// error
7// backend=stage1
8// target=native
9//
10// tmp.zig:2:15: error: array literal requires address-of operator (&) to coerce to slice type '[]u8'
test/cases/compile_errors/stage1/obj/sub_overflow_in_function_evaluation.zig deleted-12
......@@ -1,12 +0,0 @@
1const y = sub(10, 20);
2fn sub(a: u16, b: u16) u16 {
3 return a - b;
4}
5
6export fn entry() usize { return @sizeOf(@TypeOf(y)); }
7
8// error
9// backend=stage1
10// target=native
11//
12// tmp.zig:3:14: error: operation caused overflow
test/cases/compile_errors/stage1/obj/switch_expression-duplicate_or_overlapping_integer_value.zig deleted-16
......@@ -1,16 +0,0 @@
1fn foo(x: u8) u8 {
2 return switch (x) {
3 0 ... 100 => @as(u8, 0),
4 101 ... 200 => 1,
5 201, 203 ... 207 => 2,
6 206 ... 255 => 3,
7 };
8}
9export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
10
11// error
12// backend=stage1
13// target=native
14//
15// tmp.zig:6:9: error: duplicate switch value
16// tmp.zig:5:14: note: previous value here
test/cases/compile_errors/stage1/obj/switch_expression-switch_on_pointer_type_with_no_else.zig deleted-13
......@@ -1,13 +0,0 @@
1fn foo(x: *u8) void {
2 switch (x) {
3 &y => {},
4 }
5}
6const y: u8 = 100;
7export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
8
9// error
10// backend=stage1
11// target=native
12//
13// tmp.zig:2:5: error: else prong required when switching on type '*u8'
test/cases/compile_errors/stage1/obj/switch_expression-unreachable_else_prong_bool.zig deleted-14
......@@ -1,14 +0,0 @@
1fn foo(x: bool) void {
2 switch (x) {
3 true => {},
4 false => {},
5 else => {},
6 }
7}
8export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
9
10// error
11// backend=stage1
12// target=native
13//
14// tmp.zig:5:9: error: unreachable else prong, all cases already handled
test/cases/compile_errors/stage1/obj/switch_on_union_with_no_attached_enum.zig deleted-22
......@@ -1,22 +0,0 @@
1const Payload = union {
2 A: i32,
3 B: f64,
4 C: bool,
5};
6export fn entry() void {
7 const a = Payload { .A = 1234 };
8 foo(a);
9}
10fn foo(a: *const Payload) void {
11 switch (a.*) {
12 Payload.A => {},
13 else => unreachable,
14 }
15}
16
17// error
18// backend=stage1
19// target=native
20//
21// tmp.zig:11:14: error: switch on union which has no attached enum
22// tmp.zig:1:17: note: consider 'union(enum)' here
test/cases/compile_errors/stage1/obj/switch_with_invalid_expression_parameter.zig deleted-17
......@@ -1,17 +0,0 @@
1export fn entry() void {
2 Test(i32);
3}
4fn Test(comptime T: type) void {
5 const x = switch (T) {
6 []u8 => |x| x,
7 i32 => |x| x,
8 else => unreachable,
9 };
10 _ = x;
11}
12
13// error
14// backend=stage1
15// target=native
16//
17// tmp.zig:7:17: error: switch on type 'type' provides no expression parameter
test/cases/compile_errors/stage1/obj/switch_with_overlapping_case_ranges.zig deleted-13
......@@ -1,13 +0,0 @@
1export fn entry() void {
2 var q: u8 = 0;
3 switch (q) {
4 1...2 => {},
5 0...255 => {},
6 }
7}
8
9// error
10// backend=stage1
11// target=native
12//
13// tmp.zig:5:9: error: duplicate switch value
test/cases/compile_errors/stage1/obj/tagName_used_on_union_with_no_associated_enum_tag.zig deleted-16
......@@ -1,16 +0,0 @@
1const FloatInt = extern union {
2 Float: f32,
3 Int: i32,
4};
5export fn entry() void {
6 var fi = FloatInt{.Float = 123.45};
7 var tagName = @tagName(fi);
8 _ = tagName;
9}
10
11// error
12// backend=stage1
13// target=native
14//
15// tmp.zig:7:19: error: union has no associated enum
16// tmp.zig:1:18: note: declared here
test/cases/compile_errors/stage1/obj/type_variables_must_be_constant.zig deleted-10
......@@ -1,10 +0,0 @@
1var foo = u8;
2export fn entry() foo {
3 return 1;
4}
5
6// error
7// backend=stage1
8// target=native
9//
10// :1:1: error: variable of type 'type' must be constant
test/cases/compile_errors/stage1/obj/unreachable_executed_at_comptime.zig deleted-16
......@@ -1,16 +0,0 @@
1fn foo(comptime x: i32) i32 {
2 comptime {
3 if (x >= 0) return -x;
4 unreachable;
5 }
6}
7export fn entry() void {
8 _ = foo(-42);
9}
10
11// error
12// backend=stage1
13// target=native
14//
15// tmp.zig:4:9: error: reached unreachable code
16// tmp.zig:8:12: note: called from here
test/cases/compile_errors/stage1/obj/use_of_comptime-known_undefined_function_value.zig deleted-13
......@@ -1,13 +0,0 @@
1const Cmd = struct {
2 exec: fn () void,
3};
4export fn entry() void {
5 const command = Cmd{ .exec = undefined };
6 command.exec();
7}
8
9// error
10// backend=stage1
11// target=native
12//
13// tmp.zig:6:12: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/stage1/obj/wasmMemoryGrow_is_a_compile_error_in_non-Wasm_targets.zig deleted-10
......@@ -1,10 +0,0 @@
1export fn foo() void {
2 _ = @wasmMemoryGrow(0, 1);
3 return;
4}
5
6// error
7// backend=stage1
8// target=native
9//
10// tmp.zig:2:9: error: @wasmMemoryGrow is a wasm32 feature only
test/cases/compile_errors/stage1/obj/wasmMemorySize_is_a_compile_error_in_non-Wasm_targets.zig deleted-10
......@@ -1,10 +0,0 @@
1export fn foo() void {
2 _ = @wasmMemorySize(0);
3 return;
4}
5
6// error
7// backend=stage1
8// target=native
9//
10// tmp.zig:2:9: error: @wasmMemorySize is a wasm32 feature only
test/cases/compile_errors/stage1/obj/wrong_type_for_reify_type.zig deleted-9
......@@ -1,9 +0,0 @@
1export fn entry() void {
2 _ = @Type(0);
3}
4
5// error
6// backend=stage1
7// target=native
8//
9// tmp.zig:2:15: error: expected type 'std.builtin.Type', found 'comptime_int'
test/cases/compile_errors/stage1/switch_with_invalid_expression_parameter.zig created+17
......@@ -0,0 +1,17 @@
1export fn entry() void {
2 Test(i32);
3}
4fn Test(comptime T: type) void {
5 const x = switch (T) {
6 []u8 => |x| x,
7 i32 => |x| x,
8 else => unreachable,
9 };
10 _ = x;
11}
12
13// error
14// backend=stage1
15// target=native
16//
17// tmp.zig:7:17: error: switch on type 'type' provides no expression parameter
test/cases/compile_errors/stage1/use_of_comptime-known_undefined_function_value.zig created+13
......@@ -0,0 +1,13 @@
1const Cmd = struct {
2 exec: fn () void,
3};
4export fn entry() void {
5 const command = Cmd{ .exec = undefined };
6 command.exec();
7}
8
9// error
10// backend=stage1
11// target=native
12//
13// tmp.zig:6:12: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/sub_overflow_in_function_evaluation.zig created+13
......@@ -0,0 +1,13 @@
1const y = sub(10, 20);
2fn sub(a: u16, b: u16) u16 {
3 return a - b;
4}
5
6export fn entry() usize { return @sizeOf(@TypeOf(&y)); }
7
8// error
9// backend=stage2
10// target=native
11//
12// :3:14: error: overflow of integer type 'u16' with value '-10'
13// :1:14: note: called from here
test/cases/compile_errors/switch_expression-duplicate_or_overlapping_integer_value.zig created+16
......@@ -0,0 +1,16 @@
1fn foo(x: u8) u8 {
2 return switch (x) {
3 0 ... 100 => @as(u8, 0),
4 101 ... 200 => 1,
5 201, 203 ... 207 => 2,
6 206 ... 255 => 3,
7 };
8}
9export fn entry() usize { return @sizeOf(@TypeOf(&foo)); }
10
11// error
12// backend=stage2
13// target=native
14//
15// :6:13: error: duplicate switch value
16// :5:18: note: previous value here
test/cases/compile_errors/switch_expression-switch_on_pointer_type_with_no_else.zig created+13
......@@ -0,0 +1,13 @@
1fn foo(x: *u8) void {
2 switch (x) {
3 &y => {},
4 }
5}
6var y: u8 = 100;
7export fn entry() usize { return @sizeOf(@TypeOf(&foo)); }
8
9// error
10// backend=stage2
11// target=native
12//
13// :2:5: error: else prong required when switching on type '*u8'
test/cases/compile_errors/switch_expression-unreachable_else_prong_bool.zig created+14
......@@ -0,0 +1,14 @@
1fn foo(x: bool) void {
2 switch (x) {
3 true => {},
4 false => {},
5 else => {},
6 }
7}
8export fn entry() usize { return @sizeOf(@TypeOf(&foo)); }
9
10// error
11// backend=stage2
12// target=native
13//
14// :5:14: error: unreachable else prong; all cases already handled
test/cases/compile_errors/switch_on_union_with_no_attached_enum.zig created+22
......@@ -0,0 +1,22 @@
1const Payload = union {
2 A: i32,
3 B: f64,
4 C: bool,
5};
6export fn entry() void {
7 const a = Payload { .A = 1234 };
8 foo(&a);
9}
10fn foo(a: *const Payload) void {
11 switch (a.*) {
12 Payload.A => {},
13 else => unreachable,
14 }
15}
16
17// error
18// backend=stage2
19// target=native
20//
21// :11:14: error: switch on union with no attached enum
22// :1:17: note: consider 'union(enum)' here
test/cases/compile_errors/switch_with_overlapping_case_ranges.zig created+14
......@@ -0,0 +1,14 @@
1export fn entry() void {
2 var q: u8 = 0;
3 switch (q) {
4 1...2 => {},
5 0...255 => {},
6 }
7}
8
9// error
10// backend=stage2
11// target=native
12//
13// :5:10: error: duplicate switch value
14// :4:10: note: previous value here
test/cases/compile_errors/tagName_used_on_union_with_no_associated_enum_tag.zig created+16
......@@ -0,0 +1,16 @@
1const FloatInt = extern union {
2 Float: f32,
3 Int: i32,
4};
5export fn entry() void {
6 var fi = FloatInt{.Float = 123.45};
7 var tagName = @tagName(fi);
8 _ = tagName;
9}
10
11// error
12// backend=stage2
13// target=native
14//
15// :7:19: error: union 'tmp.FloatInt' is untagged
16// :1:25: note: union declared here
test/cases/compile_errors/type_variables_must_be_constant.zig created+11
......@@ -0,0 +1,11 @@
1var foo = u8;
2export fn entry() foo {
3 return 1;
4}
5
6// error
7// backend=stage2
8// target=native
9//
10// :1:1: error: variable of type 'type' must be const or comptime
11// :1:1: note: types are not available at runtime
test/cases/compile_errors/unreachable_executed_at_comptime.zig created+16
......@@ -0,0 +1,16 @@
1fn foo(comptime x: i32) i32 {
2 comptime {
3 if (x >= 0) return -x;
4 unreachable;
5 }
6}
7export fn entry() void {
8 _ = comptime foo(-42);
9}
10
11// error
12// backend=stage2
13// target=native
14//
15// :4:9: error: reached unreachable code
16// :8:21: note: called from here
test/cases/compile_errors/wasmMemoryGrow_is_a_compile_error_in_non-Wasm_targets.zig created+10
......@@ -0,0 +1,10 @@
1export fn foo() void {
2 _ = @wasmMemoryGrow(0, 1);
3 return;
4}
5
6// error
7// backend=stage2
8// target=x86_64-native
9//
10// :2:9: error: builtin @wasmMemoryGrow is available when targeting WebAssembly; targeted CPU architecture is x86_64
test/cases/compile_errors/wasmMemorySize_is_a_compile_error_in_non-Wasm_targets.zig created+10
......@@ -0,0 +1,10 @@
1export fn foo() void {
2 _ = @wasmMemorySize(0);
3 return;
4}
5
6// error
7// backend=stage2
8// target=x86_64-native
9//
10// :2:9: error: builtin @wasmMemorySize is available when targeting WebAssembly; targeted CPU architecture is x86_64
test/cases/compile_errors/wrong_type_for_reify_type.zig created+9
......@@ -0,0 +1,9 @@
1export fn entry() void {
2 _ = @Type(0);
3}
4
5// error
6// backend=stage2
7// target=native
8//
9// :2:15: error: expected type 'builtin.Type', found 'comptime_int'