Inline Asm: Ensure buffer is newline terminated to match how the text is printed.

- This is a hack, but I can't decide the best place to handle this. Chris?

llvm-svn: 103765
This commit is contained in:
Daniel Dunbar 2010-05-14 04:31:50 +00:00
parent ceb5a7ada2
commit 3439ed6324
2 changed files with 20 additions and 0 deletions

View File

@ -53,6 +53,17 @@ void AsmPrinter::EmitInlineAsm(StringRef Str, unsigned LocCookie) const {
}
SourceMgr SrcMgr;
// Ensure the buffer is newline terminated.
char *TmpString = 0;
if (Str.back() != '\n') {
TmpString = new char[Str.size() + 2];
memcpy(TmpString, Str.data(), Str.size());
TmpString[Str.size()] = '\n';
TmpString[Str.size() + 1] = 0;
isNullTerminated = true;
Str = TmpString;
}
// If the current LLVMContext has an inline asm handler, set it in SourceMgr.
LLVMContext &LLVMCtx = MMI->getModule()->getContext();
@ -84,6 +95,9 @@ void AsmPrinter::EmitInlineAsm(StringRef Str, unsigned LocCookie) const {
/*NoFinalize*/ true);
if (Res && !HasDiagHandler)
report_fatal_error("Error parsing inline asm\n");
if (TmpString)
delete[] TmpString;
}

View File

@ -0,0 +1,6 @@
; RUN: llc -filetype=obj -o - < %s
; ModuleID = 't.c'
target triple = "x86_64-apple-darwin10.0.0"
module asm ".desc _f0, 0x10"