Skip to content

Commit

Permalink
Try to evaluate constants in legacy mangling
Browse files Browse the repository at this point in the history
  • Loading branch information
oli-obk committed Dec 10, 2024
1 parent 2ce89ee commit 9ecdc54
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 10 deletions.
29 changes: 28 additions & 1 deletion compiler/rustc_symbol_mangling/src/legacy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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> {
Expand Down
6 changes: 3 additions & 3 deletions tests/ui/symbol-names/types.legacy.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -502,19 +502,19 @@ error: demangling-alt(a::b::Type<[T; N]>)
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^

error: symbol-name(_ZN1a1b35Type$LT$$u5b$u8$u3b$$u20$_$u5d$$GT$17h[HASH]E)
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; _]>::h[HASH])
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; _]>)
error: demangling-alt(a::b::Type<[u8; 0]>)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
Expand Down
6 changes: 3 additions & 3 deletions tests/ui/symbol-names/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,9 +270,9 @@ pub fn b() {
const ZERO: usize = 0;

#[rustc_symbol_name]
//[legacy,verbose-legacy]~^ ERROR symbol-name(_ZN1a1b35Type$LT$$u5b$u8$u3b$$u20$_$u5d$$GT$
//[legacy,verbose-legacy]~| ERROR demangling(a::b::Type<[u8; _]>::
//[legacy,verbose-legacy]~| ERROR demangling-alt(a::b::Type<[u8; _]>)
//[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]>>)
Expand Down
6 changes: 3 additions & 3 deletions tests/ui/symbol-names/types.verbose-legacy.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -502,19 +502,19 @@ error: demangling-alt(a::b::Type<[T; N]>)
LL | #[rustc_symbol_name]
| ^^^^^^^^^^^^^^^^^^^^

error: symbol-name(_ZN1a1b35Type$LT$$u5b$u8$u3b$$u20$_$u5d$$GT$17h[HASH]E)
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; _]>::h[HASH])
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; _]>)
error: demangling-alt(a::b::Type<[u8; 0]>)
--> $DIR/types.rs:272:5
|
LL | #[rustc_symbol_name]
Expand Down

0 comments on commit 9ecdc54

Please sign in to comment.