about summary refs log tree commit diff
diff options
context:
space:
mode:
authorlcnr <rust@lcnr.de>2024-07-09 09:10:19 +0200
committerlcnr <rust@lcnr.de>2024-07-09 09:10:19 +0200
commit7097dbc50c086b652c37374cfbed6a40bf30efaf (patch)
tree531554ce3d1498741a4ae705f5d20204451dd0dd
parent9af6fee87de71729efca7dbb61c0931180895424 (diff)
downloadrust-7097dbc50c086b652c37374cfbed6a40bf30efaf.tar.gz
rust-7097dbc50c086b652c37374cfbed6a40bf30efaf.zip
exhaustively destructure external constraints
-rw-r--r--compiler/rustc_next_trait_solver/src/solve/mod.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/compiler/rustc_next_trait_solver/src/solve/mod.rs b/compiler/rustc_next_trait_solver/src/solve/mod.rs
index 24055d6cd83..c65c5851e9b 100644
--- a/compiler/rustc_next_trait_solver/src/solve/mod.rs
+++ b/compiler/rustc_next_trait_solver/src/solve/mod.rs
@@ -48,12 +48,20 @@ enum GoalEvaluationKind {
     Nested,
 }
 
+// FIXME(trait-system-refactor-initiative#117): we don't detect whether a response
+// ended up pulling down any universes.
 fn has_no_inference_or_external_constraints<I: Interner>(
     response: ty::Canonical<I, Response<I>>,
 ) -> bool {
-    response.value.external_constraints.region_constraints.is_empty()
-        && response.value.var_values.is_identity()
-        && response.value.external_constraints.opaque_types.is_empty()
+    let ExternalConstraintsData {
+        ref region_constraints,
+        ref opaque_types,
+        ref normalization_nested_goals,
+    } = *response.value.external_constraints;
+    response.value.var_values.is_identity()
+        && region_constraints.is_empty()
+        && opaque_types.is_empty()
+        && normalization_nested_goals.is_empty()
 }
 
 impl<'a, D, I> EvalCtxt<'a, D>