diff options
author | Richard Trieu <rtrieu@google.com> | 2018-12-12 02:53:59 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2018-12-12 02:53:59 +0000 |
commit | f3b0046ba9de24fe9a77260b47a6bfa6cb1ac02a (patch) | |
tree | 89a4d218669f8c2993d7f6906adae23c34863478 /clang | |
parent | cc419ad7df2b90d07b7e36244cc24269be9435d8 (diff) | |
download | bcm5719-llvm-f3b0046ba9de24fe9a77260b47a6bfa6cb1ac02a.tar.gz bcm5719-llvm-f3b0046ba9de24fe9a77260b47a6bfa6cb1ac02a.zip |
Move PCHContainerOperations from Frontend to Serialization
Fix a layering violation. Frontend depends on Serialization, so anything used
by both should be in Serialization.
llvm-svn: 348907
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Frontend/PCHContainerOperations.h | 104 | ||||
-rw-r--r-- | clang/include/clang/Serialization/ASTWriter.h | 2 | ||||
-rw-r--r-- | clang/include/clang/Serialization/PCHContainerOperations.h | 117 | ||||
-rw-r--r-- | clang/include/clang/module.modulemap | 3 | ||||
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Frontend/CMakeLists.txt | 1 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/CMakeLists.txt | 1 | ||||
-rw-r--r-- | clang/lib/Serialization/GlobalModuleIndex.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/ModuleManager.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/PCHContainerOperations.cpp (renamed from clang/lib/Frontend/PCHContainerOperations.cpp) | 4 |
11 files changed, 126 insertions, 114 deletions
diff --git a/clang/include/clang/Frontend/PCHContainerOperations.h b/clang/include/clang/Frontend/PCHContainerOperations.h index 63d35e154b4..675efbaf56e 100644 --- a/clang/include/clang/Frontend/PCHContainerOperations.h +++ b/clang/include/clang/Frontend/PCHContainerOperations.h @@ -10,108 +10,6 @@ #ifndef LLVM_CLANG_PCH_CONTAINER_OPERATIONS_H #define LLVM_CLANG_PCH_CONTAINER_OPERATIONS_H -#include "clang/Basic/Module.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/StringMap.h" -#include "llvm/Support/MemoryBuffer.h" -#include <memory> - -namespace llvm { -class raw_pwrite_stream; -} - -namespace clang { - -class ASTConsumer; -class CodeGenOptions; -class DiagnosticsEngine; -class CompilerInstance; - -struct PCHBuffer { - ASTFileSignature Signature; - llvm::SmallVector<char, 0> Data; - bool IsComplete; -}; - -/// This abstract interface provides operations for creating -/// containers for serialized ASTs (precompiled headers and clang -/// modules). -class PCHContainerWriter { -public: - virtual ~PCHContainerWriter() = 0; - virtual llvm::StringRef getFormat() const = 0; - - /// Return an ASTConsumer that can be chained with a - /// PCHGenerator that produces a wrapper file format containing a - /// serialized AST bitstream. - virtual std::unique_ptr<ASTConsumer> - CreatePCHContainerGenerator(CompilerInstance &CI, - const std::string &MainFileName, - const std::string &OutputFileName, - std::unique_ptr<llvm::raw_pwrite_stream> OS, - std::shared_ptr<PCHBuffer> Buffer) const = 0; -}; - -/// This abstract interface provides operations for unwrapping -/// containers for serialized ASTs (precompiled headers and clang -/// modules). -class PCHContainerReader { -public: - virtual ~PCHContainerReader() = 0; - /// Equivalent to the format passed to -fmodule-format= - virtual llvm::StringRef getFormat() const = 0; - - /// Returns the serialized AST inside the PCH container Buffer. - virtual llvm::StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const = 0; -}; - -/// Implements write operations for a raw pass-through PCH container. -class RawPCHContainerWriter : public PCHContainerWriter { - llvm::StringRef getFormat() const override { return "raw"; } - - /// Return an ASTConsumer that can be chained with a - /// PCHGenerator that writes the module to a flat file. - std::unique_ptr<ASTConsumer> - CreatePCHContainerGenerator(CompilerInstance &CI, - const std::string &MainFileName, - const std::string &OutputFileName, - std::unique_ptr<llvm::raw_pwrite_stream> OS, - std::shared_ptr<PCHBuffer> Buffer) const override; -}; - -/// Implements read operations for a raw pass-through PCH container. -class RawPCHContainerReader : public PCHContainerReader { - llvm::StringRef getFormat() const override { return "raw"; } - - /// Simply returns the buffer contained in Buffer. - llvm::StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const override; -}; - -/// A registry of PCHContainerWriter and -Reader objects for different formats. -class PCHContainerOperations { - llvm::StringMap<std::unique_ptr<PCHContainerWriter>> Writers; - llvm::StringMap<std::unique_ptr<PCHContainerReader>> Readers; -public: - /// Automatically registers a RawPCHContainerWriter and - /// RawPCHContainerReader. - PCHContainerOperations(); - void registerWriter(std::unique_ptr<PCHContainerWriter> Writer) { - Writers[Writer->getFormat()] = std::move(Writer); - } - void registerReader(std::unique_ptr<PCHContainerReader> Reader) { - Readers[Reader->getFormat()] = std::move(Reader); - } - const PCHContainerWriter *getWriterOrNull(llvm::StringRef Format) { - return Writers[Format].get(); - } - const PCHContainerReader *getReaderOrNull(llvm::StringRef Format) { - return Readers[Format].get(); - } - const PCHContainerReader &getRawReader() { - return *getReaderOrNull("raw"); - } -}; - -} +#include "clang/Serialization/PCHContainerOperations.h" #endif diff --git a/clang/include/clang/Serialization/ASTWriter.h b/clang/include/clang/Serialization/ASTWriter.h index da8b10a3f44..11af30ac837 100644 --- a/clang/include/clang/Serialization/ASTWriter.h +++ b/clang/include/clang/Serialization/ASTWriter.h @@ -26,10 +26,10 @@ #include "clang/AST/TypeLoc.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Sema/SemaConsumer.h" #include "clang/Serialization/ASTBitCodes.h" #include "clang/Serialization/ASTDeserializationListener.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseSet.h" diff --git a/clang/include/clang/Serialization/PCHContainerOperations.h b/clang/include/clang/Serialization/PCHContainerOperations.h new file mode 100644 index 00000000000..2a91d9830af --- /dev/null +++ b/clang/include/clang/Serialization/PCHContainerOperations.h @@ -0,0 +1,117 @@ +//===--- Serialization/PCHContainerOperations.h - PCH Containers --*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_SERIALIZATION_PCHCONTAINEROPERATIONS_H +#define LLVM_CLANG_SERIALIZATION_PCHCONTAINEROPERATIONS_H + +#include "clang/Basic/Module.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringMap.h" +#include "llvm/Support/MemoryBuffer.h" +#include <memory> + +namespace llvm { +class raw_pwrite_stream; +} + +namespace clang { + +class ASTConsumer; +class CodeGenOptions; +class DiagnosticsEngine; +class CompilerInstance; + +struct PCHBuffer { + ASTFileSignature Signature; + llvm::SmallVector<char, 0> Data; + bool IsComplete; +}; + +/// This abstract interface provides operations for creating +/// containers for serialized ASTs (precompiled headers and clang +/// modules). +class PCHContainerWriter { +public: + virtual ~PCHContainerWriter() = 0; + virtual llvm::StringRef getFormat() const = 0; + + /// Return an ASTConsumer that can be chained with a + /// PCHGenerator that produces a wrapper file format containing a + /// serialized AST bitstream. + virtual std::unique_ptr<ASTConsumer> + CreatePCHContainerGenerator(CompilerInstance &CI, + const std::string &MainFileName, + const std::string &OutputFileName, + std::unique_ptr<llvm::raw_pwrite_stream> OS, + std::shared_ptr<PCHBuffer> Buffer) const = 0; +}; + +/// This abstract interface provides operations for unwrapping +/// containers for serialized ASTs (precompiled headers and clang +/// modules). +class PCHContainerReader { +public: + virtual ~PCHContainerReader() = 0; + /// Equivalent to the format passed to -fmodule-format= + virtual llvm::StringRef getFormat() const = 0; + + /// Returns the serialized AST inside the PCH container Buffer. + virtual llvm::StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const = 0; +}; + +/// Implements write operations for a raw pass-through PCH container. +class RawPCHContainerWriter : public PCHContainerWriter { + llvm::StringRef getFormat() const override { return "raw"; } + + /// Return an ASTConsumer that can be chained with a + /// PCHGenerator that writes the module to a flat file. + std::unique_ptr<ASTConsumer> + CreatePCHContainerGenerator(CompilerInstance &CI, + const std::string &MainFileName, + const std::string &OutputFileName, + std::unique_ptr<llvm::raw_pwrite_stream> OS, + std::shared_ptr<PCHBuffer> Buffer) const override; +}; + +/// Implements read operations for a raw pass-through PCH container. +class RawPCHContainerReader : public PCHContainerReader { + llvm::StringRef getFormat() const override { return "raw"; } + + /// Simply returns the buffer contained in Buffer. + llvm::StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const override; +}; + +/// A registry of PCHContainerWriter and -Reader objects for different formats. +class PCHContainerOperations { + llvm::StringMap<std::unique_ptr<PCHContainerWriter>> Writers; + llvm::StringMap<std::unique_ptr<PCHContainerReader>> Readers; +public: + /// Automatically registers a RawPCHContainerWriter and + /// RawPCHContainerReader. + PCHContainerOperations(); + void registerWriter(std::unique_ptr<PCHContainerWriter> Writer) { + Writers[Writer->getFormat()] = std::move(Writer); + } + void registerReader(std::unique_ptr<PCHContainerReader> Reader) { + Readers[Reader->getFormat()] = std::move(Reader); + } + const PCHContainerWriter *getWriterOrNull(llvm::StringRef Format) { + return Writers[Format].get(); + } + const PCHContainerReader *getReaderOrNull(llvm::StringRef Format) { + return Readers[Format].get(); + } + const PCHContainerReader &getRawReader() { + return *getReaderOrNull("raw"); + } +}; + +} + +#endif diff --git a/clang/include/clang/module.modulemap b/clang/include/clang/module.modulemap index 1f6eacca1fe..cbcb62e214b 100644 --- a/clang/include/clang/module.modulemap +++ b/clang/include/clang/module.modulemap @@ -103,9 +103,6 @@ module Clang_Frontend { textual header "Frontend/LangStandards.def" module * { export * } - - // FIXME: This violates layers. - exclude header "Frontend/PCHContainerOperations.h" } module Clang_FrontendTool { requires cplusplus umbrella "FrontendTool" module * { export * } } diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 05e47afcd96..c7b2551cb8d 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -44,7 +44,6 @@ #include "clang/Frontend/FrontendDiagnostic.h" #include "clang/Frontend/FrontendOptions.h" #include "clang/Frontend/MultiplexConsumer.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Frontend/PrecompiledPreamble.h" #include "clang/Frontend/Utils.h" #include "clang/Lex/HeaderSearch.h" @@ -63,6 +62,7 @@ #include "clang/Serialization/ASTWriter.h" #include "clang/Serialization/ContinuousRangeMap.h" #include "clang/Serialization/Module.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" diff --git a/clang/lib/Frontend/CMakeLists.txt b/clang/lib/Frontend/CMakeLists.txt index a207ccc5c9f..3bd159537b6 100644 --- a/clang/lib/Frontend/CMakeLists.txt +++ b/clang/lib/Frontend/CMakeLists.txt @@ -36,7 +36,6 @@ add_clang_library(clangFrontend LogDiagnosticPrinter.cpp ModuleDependencyCollector.cpp MultiplexConsumer.cpp - PCHContainerOperations.cpp PrecompiledPreamble.cpp PrintPreprocessedOutput.cpp SerializedDiagnosticPrinter.cpp diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 0147e3aae72..67ab6019013 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -61,7 +61,6 @@ #include "clang/Basic/TargetOptions.h" #include "clang/Basic/TokenKinds.h" #include "clang/Basic/Version.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/HeaderSearchOptions.h" #include "clang/Lex/MacroInfo.h" @@ -81,6 +80,7 @@ #include "clang/Serialization/Module.h" #include "clang/Serialization/ModuleFileExtension.h" #include "clang/Serialization/ModuleManager.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "clang/Serialization/SerializationDiagnostic.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" diff --git a/clang/lib/Serialization/CMakeLists.txt b/clang/lib/Serialization/CMakeLists.txt index 95b33c388c5..a312cb91eb0 100644 --- a/clang/lib/Serialization/CMakeLists.txt +++ b/clang/lib/Serialization/CMakeLists.txt @@ -17,6 +17,7 @@ add_clang_library(clangSerialization Module.cpp ModuleFileExtension.cpp ModuleManager.cpp + PCHContainerOperations.cpp ADDITIONAL_HEADERS ASTCommon.h diff --git a/clang/lib/Serialization/GlobalModuleIndex.cpp b/clang/lib/Serialization/GlobalModuleIndex.cpp index 3733638d297..e7642a38924 100644 --- a/clang/lib/Serialization/GlobalModuleIndex.cpp +++ b/clang/lib/Serialization/GlobalModuleIndex.cpp @@ -12,12 +12,12 @@ //===----------------------------------------------------------------------===// #include "ASTReaderInternals.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Basic/FileManager.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Serialization/ASTBitCodes.h" #include "clang/Serialization/GlobalModuleIndex.h" #include "clang/Serialization/Module.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/MapVector.h" #include "llvm/ADT/SmallString.h" diff --git a/clang/lib/Serialization/ModuleManager.cpp b/clang/lib/Serialization/ModuleManager.cpp index 683ba8f9e6c..54e0c08c5bc 100644 --- a/clang/lib/Serialization/ModuleManager.cpp +++ b/clang/lib/Serialization/ModuleManager.cpp @@ -16,11 +16,11 @@ #include "clang/Basic/FileManager.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/MemoryBufferCache.h" -#include "clang/Frontend/PCHContainerOperations.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/ModuleMap.h" #include "clang/Serialization/GlobalModuleIndex.h" #include "clang/Serialization/Module.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallPtrSet.h" diff --git a/clang/lib/Frontend/PCHContainerOperations.cpp b/clang/lib/Serialization/PCHContainerOperations.cpp index 340e8ce63ff..fbc613efeb6 100644 --- a/clang/lib/Frontend/PCHContainerOperations.cpp +++ b/clang/lib/Serialization/PCHContainerOperations.cpp @@ -1,4 +1,4 @@ -//===--- Frontend/PCHContainerOperations.cpp - PCH Containers ---*- C++ -*-===// +//=== Serialization/PCHContainerOperations.cpp - PCH Containers -*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "clang/Frontend/PCHContainerOperations.h" +#include "clang/Serialization/PCHContainerOperations.h" #include "clang/AST/ASTConsumer.h" #include "clang/Lex/ModuleLoader.h" #include "llvm/Bitcode/BitstreamReader.h" |