r224918 - Sema: Permit array l-values in asm output operands
David Majnemer
david.majnemer at gmail.com
Mon Dec 29 02:29:53 PST 2014
Author: majnemer
Date: Mon Dec 29 04:29:53 2014
New Revision: 224918
URL: http://llvm.org/viewvc/llvm-project?rev=224918&view=rev
Log:
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.
Modified:
cfe/trunk/lib/Sema/SemaStmtAsm.cpp
cfe/trunk/test/SemaCXX/statements.cpp
Modified: cfe/trunk/lib/Sema/SemaStmtAsm.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmtAsm.cpp?rev=224918&r1=224917&r2=224918&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmtAsm.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmtAsm.cpp Mon Dec 29 04:29:53 2014
@@ -156,6 +156,9 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceL
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) {
Modified: cfe/trunk/test/SemaCXX/statements.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/statements.cpp?rev=224918&r1=224917&r2=224918&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/statements.cpp (original)
+++ cfe/trunk/test/SemaCXX/statements.cpp Mon Dec 29 04:29:53 2014
@@ -30,3 +30,7 @@ void test4(int) { // expected
// expected-error at +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));
+}
More information about the cfe-commits
mailing list