| ... | @@ -153,6 +153,7 @@ pub const Block = struct { | ... | @@ -153,6 +153,7 @@ pub const Block = struct { |
| 153 | pub const Inlining = struct { | 153 | pub const Inlining = struct { |
| 154 | comptime_result: Air.Inst.Ref, | 154 | comptime_result: Air.Inst.Ref, |
| 155 | merges: Merges, | 155 | merges: Merges, |
| | 156 | err: ?*Module.ErrorMsg = null, |
| 156 | }; | 157 | }; |
| 157 | | 158 | |
| 158 | pub const Merges = struct { | 159 | pub const Merges = struct { |
| ... | @@ -1429,10 +1430,10 @@ pub fn fail( | ... | @@ -1429,10 +1430,10 @@ pub fn fail( |
| 1429 | args: anytype, | 1430 | args: anytype, |
| 1430 | ) CompileError { | 1431 | ) CompileError { |
| 1431 | const err_msg = try sema.errMsg(block, src, format, args); | 1432 | const err_msg = try sema.errMsg(block, src, format, args); |
| 1432 | return sema.failWithOwnedErrorMsg(err_msg); | 1433 | return sema.failWithOwnedErrorMsg(block, err_msg); |
| 1433 | } | 1434 | } |
| 1434 | | 1435 | |
| 1435 | fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError { | 1436 | fn failWithOwnedErrorMsg(sema: *Sema, block: *Block, err_msg: *Module.ErrorMsg) CompileError { |
| 1436 | @setCold(true); | 1437 | @setCold(true); |
| 1437 | | 1438 | |
| 1438 | if (crash_report.is_enabled and sema.mod.comp.debug_compile_errors) { | 1439 | if (crash_report.is_enabled and sema.mod.comp.debug_compile_errors) { |
| ... | @@ -1445,6 +1446,7 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError { | ... | @@ -1445,6 +1446,7 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError { |
| 1445 | } | 1446 | } |
| 1446 | | 1447 | |
| 1447 | const mod = sema.mod; | 1448 | const mod = sema.mod; |
| | 1449 | if (block.inlining) |some| some.err = err_msg; |
| 1448 | | 1450 | |
| 1449 | { | 1451 | { |
| 1450 | errdefer err_msg.destroy(mod.gpa); | 1452 | errdefer err_msg.destroy(mod.gpa); |
| ... | @@ -1969,7 +1971,7 @@ fn zirEnumDecl( | ... | @@ -1969,7 +1971,7 @@ fn zirEnumDecl( |
| 1969 | try sema.errNote(block, other_tag_src, msg, "other tag here", .{}); | 1971 | try sema.errNote(block, other_tag_src, msg, "other tag here", .{}); |
| 1970 | break :msg msg; | 1972 | break :msg msg; |
| 1971 | }; | 1973 | }; |
| 1972 | return sema.failWithOwnedErrorMsg(msg); | 1974 | return sema.failWithOwnedErrorMsg(block, msg); |
| 1973 | } | 1975 | } |
| 1974 | | 1976 | |
| 1975 | if (has_tag_value) { | 1977 | if (has_tag_value) { |
| ... | @@ -2316,7 +2318,7 @@ fn zirIndexablePtrLen(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileE | ... | @@ -2316,7 +2318,7 @@ fn zirIndexablePtrLen(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileE |
| 2316 | ); | 2318 | ); |
| 2317 | break :msg msg; | 2319 | break :msg msg; |
| 2318 | }; | 2320 | }; |
| 2319 | return sema.failWithOwnedErrorMsg(msg); | 2321 | return sema.failWithOwnedErrorMsg(block, msg); |
| 2320 | } | 2322 | } |
| 2321 | | 2323 | |
| 2322 | return sema.fieldVal(block, src, object, "len", src); | 2324 | return sema.fieldVal(block, src, object, "len", src); |
| ... | @@ -2772,7 +2774,7 @@ fn validateUnionInit( | ... | @@ -2772,7 +2774,7 @@ fn validateUnionInit( |
| 2772 | try sema.addDeclaredHereNote(msg, union_ty); | 2774 | try sema.addDeclaredHereNote(msg, union_ty); |
| 2773 | break :msg msg; | 2775 | break :msg msg; |
| 2774 | }; | 2776 | }; |
| 2775 | return sema.failWithOwnedErrorMsg(msg); | 2777 | return sema.failWithOwnedErrorMsg(block, msg); |
| 2776 | } | 2778 | } |
| 2777 | | 2779 | |
| 2778 | if (is_comptime or block.is_comptime) { | 2780 | if (is_comptime or block.is_comptime) { |
| ... | @@ -2889,7 +2891,7 @@ fn validateStructInit( | ... | @@ -2889,7 +2891,7 @@ fn validateStructInit( |
| 2889 | try sema.errNote(block, other_field_src, msg, "other field here", .{}); | 2891 | try sema.errNote(block, other_field_src, msg, "other field here", .{}); |
| 2890 | break :msg msg; | 2892 | break :msg msg; |
| 2891 | }; | 2893 | }; |
| 2892 | return sema.failWithOwnedErrorMsg(msg); | 2894 | return sema.failWithOwnedErrorMsg(block, msg); |
| 2893 | } | 2895 | } |
| 2894 | found_fields[field_index] = field_ptr; | 2896 | found_fields[field_index] = field_ptr; |
| 2895 | } | 2897 | } |
| ... | @@ -2936,7 +2938,7 @@ fn validateStructInit( | ... | @@ -2936,7 +2938,7 @@ fn validateStructInit( |
| 2936 | "struct '{s}' declared here", | 2938 | "struct '{s}' declared here", |
| 2937 | .{fqn}, | 2939 | .{fqn}, |
| 2938 | ); | 2940 | ); |
| 2939 | return sema.failWithOwnedErrorMsg(msg); | 2941 | return sema.failWithOwnedErrorMsg(block, msg); |
| 2940 | } | 2942 | } |
| 2941 | | 2943 | |
| 2942 | return; | 2944 | return; |
| ... | @@ -3043,7 +3045,7 @@ fn validateStructInit( | ... | @@ -3043,7 +3045,7 @@ fn validateStructInit( |
| 3043 | "struct '{s}' declared here", | 3045 | "struct '{s}' declared here", |
| 3044 | .{fqn}, | 3046 | .{fqn}, |
| 3045 | ); | 3047 | ); |
| 3046 | return sema.failWithOwnedErrorMsg(msg); | 3048 | return sema.failWithOwnedErrorMsg(block, msg); |
| 3047 | } | 3049 | } |
| 3048 | | 3050 | |
| 3049 | if (struct_is_comptime) { | 3051 | if (struct_is_comptime) { |
| ... | @@ -3215,7 +3217,7 @@ fn failWithBadMemberAccess( | ... | @@ -3215,7 +3217,7 @@ fn failWithBadMemberAccess( |
| 3215 | try sema.addDeclaredHereNote(msg, agg_ty); | 3217 | try sema.addDeclaredHereNote(msg, agg_ty); |
| 3216 | break :msg msg; | 3218 | break :msg msg; |
| 3217 | }; | 3219 | }; |
| 3218 | return sema.failWithOwnedErrorMsg(msg); | 3220 | return sema.failWithOwnedErrorMsg(block, msg); |
| 3219 | } | 3221 | } |
| 3220 | | 3222 | |
| 3221 | fn failWithBadStructFieldAccess( | 3223 | fn failWithBadStructFieldAccess( |
| ... | @@ -3241,7 +3243,7 @@ fn failWithBadStructFieldAccess( | ... | @@ -3241,7 +3243,7 @@ fn failWithBadStructFieldAccess( |
| 3241 | try sema.mod.errNoteNonLazy(struct_obj.srcLoc(), msg, "struct declared here", .{}); | 3243 | try sema.mod.errNoteNonLazy(struct_obj.srcLoc(), msg, "struct declared here", .{}); |
| 3242 | break :msg msg; | 3244 | break :msg msg; |
| 3243 | }; | 3245 | }; |
| 3244 | return sema.failWithOwnedErrorMsg(msg); | 3246 | return sema.failWithOwnedErrorMsg(block, msg); |
| 3245 | } | 3247 | } |
| 3246 | | 3248 | |
| 3247 | fn failWithBadUnionFieldAccess( | 3249 | fn failWithBadUnionFieldAccess( |
| ... | @@ -3267,7 +3269,7 @@ fn failWithBadUnionFieldAccess( | ... | @@ -3267,7 +3269,7 @@ fn failWithBadUnionFieldAccess( |
| 3267 | try sema.mod.errNoteNonLazy(union_obj.srcLoc(), msg, "union declared here", .{}); | 3269 | try sema.mod.errNoteNonLazy(union_obj.srcLoc(), msg, "union declared here", .{}); |
| 3268 | break :msg msg; | 3270 | break :msg msg; |
| 3269 | }; | 3271 | }; |
| 3270 | return sema.failWithOwnedErrorMsg(msg); | 3272 | return sema.failWithOwnedErrorMsg(block, msg); |
| 3271 | } | 3273 | } |
| 3272 | | 3274 | |
| 3273 | fn addDeclaredHereNote(sema: *Sema, parent: *Module.ErrorMsg, decl_ty: Type) !void { | 3275 | fn addDeclaredHereNote(sema: *Sema, parent: *Module.ErrorMsg, decl_ty: Type) !void { |
| ... | @@ -3685,7 +3687,7 @@ fn zirCImport(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileEr | ... | @@ -3685,7 +3687,7 @@ fn zirCImport(sema: *Sema, parent_block: *Block, inst: Zir.Inst.Index) CompileEr |
| 3685 | @import("clang.zig").Stage2ErrorMsg.delete(c_import_res.errors.ptr, c_import_res.errors.len); | 3687 | @import("clang.zig").Stage2ErrorMsg.delete(c_import_res.errors.ptr, c_import_res.errors.len); |
| 3686 | break :msg msg; | 3688 | break :msg msg; |
| 3687 | }; | 3689 | }; |
| 3688 | return sema.failWithOwnedErrorMsg(msg); | 3690 | return sema.failWithOwnedErrorMsg(parent_block, msg); |
| 3689 | } | 3691 | } |
| 3690 | const c_import_pkg = Package.create( | 3692 | const c_import_pkg = Package.create( |
| 3691 | sema.gpa, | 3693 | sema.gpa, |
| ... | @@ -4043,7 +4045,7 @@ fn zirSetAlignStack(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr | ... | @@ -4043,7 +4045,7 @@ fn zirSetAlignStack(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr |
| 4043 | try sema.errNote(block, src, msg, "other instance here", .{}); | 4045 | try sema.errNote(block, src, msg, "other instance here", .{}); |
| 4044 | break :msg msg; | 4046 | break :msg msg; |
| 4045 | }; | 4047 | }; |
| 4046 | return sema.failWithOwnedErrorMsg(msg); | 4048 | return sema.failWithOwnedErrorMsg(block, msg); |
| 4047 | } | 4049 | } |
| 4048 | gop.value_ptr.* = .{ .alignment = alignment, .src = src }; | 4050 | gop.value_ptr.* = .{ .alignment = alignment, .src = src }; |
| 4049 | } | 4051 | } |
| ... | @@ -4228,7 +4230,7 @@ fn lookupInNamespace( | ... | @@ -4228,7 +4230,7 @@ fn lookupInNamespace( |
| 4228 | } | 4230 | } |
| 4229 | break :msg msg; | 4231 | break :msg msg; |
| 4230 | }; | 4232 | }; |
| 4231 | return sema.failWithOwnedErrorMsg(msg); | 4233 | return sema.failWithOwnedErrorMsg(block, msg); |
| 4232 | }, | 4234 | }, |
| 4233 | } | 4235 | } |
| 4234 | } else if (namespace.decls.get(ident_name)) |decl| { | 4236 | } else if (namespace.decls.get(ident_name)) |decl| { |
| ... | @@ -4642,6 +4644,12 @@ fn analyzeCall( | ... | @@ -4642,6 +4644,12 @@ fn analyzeCall( |
| 4642 | _ = sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) { | 4644 | _ = sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) { |
| 4643 | error.ComptimeReturn => break :result inlining.comptime_result, | 4645 | error.ComptimeReturn => break :result inlining.comptime_result, |
| 4644 | error.ComptimeBreak => unreachable, // Can't break through a fn call. | 4646 | error.ComptimeBreak => unreachable, // Can't break through a fn call. |
| | 4647 | error.AnalysisFail => { |
| | 4648 | const err_msg = inlining.err orelse return err; |
| | 4649 | try sema.errNote(block, call_src, err_msg, "called from here", .{}); |
| | 4650 | if (block.inlining) |some| some.err = err_msg; |
| | 4651 | return err; |
| | 4652 | }, |
| 4645 | else => |e| return e, | 4653 | else => |e| return e, |
| 4646 | }; | 4654 | }; |
| 4647 | break :result try sema.analyzeBlockBody(block, call_src, &child_block, merges); | 4655 | break :result try sema.analyzeBlockBody(block, call_src, &child_block, merges); |
| ... | @@ -5266,7 +5274,7 @@ fn zirMergeErrorSets(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr | ... | @@ -5266,7 +5274,7 @@ fn zirMergeErrorSets(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileEr |
| 5266 | try sema.errNote(block, src, msg, "'||' merges error sets; 'or' performs boolean OR", .{}); | 5274 | try sema.errNote(block, src, msg, "'||' merges error sets; 'or' performs boolean OR", .{}); |
| 5267 | break :msg msg; | 5275 | break :msg msg; |
| 5268 | }; | 5276 | }; |
| 5269 | return sema.failWithOwnedErrorMsg(msg); | 5277 | return sema.failWithOwnedErrorMsg(block, msg); |
| 5270 | } | 5278 | } |
| 5271 | const lhs_ty = try sema.analyzeAsType(block, lhs_src, lhs); | 5279 | const lhs_ty = try sema.analyzeAsType(block, lhs_src, lhs); |
| 5272 | const rhs_ty = try sema.analyzeAsType(block, rhs_src, rhs); | 5280 | const rhs_ty = try sema.analyzeAsType(block, rhs_src, rhs); |
| ... | @@ -5396,7 +5404,7 @@ fn zirIntToEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A | ... | @@ -5396,7 +5404,7 @@ fn zirIntToEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A |
| 5396 | ); | 5404 | ); |
| 5397 | break :msg msg; | 5405 | break :msg msg; |
| 5398 | }; | 5406 | }; |
| 5399 | return sema.failWithOwnedErrorMsg(msg); | 5407 | return sema.failWithOwnedErrorMsg(block, msg); |
| 5400 | } | 5408 | } |
| 5401 | return sema.addConstant(dest_ty, int_val); | 5409 | return sema.addConstant(dest_ty, int_val); |
| 5402 | } | 5410 | } |
| ... | @@ -6606,7 +6614,7 @@ fn zirSwitchCond( | ... | @@ -6606,7 +6614,7 @@ fn zirSwitchCond( |
| 6606 | try sema.addDeclaredHereNote(msg, union_ty); | 6614 | try sema.addDeclaredHereNote(msg, union_ty); |
| 6607 | break :msg msg; | 6615 | break :msg msg; |
| 6608 | }; | 6616 | }; |
| 6609 | return sema.failWithOwnedErrorMsg(msg); | 6617 | return sema.failWithOwnedErrorMsg(block, msg); |
| 6610 | }; | 6618 | }; |
| 6611 | return sema.unionToTag(block, enum_ty, operand, src); | 6619 | return sema.unionToTag(block, enum_ty, operand, src); |
| 6612 | }, | 6620 | }, |
| ... | @@ -6686,7 +6694,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError | ... | @@ -6686,7 +6694,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError |
| 6686 | ); | 6694 | ); |
| 6687 | break :msg msg; | 6695 | break :msg msg; |
| 6688 | }; | 6696 | }; |
| 6689 | return sema.failWithOwnedErrorMsg(msg); | 6697 | return sema.failWithOwnedErrorMsg(block, msg); |
| 6690 | } | 6698 | } |
| 6691 | | 6699 | |
| 6692 | // Validate for duplicate items, missing else prong, and invalid range. | 6700 | // Validate for duplicate items, missing else prong, and invalid range. |
| ... | @@ -6778,7 +6786,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError | ... | @@ -6778,7 +6786,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError |
| 6778 | ); | 6786 | ); |
| 6779 | break :msg msg; | 6787 | break :msg msg; |
| 6780 | }; | 6788 | }; |
| 6781 | return sema.failWithOwnedErrorMsg(msg); | 6789 | return sema.failWithOwnedErrorMsg(block, msg); |
| 6782 | } | 6790 | } |
| 6783 | }, | 6791 | }, |
| 6784 | .under => { | 6792 | .under => { |
| ... | @@ -6892,7 +6900,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError | ... | @@ -6892,7 +6900,7 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError |
| 6892 | "error set '{}' declared here", | 6900 | "error set '{}' declared here", |
| 6893 | .{operand_ty}, | 6901 | .{operand_ty}, |
| 6894 | ); | 6902 | ); |
| 6895 | return sema.failWithOwnedErrorMsg(msg); | 6903 | return sema.failWithOwnedErrorMsg(block, msg); |
| 6896 | } | 6904 | } |
| 6897 | | 6905 | |
| 6898 | if (special_prong == .@"else") { | 6906 | if (special_prong == .@"else") { |
| ... | @@ -7571,7 +7579,7 @@ fn validateSwitchItemEnum( | ... | @@ -7571,7 +7579,7 @@ fn validateSwitchItemEnum( |
| 7571 | ); | 7579 | ); |
| 7572 | break :msg msg; | 7580 | break :msg msg; |
| 7573 | }; | 7581 | }; |
| 7574 | return sema.failWithOwnedErrorMsg(msg); | 7582 | return sema.failWithOwnedErrorMsg(block, msg); |
| 7575 | }; | 7583 | }; |
| 7576 | const maybe_prev_src = seen_fields[field_index]; | 7584 | const maybe_prev_src = seen_fields[field_index]; |
| 7577 | seen_fields[field_index] = switch_prong_src; | 7585 | seen_fields[field_index] = switch_prong_src; |
| ... | @@ -7624,7 +7632,7 @@ fn validateSwitchDupe( | ... | @@ -7624,7 +7632,7 @@ fn validateSwitchDupe( |
| 7624 | ); | 7632 | ); |
| 7625 | break :msg msg; | 7633 | break :msg msg; |
| 7626 | }; | 7634 | }; |
| 7627 | return sema.failWithOwnedErrorMsg(msg); | 7635 | return sema.failWithOwnedErrorMsg(block, msg); |
| 7628 | } | 7636 | } |
| 7629 | | 7637 | |
| 7630 | fn validateSwitchItemBool( | 7638 | fn validateSwitchItemBool( |
| ... | @@ -7693,7 +7701,7 @@ fn validateSwitchNoRange( | ... | @@ -7693,7 +7701,7 @@ fn validateSwitchNoRange( |
| 7693 | ); | 7701 | ); |
| 7694 | break :msg msg; | 7702 | break :msg msg; |
| 7695 | }; | 7703 | }; |
| 7696 | return sema.failWithOwnedErrorMsg(msg); | 7704 | return sema.failWithOwnedErrorMsg(block, msg); |
| 7697 | } | 7705 | } |
| 7698 | | 7706 | |
| 7699 | fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { | 7707 | fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref { |
| ... | @@ -9486,6 +9494,8 @@ fn analyzePtrArithmetic( | ... | @@ -9486,6 +9494,8 @@ fn analyzePtrArithmetic( |
| 9486 | } | 9494 | } |
| 9487 | | 9495 | |
| 9488 | const offset_int = try sema.usizeCast(block, offset_src, offset_val.toUnsignedInt()); | 9496 | const offset_int = try sema.usizeCast(block, offset_src, offset_val.toUnsignedInt()); |
| | 9497 | // TODO I tried to put this check earlier but it the LLVM backend generate invalid instructinons |
| | 9498 | if (offset_int == 0) return ptr; |
| 9489 | if (ptr_val.getUnsignedInt()) |addr| { | 9499 | if (ptr_val.getUnsignedInt()) |addr| { |
| 9490 | const target = sema.mod.getTarget(); | 9500 | const target = sema.mod.getTarget(); |
| 9491 | const ptr_child_ty = ptr_ty.childType(); | 9501 | const ptr_child_ty = ptr_ty.childType(); |
| ... | @@ -11569,7 +11579,7 @@ fn zirStructInit( | ... | @@ -11569,7 +11579,7 @@ fn zirStructInit( |
| 11569 | try sema.errNote(block, other_field_src, msg, "other field here", .{}); | 11579 | try sema.errNote(block, other_field_src, msg, "other field here", .{}); |
| 11570 | break :msg msg; | 11580 | break :msg msg; |
| 11571 | }; | 11581 | }; |
| 11572 | return sema.failWithOwnedErrorMsg(msg); | 11582 | return sema.failWithOwnedErrorMsg(block, msg); |
| 11573 | } | 11583 | } |
| 11574 | found_fields[field_index] = item.data.field_type; | 11584 | found_fields[field_index] = item.data.field_type; |
| 11575 | field_inits[field_index] = sema.resolveInst(item.data.init); | 11585 | field_inits[field_index] = sema.resolveInst(item.data.init); |
| ... | @@ -11647,7 +11657,7 @@ fn finishStructInit( | ... | @@ -11647,7 +11657,7 @@ fn finishStructInit( |
| 11647 | "struct '{s}' declared here", | 11657 | "struct '{s}' declared here", |
| 11648 | .{fqn}, | 11658 | .{fqn}, |
| 11649 | ); | 11659 | ); |
| 11650 | return sema.failWithOwnedErrorMsg(msg); | 11660 | return sema.failWithOwnedErrorMsg(block, msg); |
| 11651 | } | 11661 | } |
| 11652 | | 11662 | |
| 11653 | const is_comptime = for (field_inits) |field_init| { | 11663 | const is_comptime = for (field_inits) |field_init| { |
| ... | @@ -12130,7 +12140,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air | ... | @@ -12130,7 +12140,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air |
| 12130 | try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{}); | 12140 | try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{}); |
| 12131 | break :msg msg; | 12141 | break :msg msg; |
| 12132 | }; | 12142 | }; |
| 12133 | return sema.failWithOwnedErrorMsg(msg); | 12143 | return sema.failWithOwnedErrorMsg(block, msg); |
| 12134 | }, | 12144 | }, |
| 12135 | else => return sema.fail(block, operand_src, "expected enum or union; found {}", .{ | 12145 | else => return sema.fail(block, operand_src, "expected enum or union; found {}", .{ |
| 12136 | operand_ty, | 12146 | operand_ty, |
| ... | @@ -12148,7 +12158,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air | ... | @@ -12148,7 +12158,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air |
| 12148 | try sema.mod.errNoteNonLazy(enum_decl.srcLoc(), msg, "declared here", .{}); | 12158 | try sema.mod.errNoteNonLazy(enum_decl.srcLoc(), msg, "declared here", .{}); |
| 12149 | break :msg msg; | 12159 | break :msg msg; |
| 12150 | }; | 12160 | }; |
| 12151 | return sema.failWithOwnedErrorMsg(msg); | 12161 | return sema.failWithOwnedErrorMsg(block, msg); |
| 12152 | }; | 12162 | }; |
| 12153 | const field_name = enum_ty.enumFieldName(field_index); | 12163 | const field_name = enum_ty.enumFieldName(field_index); |
| 12154 | return sema.addStrLit(block, field_name); | 12164 | return sema.addStrLit(block, field_name); |
| ... | @@ -12624,7 +12634,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai | ... | @@ -12624,7 +12634,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai |
| 12624 | }); | 12634 | }); |
| 12625 | break :msg msg; | 12635 | break :msg msg; |
| 12626 | }; | 12636 | }; |
| 12627 | return sema.failWithOwnedErrorMsg(msg); | 12637 | return sema.failWithOwnedErrorMsg(block, msg); |
| 12628 | } | 12638 | } |
| 12629 | } | 12639 | } |
| 12630 | | 12640 | |
| ... | @@ -12884,7 +12894,7 @@ fn checkPtrOperand( | ... | @@ -12884,7 +12894,7 @@ fn checkPtrOperand( |
| 12884 | | 12894 | |
| 12885 | break :msg msg; | 12895 | break :msg msg; |
| 12886 | }; | 12896 | }; |
| 12887 | return sema.failWithOwnedErrorMsg(msg); | 12897 | return sema.failWithOwnedErrorMsg(block, msg); |
| 12888 | }, | 12898 | }, |
| 12889 | .Optional => if (ty.isPtrLikeOptional()) return, | 12899 | .Optional => if (ty.isPtrLikeOptional()) return, |
| 12890 | else => {}, | 12900 | else => {}, |
| ... | @@ -12914,7 +12924,7 @@ fn checkPtrType( | ... | @@ -12914,7 +12924,7 @@ fn checkPtrType( |
| 12914 | | 12924 | |
| 12915 | break :msg msg; | 12925 | break :msg msg; |
| 12916 | }; | 12926 | }; |
| 12917 | return sema.failWithOwnedErrorMsg(msg); | 12927 | return sema.failWithOwnedErrorMsg(block, msg); |
| 12918 | }, | 12928 | }, |
| 12919 | .Optional => if (ty.isPtrLikeOptional()) return, | 12929 | .Optional => if (ty.isPtrLikeOptional()) return, |
| 12920 | else => {}, | 12930 | else => {}, |
| ... | @@ -13037,7 +13047,7 @@ fn checkComptimeVarStore( | ... | @@ -13037,7 +13047,7 @@ fn checkComptimeVarStore( |
| 13037 | try sema.errNote(block, cond_src, msg, "runtime condition here", .{}); | 13047 | try sema.errNote(block, cond_src, msg, "runtime condition here", .{}); |
| 13038 | break :msg msg; | 13048 | break :msg msg; |
| 13039 | }; | 13049 | }; |
| 13040 | return sema.failWithOwnedErrorMsg(msg); | 13050 | return sema.failWithOwnedErrorMsg(block, msg); |
| 13041 | } | 13051 | } |
| 13042 | if (block.runtime_loop) |loop_src| { | 13052 | if (block.runtime_loop) |loop_src| { |
| 13043 | const msg = msg: { | 13053 | const msg = msg: { |
| ... | @@ -13046,7 +13056,7 @@ fn checkComptimeVarStore( | ... | @@ -13046,7 +13056,7 @@ fn checkComptimeVarStore( |
| 13046 | try sema.errNote(block, loop_src, msg, "non-inline loop here", .{}); | 13056 | try sema.errNote(block, loop_src, msg, "non-inline loop here", .{}); |
| 13047 | break :msg msg; | 13057 | break :msg msg; |
| 13048 | }; | 13058 | }; |
| 13049 | return sema.failWithOwnedErrorMsg(msg); | 13059 | return sema.failWithOwnedErrorMsg(block, msg); |
| 13050 | } | 13060 | } |
| 13051 | unreachable; | 13061 | unreachable; |
| 13052 | } | 13062 | } |
| ... | @@ -13114,7 +13124,7 @@ fn checkSimdBinOp( | ... | @@ -13114,7 +13124,7 @@ fn checkSimdBinOp( |
| 13114 | try sema.errNote(block, rhs_src, msg, "length {d} here", .{rhs_len}); | 13124 | try sema.errNote(block, rhs_src, msg, "length {d} here", .{rhs_len}); |
| 13115 | break :msg msg; | 13125 | break :msg msg; |
| 13116 | }; | 13126 | }; |
| 13117 | return sema.failWithOwnedErrorMsg(msg); | 13127 | return sema.failWithOwnedErrorMsg(block, msg); |
| 13118 | } | 13128 | } |
| 13119 | vec_len = try sema.usizeCast(block, lhs_src, lhs_len); | 13129 | vec_len = try sema.usizeCast(block, lhs_src, lhs_len); |
| 13120 | } else if (lhs_zig_ty_tag == .Vector or rhs_zig_ty_tag == .Vector) { | 13130 | } else if (lhs_zig_ty_tag == .Vector or rhs_zig_ty_tag == .Vector) { |
| ... | @@ -13132,7 +13142,7 @@ fn checkSimdBinOp( | ... | @@ -13132,7 +13142,7 @@ fn checkSimdBinOp( |
| 13132 | } | 13142 | } |
| 13133 | break :msg msg; | 13143 | break :msg msg; |
| 13134 | }; | 13144 | }; |
| 13135 | return sema.failWithOwnedErrorMsg(msg); | 13145 | return sema.failWithOwnedErrorMsg(block, msg); |
| 13136 | } | 13146 | } |
| 13137 | const result_ty = try sema.resolvePeerTypes(block, src, &.{ uncasted_lhs, uncasted_rhs }, .{ | 13147 | const result_ty = try sema.resolvePeerTypes(block, src, &.{ uncasted_lhs, uncasted_rhs }, .{ |
| 13138 | .override = &[_]LazySrcLoc{ lhs_src, rhs_src }, | 13148 | .override = &[_]LazySrcLoc{ lhs_src, rhs_src }, |
| ... | @@ -14263,7 +14273,7 @@ fn validateVarType( | ... | @@ -14263,7 +14273,7 @@ fn validateVarType( |
| 14263 | | 14273 | |
| 14264 | break :msg msg; | 14274 | break :msg msg; |
| 14265 | }; | 14275 | }; |
| 14266 | return sema.failWithOwnedErrorMsg(msg); | 14276 | return sema.failWithOwnedErrorMsg(block, msg); |
| 14267 | } | 14277 | } |
| 14268 | | 14278 | |
| 14269 | fn explainWhyTypeIsComptime( | 14279 | fn explainWhyTypeIsComptime( |
| ... | @@ -15037,7 +15047,7 @@ fn namespaceLookup( | ... | @@ -15037,7 +15047,7 @@ fn namespaceLookup( |
| 15037 | try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{}); | 15047 | try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{}); |
| 15038 | break :msg msg; | 15048 | break :msg msg; |
| 15039 | }; | 15049 | }; |
| 15040 | return sema.failWithOwnedErrorMsg(msg); | 15050 | return sema.failWithOwnedErrorMsg(block, msg); |
| 15041 | } | 15051 | } |
| 15042 | return decl; | 15052 | return decl; |
| 15043 | } | 15053 | } |
| ... | @@ -15961,7 +15971,7 @@ fn coerce( | ... | @@ -15961,7 +15971,7 @@ fn coerce( |
| 15961 | ); | 15971 | ); |
| 15962 | break :msg msg; | 15972 | break :msg msg; |
| 15963 | }; | 15973 | }; |
| 15964 | return sema.failWithOwnedErrorMsg(msg); | 15974 | return sema.failWithOwnedErrorMsg(block, msg); |
| 15965 | }; | 15975 | }; |
| 15966 | return sema.addConstant( | 15976 | return sema.addConstant( |
| 15967 | dest_ty, | 15977 | dest_ty, |
| ... | @@ -16844,7 +16854,7 @@ fn beginComptimePtrLoad( | ... | @@ -16844,7 +16854,7 @@ fn beginComptimePtrLoad( |
| 16844 | }; | 16854 | }; |
| 16845 | return ComptimePtrLoadKit{ | 16855 | return ComptimePtrLoadKit{ |
| 16846 | .root_val = parent.root_val, | 16856 | .root_val = parent.root_val, |
| 16847 | .root_ty = parent.ty, | 16857 | .root_ty = parent.root_ty, |
| 16848 | .val = try parent.val.elemValue(sema.arena, elem_ptr.index), | 16858 | .val = try parent.val.elemValue(sema.arena, elem_ptr.index), |
| 16849 | .ty = elem_ty, | 16859 | .ty = elem_ty, |
| 16850 | .byte_offset = byte_offset, | 16860 | .byte_offset = byte_offset, |
| ... | @@ -16860,7 +16870,7 @@ fn beginComptimePtrLoad( | ... | @@ -16860,7 +16870,7 @@ fn beginComptimePtrLoad( |
| 16860 | } | 16870 | } |
| 16861 | return ComptimePtrLoadKit{ | 16871 | return ComptimePtrLoadKit{ |
| 16862 | .root_val = parent.root_val, | 16872 | .root_val = parent.root_val, |
| 16863 | .root_ty = parent.ty, | 16873 | .root_ty = parent.root_ty, |
| 16864 | .val = parent.val, | 16874 | .val = parent.val, |
| 16865 | .ty = parent.ty, | 16875 | .ty = parent.ty, |
| 16866 | .byte_offset = parent.byte_offset, | 16876 | .byte_offset = parent.byte_offset, |
| ... | @@ -16888,7 +16898,7 @@ fn beginComptimePtrLoad( | ... | @@ -16888,7 +16898,7 @@ fn beginComptimePtrLoad( |
| 16888 | }; | 16898 | }; |
| 16889 | return ComptimePtrLoadKit{ | 16899 | return ComptimePtrLoadKit{ |
| 16890 | .root_val = parent.root_val, | 16900 | .root_val = parent.root_val, |
| 16891 | .root_ty = parent.ty, | 16901 | .root_ty = parent.root_ty, |
| 16892 | .val = try parent.val.fieldValue(sema.arena, field_index), | 16902 | .val = try parent.val.fieldValue(sema.arena, field_index), |
| 16893 | .ty = parent.ty.structFieldType(field_index), | 16903 | .ty = parent.ty.structFieldType(field_index), |
| 16894 | .byte_offset = byte_offset, | 16904 | .byte_offset = byte_offset, |
| ... | @@ -17034,7 +17044,7 @@ fn coerceEnumToUnion( | ... | @@ -17034,7 +17044,7 @@ fn coerceEnumToUnion( |
| 17034 | try sema.addDeclaredHereNote(msg, union_ty); | 17044 | try sema.addDeclaredHereNote(msg, union_ty); |
| 17035 | break :msg msg; | 17045 | break :msg msg; |
| 17036 | }; | 17046 | }; |
| 17037 | return sema.failWithOwnedErrorMsg(msg); | 17047 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17038 | }; | 17048 | }; |
| 17039 | | 17049 | |
| 17040 | const enum_tag = try sema.coerce(block, tag_ty, inst, inst_src); | 17050 | const enum_tag = try sema.coerce(block, tag_ty, inst, inst_src); |
| ... | @@ -17049,7 +17059,7 @@ fn coerceEnumToUnion( | ... | @@ -17049,7 +17059,7 @@ fn coerceEnumToUnion( |
| 17049 | try sema.addDeclaredHereNote(msg, union_ty); | 17059 | try sema.addDeclaredHereNote(msg, union_ty); |
| 17050 | break :msg msg; | 17060 | break :msg msg; |
| 17051 | }; | 17061 | }; |
| 17052 | return sema.failWithOwnedErrorMsg(msg); | 17062 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17053 | }; | 17063 | }; |
| 17054 | const field = union_obj.fields.values()[field_index]; | 17064 | const field = union_obj.fields.values()[field_index]; |
| 17055 | const field_ty = try sema.resolveTypeFields(block, inst_src, field.ty); | 17065 | const field_ty = try sema.resolveTypeFields(block, inst_src, field.ty); |
| ... | @@ -17064,7 +17074,7 @@ fn coerceEnumToUnion( | ... | @@ -17064,7 +17074,7 @@ fn coerceEnumToUnion( |
| 17064 | try sema.addDeclaredHereNote(msg, union_ty); | 17074 | try sema.addDeclaredHereNote(msg, union_ty); |
| 17065 | break :msg msg; | 17075 | break :msg msg; |
| 17066 | }; | 17076 | }; |
| 17067 | return sema.failWithOwnedErrorMsg(msg); | 17077 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17068 | }; | 17078 | }; |
| 17069 | | 17079 | |
| 17070 | return sema.addConstant(union_ty, try Value.Tag.@"union".create(sema.arena, .{ | 17080 | return sema.addConstant(union_ty, try Value.Tag.@"union".create(sema.arena, .{ |
| ... | @@ -17084,7 +17094,7 @@ fn coerceEnumToUnion( | ... | @@ -17084,7 +17094,7 @@ fn coerceEnumToUnion( |
| 17084 | try sema.addDeclaredHereNote(msg, tag_ty); | 17094 | try sema.addDeclaredHereNote(msg, tag_ty); |
| 17085 | break :msg msg; | 17095 | break :msg msg; |
| 17086 | }; | 17096 | }; |
| 17087 | return sema.failWithOwnedErrorMsg(msg); | 17097 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17088 | } | 17098 | } |
| 17089 | | 17099 | |
| 17090 | // If the union has all fields 0 bits, the union value is just the enum value. | 17100 | // If the union has all fields 0 bits, the union value is just the enum value. |
| ... | @@ -17102,7 +17112,7 @@ fn coerceEnumToUnion( | ... | @@ -17102,7 +17112,7 @@ fn coerceEnumToUnion( |
| 17102 | try sema.addDeclaredHereNote(msg, union_ty); | 17112 | try sema.addDeclaredHereNote(msg, union_ty); |
| 17103 | break :msg msg; | 17113 | break :msg msg; |
| 17104 | }; | 17114 | }; |
| 17105 | return sema.failWithOwnedErrorMsg(msg); | 17115 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17106 | } | 17116 | } |
| 17107 | | 17117 | |
| 17108 | fn coerceAnonStructToUnion( | 17118 | fn coerceAnonStructToUnion( |
| ... | @@ -17131,7 +17141,7 @@ fn coerceAnonStructToUnion( | ... | @@ -17131,7 +17141,7 @@ fn coerceAnonStructToUnion( |
| 17131 | try sema.addDeclaredHereNote(msg, union_ty); | 17141 | try sema.addDeclaredHereNote(msg, union_ty); |
| 17132 | break :msg msg; | 17142 | break :msg msg; |
| 17133 | }; | 17143 | }; |
| 17134 | return sema.failWithOwnedErrorMsg(msg); | 17144 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17135 | } | 17145 | } |
| 17136 | | 17146 | |
| 17137 | const field_name = anon_struct.names[0]; | 17147 | const field_name = anon_struct.names[0]; |
| ... | @@ -17176,7 +17186,7 @@ fn coerceArrayLike( | ... | @@ -17176,7 +17186,7 @@ fn coerceArrayLike( |
| 17176 | try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len}); | 17186 | try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len}); |
| 17177 | break :msg msg; | 17187 | break :msg msg; |
| 17178 | }; | 17188 | }; |
| 17179 | return sema.failWithOwnedErrorMsg(msg); | 17189 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17180 | } | 17190 | } |
| 17181 | | 17191 | |
| 17182 | const target = sema.mod.getTarget(); | 17192 | const target = sema.mod.getTarget(); |
| ... | @@ -17248,7 +17258,7 @@ fn coerceTupleToArray( | ... | @@ -17248,7 +17258,7 @@ fn coerceTupleToArray( |
| 17248 | try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len}); | 17258 | try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len}); |
| 17249 | break :msg msg; | 17259 | break :msg msg; |
| 17250 | }; | 17260 | }; |
| 17251 | return sema.failWithOwnedErrorMsg(msg); | 17261 | return sema.failWithOwnedErrorMsg(block, msg); |
| 17252 | } | 17262 | } |
| 17253 | | 17263 | |
| 17254 | const element_vals = try sema.arena.alloc(Value, dest_len); | 17264 | const element_vals = try sema.arena.alloc(Value, dest_len); |
| ... | @@ -18446,7 +18456,7 @@ fn resolvePeerTypes( | ... | @@ -18446,7 +18456,7 @@ fn resolvePeerTypes( |
| 18446 | | 18456 | |
| 18447 | break :msg msg; | 18457 | break :msg msg; |
| 18448 | }; | 18458 | }; |
| 18449 | return sema.failWithOwnedErrorMsg(msg); | 18459 | return sema.failWithOwnedErrorMsg(block, msg); |
| 18450 | } | 18460 | } |
| 18451 | | 18461 | |
| 18452 | const chosen_ty = sema.typeOf(chosen); | 18462 | const chosen_ty = sema.typeOf(chosen); |