Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit be4e9b7

Browse files
committed
Auto merge of #146072 - Zalathar:rollup-0svnrfe, r=Zalathar
Rollup of 6 pull requests Successful merges: - #145421 (`dump_mir` cleanups) - #145968 (Add `Bound::copied`) - #146004 (resolve: Refactor `struct ExternPreludeEntry`) - #146042 (Detect negative literal inferred to unsigned integer) - #146046 (Suggest method name with maybe ty mismatch) - #146051 (Change std f32 test to pass under Miri) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 828e45a + 0dbd8e6 commit be4e9b7

File tree

31 files changed

+691
-591
lines changed

31 files changed

+691
-591
lines changed

‎compiler/rustc_borrowck/src/nll.rs

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ use std::str::FromStr;
88
use polonius_engine::{Algorithm, AllFacts, Output};
99
use rustc_data_structures::frozen::Frozen;
1010
use rustc_index::IndexSlice;
11-
use rustc_middle::mir::pretty::{PrettyPrintMirOptions, dump_mir_with_options};
12-
use rustc_middle::mir::{Body, PassWhere,Promoted, create_dump_file, dump_enabled, dump_mir};
11+
use rustc_middle::mir::pretty::PrettyPrintMirOptions;
12+
use rustc_middle::mir::{Body, MirDumper,PassWhere,Promoted};
1313
use rustc_middle::ty::print::with_no_trimmed_paths;
1414
use rustc_middle::ty::{self, TyCtxt};
1515
use rustc_mir_dataflow::move_paths::MoveData;
@@ -68,7 +68,9 @@ pub(crate) fn replace_regions_in_mir<'tcx>(
6868
// Replace all remaining regions with fresh inference variables.
6969
renumber::renumber_mir(infcx, body, promoted);
7070

71-
dump_mir(infcx.tcx, false, "renumber", &0, body, |_, _| Ok(()));
71+
if let Some(dumper) = MirDumper::new(infcx.tcx, "renumber", body) {
72+
dumper.dump_mir(body);
73+
}
7274

7375
universal_regions
7476
}
@@ -175,9 +177,7 @@ pub(super) fn dump_nll_mir<'tcx>(
175177
borrow_set: &BorrowSet<'tcx>,
176178
) {
177179
let tcx = infcx.tcx;
178-
if !dump_enabled(tcx, "nll", body.source.def_id()) {
179-
return;
180-
}
180+
let Some(dumper) = MirDumper::new(tcx, "nll", body) else { return };
181181

182182
// We want the NLL extra comments printed by default in NLL MIR dumps (they were removed in
183183
// #112346). Specifying `-Z mir-include-spans` on the CLI still has priority: for example,
@@ -188,27 +188,24 @@ pub(super) fn dump_nll_mir<'tcx>(
188188
MirIncludeSpans::On | MirIncludeSpans::Nll
189189
),
190190
};
191-
dump_mir_with_options(
192-
tcx,
193-
false,
194-
"nll",
195-
&0,
196-
body,
197-
|pass_where, out| {
198-
emit_nll_mir(tcx, regioncx, closure_region_requirements, borrow_set, pass_where, out)
199-
},
200-
options,
201-
);
191+
192+
let extra_data = &|pass_where, out: &mut dyn std::io::Write| {
193+
emit_nll_mir(tcx, regioncx, closure_region_requirements, borrow_set, pass_where, out)
194+
};
195+
196+
let dumper = dumper.set_extra_data(extra_data).set_options(options);
197+
198+
dumper.dump_mir(body);
202199

203200
// Also dump the region constraint graph as a graphviz file.
204201
let _: io::Result<()> = try {
205-
let mut file = create_dump_file(tcx,"regioncx.all.dot",false,"nll",&0, body)?;
202+
let mut file = dumper.create_dump_file("regioncx.all.dot", body)?;
206203
regioncx.dump_graphviz_raw_constraints(tcx, &mut file)?;
207204
};
208205

209206
// Also dump the region constraint SCC graph as a graphviz file.
210207
let _: io::Result<()> = try {
211-
let mut file = create_dump_file(tcx,"regioncx.scc.dot",false,"nll",&0, body)?;
208+
let mut file = dumper.create_dump_file("regioncx.scc.dot", body)?;
212209
regioncx.dump_graphviz_scc_constraints(tcx, &mut file)?;
213210
};
214211
}

‎compiler/rustc_borrowck/src/polonius/dump.rs

Lines changed: 32 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ use std::io;
22

