// Checks that closures, constructors, and shims except
// for a drop glue receive inline hint by default.
//
//@ compile-flags: -Cno-prepopulate-passes -Csymbol-mangling-version=v0 -Zinline-mir=no
#![crate_type = "lib"]

pub fn f() {
    let a = A;
    let b = (0i32, 1i32, 2i32, 3 as *const i32);
    let c = || {};

    a(String::new(), String::new());
    b.clone();
    c();
}

struct A(String, String);

// CHECK:      ; core::ptr::drop_glue::<inline_hint::A>
// CHECK-NEXT: ; Function Attrs:
// CHECK-NOT:  inlinehint
// CHECK-SAME: {{$}}

// CHECK:      ; <(i32, i32, i32, *const i{{16|32|64}}) as core::clone::Clone>::clone
// CHECK-NEXT: ; Function Attrs: inlinehint

// CHECK:      ; inline_hint::f::{closure#0}
// CHECK-NEXT: ; Function Attrs: inlinehint

// CHECK:      ; inline_hint::A
// CHECK-NEXT: ; Function Attrs: inlinehint
