From: Olivier Goffart Date: Sun, 17 Aug 2014 13:19:48 +0000 (+0000) Subject: Fix assertion on asm register that are "%" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b7c04bc25674de63a710d380f5145a6446e4b8ae;p=clang Fix assertion on asm register that are "%" 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 --- diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index aecf13b008..a35298067b 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -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); diff --git a/test/Sema/asm.c b/test/Sema/asm.c index 89c8c574eb..13ae25f265 100644 --- a/test/Sema/asm.c +++ b/test/Sema/asm.c @@ -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.