Skip to content

Commit 9418a3f

Browse files
committed
Implement next trait solver
1 parent 44bdfdf commit 9418a3f

File tree

109 files changed

+19140
-1309
lines changed

Some content is hidden

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

109 files changed

+19140
-1309
lines changed

Cargo.lock

Lines changed: 75 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ ra-ap-rustc_parse_format = { version = "0.121", default-features = false }
9494
ra-ap-rustc_index = { version = "0.123", default-features = false }
9595
ra-ap-rustc_abi = { version = "0.123", default-features = false }
9696
ra-ap-rustc_pattern_analysis = { version = "0.123", default-features = false }
97+
ra-ap-rustc_ast_ir = { version = "0.123", default-features = false }
98+
ra-ap-rustc_type_ir = { version = "0.123", default-features = false }
99+
ra-ap-rustc_next_trait_solver = { version = "0.123", default-features = false }
97100

98101
# local crates that aren't published to crates.io. These should not have versions.
99102

@@ -108,10 +111,10 @@ arrayvec = "0.7.6"
108111
bitflags = "2.9.1"
109112
cargo_metadata = "0.21.0"
110113
camino = "1.1.10"
111-
chalk-solve = { version = "0.103.0", default-features = false }
112-
chalk-ir = "0.103.0"
113-
chalk-recursive = { version = "0.103.0", default-features = false }
114-
chalk-derive = "0.103.0"
114+
chalk-solve = { version = "0.104.0", default-features = false }
115+
chalk-ir = "0.104.0"
116+
chalk-recursive = { version = "0.104.0", default-features = false }
117+
chalk-derive = "0.104.0"
115118
crossbeam-channel = "0.5.15"
116119
dissimilar = "1.0.10"
117120
dot = "0.1.4"

crates/hir-def/src/lang_item.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,12 +383,17 @@ language_item_table! {
383383
AsyncFnMut, sym::async_fn_mut, async_fn_mut_trait, Target::Trait, GenericRequirement::Exact(1);
384384
AsyncFnOnce, sym::async_fn_once, async_fn_once_trait, Target::Trait, GenericRequirement::Exact(1);
385385

386-
AsyncFnOnceOutput, sym::async_fn_once_output,async_fn_once_output, Target::AssocTy, GenericRequirement::None;
386+
CallRefFuture, sym::call_ref_future, call_ref_future_ty, Target::AssocTy, GenericRequirement::None;
387+
CallOnceFuture, sym::call_once_future, call_once_future_ty, Target::AssocTy, GenericRequirement::None;
388+
AsyncFnOnceOutput, sym::async_fn_once_output, async_fn_once_output_ty, Target::AssocTy, GenericRequirement::None;
389+
387390
FnOnceOutput, sym::fn_once_output, fn_once_output, Target::AssocTy, GenericRequirement::None;
388391

389392
Future, sym::future_trait, future_trait, Target::Trait, GenericRequirement::Exact(0);
390393
CoroutineState, sym::coroutine_state, coroutine_state, Target::Enum, GenericRequirement::None;
391394
Coroutine, sym::coroutine, coroutine_trait, Target::Trait, GenericRequirement::Minimum(1);
395+
CoroutineReturn, sym::coroutine_return, coroutine_return_ty, Target::AssocTy, GenericRequirement::None;
396+
CoroutineYield, sym::coroutine_yield, coroutine_yield_ty, Target::AssocTy, GenericRequirement::None;
392397
Unpin, sym::unpin, unpin_trait, Target::Trait, GenericRequirement::None;
393398
Pin, sym::pin, pin_type, Target::Struct, GenericRequirement::None;
394399

crates/hir-def/src/signatures.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,14 +395,15 @@ impl ImplSignature {
395395

396396
bitflags::bitflags! {
397397
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
398-
pub struct TraitFlags: u8 {
398+
pub struct TraitFlags: u16 {
399399
const RUSTC_HAS_INCOHERENT_INHERENT_IMPLS = 1 << 1;
400400
const FUNDAMENTAL = 1 << 2;
401401
const UNSAFE = 1 << 3;
402402
const AUTO = 1 << 4;
403403
const SKIP_ARRAY_DURING_METHOD_DISPATCH = 1 << 5;
404404
const SKIP_BOXED_SLICE_DURING_METHOD_DISPATCH = 1 << 6;
405405
const RUSTC_PAREN_SUGAR = 1 << 7;
406+
const COINDUCTIVE = 1 << 8;
406407
}
407408
}
408409

@@ -436,6 +437,9 @@ impl TraitSignature {
436437
if attrs.by_key(sym::rustc_paren_sugar).exists() {
437438
flags |= TraitFlags::RUSTC_PAREN_SUGAR;
438439
}
440+
if attrs.by_key(sym::rustc_coinductive).exists() {
441+
flags |= TraitFlags::COINDUCTIVE;
442+
}
439443
let mut skip_array_during_method_dispatch =
440444
attrs.by_key(sym::rustc_skip_array_during_method_dispatch).exists();
441445
let mut skip_boxed_slice_during_method_dispatch = false;

crates/hir-ty/Cargo.toml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,14 @@ salsa-macros.workspace = true
4040
ra-ap-rustc_abi.workspace = true
4141
ra-ap-rustc_index.workspace = true
4242
ra-ap-rustc_pattern_analysis.workspace = true
43+
ra-ap-rustc_ast_ir.workspace = true
44+
ra-ap-rustc_type_ir.workspace = true
45+
ra-ap-rustc_next_trait_solver.workspace = true
4346

47+
# These moved to dev deps if `setup_tracing` was a macro and dependents also
48+
# included these
49+
tracing-subscriber.workspace = true
50+
tracing-tree.workspace = true
4451

4552
# local deps
4653
stdx.workspace = true
@@ -53,9 +60,6 @@ span.workspace = true
5360

5461
[dev-dependencies]
5562
expect-test = "1.5.1"
56-
tracing.workspace = true
57-
tracing-subscriber.workspace = true
58-
tracing-tree.workspace = true
5963
project-model.workspace = true
6064

6165
# local deps

crates/hir-ty/src/autoderef.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ pub(crate) fn deref_by_trait(
225225
// Check that the type implements Deref at all
226226
let trait_ref = projection.trait_ref(db);
227227
let implements_goal: Goal = trait_ref.cast(Interner);
228-
table.try_obligation(implements_goal.clone())?;
228+
if table.try_obligation(implements_goal.clone()).no_solution() {
229+
return None;
230+
}
229231

230232
table.register_obligation(implements_goal);
231233

0 commit comments

Comments
 (0)