33
use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet};
44
use rustc_index::IndexVec;
5-
use rustc_middle::mir::pretty::{
6-
PassWhere, PrettyPrintMirOptions, create_dump_file, dump_enabled, dump_mir_to_writer,
7-
};
5+
use rustc_middle::mir::pretty::{MirDumper, PassWhere, PrettyPrintMirOptions};
86
use rustc_middle::mir::{Body, Location};
97
use rustc_middle::ty::{RegionVid, TyCtxt};
108
use rustc_mir_dataflow::points::PointIndex;
@@ -33,22 +31,41 @@ pub(crate) fn dump_polonius_mir<'tcx>(
3331
return;
3432
}
3533

36-
if !dump_enabled(tcx, "polonius", body.source.def_id()) {
37-
return;
38-
}
34+
let Some(dumper) = MirDumper::new(tcx, "polonius", body) else { return };
3935

4036
let polonius_diagnostics =
4137
polonius_diagnostics.expect("missing diagnostics context with `-Zpolonius=next`");
4238

39+
let extra_data = &|pass_where, out: &mut dyn io::Write| {
40+
emit_polonius_mir(
41+
tcx,
42+
regioncx,
43+
closure_region_requirements,
44+
borrow_set,
45+
&polonius_diagnostics.localized_outlives_constraints,
46+
pass_where,
47+
out,
48+
)
49+
};
50+
// We want the NLL extra comments printed by default in NLL MIR dumps. Specifying `-Z
51+
// mir-include-spans` on the CLI still has priority.
52+
let options = PrettyPrintMirOptions {
53+
include_extra_comments: matches!(
54+
tcx.sess.opts.unstable_opts.mir_include_spans,
55+
MirIncludeSpans::On | MirIncludeSpans::Nll
56+
),
57+
};
58+
59+
let dumper = dumper.set_extra_data(extra_data).set_options(options);
60+
4361
let _: io::Result<()> = try {
44-
let mut file = create_dump_file(tcx,"html",false,"polonius",&0, body)?;
62+
let mut file = dumper.create_dump_file("html", body)?;
4563
emit_polonius_dump(
46-
tcx,
64+
&dumper,
4765
body,
4866
regioncx,
4967
borrow_set,
5068
&polonius_diagnostics.localized_outlives_constraints,
51-
closure_region_requirements,
5269
&mut file,
5370
)?;
5471
};
@@ -61,12 +78,11 @@ pub(crate) fn dump_polonius_mir<'tcx>(
6178
/// - a mermaid graph of the NLL regions and the constraints between them
6279
/// - a mermaid graph of the NLL SCCs and the constraints between them
6380
fn emit_polonius_dump<'tcx>(
64-
tcx:TyCtxt<'tcx>,
81+
dumper:&MirDumper<'_,'_,'tcx>,
6582
body: &Body<'tcx>,
6683
regioncx: &RegionInferenceContext<'tcx>,
6784
borrow_set: &BorrowSet<'tcx>,
6885
localized_outlives_constraints: &LocalizedOutlivesConstraintSet,
69-
closure_region_requirements: &Option<ClosureRegionRequirements<'tcx>>,
7086
out: &mut dyn io::Write,
7187
) -> io::Result<()> {
7288
// Prepare the HTML dump file prologue.
@@ -79,15 +95,7 @@ fn emit_polonius_dump<'tcx>(
7995
writeln!(out, "<div>")?;
8096
writeln!(out, "Raw MIR dump")?;
8197
writeln!(out, "<pre><code>")?;
82-
emit_html_mir(
83-
tcx,
84-
body,
85-
regioncx,
86-
borrow_set,
87-
&localized_outlives_constraints,
88-
closure_region_requirements,
89-
out,
90-
)?;
98+
emit_html_mir(dumper, body, out)?;
9199
writeln!(out, "</code></pre>")?;
92100
writeln!(out, "</div>")?;
93101

@@ -116,15 +124,15 @@ fn emit_polonius_dump<'tcx>(
116124
writeln!(out, "<div>")?;
117125
writeln!(out, "NLL regions")?;
118126
writeln!(out, "<pre class='mermaid'>")?;
119-
emit_mermaid_nll_regions(tcx, regioncx, out)?;
127+
emit_mermaid_nll_regions(dumper.tcx(), regioncx, out)?;
120128
writeln!(out, "</pre>")?;
121129
writeln!(out, "</div>")?;
122130

123131
// Section 5: mermaid visualization of the NLL SCC graph.
124132
writeln!(out, "<div>")?;
125133
writeln!(out, "NLL SCCs")?;
126134
writeln!(out, "<pre class='mermaid'>")?;
127-
emit_mermaid_nll_sccs(tcx, regioncx, out)?;
135+
emit_mermaid_nll_sccs(dumper.tcx(), regioncx, out)?;
128136
writeln!(out, "</pre>")?;
129137
writeln!(out, "</div>")?;
130138

@@ -149,45 +157,14 @@ fn emit_polonius_dump<'tcx>(
149157

150158
/// Emits the polonius MIR, as escaped HTML.
151159
fn emit_html_mir<'tcx>(
152-
tcx:TyCtxt<'tcx>,
160+
dumper:&MirDumper<'_,'_,'tcx>,
153161
body: &Body<'tcx>,
154-
regioncx: &RegionInferenceContext<'tcx>,
155-
borrow_set: &BorrowSet<'tcx>,
156-
localized_outlives_constraints: &LocalizedOutlivesConstraintSet,
157-
closure_region_requirements: &Option<ClosureRegionRequirements<'tcx>>,
158162
out: &mut dyn io::Write,
159163
) -> io::Result<()> {
160164
// Buffer the regular MIR dump to be able to escape it.
161165
let mut buffer = Vec::new();
162166

163-
// We want the NLL extra comments printed by default in NLL MIR dumps. Specifying `-Z
164-
// mir-include-spans` on the CLI still has priority.
165-
let options = PrettyPrintMirOptions {
166-
include_extra_comments: matches!(
167-
tcx.sess.opts.unstable_opts.mir_include_spans,
168-
MirIncludeSpans::On | MirIncludeSpans::Nll
169-
),
170-
};
171-
172-
dump_mir_to_writer(
173-
tcx,
174-
"polonius",
175-
&0,
176-
body,
177-
&mut buffer,
178-
|pass_where, out| {
179-
emit_polonius_mir(
180-
tcx,
181-
regioncx,
182-
closure_region_requirements,
183-
borrow_set,
184-
localized_outlives_constraints,
185-
pass_where,
186-
out,
187-
)
188-
},
189-
options,
190-
)?;
167+
dumper.dump_mir_to_writer(body, &mut buffer)?;
191168

192169
// Escape the handful of characters that need it. We don't need to be particularly efficient:
193170
// we're actually writing into a buffered writer already. Note that MIR dumps are valid UTF-8.

‎compiler/rustc_codegen_cranelift/src/base.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,8 @@ pub(crate) fn codegen_fn<'tcx>(
4444
let _mir_guard = crate::PrintOnPanic(|| {
4545
let mut buf = Vec::new();
4646
with_no_trimmed_paths!({
47-
use rustc_middle::mir::pretty;
48-
let options = pretty::PrettyPrintMirOptions::from_cli(tcx);
49-
pretty::write_mir_fn(tcx, mir, &mut |_, _| Ok(()), &mut buf, options).unwrap();
47+
let writer = pretty::MirWriter::new(tcx);
48+
writer.write_mir_fn(mir, &mut buf).unwrap();
5049
});
5150
String::from_utf8_lossy(&buf).into_owned()
5251
});

‎compiler/rustc_hir_typeck/src/method/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
117117
Err(Ambiguity(..)) => true,
118118
Err(PrivateMatch(..)) => false,
119119
Err(IllegalSizedBound { .. }) => true,
120-
Err(BadReturnType) => false,
120+
Err(BadReturnType) => true,
121121
Err(ErrorReported(_)) => false,
122122
}
123123
}

