diff options
-rw-r--r-- | CodeGen/CGStmt.cpp | 4 | ||||
-rw-r--r-- | test/CodeGen/2008-02-26-inline-asm-bug.c | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/CodeGen/CGStmt.cpp b/CodeGen/CGStmt.cpp index 0da91dabe6..5fdc61b46f 100644 --- a/CodeGen/CGStmt.cpp +++ b/CodeGen/CGStmt.cpp @@ -569,7 +569,7 @@ static inline std::string ConvertAsmString(const char *Start, } Result += '$' + llvm::utostr(n); - Start = End; + Start = End - 1; } else if (isalpha(EscapedChar)) { char *End; @@ -583,7 +583,7 @@ static inline std::string ConvertAsmString(const char *Start, } Result += "${" + llvm::utostr(n) + ':' + EscapedChar + '}'; - Start = End; + Start = End - 1; } else { assert(0 && "Unhandled asm escaped character!"); } diff --git a/test/CodeGen/2008-02-26-inline-asm-bug.c b/test/CodeGen/2008-02-26-inline-asm-bug.c new file mode 100644 index 0000000000..668b06c0d1 --- /dev/null +++ b/test/CodeGen/2008-02-26-inline-asm-bug.c @@ -0,0 +1,6 @@ +// RUN: clang -emit-llvm < %s | grep "\$0,\$1" + +void f() { + int d1, d2; + asm("%0,%1": "=r" (d1) : "r" (d2)); +} |