Rollup merge of #134081 - oli-obk:push-prpsqxxynxnq, r=BoxyUwU

Try to evaluate constants in legacy mangling

Best reviewed commit by commit.

It seems kind of odd to treat literals differently from unevaluated free constants. So let's evaluate those constants and only fall back to `_` rendering if that fails to result in an integral constant
This commit is contained in:
Matthias Krüger 2024-12-14 05:01:06 +01:00 committed by GitHub
commit 03e328d178
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 96 additions and 4 deletions

View file

@ -2,7 +2,7 @@ use std::fmt::{self, Write};
use std::mem::{self, discriminant};
use rustc_data_structures::stable_hasher::{Hash64, HashStable, StableHasher};
use rustc_hir::def_id::CrateNum;
use rustc_hir::def_id::{CrateNum, DefId};
use rustc_hir::definitions::{DefPathData, DisambiguatedDefPathData};
use rustc_middle::bug;
use rustc_middle::ty::print::{PrettyPrinter, Print, PrintError, Printer};
@ -378,6 +378,33 @@ impl<'tcx> Printer<'tcx> for SymbolPrinter<'tcx> {
Ok(())
}
}
fn print_impl_path(
&mut self,
impl_def_id: DefId,
args: &'tcx [GenericArg<'tcx>],
mut self_ty: Ty<'tcx>,
mut impl_trait_ref: Option<ty::TraitRef<'tcx>>,
) -> Result<(), PrintError> {
let mut typing_env = ty::TypingEnv::post_analysis(self.tcx, impl_def_id);
if !args.is_empty() {
typing_env.param_env =
ty::EarlyBinder::bind(typing_env.param_env).instantiate(self.tcx, args);
}
match &mut impl_trait_ref {
Some(impl_trait_ref) => {
assert_eq!(impl_trait_ref.self_ty(), self_ty);
*impl_trait_ref = self.tcx.normalize_erasing_regions(typing_env, *impl_trait_ref);
self_ty = impl_trait_ref.self_ty();
}
None => {
self_ty = self.tcx.normalize_erasing_regions(typing_env, self_ty);
}
}
self.default_print_impl_path(impl_def_id, args, self_ty, impl_trait_ref)
}
}
impl<'tcx> PrettyPrinter<'tcx> for SymbolPrinter<'tcx> {

View file

@ -502,5 +502,23 @@ error: demangling-alt(a::b::Type<[T; N]>)
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 84 previous errors
error: symbol-name(_ZN1a1b35Type$LT$$u5b$u8$u3b$$u20$0$u5d$$GT$17h[HASH]E)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(a::b::Type<[u8; 0]>::h[HASH])
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(a::b::Type<[u8; 0]>)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 87 previous errors

View file

@ -266,6 +266,17 @@ pub fn b() {
//[v0]~| ERROR ::b::Type<[_; _]>>)
//[v0]~| ERROR demangling-alt(<a::b::Type<[_; _]>>)
impl<const N: usize, T> Type<[T; N]> {}
const ZERO: usize = 0;
#[rustc_symbol_name]
//[legacy,verbose-legacy]~^ ERROR symbol-name(_ZN1a1b35Type$LT$$u5b$u8$u3b$$u20$0$u5d$$GT$
//[legacy,verbose-legacy]~| ERROR demangling(a::b::Type<[u8; 0]>::
//[legacy,verbose-legacy]~| ERROR demangling-alt(a::b::Type<[u8; 0]>)
//[v0]~^^^^ ERROR symbol-name(_RMsq_NvCsCRATE_HASH_1a1bINtB<REF>_4TypeAhj0_E)
//[v0]~| ERROR ::b::Type<[u8; 0usize]>>)
//[v0]~| ERROR demangling-alt(<a::b::Type<[u8; 0]>>)
impl Type<[u8; ZERO]> {}
}
fn main() {}

View file

@ -502,5 +502,23 @@ error: demangling-alt(<a::b::Type<[_; _]>>)
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 84 previous errors
error: symbol-name(_RMsq_NvCsCRATE_HASH_1a1bINtB<REF>_4TypeAhj0_E)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(<a[HASH]::b::Type<[u8; 0usize]>>)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(<a::b::Type<[u8; 0]>>)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 87 previous errors

View file

@ -502,5 +502,23 @@ error: demangling-alt(a::b::Type<[T; N]>)
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 84 previous errors
error: symbol-name(_ZN1a1b35Type$LT$$u5b$u8$u3b$$u20$0$u5d$$GT$17h[HASH]E)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling(a::b::Type<[u8; 0]>::h[HASH])
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: demangling-alt(a::b::Type<[u8; 0]>)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 87 previous errors