‎compiler/rustc_hir_typeck/src/op.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -962,13 +962,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
962962
let (opt_rhs_expr, opt_rhs_ty) = opt_rhs.unzip();
963963
let cause = self.cause(
964964
span,
965-
ObligationCauseCode::BinOp {
966-
lhs_hir_id: lhs_expr.hir_id,
967-
rhs_hir_id: opt_rhs_expr.map(|expr| expr.hir_id),
968-
rhs_span: opt_rhs_expr.map(|expr| expr.span),
969-
rhs_is_lit: opt_rhs_expr
970-
.is_some_and(|expr| matches!(expr.kind, hir::ExprKind::Lit(_))),
971-
output_ty: expected.only_has_type(self),
965+
match opt_rhs_expr {
966+
Some(rhs) => ObligationCauseCode::BinOp {
967+
lhs_hir_id: lhs_expr.hir_id,
968+
rhs_hir_id: rhs.hir_id,
969+
rhs_span: rhs.span,
970+
rhs_is_lit: matches!(rhs.kind, hir::ExprKind::Lit(_)),
971+
output_ty: expected.only_has_type(self),
972+
},
973+
None => ObligationCauseCode::UnOp { hir_id: lhs_expr.hir_id },
972974
},
973975
);
974976

‎compiler/rustc_middle/src/mir/mod.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ pub use terminator::*;
6262

6363
pub use self::generic_graph::graphviz_safe_def_name;
6464
pub use self::graphviz::write_mir_graphviz;
65-
pub use self::pretty::{
66-
PassWhere, create_dump_file, display_allocation, dump_enabled, dump_mir, write_mir_pretty,
67-
};
65+
pub use self::pretty::{MirDumper, PassWhere, display_allocation, write_mir_pretty};
6866

6967
/// Types for locals
7068
pub type LocalDecls<'tcx> = IndexSlice<Local, LocalDecl<'tcx>>;

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /