diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Basic/TargetInfo.cpp | 6 | ||||
| -rw-r--r-- | clang/test/Sema/asm.c | 6 |
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Basic/TargetInfo.cpp b/clang/lib/Basic/TargetInfo.cpp index aabb70dd6b1..3162b7cde23 100644 --- a/clang/lib/Basic/TargetInfo.cpp +++ b/clang/lib/Basic/TargetInfo.cpp @@ -486,9 +486,13 @@ bool TargetInfo::validateOutputConstraint(ConstraintInfo &Info) const { if (Name[1] == '=' || Name[1] == '+') Name++; break; + case '#': // Ignore as constraint. + while (Name[1] && Name[1] != ',') + Name++; + if (Name[1] != ',') + return false; case '?': // Disparage slightly code. case '!': // Disparage severely. - case '#': // Ignore as constraint. case '*': // Ignore for choosing register preferences. break; // Pass them. } diff --git a/clang/test/Sema/asm.c b/clang/test/Sema/asm.c index 2867acb1d36..b4000cb5ff8 100644 --- a/clang/test/Sema/asm.c +++ b/clang/test/Sema/asm.c @@ -177,3 +177,9 @@ void fn2() { __asm__("" : "+&m"(l)); // expected-error {{invalid output constraint '+&m' in asm}} } + +void fn3() { + int l; + __asm__("" + : "+#r"(l)); // expected-error {{invalid output constraint '+#r' in asm}} +} |

