IR: Disallow function-local metadata attachments

Metadata attachments to instructions cannot be function-local.

This is part of PR21532.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223574 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith
2014-12-06 02:29:44 +00:00
parent e1d7711d2f
commit 09ba28c27c
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);
}