diff options
| author | Adrian Prantl <aprantl@apple.com> | 2015-06-30 02:26:03 +0000 | 
|---|---|---|
| committer | Adrian Prantl <aprantl@apple.com> | 2015-06-30 02:26:03 +0000 | 
| commit | e74f525bc974f8c34cc991e8bfae3f64c59c5748 (patch) | |
| tree | a8c88a3d9666205e595c84c9a5f972a5c6cec3a8 /clang/lib/CodeGen | |
| parent | 08a388ba8f6d8eebad695810dfe34c1dca61b8f8 (diff) | |
| download | bcm5719-llvm-e74f525bc974f8c34cc991e8bfae3f64c59c5748.tar.gz bcm5719-llvm-e74f525bc974f8c34cc991e8bfae3f64c59c5748.zip  | |
Pass HeaderSearchOptions and PreprocessorOptions into CodeGenModule.
In order to produce debug info for clang modules CGDebugInfo it needs
access to macros passed on the command line and the isysroot.
llvm-svn: 241035
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenABITypes.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CodeGenAction.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 19 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.h | 13 | ||||
| -rw-r--r-- | clang/lib/CodeGen/ModuleBuilder.cpp | 33 | 
5 files changed, 56 insertions, 24 deletions
diff --git a/clang/lib/CodeGen/CodeGenABITypes.cpp b/clang/lib/CodeGen/CodeGenABITypes.cpp index 12189ae1aea..755e8aa628c 100644 --- a/clang/lib/CodeGen/CodeGenABITypes.cpp +++ b/clang/lib/CodeGen/CodeGenABITypes.cpp @@ -20,6 +20,8 @@  #include "CodeGenModule.h"  #include "clang/CodeGen/CGFunctionInfo.h"  #include "clang/Frontend/CodeGenOptions.h" +#include "clang/Lex/HeaderSearchOptions.h" +#include "clang/Lex/PreprocessorOptions.h"  using namespace clang;  using namespace CodeGen; @@ -29,7 +31,10 @@ CodeGenABITypes::CodeGenABITypes(ASTContext &C,                                   const llvm::DataLayout &TD,                                   CoverageSourceInfo *CoverageInfo)    : CGO(new CodeGenOptions), -    CGM(new CodeGen::CodeGenModule(C, *CGO, M, TD, C.getDiagnostics(), +    HSO(new HeaderSearchOptions), +    PPO(new PreprocessorOptions), +    CGM(new CodeGen::CodeGenModule(C, *HSO, *PPO, *CGO, +                                   M, TD, C.getDiagnostics(),                                     CoverageInfo)) {  } diff --git a/clang/lib/CodeGen/CodeGenAction.cpp b/clang/lib/CodeGen/CodeGenAction.cpp index 54e6b73b302..0e7b6d8a71d 100644 --- a/clang/lib/CodeGen/CodeGenAction.cpp +++ b/clang/lib/CodeGen/CodeGenAction.cpp @@ -57,6 +57,8 @@ namespace clang {    public:      BackendConsumer(BackendAction Action, DiagnosticsEngine &Diags, +                    const HeaderSearchOptions &HeaderSearchOpts, +                    const PreprocessorOptions &PPOpts,                      const CodeGenOptions &CodeGenOpts,                      const TargetOptions &TargetOpts,                      const LangOptions &LangOpts, bool TimePasses, @@ -66,7 +68,8 @@ namespace clang {          : Diags(Diags), Action(Action), CodeGenOpts(CodeGenOpts),            TargetOpts(TargetOpts), LangOpts(LangOpts), AsmOutStream(OS),            Context(nullptr), LLVMIRGeneration("LLVM IR Generation Time"), -          Gen(CreateLLVMCodeGen(Diags, InFile, CodeGenOpts, C, CoverageInfo)), +          Gen(CreateLLVMCodeGen(Diags, InFile, HeaderSearchOpts, PPOpts, +                                CodeGenOpts, C, CoverageInfo)),            LinkModule(LinkModule) {        llvm::TimePassesIsEnabled = TimePasses;      } @@ -667,7 +670,8 @@ CodeGenAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {                                      std::unique_ptr<PPCallbacks>(CoverageInfo));    }    std::unique_ptr<BackendConsumer> Result(new BackendConsumer( -      BA, CI.getDiagnostics(), CI.getCodeGenOpts(), CI.getTargetOpts(), +      BA, CI.getDiagnostics(), CI.getHeaderSearchOpts(), +      CI.getPreprocessorOpts(), CI.getCodeGenOpts(), CI.getTargetOpts(),        CI.getLangOpts(), CI.getFrontendOpts().ShowTimers, InFile,        LinkModuleToUse, OS, *VMContext, CoverageInfo));    BEConsumer = Result.get(); diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index d19d0ed886e..461f694acb0 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -74,16 +74,19 @@ static CGCXXABI *createCXXABI(CodeGenModule &CGM) {    llvm_unreachable("invalid C++ ABI kind");  } -CodeGenModule::CodeGenModule(ASTContext &C, const CodeGenOptions &CGO, -                             llvm::Module &M, const llvm::DataLayout &TD, +CodeGenModule::CodeGenModule(ASTContext &C, const HeaderSearchOptions &HSO, +                             const PreprocessorOptions &PPO, +                             const CodeGenOptions &CGO, llvm::Module &M, +                             const llvm::DataLayout &TD,                               DiagnosticsEngine &diags,                               CoverageSourceInfo *CoverageInfo) -    : Context(C), LangOpts(C.getLangOpts()), CodeGenOpts(CGO), TheModule(M), -      Diags(diags), TheDataLayout(TD), Target(C.getTargetInfo()), -      ABI(createCXXABI(*this)), VMContext(M.getContext()), TBAA(nullptr), -      TheTargetCodeGenInfo(nullptr), Types(*this), VTables(*this), -      ObjCRuntime(nullptr), OpenCLRuntime(nullptr), OpenMPRuntime(nullptr), -      CUDARuntime(nullptr), DebugInfo(nullptr), ARCData(nullptr), +    : Context(C), LangOpts(C.getLangOpts()), HeaderSearchOpts(HSO), +      PreprocessorOpts(PPO), CodeGenOpts(CGO), TheModule(M), Diags(diags), +      TheDataLayout(TD), Target(C.getTargetInfo()), ABI(createCXXABI(*this)), +      VMContext(M.getContext()), TBAA(nullptr), TheTargetCodeGenInfo(nullptr), +      Types(*this), VTables(*this), ObjCRuntime(nullptr), +      OpenCLRuntime(nullptr), OpenMPRuntime(nullptr), CUDARuntime(nullptr), +      DebugInfo(nullptr), ARCData(nullptr),        NoObjCARCExceptionsMetadata(nullptr), RRData(nullptr), PGOReader(nullptr),        CFConstantStringClassRef(nullptr), ConstantStringClassRef(nullptr),        NSConstantStringType(nullptr), NSConcreteGlobalBlock(nullptr), diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index 273fe70d52f..9a295feaffa 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -69,6 +69,8 @@ class ValueDecl;  class VarDecl;  class LangOptions;  class CodeGenOptions; +class HeaderSearchOptions; +class PreprocessorOptions;  class DiagnosticsEngine;  class AnnotateAttr;  class CXXDestructorDecl; @@ -278,6 +280,8 @@ public:  private:    ASTContext &Context;    const LangOptions &LangOpts; +  const HeaderSearchOptions &HeaderSearchOpts; // Only used for debug info. +  const PreprocessorOptions &PreprocessorOpts; // Only used for debug info.    const CodeGenOptions &CodeGenOpts;    llvm::Module &TheModule;    DiagnosticsEngine &Diags; @@ -488,7 +492,10 @@ private:    std::unique_ptr<CoverageMappingModuleGen> CoverageMapping;  public: -  CodeGenModule(ASTContext &C, const CodeGenOptions &CodeGenOpts, +  CodeGenModule(ASTContext &C, +                const HeaderSearchOptions &headersearchopts, +                const PreprocessorOptions &ppopts, +                const CodeGenOptions &CodeGenOpts,                  llvm::Module &M, const llvm::DataLayout &TD,                  DiagnosticsEngine &Diags,                  CoverageSourceInfo *CoverageInfo = nullptr); @@ -600,6 +607,10 @@ public:    ASTContext &getContext() const { return Context; }    const LangOptions &getLangOpts() const { return LangOpts; } +  const HeaderSearchOptions &getHeaderSearchOpts() +    const { return HeaderSearchOpts; } +  const PreprocessorOptions &getPreprocessorOpts() +    const { return PreprocessorOpts; }    const CodeGenOptions &getCodeGenOpts() const { return CodeGenOpts; }    llvm::Module &getModule() const { return TheModule; }    DiagnosticsEngine &getDiags() const { return Diags; } diff --git a/clang/lib/CodeGen/ModuleBuilder.cpp b/clang/lib/CodeGen/ModuleBuilder.cpp index 25e57401fd5..def56a96312 100644 --- a/clang/lib/CodeGen/ModuleBuilder.cpp +++ b/clang/lib/CodeGen/ModuleBuilder.cpp @@ -32,6 +32,8 @@ namespace {      DiagnosticsEngine &Diags;      std::unique_ptr<const llvm::DataLayout> TD;      ASTContext *Ctx; +    const HeaderSearchOptions &HeaderSearchOpts; // Only used for debug info. +    const PreprocessorOptions &PreprocessorOpts; // Only used for debug info.      const CodeGenOptions CodeGenOpts;  // Intentionally copied in.      unsigned HandlingTopLevelDecls; @@ -56,12 +58,15 @@ namespace {      SmallVector<CXXMethodDecl *, 8> DeferredInlineMethodDefinitions;    public: -    CodeGeneratorImpl(DiagnosticsEngine &diags, const std::string& ModuleName, -                      const CodeGenOptions &CGO, llvm::LLVMContext& C, +    CodeGeneratorImpl(DiagnosticsEngine &diags, const std::string &ModuleName, +                      const HeaderSearchOptions &HSO, +                      const PreprocessorOptions &PPO, const CodeGenOptions &CGO, +                      llvm::LLVMContext &C,                        CoverageSourceInfo *CoverageInfo = nullptr) -      : Diags(diags), Ctx(nullptr), CodeGenOpts(CGO), HandlingTopLevelDecls(0), -        CoverageInfo(CoverageInfo), -        M(new llvm::Module(ModuleName, C)) {} +        : Diags(diags), Ctx(nullptr), HeaderSearchOpts(HSO), +          PreprocessorOpts(PPO), CodeGenOpts(CGO), HandlingTopLevelDecls(0), +          CoverageInfo(CoverageInfo), +          M(new llvm::Module(ModuleName, C)) {}      ~CodeGeneratorImpl() override {        // There should normally not be any leftover inline method definitions. @@ -97,7 +102,10 @@ namespace {        M->setDataLayout(Ctx->getTargetInfo().getTargetDescription());        TD.reset(            new llvm::DataLayout(Ctx->getTargetInfo().getTargetDescription())); -      Builder.reset(new CodeGen::CodeGenModule(Context, CodeGenOpts, *M, *TD, +      Builder.reset(new CodeGen::CodeGenModule(Context, +                                               HeaderSearchOpts, +                                               PreprocessorOpts, +                                               CodeGenOpts, *M, *TD,                                                 Diags, CoverageInfo));        for (size_t i = 0, e = CodeGenOpts.DependentLibraries.size(); i < e; ++i) @@ -236,10 +244,11 @@ namespace {  void CodeGenerator::anchor() { } -CodeGenerator *clang::CreateLLVMCodeGen(DiagnosticsEngine &Diags, -                                        const std::string& ModuleName, -                                        const CodeGenOptions &CGO, -                                        llvm::LLVMContext& C, -                                        CoverageSourceInfo *CoverageInfo) { -  return new CodeGeneratorImpl(Diags, ModuleName, CGO, C, CoverageInfo); +CodeGenerator *clang::CreateLLVMCodeGen( +    DiagnosticsEngine &Diags, const std::string &ModuleName, +    const HeaderSearchOptions &HeaderSearchOpts, +    const PreprocessorOptions &PreprocessorOpts, const CodeGenOptions &CGO, +    llvm::LLVMContext &C, CoverageSourceInfo *CoverageInfo) { +  return new CodeGeneratorImpl(Diags, ModuleName, HeaderSearchOpts, +                               PreprocessorOpts, CGO, C, CoverageInfo);  }  | 

