Skip to content

Commit 37a352d

Browse files
authored
Merge pull request rust-lang#20454 from jackh726/next-trait-solver-next
Convert some things from chalk_ir types to rustc_type_ir types
2 parents 029cecf + 3486a2c commit 37a352d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1877
-1690
lines changed

src/tools/rust-analyzer/crates/hir-ty/src/chalk_db.rs

Lines changed: 2 additions & 423 deletions
Large diffs are not rendered by default.

src/tools/rust-analyzer/crates/hir-ty/src/consteval.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,14 @@ use triomphe::Arc;
1515

1616
use crate::{
1717
Const, ConstData, ConstScalar, ConstValue, GenericArg, Interner, MemoryMap, Substitution,
18-
TraitEnvironment, Ty, TyBuilder, db::HirDatabase, display::DisplayTarget, generics::Generics,
19-
infer::InferenceContext, lower::ParamLoweringMode, to_placeholder_idx,
18+
TraitEnvironment, Ty, TyBuilder,
19+
db::HirDatabase,
20+
display::DisplayTarget,
21+
generics::Generics,
22+
infer::InferenceContext,
23+
lower::ParamLoweringMode,
24+
next_solver::{DbInterner, mapping::ChalkToNextSolver},
25+
to_placeholder_idx,
2026
};
2127

