AsmParser: Don't crash on an ill-formed MDNodeVector
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 11 Dec 2014 20:51:54 +0000 (20:51 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 11 Dec 2014 20:51:54 +0000 (20:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224056 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLParser.cpp
test/Assembler/invalid-mdnode-vector2.ll [new file with mode: 0644]

index ae007ce3693247b65fd52c895d5140e31fec81b1..9e699d1ed3fde62590931b616b3dd92a15031592 100644 (file)
@@ -2968,8 +2968,8 @@ bool LLParser::ParseMetadataAsValue(ValID &ID, PerFunctionState *PFS) {
 ///  ::= !{...}
 ///  ::= !"string"
 bool LLParser::ParseMetadata(Metadata *&MD, PerFunctionState *PFS) {
-  assert(Lex.getKind() == lltok::exclaim);
-  Lex.Lex();
+  if (ParseToken(lltok::exclaim, "expected '!' here"))
+    return true;
 
   // MDNode:
   // !{ ... }
diff --git a/test/Assembler/invalid-mdnode-vector2.ll b/test/Assembler/invalid-mdnode-vector2.ll
new file mode 100644 (file)
index 0000000..3b577bb
--- /dev/null
@@ -0,0 +1,4 @@
+; RUN: not llvm-as < %s 2>&1 | FileCheck %s
+
+!0 = metadata !{metadata
+; CHECK: expected '!' here