diff --git a/include/llvm/MC/MCAsmParser.h b/include/llvm/MC/MCAsmParser.h index 23c97f58aff..8c1b7b88633 100644 --- a/include/llvm/MC/MCAsmParser.h +++ b/include/llvm/MC/MCAsmParser.h @@ -68,24 +68,6 @@ public: /// on error. /// @result - False on success. virtual bool ParseAbsoluteExpression(int64_t &Res) = 0; - - /// ParseRelocatableExpression - Parse an expression which must be - /// relocatable. - /// - /// @param Res - The relocatable expression value. The result is undefined on - /// error. - /// @result - False on success. - virtual bool ParseRelocatableExpression(MCValue &Res) = 0; - - /// ParseParenRelocatableExpression - Parse an expression which must be - /// relocatable, assuming that an initial '(' has already been consumed. - /// - /// @param Res - The relocatable expression value. The result is undefined on - /// error. - /// @result - False on success. - /// - /// @see ParseRelocatableExpression, ParseParenExpr. - virtual bool ParseParenRelocatableExpression(MCValue &Res) = 0; }; } // End llvm namespace diff --git a/tools/llvm-mc/AsmParser.cpp b/tools/llvm-mc/AsmParser.cpp index 78cab38b4ff..0387857c247 100644 --- a/tools/llvm-mc/AsmParser.cpp +++ b/tools/llvm-mc/AsmParser.cpp @@ -279,32 +279,6 @@ bool AsmParser::ParseAbsoluteExpression(int64_t &Res) { return false; } -bool AsmParser::ParseRelocatableExpression(MCValue &Res) { - const MCExpr *Expr; - - SMLoc StartLoc = Lexer.getLoc(); - if (ParseExpression(Expr)) - return true; - - if (!Expr->EvaluateAsRelocatable(Ctx, Res)) - return Error(StartLoc, "expected relocatable expression"); - - return false; -} - -bool AsmParser::ParseParenRelocatableExpression(MCValue &Res) { - const MCExpr *Expr; - - SMLoc StartLoc = Lexer.getLoc(); - if (ParseParenExpr(Expr)) - return true; - - if (!Expr->EvaluateAsRelocatable(Ctx, Res)) - return Error(StartLoc, "expected relocatable expression"); - - return false; -} - static unsigned getBinOpPrecedence(AsmToken::TokenKind K, MCBinaryExpr::Opcode &Kind) { switch (K) { @@ -739,9 +713,14 @@ bool AsmParser::ParseAssignment(const StringRef &Name, bool IsDotSet) { SMLoc EqualLoc = Lexer.getLoc(); MCValue Value; - if (ParseRelocatableExpression(Value)) + const MCExpr *Expr; + SMLoc StartLoc = Lexer.getLoc(); + if (ParseExpression(Expr)) return true; + if (!Expr->EvaluateAsRelocatable(Ctx, Value)) + return Error(StartLoc, "expected relocatable expression"); + if (Lexer.isNot(AsmToken::EndOfStatement)) return TokError("unexpected token in assignment"); @@ -958,11 +937,16 @@ bool AsmParser::ParseDirectiveAscii(bool ZeroTerminated) { bool AsmParser::ParseDirectiveValue(unsigned Size) { if (Lexer.isNot(AsmToken::EndOfStatement)) { for (;;) { - MCValue Expr; - if (ParseRelocatableExpression(Expr)) + MCValue Value; + const MCExpr *Expr; + SMLoc StartLoc = Lexer.getLoc(); + if (ParseExpression(Expr)) return true; - Out.EmitValue(Expr, Size); + if (!Expr->EvaluateAsRelocatable(Ctx, Value)) + return Error(StartLoc, "expected relocatable expression"); + + Out.EmitValue(Value, Size); if (Lexer.is(AsmToken::EndOfStatement)) break; @@ -1054,9 +1038,14 @@ bool AsmParser::ParseDirectiveFill() { /// ::= .org expression [ , expression ] bool AsmParser::ParseDirectiveOrg() { MCValue Offset; - if (ParseRelocatableExpression(Offset)) + const MCExpr *Expr; + SMLoc StartLoc = Lexer.getLoc(); + if (ParseExpression(Expr)) return true; + if (!Expr->EvaluateAsRelocatable(Ctx, Offset)) + return Error(StartLoc, "expected relocatable expression"); + // Parse optional fill expression. int64_t FillExpr = 0; if (Lexer.isNot(AsmToken::EndOfStatement)) { @@ -1428,10 +1417,15 @@ bool AsmParser::ParseDirectiveDarwinLsym() { return TokError("unexpected token in '.lsym' directive"); Lexer.Lex(); - MCValue Expr; - if (ParseRelocatableExpression(Expr)) + MCValue Value; + const MCExpr *Expr; + SMLoc StartLoc = Lexer.getLoc(); + if (ParseExpression(Expr)) return true; + if (!Expr->EvaluateAsRelocatable(Ctx, Value)) + return Error(StartLoc, "expected relocatable expression"); + if (Lexer.isNot(AsmToken::EndOfStatement)) return TokError("unexpected token in '.lsym' directive"); diff --git a/tools/llvm-mc/AsmParser.h b/tools/llvm-mc/AsmParser.h index 2e328d9f6fd..fda79ca8426 100644 --- a/tools/llvm-mc/AsmParser.h +++ b/tools/llvm-mc/AsmParser.h @@ -74,10 +74,6 @@ public: virtual bool ParseAbsoluteExpression(int64_t &Res); - virtual bool ParseRelocatableExpression(MCValue &Res); - - virtual bool ParseParenRelocatableExpression(MCValue &Res); - /// } private: