From b5500b9ca0102f1ccaf32f0e77e96d0739aded9b Mon Sep 17 00:00:00 2001 From: pascal Date: Sat, 3 Sep 2016 22:46:54 +0000 Subject: Use the space freed up by sparc and zaurus to import LLVM. ok hackroom@ --- .../clang/lib/Frontend/PCHContainerOperations.cpp | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 gnu/llvm/tools/clang/lib/Frontend/PCHContainerOperations.cpp (limited to 'gnu/llvm/tools/clang/lib/Frontend/PCHContainerOperations.cpp') diff --git a/gnu/llvm/tools/clang/lib/Frontend/PCHContainerOperations.cpp b/gnu/llvm/tools/clang/lib/Frontend/PCHContainerOperations.cpp new file mode 100644 index 00000000000..5e1d7720509 --- /dev/null +++ b/gnu/llvm/tools/clang/lib/Frontend/PCHContainerOperations.cpp @@ -0,0 +1,66 @@ +//===--- Frontend/PCHContainerOperations.cpp - PCH Containers ---*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines PCHContainerOperations and RawPCHContainerOperation. +// +//===----------------------------------------------------------------------===// + +#include "clang/Frontend/PCHContainerOperations.h" +#include "clang/AST/ASTConsumer.h" +#include "llvm/Bitcode/BitstreamReader.h" +#include "llvm/Support/raw_ostream.h" +#include "clang/Lex/ModuleLoader.h" + +using namespace clang; + +namespace { + +/// \brief A PCHContainerGenerator that writes out the PCH to a flat file. +class RawPCHContainerGenerator : public ASTConsumer { + std::shared_ptr Buffer; + raw_pwrite_stream *OS; + +public: + RawPCHContainerGenerator(llvm::raw_pwrite_stream *OS, + std::shared_ptr Buffer) + : Buffer(Buffer), OS(OS) {} + + ~RawPCHContainerGenerator() override = default; + + void HandleTranslationUnit(ASTContext &Ctx) override { + if (Buffer->IsComplete) { + // Make sure it hits disk now. + *OS << Buffer->Data; + OS->flush(); + } + // Free the space of the temporary buffer. + llvm::SmallVector Empty; + Buffer->Data = std::move(Empty); + } +}; + +} // anonymous namespace + +std::unique_ptr RawPCHContainerWriter::CreatePCHContainerGenerator( + CompilerInstance &CI, const std::string &MainFileName, + const std::string &OutputFileName, llvm::raw_pwrite_stream *OS, + std::shared_ptr Buffer) const { + return llvm::make_unique(OS, Buffer); +} + +void RawPCHContainerReader::ExtractPCH( + llvm::MemoryBufferRef Buffer, llvm::BitstreamReader &StreamFile) const { + StreamFile.init((const unsigned char *)Buffer.getBufferStart(), + (const unsigned char *)Buffer.getBufferEnd()); +} + +PCHContainerOperations::PCHContainerOperations() { + registerWriter(llvm::make_unique()); + registerReader(llvm::make_unique()); +} -- cgit v1.2.3-59-g8ed1b