File tree 1 file changed +20
-3
lines changed 1 file changed +20
-3
lines changed Original file line number Diff line number Diff line change @@ -874,14 +874,31 @@ static bool IsRecordValid(const clang::RecordDecl* RC)
874
874
return IsRecordValid (RC, Visited);
875
875
}
876
876
877
- static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType (const clang::QualType& Ty) {
877
+ static clang::CXXRecordDecl* GetCXXRecordDeclFromTemplateName (const clang::TemplateName& Name)
878
+ {
879
+ using namespace clang ;
880
+
881
+ switch (Name.getKind ()) {
882
+ case clang::TemplateName::Template:
883
+ return dyn_cast<clang::CXXRecordDecl>(
884
+ Name.getAsTemplateDecl ()->getTemplatedDecl ());
885
+ case clang::TemplateName::QualifiedTemplate:
886
+ return dyn_cast<clang::CXXRecordDecl>(
887
+ Name.getAsQualifiedTemplateName ()->getTemplateDecl ()->getTemplatedDecl ());
888
+ default :
889
+ assert (0 && " Unknown template name kind" );
890
+ return nullptr ;
891
+ }
892
+ }
893
+
894
+ static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType (const clang::QualType& Ty)
895
+ {
878
896
using namespace clang ;
879
897
880
898
if (auto RT = Ty->getAs <clang::RecordType>())
881
899
return dyn_cast<clang::CXXRecordDecl>(RT->getDecl ());
882
900
else if (auto TST = Ty->getAs <clang::TemplateSpecializationType>())
883
- return dyn_cast<clang::CXXRecordDecl>(
884
- TST->getTemplateName ().getAsTemplateDecl ()->getTemplatedDecl ());
901
+ return GetCXXRecordDeclFromTemplateName (TST->getTemplateName ());
885
902
else if (auto Injected = Ty->getAs <clang::InjectedClassNameType>())
886
903
return Injected->getDecl ();
887
904
You can’t perform that action at this time.
0 commit comments