diff --git a/mlir/lib/Parser/AffineParser.cpp b/mlir/lib/Parser/AffineParser.cpp --- a/mlir/lib/Parser/AffineParser.cpp +++ b/mlir/lib/Parser/AffineParser.cpp @@ -265,17 +265,22 @@ return (-1) * operand; } +static bool isBareIdentifier(const Token &token) { + return token.isAny(Token::bare_identifier, Token::inttype) || + token.isKeyword(); +} + /// Parse a bare id that may appear in an affine expression. /// /// affine-expr ::= bare-id AffineExpr AffineParser::parseBareIdExpr() { - if (getToken().isNot(Token::bare_identifier)) + if (!isBareIdentifier(getToken())) return emitWrongTokenError("expected bare identifier"), nullptr; StringRef sRef = getTokenSpelling(); for (auto entry : dimsAndSymbols) { if (entry.first == sRef) { - consumeToken(Token::bare_identifier); + consumeToken(); return entry.second; } } @@ -458,7 +463,7 @@ /// expressions of the affine map. Update our state to store the /// dimensional/symbolic identifier. ParseResult AffineParser::parseIdentifierDefinition(AffineExpr idExpr) { - if (getToken().isNot(Token::bare_identifier)) + if (!isBareIdentifier(getToken())) return emitWrongTokenError("expected bare identifier"); auto name = getTokenSpelling(); @@ -466,7 +471,7 @@ if (entry.first == name) return emitError("redefinition of identifier '" + name + "'"); } - consumeToken(Token::bare_identifier); + consumeToken(); dimsAndSymbols.push_back({name, idExpr}); return success();