@@ -857,16 +857,6 @@ class RedeclarableTemplateDecl : public TemplateDecl,
857857 // / \endcode
858858 bool isMemberSpecialization () const { return Common.getInt (); }
859859
860- // / Determines whether any redeclaration of this template was
861- // / a specialization of a member template.
862- bool hasMemberSpecialization () const {
863- for (const auto *D : redecls ()) {
864- if (D->isMemberSpecialization ())
865- return true ;
866- }
867- return false ;
868- }
869-
870860 // / Note that this member template is a specialization.
871861 void setMemberSpecialization () {
872862 assert (!isMemberSpecialization () && " already a member specialization" );
@@ -1965,13 +1955,7 @@ class ClassTemplateSpecializationDecl : public CXXRecordDecl,
19651955 // / specialization which was specialized by this.
19661956 llvm::PointerUnion<ClassTemplateDecl *,
19671957 ClassTemplatePartialSpecializationDecl *>
1968- getSpecializedTemplateOrPartial () const {
1969- if (const auto *PartialSpec =
1970- SpecializedTemplate.dyn_cast <SpecializedPartialSpecialization *>())
1971- return PartialSpec->PartialSpecialization ;
1972-
1973- return SpecializedTemplate.get <ClassTemplateDecl*>();
1974- }
1958+ getSpecializedTemplateOrPartial () const ;
19751959
19761960 // / Retrieve the set of template arguments that should be used
19771961 // / to instantiate members of the class template or class template partial
@@ -2208,17 +2192,6 @@ class ClassTemplatePartialSpecializationDecl
22082192 return InstantiatedFromMember.getInt ();
22092193 }
22102194
2211- // / Determines whether any redeclaration of this this class template partial
2212- // / specialization was a specialization of a member partial specialization.
2213- bool hasMemberSpecialization () const {
2214- for (const auto *D : redecls ()) {
2215- if (cast<ClassTemplatePartialSpecializationDecl>(D)
2216- ->isMemberSpecialization ())
2217- return true ;
2218- }
2219- return false ;
2220- }
2221-
22222195 // / Note that this member template is a specialization.
22232196 void setMemberSpecialization () { return InstantiatedFromMember.setInt (true ); }
22242197
@@ -2740,13 +2713,7 @@ class VarTemplateSpecializationDecl : public VarDecl,
27402713 // / Retrieve the variable template or variable template partial
27412714 // / specialization which was specialized by this.
27422715 llvm::PointerUnion<VarTemplateDecl *, VarTemplatePartialSpecializationDecl *>
2743- getSpecializedTemplateOrPartial () const {
2744- if (const auto *PartialSpec =
2745- SpecializedTemplate.dyn_cast <SpecializedPartialSpecialization *>())
2746- return PartialSpec->PartialSpecialization ;
2747-
2748- return SpecializedTemplate.get <VarTemplateDecl *>();
2749- }
2716+ getSpecializedTemplateOrPartial () const ;
27502717
27512718 // / Retrieve the set of template arguments that should be used
27522719 // / to instantiate the initializer of the variable template or variable
@@ -2980,18 +2947,6 @@ class VarTemplatePartialSpecializationDecl
29802947 return InstantiatedFromMember.getInt ();
29812948 }
29822949
2983- // / Determines whether any redeclaration of this this variable template
2984- // / partial specialization was a specialization of a member partial
2985- // / specialization.
2986- bool hasMemberSpecialization () const {
2987- for (const auto *D : redecls ()) {
2988- if (cast<VarTemplatePartialSpecializationDecl>(D)
2989- ->isMemberSpecialization ())
2990- return true ;
2991- }
2992- return false ;
2993- }
2994-
29952950 // / Note that this member template is a specialization.
29962951 void setMemberSpecialization () { return InstantiatedFromMember.setInt (true ); }
29972952
@@ -3164,6 +3119,9 @@ class VarTemplateDecl : public RedeclarableTemplateDecl {
31643119 return makeSpecIterator (getSpecializations (), true );
31653120 }
31663121
3122+ // / Merge \p Prev with our RedeclarableTemplateDecl::Common.
3123+ void mergePrevDecl (VarTemplateDecl *Prev);
3124+
31673125 // Implement isa/cast/dyncast support
31683126 static bool classof (const Decl *D) { return classofKind (D->getKind ()); }
31693127 static bool classofKind (Kind K) { return K == VarTemplate; }
0 commit comments