| ... | ... | @@ -3153,17 +3153,16 @@ fn zirEnsureResultUsed(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Compile |
| 3153 | 3153 | const operand = try sema.resolveInst(inst_data.operand); |
| 3154 | 3154 | const src = inst_data.src(); |
| 3155 | 3155 | |
| 3156 | | return sema.ensureResultUsed(block, operand, src); |
| 3156 | return sema.ensureResultUsed(block, sema.typeOf(operand), src); |
| 3157 | 3157 | } |
| 3158 | 3158 | |
| 3159 | 3159 | fn ensureResultUsed( |
| 3160 | 3160 | sema: *Sema, |
| 3161 | 3161 | block: *Block, |
| 3162 | | operand: Air.Inst.Ref, |
| 3162 | ty: Type, |
| 3163 | 3163 | src: LazySrcLoc, |
| 3164 | 3164 | ) CompileError!void { |
| 3165 | | const operand_ty = sema.typeOf(operand); |
| 3166 | | switch (operand_ty.zigTypeTag()) { |
| 3165 | switch (ty.zigTypeTag()) { |
| 3167 | 3166 | .Void, .NoReturn => return, |
| 3168 | 3167 | .ErrorSet, .ErrorUnion => { |
| 3169 | 3168 | const msg = msg: { |
| ... | ... | @@ -3176,7 +3175,7 @@ fn ensureResultUsed( |
| 3176 | 3175 | }, |
| 3177 | 3176 | else => { |
| 3178 | 3177 | const msg = msg: { |
| 3179 | | const msg = try sema.errMsg(block, src, "value of type '{}' ignored", .{operand_ty.fmt(sema.mod)}); |
| 3178 | const msg = try sema.errMsg(block, src, "value of type '{}' ignored", .{ty.fmt(sema.mod)}); |
| 3180 | 3179 | errdefer msg.destroy(sema.gpa); |
| 3181 | 3180 | try sema.errNote(block, src, msg, "all non-void values must be used", .{}); |
| 3182 | 3181 | try sema.errNote(block, src, msg, "this error can be suppressed by assigning the value to '_'", .{}); |
| ... | ... | @@ -6487,6 +6486,10 @@ fn analyzeCall( |
| 6487 | 6486 | }; |
| 6488 | 6487 | } |
| 6489 | 6488 | |
| 6489 | if (is_comptime_call and ensure_result_used) { |
| 6490 | try sema.ensureResultUsed(block, fn_ret_ty, call_src); |
| 6491 | } |
| 6492 | |
| 6490 | 6493 | const result = result: { |
| 6491 | 6494 | sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) { |
| 6492 | 6495 | error.ComptimeReturn => break :result inlining.comptime_result, |
| ... | ... | @@ -6609,7 +6612,7 @@ fn analyzeCall( |
| 6609 | 6612 | }; |
| 6610 | 6613 | |
| 6611 | 6614 | if (ensure_result_used) { |
| 6612 | | try sema.ensureResultUsed(block, result, call_src); |
| 6615 | try sema.ensureResultUsed(block, sema.typeOf(result), call_src); |
| 6613 | 6616 | } |
| 6614 | 6617 | if (call_tag == .call_always_tail) { |
| 6615 | 6618 | return sema.handleTailCall(block, call_src, func_ty, result); |
| ... | ... | @@ -7251,7 +7254,7 @@ fn instantiateGenericCall( |
| 7251 | 7254 | sema.appendRefsAssumeCapacity(runtime_args); |
| 7252 | 7255 | |
| 7253 | 7256 | if (ensure_result_used) { |
| 7254 | | try sema.ensureResultUsed(block, result, call_src); |
| 7257 | try sema.ensureResultUsed(block, sema.typeOf(result), call_src); |
| 7255 | 7258 | } |
| 7256 | 7259 | if (call_tag == .call_always_tail) { |
| 7257 | 7260 | return sema.handleTailCall(block, call_src, func_ty, result); |