Don't promote function calls to nonpromotable things

This commit is contained in:
Oliver Scherer 2019-02-27 17:41:25 +01:00
parent ea43c3c688
commit e67050e8b6
2 changed files with 20 additions and 5 deletions

View file

@ -507,7 +507,7 @@ impl Qualif for IsNotPromotable {
fn in_call(
cx: &ConstCx<'_, 'tcx>,
callee: &Operand<'tcx>,
_args: &[Operand<'tcx>],
args: &[Operand<'tcx>],
_return_ty: Ty<'tcx>,
) -> bool {
if cx.mode == Mode::Fn {
@ -520,10 +520,7 @@ impl Qualif for IsNotPromotable {
}
}
// FIXME(eddyb) do we need "not promotable" in anything
// other than `Mode::Fn` by any chance?
false
Self::in_operand(cx, callee) || args.iter().any(|arg| Self::in_operand(cx, arg))
}
}

View file

@ -0,0 +1,18 @@
// compile-pass
// note this was only reproducible with lib crates
// compile-flags: --crate-type=lib
pub struct Hz;
impl Hz {
pub const fn num(&self) -> u32 {
42
}
pub const fn normalized(&self) -> Hz {
Hz
}
pub const fn as_u32(&self) -> u32 {
self.normalized().num() // this used to promote the `self.normalized()`
}
}