https://github.com/jpjepko created 
https://github.com/llvm/llvm-project/pull/179790

Running the following code with `-Wattributes` triggers no warnings:
```cpp
int main(__attribute__((unused)) int argc, __attribute__((unused)) char **argv)
{
    return argc;
}
```
```
$ clang -Wall -Wattributes main.cpp
[no output]
```

But `-Wused-but-marked-unused` does warn (currently disabled by default):
```
$ clang -Wall -Wused-but-marked-unused main.cpp
/tmp/main.c:4:10: warning: 'argc' was marked unused but was used 
[-Wused-but-marked-unused]
    4 |   return argc;
      |          ^
1 warning generated.
```

This warning was disabled by default and removed from `-Wunused` in 2010 due to 
concerns about false-positives, as the `unused` attribute was traditionally 
interpreted as "it's okay if this isn't used" rather than "this must not be 
used" (paraphrased from 
https://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20101018/035732.html).

However, now that we have the `maybe_unused` attribute with explicit "may or 
may not be used" semantics, I would contend `unused` should have a stricter 
definition of "should not be used." Warning on variables marked `unused` that 
are actually used would improve code quality without the original 
false-positive concerns, since programmers should prefer `maybe_unused` in 
those cases.

Here I propose simply adding it to `-Wattributes`, which leaves it out of 
`-Wall`, but enables it alongside other attribute-related warnings. Thoughts?

>From a402efdefed48cbe72282969de52d44946c26b7d Mon Sep 17 00:00:00 2001
From: John Jepko <[email protected]>
Date: Wed, 4 Feb 2026 17:41:24 +0100
Subject: [PATCH] add Wused-but-marked-unused to Wattributes

---
 clang/include/clang/Basic/DiagnosticGroups.td | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticGroups.td 
b/clang/include/clang/Basic/DiagnosticGroups.td
index 488f3a94c4fb6..cf2bc00cc2e21 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -1010,8 +1010,9 @@ def IndependentClassAttribute : 
DiagGroup<"IndependentClass-attribute">;
 def UnknownAttributes : DiagGroup<"unknown-attributes">;
 def IgnoredAttributes : DiagGroup<"ignored-attributes",
                                   [DllexportExplicitInstantiation]>;
-def Attributes : DiagGroup<"attributes", [UnknownAttributes,
-                                          IgnoredAttributes]>;
+def UsedButMarkedUnused : DiagGroup<"used-but-marked-unused">;
+def Attributes : DiagGroup<"attributes", [UnknownAttributes, IgnoredAttributes,
+                                          UsedButMarkedUnused]>;
 def UnknownSanitizers : DiagGroup<"unknown-sanitizers">;
 def UnnamedTypeTemplateArgs : DiagGroup<"unnamed-type-template-args",
                                         [CXX98CompatUnnamedTypeTemplateArgs]>;
@@ -1047,7 +1048,6 @@ def UnusedButSetVariable : 
DiagGroup<"unused-but-set-variable">;
 def UnusedLocalTypedef : DiagGroup<"unused-local-typedef">;
 def UnusedPropertyIvar :  DiagGroup<"unused-property-ivar">;
 def UnusedGetterReturnValue : DiagGroup<"unused-getter-return-value">;
-def UsedButMarkedUnused : DiagGroup<"used-but-marked-unused">;
 def UsedSearchPath : DiagGroup<"search-path-usage">;
 def UserDefinedLiterals : DiagGroup<"user-defined-literals">;
 def UserDefinedWarnings : DiagGroup<"user-defined-warnings">;

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to