diff options
author | Ana Pazos <apazos@codeaurora.org> | 2018-08-24 23:47:49 +0000 |
---|---|---|
committer | Ana Pazos <apazos@codeaurora.org> | 2018-08-24 23:47:49 +0000 |
commit | ecc65eddec743b14ec129b0e76dc2184e418259e (patch) | |
tree | 6d99678c02905725c8f4cac64a18c7dbd5be7c2e /llvm/lib | |
parent | 4ddd0596350d102693839349ba4d741a5bbae427 (diff) | |
download | bcm5719-llvm-ecc65eddec743b14ec129b0e76dc2184e418259e.tar.gz bcm5719-llvm-ecc65eddec743b14ec129b0e76dc2184e418259e.zip |
[RISCV] Fixed Assertion`Kind == Immediate && "Invalid type access!"' failed.
Summary:
Missing check for isImm() in some Immediate classes.
This bug was uncovered by a LLVM MC Assembler Protocol Buffer Fuzzer
for the RISC-V assembly language.
Reviewers: hiraditya, asb
Reviewed By: hiraditya, asb
Subscribers: llvm-commits, hiraditya, kito-cheng, shiva0217, rkruppe, asb, rbar, johnrusso, simoncook, sabuasal, niosHD, zzheng, edward-jones, mgrang, rogfer01, MartinMosbeck, brucehoult, the_o, PkmX, jocewei
Differential Revision: https://reviews.llvm.org/D50797
llvm-svn: 340674
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp index 3a5257206bf..831dcbce71b 100644 --- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp +++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp @@ -322,6 +322,8 @@ public: } bool isSImm6() const { + if (!isImm()) + return false; RISCVMCExpr::VariantKind VK; int64_t Imm; bool IsValid; @@ -335,6 +337,8 @@ public: } bool isSImm6NonZero() const { + if (!isImm()) + return false; RISCVMCExpr::VariantKind VK; int64_t Imm; bool IsValid; @@ -348,6 +352,8 @@ public: } bool isCLUIImm() const { + if (!isImm()) + return false; int64_t Imm; RISCVMCExpr::VariantKind VK; bool IsConstantImm = evaluateConstantImm(Imm, VK); @@ -357,6 +363,8 @@ public: } bool isUImm7Lsb00() const { + if (!isImm()) + return false; int64_t Imm; RISCVMCExpr::VariantKind VK; bool IsConstantImm = evaluateConstantImm(Imm, VK); @@ -365,6 +373,8 @@ public: } bool isUImm8Lsb00() const { + if (!isImm()) + return false; int64_t Imm; RISCVMCExpr::VariantKind VK; bool IsConstantImm = evaluateConstantImm(Imm, VK); @@ -373,6 +383,8 @@ public: } bool isUImm8Lsb000() const { + if (!isImm()) + return false; int64_t Imm; RISCVMCExpr::VariantKind VK; bool IsConstantImm = evaluateConstantImm(Imm, VK); @@ -383,6 +395,8 @@ public: bool isSImm9Lsb0() const { return isBareSimmNLsb0<9>(); } bool isUImm9Lsb000() const { + if (!isImm()) + return false; int64_t Imm; RISCVMCExpr::VariantKind VK; bool IsConstantImm = evaluateConstantImm(Imm, VK); @@ -391,6 +405,8 @@ public: } bool isUImm10Lsb00NonZero() const { + if (!isImm()) + return false; int64_t Imm; RISCVMCExpr::VariantKind VK; bool IsConstantImm = evaluateConstantImm(Imm, VK); @@ -428,6 +444,8 @@ public: bool isSImm13Lsb0() const { return isBareSimmNLsb0<13>(); } bool isSImm10Lsb0000NonZero() const { + if (!isImm()) + return false; int64_t Imm; RISCVMCExpr::VariantKind VK; bool IsConstantImm = evaluateConstantImm(Imm, VK); |