diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:04:05 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-01-19 10:04:05 +0000 |
commit | 676fbe8105eeb6ff4bb2ed261cb212fcfdbe7b63 (patch) | |
tree | 02a1ac369cb734d0abfa5000dd86e5b7797e6a74 /lib/CodeGen/ModuleBuilder.cpp | |
parent | c7e70c433efc6953dc3888b9fbf9f3512d7da2b0 (diff) |
Notes
Diffstat (limited to 'lib/CodeGen/ModuleBuilder.cpp')
-rw-r--r-- | lib/CodeGen/ModuleBuilder.cpp | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/lib/CodeGen/ModuleBuilder.cpp b/lib/CodeGen/ModuleBuilder.cpp index 8aa9bfb421b4a..c0a37698e762e 100644 --- a/lib/CodeGen/ModuleBuilder.cpp +++ b/lib/CodeGen/ModuleBuilder.cpp @@ -17,9 +17,9 @@ #include "clang/AST/ASTContext.h" #include "clang/AST/DeclObjC.h" #include "clang/AST/Expr.h" +#include "clang/Basic/CodeGenOptions.h" #include "clang/Basic/Diagnostic.h" #include "clang/Basic/TargetInfo.h" -#include "clang/Frontend/CodeGenOptions.h" #include "llvm/ADT/StringRef.h" #include "llvm/IR/DataLayout.h" #include "llvm/IR/LLVMContext.h" @@ -64,7 +64,7 @@ namespace { std::unique_ptr<CodeGen::CodeGenModule> Builder; private: - SmallVector<CXXMethodDecl *, 8> DeferredInlineMethodDefinitions; + SmallVector<FunctionDecl *, 8> DeferredInlineMemberFuncDefs; public: CodeGeneratorImpl(DiagnosticsEngine &diags, llvm::StringRef ModuleName, @@ -80,7 +80,7 @@ namespace { ~CodeGeneratorImpl() override { // There should normally not be any leftover inline method definitions. - assert(DeferredInlineMethodDefinitions.empty() || + assert(DeferredInlineMemberFuncDefs.empty() || Diags.hasErrorOccurred()); } @@ -132,6 +132,9 @@ namespace { M->setTargetTriple(Ctx->getTargetInfo().getTriple().getTriple()); M->setDataLayout(Ctx->getTargetInfo().getDataLayout()); + const auto &SDKVersion = Ctx->getTargetInfo().getSDKVersion(); + if (!SDKVersion.empty()) + M->setSDKVersion(SDKVersion); Builder.reset(new CodeGen::CodeGenModule(Context, HeaderSearchOpts, PreprocessorOpts, CodeGenOpts, *M, Diags, CoverageInfo)); @@ -163,16 +166,16 @@ namespace { } void EmitDeferredDecls() { - if (DeferredInlineMethodDefinitions.empty()) + if (DeferredInlineMemberFuncDefs.empty()) return; // Emit any deferred inline method definitions. Note that more deferred // methods may be added during this loop, since ASTConsumer callbacks // can be invoked if AST inspection results in declarations being added. HandlingTopLevelDeclRAII HandlingDecl(*this); - for (unsigned I = 0; I != DeferredInlineMethodDefinitions.size(); ++I) - Builder->EmitTopLevelDecl(DeferredInlineMethodDefinitions[I]); - DeferredInlineMethodDefinitions.clear(); + for (unsigned I = 0; I != DeferredInlineMemberFuncDefs.size(); ++I) + Builder->EmitTopLevelDecl(DeferredInlineMemberFuncDefs[I]); + DeferredInlineMemberFuncDefs.clear(); } void HandleInlineFunctionDefinition(FunctionDecl *D) override { @@ -181,17 +184,6 @@ namespace { assert(D->doesThisDeclarationHaveABody()); - // Handle friend functions. - if (D->isInIdentifierNamespace(Decl::IDNS_OrdinaryFriend)) { - if (Ctx->getTargetInfo().getCXXABI().isMicrosoft() - && !D->getLexicalDeclContext()->isDependentContext()) - Builder->EmitTopLevelDecl(D); - return; - } - - // Otherwise, must be a method. - auto MD = cast<CXXMethodDecl>(D); - // We may want to emit this definition. However, that decision might be // based on computing the linkage, and we have to defer that in case we // are inside of something that will change the method's final linkage, @@ -200,13 +192,13 @@ namespace { // void bar(); // void foo() { bar(); } // } A; - DeferredInlineMethodDefinitions.push_back(MD); + DeferredInlineMemberFuncDefs.push_back(D); // Provide some coverage mapping even for methods that aren't emitted. // Don't do this for templated classes though, as they may not be // instantiable. - if (!MD->getParent()->isDependentContext()) - Builder->AddDeferredUnusedCoverageMapping(MD); + if (!D->getLexicalDeclContext()->isDependentContext()) + Builder->AddDeferredUnusedCoverageMapping(D); } /// HandleTagDeclDefinition - This callback is invoked each time a TagDecl |