From 84096e05304794138098395a230028756f9f3b83 Mon Sep 17 00:00:00 2001 From: Unreachable <unreachable@ubuntu2.localdomain> Date: Fri, 5 Apr 2019 03:05:33 +0000 Subject: [PATCH 1/8] improve docs for std::hint::unreachable_unchecked() --- src/libcore/hint.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libcore/hint.rs b/src/libcore/hint.rs index d43e6c49f4c..cd4962d30df 100644 --- a/src/libcore/hint.rs +++ b/src/libcore/hint.rs @@ -21,9 +21,8 @@ use intrinsics; /// difficult-to-debug problems. /// /// Use this function only when you can prove that the code will never call it. -/// -/// The [`unreachable!()`] macro is the safe counterpart of this function, which -/// will panic instead when executed. +/// Otherwise, consider using the [`unreachable!()`] macro, which does not allow +/// optimizations but will panic when executed. /// /// [`unreachable!()`]: ../macro.unreachable.html /// From 62a7bfd1ba299f451421306cb3705d697619359a Mon Sep 17 00:00:00 2001 From: Unreachable <unreachable@ubuntu2.localdomain> Date: Fri, 5 Apr 2019 17:42:09 +0000 Subject: [PATCH 2/8] Remove parens --- src/libcore/hint.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcore/hint.rs b/src/libcore/hint.rs index cd4962d30df..89bf3640968 100644 --- a/src/libcore/hint.rs +++ b/src/libcore/hint.rs @@ -21,10 +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 +/// Otherwise, consider using the [`unreachable!`] macro, which does not allow /// optimizations but will panic when executed. /// -/// [`unreachable!()`]: ../macro.unreachable.html +/// [`unreachable!`]: ../macro.unreachable.html /// /// # Example /// From 13a05a27e9a5747cad090b1670c0a6b0baa624b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= <esteban@kuber.com.ar> Date: Thu, 11 Apr 2019 20:01:19 -0700 Subject: [PATCH 3/8] Continue evaluating after missing main --- src/librustc/middle/entry.rs | 1 - src/librustc_interface/passes.rs | 8 +++-- src/test/ui/continue-after-missing-main.rs | 32 +++++++++++++++++++ .../ui/continue-after-missing-main.stderr | 17 ++++++++++ 4 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 src/test/ui/continue-after-missing-main.rs create mode 100644 src/test/ui/continue-after-missing-main.stderr diff --git a/src/librustc/middle/entry.rs b/src/librustc/middle/entry.rs index c20454a8822..df77033ebef 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_interface/passes.rs b/src/librustc_interface/passes.rs index 1547e15fd48..dc43d3c1aca 100644 --- a/src/librustc_interface/passes.rs +++ b/src/librustc_interface/passes.rs @@ -888,10 +888,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) }); @@ -939,7 +940,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/test/ui/continue-after-missing-main.rs b/src/test/ui/continue-after-missing-main.rs new file mode 100644 index 00000000000..7455c2a431d --- /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 00000000000..8d64fee8bda --- /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`. From 40536548f998fb5830777304a756f839ec8b96de Mon Sep 17 00:00:00 2001 From: vlad-boroda <enity.w@gmail.com> Date: Sun, 14 Apr 2019 22:54:08 +0300 Subject: [PATCH 4/8] Fix rustdoc sidebar z-index --- src/librustdoc/html/static/rustdoc.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index 2228e58b0d2..6dae600a6fa 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -166,6 +166,7 @@ nav.sub { top: 0; height: 100vh; overflow: auto; + z-index: 1; } .sidebar .block > ul > li { From 1c0e1c10d5c6463147690aba7696a7cbcf2840a1 Mon Sep 17 00:00:00 2001 From: QuietMisdreavus <grey@quietmisdreavus.net> Date: Mon, 15 Apr 2019 11:20:08 -0500 Subject: [PATCH 5/8] use --static-root-path for settings.js --- src/librustdoc/html/render.rs | 3 ++- src/test/rustdoc/static-root-path.rs | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 3ee131d8f5c..d91b78c8416 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/test/rustdoc/static-root-path.rs b/src/test/rustdoc/static-root-path.rs index 84b32f90c89..2f7c89c5f1e 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' From 74560f3ab36bb4f7f3aef3c66a3e9717f9ee1978 Mon Sep 17 00:00:00 2001 From: Andy Russell <arussell123@gmail.com> Date: Mon, 15 Apr 2019 13:09:37 -0400 Subject: [PATCH 6/8] include mode in unused binding suggestion span --- src/librustc/middle/liveness.rs | 17 +++++--- .../lint/issue-54180-unused-ref-field.fixed | 34 ++++++++++++++++ .../ui/lint/issue-54180-unused-ref-field.rs | 34 ++++++++++++++++ .../lint/issue-54180-unused-ref-field.stderr | 39 +++++++++++++++++++ 4 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 src/test/ui/lint/issue-54180-unused-ref-field.fixed create mode 100644 src/test/ui/lint/issue-54180-unused-ref-field.rs create mode 100644 src/test/ui/lint/issue-54180-unused-ref-field.stderr diff --git a/src/librustc/middle/liveness.rs b/src/librustc/middle/liveness.rs index f5a95d7004b..2fbe79ec8eb 100644 --- a/src/librustc/middle/liveness.rs +++ b/src/librustc/middle/liveness.rs @@ -1627,11 +1627,18 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> { ); if self.ir.variable_is_shorthand(var) { - err.multipart_suggestion( - "try ignoring the field", - spans.iter().map(|span| (*span, format!("{}: _", name))).collect(), - Applicability::MachineApplicable - ); + if let Node::Binding(pat) = self.ir.tcx.hir().get_by_hir_id(hir_id) { + // Handle `ref` and `ref mut`. + let spans = spans.iter() + .map(|_span| (pat.span, format!("{}: _", name))) + .collect(); + + err.multipart_suggestion( + "try ignoring the field", + spans, + Applicability::MachineApplicable, + ); + } } else { err.multipart_suggestion( "consider prefixing with an underscore", diff --git a/src/test/ui/lint/issue-54180-unused-ref-field.fixed b/src/test/ui/lint/issue-54180-unused-ref-field.fixed new file mode 100644 index 00000000000..1350b7ca699 --- /dev/null +++ b/src/test/ui/lint/issue-54180-unused-ref-field.fixed @@ -0,0 +1,34 @@ +// run-rustfix + +#![deny(unused)] + +pub struct S { + pub f1: i32, +} + +pub struct Point { + pub x: i32, + pub y: i32, +} + +pub enum E { + Variant { field: String } +} + +pub fn foo(arg: &E) { + match arg { + E::Variant { field: _ } => (), //~ ERROR unused variable + } +} + +fn main() { + let s = S { f1: 123 }; + let S { f1: _ } = s; //~ ERROR unused variable + + let points = vec![Point { x: 1, y: 2 }]; + let _: i32 = points.iter().map(|Point { x: _, y }| y).sum(); //~ ERROR unused variable + + match (Point { x: 1, y: 2 }) { + Point { y, x: _ } => y, //~ ERROR unused variable + }; +} diff --git a/src/test/ui/lint/issue-54180-unused-ref-field.rs b/src/test/ui/lint/issue-54180-unused-ref-field.rs new file mode 100644 index 00000000000..7b3392b609a --- /dev/null +++ b/src/test/ui/lint/issue-54180-unused-ref-field.rs @@ -0,0 +1,34 @@ +// run-rustfix + +#![deny(unused)] + +pub struct S { + pub f1: i32, +} + +pub struct Point { + pub x: i32, + pub y: i32, +} + +pub enum E { + Variant { field: String } +} + +pub fn foo(arg: &E) { + match arg { + E::Variant { ref field } => (), //~ ERROR unused variable + } +} + +fn main() { + let s = S { f1: 123 }; + let S { ref f1 } = s; //~ ERROR unused variable + + let points = vec![Point { x: 1, y: 2 }]; + let _: i32 = points.iter().map(|Point { x, y }| y).sum(); //~ ERROR unused variable + + match (Point { x: 1, y: 2 }) { + Point { y, ref mut x } => y, //~ ERROR unused variable + }; +} diff --git a/src/test/ui/lint/issue-54180-unused-ref-field.stderr b/src/test/ui/lint/issue-54180-unused-ref-field.stderr new file mode 100644 index 00000000000..9f47554a1a6 --- /dev/null +++ b/src/test/ui/lint/issue-54180-unused-ref-field.stderr @@ -0,0 +1,39 @@ +error: unused variable: `field` + --> $DIR/issue-54180-unused-ref-field.rs:20:26 + | +LL | E::Variant { ref field } => (), + | ----^^^^^ + | | + | help: try ignoring the field: `field: _` + | +note: lint level defined here + --> $DIR/issue-54180-unused-ref-field.rs:3:9 + | +LL | #![deny(unused)] + | ^^^^^^ + = note: #[deny(unused_variables)] implied by #[deny(unused)] + +error: unused variable: `x` + --> $DIR/issue-54180-unused-ref-field.rs:29:45 + | +LL | let _: i32 = points.iter().map(|Point { x, y }| y).sum(); + | ^ help: try ignoring the field: `x: _` + +error: unused variable: `f1` + --> $DIR/issue-54180-unused-ref-field.rs:26:17 + | +LL | let S { ref f1 } = s; + | ----^^ + | | + | help: try ignoring the field: `f1: _` + +error: unused variable: `x` + --> $DIR/issue-54180-unused-ref-field.rs:32:28 + | +LL | Point { y, ref mut x } => y, + | --------^ + | | + | help: try ignoring the field: `x: _` + +error: aborting due to 4 previous errors + From 9e171937b64f513f7848593257364cd8495399d5 Mon Sep 17 00:00:00 2001 From: vlad-boroda <enity.w@gmail.com> Date: Mon, 15 Apr 2019 20:18:53 +0300 Subject: [PATCH 7/8] change word wrapping mode --- src/librustdoc/html/static/rustdoc.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index 6dae600a6fa..8cf70b9a995 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -346,7 +346,7 @@ nav.sub { margin: 0; } .docblock-short code { - white-space: nowrap; + white-space: pre-wrap; } .docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 { From 3db489bdcfcf2c31034194a30ca60a7cc2ba5adb Mon Sep 17 00:00:00 2001 From: Pietro Albini <pietro@pietroalbini.org> Date: Mon, 15 Apr 2019 23:52:59 +0200 Subject: [PATCH 8/8] add repo-specific triagebot configuration --- triagebot.toml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 triagebot.toml diff --git a/triagebot.toml b/triagebot.toml new file mode 100644 index 00000000000..6f60481600c --- /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", +]