rust/tests/ui/force-inlining/cast.rs
David Wood f86169a58f
mir_transform: implement forced inlining
Adds `#[rustc_force_inline]` which is similar to always inlining but
reports an error if the inlining was not possible, and which always
attempts to inline annotated items, regardless of optimisation levels.
It can only be applied to free functions to guarantee that the MIR
inliner will be able to resolve calls.
2025-01-10 18:37:54 +00:00

26 lines
564 B
Rust

//@ check-fail
//@ compile-flags: --crate-type=lib
#![allow(internal_features)]
#![feature(rustc_attrs)]
#[rustc_force_inline]
pub fn callee(x: isize) -> usize { unimplemented!() }
fn a() {
let _: fn(isize) -> usize = callee;
//~^ ERROR cannot coerce functions which must be inlined to function pointers
}
fn b() {
let _ = callee as fn(isize) -> usize;
//~^ ERROR non-primitive cast
}
fn c() {
let _: [fn(isize) -> usize; 2] = [
callee,
//~^ ERROR cannot coerce functions which must be inlined to function pointers
callee,
];
}