1070 Commits

Author SHA1 Message Date
Chayim Refael Friedman
6315e315ad Expand target info to include the architecture
And make it easier to expand it more in the future, if needed.
2025-09-09 13:47:26 +03:00
Shoyu Vanilla (Flint)
a53b44412d
Merge pull request #20609 from ChayimFriedman2/update-rustc
internal: Upgrade rustc crates
2025-09-05 03:18:14 +00:00
Chayim Refael Friedman
b78574cd62 Upgrade rustc crates
The main changes are (there are some other small changes):

 - Using a specific type for trait IDs in the new solver, allowing us to simplify a lot of code.
 - Add `BoundConst` similar to `BoundTy` and `BoundRegion` (previously consts used `BoundVar` directly), due to a new trait requirement.
2025-09-04 22:36:31 +03:00
Chayim Refael Friedman
aa2bb65417 Add a regression test for a fixed new trait solver bug
Not sure what exactly fixed it, but why not.
2025-09-04 12:18:22 +03:00
Chayim Refael Friedman
41611b19e5 Make sense of the mess that were (are) different kind of generics in the solver
To the extent possible.

Previously they were confused. Sometimes generic params were treated as `Param` and sometimes as `Placeholder`. A completely redundant (in the new solver) mapping of salsa::Id to ints to intern some info where we could just store it uninterned (not in Chalk though, for some weird reason).

Plus fix a cute bug in closure substitution that was caught by the assertions of Chalk but the next solver did not have such assertions. Do we need more assertions?
2025-09-02 06:39:32 +03:00
Shoyu Vanilla (Flint)
a271dac578
Merge pull request #20563 from ChayimFriedman2/ns-projection-dyn-auto-trait
fix: When mapping next-solver's `dyn` type, add `Self` (aka. bound var ^1.0) to auto traits' substitutions
2025-08-30 13:39:33 +00:00
Chayim Refael Friedman
867af5fbb6 When mapping next-solver's dyn type, add Self (aka. bound var ^1.0) to auto traits' substitutions
Chalk represents dyn types as a list of predicate, the self type should be there. The next solver represents them quite differently. The `Self` was forgotten for the auto trait case.
2025-08-28 23:53:55 +03:00
Chayim Refael Friedman
ff06610625 Don't require a full InferenceTable for CastTy
A DB is enough.
2025-08-28 19:24:46 +03:00
Laurențiu Nicola
968fc01fa6
Merge pull request #20547 from ChayimFriedman2/highlight-related-unsafe-scope
fix: In highlight_related, when on an unsafe block, don't highlight unsafe operations of other unsafe blocks
2025-08-27 19:09:21 +00:00
Shoyu Vanilla (Flint)
1d90205a98
Merge pull request #20527 from ChayimFriedman2/cache-next-solver
perf: Cache trait solving across queries in the same revision
2025-08-27 04:31:39 +00:00
Chayim Refael Friedman
1efff4677e In highlight_related, when on an unsafe block, don't highlight unsafe operations of other unsafe blocks 2025-08-26 21:46:04 +03:00
Chayim Refael Friedman
6bcfbbe8f9 Remove SolverDefId::ForeignId
Replace it with normal `SolverDefId::TypeAliasId`.

The split caused a very funny bug where code was getting `TypeAliasId` where it expected `ForeignId`, because `TypeAliasId` had a `From` impl from `hir_def::TypeAliasId` and `ForeignId` had not, plus a careless `into()`.

I could've fixed this specific bug but opted to remove the split instead; currently, it just provides more room for bugs, as we don't have typed IDs for the solver anyway, and even when we'll have (hopefully), that doesn't seem like a very useful distinction, for example in hir-def foreign types are just `TypeAliasId` with some flags.

Constructing a test for this isn't trivial; the trivial test (creating a foreign type, even proving a trait bound for it) fails to fail before the change, probably because we don't use the new solver everywhere yet so we don't trigger this specific code path.
2025-08-26 19:33:46 +03:00
Chayim Refael Friedman
fd77af3a78 Don't map Chalk's Normalize to next solver's NormalizesTo
`NormalizesTo` is a private predicate that should not be used outside the solver. For normalization, rustc uses `AliasRelate`, so replace with that.
2025-08-25 20:56:45 +03:00
Chayim Refael Friedman
1ff80eefe1 Normalize all types when finishing inference
The new solver does not eagerly normalize, but things after inference expect types to be normalized. rustc does the same.

Also, I'm afraid other things in r-a don't expect results of the solver to be unnormalized. We'll need to handle that.
2025-08-25 20:23:18 +03:00
Chayim Refael Friedman
1c8a07cfd6 Cache trait solving across queries in the same revision
Caching trait solving can do a lot to speed. Unfortunately it also consume a huge amount of memory. Therefore, as part of the migration to the new solver Jack Huey disabled caching of trait solving (he made the query transparent).

The PR proposes a middle ground: do cache trait solving, but only for the same revision. This allows us to be safe because during a revision the inputs cannot change.

The result is hopefully much better performance to features that tend to do a bulk of trait solving, and also repeat the same query (e.g. inference then IDE features).

There is another limitation: results are only cached in the same thread, to remove the need for synchronization which will be expensive. More measurements are required to check whether it's better to use a synchronized global cache, or maybe stay with a thread-local cache but batch multiple feature requests (highlighting, inlay hints etc.) of the same file to the same thread.

