about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2017-04-04 08:10:22 -0700
committerEsteban Küber <esteban@kuber.com.ar>2017-04-04 08:13:27 -0700
commitdedb7bbbbf272226f327b8cda8aaa12cf6325eca (patch)
tree9c7c7b656750a53b5ca4f7646ee1dfe60829b271 /src/test
parentb477682dca3343eb89a467f0d3c73986a53d49d9 (diff)
parent5309a3e31d88def1f3ea966162ed4f81f161d500 (diff)
downloadrust-dedb7bbbbf272226f327b8cda8aaa12cf6325eca.tar.gz
rust-dedb7bbbbf272226f327b8cda8aaa12cf6325eca.zip
Merge branch 'master' into issue-32540
Diffstat (limited to 'src/test')
-rw-r--r--src/test/codegen/panic-abort-windows.rs41
-rw-r--r--src/test/compile-fail-fulldeps/qquote.rs8
-rw-r--r--src/test/compile-fail/augmented-assignments.rs2
-rw-r--r--src/test/compile-fail/borrowck/borrowck-issue-14498.rs6
-rw-r--r--src/test/compile-fail/coerce-to-bang-cast.rs23
-rw-r--r--src/test/compile-fail/coerce-to-bang.rs90
-rw-r--r--src/test/compile-fail/coherence-overlapping-inherent-impl-trait.rs2
-rw-r--r--src/test/compile-fail/defaulted-unit-warning.rs12
-rw-r--r--src/test/compile-fail/diverging-tuple-parts-39485.rs (renamed from src/test/run-make/graphviz-flowgraph/f23.rs)30
-rw-r--r--src/test/compile-fail/imports/macro-paths.rs2
-rw-r--r--src/test/compile-fail/imports/macros.rs2
-rw-r--r--src/test/compile-fail/imports/shadow_builtin_macros.rs71
-rw-r--r--src/test/compile-fail/index-bot.rs2
-rw-r--r--src/test/compile-fail/indexing-requires-a-uint.rs2
-rw-r--r--src/test/compile-fail/inherent-overlap.rs3
-rw-r--r--src/test/compile-fail/integral-indexing.rs8
-rw-r--r--src/test/compile-fail/issue-10176.rs (renamed from src/test/run-pass/inference-changes-39485.rs)8
-rw-r--r--src/test/compile-fail/issue-13847.rs2
-rw-r--r--src/test/compile-fail/issue-15207.rs2
-rw-r--r--src/test/compile-fail/issue-17373.rs2
-rw-r--r--src/test/compile-fail/issue-18532.rs3
-rw-r--r--src/test/compile-fail/issue-2149.rs2
-rw-r--r--src/test/compile-fail/issue-25385.rs1
-rw-r--r--src/test/compile-fail/issue-27042.rs8
-rw-r--r--src/test/compile-fail/issue-33819.rs2
-rw-r--r--src/test/compile-fail/issue-40000.rs (renamed from src/test/run-make/graphviz-flowgraph/f05.rs)14
-rw-r--r--src/test/compile-fail/issue-40749.rs16
-rw-r--r--src/test/compile-fail/issue-40845.rs16
-rw-r--r--src/test/compile-fail/issue-5500.rs17
-rw-r--r--src/test/compile-fail/loop-break-value.rs23
-rw-r--r--src/test/compile-fail/match-no-arms-unreachable-after.rs22
-rw-r--r--src/test/compile-fail/match-unreachable-warning-with-diverging-discrim.rs (renamed from src/test/run-make/graphviz-flowgraph/f07.rs)11
-rw-r--r--src/test/compile-fail/match-unresolved-one-arm.rs17
-rw-r--r--src/test/compile-fail/mut-suggestion.rs4
-rw-r--r--src/test/compile-fail/never-assign-dead-code.rs1
-rw-r--r--src/test/compile-fail/never-assign-wrong-type.rs1
-rw-r--r--src/test/compile-fail/never-fallback.rs41
-rw-r--r--src/test/compile-fail/object-safety-supertrait-mentions-Self.rs2
-rw-r--r--src/test/compile-fail/on-unimplemented/slice-index.rs4
-rw-r--r--src/test/compile-fail/privacy/restricted/tuple-struct-fields/test.rs7
-rw-r--r--src/test/compile-fail/privacy/restricted/tuple-struct-fields/test2.rs7
-rw-r--r--src/test/compile-fail/privacy/restricted/tuple-struct-fields/test3.rs7
-rw-r--r--src/test/compile-fail/region-bounds-on-objects-and-type-parameters.rs2
-rw-r--r--src/test/compile-fail/region-invariant-static-error-reporting.rs3
-rw-r--r--src/test/compile-fail/regions-bounds.rs10
-rw-r--r--src/test/compile-fail/static-lifetime-bound.rs16
-rw-r--r--src/test/parse-fail/mod_file_not_exist.rs2
-rw-r--r--src/test/parse-fail/mod_file_not_exist_windows.rs32
-rw-r--r--src/test/run-fail-fulldeps/qquote.rs8
-rw-r--r--src/test/run-make/graphviz-flowgraph/Makefile38
-rw-r--r--src/test/run-make/graphviz-flowgraph/f00.dot-expected.dot9
-rw-r--r--src/test/run-make/graphviz-flowgraph/f01.dot-expected.dot13
-rw-r--r--src/test/run-make/graphviz-flowgraph/f02.dot-expected.dot13
-rw-r--r--src/test/run-make/graphviz-flowgraph/f03.dot-expected.dot17
-rw-r--r--src/test/run-make/graphviz-flowgraph/f04.dot-expected.dot15
-rw-r--r--src/test/run-make/graphviz-flowgraph/f04.rs13
-rw-r--r--src/test/run-make/graphviz-flowgraph/f05.dot-expected.dot23
-rw-r--r--src/test/run-make/graphviz-flowgraph/f06.dot-expected.dot19
-rw-r--r--src/test/run-make/graphviz-flowgraph/f06.rs14
-rw-r--r--src/test/run-make/graphviz-flowgraph/f07.dot-expected.dot39
-rw-r--r--src/test/run-make/graphviz-flowgraph/f08.dot-expected.dot38
-rw-r--r--src/test/run-make/graphviz-flowgraph/f09.dot-expected.dot54
-rw-r--r--src/test/run-make/graphviz-flowgraph/f10.dot-expected.dot36
-rw-r--r--src/test/run-make/graphviz-flowgraph/f10.rs16
-rw-r--r--src/test/run-make/graphviz-flowgraph/f11.dot-expected.dot35
-rw-r--r--src/test/run-make/graphviz-flowgraph/f11.rs18
-rw-r--r--src/test/run-make/graphviz-flowgraph/f12.dot-expected.dot50
-rw-r--r--src/test/run-make/graphviz-flowgraph/f12.rs18
-rw-r--r--src/test/run-make/graphviz-flowgraph/f13.dot-expected.dot54
-rw-r--r--src/test/run-make/graphviz-flowgraph/f13.rs18
-rw-r--r--src/test/run-make/graphviz-flowgraph/f14.dot-expected.dot36
-rw-r--r--src/test/run-make/graphviz-flowgraph/f14.rs18
-rw-r--r--src/test/run-make/graphviz-flowgraph/f15.dot-expected.dot105
-rw-r--r--src/test/run-make/graphviz-flowgraph/f15.rs30
-rw-r--r--src/test/run-make/graphviz-flowgraph/f16.dot-expected.dot111
-rw-r--r--src/test/run-make/graphviz-flowgraph/f16.rs31
-rw-r--r--src/test/run-make/graphviz-flowgraph/f17.dot-expected.dot21
-rw-r--r--src/test/run-make/graphviz-flowgraph/f17.rs13
-rw-r--r--src/test/run-make/graphviz-flowgraph/f18.dot-expected.dot23
-rw-r--r--src/test/run-make/graphviz-flowgraph/f18.rs14
-rw-r--r--src/test/run-make/graphviz-flowgraph/f19.dot-expected.dot29
-rw-r--r--src/test/run-make/graphviz-flowgraph/f19.rs16
-rw-r--r--src/test/run-make/graphviz-flowgraph/f20.dot-expected.dot29
-rw-r--r--src/test/run-make/graphviz-flowgraph/f20.rs14
-rw-r--r--src/test/run-make/graphviz-flowgraph/f21.dot-expected.dot101
-rw-r--r--src/test/run-make/graphviz-flowgraph/f21.rs30
-rw-r--r--src/test/run-make/graphviz-flowgraph/f22.dot-expected.dot107
-rw-r--r--src/test/run-make/graphviz-flowgraph/f22.rs31
-rw-r--r--src/test/run-make/graphviz-flowgraph/f23.dot-expected.dot113
-rw-r--r--src/test/run-make/graphviz-flowgraph/f24.dot-expected.dot161
-rw-r--r--src/test/run-make/graphviz-flowgraph/f24.rs36
-rw-r--r--src/test/run-make/graphviz-flowgraph/f25.dot-expected.dot161
-rw-r--r--src/test/run-make/graphviz-flowgraph/f25.rs36
-rw-r--r--src/test/run-make/issue-40535/Makefile11
-rw-r--r--src/test/run-make/issue-40535/bar.rs (renamed from src/test/run-make/graphviz-flowgraph/f01.rs)8
-rw-r--r--src/test/run-make/issue-40535/baz.rs (renamed from src/test/run-make/graphviz-flowgraph/f00.rs)6
-rw-r--r--src/test/run-make/issue-40535/foo.rs (renamed from src/test/run-make/graphviz-flowgraph/f03.rs)9
-rw-r--r--src/test/run-make/save-analysis/foo.rs17
-rw-r--r--src/test/run-pass-fulldeps/logging-right-crate.rs31
-rw-r--r--src/test/run-pass-fulldeps/logging-separate-lines.rs40
-rw-r--r--src/test/run-pass-fulldeps/qquote.rs8
-rw-r--r--src/test/run-pass-fulldeps/rust-log-filter.rs58
-rw-r--r--src/test/run-pass-fulldeps/switch-stdout.rs64
-rw-r--r--src/test/run-pass/auxiliary/llvm_pr32379.rs15
-rw-r--r--src/test/run-pass/conditional-debug-macro-on.rs2
-rw-r--r--src/test/run-pass/diverging-fallback-control-flow.rs106
-rw-r--r--src/test/run-pass/diverging-fallback-method-chain.rs (renamed from src/test/run-pass/unit-fallback.rs)33
-rw-r--r--src/test/run-pass/diverging-fallback-option.rs22
-rw-r--r--src/test/run-pass/issue-15763.rs7
-rw-r--r--src/test/run-pass/issue-16671.rs27
-rw-r--r--src/test/run-pass/issue-39808.rs26
-rw-r--r--src/test/run-pass/issue-39984.rs21
-rw-r--r--src/test/run-pass/issue-40770.rs (renamed from src/test/run-make/graphviz-flowgraph/f08.rs)13
-rw-r--r--src/test/run-pass/llvm-pr32379.rs23
-rw-r--r--src/test/run-pass/project-defer-unification.rs4
-rw-r--r--src/test/run-pass/syntax-extension-source-utils.rs2
-rw-r--r--src/test/rustdoc/auxiliary/pub-use-extern-macros.rs30
-rw-r--r--src/test/rustdoc/check-hard-break.rs19
-rw-r--r--src/test/rustdoc/check-rule-image-footnote.rs40
-rw-r--r--src/test/rustdoc/pub-use-extern-macros.rs31
-rw-r--r--src/test/ui/codemap_tests/huge_multispan_highlight.stderr2
-rw-r--r--src/test/ui/did_you_mean/issue-31424.stderr2
-rw-r--r--src/test/ui/did_you_mean/issue-35937.rs31
-rw-r--r--src/test/ui/did_you_mean/issue-35937.stderr26
-rw-r--r--src/test/ui/did_you_mean/issue-38147-2.stderr2
-rw-r--r--src/test/ui/did_you_mean/issue-38147-3.stderr4
-rw-r--r--src/test/ui/did_you_mean/issue-39544.rs35
-rw-r--r--src/test/ui/did_you_mean/issue-39544.stderr86
-rw-r--r--src/test/ui/did_you_mean/issue-40823.rs14
-rw-r--r--src/test/ui/did_you_mean/issue-40823.stderr8
-rw-r--r--src/test/ui/loop-break-value-no-repeat.rs (renamed from src/test/run-make/graphviz-flowgraph/f09.rs)21
-rw-r--r--src/test/ui/loop-break-value-no-repeat.stderr8
-rw-r--r--src/test/ui/macros/macro_path_as_generic_bound.stderr5
-rw-r--r--src/test/ui/pub/pub-restricted-error-fn.rs (renamed from src/test/run-make/graphviz-flowgraph/f02.rs)8
-rw-r--r--src/test/ui/pub/pub-restricted-error-fn.stderr8
-rw-r--r--src/test/ui/pub/pub-restricted-error.rs19
-rw-r--r--src/test/ui/pub/pub-restricted-error.stderr8
-rw-r--r--src/test/ui/pub/pub-restricted-non-path.rs15
-rw-r--r--src/test/ui/pub/pub-restricted-non-path.stderr8
-rw-r--r--src/test/ui/pub/pub-restricted.rs37
-rw-r--r--src/test/ui/pub/pub-restricted.stderr47
-rw-r--r--src/test/ui/reachable/README.md7
-rw-r--r--src/test/ui/reachable/expr_add.rs (renamed from src/test/run-pass-fulldeps/logging-enabled-debug.rs)24
-rw-r--r--src/test/ui/reachable/expr_add.stderr14
-rw-r--r--src/test/ui/reachable/expr_again.rs (renamed from src/test/run-pass-fulldeps/auxiliary/logging_right_crate.rs)16
-rw-r--r--src/test/ui/reachable/expr_again.stderr15
-rw-r--r--src/test/ui/reachable/expr_andand.rs21
-rw-r--r--src/test/ui/reachable/expr_andand.stderr0
-rw-r--r--src/test/ui/reachable/expr_array.rs28
-rw-r--r--src/test/ui/reachable/expr_array.stderr20
-rw-r--r--src/test/ui/reachable/expr_assign.rs39
-rw-r--r--src/test/ui/reachable/expr_assign.stderr26
-rw-r--r--src/test/ui/reachable/expr_block.rs41
-rw-r--r--src/test/ui/reachable/expr_block.stderr22
-rw-r--r--src/test/ui/reachable/expr_box.rs18
-rw-r--r--src/test/ui/reachable/expr_box.stderr14
-rw-r--r--src/test/ui/reachable/expr_call.rs (renamed from src/test/run-pass-fulldeps/logging-enabled.rs)30
-rw-r--r--src/test/ui/reachable/expr_call.stderr20
-rw-r--r--src/test/ui/reachable/expr_cast.rs23
-rw-r--r--src/test/ui/reachable/expr_cast.stderr14
-rw-r--r--src/test/ui/reachable/expr_if.rs41
-rw-r--r--src/test/ui/reachable/expr_if.stderr15
-rw-r--r--src/test/ui/reachable/expr_loop.rs44
-rw-r--r--src/test/ui/reachable/expr_loop.stderr31
-rw-r--r--src/test/ui/reachable/expr_match.rs54
-rw-r--r--src/test/ui/reachable/expr_match.stderr30
-rw-r--r--src/test/ui/reachable/expr_method.rs34
-rw-r--r--src/test/ui/reachable/expr_method.stderr20
-rw-r--r--src/test/ui/reachable/expr_oror.rs20
-rw-r--r--src/test/ui/reachable/expr_oror.stderr0
-rw-r--r--src/test/ui/reachable/expr_repeat.rs23
-rw-r--r--src/test/ui/reachable/expr_repeat.stderr14
-rw-r--r--src/test/ui/reachable/expr_return.rs (renamed from src/test/run-pass-fulldeps/conditional-debug-macro-off.rs)25
-rw-r--r--src/test/ui/reachable/expr_return.stderr14
-rw-r--r--src/test/ui/reachable/expr_struct.rs43
-rw-r--r--src/test/ui/reachable/expr_struct.stderr32
-rw-r--r--src/test/ui/reachable/expr_tup.rs28
-rw-r--r--src/test/ui/reachable/expr_tup.stderr20
-rw-r--r--src/test/ui/reachable/expr_type.rs23
-rw-r--r--src/test/ui/reachable/expr_type.stderr14
-rw-r--r--src/test/ui/reachable/expr_unary.rs21
-rw-r--r--src/test/ui/reachable/expr_unary.stderr8
-rw-r--r--src/test/ui/reachable/expr_while.rs38
-rw-r--r--src/test/ui/reachable/expr_while.stderr31
-rw-r--r--src/test/ui/resolve/token-error-correct-3.stderr4
-rw-r--r--src/test/ui/span/borrowck-borrow-overloaded-auto-deref-mut.stderr8
-rw-r--r--src/test/ui/span/borrowck-borrow-overloaded-deref-mut.stderr4
-rw-r--r--src/test/ui/span/borrowck-object-mutability.stderr3
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-18343.rs (renamed from src/test/compile-fail/issue-18343.rs)6
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-18343.stderr10
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-2392.rs (renamed from src/test/compile-fail/issue-2392.rs)39
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-2392.stderr90
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-32128.rs (renamed from src/test/compile-fail/issue-32128.rs)6
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-32128.stderr10
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-33784.rs (renamed from src/test/compile-fail/issue-33784.rs)9
-rw-r--r--src/test/ui/suggestions/confuse-field-and-method/issue-33784.stderr26
196 files changed, 2445 insertions, 2285 deletions
diff --git a/src/test/codegen/panic-abort-windows.rs b/src/test/codegen/panic-abort-windows.rs
new file mode 100644
index 00000000000..2ab15277084
--- /dev/null
+++ b/src/test/codegen/panic-abort-windows.rs
@@ -0,0 +1,41 @@
+// Copyright 2015 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.
+
+// ignore-tidy-linelength
+
+// This test is for *-windows-msvc only.
+// ignore-android
+// ignore-bitrig
+// ignore-macos
+// ignore-dragonfly
+// ignore-freebsd
+// ignore-haiku
+// ignore-ios
+// ignore-linux
+// ignore-netbsd
+// ignore-openbsd
+// ignore-solaris
+// ignore-emscripten
+
+// compile-flags: -C no-prepopulate-passes -C panic=abort -O
+
+#![crate_type = "lib"]
+
+// CHECK: Function Attrs: uwtable
+// CHECK-NEXT: define void @normal_uwtable()
+#[no_mangle]
+pub fn normal_uwtable() {
+}
+
+// CHECK: Function Attrs: nounwind uwtable
+// CHECK-NEXT: define void @extern_uwtable()
+#[no_mangle]
+pub extern fn extern_uwtable() {
+}
diff --git a/src/test/compile-fail-fulldeps/qquote.rs b/src/test/compile-fail-fulldeps/qquote.rs
index bd25561065b..272bf1150ca 100644
--- a/src/test/compile-fail-fulldeps/qquote.rs
+++ b/src/test/compile-fail-fulldeps/qquote.rs
@@ -27,14 +27,6 @@ fn main() {
         &ps,
         syntax::ext::expand::ExpansionConfig::default("qquote".to_string()),
         &mut resolver);
-    cx.bt_push(syntax::codemap::ExpnInfo {
-        call_site: DUMMY_SP,
-        callee: syntax::codemap::NameAndSpan {
-            format: syntax::codemap::MacroBang(Symbol::intern("")),
-            allow_internal_unstable: false,
-            span: None,
-        }
-    });
     let cx = &mut cx;
 
     assert_eq!(pprust::expr_to_string(&*quote_expr!(&cx, 23)), "23");
diff --git a/src/test/compile-fail/augmented-assignments.rs b/src/test/compile-fail/augmented-assignments.rs
index 92a8b10669c..736aa465aa7 100644
--- a/src/test/compile-fail/augmented-assignments.rs
+++ b/src/test/compile-fail/augmented-assignments.rs
@@ -27,7 +27,7 @@ fn main() {
     x;  //~ value moved here
 
     let y = Int(2);
-    //~^use `mut y` here to make mutable
+    //~^ consider changing this to `mut y`
     y   //~ error: cannot borrow immutable local variable `y` as mutable
         //~| cannot borrow
     +=
diff --git a/src/test/compile-fail/borrowck/borrowck-issue-14498.rs b/src/test/compile-fail/borrowck/borrowck-issue-14498.rs
index 64033623fe2..8b7ccedd697 100644
--- a/src/test/compile-fail/borrowck/borrowck-issue-14498.rs
+++ b/src/test/compile-fail/borrowck/borrowck-issue-14498.rs
@@ -23,7 +23,7 @@ fn indirect_write_to_imm_box() {
     let mut x: isize = 1;
     let y: Box<_> = box &mut x;
     let p = &y;
-    ***p = 2; //~ ERROR cannot assign to data in an immutable container
+    ***p = 2; //~ ERROR cannot assign to data in a `&` reference
     drop(p);
 }
 
@@ -43,7 +43,6 @@ fn borrow_in_var_from_var_via_imm_box() {
     let p = &y;
     let q = &***p;
     **y = 2; //~ ERROR cannot assign to `**y` because it is borrowed
-    //~^         ERROR cannot assign to data in an immutable container
     drop(p);
     drop(q);
 }
@@ -64,7 +63,6 @@ fn borrow_in_var_from_field_via_imm_box() {
     let p = &y;
     let q = &***p;
     **y = 2; //~ ERROR cannot assign to `**y` because it is borrowed
-    //~^         ERROR cannot assign to data in an immutable container
     drop(p);
     drop(q);
 }
@@ -85,7 +83,6 @@ fn borrow_in_field_from_var_via_imm_box() {
     let p = &y.a;
     let q = &***p;
     **y.a = 2; //~ ERROR cannot assign to `**y.a` because it is borrowed
-    //~^           ERROR cannot assign to data in an immutable container
     drop(p);
     drop(q);
 }
@@ -106,7 +103,6 @@ fn borrow_in_field_from_field_via_imm_box() {
     let p = &y.a;
     let q = &***p;
     **y.a = 2; //~ ERROR cannot assign to `**y.a` because it is borrowed
-    //~^           ERROR cannot assign to data in an immutable container
     drop(p);
     drop(q);
 }
diff --git a/src/test/compile-fail/coerce-to-bang-cast.rs b/src/test/compile-fail/coerce-to-bang-cast.rs
new file mode 100644
index 00000000000..57d2192e635
--- /dev/null
+++ b/src/test/compile-fail/coerce-to-bang-cast.rs
@@ -0,0 +1,23 @@
+// Copyright 2016 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.
+
+#![feature(never_type)]
+
+fn foo(x: usize, y: !, z: usize) { }
+
+fn cast_a() {
+    let y = {return; 22} as !;
+}
+
+fn cast_b() {
+    let y = 22 as !; //~ ERROR non-scalar cast
+}
+
+fn main() { }
diff --git a/src/test/compile-fail/coerce-to-bang.rs b/src/test/compile-fail/coerce-to-bang.rs
new file mode 100644
index 00000000000..870665bb49e
--- /dev/null
+++ b/src/test/compile-fail/coerce-to-bang.rs
@@ -0,0 +1,90 @@
+// Copyright 2016 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.
+
+#![feature(never_type)]
+
+fn foo(x: usize, y: !, z: usize) { }
+
+fn call_foo_a() {
+    // FIXME(#40800) -- accepted beacuse divergence happens **before**
+    // the coercion to `!`, but within same expression. Not clear that
+    // these are the rules we want.
+    foo(return, 22, 44);
+}
+
+fn call_foo_b() {
+    // Divergence happens in the argument itself, definitely ok.
+    foo(22, return, 44);
+}
+
+fn call_foo_c() {
+    // This test fails because the divergence happens **after** the
+    // coercion to `!`:
+    foo(22, 44, return); //~ ERROR mismatched types
+}
+
+fn call_foo_d() {
+    // This test passes because `a` has type `!`:
+    let a: ! = return;
+    let b = 22;
+    let c = 44;
+    foo(a, b, c); // ... and hence a reference to `a` is expected to diverge.
+}
+
+fn call_foo_e() {
+    // This test probably could pass but we don't *know* that `a`
+    // has type `!` so we don't let it work.
+    let a = return;
+    let b = 22;
+    let c = 44;
+    foo(a, b, c); //~ ERROR mismatched types
+}
+
+fn call_foo_f() {
+    // This fn fails because `a` has type `usize`, and hence a
+    // reference to is it **not** considered to diverge.
+    let a: usize = return;
+    let b = 22;
+    let c = 44;
+    foo(a, b, c); //~ ERROR mismatched types
+}
+
+fn array_a() {
+    // Accepted: return is coerced to `!` just fine, and then `22` can be
+    // because we already diverged.
+    let x: [!; 2] = [return, 22];
+}
+
+fn array_b() {
+    // Error: divergence has not yet occurred.
+    let x: [!; 2] = [22, return]; //~ ERROR mismatched types
+}
+
+fn tuple_a() {
+    // No divergence at all.
+    let x: (usize, !, usize) = (22, 44, 66); //~ ERROR mismatched types
+}
+
+fn tuple_b() {
+    // Divergence happens before coercion: OK
+    let x: (usize, !, usize) = (return, 44, 66);
+}
+
+fn tuple_c() {
+    // Divergence happens before coercion: OK
+    let x: (usize, !, usize) = (22, return, 66);
+}
+
+fn tuple_d() {
+    // Error: divergence happens too late
+    let x: (usize, !, usize) = (22, 44, return); //~ ERROR mismatched types
+}
+
+fn main() { }
diff --git a/src/test/compile-fail/coherence-overlapping-inherent-impl-trait.rs b/src/test/compile-fail/coherence-overlapping-inherent-impl-trait.rs
index 08e8605e917..158d3606104 100644
--- a/src/test/compile-fail/coherence-overlapping-inherent-impl-trait.rs
+++ b/src/test/compile-fail/coherence-overlapping-inherent-impl-trait.rs
@@ -9,10 +9,8 @@
 // except according to those terms.
 
 #![allow(dead_code)]
-#![deny(overlapping_inherent_impls)]
 
 trait C {}
 impl C { fn f() {} } //~ ERROR duplicate definitions with name `f`
-//~^ WARN: this was previously accepted
 impl C { fn f() {} }
 fn main() { }
diff --git a/src/test/compile-fail/defaulted-unit-warning.rs b/src/test/compile-fail/defaulted-unit-warning.rs
index 5213a189714..ed6263d0fdb 100644
--- a/src/test/compile-fail/defaulted-unit-warning.rs
+++ b/src/test/compile-fail/defaulted-unit-warning.rs
@@ -22,16 +22,6 @@ impl Deserialize for () {
     }
 }
 
