Don't promote function calls to nonpromotable things
This commit is contained in:
parent
ea43c3c688
commit
e67050e8b6
2 changed files with 20 additions and 5 deletions
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
18
src/test/ui/consts/invalid_promotion.rs
Normal file
18
src/test/ui/consts/invalid_promotion.rs
Normal 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()`
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue