[llvm] 1edb6b0 - [RISCV] Fix crash in parseZcmpStackAdj if token is not an integer.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 2 16:06:38 PDT 2025
Author: Craig Topper
Date: 2025-04-02T16:06:15-07:00
New Revision: 1edb6b0af1c47f88aa5c230a1a2b769eeb3c30aa
URL: https://github.com/llvm/llvm-project/commit/1edb6b0af1c47f88aa5c230a1a2b769eeb3c30aa
DIFF: https://github.com/llvm/llvm-project/commit/1edb6b0af1c47f88aa5c230a1a2b769eeb3c30aa.diff
LOG: [RISCV] Fix crash in parseZcmpStackAdj if token is not an integer.
Added:
Modified:
llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
llvm/test/MC/RISCV/rv64zcmp-invalid.s
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index 8f9a5ae75fca7..27ae33f8339c7 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -2676,7 +2676,11 @@ ParseStatus RISCVAsmParser::parseZcmpStackAdj(OperandVector &Operands,
bool Negative = parseOptionalToken(AsmToken::Minus);
SMLoc S = getLoc();
- int64_t StackAdjustment = getLexer().getTok().getIntVal();
+
+ if (getTok().isNot(AsmToken::Integer))
+ return ParseStatus::NoMatch;
+
+ int64_t StackAdjustment = getTok().getIntVal();
unsigned RlistVal = static_cast<RISCVOperand *>(Operands[1].get())->Rlist.Val;
assert(RlistVal != RISCVZC::INVALID_RLIST);
@@ -2697,7 +2701,7 @@ ParseStatus RISCVAsmParser::parseZcmpStackAdj(OperandVector &Operands,
unsigned Spimm = (StackAdjustment - StackAdjBase) / 16;
Operands.push_back(RISCVOperand::createSpimm(Spimm << 4, S));
- getLexer().Lex();
+ Lex();
return ParseStatus::Success;
}
diff --git a/llvm/test/MC/RISCV/rv64zcmp-invalid.s b/llvm/test/MC/RISCV/rv64zcmp-invalid.s
index 6c4f8a9ec3293..f7ae69aad6efd 100644
--- a/llvm/test/MC/RISCV/rv64zcmp-invalid.s
+++ b/llvm/test/MC/RISCV/rv64zcmp-invalid.s
@@ -48,3 +48,9 @@ cm.pop {ra, x8-x9, x18-x17}, -40
# CHECK-ERROR: :[[@LINE+1]]:16: error: invalid register
cm.pop {ra, x8-f8, x18-x17}, -40
+
+# CHECK-ERROR: :[[@LINE+1]]:15: error: stack adjustment is invalid for this instruction and register list
+cm.pop {ra}, -x1
+
+# CHECK-ERROR: :[[@LINE+1]]:15: error: stack adjustment is invalid for this instruction and register list
+cm.push {ra}, x1
More information about the llvm-commits
mailing list