diff options
Diffstat (limited to 'llvm/lib/MC/MCParser')
| -rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 7ee8e1b3e84..c2410413a62 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -775,7 +775,7 @@ bool AsmParser::processIncbinFile(const std::string &Filename, int64_t Skip,    Bytes = Bytes.drop_front(Skip);    if (Count) {      int64_t Res; -    if (!Count->evaluateAsAbsolute(Res)) +    if (!Count->evaluateAsAbsolute(Res, getStreamer().getAssemblerPtr()))        return Error(Loc, "expected absolute expression");      if (Res < 0)        return Warning(Loc, "negative count has no effect"); @@ -1378,7 +1378,8 @@ bool AsmParser::parseExpression(const MCExpr *&Res, SMLoc &EndLoc) {      Lex();    } -  // Try to constant fold it up front, if possible. +  // Try to constant fold it up front, if possible. Do not exploit +  // assembler here.    int64_t Value;    if (Res->evaluateAsAbsolute(Value))      Res = MCConstantExpr::create(Value, getContext()); @@ -1419,7 +1420,7 @@ bool AsmParser::parseAbsoluteExpression(int64_t &Res) {    if (parseExpression(Expr))      return true; -  if (!Expr->evaluateAsAbsolute(Res)) +  if (!Expr->evaluateAsAbsolute(Res, getStreamer().getAssemblerPtr()))      return Error(StartLoc, "expected absolute expression");    return false; @@ -2616,7 +2617,8 @@ bool AsmParser::parseMacroArguments(const MCAsmMacro *M,          Lex();          if (parseExpression(AbsoluteExp, EndLoc))            return false; -        if (!AbsoluteExp->evaluateAsAbsolute(Value)) +        if (!AbsoluteExp->evaluateAsAbsolute(Value, +                                             getStreamer().getAssemblerPtr()))            return Error(StrLoc, "expected absolute expression");          const char *StrChar = StrLoc.getPointer();          const char *EndChar = EndLoc.getPointer(); @@ -2916,8 +2918,9 @@ bool AsmParser::parseDirectiveReloc(SMLoc DirectiveLoc) {    if (parseExpression(Offset))      return true; -  if (check(!Offset->evaluateAsAbsolute(OffsetValue), OffsetLoc, -            "expression is not a constant value") || +  if (check(!Offset->evaluateAsAbsolute(OffsetValue, +                                        getStreamer().getAssemblerPtr()), +            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")) @@ -5344,7 +5347,7 @@ bool AsmParser::parseDirectiveRept(SMLoc DirectiveLoc, StringRef Dir) {      return true;    int64_t Count; -  if (!CountExpr->evaluateAsAbsolute(Count)) { +  if (!CountExpr->evaluateAsAbsolute(Count, getStreamer().getAssemblerPtr())) {      return Error(CountLoc, "unexpected token in '" + Dir + "' directive");    }  | 

