Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 10 additions & 4 deletions Cargo.lock
Original file line number Diff line number Diff line change
@@ -307,7 +307,7 @@ dependencies = [
"glob",
"hex 0.4.0",
"home",
"humantime",
"humantime 2.0.0",
"ignore",
"im-rc",
"jobserver",
@@ -1013,7 +1013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
dependencies = [
"atty",
"humantime",
"humantime 1.3.0",
"log",
"regex",
"termcolor",
@@ -1026,7 +1026,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
dependencies = [
"atty",
"humantime",
"humantime 1.3.0",
"log",
"regex",
"termcolor",
@@ -1454,6 +1454,12 @@ dependencies = [
"quick-error",
]

[[package]]
name = "humantime"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9b6c53306532d3c8e8087b44e6580e10db51a023cf9b433cea2ac38066b92da"

[[package]]
name = "hyper"
version = "0.12.31"
@@ -2647,7 +2653,7 @@ dependencies = [
"clap",
"derive_more",
"env_logger 0.6.2",
"humantime",
"humantime 1.3.0",
"lazy_static 1.3.0",
"log",
"rls-span",
2 changes: 1 addition & 1 deletion src/doc/book
Submodule book updated 37 files
+1 −1 .travis.yml
+0 −142 2018-edition/Cargo.lock
+0 −36 2018-edition/Cargo.toml
+0 −201 2018-edition/LICENSE-APACHE
+0 −25 2018-edition/LICENSE-MIT
+0 −13 2018-edition/convert-quotes.sh
+0 −24 2018-edition/nostarch.sh
+0 −34 2018-edition/style-guide.md
+0 −218 2018-edition/tools/docx-to-md.xsl
+0 −104 2018-edition/tools/src/bin/concat_chapters.rs
+0 −73 2018-edition/tools/src/bin/convert_quotes.rs
+0 −243 2018-edition/tools/src/bin/lfp.rs
+0 −406 2018-edition/tools/src/bin/link2print.rs
+0 −45 2018-edition/tools/src/bin/remove_links.rs
+0 −52 2018-edition/tools/src/bin/remove_markup.rs
+4 −4 Cargo.toml
+5 −1 README.md
+0 −32 nostarch/updates.md
+0 −142 second-edition/Cargo.lock
+0 −36 second-edition/Cargo.toml
+0 −201 second-edition/LICENSE-APACHE
+0 −25 second-edition/LICENSE-MIT
+0 −13 second-edition/convert-quotes.sh
+0 −20 second-edition/doc-to-md.sh
+0 −24 second-edition/nostarch.sh
+0 −34 second-edition/style-guide.md
+0 −218 second-edition/tools/docx-to-md.xsl
+0 −104 second-edition/tools/src/bin/concat_chapters.rs
+0 −73 second-edition/tools/src/bin/convert_quotes.rs
+0 −242 second-edition/tools/src/bin/lfp.rs
+0 −406 second-edition/tools/src/bin/link2print.rs
+0 −45 second-edition/tools/src/bin/remove_links.rs
+0 −52 second-edition/tools/src/bin/remove_markup.rs
+2 −2 src/appendix-01-keywords.md
+1 −5 src/ch04-02-references-and-borrowing.md
+10 −10 src/ch20-03-graceful-shutdown-and-cleanup.md
+1 −8 tools/src/bin/remove_markup.rs
2 changes: 1 addition & 1 deletion src/doc/embedded-book
Submodule embedded-book updated 1 files
+5 −0 .gitattributes
2 changes: 1 addition & 1 deletion src/doc/reference
2 changes: 1 addition & 1 deletion src/doc/rust-by-example
55 changes: 18 additions & 37 deletions src/librustc_typeck/check/_match.rs
Original file line number Diff line number Diff line change
@@ -50,30 +50,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {

self.warn_arms_when_scrutinee_diverges(arms, match_src);

// Otherwise, we have to union together the types that the
// arms produce and so forth.
let scrut_diverges = self.diverges.get();
self.diverges.set(Diverges::Maybe);
// Otherwise, we have to union together the types that the arms produce and so forth.
let scrut_diverges = self.diverges.replace(Diverges::Maybe);

// rust-lang/rust#55810: Typecheck patterns first (via eager
// collection into `Vec`), so we get types for all bindings.
let all_arm_pats_diverge: Vec<_> = arms
.iter()
.map(|arm| {
let mut all_pats_diverge = Diverges::WarnedAlways;
self.diverges.set(Diverges::Maybe);
self.check_pat_top(&arm.pat, scrut_ty, Some(scrut.span), true);
all_pats_diverge &= self.diverges.get();

// As discussed with @eddyb, this is for disabling unreachable_code
// warnings on patterns (they're now subsumed by unreachable_patterns
// warnings).
match all_pats_diverge {
Diverges::Maybe => Diverges::Maybe,
Diverges::Always { .. } | Diverges::WarnedAlways => Diverges::WarnedAlways,
}
})
.collect();
// #55810: Type check patterns first so we get types for all bindings.
for arm in arms {
self.check_pat_top(&arm.pat, scrut_ty, Some(scrut.span), true);
}

// Now typecheck the blocks.
//
@@ -104,19 +87,19 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
CoerceMany::with_coercion_sites(coerce_first, arms)
};

let mut other_arms = vec![]; // used only for diagnostics
let mut other_arms = vec![]; // Used only for diagnostics.
let mut prior_arm_ty = None;
for (i, (arm, pats_diverge)) in arms.iter().zip(all_arm_pats_diverge).enumerate() {
for (i, arm) in arms.iter().enumerate() {
if let Some(g) = &arm.guard {
self.diverges.set(pats_diverge);
self.diverges.set(Diverges::Maybe);
match g {
hir::Guard::If(e) => {
self.check_expr_has_type_or_error(e, tcx.types.bool, |_| {})
}
};
}

self.diverges.set(pats_diverge);
self.diverges.set(Diverges::Maybe);
let arm_ty = if source_if
&& if_no_else
&& i != 0
@@ -200,16 +183,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
arms: &'tcx [hir::Arm<'tcx>],
source: hir::MatchSource,
) {
if self.diverges.get().is_always() {
use hir::MatchSource::*;
let msg = match source {
IfDesugar { .. } | IfLetDesugar { .. } => "block in `if` expression",
WhileDesugar { .. } | WhileLetDesugar { .. } => "block in `while` expression",
_ => "arm",
};
for arm in arms {
self.warn_if_unreachable(arm.body.hir_id, arm.body.span, msg);
}
use hir::MatchSource::*;
let msg = match source {
IfDesugar { .. } | IfLetDesugar { .. } => "block in `if` expression",
WhileDesugar { .. } | WhileLetDesugar { .. } => "block in `while` expression",
_ => "arm",
};
for arm in arms {
self.warn_if_unreachable(arm.body.hir_id, arm.body.span, msg);
}
}

6 changes: 2 additions & 4 deletions src/librustc_typeck/check/expr.rs
Original file line number Diff line number Diff line change
@@ -165,10 +165,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
}

// Hide the outer diverging and has_errors flags.
let old_diverges = self.diverges.get();
let old_has_errors = self.has_errors.get();
self.diverges.set(Diverges::Maybe);
self.has_errors.set(false);
let old_diverges = self.diverges.replace(Diverges::Maybe);
let old_has_errors = self.has_errors.replace(false);

let ty = self.check_expr_kind(expr, expected, needs);

7 changes: 2 additions & 5 deletions src/librustc_typeck/check/mod.rs
Original file line number Diff line number Diff line change
@@ -4429,10 +4429,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
self.warn_if_unreachable(stmt.hir_id, stmt.span, "statement");

// Hide the outer diverging and `has_errors` flags.
let old_diverges = self.diverges.get();
let old_has_errors = self.has_errors.get();
self.diverges.set(Diverges::Maybe);
self.has_errors.set(false);
let old_diverges = self.diverges.replace(Diverges::Maybe);
let old_has_errors = self.has_errors.replace(false);

match stmt.kind {
hir::StmtKind::Local(ref l) => {
@@ -4442,7 +4440,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
hir::StmtKind::Item(_) => {}
hir::StmtKind::Expr(ref expr) => {
// Check with expected type of `()`.

self.check_expr_has_type_or_error(&expr, self.tcx.mk_unit(), |err| {
self.suggest_semicolon_at_end(expr.span, err);
});
2 changes: 1 addition & 1 deletion src/tools/clippy