@@ -1327,25 +1327,48 @@ impl<'tcx> VnState<'_, 'tcx> {
1327
1327
return None ;
1328
1328
}
1329
1329
1330
- let Value :: Projection ( base, elem) = * self . get ( value) else {
1331
- break ;
1332
- } ;
1333
-
1334
- let elem = match elem {
1335
- ProjectionElem :: Deref => ProjectionElem :: Deref ,
1336
- ProjectionElem :: Downcast ( name, read_variant) => {
1337
- ProjectionElem :: Downcast ( name, read_variant)
1330
+ match * self . get ( value) {
1331
+ Value :: Projection ( base, elem) => {
1332
+ let elem = match elem {
1333
+ ProjectionElem :: Deref => ProjectionElem :: Deref ,
1334
+ ProjectionElem :: Downcast ( name, read_variant) => {
1335
+ ProjectionElem :: Downcast ( name, read_variant)
1336
+ }
1337
+ ProjectionElem :: Field ( f, ty) => ProjectionElem :: Field ( f, ty) ,
1338
+ ProjectionElem :: ConstantIndex {
1339
+ offset,
1340
+ min_length,
1341
+ from_end : false ,
1342
+ } => ProjectionElem :: ConstantIndex {
1343
+ offset,
1344
+ min_length,
1345
+ from_end : false ,
1346
+ } ,
1347
+ // Not allowed in debuginfo.
1348
+ _ => return None ,
1349
+ } ;
1350
+ projections. push ( elem) ;
1351
+ value = base;
1338
1352
}
1339
- ProjectionElem :: Field ( f, ty) => ProjectionElem :: Field ( f, ty) ,
1340
- ProjectionElem :: ConstantIndex { offset, min_length, from_end : false } => {
1341
- ProjectionElem :: ConstantIndex { offset, min_length, from_end : false }
1353
+ Value :: Address { place : target, kind : _, provenance : _ }
1354
+ if projections. is_empty ( )
1355
+ && target. projection . iter ( ) . all ( |e| e. can_use_in_debuginfo ( ) ) =>
1356
+ {
1357
+ var_debug_info
1358
+ . composite
1359
+ . get_or_insert_with ( || {
1360
+ Box :: new ( VarDebugInfoFragment {
1361
+ ty : self . local_decls [ place. local ] . ty ,
1362
+ projection : Vec :: new ( ) ,
1363
+ } )
1364
+ } )
1365
+ . projection
1366
+ . push ( PlaceElem :: Deref ) ;
1367
+ * place = target;
1368
+ break ;
1342
1369
}
1343
- // Not allowed in debuginfo.
1344
1370
_ => return None ,
1345
- } ;
1346
-
1347
- projections. push ( elem) ;
1348
- value = base;
1371
+ }
1349
1372
}
1350
1373
1351
1374
return None ;
0 commit comments