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