//@ needs-unwind - this test verifies the amount of drop calls when unwinding is used
//@ compile-flags: -C no-prepopulate-passes

#![crate_type = "lib"]

struct SomeUniqueName;

impl Drop for SomeUniqueName {
    #[inline(never)]
    fn drop(&mut self) {}
}

#[inline(never)]
pub fn possibly_unwinding() {}

// CHECK-LABEL: @droppy
#[no_mangle]
pub fn droppy() {
    // Check that there are exactly 6 drop calls. The cleanups for the unwinding should be reused,
    // so that's one new drop call per call to possibly_unwinding(), and finally 3 drop calls for
    // the regular function exit. We used to have problems with quadratic growths of drop calls in
    // such functions.
    // FIXME(eddyb) the `void @` forces a match on the instruction, instead of the
    // comment, that's `; call core::ptr::drop_glue::<drop::SomeUniqueName>`
    // for the `v0` mangling, should switch to matching on that once `legacy` is gone.
    // CHECK-COUNT-6: {{(call|invoke) void @.*}}drop_glue{{.*}}SomeUniqueName
    // CHECK-NOT: {{(call|invoke) void @.*}}drop_glue{{.*}}SomeUniqueName
    // The next line checks for the } that ends the function definition
    // CHECK-LABEL: {{^[}]}}
    let _s = SomeUniqueName;
    possibly_unwinding();
    let _s = SomeUniqueName;
    possibly_unwinding();
    let _s = SomeUniqueName;
    possibly_unwinding();
}
