Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow projections to be used as const generic #104443
Allow projections to be used as const generic #104443
Changes from all commits
291bc0d
eed7738
9587fd7
00d9f41
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This normalization is causing a lot of cycle error. If I nest it into a
if TypeVisitable::has_projections(&ty) {
, it reduces greatly the number of such errors but it's not a good solution imo.Do you have any idea what's going on here? Why would normalization would create cycle errors? (in code like
src/test/ui/variance/variance-associated-consts.rs
)There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ah yeah ofc that causes issues 😅
having a const parameter in the where clauses now relies on the
param_env
query for normalization to get thety::Const
but we need thety::Const
as part of the output of theparam_env
query.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any idea how to fix it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not really 😅 even changing the type of type level constants to not inherit their parents generics won't work because normalization depends on impl headers which can also contain
ty::Const
. Normalizing when creatingty::Const
is too early 🤔If we were to delay normalization of the type of consts to a later point this may mostly work. tbh that makes me think that we shouldn't land this change and should keep forbidding projections in the type of type system constants. Sorry for not noticing this issue earlier 😅 especially as we've had to deal with pretty much the same issue for
generic_const_exprs
as well.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Both
reveal_all
andnormalize_erasing_regions
are almost always the wrong thing. Unless you know what it means to use it, you can be sure it's wrong to use it.The fact that an unnormalized type ends up in a
node.ty
is the problem, find out where it comes from and normalize there.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah I marked this as resolved mistakenly. Should still check where the node gets its type and normalize there
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tbh I am not sure whether i want to insta stabilize projections in const params or keep them as part of the
adt_const_params
feature 🤔 needs a lang FCP if insta stableThere was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As you prefer! If a FCP is needed, I'll let someone from your team handle this part.