authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-03-03 15:45:18+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-03-03 22:14:43+02:00
log7691013d10525ded6e02228cf89db94719bac1c5
treedb2bd4cdb7e8164fde96018bb7270788829a00df
parent3605dd307ffff74726cc0ce5099599f1a6f9ddb2

stage2: add 'called from here' error note


2 files changed, 58 insertions(+), 47 deletions(-)

src/Sema.zig+54-46
...@@ -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 };
157158
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}
14341435
1435fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError {1436fn failWithOwnedErrorMsg(sema: *Sema, block: *Block, err_msg: *Module.ErrorMsg) CompileError {
1436 @setCold(true);1437 @setCold(true);
14371438
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 }
14461447
1447 const mod = sema.mod;1448 const mod = sema.mod;
1449 if (block.inlining) |some| some.err = err_msg;
14481450
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 }
19741976
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 }
23212323
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 }
27772779
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 }
29412943
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 }
30483050
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}
32203222
3221fn failWithBadStructFieldAccess(3223fn 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}
32463248
3247fn failWithBadUnionFieldAccess(3249fn 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}
32723274
3273fn addDeclaredHereNote(sema: *Sema, parent: *Module.ErrorMsg, decl_ty: Type) !void {3275fn 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 }
66916699
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 }
68976905
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}
76297637
7630fn validateSwitchItemBool(7638fn 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}
76987706
7699fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {7707fn zirHasField(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
...@@ -11569,7 +11577,7 @@ fn zirStructInit(...@@ -11569,7 +11577,7 @@ fn zirStructInit(
11569 try sema.errNote(block, other_field_src, msg, "other field here", .{});11577 try sema.errNote(block, other_field_src, msg, "other field here", .{});
11570 break :msg msg;11578 break :msg msg;
11571 };11579 };
11572 return sema.failWithOwnedErrorMsg(msg);11580 return sema.failWithOwnedErrorMsg(block, msg);
11573 }11581 }
11574 found_fields[field_index] = item.data.field_type;11582 found_fields[field_index] = item.data.field_type;
11575 field_inits[field_index] = sema.resolveInst(item.data.init);11583 field_inits[field_index] = sema.resolveInst(item.data.init);
...@@ -11647,7 +11655,7 @@ fn finishStructInit(...@@ -11647,7 +11655,7 @@ fn finishStructInit(
11647 "struct '{s}' declared here",11655 "struct '{s}' declared here",
11648 .{fqn},11656 .{fqn},
11649 );11657 );
11650 return sema.failWithOwnedErrorMsg(msg);11658 return sema.failWithOwnedErrorMsg(block, msg);
11651 }11659 }
1165211660
11653 const is_comptime = for (field_inits) |field_init| {11661 const is_comptime = for (field_inits) |field_init| {
...@@ -12130,7 +12138,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air...@@ -12130,7 +12138,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
12130 try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{});12138 try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{});
12131 break :msg msg;12139 break :msg msg;
12132 };12140 };
12133 return sema.failWithOwnedErrorMsg(msg);12141 return sema.failWithOwnedErrorMsg(block, msg);
12134 },12142 },
12135 else => return sema.fail(block, operand_src, "expected enum or union; found {}", .{12143 else => return sema.fail(block, operand_src, "expected enum or union; found {}", .{
12136 operand_ty,12144 operand_ty,
...@@ -12148,7 +12156,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air...@@ -12148,7 +12156,7 @@ fn zirTagName(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
12148 try sema.mod.errNoteNonLazy(enum_decl.srcLoc(), msg, "declared here", .{});12156 try sema.mod.errNoteNonLazy(enum_decl.srcLoc(), msg, "declared here", .{});
12149 break :msg msg;12157 break :msg msg;
12150 };12158 };
12151 return sema.failWithOwnedErrorMsg(msg);12159 return sema.failWithOwnedErrorMsg(block, msg);
12152 };12160 };
12153 const field_name = enum_ty.enumFieldName(field_index);12161 const field_name = enum_ty.enumFieldName(field_index);
12154 return sema.addStrLit(block, field_name);12162 return sema.addStrLit(block, field_name);
...@@ -12624,7 +12632,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai...@@ -12624,7 +12632,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
12624 });12632 });
12625 break :msg msg;12633 break :msg msg;
12626 };12634 };
12627 return sema.failWithOwnedErrorMsg(msg);12635 return sema.failWithOwnedErrorMsg(block, msg);
12628 }12636 }
12629 }12637 }
1263012638
...@@ -12884,7 +12892,7 @@ fn checkPtrOperand(...@@ -12884,7 +12892,7 @@ fn checkPtrOperand(
1288412892
12885 break :msg msg;12893 break :msg msg;
12886 };12894 };
12887 return sema.failWithOwnedErrorMsg(msg);12895 return sema.failWithOwnedErrorMsg(block, msg);
12888 },12896 },
12889 .Optional => if (ty.isPtrLikeOptional()) return,12897 .Optional => if (ty.isPtrLikeOptional()) return,
12890 else => {},12898 else => {},
...@@ -12914,7 +12922,7 @@ fn checkPtrType(...@@ -12914,7 +12922,7 @@ fn checkPtrType(
1291412922
12915 break :msg msg;12923 break :msg msg;
12916 };12924 };
12917 return sema.failWithOwnedErrorMsg(msg);12925 return sema.failWithOwnedErrorMsg(block, msg);
12918 },12926 },
12919 .Optional => if (ty.isPtrLikeOptional()) return,12927 .Optional => if (ty.isPtrLikeOptional()) return,
12920 else => {},12928 else => {},
...@@ -13037,7 +13045,7 @@ fn checkComptimeVarStore(...@@ -13037,7 +13045,7 @@ fn checkComptimeVarStore(
13037 try sema.errNote(block, cond_src, msg, "runtime condition here", .{});13045 try sema.errNote(block, cond_src, msg, "runtime condition here", .{});
13038 break :msg msg;13046 break :msg msg;
13039 };13047 };
13040 return sema.failWithOwnedErrorMsg(msg);13048 return sema.failWithOwnedErrorMsg(block, msg);
13041 }13049 }
13042 if (block.runtime_loop) |loop_src| {13050 if (block.runtime_loop) |loop_src| {
13043 const msg = msg: {13051 const msg = msg: {
...@@ -13046,7 +13054,7 @@ fn checkComptimeVarStore(...@@ -13046,7 +13054,7 @@ fn checkComptimeVarStore(
13046 try sema.errNote(block, loop_src, msg, "non-inline loop here", .{});13054 try sema.errNote(block, loop_src, msg, "non-inline loop here", .{});
13047 break :msg msg;13055 break :msg msg;
13048 };13056 };
13049 return sema.failWithOwnedErrorMsg(msg);13057 return sema.failWithOwnedErrorMsg(block, msg);
13050 }13058 }
13051 unreachable;13059 unreachable;
13052 }13060 }
...@@ -13114,7 +13122,7 @@ fn checkSimdBinOp(...@@ -13114,7 +13122,7 @@ fn checkSimdBinOp(
13114 try sema.errNote(block, rhs_src, msg, "length {d} here", .{rhs_len});13122 try sema.errNote(block, rhs_src, msg, "length {d} here", .{rhs_len});
13115 break :msg msg;13123 break :msg msg;
13116 };13124 };
13117 return sema.failWithOwnedErrorMsg(msg);13125 return sema.failWithOwnedErrorMsg(block, msg);
13118 }13126 }
13119 vec_len = try sema.usizeCast(block, lhs_src, lhs_len);13127 vec_len = try sema.usizeCast(block, lhs_src, lhs_len);
13120 } else if (lhs_zig_ty_tag == .Vector or rhs_zig_ty_tag == .Vector) {13128 } else if (lhs_zig_ty_tag == .Vector or rhs_zig_ty_tag == .Vector) {
...@@ -13132,7 +13140,7 @@ fn checkSimdBinOp(...@@ -13132,7 +13140,7 @@ fn checkSimdBinOp(
13132 }13140 }
13133 break :msg msg;13141 break :msg msg;
13134 };13142 };
13135 return sema.failWithOwnedErrorMsg(msg);13143 return sema.failWithOwnedErrorMsg(block, msg);
13136 }13144 }
13137 const result_ty = try sema.resolvePeerTypes(block, src, &.{ uncasted_lhs, uncasted_rhs }, .{13145 const result_ty = try sema.resolvePeerTypes(block, src, &.{ uncasted_lhs, uncasted_rhs }, .{
13138 .override = &[_]LazySrcLoc{ lhs_src, rhs_src },13146 .override = &[_]LazySrcLoc{ lhs_src, rhs_src },
...@@ -14263,7 +14271,7 @@ fn validateVarType(...@@ -14263,7 +14271,7 @@ fn validateVarType(
1426314271
14264 break :msg msg;14272 break :msg msg;
14265 };14273 };
14266 return sema.failWithOwnedErrorMsg(msg);14274 return sema.failWithOwnedErrorMsg(block, msg);
14267}14275}
1426814276
14269fn explainWhyTypeIsComptime(14277fn explainWhyTypeIsComptime(
...@@ -15037,7 +15045,7 @@ fn namespaceLookup(...@@ -15037,7 +15045,7 @@ fn namespaceLookup(
15037 try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{});15045 try sema.mod.errNoteNonLazy(decl.srcLoc(), msg, "declared here", .{});
15038 break :msg msg;15046 break :msg msg;
15039 };15047 };
15040 return sema.failWithOwnedErrorMsg(msg);15048 return sema.failWithOwnedErrorMsg(block, msg);
15041 }15049 }
15042 return decl;15050 return decl;
15043 }15051 }
...@@ -15961,7 +15969,7 @@ fn coerce(...@@ -15961,7 +15969,7 @@ fn coerce(
15961 );15969 );
15962 break :msg msg;15970 break :msg msg;
15963 };15971 };
15964 return sema.failWithOwnedErrorMsg(msg);15972 return sema.failWithOwnedErrorMsg(block, msg);
15965 };15973 };
15966 return sema.addConstant(15974 return sema.addConstant(
15967 dest_ty,15975 dest_ty,
...@@ -17034,7 +17042,7 @@ fn coerceEnumToUnion(...@@ -17034,7 +17042,7 @@ fn coerceEnumToUnion(
17034 try sema.addDeclaredHereNote(msg, union_ty);17042 try sema.addDeclaredHereNote(msg, union_ty);
17035 break :msg msg;17043 break :msg msg;
17036 };17044 };
17037 return sema.failWithOwnedErrorMsg(msg);17045 return sema.failWithOwnedErrorMsg(block, msg);
17038 };17046 };
1703917047
17040 const enum_tag = try sema.coerce(block, tag_ty, inst, inst_src);17048 const enum_tag = try sema.coerce(block, tag_ty, inst, inst_src);
...@@ -17049,7 +17057,7 @@ fn coerceEnumToUnion(...@@ -17049,7 +17057,7 @@ fn coerceEnumToUnion(
17049 try sema.addDeclaredHereNote(msg, union_ty);17057 try sema.addDeclaredHereNote(msg, union_ty);
17050 break :msg msg;17058 break :msg msg;
17051 };17059 };
17052 return sema.failWithOwnedErrorMsg(msg);17060 return sema.failWithOwnedErrorMsg(block, msg);
17053 };17061 };
17054 const field = union_obj.fields.values()[field_index];17062 const field = union_obj.fields.values()[field_index];
17055 const field_ty = try sema.resolveTypeFields(block, inst_src, field.ty);17063 const field_ty = try sema.resolveTypeFields(block, inst_src, field.ty);
...@@ -17064,7 +17072,7 @@ fn coerceEnumToUnion(...@@ -17064,7 +17072,7 @@ fn coerceEnumToUnion(
17064 try sema.addDeclaredHereNote(msg, union_ty);17072 try sema.addDeclaredHereNote(msg, union_ty);
17065 break :msg msg;17073 break :msg msg;
17066 };17074 };
17067 return sema.failWithOwnedErrorMsg(msg);17075 return sema.failWithOwnedErrorMsg(block, msg);
17068 };17076 };
1706917077
17070 return sema.addConstant(union_ty, try Value.Tag.@"union".create(sema.arena, .{17078 return sema.addConstant(union_ty, try Value.Tag.@"union".create(sema.arena, .{
...@@ -17084,7 +17092,7 @@ fn coerceEnumToUnion(...@@ -17084,7 +17092,7 @@ fn coerceEnumToUnion(
17084 try sema.addDeclaredHereNote(msg, tag_ty);17092 try sema.addDeclaredHereNote(msg, tag_ty);
17085 break :msg msg;17093 break :msg msg;
17086 };17094 };
17087 return sema.failWithOwnedErrorMsg(msg);17095 return sema.failWithOwnedErrorMsg(block, msg);
17088 }17096 }
1708917097
17090 // If the union has all fields 0 bits, the union value is just the enum value.17098 // If the union has all fields 0 bits, the union value is just the enum value.
...@@ -17102,7 +17110,7 @@ fn coerceEnumToUnion(...@@ -17102,7 +17110,7 @@ fn coerceEnumToUnion(
17102 try sema.addDeclaredHereNote(msg, union_ty);17110 try sema.addDeclaredHereNote(msg, union_ty);
17103 break :msg msg;17111 break :msg msg;
17104 };17112 };
17105 return sema.failWithOwnedErrorMsg(msg);17113 return sema.failWithOwnedErrorMsg(block, msg);
17106}17114}
1710717115
17108fn coerceAnonStructToUnion(17116fn coerceAnonStructToUnion(
...@@ -17131,7 +17139,7 @@ fn coerceAnonStructToUnion(...@@ -17131,7 +17139,7 @@ fn coerceAnonStructToUnion(
17131 try sema.addDeclaredHereNote(msg, union_ty);17139 try sema.addDeclaredHereNote(msg, union_ty);
17132 break :msg msg;17140 break :msg msg;
17133 };17141 };
17134 return sema.failWithOwnedErrorMsg(msg);17142 return sema.failWithOwnedErrorMsg(block, msg);
17135 }17143 }
1713617144
17137 const field_name = anon_struct.names[0];17145 const field_name = anon_struct.names[0];
...@@ -17176,7 +17184,7 @@ fn coerceArrayLike(...@@ -17176,7 +17184,7 @@ fn coerceArrayLike(
17176 try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len});17184 try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len});
17177 break :msg msg;17185 break :msg msg;
17178 };17186 };
17179 return sema.failWithOwnedErrorMsg(msg);17187 return sema.failWithOwnedErrorMsg(block, msg);
17180 }17188 }
1718117189
17182 const target = sema.mod.getTarget();17190 const target = sema.mod.getTarget();
...@@ -17248,7 +17256,7 @@ fn coerceTupleToArray(...@@ -17248,7 +17256,7 @@ fn coerceTupleToArray(
17248 try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len});17256 try sema.errNote(block, inst_src, msg, "source has length {d}", .{inst_len});
17249 break :msg msg;17257 break :msg msg;
17250 };17258 };
17251 return sema.failWithOwnedErrorMsg(msg);17259 return sema.failWithOwnedErrorMsg(block, msg);
17252 }17260 }
1725317261
17254 const element_vals = try sema.arena.alloc(Value, dest_len);17262 const element_vals = try sema.arena.alloc(Value, dest_len);
...@@ -18446,7 +18454,7 @@ fn resolvePeerTypes(...@@ -18446,7 +18454,7 @@ fn resolvePeerTypes(
1844618454
18447 break :msg msg;18455 break :msg msg;
18448 };18456 };
18449 return sema.failWithOwnedErrorMsg(msg);18457 return sema.failWithOwnedErrorMsg(block, msg);
18450 }18458 }
1845118459
18452 const chosen_ty = sema.typeOf(chosen);18460 const chosen_ty = sema.typeOf(chosen);
test/stage2/x86_64.zig+4-1
...@@ -1183,7 +1183,10 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -1183,7 +1183,10 @@ pub fn addCases(ctx: *TestContext) !void {
1183 \\ if (a == 10) @compileError("bad");1183 \\ if (a == 10) @compileError("bad");
1184 \\ return a + b + c;1184 \\ return a + b + c;
1185 \\}1185 \\}
1186 , &[_][]const u8{":8:18: error: bad"});1186 , &[_][]const u8{
1187 ":8:18: error: bad",
1188 ":3:18: note: called from here",
1189 });
11871190
1188 case.addCompareOutput(1191 case.addCompareOutput(
1189 \\pub fn main() void {1192 \\pub fn main() void {