File tree 2 files changed +24
-0
lines changed
compiler/rustc_mir_transform/src
2 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -70,6 +70,11 @@ fn escaping_locals<'tcx>(
70
70
// Exclude #[repr(simd)] types so that they are not de-optimized into an array
71
71
return true ;
72
72
}
73
+ if Some ( def. did ( ) ) == tcx. lang_items ( ) . dyn_metadata ( ) {
74
+ // codegen wants to see the `DynMetadata<T>`,
75
+ // not the inner reference-to-opaque-type.
76
+ return true ;
77
+ }
73
78
// We already excluded unions and enums, so this ADT must have one variant
74
79
let variant = def. variant ( FIRST_VARIANT ) ;
75
80
if variant. fields . len ( ) > 1 {
Original file line number Diff line number Diff line change
1
+ //@ run-pass
2
+ //@ compile-flags: -Zmir-opt-level=5 -Zvalidate-mir
3
+
4
+ #![ feature( ptr_metadata) ]
5
+
6
+ // Regression for <https://github.com./rust-lang/rust/issues/125506>,
7
+ // which failed because of SRoA would project into `DynMetadata`.
8
+
9
+ trait Foo { }
10
+
11
+ struct Bar ;
12
+
13
+ impl Foo for Bar { }
14
+
15
+ fn main ( ) {
16
+ let a: * mut dyn Foo = & mut Bar ;
17
+
18
+ let _d = a. to_raw_parts ( ) . 0 as usize ;
19
+ }
You can’t perform that action at this time.
0 commit comments