-fn doit() -> Result<(), String> {
-    let _ = match Deserialize::deserialize() {
-        //~^ ERROR code relies on type
-        //~| WARNING previously accepted
-        Ok(x) => x,
-        Err(e) => return Err(e),
-    };
-    Ok(())
-}
-
 trait ImplementedForUnitButNotNever {}
 
 impl ImplementedForUnitButNotNever for () {}
@@ -46,6 +36,6 @@ fn smeg() {
 }
 
 fn main() {
-    let _ = doit();
+    smeg();
 }
 
diff --git a/src/test/run-make/graphviz-flowgraph/f23.rs b/src/test/compile-fail/diverging-tuple-parts-39485.rs
index 52341a3fbd4..eedad08ab55 100644
--- a/src/test/run-make/graphviz-flowgraph/f23.rs
+++ b/src/test/compile-fail/diverging-tuple-parts-39485.rs
@@ -8,24 +8,18 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#[allow(unreachable_code)]
-pub fn expr_while_23() {
-    let mut x = 23;
-    let mut y = 23;
-    let mut z = 23;
+// After #39485, this test used to pass, but that change was reverted
+// due to numerous inference failures like #39808, so it now fails
+// again. #39485 made it so that diverging types never propagate
+// upward; but we now do propagate such types upward in many more
+// cases.
 
-    while x > 0 {
-        x -= 1;
-
-        while y > 0 {
-            y -= 1;
-
-            while z > 0 { z -= 1; }
+fn g() {
+    &panic!() //~ ERROR mismatched types
+}
 
-            if x > 10 {
-                return;
-                "unreachable";
-            }
-        }
-    }
+fn f() -> isize {
+    (return 1, return 2) //~ ERROR mismatched types
 }
+
+fn main() {}
diff --git a/src/test/compile-fail/imports/macro-paths.rs b/src/test/compile-fail/imports/macro-paths.rs
index 48e7ca0eee4..7c19917acc4 100644
--- a/src/test/compile-fail/imports/macro-paths.rs
+++ b/src/test/compile-fail/imports/macro-paths.rs
@@ -25,7 +25,6 @@ fn f() {
     bar::m! { //~ ERROR ambiguous
               //~| NOTE macro-expanded items do not shadow when used in a macro invocation path
         mod bar { pub use two_macros::m; } //~ NOTE could refer to the name defined here
-                                           //~^^^ NOTE in this expansion
     }
 }
 
@@ -37,6 +36,5 @@ fn g() {
     baz::m! { //~ ERROR ambiguous
               //~| NOTE macro-expanded items do not shadow when used in a macro invocation path
         mod baz { pub use two_macros::m; } //~ NOTE could refer to the name defined here
-                                           //~^^^ NOTE in this expansion
     }
 }
diff --git a/src/test/compile-fail/imports/macros.rs b/src/test/compile-fail/imports/macros.rs
index cfa7681dc22..06b0964a3b1 100644
--- a/src/test/compile-fail/imports/macros.rs
+++ b/src/test/compile-fail/imports/macros.rs
@@ -28,7 +28,6 @@ mod m2 {
     m! { //~ ERROR ambiguous
          //~| NOTE macro-expanded macro imports do not shadow
         use foo::m; //~ NOTE could refer to the name imported here
-                    //~^^^ NOTE in this expansion
     }
 }
 
@@ -43,7 +42,6 @@ mod m3 {
         m! { //~ ERROR ambiguous
              //~| NOTE macro-expanded macro imports do not shadow
             use two_macros::n as m; //~ NOTE could refer to the name imported here
-                                    //~^^^ NOTE in this expansion
         }
     }
 }
diff --git a/src/test/compile-fail/imports/shadow_builtin_macros.rs b/src/test/compile-fail/imports/shadow_builtin_macros.rs
new file mode 100644
index 00000000000..a7f1cf3c9d3
--- /dev/null
+++ b/src/test/compile-fail/imports/shadow_builtin_macros.rs
@@ -0,0 +1,71 @@
+// Copyright 2017 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.
+
+// aux-build:two_macros.rs
+
+#![feature(use_extern_macros)]
+
+mod foo {
+    extern crate two_macros;
+    pub use self::two_macros::m as panic;
+}
+
+mod m1 {
+    use foo::panic; // ok
+    fn f() { panic!(); }
+}
+
+mod m2 {
+    use foo::*; //~ NOTE `panic` could refer to the name imported here
+    fn f() { panic!(); } //~ ERROR ambiguous
+    //~| NOTE `panic` is also a builtin macro
+    //~| NOTE consider adding an explicit import of `panic` to disambiguate
+}
+
+mod m3 {
+    ::two_macros::m!(use foo::panic;); //~ NOTE `panic` could refer to the name imported here
+    fn f() { panic!(); } //~ ERROR ambiguous
+    //~| NOTE `panic` is also a builtin macro
+    //~| NOTE macro-expanded macro imports do not shadow
+}
+
+mod m4 {
+    macro_rules! panic { () => {} } // ok
+    panic!();
+}
+
+mod m5 {
+    macro_rules! m { () => {
+        macro_rules! panic { () => {} } //~ ERROR `panic` is already in scope
+        //~| NOTE macro-expanded `macro_rules!`s may not shadow existing macros
+    } }
+    m!(); //~ NOTE in this expansion
+    //~| NOTE in this expansion
+    panic!();
+}
+
+#[macro_use(n)] //~ NOTE `n` could also refer to the name imported here
+extern crate two_macros;
+mod bar {
+    pub use two_macros::m as n;
+}
+
+mod m6 {
+    use bar::n; // ok
+    n!();
+}
+
+mod m7 {
+    use bar::*; //~ NOTE `n` could refer to the name imported here
+    n!(); //~ ERROR ambiguous
+    //~| NOTE consider adding an explicit import of `n` to disambiguate
+}
+
+fn main() {}
diff --git a/src/test/compile-fail/index-bot.rs b/src/test/compile-fail/index-bot.rs
index 70c362303ae..05b04723300 100644
--- a/src/test/compile-fail/index-bot.rs
+++ b/src/test/compile-fail/index-bot.rs
@@ -9,5 +9,5 @@
 // except according to those terms.
 
 fn main() {
-    (return)[0]; //~ ERROR the type of this value must be known in this context
+    (return)[0]; //~ ERROR cannot index a value of type `!`
 }
