From 84037d3d0a1592237a9cb9f578baf93559d3ef55 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 23 Jul 2011 20:04:25 +0000 Subject: [PATCH] fix PR10415, tidying up IR representation of module level inline asm to avoid extraneous \n's. llvm-svn: 135862 --- clang/lib/CodeGen/CodeGenModule.cpp | 2 ++ clang/test/CodeGen/asm.c | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index a4fce926ec25..d7b6c7ec3df3 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 7199f09e1a3c..a2d56c84f464 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)); }