Skip to content

Commit faf31b5

Browse files
committed
CFI: Fix cfi with repr(transparent): transform_ty: unexpected Alias(Proj
Fixes #111185 by normalizing ty::Alias before encoding.
1 parent a9251b6 commit faf31b5

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

compiler/rustc_symbol_mangling/src/typeid/typeid_itanium_cxx_abi.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -674,12 +674,12 @@ fn encode_ty<'tcx>(
674674
}
675675

676676
// Unexpected types
677-
ty::Bound(..)
677+
ty::Alias(..)
678+
| ty::Bound(..)
678679
| ty::Error(..)
679680
| ty::GeneratorWitness(..)
680681
| ty::GeneratorWitnessMIR(..)
681682
| ty::Infer(..)
682-
| ty::Alias(..)
683683
| ty::Placeholder(..) => {
684684
bug!("encode_ty: unexpected `{:?}`", ty.kind());
685685
}
@@ -913,12 +913,19 @@ fn transform_ty<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>, options: TransformTyOptio
913913
);
914914
}
915915

916+
ty::Alias(..) => {
917+
ty = transform_ty(
918+
tcx,
919+
tcx.normalize_erasing_regions(ty::ParamEnv::reveal_all(), ty),
920+
options,
921+
);
922+
}
923+
916924
ty::Bound(..)
917925
| ty::Error(..)
918926
| ty::GeneratorWitness(..)
919927
| ty::GeneratorWitnessMIR(..)
920928
| ty::Infer(..)
921-
| ty::Alias(..)
922929
| ty::Param(..)
923930
| ty::Placeholder(..) => {
924931
bug!("transform_ty: unexpected `{:?}`", ty.kind());

tests/codegen/sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,6 @@ pub fn foo149(_: Type14<Bar>, _: Type14<Bar>, _: Type14<Bar>) { }
587587
// CHECK: ![[TYPE144]] = !{i64 0, !"_ZTSFvu3refIvEE"}
588588
// CHECK: ![[TYPE145]] = !{i64 0, !"_ZTSFvu3refIvES_E"}
589589
// CHECK: ![[TYPE146]] = !{i64 0, !"_ZTSFvu3refIvES_S_E"}
590-
// CHECK: ![[TYPE147]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarE
591-
// CHECK: ![[TYPE148]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_E
592-
// CHECK: ![[TYPE149]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_S_E
590+
// CHECK: ![[TYPE147]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarE"}
591+
// CHECK: ![[TYPE148]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_E"}
592+
// CHECK: ![[TYPE149]] = !{i64 0, !"_ZTSFvu{{[0-9]+}}NtC{{[[:print:]]+}}_51sanitizer_cfi_emit_type_metadata_id_itanium_cxx_abi3BarS_S_E"}

0 commit comments

Comments
 (0)