I am dubious if this had cyclic dependencies, between clangCodeGen and clangFrontend.
2015-02-21 8:34 GMT+09:00 Adrian Prantl <[email protected]>: > Author: adrian > Date: Fri Feb 20 17:34:26 2015 > New Revision: 230089 > > URL: http://llvm.org/viewvc/llvm-project?rev=230089&view=rev > Log: > Wrap clang module files in a Mach-O, ELF, or COFF container. > This is a necessary prerequisite for debugging with modules. > The .pcm files become containers that hold the serialized AST which allows > us to store debug information in the module file that can be shared by all > object files that were built importing the module. > > rdar://problem/19104245 > > This reapplies r230044 with a fixed configure+make build and updated > dependencies. Take 2. > > Added: > cfe/trunk/include/clang/CodeGen/CodeGenModuleContainer.h > cfe/trunk/lib/CodeGen/CodeGenModuleContainer.cpp > cfe/trunk/test/Modules/module_container.m > Modified: > cfe/trunk/docs/PCHInternals.rst > cfe/trunk/include/clang/Frontend/FrontendActions.h > cfe/trunk/include/clang/Serialization/ASTReader.h > cfe/trunk/include/clang/Serialization/ASTWriter.h > cfe/trunk/lib/CodeGen/CMakeLists.txt > cfe/trunk/lib/Frontend/ASTUnit.cpp > cfe/trunk/lib/Frontend/CMakeLists.txt > cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp > cfe/trunk/lib/Frontend/FrontendActions.cpp > cfe/trunk/lib/Frontend/MultiplexConsumer.cpp > cfe/trunk/lib/Serialization/ASTReader.cpp > cfe/trunk/lib/Serialization/CMakeLists.txt > cfe/trunk/lib/Serialization/GeneratePCH.cpp > cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp > cfe/trunk/lib/Serialization/ModuleManager.cpp > cfe/trunk/test/CMakeLists.txt > cfe/trunk/test/PCH/floating-literal.c > cfe/trunk/tools/arcmt-test/Makefile > cfe/trunk/tools/c-index-test/Makefile > cfe/trunk/tools/clang-check/Makefile > cfe/trunk/tools/diagtool/Makefile > cfe/trunk/tools/libclang/CMakeLists.txt > cfe/trunk/tools/libclang/Makefile > cfe/trunk/unittests/AST/Makefile > cfe/trunk/unittests/ASTMatchers/Dynamic/Makefile > cfe/trunk/unittests/ASTMatchers/Makefile > cfe/trunk/unittests/CodeGen/Makefile > cfe/trunk/unittests/Frontend/Makefile > cfe/trunk/unittests/Sema/Makefile > cfe/trunk/unittests/Tooling/Makefile > > Modified: cfe/trunk/docs/PCHInternals.rst > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/PCHInternals.rst?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/docs/PCHInternals.rst (original) > +++ cfe/trunk/docs/PCHInternals.rst Fri Feb 20 17:34:26 2015 > @@ -65,6 +65,9 @@ be included at the beginning of the tran > AST file format required for modules are discussed in the section on > :ref:`modules <pchinternals-modules>`. > > +Clang's AST files are Mach-O, ELF, or COFF containers that contain a > +``__clangast`` section which holds the AST bitstream. > + > Clang's AST files are designed with a compact on-disk representation, which > minimizes both creation time and the time required to initially load the AST > file. The AST file itself contains a serialized representation of Clang's > > Added: cfe/trunk/include/clang/CodeGen/CodeGenModuleContainer.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/CodeGenModuleContainer.h?rev=230089&view=auto > ============================================================================== > --- cfe/trunk/include/clang/CodeGen/CodeGenModuleContainer.h (added) > +++ cfe/trunk/include/clang/CodeGen/CodeGenModuleContainer.h Fri Feb 20 > 17:34:26 2015 > @@ -0,0 +1,34 @@ > +//===--- CodeGen/ModuleContainerGenerator.h - Emit .pcm files ---*- 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_CODEGEN_MODULE_CONTAINER_H > +#define LLVM_CLANG_CODEGEN_MODULE_CONTAINER_H > + > +#include "ModuleBuilder.h" > +#include <string> > + > +namespace llvm { > +class raw_ostream; > +} > + > +namespace clang { > + > +class PCHGenerator; > +class TargetOptions; > + > +/// \brief Create a CodeGenerator instance. > +/// It is the responsibility of the caller to call delete on > +/// the allocated CodeGenerator instance. > +CodeGenerator *CreateModuleContainerGenerator( > + DiagnosticsEngine &Diags, const std::string &ModuleName, > + const CodeGenOptions &CGO, const TargetOptions &TO, const LangOptions > &LO, > + llvm::raw_ostream *OS, PCHGenerator *PCHGen); > +} > + > +#endif > > Modified: cfe/trunk/include/clang/Frontend/FrontendActions.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendActions.h?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Frontend/FrontendActions.h (original) > +++ cfe/trunk/include/clang/Frontend/FrontendActions.h Fri Feb 20 17:34:26 > 2015 > @@ -69,6 +69,14 @@ protected: > StringRef InFile) override; > }; > > +/// \brief Emits the output of a GeneratePCHAction or GenerateModuleAction > into > +/// a Mach-O/ELF/COFF container. > +class GeneratePCMContainerAction : public FrontendAction { > +protected: > + std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, > + StringRef InFile) override; > +}; > + > class GeneratePCHAction : public ASTFrontendAction { > protected: > std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI, > > Modified: cfe/trunk/include/clang/Serialization/ASTReader.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Serialization/ASTReader.h (original) > +++ cfe/trunk/include/clang/Serialization/ASTReader.h Fri Feb 20 17:34:26 2015 > @@ -1127,6 +1127,10 @@ private: > public: > void ResolveImportedPath(ModuleFile &M, std::string &Filename); > static void ResolveImportedPath(std::string &Filename, StringRef Prefix); > + /// \brief Initialize a BitstreamReader with the `__clangast` section from > an > + /// object file container found in Buffer. > + static void InitStreamFileWithModule(llvm::MemoryBufferRef Buffer, > + llvm::BitstreamReader &StreamFile); > > private: > struct ImportedModule { > > Modified: cfe/trunk/include/clang/Serialization/ASTWriter.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTWriter.h?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Serialization/ASTWriter.h (original) > +++ cfe/trunk/include/clang/Serialization/ASTWriter.h Fri Feb 20 17:34:26 2015 > @@ -823,10 +823,13 @@ class PCHGenerator : public SemaConsumer > std::string OutputFile; > clang::Module *Module; > std::string isysroot; > - raw_ostream *Out; > Sema *SemaPtr; > - SmallVector<char, 128> Buffer; > + // This buffer is always large, but BitstreamWriter really wants a > + // SmallVectorImpl<char>. > + SmallVector<char, 0> Buffer; > llvm::BitstreamWriter Stream; > + std::function<void(SmallVectorImpl<char>*)> > + SerializationFinishedCallback; > ASTWriter Writer; > bool AllowASTWithErrors; > bool HasEmittedPCH; > @@ -836,16 +839,21 @@ protected: > const ASTWriter &getWriter() const { return Writer; } > > public: > - PCHGenerator(const Preprocessor &PP, StringRef OutputFile, > + PCHGenerator(const Preprocessor &PP, > + StringRef OutputFile, > clang::Module *Module, > - StringRef isysroot, raw_ostream *Out, > + StringRef isysroot, > bool AllowASTWithErrors = false); > ~PCHGenerator(); > void InitializeSema(Sema &S) override { SemaPtr = &S; } > void HandleTranslationUnit(ASTContext &Ctx) override; > ASTMutationListener *GetASTMutationListener() override; > ASTDeserializationListener *GetASTDeserializationListener() override; > - > + /// \brief Register a callback to be invoked when the serialization is > done. > + void RegisterSerializationFinishedCallback( > + const std::function<void(SmallVectorImpl<char>*)> Fn) { > + SerializationFinishedCallback = Fn; > + } > bool hasEmittedPCH() const { return HasEmittedPCH; } > }; > > > Modified: cfe/trunk/lib/CodeGen/CMakeLists.txt > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CMakeLists.txt?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CMakeLists.txt (original) > +++ cfe/trunk/lib/CodeGen/CMakeLists.txt Fri Feb 20 17:34:26 2015 > @@ -1,4 +1,5 @@ > set(LLVM_LINK_COMPONENTS > + ${LLVM_TARGETS_TO_BUILD} > Analysis > BitReader > BitWriter > @@ -63,6 +64,7 @@ add_clang_library(clangCodeGen > CodeGenAction.cpp > CodeGenFunction.cpp > CodeGenModule.cpp > + CodeGenModuleContainer.cpp > CodeGenPGO.cpp > CodeGenTBAA.cpp > CodeGenTypes.cpp > > Added: cfe/trunk/lib/CodeGen/CodeGenModuleContainer.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModuleContainer.cpp?rev=230089&view=auto > ============================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenModuleContainer.cpp (added) > +++ cfe/trunk/lib/CodeGen/CodeGenModuleContainer.cpp Fri Feb 20 17:34:26 2015 > @@ -0,0 +1,150 @@ > +//===--- CodeGenModuleContainer.cpp - Emit .pcm files > ---------------------===// > +// > +// The LLVM Compiler Infrastructure > +// > +// This file is distributed under the University of Illinois Open Source > +// License. See LICENSE.TXT for details. > +// > +//===----------------------------------------------------------------------===// > + > +#include "clang/CodeGen/CodeGenModuleContainer.h" > +#include "CodeGenModule.h" > +#include "clang/AST/ASTContext.h" > +#include "clang/AST/DeclObjC.h" > +#include "clang/AST/Expr.h" > +#include "clang/AST/RecursiveASTVisitor.h" > +#include "clang/Basic/Diagnostic.h" > +#include "clang/Basic/TargetInfo.h" > +#include "clang/CodeGen/BackendUtil.h" > +#include "clang/Frontend/CodeGenOptions.h" > +#include "clang/Serialization/ASTWriter.h" > +#include "llvm/ADT/StringRef.h" > +#include "llvm/IR/Constants.h" > +#include "llvm/IR/DataLayout.h" > +#include "llvm/IR/LLVMContext.h" > +#include "llvm/IR/Module.h" > +#include "llvm/Support/TargetRegistry.h" > +#include <memory> > +using namespace clang; > + > +namespace { > +class ModuleContainerGenerator : public CodeGenerator { > + DiagnosticsEngine &Diags; > + std::unique_ptr<const llvm::DataLayout> TD; > + ASTContext *Ctx; > + const CodeGenOptions CodeGenOpts; > + const TargetOptions TargetOpts; > + const LangOptions LangOpts; > + llvm::LLVMContext VMContext; > + std::unique_ptr<llvm::Module> M; > + std::unique_ptr<CodeGen::CodeGenModule> Builder; > + raw_ostream *OS; > + SmallVectorImpl<char> *SerializedASTBuffer; > + > +public: > + ModuleContainerGenerator(DiagnosticsEngine &diags, > + const std::string &ModuleName, > + const CodeGenOptions &CGO, const TargetOptions > &TO, > + const LangOptions &LO, raw_ostream *OS, > + PCHGenerator *PCHGen) > + : Diags(diags), CodeGenOpts(CGO), TargetOpts(TO), LangOpts(LO), > + M(new llvm::Module(ModuleName, VMContext)), OS(OS) { > + PCHGen->RegisterSerializationFinishedCallback( > + [&](SmallVectorImpl<char> *Buf){ > + SerializedASTBuffer = Buf; > + }); > + } > + > + virtual ~ModuleContainerGenerator() {} > + llvm::Module *GetModule() override { return M.get(); } > + llvm::Module *ReleaseModule() override { return M.release(); } > + > + /// Lifted from ModuleBuilder. > + const Decl *GetDeclForMangledName(StringRef MangledName) override { > + GlobalDecl Result; > + if (!Builder->lookupRepresentativeDecl(MangledName, Result)) > + return nullptr; > + const Decl *D = Result.getCanonicalDecl().getDecl(); > + if (auto FD = dyn_cast<FunctionDecl>(D)) { > + if (FD->hasBody(FD)) > + return FD; > + } else if (auto TD = dyn_cast<TagDecl>(D)) { > + if (auto Def = TD->getDefinition()) > + return Def; > + } > + return D; > + } > + > + void Initialize(ASTContext &Context) override { > + Ctx = &Context; > + M->setTargetTriple(Ctx->getTargetInfo().getTriple().getTriple()); > + M->setDataLayout(Ctx->getTargetInfo().getTargetDescription()); > + TD.reset(new > llvm::DataLayout(Ctx->getTargetInfo().getTargetDescription())); > + Builder.reset( > + new CodeGen::CodeGenModule(Context, CodeGenOpts, *M, *TD, Diags)); > + } > + > + /// Emit a container holding the serialized AST. > + void HandleTranslationUnit(ASTContext &Ctx) override { > + if (Diags.hasErrorOccurred()) { > + if (Builder) > + Builder->clear(); > + M.reset(); > + return; > + } > + > + // Finalize the Builder. > + if (Builder) > + Builder->Release(); > + > + // Initialize the backend if we haven't done so already. > + LLVMInitializeAllTargetInfos(); > + LLVMInitializeAllTargets(); > + LLVMInitializeAllAsmPrinters(); > + LLVMInitializeAllTargetMCs(); > + > + // Ensure the target exists. > + std::string Error; > + auto Triple = Ctx.getTargetInfo().getTriple(); > + if (!llvm::TargetRegistry::lookupTarget(Triple.getTriple(), Error)) > + llvm::report_fatal_error(Error); > + > + // Emit the serialized Clang AST into its own section. > + auto Size = SerializedASTBuffer->size(); > + auto Int8Ty = llvm::Type::getInt8Ty(VMContext); > + auto *Ty = llvm::ArrayType::get(Int8Ty, Size); > + auto *Data = llvm::ConstantDataArray::getString(VMContext, > + StringRef(SerializedASTBuffer->data(), Size), /*AddNull=*/false); > + auto *ASTSym = new llvm::GlobalVariable(*M, Ty, /*constant*/ true, > + llvm::GlobalVariable::InternalLinkage, Data, "__clang_ast"); > + ASTSym->setAlignment(8); > + if (Triple.isOSBinFormatMachO()) > + // Include Mach-O segment name. > + ASTSym->setSection("__CLANG,__clangast"); > + else if (Triple.isOSBinFormatCOFF()) > + // Adhere to COFF eight-character limit. > + ASTSym->setSection("clangast"); > + else > + ASTSym->setSection("__clangast"); > + > + // Use the LLVM backend to emit the pcm. > + EmitBackendOutput(Diags, CodeGenOpts, TargetOpts, LangOpts, > + Ctx.getTargetInfo().getTargetDescription(), M.get(), > + BackendAction::Backend_EmitObj, OS); > + > + // Make sure the module container hits disk now. > + OS->flush(); > + > + // Free up some memory, in case the process is kept alive. > + SerializedASTBuffer->clear(); > + } > +}; > +} > + > +CodeGenerator *clang::CreateModuleContainerGenerator( > + DiagnosticsEngine &Diags, const std::string &ModuleName, > + const CodeGenOptions &CGO, const TargetOptions &TO, const LangOptions > &LO, > + llvm::raw_ostream *OS, PCHGenerator *PCHGen) { > + return > + new ModuleContainerGenerator(Diags, ModuleName, CGO, TO, LO, OS, PCHGen); > +} > > Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original) > +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Fri Feb 20 17:34:26 2015 > @@ -914,13 +914,20 @@ class PrecompilePreambleConsumer : publi > unsigned &Hash; > std::vector<Decl *> TopLevelDecls; > PrecompilePreambleAction *Action; > + raw_ostream *Out; > + SmallVectorImpl<char> *SerializedASTBuffer; > > public: > PrecompilePreambleConsumer(ASTUnit &Unit, PrecompilePreambleAction *Action, > const Preprocessor &PP, StringRef isysroot, > raw_ostream *Out) > - : PCHGenerator(PP, "", nullptr, isysroot, Out, > /*AllowASTWithErrors=*/true), > - Unit(Unit), Hash(Unit.getCurrentTopLevelHashValue()), Action(Action) { > + : PCHGenerator(PP, "", nullptr, isysroot, /*AllowASTWithErrors=*/true), > + Unit(Unit), Hash(Unit.getCurrentTopLevelHashValue()), Action(Action), > + Out(Out) { > + RegisterSerializationFinishedCallback( > + [&](SmallVectorImpl<char> *Buf){ > + SerializedASTBuffer = Buf; > + }); > Hash = 0; > } > > @@ -941,6 +948,13 @@ public: > void HandleTranslationUnit(ASTContext &Ctx) override { > PCHGenerator::HandleTranslationUnit(Ctx); > if (hasEmittedPCH()) { > + // Write the generated bitstream to "Out". > + Out->write((char *)&SerializedASTBuffer->front(), > + SerializedASTBuffer->size()); > + // Make sure it hits disk now. > + Out->flush(); > + SerializedASTBuffer->clear(); > + > // Translate the top-level declarations we captured during > // parsing into declaration IDs in the precompiled > // preamble. This will allow us to deserialize those top-level > > Modified: cfe/trunk/lib/Frontend/CMakeLists.txt > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CMakeLists.txt?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/CMakeLists.txt (original) > +++ cfe/trunk/lib/Frontend/CMakeLists.txt Fri Feb 20 17:34:26 2015 > @@ -45,6 +45,7 @@ add_clang_library(clangFrontend > LINK_LIBS > clangAST > clangBasic > + clangCodeGen > clangDriver > clangEdit > clangLex > > Modified: cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp (original) > +++ cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp Fri Feb 20 17:34:26 2015 > @@ -156,11 +156,13 @@ IntrusiveRefCntPtr<ExternalSemaSource> c > &Clang->getPreprocessor()); > Clang->createASTContext(); > > - SmallVector<char, 256> serialAST; > - llvm::raw_svector_ostream OS(serialAST); > - auto consumer = > - llvm::make_unique<PCHGenerator>(Clang->getPreprocessor(), "-", > nullptr, > - /*isysroot=*/"", &OS); > + auto consumer = llvm::make_unique<PCHGenerator>(Clang->getPreprocessor(), > + "-", nullptr, /*isysroot=*/""); > + SmallVectorImpl<char> *serialAST; > + consumer->RegisterSerializationFinishedCallback( > + [&](SmallVectorImpl<char> *Buf){ > + serialAST = Buf; > + }); > Clang->getASTContext().setASTMutationListener( > > consumer->GetASTMutationListener()); > Clang->setASTConsumer(std::move(consumer)); > @@ -197,7 +199,9 @@ IntrusiveRefCntPtr<ExternalSemaSource> c > > ParseAST(Clang->getSema()); > Clang->getDiagnosticClient().EndSourceFile(); > - SerialBufs.push_back(llvm::MemoryBuffer::getMemBufferCopy(OS.str())); > + SerialBufs.push_back(llvm::MemoryBuffer:: > + getMemBufferCopy(StringRef(serialAST->data(), serialAST->size()))); > + serialAST->clear(); > source->CIs.push_back(Clang.release()); > } > > > Modified: cfe/trunk/lib/Frontend/FrontendActions.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/FrontendActions.cpp (original) > +++ cfe/trunk/lib/Frontend/FrontendActions.cpp Fri Feb 20 17:34:26 2015 > @@ -10,10 +10,13 @@ > #include "clang/Frontend/FrontendActions.h" > #include "clang/AST/ASTConsumer.h" > #include "clang/Basic/FileManager.h" > +#include "clang/Basic/TargetInfo.h" > +#include "clang/CodeGen/CodeGenModuleContainer.h" > #include "clang/Frontend/ASTConsumers.h" > #include "clang/Frontend/ASTUnit.h" > #include "clang/Frontend/CompilerInstance.h" > #include "clang/Frontend/FrontendDiagnostic.h" > +#include "clang/Frontend/MultiplexConsumer.h" > #include "clang/Frontend/Utils.h" > #include "clang/Lex/HeaderSearch.h" > #include "clang/Lex/Pragma.h" > @@ -85,8 +88,23 @@ GeneratePCHAction::CreateASTConsumer(Com > > if (!CI.getFrontendOpts().RelocatablePCH) > Sysroot.clear(); > - return llvm::make_unique<PCHGenerator>(CI.getPreprocessor(), OutputFile, > - nullptr, Sysroot, OS); > + > + std::vector<std::unique_ptr<ASTConsumer>> Consumers; > + Consumers.push_back(llvm::make_unique<PCHGenerator>(CI.getPreprocessor(), > + OutputFile, nullptr, > + Sysroot)); > + > + auto CGOpts = CI.getCodeGenOpts(); > + // The debug info emitted by ModuleContainerGenerator is not affected by > the > + // optimization level. > + CGOpts.OptimizationLevel = 0; > + CGOpts.setDebugInfo(CodeGenOptions::LimitedDebugInfo); > + Consumers.push_back(std::unique_ptr<ASTConsumer>( > + CreateModuleContainerGenerator(CI.getDiagnostics(), "PCH", CGOpts, > + CI.getTargetOpts(), CI.getLangOpts(), > OS, > + > cast<PCHGenerator>(Consumers[0].get())))); > + > + return llvm::make_unique<MultiplexConsumer>(std::move(Consumers)); > } > > bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, > @@ -122,8 +140,22 @@ GenerateModuleAction::CreateASTConsumer( > if (ComputeASTConsumerArguments(CI, InFile, Sysroot, OutputFile, OS)) > return nullptr; > > - return llvm::make_unique<PCHGenerator>(CI.getPreprocessor(), OutputFile, > - Module, Sysroot, OS); > + std::vector<std::unique_ptr<ASTConsumer>> Consumers; > + Consumers.push_back(llvm::make_unique<PCHGenerator>(CI.getPreprocessor(), > + OutputFile, Module, > + Sysroot)); > + > + auto CGOpts = CI.getCodeGenOpts(); > + // The debug info emitted by ModuleContainerGenerator is not affected by > the > + // optimization level. > + CGOpts.OptimizationLevel = 0; > + CGOpts.setDebugInfo(CodeGenOptions::LimitedDebugInfo); > + Consumers.push_back( > + std::unique_ptr<ASTConsumer>(CreateModuleContainerGenerator( > + CI.getDiagnostics(), Module->getFullModuleName(), CGOpts, > + CI.getTargetOpts(), CI.getLangOpts(), OS, > + cast<PCHGenerator>(Consumers[0].get())))); > + return llvm::make_unique<MultiplexConsumer>(std::move(Consumers)); > } > > static SmallVectorImpl<char> & > > Modified: cfe/trunk/lib/Frontend/MultiplexConsumer.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/MultiplexConsumer.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/MultiplexConsumer.cpp (original) > +++ cfe/trunk/lib/Frontend/MultiplexConsumer.cpp Fri Feb 20 17:34:26 2015 > @@ -33,11 +33,14 @@ public: > void ReaderInitialized(ASTReader *Reader) override; > void IdentifierRead(serialization::IdentID ID, > IdentifierInfo *II) override; > + void MacroRead(serialization::MacroID ID, MacroInfo *MI) override; > void TypeRead(serialization::TypeIdx Idx, QualType T) override; > void DeclRead(serialization::DeclID ID, const Decl *D) override; > void SelectorRead(serialization::SelectorID iD, Selector Sel) override; > void MacroDefinitionRead(serialization::PreprocessedEntityID, > MacroDefinition *MD) override; > + void ModuleRead(serialization::SubmoduleID ID, Module *Mod) override; > + > private: > std::vector<ASTDeserializationListener*> Listeners; > }; > @@ -59,6 +62,12 @@ void MultiplexASTDeserializationListener > Listeners[i]->IdentifierRead(ID, II); > } > > +void MultiplexASTDeserializationListener::MacroRead( > + serialization::MacroID ID, MacroInfo *MI) { > + for (auto &Listener : Listeners) > + Listener->MacroRead(ID, MI); > +} > + > void MultiplexASTDeserializationListener::TypeRead( > serialization::TypeIdx Idx, QualType T) { > for (size_t i = 0, e = Listeners.size(); i != e; ++i) > @@ -83,6 +92,12 @@ void MultiplexASTDeserializationListener > Listeners[i]->MacroDefinitionRead(ID, MD); > } > > +void MultiplexASTDeserializationListener::ModuleRead( > + serialization::SubmoduleID ID, Module *Mod) { > + for (auto &Listener : Listeners) > + Listener->ModuleRead(ID, Mod); > +} > + > // This ASTMutationListener forwards its notifications to a set of > // child listeners. > class MultiplexASTMutationListener : public ASTMutationListener { > @@ -98,11 +113,13 @@ public: > const VarTemplateSpecializationDecl *D) > override; > void AddedCXXTemplateSpecialization(const FunctionTemplateDecl *TD, > const FunctionDecl *D) override; > + void ResolvedExceptionSpec(const FunctionDecl *FD) override; > void DeducedReturnType(const FunctionDecl *FD, QualType ReturnType) > override; > void CompletedImplicitDefinition(const FunctionDecl *D) override; > void StaticDataMemberInstantiated(const VarDecl *D) override; > void AddedObjCCategoryToInterface(const ObjCCategoryDecl *CatD, > const ObjCInterfaceDecl *IFD) override; > + void FunctionDefinitionInstantiated(const FunctionDecl *D) override; > void AddedObjCPropertyInClassExtension(const ObjCPropertyDecl *Prop, > const ObjCPropertyDecl *OrigProp, > const ObjCCategoryDecl *ClassExt) > override; > @@ -149,6 +166,11 @@ void MultiplexASTMutationListener::Added > for (size_t i = 0, e = Listeners.size(); i != e; ++i) > Listeners[i]->AddedCXXTemplateSpecialization(TD, D); > } > +void MultiplexASTMutationListener::ResolvedExceptionSpec( > + const FunctionDecl *FD) { > + for (auto &Listener : Listeners) > + Listener->ResolvedExceptionSpec(FD); > +} > void MultiplexASTMutationListener::DeducedReturnType(const FunctionDecl *FD, > QualType ReturnType) { > for (size_t i = 0, e = Listeners.size(); i != e; ++i) > @@ -170,6 +192,11 @@ void MultiplexASTMutationListener::Added > for (size_t i = 0, e = Listeners.size(); i != e; ++i) > Listeners[i]->AddedObjCCategoryToInterface(CatD, IFD); > } > +void MultiplexASTMutationListener::FunctionDefinitionInstantiated( > + const FunctionDecl *D) { > + for (auto &Listener : Listeners) > + Listener->FunctionDefinitionInstantiated(D); > +} > void MultiplexASTMutationListener::AddedObjCPropertyInClassExtension( > const ObjCPropertyDecl *Prop, > const ObjCPropertyDecl > *OrigProp, > > Modified: cfe/trunk/lib/Serialization/ASTReader.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) > +++ cfe/trunk/lib/Serialization/ASTReader.cpp Fri Feb 20 17:34:26 2015 > @@ -46,6 +46,8 @@ > #include "llvm/ADT/Hashing.h" > #include "llvm/ADT/StringExtras.h" > #include "llvm/Bitcode/BitstreamReader.h" > +#include "llvm/Object/COFF.h" > +#include "llvm/Object/ObjectFile.h" > #include "llvm/Support/ErrorHandling.h" > #include "llvm/Support/FileSystem.h" > #include "llvm/Support/MemoryBuffer.h" > @@ -632,6 +634,27 @@ void PCHValidator::ReadCounter(const Mod > // AST reader implementation > > //===----------------------------------------------------------------------===// > > +void ASTReader::InitStreamFileWithModule(llvm::MemoryBufferRef Buffer, > + llvm::BitstreamReader &StreamFile) { > + if (auto OF = llvm::object::ObjectFile::createObjectFile(Buffer)) { > + bool IsCOFF = isa<llvm::object::COFFObjectFile>(OF.get().get()); > + // Find the clang AST section in the container. > + for (auto &Section : OF->get()->sections()) { > + StringRef Name; > + Section.getName(Name); > + if ((!IsCOFF && Name == "__clangast") || > + ( IsCOFF && Name == "clangast")) { > + StringRef Buf; > + Section.getContents(Buf); > + return StreamFile.init((const unsigned char*)Buf.begin(), > + (const unsigned char*)Buf.end()); > + } > + } > + } > + StreamFile.init((const unsigned char *)Buffer.getBufferStart(), > + (const unsigned char *)Buffer.getBufferEnd()); > +} > + > void ASTReader::setDeserializationListener(ASTDeserializationListener > *Listener, > bool TakeOwnership) { > DeserializationListener = Listener; > @@ -3883,9 +3906,10 @@ ASTReader::ReadASTCore(StringRef FileNam > > ModuleFile &F = *M; > BitstreamCursor &Stream = F.Stream; > + InitStreamFileWithModule(F.Buffer->getMemBufferRef(), F.StreamFile); > Stream.init(&F.StreamFile); > - F.SizeInBits = F.Buffer->getBufferSize() * 8; > - > + F.SizeInBits = F.StreamFile.getBitcodeBytes().getExtent() * 8; > + > // Sniff for the signature. > if (Stream.Read(8) != 'C' || > Stream.Read(8) != 'P' || > @@ -4174,8 +4198,7 @@ std::string ASTReader::getOriginalSource > > // Initialize the stream > llvm::BitstreamReader StreamFile; > - StreamFile.init((const unsigned char *)(*Buffer)->getBufferStart(), > - (const unsigned char *)(*Buffer)->getBufferEnd()); > + InitStreamFileWithModule((*Buffer)->getMemBufferRef(), StreamFile); > BitstreamCursor Stream(StreamFile); > > // Sniff for the signature. > @@ -4270,8 +4293,7 @@ bool ASTReader::readASTFileControlBlock( > > // Initialize the stream > llvm::BitstreamReader StreamFile; > - StreamFile.init((const unsigned char *)(*Buffer)->getBufferStart(), > - (const unsigned char *)(*Buffer)->getBufferEnd()); > + InitStreamFileWithModule((*Buffer)->getMemBufferRef(), StreamFile); > BitstreamCursor Stream(StreamFile); > > // Sniff for the signature. > > Modified: cfe/trunk/lib/Serialization/CMakeLists.txt > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/CMakeLists.txt?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/CMakeLists.txt (original) > +++ cfe/trunk/lib/Serialization/CMakeLists.txt Fri Feb 20 17:34:26 2015 > @@ -1,5 +1,6 @@ > set(LLVM_LINK_COMPONENTS > BitReader > + Object > Support > ) > > > Modified: cfe/trunk/lib/Serialization/GeneratePCH.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/GeneratePCH.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/GeneratePCH.cpp (original) > +++ cfe/trunk/lib/Serialization/GeneratePCH.cpp Fri Feb 20 17:34:26 2015 > @@ -19,7 +19,6 @@ > #include "clang/Lex/Preprocessor.h" > #include "clang/Sema/SemaConsumer.h" > #include "llvm/Bitcode/BitstreamWriter.h" > -#include "llvm/Support/raw_ostream.h" > #include <string> > > using namespace clang; > @@ -28,10 +27,11 @@ PCHGenerator::PCHGenerator(const Preproc > StringRef OutputFile, > clang::Module *Module, > StringRef isysroot, > - raw_ostream *OS, bool AllowASTWithErrors) > + bool AllowASTWithErrors) > : PP(PP), OutputFile(OutputFile), Module(Module), > - isysroot(isysroot.str()), Out(OS), > - SemaPtr(nullptr), Stream(Buffer), Writer(Stream), > + isysroot(isysroot.str()), > + SemaPtr(nullptr), Stream(Buffer), > + Writer(Stream), > AllowASTWithErrors(AllowASTWithErrors), > HasEmittedPCH(false) { > } > @@ -52,14 +52,8 @@ void PCHGenerator::HandleTranslationUnit > assert(SemaPtr && "No Sema?"); > Writer.WriteAST(*SemaPtr, OutputFile, Module, isysroot, hasErrors); > > - // Write the generated bitstream to "Out". > - Out->write((char *)&Buffer.front(), Buffer.size()); > - > - // Make sure it hits disk now. > - Out->flush(); > - > - // Free up some memory, in case the process is kept alive. > - Buffer.clear(); > + if (SerializationFinishedCallback) > + SerializationFinishedCallback(&Buffer); > > HasEmittedPCH = true; > } > > Modified: cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp (original) > +++ cfe/trunk/lib/Serialization/GlobalModuleIndex.cpp Fri Feb 20 17:34:26 2015 > @@ -15,6 +15,7 @@ > #include "clang/Basic/FileManager.h" > #include "clang/Lex/HeaderSearch.h" > #include "clang/Serialization/ASTBitCodes.h" > +#include "clang/Serialization/ASTReader.h" > #include "clang/Serialization/GlobalModuleIndex.h" > #include "clang/Serialization/Module.h" > #include "llvm/ADT/DenseMap.h" > @@ -501,8 +502,8 @@ bool GlobalModuleIndexBuilder::loadModul > > // Initialize the input stream > llvm::BitstreamReader InStreamFile; > - InStreamFile.init((const unsigned char *)(*Buffer)->getBufferStart(), > - (const unsigned char *)(*Buffer)->getBufferEnd()); > + ASTReader::InitStreamFileWithModule((*Buffer)->getMemBufferRef(), > + InStreamFile); > llvm::BitstreamCursor InStream(InStreamFile); > > // Sniff for the signature. > > Modified: cfe/trunk/lib/Serialization/ModuleManager.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ModuleManager.cpp?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/ModuleManager.cpp (original) > +++ cfe/trunk/lib/Serialization/ModuleManager.cpp Fri Feb 20 17:34:26 2015 > @@ -13,6 +13,7 @@ > > //===----------------------------------------------------------------------===// > #include "clang/Lex/HeaderSearch.h" > #include "clang/Lex/ModuleMap.h" > +#include "clang/Serialization/ASTReader.h" > #include "clang/Serialization/GlobalModuleIndex.h" > #include "clang/Serialization/ModuleManager.h" > #include "llvm/Support/MemoryBuffer.h" > @@ -135,10 +136,10 @@ ModuleManager::addModule(StringRef FileN > > New->Buffer = std::move(*Buf); > } > - > - // Initialize the stream > - New->StreamFile.init((const unsigned char > *)New->Buffer->getBufferStart(), > - (const unsigned char *)New->Buffer->getBufferEnd()); > + > + // Initialize the stream. > + ASTReader::InitStreamFileWithModule(New->Buffer->getMemBufferRef(), > + New->StreamFile); > } > > if (ExpectedSignature) { > > Modified: cfe/trunk/test/CMakeLists.txt > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CMakeLists.txt?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/test/CMakeLists.txt (original) > +++ cfe/trunk/test/CMakeLists.txt Fri Feb 20 17:34:26 2015 > @@ -58,7 +58,7 @@ set(CLANG_TEST_PARAMS > if( NOT CLANG_BUILT_STANDALONE ) > list(APPEND CLANG_TEST_DEPS > llvm-config > - llc opt FileCheck count not llvm-symbolizer llvm-profdata > + llc opt FileCheck count not llvm-symbolizer llvm-profdata llvm-objdump > ) > endif() > > > Added: cfe/trunk/test/Modules/module_container.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/module_container.m?rev=230089&view=auto > ============================================================================== > --- cfe/trunk/test/Modules/module_container.m (added) > +++ cfe/trunk/test/Modules/module_container.m Fri Feb 20 17:34:26 2015 > @@ -0,0 +1,14 @@ > +@import DependsOnModule; > +// REQUIRES: x86-registered-target > +// RUN: rm -rf %t-MachO %t-ELF %t-COFF > +// RUN: %clang_cc1 -triple=x86_64-apple-darwin -fmodules > -fdisable-module-hash -fmodules-cache-path=%t-MachO -F %S/Inputs %s > +// RUN: %clang_cc1 -triple=x86_64-linux-elf -fmodules -fdisable-module-hash > -fmodules-cache-path=%t-ELF -F %S/Inputs %s > +// RUN: %clang_cc1 -triple=x86_64-windows-coff -fmodules > -fdisable-module-hash -fmodules-cache-path=%t-COFF -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 > +// CHECK: __clangast {{[0-9a-f]+}} {{[0-9a-f]+}} DATA > +// CHECK: file format ELF64-x86-64 > +// CHECK: __clangast {{[0-9a-f]+}} {{[0-9a-f]+}} DATA > +// CHECK: file format COFF-x86-64 > +// CHECK: clangast {{[0-9a-f]+}} {{[0-9a-f]+}} > > Modified: cfe/trunk/test/PCH/floating-literal.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/floating-literal.c?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/test/PCH/floating-literal.c (original) > +++ cfe/trunk/test/PCH/floating-literal.c Fri Feb 20 17:34:26 2015 > @@ -1,4 +1,5 @@ > // RUN: %clang_cc1 -triple mips64-none-linux-gnu -emit-pch -o %t %s > +// REQUIRES: mips-registered-target > // RUN: %clang_cc1 -x ast -ast-print %t | FileCheck %s > > // Make sure the semantics of FloatingLiterals are stored correctly in > > Modified: cfe/trunk/tools/arcmt-test/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/arcmt-test/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/tools/arcmt-test/Makefile (original) > +++ cfe/trunk/tools/arcmt-test/Makefile Fri Feb 20 17:34:26 2015 > @@ -17,10 +17,11 @@ TOOL_NO_EXPORTS = 1 > NO_INSTALL = 1 > > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation ipo mc objcarcopts option support > USEDLIBS = clangARCMigrate.a clangRewrite.a \ > clangFrontend.a clangDriver.a clangSerialization.a > clangParse.a \ > clangSema.a clangEdit.a clangAnalysis.a clangAST.a > clangLex.a \ > - clangBasic.a > + clangBasic.a clangCodeGen.a > > include $(CLANG_LEVEL)/Makefile > > Modified: cfe/trunk/tools/c-index-test/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/tools/c-index-test/Makefile (original) > +++ cfe/trunk/tools/c-index-test/Makefile Fri Feb 20 17:34:26 2015 > @@ -22,12 +22,14 @@ TOOL_NO_EXPORTS = 1 > # LINK_COMPONENTS before including Makefile.rules > include $(CLANG_LEVEL)/../../Makefile.config > > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation ipo support mc objcarcopts option > > # Note that 'USEDLIBS' must include all of the core clang libraries > # when -static is given to linker on cygming. > USEDLIBS = clang.a \ > clangIndex.a clangFormat.a clangRewrite.a \ > + clangCodeGen.a \ > clangFrontend.a clangDriver.a \ > clangTooling.a \ > clangToolingCore.a \ > > Modified: cfe/trunk/tools/clang-check/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/tools/clang-check/Makefile (original) > +++ cfe/trunk/tools/clang-check/Makefile Fri Feb 20 17:34:26 2015 > @@ -15,9 +15,10 @@ TOOLNAME = clang-check > TOOL_NO_EXPORTS = 1 > > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation ipo mc option objcarcopts support > USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a \ > - clangTooling.a clangParse.a clangSema.a \ > + clangCodeGen.a clangTooling.a clangParse.a clangSema.a \ > clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \ > clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \ > clangRewrite.a clangEdit.a clangAST.a clangLex.a clangBasic.a > > Modified: cfe/trunk/tools/diagtool/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/diagtool/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/tools/diagtool/Makefile (original) > +++ cfe/trunk/tools/diagtool/Makefile Fri Feb 20 17:34:26 2015 > @@ -20,7 +20,7 @@ include $(CLANG_LEVEL)/../../Makefile.co > LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > USEDLIBS = clangFrontend.a clangDriver.a clangSerialization.a clangParse.a \ > clangSema.a clangAnalysis.a clangEdit.a clangAST.a clangLex.a \ > - clangBasic.a > + clangBasic.a clangCodeGen.a > > include $(CLANG_LEVEL)/Makefile > > > Modified: cfe/trunk/tools/libclang/CMakeLists.txt > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CMakeLists.txt?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/tools/libclang/CMakeLists.txt (original) > +++ cfe/trunk/tools/libclang/CMakeLists.txt Fri Feb 20 17:34:26 2015 > @@ -40,6 +40,7 @@ set(SOURCES > set(LIBS > clangAST > clangBasic > + clangCodeGen > clangFrontend > clangIndex > clangLex > > Modified: cfe/trunk/tools/libclang/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/tools/libclang/Makefile (original) > +++ cfe/trunk/tools/libclang/Makefile Fri Feb 20 17:34:26 2015 > @@ -16,11 +16,13 @@ LINK_LIBS_IN_SHARED = 1 > SHARED_LIBRARY = 1 > > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := AsmParser BitReader Core MC MCParser Option Support > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter core \ > + instrumentation mc mcparser objcarcopts option support > USEDLIBS = clangIndex.a clangARCMigrate.a \ > clangRewriteFrontend.a \ > clangFormat.a \ > clangTooling.a clangToolingCore.a \ > + clangCodeGen.a \ > clangFrontend.a clangDriver.a \ > clangSerialization.a \ > clangParse.a clangSema.a \ > > Modified: cfe/trunk/unittests/AST/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/unittests/AST/Makefile (original) > +++ cfe/trunk/unittests/AST/Makefile Fri Feb 20 17:34:26 2015 > @@ -10,9 +10,10 @@ > CLANG_LEVEL = ../.. > TESTNAME = AST > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation mc option objcarcopts support > USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a > \ > - clangRewrite.a clangRewriteFrontend.a \ > + clangCodeGen.a clangRewrite.a clangRewriteFrontend.a \ > clangParse.a clangSema.a clangAnalysis.a \ > clangEdit.a clangAST.a clangASTMatchers.a clangLex.a clangBasic.a > > > Modified: cfe/trunk/unittests/ASTMatchers/Dynamic/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/Dynamic/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/unittests/ASTMatchers/Dynamic/Makefile (original) > +++ cfe/trunk/unittests/ASTMatchers/Dynamic/Makefile Fri Feb 20 17:34:26 2015 > @@ -11,10 +11,11 @@ CLANG_LEVEL = ../../.. > > TESTNAME = DynamicASTMatchers > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > -USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a > \ > - clangRewrite.a clangRewriteFrontend.a clangParse.a clangSema.a \ > - clangAnalysis.a clangEdit.a clangAST.a clangASTMatchers.a \ > - clangLex.a clangBasic.a clangDynamicASTMatchers.a > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation mc option objcarcopts support > +USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a > \ > + clangCodeGen.a clangRewrite.a clangRewriteFrontend.a clangParse.a > \ > + clangSema.a clangAnalysis.a clangEdit.a clangAST.a > \ > + clangASTMatchers.a clangLex.a clangBasic.a > clangDynamicASTMatchers.a > > include $(CLANG_LEVEL)/unittests/Makefile > > Modified: cfe/trunk/unittests/ASTMatchers/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/unittests/ASTMatchers/Makefile (original) > +++ cfe/trunk/unittests/ASTMatchers/Makefile Fri Feb 20 17:34:26 2015 > @@ -13,9 +13,10 @@ PARALLEL_DIRS = Dynamic > > TESTNAME = ASTMatchers > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation mc option objcarcopts support > USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a > \ > - clangRewrite.a clangRewriteFrontend.a \ > + clangCodeGen.a clangRewrite.a clangRewriteFrontend.a \ > clangParse.a clangSema.a clangAnalysis.a \ > clangEdit.a clangAST.a clangASTMatchers.a clangLex.a clangBasic.a > > > Modified: cfe/trunk/unittests/CodeGen/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/CodeGen/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/unittests/CodeGen/Makefile (original) > +++ cfe/trunk/unittests/CodeGen/Makefile Fri Feb 20 17:34:26 2015 > @@ -10,8 +10,8 @@ > CLANG_LEVEL = ../.. > TESTNAME = CodeGen > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader mc option \ > - profiledata support > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation mc option objcarcopts profiledata support > USEDLIBS = clangCodeGen.a clangFrontend.a clangSerialization.a \ > clangDriver.a \ > clangParse.a clangSema.a clangAnalysis.a \ > > Modified: cfe/trunk/unittests/Frontend/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Frontend/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/unittests/Frontend/Makefile (original) > +++ cfe/trunk/unittests/Frontend/Makefile Fri Feb 20 17:34:26 2015 > @@ -10,7 +10,8 @@ > CLANG_LEVEL = ../.. > TESTNAME = Frontend > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation mc option objcarcopts support > USEDLIBS = clangFrontendTool.a clangFrontend.a clangDriver.a \ > clangSerialization.a clangCodeGen.a clangParse.a clangSema.a \ > clangStaticAnalyzerCheckers.a clangStaticAnalyzerCore.a \ > > Modified: cfe/trunk/unittests/Sema/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Sema/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/unittests/Sema/Makefile (original) > +++ cfe/trunk/unittests/Sema/Makefile Fri Feb 20 17:34:26 2015 > @@ -10,9 +10,10 @@ > CLANG_LEVEL = ../.. > TESTNAME = Sema > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation mc option objcarcopts support > USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a > \ > - clangRewrite.a clangRewriteFrontend.a \ > + clangCodeGen.a clangRewrite.a clangRewriteFrontend.a \ > clangParse.a clangSema.a clangAnalysis.a \ > clangEdit.a clangAST.a clangASTMatchers.a clangLex.a clangBasic.a > > > Modified: cfe/trunk/unittests/Tooling/Makefile > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/Makefile?rev=230089&r1=230088&r2=230089&view=diff > ============================================================================== > --- cfe/trunk/unittests/Tooling/Makefile (original) > +++ cfe/trunk/unittests/Tooling/Makefile Fri Feb 20 17:34:26 2015 > @@ -10,9 +10,10 @@ > CLANG_LEVEL = ../.. > TESTNAME = Tooling > include $(CLANG_LEVEL)/../../Makefile.config > -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option > +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ > + instrumentation mc option objcarcopts support > USEDLIBS = clangTooling.a clangToolingCore.a clangFrontend.a \ > - clangSerialization.a clangDriver.a \ > + clangCodeGen.a clangSerialization.a clangDriver.a \ > clangParse.a clangRewrite.a clangRewriteFrontend.a \ > clangSema.a clangAnalysis.a clangEdit.a \ > clangAST.a clangASTMatchers.a clangLex.a clangBasic.a > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
