diff options
| author | David Wood <david@davidtw.co> | 2018-08-08 14:28:26 +0200 |
|---|---|---|
| committer | David Wood <david@davidtw.co> | 2018-08-14 10:38:00 +0200 |
| commit | b16a30677f4e641329e768272cf9d3ecc2fa31c4 (patch) | |
| tree | d3e652eb74da6147d2ae1514977c93c785c733a2 /src/test/ui/compile-fail-migration/dep-graph-struct-signature.rs | |
| parent | fe28bcf1db02afe184e3677ee034b2a5804f2466 (diff) | |
| download | rust-b16a30677f4e641329e768272cf9d3ecc2fa31c4.tar.gz rust-b16a30677f4e641329e768272cf9d3ecc2fa31c4.zip | |
Moved compile-fail tests to ui tests.
Diffstat (limited to 'src/test/ui/compile-fail-migration/dep-graph-struct-signature.rs')
| -rw-r--r-- | src/test/ui/compile-fail-migration/dep-graph-struct-signature.rs | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/test/ui/compile-fail-migration/dep-graph-struct-signature.rs b/src/test/ui/compile-fail-migration/dep-graph-struct-signature.rs new file mode 100644 index 00000000000..647605ae438 --- /dev/null +++ b/src/test/ui/compile-fail-migration/dep-graph-struct-signature.rs @@ -0,0 +1,97 @@ +// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test cases where a changing struct appears in the signature of fns +// and methods. + +// 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(TypeOfItem)] //~ ERROR no path + #[rustc_then_this_would_need(AssociatedItems)] //~ ERROR no path + #[rustc_then_this_would_need(TraitDefOfItem)] //~ ERROR no path + trait Bar { + #[rustc_then_this_would_need(FnSignature)] //~ ERROR OK + fn do_something(x: WillChange); + } + + #[rustc_then_this_would_need(FnSignature)] //~ ERROR OK + #[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK + fn some_fn(x: WillChange) { } + + #[rustc_then_this_would_need(FnSignature)] //~ ERROR OK + #[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK + fn new_foo(x: u32, y: u32) -> WillChange { + WillChange { x: x, y: y } + } + + #[rustc_then_this_would_need(TypeOfItem)] //~ ERROR OK + impl WillChange { + #[rustc_then_this_would_need(FnSignature)] //~ ERROR OK + #[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK + fn new(x: u32, y: u32) -> WillChange { loop { } } + } + + #[rustc_then_this_would_need(TypeOfItem)] //~ ERROR OK + impl WillChange { + #[rustc_then_this_would_need(FnSignature)] //~ ERROR OK + #[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK + fn method(&self, x: u32) { } + } + + struct WillChanges { + #[rustc_then_this_would_need(TypeOfItem)] //~ ERROR OK + x: WillChange, + #[rustc_then_this_would_need(TypeOfItem)] //~ ERROR OK + y: WillChange + } + + // The fields change, not the type itself. + #[rustc_then_this_would_need(TypeOfItem)] //~ ERROR no path + fn indirect(x: WillChanges) { } +} + +mod invalid_signatures { + use WontChange; + + #[rustc_then_this_would_need(TypeOfItem)] //~ ERROR no path + trait A { + #[rustc_then_this_would_need(FnSignature)] //~ ERROR no path + fn do_something_else_twice(x: WontChange); + } + + #[rustc_then_this_would_need(FnSignature)] //~ ERROR no path + #[rustc_then_this_would_need(TypeckTables)] //~ ERROR no path + fn b(x: WontChange) { } + + #[rustc_then_this_would_need(FnSignature)] //~ ERROR no path from `WillChange` + #[rustc_then_this_would_need(TypeckTables)] //~ ERROR no path from `WillChange` + fn c(x: u32) { } +} |
