diff --git a/flang/lib/Parser/source.cpp b/flang/lib/Parser/source.cpp --- a/flang/lib/Parser/source.cpp +++ b/flang/lib/Parser/source.cpp @@ -133,6 +133,18 @@ buf_->getBuffer()[0] = '\n'; } buf_end_ = RemoveCarriageReturns(buf_->getBuffer()); + if (content().back() != '\n') { + // Don't bother to copy if we have spare memory + if (content().size() >= buf_->getBufferSize()) { + auto tmp_buf = llvm::WritableMemoryBuffer::getNewUninitMemBuffer( + content().size() + 1); + llvm::copy(content(), tmp_buf->getBufferStart()); + Close(); + buf_ = std::move(tmp_buf); + } + buf_end_++; + buf_->getBuffer()[buf_end_ - 1] = '\n'; + } IdentifyPayload(); RecordLineStarts(); }