...rather than on potentially just a declaration.
Without the fix, the newly added clang/test/SemaCXX/warn-undefined-internal.cpp failed with
error: 'warning' diagnostics expected but not seen: File /home/sbergman/github.com/llvm/llvm-project/clang/test/SemaCXX/warn-undefined-internal.cpp Line 12 (directive at /home/sbergman/github.com/llvm/llvm-project/clang/test/SemaCXX/warn-undefined-internal.cpp:13): function 'test2()::S::f' has internal linkage but is not defined error: 'note' diagnostics expected but not seen: File /home/sbergman/github.com/llvm/llvm-project/clang/test/SemaCXX/warn-undefined-internal.cpp Line 14 (directive at /home/sbergman/github.com/llvm/llvm-project/clang/test/SemaCXX/warn-undefined-internal.cpp:15): used here
(I ran into this when two LibreOffice Clang plugins produced false positive warnings, as they relied on Decl::isReferenced() returning true for such virtual member functions of local classes.)
That call of getCanonicalDecl originated with https://github.com/llvm/llvm-project/commit/88d292ccb86c10857298c252bb93331f7ef2258a "Rework when and how vtables are emitted, by tracking where vtables are", and I wonder if more of the uses of the modified Class below suffer from the same issue, that they expect Class to represent a definition when it might potentially reference just a declaration.