about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-11-29 05:24:21 +0100
committerGitHub <noreply@github.com>2022-11-29 05:24:21 +0100
commite674b34d56b41657bddfcaa69fd224edd19f0b24 (patch)
tree39666cd0685703790f5147260f0a57b886f016af
parentc81605ca91387cfd6717fcbd02367ce2e433fb78 (diff)
parent4149923ff0a948161e85544c2f68dfd828ddb382 (diff)
downloadrust-e674b34d56b41657bddfcaa69fd224edd19f0b24.tar.gz
rust-e674b34d56b41657bddfcaa69fd224edd19f0b24.zip
Rollup merge of #104959 - compiler-errors:revert-104269, r=lcnr
Revert #104269 (to avoid spurious hang/test failure in CI)

Causes hangs/memory overflows in the test suite apparently :cry:

Reopens #104225
Fixes #104957
r? ``@lcnr``
-rw-r--r--compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs5
-rw-r--r--compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs5
-rw-r--r--src/test/ui/traits/predicate_can_apply-hang.rs6
-rw-r--r--src/test/ui/traits/predicate_can_apply-hang.stderr21
-rw-r--r--src/test/ui/typeck/hang-in-overflow.rs19
-rw-r--r--src/test/ui/typeck/hang-in-overflow.stderr22
6 files changed, 4 insertions, 74 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs
index e96b9b64e78..b364609d986 100644
--- a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs
+++ b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs
@@ -2544,10 +2544,7 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
             let obligation =
                 Obligation::new(self.tcx, ObligationCause::dummy(), param_env, cleaned_pred);
 
-            // We don't use `InferCtxt::predicate_may_hold` because that
-            // will re-run predicates that overflow locally, which ends up
-            // taking a really long time to compute.
-            self.evaluate_obligation(&obligation).map_or(false, |eval| eval.may_apply())
+            self.predicate_may_hold(&obligation)
         })
     }
 
diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs
index eeb4693eec3..09f30f976de 100644
--- a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs
+++ b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs
@@ -1336,8 +1336,9 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
                     obligation.param_env,
                     trait_pred_and_suggested_ty,
                 );
-                let suggested_ty_would_satisfy_obligation =
-                    self.predicate_must_hold_modulo_regions(&new_obligation);
+                let suggested_ty_would_satisfy_obligation = self
+                    .evaluate_obligation_no_overflow(&new_obligation)
+                    .must_apply_modulo_regions();
                 if suggested_ty_would_satisfy_obligation {
                     let sp = self
                         .tcx
diff --git a/src/test/ui/traits/predicate_can_apply-hang.rs b/src/test/ui/traits/predicate_can_apply-hang.rs
deleted file mode 100644
index 5f01645da52..00000000000
--- a/src/test/ui/traits/predicate_can_apply-hang.rs
+++ /dev/null
@@ -1,6 +0,0 @@
-fn f<B>(x: Vec<[[[B; 1]; 1]; 1]>) -> impl PartialEq<B> {
-    //~^ ERROR can't compare `Vec<[[[B; 1]; 1]; 1]>` with `B`
-    x
-}
-
-fn main() {}
diff --git a/src/test/ui/traits/predicate_can_apply-hang.stderr b/src/test/ui/traits/predicate_can_apply-hang.stderr
deleted file mode 100644
index 49fe63b412a..00000000000
--- a/src/test/ui/traits/predicate_can_apply-hang.stderr
+++ /dev/null
@@ -1,21 +0,0 @@
-error[E0277]: can't compare `Vec<[[[B; 1]; 1]; 1]>` with `B`
-  --> $DIR/predicate_can_apply-hang.rs:1:38
-   |
-LL | fn f<B>(x: Vec<[[[B; 1]; 1]; 1]>) -> impl PartialEq<B> {
-   |                                      ^^^^^^^^^^^^^^^^^ no implementation for `Vec<[[[B; 1]; 1]; 1]> == B`
-LL |
-LL |     x
-   |     - return type was inferred to be `Vec<[[[B; 1]; 1]; 1]>` here
-   |
-   = help: the trait `PartialEq<B>` is not implemented for `Vec<[[[B; 1]; 1]; 1]>`
-   = help: the following other types implement trait `PartialEq<Rhs>`:
-             <Vec<T, A1> as PartialEq<Vec<U, A2>>>
-             <Vec<T, A> as PartialEq<&[U; N]>>
-             <Vec<T, A> as PartialEq<&[U]>>
-             <Vec<T, A> as PartialEq<&mut [U]>>
-             <Vec<T, A> as PartialEq<[U; N]>>
-             <Vec<T, A> as PartialEq<[U]>>
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0277`.
diff --git a/src/test/ui/typeck/hang-in-overflow.rs b/src/test/ui/typeck/hang-in-overflow.rs
deleted file mode 100644
index a8330c9b65c..00000000000
--- a/src/test/ui/typeck/hang-in-overflow.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-// normalize-stderr-test "the requirement `.*`" -> "the requirement `...`"
-// normalize-stderr-test "required for `.*` to implement `.*`" -> "required for `...` to implement `...`"
-// normalize-stderr-test: ".*the full type name has been written to.*\n" -> ""
-
-// Currently this fatally aborts instead of hanging.
-// Make sure at least that this doesn't turn into a hang.
-
-fn f() {
-    foo::<_>();
-    //~^ ERROR overflow evaluating the requirement
-}
-
-fn foo<B>()
-where
-    Vec<[[[B; 1]; 1]; 1]>: PartialEq<B>,
-{
-}
-
-fn main() {}
diff --git a/src/test/ui/typeck/hang-in-overflow.stderr b/src/test/ui/typeck/hang-in-overflow.stderr
deleted file mode 100644
index 7a7b85b19b4..00000000000
--- a/src/test/ui/typeck/hang-in-overflow.stderr
+++ /dev/null
@@ -1,22 +0,0 @@
-error[E0275]: overflow evaluating the requirement `...`
-  --> $DIR/hang-in-overflow.rs:9:5
-   |
-LL |     foo::<_>();
-   |     ^^^^^^^^
-   |
-   = help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`hang_in_overflow`)
-   = note: required for `...` to implement `...`
-   = note: 127 redundant requirements hidden
-   = note: required for `...` to implement `...`
-note: required by a bound in `foo`
-  --> $DIR/hang-in-overflow.rs:15:28
-   |
-LL | fn foo<B>()
-   |    --- required by a bound in this
-LL | where
-LL |     Vec<[[[B; 1]; 1]; 1]>: PartialEq<B>,
-   |                            ^^^^^^^^^^^^ required by this bound in `foo`
-
-error: aborting due to previous error
-
-For more information about this error, try `rustc --explain E0275`.