1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[inline asm] Add a check in InlineAsm::ConstraintInfo::Parse to make sure '{'

follows '~' in a clobber constraint string.

Previously llc would hit an llvm_unreachable when compiling an inline-asm
instruction with malformed constraint string "~x{21}". This commit enables
LLParser to catch the error earlier and print a more helpful diagnostic.

rdar://problem/14206559

llvm-svn: 217288
This commit is contained in:
Akira Hatanaka 2014-09-05 22:30:32 +00:00
parent 5c895f97e3
commit f67a747835
2 changed files with 14 additions and 0 deletions

View File

@ -91,6 +91,10 @@ bool InlineAsm::ConstraintInfo::Parse(StringRef Str,
if (*I == '~') { if (*I == '~') {
Type = isClobber; Type = isClobber;
++I; ++I;
// '{' must immediately follow '~'.
if (I != E && *I != '{')
return true;
} else if (*I == '=') { } else if (*I == '=') {
++I; ++I;
Type = isOutput; Type = isOutput;

View File

@ -0,0 +1,10 @@
; RUN: not llvm-as <%s 2>&1 | FileCheck %s
; "~x{21}" is not a valid clobber constraint.
; CHECK: invalid type for inline asm constraint string
define void @foo() nounwind {
call void asm sideeffect "mov x0, #42", "~{x0},~{x19},~x{21}"() nounwind
ret void
}