[llvm] r275795 - [MC] Cleanup Error Handling in AsmParser
Eric Christopher via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 18 11:47:09 PDT 2016
>
>> + if (check(!Offset->evaluateAsAbsolute(OffsetValue), OffsetLoc,
>> + "expression is not a constant value") ||
>> + check(OffsetValue < 0, OffsetLoc, "expression is negative") ||
>> + parseToken(AsmToken::Comma, "expected comma") ||
>> + check(getTok().isNot(AsmToken::Identifier), "expected relocation
>> name"))
>>
>
> I find these long if chains substantially harder to read.
>
> In some of them you even have to add comments have way through the
> condition. Generally, I suspect that if you need a comment, it shouldn't be
> in a single condition unless that's a functional necessity. Would you be OK
> with me refactoring it in that way?
>
Please.
-eric
>
>
>> + return true;
>>
>> - if (Lexer.isNot(AsmToken::Identifier))
>> - return TokError("expected relocation name");
>> SMLoc NameLoc = Lexer.getTok().getLoc();
>> StringRef Name = Lexer.getTok().getIdentifier();
>> Lex();
>> @@ -2585,12 +2609,11 @@ bool AsmParser::parseDirectiveReloc(SMLo
>> return Error(ExprLoc, "expression must be relocatable");
>> }
>>
>> - if (Lexer.isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in .reloc directive");
>> -
>> - if (getStreamer().EmitRelocDirective(*Offset, Name, Expr,
>> DirectiveLoc))
>> - return Error(NameLoc, "unknown relocation name");
>> -
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in .reloc directive") ||
>> + check(getStreamer().EmitRelocDirective(*Offset, Name, Expr,
>> DirectiveLoc),
>> + NameLoc, "unknown relocation name"))
>> + return true;
>> return false;
>> }
>>
>> @@ -2620,9 +2643,8 @@ bool AsmParser::parseDirectiveValue(unsi
>> break;
>>
>> // FIXME: Improve diagnostic.
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive"))
>> + return true;
>> }
>> }
>>
>> @@ -2637,10 +2659,9 @@ bool AsmParser::parseDirectiveOctaValue(
>> checkForValidSection();
>>
>> for (;;) {
>> - if (Lexer.getKind() == AsmToken::Error)
>> + if (getTok().is(AsmToken::Error))
>> return true;
>> - if (Lexer.getKind() != AsmToken::Integer &&
>> - Lexer.getKind() != AsmToken::BigNum)
>> + if (getTok().isNot(AsmToken::Integer) &&
>> getTok().isNot(AsmToken::BigNum))
>> return TokError("unknown token in expression");
>>
>> SMLoc ExprLoc = getLexer().getLoc();
>> @@ -2670,9 +2691,8 @@ bool AsmParser::parseDirectiveOctaValue(
>> break;
>>
>> // FIXME: Improve diagnostic.
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive"))
>> + return true;
>> }
>> }
>>
>> @@ -2729,9 +2749,8 @@ bool AsmParser::parseDirectiveRealValue(
>> if (Lexer.is(AsmToken::EndOfStatement))
>> break;
>>
>> - if (Lexer.isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive"))
>> + return true;
>> }
>> }
>>
>> @@ -2756,11 +2775,9 @@ bool AsmParser::parseDirectiveZero() {
>> return true;
>> }
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.zero' directive");
>> -
>> - Lex();
>> -
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.zero' directive"))
>> + return true;
>> getStreamer().emitFill(*NumBytes, Val, NumBytesLoc);
>>
>> return false;
>> @@ -2781,27 +2798,18 @@ bool AsmParser::parseDirectiveFill() {
>>
>> SMLoc SizeLoc, ExprLoc;
>> if (getLexer().isNot(AsmToken::EndOfStatement)) {
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in '.fill' directive");
>> - Lex();
>>
>> - SizeLoc = getLexer().getLoc();
>> - if (parseAbsoluteExpression(FillSize))
>> + if (parseToken(AsmToken::Comma, "unexpected token in '.fill'
>> directive") ||
>> + getTokenLoc(SizeLoc) || parseAbsoluteExpression(FillSize))
>> return true;
>>
>> if (getLexer().isNot(AsmToken::EndOfStatement)) {
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in '.fill' directive");
>> - Lex();
>> -
>> - ExprLoc = getLexer().getLoc();
>> - if (parseAbsoluteExpression(FillExpr))
>> + if (parseToken(AsmToken::Comma,
>> + "unexpected token in '.fill' directive") ||
>> + getTokenLoc(ExprLoc) || parseAbsoluteExpression(FillExpr) ||
>> + parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.fill' directive"))
>> return true;
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.fill' directive");
>> -
>> - Lex();
>> }
>> }
>>
>> @@ -2834,18 +2842,15 @@ bool AsmParser::parseDirectiveOrg() {
>> // Parse optional fill expression.
>> int64_t FillExpr = 0;
>> if (getLexer().isNot(AsmToken::EndOfStatement)) {
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in '.org' directive");
>> - Lex();
>> -
>> - if (parseAbsoluteExpression(FillExpr))
>> + if (parseToken(AsmToken::Comma, "unexpected token in '.org'
>> directive") ||
>> + parseAbsoluteExpression(FillExpr))
>> return true;
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.org' directive");
>> }
>>
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.org' directive"))
>> + return true;
>> +
>> getStreamer().emitValueToOffset(Offset, FillExpr);
>> return false;
>> }
>> @@ -2865,34 +2870,27 @@ bool AsmParser::parseDirectiveAlign(bool
>> int64_t FillExpr = 0;
>> int64_t MaxBytesToFill = 0;
>> if (getLexer().isNot(AsmToken::EndOfStatement)) {
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive"))
>> + return true;
>>
>> // The fill expression can be omitted while specifying a maximum
>> number of
>> // alignment bytes, e.g:
>> // .align 3,,4
>> - if (getLexer().isNot(AsmToken::Comma)) {
>> + if (getTok().isNot(AsmToken::Comma)) {
>> HasFillExpr = true;
>> if (parseAbsoluteExpression(FillExpr))
>> return true;
>> }
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement)) {
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> -
>> - MaxBytesLoc = getLexer().getLoc();
>> - if (parseAbsoluteExpression(MaxBytesToFill))
>> + if (getTok().isNot(AsmToken::EndOfStatement)) {
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive") ||
>> + getTokenLoc(MaxBytesLoc) ||
>> parseAbsoluteExpression(MaxBytesToFill))
>> return true;
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in directive");
>> }
>> }
>>
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement, "unexpected token in
>> directive"))
>> + return true;
>>
>> if (!HasFillExpr)
>> FillExpr = 0;
>> @@ -2963,33 +2961,32 @@ bool AsmParser::parseDirectiveFile(SMLoc
>> return TokError("file number less than one");
>> }
>>
>> - if (getLexer().isNot(AsmToken::String))
>> - return TokError("unexpected token in '.file' directive");
>> + std::string Path = getTok().getString();
>>
>> // Usually the directory and filename together, otherwise just the
>> directory.
>> // Allow the strings to have escaped octal character sequence.
>> - std::string Path = getTok().getString();
>> - if (parseEscapedString(Path))
>> + if (check(getTok().isNot(AsmToken::String),
>> + "unexpected token in '.file' directive") ||
>> + parseEscapedString(Path))
>> return true;
>> - Lex();
>>
>> StringRef Directory;
>> StringRef Filename;
>> std::string FilenameData;
>> if (getLexer().is(AsmToken::String)) {
>> - if (FileNumber == -1)
>> - return TokError("explicit path specified, but no file number");
>> - if (parseEscapedString(FilenameData))
>> + if (check(FileNumber == -1,
>> + "explicit path specified, but no file number") ||
>> + parseEscapedString(FilenameData))
>> return true;
>> Filename = FilenameData;
>> Directory = Path;
>> - Lex();
>> } else {
>> Filename = Path;
>> }
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.file' directive");
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.file' directive"))
>> + return true;
>>
>> if (FileNumber == -1)
>> getStreamer().EmitFileDirective(Filename);
>> @@ -3009,19 +3006,16 @@ bool AsmParser::parseDirectiveFile(SMLoc
>> /// parseDirectiveLine
>> /// ::= .line [number]
>> bool AsmParser::parseDirectiveLine() {
>> + int64_t LineNumber;
>> if (getLexer().isNot(AsmToken::EndOfStatement)) {
>> - if (getLexer().isNot(AsmToken::Integer))
>> - return TokError("unexpected token in '.line' directive");
>> -
>> - int64_t LineNumber = getTok().getIntVal();
>> + if (parseIntToken(LineNumber, "unexpected token in '.line'
>> directive"))
>> + return true;
>> (void)LineNumber;
>> - Lex();
>> -
>> // FIXME: Do something with the .line.
>> }
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.line' directive");
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.line' directive"))
>> + return true;
>>
>> return false;
>> }
>> @@ -3034,16 +3028,16 @@ bool AsmParser::parseDirectiveLine() {
>> /// third number is a column position (zero if not specified). The
>> remaining
>> /// optional items are .loc sub-directives.
>> bool AsmParser::parseDirectiveLoc() {
>> - if (getLexer().isNot(AsmToken::Integer))
>> - return TokError("unexpected token in '.loc' directive");
>> - int64_t FileNumber = getTok().getIntVal();
>> - if (FileNumber < 1)
>> - return TokError("file number less than one in '.loc' directive");
>> - if (!getContext().isValidDwarfFileNumber(FileNumber))
>> - return TokError("unassigned file number in '.loc' directive");
>> - Lex();
>> + int64_t FileNumber = 0, LineNumber = 0;
>> + SMLoc Loc = getTok().getLoc();
>> + if (parseIntToken(FileNumber, "unexpected token in '.loc' directive")
>> ||
>> + check(FileNumber < 1, Loc,
>> + "file number less than one in '.loc' directive") ||
>> + check(!getContext().isValidDwarfFileNumber(FileNumber), Loc,
>> + "unassigned file number in '.loc' directive"))
>> + return true;
>>
>> - int64_t LineNumber = 0;
>> + // optional
>> if (getLexer().is(AsmToken::Integer)) {
>> LineNumber = getTok().getIntVal();
>> if (LineNumber < 0)
>> @@ -3120,6 +3114,7 @@ bool AsmParser::parseDirectiveLoc() {
>> break;
>> }
>> }
>> + Lex();
>>
>> getStreamer().EmitDwarfLocDirective(FileNumber, LineNumber, ColumnPos,
>> Flags,
>> Isa, Discriminator, StringRef());
>> @@ -3136,31 +3131,23 @@ bool AsmParser::parseDirectiveStabs() {
>> /// parseDirectiveCVFile
>> /// ::= .cv_file number filename
>> bool AsmParser::parseDirectiveCVFile() {
>> - SMLoc FileNumberLoc = getLexer().getLoc();
>> - if (getLexer().isNot(AsmToken::Integer))
>> - return TokError("expected file number in '.cv_file' directive");
>> -
>> - int64_t FileNumber = getTok().getIntVal();
>> - Lex();
>> -
>> - if (FileNumber < 1)
>> - return TokError("file number less than one");
>> -
>> - if (getLexer().isNot(AsmToken::String))
>> - return TokError("unexpected token in '.cv_file' directive");
>> -
>> - // Usually the directory and filename together, otherwise just the
>> directory.
>> - // Allow the strings to have escaped octal character sequence.
>> + SMLoc FileNumberLoc = getTok().getLoc();
>> + int64_t FileNumber;
>> std::string Filename;
>> - if (parseEscapedString(Filename))
>> - return true;
>> - Lex();
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.cv_file' directive");
>>
>> - if (getStreamer().EmitCVFileDirective(FileNumber, Filename) == 0)
>> - Error(FileNumberLoc, "file number already allocated");
>> + if (parseIntToken(FileNumber,
>> + "expected file number in '.cv_file' directive") ||
>> + check(FileNumber < 1, FileNumberLoc, "file number less than one")
>> ||
>> + check(getTok().isNot(AsmToken::String),
>> + "unexpected token in '.cv_file' directive") ||
>> + // Usually directory and filename are together, otherwise just
>> + // directory. Allow the strings to have escaped octal character
>> sequence.
>> + parseEscapedString(Filename) ||
>> + parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.cv_file' directive") ||
>> + check(getStreamer().EmitCVFileDirective(FileNumber, Filename) == 0,
>> + FileNumberLoc, "file number already allocated"))
>> + return true;
>>
>> return false;
>> }
>> @@ -3173,20 +3160,19 @@ bool AsmParser::parseDirectiveCVFile() {
>> /// third number is a column position (zero if not specified). The
>> remaining
>> /// optional items are .loc sub-directives.
>> bool AsmParser::parseDirectiveCVLoc() {
>> - if (getLexer().isNot(AsmToken::Integer))
>> - return TokError("unexpected token in '.cv_loc' directive");
>> -
>> - int64_t FunctionId = getTok().getIntVal();
>> - if (FunctionId < 0)
>> - return TokError("function id less than zero in '.cv_loc' directive");
>> - Lex();
>> -
>> - int64_t FileNumber = getTok().getIntVal();
>> - if (FileNumber < 1)
>> - return TokError("file number less than one in '.cv_loc' directive");
>> - if (!getContext().isValidCVFileNumber(FileNumber))
>> - return TokError("unassigned file number in '.cv_loc' directive");
>> - Lex();
>> + SMLoc Loc;
>> + int64_t FunctionId, FileNumber;
>> + if (getTokenLoc(Loc) ||
>> + parseIntToken(FunctionId, "unexpected token in '.cv_loc'
>> directive") ||
>> + check(FunctionId < 0, Loc,
>> + "function id less than zero in '.cv_loc' directive") ||
>> + getTokenLoc(Loc) ||
>> + parseIntToken(FileNumber, "expected integer in '.cv_loc'
>> directive") ||
>> + check(FileNumber < 1, Loc,
>> + "file number less than one in '.cv_loc' directive") ||
>> + check(!getContext().isValidCVFileNumber(FileNumber), Loc,
>> + "unassigned file number in '.cv_loc' directive"))
>> + return true;
>>
>> int64_t LineNumber = 0;
>> if (getLexer().is(AsmToken::Integer)) {
>> @@ -3230,6 +3216,7 @@ bool AsmParser::parseDirectiveCVLoc() {
>> return Error(Loc, "unknown sub-directive in '.cv_loc' directive");
>> }
>> }
>> + Lex();
>>
>> getStreamer().EmitCVLocDirective(FunctionId, FileNumber, LineNumber,
>> ColumnPos, PrologueEnd, IsStmt,
>> StringRef());
>> @@ -3239,28 +3226,22 @@ bool AsmParser::parseDirectiveCVLoc() {
>> /// parseDirectiveCVLinetable
>> /// ::= .cv_linetable FunctionId, FnStart, FnEnd
>> bool AsmParser::parseDirectiveCVLinetable() {
>> - int64_t FunctionId = getTok().getIntVal();
>> - if (FunctionId < 0)
>> - return TokError("function id less than zero in '.cv_linetable'
>> directive");
>> - Lex();
>> -
>> - if (Lexer.isNot(AsmToken::Comma))
>> - return TokError("unexpected token in '.cv_linetable' directive");
>> - Lex();
>> -
>> - SMLoc Loc = getLexer().getLoc();
>> - StringRef FnStartName;
>> - if (parseIdentifier(FnStartName))
>> - return Error(Loc, "expected identifier in directive");
>> -
>> - if (Lexer.isNot(AsmToken::Comma))
>> - return TokError("unexpected token in '.cv_linetable' directive");
>> - Lex();
>> -
>> - Loc = getLexer().getLoc();
>> - StringRef FnEndName;
>> - if (parseIdentifier(FnEndName))
>> - return Error(Loc, "expected identifier in directive");
>> + int64_t FunctionId;
>> + StringRef FnStartName, FnEndName;
>> + SMLoc Loc = getTok().getLoc();
>> + if (parseIntToken(FunctionId,
>> + "expected Integer in '.cv_linetable' directive") ||
>> + check(FunctionId < 0, Loc,
>> + "function id less than zero in '.cv_linetable' directive") ||
>> + parseToken(AsmToken::Comma,
>> + "unexpected token in '.cv_linetable' directive") ||
>> + getTokenLoc(Loc) || check(parseIdentifier(FnStartName), Loc,
>> + "expected identifier in directive") ||
>> + parseToken(AsmToken::Comma,
>> + "unexpected token in '.cv_linetable' directive") ||
>> + getTokenLoc(Loc) || check(parseIdentifier(FnEndName), Loc,
>> + "expected identifier in directive"))
>> + return true;
>>
>> MCSymbol *FnStartSym = getContext().getOrCreateSymbol(FnStartName);
>> MCSymbol *FnEndSym = getContext().getOrCreateSymbol(FnEndName);
>> @@ -3273,35 +3254,31 @@ bool AsmParser::parseDirectiveCVLinetabl
>> /// ::= .cv_inline_linetable PrimaryFunctionId FileId LineNum FnStart
>> FnEnd
>> /// ("contains" SecondaryFunctionId+)?
>> bool AsmParser::parseDirectiveCVInlineLinetable() {
>> - int64_t PrimaryFunctionId = getTok().getIntVal();
>> - if (PrimaryFunctionId < 0)
>> - return TokError(
>> - "function id less than zero in '.cv_inline_linetable'
>> directive");
>> - Lex();
>> -
>> - int64_t SourceFileId = getTok().getIntVal();
>> - if (SourceFileId <= 0)
>> - return TokError(
>> - "File id less than zero in '.cv_inline_linetable' directive");
>> - Lex();
>> -
>> - int64_t SourceLineNum = getTok().getIntVal();
>> - if (SourceLineNum < 0)
>> - return TokError(
>> - "Line number less than zero in '.cv_inline_linetable'
>> directive");
>> - Lex();
>> -
>> - SMLoc Loc = getLexer().getLoc();
>> - StringRef FnStartName;
>> - if (parseIdentifier(FnStartName))
>> - return Error(Loc, "expected identifier in directive");
>> - MCSymbol *FnStartSym = getContext().getOrCreateSymbol(FnStartName);
>> -
>> - Loc = getLexer().getLoc();
>> - StringRef FnEndName;
>> - if (parseIdentifier(FnEndName))
>> - return Error(Loc, "expected identifier in directive");
>> - MCSymbol *FnEndSym = getContext().getOrCreateSymbol(FnEndName);
>> + int64_t PrimaryFunctionId, SourceFileId, SourceLineNum;
>> + StringRef FnStartName, FnEndName;
>> + SMLoc Loc = getTok().getLoc();
>> + if (parseIntToken(
>> + PrimaryFunctionId,
>> + "expected PrimaryFunctionId in '.cv_inline_linetable'
>> directive") ||
>> + check(PrimaryFunctionId < 0, Loc,
>> + "function id less than zero in '.cv_inline_linetable'
>> directive") ||
>> + getTokenLoc(Loc) ||
>> + parseIntToken(
>> + SourceFileId,
>> + "expected SourceField in '.cv_inline_linetable' directive") ||
>> + check(SourceFileId <= 0, Loc,
>> + "File id less than zero in '.cv_inline_linetable'
>> directive") ||
>> + getTokenLoc(Loc) ||
>> + parseIntToken(
>> + SourceLineNum,
>> + "expected SourceLineNum in '.cv_inline_linetable' directive")
>> ||
>> + check(SourceLineNum < 0, Loc,
>> + "Line number less than zero in '.cv_inline_linetable'
>> directive") ||
>> + getTokenLoc(Loc) || check(parseIdentifier(FnStartName), Loc,
>> + "expected identifier in directive") ||
>> + getTokenLoc(Loc) || check(parseIdentifier(FnEndName), Loc,
>> + "expected identifier in directive"))
>> + return true;
>>
>> SmallVector<unsigned, 8> SecondaryFunctionIds;
>> if (getLexer().is(AsmToken::Identifier)) {
>> @@ -3321,6 +3298,11 @@ bool AsmParser::parseDirectiveCVInlineLi
>> }
>> }
>>
>> + if (parseToken(AsmToken::EndOfStatement, "Expected End of Statement"))
>> + return true;
>> +
>> + MCSymbol *FnStartSym = getContext().getOrCreateSymbol(FnStartName);
>> + MCSymbol *FnEndSym = getContext().getOrCreateSymbol(FnEndName);
>> getStreamer().EmitCVInlineLinetableDirective(PrimaryFunctionId,
>> SourceFileId,
>> SourceLineNum, FnStartSym,
>> FnEndSym,
>> SecondaryFunctionIds);
>> @@ -3348,14 +3330,10 @@ bool AsmParser::parseDirectiveCVDefRange
>> Ranges.push_back({GapStartSym, GapEndSym});
>> }
>>
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> -
>> std::string FixedSizePortion;
>> - if (parseEscapedString(FixedSizePortion))
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive") ||
>> + parseEscapedString(FixedSizePortion))
>> return true;
>> - Lex();
>>
>> getStreamer().EmitCVDefRangeDirective(Ranges, FixedSizePortion);
>> return false;
>> @@ -3414,6 +3392,9 @@ bool AsmParser::parseDirectiveCFIStartPr
>> if (parseIdentifier(Simple) || Simple != "simple")
>> return TokError("unexpected token in .cfi_startproc directive");
>>
>> + if (parseToken(AsmToken::EndOfStatement, "Expected end of statement"))
>> + return true;
>> +
>> getStreamer().EmitCFIStartProc(!Simple.empty());
>> return false;
>> }
>> @@ -3443,16 +3424,10 @@ bool AsmParser::parseRegisterOrRegisterN
>> /// parseDirectiveCFIDefCfa
>> /// ::= .cfi_def_cfa register, offset
>> bool AsmParser::parseDirectiveCFIDefCfa(SMLoc DirectiveLoc) {
>> - int64_t Register = 0;
>> - if (parseRegisterOrRegisterNumber(Register, DirectiveLoc))
>> - return true;
>> -
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> -
>> - int64_t Offset = 0;
>> - if (parseAbsoluteExpression(Offset))
>> + int64_t Register = 0, Offset = 0;
>> + if (parseRegisterOrRegisterNumber(Register, DirectiveLoc) ||
>> + parseToken(AsmToken::Comma, "unexpected token in directive") ||
>> + parseAbsoluteExpression(Offset))
>> return true;
>>
>> getStreamer().EmitCFIDefCfa(Register, Offset);
>> @@ -3473,16 +3448,10 @@ bool AsmParser::parseDirectiveCFIDefCfaO
>> /// parseDirectiveCFIRegister
>> /// ::= .cfi_register register, register
>> bool AsmParser::parseDirectiveCFIRegister(SMLoc DirectiveLoc) {
>> - int64_t Register1 = 0;
>> - if (parseRegisterOrRegisterNumber(Register1, DirectiveLoc))
>> - return true;
>> -
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> -
>> - int64_t Register2 = 0;
>> - if (parseRegisterOrRegisterNumber(Register2, DirectiveLoc))
>> + int64_t Register1 = 0, Register2 = 0;
>> + if (parseRegisterOrRegisterNumber(Register1, DirectiveLoc) ||
>> + parseToken(AsmToken::Comma, "unexpected token in directive") ||
>> + parseRegisterOrRegisterNumber(Register2, DirectiveLoc))
>> return true;
>>
>> getStreamer().EmitCFIRegister(Register1, Register2);
>> @@ -3524,14 +3493,9 @@ bool AsmParser::parseDirectiveCFIOffset(
>> int64_t Register = 0;
>> int64_t Offset = 0;
>>
>> - if (parseRegisterOrRegisterNumber(Register, DirectiveLoc))
>> - return true;
>> -
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> -
>> - if (parseAbsoluteExpression(Offset))
>> + if (parseRegisterOrRegisterNumber(Register, DirectiveLoc) ||
>> + parseToken(AsmToken::Comma, "unexpected token in directive") ||
>> + parseAbsoluteExpression(Offset))
>> return true;
>>
>> getStreamer().EmitCFIOffset(Register, Offset);
>> @@ -3541,17 +3505,11 @@ bool AsmParser::parseDirectiveCFIOffset(
>> /// parseDirectiveCFIRelOffset
>> /// ::= .cfi_rel_offset register, offset
>> bool AsmParser::parseDirectiveCFIRelOffset(SMLoc DirectiveLoc) {
>> - int64_t Register = 0;
>> -
>> - if (parseRegisterOrRegisterNumber(Register, DirectiveLoc))
>> - return true;
>> + int64_t Register = 0, Offset = 0;
>>
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> -
>> - int64_t Offset = 0;
>> - if (parseAbsoluteExpression(Offset))
>> + if (parseRegisterOrRegisterNumber(Register, DirectiveLoc) ||
>> + parseToken(AsmToken::Comma, "unexpected token in directive") ||
>> + parseAbsoluteExpression(Offset))
>> return true;
>>
>> getStreamer().EmitCFIRelOffset(Register, Offset);
>> @@ -3591,16 +3549,11 @@ bool AsmParser::parseDirectiveCFIPersona
>> if (Encoding == dwarf::DW_EH_PE_omit)
>> return false;
>>
>> - if (!isValidEncoding(Encoding))
>> - return TokError("unsupported encoding.");
>> -
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> -
>> StringRef Name;
>> - if (parseIdentifier(Name))
>> - return TokError("expected identifier in directive");
>> + if (check(!isValidEncoding(Encoding), "unsupported encoding.") ||
>> + parseToken(AsmToken::Comma, "unexpected token in directive") ||
>> + check(parseIdentifier(Name), "expected identifier in directive"))
>> + return true;
>>
>> MCSymbol *Sym = getContext().getOrCreateSymbol(Name);
>>
>> @@ -3674,9 +3627,9 @@ bool AsmParser::parseDirectiveCFIEscape(
>> /// parseDirectiveCFISignalFrame
>> /// ::= .cfi_signal_frame
>> bool AsmParser::parseDirectiveCFISignalFrame() {
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return Error(getLexer().getLoc(),
>> - "unexpected token in '.cfi_signal_frame'");
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.cfi_signal_frame'"))
>> + return true;
>>
>> getStreamer().EmitCFISignalFrame();
>> return false;
>> @@ -3698,9 +3651,9 @@ bool AsmParser::parseDirectiveCFIUndefin
>> /// ::= .macros_on
>> /// ::= .macros_off
>> bool AsmParser::parseDirectiveMacrosOnOff(StringRef Directive) {
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return Error(getLexer().getLoc(),
>> - "unexpected token in '" + Directive + "' directive");
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '" + Directive + "' directive"))
>> + return true;
>>
>> setMacrosEnabled(Directive == ".macros_on");
>> return false;
>> @@ -3928,8 +3881,9 @@ void AsmParser::checkForBadMacro(SMLoc D
>> /// parseDirectiveExitMacro
>> /// ::= .exitm
>> bool AsmParser::parseDirectiveExitMacro(StringRef Directive) {
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '" + Directive + "' directive");
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '" + Directive + "' directive"))
>> + return true;
>>
>> if (!isInsideMacroInstantiation())
>> return TokError("unexpected '" + Directive + "' in file, "
>> @@ -3969,14 +3923,14 @@ bool AsmParser::parseDirectiveEndMacro(S
>> /// ::= .purgem
>> bool AsmParser::parseDirectivePurgeMacro(SMLoc DirectiveLoc) {
>> StringRef Name;
>> - if (parseIdentifier(Name))
>> - return TokError("expected identifier in '.purgem' directive");
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.purgem' directive");
>> -
>> - if (!lookupMacro(Name))
>> - return Error(DirectiveLoc, "macro '" + Name + "' is not defined");
>> + SMLoc Loc;
>> + if (getTokenLoc(Loc) || check(parseIdentifier(Name), Loc,
>> + "expected identifier in '.purgem'
>> directive") ||
>> + parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.purgem' directive") ||
>> + check(!lookupMacro(Name), DirectiveLoc,
>> + "macro '" + Name + "' is not defined"))
>> + return true;
>>
>> undefineMacro(Name);
>> return false;
>> @@ -3991,16 +3945,13 @@ bool AsmParser::parseDirectiveBundleAlig
>> // in the inclusive range 0-30.
>> SMLoc ExprLoc = getLexer().getLoc();
>> int64_t AlignSizePow2;
>> - if (parseAbsoluteExpression(AlignSizePow2))
>> + if (parseAbsoluteExpression(AlignSizePow2) ||
>> + parseToken(AsmToken::EndOfStatement, "unexpected token after
>> expression "
>> + "in '.bundle_align_mode' "
>> + "directive") ||
>> + check(AlignSizePow2 < 0 || AlignSizePow2 > 30, ExprLoc,
>> + "invalid bundle alignment size (expected between 0 and 30)"))
>> return true;
>> - else if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token after expression in"
>> - " '.bundle_align_mode' directive");
>> - else if (AlignSizePow2 < 0 || AlignSizePow2 > 30)
>> - return Error(ExprLoc,
>> - "invalid bundle alignment size (expected between 0 and
>> 30)");
>> -
>> - Lex();
>>
>> // Because of AlignSizePow2's verified range we can safely truncate it
>> to
>> // unsigned.
>> @@ -4020,14 +3971,11 @@ bool AsmParser::parseDirectiveBundleLock
>> const char *kInvalidOptionError =
>> "invalid option for '.bundle_lock' directive";
>>
>> - if (parseIdentifier(Option))
>> - return Error(Loc, kInvalidOptionError);
>> -
>> - if (Option != "align_to_end")
>> - return Error(Loc, kInvalidOptionError);
>> - else if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return Error(Loc,
>> - "unexpected token after '.bundle_lock' directive
>> option");
>> + if (check(parseIdentifier(Option), Loc, kInvalidOptionError) ||
>> + check(Option != "align_to_end", Loc, kInvalidOptionError) ||
>> + check(getTok().isNot(AsmToken::EndOfStatement), Loc,
>> + "unexpected token after '.bundle_lock' directive option"))
>> + return true;
>> AlignToEnd = true;
>> }
>>
>> @@ -4042,9 +3990,9 @@ bool AsmParser::parseDirectiveBundleLock
>> bool AsmParser::parseDirectiveBundleUnlock() {
>> checkForValidSection();
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.bundle_unlock' directive");
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.bundle_unlock' directive"))
>> + return true;
>>
>> getStreamer().EmitBundleUnlock();
>> return false;
>> @@ -4062,18 +4010,16 @@ bool AsmParser::parseDirectiveSpace(Stri
>>
>> int64_t FillExpr = 0;
>> if (getLexer().isNot(AsmToken::EndOfStatement)) {
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in '" + Twine(IDVal) + "'
>> directive");
>> - Lex();
>>
>> - if (parseAbsoluteExpression(FillExpr))
>> + if (parseToken(AsmToken::Comma,
>> + "unexpected token in '" + Twine(IDVal) + "'
>> directive") ||
>> + parseAbsoluteExpression(FillExpr))
>> return true;
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '" + Twine(IDVal) + "'
>> directive");
>> }
>>
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '" + Twine(IDVal) + "' directive"))
>> + return true;
>>
>> // FIXME: Sometimes the fill expr is 'nop' if it isn't supplied,
>> instead of 0.
>> getStreamer().emitFill(*NumBytes, FillExpr, NumBytesLoc);
>> @@ -4099,10 +4045,10 @@ bool AsmParser::parseDirectiveLEB128(boo
>> if (getLexer().is(AsmToken::EndOfStatement))
>> break;
>>
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive"))
>> + return true;
>> }
>> + Lex();
>>
>> return false;
>> }
>> @@ -4130,9 +4076,8 @@ bool AsmParser::parseDirectiveSymbolAttr
>> if (getLexer().is(AsmToken::EndOfStatement))
>> break;
>>
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in directive");
>> - Lex();
>> + if (parseToken(AsmToken::Comma, "unexpected token in directive"))
>> + return true;
>> }
>> }
>>
>> @@ -4221,10 +4166,9 @@ bool AsmParser::parseDirectiveAbort() {
>> SMLoc Loc = getLexer().getLoc();
>>
>> StringRef Str = parseStringToEndOfStatement();
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.abort' directive");
>> -
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.abort' directive"))
>> + return true;
>>
>> if (Str.empty())
>> Error(Loc, ".abort detected. Assembly stopping.");
>> @@ -4238,25 +4182,20 @@ bool AsmParser::parseDirectiveAbort() {
>> /// parseDirectiveInclude
>> /// ::= .include "filename"
>> bool AsmParser::parseDirectiveInclude() {
>> - if (getLexer().isNot(AsmToken::String))
>> - return TokError("expected string in '.include' directive");
>> -
>> // Allow the strings to have escaped octal character sequence.
>> std::string Filename;
>> - if (parseEscapedString(Filename))
>> - return true;
>> - SMLoc IncludeLoc = getLexer().getLoc();
>> - Lex();
>> + SMLoc IncludeLoc = getTok().getLoc();
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.include' directive");
>> -
>> - // Attempt to switch the lexer to the included file before consuming
>> the end
>> - // of statement to avoid losing it when we switch.
>> - if (enterIncludeFile(Filename)) {
>> - Error(IncludeLoc, "Could not find include file '" + Filename + "'");
>> + if (check(getTok().isNot(AsmToken::String),
>> + "expected string in '.include' directive") ||
>> + parseEscapedString(Filename) ||
>> + check(getTok().isNot(AsmToken::EndOfStatement),
>> + "unexpected token in '.include' directive") ||
>> + // Attempt to switch the lexer to the included file before
>> consuming the
>> + // end of statement to avoid losing it when we switch.
>> + check(enterIncludeFile(Filename), IncludeLoc,
>> + "Could not find include file '" + Filename + "'"))
>> return true;
>> - }
>>
>> return false;
>> }
>> @@ -4264,25 +4203,18 @@ bool AsmParser::parseDirectiveInclude()
>> /// parseDirectiveIncbin
>> /// ::= .incbin "filename"
>> bool AsmParser::parseDirectiveIncbin() {
>> - if (getLexer().isNot(AsmToken::String))
>> - return TokError("expected string in '.incbin' directive");
>> -
>> // Allow the strings to have escaped octal character sequence.
>> std::string Filename;
>> - if (parseEscapedString(Filename))
>> + SMLoc IncbinLoc = getTok().getLoc();
>> + if (check(getTok().isNot(AsmToken::String),
>> + "expected string in '.incbin' directive") ||
>> + parseEscapedString(Filename) ||
>> + parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.incbin' directive") ||
>> + // Attempt to process the included file.
>> + check(processIncbinFile(Filename), IncbinLoc,
>> + "Could not find incbin file '" + Filename + "'"))
>> return true;
>> - SMLoc IncbinLoc = getLexer().getLoc();
>> - Lex();
>> -
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.incbin' directive");
>> -
>> - // Attempt to process the included file.
>> - if (processIncbinFile(Filename)) {
>> - Error(IncbinLoc, "Could not find incbin file '" + Filename + "'");
>> - return true;
>> - }
>> -
>> return false;
>> }
>>
>> @@ -4295,14 +4227,11 @@ bool AsmParser::parseDirectiveIf(SMLoc D
>> eatToEndOfStatement();
>> } else {
>> int64_t ExprValue;
>> - if (parseAbsoluteExpression(ExprValue))
>> + if (parseAbsoluteExpression(ExprValue) ||
>> + parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.if' directive"))
>> return true;
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.if' directive");
>> -
>> - Lex();
>> -
>> switch (DirKind) {
>> default:
>> llvm_unreachable("unsupported directive");
>> @@ -4344,10 +4273,9 @@ bool AsmParser::parseDirectiveIfb(SMLoc
>> } else {
>> StringRef Str = parseStringToEndOfStatement();
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.ifb' directive");
>> -
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.ifb' directive"))
>> + return true;
>>
>> TheCondState.CondMet = ExpectBlank == Str.empty();
>> TheCondState.Ignore = !TheCondState.CondMet;
>> @@ -4368,17 +4296,14 @@ bool AsmParser::parseDirectiveIfc(SMLoc
>> } else {
>> StringRef Str1 = parseStringToComma();
>>
>> - if (getLexer().isNot(AsmToken::Comma))
>> - return TokError("unexpected token in '.ifc' directive");
>> -
>> - Lex();
>> + if (parseToken(AsmToken::Comma, "unexpected token in '.ifc'
>> directive"))
>> + return true;
>>
>> StringRef Str2 = parseStringToEndOfStatement();
>>
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.ifc' directive");
>> -
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.ifc' directive"))
>> + return true;
>>
>> TheCondState.CondMet = ExpectEqual == (Str1.trim() == Str2.trim());
>> TheCondState.Ignore = !TheCondState.CondMet;
>> @@ -4443,10 +4368,9 @@ bool AsmParser::parseDirectiveIfdef(SMLo
>> if (TheCondState.Ignore) {
>> eatToEndOfStatement();
>> } else {
>> - if (parseIdentifier(Name))
>> - return TokError("expected identifier after '.ifdef'");
>> -
>> - Lex();
>> + if (check(parseIdentifier(Name), "expected identifier after
>> '.ifdef'") ||
>> + parseToken(AsmToken::EndOfStatement, "unexpected token in
>> '.ifdef'"))
>> + return true;
>>
>> MCSymbol *Sym = getContext().lookupSymbol(Name);
>>
>> @@ -4494,10 +4418,9 @@ bool AsmParser::parseDirectiveElseIf(SML
>> /// parseDirectiveElse
>> /// ::= .else
>> bool AsmParser::parseDirectiveElse(SMLoc DirectiveLoc) {
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.else' directive");
>> -
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.else' directive"))
>> + return true;
>>
>> if (TheCondState.TheCond != AsmCond::IfCond &&
>> TheCondState.TheCond != AsmCond::ElseIfCond)
>> @@ -4518,10 +4441,9 @@ bool AsmParser::parseDirectiveElse(SMLoc
>> /// parseDirectiveEnd
>> /// ::= .end
>> bool AsmParser::parseDirectiveEnd(SMLoc DirectiveLoc) {
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.end' directive");
>> -
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.end' directive"))
>> + return true;
>>
>> while (Lexer.isNot(AsmToken::Eof))
>> Lex();
>> @@ -4588,10 +4510,9 @@ bool AsmParser::parseDirectiveWarning(SM
>> /// parseDirectiveEndIf
>> /// ::= .endif
>> bool AsmParser::parseDirectiveEndIf(SMLoc DirectiveLoc) {
>> - if (getLexer().isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '.endif' directive");
>> -
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '.endif' directive"))
>> + return true;
>>
>> if ((TheCondState.TheCond == AsmCond::NoCond) || TheCondStack.empty())
>> Error(DirectiveLoc, "Encountered a .endif that doesn't follow a .if
>> or "
>> @@ -4808,14 +4729,10 @@ bool AsmParser::parseDirectiveRept(SMLoc
>> return Error(CountLoc, "unexpected token in '" + Dir + "'
>> directive");
>> }
>>
>> - if (Count < 0)
>> - return Error(CountLoc, "Count is negative");
>> -
>> - if (Lexer.isNot(AsmToken::EndOfStatement))
>> - return TokError("unexpected token in '" + Dir + "' directive");
>> -
>> - // Eat the end of statement.
>> - Lex();
>> + if (check(Count < 0, CountLoc, "Count is negative") ||
>> + parseToken(AsmToken::EndOfStatement,
>> + "unexpected token in '" + Dir + "' directive"))
>> + return true;
>>
>> // Lex the rept definition.
>> MCAsmMacro *M = parseMacroLikeBody(DirectiveLoc);
>> @@ -4840,22 +4757,14 @@ bool AsmParser::parseDirectiveRept(SMLoc
>> /// ::= .irp symbol,values
>> bool AsmParser::parseDirectiveIrp(SMLoc DirectiveLoc) {
>> MCAsmMacroParameter Parameter;
>> -
>> - if (parseIdentifier(Parameter.Name))
>> - return TokError("expected identifier in '.irp' directive");
>> -
>> - if (Lexer.isNot(AsmToken::Comma))
>> - return TokError("expected comma in '.irp' directive");
>> -
>> - Lex();
>> -
>> MCAsmMacroArguments A;
>> - if (parseMacroArguments(nullptr, A))
>> + if (check(parseIdentifier(Parameter.Name),
>> + "expected identifier in '.irp' directive") ||
>> + parseToken(AsmToken::Comma, "expected comma in '.irp' directive")
>> ||
>> + parseMacroArguments(nullptr, A) ||
>> + parseToken(AsmToken::EndOfStatement, "expected End of Statement"))
>> return true;
>>
>> - // Eat the end of statement.
>> - Lex();
>> -
>> // Lex the irp definition.
>> MCAsmMacro *M = parseMacroLikeBody(DirectiveLoc);
>> if (!M)
>> @@ -4882,24 +4791,20 @@ bool AsmParser::parseDirectiveIrp(SMLoc
>> /// ::= .irpc symbol,values
>> bool AsmParser::parseDirectiveIrpc(SMLoc DirectiveLoc) {
>> MCAsmMacroParameter Parameter;
>> -
>> - if (parseIdentifier(Parameter.Name))
>> - return TokError("expected identifier in '.irpc' directive");
>> -
>> - if (Lexer.isNot(AsmToken::Comma))
>> - return TokError("expected comma in '.irpc' directive");
>> -
>> - Lex();
>> -
>> MCAsmMacroArguments A;
>> - if (parseMacroArguments(nullptr, A))
>> +
>> + if (check(parseIdentifier(Parameter.Name),
>> + "expected identifier in '.irpc' directive") ||
>> + parseToken(AsmToken::Comma, "expected comma in '.irpc' directive")
>> ||
>> + parseMacroArguments(nullptr, A))
>> return true;
>>
>> if (A.size() != 1 || A.front().size() != 1)
>> return TokError("unexpected token in '.irpc' directive");
>>
>> // Eat the end of statement.
>> - Lex();
>> + if (parseToken(AsmToken::EndOfStatement, "expected end of statement"))
>> + return true;
>>
>> // Lex the irpc definition.
>> MCAsmMacro *M = parseMacroLikeBody(DirectiveLoc);
>>
>> Modified: llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp?rev=275795&r1=275794&r2=275795&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp (original)
>> +++ llvm/trunk/lib/MC/MCParser/DarwinAsmParser.cpp Mon Jul 18 10:24:03
>> 2016
>> @@ -537,7 +537,6 @@ bool DarwinAsmParser::parseDirectiveLink
>>
>> Args.push_back(Data);
>>
>> - Lex();
>> if (getLexer().is(AsmToken::EndOfStatement))
>> break;
>>
>>
>> Modified: llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp?rev=275795&r1=275794&r2=275795&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp (original)
>> +++ llvm/trunk/lib/MC/MCParser/ELFAsmParser.cpp Mon Jul 18 10:24:03 2016
>> @@ -212,6 +212,7 @@ bool ELFAsmParser::ParseDirectiveSize(St
>>
>> if (getLexer().isNot(AsmToken::EndOfStatement))
>> return TokError("unexpected token in directive");
>> + Lex();
>>
>> getStreamer().emitELFSize(Sym, Expr);
>> return false;
>> @@ -478,6 +479,7 @@ bool ELFAsmParser::ParseSectionArguments
>> EndStmt:
>> if (getLexer().isNot(AsmToken::EndOfStatement))
>> return TokError("unexpected token in directive");
>> + Lex();
>>
>> unsigned Type = ELF::SHT_PROGBITS;
>>
>> @@ -629,6 +631,10 @@ bool ELFAsmParser::ParseDirectiveIdent(S
>>
>> Lex();
>>
>> + if (getLexer().isNot(AsmToken::EndOfStatement))
>> + return TokError("unexpected token in '.ident' directive");
>> + Lex();
>> +
>> getStreamer().EmitIdent(Data);
>> return false;
>> }
>> @@ -727,6 +733,8 @@ bool ELFAsmParser::ParseDirectiveSubsect
>> if (getLexer().isNot(AsmToken::EndOfStatement))
>> return TokError("unexpected token in directive");
>>
>> + Lex();
>> +
>> getStreamer().SubSection(Subsection);
>> return false;
>> }
>>
>> Modified: llvm/trunk/test/MC/AsmParser/preserve-comments.s
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/preserve-comments.s?rev=275795&r1=275794&r2=275795&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/MC/AsmParser/preserve-comments.s (original)
>> +++ llvm/trunk/test/MC/AsmParser/preserve-comments.s Mon Jul 18 10:24:03
>> 2016
>> @@ -9,3 +9,5 @@ foo: #Comment here
>> ## WHOLE LINE COMMENT
>> cmpl $196, %eax ## EOL COMMENT
>> #endif
>> + .ident "clang version 3.9.0"
>> + .section ".note.GNU-stack","", at progbits
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160718/ad3a9260/attachment.html>
More information about the llvm-commits
mailing list