diff options
author | Hans Wennborg <hans@hanshq.net> | 2018-02-05 09:29:08 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2018-02-05 09:29:08 +0000 |
commit | eb51f1dc7cd9d8c95a09b991454af77e2dc055a3 (patch) | |
tree | ae186926c3abad24b898d1070315bbca742915d0 /lib/CodeGen/CodeGenModule.cpp | |
parent | 2f7bb0ceae436c56d0e88c7a0215e6b072d86576 (diff) |
Merging r323935:
------------------------------------------------------------------------
r323935 | rsmith | 2018-02-01 01:28:36 +0100 (Thu, 01 Feb 2018) | 5 lines
PR36181: Teach CodeGen to properly ignore requests to emit dependent entities.
Previously, friend function definitions within class templates slipped through
the gaps and caused the MS mangler to assert.
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_60@324215 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 18 |
1 files changed, 1 insertions, 17 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index df33fc3e82..2172486682 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -4000,18 +4000,13 @@ void CodeGenModule::EmitDeclContext(const DeclContext *DC) { /// EmitTopLevelDecl - Emit code for a single top level declaration. void CodeGenModule::EmitTopLevelDecl(Decl *D) { // Ignore dependent declarations. - if (D->getDeclContext() && D->getDeclContext()->isDependentContext()) + if (D->isTemplated()) return; switch (D->getKind()) { case Decl::CXXConversion: case Decl::CXXMethod: case Decl::Function: - // Skip function templates - if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() || - cast<FunctionDecl>(D)->isLateTemplateParsed()) - return; - EmitGlobal(cast<FunctionDecl>(D)); // Always provide some coverage mapping // even for the functions that aren't emitted. @@ -4024,10 +4019,6 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) { case Decl::Var: case Decl::Decomposition: - // Skip variable templates - if (cast<VarDecl>(D)->getDescribedVarTemplate()) - return; - LLVM_FALLTHROUGH; case Decl::VarTemplateSpecialization: EmitGlobal(cast<VarDecl>(D)); if (auto *DD = dyn_cast<DecompositionDecl>(D)) @@ -4086,16 +4077,9 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) { DI->EmitUsingDirective(cast<UsingDirectiveDecl>(*D)); return; case Decl::CXXConstructor: - // Skip function templates - if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() || - cast<FunctionDecl>(D)->isLateTemplateParsed()) - return; - getCXXABI().EmitCXXConstructors(cast<CXXConstructorDecl>(D)); break; case Decl::CXXDestructor: - if (cast<FunctionDecl>(D)->isLateTemplateParsed()) - return; getCXXABI().EmitCXXDestructors(cast<CXXDestructorDecl>(D)); break; |