diff options
author | Adrian Prantl <aprantl@apple.com> | 2015-02-25 01:31:45 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2015-02-25 01:31:45 +0000 |
commit | 8bf7af3de80fe746cb39fe03b19e6e736183c1d8 (patch) | |
tree | 3631796942b357f01d486a34631e918d05db7b86 /clang | |
parent | b6396eaef90c9f3dee42d8af918b93b6628b9f4a (diff) | |
download | bcm5719-llvm-8bf7af3de80fe746cb39fe03b19e6e736183c1d8.tar.gz bcm5719-llvm-8bf7af3de80fe746cb39fe03b19e6e736183c1d8.zip |
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.
This reapplies r230044 with a fixed configure+make build and updated
dependencies and testcase requirements. Over the last iteration this
version adds
- missing target requirements for testcases that specify an x86 triple,
- a missing clangCodeGen.a dependency to libClang.a in the make build.
rdar://problem/19104245
llvm-svn: 230423
Diffstat (limited to 'clang')
83 files changed, 456 insertions, 91 deletions
diff --git a/clang/docs/PCHInternals.rst b/clang/docs/PCHInternals.rst index a36e65c199c..d247d3ed0aa 100644 --- a/clang/docs/PCHInternals.rst +++ b/clang/docs/PCHInternals.rst @@ -65,6 +65,9 @@ be included at the beginning of the translation unit. The extensions to the 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 diff --git a/clang/include/clang/CodeGen/CodeGenModuleContainer.h b/clang/include/clang/CodeGen/CodeGenModuleContainer.h new file mode 100644 index 00000000000..3c5456fc18d --- /dev/null +++ b/clang/include/clang/CodeGen/CodeGenModuleContainer.h @@ -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 diff --git a/clang/include/clang/Frontend/FrontendActions.h b/clang/include/clang/Frontend/FrontendActions.h index 850f87c073c..b96b9f559ec 100644 --- a/clang/include/clang/Frontend/FrontendActions.h +++ b/clang/include/clang/Frontend/FrontendActions.h @@ -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, diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 27af9995aa9..754273688b1 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -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 { diff --git a/clang/include/clang/Serialization/ASTWriter.h b/clang/include/clang/Serialization/ASTWriter.h index 1d2fa556e22..4b8668b3c6f 100644 --- a/clang/include/clang/Serialization/ASTWriter.h +++ b/clang/include/clang/Serialization/ASTWriter.h @@ -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; } }; diff --git a/clang/lib/CodeGen/CMakeLists.txt b/clang/lib/CodeGen/CMakeLists.txt index 18f505d8c59..dae14bd3b1c 100644 --- a/clang/lib/CodeGen/CMakeLists.txt +++ b/clang/lib/CodeGen/CMakeLists.txt @@ -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 diff --git a/clang/lib/CodeGen/CodeGenModuleContainer.cpp b/clang/lib/CodeGen/CodeGenModuleContainer.cpp new file mode 100644 index 00000000000..0cc825b6712 --- /dev/null +++ b/clang/lib/CodeGen/CodeGenModuleContainer.cpp @@ -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. + clang::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); +} diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index bfb1efe3522..58a5f980085 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -914,13 +914,20 @@ class PrecompilePreambleConsumer : public PCHGenerator { 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 diff --git a/clang/lib/Frontend/CMakeLists.txt b/clang/lib/Frontend/CMakeLists.txt index 7c5fca54d1e..6c9085d65dc 100644 --- a/clang/lib/Frontend/CMakeLists.txt +++ b/clang/lib/Frontend/CMakeLists.txt @@ -45,6 +45,7 @@ add_clang_library(clangFrontend LINK_LIBS clangAST clangBasic + clangCodeGen clangDriver clangEdit clangLex diff --git a/clang/lib/Frontend/ChainedIncludesSource.cpp b/clang/lib/Frontend/ChainedIncludesSource.cpp index cb260b4f4c6..1ecc0bfc6b4 100644 --- a/clang/lib/Frontend/ChainedIncludesSource.cpp +++ b/clang/lib/Frontend/ChainedIncludesSource.cpp @@ -156,11 +156,13 @@ IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource( &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> clang::createChainedIncludesSource( 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()); } diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index a55a3257851..3e0f525e653 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -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(CompilerInstance &CI, StringRef InFile) { 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(CompilerInstance &CI, 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> & diff --git a/clang/lib/Frontend/MultiplexConsumer.cpp b/clang/lib/Frontend/MultiplexConsumer.cpp index 3c4fed1d18e..bb9c907b2e3 100644 --- a/clang/lib/Frontend/MultiplexConsumer.cpp +++ b/clang/lib/Frontend/MultiplexConsumer.cpp @@ -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::IdentifierRead( 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::MacroDefinitionRead( 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::AddedCXXTemplateSpecialization( 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::AddedObjCCategoryToInterface( 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, diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 0ee2b2b2215..dd73bbae378 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -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 ModuleFile &M, unsigned Value) { // 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 FileName, 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::getOriginalSourceFile(const std::string &ASTFileName, // 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(StringRef Filename, // 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. diff --git a/clang/lib/Serialization/CMakeLists.txt b/clang/lib/Serialization/CMakeLists.txt index d885db22975..a1a5ad4abe7 100644 --- a/clang/lib/Serialization/CMakeLists.txt +++ b/clang/lib/Serialization/CMakeLists.txt @@ -1,5 +1,6 @@ set(LLVM_LINK_COMPONENTS BitReader + Object Support ) diff --git a/clang/lib/Serialization/GeneratePCH.cpp b/clang/lib/Serialization/GeneratePCH.cpp index b5031fdf92a..0cd01dc6f3e 100644 --- a/clang/lib/Serialization/GeneratePCH.cpp +++ b/clang/lib/Serialization/GeneratePCH.cpp @@ -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 Preprocessor &PP, 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(ASTContext &Ctx) { 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; } diff --git a/clang/lib/Serialization/GlobalModuleIndex.cpp b/clang/lib/Serialization/GlobalModuleIndex.cpp index 47913880454..68a23ea870d 100644 --- a/clang/lib/Serialization/GlobalModuleIndex.cpp +++ b/clang/lib/Serialization/GlobalModuleIndex.cpp @@ -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::loadModuleFile(const FileEntry *File) { // 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. diff --git a/clang/lib/Serialization/ModuleManager.cpp b/clang/lib/Serialization/ModuleManager.cpp index ac98ca0b872..8f1473f3a3a 100644 --- a/clang/lib/Serialization/ModuleManager.cpp +++ b/clang/lib/Serialization/ModuleManager.cpp @@ -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 FileName, ModuleKind Type, 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) { diff --git a/clang/test/ARCMT/check-with-pch.m b/clang/test/ARCMT/check-with-pch.m index 1a94dda796b..5e843ff08df 100644 --- a/clang/test/ARCMT/check-with-pch.m +++ b/clang/test/ARCMT/check-with-pch.m @@ -1,5 +1,6 @@ // RUN: %clang_cc1 -x objective-c -triple x86_64-apple-darwin10 %S/Common.h -emit-pch -o %t.pch // RUN: %clang_cc1 -include-pch %t.pch -arcmt-check -verify -triple x86_64-apple-darwin10 -fblocks -Werror %s +// REQUIRES: x86-registered-target // rdar://9601437 @interface I9601437 { diff --git a/clang/test/ARCMT/migrate-on-pch-and-module.m b/clang/test/ARCMT/migrate-on-pch-and-module.m index c98ce467f6c..5073a6228b6 100644 --- a/clang/test/ARCMT/migrate-on-pch-and-module.m +++ b/clang/test/ARCMT/migrate-on-pch-and-module.m @@ -1,6 +1,7 @@ // RUN: rm -rf %t-mcp // RUN: %clang_cc1 -objcmt-migrate-subscripting -emit-pch -o %t.pch %s -isysroot %S/Inputs/System -triple x86_64-apple-darwin10 -F %S/Inputs -fmodules -fmodules-cache-path=%t-mcp -w // RUN: %clang_cc1 -objcmt-migrate-subscripting -include-pch %t.pch %s -migrate -o %t.remap -isysroot %S/Inputs/System -triple x86_64-apple-darwin10 -F %S/Inputs -fmodules -fmodules-cache-path=%t-mcp +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/ARCMT/objcmt-with-pch.m b/clang/test/ARCMT/objcmt-with-pch.m index fac42c85123..61c87a2b007 100644 --- a/clang/test/ARCMT/objcmt-with-pch.m +++ b/clang/test/ARCMT/objcmt-with-pch.m @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: rm -rf %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -x objective-c %S/Common.h -emit-pch -o %t.pch // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c -include-pch %t.pch diff --git a/clang/test/ARCMT/objcmt-with-pch.m.result b/clang/test/ARCMT/objcmt-with-pch.m.result index 04eadc9d3fa..7e2570cfc45 100644 --- a/clang/test/ARCMT/objcmt-with-pch.m.result +++ b/clang/test/ARCMT/objcmt-with-pch.m.result @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: rm -rf %t // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -x objective-c %S/Common.h -emit-pch -o %t.pch // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c -include-pch %t.pch diff --git a/clang/test/CMakeLists.txt b/clang/test/CMakeLists.txt index 591a9272ae6..526f129bab5 100644 --- a/clang/test/CMakeLists.txt +++ b/clang/test/CMakeLists.txt @@ -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() diff --git a/clang/test/CXX/expr/expr.unary/expr.unary.noexcept/cg.cpp b/clang/test/CXX/expr/expr.unary/expr.unary.noexcept/cg.cpp index 5c1029f1a3f..e299705a4c1 100644 --- a/clang/test/CXX/expr/expr.unary/expr.unary.noexcept/cg.cpp +++ b/clang/test/CXX/expr/expr.unary/expr.unary.noexcept/cg.cpp @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -triple x86_64-apple-darwin10 -S -emit-llvm -std=c++11 -include %S/ser.h %s -o - | FileCheck %s // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -triple x86_64-apple-darwin10 -emit-pch -o %t-ser.pch -std=c++11 -x c++ %S/ser.h // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -triple x86_64-apple-darwin10 -S -emit-llvm -std=c++11 -include-pch %t-ser.pch %s -o - | FileCheck %s diff --git a/clang/test/CodeGen/atomic-ops.c b/clang/test/CodeGen/atomic-ops.c index 559b1354132..659a5ad9448 100644 --- a/clang/test/CodeGen/atomic-ops.c +++ b/clang/test/CodeGen/atomic-ops.c @@ -1,4 +1,5 @@ // RUN: %clang_cc1 %s -emit-llvm -o - -ffreestanding -triple=i686-apple-darwin9 | FileCheck %s +// REQUIRES: x86-registered-target // Also test serialization of atomic operations here, to avoid duplicating the // test. diff --git a/clang/test/CodeGen/big-atomic-ops.c b/clang/test/CodeGen/big-atomic-ops.c index 74096616ace..b4e0efd288a 100644 --- a/clang/test/CodeGen/big-atomic-ops.c +++ b/clang/test/CodeGen/big-atomic-ops.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-apple-macosx10.9.0 | FileCheck %s - +// REQUIRES: x86-registered-target // Also test serialization of atomic operations here, to avoid duplicating the // test. // RUN: %clang_cc1 %s -emit-pch -o %t -triple=x86_64-apple-macosx10.9.0 diff --git a/clang/test/Frontend/ast-codegen.c b/clang/test/Frontend/ast-codegen.c index b85c5dcf508..4a3f8a3b79f 100644 --- a/clang/test/Frontend/ast-codegen.c +++ b/clang/test/Frontend/ast-codegen.c @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: %clang -target i386-unknown-unknown -emit-ast -o %t.ast %s // RUN: %clang -target i386-unknown-unknown -emit-llvm -S -o - %t.ast | FileCheck %s diff --git a/clang/test/Index/TestClassForwardDecl.m b/clang/test/Index/TestClassForwardDecl.m index 9696a280661..284406f6446 100644 --- a/clang/test/Index/TestClassForwardDecl.m +++ b/clang/test/Index/TestClassForwardDecl.m @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fblocks -emit-pch -x objective-c %s -o %t.ast // RUN: c-index-test -test-file-scan %t.ast %s | FileCheck -check-prefix=CHECK-scan %s // RUN: c-index-test -test-load-tu %t.ast local | FileCheck -check-prefix=CHECK-load %s - +// REQUIRES: x86-registered-target // This test checks how the @class resolves as a cursor when the @interface is implicitly defined. // See TestClassDecl.m for the corresponding test case. (<rdar://problem/7383421>) diff --git a/clang/test/Index/c-index-api-loadTU-test.m b/clang/test/Index/c-index-api-loadTU-test.m index c75d5ac6814..cbd742b240b 100644 --- a/clang/test/Index/c-index-api-loadTU-test.m +++ b/clang/test/Index/c-index-api-loadTU-test.m @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fblocks -emit-pch -x objective-c %s -o %t.ast // RUN: c-index-test -test-load-tu %t.ast all > %t 2>&1 && FileCheck --input-file=%t %s - +// REQUIRES: x86-registered-target @interface Foo { __attribute__((iboutlet)) id myoutlet; diff --git a/clang/test/Index/c-index-getCursor-test.m b/clang/test/Index/c-index-getCursor-test.m index c1799026cec..f368f1f0743 100644 --- a/clang/test/Index/c-index-getCursor-test.m +++ b/clang/test/Index/c-index-getCursor-test.m @@ -166,3 +166,4 @@ void f() { // CHECK: [57:1 - 57:10] FunctionDecl=f:57:6 (Definition) // CHECK: [58:4 - 58:8] VarDecl=my_var:58:8 (Definition) // CHECK: [58:8 - 58:15] macro expansion=CONCAT:55:9 +// REQUIRES: x86-registered-target diff --git a/clang/test/Index/pch-with-module.m b/clang/test/Index/pch-with-module.m index e839c811dab..77262d5eb6d 100644 --- a/clang/test/Index/pch-with-module.m +++ b/clang/test/Index/pch-with-module.m @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: rm -rf %t.cache // RUN: c-index-test -write-pch %t.h.pch %s -target x86_64-apple-macosx10.7 -fobjc-arc -fmodules-cache-path=%t.cache -fmodules -F %S/../Modules/Inputs -Xclang -fdisable-module-hash // RUN: %clang -fsyntax-only %s -target x86_64-apple-macosx10.7 -include %t.h -fobjc-arc -fmodules-cache-path=%t.cache -fmodules -F %S/../Modules/Inputs \ diff --git a/clang/test/Index/print-mangled-name.cpp b/clang/test/Index/print-mangled-name.cpp index b7e79c3f6d6..d4edc5ff392 100644 --- a/clang/test/Index/print-mangled-name.cpp +++ b/clang/test/Index/print-mangled-name.cpp @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: %clang_cc1 -triple i686-pc-linux-gnu -emit-pch %s -o %t_linux.ast // RUN: c-index-test -test-print-mangle %t_linux.ast | FileCheck %s --check-prefix=ITANIUM diff --git a/clang/test/Modules/dependency-gen-inferred-map.m b/clang/test/Modules/dependency-gen-inferred-map.m index 11cc8728811..e61b6cd7b90 100644 --- a/clang/test/Modules/dependency-gen-inferred-map.m +++ b/clang/test/Modules/dependency-gen-inferred-map.m @@ -1,5 +1,6 @@ // Test that the virtual file "__inferred_module.map" doesn't show up as dependency. +// REQUIRES: x86-registered-target // RUN: rm -rf %t-mcp // RUN: %clang_cc1 -isysroot %S/Inputs/System -triple x86_64-apple-darwin10 -dependency-file %t.d -MT %s.o -F %S/Inputs -fsyntax-only -fmodules -fmodules-cache-path=%t-mcp %s // RUN: FileCheck %s < %t.d diff --git a/clang/test/Modules/dependency-gen-pch.m b/clang/test/Modules/dependency-gen-pch.m index 65e22d485dd..c81a7e7d061 100644 --- a/clang/test/Modules/dependency-gen-pch.m +++ b/clang/test/Modules/dependency-gen-pch.m @@ -1,5 +1,6 @@ // RUN: rm -rf %t-mcp // RUN: mkdir -p %t-mcp +// REQUIRES: x86-registered-target // RUN: %clang_cc1 -isysroot %S/Inputs/System -triple x86_64-apple-darwin10 -module-file-deps -dependency-file %t.d -MT %s.o -I %S/Inputs -fmodules -fdisable-module-hash -fmodules-cache-path=%t-mcp -emit-pch -o %t.pch %s // RUN: FileCheck %s < %t.d diff --git a/clang/test/Modules/irgen.c b/clang/test/Modules/irgen.c index c44afb1becb..46737a2f2eb 100644 --- a/clang/test/Modules/irgen.c +++ b/clang/test/Modules/irgen.c @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: rm -rf %t // RUN: %clang_cc1 -fmodules -x objective-c -fmodules-cache-path=%t -emit-module -fmodule-name=irgen -triple x86_64-apple-darwin10 %S/Inputs/module.map // RUN: %clang_cc1 -fmodules -x objective-c -fmodules-cache-path=%t -I %S/Inputs -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s diff --git a/clang/test/Modules/module_container.m b/clang/test/Modules/module_container.m new file mode 100644 index 00000000000..348a869ad26 --- /dev/null +++ b/clang/test/Modules/module_container.m @@ -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]+}} diff --git a/clang/test/Modules/self-import-header.m b/clang/test/Modules/self-import-header.m index 9b4bd5dee52..83e5c0104d2 100644 --- a/clang/test/Modules/self-import-header.m +++ b/clang/test/Modules/self-import-header.m @@ -1,5 +1,5 @@ // rdar://13840148 - +// REQUIRES: x86-registered-target // RUN: rm -rf %t // RUN: %clang -fsyntax-only -isysroot %S/Inputs/System/usr/include -fmodules -fmodules-cache-path=%t \ // RUN: -target x86_64-darwin \ diff --git a/clang/test/Modules/templates-2.mm b/clang/test/Modules/templates-2.mm index 8a752f76133..1fe14104da7 100644 --- a/clang/test/Modules/templates-2.mm +++ b/clang/test/Modules/templates-2.mm @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fmodules-cache-path=%t -I %S/Inputs -verify %s -Wno-objc-root-class // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fmodules-cache-path=%t -I %S/Inputs -emit-llvm %s -o - -Wno-objc-root-class | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target @import templates_top; struct TestEmitDefaultedSpecialMembers { diff --git a/clang/test/Modules/templates.mm b/clang/test/Modules/templates.mm index d60b873d0f3..f52e6876996 100644 --- a/clang/test/Modules/templates.mm +++ b/clang/test/Modules/templates.mm @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fmodules-cache-path=%t -I %S/Inputs -verify %s -Wno-objc-root-class // RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fmodules-cache-path=%t -I %S/Inputs -emit-llvm %s -o - -Wno-objc-root-class | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target @import templates_left; void testInlineRedeclEarly() { diff --git a/clang/test/Modules/va_list.m b/clang/test/Modules/va_list.m index 5a305180fcf..6aec13f9972 100644 --- a/clang/test/Modules/va_list.m +++ b/clang/test/Modules/va_list.m @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: rm -rf %t // RUN: %clang_cc1 -triple x86_64-apple-macosx10 -fmodules -fmodules-cache-path=%t \ // RUN: -fmodules-ignore-macro=PREFIX -DPREFIX -I %S/Inputs/va_list \ diff --git a/clang/test/OpenMP/atomic_read_codegen.c b/clang/test/OpenMP/atomic_read_codegen.c index c97fe8c2901..536f38be2f4 100644 --- a/clang/test/OpenMP/atomic_read_codegen.c +++ b/clang/test/OpenMP/atomic_read_codegen.c @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c -triple x86_64-apple-darwin10 -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c -triple x86_64-apple-darwin10 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/barrier_codegen.cpp b/clang/test/OpenMP/barrier_codegen.cpp index 2e817c138c3..dee90de2773 100644 --- a/clang/test/OpenMP/barrier_codegen.cpp +++ b/clang/test/OpenMP/barrier_codegen.cpp @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/critical_codegen.cpp b/clang/test/OpenMP/critical_codegen.cpp index dda532ca369..db7b26a2fd4 100644 --- a/clang/test/OpenMP/critical_codegen.cpp +++ b/clang/test/OpenMP/critical_codegen.cpp @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/flush_codegen.cpp b/clang/test/OpenMP/flush_codegen.cpp index 7dc58f47fb3..a114c4f9dae 100644 --- a/clang/test/OpenMP/flush_codegen.cpp +++ b/clang/test/OpenMP/flush_codegen.cpp @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -g -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/for_codegen.cpp b/clang/test/OpenMP/for_codegen.cpp index badc5bdeca0..8f3d2064371 100644 --- a/clang/test/OpenMP/for_codegen.cpp +++ b/clang/test/OpenMP/for_codegen.cpp @@ -3,9 +3,9 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -g -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // // expected-no-diagnostics +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER - // CHECK: [[IDENT_T_TY:%.+]] = type { i32, i32, i32, i32, i8* } // CHECK-LABEL: define {{.*void}} @{{.*}}without_schedule_clause{{.*}}(float* {{.+}}, float* {{.+}}, float* {{.+}}, float* {{.+}}) void without_schedule_clause(float *a, float *b, float *c, float *d) { diff --git a/clang/test/OpenMP/master_codegen.cpp b/clang/test/OpenMP/master_codegen.cpp index d354bae2d7e..5c75a5d9526 100644 --- a/clang/test/OpenMP/master_codegen.cpp +++ b/clang/test/OpenMP/master_codegen.cpp @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/parallel_codegen.cpp b/clang/test/OpenMP/parallel_codegen.cpp index ffaca9ab7f2..704c69fe95b 100644 --- a/clang/test/OpenMP/parallel_codegen.cpp +++ b/clang/test/OpenMP/parallel_codegen.cpp @@ -2,9 +2,9 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -g -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix=CHECK-DEBUG %s // expected-no-diagnostics +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER - // CHECK-DAG: %ident_t = type { i32, i32, i32, i32, i8* } // CHECK-DAG: %struct.anon = type { i32* } // CHECK-DAG: %struct.anon.0 = type { i8*** } diff --git a/clang/test/OpenMP/parallel_private_codegen.cpp b/clang/test/OpenMP/parallel_private_codegen.cpp index 6911068250f..6770b052088 100644 --- a/clang/test/OpenMP/parallel_private_codegen.cpp +++ b/clang/test/OpenMP/parallel_private_codegen.cpp @@ -4,9 +4,9 @@ // RUN: %clang_cc1 -verify -fopenmp=libiomp5 -x c++ -std=c++11 -DLAMBDA -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck -check-prefix=LAMBDA %s // RUN: %clang_cc1 -verify -fopenmp=libiomp5 -x c++ -fblocks -DBLOCKS -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck -check-prefix=BLOCKS %s // expected-no-diagnostics +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER - template <class T> struct S { T f; diff --git a/clang/test/OpenMP/simd_codegen.cpp b/clang/test/OpenMP/simd_codegen.cpp index b8073c2948e..3d1cbbdd95e 100644 --- a/clang/test/OpenMP/simd_codegen.cpp +++ b/clang/test/OpenMP/simd_codegen.cpp @@ -1,7 +1,7 @@ // RUN: %clang_cc1 -verify -fopenmp=libiomp5 -x c++ -emit-llvm %s -fexceptions -fcxx-exceptions -o - | FileCheck %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -g -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s -// +// REQUIRES: x86-registered-target // expected-no-diagnostics #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/single_codegen.cpp b/clang/test/OpenMP/single_codegen.cpp index e67af0f5089..495f182bdf1 100644 --- a/clang/test/OpenMP/single_codegen.cpp +++ b/clang/test/OpenMP/single_codegen.cpp @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -fexceptions -fcxx-exceptions -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/taskyield_codegen.cpp b/clang/test/OpenMP/taskyield_codegen.cpp index 7c02b52ea6d..6fc317e8fae 100644 --- a/clang/test/OpenMP/taskyield_codegen.cpp +++ b/clang/test/OpenMP/taskyield_codegen.cpp @@ -2,7 +2,7 @@ // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -std=c++11 -triple x86_64-unknown-unknown -emit-pch -o %t %s // RUN: %clang_cc1 -fopenmp=libiomp5 -x c++ -triple x86_64-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s // expected-no-diagnostics - +// REQUIRES: x86-registered-target #ifndef HEADER #define HEADER diff --git a/clang/test/OpenMP/threadprivate_codegen.cpp b/clang/test/OpenMP/threadprivate_codegen.cpp index 98b7917714b..e761416b118 100644 --- a/clang/test/OpenMP/threadprivate_codegen.cpp +++ b/clang/test/OpenMP/threadprivate_codegen.cpp @@ -18,7 +18,7 @@ // CHECK-DEBUG-DAG: [[S4:%.+]] = type { [[INT]], [[INT]] } // CHECK-DEBUG-DAG: [[S5:%.+]] = type { [[INT]], [[INT]], [[INT]] } // CHECK-DEBUG-DAG: [[SMAIN:%.+]] = type { [[INT]], double, double } - +// REQUIRES: x86-registered-target struct S1 { int a; S1() diff --git a/clang/test/PCH/__va_list_tag.c b/clang/test/PCH/__va_list_tag.c index efe5c1b3663..81cda8963b2 100644 --- a/clang/test/PCH/__va_list_tag.c +++ b/clang/test/PCH/__va_list_tag.c @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // PR13189 // rdar://problem/11741429 // Test this without pch. diff --git a/clang/test/PCH/arc.m b/clang/test/PCH/arc.m index 466b3170559..63c77778f40 100644 --- a/clang/test/PCH/arc.m +++ b/clang/test/PCH/arc.m @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // Test this without pch. // RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin11 -fobjc-arc -include %S/Inputs/arc.h -fsyntax-only -emit-llvm-only %s diff --git a/clang/test/PCH/asm.c b/clang/test/PCH/asm.c index 160829b7a6e..cabd03cac9a 100644 --- a/clang/test/PCH/asm.c +++ b/clang/test/PCH/asm.c @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // Test this without pch. // RUN: %clang_cc1 -triple i386-unknown-unknown -include %S/asm.h -fsyntax-only -verify %s diff --git a/clang/test/PCH/chain-external-defs.c b/clang/test/PCH/chain-external-defs.c index 74222944286..f7c72333899 100644 --- a/clang/test/PCH/chain-external-defs.c +++ b/clang/test/PCH/chain-external-defs.c @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // Test with pch. // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-pch -o %t1.pch %S/Inputs/chain-external-defs1.h // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-pch -o %t2.pch %S/Inputs/chain-external-defs2.h -include-pch %t1.pch diff --git a/clang/test/PCH/chain-trivial.c b/clang/test/PCH/chain-trivial.c index a0f5827fb91..4cc7890de04 100644 --- a/clang/test/PCH/chain-trivial.c +++ b/clang/test/PCH/chain-trivial.c @@ -1,2 +1,3 @@ +// REQUIRES: x86-registered-target // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-pch -o %t1 %S/Inputs/chain-trivial1.h // RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-pch -o %t2 -include-pch %t1 %S/Inputs/chain-trivial2.h diff --git a/clang/test/PCH/cxx-ms-function-specialization-class-scope.cpp b/clang/test/PCH/cxx-ms-function-specialization-class-scope.cpp index afbb80b7376..f97a8d183c7 100644 --- a/clang/test/PCH/cxx-ms-function-specialization-class-scope.cpp +++ b/clang/test/PCH/cxx-ms-function-specialization-class-scope.cpp @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // RUN: %clang_cc1 -fms-extensions -triple i386-unknown-unknown -x c++-header -emit-pch -o %t %S/cxx-ms-function-specialization-class-scope.h // RUN: %clang_cc1 -fms-extensions -triple i386-unknown-unknown -include-pch %t -fsyntax-only -verify %s // expected-no-diagnostics diff --git a/clang/test/PCH/external-defs.c b/clang/test/PCH/external-defs.c index 5c2582a9c36..5e906b246bc 100644 --- a/clang/test/PCH/external-defs.c +++ b/clang/test/PCH/external-defs.c @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // Test with pch. // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-pch -o %t.pch %S/external-defs.h // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -include-pch %t.pch -emit-llvm -o %t %s diff --git a/clang/test/PCH/floating-literal.c b/clang/test/PCH/floating-literal.c index 738e45a4151..b5ff6fe84b8 100644 --- a/clang/test/PCH/floating-literal.c +++ b/clang/test/PCH/floating-literal.c @@ -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 diff --git a/clang/test/PCH/local_static.cpp b/clang/test/PCH/local_static.cpp index 1085d81d317..b4131bffde2 100644 --- a/clang/test/PCH/local_static.cpp +++ b/clang/test/PCH/local_static.cpp @@ -1,3 +1,4 @@ +// REQUIRES: x86-registered-target // Test this without PCH. // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9.0 -include %S/local_static.h -fsyntax-only %s -emit-llvm -o %t.no_pch.ll %s // RUN: FileCheck --input-file %t.no_pch.ll %s diff --git a/clang/test/PCH/pchpch.c b/clang/test/PCH/pchpch.c index d68a6ad4aee..5ea661abd55 100644 --- a/clang/test/PCH/pchpch.c +++ b/clang/test/PCH/pchpch.c @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -triple i386-unknown-unknown -emit-pch -o %t1 %S/pchpch1.h // RUN: %clang_cc1 -triple i386-unknown-unknown -emit-pch -o %t2 %S/pchpch2.h -include-pch %t1 // RUN: %clang_cc1 -triple i386-unknown-unknown -fsyntax-only %s -include-pch %t2 +// REQUIRES: x86-registered-target // The purpose of this test is to make sure that a PCH created while including // an existing PCH can be loaded. diff --git a/clang/test/PCH/reloc.c b/clang/test/PCH/reloc.c index 8dabb8b03d0..bf70ab6f692 100644 --- a/clang/test/PCH/reloc.c +++ b/clang/test/PCH/reloc.c @@ -3,6 +3,7 @@ // RUN: %clang -target x86_64-apple-darwin10 -fsyntax-only \ // RUN: -include-pch %t -isysroot %S/libroot %s -Xclang -verify // RUN: not %clang -target x86_64-apple-darwin10 -include-pch %t %s +// REQUIRES: x86-registered-target #include <reloc.h> diff --git a/clang/test/PCH/subscripting-literals.m b/clang/test/PCH/subscripting-literals.m index 1675373441c..0153239972a 100644 --- a/clang/test/PCH/subscripting-literals.m +++ b/clang/test/PCH/subscripting-literals.m @@ -1,6 +1,7 @@ // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o %t.nopch.ll %s // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-pch -o %t.pch %s // RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o %t.pch.ll %s -include-pch %t.pch +// REQUIRES: x86-registered-target // RUN: diff %t.nopch.ll %t.pch.ll #ifndef HEADER diff --git a/clang/test/PCH/target-options.c b/clang/test/PCH/target-options.c index 2b85efe07ab..06a09502f9a 100644 --- a/clang/test/PCH/target-options.c +++ b/clang/test/PCH/target-options.c @@ -1,5 +1,6 @@ // RUN: %clang_cc1 -triple=x86_64-apple-darwin9 -emit-pch -o %t.pch %S/target-options.h // RUN: not %clang_cc1 -triple=x86_64-unknown-freebsd7.0 -include-pch %t.pch %s -emit-llvm -o - > %t.err 2>&1 // RUN: FileCheck %s < %t.err +// REQUIRES: x86-registered-target // CHECK: for the target diff --git a/clang/test/PCH/tentative-defs.c b/clang/test/PCH/tentative-defs.c index 42882307dc7..7163316a93d 100644 --- a/clang/test/PCH/tentative-defs.c +++ b/clang/test/PCH/tentative-defs.c @@ -1,6 +1,7 @@ // Test with pch. // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-pch -o %t.pch %S/tentative-defs.h // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -include-pch %t.pch -verify -emit-llvm -o %t %s +// REQUIRES: x86-registered-target // RUN: grep "@variable = common global i32 0" %t | count 1 // RUN: grep "@incomplete_array = common global .*1 x i32" %t | count 1 diff --git a/clang/test/PCH/thread-local.cpp b/clang/test/PCH/thread-local.cpp index f65c12af092..ab37f7b3f7e 100644 --- a/clang/test/PCH/thread-local.cpp +++ b/clang/test/PCH/thread-local.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -pedantic-errors -std=c++11 -triple x86_64-linux-gnu -emit-pch %s -o %t // RUN: %clang_cc1 -pedantic-errors -std=c++11 -triple x86_64-linux-gnu -include-pch %t -verify %s - +// REQUIRES: x86-registered-target #ifndef HEADER_INCLUDED #define HEADER_INCLUDED diff --git a/clang/test/PCH/va_arg.c b/clang/test/PCH/va_arg.c index 1fb2a838e4f..dba9eea8de4 100644 --- a/clang/test/PCH/va_arg.c +++ b/clang/test/PCH/va_arg.c @@ -1,5 +1,6 @@ // Test this without pch. // RUN: %clang_cc1 -triple=x86_64-unknown-freebsd7.0 -include %S/va_arg.h %s -emit-llvm -o - +// REQUIRES: x86-registered-target // Test with pch. // RUN: %clang_cc1 -triple=x86_64-unknown-freebsd7.0 -emit-pch -o %t %S/va_arg.h diff --git a/clang/test/PCH/va_arg.cpp b/clang/test/PCH/va_arg.cpp index 7c8dc6b316f..0b3c3b107c0 100644 --- a/clang/test/PCH/va_arg.cpp +++ b/clang/test/PCH/va_arg.cpp @@ -1,5 +1,6 @@ // Test this without pch. // RUN: %clang_cc1 -triple=x86_64-unknown-freebsd7.0 -include %S/Inputs/va_arg.h %s -emit-llvm -o - +// REQUIRES: x86-registered-target // Test with pch. // RUN: %clang_cc1 -triple=x86_64-unknown-freebsd7.0 -emit-pch -x c++-header -o %t %S/Inputs/va_arg.h diff --git a/clang/tools/arcmt-test/Makefile b/clang/tools/arcmt-test/Makefile index d9d44bb05bd..b4d992cbaa1 100644 --- a/clang/tools/arcmt-test/Makefile +++ b/clang/tools/arcmt-test/Makefile @@ -17,9 +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 \ + clangFrontend.a clangCodeGen.a \ + clangDriver.a clangSerialization.a clangParse.a \ clangSema.a clangEdit.a clangAnalysis.a clangAST.a clangLex.a \ clangBasic.a diff --git a/clang/tools/c-arcmt-test/Makefile b/clang/tools/c-arcmt-test/Makefile index fff05f82825..30ba4b47747 100644 --- a/clang/tools/c-arcmt-test/Makefile +++ b/clang/tools/c-arcmt-test/Makefile @@ -21,7 +21,8 @@ NO_INSTALL = 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. @@ -33,7 +34,7 @@ USEDLIBS = clang.a \ clangToolingCore.a \ clangRewriteFrontend.a \ clangRewrite.a \ - clangFrontend.a clangDriver.a \ + clangFrontend.a clangCodeGen.a clangDriver.a \ clangStaticAnalyzerCheckers.a clangStaticAnalyzerCore.a \ clangSerialization.a clangParse.a clangSema.a \ clangAnalysis.a clangEdit.a clangAST.a clangLex.a clangBasic.a diff --git a/clang/tools/c-index-test/Makefile b/clang/tools/c-index-test/Makefile index 62bc9348dbf..39adbf3731c 100644 --- a/clang/tools/c-index-test/Makefile +++ b/clang/tools/c-index-test/Makefile @@ -22,13 +22,15 @@ 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 \ - clangFrontend.a clangDriver.a \ + clangCodeGen.a \ + clangFrontend.a clangCodeGen.a clangDriver.a \ clangTooling.a \ clangToolingCore.a \ clangSerialization.a clangParse.a clangSema.a \ diff --git a/clang/tools/clang-check/Makefile b/clang/tools/clang-check/Makefile index e98a131de5a..f4b9de120d9 100644 --- a/clang/tools/clang-check/Makefile +++ b/clang/tools/clang-check/Makefile @@ -15,8 +15,9 @@ TOOLNAME = clang-check TOOL_NO_EXPORTS = 1 include $(CLANG_LEVEL)/../../Makefile.config -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option -USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a \ +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ + instrumentation ipo mc option objcarcopts support +USEDLIBS = clangFrontend.a clangCodeGen.a clangSerialization.a clangDriver.a \ clangTooling.a clangParse.a clangSema.a \ clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \ clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \ diff --git a/clang/tools/diagtool/Makefile b/clang/tools/diagtool/Makefile index d49e976e642..1a745060063 100644 --- a/clang/tools/diagtool/Makefile +++ b/clang/tools/diagtool/Makefile @@ -20,7 +20,7 @@ include $(CLANG_LEVEL)/../../Makefile.config 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 diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt index 26f88a97c57..1cc4cb748d3 100644 --- a/clang/tools/libclang/CMakeLists.txt +++ b/clang/tools/libclang/CMakeLists.txt @@ -40,6 +40,7 @@ set(SOURCES set(LIBS clangAST clangBasic + clangCodeGen clangFrontend clangIndex clangLex diff --git a/clang/tools/libclang/Makefile b/clang/tools/libclang/Makefile index 97f663cde47..66b67a369a9 100644 --- a/clang/tools/libclang/Makefile +++ b/clang/tools/libclang/Makefile @@ -16,12 +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 ipo mc mcparser objcarcopts option support USEDLIBS = clangIndex.a clangARCMigrate.a \ clangRewriteFrontend.a \ clangFormat.a \ clangTooling.a clangToolingCore.a \ - clangFrontend.a clangDriver.a \ + clangFrontend.a clangCodeGen.a clangDriver.a \ clangSerialization.a \ clangParse.a clangSema.a \ clangStaticAnalyzerCheckers.a clangStaticAnalyzerCore.a \ diff --git a/clang/unittests/AST/Makefile b/clang/unittests/AST/Makefile index e3b3d7dc33e..db6e5010f56 100644 --- a/clang/unittests/AST/Makefile +++ b/clang/unittests/AST/Makefile @@ -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 diff --git a/clang/unittests/ASTMatchers/Dynamic/Makefile b/clang/unittests/ASTMatchers/Dynamic/Makefile index dfd0086c883..148e47cc66b 100644 --- a/clang/unittests/ASTMatchers/Dynamic/Makefile +++ b/clang/unittests/ASTMatchers/Dynamic/Makefile @@ -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 ipo 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 diff --git a/clang/unittests/ASTMatchers/Makefile b/clang/unittests/ASTMatchers/Makefile index 92f2fa0e5d1..6eacbc261bb 100644 --- a/clang/unittests/ASTMatchers/Makefile +++ b/clang/unittests/ASTMatchers/Makefile @@ -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 diff --git a/clang/unittests/CodeGen/Makefile b/clang/unittests/CodeGen/Makefile index de347e1afdd..fa653f5ce76 100644 --- a/clang/unittests/CodeGen/Makefile +++ b/clang/unittests/CodeGen/Makefile @@ -10,9 +10,9 @@ CLANG_LEVEL = ../.. TESTNAME = CodeGen include $(CLANG_LEVEL)/../../Makefile.config -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader mc option \ - profiledata support -USEDLIBS = clangCodeGen.a clangFrontend.a clangSerialization.a \ +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader bitwriter \ + instrumentation ipo mc option objcarcopts profiledata support +USEDLIBS = clangFrontend.a clangCodeGen.a clangSerialization.a \ clangDriver.a \ clangParse.a clangSema.a clangAnalysis.a \ clangEdit.a clangAST.a clangLex.a clangBasic.a diff --git a/clang/unittests/Frontend/Makefile b/clang/unittests/Frontend/Makefile index a63ae182453..2604f6e5cc8 100644 --- a/clang/unittests/Frontend/Makefile +++ b/clang/unittests/Frontend/Makefile @@ -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 \ diff --git a/clang/unittests/Sema/Makefile b/clang/unittests/Sema/Makefile index 7fd5c27ad60..65ab9bc8dc7 100644 --- a/clang/unittests/Sema/Makefile +++ b/clang/unittests/Sema/Makefile @@ -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 diff --git a/clang/unittests/Tooling/Makefile b/clang/unittests/Tooling/Makefile index 514e80bd030..8e345ce9c2c 100644 --- a/clang/unittests/Tooling/Makefile +++ b/clang/unittests/Tooling/Makefile @@ -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 ipo 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 diff --git a/clang/unittests/libclang/Makefile b/clang/unittests/libclang/Makefile index f8e83aa83a1..ea60fc59246 100644 --- a/clang/unittests/libclang/Makefile +++ b/clang/unittests/libclang/Makefile @@ -12,13 +12,14 @@ TESTNAME = libclang LINK_LIBS_IN_SHARED := 1 include $(CLANG_LEVEL)/../../Makefile.config -LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option +LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader ipo objcarcopts \ + instrumentation bitwriter support mc 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 \ - clangFrontend.a clangDriver.a \ + clangCodeGen.a clangFrontend.a clangDriver.a \ clangTooling.a \ clangToolingCore.a \ clangSerialization.a clangParse.a clangSema.a \ |