From f01d8b931364c8b7fe0db1410506d5cdc12525d8 Mon Sep 17 00:00:00 2001 From: Bram van den Heuvel Date: Tue, 28 Jul 2020 23:36:20 +0200 Subject: [PATCH 1/5] Increase version numbers --- Cargo.lock | 90 +++++++++++++++++++++++++--------- src/librustc_middle/Cargo.toml | 2 +- src/librustc_traits/Cargo.toml | 4 +- 3 files changed, 69 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f6b5b317646c3..18e8fe72e2e45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -435,9 +435,9 @@ dependencies = [ [[package]] name = "chalk-derive" -version = "0.14.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d463e01905d607e181de72e8608721d3269f29176c9a14ce037011316ae7131d" +checksum = "654c611946ba2629c5028cb7708687af975faf2c29d731824cb294c873df4697" dependencies = [ "proc-macro2", "quote", @@ -445,23 +445,11 @@ dependencies = [ "synstructure", ] -[[package]] -name = "chalk-engine" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efaf428f5398d36284f79690cf988762b7c091249f50a6c11db613a46c057000" -dependencies = [ - "chalk-derive", - "chalk-ir", - "rustc-hash", - "tracing", -] - [[package]] name = "chalk-ir" -version = "0.14.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3fdc1e9f68498ffe80f4a23b0b95f1ca6fb21d5a4c9b0c085fab3ca712bdbe" +checksum = "0a5341fbc654ca886b73b804a36aebf0e621057ccc1a68e9815b5b39b3ac9ae8" dependencies = [ "chalk-derive", "lazy_static", @@ -469,25 +457,26 @@ dependencies = [ [[package]] name = "chalk-solve" -version = "0.14.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9fd4102807b7ebe8fb034fa0f488c5656e1966d3261b558b81a08d519cdb29" +checksum = "281f82facd2538997fbe52132b1941ed213d266748215c31d15f62a8664429ad" dependencies = [ "chalk-derive", - "chalk-engine", "chalk-ir", "ena", "itertools 0.9.0", "petgraph", "rustc-hash", "tracing", + "tracing-subscriber", + "tracing-tree", ] [[package]] name = "chrono" -version = "0.4.6" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45912881121cb26fad7c38c17ba7daa18764771836b34fab7d3fbd93ed633878" +checksum = "c74d84029116787153e02106bf53e66828452a4b325cc8652b788b5967c0a0b6" dependencies = [ "num-integer", "num-traits", @@ -4630,12 +4619,11 @@ version = "0.1.0" [[package]] name = "time" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "redox_syscall", "winapi 0.3.8", ] @@ -4935,6 +4923,60 @@ dependencies = [ "tracing-core", ] +name = "tracing-log" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e0f8c7178e13481ff6765bd169b33e8d554c5d2bbede5e32c356194be02b9b9" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6ccba2f8f16e0ed268fc765d9b7ff22e965e7185d32f8f1ec8294fe17d86e79" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4f5dd7095c2481b7b3cbed71c8de53085fb3542bc3c2b4c73cba43e8f11c7ba" +dependencies = [ + "ansi_term 0.12.1", + "chrono", + "lazy_static", + "matchers", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec 1.4.0", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "tracing-tree" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ee7f0f53ed2093971a698db799ef56a2dfd89b32e3aeb5165f0e637a02be04" +dependencies = [ + "ansi_term 0.12.1", + "atty", + "chrono", + "termcolor", + "tracing", + "tracing-subscriber", +] + [[package]] name = "typenum" version = "1.12.0" diff --git a/src/librustc_middle/Cargo.toml b/src/librustc_middle/Cargo.toml index 03431cb5a885e..8ee43482125e1 100644 --- a/src/librustc_middle/Cargo.toml +++ b/src/librustc_middle/Cargo.toml @@ -29,7 +29,7 @@ rustc_serialize = { path = "../librustc_serialize" } rustc_ast = { path = "../librustc_ast" } rustc_span = { path = "../librustc_span" } byteorder = { version = "1.3" } -chalk-ir = "0.14.0" +chalk-ir = "0.19.0" smallvec = { version = "1.0", features = ["union", "may_dangle"] } measureme = "0.7.1" rustc_session = { path = "../librustc_session" } diff --git a/src/librustc_traits/Cargo.toml b/src/librustc_traits/Cargo.toml index f8487982e3d49..2a737736bf8f4 100644 --- a/src/librustc_traits/Cargo.toml +++ b/src/librustc_traits/Cargo.toml @@ -16,8 +16,8 @@ rustc_hir = { path = "../librustc_hir" } rustc_index = { path = "../librustc_index" } rustc_ast = { path = "../librustc_ast" } rustc_span = { path = "../librustc_span" } -chalk-ir = "0.14.0" -chalk-solve = "0.14.0" +chalk-ir = "0.19.0" +chalk-solve = "0.19.0" smallvec = { version = "1.0", features = ["union", "may_dangle"] } rustc_infer = { path = "../librustc_infer" } rustc_trait_selection = { path = "../librustc_trait_selection" } From fd797c41ca205887b12f9fc3fd298cf94873528a Mon Sep 17 00:00:00 2001 From: Bram van den Heuvel Date: Thu, 23 Jul 2020 17:52:55 +0200 Subject: [PATCH 2/5] Collect fields from structs, unions and enums in the same way --- src/librustc_traits/chalk/db.rs | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/src/librustc_traits/chalk/db.rs b/src/librustc_traits/chalk/db.rs index 4c8be8eb61010..021741a200f5d 100644 --- a/src/librustc_traits/chalk/db.rs +++ b/src/librustc_traits/chalk/db.rs @@ -145,23 +145,16 @@ impl<'tcx> chalk_solve::RustIrDatabase> for RustIrDatabase<'t .map(|(wc, _)| wc.subst(self.tcx, bound_vars)) .filter_map(|wc| LowerInto::>>>::lower_into(wc, &self.interner)) .collect(); - let fields = match adt_def.adt_kind() { - ty::AdtKind::Struct | ty::AdtKind::Union => { - let variant = adt_def.non_enum_variant(); - variant - .fields - .iter() - .map(|field| { - self.tcx - .type_of(field.did) - .subst(self.tcx, bound_vars) - .lower_into(&self.interner) - }) - .collect() - } - // FIXME(chalk): handle enums; force_impl_for requires this - ty::AdtKind::Enum => vec![], - }; + + let fields = adt_def + .variants + .iter() + .flat_map(|variant| variant.fields.iter()) + .map(|field| { + self.tcx.type_of(field.did).subst(self.tcx, bound_vars).lower_into(&self.interner) + }) + .collect(); + let struct_datum = Arc::new(chalk_solve::rust_ir::AdtDatum { id: adt_id, binders: chalk_ir::Binders::new( From cd588a73e4278bc267c3796305aca4e5a1282cef Mon Sep 17 00:00:00 2001 From: Bram van den Heuvel Date: Tue, 28 Jul 2020 23:36:50 +0200 Subject: [PATCH 3/5] Expand Interner implementation for RustInterner --- src/librustc_middle/traits/chalk.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/librustc_middle/traits/chalk.rs b/src/librustc_middle/traits/chalk.rs index 405af8cb2406c..d03c32533f831 100644 --- a/src/librustc_middle/traits/chalk.rs +++ b/src/librustc_middle/traits/chalk.rs @@ -75,6 +75,7 @@ impl<'tcx> chalk_ir::interner::Interner for RustInterner<'tcx> { type InternedQuantifiedWhereClauses = Vec>; type InternedVariableKinds = Vec>; type InternedCanonicalVarKinds = Vec>; + type InternedConstraints = Vec>>; type DefId = DefId; type InternedAdtId = &'tcx AdtDef; type Identifier = (); @@ -321,6 +322,20 @@ impl<'tcx> chalk_ir::interner::Interner for RustInterner<'tcx> { ) -> &'a [chalk_ir::CanonicalVarKind] { canonical_var_kinds } + + fn intern_constraints( + &self, + data: impl IntoIterator>, E>>, + ) -> Result { + data.into_iter().collect::, _>>() + } + + fn constraints_data<'a>( + &self, + constraints: &'a Self::InternedConstraints, + ) -> &'a [chalk_ir::InEnvironment>] { + constraints + } } impl<'tcx> chalk_ir::interner::HasInterner for RustInterner<'tcx> { From 39829d939d049849ed852a74c9b38da4341434eb Mon Sep 17 00:00:00 2001 From: Bram van den Heuvel Date: Wed, 29 Jul 2020 00:08:38 +0200 Subject: [PATCH 4/5] Checkpoint --- src/librustc_traits/Cargo.toml | 1 + src/librustc_traits/chalk/mod.rs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librustc_traits/Cargo.toml b/src/librustc_traits/Cargo.toml index 2a737736bf8f4..377be6b1a0b47 100644 --- a/src/librustc_traits/Cargo.toml +++ b/src/librustc_traits/Cargo.toml @@ -16,6 +16,7 @@ rustc_hir = { path = "../librustc_hir" } rustc_index = { path = "../librustc_index" } rustc_ast = { path = "../librustc_ast" } rustc_span = { path = "../librustc_span" } +chalk-integration = "0.19.0" chalk-ir = "0.19.0" chalk-solve = "0.19.0" smallvec = { version = "1.0", features = ["union", "may_dangle"] } diff --git a/src/librustc_traits/chalk/mod.rs b/src/librustc_traits/chalk/mod.rs index 0c5d57551f9c5..3409f1500d6c7 100644 --- a/src/librustc_traits/chalk/mod.rs +++ b/src/librustc_traits/chalk/mod.rs @@ -81,7 +81,10 @@ crate fn evaluate_goal<'tcx>( universes: max_universe + 1, }; - let solver_choice = chalk_solve::SolverChoice::SLG { max_size: 32, expected_answers: None }; + let solver_choice = chalk_integration::SolverChoice::SLG { + max_size: 32, + expected_answers: None, + }; let mut solver = solver_choice.into_solver::>(); let db = ChalkRustIrDatabase { tcx, interner }; From b9194032bcaf9bc7e0a20b079e1aa9071e4bede3 Mon Sep 17 00:00:00 2001 From: Bram van den Heuvel Date: Thu, 30 Jul 2020 20:54:31 +0200 Subject: [PATCH 5/5] Use Solver from chalk_solve --- src/librustc_traits/Cargo.toml | 1 - src/librustc_traits/chalk/mod.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/librustc_traits/Cargo.toml b/src/librustc_traits/Cargo.toml index 377be6b1a0b47..2a737736bf8f4 100644 --- a/src/librustc_traits/Cargo.toml +++ b/src/librustc_traits/Cargo.toml @@ -16,7 +16,6 @@ rustc_hir = { path = "../librustc_hir" } rustc_index = { path = "../librustc_index" } rustc_ast = { path = "../librustc_ast" } rustc_span = { path = "../librustc_span" } -chalk-integration = "0.19.0" chalk-ir = "0.19.0" chalk-solve = "0.19.0" smallvec = { version = "1.0", features = ["union", "may_dangle"] } diff --git a/src/librustc_traits/chalk/mod.rs b/src/librustc_traits/chalk/mod.rs index 3409f1500d6c7..f26219a613712 100644 --- a/src/librustc_traits/chalk/mod.rs +++ b/src/librustc_traits/chalk/mod.rs @@ -81,7 +81,7 @@ crate fn evaluate_goal<'tcx>( universes: max_universe + 1, }; - let solver_choice = chalk_integration::SolverChoice::SLG { + let solver_choice = chalk_solve::solve::SLGSolver { max_size: 32, expected_answers: None, };