//@ check-pass
#![allow(warnings)]

// Some type that is not copyable.
struct Bar;

mod constants {
    use Bar;

    fn no_impl_copy_empty_value_no_elements() {
        const FOO: Option<Bar> = None;
        const ARR: [Option<Bar>; 0] = [FOO; 0];
    }

    fn no_impl_copy_empty_value_single_element() {
        const FOO: Option<Bar> = None;
        const ARR: [Option<Bar>; 1] = [FOO; 1];
    }

    fn no_impl_copy_empty_value_multiple_elements() {
        const FOO: Option<Bar> = None;
        const ARR: [Option<Bar>; 2] = [FOO; 2];
    }

    fn no_impl_copy_value_no_elements() {
        const FOO: Option<Bar> = Some(Bar);
        const ARR: [Option<Bar>; 0] = [FOO; 0];
    }

    fn no_impl_copy_value_single_element() {
        const FOO: Option<Bar> = Some(Bar);
        const ARR: [Option<Bar>; 1] = [FOO; 1];
    }

    fn no_impl_copy_value_multiple_elements() {
        const FOO: Option<Bar> = Some(Bar);
        const ARR: [Option<Bar>; 2] = [FOO; 2];
    }

    fn impl_copy_empty_value_no_elements() {
        const FOO: Option<u32> = None;
        const ARR: [Option<u32>; 0] = [FOO; 0];
    }

    fn impl_copy_empty_value_one_element() {
        const FOO: Option<u32> = None;
        const ARR: [Option<u32>; 1] = [FOO; 1];
    }

    fn impl_copy_empty_value_multiple_elements() {
        const FOO: Option<u32> = None;
        const ARR: [Option<u32>; 2] = [FOO; 2];
    }

    fn impl_copy_value_no_elements() {
        const FOO: Option<u32> = Some(4);
        const ARR: [Option<u32>; 0] = [FOO; 0];
    }

    fn impl_copy_value_one_element() {
        const FOO: Option<u32> = Some(4);
        const ARR: [Option<u32>; 1] = [FOO; 1];
    }

    fn impl_copy_value_multiple_elements() {
        const FOO: Option<u32> = Some(4);
        const ARR: [Option<u32>; 2] = [FOO; 2];
    }
}

mod non_constants {
    use Bar;

    fn no_impl_copy_empty_value_no_elements() {
        let x = None;
        let arr: [Option<Bar>; 0] = [x; 0];
    }

    fn no_impl_copy_empty_value_single_element() {
        let x = None;
        let arr: [Option<Bar>; 1] = [x; 1];
    }

    fn no_impl_copy_value_no_elements() {
        let x = Some(Bar);
        let arr: [Option<Bar>; 0] = [x; 0];
    }

    fn no_impl_copy_value_single_element() {
        let x = Some(Bar);
        let arr: [Option<Bar>; 1] = [x; 1];
    }

    fn impl_copy_empty_value_no_elements() {
        let x: Option<u32> = None;
        let arr: [Option<u32>; 0] = [x; 0];
    }

    fn impl_copy_empty_value_one_element() {
        let x: Option<u32> = None;
        let arr: [Option<u32>; 1] = [x; 1];
    }

    fn impl_copy_empty_value_multiple_elements() {
        let x: Option<u32> = None;
        let arr: [Option<u32>; 2] = [x; 2];
    }

    fn impl_copy_value_no_elements() {
        let x: Option<u32> = Some(4);
        let arr: [Option<u32>; 0] = [x; 0];
    }

    fn impl_copy_value_one_element() {
        let x: Option<u32> = Some(4);
        let arr: [Option<u32>; 1] = [x; 1];
    }

    fn impl_copy_value_multiple_elements() {
        let x: Option<u32> = Some(4);
        let arr: [Option<u32>; 2] = [x; 2];
    }
}

fn main() {}
