about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_trait_selection/src/traits/error_reporting/mod.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
3 files changed, 1 insertions, 31 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 4ac53f6302f..e06ee851264 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/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`.