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 9, 2024
1 parent 6a9899c commit b370e97
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 9 deletions.
4 changes: 4 additions & 0 deletions compiler/rustc_symbol_mangling/src/legacy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use rustc_middle::bug;
use rustc_middle::ty::print::{PrettyPrinter, Print, PrintError, Printer};
use rustc_middle::ty::{
self, GenericArg, GenericArgKind, Instance, ReifyReason, Ty, TyCtxt, TypeVisitableExt,
TypingEnv,
};
use tracing::debug;

Expand Down Expand Up @@ -239,6 +240,8 @@ impl<'tcx> Printer<'tcx> for SymbolPrinter<'tcx> {
self.write_str("[")?;
self.print_type(ty)?;
self.write_str("; ")?;
let size =
self.tcx.normalize_erasing_regions(TypingEnv::fully_monomorphized(), size);
if let Some(size) = size.try_to_target_usize(self.tcx()) {
write!(self, "{size}")?
} else if let ty::ConstKind::Param(param) = size.kind() {
Expand Down Expand Up @@ -272,6 +275,7 @@ impl<'tcx> Printer<'tcx> for SymbolPrinter<'tcx> {
}

fn print_const(&mut self, ct: ty::Const<'tcx>) -> Result<(), PrintError> {
let ct = self.tcx.normalize_erasing_regions(TypingEnv::fully_monomorphized(), ct);
// only print integers
match ct.kind() {
ty::ConstKind::Value(ty, ty::ValTree::Leaf(scalar)) if ty.is_integral() => {
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 b370e97

Please sign in to comment.