/// 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
///
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()));
);
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",
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)
});
// 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() {
&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 = "./";
top: 0;
height: 100vh;
overflow: auto;
+ z-index: 1;
}
.sidebar .block > ul > li {
margin: 0;
}
.docblock-short code {
- white-space: nowrap;
+ white-space: pre-wrap;
}
.docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 {
// @!matches - '"\.\./\.\./source-script\.js"'
// @matches - '"\.\./\.\./source-files.js"'
// @!matches - '"/cache/source-files\.js"'
+
+// @has settings.html
+// @matches - '/cache/settings\.js'
+// @!matches - '\./settings\.js'
--- /dev/null
+#![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
+}
--- /dev/null
+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`.
--- /dev/null
+// 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
+ };
+}
--- /dev/null
+// 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
+ };
+}
--- /dev/null
+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
+
--- /dev/null
+[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",
+]