zyn0217 wrote: Sorry, it might be I forgot to save the changes before I ran the tests yesterday!
I looked into it again, and I think I have begun to understand `TemplateParameterListsInfo`: The first intent is to describe out-of-line member functions that live in a templated scope. For example, ```cpp template <class T> struct S { void foo(); }; template <class T> void S<T>::foo() {} ``` So the member function `foo`, which is *not* a template, doesn't have any associated template declaration, whereas it has a structure `TemplateParameterListsInfo` that describes its specifier `S<T>`. However, for non-member function explicit specialization in question, `ActOnFunctionDeclarator()` would also set up its `TemplateParameterListsInfo` for the "spelled" explicit specialization, and wire up the "implicit" declaration to the "spelled" declaration, in the form of a redeclaration. Seemingly we might fix the problem in `ActOnFunctionDeclarator()` (we shouldn't do that in `CheckFunctionTemplateSpecialization()` because that has more clients than `ActOnFunctionDeclarator()`, e.g. CXXMethod instantiator that we probably don't need to deal with.) and thereby we don't have to take care of these odd canonical declarations in `ASTContext::getRawCommentForAnyRedecl()`. I tried that approach locally and now I have all check-clang tests passed but some of the check-clangd tests failed ``` Clangd :: include-cleaner-batch-fix.test Clangd Unit Tests :: ./ClangdTests/DefineInlineTest/AddInline (DefineInlineTest.AddInline, around line 990) ``` I don't know if people already have some assumptions that an "implicit" explicit specialization shouldn't have its `TemplateParameterListsInfo`, though :( https://github.com/llvm/llvm-project/pull/108475 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits