@@ -155,17 +155,22 @@ class RuleUsageCollector
155155 return ;
156156 }
157157 AddKey (TypeKey (type));
158- if (const auto *enum_decl = type->getAsEnumDecl ()) {
159- AddType (enum_decl->getIntegerType ());
158+ if (auto desugared = type.getSingleStepDesugaredType (ctx_);
159+ desugared != type) {
160+ if (const auto *spec = llvm::dyn_cast<clang::TemplateSpecializationType>(
161+ type.getTypePtr ())) {
162+ AddTemplateArgs (spec->template_arguments ());
163+ }
164+ return AddType (desugared);
160165 }
161-
162- assert (!type-> isMemberPointerType () && " member pointers are not scanned " ) ;
163- AddType (type. getSingleStepDesugaredType (ctx_));
164- if (type->isAnyPointerType () || type->isReferenceType ()) {
165- AddType (type->getPointeeType ());
166+ if (type-> isBuiltinType ()) {
167+ return ;
168+ }
169+ if (type->isPointerType () || type->isReferenceType ()) {
170+ return AddType (type->getPointeeType ());
166171 }
167172 if (const auto *array = ctx_.getAsArrayType (type)) {
168- AddType (array->getElementType ());
173+ return AddType (array->getElementType ());
169174 }
170175 if (const auto *fn = type->getAs <clang::FunctionType>()) {
171176 AddType (fn->getReturnType ());
@@ -174,17 +179,23 @@ class RuleUsageCollector
174179 AddType (param);
175180 }
176181 }
182+ return ;
177183 }
178- if (const auto *spec = type->getAs <clang::TemplateSpecializationType> ()) {
179- AddTemplateArgs (spec-> template_arguments ());
184+ if (const auto *enum_decl = type->getAsEnumDecl ()) {
185+ return AddType (enum_decl-> getIntegerType ());
180186 }
181- if (auto *record = type->getAsCXXRecordDecl ()) {
182- if (const auto *spec =
183- llvm::dyn_cast<clang::ClassTemplateSpecializationDecl>(record)) {
184- AddTemplateArgs (spec->getTemplateArgs ().asArray ());
187+ if (type->isRecordType ()) {
188+ if (auto *record = type->getAsCXXRecordDecl ()) {
189+ if (const auto *spec =
190+ llvm::dyn_cast<clang::ClassTemplateSpecializationDecl>(
191+ record)) {
192+ AddTemplateArgs (spec->getTemplateArgs ().asArray ());
193+ }
194+ AddSpecialMembers (record);
185195 }
186- AddSpecialMembers (record) ;
196+ return ;
187197 }
198+ assert (0 && " type is not scanned" );
188199 }
189200
190201 void AddSpecialMembers (clang::CXXRecordDecl *record) {
0 commit comments