commit 226994cd7e33f2b5812e7bf5e894d9685431af8c (tree) parent c07c2d68c7c8276f8d215cfd21f0dcd92db9cf79 Author: Veikka Tuominen <git@vexu.eu> Date: Fri, 1 Jul 2022 21:09:07 +0300 Sema: misc error message fixes Diffstat:
44 files changed, 291 insertions(+), 267 deletions(-)
diff --git a/src/Sema.zig b/src/Sema.zig @@ -1718,9 +1718,17 @@ fn failWithExpectedOptionalType(sema: *Sema, block: *Block, src: LazySrcLoc, opt } fn failWithArrayInitNotSupported(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) CompileError { - return sema.fail(block, src, "type '{}' does not support array initialization syntax", .{ - ty.fmt(sema.mod), - }); + const msg = msg: { + const msg = try sema.errMsg(block, src, "type '{}' does not support array initialization syntax", .{ + ty.fmt(sema.mod), + }); + errdefer msg.destroy(sema.gpa); + if (ty.isSlice()) { + try sema.errNote(block, src, msg, "inferred array length is specified with an underscore: '[_]{}'", .{ty.elemType2().fmt(sema.mod)}); + } + break :msg msg; + }; + return sema.failWithOwnedErrorMsg(block, msg); } fn 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 alignment, }); } - const func = sema.owner_func orelse + const func = sema.func orelse return sema.fail(block, src, "@setAlignStack outside function body", .{}); const fn_owner_decl = sema.mod.declPtr(func.owner_decl); switch (fn_owner_decl.ty.fnCallingConvention()) { .Naked => return sema.fail(block, src, "@setAlignStack in naked function", .{}), .Inline => return sema.fail(block, src, "@setAlignStack in inline function", .{}), - else => {}, + else => if (block.inlining != null) { + return sema.fail(block, src, "@setAlignStack in inline call", .{}); + }, } const gop = try sema.mod.align_stack_fns.getOrPut(sema.mod.gpa, func); @@ -7451,11 +7461,11 @@ fn analyzeAs( zir_operand: Zir.Inst.Ref, ) CompileError!Air.Inst.Ref { const dest_ty = try sema.resolveType(block, src, zir_dest_type); + const operand = try sema.resolveInst(zir_operand); + if (dest_ty.tag() == .var_args_param) return operand; if (dest_ty.zigTypeTag() == .NoReturn) { return sema.fail(block, src, "cannot cast to noreturn", .{}); } - const operand = try sema.resolveInst(zir_operand); - if (dest_ty.tag() == .var_args_param) return operand; return sema.coerce(block, dest_ty, operand, src); } @@ -8123,9 +8133,11 @@ fn zirSwitchCond( const union_ty = try sema.resolveTypeFields(block, operand_src, operand_ty); const enum_ty = union_ty.unionTagType() orelse { const msg = msg: { - const msg = try sema.errMsg(block, src, "switch on untagged union", .{}); + const msg = try sema.errMsg(block, src, "switch on union with no attached enum", .{}); errdefer msg.destroy(sema.gpa); - try sema.addDeclaredHereNote(msg, union_ty); + if (union_ty.declSrcLocOrNull(sema.mod)) |union_src| { + try sema.mod.errNoteNonLazy(union_src, msg, "consider 'union(enum)' here", .{}); + } break :msg msg; }; return sema.failWithOwnedErrorMsg(block, msg); @@ -8616,7 +8628,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError if (true_count + false_count == 2) { return sema.fail( block, - src, + special_prong_src, "unreachable else prong; all cases already handled", .{}, ); @@ -11965,7 +11977,6 @@ fn runtimeBoolCmp( fn zirSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { const inst_data = sema.code.instructions.items(.data)[inst].un_node; - const src = inst_data.src(); const operand_src: LazySrcLoc = .{ .node_offset_builtin_call_arg0 = inst_data.src_node }; const ty = try sema.resolveType(block, operand_src, inst_data.operand); switch (ty.zigTypeTag()) { @@ -11975,7 +11986,7 @@ fn zirSizeOf(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air. .Null, .BoundFn, .Opaque, - => return sema.fail(block, src, "no size available for type '{}'", .{ty.fmt(sema.mod)}), + => return sema.fail(block, operand_src, "no size available for type '{}'", .{ty.fmt(sema.mod)}), .Type, .EnumLiteral, @@ -12101,7 +12112,7 @@ fn zirBuiltinSrc( const tracy = trace(@src()); defer tracy.end(); - const src = LazySrcLoc.nodeOffset(@bitCast(i32, extended.operand)); + const src = sema.src; // TODO better source location const extra = sema.code.extraData(Zir.Inst.LineColumn, extended.operand).data; const func = sema.func orelse return sema.fail(block, src, "@src outside function", .{}); 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 }, .Enum => operand_ty, .Union => operand_ty.unionTagType() orelse { - const decl_index = operand_ty.getOwnerDecl(); - const decl = mod.declPtr(decl_index); const msg = msg: { - const msg = try sema.errMsg(block, src, "union '{s}' is untagged", .{ - decl.name, + const msg = try sema.errMsg(block, src, "union '{}' is untagged", .{ + operand_ty.fmt(sema.mod), }); errdefer msg.destroy(sema.gpa); - try mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{}); + try sema.addDeclaredHereNote(msg, operand_ty); break :msg msg; }; return sema.failWithOwnedErrorMsg(block, msg); diff --git a/test/cases/compile_errors/array_access_of_type.zig b/test/cases/compile_errors/array_access_of_type.zig @@ -0,0 +1,10 @@ +export fn foo() void { + var b: u8[40] = undefined; + _ = b; +} + +// error +// backend=stage2 +// target=native +// +// :2:14: error: element access of non-indexable type 'type' diff --git a/test/cases/compile_errors/non_constant_expression_in_array_size.zig b/test/cases/compile_errors/non_constant_expression_in_array_size.zig @@ -0,0 +1,14 @@ +const Foo = struct { + y: [get()]u8, +}; +var global_var: usize = 1; +fn get() usize { return global_var; } + +export fn entry() usize { return @offsetOf(Foo, "y"); } + +// error +// backend=stage2 +// target=native +// +// :5:25: error: unable to resolve comptime value +// :2:15: note: called from here diff --git a/test/cases/compile_errors/runtime_index_into_comptime_type_slice.zig b/test/cases/compile_errors/runtime_index_into_comptime_type_slice.zig @@ -15,6 +15,5 @@ export fn entry() void { // target=native // // :9:51: error: values of type '[]const builtin.Type.StructField' must be comptime known, but index value is runtime known -// :287:21: note: struct requires comptime because of this field -// :287:21: note: types are not available at runtime -// :290:20: note: struct requires comptime because of this field +// :?:21: note: struct requires comptime because of this field +// :?:21: note: types are not available at runtime diff --git a/test/cases/compile_errors/setAlignStack_in_inline_function.zig b/test/cases/compile_errors/setAlignStack_in_inline_function.zig @@ -0,0 +1,23 @@ +export fn entry() void { + foo(); +} +fn foo() callconv(.Inline) void { + @setAlignStack(16); +} + +export fn entry1() void { + comptime bar(); +} +fn bar() void { + @setAlignStack(16); +} + + +// error +// backend=stage2 +// target=native +// +// :5:5: error: @setAlignStack in inline function +// :2:8: note: called from here +// :12:5: error: @setAlignStack in inline call +// :9:17: note: called from here diff --git a/test/cases/compile_errors/signed_integer_remainder_division.zig b/test/cases/compile_errors/signed_integer_remainder_division.zig @@ -0,0 +1,9 @@ +export fn foo(a: i32, b: i32) i32 { + return a % b; +} + +// error +// backend=stage2 +// target=native +// +// :2:12: error: remainder division with 'i32' and 'i32': signed integers and floats must use @rem or @mod diff --git a/test/cases/compile_errors/sizeOf_bad_type.zig b/test/cases/compile_errors/sizeOf_bad_type.zig @@ -0,0 +1,9 @@ +export fn entry() usize { + return @sizeOf(@TypeOf(null)); +} + +// error +// backend=stage2 +// target=native +// +// :2:20: error: no size available for type '@TypeOf(null)' diff --git a/test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig b/test/cases/compile_errors/slice_cannot_have_its_bytes_reinterpreted.zig @@ -0,0 +1,11 @@ +export fn foo() void { + const bytes = [1]u8{ 0xfa } ** 16; + var value = @ptrCast(*const []const u8, &bytes).*; + _ = value; +} + +// error +// backend=stage2 +// target=native +// +// :3:52: error: comptime dereference requires '[]const u8' to have a well-defined layout, but it does not. diff --git a/test/cases/compile_errors/slice_passed_as_array_init_type.zig b/test/cases/compile_errors/slice_passed_as_array_init_type.zig @@ -0,0 +1,11 @@ +export fn entry() void { + const x = []u8{}; + _ = x; +} + +// error +// backend=stage2 +// target=native +// +// :2:19: error: type '[]u8' does not support array initialization syntax +// :2:19: note: inferred array length is specified with an underscore: '[_]u8' diff --git a/test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig b/test/cases/compile_errors/slice_passed_as_array_init_type_with_elems.zig @@ -0,0 +1,11 @@ +export fn entry() void { + const x = []u8{1, 2}; + _ = x; +} + +// error +// backend=stage2 +// target=native +// +// :2:19: error: type '[]u8' does not support array initialization syntax +// :2:19: note: inferred array length is specified with an underscore: '[_]u8' diff --git a/test/cases/compile_errors/stage1/obj/array_access_of_type.zig b/test/cases/compile_errors/stage1/obj/array_access_of_type.zig @@ -1,10 +0,0 @@ -export fn foo() void { - var b: u8[40] = undefined; - _ = b; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:14: error: array access of non-array type 'type' diff --git a/test/cases/compile_errors/stage1/obj/non_constant_expression_in_array_size.zig b/test/cases/compile_errors/stage1/obj/non_constant_expression_in_array_size.zig @@ -1,14 +0,0 @@ -const Foo = struct { - y: [get()]u8, -}; -var global_var: usize = 1; -fn get() usize { return global_var; } - -export fn entry() usize { return @sizeOf(@TypeOf(Foo)); } - -// error -// backend=stage1 -// target=native -// -// tmp.zig:5:25: error: cannot store runtime value in compile time variable -// tmp.zig:2:12: note: called from here diff --git a/test/cases/compile_errors/stage1/obj/setAlignStack_in_inline_function.zig b/test/cases/compile_errors/stage1/obj/setAlignStack_in_inline_function.zig @@ -1,12 +0,0 @@ -export fn entry() void { - foo(); -} -fn foo() callconv(.Inline) void { - @setAlignStack(16); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:5:5: error: @setAlignStack in inline function diff --git a/test/cases/compile_errors/stage1/obj/signed_integer_remainder_division.zig b/test/cases/compile_errors/stage1/obj/signed_integer_remainder_division.zig @@ -1,9 +0,0 @@ -export fn foo(a: i32, b: i32) i32 { - return a % b; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:14: error: remainder division with 'i32' and 'i32': signed integers and floats must use @rem or @mod diff --git a/test/cases/compile_errors/stage1/obj/sizeOf_bad_type.zig b/test/cases/compile_errors/stage1/obj/sizeOf_bad_type.zig @@ -1,9 +0,0 @@ -export fn entry() usize { - return @sizeOf(@TypeOf(null)); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:20: error: no size available for type '@Type(.Null)' diff --git a/test/cases/compile_errors/stage1/obj/slice_cannot_have_its_bytes_reinterpreted.zig b/test/cases/compile_errors/stage1/obj/slice_cannot_have_its_bytes_reinterpreted.zig @@ -1,11 +0,0 @@ -export fn foo() void { - const bytes = [1]u8{ 0xfa } ** 16; - var value = @ptrCast(*const []const u8, &bytes).*; - _ = value; -} - -// error -// backend=stage1 -// target=native -// -// :3:52: error: slice '[]const u8' cannot have its bytes reinterpreted diff --git a/test/cases/compile_errors/stage1/obj/slice_passed_as_array_init_type.zig b/test/cases/compile_errors/stage1/obj/slice_passed_as_array_init_type.zig @@ -1,10 +0,0 @@ -export fn entry() void { - const x = []u8{}; - _ = x; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:15: error: array literal requires address-of operator (&) to coerce to slice type '[]u8' diff --git a/test/cases/compile_errors/stage1/obj/slice_passed_as_array_init_type_with_elems.zig b/test/cases/compile_errors/stage1/obj/slice_passed_as_array_init_type_with_elems.zig @@ -1,10 +0,0 @@ -export fn entry() void { - const x = []u8{1, 2}; - _ = x; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:15: error: array literal requires address-of operator (&) to coerce to slice type '[]u8' diff --git a/test/cases/compile_errors/stage1/obj/sub_overflow_in_function_evaluation.zig b/test/cases/compile_errors/stage1/obj/sub_overflow_in_function_evaluation.zig @@ -1,12 +0,0 @@ -const y = sub(10, 20); -fn sub(a: u16, b: u16) u16 { - return a - b; -} - -export fn entry() usize { return @sizeOf(@TypeOf(y)); } - -// error -// backend=stage1 -// target=native -// -// tmp.zig:3:14: error: operation caused overflow diff --git a/test/cases/compile_errors/stage1/obj/switch_expression-duplicate_or_overlapping_integer_value.zig b/test/cases/compile_errors/stage1/obj/switch_expression-duplicate_or_overlapping_integer_value.zig @@ -1,16 +0,0 @@ -fn foo(x: u8) u8 { - return switch (x) { - 0 ... 100 => @as(u8, 0), - 101 ... 200 => 1, - 201, 203 ... 207 => 2, - 206 ... 255 => 3, - }; -} -export fn entry() usize { return @sizeOf(@TypeOf(foo)); } - -// error -// backend=stage1 -// target=native -// -// tmp.zig:6:9: error: duplicate switch value -// tmp.zig:5:14: note: previous value here diff --git a/test/cases/compile_errors/stage1/obj/switch_expression-switch_on_pointer_type_with_no_else.zig b/test/cases/compile_errors/stage1/obj/switch_expression-switch_on_pointer_type_with_no_else.zig @@ -1,13 +0,0 @@ -fn foo(x: *u8) void { - switch (x) { - &y => {}, - } -} -const y: u8 = 100; -export fn entry() usize { return @sizeOf(@TypeOf(foo)); } - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:5: error: else prong required when switching on type '*u8' diff --git a/test/cases/compile_errors/stage1/obj/switch_expression-unreachable_else_prong_bool.zig b/test/cases/compile_errors/stage1/obj/switch_expression-unreachable_else_prong_bool.zig @@ -1,14 +0,0 @@ -fn foo(x: bool) void { - switch (x) { - true => {}, - false => {}, - else => {}, - } -} -export fn entry() usize { return @sizeOf(@TypeOf(foo)); } - -// error -// backend=stage1 -// target=native -// -// tmp.zig:5:9: error: unreachable else prong, all cases already handled diff --git a/test/cases/compile_errors/stage1/obj/switch_on_union_with_no_attached_enum.zig b/test/cases/compile_errors/stage1/obj/switch_on_union_with_no_attached_enum.zig @@ -1,22 +0,0 @@ -const Payload = union { - A: i32, - B: f64, - C: bool, -}; -export fn entry() void { - const a = Payload { .A = 1234 }; - foo(a); -} -fn foo(a: *const Payload) void { - switch (a.*) { - Payload.A => {}, - else => unreachable, - } -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:11:14: error: switch on union which has no attached enum -// tmp.zig:1:17: note: consider 'union(enum)' here diff --git a/test/cases/compile_errors/stage1/obj/switch_with_overlapping_case_ranges.zig b/test/cases/compile_errors/stage1/obj/switch_with_overlapping_case_ranges.zig @@ -1,13 +0,0 @@ -export fn entry() void { - var q: u8 = 0; - switch (q) { - 1...2 => {}, - 0...255 => {}, - } -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:5:9: error: duplicate switch value diff --git a/test/cases/compile_errors/stage1/obj/tagName_used_on_union_with_no_associated_enum_tag.zig b/test/cases/compile_errors/stage1/obj/tagName_used_on_union_with_no_associated_enum_tag.zig @@ -1,16 +0,0 @@ -const FloatInt = extern union { - Float: f32, - Int: i32, -}; -export fn entry() void { - var fi = FloatInt{.Float = 123.45}; - var tagName = @tagName(fi); - _ = tagName; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:7:19: error: union has no associated enum -// tmp.zig:1:18: note: declared here diff --git a/test/cases/compile_errors/stage1/obj/type_variables_must_be_constant.zig b/test/cases/compile_errors/stage1/obj/type_variables_must_be_constant.zig @@ -1,10 +0,0 @@ -var foo = u8; -export fn entry() foo { - return 1; -} - -// error -// backend=stage1 -// target=native -// -// :1:1: error: variable of type 'type' must be constant diff --git a/test/cases/compile_errors/stage1/obj/unreachable_executed_at_comptime.zig b/test/cases/compile_errors/stage1/obj/unreachable_executed_at_comptime.zig @@ -1,16 +0,0 @@ -fn foo(comptime x: i32) i32 { - comptime { - if (x >= 0) return -x; - unreachable; - } -} -export fn entry() void { - _ = foo(-42); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:4:9: error: reached unreachable code -// tmp.zig:8:12: note: called from here diff --git a/test/cases/compile_errors/stage1/obj/wasmMemoryGrow_is_a_compile_error_in_non-Wasm_targets.zig b/test/cases/compile_errors/stage1/obj/wasmMemoryGrow_is_a_compile_error_in_non-Wasm_targets.zig @@ -1,10 +0,0 @@ -export fn foo() void { - _ = @wasmMemoryGrow(0, 1); - return; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:9: error: @wasmMemoryGrow is a wasm32 feature only diff --git a/test/cases/compile_errors/stage1/obj/wasmMemorySize_is_a_compile_error_in_non-Wasm_targets.zig b/test/cases/compile_errors/stage1/obj/wasmMemorySize_is_a_compile_error_in_non-Wasm_targets.zig @@ -1,10 +0,0 @@ -export fn foo() void { - _ = @wasmMemorySize(0); - return; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:9: error: @wasmMemorySize is a wasm32 feature only diff --git a/test/cases/compile_errors/stage1/obj/wrong_type_for_reify_type.zig b/test/cases/compile_errors/stage1/obj/wrong_type_for_reify_type.zig @@ -1,9 +0,0 @@ -export fn entry() void { - _ = @Type(0); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:15: error: expected type 'std.builtin.Type', found 'comptime_int' diff --git a/test/cases/compile_errors/stage1/obj/switch_with_invalid_expression_parameter.zig b/test/cases/compile_errors/stage1/switch_with_invalid_expression_parameter.zig diff --git a/test/cases/compile_errors/stage1/obj/use_of_comptime-known_undefined_function_value.zig b/test/cases/compile_errors/stage1/use_of_comptime-known_undefined_function_value.zig diff --git a/test/cases/compile_errors/sub_overflow_in_function_evaluation.zig b/test/cases/compile_errors/sub_overflow_in_function_evaluation.zig @@ -0,0 +1,13 @@ +const y = sub(10, 20); +fn sub(a: u16, b: u16) u16 { + return a - b; +} + +export fn entry() usize { return @sizeOf(@TypeOf(&y)); } + +// error +// backend=stage2 +// target=native +// +// :3:14: error: overflow of integer type 'u16' with value '-10' +// :1:14: note: called from here diff --git a/test/cases/compile_errors/switch_expression-duplicate_or_overlapping_integer_value.zig b/test/cases/compile_errors/switch_expression-duplicate_or_overlapping_integer_value.zig @@ -0,0 +1,16 @@ +fn foo(x: u8) u8 { + return switch (x) { + 0 ... 100 => @as(u8, 0), + 101 ... 200 => 1, + 201, 203 ... 207 => 2, + 206 ... 255 => 3, + }; +} +export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } + +// error +// backend=stage2 +// target=native +// +// :6:13: error: duplicate switch value +// :5:18: note: previous value here diff --git a/test/cases/compile_errors/switch_expression-switch_on_pointer_type_with_no_else.zig b/test/cases/compile_errors/switch_expression-switch_on_pointer_type_with_no_else.zig @@ -0,0 +1,13 @@ +fn foo(x: *u8) void { + switch (x) { + &y => {}, + } +} +var y: u8 = 100; +export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } + +// error +// backend=stage2 +// target=native +// +// :2:5: error: else prong required when switching on type '*u8' diff --git a/test/cases/compile_errors/switch_expression-unreachable_else_prong_bool.zig b/test/cases/compile_errors/switch_expression-unreachable_else_prong_bool.zig @@ -0,0 +1,14 @@ +fn foo(x: bool) void { + switch (x) { + true => {}, + false => {}, + else => {}, + } +} +export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } + +// error +// backend=stage2 +// target=native +// +// :5:14: error: unreachable else prong; all cases already handled diff --git a/test/cases/compile_errors/switch_on_union_with_no_attached_enum.zig b/test/cases/compile_errors/switch_on_union_with_no_attached_enum.zig @@ -0,0 +1,22 @@ +const Payload = union { + A: i32, + B: f64, + C: bool, +}; +export fn entry() void { + const a = Payload { .A = 1234 }; + foo(&a); +} +fn foo(a: *const Payload) void { + switch (a.*) { + Payload.A => {}, + else => unreachable, + } +} + +// error +// backend=stage2 +// target=native +// +// :11:14: error: switch on union with no attached enum +// :1:17: note: consider 'union(enum)' here diff --git a/test/cases/compile_errors/switch_with_overlapping_case_ranges.zig b/test/cases/compile_errors/switch_with_overlapping_case_ranges.zig @@ -0,0 +1,14 @@ +export fn entry() void { + var q: u8 = 0; + switch (q) { + 1...2 => {}, + 0...255 => {}, + } +} + +// error +// backend=stage2 +// target=native +// +// :5:10: error: duplicate switch value +// :4:10: note: previous value here diff --git a/test/cases/compile_errors/tagName_used_on_union_with_no_associated_enum_tag.zig b/test/cases/compile_errors/tagName_used_on_union_with_no_associated_enum_tag.zig @@ -0,0 +1,16 @@ +const FloatInt = extern union { + Float: f32, + Int: i32, +}; +export fn entry() void { + var fi = FloatInt{.Float = 123.45}; + var tagName = @tagName(fi); + _ = tagName; +} + +// error +// backend=stage2 +// target=native +// +// :7:19: error: union 'tmp.FloatInt' is untagged +// :1:25: note: union declared here diff --git a/test/cases/compile_errors/type_variables_must_be_constant.zig b/test/cases/compile_errors/type_variables_must_be_constant.zig @@ -0,0 +1,11 @@ +var foo = u8; +export fn entry() foo { + return 1; +} + +// error +// backend=stage2 +// target=native +// +// :1:1: error: variable of type 'type' must be const or comptime +// :1:1: note: types are not available at runtime diff --git a/test/cases/compile_errors/unreachable_executed_at_comptime.zig b/test/cases/compile_errors/unreachable_executed_at_comptime.zig @@ -0,0 +1,16 @@ +fn foo(comptime x: i32) i32 { + comptime { + if (x >= 0) return -x; + unreachable; + } +} +export fn entry() void { + _ = comptime foo(-42); +} + +// error +// backend=stage2 +// target=native +// +// :4:9: error: reached unreachable code +// :8:21: note: called from here diff --git a/test/cases/compile_errors/wasmMemoryGrow_is_a_compile_error_in_non-Wasm_targets.zig b/test/cases/compile_errors/wasmMemoryGrow_is_a_compile_error_in_non-Wasm_targets.zig @@ -0,0 +1,10 @@ +export fn foo() void { + _ = @wasmMemoryGrow(0, 1); + return; +} + +// error +// backend=stage2 +// target=x86_64-native +// +// :2:9: error: builtin @wasmMemoryGrow is available when targeting WebAssembly; targeted CPU architecture is x86_64 diff --git a/test/cases/compile_errors/wasmMemorySize_is_a_compile_error_in_non-Wasm_targets.zig b/test/cases/compile_errors/wasmMemorySize_is_a_compile_error_in_non-Wasm_targets.zig @@ -0,0 +1,10 @@ +export fn foo() void { + _ = @wasmMemorySize(0); + return; +} + +// error +// backend=stage2 +// target=x86_64-native +// +// :2:9: error: builtin @wasmMemorySize is available when targeting WebAssembly; targeted CPU architecture is x86_64 diff --git a/test/cases/compile_errors/wrong_type_for_reify_type.zig b/test/cases/compile_errors/wrong_type_for_reify_type.zig @@ -0,0 +1,9 @@ +export fn entry() void { + _ = @Type(0); +} + +// error +// backend=stage2 +// target=native +// +// :2:15: error: expected type 'builtin.Type', found 'comptime_int'