diff options
author | Craig Topper <craig.topper@intel.com> | 2019-02-19 17:13:40 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2019-02-19 17:13:40 +0000 |
commit | d8acfe69f0a754fac838df384823d2d4ebd7cc79 (patch) | |
tree | c6b001045381661640f78ccd5cad7d9b90cf903d | |
parent | 236e1ce1d920204661fd73ef8960738108852647 (diff) | |
download | bcm5719-llvm-d8acfe69f0a754fac838df384823d2d4ebd7cc79.tar.gz bcm5719-llvm-d8acfe69f0a754fac838df384823d2d4ebd7cc79.zip |
X86AsmParser AVX-512: Return error instead of hitting assert
When parsing a sequence of tokens beginning with {, it will hit an assert and crash if the token afterwards is not an identifier. Instead of this, return a more verbose error as seen elsewhere in the function.
Patch by Brandon Jones (BrandonTJones)
Differential Revision: https://reviews.llvm.org/D57375
llvm-svn: 354356
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 2 | ||||
-rw-r--r-- | llvm/test/MC/X86/avx512-err.s | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index 44173d9b2b3..cb5712ccd86 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1654,6 +1654,8 @@ X86AsmParser::ParseRoundingModeOp(SMLoc Start) { const AsmToken &Tok = Parser.getTok(); // Eat "{" and mark the current place. const SMLoc consumedToken = consumeToken(); + if (Tok.isNot(AsmToken::Identifier)) + return ErrorOperand(Tok.getLoc(), "Expected an identifier after {"); if (Tok.getIdentifier().startswith("r")){ int rndMode = StringSwitch<int>(Tok.getIdentifier()) .Case("rn", X86::STATIC_ROUNDING::TO_NEAREST_INT) diff --git a/llvm/test/MC/X86/avx512-err.s b/llvm/test/MC/X86/avx512-err.s index 31d5f4f6f1d..9d8183d8872 100644 --- a/llvm/test/MC/X86/avx512-err.s +++ b/llvm/test/MC/X86/avx512-err.s @@ -11,3 +11,6 @@ vfmsub213ps %zmm8, %zmm8, %zmm8 {rn-sae} // ERR: invalid operand for instruction cvtsd2sil {rn-sae}, %xmm1, %eax + +// ERR: Expected an identifier after { +cvtsd2sil {{sae}, %xmm1, %eax |