// run-pass
// needs-unwind

#![allow(unused_must_use)]
#![allow(dead_code)]
#![allow(unused_variables)]
// Test cleanup of rvalue temporary that occurs while `box` construction
// is in progress. This scenario revealed a rather terrible bug.  The
// ingredients are:
//
// 1. Partial cleanup of `box` is in scope,
// 2. cleanup of return value from `get_bar()` is in scope,
// 3. do_it() panics.
//
// This led to a bug because `the top-most frame that was to be
// cleaned (which happens to be the partial cleanup of `box`) required
// multiple basic blocks, which led to us dropping part of the cleanup
// from the top-most frame.
//
// It's unclear how likely such a bug is to recur, but it seems like a
// scenario worth testing.

// ignore-emscripten no threads support

use std::thread;

enum Conzabble {
    Bickwick(Foo)
}

struct Foo { field: Box<usize> }

fn do_it(x: &[usize]) -> Foo {
    panic!()
}

fn get_bar(x: usize) -> Vec<usize> { vec![x * 2] }

pub fn fails() {
    let x = 2;
    let mut y: Vec<Box<_>> = Vec::new();
    y.push(Box::new(Conzabble::Bickwick(do_it(&get_bar(x)))));
}

pub fn main() {
    thread::spawn(fails).join();
}
