diff options
Diffstat (limited to 'llvm/lib/Support/MemoryBuffer.cpp')
-rw-r--r-- | llvm/lib/Support/MemoryBuffer.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index e4027ca..e467daf 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -162,6 +162,20 @@ MemoryBuffer::getFileSlice(const Twine &FilePath, uint64_t MapSize, //===----------------------------------------------------------------------===// namespace { + +template <typename MB> +constexpr sys::fs::mapped_file_region::mapmode Mapmode = + sys::fs::mapped_file_region::readonly; +template <> +constexpr sys::fs::mapped_file_region::mapmode Mapmode<MemoryBuffer> = + sys::fs::mapped_file_region::readonly; +template <> +constexpr sys::fs::mapped_file_region::mapmode Mapmode<WritableMemoryBuffer> = + sys::fs::mapped_file_region::priv; +template <> +constexpr sys::fs::mapped_file_region::mapmode + Mapmode<WriteThroughMemoryBuffer> = sys::fs::mapped_file_region::readwrite; + /// Memory maps a file descriptor using sys::fs::mapped_file_region. /// /// This handles converting the offset into a legal offset on the platform. @@ -184,7 +198,7 @@ class MemoryBufferMMapFile : public MB { public: MemoryBufferMMapFile(bool RequiresNullTerminator, sys::fs::file_t FD, uint64_t Len, uint64_t Offset, std::error_code &EC) - : MFR(FD, MB::Mapmode, getLegalMapSize(Len, Offset), + : MFR(FD, Mapmode<MB>, getLegalMapSize(Len, Offset), getLegalMapOffset(Offset), EC) { if (!EC) { const char *Start = getStart(Len, Offset); |