@@ -144,13 +144,13 @@ fn univariant_uninterned<'tcx>(
144144 cx. calc . univariant ( fields, repr, kind) . map_err ( |err| map_error ( cx, ty, err) )
145145}
146146
147- fn validate_const_with_value < ' tcx > (
147+ fn extract_valtree_and_ty < ' tcx > (
148148 const_ : ty:: Const < ' tcx > ,
149149 ty : Ty < ' tcx > ,
150150 cx : & LayoutCx < ' tcx > ,
151- ) -> Result < ty:: Const < ' tcx > , & ' tcx LayoutError < ' tcx > > {
151+ ) -> Result < ( ty:: ValTree < ' tcx > , Ty < ' tcx > ) , & ' tcx LayoutError < ' tcx > > {
152152 match const_. kind ( ) {
153- ty:: ConstKind :: Value ( .. ) => Ok ( const_ ) ,
153+ ty:: ConstKind :: Value ( ty , valtree ) => Ok ( ( valtree , ty ) ) ,
154154 ty:: ConstKind :: Error ( guar) => {
155155 return Err ( error ( cx, LayoutError :: ReferencesError ( guar) ) ) ;
156156 }
@@ -209,14 +209,15 @@ fn layout_of_uncached<'tcx>(
209209 & mut layout. backend_repr
210210 {
211211 if let Some ( start) = start {
212- scalar . valid_range_mut ( ) . start =
213- validate_const_with_value ( start, ty , cx ) ?
214- . try_to_bits ( tcx, cx. typing_env )
215- . ok_or_else ( || error ( cx, LayoutError :: Unknown ( ty) ) ) ?;
212+ let ( valtree , ty ) = extract_valtree_and_ty ( start , ty , cx ) ? ;
213+ scalar . valid_range_mut ( ) . start = valtree
214+ . try_to_bits ( tcx, ty , cx. typing_env )
215+ . ok_or_else ( || error ( cx, LayoutError :: Unknown ( ty) ) ) ?;
216216 }
217217 if let Some ( end) = end {
218- let mut end = validate_const_with_value ( end, ty, cx) ?
219- . try_to_bits ( tcx, cx. typing_env )
218+ let ( valtree, ty) = extract_valtree_and_ty ( end, ty, cx) ?;
219+ let mut end = valtree
220+ . try_to_bits ( tcx, ty, cx. typing_env )
220221 . ok_or_else ( || error ( cx, LayoutError :: Unknown ( ty) ) ) ?;
221222 if !include_end {
222223 end = end. wrapping_sub ( 1 ) ;
@@ -348,8 +349,7 @@ fn layout_of_uncached<'tcx>(
348349
349350 // Arrays and slices.
350351 ty:: Array ( element, count) => {
351- let count = validate_const_with_value ( count, ty, cx) ?
352- . to_valtree ( )
352+ let count = extract_valtree_and_ty ( count, ty, cx) ?
353353 . 0
354354 . try_to_target_usize ( tcx)
355355 . ok_or_else ( || error ( cx, LayoutError :: Unknown ( ty) ) ) ?;
0 commit comments