mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
AsmParser: Don't crash on unresolved !tbaa
Instead of crashing, give a nice error. As a drive-by, fix the location associated with the errors for unresolved metadata (the location was off by one token). llvm-svn: 265507
This commit is contained in:
parent
de5217e247
commit
1dba3cd973
@ -100,9 +100,6 @@ void LLParser::restoreParsingState(const SlotMapping *Slots) {
|
||||
/// ValidateEndOfModule - Do final validity and sanity checks at the end of the
|
||||
/// module.
|
||||
bool LLParser::ValidateEndOfModule() {
|
||||
for (unsigned I = 0, E = InstsWithTBAATag.size(); I < E; I++)
|
||||
UpgradeInstWithTBAATag(InstsWithTBAATag[I]);
|
||||
|
||||
// Handle any function attribute group forward references.
|
||||
for (std::map<Value*, std::vector<unsigned> >::iterator
|
||||
I = ForwardRefAttrGroups.begin(), E = ForwardRefAttrGroups.end();
|
||||
@ -205,6 +202,9 @@ bool LLParser::ValidateEndOfModule() {
|
||||
N.second->resolveCycles();
|
||||
}
|
||||
|
||||
for (unsigned I = 0, E = InstsWithTBAATag.size(); I < E; I++)
|
||||
UpgradeInstWithTBAATag(InstsWithTBAATag[I]);
|
||||
|
||||
// Look for intrinsic functions and CallInst that need to be upgraded
|
||||
for (Module::iterator FI = M->begin(), FE = M->end(); FI != FE; )
|
||||
UpgradeCallsToIntrinsic(&*FI++); // must be post-increment, as we remove
|
||||
@ -601,6 +601,7 @@ bool LLParser::ParseMDString(MDString *&Result) {
|
||||
// ::= '!' MDNodeNumber
|
||||
bool LLParser::ParseMDNodeID(MDNode *&Result) {
|
||||
// !{ ..., !42, ... }
|
||||
LocTy IDLoc = Lex.getLoc();
|
||||
unsigned MID = 0;
|
||||
if (ParseUInt32(MID))
|
||||
return true;
|
||||
@ -613,7 +614,7 @@ bool LLParser::ParseMDNodeID(MDNode *&Result) {
|
||||
|
||||
// Otherwise, create MDNode forward reference.
|
||||
auto &FwdRef = ForwardRefMDNodes[MID];
|
||||
FwdRef = std::make_pair(MDTuple::getTemporary(Context, None), Lex.getLoc());
|
||||
FwdRef = std::make_pair(MDTuple::getTemporary(Context, None), IDLoc);
|
||||
|
||||
Result = FwdRef.first.get();
|
||||
NumberedMetadata[MID].reset(Result);
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s
|
||||
!named = !{!0}
|
||||
|
||||
; CHECK: [[@LINE+1]]:14: error: use of undefined metadata '!1'
|
||||
; CHECK: [[@LINE+1]]:13: error: use of undefined metadata '!1'
|
||||
!0 = !{!0, !1}
|
||||
|
11
test/Assembler/missing-tbaa.ll
Normal file
11
test/Assembler/missing-tbaa.ll
Normal file
@ -0,0 +1,11 @@
|
||||
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
|
||||
; Check that !tbaa upgrade doesn't crash on undefined metadata (it should give
|
||||
; an error).
|
||||
|
||||
define void @foo() {
|
||||
entry:
|
||||
store i8 undef, i8* undef,
|
||||
; CHECK: :[[@LINE+1]]:10: error: use of undefined metadata '!1'
|
||||
!tbaa !1
|
||||
unreachable
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user