r242499 - Make the clang module container format selectable from the command line.
Richard Smith
richard at metafoo.co.uk
Fri Jul 17 13:09:09 PDT 2015
Approved.
On Fri, Jul 17, 2015 at 9:11 AM, Adrian Prantl <aprantl at apple.com> wrote:
> I would recommend taking this commit into the 3.7 branch. It removes a
> dependency on CodeGen from clang-check and libclang and thus reduces the
> size of the derived binaries significantly.
>
> -- adrian
>
> > On Jul 16, 2015, at 6:19 PM, Adrian Prantl <aprantl at apple.com> wrote:
> >
> > Author: adrian
> > Date: Thu Jul 16 20:19:54 2015
> > New Revision: 242499
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=242499&view=rev
> > Log:
> > Make the clang module container format selectable from the command line.
> > - introduces a new cc1 option -fmodule-format=[raw,obj]
> > with 'raw' being the default
> > - supports arbitrary module container formats that libclang is agnostic
> to
> > - adds the format to the module hash to avoid collisions
> > - splits the old PCHContainerOperations into PCHContainerWriter and
> > a PCHContainerReader.
> >
> > Thanks to Richard Smith for reviewing this patch!
> >
> > Modified:
> > cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td
> > cfe/trunk/include/clang/CodeGen/ObjectFilePCHContainerOperations.h
> > cfe/trunk/include/clang/Driver/CC1Options.td
> > cfe/trunk/include/clang/Frontend/ASTUnit.h
> > cfe/trunk/include/clang/Frontend/CompilerInstance.h
> > cfe/trunk/include/clang/Frontend/PCHContainerOperations.h
> > cfe/trunk/include/clang/Frontend/Utils.h
> > cfe/trunk/include/clang/Lex/HeaderSearchOptions.h
> > cfe/trunk/include/clang/Serialization/ASTReader.h
> > cfe/trunk/include/clang/Serialization/GlobalModuleIndex.h
> > cfe/trunk/include/clang/Serialization/ModuleManager.h
> > cfe/trunk/include/clang/Tooling/Refactoring.h
> > cfe/trunk/include/clang/Tooling/Tooling.h
> > cfe/trunk/lib/ARCMigrate/ARCMT.cpp
> > cfe/trunk/lib/Basic/FileManager.cpp
> > cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
> > cfe/trunk/lib/Frontend/ASTMerge.cpp
> > cfe/trunk/lib/Frontend/ASTUnit.cpp
> > cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp
> > cfe/trunk/lib/Frontend/CompilerInstance.cpp
> > cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> > cfe/trunk/lib/Frontend/FrontendAction.cpp
> > cfe/trunk/lib/Frontend/FrontendActions.cpp
> > cfe/trunk/lib/Frontend/InitPreprocessor.cpp
> > cfe/trunk/lib/Frontend/PCHContainerOperations.cpp
> > cfe/trunk/lib/Lex/HeaderSearch.cpp
> > cfe/trunk/lib/Serialization/ASTReader.cpp
> > cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp
> > cfe/trunk/lib/Serialization/ModuleManager.cpp
> > cfe/trunk/test/Modules/pch_container.m
> > cfe/trunk/tools/arcmt-test/arcmt-test.cpp
> > cfe/trunk/tools/clang-check/CMakeLists.txt
> > cfe/trunk/tools/clang-check/ClangCheck.cpp
> > cfe/trunk/tools/driver/cc1_main.cpp
> > cfe/trunk/tools/libclang/CIndex.cpp
> > cfe/trunk/tools/libclang/CIndexer.h
> > cfe/trunk/tools/libclang/CMakeLists.txt
> > cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h
> >
> > Modified: cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td (original)
> > +++ cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td Thu Jul 16
> 20:19:54 2015
> > @@ -195,6 +195,8 @@ def err_unable_to_make_temp : Error<
> >
> > // Modules
> > def err_module_file_conflict : Error<"module '%0' found in both '%1' and
> '%2'">;
> > +def err_module_format_unhandled : Error<
> > + "no handler registered for module format '%0'">;
> >
> > // TransformActions
> > // TODO: Use a custom category name to distinguish rewriter errors.
> >
> > Modified:
> cfe/trunk/include/clang/CodeGen/ObjectFilePCHContainerOperations.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/ObjectFilePCHContainerOperations.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/CodeGen/ObjectFilePCHContainerOperations.h
> (original)
> > +++ cfe/trunk/include/clang/CodeGen/ObjectFilePCHContainerOperations.h
> Thu Jul 16 20:19:54 2015
> > @@ -14,30 +14,32 @@
> >
> > namespace clang {
> >
> > -/// \brief A PCHContainerOperations implementation that uses LLVM to
> > +/// A PCHContainerWriter implementation that uses LLVM to
> > /// wraps Clang modules inside a COFF, ELF, or Mach-O container.
> > -class ObjectFilePCHContainerOperations
> > - : public PCHContainerOperations {
> > - /// \brief Return an ASTConsumer that can be chained with a
> > +class ObjectFilePCHContainerWriter : public PCHContainerWriter {
> > + StringRef getFormat() const override { return "obj"; }
> > +
> > + /// Return an ASTConsumer that can be chained with a
> > /// PCHGenerator that produces a wrapper file format
> > /// that also contains full debug info for the module.
> > - std::unique_ptr<ASTConsumer>
> > - CreatePCHContainerGenerator(
> > + std::unique_ptr<ASTConsumer> CreatePCHContainerGenerator(
> > DiagnosticsEngine &Diags, const HeaderSearchOptions &HSO,
> > const PreprocessorOptions &PPO, const TargetOptions &TO,
> > const LangOptions &LO, const std::string &MainFileName,
> > const std::string &OutputFileName, llvm::raw_pwrite_stream *OS,
> > std::shared_ptr<PCHBuffer> Buffer) const override;
> > +};
> > +
> > +/// A PCHContainerReader implementation that uses LLVM to
> > +/// wraps Clang modules inside a COFF, ELF, or Mach-O container.
> > +class ObjectFilePCHContainerReader : public PCHContainerReader {
> > + StringRef getFormat() const override { return "obj"; }
> >
> > - /// \brief Initialize an llvm::BitstreamReader with the serialized
> > + /// Initialize an llvm::BitstreamReader with the serialized
> > /// AST inside the PCH container Buffer.
> > void ExtractPCH(llvm::MemoryBufferRef Buffer,
> > llvm::BitstreamReader &StreamFile) const override;
> > -
> > -
> > };
> > -
> > }
> >
> > -
> > #endif
> >
> > Modified: cfe/trunk/include/clang/Driver/CC1Options.td
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Driver/CC1Options.td (original)
> > +++ cfe/trunk/include/clang/Driver/CC1Options.td Thu Jul 16 20:19:54 2015
> > @@ -369,6 +369,9 @@ def fmodules_local_submodule_visibility
> > Flag<["-"], "fmodules-local-submodule-visibility">,
> > HelpText<"Enforce name visibility rules across submodules of the same "
> > "top-level module.">;
> > +def fmodule_format_EQ : Joined<["-"], "fmodule-format=">,
> > + HelpText<"Select the container format for clang modules and PCH. "
> > + "Supported options are 'raw' and 'obj'.">;
> > def fno_modules_hide_internal_linkage :
> > Flag<["-"], "fno-modules-hide-internal-linkage">,
> > HelpText<"Make all declarations visible to redeclaration lookup, "
> >
> > Modified: cfe/trunk/include/clang/Frontend/ASTUnit.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTUnit.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Frontend/ASTUnit.h (original)
> > +++ cfe/trunk/include/clang/Frontend/ASTUnit.h Thu Jul 16 20:19:54 2015
> > @@ -57,6 +57,7 @@ class FileManager;
> > class HeaderSearch;
> > class Preprocessor;
> > class PCHContainerOperations;
> > +class PCHContainerReader;
> > class SourceManager;
> > class TargetInfo;
> > class ASTFrontendAction;
> > @@ -725,8 +726,7 @@ public:
> > ///
> > /// \returns - The initialized ASTUnit or null if the AST failed to
> load.
> > static std::unique_ptr<ASTUnit> LoadFromASTFile(
> > - const std::string &Filename,
> > - std::shared_ptr<PCHContainerOperations> PCHContainerOps,
> > + const std::string &Filename, const PCHContainerReader
> &PCHContainerRdr,
> > IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
> > const FileSystemOptions &FileSystemOpts, bool OnlyLocalDecls =
> false,
> > ArrayRef<RemappedFile> RemappedFiles = None,
> >
> > Modified: cfe/trunk/include/clang/Frontend/CompilerInstance.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInstance.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Frontend/CompilerInstance.h (original)
> > +++ cfe/trunk/include/clang/Frontend/CompilerInstance.h Thu Jul 16
> 20:19:54 2015
> > @@ -183,7 +183,7 @@ class CompilerInstance : public ModuleLo
> > public:
> > explicit CompilerInstance(
> > std::shared_ptr<PCHContainerOperations> PCHContainerOps =
> > - std::make_shared<RawPCHContainerOperations>(),
> > + std::make_shared<PCHContainerOperations>(),
> > bool BuildingModule = false);
> > ~CompilerInstance() override;
> >
> > @@ -508,6 +508,34 @@ public:
> > return ThePCHContainerOperations;
> > }
> >
> > + /// Return the appropriate PCHContainerWriter depending on the
> > + /// current CodeGenOptions.
> > + const PCHContainerWriter &getPCHContainerWriter() const {
> > + assert(Invocation && "cannot determine module format without
> invocation");
> > + StringRef Format = getHeaderSearchOpts().ModuleFormat;
> > + auto *Writer = ThePCHContainerOperations->getWriterOrNull(Format);
> > + if (!Writer) {
> > + if (Diagnostics)
> > + Diagnostics->Report(diag::err_module_format_unhandled) <<
> Format;
> > + llvm::report_fatal_error("unknown module format");
> > + }
> > + return *Writer;
> > + }
> > +
> > + /// Return the appropriate PCHContainerReader depending on the
> > + /// current CodeGenOptions.
> > + const PCHContainerReader &getPCHContainerReader() const {
> > + assert(Invocation && "cannot determine module format without
> invocation");
> > + StringRef Format = getHeaderSearchOpts().ModuleFormat;
> > + auto *Reader = ThePCHContainerOperations->getReaderOrNull(Format);
> > + if (!Reader) {
> > + if (Diagnostics)
> > + Diagnostics->Report(diag::err_module_format_unhandled) <<
> Format;
> > + llvm::report_fatal_error("unknown module format");
> > + }
> > + return *Reader;
> > + }
> > +
> > /// }
> > /// @name Code Completion
> > /// {
> > @@ -621,7 +649,7 @@ public:
> > static IntrusiveRefCntPtr<ASTReader> createPCHExternalASTSource(
> > StringRef Path, StringRef Sysroot, bool DisablePCHValidation,
> > bool AllowPCHWithCompilerErrors, Preprocessor &PP, ASTContext
> &Context,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > void *DeserializationListener, bool OwnDeserializationListener,
> > bool Preamble, bool UseGlobalModuleIndex);
> >
> >
> > Modified: cfe/trunk/include/clang/Frontend/PCHContainerOperations.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PCHContainerOperations.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Frontend/PCHContainerOperations.h (original)
> > +++ cfe/trunk/include/clang/Frontend/PCHContainerOperations.h Thu Jul 16
> 20:19:54 2015
> > @@ -11,6 +11,7 @@
> > #define LLVM_CLANG_PCH_CONTAINER_OPERATIONS_H
> >
> > #include "llvm/ADT/SmallVector.h"
> > +#include "llvm/ADT/StringMap.h"
> > #include "llvm/Support/MemoryBuffer.h"
> > #include <memory>
> >
> > @@ -19,6 +20,8 @@ class raw_pwrite_stream;
> > class BitstreamReader;
> > }
> >
> > +using llvm::StringRef;
> > +
> > namespace clang {
> >
> > class ASTConsumer;
> > @@ -33,14 +36,16 @@ struct PCHBuffer {
> > bool IsComplete;
> > llvm::SmallVector<char, 0> Data;
> > };
> > +
> > +/// This abstract interface provides operations for creating
> > +/// containers for serialized ASTs (precompiled headers and clang
> > +/// modules).
> > +class PCHContainerWriter {
> > +public:
> > + virtual ~PCHContainerWriter() = 0;
> > + virtual StringRef getFormat() const = 0;
> >
> > -/// \brief This abstract interface provides operations for creating
> > -/// and unwrapping containers for serialized ASTs (precompiled headers
> > -/// and clang modules).
> > -class PCHContainerOperations {
> > -public:
> > - virtual ~PCHContainerOperations();
> > - /// \brief Return an ASTConsumer that can be chained with a
> > + /// 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(
> > @@ -49,16 +54,28 @@ public:
> > const LangOptions &LO, const std::string &MainFileName,
> > const std::string &OutputFileName, llvm::raw_pwrite_stream *OS,
> > std::shared_ptr<PCHBuffer> Buffer) const = 0;
> > +};
> >
> > - /// \brief Initialize an llvm::BitstreamReader with the serialized
> AST inside
> > +/// 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 StringRef getFormat() const = 0;
> > +
> > + /// Initialize an llvm::BitstreamReader with the serialized AST inside
> > /// the PCH container Buffer.
> > virtual void ExtractPCH(llvm::MemoryBufferRef Buffer,
> > llvm::BitstreamReader &StreamFile) const = 0;
> > };
> >
> > -/// \brief Implements a raw pass-through PCH container.
> > -class RawPCHContainerOperations : public PCHContainerOperations {
> > - /// \brief Return an ASTConsumer that can be chained with a
> > +/// Implements write operations for a raw pass-through PCH container.
> > +class RawPCHContainerWriter : public PCHContainerWriter {
> > + 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(
> > DiagnosticsEngine &Diags, const HeaderSearchOptions &HSO,
> > @@ -66,11 +83,42 @@ class RawPCHContainerOperations : public
> > const LangOptions &LO, const std::string &MainFileName,
> > const std::string &OutputFileName, llvm::raw_pwrite_stream *OS,
> > std::shared_ptr<PCHBuffer> Buffer) const override;
> > +};
> >
> > - /// \brief Initialize an llvm::BitstreamReader with Buffer.
> > +/// Implements read operations for a raw pass-through PCH container.
> > +class RawPCHContainerReader : public PCHContainerReader {
> > + StringRef getFormat() const override { return "raw"; }
> > +
> > + /// Initialize an llvm::BitstreamReader with Buffer.
> > void ExtractPCH(llvm::MemoryBufferRef Buffer,
> > llvm::BitstreamReader &StreamFile) 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(StringRef Format) {
> > + return Writers[Format].get();
> > + }
> > + const PCHContainerReader *getReaderOrNull(StringRef Format) {
> > + return Readers[Format].get();
> > + }
> > + const PCHContainerReader &getRawReader() {
> > + return *getReaderOrNull("raw");
> > + }
> > +};
> > +
> > }
> >
> > #endif
> >
> > Modified: cfe/trunk/include/clang/Frontend/Utils.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/Utils.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Frontend/Utils.h (original)
> > +++ cfe/trunk/include/clang/Frontend/Utils.h Thu Jul 16 20:19:54 2015
> > @@ -45,7 +45,7 @@ class HeaderSearch;
> > class HeaderSearchOptions;
> > class IdentifierTable;
> > class LangOptions;
> > -class PCHContainerOperations;
> > +class PCHContainerReader;
> > class Preprocessor;
> > class PreprocessorOptions;
> > class PreprocessorOutputOptions;
> > @@ -63,7 +63,7 @@ void ApplyHeaderSearchOptions(HeaderSear
> > /// InitializePreprocessor - Initialize the preprocessor getting it and
> the
> > /// environment ready to process a single file.
> > void InitializePreprocessor(Preprocessor &PP, const PreprocessorOptions
> &PPOpts,
> > - const PCHContainerOperations
> &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > const FrontendOptions &FEOpts);
> >
> > /// DoPrintPreprocessedInput - Implement -E mode.
> >
> > Modified: cfe/trunk/include/clang/Lex/HeaderSearchOptions.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearchOptions.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Lex/HeaderSearchOptions.h (original)
> > +++ cfe/trunk/include/clang/Lex/HeaderSearchOptions.h Thu Jul 16
> 20:19:54 2015
> > @@ -92,6 +92,9 @@ public:
> > /// \brief The directory used for a user build.
> > std::string ModuleUserBuildPath;
> >
> > + /// The module/pch container format.
> > + std::string ModuleFormat;
> > +
> > /// \brief Whether we should disable the use of the hash string within
> the
> > /// module cache.
> > ///
> > @@ -167,16 +170,14 @@ public:
> >
> > public:
> > HeaderSearchOptions(StringRef _Sysroot = "/")
> > - : Sysroot(_Sysroot), DisableModuleHash(0), ImplicitModuleMaps(0),
> > - ModuleMapFileHomeIsCwd(0),
> > - ModuleCachePruneInterval(7*24*60*60),
> > - ModuleCachePruneAfter(31*24*60*60),
> > - BuildSessionTimestamp(0),
> > - UseBuiltinIncludes(true),
> > - UseStandardSystemIncludes(true), UseStandardCXXIncludes(true),
> > - UseLibcxx(false), Verbose(false),
> > - ModulesValidateOncePerBuildSession(false),
> > - ModulesValidateSystemHeaders(false) {}
> > + : Sysroot(_Sysroot), ModuleFormat("raw"), DisableModuleHash(0),
> > + ImplicitModuleMaps(0), ModuleMapFileHomeIsCwd(0),
> > + ModuleCachePruneInterval(7 * 24 * 60 * 60),
> > + ModuleCachePruneAfter(31 * 24 * 60 * 60),
> BuildSessionTimestamp(0),
> > + UseBuiltinIncludes(true), UseStandardSystemIncludes(true),
> > + UseStandardCXXIncludes(true), UseLibcxx(false), Verbose(false),
> > + ModulesValidateOncePerBuildSession(false),
> > + ModulesValidateSystemHeaders(false) {}
> >
> > /// AddPath - Add the \p Path path to the specified \p Group list.
> > void AddPath(StringRef Path, frontend::IncludeDirGroup Group,
> >
> > Modified: cfe/trunk/include/clang/Serialization/ASTReader.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Serialization/ASTReader.h (original)
> > +++ cfe/trunk/include/clang/Serialization/ASTReader.h Thu Jul 16
> 20:19:54 2015
> > @@ -362,7 +362,7 @@ private:
> >
> > SourceManager &SourceMgr;
> > FileManager &FileMgr;
> > - const PCHContainerOperations &PCHContainerOps;
> > + const PCHContainerReader &PCHContainerRdr;
> > DiagnosticsEngine &Diags;
> >
> > /// \brief The semantic analysis object that will be processing the
> > @@ -1289,7 +1289,7 @@ public:
> > /// \param ReadTimer If non-null, a timer used to track the time spent
> > /// deserializing.
> > ASTReader(Preprocessor &PP, ASTContext &Context,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > StringRef isysroot = "", bool DisableValidation = false,
> > bool AllowASTWithCompilerErrors = false,
> > bool AllowConfigurationMismatch = false,
> > @@ -1458,7 +1458,7 @@ public:
> > /// the AST file, without actually loading the AST file.
> > static std::string
> > getOriginalSourceFile(const std::string &ASTFileName, FileManager
> &FileMgr,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > DiagnosticsEngine &Diags);
> >
> > /// \brief Read the control block for the named AST file.
> > @@ -1466,13 +1466,13 @@ public:
> > /// \returns true if an error occurred, false otherwise.
> > static bool
> > readASTFileControlBlock(StringRef Filename, FileManager &FileMgr,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > ASTReaderListener &Listener);
> >
> > /// \brief Determine whether the given AST file is acceptable to load
> into a
> > /// translation unit with the given language and target options.
> > static bool isAcceptableASTFile(StringRef Filename, FileManager
> &FileMgr,
> > - const PCHContainerOperations
> &PCHContainerOps,
> > + const PCHContainerReader
> &PCHContainerRdr,
> > const LangOptions &LangOpts,
> > const TargetOptions &TargetOpts,
> > const PreprocessorOptions &PPOpts,
> >
> > Modified: cfe/trunk/include/clang/Serialization/GlobalModuleIndex.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/GlobalModuleIndex.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Serialization/GlobalModuleIndex.h (original)
> > +++ cfe/trunk/include/clang/Serialization/GlobalModuleIndex.h Thu Jul 16
> 20:19:54 2015
> > @@ -198,10 +198,9 @@ public:
> > /// \param Path The path to the directory containing module files, into
> > /// which the global index will be written.
> > static ErrorCode writeIndex(FileManager &FileMgr,
> > - const PCHContainerOperations
> &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > StringRef Path);
> > };
> > -
> > }
> >
> > #endif
> >
> > Modified: cfe/trunk/include/clang/Serialization/ModuleManager.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ModuleManager.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Serialization/ModuleManager.h (original)
> > +++ cfe/trunk/include/clang/Serialization/ModuleManager.h Thu Jul 16
> 20:19:54 2015
> > @@ -24,7 +24,7 @@ namespace clang {
> >
> > class GlobalModuleIndex;
> > class ModuleMap;
> > -class PCHContainerOperations;
> > +class PCHContainerReader;
> >
> > namespace serialization {
> >
> > @@ -52,7 +52,7 @@ class ModuleManager {
> > FileManager &FileMgr;
> >
> > /// \brief Knows how to unwrap module containers.
> > - const PCHContainerOperations &PCHContainerOps;
> > + const PCHContainerReader &PCHContainerRdr;
> >
> > /// \brief A lookup of in-memory (virtual file) buffers
> > llvm::DenseMap<const FileEntry *, std::unique_ptr<llvm::MemoryBuffer>>
> > @@ -118,9 +118,9 @@ public:
> > typedef std::pair<uint32_t, StringRef> ModuleOffset;
> >
> > explicit ModuleManager(FileManager &FileMgr,
> > - const PCHContainerOperations &PCHContainerOps);
> > + const PCHContainerReader &PCHContainerRdr);
> > ~ModuleManager();
> > -
> > +
> > /// \brief Forward iterator to traverse all loaded modules. This is
> reverse
> > /// source-order.
> > ModuleIterator begin() { return Chain.begin(); }
> >
> > Modified: cfe/trunk/include/clang/Tooling/Refactoring.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Refactoring.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Tooling/Refactoring.h (original)
> > +++ cfe/trunk/include/clang/Tooling/Refactoring.h Thu Jul 16 20:19:54
> 2015
> > @@ -40,7 +40,7 @@ public:
> > RefactoringTool(const CompilationDatabase &Compilations,
> > ArrayRef<std::string> SourcePaths,
> > std::shared_ptr<PCHContainerOperations>
> PCHContainerOps =
> > - std::make_shared<RawPCHContainerOperations>());
> > + std::make_shared<PCHContainerOperations>());
> >
> > /// \brief Returns the set of replacements to which replacements should
> > /// be added during the run of the tool.
> >
> > Modified: cfe/trunk/include/clang/Tooling/Tooling.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Tooling.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/include/clang/Tooling/Tooling.h (original)
> > +++ cfe/trunk/include/clang/Tooling/Tooling.h Thu Jul 16 20:19:54 2015
> > @@ -150,7 +150,7 @@ inline std::unique_ptr<FrontendActionFac
> > bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine &Code,
> > const Twine &FileName = "input.cc",
> > std::shared_ptr<PCHContainerOperations>
> PCHContainerOps =
> > - std::make_shared<RawPCHContainerOperations>());
> > + std::make_shared<PCHContainerOperations>());
> >
> > /// The first part of the pair is the filename, the second part the
> > /// file-content.
> > @@ -171,7 +171,7 @@ bool runToolOnCodeWithArgs(
> > clang::FrontendAction *ToolAction, const Twine &Code,
> > const std::vector<std::string> &Args, const Twine &FileName =
> "input.cc",
> > std::shared_ptr<PCHContainerOperations> PCHContainerOps =
> > - std::make_shared<RawPCHContainerOperations>(),
> > + std::make_shared<PCHContainerOperations>(),
> > const FileContentMappings &VirtualMappedFiles =
> FileContentMappings());
> >
> > /// \brief Builds an AST for 'Code'.
> > @@ -185,7 +185,7 @@ bool runToolOnCodeWithArgs(
> > std::unique_ptr<ASTUnit>
> > buildASTFromCode(const Twine &Code, const Twine &FileName = "input.cc",
> > std::shared_ptr<PCHContainerOperations> PCHContainerOps
> =
> > - std::make_shared<RawPCHContainerOperations>());
> > + std::make_shared<PCHContainerOperations>());
> >
> > /// \brief Builds an AST for 'Code' with additional flags.
> > ///
> > @@ -200,7 +200,7 @@ std::unique_ptr<ASTUnit> buildASTFromCod
> > const Twine &Code, const std::vector<std::string> &Args,
> > const Twine &FileName = "input.cc",
> > std::shared_ptr<PCHContainerOperations> PCHContainerOps =
> > - std::make_shared<RawPCHContainerOperations>());
> > + std::make_shared<PCHContainerOperations>());
> >
> > /// \brief Utility to run a FrontendAction in a single clang invocation.
> > class ToolInvocation {
> > @@ -219,7 +219,7 @@ public:
> > ToolInvocation(std::vector<std::string> CommandLine, FrontendAction
> *FAction,
> > FileManager *Files,
> > std::shared_ptr<PCHContainerOperations> PCHContainerOps
> =
> > - std::make_shared<RawPCHContainerOperations>());
> > + std::make_shared<PCHContainerOperations>());
> >
> > /// \brief Create a tool invocation.
> > ///
> > @@ -288,7 +288,7 @@ class ClangTool {
> > ClangTool(const CompilationDatabase &Compilations,
> > ArrayRef<std::string> SourcePaths,
> > std::shared_ptr<PCHContainerOperations> PCHContainerOps =
> > - std::make_shared<RawPCHContainerOperations>());
> > + std::make_shared<PCHContainerOperations>());
> >
> > ~ClangTool();
> >
> >
> > Modified: cfe/trunk/lib/ARCMigrate/ARCMT.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ARCMT.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/ARCMigrate/ARCMT.cpp (original)
> > +++ cfe/trunk/lib/ARCMigrate/ARCMT.cpp Thu Jul 16 20:19:54 2015
> > @@ -167,7 +167,7 @@ static bool HasARCRuntime(CompilerInvoca
> >
> > static CompilerInvocation *
> > createInvocationForMigration(CompilerInvocation &origCI,
> > - const PCHContainerOperations
> &PCHContainerOps) {
> > + const PCHContainerReader &PCHContainerRdr)
> {
> > std::unique_ptr<CompilerInvocation> CInvok;
> > CInvok.reset(new CompilerInvocation(origCI));
> > PreprocessorOptions &PPOpts = CInvok->getPreprocessorOpts();
> > @@ -180,7 +180,7 @@ createInvocationForMigration(CompilerInv
> > new DiagnosticsEngine(DiagID, &origCI.getDiagnosticOpts(),
> > new IgnoringDiagConsumer()));
> > std::string OriginalFile = ASTReader::getOriginalSourceFile(
> > - PPOpts.ImplicitPCHInclude, FileMgr, PCHContainerOps, *Diags);
> > + PPOpts.ImplicitPCHInclude, FileMgr, PCHContainerRdr, *Diags);
> > if (!OriginalFile.empty())
> > PPOpts.Includes.insert(PPOpts.Includes.begin(), OriginalFile);
> > PPOpts.ImplicitPCHInclude.clear();
> > @@ -247,7 +247,8 @@ bool arcmt::checkForManualIssues(
> > assert(!transforms.empty());
> >
> > std::unique_ptr<CompilerInvocation> CInvok;
> > - CInvok.reset(createInvocationForMigration(origCI, *PCHContainerOps));
> > + CInvok.reset(
> > + createInvocationForMigration(origCI,
> PCHContainerOps->getRawReader()));
> > CInvok->getFrontendOpts().Inputs.clear();
> > CInvok->getFrontendOpts().Inputs.push_back(Input);
> >
> > @@ -517,7 +518,8 @@ MigrationProcess::MigrationProcess(
> > bool MigrationProcess::applyTransform(TransformFn trans,
> > RewriteListener *listener) {
> > std::unique_ptr<CompilerInvocation> CInvok;
> > - CInvok.reset(createInvocationForMigration(OrigCI, *PCHContainerOps));
> > + CInvok.reset(
> > + createInvocationForMigration(OrigCI,
> PCHContainerOps->getRawReader()));
> > CInvok->getDiagnosticOpts().IgnoreWarnings = true;
> >
> > Remapper.applyMappings(CInvok->getPreprocessorOpts());
> >
> > Modified: cfe/trunk/lib/Basic/FileManager.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Basic/FileManager.cpp (original)
> > +++ cfe/trunk/lib/Basic/FileManager.cpp Thu Jul 16 20:19:54 2015
> > @@ -587,4 +587,6 @@ void FileManager::PrintStats() const {
> > //llvm::errs() << PagesMapped << BytesOfPagesMapped << FSLookups;
> > }
> >
> > -PCHContainerOperations::~PCHContainerOperations() {}
> > +// Virtual destructors for abstract base classes that need live in
> Basic.
> > +PCHContainerWriter::~PCHContainerWriter() {}
> > +PCHContainerReader::~PCHContainerReader() {}
> >
> > Modified: cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp (original)
> > +++ cfe/trunk/lib/CodeGen/ObjectFilePCHContainerOperations.cpp Thu Jul
> 16 20:19:54 2015
> > @@ -156,7 +156,7 @@ public:
> > } // namespace
> >
> > std::unique_ptr<ASTConsumer>
> > -ObjectFilePCHContainerOperations::CreatePCHContainerGenerator(
> > +ObjectFilePCHContainerWriter::CreatePCHContainerGenerator(
> > DiagnosticsEngine &Diags, const HeaderSearchOptions &HSO,
> > const PreprocessorOptions &PPO, const TargetOptions &TO,
> > const LangOptions &LO, const std::string &MainFileName,
> > @@ -166,7 +166,7 @@ ObjectFilePCHContainerOperations::Create
> > Diags, HSO, PPO, TO, LO, MainFileName, OutputFileName, OS, Buffer);
> > }
> >
> > -void ObjectFilePCHContainerOperations::ExtractPCH(
> > +void ObjectFilePCHContainerReader::ExtractPCH(
> > llvm::MemoryBufferRef Buffer, llvm::BitstreamReader &StreamFile)
> const {
> > if (auto OF = llvm::object::ObjectFile::createObjectFile(Buffer)) {
> > auto *Obj = OF.get().get();
> >
> > Modified: cfe/trunk/lib/Frontend/ASTMerge.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTMerge.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/ASTMerge.cpp (original)
> > +++ cfe/trunk/lib/Frontend/ASTMerge.cpp Thu Jul 16 20:19:54 2015
> > @@ -46,7 +46,7 @@ void ASTMergeAction::ExecuteAction() {
> >
> *CI.getDiagnostics().getClient()),
> > /*ShouldOwnClient=*/true));
> > std::unique_ptr<ASTUnit> Unit =
> > - ASTUnit::LoadFromASTFile(ASTFiles[I],
> CI.getPCHContainerOperations(),
> > + ASTUnit::LoadFromASTFile(ASTFiles[I],
> CI.getPCHContainerReader(),
> > Diags, CI.getFileSystemOpts(), false);
> >
> > if (!Unit)
> >
> > Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)
> > +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Thu Jul 16 20:19:54 2015
> > @@ -650,7 +650,7 @@ void ASTUnit::ConfigureDiags(IntrusiveRe
> >
> > std::unique_ptr<ASTUnit> ASTUnit::LoadFromASTFile(
> > const std::string &Filename,
> > - std::shared_ptr<PCHContainerOperations> PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
> > const FileSystemOptions &FileSystemOpts, bool OnlyLocalDecls,
> > ArrayRef<RemappedFile> RemappedFiles, bool CaptureDiagnostics,
> > @@ -676,7 +676,7 @@ std::unique_ptr<ASTUnit> ASTUnit::LoadFr
> > AST->getFileManager(),
> > UserFilesAreVolatile);
> > AST->HSOpts = new HeaderSearchOptions();
> > -
> > + AST->HSOpts->ModuleFormat = PCHContainerRdr.getFormat();
> > AST->HeaderInfo.reset(new HeaderSearch(AST->HSOpts,
> > AST->getSourceManager(),
> > AST->getDiagnostics(),
> > @@ -708,7 +708,7 @@ std::unique_ptr<ASTUnit> ASTUnit::LoadFr
> > bool disableValid = false;
> > if (::getenv("LIBCLANG_DISABLE_PCH_VALIDATION"))
> > disableValid = true;
> > - AST->Reader = new ASTReader(PP, Context, *PCHContainerOps,
> > + AST->Reader = new ASTReader(PP, Context, PCHContainerRdr,
> > /*isysroot=*/"",
> > /*DisableValidation=*/disableValid,
> > AllowPCHWithCompilerErrors);
> >
> > Modified: cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp (original)
> > +++ cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp Thu Jul 16 20:19:54
> 2015
> > @@ -81,7 +81,7 @@ createASTReader(CompilerInstance &CI, St
> > Preprocessor &PP = CI.getPreprocessor();
> > std::unique_ptr<ASTReader> Reader;
> > Reader.reset(new ASTReader(PP, CI.getASTContext(),
> > - *CI.getPCHContainerOperations(),
> > + CI.getPCHContainerReader(),
> > /*isysroot=*/"",
> /*DisableValidation=*/true));
> > for (unsigned ti = 0; ti < bufNames.size(); ++ti) {
> > StringRef sr(bufNames[ti]);
> >
> > Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
> > +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Thu Jul 16 20:19:54 2015
> > @@ -322,7 +322,7 @@ void CompilerInstance::createPreprocesso
> > PP->getFileManager(), PPOpts);
> >
> > // Predefine macros and configure the preprocessor.
> > - InitializePreprocessor(*PP, PPOpts, *getPCHContainerOperations(),
> > + InitializePreprocessor(*PP, PPOpts, getPCHContainerReader(),
> > getFrontendOpts());
> >
> > // Initialize the header search object.
> > @@ -399,7 +399,7 @@ void CompilerInstance::createPCHExternal
> > ModuleManager = createPCHExternalASTSource(
> > Path, getHeaderSearchOpts().Sysroot, DisablePCHValidation,
> > AllowPCHWithCompilerErrors, getPreprocessor(), getASTContext(),
> > - *getPCHContainerOperations(), DeserializationListener,
> > + getPCHContainerReader(), DeserializationListener,
> > OwnDeserializationListener, Preamble,
> > getFrontendOpts().UseGlobalModuleIndex);
> > }
> > @@ -407,13 +407,13 @@ void CompilerInstance::createPCHExternal
> > IntrusiveRefCntPtr<ASTReader>
> CompilerInstance::createPCHExternalASTSource(
> > StringRef Path, StringRef Sysroot, bool DisablePCHValidation,
> > bool AllowPCHWithCompilerErrors, Preprocessor &PP, ASTContext
> &Context,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > void *DeserializationListener, bool OwnDeserializationListener,
> > bool Preamble, bool UseGlobalModuleIndex) {
> > HeaderSearchOptions &HSOpts =
> PP.getHeaderSearchInfo().getHeaderSearchOpts();
> >
> > IntrusiveRefCntPtr<ASTReader> Reader(new ASTReader(
> > - PP, Context, PCHContainerOps, Sysroot.empty() ? "" :
> Sysroot.data(),
> > + PP, Context, PCHContainerRdr, Sysroot.empty() ? "" :
> Sysroot.data(),
> > DisablePCHValidation, AllowPCHWithCompilerErrors,
> > /*AllowConfigurationMismatch*/ false,
> HSOpts.ModulesValidateSystemHeaders,
> > UseGlobalModuleIndex));
> > @@ -1244,7 +1244,7 @@ void CompilerInstance::createModuleManag
> > ReadTimer = llvm::make_unique<llvm::Timer>("Reading modules",
> > *FrontendTimerGroup);
> > ModuleManager = new ASTReader(
> > - getPreprocessor(), *Context, *getPCHContainerOperations(),
> > + getPreprocessor(), *Context, getPCHContainerReader(),
> > Sysroot.empty() ? "" : Sysroot.c_str(),
> PPOpts.DisablePCHValidation,
> > /*AllowASTWithCompilerErrors=*/false,
> > /*AllowConfigurationMismatch=*/false,
> > @@ -1296,7 +1296,7 @@ bool CompilerInstance::loadModuleFile(St
> > ModuleFileStack.push_back(FileName);
> > ModuleNameStack.push_back(StringRef());
> > if (ASTReader::readASTFileControlBlock(FileName,
> CI.getFileManager(),
> > -
> *CI.getPCHContainerOperations(),
> > + CI.getPCHContainerReader(),
> > *this)) {
> > CI.getDiagnostics().Report(
> > SourceLocation(),
> CI.getFileManager().getBufferForFile(FileName)
> > @@ -1667,7 +1667,7 @@ GlobalModuleIndex *CompilerInstance::loa
> > llvm::sys::fs::create_directories(
> > getPreprocessor().getHeaderSearchInfo().getModuleCachePath());
> > GlobalModuleIndex::writeIndex(
> > - getFileManager(), *getPCHContainerOperations(),
> > + getFileManager(), getPCHContainerReader(),
> > getPreprocessor().getHeaderSearchInfo().getModuleCachePath());
> > ModuleManager->resetForReload();
> > ModuleManager->loadGlobalIndex();
> > @@ -1695,7 +1695,7 @@ GlobalModuleIndex *CompilerInstance::loa
> > }
> > if (RecreateIndex) {
> > GlobalModuleIndex::writeIndex(
> > - getFileManager(), *getPCHContainerOperations(),
> > + getFileManager(), getPCHContainerReader(),
> > getPreprocessor().getHeaderSearchInfo().getModuleCachePath());
> > ModuleManager->resetForReload();
> > ModuleManager->loadGlobalIndex();
> >
> > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
> > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Jul 16 20:19:54
> 2015
> > @@ -1112,6 +1112,8 @@ static void ParseHeaderSearchArgs(Header
> > getLastArgUInt64Value(Args, OPT_fbuild_session_timestamp, 0);
> > Opts.ModulesValidateSystemHeaders =
> > Args.hasArg(OPT_fmodules_validate_system_headers);
> > + if (const Arg *A = Args.getLastArg(OPT_fmodule_format_EQ))
> > + Opts.ModuleFormat = A->getValue();
> >
> > for (const Arg *A : Args.filtered(OPT_fmodules_ignore_macro)) {
> > StringRef MacroDef = A->getValue();
> >
> > Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/FrontendAction.cpp (original)
> > +++ cfe/trunk/lib/Frontend/FrontendAction.cpp Thu Jul 16 20:19:54 2015
> > @@ -191,7 +191,7 @@ bool FrontendAction::BeginSourceFile(Com
> > IntrusiveRefCntPtr<DiagnosticsEngine> Diags(&CI.getDiagnostics());
> >
> > std::unique_ptr<ASTUnit> AST =
> > - ASTUnit::LoadFromASTFile(InputFile,
> CI.getPCHContainerOperations(),
> > + ASTUnit::LoadFromASTFile(InputFile, CI.getPCHContainerReader(),
> > Diags, CI.getFileSystemOpts());
> >
> > if (!AST)
> > @@ -273,7 +273,7 @@ bool FrontendAction::BeginSourceFile(Com
> > Dir != DirEnd && !EC; Dir.increment(EC)) {
> > // Check whether this is an acceptable AST file.
> > if (ASTReader::isAcceptableASTFile(
> > - Dir->path(), FileMgr, *CI.getPCHContainerOperations(),
> > + Dir->path(), FileMgr, CI.getPCHContainerReader(),
> > CI.getLangOpts(), CI.getTargetOpts(),
> CI.getPreprocessorOpts(),
> > SpecificModuleCachePath)) {
> > PPOpts.ImplicitPCHInclude = Dir->path();
> > @@ -443,7 +443,7 @@ bool FrontendAction::Execute() {
> > if (CI.shouldBuildGlobalModuleIndex() && CI.hasFileManager() &&
> > CI.hasPreprocessor()) {
> > GlobalModuleIndex::writeIndex(
> > - CI.getFileManager(), *CI.getPCHContainerOperations(),
> > + CI.getFileManager(), CI.getPCHContainerReader(),
> > CI.getPreprocessor().getHeaderSearchInfo().getModuleCachePath());
> > }
> >
> >
> > Modified: cfe/trunk/lib/Frontend/FrontendActions.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/FrontendActions.cpp (original)
> > +++ cfe/trunk/lib/Frontend/FrontendActions.cpp Thu Jul 16 20:19:54 2015
> > @@ -93,7 +93,7 @@ GeneratePCHAction::CreateASTConsumer(Com
> > Consumers.push_back(llvm::make_unique<PCHGenerator>(
> > CI.getPreprocessor(), OutputFile, nullptr, Sysroot, Buffer));
> > Consumers.push_back(
> > - CI.getPCHContainerOperations()->CreatePCHContainerGenerator(
> > + CI.getPCHContainerWriter().CreatePCHContainerGenerator(
> > CI.getDiagnostics(), CI.getHeaderSearchOpts(),
> > CI.getPreprocessorOpts(), CI.getTargetOpts(), CI.getLangOpts(),
> > InFile, OutputFile, OS, Buffer));
> > @@ -139,7 +139,7 @@ GenerateModuleAction::CreateASTConsumer(
> > Consumers.push_back(llvm::make_unique<PCHGenerator>(
> > CI.getPreprocessor(), OutputFile, Module, Sysroot, Buffer));
> > Consumers.push_back(
> > - CI.getPCHContainerOperations()->CreatePCHContainerGenerator(
> > + CI.getPCHContainerWriter().CreatePCHContainerGenerator(
> > CI.getDiagnostics(), CI.getHeaderSearchOpts(),
> > CI.getPreprocessorOpts(), CI.getTargetOpts(), CI.getLangOpts(),
> > InFile, OutputFile, OS, Buffer));
> > @@ -415,7 +415,7 @@ void VerifyPCHAction::ExecuteAction() {
> > bool Preamble =
> CI.getPreprocessorOpts().PrecompiledPreambleBytes.first != 0;
> > const std::string &Sysroot = CI.getHeaderSearchOpts().Sysroot;
> > std::unique_ptr<ASTReader> Reader(new ASTReader(
> > - CI.getPreprocessor(), CI.getASTContext(),
> *CI.getPCHContainerOperations(),
> > + CI.getPreprocessor(), CI.getASTContext(),
> CI.getPCHContainerReader(),
> > Sysroot.empty() ? "" : Sysroot.c_str(),
> > /*DisableValidation*/ false,
> > /*AllowPCHWithCompilerErrors*/ false,
> > @@ -578,7 +578,7 @@ void DumpModuleInfoAction::ExecuteAction
> > DumpModuleInfoListener Listener(Out);
> > ASTReader::readASTFileControlBlock(
> > getCurrentFile(), getCompilerInstance().getFileManager(),
> > - *getCompilerInstance().getPCHContainerOperations(), Listener);
> > + getCompilerInstance().getPCHContainerReader(), Listener);
> > }
> >
> >
> //===----------------------------------------------------------------------===//
> >
> > Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original)
> > +++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Thu Jul 16 20:19:54 2015
> > @@ -97,11 +97,11 @@ static void AddImplicitIncludePTH(MacroB
> > /// \brief Add an implicit \#include using the original file used to
> generate
> > /// a PCH file.
> > static void AddImplicitIncludePCH(MacroBuilder &Builder, Preprocessor
> &PP,
> > - const PCHContainerOperations
> &PCHContainerOps,
> > + const PCHContainerReader
> &PCHContainerRdr,
> > StringRef ImplicitIncludePCH) {
> > std::string OriginalFile =
> > ASTReader::getOriginalSourceFile(ImplicitIncludePCH,
> PP.getFileManager(),
> > - PCHContainerOps,
> PP.getDiagnostics());
> > + PCHContainerRdr,
> PP.getDiagnostics());
> > if (OriginalFile.empty())
> > return;
> >
> > @@ -902,7 +902,7 @@ static void InitializePredefinedMacros(c
> > ///
> > void clang::InitializePreprocessor(
> > Preprocessor &PP, const PreprocessorOptions &InitOpts,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > const FrontendOptions &FEOpts) {
> > const LangOptions &LangOpts = PP.getLangOpts();
> > std::string PredefineBuffer;
> > @@ -962,7 +962,7 @@ void clang::InitializePreprocessor(
> >
> > // Process -include-pch/-include-pth directives.
> > if (!InitOpts.ImplicitPCHInclude.empty())
> > - AddImplicitIncludePCH(Builder, PP, PCHContainerOps,
> > + AddImplicitIncludePCH(Builder, PP, PCHContainerRdr,
> > InitOpts.ImplicitPCHInclude);
> > if (!InitOpts.ImplicitPTHInclude.empty())
> > AddImplicitIncludePTH(Builder, PP, InitOpts.ImplicitPTHInclude);
> >
> > Modified: cfe/trunk/lib/Frontend/PCHContainerOperations.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHContainerOperations.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Frontend/PCHContainerOperations.cpp (original)
> > +++ cfe/trunk/lib/Frontend/PCHContainerOperations.cpp Thu Jul 16
> 20:19:54 2015
> > @@ -21,21 +21,22 @@ using namespace clang;
> > namespace {
> >
> > /// \brief A PCHContainerGenerator that writes out the PCH to a flat
> file.
> > -class PCHContainerGenerator : public ASTConsumer {
> > +class RawPCHContainerGenerator : public ASTConsumer {
> > std::shared_ptr<PCHBuffer> Buffer;
> > raw_pwrite_stream *OS;
> >
> > public:
> > - PCHContainerGenerator(DiagnosticsEngine &Diags,
> > - const HeaderSearchOptions &HSO,
> > - const PreprocessorOptions &PPO, const
> TargetOptions &TO,
> > - const LangOptions &LO, const std::string
> &MainFileName,
> > - const std::string &OutputFileName,
> > - llvm::raw_pwrite_stream *OS,
> > - std::shared_ptr<PCHBuffer> Buffer)
> > + RawPCHContainerGenerator(DiagnosticsEngine &Diags,
> > + const HeaderSearchOptions &HSO,
> > + const PreprocessorOptions &PPO,
> > + const TargetOptions &TO, const LangOptions
> &LO,
> > + const std::string &MainFileName,
> > + const std::string &OutputFileName,
> > + llvm::raw_pwrite_stream *OS,
> > + std::shared_ptr<PCHBuffer> Buffer)
> > : Buffer(Buffer), OS(OS) {}
> >
> > - virtual ~PCHContainerGenerator() {}
> > + virtual ~RawPCHContainerGenerator() {}
> >
> > void HandleTranslationUnit(ASTContext &Ctx) override {
> > if (Buffer->IsComplete) {
> > @@ -50,19 +51,23 @@ public:
> > };
> > }
> >
> > -std::unique_ptr<ASTConsumer>
> > -RawPCHContainerOperations::CreatePCHContainerGenerator(
> > +std::unique_ptr<ASTConsumer>
> RawPCHContainerWriter::CreatePCHContainerGenerator(
> > DiagnosticsEngine &Diags, const HeaderSearchOptions &HSO,
> > const PreprocessorOptions &PPO, const TargetOptions &TO,
> > const LangOptions &LO, const std::string &MainFileName,
> > const std::string &OutputFileName, llvm::raw_pwrite_stream *OS,
> > std::shared_ptr<PCHBuffer> Buffer) const {
> > - return llvm::make_unique<PCHContainerGenerator>(
> > + return llvm::make_unique<RawPCHContainerGenerator>(
> > Diags, HSO, PPO, TO, LO, MainFileName, OutputFileName, OS, Buffer);
> > }
> >
> > -void RawPCHContainerOperations::ExtractPCH(
> > +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<RawPCHContainerWriter>());
> > + registerReader(llvm::make_unique<RawPCHContainerReader>());
> > +}
> >
> > Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/HeaderSearch.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Lex/HeaderSearch.cpp (original)
> > +++ cfe/trunk/lib/Lex/HeaderSearch.cpp Thu Jul 16 20:19:54 2015
> > @@ -14,6 +14,7 @@
> > #include "clang/Lex/HeaderSearch.h"
> > #include "clang/Basic/FileManager.h"
> > #include "clang/Basic/IdentifierTable.h"
> > +#include "clang/Frontend/PCHContainerOperations.h"
> > #include "clang/Lex/ExternalPreprocessorSource.h"
> > #include "clang/Lex/HeaderMap.h"
> > #include "clang/Lex/HeaderSearchOptions.h"
> > @@ -151,7 +152,8 @@ std::string HeaderSearch::getModuleFileN
> > auto FileName = llvm::sys::path::filename(ModuleMapPath);
> >
> > llvm::hash_code Hash =
> > - llvm::hash_combine(DirName.lower(), FileName.lower());
> > + llvm::hash_combine(DirName.lower(), FileName.lower(),
> > + HSOpts->ModuleFormat);
> >
> > SmallString<128> HashStr;
> > llvm::APInt(64, size_t(Hash)).toStringUnsigned(HashStr, /*Radix*/36);
> >
> > Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
> > +++ cfe/trunk/lib/Serialization/ASTReader.cpp Thu Jul 16 20:19:54 2015
> > @@ -3601,7 +3601,7 @@ ASTReader::ReadASTCore(StringRef FileNam
> >
> > ModuleFile &F = *M;
> > BitstreamCursor &Stream = F.Stream;
> > - PCHContainerOps.ExtractPCH(F.Buffer->getMemBufferRef(), F.StreamFile);
> > + PCHContainerRdr.ExtractPCH(F.Buffer->getMemBufferRef(), F.StreamFile);
> > Stream.init(&F.StreamFile);
> > F.SizeInBits = F.Buffer->getBufferSize() * 8;
> >
> > @@ -3872,7 +3872,7 @@ static ASTFileSignature readASTFileSigna
> > /// file.
> > std::string ASTReader::getOriginalSourceFile(
> > const std::string &ASTFileName, FileManager &FileMgr,
> > - const PCHContainerOperations &PCHContainerOps, DiagnosticsEngine
> &Diags) {
> > + const PCHContainerReader &PCHContainerRdr, DiagnosticsEngine
> &Diags) {
> > // Open the AST file.
> > auto Buffer = FileMgr.getBufferForFile(ASTFileName);
> > if (!Buffer) {
> > @@ -3883,7 +3883,7 @@ std::string ASTReader::getOriginalSource
> >
> > // Initialize the stream
> > llvm::BitstreamReader StreamFile;
> > - PCHContainerOps.ExtractPCH((*Buffer)->getMemBufferRef(), StreamFile);
> > + PCHContainerRdr.ExtractPCH((*Buffer)->getMemBufferRef(), StreamFile);
> > BitstreamCursor Stream(StreamFile);
> >
> > // Sniff for the signature.
> > @@ -3967,7 +3967,7 @@ namespace {
> >
> > bool ASTReader::readASTFileControlBlock(
> > StringRef Filename, FileManager &FileMgr,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > ASTReaderListener &Listener) {
> > // Open the AST file.
> > // FIXME: This allows use of the VFS; we do not allow use of the
> > @@ -3979,7 +3979,7 @@ bool ASTReader::readASTFileControlBlock(
> >
> > // Initialize the stream
> > llvm::BitstreamReader StreamFile;
> > - PCHContainerOps.ExtractPCH((*Buffer)->getMemBufferRef(), StreamFile);
> > + PCHContainerRdr.ExtractPCH((*Buffer)->getMemBufferRef(), StreamFile);
> > BitstreamCursor Stream(StreamFile);
> >
> > // Sniff for the signature.
> > @@ -4160,12 +4160,12 @@ bool ASTReader::readASTFileControlBlock(
> >
> > bool ASTReader::isAcceptableASTFile(
> > StringRef Filename, FileManager &FileMgr,
> > - const PCHContainerOperations &PCHContainerOps, const LangOptions
> &LangOpts,
> > + const PCHContainerReader &PCHContainerRdr, const LangOptions
> &LangOpts,
> > const TargetOptions &TargetOpts, const PreprocessorOptions &PPOpts,
> > std::string ExistingModuleCachePath) {
> > SimplePCHValidator validator(LangOpts, TargetOpts, PPOpts,
> > ExistingModuleCachePath, FileMgr);
> > - return !readASTFileControlBlock(Filename, FileMgr, PCHContainerOps,
> > + return !readASTFileControlBlock(Filename, FileMgr, PCHContainerRdr,
> > validator);
> > }
> >
> > @@ -8472,7 +8472,7 @@ void ASTReader::pushExternalDeclIntoScop
> > }
> >
> > ASTReader::ASTReader(Preprocessor &PP, ASTContext &Context,
> > - const PCHContainerOperations &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > StringRef isysroot, bool DisableValidation,
> > bool AllowASTWithCompilerErrors,
> > bool AllowConfigurationMismatch, bool
> ValidateSystemInputs,
> > @@ -8480,9 +8480,9 @@ ASTReader::ASTReader(Preprocessor &PP, A
> > std::unique_ptr<llvm::Timer> ReadTimer)
> > : Listener(new PCHValidator(PP, *this)),
> DeserializationListener(nullptr),
> > OwnsDeserializationListener(false),
> SourceMgr(PP.getSourceManager()),
> > - FileMgr(PP.getFileManager()), PCHContainerOps(PCHContainerOps),
> > + FileMgr(PP.getFileManager()), PCHContainerRdr(PCHContainerRdr),
> > Diags(PP.getDiagnostics()), SemaObj(nullptr), PP(PP),
> Context(Context),
> > - Consumer(nullptr), ModuleMgr(PP.getFileManager(),
> PCHContainerOps),
> > + Consumer(nullptr), ModuleMgr(PP.getFileManager(),
> PCHContainerRdr),
> > ReadTimer(std::move(ReadTimer)),
> > isysroot(isysroot), DisableValidation(DisableValidation),
> > AllowASTWithCompilerErrors(AllowASTWithCompilerErrors),
> >
> > Modified: cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp (original)
> > +++ cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp Thu Jul 16
> 20:19:54 2015
> > @@ -385,7 +385,7 @@ namespace {
> > /// \brief Builder that generates the global module index file.
> > class GlobalModuleIndexBuilder {
> > FileManager &FileMgr;
> > - const PCHContainerOperations &PCHContainerOps;
> > + const PCHContainerReader &PCHContainerRdr;
> >
> > /// \brief Mapping from files to module file information.
> > typedef llvm::MapVector<const FileEntry *, ModuleFileInfo>
> ModuleFilesMap;
> > @@ -419,8 +419,8 @@ namespace {
> >
> > public:
> > explicit GlobalModuleIndexBuilder(
> > - FileManager &FileMgr, const PCHContainerOperations
> &PCHContainerOps)
> > - : FileMgr(FileMgr), PCHContainerOps(PCHContainerOps) {}
> > + FileManager &FileMgr, const PCHContainerReader &PCHContainerRdr)
> > + : FileMgr(FileMgr), PCHContainerRdr(PCHContainerRdr) {}
> >
> > /// \brief Load the contents of the given module file into the
> builder.
> > ///
> > @@ -505,7 +505,7 @@ bool GlobalModuleIndexBuilder::loadModul
> >
> > // Initialize the input stream
> > llvm::BitstreamReader InStreamFile;
> > - PCHContainerOps.ExtractPCH((*Buffer)->getMemBufferRef(),
> InStreamFile);
> > + PCHContainerRdr.ExtractPCH((*Buffer)->getMemBufferRef(),
> InStreamFile);
> > llvm::BitstreamCursor InStream(InStreamFile);
> >
> > // Sniff for the signature.
> > @@ -768,7 +768,7 @@ void GlobalModuleIndexBuilder::writeInde
> >
> > GlobalModuleIndex::ErrorCode
> > GlobalModuleIndex::writeIndex(FileManager &FileMgr,
> > - const PCHContainerOperations
> &PCHContainerOps,
> > + const PCHContainerReader &PCHContainerRdr,
> > StringRef Path) {
> > llvm::SmallString<128> IndexPath;
> > IndexPath += Path;
> > @@ -792,7 +792,7 @@ GlobalModuleIndex::writeIndex(FileManage
> > }
> >
> > // The module index builder.
> > - GlobalModuleIndexBuilder Builder(FileMgr, PCHContainerOps);
> > + GlobalModuleIndexBuilder Builder(FileMgr, PCHContainerRdr);
> >
> > // Load each of the module files.
> > std::error_code EC;
> >
> > Modified: cfe/trunk/lib/Serialization/ModuleManager.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ModuleManager.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/Serialization/ModuleManager.cpp (original)
> > +++ cfe/trunk/lib/Serialization/ModuleManager.cpp Thu Jul 16 20:19:54
> 2015
> > @@ -139,7 +139,7 @@ ModuleManager::addModule(StringRef FileN
> > }
> >
> > // Initialize the stream.
> > - PCHContainerOps.ExtractPCH(New->Buffer->getMemBufferRef(),
> New->StreamFile);
> > + PCHContainerRdr.ExtractPCH(New->Buffer->getMemBufferRef(),
> New->StreamFile);
> > }
> >
> > if (ExpectedSignature) {
> > @@ -290,8 +290,8 @@ void ModuleManager::moduleFileAccepted(M
> > }
> >
> > ModuleManager::ModuleManager(FileManager &FileMgr,
> > - const PCHContainerOperations
> &PCHContainerOps)
> > - : FileMgr(FileMgr), PCHContainerOps(PCHContainerOps), GlobalIndex(),
> > + const PCHContainerReader &PCHContainerRdr)
> > + : FileMgr(FileMgr), PCHContainerRdr(PCHContainerRdr), GlobalIndex(),
> > FirstVisitState(nullptr) {}
> >
> > ModuleManager::~ModuleManager() {
> >
> > Modified: cfe/trunk/test/Modules/pch_container.m
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/pch_container.m?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/test/Modules/pch_container.m (original)
> > +++ cfe/trunk/test/Modules/pch_container.m Thu Jul 16 20:19:54 2015
> > @@ -1,9 +1,11 @@
> > @import DependsOnModule;
> > // REQUIRES: x86-registered-target
> > -// RUN: rm -rf %t-MachO %t-ELF %t-ELF_SPLIT %t-COFF
> > -// RUN: %clang_cc1 -triple=x86_64-apple-darwin -fmodules
> -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t-MachO
> -F %S/Inputs %s
> > -// RUN: %clang_cc1 -triple=x86_64-linux-elf -fmodules
> -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t-ELF -F
> %S/Inputs %s
> > -// RUN: %clang_cc1 -triple=x86_64-windows-coff -fmodules
> -fimplicit-module-maps -fdisable-module-hash -fmodules-cache-path=%t-COFF
> -F %S/Inputs %s
> > +// RUN: rm -rf %t-MachO %t-ELF %t-ELF_SPLIT %t-COFF %t-raw
> > +// RUN: %clang_cc1 -triple=x86_64-apple-darwin -fmodules
> -fmodule-format=obj -fimplicit-module-maps -fdisable-module-hash
> -fmodules-cache-path=%t-MachO -F %S/Inputs %s
> > +// RUN: %clang_cc1 -triple=x86_64-linux-elf -fmodules
> -fmodule-format=obj -fimplicit-module-maps -fdisable-module-hash
> -fmodules-cache-path=%t-ELF -F %S/Inputs %s
> > +// RUN: %clang_cc1 -triple=x86_64-windows-coff -fmodules
> -fmodule-format=obj -fimplicit-module-maps -fdisable-module-hash
> -fmodules-cache-path=%t-COFF -F %S/Inputs %s
> > +// RUN: %clang_cc1 -triple=x86_64-apple-darwin -fmodules
> -fmodule-format=raw -fimplicit-module-maps -fdisable-module-hash
> -fmodules-cache-path=%t-raw -F %S/Inputs %s
> > +
> >
> > // RUN: llvm-objdump -section-headers %t-MachO/DependsOnModule.pcm
> %t-ELF/DependsOnModule.pcm %t-COFF/DependsOnModule.pcm | FileCheck %s
> > // CHECK: file format Mach-O 64-bit x86-64
> > @@ -13,5 +15,6 @@
> > // CHECK: file format COFF-x86-64
> > // CHECK: clangast {{[0-9a-f]+}} {{[0-9a-f]+}}
> >
> > +// RUN: not llvm-objdump -section-headers %t-raw/DependsOnModule.pcm
> >
> > // RUN: %clang_cc1 -split-dwarf-file t-split.dwo
> -triple=x86_64-linux-elf -fmodules -fimplicit-module-maps
> -fdisable-module-hash -fmodules-cache-path=%t-ELF_SPLIT -F %S/Inputs %s -o
> %t-split.o
> >
> > Modified: cfe/trunk/tools/arcmt-test/arcmt-test.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/arcmt-test/arcmt-test.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/arcmt-test/arcmt-test.cpp (original)
> > +++ cfe/trunk/tools/arcmt-test/arcmt-test.cpp Thu Jul 16 20:19:54 2015
> > @@ -132,7 +132,7 @@ static bool checkForMigration(StringRef
> > return false;
> >
> > arcmt::checkForManualIssues(CI, CI.getFrontendOpts().Inputs[0],
> > -
> std::make_shared<RawPCHContainerOperations>(),
> > +
> std::make_shared<PCHContainerOperations>(),
> > Diags->getClient());
> > return Diags->getClient()->getNumErrors() > 0;
> > }
> > @@ -171,8 +171,8 @@ static bool performTransformations(Strin
> > if (!origCI.getLangOpts()->ObjC1)
> > return false;
> >
> > - MigrationProcess migration(
> > - origCI, std::make_shared<RawPCHContainerOperations>(),
> DiagClient);
> > + MigrationProcess migration(origCI,
> std::make_shared<PCHContainerOperations>(),
> > + DiagClient);
> >
> > std::vector<TransformFn>
> > transforms =
> arcmt::getAllTransformations(origCI.getLangOpts()->getGC(),
> >
> > Modified: cfe/trunk/tools/clang-check/CMakeLists.txt
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/CMakeLists.txt?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/clang-check/CMakeLists.txt (original)
> > +++ cfe/trunk/tools/clang-check/CMakeLists.txt Thu Jul 16 20:19:54 2015
> > @@ -11,7 +11,6 @@ add_clang_executable(clang-check
> > target_link_libraries(clang-check
> > clangAST
> > clangBasic
> > - clangCodeGen
> > clangDriver
> > clangFrontend
> > clangRewriteFrontend
> >
> > Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/ClangCheck.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/clang-check/ClangCheck.cpp (original)
> > +++ cfe/trunk/tools/clang-check/ClangCheck.cpp Thu Jul 16 20:19:54 2015
> > @@ -160,8 +160,7 @@ int main(int argc, const char **argv) {
> >
> > CommonOptionsParser OptionsParser(argc, argv, ClangCheckCategory);
> > ClangTool Tool(OptionsParser.getCompilations(),
> > - OptionsParser.getSourcePathList(),
> > -
> std::make_shared<clang::ObjectFilePCHContainerOperations>());
> > + OptionsParser.getSourcePathList());
> >
> > // Clear adjusters because -fsyntax-only is inserted by the default
> chain.
> > Tool.clearArgumentsAdjusters();
> >
> > Modified: cfe/trunk/tools/driver/cc1_main.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1_main.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/driver/cc1_main.cpp (original)
> > +++ cfe/trunk/tools/driver/cc1_main.cpp Thu Jul 16 20:19:54 2015
> > @@ -65,10 +65,14 @@ void initializePollyPasses(llvm::PassReg
> > #endif
> >
> > int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void
> *MainAddr) {
> > - std::unique_ptr<CompilerInstance> Clang(new CompilerInstance(
> > - std::make_shared<ObjectFilePCHContainerOperations>()));
> > + std::unique_ptr<CompilerInstance> Clang(new CompilerInstance());
> > IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
> >
> > + // Register the support for object-file-wrapped Clang modules.
> > + auto PCHOps = Clang->getPCHContainerOperations();
> > +
> PCHOps->registerWriter(llvm::make_unique<ObjectFilePCHContainerWriter>());
> > +
> PCHOps->registerReader(llvm::make_unique<ObjectFilePCHContainerReader>());
> > +
> > // Initialize targets first, so that --version shows registered
> targets.
> > llvm::InitializeAllTargets();
> > llvm::InitializeAllTargetMCs();
> >
> > Modified: cfe/trunk/tools/libclang/CIndex.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> > +++ cfe/trunk/tools/libclang/CIndex.cpp Thu Jul 16 20:19:54 2015
> > @@ -2884,8 +2884,8 @@ CXIndex clang_createIndex(int excludeDec
> > llvm::InitializeAllAsmPrinters();
> > llvm::InitializeAllAsmParsers();
> >
> > - CIndexer *CIdxr =
> > - new
> CIndexer(std::make_shared<ObjectFilePCHContainerOperations>());
> > + CIndexer *CIdxr = new CIndexer();
> > +
> > if (excludeDeclarationsFromPCH)
> > CIdxr->setOnlyLocalDecls();
> > if (displayDiagnostics)
> > @@ -2954,8 +2954,8 @@ enum CXErrorCode clang_createTranslation
> > IntrusiveRefCntPtr<DiagnosticsEngine> Diags =
> > CompilerInstance::createDiagnostics(new DiagnosticOptions());
> > std::unique_ptr<ASTUnit> AU = ASTUnit::LoadFromASTFile(
> > - ast_filename, CXXIdx->getPCHContainerOperations(), Diags,
> FileSystemOpts,
> > - CXXIdx->getOnlyLocalDecls(), None,
> > + ast_filename,
> CXXIdx->getPCHContainerOperations()->getRawReader(), Diags,
> > + FileSystemOpts, CXXIdx->getOnlyLocalDecls(), None,
> > /*CaptureDiagnostics=*/true,
> > /*AllowPCHWithCompilerErrors=*/true,
> > /*UserFilesAreVolatile=*/true);
> >
> > Modified: cfe/trunk/tools/libclang/CIndexer.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndexer.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/libclang/CIndexer.h (original)
> > +++ cfe/trunk/tools/libclang/CIndexer.h Thu Jul 16 20:19:54 2015
> > @@ -44,7 +44,7 @@ class CIndexer {
> >
> > public:
> > CIndexer(std::shared_ptr<PCHContainerOperations> PCHContainerOps =
> > - std::make_shared<RawPCHContainerOperations>())
> > + std::make_shared<PCHContainerOperations>())
> > : OnlyLocalDecls(false), DisplayDiagnostics(false),
> > Options(CXGlobalOpt_None), PCHContainerOps(PCHContainerOps) {}
> >
> >
> > Modified: cfe/trunk/tools/libclang/CMakeLists.txt
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CMakeLists.txt?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/tools/libclang/CMakeLists.txt (original)
> > +++ cfe/trunk/tools/libclang/CMakeLists.txt Thu Jul 16 20:19:54 2015
> > @@ -40,7 +40,6 @@ set(SOURCES
> > set(LIBS
> > clangAST
> > clangBasic
> > - clangCodeGen
> > clangFrontend
> > clangIndex
> > clangLex
> >
> > Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h?rev=242499&r1=242498&r2=242499&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h (original)
> > +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.h Thu Jul 16
> 20:19:54 2015
> > @@ -80,7 +80,7 @@ testing::AssertionResult matchesConditio
> > Args.push_back("-frtti");
> > Args.push_back("-fexceptions");
> > if (!runToolOnCodeWithArgs(Factory->create(), Code, Args, Filename,
> > -
> std::make_shared<RawPCHContainerOperations>(),
> > + std::make_shared<PCHContainerOperations>(),
> > VirtualMappedFiles)) {
> > return testing::AssertionFailure() << "Parsing error in \"" << Code
> << "\"";
> > }
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150717/0b5bceac/attachment.html>
More information about the cfe-commits
mailing list