Skip to content

Commit 06bdfeb

Browse files
committed
Use metadata for size and offset in DIType
This changes DIType to use metadata for the size and offset information. This patch doesn't have any functional changes yet; the test is in the next patch.
1 parent 6d68312 commit 06bdfeb

File tree

10 files changed

+586
-263
lines changed

10 files changed

+586
-263
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -841,8 +841,8 @@ llvm::DIType *CGDebugInfo::CreateType(const BuiltinType *BT) {
841841
auto *ISATy = DBuilder.createPointerType(ClassTy, Size);
842842

843843
ObjTy = DBuilder.createStructType(TheCU, "objc_object", TheCU->getFile(), 0,
844-
0, 0, llvm::DINode::FlagZero, nullptr,
845-
llvm::DINodeArray());
844+
(uint64_t)0, 0, llvm::DINode::FlagZero,
845+
nullptr, llvm::DINodeArray());
846846

847847
DBuilder.replaceArrays(
848848
ObjTy, DBuilder.getOrCreateArray(&*DBuilder.createMemberType(

llvm/include/llvm/IR/DebugInfoMetadata.h

Lines changed: 301 additions & 92 deletions
Large diffs are not rendered by default.

llvm/lib/AsmParser/LLParser.cpp

Lines changed: 82 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4818,6 +4818,34 @@ struct MDSignedOrMDField : MDEitherFieldImpl<MDSignedField, MDField> {
48184818
}
48194819
};
48204820

4821+
struct MDUnsignedOrMDField : MDEitherFieldImpl<MDUnsignedField, MDField> {
4822+
MDUnsignedOrMDField(uint64_t Default = 0, bool AllowNull = true)
4823+
: ImplTy(MDUnsignedField(Default), MDField(AllowNull)) {}
4824+
4825+
MDUnsignedOrMDField(uint64_t Default, uint64_t Max, bool AllowNull = true)
4826+
: ImplTy(MDUnsignedField(Default, Max), MDField(AllowNull)) {}
4827+
4828+
bool isMDUnsignedField() const { return WhatIs == IsTypeA; }
4829+
bool isMDField() const { return WhatIs == IsTypeB; }
4830+
uint64_t getMDUnsignedValue() const {
4831+
assert(isMDUnsignedField() && "Wrong field type");
4832+
return A.Val;
4833+
}
4834+
Metadata *getMDFieldValue() const {
4835+
assert(isMDField() && "Wrong field type");
4836+
return B.Val;
4837+
}
4838+
4839+
Metadata *getValueAsMetadata(LLVMContext &Context) const {
4840+
if (isMDUnsignedField())
4841+
return ConstantAsMetadata::get(
4842+
ConstantInt::get(Type::getInt64Ty(Context), getMDUnsignedValue()));
4843+
if (isMDField())
4844+
return getMDFieldValue();
4845+
return nullptr;
4846+
}
4847+
};
4848+
48214849
} // end anonymous namespace
48224850

48234851
namespace llvm {
@@ -5201,6 +5229,29 @@ bool LLParser::parseMDField(LocTy Loc, StringRef Name,
52015229
return true;
52025230
}
52035231

5232+
template <>
5233+
bool LLParser::parseMDField(LocTy Loc, StringRef Name,
5234+
MDUnsignedOrMDField &Result) {
5235+
// Try to parse an unsigned int.
5236+
if (Lex.getKind() == lltok::APSInt) {
5237+
MDUnsignedField Res = Result.A;
5238+
if (!parseMDField(Loc, Name, Res)) {
5239+
Result.assign(Res);
5240+
return false;
5241+
}
5242+
return true;
5243+
}
5244+
5245+
// Otherwise, try to parse as an MDField.
5246+
MDField Res = Result.B;
5247+
if (!parseMDField(Loc, Name, Res)) {
5248+
Result.assign(Res);
5249+
return false;
5250+
}
5251+
5252+
return true;
5253+
}
5254+
52045255
template <>
52055256
bool LLParser::parseMDField(LocTy Loc, StringRef Name, MDStringField &Result) {
52065257
LocTy ValueLoc = Lex.getLoc();
@@ -5382,7 +5433,7 @@ bool LLParser::parseDISubrangeType(MDNode *&Result, bool IsDistinct) {
53825433
OPTIONAL(line, LineField, ); \
53835434
OPTIONAL(scope, MDField, ); \
53845435
OPTIONAL(baseType, MDField, ); \
5385-
OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \
5436+
OPTIONAL(size, MDUnsignedOrMDField, (0, UINT64_MAX)); \
53865437
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \
53875438
OPTIONAL(flags, DIFlagField, ); \
53885439
OPTIONAL(lowerBound, MDSignedOrMDField, ); \
@@ -5406,10 +5457,10 @@ bool LLParser::parseDISubrangeType(MDNode *&Result, bool IsDistinct) {
54065457
Metadata *Stride = convToMetadata(stride);
54075458
Metadata *Bias = convToMetadata(bias);
54085459

5409-
Result = GET_OR_DISTINCT(DISubrangeType,
5410-
(Context, name.Val, file.Val, line.Val, scope.Val,
5411-
size.Val, align.Val, flags.Val, baseType.Val,
5412-
LowerBound, UpperBound, Stride, Bias));
5460+
Result = GET_OR_DISTINCT(
5461+
DISubrangeType, (Context, name.Val, file.Val, line.Val, scope.Val,
5462+
size.getValueAsMetadata(Context), align.Val, flags.Val,
5463+
baseType.Val, LowerBound, UpperBound, Stride, Bias));
54135464

54145465
return false;
54155466
}
@@ -5517,15 +5568,16 @@ bool LLParser::parseDIBasicType(MDNode *&Result, bool IsDistinct) {
55175568
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
55185569
OPTIONAL(tag, DwarfTagField, (dwarf::DW_TAG_base_type)); \
55195570
OPTIONAL(name, MDStringField, ); \
5520-
OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \
5571+
OPTIONAL(size, MDUnsignedOrMDField, (0, UINT64_MAX)); \
55215572
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \
55225573
OPTIONAL(encoding, DwarfAttEncodingField, ); \
55235574
OPTIONAL(num_extra_inhabitants, MDUnsignedField, (0, UINT32_MAX)); \
55245575
OPTIONAL(flags, DIFlagField, );
55255576
PARSE_MD_FIELDS();
55265577
#undef VISIT_MD_FIELDS
55275578

5528-
Result = GET_OR_DISTINCT(DIBasicType, (Context, tag.Val, name.Val, size.Val,
5579+
Result = GET_OR_DISTINCT(DIBasicType, (Context, tag.Val, name.Val,
5580+
size.getValueAsMetadata(Context),
55295581
align.Val, encoding.Val,
55305582
num_extra_inhabitants.Val, flags.Val));
55315583
return false;
@@ -5540,7 +5592,7 @@ bool LLParser::parseDIFixedPointType(MDNode *&Result, bool IsDistinct) {
55405592
#define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \
55415593
OPTIONAL(tag, DwarfTagField, (dwarf::DW_TAG_base_type)); \
55425594
OPTIONAL(name, MDStringField, ); \
5543-
OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \
5595+
OPTIONAL(size, MDUnsignedOrMDField, (0, UINT64_MAX)); \
55445596
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \
55455597
OPTIONAL(encoding, DwarfAttEncodingField, ); \
55465598
OPTIONAL(flags, DIFlagField, ); \
@@ -5552,7 +5604,8 @@ bool LLParser::parseDIFixedPointType(MDNode *&Result, bool IsDistinct) {
55525604
#undef VISIT_MD_FIELDS
55535605

55545606
Result = GET_OR_DISTINCT(DIFixedPointType,
5555-
(Context, tag.Val, name.Val, size.Val, align.Val,
5607+
(Context, tag.Val, name.Val,
5608+
size.getValueAsMetadata(Context), align.Val,
55565609
encoding.Val, flags.Val, kind.Val, factor.Val,
55575610
numerator.Val, denominator.Val));
55585611
return false;
@@ -5567,7 +5620,7 @@ bool LLParser::parseDIStringType(MDNode *&Result, bool IsDistinct) {
55675620
OPTIONAL(stringLength, MDField, ); \
55685621
OPTIONAL(stringLengthExpression, MDField, ); \
55695622
OPTIONAL(stringLocationExpression, MDField, ); \
5570-
OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \
5623+
OPTIONAL(size, MDUnsignedOrMDField, (0, UINT64_MAX)); \
55715624
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \
55725625
OPTIONAL(encoding, DwarfAttEncodingField, );
55735626
PARSE_MD_FIELDS();
@@ -5576,7 +5629,8 @@ bool LLParser::parseDIStringType(MDNode *&Result, bool IsDistinct) {
55765629
Result = GET_OR_DISTINCT(
55775630
DIStringType,
55785631
(Context, tag.Val, name.Val, stringLength.Val, stringLengthExpression.Val,
5579-
stringLocationExpression.Val, size.Val, align.Val, encoding.Val));
5632+
stringLocationExpression.Val, size.getValueAsMetadata(Context),
5633+
align.Val, encoding.Val));
55805634
return false;
55815635
}
55825636

@@ -5597,9 +5651,9 @@ bool LLParser::parseDIDerivedType(MDNode *&Result, bool IsDistinct) {
55975651
OPTIONAL(line, LineField, ); \
55985652
OPTIONAL(scope, MDField, ); \
55995653
REQUIRED(baseType, MDField, ); \
5600-
OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \
5654+
OPTIONAL(size, MDUnsignedOrMDField, (0, UINT64_MAX)); \
56015655
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \
5602-
OPTIONAL(offset, MDUnsignedField, (0, UINT64_MAX)); \
5656+
OPTIONAL(offset, MDUnsignedOrMDField, (0, UINT64_MAX)); \
56035657
OPTIONAL(flags, DIFlagField, ); \
56045658
OPTIONAL(extraData, MDField, ); \
56055659
OPTIONAL(dwarfAddressSpace, MDUnsignedField, (UINT32_MAX, UINT32_MAX)); \
@@ -5622,11 +5676,11 @@ bool LLParser::parseDIDerivedType(MDNode *&Result, bool IsDistinct) {
56225676
(unsigned)ptrAuthExtraDiscriminator.Val, ptrAuthIsaPointer.Val,
56235677
ptrAuthAuthenticatesNullValues.Val);
56245678

5625-
Result = GET_OR_DISTINCT(DIDerivedType,
5626-
(Context, tag.Val, name.Val, file.Val, line.Val,
5627-
scope.Val, baseType.Val, size.Val, align.Val,
5628-
offset.Val, DWARFAddressSpace, PtrAuthData,
5629-
flags.Val, extraData.Val, annotations.Val));
5679+
Result = GET_OR_DISTINCT(
5680+
DIDerivedType, (Context, tag.Val, name.Val, file.Val, line.Val, scope.Val,
5681+
baseType.Val, size.getValueAsMetadata(Context), align.Val,
5682+
offset.getValueAsMetadata(Context), DWARFAddressSpace,
5683+
PtrAuthData, flags.Val, extraData.Val, annotations.Val));
56305684
return false;
56315685
}
56325686

@@ -5638,9 +5692,9 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
56385692
OPTIONAL(line, LineField, ); \
56395693
OPTIONAL(scope, MDField, ); \
56405694
OPTIONAL(baseType, MDField, ); \
5641-
OPTIONAL(size, MDUnsignedField, (0, UINT64_MAX)); \
5695+
OPTIONAL(size, MDUnsignedOrMDField, (0, UINT64_MAX)); \
56425696
OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX)); \
5643-
OPTIONAL(offset, MDUnsignedField, (0, UINT64_MAX)); \
5697+
OPTIONAL(offset, MDUnsignedOrMDField, (0, UINT64_MAX)); \
56445698
OPTIONAL(flags, DIFlagField, ); \
56455699
OPTIONAL(elements, MDField, ); \
56465700
OPTIONAL(runtimeLang, DwarfLangField, ); \
@@ -5675,12 +5729,12 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
56755729
if (identifier.Val)
56765730
if (auto *CT = DICompositeType::buildODRType(
56775731
Context, *identifier.Val, tag.Val, name.Val, file.Val, line.Val,
5678-
scope.Val, baseType.Val, size.Val, align.Val, offset.Val,
5679-
specification.Val, num_extra_inhabitants.Val, flags.Val,
5680-
elements.Val, runtimeLang.Val, EnumKind, vtableHolder.Val,
5681-
templateParams.Val, discriminator.Val, dataLocation.Val,
5682-
associated.Val, allocated.Val, Rank, annotations.Val,
5683-
bitStride.Val)) {
5732+
scope.Val, baseType.Val, size.getValueAsMetadata(Context),
5733+
align.Val, offset.getValueAsMetadata(Context), specification.Val,
5734+
num_extra_inhabitants.Val, flags.Val, elements.Val, runtimeLang.Val,
5735+
EnumKind, vtableHolder.Val, templateParams.Val, discriminator.Val,
5736+
dataLocation.Val, associated.Val, allocated.Val, Rank,
5737+
annotations.Val, bitStride.Val)) {
56845738
Result = CT;
56855739
return false;
56865740
}
@@ -5690,7 +5744,8 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
56905744
Result = GET_OR_DISTINCT(
56915745
DICompositeType,
56925746
(Context, tag.Val, name.Val, file.Val, line.Val, scope.Val, baseType.Val,
5693-
size.Val, align.Val, offset.Val, flags.Val, elements.Val,
5747+
size.getValueAsMetadata(Context), align.Val,
5748+
offset.getValueAsMetadata(Context), flags.Val, elements.Val,
56945749
runtimeLang.Val, EnumKind, vtableHolder.Val, templateParams.Val,
56955750
identifier.Val, discriminator.Val, dataLocation.Val, associated.Val,
56965751
allocated.Val, Rank, annotations.Val, specification.Val,

llvm/lib/Bitcode/Reader/MetadataLoader.cpp

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,14 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
12871287
return MetadataList.upgradeTypeRef(getMDOrNull(ID));
12881288
};
12891289

1290+
auto getMetadataOrConstant = [&](bool IsMetadata,
1291+
uint64_t Entry) -> Metadata * {
1292+
if (IsMetadata)
1293+
return getMDOrNull(Entry);
1294+
return ConstantAsMetadata::get(
1295+
ConstantInt::get(Type::getInt64Ty(Context), Entry));
1296+
};
1297+
12901298
#define GET_OR_DISTINCT(CLASS, ARGS) \
12911299
(IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
12921300

@@ -1525,15 +1533,18 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
15251533
if (Record.size() < 6 || Record.size() > 8)
15261534
return error("Invalid record");
15271535

1528-
IsDistinct = Record[0];
1536+
IsDistinct = Record[0] & 1;
1537+
bool SizeIsMetadata = Record[0] & 2;
15291538
DINode::DIFlags Flags = (Record.size() > 6)
15301539
? static_cast<DINode::DIFlags>(Record[6])
15311540
: DINode::FlagZero;
15321541
uint32_t NumExtraInhabitants = (Record.size() > 7) ? Record[7] : 0;
15331542

1543+
Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[3]);
1544+
15341545
MetadataList.assignValue(
15351546
GET_OR_DISTINCT(DIBasicType,
1536-
(Context, Record[1], getMDString(Record[2]), Record[3],
1547+
(Context, Record[1], getMDString(Record[2]), SizeInBits,
15371548
Record[4], Record[5], NumExtraInhabitants, Flags)),
15381549
NextMetadataNo);
15391550
NextMetadataNo++;
@@ -1543,9 +1554,12 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
15431554
if (Record.size() < 11)
15441555
return error("Invalid record");
15451556

1546-
IsDistinct = Record[0];
1557+
IsDistinct = Record[0] & 1;
1558+
bool SizeIsMetadata = Record[0] & 2;
15471559
DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[6]);
15481560

1561+
Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[3]);
1562+
15491563
size_t Offset = 9;
15501564

15511565
auto ReadWideInt = [&]() {
@@ -1565,7 +1579,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
15651579

15661580
MetadataList.assignValue(
15671581
GET_OR_DISTINCT(DIFixedPointType,
1568-
(Context, Record[1], getMDString(Record[2]), Record[3],
1582+
(Context, Record[1], getMDString(Record[2]), SizeInBits,
15691583
Record[4], Record[5], Flags, Record[7], Record[8],
15701584
Numerator, Denominator)),
15711585
NextMetadataNo);
@@ -1576,17 +1590,21 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
15761590
if (Record.size() > 9 || Record.size() < 8)
15771591
return error("Invalid record");
15781592

1579-
IsDistinct = Record[0];
1593+
IsDistinct = Record[0] & 1;
1594+
bool SizeIsMetadata = Record[0] & 2;
15801595
bool SizeIs8 = Record.size() == 8;
15811596
// StringLocationExp (i.e. Record[5]) is added at a later time
15821597
// than the other fields. The code here enables backward compatibility.
15831598
Metadata *StringLocationExp = SizeIs8 ? nullptr : getMDOrNull(Record[5]);
15841599
unsigned Offset = SizeIs8 ? 5 : 6;
1600+
Metadata *SizeInBits =
1601+
getMetadataOrConstant(SizeIsMetadata, Record[Offset]);
1602+
15851603
MetadataList.assignValue(
15861604
GET_OR_DISTINCT(DIStringType,
15871605
(Context, Record[1], getMDString(Record[2]),
15881606
getMDOrNull(Record[3]), getMDOrNull(Record[4]),
1589-
StringLocationExp, Record[Offset], Record[Offset + 1],
1607+
StringLocationExp, SizeInBits, Record[Offset + 1],
15901608
Record[Offset + 2])),
15911609
NextMetadataNo);
15921610
NextMetadataNo++;
@@ -1615,15 +1633,20 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
16151633
PtrAuthData.emplace(Record[14]);
16161634
}
16171635

1618-
IsDistinct = Record[0];
1636+
IsDistinct = Record[0] & 1;
1637+
bool SizeIsMetadata = Record[0] & 2;
16191638
DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
1639+
1640+
Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[7]);
1641+
Metadata *OffsetInBits = getMetadataOrConstant(SizeIsMetadata, Record[9]);
1642+
16201643
MetadataList.assignValue(
16211644
GET_OR_DISTINCT(DIDerivedType,
16221645
(Context, Record[1], getMDString(Record[2]),
16231646
getMDOrNull(Record[3]), Record[4],
16241647
getDITypeRefOrNull(Record[5]),
1625-
getDITypeRefOrNull(Record[6]), Record[7], Record[8],
1626-
Record[9], DWARFAddressSpace, PtrAuthData, Flags,
1648+
getDITypeRefOrNull(Record[6]), SizeInBits, Record[8],
1649+
OffsetInBits, DWARFAddressSpace, PtrAuthData, Flags,
16271650
getDITypeRefOrNull(Record[11]), Annotations)),
16281651
NextMetadataNo);
16291652
NextMetadataNo++;
@@ -1633,13 +1656,17 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
16331656
if (Record.size() != 13)
16341657
return error("Invalid record");
16351658

1636-
IsDistinct = Record[0];
1659+
IsDistinct = Record[0] & 1;
1660+
bool SizeIsMetadata = Record[0] & 2;
16371661
DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7]);
1662+
1663+
Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[5]);
1664+
16381665
MetadataList.assignValue(
16391666
GET_OR_DISTINCT(DISubrangeType,
16401667
(Context, getMDString(Record[1]),
16411668
getMDOrNull(Record[2]), Record[3],
1642-
getMDOrNull(Record[4]), Record[5], Record[6], Flags,
1669+
getMDOrNull(Record[4]), SizeInBits, Record[6], Flags,
16431670
getDITypeRefOrNull(Record[8]), getMDOrNull(Record[9]),
16441671
getMDOrNull(Record[10]), getMDOrNull(Record[11]),
16451672
getMDOrNull(Record[12]))),
@@ -1654,18 +1681,18 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
16541681
// If we have a UUID and this is not a forward declaration, lookup the
16551682
// mapping.
16561683
IsDistinct = Record[0] & 0x1;
1657-
bool IsNotUsedInTypeRef = Record[0] >= 2;
1684+
bool IsNotUsedInTypeRef = Record[0] & 2;
1685+
bool SizeIsMetadata = Record[0] & 4;
16581686
unsigned Tag = Record[1];
16591687
MDString *Name = getMDString(Record[2]);
16601688
Metadata *File = getMDOrNull(Record[3]);
16611689
unsigned Line = Record[4];
16621690
Metadata *Scope = getDITypeRefOrNull(Record[5]);
16631691
Metadata *BaseType = nullptr;
1664-
uint64_t SizeInBits = Record[7];
16651692
if (Record[8] > (uint64_t)std::numeric_limits<uint32_t>::max())
16661693
return error("Alignment value is too large");
16671694
uint32_t AlignInBits = Record[8];
1668-
uint64_t OffsetInBits = 0;
1695+
Metadata *OffsetInBits = nullptr;
16691696
uint32_t NumExtraInhabitants = (Record.size() > 22) ? Record[22] : 0;
16701697
DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
16711698
Metadata *Elements = nullptr;
@@ -1712,7 +1739,9 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
17121739
TemplateParams = getMDOrNull(Record[14]);
17131740
} else {
17141741
BaseType = getDITypeRefOrNull(Record[6]);
1715-
OffsetInBits = Record[9];
1742+
1743+
OffsetInBits = getMetadataOrConstant(SizeIsMetadata, Record[9]);
1744+
17161745
Elements = getMDOrNull(Record[11]);
17171746
VTableHolder = getDITypeRefOrNull(Record[13]);
17181747
TemplateParams = getMDOrNull(Record[14]);
@@ -1740,6 +1769,8 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
17401769
if (Record.size() > 24 && Record[24] != dwarf::DW_APPLE_ENUM_KIND_invalid)
17411770
EnumKind = Record[24];
17421771

1772+
Metadata *SizeInBits = getMetadataOrConstant(SizeIsMetadata, Record[7]);
1773+
17431774
DICompositeType *CT = nullptr;
17441775
if (Identifier)
17451776
CT = DICompositeType::buildODRType(

0 commit comments

Comments
 (0)