diff --git a/tests/ui/issues/auxiliary/issue-14422.rs b/tests/ui/imports/auxiliary/extern-crate-alias-impl-method-aux.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-14422.rs rename to tests/ui/imports/auxiliary/extern-crate-alias-impl-method-aux.rs diff --git a/tests/ui/issues/auxiliary/issue-13620-1.rs b/tests/ui/imports/auxiliary/extern-crate-indirect-fn-ptr-aux-1.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-13620-1.rs rename to tests/ui/imports/auxiliary/extern-crate-indirect-fn-ptr-aux-1.rs diff --git a/tests/ui/imports/auxiliary/extern-crate-indirect-fn-ptr-aux-2.rs b/tests/ui/imports/auxiliary/extern-crate-indirect-fn-ptr-aux-2.rs new file mode 100644 index 0000000000000..f415671fc5a92 --- /dev/null +++ b/tests/ui/imports/auxiliary/extern-crate-indirect-fn-ptr-aux-2.rs @@ -0,0 +1,3 @@ +extern crate extern_crate_indirect_fn_ptr_aux_1 as crate1; + +pub static FOO2: crate1::Foo = crate1::FOO; diff --git a/tests/ui/issues/auxiliary/issue-14344-1.rs b/tests/ui/imports/auxiliary/extern-crate-no-prefer-dynamic-aux-1.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-14344-1.rs rename to tests/ui/imports/auxiliary/extern-crate-no-prefer-dynamic-aux-1.rs diff --git a/tests/ui/imports/auxiliary/extern-crate-no-prefer-dynamic-aux-2.rs b/tests/ui/imports/auxiliary/extern-crate-no-prefer-dynamic-aux-2.rs new file mode 100644 index 0000000000000..001585c34afb8 --- /dev/null +++ b/tests/ui/imports/auxiliary/extern-crate-no-prefer-dynamic-aux-2.rs @@ -0,0 +1,3 @@ +extern crate extern_crate_no_prefer_dynamic_aux_1; + +pub fn bar() {} diff --git a/tests/ui/issues/auxiliary/issue-15562.rs b/tests/ui/imports/auxiliary/extern-transmute-aux.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-15562.rs rename to tests/ui/imports/auxiliary/extern-transmute-aux.rs diff --git a/tests/ui/issues/auxiliary/issue-13507.rs b/tests/ui/imports/auxiliary/typeid-cross-crate-aux.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-13507.rs rename to tests/ui/imports/auxiliary/typeid-cross-crate-aux.rs diff --git a/tests/ui/issues/auxiliary/issue-12612-1.rs b/tests/ui/imports/auxiliary/unused-cross-crate-import-aux-1.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-12612-1.rs rename to tests/ui/imports/auxiliary/unused-cross-crate-import-aux-1.rs diff --git a/tests/ui/issues/auxiliary/issue-12612-2.rs b/tests/ui/imports/auxiliary/unused-cross-crate-import-aux-2.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-12612-2.rs rename to tests/ui/imports/auxiliary/unused-cross-crate-import-aux-2.rs diff --git a/tests/ui/issues/auxiliary/issue-11224.rs b/tests/ui/imports/auxiliary/unused-extern-crate-aux.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-11224.rs rename to tests/ui/imports/auxiliary/unused-extern-crate-aux.rs diff --git a/tests/ui/imports/extern-crate-alias-impl-method.rs b/tests/ui/imports/extern-crate-alias-impl-method.rs new file mode 100644 index 0000000000000..25baa3834cd05 --- /dev/null +++ b/tests/ui/imports/extern-crate-alias-impl-method.rs @@ -0,0 +1,16 @@ +// issue: +// Test that we can call an inherently implemented method via aliasing from an extern crate. +//@ run-pass +#![allow(non_snake_case)] + +//@ aux-build:extern-crate-alias-impl-method-aux.rs + +extern crate extern_crate_alias_impl_method_aux as bug_lib; + +use bug_lib::B; +use bug_lib::make; + +pub fn main() { + let mut an_A: B = make(); + an_A.foo(); +} diff --git a/tests/ui/imports/extern-crate-indirect-fn-ptr.rs b/tests/ui/imports/extern-crate-indirect-fn-ptr.rs new file mode 100644 index 0000000000000..5b88694463496 --- /dev/null +++ b/tests/ui/imports/extern-crate-indirect-fn-ptr.rs @@ -0,0 +1,11 @@ +// issue: +// Test cross crate resolution of an indirect function pointer +//@ run-pass +//@ aux-build:extern-crate-indirect-fn-ptr-aux-1.rs +//@ aux-build:extern-crate-indirect-fn-ptr-aux-2.rs + +extern crate extern_crate_indirect_fn_ptr_aux_2 as crate2; + +fn main() { + (crate2::FOO2.foo)(); +} diff --git a/tests/ui/imports/extern-crate-no-prefer-dynamic.rs b/tests/ui/imports/extern-crate-no-prefer-dynamic.rs new file mode 100644 index 0000000000000..681e7cb599d5c --- /dev/null +++ b/tests/ui/imports/extern-crate-no-prefer-dynamic.rs @@ -0,0 +1,13 @@ +// issue: +// Test that we can depend on an `no-prefer-dynamic` crate. +//@ run-pass +//@ aux-build:extern-crate-no-prefer-dynamic-aux-1.rs +//@ aux-build:extern-crate-no-prefer-dynamic-aux-2.rs + +extern crate extern_crate_no_prefer_dynamic_aux_1; +extern crate extern_crate_no_prefer_dynamic_aux_2; + +fn main() { + extern_crate_no_prefer_dynamic_aux_1::foo(); + extern_crate_no_prefer_dynamic_aux_2::bar(); +} diff --git a/tests/ui/issues/issue-15562.rs b/tests/ui/imports/extern-transmute.rs similarity index 61% rename from tests/ui/issues/issue-15562.rs rename to tests/ui/imports/extern-transmute.rs index d3a8f24c51b7e..18c2530236d54 100644 --- a/tests/ui/issues/issue-15562.rs +++ b/tests/ui/imports/extern-transmute.rs @@ -1,8 +1,9 @@ +// issue: +// Test resolution of `transmute` in an extern block to rust intrinsics. //@ run-pass -//@ aux-build:issue-15562.rs +//@ aux-build:extern-transmute-aux.rs - -extern crate issue_15562 as i; +extern crate extern_transmute_aux as i; pub fn main() { unsafe { diff --git a/tests/ui/issues/issue-13507-2.rs b/tests/ui/imports/typeid-cross-crate.rs similarity index 66% rename from tests/ui/issues/issue-13507-2.rs rename to tests/ui/imports/typeid-cross-crate.rs index afd88a1488153..0b217bde9aee4 100644 --- a/tests/ui/issues/issue-13507-2.rs +++ b/tests/ui/imports/typeid-cross-crate.rs @@ -1,14 +1,16 @@ +// issue: +// Test cross-crate TypeId stability //@ run-pass #![allow(unused_imports)] -//@ aux-build:issue-13507.rs +//@ aux-build:typeid-cross-crate-aux.rs -extern crate issue_13507; -use issue_13507::testtypes; +extern crate typeid_cross_crate_aux; +use typeid_cross_crate_aux::testtypes; use std::any::TypeId; pub fn type_ids() -> Vec { - use issue_13507::testtypes::*; + use typeid_cross_crate_aux::testtypes::*; vec![ TypeId::of::(), TypeId::of::(), @@ -25,12 +27,12 @@ pub fn type_ids() -> Vec { TypeId::of::(), TypeId::of::(), TypeId::of::(), - TypeId::of::() + TypeId::of::(), ] } pub fn main() { - let othercrate = issue_13507::testtypes::type_ids(); + let othercrate = typeid_cross_crate_aux::testtypes::type_ids(); let thiscrate = type_ids(); assert_eq!(thiscrate, othercrate); } diff --git a/tests/ui/imports/unused-cross-crate-import.rs b/tests/ui/imports/unused-cross-crate-import.rs new file mode 100644 index 0000000000000..4e115c3e4445d --- /dev/null +++ b/tests/ui/imports/unused-cross-crate-import.rs @@ -0,0 +1,15 @@ +// issue: +// Test that unused `use` declarations involving multiple external crates are handled properly. +//@ run-pass +#![allow(unused_imports)] +//@ aux-build:unused-cross-crate-import-aux-1.rs +//@ aux-build:unused-cross-crate-import-aux-2.rs + +extern crate unused_cross_crate_import_aux_1 as foo; +extern crate unused_cross_crate_import_aux_2 as bar; + +mod test { + use bar::baz; +} + +fn main() {} diff --git a/tests/ui/imports/unused-extern-crate.rs b/tests/ui/imports/unused-extern-crate.rs new file mode 100644 index 0000000000000..0abfa606d93ad --- /dev/null +++ b/tests/ui/imports/unused-extern-crate.rs @@ -0,0 +1,8 @@ +// issue: +// Test that an unused `extern crate` declaration does not crash the compiler. +//@ run-pass +//@ aux-build:unused-extern-crate-aux.rs + +extern crate unused_extern_crate_aux as unused; + +pub fn main() {} diff --git a/tests/ui/issues/auxiliary/issue-13620-2.rs b/tests/ui/issues/auxiliary/issue-13620-2.rs deleted file mode 100644 index 7efd24407ba9c..0000000000000 --- a/tests/ui/issues/auxiliary/issue-13620-2.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate issue_13620_1 as crate1; - -pub static FOO2: crate1::Foo = crate1::FOO; diff --git a/tests/ui/issues/auxiliary/issue-14344-2.rs b/tests/ui/issues/auxiliary/issue-14344-2.rs deleted file mode 100644 index c47b8c0ea6c79..0000000000000 --- a/tests/ui/issues/auxiliary/issue-14344-2.rs +++ /dev/null @@ -1,3 +0,0 @@ -extern crate issue_14344_1; - -pub fn bar() {} diff --git a/tests/ui/issues/issue-11224.rs b/tests/ui/issues/issue-11224.rs deleted file mode 100644 index a7255e6299f98..0000000000000 --- a/tests/ui/issues/issue-11224.rs +++ /dev/null @@ -1,7 +0,0 @@ -//@ run-pass -//@ aux-build:issue-11224.rs - - -extern crate issue_11224 as unused; - -pub fn main() {} diff --git a/tests/ui/issues/issue-11508.rs b/tests/ui/issues/issue-11508.rs deleted file mode 100644 index e7ed7a9f15f1d..0000000000000 --- a/tests/ui/issues/issue-11508.rs +++ /dev/null @@ -1,11 +0,0 @@ -//@ run-pass -//@ aux-build:issue-11508.rs - -extern crate issue_11508 as rand; - -use rand::{Closed01, random}; - -fn main() { - let Closed01(val) = random::>(); - println!("{}", val); -} diff --git a/tests/ui/issues/issue-11552.rs b/tests/ui/issues/issue-11552.rs deleted file mode 100644 index d4784e53e6b41..0000000000000 --- a/tests/ui/issues/issue-11552.rs +++ /dev/null @@ -1,24 +0,0 @@ -//@ run-pass -#![feature(box_patterns)] - -#[derive(Clone)] -enum Noun -{ - Atom(isize), - Cell(Box, Box) -} - -fn fas(n: &Noun) -> Noun -{ - match n { - &Noun::Cell(box Noun::Atom(2), box Noun::Cell(ref a, _)) => (**a).clone(), - _ => panic!("Invalid fas pattern") - } -} - -pub fn main() { - fas( - &Noun::Cell(Box::new(Noun::Atom(2)), - Box::new(Noun::Cell(Box::new(Noun::Atom(2)), Box::new(Noun::Atom(3))))) - ); -} diff --git a/tests/ui/issues/issue-11592.rs b/tests/ui/issues/issue-11592.rs deleted file mode 100644 index cb1a92e809a9d..0000000000000 --- a/tests/ui/issues/issue-11592.rs +++ /dev/null @@ -1,11 +0,0 @@ -//@ check-pass -//! Ensure the private trait Bar isn't complained about. - -#![deny(missing_docs)] - -mod foo { - trait Bar { fn bar(&self) { } } - impl Bar for i8 { fn bar(&self) { } } -} - -fn main() { } diff --git a/tests/ui/issues/issue-11677.rs b/tests/ui/issues/issue-11677.rs deleted file mode 100644 index 32e129b2c01d6..0000000000000 --- a/tests/ui/issues/issue-11677.rs +++ /dev/null @@ -1,23 +0,0 @@ -//@ run-pass -#![allow(unused_imports)] - -#![allow(dead_code)] - -// this code used to cause an ICE - -use std::marker; - -trait X { - fn dummy(&self) -> T { panic!() } -} - -struct S {f: Box+'static>, - g: Box+'static>} - -struct F; -impl X for F { -} - -fn main() { - S {f: Box::new(F), g: Box::new(F) }; -} diff --git a/tests/ui/issues/issue-12612.rs b/tests/ui/issues/issue-12612.rs deleted file mode 100644 index ec0f3926aa5d3..0000000000000 --- a/tests/ui/issues/issue-12612.rs +++ /dev/null @@ -1,14 +0,0 @@ -//@ run-pass -#![allow(unused_imports)] -//@ aux-build:issue-12612-1.rs -//@ aux-build:issue-12612-2.rs - - -extern crate issue_12612_1 as foo; -extern crate issue_12612_2 as bar; - -mod test { - use bar::baz; -} - -fn main() {} diff --git a/tests/ui/issues/issue-13620.rs b/tests/ui/issues/issue-13620.rs deleted file mode 100644 index 4d9db3aa7ceda..0000000000000 --- a/tests/ui/issues/issue-13620.rs +++ /dev/null @@ -1,10 +0,0 @@ -//@ run-pass -//@ aux-build:issue-13620-1.rs -//@ aux-build:issue-13620-2.rs - - -extern crate issue_13620_2 as crate2; - -fn main() { - (crate2::FOO2.foo)(); -} diff --git a/tests/ui/issues/issue-14344.rs b/tests/ui/issues/issue-14344.rs deleted file mode 100644 index 17863c7809ea6..0000000000000 --- a/tests/ui/issues/issue-14344.rs +++ /dev/null @@ -1,11 +0,0 @@ -//@ run-pass -//@ aux-build:issue-14344-1.rs -//@ aux-build:issue-14344-2.rs - -extern crate issue_14344_1; -extern crate issue_14344_2; - -fn main() { - issue_14344_1::foo(); - issue_14344_2::bar(); -} diff --git a/tests/ui/issues/issue-14422.rs b/tests/ui/issues/issue-14422.rs deleted file mode 100644 index b7bb2caa7f088..0000000000000 --- a/tests/ui/issues/issue-14422.rs +++ /dev/null @@ -1,15 +0,0 @@ -//@ run-pass -#![allow(non_snake_case)] - -//@ aux-build:issue-14422.rs - - -extern crate issue_14422 as bug_lib; - -use bug_lib::B; -use bug_lib::make; - -pub fn main() { - let mut an_A: B = make(); - an_A.foo(); -} diff --git a/tests/ui/lint/missing-docs-private-trait.rs b/tests/ui/lint/missing-docs-private-trait.rs new file mode 100644 index 0000000000000..dde4dc2a02680 --- /dev/null +++ b/tests/ui/lint/missing-docs-private-trait.rs @@ -0,0 +1,17 @@ +// issue: +// Test that the `missing_docs` lint does not trigger for a private trait. +//@ check-pass +//! Ensure the private trait Bar isn't complained about. + +#![deny(missing_docs)] + +mod foo { + trait Bar { + fn bar(&self) {} + } + impl Bar for i8 { + fn bar(&self) {} + } +} + +fn main() {} diff --git a/tests/ui/issues/auxiliary/issue-11508.rs b/tests/ui/pattern/auxiliary/tuple-struct-cross-crate-aux.rs similarity index 100% rename from tests/ui/issues/auxiliary/issue-11508.rs rename to tests/ui/pattern/auxiliary/tuple-struct-cross-crate-aux.rs diff --git a/tests/ui/pattern/box-pattern-nested.rs b/tests/ui/pattern/box-pattern-nested.rs new file mode 100644 index 0000000000000..f686fee8742ce --- /dev/null +++ b/tests/ui/pattern/box-pattern-nested.rs @@ -0,0 +1,24 @@ +// issue: +// Test nested box pattern matching inside a larger `match` statement. +//@ run-pass +#![feature(box_patterns)] + +#[derive(Clone)] +enum Noun { + Atom(isize), + Cell(Box, Box), +} + +fn fas(n: &Noun) -> Noun { + match n { + &Noun::Cell(box Noun::Atom(2), box Noun::Cell(ref a, _)) => (**a).clone(), + _ => panic!("Invalid fas pattern"), + } +} + +pub fn main() { + fas(&Noun::Cell( + Box::new(Noun::Atom(2)), + Box::new(Noun::Cell(Box::new(Noun::Atom(2)), Box::new(Noun::Atom(3)))), + )); +} diff --git a/tests/ui/pattern/tuple-struct-cross-crate.rs b/tests/ui/pattern/tuple-struct-cross-crate.rs new file mode 100644 index 0000000000000..fd1158d44bdb0 --- /dev/null +++ b/tests/ui/pattern/tuple-struct-cross-crate.rs @@ -0,0 +1,13 @@ +// issue: +// Test pattern matching on a tuple struct defined in an external crate. +//@ run-pass +//@ aux-build:tuple-struct-cross-crate-aux.rs + +extern crate tuple_struct_cross_crate_aux as rand; + +use rand::{Closed01, random}; + +fn main() { + let Closed01(val) = random::>(); + println!("{}", val); +} diff --git a/tests/ui/typeck/infer-struct-with-trait-object.rs b/tests/ui/typeck/infer-struct-with-trait-object.rs new file mode 100644 index 0000000000000..c6de73a69dc0c --- /dev/null +++ b/tests/ui/typeck/infer-struct-with-trait-object.rs @@ -0,0 +1,27 @@ +// issue: +// Test that type inference works correctly for struct fields containing trait objects. +//@ run-pass +#![allow(unused_imports)] +#![allow(dead_code)] + +// this code used to cause an ICE + +use std::marker; + +trait X { + fn dummy(&self) -> T { + panic!() + } +} + +struct S { + f: Box + 'static>, + g: Box + 'static>, +} + +struct F; +impl X for F {} + +fn main() { + S { f: Box::new(F), g: Box::new(F) }; +}