From b8c4686a46da2832ff4502136f16f71f789be078 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 30 Dec 2009 05:31:19 +0000 Subject: [PATCH] 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 --- lib/AsmParser/LLParser.cpp | 29 ++++++++++------------------- lib/AsmParser/LLParser.h | 2 +- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index f33e76f64de..1fd750e1dc2 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; } diff --git a/lib/AsmParser/LLParser.h b/lib/AsmParser/LLParser.h index a74974b1a65..8fd04d0bcc2 100644 --- a/lib/AsmParser/LLParser.h +++ b/lib/AsmParser/LLParser.h @@ -171,7 +171,7 @@ namespace llvm { bool ParseOptionalVisibility(unsigned &Visibility); bool ParseOptionalCallingConv(CallingConv::ID &CC); bool ParseOptionalAlignment(unsigned &Alignment); - bool ParseOptionalCustomMetadata(); + bool ParseInstructionMetadata(); bool ParseOptionalInfo(unsigned &Alignment); bool ParseIndexList(SmallVectorImpl &Indices,bool &AteExtraComma); bool ParseIndexList(SmallVectorImpl &Indices) {