diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs index bba9260f2b82..1d45850a080d 100644 --- a/src/librustc_mir/transform/promote_consts.rs +++ b/src/librustc_mir/transform/promote_consts.rs @@ -332,7 +332,13 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> { let operand = Operand::Copy(promoted_place(ty, span)); mem::replace(&mut args[index], operand) } - // already promoted out + // We expected a `TerminatorKind::Call` for which we'd like to promote an + // argument. Since `qualify_consts` saw a `TerminatorKind::Call` here, but + // we are seeing a `Goto`, that means that the `promote_temps` method + // already promoted this call away entirely. This case occurs when calling + // a function requiring a constant argument and as that constant value + // providing a value whose computation contains another call to a function + // requiring a constant argument. TerminatorKind::Goto { .. } => return, _ => bug!() }