diff --git a/src/test/compile-fail/indexing-requires-a-uint.rs b/src/test/compile-fail/indexing-requires-a-uint.rs
index 1889d76c03c..624944f7344 100644
--- a/src/test/compile-fail/indexing-requires-a-uint.rs
+++ b/src/test/compile-fail/indexing-requires-a-uint.rs
@@ -13,7 +13,7 @@
 
 fn main() {
     fn bar<T>(_: T) {}
-    [0][0u8]; //~ ERROR: the trait bound `u8: std::slice::SliceIndex<{integer}>` is not satisfied
+    [0][0u8]; //~ ERROR: the trait bound `u8: std::slice::SliceIndex<[{integer}]>` is not satisfied
 
     [0][0]; // should infer to be a usize
 
diff --git a/src/test/compile-fail/inherent-overlap.rs b/src/test/compile-fail/inherent-overlap.rs
index 00d41244639..18e77ddfd2c 100644
--- a/src/test/compile-fail/inherent-overlap.rs
+++ b/src/test/compile-fail/inherent-overlap.rs
@@ -17,7 +17,6 @@ struct Foo;
 
 impl Foo {
     fn id() {} //~ ERROR duplicate definitions
-    //~^ WARN previously accepted
 }
 
 impl Foo {
@@ -28,7 +27,6 @@ struct Bar<T>(T);
 
 impl<T> Bar<T> {
     fn bar(&self) {} //~ ERROR duplicate definitions
-    //~^ WARN previously accepted
 }
 
 impl Bar<u32> {
@@ -39,7 +37,6 @@ struct Baz<T>(T);
 
 impl<T: Copy> Baz<T> {
     fn baz(&self) {} //~ ERROR duplicate definitions
-    //~^ WARN previously accepted
 }
 
 impl<T> Baz<Vec<T>> {
diff --git a/src/test/compile-fail/integral-indexing.rs b/src/test/compile-fail/integral-indexing.rs
index 1815d0e978a..659b08b55a0 100644
--- a/src/test/compile-fail/integral-indexing.rs
+++ b/src/test/compile-fail/integral-indexing.rs
@@ -19,8 +19,8 @@ pub fn main() {
     v[3i32]; //~ERROR : std::ops::Index<i32>` is not satisfied
     s.as_bytes()[3_usize];
     s.as_bytes()[3];
-    s.as_bytes()[3u8];  //~ERROR : std::slice::SliceIndex<u8>` is not satisfied
-    s.as_bytes()[3i8];  //~ERROR : std::slice::SliceIndex<u8>` is not satisfied
-    s.as_bytes()[3u32]; //~ERROR : std::slice::SliceIndex<u8>` is not satisfied
-    s.as_bytes()[3i32]; //~ERROR : std::slice::SliceIndex<u8>` is not satisfied
+    s.as_bytes()[3u8];  //~ERROR : std::slice::SliceIndex<[u8]>` is not satisfied
+    s.as_bytes()[3i8];  //~ERROR : std::slice::SliceIndex<[u8]>` is not satisfied
+    s.as_bytes()[3u32]; //~ERROR : std::slice::SliceIndex<[u8]>` is not satisfied
+    s.as_bytes()[3i32]; //~ERROR : std::slice::SliceIndex<[u8]>` is not satisfied
 }
diff --git a/src/test/run-pass/inference-changes-39485.rs b/src/test/compile-fail/issue-10176.rs
index 193c66b2a2a..c968844ae21 100644
--- a/src/test/run-pass/inference-changes-39485.rs
+++ b/src/test/compile-fail/issue-10176.rs
@@ -8,12 +8,12 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn g() {
-    &panic!()
-}
-
 fn f() -> isize {
     (return 1, return 2)
+//~^ ERROR mismatched types
+//~| expected type `isize`
+//~| found type `(!, !)`
+//~| expected isize, found tuple
 }
 
 fn main() {}
diff --git a/src/test/compile-fail/issue-13847.rs b/src/test/compile-fail/issue-13847.rs
index aa823d9a70e..0314f109a7c 100644
--- a/src/test/compile-fail/issue-13847.rs
+++ b/src/test/compile-fail/issue-13847.rs
@@ -9,5 +9,5 @@
 // except according to those terms.
 
 fn main() {
-    return.is_failure //~ ERROR the type of this value must be known in this context
+    return.is_failure //~ ERROR no field `is_failure` on type `!`
 }
diff --git a/src/test/compile-fail/issue-15207.rs b/src/test/compile-fail/issue-15207.rs
index 61877775269..70da8cf4169 100644
--- a/src/test/compile-fail/issue-15207.rs
+++ b/src/test/compile-fail/issue-15207.rs
@@ -10,7 +10,7 @@
 
 fn main() {
     loop {
-        break.push(1) //~ ERROR the type of this value must be known in this context
+        break.push(1) //~ ERROR no method named `push` found for type `!`
         ;
     }
 }
diff --git a/src/test/compile-fail/issue-17373.rs b/src/test/compile-fail/issue-17373.rs
index 6895893adc4..f6e6a8a0852 100644
--- a/src/test/compile-fail/issue-17373.rs
+++ b/src/test/compile-fail/issue-17373.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 fn main() {
-    *return //~ ERROR the type of this value must be known in this context
+    *return //~ ERROR type `!` cannot be dereferenced
     ;
 }
diff --git a/src/test/compile-fail/issue-18532.rs b/src/test/compile-fail/issue-18532.rs
index 94eab97c42a..2be5fdcac4e 100644
--- a/src/test/compile-fail/issue-18532.rs
+++ b/src/test/compile-fail/issue-18532.rs
@@ -13,6 +13,5 @@
 // into it.
 
 fn main() {
-    (return)((),());
-    //~^ ERROR the type of this value must be known
+    (return)((),()); //~ ERROR expected function, found `!`
 }
diff --git a/src/test/compile-fail/issue-2149.rs b/src/test/compile-fail/issue-2149.rs
index 9143a226a24..256c5d8e6f7 100644
--- a/src/test/compile-fail/issue-2149.rs
+++ b/src/test/compile-fail/issue-2149.rs
@@ -21,5 +21,5 @@ impl<A> vec_monad<A> for Vec<A> {
 }
 fn main() {
     ["hi"].bind(|x| [x] );
-    //~^ ERROR no method named `bind` found for type `[&'static str; 1]` in the current scope
+    //~^ ERROR no method named `bind` found for type `[&str; 1]` in the current scope
 }
diff --git a/src/test/compile-fail/issue-25385.rs b/src/test/compile-fail/issue-25385.rs
index 51d7baaf3e9..4aacb6840e9 100644
--- a/src/test/compile-fail/issue-25385.rs
+++ b/src/test/compile-fail/issue-25385.rs
@@ -21,5 +21,4 @@ fn main() {
 
     foo!(1i32.foo());
     //~^ ERROR no method named `foo` found for type `i32` in the current scope
-    //~^^ NOTE in this expansion of foo!
 }
diff --git a/src/test/compile-fail/issue-27042.rs b/src/test/compile-fail/issue-27042.rs
index f31389f1337..23afa4b6296 100644
--- a/src/test/compile-fail/issue-27042.rs
+++ b/src/test/compile-fail/issue-27042.rs
@@ -12,14 +12,14 @@
 
 fn main() {
     let _: i32 =
-        'a: //~ ERROR mismatched types
-        loop { break };
+        'a: // in this case, the citation is just the `break`:
+        loop { break }; //~ ERROR mismatched types
     let _: i32 =
         'b: //~ ERROR mismatched types
-        while true { break };
+        while true { break }; // but here we cite the whole loop
     let _: i32 =
         'c: //~ ERROR mismatched types
-        for _ in None { break };
+        for _ in None { break }; // but here we cite the whole loop
     let _: i32 =
         'd: //~ ERROR mismatched types
         while let Some(_) = None { break };
diff --git a/src/test/compile-fail/issue-33819.rs b/src/test/compile-fail/issue-33819.rs
index 9c9677c1e98..499e7e54947 100644
--- a/src/test/compile-fail/issue-33819.rs
+++ b/src/test/compile-fail/issue-33819.rs
@@ -12,7 +12,7 @@ fn main() {
     match op {
         Some(ref v) => { let a = &mut v; },
         //~^ ERROR:cannot borrow immutable
-        //~| use `ref mut v` here to make mutable
+        //~| cannot borrow mutably
         None => {},
     }
 }
diff --git a/src/test/run-make/graphviz-flowgraph/f05.rs b/src/test/compile-fail/issue-40000.rs
index 616d822bed0..9be114ebcb6 100644
--- a/src/test/run-make/graphviz-flowgraph/f05.rs
+++ b/src/test/compile-fail/issue-40000.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,6 +8,14 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn pat_tup_5() {
-    let (_x, _y) = (5, 55);
+#![feature(closure_to_fn_coercion)]
+
+fn main() {
+    let bar: fn(&mut u32) = |_| {}; //~ ERROR mismatched types
+    //~| expected concrete lifetime, found bound lifetime parameter
+
+    fn foo(x: Box<Fn(&i32)>) {}
+    let bar = Box::new(|x: &i32| {}) as Box<Fn(_)>;
+    foo(bar); //~ ERROR mismatched types
+    //~| expected concrete lifetime, found bound lifetime parameter
 }
diff --git a/src/test/compile-fail/issue-40749.rs b/src/test/compile-fail/issue-40749.rs
new file mode 100644
index 00000000000..261ed49d10c
--- /dev/null
+++ b/src/test/compile-fail/issue-40749.rs
@@ -0,0 +1,16 @@
+// Copyright 2017 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.
+
+fn main() {
+    [0; ..10];
+    //~^ ERROR mismatched types
+    //~| expected type `usize`
+    //~| found type `std::ops::RangeTo<{integer}>`
+}
diff --git a/src/test/compile-fail/issue-40845.rs b/src/test/compile-fail/issue-40845.rs
new file mode 100644
index 00000000000..c5604a0427b
--- /dev/null
+++ b/src/test/compile-fail/issue-40845.rs
@@ -0,0 +1,16 @@
+// Copyright 2017 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.
+
+trait T { m!(); } //~ ERROR cannot find macro `m!` in this scope
+
+struct S;
+impl S { m!(); } //~ ERROR cannot find macro `m!` in this scope
+
+fn main() {}
diff --git a/src/test/compile-fail/issue-5500.rs b/src/test/compile-fail/issue-5500.rs
new file mode 100644
index 00000000000..1cbb7588e17
--- /dev/null
+++ b/src/test/compile-fail/issue-5500.rs
@@ -0,0 +1,17 @@
+// Copyright 2013 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.
+
+fn main() {
+    &panic!()
+    //~^ ERROR mismatched types
+    //~| expected type `()`
+    //~| found type `&_`
+    //~| expected (), found reference
+}
diff --git a/src/test/compile-fail/loop-break-value.rs b/src/test/compile-fail/loop-break-value.rs
index d4f29597486..a4143218992 100644
--- a/src/test/compile-fail/loop-break-value.rs
+++ b/src/test/compile-fail/loop-break-value.rs
@@ -40,37 +40,40 @@ fn main() {
         loop {
             break 'while_loop 123;
             //~^ ERROR `break` with value from a `while` loop
-            //~| ERROR mismatched types
             break 456;
             break 789;
         };
     }
 
-    'while_let_loop: while let Some(_) = Some(()) {
+    while let Some(_) = Some(()) {
         if break () { //~ ERROR `break` with value from a `while let` loop
-            break;
-            break None;
-            //~^ ERROR `break` with value from a `while let` loop
-            //~| ERROR mismatched types
         }
+    }
+
+    while let Some(_) = Some(()) {
+        break None;
+        //~^ ERROR `break` with value from a `while let` loop
+    }
+
+    'while_let_loop: while let Some(_) = Some(()) {
         loop {
             break 'while_let_loop "nope";
             //~^ ERROR `break` with value from a `while let` loop
-            //~| ERROR mismatched types
             break 33;
         };
     }
 
-    'for_loop: for _ in &[1,2,3] {
+    for _ in &[1,2,3] {
         break (); //~ ERROR `break` with value from a `for` loop
         break [()];
         //~^ ERROR `break` with value from a `for` loop
-        //~| ERROR mismatched types
+    }
+
+    'for_loop: for _ in &[1,2,3] {
         loop {
             break Some(3);
             break 'for_loop Some(17);
             //~^ ERROR `break` with value from a `for` loop
-            //~| ERROR mismatched types
         };
     }
 
diff --git a/src/test/compile-fail/match-no-arms-unreachable-after.rs b/src/test/compile-fail/match-no-arms-unreachable-after.rs
new file mode 100644
index 00000000000..db08f5e5e66
--- /dev/null
+++ b/src/test/compile-fail/match-no-arms-unreachable-after.rs
@@ -0,0 +1,22 @@
+// Copyright 2016 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.
+
+#![allow(warnings)]
+#![deny(unreachable_code)]
+
+enum Void { }
+
+fn foo(v: Void) {
+    match v { }
+    let x = 2; //~ ERROR unreachable
+}
+
+fn main() {
+}
diff --git a/src/test/run-make/graphviz-flowgraph/f07.rs b/src/test/compile-fail/match-unreachable-warning-with-diverging-discrim.rs
index f36b8d0abc7..aae0f3135d8 100644
--- a/src/test/run-make/graphviz-flowgraph/f07.rs
+++ b/src/test/compile-fail/match-unreachable-warning-with-diverging-discrim.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,10 +8,9 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(slice_patterns)]
+#![allow(unused_parens)]
+#![deny(unreachable_code)]
 
-pub fn pat_vec_7() {
-    match [7, 77, 777, 7777] {
-        [x, y, ..] => x + y
-    };
+fn main() {
+    match (return) { } //~ ERROR unreachable expression
 }
diff --git a/src/test/compile-fail/match-unresolved-one-arm.rs b/src/test/compile-fail/match-unresolved-one-arm.rs
new file mode 100644
index 00000000000..ea0f8db99e8
--- /dev/null
+++ b/src/test/compile-fail/match-unresolved-one-arm.rs
@@ -0,0 +1,17 @@
+// Copyright 2016 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.
+
+fn foo<T>() -> T { panic!("Rocks for my pillow") }
+
+fn main() {
+    let x = match () { //~ ERROR type annotations needed
+        () => foo() // T here should be unresolved
+    };
+}
diff --git a/src/test/compile-fail/mut-suggestion.rs b/src/test/compile-fail/mut-suggestion.rs
index 242ad7aee8d..0015c8e5c00 100644
--- a/src/test/compile-fail/mut-suggestion.rs
+++ b/src/test/compile-fail/mut-suggestion.rs
@@ -17,7 +17,7 @@ impl S {
 }
 
 fn func(arg: S) {
-    //~^ here to make mutable
+    //~^ consider changing this to `mut arg`
     arg.mutate();
     //~^ ERROR cannot borrow immutable argument
     //~| cannot borrow mutably
@@ -25,7 +25,7 @@ fn func(arg: S) {
 
 fn main() {
     let local = S;
-    //~^ here to make mutable
+    //~^ consider changing this to `mut local`
     local.mutate();
     //~^ ERROR cannot borrow immutable local variable
     //~| cannot borrow mutably
diff --git a/src/test/compile-fail/never-assign-dead-code.rs b/src/test/compile-fail/never-assign-dead-code.rs
index 57e0bca6a6d..d8752e1c050 100644
--- a/src/test/compile-fail/never-assign-dead-code.rs
+++ b/src/test/compile-fail/never-assign-dead-code.rs
@@ -16,5 +16,6 @@
 fn main() {
     let x: ! = panic!("aah"); //~ ERROR unused
     drop(x); //~ ERROR unreachable
+    //~^ ERROR unreachable
 }
 
diff --git a/src/test/compile-fail/never-assign-wrong-type.rs b/src/test/compile-fail/never-assign-wrong-type.rs
index 53d96aaf4fe..d854e6eb203 100644
--- a/src/test/compile-fail/never-assign-wrong-type.rs
+++ b/src/test/compile-fail/never-assign-wrong-type.rs
@@ -11,6 +11,7 @@
 // Test that we can't use another type in place of !
 
 #![feature(never_type)]
+#![deny(warnings)]
 
 fn main() {
     let x: ! = "hello"; //~ ERROR mismatched types
diff --git a/src/test/compile-fail/never-fallback.rs b/src/test/compile-fail/never-fallback.rs
deleted file mode 100644
index a43b1a45fe9..00000000000
--- a/src/test/compile-fail/never-fallback.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2015 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 that diverging types default to ! when feature(never_type) is enabled. This test is the
-// same as run-pass/unit-fallback.rs except that ! is enabled.
-
-#![feature(never_type)]
-
-trait Balls: Sized {
-    fn smeg() -> Result<Self, ()>;
-}
-
-impl Balls for () {
-    fn smeg() -> Result<(), ()> { Ok(()) }
-}
-
-struct Flah;
-
-impl Flah {
-    fn flah<T: Balls>(&self) -> Result<T, ()> {
-        T::smeg()
-    }
-}
-
-fn doit() -> Result<(), ()> {
-    // The type of _ is unconstrained here and should default to !
-    let _ = try!(Flah.flah()); //~ ERROR the trait bound
-    Ok(())
-}
-
-fn main() {
-    let _ = doit();
-}
-
diff --git a/src/test/compile-fail/object-safety-supertrait-mentions-Self.rs b/src/test/compile-fail/object-safety-supertrait-mentions-Self.rs
index 74d1ad62f14..a93c056c410 100644
--- a/src/test/compile-fail/object-safety-supertrait-mentions-Self.rs
+++ b/src/test/compile-fail/object-safety-supertrait-mentions-Self.rs
@@ -24,7 +24,7 @@ fn make_bar<T:Bar<u32>>(t: &T) -> &Bar<u32> {
 
 fn make_baz<T:Baz>(t: &T) -> &Baz {
     //~^ ERROR E0038
-    //~| NOTE the trait cannot use `Self` as a type parameter in the supertrait listing
+    //~| NOTE the trait cannot use `Self` as a type parameter in the supertraits or where-clauses
     //~| NOTE the trait `Baz` cannot be made into an object
     t
 }
diff --git a/src/test/compile-fail/on-unimplemented/slice-index.rs b/src/test/compile-fail/on-unimplemented/slice-index.rs
index d28b823ddc1..1a9ed2dd6e4 100644
--- a/src/test/compile-fail/on-unimplemented/slice-index.rs
+++ b/src/test/compile-fail/on-unimplemented/slice-index.rs
@@ -20,10 +20,10 @@ fn main() {
     let x = &[1, 2, 3] as &[i32];
     x[1i32]; //~ ERROR E0277
              //~| NOTE slice indices are of type `usize` or ranges of `usize`
-             //~| NOTE trait `std::slice::SliceIndex<i32>` is not implemented for `i32`
+             //~| NOTE trait `std::slice::SliceIndex<[i32]>` is not implemented for `i32`
              //~| NOTE required because of the requirements on the impl of `std::ops::Index<i32>`
     x[..1i32]; //~ ERROR E0277
                //~| NOTE slice indices are of type `usize` or ranges of `usize`
-               //~| NOTE trait `std::slice::SliceIndex<i32>` is not implemented for `std::ops::RangeTo<i32>`
+               //~| NOTE trait `std::slice::SliceIndex<[i32]>` is not implemented for `std::ops::RangeTo<i32>`
                //~| NOTE requirements on the impl of `std::ops::Index<std::ops::RangeTo<i32>>`
 }
diff --git a/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test.rs b/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test.rs
index 208f1a0e2ee..d17b604717e 100644
--- a/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test.rs
+++ b/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test.rs
@@ -10,7 +10,8 @@
 
 mod foo {
     type T = ();
-    struct S1(pub(foo) (), pub(T), pub(crate) (), pub(((), T)));
-    struct S2(pub((foo)) ()); //~ ERROR expected `,`, found `(`
-                              //~| ERROR expected one of `;` or `where`, found `(`
+    struct S1(pub(in foo) (), pub(T), pub(crate) (), pub(((), T)));
+    struct S2(pub((foo)) ());
+    //~^ ERROR expected `,`, found `(`
+    //~| ERROR expected one of `;` or `where`, found `(`
 }
diff --git a/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test2.rs b/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test2.rs
index 57769646e3b..166d5e27e8d 100644
--- a/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test2.rs
+++ b/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test2.rs
@@ -11,9 +11,10 @@
 macro_rules! define_struct {
     ($t:ty) => {
         struct S1(pub $t);
-        struct S2(pub (foo) ());
-        struct S3(pub $t ()); //~ ERROR expected `,`, found `(`
-                              //~| ERROR expected one of `;` or `where`, found `(`
+        struct S2(pub (in foo) ());
+        struct S3(pub $t ());
+        //~^ ERROR expected `,`, found `(`
+        //~| ERROR expected one of `;` or `where`, found `(`
     }
 }
 
diff --git a/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test3.rs b/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test3.rs
index db3358f7d50..edab175f4cd 100644
--- a/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test3.rs
+++ b/src/test/compile-fail/privacy/restricted/tuple-struct-fields/test3.rs
@@ -11,9 +11,10 @@
 macro_rules! define_struct {
     ($t:ty) => {
         struct S1(pub($t));
-        struct S2(pub (foo) ());
-        struct S3(pub($t) ()); //~ ERROR expected `,`, found `(`
-                               //~| ERROR expected one of `;` or `where`, found `(`
+        struct S2(pub (in foo) ());
+        struct S3(pub($t) ());
+        //~^ ERROR expected `,`, found `(`
+        //~| ERROR expected one of `;` or `where`, found `(`
     }
 }
 
diff --git a/src/test/compile-fail/region-bounds-on-objects-and-type-parameters.rs b/src/test/compile-fail/region-bounds-on-objects-and-type-parameters.rs
index 503b577b1f1..fd8d5ff9e7e 100644
--- a/src/test/compile-fail/region-bounds-on-objects-and-type-parameters.rs
+++ b/src/test/compile-fail/region-bounds-on-objects-and-type-parameters.rs
@@ -18,7 +18,7 @@ trait SomeTrait { }
 
 // Bounds on object types:
 
-struct Foo<'a,'b,'c> { //~ ERROR parameter `'b` is never used
+struct Foo<'a,'b,'c> { //~ ERROR parameter `'c` is never used
     // All of these are ok, because we can derive exactly one bound:
     a: Box<IsStatic>,
     b: Box<Is<'static>>,
diff --git a/src/test/compile-fail/region-invariant-static-error-reporting.rs b/src/test/compile-fail/region-invariant-static-error-reporting.rs
index ac0167e08bd..d25674a74b1 100644
--- a/src/test/compile-fail/region-invariant-static-error-reporting.rs
+++ b/src/test/compile-fail/region-invariant-static-error-reporting.rs
@@ -16,9 +16,6 @@
 // error-pattern:cannot infer
 // error-pattern:cannot outlive the lifetime 'a
 // error-pattern:must be valid for the static lifetime
-// error-pattern:cannot infer
-// error-pattern:cannot outlive the lifetime 'a
-// error-pattern:must be valid for the static lifetime
 
 struct Invariant<'a>(Option<&'a mut &'a mut ()>);
 
diff --git a/src/test/compile-fail/regions-bounds.rs b/src/test/compile-fail/regions-bounds.rs
index 64dbf27b78e..5ce80be98d9 100644
--- a/src/test/compile-fail/regions-bounds.rs
+++ b/src/test/compile-fail/regions-bounds.rs
@@ -16,17 +16,11 @@ struct an_enum<'a>(&'a isize);
 struct a_class<'a> { x:&'a isize }
 
 fn a_fn1<'a,'b>(e: an_enum<'a>) -> an_enum<'b> {
-    return e; //~  ERROR mismatched types
-              //~| expected type `an_enum<'b>`
-              //~| found type `an_enum<'a>`
-              //~| lifetime mismatch
+    return e; //~ ERROR mismatched types
 }
 
 fn a_fn3<'a,'b>(e: a_class<'a>) -> a_class<'b> {
-    return e; //~  ERROR mismatched types
-              //~| expected type `a_class<'b>`
-              //~| found type `a_class<'a>`
-              //~| lifetime mismatch
+    return e; //~ ERROR mismatched types
 }
 
 fn main() { }
diff --git a/src/test/compile-fail/static-lifetime-bound.rs b/src/test/compile-fail/static-lifetime-bound.rs
new file mode 100644
index 00000000000..38534ab0a36
--- /dev/null
+++ b/src/test/compile-fail/static-lifetime-bound.rs
@@ -0,0 +1,16 @@
+// Copyright 2017 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.
+
+fn f<'a: 'static>(_: &'a i32) {} //~WARN unnecessary lifetime parameter `'a`
+
+fn main() {
+    let x = 0;
+    f(&x); //~ERROR does not live long enough
+}
diff --git a/src/test/parse-fail/mod_file_not_exist.rs b/src/test/parse-fail/mod_file_not_exist.rs
index 7736394a6f5..4bc6e706d42 100644
--- a/src/test/parse-fail/mod_file_not_exist.rs
+++ b/src/test/parse-fail/mod_file_not_exist.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// ignore-windows
+
 // compile-flags: -Z parse-only
 
 mod not_a_real_file; //~ ERROR file not found for module `not_a_real_file`
diff --git a/src/test/parse-fail/mod_file_not_exist_windows.rs b/src/test/parse-fail/mod_file_not_exist_windows.rs
new file mode 100644
index 00000000000..c58603b4398
--- /dev/null
+++ b/src/test/parse-fail/mod_file_not_exist_windows.rs
@@ -0,0 +1,32 @@
+// Copyright 2012 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.
+
+// ignore-gnu
+// ignore-android
+// ignore-bitrig
+// ignore-macos
+// ignore-dragonfly
+// ignore-freebsd
+// ignore-haiku
+// ignore-ios
+// ignore-linux
+// ignore-netbsd
+// ignore-openbsd
+// ignore-solaris
+// ignore-emscripten
+
+// compile-flags: -Z parse-only
+
+mod not_a_real_file; //~ ERROR file not found for module `not_a_real_file`
+//~^ HELP name the file either not_a_real_file.rs or not_a_real_file\mod.rs inside the directory
+
+fn main() {
+    assert_eq!(mod_file_aux::bar(), 10);
+}
diff --git a/src/test/run-fail-fulldeps/qquote.rs b/src/test/run-fail-fulldeps/qquote.rs
index d692bb519c1..5518ab47c2b 100644
--- a/src/test/run-fail-fulldeps/qquote.rs
+++ b/src/test/run-fail-fulldeps/qquote.rs
@@ -30,14 +30,6 @@ fn main() {
         &ps,
         syntax::ext::expand::ExpansionConfig::default("qquote".to_string()),
         &mut resolver);
-    cx.bt_push(syntax::codemap::ExpnInfo {
-        call_site: DUMMY_SP,
-        callee: syntax::codemap::NameAndSpan {
-            format: syntax::codemap::MacroBang(Symbol::intern("")),
-            allow_internal_unstable: false,
-            span: None,
-        }
-    });
     let cx = &mut cx;
 
     println!("{}", pprust::expr_to_string(&*quote_expr!(&cx, 23)));
diff --git a/src/test/run-make/graphviz-flowgraph/Makefile b/src/test/run-make/graphviz-flowgraph/Makefile
deleted file mode 100644
index 5740a36359c..00000000000
--- a/src/test/run-make/graphviz-flowgraph/Makefile
+++ /dev/null
@@ -1,38 +0,0 @@
--include ../tools.mk
-
-FILES=f00.rs f01.rs f02.rs f03.rs f04.rs f05.rs f06.rs f07.rs \
-      f08.rs f09.rs f10.rs f11.rs f12.rs f13.rs f14.rs f15.rs \
-      f16.rs f17.rs f18.rs f19.rs f20.rs f21.rs f22.rs f23.rs \
-      f24.rs f25.rs
-
-
-# all: $(patsubst %.rs,$(TMPDIR)/%.dot,$(FILES)) $(patsubst %.rs,$(TMPDIR)/%.pp,$(FILES))
-all: $(patsubst %.rs,$(TMPDIR)/%.check,$(FILES))
-
-
-RUSTC_LIB=$(RUSTC) --crate-type=lib
-
-define FIND_LAST_BLOCK
-LASTBLOCKNUM_$(1) := $(shell $(RUSTC_LIB) -Z unstable-options --pretty=expanded,identified $(1) \
-			 | grep block
-			 | tail -1
-			 | sed -e 's@.*/\* block \([0-9]*\) \*/.*@\1@')
-endef
-
-ifeq ($(findstring rustc,$(RUSTC)),)
-$(error Must set RUSTC)
-endif
-
-$(TMPDIR)/%.pp: %.rs
-	$(RUSTC_LIB) --pretty=expanded,identified $< -o $@
-
-$(TMPDIR)/%.dot: %.rs
-	$(eval $(call FIND_LAST_BLOCK,$<))
-	$(RUSTC_LIB) -Z unstable-options --unpretty flowgraph,unlabelled=$(LASTBLOCKNUM_$<) $< -o $@.tmp
-	cat $@.tmp | sed -e 's@ (id=[0-9]*)@@g' \
-                         -e 's@\[label=""\]@@' \
-                         -e 's@digraph [a-zA-Z0-9_]* @digraph block @' \
-                     > $@
-
-$(TMPDIR)/%.check: %.rs $(TMPDIR)/%.dot
-	diff -u $(patsubst %.rs,$(TMPDIR)/%.dot,$<) $(patsubst %.rs,%.dot-expected.dot,$<)
diff --git a/src/test/run-make/graphviz-flowgraph/f00.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f00.dot-expected.dot
deleted file mode 100644
index 8ea8370ab23..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f00.dot-expected.dot
+++ /dev/null
@@ -1,9 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="block { }"];
-    N3[label="expr { }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f01.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f01.dot-expected.dot
deleted file mode 100644
index 5982fbea769..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f01.dot-expected.dot
+++ /dev/null
@@ -1,13 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 1"];
-    N3[label="stmt 1;"];
-    N4[label="block { 1; }"];
-    N5[label="expr { 1; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f02.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f02.dot-expected.dot
deleted file mode 100644
index 1639785bd68..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f02.dot-expected.dot
+++ /dev/null
@@ -1,13 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="local _x"];
-    N3[label="stmt let _x: isize;"];
-    N4[label="block { let _x: isize; }"];
-    N5[label="expr { let _x: isize; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f03.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f03.dot-expected.dot
deleted file mode 100644
index b0ae00d8167..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f03.dot-expected.dot
+++ /dev/null
@@ -1,17 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 3"];
-    N3[label="expr 4"];
-    N4[label="expr 3 + 4"];
-    N5[label="stmt 3 + 4;"];
-    N6[label="block { 3 + 4; }"];
-    N7[label="expr { 3 + 4; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f04.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f04.dot-expected.dot
deleted file mode 100644
index 41ace15a4c6..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f04.dot-expected.dot
+++ /dev/null
@@ -1,15 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 4"];
-    N3[label="local _x"];
-    N4[label="stmt let _x = 4;"];
-    N5[label="block { let _x = 4; }"];
-    N6[label="expr { let _x = 4; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f04.rs b/src/test/run-make/graphviz-flowgraph/f04.rs
deleted file mode 100644
index 2a0ac8ac9e5..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f04.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 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.
-
-pub fn pat_id_4() {
-    let _x = 4;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f05.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f05.dot-expected.dot
deleted file mode 100644
index 72b8ae71751..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f05.dot-expected.dot
+++ /dev/null
@@ -1,23 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 5"];
-    N3[label="expr 55"];
-    N4[label="expr (5, 55)"];
-    N5[label="local _x"];
-    N6[label="local _y"];
-    N7[label="pat (_x, _y)"];
-    N8[label="stmt let (_x, _y) = (5, 55);"];
-    N9[label="block { let (_x, _y) = (5, 55); }"];
-    N10[label="expr { let (_x, _y) = (5, 55); }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f06.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f06.dot-expected.dot
deleted file mode 100644
index acba71ef625..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f06.dot-expected.dot
+++ /dev/null
@@ -1,19 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 6"];
-    N3[label="expr S6{val: 6,}"];
-    N4[label="local _x"];
-    N5[label="pat S6 { val: _x }"];
-    N6[label="stmt let S6 { val: _x } = S6{val: 6,};"];
-    N7[label="block { let S6 { val: _x } = S6{val: 6,}; }"];
-    N8[label="expr { let S6 { val: _x } = S6{val: 6,}; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f06.rs b/src/test/run-make/graphviz-flowgraph/f06.rs
deleted file mode 100644
index 538ef2af898..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f06.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 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.
-
-struct S6 { val: isize }
-pub fn pat_struct_6() {
-    let S6 { val: _x } = S6{ val: 6 };
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f07.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f07.dot-expected.dot
deleted file mode 100644
index 251e2b39f14..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f07.dot-expected.dot
+++ /dev/null
@@ -1,39 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 7"];
-    N3[label="expr 77"];
-    N4[label="expr 777"];
-    N5[label="expr 7777"];
-    N6[label="expr [7, 77, 777, 7777]"];
-    N7[label="expr match [7, 77, 777, 7777] { [x, y, ..] => x + y, }"];
-    N8[label="(dummy_node)"];
-    N9[label="local x"];
-    N10[label="local y"];
-    N11[label="pat _"];
-    N12[label="pat [x, y, ..]"];
-    N13[label="expr x"];
-    N14[label="expr y"];
-    N15[label="expr x + y"];
-    N16[label="stmt match [7, 77, 777, 7777] { [x, y, ..] => x + y, };"];
-    N17[label="block { match [7, 77, 777, 7777] { [x, y, ..] => x + y, }; }"];
-    N18[label="expr { match [7, 77, 777, 7777] { [x, y, ..] => x + y, }; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N8;
-    N8 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N7;
-    N7 -> N16;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f08.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f08.dot-expected.dot
deleted file mode 100644
index e2779c9414a..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f08.dot-expected.dot
+++ /dev/null
@@ -1,38 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 8"];
-    N3[label="local x"];
-    N4[label="stmt let x = 8;"];
-    N5[label="local _y"];
-    N6[label="stmt let _y;"];
-    N7[label="expr x"];
-    N8[label="expr 88"];
-    N9[label="expr x > 88"];
-    N10[label="expr 888"];
-    N11[label="expr _y"];
-    N12[label="expr _y = 888"];
-    N13[label="stmt _y = 888;"];
-    N14[label="block { _y = 888; }"];
-    N15[label="expr if x > 88 { _y = 888; }"];
-    N16[label="block { let x = 8; let _y; if x > 88 { _y = 888; } }"];
-    N17[label="expr { let x = 8; let _y; if x > 88 { _y = 888; } }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N9 -> N15;
-    N14 -> N15;
-    N15 -> N16;
-    N16 -> N17;
-    N17 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f09.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f09.dot-expected.dot
deleted file mode 100644
index 536abde91e8..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f09.dot-expected.dot
+++ /dev/null
@@ -1,54 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 91"];
-    N3[label="local x"];
-    N4[label="stmt let x = 91;"];
-    N5[label="local _y"];
-    N6[label="stmt let _y;"];
-    N7[label="expr x"];
-    N8[label="expr 92"];
-    N9[label="expr x > 92"];
-    N10[label="expr 93"];
-    N11[label="expr _y"];
-    N12[label="expr _y = 93"];
-    N13[label="stmt _y = 93;"];
-    N14[label="block { _y = 93; }"];
-    N15[label="expr 94"];
-    N16[label="expr 95"];
-    N17[label="expr 94 + 95"];
-    N18[label="expr _y"];
-    N19[label="expr _y = 94 + 95"];
-    N20[label="stmt _y = 94 + 95;"];
-    N21[label="block { _y = 94 + 95; }"];
-    N22[label="expr { _y = 94 + 95; }"];
-    N23[label="expr if x > 92 { _y = 93; } else { _y = 94 + 95; }"];
-    N24[label="block { let x = 91; let _y; if x > 92 { _y = 93; } else { _y = 94 + 95; } }"];
-    N25[label="expr { let x = 91; let _y; if x > 92 { _y = 93; } else { _y = 94 + 95; } }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N9 -> N15;
-    N15 -> N16;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N20 -> N21;
-    N21 -> N22;
-    N14 -> N23;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N25;
-    N25 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f10.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f10.dot-expected.dot
deleted file mode 100644
index 07b9c744a71..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f10.dot-expected.dot
+++ /dev/null
@@ -1,36 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 10"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 10;"];
-    N5[label="(dummy_node)"];
-    N6[label="expr while x > 0 { x -= 1; }"];
-    N7[label="expr x"];
-    N8[label="expr 0"];
-    N9[label="expr x > 0"];
-    N10[label="expr 1"];
-    N11[label="expr x"];
-    N12[label="expr x -= 1"];
-    N13[label="stmt x -= 1;"];
-    N14[label="block { x -= 1; }"];
-    N15[label="block { let mut x = 10; while x > 0 { x -= 1; } }"];
-    N16[label="expr { let mut x = 10; while x > 0 { x -= 1; } }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N6;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N14 -> N5;
-    N6 -> N15;
-    N15 -> N16;
-    N16 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f10.rs b/src/test/run-make/graphviz-flowgraph/f10.rs
deleted file mode 100644
index 0ca7cc5ee86..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f10.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 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.
-
-pub fn expr_while_10() {
-    let mut x = 10;
-    while x > 0 {
-        x -= 1;
-    }
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f11.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f11.dot-expected.dot
deleted file mode 100644
index 70034d299ba..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f11.dot-expected.dot
+++ /dev/null
@@ -1,35 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 11"];
-    N3[label="local mut _x"];
-    N4[label="stmt let mut _x = 11;"];
-    N5[label="(dummy_node)"];
-    N6[label="expr loop  { _x -= 1; }"];
-    N7[label="expr 1"];
-    N8[label="expr _x"];
-    N9[label="expr _x -= 1"];
-    N10[label="stmt _x -= 1;"];
-    N11[label="block { _x -= 1; }"];
-    N12[label="stmt loop  { _x -= 1; }"];
-    N13[label="expr \"unreachable\""];
-    N14[label="stmt \"unreachable\";"];
-    N15[label="block { let mut _x = 11; loop  { _x -= 1; } \"unreachable\"; }"];
-    N16[label="expr { let mut _x = 11; loop  { _x -= 1; } \"unreachable\"; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N5;
-    N6 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N16;
-    N16 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f11.rs b/src/test/run-make/graphviz-flowgraph/f11.rs
deleted file mode 100644
index d0f3452119e..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f11.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_loop_11() {
-    let mut _x = 11;
-    loop {
-        _x -= 1;
-    }
-    "unreachable";
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f12.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f12.dot-expected.dot
deleted file mode 100644
index 245afc43504..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f12.dot-expected.dot
+++ /dev/null
@@ -1,50 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 12"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 12;"];
-    N5[label="(dummy_node)"];
-    N6[label="expr loop  { x -= 1; if x == 2 { break ; \"unreachable\"; } }"];
-    N7[label="expr 1"];
-    N8[label="expr x"];
-    N9[label="expr x -= 1"];
-    N10[label="stmt x -= 1;"];
-    N11[label="expr x"];
-    N12[label="expr 2"];
-    N13[label="expr x == 2"];
-    N14[label="expr break"];
-    N15[label="(dummy_node)"];
-    N16[label="stmt break ;"];
-    N17[label="expr \"unreachable\""];
-    N18[label="stmt \"unreachable\";"];
-    N19[label="block { break ; \"unreachable\"; }"];
-    N20[label="expr if x == 2 { break ; \"unreachable\"; }"];
-    N21[label="block { x -= 1; if x == 2 { break ; \"unreachable\"; } }"];
-    N22[label="block { let mut x = 12; loop  { x -= 1; if x == 2 { break ; \"unreachable\"; } } }"];
-    N23[label="expr { let mut x = 12; loop  { x -= 1; if x == 2 { break ; \"unreachable\"; } } }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N14 -> N6;
-    N15 -> N16;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N19;
-    N13 -> N20;
-    N19 -> N20;
-    N20 -> N21;
-    N21 -> N5;
-    N6 -> N22;
-    N22 -> N23;
-    N23 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f12.rs b/src/test/run-make/graphviz-flowgraph/f12.rs
deleted file mode 100644
index 90b146340b6..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f12.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_loop_12() {
-    let mut x = 12;
-    loop {
-        x -= 1;
-        if x == 2 { break; "unreachable"; }
-    }
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f13.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f13.dot-expected.dot
deleted file mode 100644
index 0f268bd0f2a..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f13.dot-expected.dot
+++ /dev/null
@@ -1,54 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr E13::E13b"];
-    N3[label="expr 13"];
-    N4[label="expr E13::E13b(13)"];
-    N5[label="local x"];
-    N6[label="stmt let x = E13::E13b(13);"];
-    N7[label="local _y"];
-    N8[label="stmt let _y;"];
-    N9[label="expr x"];
-    N10[label="expr match x { E13::E13a => _y = 1, E13::E13b(v) => _y = v + 1, }"];
-    N11[label="(dummy_node)"];
-    N12[label="pat E13::E13a"];
-    N13[label="expr 1"];
-    N14[label="expr _y"];
-    N15[label="expr _y = 1"];
-    N16[label="(dummy_node)"];
-    N17[label="local v"];
-    N18[label="pat E13::E13b(v)"];
-    N19[label="expr v"];
-    N20[label="expr 1"];
-    N21[label="expr v + 1"];
-    N22[label="expr _y"];
-    N23[label="expr _y = v + 1"];
-    N24[label="block {\l    let x = E13::E13b(13);\l    let _y;\l    match x { E13::E13a => _y = 1, E13::E13b(v) => _y = v + 1, }\l}\l"];
-    N25[label="expr {\l    let x = E13::E13b(13);\l    let _y;\l    match x { E13::E13a => _y = 1, E13::E13b(v) => _y = v + 1, }\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N12;
-    N12 -> N11;
-    N11 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N10;
-    N9 -> N17;
-    N17 -> N18;
-    N18 -> N16;
-    N16 -> N19;
-    N19 -> N20;
-    N20 -> N21;
-    N21 -> N22;
-    N22 -> N23;
-    N23 -> N10;
-    N10 -> N24;
-    N24 -> N25;
-    N25 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f13.rs b/src/test/run-make/graphviz-flowgraph/f13.rs
deleted file mode 100644
index babb283c734..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f13.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 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.
-
-enum E13 { E13a, E13b(isize) }
-pub fn expr_match_13() {
-    let x = E13::E13b(13); let _y;
-    match x {
-        E13::E13a => _y = 1,
-        E13::E13b(v) => _y = v + 1,
-    }
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f14.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f14.dot-expected.dot
deleted file mode 100644
index 719a6cf2619..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f14.dot-expected.dot
+++ /dev/null
@@ -1,36 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 14"];
-    N3[label="local x"];
-    N4[label="stmt let x = 14;"];
-    N5[label="expr x"];
-    N6[label="expr 1"];
-    N7[label="expr x > 1"];
-    N8[label="expr return"];
-    N9[label="(dummy_node)"];
-    N10[label="stmt return;"];
-    N11[label="expr \"unreachable\""];
-    N12[label="stmt \"unreachable\";"];
-    N13[label="block { return; \"unreachable\"; }"];
-    N14[label="expr if x > 1 { return; \"unreachable\"; }"];
-    N15[label="block { let x = 14; if x > 1 { return; \"unreachable\"; } }"];
-    N16[label="expr { let x = 14; if x > 1 { return; \"unreachable\"; } }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N1;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N13;
-    N7 -> N14;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N16;
-    N16 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f14.rs b/src/test/run-make/graphviz-flowgraph/f14.rs
deleted file mode 100644
index 98ff095c831..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f14.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_ret_14() {
-    let x = 14;
-    if x > 1 {
-        return;
-        "unreachable";
-    }
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f15.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f15.dot-expected.dot
deleted file mode 100644
index d8cbd8411e2..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f15.dot-expected.dot
+++ /dev/null
@@ -1,105 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 15"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 15;"];
-    N5[label="expr 151"];
-    N6[label="local mut y"];
-    N7[label="stmt let mut y = 151;"];
-    N8[label="(dummy_node)"];
-    N9[label="expr \'outer:\l    loop  {\l        \'inner:\l            loop  {\l                if x == 1 { break \'outer ; \"unreachable\"; }\l                if y >= 2 { break ; \"unreachable\"; }\l                y -= 3;\l            }\l        y -= 4;\l        x -= 5;\l    }\l"];
-    N10[label="(dummy_node)"];
-    N11[label="expr \'inner:\l    loop  {\l        if x == 1 { break \'outer ; \"unreachable\"; }\l        if y >= 2 { break ; \"unreachable\"; }\l        y -= 3;\l    }\l"];
-    N12[label="expr x"];
-    N13[label="expr 1"];
-    N14[label="expr x == 1"];
-    N15[label="expr break \'outer"];
-    N16[label="(dummy_node)"];
-    N17[label="stmt break \'outer ;"];
-    N18[label="expr \"unreachable\""];
-    N19[label="stmt \"unreachable\";"];
-    N20[label="block { break \'outer ; \"unreachable\"; }"];
-    N21[label="expr if x == 1 { break \'outer ; \"unreachable\"; }"];
-    N22[label="stmt if x == 1 { break \'outer ; \"unreachable\"; }"];
-    N23[label="expr y"];
-    N24[label="expr 2"];
-    N25[label="expr y >= 2"];
-    N26[label="expr break"];
-    N27[label="(dummy_node)"];
-    N28[label="stmt break ;"];
-    N29[label="expr \"unreachable\""];
-    N30[label="stmt \"unreachable\";"];
-    N31[label="block { break ; \"unreachable\"; }"];
-    N32[label="expr if y >= 2 { break ; \"unreachable\"; }"];
-    N33[label="stmt if y >= 2 { break ; \"unreachable\"; }"];
-    N34[label="expr 3"];
-    N35[label="expr y"];
-    N36[label="expr y -= 3"];
-    N37[label="stmt y -= 3;"];
-    N38[label="block {\l    if x == 1 { break \'outer ; \"unreachable\"; }\l    if y >= 2 { break ; \"unreachable\"; }\l    y -= 3;\l}\l"];
-    N39[label="stmt \'inner:\l    loop  {\l        if x == 1 { break \'outer ; \"unreachable\"; }\l        if y >= 2 { break ; \"unreachable\"; }\l        y -= 3;\l    }\l"];
-    N40[label="expr 4"];
-    N41[label="expr y"];
-    N42[label="expr y -= 4"];
-    N43[label="stmt y -= 4;"];
-    N44[label="expr 5"];
-    N45[label="expr x"];
-    N46[label="expr x -= 5"];
-    N47[label="stmt x -= 5;"];
-    N48[label="block {\l    \'inner:\l        loop  {\l            if x == 1 { break \'outer ; \"unreachable\"; }\l            if y >= 2 { break ; \"unreachable\"; }\l            y -= 3;\l        }\l    y -= 4;\l    x -= 5;\l}\l"];
-    N49[label="block {\l    let mut x = 15;\l    let mut y = 151;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { break \'outer ; \"unreachable\"; }\l                    if y >= 2 { break ; \"unreachable\"; }\l                    y -= 3;\l                }\l            y -= 4;\l            x -= 5;\l        }\l}\l"];
-    N50[label="expr {\l    let mut x = 15;\l    let mut y = 151;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { break \'outer ; \"unreachable\"; }\l                    if y >= 2 { break ; \"unreachable\"; }\l                    y -= 3;\l                }\l            y -= 4;\l            x -= 5;\l        }\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N10;
-    N10 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N9;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N14 -> N21;
-    N20 -> N21;
-    N21 -> N22;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N25;
-    N25 -> N26;
-    N26 -> N11;
-    N27 -> N28;
-    N28 -> N29;
-    N29 -> N30;
-    N30 -> N31;
-    N25 -> N32;
-    N31 -> N32;
-    N32 -> N33;
-    N33 -> N34;
-    N34 -> N35;
-    N35 -> N36;
-    N36 -> N37;
-    N37 -> N38;
-    N38 -> N10;
-    N11 -> N39;
-    N39 -> N40;
-    N40 -> N41;
-    N41 -> N42;
-    N42 -> N43;
-    N43 -> N44;
-    N44 -> N45;
-    N45 -> N46;
-    N46 -> N47;
-    N47 -> N48;
-    N48 -> N8;
-    N9 -> N49;
-    N49 -> N50;
-    N50 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f15.rs b/src/test/run-make/graphviz-flowgraph/f15.rs
deleted file mode 100644
index 056458e5558..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f15.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_break_label_15() {
-    let mut x = 15;
-    let mut y = 151;
-    'outer: loop {
-        'inner: loop {
-            if x == 1 {
-                break 'outer;
-                "unreachable";
-            }
-            if y >= 2 {
-                break;
-                "unreachable";
-            }
-            y -= 3;
-        }
-        y -= 4;
-        x -= 5;
-    }
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f16.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f16.dot-expected.dot
deleted file mode 100644
index b11881247fb..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f16.dot-expected.dot
+++ /dev/null
@@ -1,111 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 16"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 16;"];
-    N5[label="expr 16"];
-    N6[label="local mut y"];
-    N7[label="stmt let mut y = 16;"];
-    N8[label="(dummy_node)"];
-    N9[label="expr \'outer:\l    loop  {\l        \'inner:\l            loop  {\l                if x == 1 { continue \'outer ; \"unreachable\"; }\l                if y >= 1 { break ; \"unreachable\"; }\l                y -= 1;\l            }\l        y -= 1;\l        x -= 1;\l    }\l"];
-    N10[label="(dummy_node)"];
-    N11[label="expr \'inner:\l    loop  {\l        if x == 1 { continue \'outer ; \"unreachable\"; }\l        if y >= 1 { break ; \"unreachable\"; }\l        y -= 1;\l    }\l"];
-    N12[label="expr x"];
-    N13[label="expr 1"];
-    N14[label="expr x == 1"];
-    N15[label="expr continue \'outer"];
-    N16[label="(dummy_node)"];
-    N17[label="stmt continue \'outer ;"];
-    N18[label="expr \"unreachable\""];
-    N19[label="stmt \"unreachable\";"];
-    N20[label="block { continue \'outer ; \"unreachable\"; }"];
-    N21[label="expr if x == 1 { continue \'outer ; \"unreachable\"; }"];
-    N22[label="stmt if x == 1 { continue \'outer ; \"unreachable\"; }"];
-    N23[label="expr y"];
-    N24[label="expr 1"];
-    N25[label="expr y >= 1"];
-    N26[label="expr break"];
-    N27[label="(dummy_node)"];
-    N28[label="stmt break ;"];
-    N29[label="expr \"unreachable\""];
-    N30[label="stmt \"unreachable\";"];
-    N31[label="block { break ; \"unreachable\"; }"];
-    N32[label="expr if y >= 1 { break ; \"unreachable\"; }"];
-    N33[label="stmt if y >= 1 { break ; \"unreachable\"; }"];
-    N34[label="expr 1"];
-    N35[label="expr y"];
-    N36[label="expr y -= 1"];
-    N37[label="stmt y -= 1;"];
-    N38[label="block {\l    if x == 1 { continue \'outer ; \"unreachable\"; }\l    if y >= 1 { break ; \"unreachable\"; }\l    y -= 1;\l}\l"];
-    N39[label="stmt \'inner:\l    loop  {\l        if x == 1 { continue \'outer ; \"unreachable\"; }\l        if y >= 1 { break ; \"unreachable\"; }\l        y -= 1;\l    }\l"];
-    N40[label="expr 1"];
-    N41[label="expr y"];
-    N42[label="expr y -= 1"];
-    N43[label="stmt y -= 1;"];
-    N44[label="expr 1"];
-    N45[label="expr x"];
-    N46[label="expr x -= 1"];
-    N47[label="stmt x -= 1;"];
-    N48[label="block {\l    \'inner:\l        loop  {\l            if x == 1 { continue \'outer ; \"unreachable\"; }\l            if y >= 1 { break ; \"unreachable\"; }\l            y -= 1;\l        }\l    y -= 1;\l    x -= 1;\l}\l"];
-    N49[label="stmt \'outer:\l    loop  {\l        \'inner:\l            loop  {\l                if x == 1 { continue \'outer ; \"unreachable\"; }\l                if y >= 1 { break ; \"unreachable\"; }\l                y -= 1;\l            }\l        y -= 1;\l        x -= 1;\l    }\l"];
-    N50[label="expr \"unreachable\""];
-    N51[label="stmt \"unreachable\";"];
-    N52[label="block {\l    let mut x = 16;\l    let mut y = 16;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { continue \'outer ; \"unreachable\"; }\l                    if y >= 1 { break ; \"unreachable\"; }\l                    y -= 1;\l                }\l            y -= 1;\l            x -= 1;\l        }\l    \"unreachable\";\l}\l"];
-    N53[label="expr {\l    let mut x = 16;\l    let mut y = 16;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { continue \'outer ; \"unreachable\"; }\l                    if y >= 1 { break ; \"unreachable\"; }\l                    y -= 1;\l                }\l            y -= 1;\l            x -= 1;\l        }\l    \"unreachable\";\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N10;
-    N10 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N8;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N14 -> N21;
-    N20 -> N21;
-    N21 -> N22;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N25;
-    N25 -> N26;
-    N26 -> N11;
-    N27 -> N28;
-    N28 -> N29;
-    N29 -> N30;
-    N30 -> N31;
-    N25 -> N32;
-    N31 -> N32;
-    N32 -> N33;
-    N33 -> N34;
-    N34 -> N35;
-    N35 -> N36;
-    N36 -> N37;
-    N37 -> N38;
-    N38 -> N10;
-    N11 -> N39;
-    N39 -> N40;
-    N40 -> N41;
-    N41 -> N42;
-    N42 -> N43;
-    N43 -> N44;
-    N44 -> N45;
-    N45 -> N46;
-    N46 -> N47;
-    N47 -> N48;
-    N48 -> N8;
-    N9 -> N49;
-    N49 -> N50;
-    N50 -> N51;
-    N51 -> N52;
-    N52 -> N53;
-    N53 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f16.rs b/src/test/run-make/graphviz-flowgraph/f16.rs
deleted file mode 100644
index e225b0080e5..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f16.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_continue_label_16() {
-    let mut x = 16;
-    let mut y = 16;
-    'outer: loop {
-        'inner: loop {
-            if x == 1 {
-                continue 'outer;
-                "unreachable";
-            }
-            if y >= 1 {
-                break;
-                "unreachable";
-            }
-            y -= 1;
-        }
-        y -= 1;
-        x -= 1;
-    }
-    "unreachable";
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f17.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f17.dot-expected.dot
deleted file mode 100644
index 705eece7755..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f17.dot-expected.dot
+++ /dev/null
@@ -1,21 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 1"];
-    N3[label="expr 7"];
-    N4[label="expr 17"];
-    N5[label="expr [1, 7, 17]"];
-    N6[label="local _v"];
-    N7[label="stmt let _v = [1, 7, 17];"];
-    N8[label="block { let _v = [1, 7, 17]; }"];
-    N9[label="expr { let _v = [1, 7, 17]; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f17.rs b/src/test/run-make/graphviz-flowgraph/f17.rs
deleted file mode 100644
index 23f5bb8a1eb..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f17.rs
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 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.
-
-pub fn expr_vec_17() {
-    let _v = [1, 7, 17];
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f18.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f18.dot-expected.dot
deleted file mode 100644
index b0491fe6e27..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f18.dot-expected.dot
+++ /dev/null
@@ -1,23 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="stmt fn inner(x: isize) -> isize { x + x }"];
-    N3[label="expr inner"];
-    N4[label="expr inner"];
-    N5[label="expr 18"];
-    N6[label="expr inner(18)"];
-    N7[label="expr inner(inner(18))"];
-    N8[label="stmt inner(inner(18));"];
-    N9[label="block {\l    fn inner(x: isize) -> isize { x + x }\l    inner(inner(18));\l}\l"];
-    N10[label="expr {\l    fn inner(x: isize) -> isize { x + x }\l    inner(inner(18));\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f18.rs b/src/test/run-make/graphviz-flowgraph/f18.rs
deleted file mode 100644
index cbf8aa5db43..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f18.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 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.
-
-pub fn expr_call_18() {
-    fn inner(x:isize) -> isize { x + x }
-    inner(inner(18));
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f19.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f19.dot-expected.dot
deleted file mode 100644
index 223978c3d76..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f19.dot-expected.dot
+++ /dev/null
@@ -1,29 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="stmt struct S19 {\l    x: isize,\l}\l"];
-    N3[label="stmt impl S19 {\l    fn inner(self: Self) -> S19 { S19{x: self.x + self.x,} }\l}\l"];
-    N4[label="expr 19"];
-    N5[label="expr S19{x: 19,}"];
-    N6[label="local s"];
-    N7[label="stmt let s = S19{x: 19,};"];
-    N8[label="expr s"];
-    N9[label="expr s.inner()"];
-    N10[label="expr s.inner().inner()"];
-    N11[label="stmt s.inner().inner();"];
-    N12[label="block {\l    struct S19 {\l        x: isize,\l    }\l    impl S19 {\l        fn inner(self: Self) -> S19 { S19{x: self.x + self.x,} }\l    }\l    let s = S19{x: 19,};\l    s.inner().inner();\l}\l"];
-    N13[label="expr {\l    struct S19 {\l        x: isize,\l    }\l    impl S19 {\l        fn inner(self: Self) -> S19 { S19{x: self.x + self.x,} }\l    }\l    let s = S19{x: 19,};\l    s.inner().inner();\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N13;
-    N13 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f19.rs b/src/test/run-make/graphviz-flowgraph/f19.rs
deleted file mode 100644
index 78c15dd64ad..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f19.rs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 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.
-
-pub fn expr_method_call_19() {
-    struct S19 { x: isize }
-    impl S19 { fn inner(self) -> S19 { S19 { x: self.x + self.x } } }
-    let s = S19 { x: 19 };
-    s.inner().inner();
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f20.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f20.dot-expected.dot
deleted file mode 100644
index 120eab4dac9..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f20.dot-expected.dot
+++ /dev/null
@@ -1,29 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 2"];
-    N3[label="expr 0"];
-    N4[label="expr 20"];
-    N5[label="expr [2, 0, 20]"];
-    N6[label="local v"];
-    N7[label="stmt let v = [2, 0, 20];"];
-    N8[label="expr v"];
-    N9[label="expr 20"];
-    N10[label="expr v[20]"];
-    N11[label="stmt v[20];"];
-    N12[label="block { let v = [2, 0, 20]; v[20]; }"];
-    N13[label="expr { let v = [2, 0, 20]; v[20]; }"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N12;
-    N12 -> N13;
-    N13 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f20.rs b/src/test/run-make/graphviz-flowgraph/f20.rs
deleted file mode 100644
index d7349932355..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f20.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 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.
-
-pub fn expr_index_20() {
-    let v = [2, 0, 20];
-    v[20];
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f21.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f21.dot-expected.dot
deleted file mode 100644
index 370dcdd8554..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f21.dot-expected.dot
+++ /dev/null
@@ -1,101 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 15"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 15;"];
-    N5[label="expr 151"];
-    N6[label="local mut y"];
-    N7[label="stmt let mut y = 151;"];
-    N8[label="(dummy_node)"];
-    N9[label="expr \'outer:\l    loop  {\l        \'inner:\l            loop  {\l                if x == 1 { break \'outer ; \"unreachable\"; }\l                if y >= 2 { return; \"unreachable\"; }\l                y -= 3;\l                x -= 5;\l            }\l        \"unreachable\";\l    }\l"];
-    N10[label="(dummy_node)"];
-    N11[label="expr \'inner:\l    loop  {\l        if x == 1 { break \'outer ; \"unreachable\"; }\l        if y >= 2 { return; \"unreachable\"; }\l        y -= 3;\l        x -= 5;\l    }\l"];
-    N12[label="expr x"];
-    N13[label="expr 1"];
-    N14[label="expr x == 1"];
-    N15[label="expr break \'outer"];
-    N16[label="(dummy_node)"];
-    N17[label="stmt break \'outer ;"];
-    N18[label="expr \"unreachable\""];
-    N19[label="stmt \"unreachable\";"];
-    N20[label="block { break \'outer ; \"unreachable\"; }"];
-    N21[label="expr if x == 1 { break \'outer ; \"unreachable\"; }"];
-    N22[label="stmt if x == 1 { break \'outer ; \"unreachable\"; }"];
-    N23[label="expr y"];
-    N24[label="expr 2"];
-    N25[label="expr y >= 2"];
-    N26[label="expr return"];
-    N27[label="(dummy_node)"];
-    N28[label="stmt return;"];
-    N29[label="expr \"unreachable\""];
-    N30[label="stmt \"unreachable\";"];
-    N31[label="block { return; \"unreachable\"; }"];
-    N32[label="expr if y >= 2 { return; \"unreachable\"; }"];
-    N33[label="stmt if y >= 2 { return; \"unreachable\"; }"];
-    N34[label="expr 3"];
-    N35[label="expr y"];
-    N36[label="expr y -= 3"];
-    N37[label="stmt y -= 3;"];
-    N38[label="expr 5"];
-    N39[label="expr x"];
-    N40[label="expr x -= 5"];
-    N41[label="stmt x -= 5;"];
-    N42[label="block {\l    if x == 1 { break \'outer ; \"unreachable\"; }\l    if y >= 2 { return; \"unreachable\"; }\l    y -= 3;\l    x -= 5;\l}\l"];
-    N43[label="stmt \'inner:\l    loop  {\l        if x == 1 { break \'outer ; \"unreachable\"; }\l        if y >= 2 { return; \"unreachable\"; }\l        y -= 3;\l        x -= 5;\l    }\l"];
-    N44[label="expr \"unreachable\""];
-    N45[label="stmt \"unreachable\";"];
-    N46[label="block {\l    \'inner:\l        loop  {\l            if x == 1 { break \'outer ; \"unreachable\"; }\l            if y >= 2 { return; \"unreachable\"; }\l            y -= 3;\l            x -= 5;\l        }\l    \"unreachable\";\l}\l"];
-    N47[label="block {\l    let mut x = 15;\l    let mut y = 151;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { break \'outer ; \"unreachable\"; }\l                    if y >= 2 { return; \"unreachable\"; }\l                    y -= 3;\l                    x -= 5;\l                }\l            \"unreachable\";\l        }\l}\l"];
-    N48[label="expr {\l    let mut x = 15;\l    let mut y = 151;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { break \'outer ; \"unreachable\"; }\l                    if y >= 2 { return; \"unreachable\"; }\l                    y -= 3;\l                    x -= 5;\l                }\l            \"unreachable\";\l        }\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N10;
-    N10 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N9;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N14 -> N21;
-    N20 -> N21;
-    N21 -> N22;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N25;
-    N25 -> N26;
-    N26 -> N1;
-    N27 -> N28;
-    N28 -> N29;
-    N29 -> N30;
-    N30 -> N31;
-    N25 -> N32;
-    N31 -> N32;
-    N32 -> N33;
-    N33 -> N34;
-    N34 -> N35;
-    N35 -> N36;
-    N36 -> N37;
-    N37 -> N38;
-    N38 -> N39;
-    N39 -> N40;
-    N40 -> N41;
-    N41 -> N42;
-    N42 -> N10;
-    N11 -> N43;
-    N43 -> N44;
-    N44 -> N45;
-    N45 -> N46;
-    N46 -> N8;
-    N9 -> N47;
-    N47 -> N48;
-    N48 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f21.rs b/src/test/run-make/graphviz-flowgraph/f21.rs
deleted file mode 100644
index 70083ed8312..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f21.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_break_label_21() {
-    let mut x = 15;
-    let mut y = 151;
-    'outer: loop {
-        'inner: loop {
-            if x == 1 {
-                break 'outer;
-                "unreachable";
-            }
-            if y >= 2 {
-                return;
-                "unreachable";
-            }
-            y -= 3;
-            x -= 5;
-        }
-        "unreachable";
-    }
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f22.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f22.dot-expected.dot
deleted file mode 100644
index 9d3bc22831a..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f22.dot-expected.dot
+++ /dev/null
@@ -1,107 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 15"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 15;"];
-    N5[label="expr 151"];
-    N6[label="local mut y"];
-    N7[label="stmt let mut y = 151;"];
-    N8[label="(dummy_node)"];
-    N9[label="expr \'outer:\l    loop  {\l        \'inner:\l            loop  {\l                if x == 1 { continue \'outer ; \"unreachable\"; }\l                if y >= 2 { return; \"unreachable\"; }\l                x -= 1;\l                y -= 3;\l            }\l        \"unreachable\";\l    }\l"];
-    N10[label="(dummy_node)"];
-    N11[label="expr \'inner:\l    loop  {\l        if x == 1 { continue \'outer ; \"unreachable\"; }\l        if y >= 2 { return; \"unreachable\"; }\l        x -= 1;\l        y -= 3;\l    }\l"];
-    N12[label="expr x"];
-    N13[label="expr 1"];
-    N14[label="expr x == 1"];
-    N15[label="expr continue \'outer"];
-    N16[label="(dummy_node)"];
-    N17[label="stmt continue \'outer ;"];
-    N18[label="expr \"unreachable\""];
-    N19[label="stmt \"unreachable\";"];
-    N20[label="block { continue \'outer ; \"unreachable\"; }"];
-    N21[label="expr if x == 1 { continue \'outer ; \"unreachable\"; }"];
-    N22[label="stmt if x == 1 { continue \'outer ; \"unreachable\"; }"];
-    N23[label="expr y"];
-    N24[label="expr 2"];
-    N25[label="expr y >= 2"];
-    N26[label="expr return"];
-    N27[label="(dummy_node)"];
-    N28[label="stmt return;"];
-    N29[label="expr \"unreachable\""];
-    N30[label="stmt \"unreachable\";"];
-    N31[label="block { return; \"unreachable\"; }"];
-    N32[label="expr if y >= 2 { return; \"unreachable\"; }"];
-    N33[label="stmt if y >= 2 { return; \"unreachable\"; }"];
-    N34[label="expr 1"];
-    N35[label="expr x"];
-    N36[label="expr x -= 1"];
-    N37[label="stmt x -= 1;"];
-    N38[label="expr 3"];
-    N39[label="expr y"];
-    N40[label="expr y -= 3"];
-    N41[label="stmt y -= 3;"];
-    N42[label="block {\l    if x == 1 { continue \'outer ; \"unreachable\"; }\l    if y >= 2 { return; \"unreachable\"; }\l    x -= 1;\l    y -= 3;\l}\l"];
-    N43[label="stmt \'inner:\l    loop  {\l        if x == 1 { continue \'outer ; \"unreachable\"; }\l        if y >= 2 { return; \"unreachable\"; }\l        x -= 1;\l        y -= 3;\l    }\l"];
-    N44[label="expr \"unreachable\""];
-    N45[label="stmt \"unreachable\";"];
-    N46[label="block {\l    \'inner:\l        loop  {\l            if x == 1 { continue \'outer ; \"unreachable\"; }\l            if y >= 2 { return; \"unreachable\"; }\l            x -= 1;\l            y -= 3;\l        }\l    \"unreachable\";\l}\l"];
-    N47[label="stmt \'outer:\l    loop  {\l        \'inner:\l            loop  {\l                if x == 1 { continue \'outer ; \"unreachable\"; }\l                if y >= 2 { return; \"unreachable\"; }\l                x -= 1;\l                y -= 3;\l            }\l        \"unreachable\";\l    }\l"];
-    N48[label="expr \"unreachable\""];
-    N49[label="stmt \"unreachable\";"];
-    N50[label="block {\l    let mut x = 15;\l    let mut y = 151;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { continue \'outer ; \"unreachable\"; }\l                    if y >= 2 { return; \"unreachable\"; }\l                    x -= 1;\l                    y -= 3;\l                }\l            \"unreachable\";\l        }\l    \"unreachable\";\l}\l"];
-    N51[label="expr {\l    let mut x = 15;\l    let mut y = 151;\l    \'outer:\l        loop  {\l            \'inner:\l                loop  {\l                    if x == 1 { continue \'outer ; \"unreachable\"; }\l                    if y >= 2 { return; \"unreachable\"; }\l                    x -= 1;\l                    y -= 3;\l                }\l            \"unreachable\";\l        }\l    \"unreachable\";\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N10;
-    N10 -> N12;
-    N12 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N8;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N14 -> N21;
-    N20 -> N21;
-    N21 -> N22;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N25;
-    N25 -> N26;
-    N26 -> N1;
-    N27 -> N28;
-    N28 -> N29;
-    N29 -> N30;
-    N30 -> N31;
-    N25 -> N32;
-    N31 -> N32;
-    N32 -> N33;
-    N33 -> N34;
-    N34 -> N35;
-    N35 -> N36;
-    N36 -> N37;
-    N37 -> N38;
-    N38 -> N39;
-    N39 -> N40;
-    N40 -> N41;
-    N41 -> N42;
-    N42 -> N10;
-    N11 -> N43;
-    N43 -> N44;
-    N44 -> N45;
-    N45 -> N46;
-    N46 -> N8;
-    N9 -> N47;
-    N47 -> N48;
-    N48 -> N49;
-    N49 -> N50;
-    N50 -> N51;
-    N51 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f22.rs b/src/test/run-make/graphviz-flowgraph/f22.rs
deleted file mode 100644
index b35aac9ec42..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f22.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_break_label_21() {
-    let mut x = 15;
-    let mut y = 151;
-    'outer: loop {
-        'inner: loop {
-            if x == 1 {
-                continue 'outer;
-                "unreachable";
-            }
-            if y >= 2 {
-                return;
-                "unreachable";
-            }
-            x -= 1;
-            y -= 3;
-        }
-        "unreachable";
-    }
-    "unreachable";
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f23.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f23.dot-expected.dot
deleted file mode 100644
index c8bfcd6510b..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f23.dot-expected.dot
+++ /dev/null
@@ -1,113 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 23"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 23;"];
-    N5[label="expr 23"];
-    N6[label="local mut y"];
-    N7[label="stmt let mut y = 23;"];
-    N8[label="expr 23"];
-    N9[label="local mut z"];
-    N10[label="stmt let mut z = 23;"];
-    N11[label="(dummy_node)"];
-    N12[label="expr while x > 0 {\l    x -= 1;\l    while y > 0 {\l        y -= 1;\l        while z > 0 { z -= 1; }\l        if x > 10 { return; \"unreachable\"; }\l    }\l}\l"];
-    N13[label="expr x"];
-    N14[label="expr 0"];
-    N15[label="expr x > 0"];
-    N16[label="expr 1"];
-    N17[label="expr x"];
-    N18[label="expr x -= 1"];
-    N19[label="stmt x -= 1;"];
-    N20[label="(dummy_node)"];
-    N21[label="expr while y > 0 {\l    y -= 1;\l    while z > 0 { z -= 1; }\l    if x > 10 { return; \"unreachable\"; }\l}\l"];
-    N22[label="expr y"];
-    N23[label="expr 0"];
-    N24[label="expr y > 0"];
-    N25[label="expr 1"];
-    N26[label="expr y"];
-    N27[label="expr y -= 1"];
-    N28[label="stmt y -= 1;"];
-    N29[label="(dummy_node)"];
-    N30[label="expr while z > 0 { z -= 1; }"];
-    N31[label="expr z"];
-    N32[label="expr 0"];
-    N33[label="expr z > 0"];
-    N34[label="expr 1"];
-    N35[label="expr z"];
-    N36[label="expr z -= 1"];
-    N37[label="stmt z -= 1;"];
-    N38[label="block { z -= 1; }"];
-    N39[label="stmt while z > 0 { z -= 1; }"];
-    N40[label="expr x"];
-    N41[label="expr 10"];
-    N42[label="expr x > 10"];
-    N43[label="expr return"];
-    N44[label="(dummy_node)"];
-    N45[label="stmt return;"];
-    N46[label="expr \"unreachable\""];
-    N47[label="stmt \"unreachable\";"];
-    N48[label="block { return; \"unreachable\"; }"];
-    N49[label="expr if x > 10 { return; \"unreachable\"; }"];
-    N50[label="block { y -= 1; while z > 0 { z -= 1; } if x > 10 { return; \"unreachable\"; } }"];
-    N51[label="block {\l    x -= 1;\l    while y > 0 {\l        y -= 1;\l        while z > 0 { z -= 1; }\l        if x > 10 { return; \"unreachable\"; }\l    }\l}\l"];
-    N52[label="block {\l    let mut x = 23;\l    let mut y = 23;\l    let mut z = 23;\l    while x > 0 {\l        x -= 1;\l        while y > 0 {\l            y -= 1;\l            while z > 0 { z -= 1; }\l            if x > 10 { return; \"unreachable\"; }\l        }\l    }\l}\l"];
-    N53[label="expr {\l    let mut x = 23;\l    let mut y = 23;\l    let mut z = 23;\l    while x > 0 {\l        x -= 1;\l        while y > 0 {\l            y -= 1;\l            while z > 0 { z -= 1; }\l            if x > 10 { return; \"unreachable\"; }\l        }\l    }\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N12;
-    N15 -> N16;
-    N16 -> N17;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N20 -> N22;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N21;
-    N24 -> N25;
-    N25 -> N26;
-    N26 -> N27;
-    N27 -> N28;
-    N28 -> N29;
-    N29 -> N31;
-    N31 -> N32;
-    N32 -> N33;
-    N33 -> N30;
-    N33 -> N34;
-    N34 -> N35;
-    N35 -> N36;
-    N36 -> N37;
-    N37 -> N38;
-    N38 -> N29;
-    N30 -> N39;
-    N39 -> N40;
-    N40 -> N41;
-    N41 -> N42;
-    N42 -> N43;
-    N43 -> N1;
-    N44 -> N45;
-    N45 -> N46;
-    N46 -> N47;
-    N47 -> N48;
-    N42 -> N49;
-    N48 -> N49;
-    N49 -> N50;
-    N50 -> N20;
-    N21 -> N51;
-    N51 -> N11;
-    N12 -> N52;
-    N52 -> N53;
-    N53 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f24.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f24.dot-expected.dot
deleted file mode 100644
index e40dd014f0a..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f24.dot-expected.dot
+++ /dev/null
@@ -1,161 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 24"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 24;"];
-    N5[label="expr 24"];
-    N6[label="local mut y"];
-    N7[label="stmt let mut y = 24;"];
-    N8[label="expr 24"];
-    N9[label="local mut z"];
-    N10[label="stmt let mut z = 24;"];
-    N11[label="(dummy_node)"];
-    N12[label="expr loop  {\l    if x == 0 { break ; \"unreachable\"; }\l    x -= 1;\l    loop  {\l        if y == 0 { break ; \"unreachable\"; }\l        y -= 1;\l        loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l        if x > 10 { return; \"unreachable\"; }\l    }\l}\l"];
-    N13[label="expr x"];
-    N14[label="expr 0"];
-    N15[label="expr x == 0"];
-    N16[label="expr break"];
-    N17[label="(dummy_node)"];
-    N18[label="stmt break ;"];
-    N19[label="expr \"unreachable\""];
-    N20[label="stmt \"unreachable\";"];
-    N21[label="block { break ; \"unreachable\"; }"];
-    N22[label="expr if x == 0 { break ; \"unreachable\"; }"];
-    N23[label="stmt if x == 0 { break ; \"unreachable\"; }"];
-    N24[label="expr 1"];
-    N25[label="expr x"];
-    N26[label="expr x -= 1"];
-    N27[label="stmt x -= 1;"];
-    N28[label="(dummy_node)"];
-    N29[label="expr loop  {\l    if y == 0 { break ; \"unreachable\"; }\l    y -= 1;\l    loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l    if x > 10 { return; \"unreachable\"; }\l}\l"];
-    N30[label="expr y"];
-    N31[label="expr 0"];
-    N32[label="expr y == 0"];
-    N33[label="expr break"];
-    N34[label="(dummy_node)"];
-    N35[label="stmt break ;"];
-    N36[label="expr \"unreachable\""];
-    N37[label="stmt \"unreachable\";"];
-    N38[label="block { break ; \"unreachable\"; }"];
-    N39[label="expr if y == 0 { break ; \"unreachable\"; }"];
-    N40[label="stmt if y == 0 { break ; \"unreachable\"; }"];
-    N41[label="expr 1"];
-    N42[label="expr y"];
-    N43[label="expr y -= 1"];
-    N44[label="stmt y -= 1;"];
-    N45[label="(dummy_node)"];
-    N46[label="expr loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }"];
-    N47[label="expr z"];
-    N48[label="expr 0"];
-    N49[label="expr z == 0"];
-    N50[label="expr break"];
-    N51[label="(dummy_node)"];
-    N52[label="stmt break ;"];
-    N53[label="expr \"unreachable\""];
-    N54[label="stmt \"unreachable\";"];
-    N55[label="block { break ; \"unreachable\"; }"];
-    N56[label="expr if z == 0 { break ; \"unreachable\"; }"];
-    N57[label="stmt if z == 0 { break ; \"unreachable\"; }"];
-    N58[label="expr 1"];
-    N59[label="expr z"];
-    N60[label="expr z -= 1"];
-    N61[label="stmt z -= 1;"];
-    N62[label="block { if z == 0 { break ; \"unreachable\"; } z -= 1; }"];
-    N63[label="stmt loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }"];
-    N64[label="expr x"];
-    N65[label="expr 10"];
-    N66[label="expr x > 10"];
-    N67[label="expr return"];
-    N68[label="(dummy_node)"];
-    N69[label="stmt return;"];
-    N70[label="expr \"unreachable\""];
-    N71[label="stmt \"unreachable\";"];
-    N72[label="block { return; \"unreachable\"; }"];
-    N73[label="expr if x > 10 { return; \"unreachable\"; }"];
-    N74[label="block {\l    if y == 0 { break ; \"unreachable\"; }\l    y -= 1;\l    loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l    if x > 10 { return; \"unreachable\"; }\l}\l"];
-    N75[label="block {\l    if x == 0 { break ; \"unreachable\"; }\l    x -= 1;\l    loop  {\l        if y == 0 { break ; \"unreachable\"; }\l        y -= 1;\l        loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l        if x > 10 { return; \"unreachable\"; }\l    }\l}\l"];
-    N76[label="block {\l    let mut x = 24;\l    let mut y = 24;\l    let mut z = 24;\l    loop  {\l        if x == 0 { break ; \"unreachable\"; }\l        x -= 1;\l        loop  {\l            if y == 0 { break ; \"unreachable\"; }\l            y -= 1;\l            loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l            if x > 10 { return; \"unreachable\"; }\l        }\l    }\l}\l"];
-    N77[label="expr {\l    let mut x = 24;\l    let mut y = 24;\l    let mut z = 24;\l    loop  {\l        if x == 0 { break ; \"unreachable\"; }\l        x -= 1;\l        loop  {\l            if y == 0 { break ; \"unreachable\"; }\l            y -= 1;\l            loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l            if x > 10 { return; \"unreachable\"; }\l        }\l    }\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N16;
-    N16 -> N12;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N20 -> N21;
-    N15 -> N22;
-    N21 -> N22;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N25;
-    N25 -> N26;
-    N26 -> N27;
-    N27 -> N28;
-    N28 -> N30;
-    N30 -> N31;
-    N31 -> N32;
-    N32 -> N33;
-    N33 -> N29;
-    N34 -> N35;
-    N35 -> N36;
-    N36 -> N37;
-    N37 -> N38;
-    N32 -> N39;
-    N38 -> N39;
-    N39 -> N40;
-    N40 -> N41;
-    N41 -> N42;
-    N42 -> N43;
-    N43 -> N44;
-    N44 -> N45;
-    N45 -> N47;
-    N47 -> N48;
-    N48 -> N49;
-    N49 -> N50;
-    N50 -> N46;
-    N51 -> N52;
-    N52 -> N53;
-    N53 -> N54;
-    N54 -> N55;
-    N49 -> N56;
-    N55 -> N56;
-    N56 -> N57;
-    N57 -> N58;
-    N58 -> N59;
-    N59 -> N60;
-    N60 -> N61;
-    N61 -> N62;
-    N62 -> N45;
-    N46 -> N63;
-    N63 -> N64;
-    N64 -> N65;
-    N65 -> N66;
-    N66 -> N67;
-    N67 -> N1;
-    N68 -> N69;
-    N69 -> N70;
-    N70 -> N71;
-    N71 -> N72;
-    N66 -> N73;
-    N72 -> N73;
-    N73 -> N74;
-    N74 -> N28;
-    N29 -> N75;
-    N75 -> N11;
-    N12 -> N76;
-    N76 -> N77;
-    N77 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f24.rs b/src/test/run-make/graphviz-flowgraph/f24.rs
deleted file mode 100644
index f796d660a18..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f24.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_while_24() {
-    let mut x = 24;
-    let mut y = 24;
-    let mut z = 24;
-
-    loop {
-        if x == 0 { break; "unreachable"; }
-        x -= 1;
-
-        loop {
-            if y == 0 { break; "unreachable"; }
-            y -= 1;
-
-            loop {
-                if z == 0 { break; "unreachable"; }
-                z -= 1;
-            }
-
-            if x > 10 {
-                return;
-                "unreachable";
-            }
-        }
-    }
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f25.dot-expected.dot b/src/test/run-make/graphviz-flowgraph/f25.dot-expected.dot
deleted file mode 100644
index 1e2df1ab5e7..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f25.dot-expected.dot
+++ /dev/null
@@ -1,161 +0,0 @@
-digraph block {
-    N0[label="entry"];
-    N1[label="exit"];
-    N2[label="expr 25"];
-    N3[label="local mut x"];
-    N4[label="stmt let mut x = 25;"];
-    N5[label="expr 25"];
-    N6[label="local mut y"];
-    N7[label="stmt let mut y = 25;"];
-    N8[label="expr 25"];
-    N9[label="local mut z"];
-    N10[label="stmt let mut z = 25;"];
-    N11[label="(dummy_node)"];
-    N12[label="expr \'a:\l    loop  {\l        if x == 0 { break ; \"unreachable\"; }\l        x -= 1;\l        \'a:\l            loop  {\l                if y == 0 { break ; \"unreachable\"; }\l                y -= 1;\l                \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l                if x > 10 { continue \'a ; \"unreachable\"; }\l            }\l    }\l"];
-    N13[label="expr x"];
-    N14[label="expr 0"];
-    N15[label="expr x == 0"];
-    N16[label="expr break"];
-    N17[label="(dummy_node)"];
-    N18[label="stmt break ;"];
-    N19[label="expr \"unreachable\""];
-    N20[label="stmt \"unreachable\";"];
-    N21[label="block { break ; \"unreachable\"; }"];
-    N22[label="expr if x == 0 { break ; \"unreachable\"; }"];
-    N23[label="stmt if x == 0 { break ; \"unreachable\"; }"];
-    N24[label="expr 1"];
-    N25[label="expr x"];
-    N26[label="expr x -= 1"];
-    N27[label="stmt x -= 1;"];
-    N28[label="(dummy_node)"];
-    N29[label="expr \'a:\l    loop  {\l        if y == 0 { break ; \"unreachable\"; }\l        y -= 1;\l        \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l        if x > 10 { continue \'a ; \"unreachable\"; }\l    }\l"];
-    N30[label="expr y"];
-    N31[label="expr 0"];
-    N32[label="expr y == 0"];
-    N33[label="expr break"];
-    N34[label="(dummy_node)"];
-    N35[label="stmt break ;"];
-    N36[label="expr \"unreachable\""];
-    N37[label="stmt \"unreachable\";"];
-    N38[label="block { break ; \"unreachable\"; }"];
-    N39[label="expr if y == 0 { break ; \"unreachable\"; }"];
-    N40[label="stmt if y == 0 { break ; \"unreachable\"; }"];
-    N41[label="expr 1"];
-    N42[label="expr y"];
-    N43[label="expr y -= 1"];
-    N44[label="stmt y -= 1;"];
-    N45[label="(dummy_node)"];
-    N46[label="expr \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }"];
-    N47[label="expr z"];
-    N48[label="expr 0"];
-    N49[label="expr z == 0"];
-    N50[label="expr break"];
-    N51[label="(dummy_node)"];
-    N52[label="stmt break ;"];
-    N53[label="expr \"unreachable\""];
-    N54[label="stmt \"unreachable\";"];
-    N55[label="block { break ; \"unreachable\"; }"];
-    N56[label="expr if z == 0 { break ; \"unreachable\"; }"];
-    N57[label="stmt if z == 0 { break ; \"unreachable\"; }"];
-    N58[label="expr 1"];
-    N59[label="expr z"];
-    N60[label="expr z -= 1"];
-    N61[label="stmt z -= 1;"];
-    N62[label="block { if z == 0 { break ; \"unreachable\"; } z -= 1; }"];
-    N63[label="stmt \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }"];
-    N64[label="expr x"];
-    N65[label="expr 10"];
-    N66[label="expr x > 10"];
-    N67[label="expr continue \'a"];
-    N68[label="(dummy_node)"];
-    N69[label="stmt continue \'a ;"];
-    N70[label="expr \"unreachable\""];
-    N71[label="stmt \"unreachable\";"];
-    N72[label="block { continue \'a ; \"unreachable\"; }"];
-    N73[label="expr if x > 10 { continue \'a ; \"unreachable\"; }"];
-    N74[label="block {\l    if y == 0 { break ; \"unreachable\"; }\l    y -= 1;\l    \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l    if x > 10 { continue \'a ; \"unreachable\"; }\l}\l"];
-    N75[label="block {\l    if x == 0 { break ; \"unreachable\"; }\l    x -= 1;\l    \'a:\l        loop  {\l            if y == 0 { break ; \"unreachable\"; }\l            y -= 1;\l            \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l            if x > 10 { continue \'a ; \"unreachable\"; }\l        }\l}\l"];
-    N76[label="block {\l    let mut x = 25;\l    let mut y = 25;\l    let mut z = 25;\l    \'a:\l        loop  {\l            if x == 0 { break ; \"unreachable\"; }\l            x -= 1;\l            \'a:\l                loop  {\l                    if y == 0 { break ; \"unreachable\"; }\l                    y -= 1;\l                    \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l                    if x > 10 { continue \'a ; \"unreachable\"; }\l                }\l        }\l}\l"];
-    N77[label="expr {\l    let mut x = 25;\l    let mut y = 25;\l    let mut z = 25;\l    \'a:\l        loop  {\l            if x == 0 { break ; \"unreachable\"; }\l            x -= 1;\l            \'a:\l                loop  {\l                    if y == 0 { break ; \"unreachable\"; }\l                    y -= 1;\l                    \'a: loop  { if z == 0 { break ; \"unreachable\"; } z -= 1; }\l                    if x > 10 { continue \'a ; \"unreachable\"; }\l                }\l        }\l}\l"];
-    N0 -> N2;
-    N2 -> N3;
-    N3 -> N4;
-    N4 -> N5;
-    N5 -> N6;
-    N6 -> N7;
-    N7 -> N8;
-    N8 -> N9;
-    N9 -> N10;
-    N10 -> N11;
-    N11 -> N13;
-    N13 -> N14;
-    N14 -> N15;
-    N15 -> N16;
-    N16 -> N12;
-    N17 -> N18;
-    N18 -> N19;
-    N19 -> N20;
-    N20 -> N21;
-    N15 -> N22;
-    N21 -> N22;
-    N22 -> N23;
-    N23 -> N24;
-    N24 -> N25;
-    N25 -> N26;
-    N26 -> N27;
-    N27 -> N28;
-    N28 -> N30;
-    N30 -> N31;
-    N31 -> N32;
-    N32 -> N33;
-    N33 -> N29;
-    N34 -> N35;
-    N35 -> N36;
-    N36 -> N37;
-    N37 -> N38;
-    N32 -> N39;
-    N38 -> N39;
-    N39 -> N40;
-    N40 -> N41;
-    N41 -> N42;
-    N42 -> N43;
-    N43 -> N44;
-    N44 -> N45;
-    N45 -> N47;
-    N47 -> N48;
-    N48 -> N49;
-    N49 -> N50;
-    N50 -> N46;
-    N51 -> N52;
-    N52 -> N53;
-    N53 -> N54;
-    N54 -> N55;
-    N49 -> N56;
-    N55 -> N56;
-    N56 -> N57;
-    N57 -> N58;
-    N58 -> N59;
-    N59 -> N60;
-    N60 -> N61;
-    N61 -> N62;
-    N62 -> N45;
-    N46 -> N63;
-    N63 -> N64;
-    N64 -> N65;
-    N65 -> N66;
-    N66 -> N67;
-    N67 -> N28;
-    N68 -> N69;
-    N69 -> N70;
-    N70 -> N71;
-    N71 -> N72;
-    N66 -> N73;
-    N72 -> N73;
-    N73 -> N74;
-    N74 -> N28;
-    N29 -> N75;
-    N75 -> N11;
-    N12 -> N76;
-    N76 -> N77;
-    N77 -> N1;
-}
diff --git a/src/test/run-make/graphviz-flowgraph/f25.rs b/src/test/run-make/graphviz-flowgraph/f25.rs
deleted file mode 100644
index 2ee2e48fd10..00000000000
--- a/src/test/run-make/graphviz-flowgraph/f25.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright 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.
-
-#[allow(unreachable_code)]
-pub fn expr_while_25() {
-    let mut x = 25;
-    let mut y = 25;
-    let mut z = 25;
-
-    'a: loop {
-        if x == 0 { break; "unreachable"; }
-        x -= 1;
-
-        'a: loop {
-            if y == 0 { break; "unreachable"; }
-            y -= 1;
-
-            'a: loop {
-                if z == 0 { break; "unreachable"; }
-                z -= 1;
-            }
-
-            if x > 10 {
-                continue 'a;
-                "unreachable";
-            }
-        }
-    }
-}
diff --git a/src/test/run-make/issue-40535/Makefile b/src/test/run-make/issue-40535/Makefile
new file mode 100644
index 00000000000..7d513a86a7f
--- /dev/null
+++ b/src/test/run-make/issue-40535/Makefile
@@ -0,0 +1,11 @@
+# The ICE occurred in the following situation:
+# * `foo` declares `extern crate bar, baz`, depends only on `bar` (forgetting `baz` in `Cargo.toml`)
+# * `bar` declares and depends on `extern crate baz`
+# * All crates built in metadata-only mode (`cargo check`)
+all:
+	# cc https://github.com/rust-lang/rust/issues/40623
+	$(RUSTC) baz.rs --emit=metadata --out-dir=$(TMPDIR)
+	$(RUSTC) bar.rs --emit=metadata --extern baz=$(TMPDIR)/libbaz.rmeta --out-dir=$(TMPDIR)
+	$(RUSTC) foo.rs --emit=metadata --extern bar=$(TMPDIR)/libbar.rmeta --out-dir=$(TMPDIR) 2>&1 | \
+	grep -vq "unexpectedly panicked"
+	# ^ Succeeds if it doesn't find the ICE message
diff --git a/src/test/run-make/graphviz-flowgraph/f01.rs b/src/test/run-make/issue-40535/bar.rs
index 231aab69e50..4c22f181975 100644
--- a/src/test/run-make/graphviz-flowgraph/f01.rs
+++ b/src/test/run-make/issue-40535/bar.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn lit_1() {
-    1;
-}
+#![crate_type = "lib"]
+
+extern crate baz;
diff --git a/src/test/run-make/graphviz-flowgraph/f00.rs b/src/test/run-make/issue-40535/baz.rs
index 4e7fc7ea9b0..737a918a039 100644
--- a/src/test/run-make/graphviz-flowgraph/f00.rs
+++ b/src/test/run-make/issue-40535/baz.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,6 +8,4 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn empty_0() {
-
-}
+#![crate_type = "lib"]
diff --git a/src/test/run-make/graphviz-flowgraph/f03.rs b/src/test/run-make/issue-40535/foo.rs
index 2dd71b623c2..53a8c8636b1 100644
--- a/src/test/run-make/graphviz-flowgraph/f03.rs
+++ b/src/test/run-make/issue-40535/foo.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn expr_add_3() {
-    3 + 4;
-}
+#![crate_type = "lib"]
+
+extern crate bar;
+extern crate baz;
diff --git a/src/test/run-make/save-analysis/foo.rs b/src/test/run-make/save-analysis/foo.rs
index e8b69729af6..3fe1479f5f2 100644
--- a/src/test/run-make/save-analysis/foo.rs
+++ b/src/test/run-make/save-analysis/foo.rs
@@ -11,6 +11,7 @@
 #![ crate_name = "test" ]
 #![feature(box_syntax)]
 #![feature(rustc_private)]
+#![feature(associated_type_defaults)]
 
 extern crate graphviz;
 // A simple rust project
@@ -441,3 +442,19 @@ fn test_format_args() {
     print!("{0} + {} = {}", x, y);
     print!("x is {}, y is {1}, name is {n}", x, y, n = name);
 }
+
+struct FrameBuffer;
+
+struct SilenceGenerator;
+
+impl Iterator for SilenceGenerator {
+    type Item = FrameBuffer;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        panic!();
+    }
+}
+
+trait Foo {
+    type Bar = FrameBuffer;
+}
diff --git a/src/test/run-pass-fulldeps/logging-right-crate.rs b/src/test/run-pass-fulldeps/logging-right-crate.rs
deleted file mode 100644
index 7caeeb40124..00000000000
--- a/src/test/run-pass-fulldeps/logging-right-crate.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2013-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.
-
-// aux-build:logging_right_crate.rs
-// exec-env:RUST_LOG=logging-right-crate=debug
-
-// This is a test for issue #3046 to make sure that when we monomorphize a
-// function from one crate to another the right top-level logging name is
-// preserved.
-//
-// It used to be the case that if logging were turned on for this crate, all
-// monomorphized functions from other crates had logging turned on (their
-// logging module names were all incorrect). This test ensures that this no
-// longer happens by enabling logging for *this* crate and then invoking a
-// function in an external crate which will panic when logging is enabled.
-
-// pretty-expanded FIXME #23616
-
-extern crate logging_right_crate;
-
-pub fn main() {
-    // this function panicks if logging is turned on
-    logging_right_crate::foo::<isize>();
-}
diff --git a/src/test/run-pass-fulldeps/logging-separate-lines.rs b/src/test/run-pass-fulldeps/logging-separate-lines.rs
deleted file mode 100644
index 183a522bba7..00000000000
--- a/src/test/run-pass-fulldeps/logging-separate-lines.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2013-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.
-
-// ignore-windows
-// exec-env:RUST_LOG=debug
-// compile-flags:-C debug-assertions=y
-// ignore-emscripten: FIXME(#31622)
-
-#![feature(rustc_private)]
-
-#[macro_use]
-extern crate log;
-
-use std::process::Command;
-use std::env;
-use std::str;
-
-fn main() {
-    let args: Vec<String> = env::args().collect();
-    if args.len() > 1 && args[1] == "child" {
-        debug!("foo");
-        debug!("bar");
-        return
-    }
-
-    let p = Command::new(&args[0])
-                    .arg("child")
-                    .output().unwrap();
-    assert!(p.status.success());
-    let mut lines = str::from_utf8(&p.stderr).unwrap().lines();
-    assert!(lines.next().unwrap().contains("foo"));
-    assert!(lines.next().unwrap().contains("bar"));
-}
diff --git a/src/test/run-pass-fulldeps/qquote.rs b/src/test/run-pass-fulldeps/qquote.rs
index b4ed57192cc..4a8246ec429 100644
--- a/src/test/run-pass-fulldeps/qquote.rs
+++ b/src/test/run-pass-fulldeps/qquote.rs
@@ -26,14 +26,6 @@ fn main() {
         &ps,
         syntax::ext::expand::ExpansionConfig::default("qquote".to_string()),
         &mut resolver);
-    cx.bt_push(syntax::codemap::ExpnInfo {
-        call_site: DUMMY_SP,
-        callee: syntax::codemap::NameAndSpan {
-            format: syntax::codemap::MacroBang(Symbol::intern("")),
-            allow_internal_unstable: false,
-            span: None,
-        }
-    });
     let cx = &mut cx;
 
     macro_rules! check {
diff --git a/src/test/run-pass-fulldeps/rust-log-filter.rs b/src/test/run-pass-fulldeps/rust-log-filter.rs
deleted file mode 100644
index 306d24e3177..00000000000
--- a/src/test/run-pass-fulldeps/rust-log-filter.rs
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 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.
-
-// exec-env:RUST_LOG=rust_log_filter/foo
-// ignore-emscripten no threads support
-
-#![allow(unknown_features)]
-#![feature(box_syntax, std_misc, rustc_private)]
-
-#[macro_use]
-extern crate log;
-
-use std::sync::mpsc::{channel, Sender, Receiver};
-use std::thread;
-
-pub struct ChannelLogger {
-    tx: Sender<String>
-}
-
-impl ChannelLogger {
-    pub fn new() -> (Box<ChannelLogger>, Receiver<String>) {
-        let (tx, rx) = channel();
-        (box ChannelLogger { tx: tx }, rx)
-    }
-}
-
-impl log::Logger for ChannelLogger {
-    fn log(&mut self, record: &log::LogRecord) {
-        self.tx.send(format!("{}", record.args)).unwrap();
-    }
-}
-
-pub fn main() {
-    let (logger, rx) = ChannelLogger::new();
-
-    let t = thread::spawn(move|| {
-        log::set_logger(logger);
-
-        info!("foo");
-        info!("bar");
-        info!("foo bar");
-        info!("bar foo");
-    });
-
-    assert_eq!(rx.recv().unwrap(), "foo");
-    assert_eq!(rx.recv().unwrap(), "foo bar");
-    assert_eq!(rx.recv().unwrap(), "bar foo");
-    assert!(rx.recv().is_err());
-
-    t.join();
-}
diff --git a/src/test/run-pass-fulldeps/switch-stdout.rs b/src/test/run-pass-fulldeps/switch-stdout.rs
new file mode 100644
index 00000000000..4542e27545a
--- /dev/null
+++ b/src/test/run-pass-fulldeps/switch-stdout.rs
@@ -0,0 +1,64 @@
+// 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.
+
+#![feature(rustc_private)]
+
+extern crate rustc_back;
+
+use std::fs::File;
+use std::io::{Read, Write};
+
+use rustc_back::tempdir::TempDir;
+
+#[cfg(unix)]
+fn switch_stdout_to(file: File) {
+    use std::os::unix::prelude::*;
+
+    extern {
+        fn dup2(old: i32, new: i32) -> i32;
+    }
+
+    unsafe {
+        assert_eq!(dup2(file.as_raw_fd(), 1), 1);
+    }
+}
+
+#[cfg(windows)]
+fn switch_stdout_to(file: File) {
+    use std::os::windows::prelude::*;
+
+    extern "system" {
+        fn SetStdHandle(nStdHandle: u32, handle: *mut u8) -> i32;
+    }
+
+    const STD_OUTPUT_HANDLE: u32 = (-11i32) as u32;
+
+    unsafe {
+        let rc = SetStdHandle(STD_OUTPUT_HANDLE,
+                              file.into_raw_handle() as *mut _);
+        assert!(rc != 0);
+    }
+}
+
+fn main() {
+    let td = TempDir::new("foo").unwrap();
+    let path = td.path().join("bar");
+    let f = File::create(&path).unwrap();
+
+    println!("foo");
+    std::io::stdout().flush().unwrap();
+    switch_stdout_to(f);
+    println!("bar");
+    std::io::stdout().flush().unwrap();
+
+    let mut contents = String::new();
+    File::open(&path).unwrap().read_to_string(&mut contents).unwrap();
+    assert_eq!(contents, "bar\n");
+}
diff --git a/src/test/run-pass/auxiliary/llvm_pr32379.rs b/src/test/run-pass/auxiliary/llvm_pr32379.rs
new file mode 100644
index 00000000000..a7b15bda336
--- /dev/null
+++ b/src/test/run-pass/auxiliary/llvm_pr32379.rs
@@ -0,0 +1,15 @@
+// Copyright 2017 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.
+
+pub fn pr32379(mut data: u64, f1: bool, f2: bool) -> u64 {
+    if f1 { data &= !2; }
+    if f2 { data |= 2; }
+    data
+}
diff --git a/src/test/run-pass/conditional-debug-macro-on.rs b/src/test/run-pass/conditional-debug-macro-on.rs
index b335e20f91d..7da33be7a57 100644
--- a/src/test/run-pass/conditional-debug-macro-on.rs
+++ b/src/test/run-pass/conditional-debug-macro-on.rs
@@ -8,8 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// exec-env:RUST_LOG=conditional-debug-macro-on=4
-
 pub fn main() {
     // exits early if println! evaluates its arguments, otherwise it
     // will hit the panic.
diff --git a/src/test/run-pass/diverging-fallback-control-flow.rs b/src/test/run-pass/diverging-fallback-control-flow.rs
new file mode 100644
index 00000000000..656e90d2d52
--- /dev/null
+++ b/src/test/run-pass/diverging-fallback-control-flow.rs
@@ -0,0 +1,106 @@
+// Copyright 2015 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 various cases where we permit an unconstrained variable
+// to fallback based on control-flow.
+//
+// These represent current behavior, but are pretty dubious.  I would
+// like to revisit these and potentially change them. --nmatsakis
+
+#![feature(never_type)]
+#![feature(loop_break_value)]
+
+trait BadDefault {
+    fn default() -> Self;
+}
+
+impl BadDefault for u32 {
+    fn default() -> Self {
+        0
+    }
+}
+
+impl BadDefault for ! {
+    fn default() -> ! {
+        panic!()
+    }
+}
+
+fn assignment() {
+    let x;
+
+    if true {
+        x = BadDefault::default();
+    } else {
+        x = return;
+    }
+}
+
+fn assignment_rev() {
+    let x;
+
+    if true {
+        x = return;
+    } else {
+        x = BadDefault::default();
+    }
+}
+
+fn if_then_else() {
+    let _x = if true {
+        BadDefault::default()
+    } else {
+        return;
+    };
+}
+
+fn if_then_else_rev() {
+    let _x = if true {
+        return;
+    } else {
+        BadDefault::default()
+    };
+}
+
+fn match_arm() {
+    let _x = match Ok(BadDefault::default()) {
+        Ok(v) => v,
+        Err(()) => return,
+    };
+}
+
+fn match_arm_rev() {
+    let _x = match Ok(BadDefault::default()) {
+        Err(()) => return,
+        Ok(v) => v,
+    };
+}
+
+fn loop_break() {
+    let _x = loop {
+        if false {
+            break return;
+        } else {
+            break BadDefault::default();
+        }
+    };
+}
+
+fn loop_break_rev() {
+    let _x = loop {
+        if false {
+            break return;
+        } else {
+            break BadDefault::default();
+        }
+    };
+}
+
+fn main() { }
diff --git a/src/test/run-pass/unit-fallback.rs b/src/test/run-pass/diverging-fallback-method-chain.rs
index 2babc6348e1..664a329c228 100644
--- a/src/test/run-pass/unit-fallback.rs
+++ b/src/test/run-pass/diverging-fallback-method-chain.rs
@@ -8,31 +8,20 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// Test that diverging types default to () (with feature(never_type) disabled).
+// Test a regression found when building compiler. The `produce()`
+// error type `T` winds up getting unified with result of `x.parse()`;
+// the type of the closure given to `unwrap_or_else` needs to be
+// inferred to `usize`.
 
-trait Balls: Sized {
-    fn smeg() -> Result<Self, ()>;
-}
-
-impl Balls for () {
-    fn smeg() -> Result<(), ()> { Ok(()) }
-}
-
-struct Flah;
+use std::num::ParseIntError;
 
-impl Flah {
-    fn flah<T: Balls>(&self) -> Result<T, ()> {
-        T::smeg()
-    }
-}
-
-fn doit() -> Result<(), ()> {
-    // The type of _ is unconstrained here and should default to ()
-    let _ = try!(Flah.flah());
-    Ok(())
+fn produce<T>() -> Result<&'static str, T> {
+    Ok("22")
 }
 
 fn main() {
-    let _ = doit();
+    let x: usize = produce()
+        .and_then(|x| x.parse())
+        .unwrap_or_else(|_| panic!());
+    println!("{}", x);
 }
-
diff --git a/src/test/run-pass/diverging-fallback-option.rs b/src/test/run-pass/diverging-fallback-option.rs
new file mode 100644
index 00000000000..49f90e7c91f
--- /dev/null
+++ b/src/test/run-pass/diverging-fallback-option.rs
@@ -0,0 +1,22 @@
+// Copyright 2012 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.
+
+#![allow(warnings)]
+
+// Here the type of `c` is `Option<?T>`, where `?T` is unconstrained.
+// Because there is data-flow from the `{ return; }` block, which
+// diverges and hence has type `!`, into `c`, we will default `?T` to
+// `!`, and hence this code compiles rather than failing and requiring
+// a type annotation.
+
+fn main() {
+    let c = Some({ return; });
+    c.unwrap();
+}
diff --git a/src/test/run-pass/issue-15763.rs b/src/test/run-pass/issue-15763.rs
index f77888c2955..0baaaac2676 100644
--- a/src/test/run-pass/issue-15763.rs
+++ b/src/test/run-pass/issue-15763.rs
@@ -8,8 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![allow(unused_features)]
-#![allow(unreachable_code)]
+#![allow(unknown_features)]
 #![feature(box_syntax)]
 
 #[derive(PartialEq, Debug)]
@@ -29,14 +28,14 @@ struct Foo {
 }
 
 fn foo() -> Result<Foo, isize> {
-    return Ok::<Foo, isize>(Foo {
+    return Ok(Foo {
         x: Bar { x: 22 },
         a: return Err(32)
     });
 }
 
 fn baz() -> Result<Foo, isize> {
-    Ok::<Foo, isize>(Foo {
+    Ok(Foo {
         x: Bar { x: 22 },
         a: return Err(32)
     })
diff --git a/src/test/run-pass/issue-16671.rs b/src/test/run-pass/issue-16671.rs
index 2be04551cb9..71a19d98190 100644
--- a/src/test/run-pass/issue-16671.rs
+++ b/src/test/run-pass/issue-16671.rs
@@ -8,26 +8,13 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// DON'T REENABLE THIS UNLESS YOU'VE ACTUALLY FIXED THE UNDERLYING ISSUE
-// ignore-android seems to block forever
+#![deny(warnings)]
 
-// ignore-emscripten no threads support
+fn foo<F: FnOnce()>(_f: F) { }
 
-#![forbid(warnings)]
-
-// Pretty printing tests complain about `use std::predule::*`
-#![allow(unused_imports)]
-
-// A var moved into a proc, that has a mutable loan path should
-// not trigger a misleading unused_mut warning.
-
-use std::io::prelude::*;
-use std::thread;
-
-pub fn main() {
-    let mut stdin = std::io::stdin();
-    thread::spawn(move|| {
-        let mut v = Vec::new();
-        let _ = stdin.read_to_end(&mut v);
-    }).join().ok().unwrap();
+fn main() {
+    let mut var = Vec::new();;
+    foo(move|| {
+        var.push(1);
+    });
 }
diff --git a/src/test/run-pass/issue-39808.rs b/src/test/run-pass/issue-39808.rs
new file mode 100644
index 00000000000..91c70d76eef
--- /dev/null
+++ b/src/test/run-pass/issue-39808.rs
@@ -0,0 +1,26 @@
+// Copyright 2016 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.
+
+#![allow(unreachable_code)]
+
+// Regression test for #39808. The type parameter of `Owned` was
+// considered to be "unconstrained" because the type resulting from
+// `format!` (`String`) was not being propagated upward, owing to the
+// fact that the expression diverges.
+
+use std::borrow::Cow;
+
+fn main() {
+    let _ = if false {
+        Cow::Owned(format!("{:?}", panic!()))
+    } else {
+        Cow::Borrowed("")
+    };
+}
diff --git a/src/test/run-pass/issue-39984.rs b/src/test/run-pass/issue-39984.rs
new file mode 100644
index 00000000000..a0019e7215c
--- /dev/null
+++ b/src/test/run-pass/issue-39984.rs
@@ -0,0 +1,21 @@
+// Copyright 2016 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.
+
+// Regression test for issue #39984.
+//
+// The key here is that the error type of the `Ok` call ought to be
+// constrained to `String`, even though it is dead-code.
+
+fn main() {}
+
+fn t() -> Result<(), String> {
+    return Err("".into());
+    Ok(())
+}
diff --git a/src/test/run-make/graphviz-flowgraph/f08.rs b/src/test/run-pass/issue-40770.rs
index 6ba7b03d54d..599d0b273e3 100644
--- a/src/test/run-make/graphviz-flowgraph/f08.rs
+++ b/src/test/run-pass/issue-40770.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,9 +8,12 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn expr_if_onearm_8() {
-    let x = 8; let _y;
-    if x > 88 {
-        _y = 888;
+macro_rules! m {
+    ($e:expr) => {
+        macro_rules! n { () => { $e } }
     }
 }
+
+fn main() {
+    m!(foo!());
+}
diff --git a/src/test/run-pass/llvm-pr32379.rs b/src/test/run-pass/llvm-pr32379.rs
new file mode 100644
index 00000000000..5625e81c0e6
--- /dev/null
+++ b/src/test/run-pass/llvm-pr32379.rs
@@ -0,0 +1,23 @@
+// Copyright 2017 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.
+
+// aux-build:llvm_pr32379.rs
+
+// LLVM PR #32379 (https://bugs.llvm.org/show_bug.cgi?id=32379), which
+// applies to upstream LLVM 3.9.1, is known to cause rustc itself to be
+// miscompiled on ARM (Rust issue #40593). Because cross builds don't test
+// our *compiler* on ARM, have a test for the miscompilation directly.
+
+extern crate llvm_pr32379;
+
+pub fn main() {
+    let val = llvm_pr32379::pr32379(2, false, false);
+    assert_eq!(val, 2);
+}
diff --git a/src/test/run-pass/project-defer-unification.rs b/src/test/run-pass/project-defer-unification.rs
index 8e008c639b3..9a6ea2272fe 100644
--- a/src/test/run-pass/project-defer-unification.rs
+++ b/src/test/run-pass/project-defer-unification.rs
@@ -11,8 +11,6 @@
 // A regression test extracted from image-0.3.11. The point of
 // failure was in `index_colors` below.
 
-#![allow(unused)]
-
 use std::ops::{Deref, DerefMut};
 
 #[derive(Copy, Clone)]
@@ -94,7 +92,7 @@ pub fn index_colors<Pix>(image: &ImageBuffer<Pix, Vec<u8>>)
                          -> ImageBuffer<Luma<u8>, Vec<u8>>
 where Pix: Pixel<Subpixel=u8> + 'static,
 {
-    let mut indices: ImageBuffer<Luma<u8>, Vec<u8>> = loop { };
+    let mut indices: ImageBuffer<_,Vec<_>> = loop { };
     for (pixel, idx) in image.pixels().zip(indices.pixels_mut()) {
         // failured occurred here ^^ because we were requiring that we
         // could project Pixel or Subpixel from `T_indices` (type of
diff --git a/src/test/run-pass/syntax-extension-source-utils.rs b/src/test/run-pass/syntax-extension-source-utils.rs
index 3b5f033d07b..25c7417f7eb 100644
--- a/src/test/run-pass/syntax-extension-source-utils.rs
+++ b/src/test/run-pass/syntax-extension-source-utils.rs
@@ -22,7 +22,7 @@ macro_rules! indirect_line { () => ( line!() ) }
 
 pub fn main() {
     assert_eq!(line!(), 24);
-    assert_eq!(column!(), 4);
+    assert_eq!(column!(), 15);
     assert_eq!(indirect_line!(), 26);
     assert!((file!().ends_with("syntax-extension-source-utils.rs")));
     assert_eq!(stringify!((2*3) + 5).to_string(), "( 2 * 3 ) + 5".to_string());
diff --git a/src/test/rustdoc/auxiliary/pub-use-extern-macros.rs b/src/test/rustdoc/auxiliary/pub-use-extern-macros.rs
new file mode 100644
index 00000000000..70d174a149d
--- /dev/null
+++ b/src/test/rustdoc/auxiliary/pub-use-extern-macros.rs
@@ -0,0 +1,30 @@
+// Copyright 2017 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.
+#![crate_name="macros"]
+
+#[macro_export]
+macro_rules! foo {
+    () => {};
+}
+
+#[macro_export]
+macro_rules! bar {
+    () => {};
+}
+
+#[macro_export]
+macro_rules! baz {
+    () => {};
+}
+
+#[macro_export]
+macro_rules! quux {
+    () => {};
+}
diff --git a/src/test/rustdoc/check-hard-break.rs b/src/test/rustdoc/check-hard-break.rs
new file mode 100644
index 00000000000..5c5e3f8136c
--- /dev/null
+++ b/src/test/rustdoc/check-hard-break.rs
@@ -0,0 +1,19 @@
+// Copyright 2017 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.
+
+#![crate_name = "foo"]
+
+// ignore-tidy-end-whitespace
+
+// @has foo/fn.f.html
+// @has - '<p>hard break:<br>after hard break</p>'
+/// hard break:  
+/// after hard break
+pub fn f() {}
diff --git a/src/test/rustdoc/check-rule-image-footnote.rs b/src/test/rustdoc/check-rule-image-footnote.rs
new file mode 100644
index 00000000000..4d3bea20ba8
--- /dev/null
+++ b/src/test/rustdoc/check-rule-image-footnote.rs
@@ -0,0 +1,40 @@
+// Copyright 2017 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.
+
+#![crate_name = "foo"]
+
+// ignore-tidy-linelength
+
+// @has foo/fn.f.html
+// @has - '<p>markdown test</p><p>this is a <a href="https://example.com" title="this is a title">link</a>.</p><p>hard break: after hard break</p><hr><p>a footnote<sup id="supref1"><a href="#ref1">1</a></sup>.</p><p>another footnote<sup id="supref2"><a href="#ref2">2</a></sup>.</p><p><img src="https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png" alt="Rust"></p><div class="footnotes"><hr><ol><li id="ref1"><p>Thing&nbsp;<a href="#supref1" rev="footnote">↩</a></p></li><li id="ref2"><p>Another Thing&nbsp;<a href="#supref2" rev="footnote">↩</a></p></li></ol></div>'
+/// markdown test
+///
+/// this is a [link].
+///
+/// [link]: https://example.com "this is a title"
+///
+/// hard break:
+/// after hard break
+///
+/// -----------
+///
+/// a footnote[^footnote].
+///
+/// another footnote[^footnotebis].
+///
+/// [^footnote]: Thing
+///
+///
+/// [^footnotebis]: Another Thing
+///
+///
+/// ![Rust](https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png)
+#[deprecated(note = "Struct<T>")]
+pub fn f() {}
diff --git a/src/test/rustdoc/pub-use-extern-macros.rs b/src/test/rustdoc/pub-use-extern-macros.rs
new file mode 100644
index 00000000000..3f8f6f9544e
--- /dev/null
+++ b/src/test/rustdoc/pub-use-extern-macros.rs
@@ -0,0 +1,31 @@
+// Copyright 2017 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.
+
+// aux-build:pub-use-extern-macros.rs
+
+#![feature(use_extern_macros, macro_reexport)]
+
+// @has pub_use_extern_macros/macro.foo.html
+// @!has pub_use_extern_macros/index.html 'pub use macros::foo;'
+#[macro_reexport(foo)] extern crate macros;
+
+// @has pub_use_extern_macros/index.html 'pub use macros::bar;'
+// @!has pub_use_extern_macros/macro.bar.html
+pub use macros::bar;
+
+// @has pub_use_extern_macros/macro.baz.html
+// @!has pub_use_extern_macros/index.html 'pub use macros::baz;'
+#[doc(inline)]
+pub use macros::baz;
+
+// @!has pub_use_extern_macros/macro.quux.html
+// @!has pub_use_extern_macros/index.html 'pub use macros::quux;'
+#[doc(hidden)]
+pub use macros::quux;
diff --git a/src/test/ui/codemap_tests/huge_multispan_highlight.stderr b/src/test/ui/codemap_tests/huge_multispan_highlight.stderr
index edbfd72df61..7bb69caa102 100644
--- a/src/test/ui/codemap_tests/huge_multispan_highlight.stderr
+++ b/src/test/ui/codemap_tests/huge_multispan_highlight.stderr
@@ -2,7 +2,7 @@ error: cannot borrow immutable local variable `x` as mutable
    --> $DIR/huge_multispan_highlight.rs:100:18
     |
 12  |     let x = "foo";
-    |         - use `mut x` here to make mutable
+    |         - consider changing this to `mut x`
 ...
 100 |     let y = &mut x;
     |                  ^ cannot borrow mutably
diff --git a/src/test/ui/did_you_mean/issue-31424.stderr b/src/test/ui/did_you_mean/issue-31424.stderr
index 4873acf551e..60fa06d314f 100644
--- a/src/test/ui/did_you_mean/issue-31424.stderr
+++ b/src/test/ui/did_you_mean/issue-31424.stderr
@@ -10,6 +10,8 @@ error: cannot borrow immutable argument `self` as mutable
 error: cannot borrow immutable argument `self` as mutable
   --> $DIR/issue-31424.rs:23:15
    |
+22 |     fn bar(self: &mut Self) {
+   |            ---- consider changing this to `mut self`
 23 |         (&mut self).bar();
    |               ^^^^ cannot borrow mutably
 
diff --git a/src/test/ui/did_you_mean/issue-35937.rs b/src/test/ui/did_you_mean/issue-35937.rs
new file mode 100644
index 00000000000..9ec8728fd32
--- /dev/null
+++ b/src/test/ui/did_you_mean/issue-35937.rs
@@ -0,0 +1,31 @@
+// Copyright 2017 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.
+
+struct Foo {
+    pub v: Vec<String>
+}
+
+fn main() {
+    let f = Foo { v: Vec::new() };
+    f.v.push("cat".to_string());
+}
+
+
+struct S {
+    x: i32,
+}
+fn foo() {
+    let s = S { x: 42 };
+    s.x += 1;
+}
+
+fn bar(s: S) {
+    s.x += 1;
+}
diff --git a/src/test/ui/did_you_mean/issue-35937.stderr b/src/test/ui/did_you_mean/issue-35937.stderr
new file mode 100644
index 00000000000..bea3d129143
--- /dev/null
+++ b/src/test/ui/did_you_mean/issue-35937.stderr
@@ -0,0 +1,26 @@
+error: cannot borrow immutable field `f.v` as mutable
+  --> $DIR/issue-35937.rs:17:5
+   |
+16 |     let f = Foo { v: Vec::new() };
+   |         - consider changing this to `mut f`
+17 |     f.v.push("cat".to_string());
+   |     ^^^ cannot mutably borrow immutable field
+
+error: cannot assign to immutable field `s.x`
+  --> $DIR/issue-35937.rs:26:5
+   |
+25 |     let s = S { x: 42 };
+   |         - consider changing this to `mut s`
+26 |     s.x += 1;
+   |     ^^^^^^^^ cannot mutably borrow immutable field
+
+error: cannot assign to immutable field `s.x`
+  --> $DIR/issue-35937.rs:30:5
+   |
+29 | fn bar(s: S) {
+   |        - consider changing this to `mut s`
+30 |     s.x += 1;
+   |     ^^^^^^^^ cannot mutably borrow immutable field
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/did_you_mean/issue-38147-2.stderr b/src/test/ui/did_you_mean/issue-38147-2.stderr
index fdaf0cd44d9..855feaf7d2d 100644
--- a/src/test/ui/did_you_mean/issue-38147-2.stderr
+++ b/src/test/ui/did_you_mean/issue-38147-2.stderr
@@ -2,7 +2,7 @@ error: cannot borrow immutable borrowed content `*self.s` as mutable
   --> $DIR/issue-38147-2.rs:17:9
    |
 12 |     s: &'a String
-   |     ------------- use `&'a mut String` here to make mutable
+   |        ---------- use `&'a mut String` here to make mutable
 ...
 17 |         self.s.push('x');
    |         ^^^^^^ cannot borrow as mutable
diff --git a/src/test/ui/did_you_mean/issue-38147-3.stderr b/src/test/ui/did_you_mean/issue-38147-3.stderr
index d2280fa561b..d970d078df8 100644
--- a/src/test/ui/did_you_mean/issue-38147-3.stderr
+++ b/src/test/ui/did_you_mean/issue-38147-3.stderr
@@ -2,10 +2,8 @@ error: cannot borrow immutable borrowed content `*self.s` as mutable
   --> $DIR/issue-38147-3.rs:17:9
    |
 12 |     s: &'a String
-   |     ------------- use `&'a mut String` here to make mutable
+   |        ---------- use `&'a mut String` here to make mutable
 ...
-16 |     fn f(&self) {
-   |          ----- use `&mut self` here to make mutable
 17 |         self.s.push('x');
    |         ^^^^^^ cannot borrow as mutable
 
diff --git a/src/test/ui/did_you_mean/issue-39544.rs b/src/test/ui/did_you_mean/issue-39544.rs
index bcdafefa247..6331fc5771f 100644
--- a/src/test/ui/did_you_mean/issue-39544.rs
+++ b/src/test/ui/did_you_mean/issue-39544.rs
@@ -8,11 +8,11 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-enum X {
+pub enum X {
     Y
 }
 
-struct Z {
+pub struct Z {
     x: X
 }
 
@@ -20,3 +20,34 @@ fn main() {
     let z = Z { x: X::Y };
     let _ = &mut z.x;
 }
+
+impl Z {
+    fn foo<'z>(&'z self) {
+        let _ = &mut self.x;
+    }
+
+    fn foo1(&self, other: &Z) {
+        let _ = &mut self.x;
+        let _ = &mut other.x;
+    }
+
+    fn foo2<'a>(&'a self, other: &Z) {
+        let _ = &mut self.x;
+        let _ = &mut other.x;
+    }
+
+    fn foo3<'a>(self: &'a Self, other: &Z) {
+        let _ = &mut self.x;
+        let _ = &mut other.x;
+    }
+
+    fn foo4(other: &Z) {
+        let _ = &mut other.x;
+    }
+
+}
+
+pub fn with_arg(z: Z, w: &Z) {
+    let _ = &mut z.x;
+    let _ = &mut w.x;
+}
diff --git a/src/test/ui/did_you_mean/issue-39544.stderr b/src/test/ui/did_you_mean/issue-39544.stderr
index 7f124e6d34d..e1e229a8b05 100644
--- a/src/test/ui/did_you_mean/issue-39544.stderr
+++ b/src/test/ui/did_you_mean/issue-39544.stderr
@@ -6,5 +6,89 @@ error: cannot borrow immutable field `z.x` as mutable
 21 |     let _ = &mut z.x;
    |                  ^^^ cannot mutably borrow immutable field
 
-error: aborting due to previous error
+error: cannot borrow immutable field `self.x` as mutable
+  --> $DIR/issue-39544.rs:26:22
+   |
+25 |     fn foo<'z>(&'z self) {
+   |                -------- use `&'z mut self` here to make mutable
+26 |         let _ = &mut self.x;
+   |                      ^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `self.x` as mutable
+  --> $DIR/issue-39544.rs:30:22
+   |
+29 |     fn foo1(&self, other: &Z) {
+   |             ----- use `&mut self` here to make mutable
+30 |         let _ = &mut self.x;
+   |                      ^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `other.x` as mutable
+  --> $DIR/issue-39544.rs:31:22
+   |
+29 |     fn foo1(&self, other: &Z) {
+   |                           -- use `&mut Z` here to make mutable
+30 |         let _ = &mut self.x;
+31 |         let _ = &mut other.x;
+   |                      ^^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `self.x` as mutable
+  --> $DIR/issue-39544.rs:35:22
+   |
+34 |     fn foo2<'a>(&'a self, other: &Z) {
+   |                 -------- use `&'a mut self` here to make mutable
+35 |         let _ = &mut self.x;
+   |                      ^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `other.x` as mutable
+  --> $DIR/issue-39544.rs:36:22
+   |
+34 |     fn foo2<'a>(&'a self, other: &Z) {
+   |                                  -- use `&mut Z` here to make mutable
+35 |         let _ = &mut self.x;
+36 |         let _ = &mut other.x;
+   |                      ^^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `self.x` as mutable
+  --> $DIR/issue-39544.rs:40:22
+   |
+39 |     fn foo3<'a>(self: &'a Self, other: &Z) {
+   |                       -------- use `&'a mut Self` here to make mutable
+40 |         let _ = &mut self.x;
+   |                      ^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `other.x` as mutable
+  --> $DIR/issue-39544.rs:41:22
+   |
+39 |     fn foo3<'a>(self: &'a Self, other: &Z) {
+   |                                        -- use `&mut Z` here to make mutable
+40 |         let _ = &mut self.x;
+41 |         let _ = &mut other.x;
+   |                      ^^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `other.x` as mutable
+  --> $DIR/issue-39544.rs:45:22
+   |
+44 |     fn foo4(other: &Z) {
+   |                    -- use `&mut Z` here to make mutable
+45 |         let _ = &mut other.x;
+   |                      ^^^^^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `z.x` as mutable
+  --> $DIR/issue-39544.rs:51:18
+   |
+50 | pub fn with_arg(z: Z, w: &Z) {
+   |                 - consider changing this to `mut z`
+51 |     let _ = &mut z.x;
+   |                  ^^^ cannot mutably borrow immutable field
+
+error: cannot borrow immutable field `w.x` as mutable
+  --> $DIR/issue-39544.rs:52:18
+   |
+50 | pub fn with_arg(z: Z, w: &Z) {
+   |                          -- use `&mut Z` here to make mutable
+51 |     let _ = &mut z.x;
+52 |     let _ = &mut w.x;
+   |                  ^^^ cannot mutably borrow immutable field
+
+error: aborting due to 11 previous errors
 
diff --git a/src/test/ui/did_you_mean/issue-40823.rs b/src/test/ui/did_you_mean/issue-40823.rs
new file mode 100644
index 00000000000..f4ae3257279
--- /dev/null
+++ b/src/test/ui/did_you_mean/issue-40823.rs
@@ -0,0 +1,14 @@
+// Copyright 2017 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.
+
+fn main() {
+    let mut buf = &[1, 2, 3, 4];
+    buf.iter_mut();
+}
diff --git a/src/test/ui/did_you_mean/issue-40823.stderr b/src/test/ui/did_you_mean/issue-40823.stderr
new file mode 100644
index 00000000000..8e77ebd9b6d
--- /dev/null
+++ b/src/test/ui/did_you_mean/issue-40823.stderr
@@ -0,0 +1,8 @@
+error: cannot borrow immutable borrowed content `*buf` as mutable
+  --> $DIR/issue-40823.rs:13:5
+   |
+13 |     buf.iter_mut();
+   |     ^^^ cannot borrow as mutable
+
+error: aborting due to previous error
+
diff --git a/src/test/run-make/graphviz-flowgraph/f09.rs b/src/test/ui/loop-break-value-no-repeat.rs
index a78ccb8a937..790f796fae0 100644
--- a/src/test/run-make/graphviz-flowgraph/f09.rs
+++ b/src/test/ui/loop-break-value-no-repeat.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,11 +8,18 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn expr_if_twoarm_9() {
-    let x = 91; let _y;
-    if x > 92 {
-        _y = 93;
-    } else {
-        _y = 94+95;
+#![feature(loop_break_value)]
+#![allow(unused_variables)]
+
+use std::ptr;
+
+// Test that we only report **one** error here and that is that
+// `break` with an expression is illegal in this context. In
+// particular, we don't report any mismatched types error, which is
+// besides the point.
+
+fn main() {
+    for _ in &[1,2,3] {
+        break 22
     }
 }
diff --git a/src/test/ui/loop-break-value-no-repeat.stderr b/src/test/ui/loop-break-value-no-repeat.stderr
new file mode 100644
index 00000000000..0d99abd3907
--- /dev/null
+++ b/src/test/ui/loop-break-value-no-repeat.stderr
@@ -0,0 +1,8 @@
+error[E0571]: `break` with value from a `for` loop
+  --> $DIR/loop-break-value-no-repeat.rs:23:9
+   |
+23 |         break 22
+   |         ^^^^^^^^ can only break with a value inside `loop`
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/macros/macro_path_as_generic_bound.stderr b/src/test/ui/macros/macro_path_as_generic_bound.stderr
index 96635032105..e4044f5aaf2 100644
--- a/src/test/ui/macros/macro_path_as_generic_bound.stderr
+++ b/src/test/ui/macros/macro_path_as_generic_bound.stderr
@@ -2,10 +2,7 @@ error[E0433]: failed to resolve. Use of undeclared type or module `m`
   --> $DIR/macro_path_as_generic_bound.rs:17:6
    |
 17 | foo!(m::m2::A);
-   | -----^^^^^^^^--
-   | |    |
-   | |    Use of undeclared type or module `m`
-   | in this macro invocation
+   |      ^^^^^^^^ Use of undeclared type or module `m`
 
 error: cannot continue compilation due to previous error
 
diff --git a/src/test/run-make/graphviz-flowgraph/f02.rs b/src/test/ui/pub/pub-restricted-error-fn.rs
index f7fe1266198..13514310371 100644
--- a/src/test/run-make/graphviz-flowgraph/f02.rs
+++ b/src/test/ui/pub/pub-restricted-error-fn.rs
@@ -1,4 +1,4 @@
-// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-pub fn decl_x_2() {
-    let _x : isize;
-}
+#![feature(pub_restricted)]
+
+pub(crate) () fn foo() {}
diff --git a/src/test/ui/pub/pub-restricted-error-fn.stderr b/src/test/ui/pub/pub-restricted-error-fn.stderr
new file mode 100644
index 00000000000..470e8331247
--- /dev/null
+++ b/src/test/ui/pub/pub-restricted-error-fn.stderr
@@ -0,0 +1,8 @@
+error: unmatched visibility `pub`
+  --> $DIR/pub-restricted-error-fn.rs:13:10
+   |
+13 | pub(crate) () fn foo() {}
+   |          ^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/pub/pub-restricted-error.rs b/src/test/ui/pub/pub-restricted-error.rs
new file mode 100644
index 00000000000..99af031899a
--- /dev/null
+++ b/src/test/ui/pub/pub-restricted-error.rs
@@ -0,0 +1,19 @@
+// Copyright 2017 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.
+
+#![feature(pub_restricted)]
+
+struct Bar(pub(()));
+
+struct Foo {
+    pub(crate) () foo: usize,
+}
+
+
diff --git a/src/test/ui/pub/pub-restricted-error.stderr b/src/test/ui/pub/pub-restricted-error.stderr
new file mode 100644
index 00000000000..b8b4c80778d
--- /dev/null
+++ b/src/test/ui/pub/pub-restricted-error.stderr
@@ -0,0 +1,8 @@
+error: expected identifier, found `(`
+  --> $DIR/pub-restricted-error.rs:16:16
+   |
+16 |     pub(crate) () foo: usize,
+   |                ^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/pub/pub-restricted-non-path.rs b/src/test/ui/pub/pub-restricted-non-path.rs
new file mode 100644
index 00000000000..3f74285717a
--- /dev/null
+++ b/src/test/ui/pub/pub-restricted-non-path.rs
@@ -0,0 +1,15 @@
+// Copyright 2017 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.
+
+#![feature(pub_restricted)]
+
+pub (.) fn afn() {}
+
+fn main() {}
diff --git a/src/test/ui/pub/pub-restricted-non-path.stderr b/src/test/ui/pub/pub-restricted-non-path.stderr
new file mode 100644
index 00000000000..ebfccc4d720
--- /dev/null
+++ b/src/test/ui/pub/pub-restricted-non-path.stderr
@@ -0,0 +1,8 @@
+error: expected identifier, found `.`
+  --> $DIR/pub-restricted-non-path.rs:13:6
+   |
+13 | pub (.) fn afn() {}
+   |      ^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/pub/pub-restricted.rs b/src/test/ui/pub/pub-restricted.rs
new file mode 100644
index 00000000000..48e487f71a7
--- /dev/null
+++ b/src/test/ui/pub/pub-restricted.rs
@@ -0,0 +1,37 @@
+// Copyright 2017 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.
+
+#![feature(pub_restricted)]
+
+mod a {}
+
+pub (a) fn afn() {}
+pub (b) fn bfn() {}
+pub fn privfn() {}
+mod x {
+    mod y {
+        pub (in x) fn foo() {}
+        pub (super) fn bar() {}
+        pub (crate) fn qux() {}
+    }
+}
+
+mod y {
+    struct Foo {
+        pub (crate) c: usize,
+        pub (super) s: usize,
+        valid_private: usize,
+        pub (in y) valid_in_x: usize,
+        pub (a) invalid: usize,
+        pub (in x) non_parent_invalid: usize,
+    }
+}
+
+fn main() {}
\ No newline at end of file
diff --git a/src/test/ui/pub/pub-restricted.stderr b/src/test/ui/pub/pub-restricted.stderr
new file mode 100644
index 00000000000..5bc230e8da3
--- /dev/null
+++ b/src/test/ui/pub/pub-restricted.stderr
@@ -0,0 +1,47 @@
+error: incorrect visibility restriction
+  --> $DIR/pub-restricted.rs:15:5
+   |
+15 | pub (a) fn afn() {}
+   |     ^^^
+   |
+   = help: some possible visibility restrictions are:
+           `pub(crate)`: visible only on the current crate
+           `pub(super)`: visible only in the current module's parent
+           `pub(in path::to::module)`: visible only on the specified path
+help: to make this visible only to module `a`, add `in` before the path:
+   | pub (in a) fn afn() {}
+
+error: incorrect visibility restriction
+  --> $DIR/pub-restricted.rs:16:5
+   |
+16 | pub (b) fn bfn() {}
+   |     ^^^
+   |
+   = help: some possible visibility restrictions are:
+           `pub(crate)`: visible only on the current crate
+           `pub(super)`: visible only in the current module's parent
+           `pub(in path::to::module)`: visible only on the specified path
+help: to make this visible only to module `b`, add `in` before the path:
+   | pub (in b) fn bfn() {}
+
+error: incorrect visibility restriction
+  --> $DIR/pub-restricted.rs:32:13
+   |
+32 |         pub (a) invalid: usize,
+   |             ^^^
+   |
+   = help: some possible visibility restrictions are:
+           `pub(crate)`: visible only on the current crate
+           `pub(super)`: visible only in the current module's parent
+           `pub(in path::to::module)`: visible only on the specified path
+help: to make this visible only to module `a`, add `in` before the path:
+   |         pub (in a) invalid: usize,
+
+error: visibilities can only be restricted to ancestor modules
+  --> $DIR/pub-restricted.rs:33:17
+   |
+33 |         pub (in x) non_parent_invalid: usize,
+   |                 ^
+
+error: aborting due to 4 previous errors
+
diff --git a/src/test/ui/reachable/README.md b/src/test/ui/reachable/README.md
new file mode 100644
index 00000000000..8bed5fba7a2
--- /dev/null
+++ b/src/test/ui/reachable/README.md
@@ -0,0 +1,7 @@
+A variety of tests around reachability. These tests in general check
+two things:
+
+- that we get unreachable code warnings in reasonable locations;
+- that we permit coercions **into** `!` from expressions which
+  diverge, where an expression "diverges" if it must execute some
+  subexpression of type `!`, or it has type `!` itself.
diff --git a/src/test/run-pass-fulldeps/logging-enabled-debug.rs b/src/test/ui/reachable/expr_add.rs
index 3ae4884ce47..87d017adf68 100644
--- a/src/test/run-pass-fulldeps/logging-enabled-debug.rs
+++ b/src/test/ui/reachable/expr_add.rs
@@ -1,4 +1,4 @@
-// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,17 +8,21 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// compile-flags:-C debug-assertions=no
-// exec-env:RUST_LOG=logging-enabled-debug=debug
+#![feature(never_type)]
+#![allow(unused_variables)]
+#![deny(unreachable_code)]
 
+use std::ops;
 
-#![feature(rustc_private)]
+struct Foo;
 
-#[macro_use]
-extern crate log;
-
-pub fn main() {
-    if log_enabled!(log::DEBUG) {
-        panic!("what?! debugging?");
+impl ops::Add<!> for Foo {
+    type Output = !;
+    fn add(self, rhs: !) -> ! {
+        unimplemented!()
     }
 }
+
+fn main() {
+    let x = Foo + return;
+}
diff --git a/src/test/ui/reachable/expr_add.stderr b/src/test/ui/reachable/expr_add.stderr
new file mode 100644
index 00000000000..1a2cc252051
--- /dev/null
+++ b/src/test/ui/reachable/expr_add.stderr
@@ -0,0 +1,14 @@
+error: unreachable expression
+  --> $DIR/expr_add.rs:27:13
+   |
+27 |     let x = Foo + return;
+   |             ^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_add.rs:13:9
+   |
+13 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/run-pass-fulldeps/auxiliary/logging_right_crate.rs b/src/test/ui/reachable/expr_again.rs
index db26b10fc67..cdbdb8dc0db 100644
--- a/src/test/run-pass-fulldeps/auxiliary/logging_right_crate.rs
+++ b/src/test/ui/reachable/expr_again.rs
@@ -1,4 +1,4 @@
-// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,11 +8,13 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(rustc_private)]
+#![feature(box_syntax)]
+#![allow(unused_variables)]
+#![deny(unreachable_code)]
 
-#[macro_use] extern crate log;
-
-pub fn foo<T>() {
-    fn death() -> isize { panic!() }
-    debug!("{}", (||{ death() })());
+fn main() {
+    let x = loop {
+        continue;
+        println!("hi");
+    };
 }
diff --git a/src/test/ui/reachable/expr_again.stderr b/src/test/ui/reachable/expr_again.stderr
new file mode 100644
index 00000000000..bf4e4dc4711
--- /dev/null
+++ b/src/test/ui/reachable/expr_again.stderr
@@ -0,0 +1,15 @@
+error: unreachable statement
+  --> $DIR/expr_again.rs:18:9
+   |
+18 |         println!("hi");
+   |         ^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_again.rs:13:9
+   |
+13 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+   = note: this error originates in a macro outside of the current crate
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/reachable/expr_andand.rs b/src/test/ui/reachable/expr_andand.rs
new file mode 100644
index 00000000000..af404d03097
--- /dev/null
+++ b/src/test/ui/reachable/expr_andand.rs
@@ -0,0 +1,21 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+
+fn foo() {
+    // No error here.
+    let x = false && (return);
+    println!("I am not dead.");
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_andand.stderr b/src/test/ui/reachable/expr_andand.stderr
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/src/test/ui/reachable/expr_andand.stderr
diff --git a/src/test/ui/reachable/expr_array.rs b/src/test/ui/reachable/expr_array.rs
new file mode 100644
index 00000000000..00e8be07725
--- /dev/null
+++ b/src/test/ui/reachable/expr_array.rs
@@ -0,0 +1,28 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+#![feature(type_ascription)]
+
+fn a() {
+    // the `22` is unreachable:
+    let x: [usize; 2] = [return, 22];
+}
+
+fn b() {
+    // the `array is unreachable:
+    let x: [usize; 2] = [22, return];
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_array.stderr b/src/test/ui/reachable/expr_array.stderr
new file mode 100644
index 00000000000..f8dbdb5f8bb
--- /dev/null
+++ b/src/test/ui/reachable/expr_array.stderr
@@ -0,0 +1,20 @@
+error: unreachable expression
+  --> $DIR/expr_array.rs:20:34
+   |
+20 |     let x: [usize; 2] = [return, 22];
+   |                                  ^^
+   |
+note: lint level defined here
+  --> $DIR/expr_array.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_array.rs:25:25
+   |
+25 |     let x: [usize; 2] = [22, return];
+   |                         ^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/reachable/expr_assign.rs b/src/test/ui/reachable/expr_assign.rs
new file mode 100644
index 00000000000..1b9357013d2
--- /dev/null
+++ b/src/test/ui/reachable/expr_assign.rs
@@ -0,0 +1,39 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+fn foo() {
+    // No error here.
+    let x;
+    x = return;
+}
+
+fn bar() {
+    use std::ptr;
+    let p: *mut ! = ptr::null_mut::<!>();
+    unsafe {
+        // Here we consider the `return` unreachable because
+        // "evaluating" the `*p` has type `!`. This is somewhat
+        // dubious, I suppose.
+        *p = return;
+    }
+}
+
+fn baz() {
+    let mut i = 0;
+    *{return; &mut i} = 22;
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_assign.stderr b/src/test/ui/reachable/expr_assign.stderr
new file mode 100644
index 00000000000..807f6a1c1d5
--- /dev/null
+++ b/src/test/ui/reachable/expr_assign.stderr
@@ -0,0 +1,26 @@
+error: unreachable expression
+  --> $DIR/expr_assign.rs:20:5
+   |
+20 |     x = return;
+   |     ^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_assign.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_assign.rs:30:14
+   |
+30 |         *p = return;
+   |              ^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_assign.rs:36:15
+   |
+36 |     *{return; &mut i} = 22;
+   |               ^^^^^^
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/reachable/expr_block.rs b/src/test/ui/reachable/expr_block.rs
new file mode 100644
index 00000000000..093589b4dc8
--- /dev/null
+++ b/src/test/ui/reachable/expr_block.rs
@@ -0,0 +1,41 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+fn a() {
+    // Here the tail expression is considered unreachable:
+    let x = {
+        return;
+        22
+    };
+}
+
+fn b() {
+    // Here the `x` assignment is considered unreachable, not the block:
+    let x = {
+        return;
+    };
+}
+
+fn c() {
+    // Here the `println!` is unreachable:
+    let x = {
+        return;
+        println!("foo");
+        22
+    };
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_block.stderr b/src/test/ui/reachable/expr_block.stderr
new file mode 100644
index 00000000000..542ce1c3fd9
--- /dev/null
+++ b/src/test/ui/reachable/expr_block.stderr
@@ -0,0 +1,22 @@
+error: unreachable expression
+  --> $DIR/expr_block.rs:21:9
+   |
+21 |         22
+   |         ^^
+   |
+note: lint level defined here
+  --> $DIR/expr_block.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable statement
+  --> $DIR/expr_block.rs:36:9
+   |
+36 |         println!("foo");
+   |         ^^^^^^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/reachable/expr_box.rs b/src/test/ui/reachable/expr_box.rs
new file mode 100644
index 00000000000..6509b608335
--- /dev/null
+++ b/src/test/ui/reachable/expr_box.rs
@@ -0,0 +1,18 @@
+// Copyright 2016 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.
+
+#![feature(box_syntax)]
+#![allow(unused_variables)]
+#![deny(unreachable_code)]
+
+fn main() {
+    let x = box return;
+    println!("hi");
+}
diff --git a/src/test/ui/reachable/expr_box.stderr b/src/test/ui/reachable/expr_box.stderr
new file mode 100644
index 00000000000..78ba231cef9
--- /dev/null
+++ b/src/test/ui/reachable/expr_box.stderr
@@ -0,0 +1,14 @@
+error: unreachable expression
+  --> $DIR/expr_box.rs:16:13
+   |
+16 |     let x = box return;
+   |             ^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_box.rs:13:9
+   |
+13 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/run-pass-fulldeps/logging-enabled.rs b/src/test/ui/reachable/expr_call.rs
index 26261348020..8d9f303df7f 100644
--- a/src/test/run-pass-fulldeps/logging-enabled.rs
+++ b/src/test/ui/reachable/expr_call.rs
@@ -1,4 +1,4 @@
-// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,20 +8,24 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// exec-env:RUST_LOG=logging_enabled=info
-// ignore-emscripten: FIXME(#31622)
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
 
+fn foo(x: !, y: usize) { }
 
-#![feature(rustc_private)]
+fn bar(x: !) { }
 
-#[macro_use]
-extern crate log;
+fn a() {
+    // the `22` is unreachable:
+    foo(return, 22);
+}
 
-pub fn main() {
-    if log_enabled!(log::DEBUG) {
-        panic!("what?! debugging?");
-    }
-    if !log_enabled!(log::INFO) {
-        panic!("what?! no info?");
-    }
+fn b() {
+    // the call is unreachable:
+    bar(return);
 }
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_call.stderr b/src/test/ui/reachable/expr_call.stderr
new file mode 100644
index 00000000000..5526827f59f
--- /dev/null
+++ b/src/test/ui/reachable/expr_call.stderr
@@ -0,0 +1,20 @@
+error: unreachable expression
+  --> $DIR/expr_call.rs:23:17
+   |
+23 |     foo(return, 22);
+   |                 ^^
+   |
+note: lint level defined here
+  --> $DIR/expr_call.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_call.rs:28:5
+   |
+28 |     bar(return);
+   |     ^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/reachable/expr_cast.rs b/src/test/ui/reachable/expr_cast.rs
new file mode 100644
index 00000000000..926ef864ebf
--- /dev/null
+++ b/src/test/ui/reachable/expr_cast.rs
@@ -0,0 +1,23 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+#![feature(type_ascription)]
+
+fn a() {
+    // the cast is unreachable:
+    let x = {return} as !;
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_cast.stderr b/src/test/ui/reachable/expr_cast.stderr
new file mode 100644
index 00000000000..a22300dcc13
--- /dev/null
+++ b/src/test/ui/reachable/expr_cast.stderr
@@ -0,0 +1,14 @@
+error: unreachable expression
+  --> $DIR/expr_cast.rs:20:13
+   |
+20 |     let x = {return} as !;
+   |             ^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_cast.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/reachable/expr_if.rs b/src/test/ui/reachable/expr_if.rs
new file mode 100644
index 00000000000..2a265e772f3
--- /dev/null
+++ b/src/test/ui/reachable/expr_if.rs
@@ -0,0 +1,41 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+fn foo() {
+    if {return} {
+        println!("Hello, world!");
+    }
+}
+
+fn bar() {
+    if {true} {
+        return;
+    }
+    println!("I am not dead.");
+}
+
+fn baz() {
+    if {true} {
+        return;
+    } else {
+        return;
+    }
+    // As the next action to be taken after the if arms, we should
+    // report the `println!` as unreachable:
+    println!("But I am.");
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_if.stderr b/src/test/ui/reachable/expr_if.stderr
new file mode 100644
index 00000000000..2cf17474f6e
--- /dev/null
+++ b/src/test/ui/reachable/expr_if.stderr
@@ -0,0 +1,15 @@
+error: unreachable statement
+  --> $DIR/expr_if.rs:38:5
+   |
+38 |     println!("But I am.");
+   |     ^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_if.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+   = note: this error originates in a macro outside of the current crate
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/reachable/expr_loop.rs b/src/test/ui/reachable/expr_loop.rs
new file mode 100644
index 00000000000..3ed4b2dcf0c
--- /dev/null
+++ b/src/test/ui/reachable/expr_loop.rs
@@ -0,0 +1,44 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+fn a() {
+    loop { return; }
+    println!("I am dead.");
+}
+
+fn b() {
+    loop {
+        break;
+    }
+    println!("I am not dead.");
+}
+
+fn c() {
+    loop { return; }
+    println!("I am dead.");
+}
+
+fn d() {
+    'outer: loop { loop { break 'outer; } }
+    println!("I am not dead.");
+}
+
+fn e() {
+    loop { 'middle: loop { loop { break 'middle; } } }
+    println!("I am dead.");
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_loop.stderr b/src/test/ui/reachable/expr_loop.stderr
new file mode 100644
index 00000000000..6e98e754c54
--- /dev/null
+++ b/src/test/ui/reachable/expr_loop.stderr
@@ -0,0 +1,31 @@
+error: unreachable statement
+  --> $DIR/expr_loop.rs:19:5
+   |
+19 |     println!("I am dead.");
+   |     ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_loop.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+   = note: this error originates in a macro outside of the current crate
+
+error: unreachable statement
+  --> $DIR/expr_loop.rs:31:5
+   |
+31 |     println!("I am dead.");
+   |     ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate
+
+error: unreachable statement
+  --> $DIR/expr_loop.rs:41:5
+   |
+41 |     println!("I am dead.");
+   |     ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/reachable/expr_match.rs b/src/test/ui/reachable/expr_match.rs
new file mode 100644
index 00000000000..23bdcc035b2
--- /dev/null
+++ b/src/test/ui/reachable/expr_match.rs
@@ -0,0 +1,54 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+fn a() {
+    // The match is considered unreachable here, because the `return`
+    // diverges:
+    match {return} { }
+}
+
+fn b() {
+    match () { () => return }
+    println!("I am dead");
+}
+
+fn c() {
+    match () { () if false => return, () => () }
+    println!("I am not dead");
+}
+
+fn d() {
+    match () { () if false => return, () => return }
+    println!("I am dead");
+}
+
+fn e() {
+    // Here the compiler fails to figure out that the `println` is dead.
+    match () { () if return => (), () => return }
+    println!("I am dead");
+}
+
+fn f() {
+    match Some(()) { None => (), Some(()) => return }
+    println!("I am not dead");
+}
+
+fn g() {
+    match Some(()) { None => return, Some(()) => () }
+    println!("I am not dead");
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_match.stderr b/src/test/ui/reachable/expr_match.stderr
new file mode 100644
index 00000000000..f5857a5b345
--- /dev/null
+++ b/src/test/ui/reachable/expr_match.stderr
@@ -0,0 +1,30 @@
+error: unreachable expression
+  --> $DIR/expr_match.rs:20:5
+   |
+20 |     match {return} { }
+   |     ^^^^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_match.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable statement
+  --> $DIR/expr_match.rs:25:5
+   |
+25 |     println!("I am dead");
+   |     ^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate
+
+error: unreachable statement
+  --> $DIR/expr_match.rs:35:5
+   |
+35 |     println!("I am dead");
+   |     ^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/reachable/expr_method.rs b/src/test/ui/reachable/expr_method.rs
new file mode 100644
index 00000000000..f1d979d7df7
--- /dev/null
+++ b/src/test/ui/reachable/expr_method.rs
@@ -0,0 +1,34 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+struct Foo;
+
+impl Foo {
+    fn foo(&self, x: !, y: usize) { }
+    fn bar(&self, x: !) { }
+}
+
+fn a() {
+    // the `22` is unreachable:
+    Foo.foo(return, 22);
+}
+
+fn b() {
+    // the call is unreachable:
+    Foo.bar(return);
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_method.stderr b/src/test/ui/reachable/expr_method.stderr
new file mode 100644
index 00000000000..177d4352a37
--- /dev/null
+++ b/src/test/ui/reachable/expr_method.stderr
@@ -0,0 +1,20 @@
+error: unreachable expression
+  --> $DIR/expr_method.rs:26:21
+   |
+26 |     Foo.foo(return, 22);
+   |                     ^^
+   |
+note: lint level defined here
+  --> $DIR/expr_method.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_method.rs:31:5
+   |
+31 |     Foo.bar(return);
+   |     ^^^^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/reachable/expr_oror.rs b/src/test/ui/reachable/expr_oror.rs
new file mode 100644
index 00000000000..d01304d4034
--- /dev/null
+++ b/src/test/ui/reachable/expr_oror.rs
@@ -0,0 +1,20 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+
+fn foo() {
+    let x = false || (return);
+    println!("I am not dead.");
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_oror.stderr b/src/test/ui/reachable/expr_oror.stderr
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/src/test/ui/reachable/expr_oror.stderr
diff --git a/src/test/ui/reachable/expr_repeat.rs b/src/test/ui/reachable/expr_repeat.rs
new file mode 100644
index 00000000000..6078d6d5bde
--- /dev/null
+++ b/src/test/ui/reachable/expr_repeat.rs
@@ -0,0 +1,23 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+#![feature(type_ascription)]
+
+fn a() {
+    // the repeat is unreachable:
+    let x: [usize; 2] = [return; 2];
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_repeat.stderr b/src/test/ui/reachable/expr_repeat.stderr
new file mode 100644
index 00000000000..19afc5dd7b5
--- /dev/null
+++ b/src/test/ui/reachable/expr_repeat.stderr
@@ -0,0 +1,14 @@
+error: unreachable expression
+  --> $DIR/expr_repeat.rs:20:25
+   |
+20 |     let x: [usize; 2] = [return; 2];
+   |                         ^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_repeat.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/run-pass-fulldeps/conditional-debug-macro-off.rs b/src/test/ui/reachable/expr_return.rs
index c6beb5ba358..c640ca06630 100644
--- a/src/test/run-pass-fulldeps/conditional-debug-macro-off.rs
+++ b/src/test/ui/reachable/expr_return.rs
@@ -1,4 +1,4 @@
-// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
 // file at the top-level directory of this distribution and at
 // http://rust-lang.org/COPYRIGHT.
 //
@@ -8,16 +8,17 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// compile-flags: -C debug-assertions=no
-// exec-env:RUST_LOG=conditional-debug-macro-off=4
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+#![feature(type_ascription)]
 
-
-#![feature(rustc_private)]
-
-#[macro_use]
-extern crate log;
-
-pub fn main() {
-    // only panics if println! evaluates its argument.
-    debug!("{:?}", { if true { panic!() } });
+fn a() {
+    // Here we issue that the "2nd-innermost" return is unreachable,
+    // but we stop there.
+    let x = {return {return {return;}}};
 }
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_return.stderr b/src/test/ui/reachable/expr_return.stderr
new file mode 100644
index 00000000000..3eb70a4dd7c
--- /dev/null
+++ b/src/test/ui/reachable/expr_return.stderr
@@ -0,0 +1,14 @@
+error: unreachable expression
+  --> $DIR/expr_return.rs:21:22
+   |
+21 |     let x = {return {return {return;}}};
+   |                      ^^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_return.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/reachable/expr_struct.rs b/src/test/ui/reachable/expr_struct.rs
new file mode 100644
index 00000000000..09e31819279
--- /dev/null
+++ b/src/test/ui/reachable/expr_struct.rs
@@ -0,0 +1,43 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+#![feature(type_ascription)]
+
+struct Foo {
+    a: usize,
+    b: usize,
+}
+
+fn a() {
+    // struct expr is unreachable:
+    let x = Foo { a: 22, b: 33, ..return };
+}
+
+fn b() {
+    // the `33` is unreachable:
+    let x = Foo { a: return, b: 33, ..return };
+}
+
+fn c() {
+    // the `..return` is unreachable:
+    let x = Foo { a: 22, b: return, ..return };
+}
+
+fn d() {
+    // the struct expr is unreachable:
+    let x = Foo { a: 22, b: return };
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_struct.stderr b/src/test/ui/reachable/expr_struct.stderr
new file mode 100644
index 00000000000..4b7ac660413
--- /dev/null
+++ b/src/test/ui/reachable/expr_struct.stderr
@@ -0,0 +1,32 @@
+error: unreachable expression
+  --> $DIR/expr_struct.rs:25:13
+   |
+25 |     let x = Foo { a: 22, b: 33, ..return };
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_struct.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_struct.rs:30:33
+   |
+30 |     let x = Foo { a: return, b: 33, ..return };
+   |                                 ^^
+
+error: unreachable expression
+  --> $DIR/expr_struct.rs:35:39
+   |
+35 |     let x = Foo { a: 22, b: return, ..return };
+   |                                       ^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_struct.rs:40:13
+   |
+40 |     let x = Foo { a: 22, b: return };
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 4 previous errors
+
diff --git a/src/test/ui/reachable/expr_tup.rs b/src/test/ui/reachable/expr_tup.rs
new file mode 100644
index 00000000000..7c75296de6c
--- /dev/null
+++ b/src/test/ui/reachable/expr_tup.rs
@@ -0,0 +1,28 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+#![feature(type_ascription)]
+
+fn a() {
+    // the `2` is unreachable:
+    let x: (usize, usize) = (return, 2);
+}
+
+fn b() {
+    // the tuple is unreachable:
+    let x: (usize, usize) = (2, return);
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_tup.stderr b/src/test/ui/reachable/expr_tup.stderr
new file mode 100644
index 00000000000..63f477fd0c3
--- /dev/null
+++ b/src/test/ui/reachable/expr_tup.stderr
@@ -0,0 +1,20 @@
+error: unreachable expression
+  --> $DIR/expr_tup.rs:20:38
+   |
+20 |     let x: (usize, usize) = (return, 2);
+   |                                      ^
+   |
+note: lint level defined here
+  --> $DIR/expr_tup.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: unreachable expression
+  --> $DIR/expr_tup.rs:25:29
+   |
+25 |     let x: (usize, usize) = (2, return);
+   |                             ^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
diff --git a/src/test/ui/reachable/expr_type.rs b/src/test/ui/reachable/expr_type.rs
new file mode 100644
index 00000000000..2fa277c382e
--- /dev/null
+++ b/src/test/ui/reachable/expr_type.rs
@@ -0,0 +1,23 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+#![feature(type_ascription)]
+
+fn a() {
+    // the cast is unreachable:
+    let x = {return}: !;
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_type.stderr b/src/test/ui/reachable/expr_type.stderr
new file mode 100644
index 00000000000..6ed79974ccb
--- /dev/null
+++ b/src/test/ui/reachable/expr_type.stderr
@@ -0,0 +1,14 @@
+error: unreachable expression
+  --> $DIR/expr_type.rs:20:13
+   |
+20 |     let x = {return}: !;
+   |             ^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_type.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/reachable/expr_unary.rs b/src/test/ui/reachable/expr_unary.rs
new file mode 100644
index 00000000000..57901fbaa7c
--- /dev/null
+++ b/src/test/ui/reachable/expr_unary.rs
@@ -0,0 +1,21 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+fn foo() {
+    let x: ! = ! { return; 22 };
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_unary.stderr b/src/test/ui/reachable/expr_unary.stderr
new file mode 100644
index 00000000000..11172652d84
--- /dev/null
+++ b/src/test/ui/reachable/expr_unary.stderr
@@ -0,0 +1,8 @@
+error: cannot apply unary operator `!` to type `!`
+  --> $DIR/expr_unary.rs:18:16
+   |
+18 |     let x: ! = ! { return; 22 };
+   |                ^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+
diff --git a/src/test/ui/reachable/expr_while.rs b/src/test/ui/reachable/expr_while.rs
new file mode 100644
index 00000000000..7dcd609fbc8
--- /dev/null
+++ b/src/test/ui/reachable/expr_while.rs
@@ -0,0 +1,38 @@
+// Copyright 2016 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.
+
+#![allow(unused_variables)]
+#![allow(unused_assignments)]
+#![allow(dead_code)]
+#![deny(unreachable_code)]
+#![feature(never_type)]
+
+fn foo() {
+    while {return} {
+        println!("Hello, world!");
+    }
+}
+
+fn bar() {
+    while {true} {
+        return;
+    }
+    println!("I am not dead.");
+}
+
+fn baz() {
+    // Here, we cite the `while` loop as dead.
+    while {return} {
+        println!("I am dead.");
+    }
+    println!("I am, too.");
+}
+
+fn main() { }
diff --git a/src/test/ui/reachable/expr_while.stderr b/src/test/ui/reachable/expr_while.stderr
new file mode 100644
index 00000000000..066cfc86c64
--- /dev/null
+++ b/src/test/ui/reachable/expr_while.stderr
@@ -0,0 +1,31 @@
+error: unreachable statement
+  --> $DIR/expr_while.rs:19:9
+   |
+19 |         println!("Hello, world!");
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/expr_while.rs:14:9
+   |
+14 | #![deny(unreachable_code)]
+   |         ^^^^^^^^^^^^^^^^
+   = note: this error originates in a macro outside of the current crate
+
+error: unreachable statement
+  --> $DIR/expr_while.rs:33:9
+   |
+33 |         println!("I am dead.");
+   |         ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate
+
+error: unreachable statement
+  --> $DIR/expr_while.rs:35:5
+   |
+35 |     println!("I am, too.");
+   |     ^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: this error originates in a macro outside of the current crate
+
+error: aborting due to 3 previous errors
+
diff --git a/src/test/ui/resolve/token-error-correct-3.stderr b/src/test/ui/resolve/token-error-correct-3.stderr
index bf7db67e728..849787e383f 100644
--- a/src/test/ui/resolve/token-error-correct-3.stderr
+++ b/src/test/ui/resolve/token-error-correct-3.stderr
@@ -39,10 +39,6 @@ error[E0308]: mismatched types
    |
    = note: expected type `()`
               found type `std::result::Result<bool, std::io::Error>`
-   = help: here are some functions which might fulfill your needs:
-           - .unwrap()
-           - .unwrap_err()
-           - .unwrap_or_default()
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/span/borrowck-borrow-overloaded-auto-deref-mut.stderr b/src/test/ui/span/borrowck-borrow-overloaded-auto-deref-mut.stderr
index b83a6aaebf3..edf1635a6b8 100644
--- a/src/test/ui/span/borrowck-borrow-overloaded-auto-deref-mut.stderr
+++ b/src/test/ui/span/borrowck-borrow-overloaded-auto-deref-mut.stderr
@@ -2,7 +2,7 @@ error: cannot borrow immutable argument `x` as mutable
   --> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:63:24
    |
 62 | fn deref_mut_field1(x: Own<Point>) {
-   |                     - use `mut x` here to make mutable
+   |                     - consider changing this to `mut x`
 63 |     let __isize = &mut x.y; //~ ERROR cannot borrow
    |                        ^ cannot borrow mutably
 
@@ -28,7 +28,7 @@ error: cannot borrow immutable argument `x` as mutable
   --> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:98:5
    |
 97 | fn assign_field1<'a>(x: Own<Point>) {
-   |                      - use `mut x` here to make mutable
+   |                      - consider changing this to `mut x`
 98 |     x.y = 3; //~ ERROR cannot borrow
    |     ^ cannot borrow mutably
 
@@ -54,7 +54,7 @@ error: cannot borrow immutable argument `x` as mutable
    --> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:119:5
     |
 118 | fn deref_mut_method1(x: Own<Point>) {
-    |                      - use `mut x` here to make mutable
+    |                      - consider changing this to `mut x`
 119 |     x.set(0, 0); //~ ERROR cannot borrow
     |     ^ cannot borrow mutably
 
@@ -70,7 +70,7 @@ error: cannot borrow immutable argument `x` as mutable
    --> $DIR/borrowck-borrow-overloaded-auto-deref-mut.rs:139:6
     |
 138 | fn assign_method1<'a>(x: Own<Point>) {
-    |                       - use `mut x` here to make mutable
+    |                       - consider changing this to `mut x`
 139 |     *x.y_mut() = 3; //~ ERROR cannot borrow
     |      ^ cannot borrow mutably
 
diff --git a/src/test/ui/span/borrowck-borrow-overloaded-deref-mut.stderr b/src/test/ui/span/borrowck-borrow-overloaded-deref-mut.stderr
index af954a4d792..2ec01168721 100644
--- a/src/test/ui/span/borrowck-borrow-overloaded-deref-mut.stderr
+++ b/src/test/ui/span/borrowck-borrow-overloaded-deref-mut.stderr
@@ -2,7 +2,7 @@ error: cannot borrow immutable argument `x` as mutable
   --> $DIR/borrowck-borrow-overloaded-deref-mut.rs:39:25
    |
 38 | fn deref_mut1(x: Own<isize>) {
-   |               - use `mut x` here to make mutable
+   |               - consider changing this to `mut x`
 39 |     let __isize = &mut *x; //~ ERROR cannot borrow
    |                         ^ cannot borrow mutably
 
@@ -18,7 +18,7 @@ error: cannot borrow immutable argument `x` as mutable
   --> $DIR/borrowck-borrow-overloaded-deref-mut.rs:59:6
    |
 58 | fn assign1<'a>(x: Own<isize>) {
-   |                - use `mut x` here to make mutable
+   |                - consider changing this to `mut x`
 59 |     *x = 3; //~ ERROR cannot borrow
    |      ^ cannot borrow mutably
 
diff --git a/src/test/ui/span/borrowck-object-mutability.stderr b/src/test/ui/span/borrowck-object-mutability.stderr
index 4ef1cb9c239..0abdbdc3a21 100644
--- a/src/test/ui/span/borrowck-object-mutability.stderr
+++ b/src/test/ui/span/borrowck-object-mutability.stderr
@@ -10,6 +10,9 @@ error: cannot borrow immutable borrowed content `*x` as mutable
 error: cannot borrow immutable `Box` content `*x` as mutable
   --> $DIR/borrowck-object-mutability.rs:29:5
    |
+27 | fn owned_receiver(x: Box<Foo>) {
+   |                   - consider changing this to `mut x`
+28 |     x.borrowed();
 29 |     x.borrowed_mut(); //~ ERROR cannot borrow
    |     ^ cannot borrow as mutable
 
diff --git a/src/test/compile-fail/issue-18343.rs b/src/test/ui/suggestions/confuse-field-and-method/issue-18343.rs
index 4601db9dba0..fc3c58e5223 100644
--- a/src/test/compile-fail/issue-18343.rs
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-18343.rs
@@ -14,6 +14,8 @@ struct Obj<F> where F: FnMut() -> u32 {
 
 fn main() {
     let o = Obj { closure: || 42 };
-    o.closure(); //~ ERROR no method named `closure` found
-    //~^ NOTE use `(o.closure)(...)` if you meant to call the function stored in the `closure` field
+    o.closure();
+    //~^ ERROR no method named `closure` found
+    //~| HELP use `(o.closure)(...)` if you meant to call the function stored in the `closure` field
+    //~| NOTE field, not a method
 }
diff --git a/src/test/ui/suggestions/confuse-field-and-method/issue-18343.stderr b/src/test/ui/suggestions/confuse-field-and-method/issue-18343.stderr
new file mode 100644
index 00000000000..9e5e4adb180
--- /dev/null
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-18343.stderr
@@ -0,0 +1,10 @@
+error: no method named `closure` found for type `Obj<[closure@$DIR/issue-18343.rs:16:28: 16:33]>` in the current scope
+  --> $DIR/issue-18343.rs:17:7
+   |
+17 |     o.closure();
+   |       ^^^^^^^ field, not a method
+   |
+   = help: use `(o.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: aborting due to previous error
+
diff --git a/src/test/compile-fail/issue-2392.rs b/src/test/ui/suggestions/confuse-field-and-method/issue-2392.rs
index 805725dd749..f84f35ce84b 100644
--- a/src/test/compile-fail/issue-2392.rs
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-2392.rs
@@ -48,45 +48,58 @@ fn main() {
 
     let o_closure = Obj { closure: || 42, not_closure: 42 };
     o_closure.closure(); //~ ERROR no method named `closure` found
-    //~^ NOTE use `(o_closure.closure)(...)` if you meant to call the function stored
+    //~^ HELP use `(o_closure.closure)(...)` if you meant to call the function stored
+    //~| NOTE field, not a method
 
-    o_closure.not_closure(); //~ ERROR no method named `not_closure` found
-    //~^ NOTE did you mean to write `o_closure.not_closure`?
+    o_closure.not_closure();
+    //~^ ERROR no method named `not_closure` found
+    //~| NOTE field, not a method
+    //~| HELP did you mean to write `o_closure.not_closure` instead of `o_closure.not_closure(...)`?
 
     let o_func = Obj { closure: func, not_closure: 5 };
     o_func.closure(); //~ ERROR no method named `closure` found
-    //~^ NOTE use `(o_func.closure)(...)` if you meant to call the function stored
+    //~^ HELP use `(o_func.closure)(...)` if you meant to call the function stored
+    //~| NOTE field, not a method
 
     let boxed_fn = BoxedObj { boxed_closure: Box::new(func) };
     boxed_fn.boxed_closure();//~ ERROR no method named `boxed_closure` found
-    //~^ NOTE use `(boxed_fn.boxed_closure)(...)` if you meant to call the function stored
+    //~^ HELP use `(boxed_fn.boxed_closure)(...)` if you meant to call the function stored
+    //~| NOTE field, not a method
 
     let boxed_closure = BoxedObj { boxed_closure: Box::new(|| 42_u32) as Box<FnBox() -> u32> };
     boxed_closure.boxed_closure();//~ ERROR no method named `boxed_closure` found
-    //~^ NOTE use `(boxed_closure.boxed_closure)(...)` if you meant to call the function stored
+    //~^ HELP use `(boxed_closure.boxed_closure)(...)` if you meant to call the function stored
+    //~| NOTE field, not a method
 
     // test expression writing in the notes
 
     let w = Wrapper { wrap: o_func };
     w.wrap.closure();//~ ERROR no method named `closure` found
-    //~^ NOTE use `(w.wrap.closure)(...)` if you meant to call the function stored
+    //~^ HELP use `(w.wrap.closure)(...)` if you meant to call the function stored
+    //~| NOTE field, not a method
 
-    w.wrap.not_closure();//~ ERROR no method named `not_closure` found
-    //~^ NOTE did you mean to write `w.wrap.not_closure`?
+    w.wrap.not_closure();
+    //~^ ERROR no method named `not_closure` found
+    //~| NOTE field, not a method
+    //~| HELP did you mean to write `w.wrap.not_closure` instead of `w.wrap.not_closure(...)`?
 
     check_expression().closure();//~ ERROR no method named `closure` found
-    //~^ NOTE use `(check_expression().closure)(...)` if you meant to call the function stored
+    //~^ HELP use `(check_expression().closure)(...)` if you meant to call the function stored
+    //~| NOTE field, not a method
 }
 
 impl FuncContainerOuter {
     fn run(&self) {
         unsafe {
             (*self.container).f1(1); //~ ERROR no method named `f1` found
-            //~^ NOTE use `((*self.container).f1)(...)`
+            //~^ HELP use `((*self.container).f1)(...)`
+            //~| NOTE field, not a method
             (*self.container).f2(1); //~ ERROR no method named `f2` found
-            //~^ NOTE use `((*self.container).f2)(...)`
+            //~^ HELP use `((*self.container).f2)(...)`
+            //~| NOTE field, not a method
             (*self.container).f3(1); //~ ERROR no method named `f3` found
-            //~^ NOTE use `((*self.container).f3)(...)`
+            //~^ HELP use `((*self.container).f3)(...)`
+            //~| NOTE field, not a method
         }
     }
 }
diff --git a/src/test/ui/suggestions/confuse-field-and-method/issue-2392.stderr b/src/test/ui/suggestions/confuse-field-and-method/issue-2392.stderr
new file mode 100644
index 00000000000..56e1060bdb9
--- /dev/null
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-2392.stderr
@@ -0,0 +1,90 @@
+error: no method named `closure` found for type `Obj<[closure@$DIR/issue-2392.rs:49:36: 49:41]>` in the current scope
+  --> $DIR/issue-2392.rs:50:15
+   |
+50 |     o_closure.closure(); //~ ERROR no method named `closure` found
+   |               ^^^^^^^ field, not a method
+   |
+   = help: use `(o_closure.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `not_closure` found for type `Obj<[closure@$DIR/issue-2392.rs:49:36: 49:41]>` in the current scope
+  --> $DIR/issue-2392.rs:54:15
+   |
+54 |     o_closure.not_closure();
+   |               ^^^^^^^^^^^ field, not a method
+   |
+   = help: did you mean to write `o_closure.not_closure` instead of `o_closure.not_closure(...)`?
+
+error: no method named `closure` found for type `Obj<fn() -> u32 {func}>` in the current scope
+  --> $DIR/issue-2392.rs:60:12
+   |
+60 |     o_func.closure(); //~ ERROR no method named `closure` found
+   |            ^^^^^^^ field, not a method
+   |
+   = help: use `(o_func.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `boxed_closure` found for type `BoxedObj` in the current scope
+  --> $DIR/issue-2392.rs:65:14
+   |
+65 |     boxed_fn.boxed_closure();//~ ERROR no method named `boxed_closure` found
+   |              ^^^^^^^^^^^^^ field, not a method
+   |
+   = help: use `(boxed_fn.boxed_closure)(...)` if you meant to call the function stored in the `boxed_closure` field
+
+error: no method named `boxed_closure` found for type `BoxedObj` in the current scope
+  --> $DIR/issue-2392.rs:70:19
+   |
+70 |     boxed_closure.boxed_closure();//~ ERROR no method named `boxed_closure` found
+   |                   ^^^^^^^^^^^^^ field, not a method
+   |
+   = help: use `(boxed_closure.boxed_closure)(...)` if you meant to call the function stored in the `boxed_closure` field
+
+error: no method named `closure` found for type `Obj<fn() -> u32 {func}>` in the current scope
+  --> $DIR/issue-2392.rs:77:12
+   |
+77 |     w.wrap.closure();//~ ERROR no method named `closure` found
+   |            ^^^^^^^ field, not a method
+   |
+   = help: use `(w.wrap.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `not_closure` found for type `Obj<fn() -> u32 {func}>` in the current scope
+  --> $DIR/issue-2392.rs:81:12
+   |
+81 |     w.wrap.not_closure();
+   |            ^^^^^^^^^^^ field, not a method
+   |
+   = help: did you mean to write `w.wrap.not_closure` instead of `w.wrap.not_closure(...)`?
+
+error: no method named `closure` found for type `Obj<std::boxed::Box<std::boxed::FnBox<(), Output=u32> + 'static>>` in the current scope
+  --> $DIR/issue-2392.rs:86:24
+   |
+86 |     check_expression().closure();//~ ERROR no method named `closure` found
+   |                        ^^^^^^^ field, not a method
+   |
+   = help: use `(check_expression().closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `f1` found for type `FuncContainer` in the current scope
+  --> $DIR/issue-2392.rs:94:31
+   |
+94 |             (*self.container).f1(1); //~ ERROR no method named `f1` found
+   |                               ^^ field, not a method
+   |
+   = help: use `((*self.container).f1)(...)` if you meant to call the function stored in the `f1` field
+
+error: no method named `f2` found for type `FuncContainer` in the current scope
+  --> $DIR/issue-2392.rs:97:31
+   |
+97 |             (*self.container).f2(1); //~ ERROR no method named `f2` found
+   |                               ^^ field, not a method
+   |
+   = help: use `((*self.container).f2)(...)` if you meant to call the function stored in the `f2` field
+
+error: no method named `f3` found for type `FuncContainer` in the current scope
+   --> $DIR/issue-2392.rs:100:31
+    |
+100 |             (*self.container).f3(1); //~ ERROR no method named `f3` found
+    |                               ^^ field, not a method
+    |
+    = help: use `((*self.container).f3)(...)` if you meant to call the function stored in the `f3` field
+
+error: aborting due to 11 previous errors
+
diff --git a/src/test/compile-fail/issue-32128.rs b/src/test/ui/suggestions/confuse-field-and-method/issue-32128.rs
index fe7e66a2116..2fd7dc246c2 100644
--- a/src/test/compile-fail/issue-32128.rs
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-32128.rs
@@ -19,7 +19,9 @@ fn main() {
         })
     };
 
-    demo.example(1);    //~ ERROR no method named `example`
-                        //~^ NOTE use `(demo.example)(...)`
+    demo.example(1);
+    //~^ ERROR no method named `example`
+    //~| HELP use `(demo.example)(...)`
+    //~| NOTE field, not a method
     // (demo.example)(1);
 }
diff --git a/src/test/ui/suggestions/confuse-field-and-method/issue-32128.stderr b/src/test/ui/suggestions/confuse-field-and-method/issue-32128.stderr
new file mode 100644
index 00000000000..0d2a895bad1
--- /dev/null
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-32128.stderr
@@ -0,0 +1,10 @@
+error: no method named `example` found for type `Example` in the current scope
+  --> $DIR/issue-32128.rs:22:10
+   |
+22 |     demo.example(1);
+   |          ^^^^^^^ field, not a method
+   |
+   = help: use `(demo.example)(...)` if you meant to call the function stored in the `example` field
+
+error: aborting due to previous error
+
diff --git a/src/test/compile-fail/issue-33784.rs b/src/test/ui/suggestions/confuse-field-and-method/issue-33784.rs
index 4229be29473..03c84fc57be 100644
--- a/src/test/compile-fail/issue-33784.rs
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-33784.rs
@@ -35,12 +35,15 @@ fn main() {
     let o = Obj { fn_ptr: empty, closure: || 42 };
     let p = &o;
     p.closure(); //~ ERROR no method named `closure` found
-    //~^ NOTE use `(p.closure)(...)` if you meant to call the function stored in the `closure` field
+    //~^ HELP use `(p.closure)(...)` if you meant to call the function stored in the `closure` field
+    //~| NOTE `closure` is a field storing a function, not a method
     let q = &p;
     q.fn_ptr(); //~ ERROR no method named `fn_ptr` found
-    //~^ NOTE use `(q.fn_ptr)(...)` if you meant to call the function stored in the `fn_ptr` field
+    //~^ HELP use `(q.fn_ptr)(...)` if you meant to call the function stored in the `fn_ptr` field
+    //~| NOTE `fn_ptr` is a field storing a function, not a method
     let r = D(C { c_fn_ptr: empty });
     let s = &r;
     s.c_fn_ptr(); //~ ERROR no method named `c_fn_ptr` found
-    //~^ NOTE use `(s.c_fn_ptr)(...)` if you meant to call the function stored in the `c_fn_ptr`
+    //~^ HELP use `(s.c_fn_ptr)(...)` if you meant to call the function stored in the `c_fn_ptr`
+    //~| NOTE `c_fn_ptr` is a field storing a function, not a method
 }
diff --git a/src/test/ui/suggestions/confuse-field-and-method/issue-33784.stderr b/src/test/ui/suggestions/confuse-field-and-method/issue-33784.stderr
new file mode 100644
index 00000000000..70d64e3ffa3
--- /dev/null
+++ b/src/test/ui/suggestions/confuse-field-and-method/issue-33784.stderr
@@ -0,0 +1,26 @@
+error: no method named `closure` found for type `&Obj<[closure@$DIR/issue-33784.rs:35:43: 35:48]>` in the current scope
+  --> $DIR/issue-33784.rs:37:7
+   |
+37 |     p.closure(); //~ ERROR no method named `closure` found
+   |       ^^^^^^^ field, not a method
+   |
+   = help: use `(p.closure)(...)` if you meant to call the function stored in the `closure` field
+
+error: no method named `fn_ptr` found for type `&&Obj<[closure@$DIR/issue-33784.rs:35:43: 35:48]>` in the current scope
+  --> $DIR/issue-33784.rs:41:7
+   |
+41 |     q.fn_ptr(); //~ ERROR no method named `fn_ptr` found
+   |       ^^^^^^ field, not a method
+   |
+   = help: use `(q.fn_ptr)(...)` if you meant to call the function stored in the `fn_ptr` field
+
+error: no method named `c_fn_ptr` found for type `&D` in the current scope
+  --> $DIR/issue-33784.rs:46:7
+   |
+46 |     s.c_fn_ptr(); //~ ERROR no method named `c_fn_ptr` found
+   |       ^^^^^^^^ field, not a method
+   |
+   = help: use `(s.c_fn_ptr)(...)` if you meant to call the function stored in the `c_fn_ptr` field
+
+error: aborting due to 3 previous errors
+