[PATCH] D100581: [Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable
David Blaikie via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 21 14:35:42 PDT 2021
dblaikie added a comment.
In D100581#2706554 <https://reviews.llvm.org/D100581#2706554>, @xbolva00 wrote:
> In D100581#2706467 <https://reviews.llvm.org/D100581#2706467>, @dblaikie wrote:
>
>> FWIW, I'd love it if we could do a full dead-store warning, which would be a superset of this. I think we have enough infrastructure in the analysis based warnings (I think the sufficiency of the infrastructure is demonstrated by the "may be used uninitialized" warnings). Such a warning would subsume these narrower "set but not used" type of warnings (though would require the analysis warning infrastructure).
>
>
>
> - Compile time cost could be a problem.
Given that we managed to enable -Wsometimes-uninitialized, which is a CFG-sensitive warning under -Wall:
$ clang++-tot maybe-uninit.cpp -Wall -c
maybe-uninit.cpp:4:7: warning: variable 'i' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
if (b)
^
maybe-uninit.cpp:6:6: note: uninitialized use occurs here
f1(i);
^
maybe-uninit.cpp:4:3: note: remove the 'if' if its condition is always true
if (b)
^~~~~~
maybe-uninit.cpp:3:8: note: initialize the variable 'i' to silence this warning
int i;
^
= 0
1 warning generated.
Then I think similar infrastructure could be used to implement a dead-store warning too.
> - Do we need stronger dead store warning? Clang analyzer checks for dead stores, no?
Catching something at compile time's a fair bit of increased value over using the static analyzer (at least at Google we don't use the static analyzer, for instance)
Oh, right - https://bugs.llvm.org/show_bug.cgi?id=24506 documents one of the cases that came up that I think a dead store warning would be rather helpful at catching. (though I think we probably now catch the int case -Wzero-as-null-pointer-constant - though that's not on by default, for instance because it's too pervasive, but a dead store warning would catch the buggy case without require a stylistic change to a whole codebase - and also a dead store warning could catch the case with, say a T** parameter where you mean to set the caller's value to nullptr, but instead set the local copy to nullptr) - in these simple examples unused-but-set catches them, but it's not uncommon to test a parameter for non-null before writing, for instance you might mean "if (x) *x = nullptr" but write "if (x) x = nullptr" - dead store would catch that but unused-but-set would not.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100581/new/
https://reviews.llvm.org/D100581
More information about the cfe-commits
mailing list