blob: 01839526c50c14f0eaa116432d9adcaffcc60ede [file] [edit]
//@ compile-flags: -O -Zinline-mir=no -Cno-prepopulate-passes -Zmerge-functions=disabled
#![crate_type = "lib"]
// This test checks that we add inlinehint for #[inline], noinline for #[inline(never)], and
// alwaysinline for #[inline(always)] to call sites.
#[unsafe(no_mangle)]
fn calls_something_noinline() {
// CHECK-LABEL @calls_something_noinline
// CHECK: call void @{{.*}}noinline_fn() #[[NOINLINE:[0-9]+]]
noinline_fn();
}
#[inline(never)]
fn noinline_fn() {}
#[unsafe(no_mangle)]
fn calls_something_inline() {
// CHECK-LABEL @calls_something_inlinehint
// CHECK: call void @{{.*}}inlinehint_fn() #[[INLINEHINT:[0-9]+]]
inlinehint_fn();
}
#[inline]
fn inlinehint_fn() {}
#[unsafe(no_mangle)]
fn calls_something_alwaysinline() {
// CHECK-LABEL @calls_something_alwaysinline
// CHECK: call void @{{.*}}alwaysinline_fn() #[[ALWAYSINLINE:[0-9]+]]
alwaysinline_fn();
}
#[inline(always)]
fn alwaysinline_fn() {}
//CHECK: attributes #[[NOINLINE]] = {{{.*}} noinline {{.*}}}
//CHECK: attributes #[[INLINEHINT]] = {{{.*}} inlinehint {{.*}}}
//CHECK: attributes #[[ALWAYSINLINE]] = {{{.*}} alwaysinline {{.*}}}