[clang] Reapply "[Clang][Sema] Diagnose function/variable templates that shadow their own template parameters (#78274)" (PR #79683)

Krystian Stasiowski via cfe-commits cfe-commits at lists.llvm.org
Sat Jan 27 04:56:42 PST 2024


================
@@ -885,16 +885,19 @@ bool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation,
 /// that the template parameter 'PrevDecl' is being shadowed by a new
 /// declaration at location Loc. Returns true to indicate that this is
 /// an error, and false otherwise.
-void Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {
+void Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl,
+                                           bool IssueWarning) {
----------------
sdkrystian wrote:

I think the more generic `IssueWarning` is less ambiguous. We only issue the warning for variable/function templates the shadow _their own_ template parameters. For example:
```cpp
template<typename T>
struct A
{
    template<typename U> void U(); // warning
    template<typename U> void T(); // error
    void T(); // error
};
```
`ShadowsFunctionOrVariableName` establishes the expectation that its value will be `true` for all the above function declarations (its only `true` for the first one).

https://github.com/llvm/llvm-project/pull/79683


More information about the cfe-commits mailing list