mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-01 12:37:37 +00:00

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.
26 lines
564 B
Rust
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,
|
|
];
|
|
}
|