IR: Disallow function-local metadata attachments

Metadata attachments to instructions cannot be function-local.

This is part of PR21532.

llvm-svn: 223574
This commit is contained in:
Duncan P. N. Exon Smith
2014-12-06 02:29:44 +00:00
parent 6980404cfe
commit 35303fd739
6 changed files with 17 additions and 7 deletions

View File

@@ -2359,8 +2359,12 @@ std::error_code BitcodeReader::ParseMetadataAttachment() {
MDKindMap.find(Kind);
if (I == MDKindMap.end())
return Error(BitcodeError::InvalidID);
Value *Node = MDValueList.getValueFwdRef(Record[i+1]);
Inst->setMetadata(I->second, cast<MDNode>(Node));
MDNode *Node = cast<MDNode>(MDValueList.getValueFwdRef(Record[i+1]));
if (Node->isFunctionLocal())
// Drop the attachment. This used to be legal, but there's no
// upgrade path.
break;
Inst->setMetadata(I->second, Node);
if (I->second == LLVMContext::MD_tbaa)
InstsWithTBAATag.push_back(Inst);
}