There are two related argument types which can be sent into a diagnostic to display the name of an entity: DeclarationName (ak_declarationname) or NamedDecl * (ak_nameddecl) (there is also ak_identifierinfo for IdentifierInfo *, but we are not concerned with it here).
A DeclarationName in a diagnostic will just be streamed to the output, which will directly result in a call to DeclarationName::print.
A NamedDecl * in a diagnostic will also ultimately result in a call to DeclarationName::print, but with two customisation points along the way.
The first customisation point is NamedDecl::getNameForDiagnostic which is overloaded by FunctionDecl, ClassTemplateSpecializationDecl and VarTemplateSpecializationDecl to print the template arguments if any.
The second customisation point is NamedDecl::printName. By default it just streams the stored DeclarationName into the output but it can be customised to provide a user-friendly name for an entity. It is currently overloaded by DecompositionDecl and MSGuidDecl.
What this patch does:
For many diagnostics a DeclarationName is used instead of the NamedDecl *. This bypasses the two customisation points mentioned above. This patches fix this for diagnostics in Sema.cpp, SemaCast.cpp, SemaChecking.cpp, SemaDecl.cpp, SemaDeclAttr.cpp, SemaDecl.cpp, SemaOverload.cpp and SemaStmt.cpp.
I have only modified diagnostics where I could construct a test-case which demonstrates that the change is appropriate (either with this patch or the next one).