[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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217288 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Akira Hatanaka 2014-09-05 22:30:32 +00:00
parent 52af82df95
commit cbbae7f41d
2 changed files with 14 additions and 0 deletions

View File

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