]> granicus.if.org Git - clang/commitdiff
Fix assertion on asm register that are "%"
authorOlivier Goffart <ogoffart@woboq.com>
Sun, 17 Aug 2014 13:19:48 +0000 (13:19 +0000)
committerOlivier Goffart <ogoffart@woboq.com>
Sun, 17 Aug 2014 13:19:48 +0000 (13:19 +0000)
Name might be empty again after we removed the '%' prefix
and Name[0] would assert.

Found on code like
register int foo asm("%" MACRO);
where MACRO was supposed to be defined in a header file that was not found.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215834 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/TargetInfo.cpp
test/Sema/asm.c

index aecf13b00854904dce3e00a2a8005d4f55377781..a35298067bd1ccfc610b7e3995a6ed08e761bdc8 100644 (file)
@@ -338,6 +338,8 @@ bool TargetInfo::isValidGCCRegisterName(StringRef Name) const {
 
   // Get rid of any register prefix.
   Name = removeGCCRegisterPrefix(Name);
+  if (Name.empty())
+      return false;
 
   getGCCRegNames(Names, NumNames);
 
index 89c8c574eb5a334cb671be1b5330c5487745996d..13ae25f265c3247ce49adbadb66eeb44366b7702 100644 (file)
@@ -107,6 +107,7 @@ void test10(void){
 
   register int r asm ("cx");
   register int rr asm ("rr_asm"); // expected-error{{unknown register name 'rr_asm' in asm}}
+  register int rrr asm ("%"); // expected-error{{unknown register name '%' in asm}}
 }
 
 // This is just an assert because of the boolean conversion.