Alongside the actual cache we store the revision, because we need to verify it (we can't eagerly clear caches when incrementing the revision), and also the address of the db to prevent multiple dbs from interleaving (this is mostly relevant in tests, although injected highlighting also uses a new db, therefore maybe it's better to move it to a separate thread).

This "games" analysis-stats to both be way faster and use way more memory; the former is because analysis-stats doesn't increment revisions, therefore all queries share the cache and hit ratio is way too good, the latter is because analysis-stats doesn't increment revisions and therefore the cache isn't cleared. Both are not representative of a typical IDE scenario.
2025-08-25 17:17:31 +03:00
Chayim Refael Friedman
03173a7ec7 Fix opaque generics
The parent generics were incorrectly not considered for TAIT.

I'm not convinced we should follow rustc here, also there are items (opaques) with more than 1 parent (opaque -> fn/type alias -> impl/trait) and I'm not sure we properly account for that in all places, but for now I left it as-is.

Also fix a bug where lifetimes' indices were incorrect when there is a self param (they started from 0 instead of 1).
2025-08-24 08:49:40 +03:00
Shoyu Vanilla
80ce520660 fix: Infinite recursion while lowering assoc type bounds from supertraits 2025-08-22 05:24:33 +09:00
Lukas Wirth
aed0fec1a9 Auto-attach database in Analysis calls 2025-08-18 09:52:23 +02:00
jackh726
596a6bf6be Remove fixme comment 2025-08-17 16:04:50 +00:00
jackh726
3ceaf806f6 Add FIXME in named_associated_type_shorthand_candidates 2025-08-17 16:04:50 +00:00
jackh726
33cc8609dc Add fixme to associated_ty_item_bounds 2025-08-17 16:04:50 +00:00
jackh726
ec26d9f48a Update fixme 2025-08-17 16:04:50 +00:00
jackh726
cdf51f28f4 Add new_empty_tuple 2025-08-17 16:04:50 +00:00
jackh726
84388ceb0e Remove a bunch of stuff from chalk_db 2025-08-17 16:04:50 +00:00
jackh726
e979349978 Switch TraitRef in hir::TraitRef to next solver 2025-08-17 16:04:50 +00:00
jackh726
7f0ec8b69f Replace layout_of_ty with layout_of_ty_ns 2025-08-17 16:04:50 +00:00
jackh726
da6fbda16c Remove all_super_traits in dyn_compatibility 2025-08-17 16:04:50 +00:00
jackh726
a66ba475bf Switch generics_require_sized_self to next solver 2025-08-17 16:04:50 +00:00
jackh726
74a9d17920 Convert more of dyn_compatibility to next-solver 2025-08-17 16:04:50 +00:00
jackh726
f9d2d2dd87 Switch associated_type_shorthand_candidates to lower_nextsolver 2025-08-17 16:04:50 +00:00
jackh726
aa890b49ff Change direct_super_traits to use generic_predicates_for_param_ns 2025-08-17 16:04:50 +00:00
jackh726
17b94c41b1 Convert some of mir/eval to next-solver types 2025-08-17 16:04:50 +00:00
jackh726
9912b803bc Deduplicate layout_of_adt 2025-08-17 16:04:50 +00:00
jackh726
eeaefa4b9d impl HirDisplay for next_solver::Ty 2025-08-17 16:04:49 +00:00
jackh726
b2f107cb8b Convert more of dyn_compatibility to next-solver 2025-08-17 16:02:59 +00:00
jackh726
8228f6f9f7 Convert some of dyn_compatibility to next-solver and remove generic_predicates_without_parent_query 2025-08-17 16:02:59 +00:00
Shoyu Vanilla
15ac6a21dd fix: Make lang items query properly filter out overwritten/excluded sysroots 2025-08-17 22:28:04 +09:00
jackh726
651ec4b08b add comment 2025-08-15 05:04:41 +00:00
jackh726
c3cad7d3f4 Add test for webrender-2022 metrics 2025-08-15 05:03:44 +00:00
jackh726
fb53fdc1e4 Shift vars when mapping Dyn 2025-08-13 19:50:15 +00:00
Lukas Wirth
7af2dd9704
Merge pull request #20446 from lcnr/kinda-unhelpful-3
next-solver fun time
2025-08-13 10:17:53 +00:00
lcnr
164d42ceab manually normalize alias 2025-08-13 11:00:00 +02:00
lcnr
425d68fc02 layout_of uses PostAnalysis 2025-08-13 10:57:45 +02:00
lcnr
70ec05eed7 implement type_of_opaque 2025-08-13 10:57:45 +02:00
Lukas Wirth
ac9d0f8049
Merge pull request #20376 from fee1-dead/traitalias
Merge Trait and TraitAlias handling
2025-08-13 08:27:54 +00:00
Lukas Wirth
2cc7bb371d
Merge pull request #20445 from rust-lang/veykril/push-twmmuyzwtxno
fix: Attach db for inlay hint compute
2025-08-13 08:01:19 +00:00
lcnr
f228c58776 update a few fixmes, and one trivial improvement 2025-08-13 10:01:17 +02:00
Lukas Wirth
90647a195f fix: Attach db for inlay hint compute 2025-08-13 09:42:50 +02:00
Deadbeef
d9f67325ab fix errors after rebase 2025-08-13 15:33:08 +08:00
Lukas Wirth
f8ef356226 Print fields of interned IDs in hir-ty instead of just the ID 2025-08-13 09:29:04 +02:00