summary refs log tree commit diff
path: root/src/librustdoc
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-11-07 03:21:02 +0000
committerbors <bors@rust-lang.org>2018-11-07 03:21:02 +0000
commit1433507eba7d1a114e4c6f27ae0e1a74f60f20de (patch)
treebdefceb804ebe06423a47711fd1132f3b2219818 /src/librustdoc
parentda5f414c2c0bfe5198934493f04c676e2b23ff2e (diff)
parent59e6ce4b19a8c2b9ec9a1fbf51ed232b040b177b (diff)
downloadrust-1.30.1.tar.gz
rust-1.30.1.zip
Auto merge of #55738 - Mark-Simulacrum:stable-next, r=Mark-Simulacrum 1.30.1
1.30.1 stable release

I believe this includes all of the relevant pieces from https://github.com/rust-lang/rust/issues/55594. Backports all proceeded smoothly.

cc @rust-lang/release
Diffstat (limited to 'src/librustdoc')
-rw-r--r--src/librustdoc/clean/blanket_impl.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/librustdoc/clean/blanket_impl.rs b/src/librustdoc/clean/blanket_impl.rs
index e7e371cd567..3d591a702aa 100644
--- a/src/librustdoc/clean/blanket_impl.rs
+++ b/src/librustdoc/clean/blanket_impl.rs
@@ -103,11 +103,20 @@ impl<'a, 'tcx, 'rcx, 'cstore> BlanketImplFinder <'a, 'tcx, 'rcx, 'cstore> {
                         // FIXME(eddyb) ignoring `obligations` might cause false positives.
                         drop(obligations);
 
-                        let may_apply = infcx.predicate_may_hold(&traits::Obligation::new(
-                            cause.clone(),
-                            param_env,
-                            trait_ref.to_predicate(),
-                        ));
+                        debug!(
+                            "invoking predicate_may_hold: {:?}",
+                            trait_ref,
+                        );
+                        let may_apply = match infcx.evaluate_obligation(
+                            &traits::Obligation::new(
+                                cause.clone(),
+                                param_env,
+                                trait_ref.to_predicate(),
+                            ),
+                        ) {
+                            Ok(eval_result) => eval_result.may_apply(),
+                            Err(traits::OverflowError) => true, // overflow doesn't mean yes *or* no
+                        };
                         if !may_apply {
                             return
                         }