File tree Expand file tree Collapse file tree 1 file changed +8
-2
lines changed
src/librustc_mir/interpret Expand file tree Collapse file tree 1 file changed +8
-2
lines changed Original file line number Diff line number Diff line change @@ -230,8 +230,14 @@ pub(super) fn mir_assign_valid_types<'tcx>(
230230 // late-bound lifetimes are still around and can lead to type
231231 // differences. So we compare ignoring lifetimes.
232232 if equal_up_to_regions ( tcx, param_env, src. ty , dest. ty ) {
233- // Make sure the layout is equal, too -- just to be safe. Miri really needs layout equality.
234- assert_eq ! ( src. layout, dest. layout) ;
233+ // Make sure the layout is equal, too -- just to be safe. Miri really
234+ // needs layout equality. For performance reason we skip this check when
235+ // the types are equal. Equal types *can* have different layouts when
236+ // enum downcast is involved (as enum variants carry the type of the
237+ // enum), but those should never occur in assignments.
238+ if cfg ! ( debug_assertions) || src. ty != dest. ty {
239+ assert_eq ! ( src. layout, dest. layout) ;
240+ }
235241 true
236242 } else {
237243 false
You can’t perform that action at this time.
0 commit comments