Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 75 additions & 8 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 7 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ ra-ap-rustc_parse_format = { version = "0.121", default-features = false }
ra-ap-rustc_index = { version = "0.123", default-features = false }
ra-ap-rustc_abi = { version = "0.123", default-features = false }
ra-ap-rustc_pattern_analysis = { version = "0.123", default-features = false }
ra-ap-rustc_ast_ir = { version = "0.123", default-features = false }
ra-ap-rustc_type_ir = { version = "0.123", default-features = false }
ra-ap-rustc_next_trait_solver = { version = "0.123", default-features = false }

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

Expand All @@ -108,10 +111,10 @@ arrayvec = "0.7.6"
bitflags = "2.9.1"
cargo_metadata = "0.21.0"
camino = "1.1.10"
chalk-solve = { version = "0.103.0", default-features = false }
chalk-ir = "0.103.0"
chalk-recursive = { version = "0.103.0", default-features = false }
chalk-derive = "0.103.0"
chalk-solve = { version = "0.104.0", default-features = false }
chalk-ir = "0.104.0"
chalk-recursive = { version = "0.104.0", default-features = false }
chalk-derive = "0.104.0"
crossbeam-channel = "0.5.15"
dissimilar = "1.0.10"
dot = "0.1.4"
Expand Down
7 changes: 6 additions & 1 deletion crates/hir-def/src/lang_item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -383,12 +383,17 @@ language_item_table! {
AsyncFnMut, sym::async_fn_mut, async_fn_mut_trait, Target::Trait, GenericRequirement::Exact(1);
AsyncFnOnce, sym::async_fn_once, async_fn_once_trait, Target::Trait, GenericRequirement::Exact(1);

AsyncFnOnceOutput, sym::async_fn_once_output,async_fn_once_output, Target::AssocTy, GenericRequirement::None;
CallRefFuture, sym::call_ref_future, call_ref_future_ty, Target::AssocTy, GenericRequirement::None;
CallOnceFuture, sym::call_once_future, call_once_future_ty, Target::AssocTy, GenericRequirement::None;
AsyncFnOnceOutput, sym::async_fn_once_output, async_fn_once_output_ty, Target::AssocTy, GenericRequirement::None;

FnOnceOutput, sym::fn_once_output, fn_once_output, Target::AssocTy, GenericRequirement::None;

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

Expand Down
6 changes: 5 additions & 1 deletion crates/hir-def/src/signatures.rs
Original file line number Diff line number Diff line change
Expand Up @@ -395,14 +395,15 @@ impl ImplSignature {

bitflags::bitflags! {
#[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
pub struct TraitFlags: u8 {
pub struct TraitFlags: u16 {
const RUSTC_HAS_INCOHERENT_INHERENT_IMPLS = 1 << 1;
const FUNDAMENTAL = 1 << 2;
const UNSAFE = 1 << 3;
const AUTO = 1 << 4;
const SKIP_ARRAY_DURING_METHOD_DISPATCH = 1 << 5;
const SKIP_BOXED_SLICE_DURING_METHOD_DISPATCH = 1 << 6;
const RUSTC_PAREN_SUGAR = 1 << 7;
const COINDUCTIVE = 1 << 8;
}
}

Expand Down Expand Up @@ -436,6 +437,9 @@ impl TraitSignature {
if attrs.by_key(sym::rustc_paren_sugar).exists() {
flags |= TraitFlags::RUSTC_PAREN_SUGAR;
}
if attrs.by_key(sym::rustc_coinductive).exists() {
flags |= TraitFlags::COINDUCTIVE;
}
let mut skip_array_during_method_dispatch =
attrs.by_key(sym::rustc_skip_array_during_method_dispatch).exists();
let mut skip_boxed_slice_during_method_dispatch = false;
Expand Down
10 changes: 7 additions & 3 deletions crates/hir-ty/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,14 @@ salsa-macros.workspace = true
ra-ap-rustc_abi.workspace = true
ra-ap-rustc_index.workspace = true
ra-ap-rustc_pattern_analysis.workspace = true
ra-ap-rustc_ast_ir.workspace = true
ra-ap-rustc_type_ir.workspace = true
ra-ap-rustc_next_trait_solver.workspace = true

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

# local deps
stdx.workspace = true
Expand All @@ -53,9 +60,6 @@ span.workspace = true

[dev-dependencies]
expect-test = "1.5.1"
tracing.workspace = true
tracing-subscriber.workspace = true
tracing-tree.workspace = true
project-model.workspace = true

# local deps
Expand Down
4 changes: 3 additions & 1 deletion crates/hir-ty/src/autoderef.rs
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,9 @@ pub(crate) fn deref_by_trait(
// Check that the type implements Deref at all
let trait_ref = projection.trait_ref(db);
let implements_goal: Goal = trait_ref.cast(Interner);
table.try_obligation(implements_goal.clone())?;
if table.try_obligation(implements_goal.clone()).no_solution() {
return None;
}

table.register_obligation(implements_goal);

Expand Down
Loading
Loading