From: David Majnemer Date: Sun, 11 Jan 2015 09:39:03 +0000 (+0000) Subject: Basic: The asm constraint '#m' isn't valid, reject it X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=72db1396ffbb3b542e9f3f6f19eba45e812492e8;p=clang Basic: The asm constraint '#m' isn't valid, reject it git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225603 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index 3162b7cde2..15b8c83d1b 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -491,6 +491,7 @@ bool TargetInfo::validateOutputConstraint(ConstraintInfo &Info) const { Name++; if (Name[1] != ',') return false; + break; case '?': // Disparage slightly code. case '!': // Disparage severely. case '*': // Ignore for choosing register preferences. @@ -623,9 +624,14 @@ bool TargetInfo::validateInputConstraint(ConstraintInfo *OutputConstraints, break; case ',': // multiple alternative constraint. Ignore comma. break; + case '#': // Ignore as constraint. + while (Name[1] && Name[1] != ',') + Name++; + if (Name[1] != ',') + return false; + break; case '?': // Disparage slightly code. case '!': // Disparage severely. - case '#': // Ignore as constraint. case '*': // Ignore for choosing register preferences. break; // Pass them. } diff --git a/test/Sema/asm.c b/test/Sema/asm.c index b4000cb5ff..10d845e3d0 100644 --- a/test/Sema/asm.c +++ b/test/Sema/asm.c @@ -183,3 +183,10 @@ void fn3() { __asm__("" : "+#r"(l)); // expected-error {{invalid output constraint '+#r' in asm}} } + +void fn4() { + int l; + __asm__("" + : "=r"(l) + : "#m"(l)); // expected-error {{invalid input constraint '#m' in asm}} +}