Skip to content

Commit 2811555

Browse files
committed
Verifier checks for the extraData
1 parent 1f3e2c6 commit 2811555

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

llvm/lib/IR/Verifier.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1320,6 +1320,23 @@ void Verifier::visitDIDerivedType(const DIDerivedType &N) {
13201320
if (N.getTag() == dwarf::DW_TAG_ptr_to_member_type) {
13211321
CheckDI(isType(N.getRawExtraData()), "invalid pointer to member type", &N,
13221322
N.getRawExtraData());
1323+
} else if (N.getTag() == dwarf::DW_TAG_template_alias) {
1324+
CheckDI(isa<MDTuple>(N.getRawExtraData()), "invalid template parameters",
1325+
&N, N.getRawExtraData());
1326+
} else if (auto *ExtraData = N.getRawExtraData()) {
1327+
auto IsValidExtraData = [&]() {
1328+
if (isa<ConstantAsMetadata>(ExtraData) || isa<MDString>(ExtraData) ||
1329+
isa<DIObjCProperty>(ExtraData))
1330+
return true;
1331+
if (auto *Tuple = dyn_cast<MDTuple>(ExtraData))
1332+
return Tuple->getNumOperands() == 1 &&
1333+
isa<ConstantAsMetadata>(Tuple->getOperand(0));
1334+
return false;
1335+
};
1336+
CheckDI(IsValidExtraData(),
1337+
"extraData must be ConstantAsMetadata, MDString, DIObjCProperty, "
1338+
"or MDTuple with single ConstantAsMetadata operand",
1339+
&N, ExtraData);
13231340
}
13241341

13251342
if (N.getTag() == dwarf::DW_TAG_set_type) {

0 commit comments

Comments
 (0)