2228
use super::mir::{MirEvalError, MirLowerError, interpret_mir, lower_to_mir, pad16};
@@ -157,7 +163,8 @@ pub fn intern_const_ref(
157163
ty: Ty,
158164
krate: Crate,
159165
) -> Const {
160-
let layout = || db.layout_of_ty(ty.clone(), TraitEnvironment::empty(krate));
166+
let interner = DbInterner::new_with(db, Some(krate), None);
167+
let layout = || db.layout_of_ty(ty.to_nextsolver(interner), TraitEnvironment::empty(krate));
161168
let bytes = match value {
162169
LiteralConstRef::Int(i) => {
163170
// FIXME: We should handle failure of layout better.

src/tools/rust-analyzer/crates/hir-ty/src/consteval/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ fn check_str(#[rust_analyzer::rust_fixture] ra_fixture: &str, answer: &str) {
7676
#[track_caller]
7777
fn check_answer(
7878
#[rust_analyzer::rust_fixture] ra_fixture: &str,
79-
check: impl FnOnce(&[u8], &MemoryMap),
79+
check: impl FnOnce(&[u8], &MemoryMap<'_>),
8080
) {
8181
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
8282
let file_id = *file_ids.last().unwrap();

src/tools/rust-analyzer/crates/hir-ty/src/consteval_nextsolver.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ pub fn intern_const_ref<'a>(
9292
krate: Crate,
9393
) -> Const<'a> {
9494
let interner = DbInterner::new_with(db, Some(krate), None);
95-
let layout = db.layout_of_ty_ns(ty, TraitEnvironment::empty(krate));
95+
let layout = db.layout_of_ty(ty, TraitEnvironment::empty(krate));
9696
let kind = match value {
9797
LiteralConstRef::Int(i) => {
9898
// FIXME: We should handle failure of layout better.
@@ -132,9 +132,9 @@ pub fn usize_const<'db>(db: &'db dyn HirDatabase, value: Option<u128>, krate: Cr
132132
)
133133
}
134134

135-
pub fn try_const_usize<'db>(db: &'db dyn HirDatabase, c: &Const<'db>) -> Option<u128> {
135+
pub fn try_const_usize<'db>(db: &'db dyn HirDatabase, c: Const<'db>) -> Option<u128> {
136136
let interner = DbInterner::new_with(db, None, None);
137-
match (*c).kind() {
137+
match c.kind() {
138138
ConstKind::Param(_) => None,
139139
ConstKind::Infer(_) => None,
140140
ConstKind::Bound(_, _) => None,
@@ -147,7 +147,7 @@ pub fn try_const_usize<'db>(db: &'db dyn HirDatabase, c: &Const<'db>) -> Option<
147147
};
148148
let subst = convert_args_for_result(interner, unevaluated_const.args.as_slice());
149149
let ec = db.const_eval(c, subst, None).ok()?.to_nextsolver(interner);
150-
try_const_usize(db, &ec)
150+
try_const_usize(db, ec)
151151
}
152152
ConstKind::Value(val) => Some(u128::from_le_bytes(pad16(&val.value.inner().0, false))),
153153
ConstKind::Error(_) => None,
@@ -212,7 +212,7 @@ pub(crate) fn const_eval_discriminant_variant(
212212
let c = if is_signed {
213213
try_const_isize(db, &c).unwrap()
214214
} else {
215-
try_const_usize(db, &c).unwrap() as i128
215+
try_const_usize(db, c).unwrap() as i128
216216
};
217217
Ok(c)
218218
}

src/tools/rust-analyzer/crates/hir-ty/src/db.rs

Lines changed: 9 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
//! The home of `HirDatabase`, which is the Salsa database containing all the
22
//! type inference-related queries.
33
4-
use std::sync;
5-
64
use base_db::Crate;
75
use hir_def::{
86
AdtId, BlockId, CallableDefId, ConstParamId, DefWithBodyId, EnumVariantId, FunctionId,
@@ -94,16 +92,20 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
9492

9593
#[salsa::invoke(crate::layout::layout_of_adt_query)]
9694
#[salsa::cycle(cycle_result = crate::layout::layout_of_adt_cycle_result)]
97-
fn layout_of_adt(
98-
&self,
95+
fn layout_of_adt<'db>(
96+
&'db self,
9997
def: AdtId,
100-
subst: Substitution,
101-
env: Arc<TraitEnvironment>,
98+
args: crate::next_solver::GenericArgs<'db>,
99+
trait_env: Arc<TraitEnvironment>,
102100
) -> Result<Arc<Layout>, LayoutError>;
103101

104102
#[salsa::invoke(crate::layout::layout_of_ty_query)]
105103
#[salsa::cycle(cycle_result = crate::layout::layout_of_ty_cycle_result)]
106-
fn layout_of_ty(&self, ty: Ty, env: Arc<TraitEnvironment>) -> Result<Arc<Layout>, LayoutError>;
104+
fn layout_of_ty<'db>(
105+
&'db self,
106+
ty: crate::next_solver::Ty<'db>,
107+
env: Arc<TraitEnvironment>,
108+
) -> Result<Arc<Layout>, LayoutError>;
107109

108110
#[salsa::invoke(crate::layout::target_data_layout_query)]
109111
fn target_data_layout(&self, krate: Crate) -> Result<Arc<TargetDataLayout>, Arc<str>>;
@@ -179,16 +181,6 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
179181
#[salsa::invoke(crate::lower::generic_predicates_query)]
180182
fn generic_predicates(&self, def: GenericDefId) -> GenericPredicates;
181183

182-
#[salsa::invoke(crate::lower::generic_predicates_without_parent_with_diagnostics_query)]
183-
fn generic_predicates_without_parent_with_diagnostics(
184-
&self,
185-
def: GenericDefId,
186-
) -> (GenericPredicates, Diagnostics);
187-
188-
#[salsa::invoke(crate::lower::generic_predicates_without_parent_query)]
189-
#[salsa::transparent]
190-
fn generic_predicates_without_parent(&self, def: GenericDefId) -> GenericPredicates;
191-
192184
#[salsa::invoke(crate::lower::trait_environment_for_body_query)]
193185
#[salsa::transparent]
194186
fn trait_environment_for_body(&self, def: DefWithBodyId) -> Arc<TraitEnvironment>;
@@ -246,26 +238,6 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
246238
#[salsa::interned]
247239
fn intern_coroutine(&self, id: InternedCoroutine) -> InternedCoroutineId;
248240

249-
#[salsa::invoke(chalk_db::associated_ty_data_query)]
250-
fn associated_ty_data(&self, id: TypeAliasId) -> sync::Arc<chalk_db::AssociatedTyDatum>;
251-
252-
#[salsa::invoke(chalk_db::trait_datum_query)]
253-
fn trait_datum(
254-
&self,
255-
krate: Crate,
256-
trait_id: chalk_db::TraitId,
257-
) -> sync::Arc<chalk_db::TraitDatum>;
258-
259-
#[salsa::invoke(chalk_db::adt_datum_query)]
260-
fn adt_datum(&self, krate: Crate, struct_id: chalk_db::AdtId) -> sync::Arc<chalk_db::AdtDatum>;
261-
262-
#[salsa::invoke(chalk_db::impl_datum_query)]
263-
fn impl_datum(&self, krate: Crate, impl_id: chalk_db::ImplId)
264-
-> sync::Arc<chalk_db::ImplDatum>;
265-
266-
#[salsa::invoke(chalk_db::fn_def_datum_query)]
267-
fn fn_def_datum(&self, fn_def_id: CallableDefId) -> sync::Arc<chalk_db::FnDefDatum>;
268-
269241
#[salsa::invoke(chalk_db::fn_def_variance_query)]
270242
fn fn_def_variance(&self, fn_def_id: CallableDefId) -> chalk_db::Variances;
271243

@@ -280,13 +252,6 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
280252
)]
281253
fn variances_of(&self, def: GenericDefId) -> Option<Arc<[crate::variance::Variance]>>;
282254

283-
#[salsa::invoke(chalk_db::associated_ty_value_query)]
284-
fn associated_ty_value(
285-
&self,
286-
krate: Crate,
287-
id: chalk_db::AssociatedTyValueId,
288-
) -> sync::Arc<chalk_db::AssociatedTyValue>;
289-
290255
#[salsa::invoke(crate::traits::normalize_projection_query)]
291256
#[salsa::transparent]
292257
fn normalize_projection(
@@ -310,23 +275,6 @@ pub trait HirDatabase: DefDatabase + std::fmt::Debug {
310275

311276
// next trait solver
312277

313-
#[salsa::invoke(crate::layout::layout_of_adt_ns_query)]
314-
#[salsa::cycle(cycle_result = crate::layout::layout_of_adt_ns_cycle_result)]
315-
fn layout_of_adt_ns<'db>(
316-
&'db self,
317-
def: AdtId,
318-
args: crate::next_solver::GenericArgs<'db>,
319-
trait_env: Arc<TraitEnvironment>,
320-
) -> Result<Arc<Layout>, LayoutError>;
321-
322-
#[salsa::invoke(crate::layout::layout_of_ty_ns_query)]
323-
#[salsa::cycle(cycle_result = crate::layout::layout_of_ty_ns_cycle_result)]
324-
fn layout_of_ty_ns<'db>(
325-
&'db self,
326-
ty: crate::next_solver::Ty<'db>,
327-
env: Arc<TraitEnvironment>,
328-
) -> Result<Arc<Layout>, LayoutError>;
329-
330278
#[salsa::invoke(crate::lower_nextsolver::ty_query)]
331279
#[salsa::transparent]
332280
fn ty_ns<'db>(

src/tools/rust-analyzer/crates/hir-ty/src/diagnostics/expr.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use std::fmt;
66

77
use base_db::Crate;
8-
use chalk_solve::rust_ir::AdtKind;
98
use either::Either;
109
use hir_def::{
1110
AdtId, AssocItemId, DefWithBodyId, HasModule, ItemContainerId, Lookup,
@@ -300,11 +299,7 @@ impl ExprValidator {
300299
value_or_partial.is_none_or(|v| !matches!(v, ValueNs::StaticId(_)))
301300
}
302301
Expr::Field { expr, .. } => match self.infer.type_of_expr[*expr].kind(Interner) {
303-
TyKind::Adt(adt, ..)
304-
if db.adt_datum(self.owner.krate(db), *adt).kind == AdtKind::Union =>
305-
{
306-
false
307-
}
302+
TyKind::Adt(adt, ..) if matches!(adt.0, AdtId::UnionId(_)) => false,
308303
_ => self.is_known_valid_scrutinee(*expr, db),
309304
},
310305
Expr::Index { base, .. } => self.is_known_valid_scrutinee(*base, db),

0 commit comments

Comments
 (0)