File tree Expand file tree Collapse file tree 1 file changed +20
-3
lines changed Expand file tree Collapse file tree 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)
874874 return IsRecordValid (RC, Visited);
875875}
876876
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+ {
878896 using namespace clang ;
879897
880898 if (auto RT = Ty->getAs <clang::RecordType>())
881899 return dyn_cast<clang::CXXRecordDecl>(RT->getDecl ());
882900 else if (auto TST = Ty->getAs <clang::TemplateSpecializationType>())
883- return dyn_cast<clang::CXXRecordDecl>(
884- TST->getTemplateName ().getAsTemplateDecl ()->getTemplatedDecl ());
901+ return GetCXXRecordDeclFromTemplateName (TST->getTemplateName ());
885902 else if (auto Injected = Ty->getAs <clang::InjectedClassNameType>())
886903 return Injected->getDecl ();
887904
You can’t perform that action at this time.
0 commit comments