Skip to content

Commit

Permalink
Change a span_bug to span_delayed_bug
Browse files Browse the repository at this point in the history
to fix an ICE caused when a with expression is not a struct
  • Loading branch information
gurry committed Jul 7, 2024
1 parent 5c08cc7 commit 1c99bf2
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 10 deletions.
5 changes: 4 additions & 1 deletion compiler/rustc_hir_typeck/src/expr_use_visitor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -734,7 +734,10 @@ impl<'tcx, Cx: TypeInformationCtxt<'tcx>, D: Delegate<'tcx>> ExprUseVisitor<'tcx
// struct; however, when EUV is run during typeck, it
// may not. This will generate an error earlier in typeck,
// so we can just ignore it.
span_bug!(with_expr.span, "with expression doesn't evaluate to a struct");
self.cx.tcx().dcx().span_delayed_bug(
with_expr.span,
"with expression doesn't evaluate to a struct",
);
}
}

Expand Down
9 changes: 0 additions & 9 deletions tests/crashes/127332.rs

This file was deleted.

15 changes: 15 additions & 0 deletions tests/ui/typeck/ice-with-expr-not-struct-127332.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Regression test for ICE #127332

// Tests that we do not ICE when a with expr is
// not a struct but something else like an enum

fn main() {
let x = || {
enum Foo {
A { x: u32 },
}
let orig = Foo::A { x: 5 };
Foo::A { x: 6, ..orig };
//~^ ERROR functional record update syntax requires a struct
};
}
9 changes: 9 additions & 0 deletions tests/ui/typeck/ice-with-expr-not-struct-127332.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
error[E0436]: functional record update syntax requires a struct
--> $DIR/ice-with-expr-not-struct-127332.rs:12:26
|
LL | Foo::A { x: 6, ..orig };
| ^^^^

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0436`.

0 comments on commit 1c99bf2

Please sign in to comment.