| ... | @@ -3254,17 +3254,16 @@ fn zirEnsureResultUsed(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compile | ... | @@ -3254,17 +3254,16 @@ fn zirEnsureResultUsed(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compile |
| 3254 | const operand = try sema.resolveInst(inst_data.operand); | 3254 | const operand = try sema.resolveInst(inst_data.operand); |
| 3255 | const src = inst_data.src(); | 3255 | const src = inst_data.src(); |
| 3256 | | 3256 | |
| 3257 | return sema.ensureResultUsed(block, operand, src); | 3257 | return sema.ensureResultUsed(block, sema.typeOf(operand), src); |
| 3258 | } | 3258 | } |
| 3259 | | 3259 | |
| 3260 | fn ensureResultUsed( | 3260 | fn ensureResultUsed( |
| 3261 | sema: *Sema, | 3261 | sema: *Sema, |
| 3262 | block: *Block, | 3262 | block: *Block, |
| 3263 | operand: Air.Inst.Ref, | 3263 | ty: Type, |
| 3264 | src: LazySrcLoc, | 3264 | src: LazySrcLoc, |
| 3265 | ) CompileError!void { | 3265 | ) CompileError!void { |
| 3266 | const operand_ty = sema.typeOf(operand); | 3266 | switch (ty.zigTypeTag()) { |
| 3267 | switch (operand_ty.zigTypeTag()) { | | |
| 3268 | .Void, .NoReturn => return, | 3267 | .Void, .NoReturn => return, |
| 3269 | .ErrorSet, .ErrorUnion => { | 3268 | .ErrorSet, .ErrorUnion => { |
| 3270 | const msg = msg: { | 3269 | const msg = msg: { |
| ... | @@ -3277,7 +3276,7 @@ fn ensureResultUsed( | ... | @@ -3277,7 +3276,7 @@ fn ensureResultUsed( |
| 3277 | }, | 3276 | }, |
| 3278 | else => { | 3277 | else => { |
| 3279 | const msg = msg: { | 3278 | const msg = msg: { |
| 3280 | const msg = try sema.errMsg(block, src, "value of type '{}' ignored", .{operand_ty.fmt(sema.mod)}); | 3279 | const msg = try sema.errMsg(block, src, "value of type '{}' ignored", .{ty.fmt(sema.mod)}); |
| 3281 | errdefer msg.destroy(sema.gpa); | 3280 | errdefer msg.destroy(sema.gpa); |
| 3282 | try sema.errNote(block, src, msg, "all non-void values must be used", .{}); | 3281 | try sema.errNote(block, src, msg, "all non-void values must be used", .{}); |
| 3283 | try sema.errNote(block, src, msg, "this error can be suppressed by assigning the value to '_'", .{}); | 3282 | try sema.errNote(block, src, msg, "this error can be suppressed by assigning the value to '_'", .{}); |
| ... | @@ -6641,6 +6640,10 @@ fn analyzeCall( | ... | @@ -6641,6 +6640,10 @@ fn analyzeCall( |
| 6641 | }; | 6640 | }; |
| 6642 | } | 6641 | } |
| 6643 | | 6642 | |
| | 6643 | if (is_comptime_call and ensure_result_used) { |
| | 6644 | try sema.ensureResultUsed(block, fn_ret_ty, call_src); |
| | 6645 | } |
| | 6646 | |
| 6644 | const result = result: { | 6647 | const result = result: { |
| 6645 | sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) { | 6648 | sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) { |
| 6646 | error.ComptimeReturn => break :result inlining.comptime_result, | 6649 | error.ComptimeReturn => break :result inlining.comptime_result, |
| ... | @@ -6763,7 +6766,7 @@ fn analyzeCall( | ... | @@ -6763,7 +6766,7 @@ fn analyzeCall( |
| 6763 | }; | 6766 | }; |
| 6764 | | 6767 | |
| 6765 | if (ensure_result_used) { | 6768 | if (ensure_result_used) { |
| 6766 | try sema.ensureResultUsed(block, result, call_src); | 6769 | try sema.ensureResultUsed(block, sema.typeOf(result), call_src); |
| 6767 | } | 6770 | } |
| 6768 | if (call_tag == .call_always_tail) { | 6771 | if (call_tag == .call_always_tail) { |
| 6769 | return sema.handleTailCall(block, call_src, func_ty, result); | 6772 | return sema.handleTailCall(block, call_src, func_ty, result); |
| ... | @@ -7406,7 +7409,7 @@ fn instantiateGenericCall( | ... | @@ -7406,7 +7409,7 @@ fn instantiateGenericCall( |
| 7406 | sema.appendRefsAssumeCapacity(runtime_args); | 7409 | sema.appendRefsAssumeCapacity(runtime_args); |
| 7407 | | 7410 | |
| 7408 | if (ensure_result_used) { | 7411 | if (ensure_result_used) { |
| 7409 | try sema.ensureResultUsed(block, result, call_src); | 7412 | try sema.ensureResultUsed(block, sema.typeOf(result), call_src); |
| 7410 | } | 7413 | } |
| 7411 | if (call_tag == .call_always_tail) { | 7414 | if (call_tag == .call_always_tail) { |
| 7412 | return sema.handleTailCall(block, call_src, func_ty, result); | 7415 | return sema.handleTailCall(block, call_src, func_ty, result); |