about summary refs log tree commit diff
path: root/compiler/rustc_hir_analysis/src/outlives/test.rs
diff options
context:
space:
mode:
authorLukas Markeffsky <@>2023-12-23 13:59:10 +0100
committerLukas Markeffsky <@>2023-12-23 13:59:10 +0100
commit49103dc553990e93b72a86183e14697c97eb5b2c (patch)
tree3fe8aa7a06c5ca10a320f2bf2e8e6906dbe9ff4d /compiler/rustc_hir_analysis/src/outlives/test.rs
parentc03d978a4bcb7c01d8cdf80bd7600b27e2d21588 (diff)
downloadrust-49103dc553990e93b72a86183e14697c97eb5b2c.tar.gz
rust-49103dc553990e93b72a86183e14697c97eb5b2c.zip
move rustc_outlives test code from query to dedicated function
Diffstat (limited to 'compiler/rustc_hir_analysis/src/outlives/test.rs')
-rw-r--r--compiler/rustc_hir_analysis/src/outlives/test.rs29
1 files changed, 18 insertions, 11 deletions
diff --git a/compiler/rustc_hir_analysis/src/outlives/test.rs b/compiler/rustc_hir_analysis/src/outlives/test.rs
index 60f8e246ad6..b3cbc312721 100644
--- a/compiler/rustc_hir_analysis/src/outlives/test.rs
+++ b/compiler/rustc_hir_analysis/src/outlives/test.rs
@@ -1,5 +1,4 @@
-use rustc_errors::struct_span_err;
-use rustc_middle::ty::TyCtxt;
+use rustc_middle::ty::{self, TyCtxt};
 use rustc_span::symbol::sym;
 
 pub fn test_inferred_outlives(tcx: TyCtxt<'_>) {
@@ -7,15 +6,23 @@ pub fn test_inferred_outlives(tcx: TyCtxt<'_>) {
         // For unit testing: check for a special "rustc_outlives"
         // attribute and report an error with various results if found.
         if tcx.has_attr(id.owner_id, sym::rustc_outlives) {
-            let inferred_outlives_of = tcx.inferred_outlives_of(id.owner_id);
-            struct_span_err!(
-                tcx.sess,
-                tcx.def_span(id.owner_id),
-                E0640,
-                "{:?}",
-                inferred_outlives_of
-            )
-            .emit();
+            let predicates = tcx.inferred_outlives_of(id.owner_id);
+            let mut pred: Vec<String> = predicates
+                .iter()
+                .map(|(out_pred, _)| match out_pred.kind().skip_binder() {
+                    ty::ClauseKind::RegionOutlives(p) => p.to_string(),
+                    ty::ClauseKind::TypeOutlives(p) => p.to_string(),
+                    err => bug!("unexpected clause {:?}", err),
+                })
+                .collect();
+            pred.sort();
+
+            let span = tcx.def_span(id.owner_id);
+            let mut err = tcx.sess.struct_span_err(span, "rustc_outlives");
+            for p in pred {
+                err.note(p);
+            }
+            err.emit();
         }
     }
 }