Index: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp =================================================================== --- llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1842,15 +1842,17 @@ bool X86AsmParser::ParseIntelExpression(IntelExprStateMachine &SM, SMLoc &End) { MCAsmParser &Parser = getParser(); - const AsmToken &Tok = Parser.getTok(); StringRef ErrMsg; AsmToken::TokenKind PrevTK = AsmToken::Error; bool Done = false; while (!Done) { + // Get a fresh reference on each loop iteration in case the previous + // iteration moved the token storage during UnLex(). + const AsmToken &Tok = Parser.getTok(); + bool UpdateLocLex = true; AsmToken::TokenKind TK = getLexer().getKind(); - switch (TK) { default: if ((Done = SM.isValidEndState()))