Index: lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp =================================================================== --- lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp +++ lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp @@ -925,6 +925,8 @@ switch (getLexer().getKind()) { default: + if (HadParens) + getLexer().UnLex(AsmToken(AsmToken::LParen, "(")); return MatchOperand_NoMatch; case AsmToken::Identifier: StringRef Name = getLexer().getTok().getIdentifier(); @@ -933,7 +935,7 @@ RegNo = MatchRegisterAltName(Name); if (RegNo == 0) { if (HadParens) - getLexer().UnLex(Buf[0]); + getLexer().UnLex(AsmToken(AsmToken::LParen, "(")); return MatchOperand_NoMatch; } } Index: test/MC/RISCV/rv32i-valid.s =================================================================== --- test/MC/RISCV/rv32i-valid.s +++ test/MC/RISCV/rv32i-valid.s @@ -128,6 +128,9 @@ lb s3, 4(ra) # CHECK-ASM-AND-OBJ: lb s3, 4(ra) # CHECK-ASM: encoding: [0x83,0x89,0x40,0x00] +lb s3, (4)(ra) +# CHECK-ASM-AND-OBJ: lb s3, 4(ra) +# CHECK-ASM: encoding: [0x83,0x89,0x40,0x00] lb s3, +4(ra) # CHECK-ASM-AND-OBJ: lh t1, -2048(zero) # CHECK-ASM: encoding: [0x03,0x13,0x00,0x80]