diff --git a/llvm/lib/MC/MCParser/AsmLexer.cpp b/llvm/lib/MC/MCParser/AsmLexer.cpp --- a/llvm/lib/MC/MCParser/AsmLexer.cpp +++ b/llvm/lib/MC/MCParser/AsmLexer.cpp @@ -715,7 +715,7 @@ if (CurChar == EOF && !IsAtStartOfStatement && EndStatementAtEOF) { IsAtStartOfLine = true; IsAtStartOfStatement = true; - return AsmToken(AsmToken::EndOfStatement, StringRef(TokStart, 1)); + return AsmToken(AsmToken::EndOfStatement, StringRef(TokStart, 0)); } IsAtStartOfLine = false; bool OldIsAtStartOfStatement = IsAtStartOfStatement; diff --git a/llvm/test/MC/AsmParser/Inputs/no-newline-at-end-of-file.s b/llvm/test/MC/AsmParser/Inputs/no-newline-at-end-of-file.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/AsmParser/Inputs/no-newline-at-end-of-file.s @@ -0,0 +1 @@ +.text \ No newline at end of file diff --git a/llvm/test/MC/AsmParser/preserve-comments.s b/llvm/test/MC/AsmParser/preserve-comments.s --- a/llvm/test/MC/AsmParser/preserve-comments.s +++ b/llvm/test/MC/AsmParser/preserve-comments.s @@ -1,5 +1,6 @@ #RUN: llvm-mc -preserve-comments -n -triple i386-linux-gnu < %s > %t #RUN: diff -b %s %t + #RUN: llvm-mc -preserve-comments -n -triple i386-linux-gnu < %p/Inputs/no-newline-at-end-of-file.s | FileCheck %s .text foo: #Comment here @@ -11,3 +12,6 @@ #endif .ident "clang version 3.9.0" .section ".note.GNU-stack","",@progbits + + #Confirm we don't crash on inputs without a terminating newline. + #CHECK: .text