Migrate 11 issue tests to specific subdirectories
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 0000000..f415671
--- /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 0000000..001585c
--- /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 0000000..abd235d
--- /dev/null
+++ b/tests/ui/imports/extern-crate-alias-impl-method.rs
@@ -0,0 +1,16 @@
+// issue: rust-lang/rust#14422
+// 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 0000000..b424dbd
--- /dev/null
+++ b/tests/ui/imports/extern-crate-indirect-fn-ptr.rs
@@ -0,0 +1,11 @@
+// issue: rust-lang/rust#13620
+// 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 0000000..f7a86f9
--- /dev/null
+++ b/tests/ui/imports/extern-crate-no-prefer-dynamic.rs
@@ -0,0 +1,13 @@
+// issue: rust-lang/rust#14344
+// 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 64%
rename from tests/ui/issues/issue-15562.rs
rename to tests/ui/imports/extern-transmute.rs
index d3a8f24..df41684 100644
--- a/tests/ui/issues/issue-15562.rs
+++ b/tests/ui/imports/extern-transmute.rs
@@ -1,8 +1,9 @@
+// issue: rust-lang/rust#15562
+// 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 67%
rename from tests/ui/issues/issue-13507-2.rs
rename to tests/ui/imports/typeid-cross-crate.rs
index afd88a1..87f5f7b 100644
--- a/tests/ui/issues/issue-13507-2.rs
+++ b/tests/ui/imports/typeid-cross-crate.rs
@@ -1,14 +1,16 @@
+// issue: rust-lang/rust#13507
+// 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<TypeId> {
-    use issue_13507::testtypes::*;
+    use typeid_cross_crate_aux::testtypes::*;
     vec![
         TypeId::of::<FooBool>(),
         TypeId::of::<FooInt>(),
@@ -25,12 +27,12 @@ pub fn type_ids() -> Vec<TypeId> {
         TypeId::of::<FooTuple>(),
         TypeId::of::<dyn FooTrait>(),
         TypeId::of::<FooStruct>(),
-        TypeId::of::<FooEnum>()
+        TypeId::of::<FooEnum>(),
     ]
 }
 
 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 0000000..e6bc6d0
--- /dev/null
+++ b/tests/ui/imports/unused-cross-crate-import.rs
@@ -0,0 +1,15 @@
+// issue: rust-lang/rust#12612
+// 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 0000000..d330097
--- /dev/null
+++ b/tests/ui/imports/unused-extern-crate.rs
@@ -0,0 +1,8 @@
+// issue: rust-lang/rust#11224
+// 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 7efd244..0000000
--- 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 c47b8c0..0000000
--- 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 a7255e6..0000000
--- 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 e7ed7a9..0000000
--- 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::<Closed01<f32>>();
-    println!("{}", val);
-}
diff --git a/tests/ui/issues/issue-11552.rs b/tests/ui/issues/issue-11552.rs
deleted file mode 100644
index d4784e5..0000000
--- 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<Noun>, Box<Noun>)
-}
-
-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 cb1a92e..0000000
--- 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 32e129b..0000000
--- 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<T> {
-    fn dummy(&self) -> T { panic!() }
-}
-
-struct S<T> {f: Box<dyn X<T>+'static>,
-             g: Box<dyn X<T>+'static>}
-
-struct F;
-impl X<isize> 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 ec0f392..0000000
--- 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 4d9db3a..0000000
--- 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 17863c7..0000000
--- 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 b7bb2ca..0000000
--- 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 0000000..7949f16
--- /dev/null
+++ b/tests/ui/lint/missing-docs-private-trait.rs
@@ -0,0 +1,17 @@
+// issue: rust-lang/rust#11592
+// 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 0000000..41d248d
--- /dev/null
+++ b/tests/ui/pattern/box-pattern-nested.rs
@@ -0,0 +1,24 @@
+// issue: rust-lang/rust#11552
+// Test nested box pattern matching inside a larger `match` statement.
+//@ run-pass
+#![feature(box_patterns)]
+
+#[derive(Clone)]
+enum Noun {
+    Atom(isize),
+    Cell(Box<Noun>, Box<Noun>),
+}
+
+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 0000000..0a39492
--- /dev/null
+++ b/tests/ui/pattern/tuple-struct-cross-crate.rs
@@ -0,0 +1,13 @@
+// issue: rust-lang/rust#11508
+// 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::<Closed01<f32>>();
+    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 0000000..184174c
--- /dev/null
+++ b/tests/ui/typeck/infer-struct-with-trait-object.rs
@@ -0,0 +1,27 @@
+// issue: rust-lang/rust#11677
+// 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<T> {
+    fn dummy(&self) -> T {
+        panic!()
+    }
+}
+
+struct S<T> {
+    f: Box<dyn X<T> + 'static>,
+    g: Box<dyn X<T> + 'static>,
+}
+
+struct F;
+impl X<isize> for F {}
+
+fn main() {
+    S { f: Box::new(F), g: Box::new(F) };
+}