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.
There was a problem hiding this comment.
hmm, confusing. Can you change this to a "FIXME: unclear why exactly the macro doesn't work"?
|
|
||
| // Things stored inside of tys | ||
| type ErrorGuaranteed: Copy + Debug + Hash + Eq; | ||
| type ErrorGuaranteed: Copy + Debug + Hash + Eq + TypeVisitable<Self>; |
There was a problem hiding this comment.
instead mark with type_visitable(ignored) 🤔
There was a problem hiding this comment.
I was able to completely get rid of it
There was a problem hiding this comment.
why does this bound then exist
There was a problem hiding this comment.
I think I was wrong, I've detailed it here; #162628 (comment), but will also comment in the code
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 comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
@bors r+ rollup=iffy |
… r=lcnr Move `Const` from `rustc_middle` to `rustc_type_ir` Split by commit; - Firstly move the type and methods - From `I::Const` -> `Const<I>` - Import `ConstExt` in all places that require the extension trait methods in compiler - Import `ConstExt` in all places that require the extension trait methods in clippy r? @lcnr
… r=lcnr Move `Const` from `rustc_middle` to `rustc_type_ir` Split by commit; - Firstly move the type and methods - From `I::Const` -> `Const<I>` - Import `ConstExt` in all places that require the extension trait methods in compiler - Import `ConstExt` in all places that require the extension trait methods in clippy r? @lcnr
This comment has been minimized.
This comment has been minimized.
|
@bors delegate+ |
|
✌️ @Jamesbarford, you can now approve this pull request! If @lcnr told you to " |
0a7563b to
5e56705
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. |
|
@bors r=lcnr |
… r=lcnr Move `Const` from `rustc_middle` to `rustc_type_ir` Split by commit; - Firstly move the type and methods - From `I::Const` -> `Const<I>` - Import `ConstExt` in all places that require the extension trait methods in compiler - Import `ConstExt` in all places that require the extension trait methods in clippy r? @lcnr
… r=lcnr Move `Const` from `rustc_middle` to `rustc_type_ir` Split by commit; - Firstly move the type and methods - From `I::Const` -> `Const<I>` - Import `ConstExt` in all places that require the extension trait methods in compiler - Import `ConstExt` in all places that require the extension trait methods in clippy r? @lcnr
…uwer Rollup of 8 pull requests Successful merges: - #162628 (Move `Const` from `rustc_middle` to `rustc_type_ir`) - #159589 (Avoid leaking opaque hidden types via auto trait candidates) - #147790 (constify comparison traits on sliced types) - #162325 (powerpc64-ibm-aix: fix cfg(target_abi) value) - #162786 (regression test for GCE inherent projection ICE) - #163065 (windows Dir::rename: remove incorrect is_dir query) - #163138 (feat(time): add `Duration::{WEEK, DAY, HOUR, MINUTE}`) - #163162 (Remove unused `make3.sh` CI script)
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