-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Make (try_)subst_and_normalize_erasing_regions
take EarlyBinder
#110297
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
Some changes occurred in src/tools/clippy cc @rust-lang/clippy |
@@ -435,7 +435,7 @@ fn can_change_type<'a>(cx: &LateContext<'a>, mut expr: &'a Expr<'a>, mut ty: Ty< | |||
let output_ty = fn_sig.output(); | |||
if output_ty.contains(*param_ty) { | |||
if let Ok(new_ty) = cx.tcx.try_subst_and_normalize_erasing_regions( | |||
new_subst, cx.param_env, output_ty) { | |||
new_subst, cx.param_env, EarlyBinder(output_ty)) { |
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.
So, seems like the subst_identity().skip_binder()
call to create this isn't correct...
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.
Hmm, yeah I agree that this looks weird now. Would it be better as skip_binder().skip_binder()
? Or are you envisioning a larger change here?
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.
I have to look a bit more at this. But likely the easiest thing is to either just leave it as-is with a comment, or map/skip_binder above.
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 okay thanks! I changed it to skip_binder()
above in the most recent commit, but happy to try to improve it further.
Yeah, I also thought about mapping it, it seems like we always skip the inner Binder
there but want to keep the EarlyBinder
around, so could do something like
let fn_sig = cx.tcx.fn_sig(def_id).map_bound(|t| t.skip_binder());
(and then replace the calls to .inputs()
with .skip_binder().inputs()
)
but I wasn't sure if this was more or less readable than how it is now
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.
I think this PR doesn't necessarily need to fix this, at minimum we should probably open a clippy issue about it and add a FIXME before this PR lands
823b771
to
7753208
Compare
Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt Some changes occurred to the CTFE / Miri engine cc @rust-lang/miri Some changes occurred in compiler/rustc_codegen_cranelift cc @bjorn3 |
☔ The latest upstream changes (presumably #96840) made this pull request unmergeable. Please resolve the merge conflicts. |
7753208
to
8f57d5b
Compare
I will r+ this once its been rebased again, that |
… skip_binder in mir subst methods
8f57d5b
to
d27f401
Compare
Hi @BoxyUwU, thanks for taking a look! Sorry, I've also been busy recently and sort of forgot about this PR 😅 I rebased and added the FIXME as you suggested, the |
@bors r+ |
Rollup of 7 pull requests Successful merges: - rust-lang#110297 (Make `(try_)subst_and_normalize_erasing_regions` take `EarlyBinder`) - rust-lang#110827 (Fix lifetime suggestion for type aliases with objects in them) - rust-lang#111022 (Use smaller ints for bitflags) - rust-lang#111056 (Fix some suggestions where a `Box<T>` is expected.) - rust-lang#111262 (Further normalize msvc-non-utf8-ouput) - rust-lang#111265 (Make generics_of has_self on RPITITs delegate to the opaque) - rust-lang#111323 (Give a more helpful error when running the rustc shim directly) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Changes
subst_and_normalize_erasing_regions
andtry_subst_and_normalize_erasing_regions
to takeEarlyBinder<T>
instead ofT
.(related to #105779)
This was suggested by @BoxyUwU in #107753 (comment). After changing
type_of
to returnEarlyBinder
, there were several places where the binder was immediately skipped to calltcx.subst_and_normalize_erasing_regions
, only for the binder to be reconstructed inside of that method.r? @BoxyUwU