diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-01-11 19:46:50 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-01-11 19:46:50 +0000 |
| commit | a948c34b0b0b492fc7ef082cb16d8d14b25317c6 (patch) | |
| tree | 9685b1ba9a8a7356c81435ee5ff283a82992e91b | |
| parent | 03aaf11502f6f042db59cd3b444112c72572330f (diff) | |
| download | bcm5719-llvm-a948c34b0b0b492fc7ef082cb16d8d14b25317c6.tar.gz bcm5719-llvm-a948c34b0b0b492fc7ef082cb16d8d14b25317c6.zip | |
Handle readwrite constraints correctly
llvm-svn: 62043
| -rw-r--r-- | clang/lib/CodeGen/CGStmt.cpp | 3 | ||||
| -rw-r--r-- | clang/test/CodeGen/asm.c | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index 8d80a498b45..bee40e5c28b 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -944,9 +944,10 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) { const Expr *InputExpr = S.getOutputExpr(i); llvm::Value *Arg = EmitAsmInput(S, Info, InputExpr, InOutConstraints); + InOutConstraints += llvm::utostr(Args.size()); + InOutArgTypes.push_back(Arg->getType()); InOutArgs.push_back(Arg); - InOutConstraints += OutputConstraint; } } diff --git a/clang/test/CodeGen/asm.c b/clang/test/CodeGen/asm.c new file mode 100644 index 00000000000..d6fbf774081 --- /dev/null +++ b/clang/test/CodeGen/asm.c @@ -0,0 +1,5 @@ +// RUN: clang %s -arch=i386 -verify -fsyntax-only +void f(int len) +{ + __asm__ volatile("" :"=&r"(len), "+&r"(len)); +} |

