// A variant of the first "spike" test that serves to test the
// `rustc_partition_reused` and `rustc_partition_codegened` tests.
// Here we change and say that the `y` module will be codegened (when
// in fact it will not), and then indicate that the test itself
//@ should-fail (because an error will be reported, and hence the
// revision rpass2 will not compile, despite being named rpass).

//@ revisions:rpass1 rpass2
//@ should-fail
//@ compile-flags: -Z query-dep-graph

#![feature(rustc_attrs)]

#![rustc_partition_reused(module="spike_neg2", cfg="rpass2")]
#![rustc_partition_codegened(module="spike_neg2-x", cfg="rpass2")]
#![rustc_partition_codegened(module="spike_neg2-y", cfg="rpass2")] // this is wrong!

mod x {
    pub struct X {
        x: u32, y: u32,
    }

    #[cfg(rpass1)]
    fn make() -> X {
        X { x: 22, y: 0 }
    }

    #[cfg(rpass2)]
    fn make() -> X {
        X { x: 11, y: 11 }
    }

    pub fn new() -> X {
        make()
    }

    pub fn sum(x: &X) -> u32 {
        x.x + x.y
    }
}

mod y {
    use x;

    pub fn assert_sum() -> bool {
        let x = x::new();
        x::sum(&x) == 22
    }
}

pub fn main() {
    y::assert_sum();
}
