@@ -351,14 +351,15 @@ impl<'ll, 'tcx> RecursiveTypeDescription<'ll, 'tcx> {
351
351
352
352
// ... then create the member descriptions ...
353
353
let member_descriptions = member_description_factory. create_member_descriptions ( cx) ;
354
+ let type_params = compute_type_parameters ( cx, unfinished_type) ;
354
355
355
356
// ... and attach them to the stub to complete it.
356
357
set_members_of_composite_type (
357
358
cx,
358
- unfinished_type,
359
359
member_holding_stub,
360
360
member_descriptions,
361
361
None ,
362
+ type_params,
362
363
) ;
363
364
MetadataCreationResult :: new ( metadata_stub, true )
364
365
}
@@ -983,7 +984,17 @@ fn foreign_type_metadata<'ll, 'tcx>(
983
984
debug ! ( "foreign_type_metadata: {:?}" , t) ;
984
985
985
986
let name = compute_debuginfo_type_name ( cx. tcx , t, false ) ;
986
- create_struct_stub ( cx, t, & name, unique_type_id, NO_SCOPE_METADATA , DIFlags :: FlagZero )
987
+ let ( size, align) = cx. size_and_align_of ( t) ;
988
+ create_struct_stub (
989
+ cx,
990
+ size,
991
+ align,
992
+ & name,
993
+ unique_type_id,
994
+ NO_SCOPE_METADATA ,
995
+ DIFlags :: FlagZero ,
996
+ None ,
997
+ )
987
998
}
988
999
989
1000
fn param_type_metadata < ' ll , ' tcx > ( cx : & CodegenCx < ' ll , ' tcx > , t : Ty < ' tcx > ) -> & ' ll DIType {
@@ -1299,14 +1310,17 @@ fn prepare_struct_metadata<'ll, 'tcx>(
1299
1310
} ;
1300
1311
1301
1312
let containing_scope = get_namespace_for_item ( cx, struct_def_id) ;
1313
+ let ( size, align) = cx. size_and_align_of ( struct_type) ;
1302
1314
1303
1315
let struct_metadata_stub = create_struct_stub (
1304
1316
cx,
1305
- struct_type,
1317
+ size,
1318
+ align,
1306
1319
& struct_name,
1307
1320
unique_type_id,
1308
1321
Some ( containing_scope) ,
1309
1322
DIFlags :: FlagZero ,
1323
+ None ,
1310
1324
) ;
1311
1325
1312
1326
create_and_register_recursive_type_forward_declaration (
@@ -1398,15 +1412,18 @@ fn prepare_tuple_metadata<'ll, 'tcx>(
1398
1412
unique_type_id : UniqueTypeId ,
1399
1413
containing_scope : Option < & ' ll DIScope > ,
1400
1414
) -> RecursiveTypeDescription < ' ll , ' tcx > {
1415
+ let ( size, align) = cx. size_and_align_of ( tuple_type) ;
1401
1416
let tuple_name = compute_debuginfo_type_name ( cx. tcx , tuple_type, false ) ;
1402
1417
1403
1418
let struct_stub = create_struct_stub (
1404
1419
cx,
1405
- tuple_type,
1420
+ size,
1421
+ align,
1406
1422
& tuple_name[ ..] ,
1407
1423
unique_type_id,
1408
1424
containing_scope,
1409
1425
DIFlags :: FlagZero ,
1426
+ None ,
1410
1427
) ;
1411
1428
1412
1429
create_and_register_recursive_type_forward_declaration (
@@ -1581,13 +1598,14 @@ impl<'ll, 'tcx> EnumMemberDescriptionFactory<'ll, 'tcx> {
1581
1598
describe_enum_variant ( cx, self . layout , variant_info, self_metadata) ;
1582
1599
1583
1600
let member_descriptions = member_description_factory. create_member_descriptions ( cx) ;
1601
+ let type_params = compute_type_parameters ( cx, self . enum_type ) ;
1584
1602
1585
1603
set_members_of_composite_type (
1586
1604
cx,
1587
- self . enum_type ,
1588
1605
variant_type_metadata,
1589
1606
member_descriptions,
1590
1607
Some ( & self . common_members ) ,
1608
+ type_params,
1591
1609
) ;
1592
1610
vec ! [ MemberDescription {
1593
1611
name: variant_info. variant_name( ) ,
@@ -1648,13 +1666,14 @@ impl<'ll, 'tcx> EnumMemberDescriptionFactory<'ll, 'tcx> {
1648
1666
1649
1667
let member_descriptions =
1650
1668
member_desc_factory. create_member_descriptions ( cx) ;
1669
+ let type_params = compute_type_parameters ( cx, self . enum_type ) ;
1651
1670
1652
1671
set_members_of_composite_type (
1653
1672
cx,
1654
- self . enum_type ,
1655
1673
variant_type_metadata,
1656
1674
member_descriptions,
1657
1675
Some ( & self . common_members ) ,
1676
+ type_params,
1658
1677
) ;
1659
1678
1660
1679
MemberDescription {
@@ -1777,13 +1796,14 @@ impl<'ll, 'tcx> EnumMemberDescriptionFactory<'ll, 'tcx> {
1777
1796
) ;
1778
1797
1779
1798
let member_descriptions = member_desc_factory. create_member_descriptions ( cx) ;
1799
+ let type_params = compute_type_parameters ( cx, self . enum_type ) ;
1780
1800
1781
1801
set_members_of_composite_type (
1782
1802
cx,
1783
- self . enum_type ,
1784
1803
variant_type_metadata,
1785
1804
member_descriptions,
1786
1805
Some ( & self . common_members ) ,
1806
+ type_params,
1787
1807
) ;
1788
1808
1789
1809
let ( size, align) =
@@ -1823,13 +1843,14 @@ impl<'ll, 'tcx> EnumMemberDescriptionFactory<'ll, 'tcx> {
1823
1843
1824
1844
let member_descriptions =
1825
1845
member_desc_factory. create_member_descriptions ( cx) ;
1846
+ let type_params = compute_type_parameters ( cx, self . enum_type ) ;
1826
1847
1827
1848
set_members_of_composite_type (
1828
1849
cx,
1829
- self . enum_type ,
1830
1850
variant_type_metadata,
1831
1851
member_descriptions,
1832
1852
Some ( & self . common_members ) ,
1853
+ type_params,
1833
1854
) ;
1834
1855
1835
1856
let niche_value = calculate_niche_value ( i) ;
@@ -1965,13 +1986,18 @@ fn describe_enum_variant<'ll, 'tcx>(
1965
1986
. type_map
1966
1987
. borrow_mut ( )
1967
1988
. get_unique_type_id_of_enum_variant ( cx, layout. ty , variant_name) ;
1989
+
1990
+ let ( size, align) = cx. size_and_align_of ( layout. ty ) ;
1991
+
1968
1992
create_struct_stub (
1969
1993
cx,
1970
- layout. ty ,
1994
+ size,
1995
+ align,
1971
1996
variant_name,
1972
1997
unique_type_id,
1973
1998
Some ( containing_scope) ,
1974
1999
DIFlags :: FlagZero ,
2000
+ None ,
1975
2001
)
1976
2002
} ) ;
1977
2003
@@ -2308,33 +2334,38 @@ fn composite_type_metadata<'ll, 'tcx>(
2308
2334
member_descriptions : Vec < MemberDescription < ' ll > > ,
2309
2335
containing_scope : Option < & ' ll DIScope > ,
2310
2336
) -> & ' ll DICompositeType {
2337
+ let ( size, align) = cx. size_and_align_of ( composite_type) ;
2338
+
2311
2339
// Create the (empty) struct metadata node ...
2312
2340
let composite_type_metadata = create_struct_stub (
2313
2341
cx,
2314
- composite_type,
2342
+ size,
2343
+ align,
2315
2344
composite_type_name,
2316
2345
composite_type_unique_id,
2317
2346
containing_scope,
2318
2347
DIFlags :: FlagZero ,
2348
+ None ,
2319
2349
) ;
2350
+
2320
2351
// ... and immediately create and add the member descriptions.
2321
2352
set_members_of_composite_type (
2322
2353
cx,
2323
- composite_type,
2324
2354
composite_type_metadata,
2325
2355
member_descriptions,
2326
2356
None ,
2357
+ compute_type_parameters ( cx, composite_type) ,
2327
2358
) ;
2328
2359
2329
2360
composite_type_metadata
2330
2361
}
2331
2362
2332
2363
fn set_members_of_composite_type < ' ll , ' tcx > (
2333
2364
cx : & CodegenCx < ' ll , ' tcx > ,
2334
- composite_type : Ty < ' tcx > ,
2335
2365
composite_type_metadata : & ' ll DICompositeType ,
2336
2366
member_descriptions : Vec < MemberDescription < ' ll > > ,
2337
2367
common_members : Option < & Vec < Option < & ' ll DIType > > > ,
2368
+ type_params : & ' ll DIArray ,
2338
2369
) {
2339
2370
// In some rare cases LLVM metadata uniquing would lead to an existing type
2340
2371
// description being used instead of a new one created in
@@ -2361,13 +2392,12 @@ fn set_members_of_composite_type<'ll, 'tcx>(
2361
2392
member_metadata. extend ( other_members. iter ( ) ) ;
2362
2393
}
2363
2394
2364
- let type_params = compute_type_parameters ( cx, composite_type) ;
2365
2395
unsafe {
2366
- let type_array = create_DIArray ( DIB ( cx) , & member_metadata) ;
2396
+ let field_array = create_DIArray ( DIB ( cx) , & member_metadata) ;
2367
2397
llvm:: LLVMRustDICompositeTypeReplaceArrays (
2368
2398
DIB ( cx) ,
2369
2399
composite_type_metadata,
2370
- Some ( type_array ) ,
2400
+ Some ( field_array ) ,
2371
2401
Some ( type_params) ,
2372
2402
) ;
2373
2403
}
@@ -2420,14 +2450,14 @@ fn compute_type_parameters<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, ty: Ty<'tcx>) -
2420
2450
/// with `set_members_of_composite_type()`.
2421
2451
fn create_struct_stub < ' ll , ' tcx > (
2422
2452
cx : & CodegenCx < ' ll , ' tcx > ,
2423
- struct_type : Ty < ' tcx > ,
2424
- struct_type_name : & str ,
2453
+ size : Size ,
2454
+ align : Align ,
2455
+ type_name : & str ,
2425
2456
unique_type_id : UniqueTypeId ,
2426
2457
containing_scope : Option < & ' ll DIScope > ,
2427
2458
flags : DIFlags ,
2459
+ vtable_holder : Option < & ' ll DIType > ,
2428
2460
) -> & ' ll DICompositeType {
2429
- let ( struct_size, struct_align) = cx. size_and_align_of ( struct_type) ;
2430
-
2431
2461
let type_map = debug_context ( cx) . type_map . borrow ( ) ;
2432
2462
let unique_type_id = type_map. get_unique_type_id_as_string ( unique_type_id) ;
2433
2463
@@ -2440,17 +2470,17 @@ fn create_struct_stub<'ll, 'tcx>(
2440
2470
llvm:: LLVMRustDIBuilderCreateStructType (
2441
2471
DIB ( cx) ,
2442
2472
containing_scope,
2443
- struct_type_name . as_ptr ( ) . cast ( ) ,
2444
- struct_type_name . len ( ) ,
2473
+ type_name . as_ptr ( ) . cast ( ) ,
2474
+ type_name . len ( ) ,
2445
2475
unknown_file_metadata ( cx) ,
2446
2476
UNKNOWN_LINE_NUMBER ,
2447
- struct_size . bits ( ) ,
2448
- struct_align . bits ( ) as u32 ,
2477
+ size . bits ( ) ,
2478
+ align . bits ( ) as u32 ,
2449
2479
flags,
2450
2480
None ,
2451
2481
empty_array,
2452
2482
0 ,
2453
- None ,
2483
+ vtable_holder ,
2454
2484
unique_type_id. as_ptr ( ) . cast ( ) ,
2455
2485
unique_type_id. len ( ) ,
2456
2486
)
0 commit comments