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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits