diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-10-12 23:29:02 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-10-12 23:29:02 +0000 |
commit | 88d10b68e0975510477d87e585c020a929739778 (patch) | |
tree | c56bd85a61a3b1e1dca2ba7cf5cda6882d290f55 /clang/lib/AST/Decl.cpp | |
parent | d9fa56a4fb24c4763adf2ea4e16b04a4f43e3e08 (diff) | |
download | bcm5719-llvm-88d10b68e0975510477d87e585c020a929739778.tar.gz bcm5719-llvm-88d10b68e0975510477d87e585c020a929739778.zip |
Revert r284008. This is us to fail to instantiate static data members in some
cases. I'm working on reducing a testcase.
llvm-svn: 284081
Diffstat (limited to 'clang/lib/AST/Decl.cpp')
-rw-r--r-- | clang/lib/AST/Decl.cpp | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 3d601ee40e0..e330e31d47f 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1926,9 +1926,6 @@ VarDecl::isThisDeclarationADefinition(ASTContext &C) const { // // FIXME: How do you declare (but not define) a partial specialization of // a static data member template outside the containing class? - if (isThisDeclarationADemotedDefinition()) - return DeclarationOnly; - if (isStaticDataMember()) { if (isOutOfLine() && !(getCanonicalDecl()->isInline() && @@ -2253,56 +2250,6 @@ bool VarDecl::checkInitIsICE() const { return Eval->IsICE; } -VarDecl *VarDecl::getTemplateInstantiationPattern() const { - // If it's a variable template specialization, find the template or partial - // specialization from which it was instantiated. - if (auto *VDTemplSpec = dyn_cast<VarTemplateSpecializationDecl>(this)) { - auto From = VDTemplSpec->getInstantiatedFrom(); - if (auto *VTD = From.dyn_cast<VarTemplateDecl *>()) { - while (auto *NewVTD = VTD->getInstantiatedFromMemberTemplate()) { - if (NewVTD->isMemberSpecialization()) - break; - VTD = NewVTD; - } - return VTD->getTemplatedDecl()->getDefinition(); - } - if (auto *VTPSD = - From.dyn_cast<VarTemplatePartialSpecializationDecl *>()) { - while (auto *NewVTPSD = VTPSD->getInstantiatedFromMember()) { - if (NewVTPSD->isMemberSpecialization()) - break; - VTPSD = NewVTPSD; - } - return VTPSD->getDefinition(); - } - } - - if (MemberSpecializationInfo *MSInfo = getMemberSpecializationInfo()) { - if (isTemplateInstantiation(MSInfo->getTemplateSpecializationKind())) { - VarDecl *VD = getInstantiatedFromStaticDataMember(); - while (auto *NewVD = VD->getInstantiatedFromStaticDataMember()) - VD = NewVD; - return VD->getDefinition(); - } - } - - if (VarTemplateDecl *VarTemplate = getDescribedVarTemplate()) { - - while (VarTemplate->getInstantiatedFromMemberTemplate()) { - if (VarTemplate->isMemberSpecialization()) - break; - VarTemplate = VarTemplate->getInstantiatedFromMemberTemplate(); - } - - assert((!VarTemplate->getTemplatedDecl() || - !isTemplateInstantiation(getTemplateSpecializationKind())) && - "couldn't find pattern for variable instantiation"); - - return VarTemplate->getTemplatedDecl(); - } - return nullptr; -} - VarDecl *VarDecl::getInstantiatedFromStaticDataMember() const { if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo()) return cast<VarDecl>(MSI->getInstantiatedFrom()); |