Skip to content

Commit 71591f7

Browse files
committed
Auto merge of #149535 - Jamesbarford:chore/refactor-struct-placeholder, r=lcnr
Move `struct Placeholder<T>` r? ghost Couple of issues I've encountered; - `compiler/rustc_infer/src/infer/region_constraints/mod.rs` `GenericKind` I can't call `write!(f, "{p}")` due to error 1. Which looks like I may need to implement `Lift` for `Placeholder`? - Using the `define_print_and_forward_display!` for `ty::PlaceholderType` caused error 2, as I've moved the struct it no longer exists in the crate. I suspect because I'm not using that macro it causes the error for `GenericKind` <details> <summary>Error 1</summary> ``` error: lifetime may not live long enough --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:672:38 | 668 | impl<'tcx> fmt::Display for GenericKind<'tcx> { | ---- lifetime `'tcx` defined here ... 672 | GenericKind::Placeholder(ref p) => write!(f, "{p}"), | ^^^^^ assignment requires that `'tcx` must outlive `'static` | = note: requirement occurs because of the type `rustc_middle::ty::TyCtxt<'_>`, which makes the generic argument `'_` invariant = note: the struct `rustc_middle::ty::TyCtxt<'tcx>` is invariant over the parameter `'tcx` = help: see <https://doc.rust-lang.org/nomicon/subtyping.html> for more information about variance error: implementation of `Lift` is not general enough --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:672:38 | 672 | GenericKind::Placeholder(ref p) => write!(f, "{p}"), | ^^^^^ implementation of `Lift` is not general enough | = note: `Lift<rustc_middle::ty::TyCtxt<'0>>` would have to be implemented for the type `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'_>, BoundTy>`, for any lifetime `'0`... = note: ...but `Lift<rustc_middle::ty::TyCtxt<'1>>` is actually implemented for the type `rustc_type_ir::Placeholder<rustc_middle::ty::TyCtxt<'1>, BoundTy>`, for some specific lifetime `'1` error: implementation of `Print` is not general enough --> compiler/rustc_infer/src/infer/region_constraints/mod.rs:672:38 | 672 | GenericKind::Placeholder(ref p) => write!(f, "{p}"), | ^^^^^ implementation of `Print` is not general enough ``` </details> <details> <summary>Error 2</summary> ``` error[E0117]: only traits defined in the current crate can be implemented for arbitrary types --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38 | 3057 | / macro_rules! forward_display_to_print { 3058 | | ($($ty:ty),+) => { 3059 | | // Some of the $ty arguments may not actually use 'tcx 3060 | | $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty { | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... | 3072 | | }; 3073 | | } | |_- in this expansion of `forward_display_to_print!` ... 3093 | / forward_display_to_print! { 3094 | | ty::Region<'tcx>, 3095 | | Ty<'tcx>, 3096 | | &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>, 3097 | | ty::Const<'tcx>, 3098 | | &'tcx ty::PlaceholderType<'tcx> | | ------------------------------- `rustc_type_ir::Placeholder` is not defined in the current crate 3099 | | } | |_- in this macro invocation | = note: impl doesn't have any local type before any uncovered type parameters = note: for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules = note: define and implement a trait or new type instead error: implementation of `Lift` is not general enough --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38 | 3057 | / macro_rules! forward_display_to_print { 3058 | | ($($ty:ty),+) => { 3059 | | // Some of the $ty arguments may not actually use 'tcx 3060 | | $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty { | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `Lift` is not general enough ... | 3072 | | }; 3073 | | } | |_- in this expansion of `forward_display_to_print!` ... 3093 | / forward_display_to_print! { 3094 | | ty::Region<'tcx>, 3095 | | Ty<'tcx>, 3096 | | &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>, 3097 | | ty::Const<'tcx>, 3098 | | &'tcx ty::PlaceholderType<'tcx> 3099 | | } | |_- in this macro invocation | = note: `Lift<context::TyCtxt<'0>>` would have to be implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'tcx>, BoundTy>`, for any lifetime `'0`... = note: ...but `Lift<context::TyCtxt<'1>>` is actually implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'1>, BoundTy>`, for some specific lifetime `'1` error: implementation of `print::Print` is not general enough --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38 | 3057 | / macro_rules! forward_display_to_print { 3058 | | ($($ty:ty),+) => { 3059 | | // Some of the $ty arguments may not actually use 'tcx 3060 | | $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty { | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ implementation of `print::Print` is not general enough ... | 3072 | | }; 3073 | | } | |_- in this expansion of `forward_display_to_print!` ... 3093 | / forward_display_to_print! { 3094 | | ty::Region<'tcx>, 3095 | | Ty<'tcx>, 3096 | | &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>, 3097 | | ty::Const<'tcx>, 3098 | | &'tcx ty::PlaceholderType<'tcx> 3099 | | } | |_- in this macro invocation | = note: `print::Print<'0, print::pretty::FmtPrinter<'a, '0>>` would have to be implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'tcx>, BoundTy>`, for any lifetime `'0`... = note: ...but `print::Print<'1, print::pretty::FmtPrinter<'a, 'tcx>>` is actually implemented for the type `rustc_type_ir::Placeholder<context::TyCtxt<'1>, BoundTy>`, for some specific lifetime `'1` error: specializing impl repeats parameter `'tcx` --> compiler/rustc_middle/src/ty/print/pretty.rs:3060:38 | 3057 | / macro_rules! forward_display_to_print { 3058 | | ($($ty:ty),+) => { 3059 | | // Some of the $ty arguments may not actually use 'tcx 3060 | | $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty { | | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... | 3072 | | }; 3073 | | } | |_- in this expansion of `forward_display_to_print!` ... 3093 | / forward_display_to_print! { 3094 | | ty::Region<'tcx>, 3095 | | Ty<'tcx>, 3096 | | &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>, 3097 | | ty::Const<'tcx>, 3098 | | &'tcx ty::PlaceholderType<'tcx> 3099 | | } | |_- in this macro invocation error[E0277]: the trait bound `&Placeholder<TyCtxt<'tcx>, BoundTy>: Lift<...>` is not satisfied --> compiler/rustc_middle/src/ty/print/pretty.rs:3064:30 | 3057 | / macro_rules! forward_display_to_print { 3058 | | ($($ty:ty),+) => { 3059 | | // Some of the $ty arguments may not actually use 'tcx 3060 | | $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty { ... | 3064 | | tcx.lift(*self) | | ---- ^^^^^ unsatisfied trait bound | | | | | required by a bound introduced by this call ... | 3072 | | }; 3073 | | } | |_- in this expansion of `forward_display_to_print!` ... 3093 | / forward_display_to_print! { 3094 | | ty::Region<'tcx>, 3095 | | Ty<'tcx>, 3096 | | &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>, 3097 | | ty::Const<'tcx>, 3098 | | &'tcx ty::PlaceholderType<'tcx> 3099 | | } | |_- in this macro invocation | = help: the trait `Lift<context::TyCtxt<'_>>` is not implemented for `&rustc_type_ir::Placeholder<context::TyCtxt<'tcx>, BoundTy>` note: required by a bound in `context::TyCtxt::<'tcx>::lift` --> compiler/rustc_middle/src/ty/context.rs:1807:20 | 1807 | pub fn lift<T: Lift<TyCtxt<'tcx>>>(self, value: T) -> Option<T::Lifted> { | ^^^^^^^^^^^^^^^^^^ required by this bound in `TyCtxt::<'tcx>::lift` = note: the full name for the type has been written to '/home/jambar02/Documents/arm/rust/build/x86_64-unknown-linux-gnu/stage1-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-16e5c44041028d8b.long-type-3843651570422266958.txt' = note: consider using `--verbose` to print the full type name to the console help: consider dereferencing here | 3064 | tcx.lift(**self) | + error[E0282]: type annotations needed --> compiler/rustc_middle/src/ty/print/pretty.rs:3064:21 | 3057 | / macro_rules! forward_display_to_print { 3058 | | ($($ty:ty),+) => { 3059 | | // Some of the $ty arguments may not actually use 'tcx 3060 | | $(#[allow(unused_lifetimes)] impl<'tcx> fmt::Display for $ty { ... | 3064 | |/ tcx.lift(*self) 3065 | || .expect("could not lift for printing") | ||______________________________________________________________^ cannot infer type ... | 3072 | | }; 3073 | | } | |__- in this expansion of `forward_display_to_print!` ... 3093 | / forward_display_to_print! { 3094 | | ty::Region<'tcx>, 3095 | | Ty<'tcx>, 3096 | | &'tcx ty::List<ty::PolyExistentialPredicate<'tcx>>, 3097 | | ty::Const<'tcx>, 3098 | | &'tcx ty::PlaceholderType<'tcx> 3099 | | } | |_- in this macro invocation ``` </details>
2 parents 4aa82d6 + d714aec commit 71591f7

File tree

0 file changed

+0
-0
lines changed

    0 file changed

    +0
    -0
    lines changed

    0 commit comments

    Comments
     (0)