diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-07-14 16:27:53 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-07-14 16:27:53 +0000 |
commit | ade4bee7618a7697292991e060577968532e6bd0 (patch) | |
tree | d6fe670ca16e89a3237c900dc279c378f270753a /clang/lib | |
parent | 8f6b04cb57c5fa127c1d50cb87078852f25ae5c2 (diff) | |
download | bcm5719-llvm-ade4bee7618a7697292991e060577968532e6bd0.tar.gz bcm5719-llvm-ade4bee7618a7697292991e060577968532e6bd0.zip |
CodeGen: Let arrays be inputs to inline asm
An array showing up in an inline assembly input is accepted in ICC and
GCC 4.8
This fixes PR20201.
Differential Revision: http://reviews.llvm.org/D4382
llvm-svn: 212954
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaStmtAsm.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaStmtAsm.cpp b/clang/lib/Sema/SemaStmtAsm.cpp index fdab947a477..5d076cac940 100644 --- a/clang/lib/Sema/SemaStmtAsm.cpp +++ b/clang/lib/Sema/SemaStmtAsm.cpp @@ -152,6 +152,12 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, diag::err_asm_invalid_lvalue_in_input) << Info.getConstraintStr() << InputExpr->getSourceRange()); + } else { + ExprResult Result = DefaultFunctionArrayLvalueConversion(Exprs[i]); + if (Result.isInvalid()) + return StmtError(); + + Exprs[i] = Result.get(); } if (Info.allowsRegister()) { @@ -163,11 +169,6 @@ StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, } } - ExprResult Result = DefaultFunctionArrayLvalueConversion(Exprs[i]); - if (Result.isInvalid()) - return StmtError(); - - Exprs[i] = Result.get(); InputConstraintInfos.push_back(Info); const Type *Ty = Exprs[i]->getType().getTypePtr(); |