Yotam Ofek
174cb47a46
Fix some fixmes that were waiting for let chains
2025-06-26 23:36:46 +00:00
bors
b03b3a7ec9
Auto merge of #142774 - lcnr:search_graph-2, r=oli-obk
...
`evaluate_goal` avoid unnecessary step
based on rust-lang/rust#142617.
This does not mess with the debug logging for the trait solver and is a very nice cleanup for rust-lang/rust#142735. E.g. for
```rust
#[derive(Clone)]
struct Wrapper<T>(T);
#[derive(Clone)]
struct Nested; // using a separate type to avoid the fast paths
fn is_clone<T: Clone>() {}
fn main() {
is_clone::<Wrapper<Nested>>();
}
```
We get the following proof tree with `RUSTC_LOG=rustc_type_ir::search_graph=debug,rustc_next_trait_solver=debug`
```
rustc_next_trait_solver::solve::eval_ctxt::evaluate_root_goal goal=Goal { param_env: ParamEnv { caller_bounds: [] }, predicate: Binder { value: TraitPredicate(<Wrapper<Nested> as std::clone::Clone>, polarity:Positive), bound_vars: [] } }, generate_proof_tree=No, span=src/main.rs:7:5: 7:34 (#0 ), stalled_on=None
rustc_type_ir::search_graph::evaluate_goal input=CanonicalQueryInput { canonical: Canonical { value: QueryInput { goal: Goal { param_env: ParamEnv { caller_bounds: [] }, predicate: Binder { value: TraitPredicate(<Wrapper<Nested> as std::clone::Clone>, polarity:Positive), bound_vars: [] } }, predefined_opaques_in_body: PredefinedOpaques(PredefinedOpaquesData { opaque_types: [] }) }, max_universe: U0, variables: [] }, typing_mode: Analysis { defining_opaque_types_and_generators: [] } }, step_kind_from_parent=Unknown
rustc_next_trait_solver::solve::eval_ctxt::probe::enter source=Impl(DefId(0:10 ~ main[21d2]::{impl#0}))
rustc_next_trait_solver::solve::eval_ctxt::add_goal source=ImplWhereBound, goal=Goal { param_env: ParamEnv { caller_bounds: [] }, predicate: Binder { value: TraitPredicate(<_ as std::marker::Sized>, polarity:Positive), bound_vars: [] } }
rustc_next_trait_solver::solve::eval_ctxt::add_goal source=ImplWhereBound, goal=Goal { param_env: ParamEnv { caller_bounds: [] }, predicate: Binder { value: TraitPredicate(<_ as std::clone::Clone>, polarity:Positive), bound_vars: [] } }
rustc_type_ir::search_graph::evaluate_goal input=CanonicalQueryInput { canonical: Canonical { value: QueryInput { goal: Goal { param_env: ParamEnv { caller_bounds: [] }, predicate: Binder { value: TraitPredicate(<Nested as std::clone::Clone>, polarity:Positive), bound_vars: [] } }, predefined_opaques_in_body: PredefinedOpaques(PredefinedOpaquesData { opaque_types: [] }) }, max_universe: U0, variables: [] }, typing_mode: Analysis { defining_opaque_types_and_generators: [] } }, step_kind_from_parent=Unknown
0ms DEBUG rustc_type_ir::search_graph global cache hit, required_depth=0
0ms DEBUG rustc_type_ir::search_graph return=Ok(Canonical { value: Response { certainty: Yes, var_values: CanonicalVarValues { var_values: [] }, external_constraints: ExternalConstraints(ExternalConstraintsData { region_constraints: [], opaque_types: [], normalization_nested_goals: NestedNormalizationGoals([]) }) }, max_universe: U0, variables: [] })
rustc_next_trait_solver::solve::eval_ctxt::probe::enter source=BuiltinImpl(Misc)
rustc_next_trait_solver::solve::trait_goals::merge_trait_candidates candidates=[Candidate { source: Impl(DefId(0:10 ~ main[21d2]::{impl#0})), result: Canonical { value: Response { certainty: Yes, var_values: CanonicalVarValues { var_values: [] }, external_constraints: ExternalConstraints(ExternalConstraintsData { region_constraints: [], opaque_types: [], normalization_nested_goals: NestedNormalizationGoals([]) }) }, max_universe: U0, variables: [] } }]
0ms DEBUG rustc_next_trait_solver::solve::trait_goals return=Ok((Canonical { value: Response { certainty: Yes, var_values: CanonicalVarValues { var_values: [] }, external_constraints: ExternalConstraints(ExternalConstraintsData { region_constraints: [], opaque_types: [], normalization_nested_goals: NestedNormalizationGoals([]) }) }, max_universe: U0, variables: [] }, Some(Misc)))
0ms DEBUG rustc_type_ir::search_graph insert global cache, evaluation_result=EvaluationResult { encountered_overflow: false, required_depth: 1, heads: CycleHeads { heads: {} }, nested_goals: NestedGoals { nested_goals: {} }, result: Ok(Canonical { value: Response { certainty: Yes, var_values: CanonicalVarValues { var_values: [] }, external_constraints: ExternalConstraints(ExternalConstraintsData { region_constraints: [], opaque_types: [], normalization_nested_goals: NestedNormalizationGoals([]) }) }, max_universe: U0, variables: [] }) }
0ms DEBUG rustc_type_ir::search_graph return=Ok(Canonical { value: Response { certainty: Yes, var_values: CanonicalVarValues { var_values: [] }, external_constraints: ExternalConstraints(ExternalConstraintsData { region_constraints: [], opaque_types: [], normalization_nested_goals: NestedNormalizationGoals([]) }) }, max_universe: U0, variables: [] })
```
2025-06-26 17:04:47 +00:00
Oli Scherer
eb7245a864
Change const trait bound syntax from ~const to [const]
2025-06-26 13:46:45 +00:00
Michael Goulet
87c8aa1ff6
Normalize before computing ConstArgHasType goal
2025-06-25 15:36:59 +00:00
bors
2801f9aaf9
Auto merge of #142746 - compiler-errors:super-implied-outlives, r=lcnr
...
Apply `impl_super_outlives` optimization to new trait solver
I never did rust-lang/rust#128746 for the new solver.
r? lcnr
2025-06-25 10:10:21 +00:00
Michael Goulet
abd15858a1
Simplify API of solver a bit
2025-06-23 22:09:11 +00:00
Michael Goulet
df426cf289
Uplift find_const_ty_from_env
2025-06-23 21:00:23 +00:00
lcnr
e8e32c30c2
inspect: merge [Canonical]GoalEvaluation
2025-06-23 11:50:36 +02:00
lcnr
5132e6c540
evaluate_goal: avoid unnecessary step
2025-06-23 11:50:36 +02:00
Jacob Pratt
9c09dd51f9
Rollup merge of #142617 - lcnr:search_graph-3, r=compiler-errors
...
improve search graph docs, reset `encountered_overflow` between reruns
I think this shouldn't really matter for now. It will be more relevant for my current rework as we otherwise cannot partially reevaluate the root goal in case there has been overflow during the prervious iteration.
r? ````@BoxyUwU````
2025-06-22 08:49:04 +02:00
Michael Goulet
24ea06cbe8
Apply impl_super_outlives optimization to new trait solver
2025-06-19 21:03:50 +00:00
lcnr
ecd65f870d
evaluate_goal: accept different inputs
2025-06-18 17:22:04 +02:00
Romain Perier
a1a3bef6f0
Implement lint against direct uses of rustc_type_ir in compiler crates
...
This commit adds a lint to prevent the use of rustc_type_ir in random
compiler crates, except for type system internals traits, which are
explicitly allowed. Moreover, this fixes diagnostic_items() to include
the CRATE_OWNER_ID, otherwise rustc_diagnostic_item attribute is ignored
on the crate root.
2025-06-18 16:01:41 +02:00
David Wood
607eb322a8
trait_sel: skip elaboration of sizedness supertrait
...
As a performance optimization, skip elaborating the supertraits of
`Sized`, and if a `MetaSized` obligation is being checked, then look for
a `Sized` predicate in the parameter environment. This makes the
`ParamEnv` smaller which should improve compiler performance as it avoids
all the iteration over the larger `ParamEnv`.
2025-06-16 23:04:36 +00:00
David Wood
3b0e1c17d2
trait_sel: {Meta,Pointee}Sized on ?Sized types
...
Expand the automatic implementation of `MetaSized` and `PointeeSized` so
that it is also implemented on non-`Sized` types, just not `ty::Foreign`
(extern type).
2025-06-16 15:00:22 +00:00
David Wood
d43da6f4de
trait_sel: {Meta,Pointee}Sized on Sized types
...
Introduce the `MetaSized` and `PointeeSized` traits as supertraits of
`Sized` and initially implement it on everything that currently
implements `Sized` to isolate any changes that simply adding the
traits introduces.
2025-06-16 15:00:22 +00:00
Michael Goulet
b138202002
TypeVisiting binders no longer requires TypeFolding its interior
2025-06-13 17:54:45 +00:00
Michael Goulet
da8d529820
Replace escaping bound vars in ty/ct visiting, not binder visiting
2025-06-13 17:54:45 +00:00
Michael Goulet
6fa6d0e097
Uplift BoundVarReplacer
2025-06-13 17:54:45 +00:00
Michael Goulet
fe92efaf31
Make connection between Placeholder and Bound a bit more clear in the type abstraction
2025-06-13 17:54:45 +00:00
bors
bdb04d6c4f
Auto merge of #141763 - lcnr:fixme-gamer, r=BoxyUwU
...
`FIXME(-Znext-solver)` triage
r? `@BoxyUwU`
2025-06-11 11:47:05 +00:00
lcnr
758f4c9498
add param_env cache to canonicalization
2025-06-08 22:41:23 -04:00
lcnr
87141e37f3
move canonicalize_param_env into sub-fn
2025-06-08 22:41:23 -04:00
Michael Goulet
8addb6f3be
Filter out universals and lifetimes from stalled_vars
2025-06-06 15:34:14 +00:00
lcnr
7dac755be8
FIXME(-Znext-solver) triage
...
Co-authored-by: Michael Goulet <michael@errs.io>
2025-06-03 14:23:56 +02:00
bors
9b0268a43b
Auto merge of #141731 - compiler-errors:tweak-fast-path-trait, r=lcnr
...
Tweak fast path trait handling
(1.) Make it more sound by considering polarity (lol)
(2.) Make it more general, by considering higher-ranked size/copy/clone
(2.) Make it less observable, by only doing copy/clone fast path if there are no regions involved
r? lcnr
2025-06-01 10:59:38 +00:00
bors
1c0849d8ba
Auto merge of #141651 - compiler-errors:less-assert, r=lcnr
...
Make some assertions in solver into debug assertions
These may or may not be expensive :>
r? lcnr
2025-05-30 02:21:17 +00:00
Michael Goulet
f1da288557
Tweak fast path trait handling
2025-05-29 11:14:36 +00:00
bors
5f025f363d
Auto merge of #141581 - lcnr:fold-clauses, r=compiler-errors
...
add additional `TypeFlags` fast paths
Some crates, e.g. `diesel`, have items with a lot of where-clauses (more than 150). In these cases checking the `TypeFlags` of the whole `param_env` can be very beneficial.
This adds `fn fold_clauses` to mirror the existing `fn visit_clauses` and then uses this in folders which fold `ParamEnv`s.
Split out from rust-lang/rust#141451 , depends on rust-lang/rust#141442 .
r? `@compiler-errors`
2025-05-29 02:29:01 +00:00
Michael Goulet
905fc0a008
Make some assertions in solver into debug assertions
2025-05-27 13:46:41 +00:00
Michael Goulet
5f3ae06db0
Fix some var names
2025-05-27 11:14:47 +00:00
bors
2805e1dc4c
Auto merge of #141605 - jieyouxu:rollup-3gjqh5l, r=jieyouxu
...
Rollup of 10 pull requests
Successful merges:
- rust-lang/rust#140898 (minor improvements on running miri)
- rust-lang/rust#141392 (Avoid obligation construction dance with query region constraints)
- rust-lang/rust#141431 (Emit dummy open drop for unsafe binder)
- rust-lang/rust#141433 (Properly analyze captures from unsafe binders)
- rust-lang/rust#141439 (Deduplicate dyn compatibility violations due to coercion)
- rust-lang/rust#141449 (further deduplicate ast visitor code)
- rust-lang/rust#141513 (interpret: add allocation parameters to `AllocBytes`)
- rust-lang/rust#141516 (speed up charsearcher for ascii chars)
- rust-lang/rust#141526 (add a dedicated section for compiler environment variables in the unstable book)
- rust-lang/rust#141550 (Fix `unused_braces` lint suggestion when encountering attributes)
r? `@ghost`
`@rustbot` modify labels: rollup
2025-05-26 20:30:06 +00:00
lcnr
0830ce036f
assert we never incorrectly canonicalize envs
2025-05-26 19:57:48 +00:00
lcnr
c56efaedfa
add additional TypeFlags fast paths
2025-05-26 19:57:48 +00:00
许杰友 Jieyou Xu (Joe)
aa9978229e
Rollup merge of #141392 - compiler-errors:query-outlives, r=lcnr
...
Avoid obligation construction dance with query region constraints
And some renaming...
2025-05-27 01:29:17 +08:00
bors
40d2563ea2
Auto merge of #141500 - compiler-errors:rerun-cache-2, r=lcnr
...
Don't rerun goals if none of their vars have changed
r? `@ghost`
Alternative to rust-lang/rust#141488 . I'm pretty sure that we don't need to re-run the goal at all if the inputs don't change... 🤔
2025-05-26 17:02:43 +00:00
Michael Goulet
e2215a8ad9
Don't rerun goals if none of its vars have changed
2025-05-26 10:10:03 +00:00
Michael Goulet
9d742eea25
Rename
2025-05-26 08:48:19 +00:00
Michael Goulet
ade24354f4
Do not canonicalize in new solver if it has nothing to canonicalize
2025-05-25 20:14:11 +00:00
lcnr
326b7e9a6b
yeet CanonicalVarInfo
2025-05-23 12:10:53 +00:00
bors
912981a9ea
Auto merge of #141396 - matthiaskrgr:rollup-feg050g, r=matthiaskrgr
...
Rollup of 7 pull requests
Successful merges:
- #135562 (Add ignore value suggestion in closure body)
- #139635 (Finalize repeat expr inference behaviour with inferred repeat counts)
- #139668 (Handle regions equivalent to 'static in non_local_bounds)
- #140218 (HIR ty lowering: Clean up & refactor the lowering of type-relative paths)
- #140435 (use uX::from instead of _ as uX in non - const contexts)
- #141130 (rustc_on_unimplemented cleanups)
- #141286 (Querify `coroutine_hidden_types`)
Failed merges:
- #140247 (Don't build `ParamEnv` and do trait solving in `ItemCtxt`s when lowering IATs)
r? `@ghost`
`@rustbot` modify labels: rollup
2025-05-22 21:02:18 +00:00
bors
e3892a40a9
Auto merge of #141397 - matthiaskrgr:rollup-l9uu6g6, r=matthiaskrgr
...
Rollup of 8 pull requests
Successful merges:
- #141355 (ci: improve citool job db errors)
- #141359 (Fix `FnOnce` impl for `AsyncFn`/`AsyncFnMut` self-borrowing closures in new solver)
- #141362 (Normalize aliases to correct kind of error term)
- #141377 (Remove unnecessary `is_empty` checks)
- #141381 (try_cast_aligned: avoid bare int-to-ptr casts)
- #141382 (ci: convert distcheck to free runner)
- #141389 (ci: prepare aws access keys for migration)
- #141390 (Don't allow `poly_select` in new solver)
r? `@ghost`
`@rustbot` modify labels: rollup
2025-05-22 14:55:52 +00:00
Matthias Krüger
654b2f39f1
Rollup merge of #141359 - compiler-errors:async-fn-once, r=lcnr
...
Fix `FnOnce` impl for `AsyncFn`/`AsyncFnMut` self-borrowing closures in new solver
This only affects closures that are "`AsyncFn`/`AsyncFnMut`" in their calling capability that are being called with the `FnOnce` trait.
fixes https://github.com/rust-lang/trait-system-refactor-initiative/issues/217
r? lcnr
2025-05-22 16:04:12 +02:00
Matthias Krüger
8c2508292b
Rollup merge of #141286 - compiler-errors:querify-coroutine, r=oli-obk
...
Querify `coroutine_hidden_types`
This is necessary if we ever want to add implied bounds that would be used for higher-ranked coroutine auto trait goals (e.g. future implements `Send`).
Modest perf regression in `hyper` full build which (afaict?) is the only async stress test, so definitely worth it IMO.
r? oli-obk
2025-05-22 16:02:31 +02:00
bors
d423c815a6
Auto merge of #141135 - compiler-errors:fast-path-2, r=lcnr
...
Fast path for processing some obligations in the new solver
Fast path applies to:
- Dyn compatibility predicates
- Region and type outlives predicates
- Trivially sized predicates
2025-05-22 11:39:10 +00:00
Michael Goulet
e0f8055871
Fix FnOnce impl for AsyncFn/AsyncFnMut closures in new solver
2025-05-21 20:02:29 +00:00
lcnr
5d9141c6c8
fix better_any breakage by making the solver more unsound
2025-05-21 13:54:19 +00:00
Michael Goulet
6555ef7f09
Querify coroutine_hidden_types
2025-05-20 11:50:25 +00:00
Michael Goulet
1d0d258a86
Fast path for processing some obligations in the new solver
2025-05-18 12:18:44 +00:00
Matthias Krüger
1f84e114f1
Rollup merge of #140712 - lcnr:normalization-gat-args, r=compiler-errors
...
normalization: avoid incompletely constraining GAT args
We need to copy the behavior of #125214 in the new solver. This fixes https://github.com/rust-lang/trait-system-refactor-initiative/issues/202 which seems to be the cause of the regression in `deptypes`.
r? ```@compiler-errors```
2025-05-15 22:28:50 +02:00