summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-01-21 06:27:20 +0000
committerAnders Carlsson <andersca@mac.com>2009-01-21 06:27:20 +0000
commitdc6ceca4bab233e755ea6853e8eca57bb062b69d (patch)
tree3757deefc83027090c1ce89fc1a43df1dedfdda1
parentf7373377078352d4b900799b3bc80f0c50785243 (diff)
downloadbcm5719-llvm-dc6ceca4bab233e755ea6853e8eca57bb062b69d.tar.gz
bcm5719-llvm-dc6ceca4bab233e755ea6853e8eca57bb062b69d.zip
Fix an inline asm sema bug that I introduced.
llvm-svn: 62666
-rw-r--r--clang/lib/Sema/SemaStmt.cpp4
-rw-r--r--clang/test/Sema/asm.c8
2 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 4b89acb6901..9b6da0504ad 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -899,8 +899,8 @@ Sema::OwningStmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc,
ParenExpr *InputExpr = cast<ParenExpr>(Exprs[i]);
// Only allow void types for memory constraints.
- if (info & TargetInfo::CI_AllowsMemory) {
-
+ if ((info & TargetInfo::CI_AllowsMemory)
+ && !(info & TargetInfo::CI_AllowsRegister)) {
if (InputExpr->isLvalue(Context) != Expr::LV_Valid)
return StmtError(Diag(InputExpr->getSubExpr()->getLocStart(),
diag::err_asm_invalid_lvalue_in_input)
diff --git a/clang/test/Sema/asm.c b/clang/test/Sema/asm.c
index 312b800ec70..4093b1abeb9 100644
--- a/clang/test/Sema/asm.c
+++ b/clang/test/Sema/asm.c
@@ -46,5 +46,11 @@ void test4(const volatile void *addr)
asm ("nop" : : "r"(test4(addr))); // expected-error {{invalid type 'void' in asm input for constraint 'r'}}
asm ("nop" : : "m"(test4(addr))); // expected-error {{invalid lvalue in asm input for constraint 'm'}}
- asm("nop" : : "m"(f())); // expected-error {{invalid lvalue in asm input for constraint 'm'}}
+ asm ("nop" : : "m"(f())); // expected-error {{invalid lvalue in asm input for constraint 'm'}}
+}
+
+// <rdar://problem/6512595>
+void test5()
+{
+ asm("nop" : : "X" (8));
}
OpenPOWER on IntegriCloud