[cfe-dev] [Possible regression?] Canonical decl of friend template decls in dependent contexts

slycelote via cfe-dev cfe-dev at lists.llvm.org
Thu Oct 12 15:17:44 PDT 2017

Consider the following:

template<typename T>
struct C; // d1

template<typename T>
class D {
    static void f() {}

    friend struct C; // d2

template<typename T>
struct C { }; // d3

int main() { }

Here there are 3 declarations corresponding to class template C (marked
as d1, d2 and d3).

In clang 3.9 getCanonicalDecl() for all 3 of them returns d1. Starting
from clang 4.0, d2->getCanonicalDecl() == d2. As far as I can tell, this
is caused by commit 291753 [1].

Is this intended? It looks to me, that, for example,
clang::declaresSameEntity(d1, d2) [2] will return a wrong result.

[1] https://llvm.org/viewvc/llvm-project?view=revision&revision=291753


More information about the cfe-dev mailing list