| // Test cases where a changing struct appears in the signature of fns |
| // and methods. |
| |
| //@ incremental |
| //@ compile-flags: -Z query-dep-graph |
| |
| #![feature(rustc_attrs)] |
| #![allow(dead_code)] |
| #![allow(unused_variables)] |
| |
| fn main() { } |
| |
| #[rustc_if_this_changed] |
| struct WillChange { |
| x: u32, |
| y: u32 |
| } |
| |
| struct WontChange { |
| x: u32, |
| y: u32 |
| } |
| |
| // these are valid dependencies |
| mod signatures { |
| use WillChange; |
| |
| #[rustc_then_this_would_need(type_of)] //~ ERROR no path |
| #[rustc_then_this_would_need(associated_item)] //~ ERROR no path |
| #[rustc_then_this_would_need(trait_def)] //~ ERROR no path |
| trait Bar { |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR OK |
| fn do_something(x: WillChange); |
| } |
| |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR OK |
| #[rustc_then_this_would_need(typeck)] //~ ERROR OK |
| fn some_fn(x: WillChange) { } |
| |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR OK |
| #[rustc_then_this_would_need(typeck)] //~ ERROR OK |
| fn new_foo(x: u32, y: u32) -> WillChange { |
| WillChange { x: x, y: y } |
| } |
| |
| #[rustc_then_this_would_need(type_of)] //~ ERROR OK |
| impl WillChange { |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR OK |
| #[rustc_then_this_would_need(typeck)] //~ ERROR OK |
| fn new(x: u32, y: u32) -> WillChange { loop { } } |
| } |
| |
| #[rustc_then_this_would_need(type_of)] //~ ERROR OK |
| impl WillChange { |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR OK |
| #[rustc_then_this_would_need(typeck)] //~ ERROR OK |
| fn method(&self, x: u32) { } |
| } |
| |
| struct WillChanges { |
| #[rustc_then_this_would_need(type_of)] //~ ERROR OK |
| x: WillChange, |
| #[rustc_then_this_would_need(type_of)] //~ ERROR OK |
| y: WillChange |
| } |
| |
| // The fields change, not the type itself. |
| #[rustc_then_this_would_need(type_of)] //~ ERROR no path |
| fn indirect(x: WillChanges) { } |
| } |
| |
| mod invalid_signatures { |
| use WontChange; |
| |
| #[rustc_then_this_would_need(type_of)] //~ ERROR no path |
| trait A { |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR no path |
| fn do_something_else_twice(x: WontChange); |
| } |
| |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR no path |
| fn b(x: WontChange) { } |
| |
| #[rustc_then_this_would_need(fn_sig)] //~ ERROR no path from `WillChange` |
| #[rustc_then_this_would_need(typeck)] //~ ERROR no path from `WillChange` |
| fn c(x: u32) { } |
| } |