aboutsummaryrefslogtreecommitdiff
path: root/lib/AsmParser/LLParser.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-12-30 05:31:19 +0000
committerChris Lattner <sabre@nondot.org>2009-12-30 05:31:19 +0000
commitb8c4686a46da2832ff4502136f16f71f789be078 (patch)
tree958b1a71a822d47e828bd7dd27d4196ffc64656f /lib/AsmParser/LLParser.cpp
parenta7d7f2c0239ecc8513461ec69c8b922698ce5fe0 (diff)
rename ParseOptionalCustomMetadata -> ParseInstructionMetadata,
and make it non-optional. This fixes the bug where we'd accept and ignore a spurious comma after some instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92300 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser/LLParser.cpp')
-rw-r--r--lib/AsmParser/LLParser.cpp29
1 files changed, 10 insertions, 19 deletions
diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp
index f33e76f64d..1fd750e1dc 100644
--- a/lib/AsmParser/LLParser.cpp
+++ b/lib/AsmParser/LLParser.cpp
@@ -1063,14 +1063,13 @@ bool LLParser::ParseOptionalCallingConv(CallingConv::ID &CC) {
return false;
}
-/// ParseOptionalCustomMetadata
-/// ::= /* empty */
+/// ParseInstructionMetadata
/// ::= !dbg !42 (',' !dbg !57)*
-bool LLParser::ParseOptionalCustomMetadata() {
- if (Lex.getKind() != lltok::MetadataVar)
- return false;
+bool LLParser::ParseInstructionMetadata() {
+ do {
+ if (Lex.getKind() != lltok::MetadataVar)
+ return TokError("expected metadata after comma");
- while (1) {
std::string Name = Lex.getStrVal();
Lex.Lex();
@@ -1083,13 +1082,8 @@ bool LLParser::ParseOptionalCustomMetadata() {
MDsOnInst.push_back(std::make_pair(MDK, Node));
// If this is the end of the list, we're done.
- if (!EatIfPresent(lltok::comma))
- return false;
-
- // The next value must be a custom metadata id.
- if (Lex.getKind() != lltok::MetadataVar)
- return TokError("expected more custom metadata ids");
- }
+ } while (EatIfPresent(lltok::comma));
+ return false;
}
/// ParseOptionalAlignment
@@ -1113,7 +1107,7 @@ bool LLParser::ParseOptionalInfo(unsigned &Alignment) {
// FIXME: Handle customized metadata info attached with an instruction.
do {
if (Lex.getKind() == lltok::MetadataVar) {
- if (ParseOptionalCustomMetadata()) return true;
+ if (ParseInstructionMetadata()) return true;
} else if (Lex.getKind() == lltok::kw_align) {
if (ParseOptionalAlignment(Alignment)) return true;
} else
@@ -2820,16 +2814,13 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
// With a normal result, we check to see if the instruction is followed by
// a comma and metadata.
if (EatIfPresent(lltok::comma))
- if (ParseOptionalCustomMetadata())
+ if (ParseInstructionMetadata())
return true;
break;
case InstExtraComma:
// If the instruction parser ate an extra comma at the end of it, it
// *must* be followed by metadata.
- if (Lex.getKind() != lltok::MetadataVar)
- return TokError("expected metadata after comma");
- // Parse it.
- if (ParseOptionalCustomMetadata())
+ if (ParseInstructionMetadata())
return true;
break;
}