From: David Majnemer Date: Mon, 29 Dec 2014 10:29:53 +0000 (+0000) Subject: Sema: Permit array l-values in asm output operands X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d10ddd5e6834ceb69c9e392a9f4dfeb6892e0740;p=clang Sema: Permit array l-values in asm output operands GCC permits array l-values in asm output operands even though they aren't modifiable l-values. We used to permit it but this behavior regressed in r224916. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224918 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaStmtAsm.cpp b/lib/Sema/SemaStmtAsm.cpp index 24a91716cb..afd785c5df 100644 --- a/lib/Sema/SemaStmtAsm.cpp +++ b/lib/Sema/SemaStmtAsm.cpp @@ -156,6 +156,9 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, case Expr::MLV_Valid: // Cool, this is an lvalue. break; + case Expr::MLV_ArrayType: + // This is OK too. + break; case Expr::MLV_LValueCast: { const Expr *LVal = OutputExpr->IgnoreParenNoopCasts(Context); if (!getLangOpts().HeinousExtensions) { diff --git a/test/SemaCXX/statements.cpp b/test/SemaCXX/statements.cpp index 22648f3a08..efca37dcba 100644 --- a/test/SemaCXX/statements.cpp +++ b/test/SemaCXX/statements.cpp @@ -30,3 +30,7 @@ void test4(int) { // expected-note{{possible target for call}} // expected-error@+1{{overloaded function could not be resolved}} __asm__ ("":"+r" (test4)); // expected-error{{invalid lvalue in asm output}} } +void test5() { + char buf[1]; + __asm__ ("":"+r" (buf)); +}