summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Basic/TargetInfo.cpp6
-rw-r--r--clang/test/Sema/asm.c6
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}}
+}
OpenPOWER on IntegriCloud