From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- .../ui/dep-graph/dep-graph-assoc-type-codegen.rs | 38 ++++++ .../dep-graph/dep-graph-assoc-type-codegen.stderr | 8 ++ src/test/ui/dep-graph/dep-graph-caller-callee.rs | 36 ++++++ .../ui/dep-graph/dep-graph-caller-callee.stderr | 14 +++ src/test/ui/dep-graph/dep-graph-check-attr.rs | 20 +++ src/test/ui/dep-graph/dep-graph-check-attr.stderr | 26 ++++ .../ui/dep-graph/dep-graph-struct-signature.rs | 87 +++++++++++++ .../ui/dep-graph/dep-graph-struct-signature.stderr | 134 +++++++++++++++++++++ .../dep-graph-trait-impl-two-traits-same-method.rs | 46 +++++++ ...-graph-trait-impl-two-traits-same-method.stderr | 14 +++ .../dep-graph/dep-graph-trait-impl-two-traits.rs | 45 +++++++ .../dep-graph-trait-impl-two-traits.stderr | 14 +++ src/test/ui/dep-graph/dep-graph-trait-impl.rs | 61 ++++++++++ src/test/ui/dep-graph/dep-graph-trait-impl.stderr | 32 +++++ src/test/ui/dep-graph/dep-graph-type-alias.rs | 56 +++++++++ src/test/ui/dep-graph/dep-graph-type-alias.stderr | 74 ++++++++++++ src/test/ui/dep-graph/dep-graph-variance-alias.rs | 22 ++++ .../ui/dep-graph/dep-graph-variance-alias.stderr | 8 ++ 18 files changed, 735 insertions(+) create mode 100644 src/test/ui/dep-graph/dep-graph-assoc-type-codegen.rs create mode 100644 src/test/ui/dep-graph/dep-graph-assoc-type-codegen.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-caller-callee.rs create mode 100644 src/test/ui/dep-graph/dep-graph-caller-callee.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-check-attr.rs create mode 100644 src/test/ui/dep-graph/dep-graph-check-attr.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-struct-signature.rs create mode 100644 src/test/ui/dep-graph/dep-graph-struct-signature.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.rs create mode 100644 src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.rs create mode 100644 src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-trait-impl.rs create mode 100644 src/test/ui/dep-graph/dep-graph-trait-impl.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-type-alias.rs create mode 100644 src/test/ui/dep-graph/dep-graph-type-alias.stderr create mode 100644 src/test/ui/dep-graph/dep-graph-variance-alias.rs create mode 100644 src/test/ui/dep-graph/dep-graph-variance-alias.stderr (limited to 'src/test/ui/dep-graph') diff --git a/src/test/ui/dep-graph/dep-graph-assoc-type-codegen.rs b/src/test/ui/dep-graph/dep-graph-assoc-type-codegen.rs new file mode 100644 index 000000000..978c19948 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-assoc-type-codegen.rs @@ -0,0 +1,38 @@ +// Test that when a trait impl changes, fns whose body uses that trait +// must also be recompiled. + +// incremental +// compile-flags: -Z query-dep-graph + +#![feature(rustc_attrs)] +#![allow(warnings)] + +fn main() { } + +pub trait Foo: Sized { + type T; + fn method(self) { } +} + +mod x { + use Foo; + + #[rustc_if_this_changed] + impl Foo for char { type T = char; } + + impl Foo for u32 { type T = u32; } +} + +mod y { + use Foo; + + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn use_char_assoc() { + // Careful here: in the representation, ::T gets + // normalized away, so at a certain point we had no edge to + // codegen. (But now codegen just depends on typeck.) + let x: ::T = 'a'; + } + + pub fn take_foo(t: T) { } +} diff --git a/src/test/ui/dep-graph/dep-graph-assoc-type-codegen.stderr b/src/test/ui/dep-graph/dep-graph-assoc-type-codegen.stderr new file mode 100644 index 000000000..cdc268cff --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-assoc-type-codegen.stderr @@ -0,0 +1,8 @@ +error: OK + --> $DIR/dep-graph-assoc-type-codegen.rs:29:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/dep-graph/dep-graph-caller-callee.rs b/src/test/ui/dep-graph/dep-graph-caller-callee.rs new file mode 100644 index 000000000..4a3a8bb6b --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-caller-callee.rs @@ -0,0 +1,36 @@ +// Test that immediate callers have to change when callee changes, but +// not callers' callers. + +// incremental +// compile-flags: -Z query-dep-graph + +#![feature(rustc_attrs)] +#![allow(dead_code)] + +fn main() { } + +mod x { + #[rustc_if_this_changed] + pub fn x() { } +} + +mod y { + use x; + + // These dependencies SHOULD exist: + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn y() { + x::x(); + } +} + +mod z { + use y; + + // These are expected to yield errors, because changes to `x` + // affect the BODY of `y`, but not its signature. + #[rustc_then_this_would_need(typeck)] //~ ERROR no path + pub fn z() { + y::y(); + } +} diff --git a/src/test/ui/dep-graph/dep-graph-caller-callee.stderr b/src/test/ui/dep-graph/dep-graph-caller-callee.stderr new file mode 100644 index 000000000..4d06dc7f3 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-caller-callee.stderr @@ -0,0 +1,14 @@ +error: OK + --> $DIR/dep-graph-caller-callee.rs:21:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `x` to `typeck` + --> $DIR/dep-graph-caller-callee.rs:32:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/dep-graph/dep-graph-check-attr.rs b/src/test/ui/dep-graph/dep-graph-check-attr.rs new file mode 100644 index 000000000..a45bf24f8 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-check-attr.rs @@ -0,0 +1,20 @@ +// Test that using rustc_clean/dirty/if_this_changed/then_this_would_need +// are forbidden when `-Z query-dep-graph` is not enabled. + +#![feature(rustc_attrs)] +#![allow(dead_code)] +#![allow(unused_variables)] + +#[rustc_clean(hir_owner)] //~ ERROR attribute requires -Z query-dep-graph +fn main() {} + +#[rustc_if_this_changed(hir_owner)] //~ ERROR attribute requires -Z query-dep-graph +struct Foo { + f: T, +} + +#[rustc_clean(hir_owner)] //~ ERROR attribute requires -Z query-dep-graph +type TypeAlias = Foo; + +#[rustc_then_this_would_need(variances_of)] //~ ERROR attribute requires -Z query-dep-graph +trait Use {} diff --git a/src/test/ui/dep-graph/dep-graph-check-attr.stderr b/src/test/ui/dep-graph/dep-graph-check-attr.stderr new file mode 100644 index 000000000..46f4e4358 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-check-attr.stderr @@ -0,0 +1,26 @@ +error: attribute requires -Z query-dep-graph to be enabled + --> $DIR/dep-graph-check-attr.rs:8:1 + | +LL | #[rustc_clean(hir_owner)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: attribute requires -Z query-dep-graph to be enabled + --> $DIR/dep-graph-check-attr.rs:11:1 + | +LL | #[rustc_if_this_changed(hir_owner)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: attribute requires -Z query-dep-graph to be enabled + --> $DIR/dep-graph-check-attr.rs:16:1 + | +LL | #[rustc_clean(hir_owner)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: attribute requires -Z query-dep-graph to be enabled + --> $DIR/dep-graph-check-attr.rs:19:1 + | +LL | #[rustc_then_this_would_need(variances_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 4 previous errors + diff --git a/src/test/ui/dep-graph/dep-graph-struct-signature.rs b/src/test/ui/dep-graph/dep-graph-struct-signature.rs new file mode 100644 index 000000000..fcf9f6387 --- /dev/null +++ b/src/test/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) { } +} diff --git a/src/test/ui/dep-graph/dep-graph-struct-signature.stderr b/src/test/ui/dep-graph/dep-graph-struct-signature.stderr new file mode 100644 index 000000000..cfe1e62d9 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-struct-signature.stderr @@ -0,0 +1,134 @@ +error: no path from `WillChange` to `type_of` + --> $DIR/dep-graph-struct-signature.rs:28:5 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `associated_item` + --> $DIR/dep-graph-struct-signature.rs:29:5 + | +LL | #[rustc_then_this_would_need(associated_item)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `trait_def` + --> $DIR/dep-graph-struct-signature.rs:30:5 + | +LL | #[rustc_then_this_would_need(trait_def)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:36:5 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:37:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:40:5 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:41:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:46:5 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:53:5 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:61:9 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:63:9 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `type_of` + --> $DIR/dep-graph-struct-signature.rs:68:5 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `type_of` + --> $DIR/dep-graph-struct-signature.rs:75:5 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `fn_sig` + --> $DIR/dep-graph-struct-signature.rs:81:5 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `fn_sig` + --> $DIR/dep-graph-struct-signature.rs:84:5 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `typeck` + --> $DIR/dep-graph-struct-signature.rs:85:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:32:9 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `WillChange` to `fn_sig` + --> $DIR/dep-graph-struct-signature.rs:77:9 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:48:9 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:49:9 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:55:9 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-struct-signature.rs:56:9 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 22 previous errors + diff --git a/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.rs b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.rs new file mode 100644 index 000000000..5da8df570 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.rs @@ -0,0 +1,46 @@ +// Test that adding an impl to a trait `Foo` DOES affect functions +// that only use `Bar` if they have methods in common. + +// incremental +// compile-flags: -Z query-dep-graph + +#![feature(rustc_attrs)] +#![allow(dead_code)] +#![allow(unused_imports)] + +fn main() { } + +pub trait Foo: Sized { + fn method(self) { } +} + +pub trait Bar: Sized { + fn method(self) { } +} + +mod x { + use {Foo, Bar}; + + #[rustc_if_this_changed] + impl Foo for u32 { } + + impl Bar for char { } +} + +mod y { + use {Foo, Bar}; + + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn with_char() { + char::method('a'); + } +} + +mod z { + use y; + + #[rustc_then_this_would_need(typeck)] //~ ERROR no path + pub fn z() { + y::with_char(); + } +} diff --git a/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.stderr b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.stderr new file mode 100644 index 000000000..6f56cbc8d --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits-same-method.stderr @@ -0,0 +1,14 @@ +error: OK + --> $DIR/dep-graph-trait-impl-two-traits-same-method.rs:33:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `x::` to `typeck` + --> $DIR/dep-graph-trait-impl-two-traits-same-method.rs:42:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.rs b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.rs new file mode 100644 index 000000000..590475fa0 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.rs @@ -0,0 +1,45 @@ +// Test that adding an impl to a trait `Foo` does not affect functions +// that only use `Bar`, so long as they do not have methods in common. + +// incremental +// compile-flags: -Z query-dep-graph + +#![feature(rustc_attrs)] +#![allow(warnings)] + +fn main() { } + +pub trait Foo: Sized { + fn foo(self) { } +} + +pub trait Bar: Sized { + fn bar(self) { } +} + +mod x { + use {Foo, Bar}; + + #[rustc_if_this_changed] + impl Foo for char { } + + impl Bar for char { } +} + +mod y { + use {Foo, Bar}; + + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn call_bar() { + char::bar('a'); + } +} + +mod z { + use y; + + #[rustc_then_this_would_need(typeck)] //~ ERROR no path + pub fn z() { + y::call_bar(); + } +} diff --git a/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.stderr b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.stderr new file mode 100644 index 000000000..4e1043736 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-trait-impl-two-traits.stderr @@ -0,0 +1,14 @@ +error: OK + --> $DIR/dep-graph-trait-impl-two-traits.rs:32:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `x::` to `typeck` + --> $DIR/dep-graph-trait-impl-two-traits.rs:41:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/dep-graph/dep-graph-trait-impl.rs b/src/test/ui/dep-graph/dep-graph-trait-impl.rs new file mode 100644 index 000000000..19002965b --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-trait-impl.rs @@ -0,0 +1,61 @@ +// Test that when a trait impl changes, fns whose body uses that trait +// must also be recompiled. + +// incremental +// compile-flags: -Z query-dep-graph + +#![feature(rustc_attrs)] +#![allow(warnings)] + +fn main() { } + +pub trait Foo: Sized { + fn method(self) { } +} + +mod x { + use Foo; + + #[rustc_if_this_changed] + impl Foo for char { } + + impl Foo for u32 { } +} + +mod y { + use Foo; + + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn with_char() { + char::method('a'); + } + + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn take_foo_with_char() { + take_foo::('a'); + } + + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn with_u32() { + u32::method(22); + } + + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + pub fn take_foo_with_u32() { + take_foo::(22); + } + + pub fn take_foo(t: T) { } +} + +mod z { + use y; + + // These are expected to yield errors, because changes to `x` + // affect the BODY of `y`, but not its signature. + #[rustc_then_this_would_need(typeck)] //~ ERROR no path + pub fn z() { + y::with_char(); + y::with_u32(); + } +} diff --git a/src/test/ui/dep-graph/dep-graph-trait-impl.stderr b/src/test/ui/dep-graph/dep-graph-trait-impl.stderr new file mode 100644 index 000000000..bfee6d5c8 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-trait-impl.stderr @@ -0,0 +1,32 @@ +error: OK + --> $DIR/dep-graph-trait-impl.rs:28:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-trait-impl.rs:33:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-trait-impl.rs:38:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-trait-impl.rs:43:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `x::` to `typeck` + --> $DIR/dep-graph-trait-impl.rs:56:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 5 previous errors + diff --git a/src/test/ui/dep-graph/dep-graph-type-alias.rs b/src/test/ui/dep-graph/dep-graph-type-alias.rs new file mode 100644 index 000000000..0e1b3db19 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-type-alias.rs @@ -0,0 +1,56 @@ +// Test that changing what a `type` points to does not go unnoticed. + +// incremental +// compile-flags: -Z query-dep-graph + +#![feature(rustc_attrs)] +#![allow(dead_code)] +#![allow(unused_variables)] + +fn main() { } + + +#[rustc_if_this_changed] +type TypeAlias = u32; + +// The type alias directly affects the type of the field, +// not the enclosing struct: +#[rustc_then_this_would_need(type_of)] //~ ERROR no path +struct Struct { + #[rustc_then_this_would_need(type_of)] //~ ERROR OK + x: TypeAlias, + y: u32 +} + +#[rustc_then_this_would_need(type_of)] //~ ERROR no path +enum Enum { + Variant1 { + #[rustc_then_this_would_need(type_of)] //~ ERROR OK + t: TypeAlias + }, + Variant2(i32) +} + +#[rustc_then_this_would_need(type_of)] //~ ERROR no path +trait Trait { + #[rustc_then_this_would_need(fn_sig)] //~ ERROR OK + fn method(&self, _: TypeAlias); +} + +struct SomeType; + +#[rustc_then_this_would_need(type_of)] //~ ERROR no path +impl SomeType { + #[rustc_then_this_would_need(fn_sig)] //~ ERROR OK + #[rustc_then_this_would_need(typeck)] //~ ERROR OK + fn method(&self, _: TypeAlias) {} +} + +#[rustc_then_this_would_need(type_of)] //~ ERROR OK +type TypeAlias2 = TypeAlias; + +#[rustc_then_this_would_need(fn_sig)] //~ ERROR OK +#[rustc_then_this_would_need(typeck)] //~ ERROR OK +fn function(_: TypeAlias) { + +} diff --git a/src/test/ui/dep-graph/dep-graph-type-alias.stderr b/src/test/ui/dep-graph/dep-graph-type-alias.stderr new file mode 100644 index 000000000..42ac803b2 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-type-alias.stderr @@ -0,0 +1,74 @@ +error: no path from `TypeAlias` to `type_of` + --> $DIR/dep-graph-type-alias.rs:18:1 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:20:5 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `TypeAlias` to `type_of` + --> $DIR/dep-graph-type-alias.rs:25:1 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:28:9 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `TypeAlias` to `type_of` + --> $DIR/dep-graph-type-alias.rs:34:1 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: no path from `TypeAlias` to `type_of` + --> $DIR/dep-graph-type-alias.rs:42:1 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:49:1 + | +LL | #[rustc_then_this_would_need(type_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:52:1 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:53:1 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:36:5 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:44:5 + | +LL | #[rustc_then_this_would_need(fn_sig)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: OK + --> $DIR/dep-graph-type-alias.rs:45:5 + | +LL | #[rustc_then_this_would_need(typeck)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 12 previous errors + diff --git a/src/test/ui/dep-graph/dep-graph-variance-alias.rs b/src/test/ui/dep-graph/dep-graph-variance-alias.rs new file mode 100644 index 000000000..008434696 --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-variance-alias.rs @@ -0,0 +1,22 @@ +// Test that changing what a `type` points to does not go unnoticed +// by the variance analysis. + +// incremental +// compile-flags: -Z query-dep-graph + +#![feature(rustc_attrs)] +#![allow(dead_code)] +#![allow(unused_variables)] +fn main() {} + +#[rustc_if_this_changed] +struct Foo { + f: T, +} + +type TypeAlias = Foo; + +#[rustc_then_this_would_need(variances_of)] //~ ERROR OK +struct Use { + x: TypeAlias, +} diff --git a/src/test/ui/dep-graph/dep-graph-variance-alias.stderr b/src/test/ui/dep-graph/dep-graph-variance-alias.stderr new file mode 100644 index 000000000..554ff455a --- /dev/null +++ b/src/test/ui/dep-graph/dep-graph-variance-alias.stderr @@ -0,0 +1,8 @@ +error: OK + --> $DIR/dep-graph-variance-alias.rs:19:1 + | +LL | #[rustc_then_this_would_need(variances_of)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + -- cgit v1.2.3