Index: clang/include/clang/AST/DeclTemplate.h =================================================================== --- clang/include/clang/AST/DeclTemplate.h +++ clang/include/clang/AST/DeclTemplate.h @@ -1114,6 +1114,20 @@ return makeSpecIterator(getSpecializations(), true); } + /// All specializations that that have already been loaded, ie avoiding + /// deserialization of lazily registered specializations. + spec_range loaded_specializations() const { + return spec_range(loaded_spec_begin(), loaded_spec_end()); + } + + spec_iterator loaded_spec_begin() const { + return makeSpecIterator(getCommonPtr()->Specializations, false); + } + + spec_iterator loaded_spec_end() const { + return makeSpecIterator(getCommonPtr()->Specializations, true); + } + /// Return whether this function template is an abbreviated function template, /// e.g. `void foo(auto x)` or `template void foo(auto x)` bool isAbbreviated() const { @@ -2454,6 +2468,20 @@ return makeSpecIterator(getSpecializations(), true); } + /// All specializations that that have already been loaded, ie avoiding + /// deserialization of lazily registered specializations. + spec_range loaded_specializations() const { + return spec_range(loaded_spec_begin(), loaded_spec_end()); + } + + spec_iterator loaded_spec_begin() const { + return makeSpecIterator(getCommonPtr()->Specializations, false); + } + + spec_iterator loaded_spec_end() const { + return makeSpecIterator(getCommonPtr()->Specializations, true); + } + // Implement isa/cast/dyncast support static bool classof(const Decl *D) { return classofKind(D->getKind()); } static bool classofKind(Kind K) { return K == ClassTemplate; } @@ -3262,6 +3290,20 @@ return makeSpecIterator(getSpecializations(), true); } + /// All specializations that that have already been loaded, ie avoiding + /// deserialization of lazily registered specializations. + spec_range loaded_specializations() const { + return spec_range(loaded_spec_begin(), loaded_spec_end()); + } + + spec_iterator loaded_spec_begin() const { + return makeSpecIterator(getCommonPtr()->Specializations, false); + } + + spec_iterator loaded_spec_end() const { + return makeSpecIterator(getCommonPtr()->Specializations, true); + } + // Implement isa/cast/dyncast support static bool classof(const Decl *D) { return classofKind(D->getKind()); } static bool classofKind(Kind K) { return K == VarTemplate; }