summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-07-23 20:04:25 +0000
committerChris Lattner <sabre@nondot.org>2011-07-23 20:04:25 +0000
commit84037d3d0a1592237a9cb9f578baf93559d3ef55 (patch)
tree95e8f68ef239da0077151db4325cb723da1f6888 /clang
parent2a843827a29c9d52dba5a4566a03b07cf8554274 (diff)
downloadbcm5719-llvm-84037d3d0a1592237a9cb9f578baf93559d3ef55.tar.gz
bcm5719-llvm-84037d3d0a1592237a9cb9f578baf93559d3ef55.zip
fix PR10415, tidying up IR representation of module level inline asm
to avoid extraneous \n's. llvm-svn: 135862
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp2
-rw-r--r--clang/test/CodeGen/asm.c9
2 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index a4fce926ec2..d7b6c7ec3df 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -2186,6 +2186,8 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) {
const std::string &S = getModule().getModuleInlineAsm();
if (S.empty())
getModule().setModuleInlineAsm(AsmString);
+ else if (*--S.end() == '\n')
+ getModule().setModuleInlineAsm(S + AsmString.str());
else
getModule().setModuleInlineAsm(S + '\n' + AsmString.str());
break;
diff --git a/clang/test/CodeGen/asm.c b/clang/test/CodeGen/asm.c
index 7199f09e1a3..a2d56c84f46 100644
--- a/clang/test/CodeGen/asm.c
+++ b/clang/test/CodeGen/asm.c
@@ -1,4 +1,13 @@
// RUN: %clang_cc1 -triple i386-unknown-unknown -emit-llvm %s -o - | FileCheck %s
+
+// PR10415
+__asm__ ("foo1");
+__asm__ ("foo2");
+__asm__ ("foo3");
+// CHECK: module asm "foo1"
+// CHECK-NEXT: module asm "foo2"
+// CHECK-NEXT: module asm "foo3"
+
void t1(int len) {
__asm__ volatile("" : "=&r"(len), "+&r"(len));
}
OpenPOWER on IntegriCloud