Move Const from rustc_middle to rustc_type_ir - #162628
Jamesbarford wants to merge 5 commits into
Conversation
|
Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt Some changes occurred in compiler/rustc_sanitizers cc @rcvalle Some changes occurred in match lowering cc @Nadrieril Some changes occurred in match checking cc @Nadrieril
cc @rust-lang/clippy Some changes occurred to the CTFE machinery Some changes occurred in cc @BoxyUwU Some changes occurred in exhaustiveness checking cc @Nadrieril changes to the core type system cc @lcnr Some changes occurred to the CTFE / Miri interpreter cc @rust-lang/miri HIR ty lowering was modified cc @fmease |
| // its pointee is valid for the entire lifetime of the target `TyCtxt`. | ||
| unsafe { mem::transmute(self) } | ||
| } | ||
| } |
There was a problem hiding this comment.
why do we need manual impls instead of the macro here again?
There was a problem hiding this comment.
nop_lift does;
assert!(tcx.interners.$set.contains_pointer_to(&InternedInSet(&*self.0.0)));Whereas we need;
assert!(tcx.interners.const_.contains_pointer_to(&InternedInSet(&*self.0)));There was a problem hiding this comment.
hmm, why does moving Const change this access pattern from .0.0 to just .0 🤔 that's not immediately obvious to me.
Please add that as a comment if it can't be avoided
There was a problem hiding this comment.
I'm not sure why;
nop_lift! { const_; Const<'a> => Const<'tcx> }Given the following definitions
// rustc_type_ir/src/sty/consts.rs
pub struct Const<I: Interner>(pub I::InternedConstKind);
// rustc_middle/rustc_middle/src/ty/context/impl_interner.rs
type InternedConstKind = Interned<'tcx, WithCachedTypeInfo<ty::ConstKind<'tcx>>>;
// rustc_middle/src/ty/consts.rs
pub type Const<'tcx> = ir::Const<TyCtxt<'tcx>>;Walking through how I think the above would work, which could be wrong, I'd have thought the following code snippet would be true;
pub type Const<'tcx> = struct Const<TyCtxt<'tcx>>(pub TyCtxt<'tcx>::InternedConst);
// which in turn becomes
pub type Const<'tcx> = struct Const<TyCtxt<'tcx>>(pub Interned<'tcx, WithCachedTypeInfo<ty::ConstKind<'tcx>>>);Which is the same as what we have before all be it the definition is composed from different modules and associated types. The rust-analyser LSP I have setup agrees with with me that my intuition is correct.
However I get a bunch of cascading errors. Of which this one seems the most likely culprit. So I did what the compiler error told me to do; implement Lift for WithCachedTypeInfo<...>.
error[E0277]: the trait bound `Interned<'tcx, _>: Lift<TyCtxt<'tcx>>` is not satisfied
--> compiler/rustc_middle/src/ty/context.rs:1894:54
|
1894 | struct InternedInSet<'tcx, T: ?Sized + PointeeSized>(&'tcx T);
| ^^^^^^^ unsatisfied trait bound
|
help: the trait `Lift<TyCtxt<'tcx>>` is not implemented for `Interned<'tcx, rustc_type_ir::WithCachedTypeInfo<rustc_type_ir::ConstKind<context::TyCtxt<'tcx>>>>`
but trait `Lift<TyCtxt<'_>>` is implemented for `Interned<'_, rustc_type_ir::RegionKind<context::TyCtxt<'_>>>`
--> compiler/rustc_middle/src/ty/context.rs:1721:1
There was a problem hiding this comment.
3b8480e adds the comment;
// `rustc_type_ir::Const<I>` is only the generic wrapper; lifting it delegates
// to `I::InternedConstKind`, so the concrete interned const representation
// must itself implement `Lift`.
It's interesting that when I expanded the macro rust-analyser was able to pick up self.0.0. This confused me probably more than it should have done.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
cc @bjorn3
|
63b89a3 to
0e986ed
Compare
This comment has been minimized.
This comment has been minimized.
0e986ed to
cd5d852
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
c843bc1 to
ae129f3
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
ae129f3 to
8a720e3
Compare
This comment has been minimized.
This comment has been minimized.
8a720e3 to
4be24bc
Compare
|
This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed. Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
3b8480e to
d482705
Compare
|
So from one of the rebases I've done, I was getting a lot of failing UI tests (narrowed to one error I've pasted in below). Tracing the error to the changes, the only implementation changes were in the implementation of
Putting the implementation back for |
View all comments
Split by commit;
I::Const->Const<I>ConstExtin all places that require the extension trait methods in compilerConstExtin all places that require the extension trait methods in clippyr? @lcnr