Skip to content

Commit

Permalink
Rollup merge of #126584 - cjgillot:issue-122736, r=michaelwoerister
Browse files Browse the repository at this point in the history
Do not ICE in privacy when type inference fails.

Fixes #122736
  • Loading branch information
matthiaskrgr authored Jun 17, 2024
2 parents c768d6e + 9074427 commit 592f9aa
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 3 deletions.
8 changes: 6 additions & 2 deletions compiler/rustc_privacy/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -973,8 +973,12 @@ impl<'tcx> NamePrivacyVisitor<'tcx> {

impl<'tcx> Visitor<'tcx> for NamePrivacyVisitor<'tcx> {
fn visit_nested_body(&mut self, body_id: hir::BodyId) {
let old_maybe_typeck_results =
self.maybe_typeck_results.replace(self.tcx.typeck_body(body_id));
let new_typeck_results = self.tcx.typeck_body(body_id);
// Do not try reporting privacy violations if we failed to infer types.
if new_typeck_results.tainted_by_errors.is_some() {
return;
}
let old_maybe_typeck_results = self.maybe_typeck_results.replace(new_typeck_results);
self.visit_body(self.tcx.hir().body(body_id));
self.maybe_typeck_results = old_maybe_typeck_results;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
//@ known-bug: #122736
fn main_ref() {
let array = [(); {
let mut x = &0;
let mut n = 0;
while n < 5 {
//~^ ERROR constant evaluation is taking a long time
x = &0;
}
0
Expand Down
27 changes: 27 additions & 0 deletions tests/ui/privacy/no-ice-on-inference-failure.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
error: constant evaluation is taking a long time
--> $DIR/no-ice-on-inference-failure.rs:5:9
|
LL | / while n < 5 {
LL | |
LL | | x = &0;
LL | | }
| |_________^
|
= note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
If your compilation actually takes a long time, you can safely allow the lint.
help: the constant being evaluated
--> $DIR/no-ice-on-inference-failure.rs:2:22
|
LL | let array = [(); {
| ______________________^
LL | | let mut x = &0;
LL | | let mut n = 0;
LL | | while n < 5 {
... |
LL | | 0
LL | | }];
| |_____^
= note: `#[deny(long_running_const_eval)]` on by default

error: aborting due to 1 previous error

0 comments on commit 592f9aa

Please sign in to comment.