diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs
index a76584093fc76..a8f0d24ce63db 100644
--- a/src/bootstrap/bin/rustc.rs
+++ b/src/bootstrap/bin/rustc.rs
@@ -290,9 +290,7 @@ fn main() {
     }
 
     // This is required for internal lints.
-    if stage != "0" {
-        cmd.arg("-Zunstable-options");
-    }
+    cmd.arg("-Zunstable-options");
 
     // Force all crates compiled by this compiler to (a) be unstable and (b)
     // allow the `rustc_private` feature to link to other unstable crates
diff --git a/src/bootstrap/channel.rs b/src/bootstrap/channel.rs
index e42b073322e28..a6da4f5385a5b 100644
--- a/src/bootstrap/channel.rs
+++ b/src/bootstrap/channel.rs
@@ -13,7 +13,7 @@ use build_helper::output;
 use crate::Build;
 
 // The version number
-pub const CFG_RELEASE_NUM: &str = "1.35.0";
+pub const CFG_RELEASE_NUM: &str = "1.36.0";
 
 pub struct GitInfo {
     inner: Option<Info>,
diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs
index bcd28e9cf5e70..fb60b470a36f2 100644
--- a/src/bootstrap/lib.rs
+++ b/src/bootstrap/lib.rs
@@ -1125,8 +1125,6 @@ impl Build {
     /// `rust.save-toolstates` in `config.toml`. If unspecified, nothing will be
     /// done. The file is updated immediately after this function completes.
     pub fn save_toolstate(&self, tool: &str, state: ToolState) {
-        use std::io::{Seek, SeekFrom};
-
         if let Some(ref path) = self.config.save_toolstates {
             let mut file = t!(fs::OpenOptions::new()
                 .create(true)
diff --git a/src/libarena/lib.rs b/src/libarena/lib.rs
index cfe317a00f906..ce5e5f23a94b8 100644
--- a/src/libarena/lib.rs
+++ b/src/libarena/lib.rs
@@ -12,7 +12,7 @@
        test(no_crate_inject, attr(deny(warnings))))]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(core_intrinsics)]
 #![feature(dropck_eyepatch)]
diff --git a/src/libcore/hint.rs b/src/libcore/hint.rs
index d43e6c49f4c99..89bf364096896 100644
--- a/src/libcore/hint.rs
+++ b/src/libcore/hint.rs
@@ -21,11 +21,10 @@ use intrinsics;
 /// difficult-to-debug problems.
 ///
 /// Use this function only when you can prove that the code will never call it.
+/// Otherwise, consider using the [`unreachable!`] macro, which does not allow
+/// optimizations but will panic when executed.
 ///
-/// The [`unreachable!()`] macro is the safe counterpart of this function, which
-/// will panic instead when executed.
-///
-/// [`unreachable!()`]: ../macro.unreachable.html
+/// [`unreachable!`]: ../macro.unreachable.html
 ///
 /// # Example
 ///
diff --git a/src/libfmt_macros/lib.rs b/src/libfmt_macros/lib.rs
index 2536121c7a324..6fed83021609d 100644
--- a/src/libfmt_macros/lib.rs
+++ b/src/libfmt_macros/lib.rs
@@ -9,7 +9,7 @@
        test(attr(deny(warnings))))]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(nll)]
 #![feature(rustc_private)]
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index c5c2cbfcb8940..4cbf8e3ecfc66 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -29,7 +29,7 @@
 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 #![allow(explicit_outlives_requirements)]
 
 #![feature(arbitrary_self_types)]
diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs
index c20454a8822cd..df77033ebef3b 100644
--- a/src/librustc/middle/entry.rs
+++ b/src/librustc/middle/entry.rs
@@ -163,7 +163,6 @@ fn configure_main(
                 err.span_note(span, "here is a function named 'main'");
             }
             err.emit();
-            tcx.sess.abort_if_errors();
         } else {
             if let Some(ref filename) = tcx.sess.local_crate_source_file {
                 err.note(&format!("consider adding a `main` function to `{}`", filename.display()));
diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs
index d24395ac9c182..4aca01d9411c7 100644
--- a/src/librustc/ty/mod.rs
+++ b/src/librustc/ty/mod.rs
@@ -1,4 +1,4 @@
-#![cfg_attr(not(stage0), allow(usage_of_ty_tykind))]
+#![allow(usage_of_ty_tykind)]
 
 pub use self::Variance::*;
 pub use self::AssociatedItemContainer::*;
diff --git a/src/librustc_allocator/lib.rs b/src/librustc_allocator/lib.rs
index a9e422fb238b8..3aef5a76a3a05 100644
--- a/src/librustc_allocator/lib.rs
+++ b/src/librustc_allocator/lib.rs
@@ -2,7 +2,7 @@
 #![feature(rustc_private)]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 pub mod expand;
 
diff --git a/src/librustc_borrowck/lib.rs b/src/librustc_borrowck/lib.rs
index 3761a52bcccf2..14bc77f380acc 100644
--- a/src/librustc_borrowck/lib.rs
+++ b/src/librustc_borrowck/lib.rs
@@ -2,7 +2,7 @@
 
 #![allow(non_camel_case_types)]
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(nll)]
 
diff --git a/src/librustc_codegen_ssa/back/linker.rs b/src/librustc_codegen_ssa/back/linker.rs
index c99fc17dd89a1..b433856d5e130 100644
--- a/src/librustc_codegen_ssa/back/linker.rs
+++ b/src/librustc_codegen_ssa/back/linker.rs
@@ -372,25 +372,18 @@ impl<'a> Linker for GccLinker<'a> {
     }
 
     fn export_symbols(&mut self, tmpdir: &Path, crate_type: CrateType) {
-        // If we're compiling a dylib, then we let symbol visibility in object
-        // files to take care of whether they're exported or not.
-        //
-        // If we're compiling a cdylib, however, we manually create a list of
-        // exported symbols to ensure we don't expose any more. The object files
-        // have far more public symbols than we actually want to export, so we
-        // hide them all here.
-        if crate_type == CrateType::Dylib ||
-           crate_type == CrateType::ProcMacro {
-            return
-        }
+        // We manually create a list of exported symbols to ensure we don't expose any more.
+        // The object files have far more public symbols than we actually want to export,
+        // so we hide them all here.
 
-        // Symbol visibility takes care of this for the WebAssembly.
-        // Additionally the only known linker, LLD, doesn't support the script
-        // arguments just yet
-        if self.sess.target.target.arch == "wasm32" {
+        if !self.sess.target.target.options.limit_rdylib_exports {
             return;
         }
 
+        if crate_type == CrateType::ProcMacro {
+            return
+        }
+
         let mut arg = OsString::new();
         let path = tmpdir.join("list");
 
diff --git a/src/librustc_codegen_ssa/lib.rs b/src/librustc_codegen_ssa/lib.rs
index e2917578c0ece..c6e689f2e83c3 100644
--- a/src/librustc_codegen_ssa/lib.rs
+++ b/src/librustc_codegen_ssa/lib.rs
@@ -14,7 +14,7 @@
 #![allow(unused_attributes)]
 #![allow(dead_code)]
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 #![allow(explicit_outlives_requirements)]
 
 #![recursion_limit="256"]
diff --git a/src/librustc_codegen_utils/lib.rs b/src/librustc_codegen_utils/lib.rs
index 330cfe154e302..437515f1e9ab4 100644
--- a/src/librustc_codegen_utils/lib.rs
+++ b/src/librustc_codegen_utils/lib.rs
@@ -16,7 +16,7 @@
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #[macro_use]
 extern crate rustc;
diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs
index 66c7c9d0eae7e..6a5accc8d7f05 100644
--- a/src/librustc_driver/lib.rs
+++ b/src/librustc_driver/lib.rs
@@ -17,7 +17,7 @@
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 pub extern crate getopts;
 #[cfg(unix)]
diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs
index 71bef54cd17a1..cb45e13c4d2dc 100644
--- a/src/librustc_errors/lib.rs
+++ b/src/librustc_errors/lib.rs
@@ -6,7 +6,7 @@
 #![feature(nll)]
 #![feature(optin_builtin_traits)]
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #[allow(unused_extern_crates)]
 extern crate serialize as rustc_serialize; // used by deriving
diff --git a/src/librustc_incremental/lib.rs b/src/librustc_incremental/lib.rs
index d7db324f3463e..eb82885abee06 100644
--- a/src/librustc_incremental/lib.rs
+++ b/src/librustc_incremental/lib.rs
@@ -8,7 +8,7 @@
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #[macro_use] extern crate rustc;
 #[allow(unused_extern_crates)]
diff --git a/src/librustc_interface/lib.rs b/src/librustc_interface/lib.rs
index 353ff6a57a5ef..d1e2a1a4ad506 100644
--- a/src/librustc_interface/lib.rs
+++ b/src/librustc_interface/lib.rs
@@ -7,7 +7,7 @@
 #![cfg_attr(unix, feature(libc))]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![allow(unused_imports)]
 
diff --git a/src/librustc_interface/passes.rs b/src/librustc_interface/passes.rs
index 3fd684f5d97e9..2f01254ed5f9b 100644
--- a/src/librustc_interface/passes.rs
+++ b/src/librustc_interface/passes.rs
@@ -886,10 +886,11 @@ fn analysis<'tcx>(
     assert_eq!(cnum, LOCAL_CRATE);
 
     let sess = tcx.sess;
+    let mut entry_point = None;
 
     time(sess, "misc checking 1", || {
         parallel!({
-            time(sess, "looking for entry point", || {
+            entry_point = time(sess, "looking for entry point", || {
                 middle::entry::find_entry_point(tcx)
             });
 
@@ -937,7 +938,10 @@ fn analysis<'tcx>(
 
     // Abort so we don't try to construct MIR with liveness errors.
     // We also won't want to continue with errors from rvalue promotion
-    tcx.sess.abort_if_errors();
+    // We only do so if the only error found so far *isn't* a missing `fn main()`
+    if !(entry_point.is_none() && sess.err_count() == 1) {
+        tcx.sess.abort_if_errors();
+    }
 
     time(sess, "borrow checking", || {
         if tcx.use_ast_borrowck() {
diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs
index 9354f203e4e4e..ff5e4f02554cc 100644
--- a/src/librustc_lint/lib.rs
+++ b/src/librustc_lint/lib.rs
@@ -20,7 +20,7 @@
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #[macro_use]
 extern crate rustc;
diff --git a/src/librustc_metadata/lib.rs b/src/librustc_metadata/lib.rs
index 4078171733fc3..d052e13f9c0a7 100644
--- a/src/librustc_metadata/lib.rs
+++ b/src/librustc_metadata/lib.rs
@@ -14,7 +14,7 @@
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 extern crate libc;
 #[allow(unused_extern_crates)]
diff --git a/src/librustc_mir/lib.rs b/src/librustc_mir/lib.rs
index deeed9a0b9846..a16eaf011c86e 100644
--- a/src/librustc_mir/lib.rs
+++ b/src/librustc_mir/lib.rs
@@ -28,7 +28,7 @@ Rust MIR: a lowered representation of Rust. Also: an experiment!
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 #![allow(explicit_outlives_requirements)]
 
 #[macro_use] extern crate log;
diff --git a/src/librustc_passes/lib.rs b/src/librustc_passes/lib.rs
index 20442a4a566ec..db8fcaa569389 100644
--- a/src/librustc_passes/lib.rs
+++ b/src/librustc_passes/lib.rs
@@ -12,7 +12,7 @@
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #[macro_use]
 extern crate rustc;
diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs
index 44621e5dc95d1..ef315c5f95502 100644
--- a/src/librustc_privacy/lib.rs
+++ b/src/librustc_privacy/lib.rs
@@ -1,7 +1,7 @@
 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(nll)]
 #![feature(rustc_diagnostic_macros)]
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 96aac97729797..864fc2ebaec77 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -9,7 +9,7 @@
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 pub use rustc::hir::def::{Namespace, PerNS};
 
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs
index ce0decaee496f..d901fb2bff8c7 100644
--- a/src/librustc_save_analysis/lib.rs
+++ b/src/librustc_save_analysis/lib.rs
@@ -2,7 +2,7 @@
 #![feature(custom_attribute)]
 #![feature(nll)]
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 #![allow(unused_attributes)]
 
 #![recursion_limit="256"]
diff --git a/src/librustc_target/lib.rs b/src/librustc_target/lib.rs
index f1812c20dccde..3fcf08adb5c8e 100644
--- a/src/librustc_target/lib.rs
+++ b/src/librustc_target/lib.rs
@@ -16,7 +16,7 @@
 #![feature(step_trait)]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #[macro_use] extern crate log;
 
diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs
index 46fefd78f4519..64799324f6a55 100644
--- a/src/librustc_target/spec/mod.rs
+++ b/src/librustc_target/spec/mod.rs
@@ -751,6 +751,9 @@ pub struct TargetOptions {
     /// wasm32 where the whole program either has simd or not.
     pub simd_types_indirect: bool,
 
+    /// Pass a list of symbol which should be exported in the dylib to the linker.
+    pub limit_rdylib_exports: bool,
+
     /// If set, have the linker export exactly these symbols, instead of using
     /// the usual logic to figure this out from the crate itself.
     pub override_export_symbols: Option<Vec<String>>,
@@ -846,6 +849,7 @@ impl Default for TargetOptions {
             emit_debug_gdb_scripts: true,
             requires_uwtable: false,
             simd_types_indirect: true,
+            limit_rdylib_exports: true,
             override_export_symbols: None,
             merge_functions: MergeFunctions::Aliases,
             target_mcount: "mcount".to_string(),
@@ -1152,6 +1156,7 @@ impl Target {
         key!(emit_debug_gdb_scripts, bool);
         key!(requires_uwtable, bool);
         key!(simd_types_indirect, bool);
+        key!(limit_rdylib_exports, bool);
         key!(override_export_symbols, opt_list);
         key!(merge_functions, MergeFunctions)?;
         key!(target_mcount);
@@ -1367,6 +1372,7 @@ impl ToJson for Target {
         target_option_val!(emit_debug_gdb_scripts);
         target_option_val!(requires_uwtable);
         target_option_val!(simd_types_indirect);
+        target_option_val!(limit_rdylib_exports);
         target_option_val!(override_export_symbols);
         target_option_val!(merge_functions);
         target_option_val!(target_mcount);
diff --git a/src/librustc_target/spec/solaris_base.rs b/src/librustc_target/spec/solaris_base.rs
index 0dfbb13b77317..9e7eda037732b 100644
--- a/src/librustc_target/spec/solaris_base.rs
+++ b/src/librustc_target/spec/solaris_base.rs
@@ -8,6 +8,7 @@ pub fn opts() -> TargetOptions {
         has_rpath: true,
         target_family: Some("unix".to_string()),
         is_like_solaris: true,
+        limit_rdylib_exports: false, // Linker doesn't support this
 
         .. Default::default()
     }
diff --git a/src/librustc_target/spec/wasm32_base.rs b/src/librustc_target/spec/wasm32_base.rs
index edaf902c130d8..39a8ce9282573 100644
--- a/src/librustc_target/spec/wasm32_base.rs
+++ b/src/librustc_target/spec/wasm32_base.rs
@@ -106,6 +106,11 @@ pub fn options() -> TargetOptions {
         // no dynamic linking, no need for default visibility!
         default_hidden_visibility: true,
 
+        // Symbol visibility takes care of this for the WebAssembly.
+        // Additionally the only known linker, LLD, doesn't support the script
+        // arguments just yet
+        limit_rdylib_exports: false,
+
         // we use the LLD shipped with the Rust toolchain by default
         linker: Some("rust-lld".to_owned()),
         lld_flavor: LldFlavor::Wasm,
diff --git a/src/librustc_target/spec/wasm32_experimental_emscripten.rs b/src/librustc_target/spec/wasm32_experimental_emscripten.rs
index 5ecd66306d055..b802bee25ae7a 100644
--- a/src/librustc_target/spec/wasm32_experimental_emscripten.rs
+++ b/src/librustc_target/spec/wasm32_experimental_emscripten.rs
@@ -24,6 +24,7 @@ pub fn target() -> Result<Target, String> {
         is_like_emscripten: true,
         max_atomic_width: Some(32),
         post_link_args,
+        limit_rdylib_exports: false,
         target_family: Some("unix".to_string()),
         .. Default::default()
     };
diff --git a/src/librustc_target/spec/wasm32_unknown_emscripten.rs b/src/librustc_target/spec/wasm32_unknown_emscripten.rs
index a6e9340ce28ef..e0df36884bf56 100644
--- a/src/librustc_target/spec/wasm32_unknown_emscripten.rs
+++ b/src/librustc_target/spec/wasm32_unknown_emscripten.rs
@@ -26,6 +26,7 @@ pub fn target() -> Result<Target, String> {
         is_like_emscripten: true,
         max_atomic_width: Some(32),
         post_link_args,
+        limit_rdylib_exports: false,
         target_family: Some("unix".to_string()),
         codegen_backend: "emscripten".to_string(),
         .. Default::default()
diff --git a/src/librustc_traits/lib.rs b/src/librustc_traits/lib.rs
index bc034e1fb1627..959130f1cf228 100644
--- a/src/librustc_traits/lib.rs
+++ b/src/librustc_traits/lib.rs
@@ -2,7 +2,7 @@
 //! the guts are broken up into modules; see the comments in those modules.
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(crate_visibility_modifier)]
 #![feature(in_band_lifetimes)]
diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs
index 21d1af229ddc2..4320e28d676ed 100644
--- a/src/librustc_typeck/lib.rs
+++ b/src/librustc_typeck/lib.rs
@@ -71,7 +71,7 @@ This API is completely unstable and subject to change.
 #![recursion_limit="256"]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 #![allow(explicit_outlives_requirements)]
 
 #[macro_use] extern crate log;
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 3ee131d8f5c8c..d91b78c8416b8 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -2113,7 +2113,8 @@ impl Context {
                  &final_file);
 
         // Generating settings page.
-        let settings = Settings::new("./", &self.shared.resource_suffix);
+        let settings = Settings::new(self.shared.static_root_path.deref().unwrap_or("./"),
+                                     &self.shared.resource_suffix);
         page.title = "Rustdoc settings";
         page.description = "Settings of Rustdoc";
         page.root_path = "./";
diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs
index 6cb937d9216ac..5b76f6861de79 100644
--- a/src/librustdoc/lib.rs
+++ b/src/librustdoc/lib.rs
@@ -1,5 +1,5 @@
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/",
        html_playground_url = "https://play.rust-lang.org/")]
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index 9905b981395c0..1486909b27692 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -8,7 +8,7 @@
        test(attr(deny(warnings))))]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(crate_visibility_modifier)]
 #![feature(label_break_value)]
diff --git a/src/libsyntax_ext/lib.rs b/src/libsyntax_ext/lib.rs
index ee0b86963f31d..8371d27207589 100644
--- a/src/libsyntax_ext/lib.rs
+++ b/src/libsyntax_ext/lib.rs
@@ -3,7 +3,7 @@
 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(in_band_lifetimes)]
 #![feature(proc_macro_diagnostic)]
diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs
index 1ad556bbcfa56..3f09405a5c8c6 100644
--- a/src/libsyntax_pos/lib.rs
+++ b/src/libsyntax_pos/lib.rs
@@ -7,7 +7,7 @@
 #![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
 
 #![deny(rust_2018_idioms)]
-#![cfg_attr(not(stage0), deny(internal))]
+#![deny(internal)]
 
 #![feature(const_fn)]
 #![feature(crate_visibility_modifier)]
diff --git a/src/stage0.txt b/src/stage0.txt
index 43610f9068f57..17dba63054eac 100644
--- a/src/stage0.txt
+++ b/src/stage0.txt
@@ -12,7 +12,7 @@
 # source tarball for a stable release you'll likely see `1.x.0` for rustc and
 # `0.x.0` for Cargo where they were released on `date`.
 
-date: 2019-03-20
+date: 2019-04-11
 rustc: beta
 cargo: beta
 
diff --git a/src/test/rustdoc/static-root-path.rs b/src/test/rustdoc/static-root-path.rs
index 84b32f90c89a4..2f7c89c5f1e6b 100644
--- a/src/test/rustdoc/static-root-path.rs
+++ b/src/test/rustdoc/static-root-path.rs
@@ -12,3 +12,7 @@ pub struct SomeStruct;
 // @!matches - '"\.\./\.\./source-script\.js"'
 // @matches - '"\.\./\.\./source-files.js"'
 // @!matches - '"/cache/source-files\.js"'
+
+// @has settings.html
+// @matches - '/cache/settings\.js'
+// @!matches - '\./settings\.js'
diff --git a/src/test/ui/continue-after-missing-main.rs b/src/test/ui/continue-after-missing-main.rs
new file mode 100644
index 0000000000000..7455c2a431d62
--- /dev/null
+++ b/src/test/ui/continue-after-missing-main.rs
@@ -0,0 +1,32 @@
+#![allow(dead_code)]
+
+// error-pattern:`main` function not found in crate
+
+struct Tableau<'a, MP> {
+    provider: &'a MP,
+}
+
+impl<'adapted_matrix_provider, 'original_data, MP>
+    Tableau<'adapted_matrix_provider, AdaptedMatrixProvider<'original_data, MP>>
+{
+    fn provider(&self) -> &'adapted_matrix_provider AdaptedMatrixProvider</*'original_data,*/ MP> {
+        self.provider
+    }
+}
+
+struct AdaptedMatrixProvider<'a, T> {
+    original_problem: &'a T,
+}
+
+impl<'a, T> AdaptedMatrixProvider<'a, T> {
+    fn clone_with_extra_bound(&self) -> Self {
+        AdaptedMatrixProvider { original_problem: self.original_problem }
+    }
+}
+
+fn create_and_solve_subproblems<'data_provider, 'original_data, MP>(
+    tableau: Tableau<'data_provider, AdaptedMatrixProvider<'original_data, MP>>,
+) {
+    let _: AdaptedMatrixProvider<'original_data, MP> = tableau.provider().clone_with_extra_bound();
+    //~^ ERROR lifetime mismatch
+}
diff --git a/src/test/ui/continue-after-missing-main.stderr b/src/test/ui/continue-after-missing-main.stderr
new file mode 100644
index 0000000000000..8d64fee8bdaee
--- /dev/null
+++ b/src/test/ui/continue-after-missing-main.stderr
@@ -0,0 +1,17 @@
+error[E0601]: `main` function not found in crate `continue_after_missing_main`
+   |
+   = note: consider adding a `main` function to `$DIR/continue-after-missing-main.rs`
+
+error[E0623]: lifetime mismatch
+  --> $DIR/continue-after-missing-main.rs:30:56
+   |
+LL |     tableau: Tableau<'data_provider, AdaptedMatrixProvider<'original_data, MP>>,
+   |              ------------------------------------------------------------------ these two types are declared with different lifetimes...
+LL | ) {
+LL |     let _: AdaptedMatrixProvider<'original_data, MP> = tableau.provider().clone_with_extra_bound();
+   |                                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...but data from `tableau` flows into `tableau` here
+
+error: aborting due to 2 previous errors
+
+Some errors occurred: E0601, E0623.
+For more information about an error, try `rustc --explain E0601`.
diff --git a/src/tools/cargo b/src/tools/cargo
index 6f3e9c367abb4..ef0223f12597b 160000
--- a/src/tools/cargo
+++ b/src/tools/cargo
@@ -1 +1 @@
-Subproject commit 6f3e9c367abb497c64f360c3839dab5e74928d5c
+Subproject commit ef0223f12597b5e0d9d2feed1b92c41306b1fc05
diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs
index 9e3c49119deaf..431fd7969be06 100644
--- a/src/tools/compiletest/src/main.rs
+++ b/src/tools/compiletest/src/main.rs
@@ -523,6 +523,7 @@ pub fn run_tests(config: &Config) {
 
 pub fn test_opts(config: &Config) -> test::TestOpts {
     test::TestOpts {
+        exclude_should_panic: false,
         filter: config.filter.clone(),
         filter_exact: config.filter_exact,
         run_ignored: if config.run_ignored {
diff --git a/triagebot.toml b/triagebot.toml
new file mode 100644
index 0000000000000..6f60481600c2e
--- /dev/null
+++ b/triagebot.toml
@@ -0,0 +1,6 @@
+[relabel]
+allow-unauthenticated = [
+    "C-*", "A-*", "E-*", "NLL-*", "O-*", "S-*", "T-*", "WG-*",
+    # I-* without I-nominated
+    "I-compilemem", "I-compiletime", "I-crash", "I-hang", "I-ICE", "I-slow",
+]