]> git.lizzy.rs Git - rust.git/commitdiff
Put all existential ty vars in the `ROOT` universe
authorscalexm <alexandre@scalexm.fr>
Mon, 26 Nov 2018 19:37:43 +0000 (20:37 +0100)
committerscalexm <alexandre@scalexm.fr>
Mon, 26 Nov 2018 19:37:43 +0000 (20:37 +0100)
src/librustc/infer/canonical/canonicalizer.rs
src/test/ui/nll/user-annotations/dump-fn-method.stderr

index ddb520775da0a0f781a8ff962fb46a7c83b28802..406a36e61fbd19733283e32c52c5e72cb303df56 100644 (file)
@@ -346,12 +346,18 @@ fn fold_ty(&mut self, t: Ty<'tcx>) -> Ty<'tcx> {
 
                     // `TyVar(vid)` is unresolved, track its universe index in the canonicalized
                     // result
-                    Err(ui) => self.canonicalize_ty_var(
-                        CanonicalVarInfo {
-                            kind: CanonicalVarKind::Ty(CanonicalTyVarKind::General(ui))
-                        },
-                        t
-                    )
+                    Err(mut ui) => {
+                        if !self.infcx.unwrap().tcx.sess.opts.debugging_opts.chalk {
+                            // FIXME: perf problem described in #55921.
+                            ui = ty::UniverseIndex::ROOT;
+                        }
+                        self.canonicalize_ty_var(
+                            CanonicalVarInfo {
+                                kind: CanonicalVarKind::Ty(CanonicalTyVarKind::General(ui))
+                            },
+                            t
+                        )
+                    }
                 }
             }
 
index c963625c961e8c462c2595aa8a0351232b38aeec..7683c20b5b6e5062dfa62b1a7903341cf11436fe 100644 (file)
@@ -16,7 +16,7 @@ error: user substs: Canonical { max_universe: U0, variables: [], value: UserSubs
 LL |     let x = <u8 as Bazoom<u16>>::method::<u32>; //~ ERROR [u8, u16, u32]
    |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-error: user substs: Canonical { max_universe: U1, variables: [CanonicalVarInfo { kind: Ty(General(U1)) }, CanonicalVarInfo { kind: Ty(General(U1)) }], value: UserSubsts { substs: [^0, ^1, u32], user_self_ty: None } }
+error: user substs: Canonical { max_universe: U0, variables: [CanonicalVarInfo { kind: Ty(General(U0)) }, CanonicalVarInfo { kind: Ty(General(U0)) }], value: UserSubsts { substs: [^0, ^1, u32], user_self_ty: None } }
   --> $DIR/dump-fn-method.rs:54:5
    |
 LL |     y.method::<u32>(44, 66); //~ ERROR [^0, ^1, u32]