about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2023-02-02 17:14:07 +0100
committerGitHub <noreply@github.com>2023-02-02 17:14:07 +0100
commit3e0995a440e66c01383d78c6adcb1cd9c1ae3a46 (patch)
tree5047eb3f0025e666f973dc0224a139c17770c15d
parent6917040cf095f6d116b82184aa005f3eb02c482c (diff)
parent2c23c7f0cd7a665bbd7b173ebfc26cae223304e3 (diff)
downloadrust-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.rs5
-rw-r--r--tests/ui/uninhabited/issue-107505.rs18
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)
+}