From 218caa410aa38c29984be31a5229b9fa717560ee Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:19:13 +0200 Subject: Merging upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- tests/ui/dep-graph/dep-graph-struct-signature.rs | 87 ++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 tests/ui/dep-graph/dep-graph-struct-signature.rs (limited to 'tests/ui/dep-graph/dep-graph-struct-signature.rs') diff --git a/tests/ui/dep-graph/dep-graph-struct-signature.rs b/tests/ui/dep-graph/dep-graph-struct-signature.rs new file mode 100644 index 000000000..fcf9f6387 --- /dev/null +++ b/tests/ui/dep-graph/dep-graph-struct-signature.rs @@ -0,0 +1,87 @@ +// 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) { } +} -- cgit v1.2.3