@@ -1002,6 +1002,14 @@ extern "C" swift::OpaqueValue *
1002
1002
swift_generic_initWithCopy (swift::OpaqueValue *dest, swift::OpaqueValue *src,
1003
1003
const Metadata *metadata) {
1004
1004
const uint8_t *layoutStr = metadata->getLayoutString ();
1005
+
1006
+ size_t refCountBytes = (*(const size_t *)(layoutStr + sizeof (uint64_t ))) + sizeof (uint64_t );
1007
+ fprintf (stderr, " ==== RefCount: " );
1008
+ for (size_t i = 0 ; i < refCountBytes; i+=8 ) {
1009
+ fprintf (stderr, " %016llx " , *(const uint64_t *)(layoutStr + sizeof (uint64_t ) + sizeof (size_t ) + i));
1010
+ }
1011
+ fprintf (stderr, " \n " );
1012
+
1005
1013
LayoutStringReader1 reader{layoutStr + layoutStringHeaderSize};
1006
1014
uintptr_t addrOffset = 0 ;
1007
1015
handleRefCountsInitWithCopy (metadata, reader, addrOffset, (uint8_t *)dest, (uint8_t *)src);
@@ -1414,8 +1422,9 @@ static void singlePayloadEnumSimpleAssignWithCopy(const Metadata *metadata,
1414
1422
return ;
1415
1423
} else if (destTagBytes >= xiTagValues) {
1416
1424
const uint8_t *end = (reader.layoutStr + refCountBytes);
1425
+ auto nestedAddrOffset = addrOffset;
1417
1426
while (reader.layoutStr < end) {
1418
- handleSingleRefCountDestroy (metadata, reader, addrOffset , dest);
1427
+ handleSingleRefCountDestroy (metadata, reader, nestedAddrOffset , dest);
1419
1428
}
1420
1429
} else {
1421
1430
reader.skip (refCountBytes);
@@ -1450,8 +1459,9 @@ static void singlePayloadEnumFNAssignWithCopy(const Metadata *metadata,
1450
1459
return ;
1451
1460
} else if (destTag == 0 ) {
1452
1461
const uint8_t *end = (reader.layoutStr + refCountBytes);
1462
+ auto nestedAddrOffset = addrOffset;
1453
1463
while (reader.layoutStr < end) {
1454
- handleSingleRefCountDestroy (metadata, reader, addrOffset , dest);
1464
+ handleSingleRefCountDestroy (metadata, reader, nestedAddrOffset , dest);
1455
1465
}
1456
1466
} else {
1457
1467
reader.skip (refCountBytes);
@@ -1486,8 +1496,9 @@ static void singlePayloadEnumFNResolvedAssignWithCopy(const Metadata *metadata,
1486
1496
return ;
1487
1497
} else if (destTag == 0 ) {
1488
1498
const uint8_t *end = (reader.layoutStr + refCountBytes);
1499
+ auto nestedAddrOffset = addrOffset;
1489
1500
while (reader.layoutStr < end) {
1490
- handleSingleRefCountDestroy (metadata, reader, addrOffset , dest);
1501
+ handleSingleRefCountDestroy (metadata, reader, nestedAddrOffset , dest);
1491
1502
}
1492
1503
} else {
1493
1504
reader.skip (refCountBytes);
@@ -1547,8 +1558,9 @@ static void singlePayloadEnumGenericAssignWithCopy(const Metadata *metadata,
1547
1558
return ;
1548
1559
} else if (destTag == 0 ) {
1549
1560
const uint8_t *end = (reader.layoutStr + refCountBytes);
1561
+ auto nestedAddrOffset = addrOffset;
1550
1562
while (reader.layoutStr < end) {
1551
- handleSingleRefCountDestroy (metadata, reader, addrOffset , dest);
1563
+ handleSingleRefCountDestroy (metadata, reader, nestedAddrOffset , dest);
1552
1564
}
1553
1565
} else {
1554
1566
reader.skip (refCountBytes);
0 commit comments