Skip to content

Commit 2f688ac

Browse files
committed
Auto merge of #68442 - Centril:rollup-ir2vmid, r=Centril
Rollup of 3 pull requests Successful merges: - #68421 (Update cargo, books) - #68422 (typeck: simplify the handling of `diverges`) - #68439 (Update Clippy) Failed merges: r? @ghost
2 parents 5e8897b + 2a3627d commit 2f688ac

File tree

10 files changed

+38
-56
lines changed

10 files changed

+38
-56
lines changed

Cargo.lock

+10-4
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ dependencies = [
307307
"glob",
308308
"hex 0.4.0",
309309
"home",
310-
"humantime",
310+
"humantime 2.0.0",
311311
"ignore",
312312
"im-rc",
313313
"jobserver",
@@ -1013,7 +1013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
10131013
checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3"
10141014
dependencies = [
10151015
"atty",
1016-
"humantime",
1016+
"humantime 1.3.0",
10171017
"log",
10181018
"regex",
10191019
"termcolor",
@@ -1026,7 +1026,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
10261026
checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
10271027
dependencies = [
10281028
"atty",
1029-
"humantime",
1029+
"humantime 1.3.0",
10301030
"log",
10311031
"regex",
10321032
"termcolor",
@@ -1454,6 +1454,12 @@ dependencies = [
14541454
"quick-error",
14551455
]
14561456

1457+
[[package]]
1458+
name = "humantime"
1459+
version = "2.0.0"
1460+
source = "registry+https://github.com/rust-lang/crates.io-index"
1461+
checksum = "b9b6c53306532d3c8e8087b44e6580e10db51a023cf9b433cea2ac38066b92da"
1462+
14571463
[[package]]
14581464
name = "hyper"
14591465
version = "0.12.31"
@@ -2647,7 +2653,7 @@ dependencies = [
26472653
"clap",
26482654
"derive_more",
26492655
"env_logger 0.6.2",
2650-
"humantime",
2656+
"humantime 1.3.0",
26512657
"lazy_static 1.3.0",
26522658
"log",
26532659
"rls-span",

src/doc/embedded-book

src/doc/rust-by-example

src/librustc_typeck/check/_match.rs

+18-37
Original file line numberDiff line numberDiff line change
@@ -50,30 +50,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
5050

5151
self.warn_arms_when_scrutinee_diverges(arms, match_src);
5252

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

58-
// rust-lang/rust#55810: Typecheck patterns first (via eager
59-
// collection into `Vec`), so we get types for all bindings.
60-
let all_arm_pats_diverge: Vec<_> = arms
61-
.iter()
62-
.map(|arm| {
63-
let mut all_pats_diverge = Diverges::WarnedAlways;
64-
self.diverges.set(Diverges::Maybe);
65-
self.check_pat_top(&arm.pat, scrut_ty, Some(scrut.span), true);
66-
all_pats_diverge &= self.diverges.get();
67-
68-
// As discussed with @eddyb, this is for disabling unreachable_code
69-
// warnings on patterns (they're now subsumed by unreachable_patterns
70-
// warnings).
71-
match all_pats_diverge {
72-
Diverges::Maybe => Diverges::Maybe,
73-
Diverges::Always { .. } | Diverges::WarnedAlways => Diverges::WarnedAlways,
74-
}
75-
})
76-
.collect();
56+
// #55810: Type check patterns first so we get types for all bindings.
57+
for arm in arms {
58+
self.check_pat_top(&arm.pat, scrut_ty, Some(scrut.span), true);
59+
}
7760

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

107-
let mut other_arms = vec![]; // used only for diagnostics
90+
let mut other_arms = vec![]; // Used only for diagnostics.
10891
let mut prior_arm_ty = None;
109-
for (i, (arm, pats_diverge)) in arms.iter().zip(all_arm_pats_diverge).enumerate() {
92+
for (i, arm) in arms.iter().enumerate() {
11093
if let Some(g) = &arm.guard {
111-
self.diverges.set(pats_diverge);
94+
self.diverges.set(Diverges::Maybe);
11295
match g {
11396
hir::Guard::If(e) => {
11497
self.check_expr_has_type_or_error(e, tcx.types.bool, |_| {})
11598
}
11699
};
117100
}
118101

119-
self.diverges.set(pats_diverge);
102+
self.diverges.set(Diverges::Maybe);
120103
let arm_ty = if source_if
121104
&& if_no_else
122105
&& i != 0
@@ -200,16 +183,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
200183
arms: &'tcx [hir::Arm<'tcx>],
201184
source: hir::MatchSource,
202185
) {
203-
if self.diverges.get().is_always() {
204-
use hir::MatchSource::*;
205-
let msg = match source {
206-
IfDesugar { .. } | IfLetDesugar { .. } => "block in `if` expression",
207-
WhileDesugar { .. } | WhileLetDesugar { .. } => "block in `while` expression",
208-
_ => "arm",
209-
};
210-
for arm in arms {
211-
self.warn_if_unreachable(arm.body.hir_id, arm.body.span, msg);
212-
}
186+
use hir::MatchSource::*;
187+
let msg = match source {
188+
IfDesugar { .. } | IfLetDesugar { .. } => "block in `if` expression",
189+
WhileDesugar { .. } | WhileLetDesugar { .. } => "block in `while` expression",
190+
_ => "arm",
191+
};
192+
for arm in arms {
193+
self.warn_if_unreachable(arm.body.hir_id, arm.body.span, msg);
213194
}
214195
}
215196

src/librustc_typeck/check/expr.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
165165
}
166166

167167
// Hide the outer diverging and has_errors flags.
168-
let old_diverges = self.diverges.get();
169-
let old_has_errors = self.has_errors.get();
170-
self.diverges.set(Diverges::Maybe);
171-
self.has_errors.set(false);
168+
let old_diverges = self.diverges.replace(Diverges::Maybe);
169+
let old_has_errors = self.has_errors.replace(false);
172170

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

src/librustc_typeck/check/mod.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -4429,10 +4429,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
44294429
self.warn_if_unreachable(stmt.hir_id, stmt.span, "statement");
44304430

44314431
// Hide the outer diverging and `has_errors` flags.
4432-
let old_diverges = self.diverges.get();
4433-
let old_has_errors = self.has_errors.get();
4434-
self.diverges.set(Diverges::Maybe);
4435-
self.has_errors.set(false);
4432+
let old_diverges = self.diverges.replace(Diverges::Maybe);
4433+
let old_has_errors = self.has_errors.replace(false);
44364434

44374435
match stmt.kind {
44384436
hir::StmtKind::Local(ref l) => {
@@ -4442,7 +4440,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
44424440
hir::StmtKind::Item(_) => {}
44434441
hir::StmtKind::Expr(ref expr) => {
44444442
// Check with expected type of `()`.
4445-
44464443
self.check_expr_has_type_or_error(&expr, self.tcx.mk_unit(), |err| {
44474444
self.suggest_semicolon_at_end(expr.span, err);
44484445
});

src/tools/clippy

0 commit comments

Comments
 (0)