diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2023-02-02 17:14:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-02 17:14:07 +0100 |
| commit | 3e0995a440e66c01383d78c6adcb1cd9c1ae3a46 (patch) | |
| tree | 5047eb3f0025e666f973dc0224a139c17770c15d | |
| parent | 6917040cf095f6d116b82184aa005f3eb02c482c (diff) | |
| parent | 2c23c7f0cd7a665bbd7b173ebfc26cae223304e3 (diff) | |
| download | rust-3e0995a440e66c01383d78c6adcb1cd9c1ae3a46.tar.gz rust-3e0995a440e66c01383d78c6adcb1cd9c1ae3a46.zip | |
Rollup merge of #107532 - compiler-errors:erase-regions-in-uninhabited, r=jackh726
Erase regions before doing uninhabited check in borrowck ~Also, fingerprint query keys/values when debug assertions are enabled. This should make it easier to check for issues like this without `-Cincremental`, and make UI tests a bit cleaner.~ edit: moving that to a separate PR Fixes #107505
| -rw-r--r-- | compiler/rustc_borrowck/src/type_check/mod.rs | 5 | ||||
| -rw-r--r-- | tests/ui/uninhabited/issue-107505.rs | 18 |
2 files changed, 22 insertions, 1 deletions
diff --git a/compiler/rustc_borrowck/src/type_check/mod.rs b/compiler/rustc_borrowck/src/type_check/mod.rs index 2605a1491fb..6c67e1a00c3 100644 --- a/compiler/rustc_borrowck/src/type_check/mod.rs +++ b/compiler/rustc_borrowck/src/type_check/mod.rs @@ -1484,7 +1484,10 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> { } } None => { - if !sig.output().is_privately_uninhabited(self.tcx(), self.param_env) { + // The signature in this call can reference region variables, + // so erase them before calling a query. + let output_ty = self.tcx().erase_regions(sig.output()); + if !output_ty.is_privately_uninhabited(self.tcx(), self.param_env) { span_mirbug!(self, term, "call to converging function {:?} w/o dest", sig); } } diff --git a/tests/ui/uninhabited/issue-107505.rs b/tests/ui/uninhabited/issue-107505.rs new file mode 100644 index 00000000000..61598541ddf --- /dev/null +++ b/tests/ui/uninhabited/issue-107505.rs @@ -0,0 +1,18 @@ +// compile-flags: --crate-type=lib +// check-pass + +// Make sure we don't pass inference variables to uninhabitedness checks in borrowck + +struct Command<'s> { + session: &'s (), + imp: std::convert::Infallible, +} + +fn command(_: &()) -> Command<'_> { + unreachable!() +} + +fn with_session<'s>(a: &std::process::Command, b: &'s ()) -> Command<'s> { + a.get_program(); + command(b) +} |
