[cfe-dev] rfc: winnt.h's UNREFERENCED_PARAMETER() vs clang's -Wunused-value
Nico Weber via cfe-dev
cfe-dev at lists.llvm.org
Sat Oct 10 14:50:33 PDT 2015
Hi,
clang has a useful warning -Wunused-value that warns on things such as `4;`
(this probably meant to say `return 4;`).
winnt.h has a macro UNREFERENCED_PARAMETER(x) that's used to mark unused
function parameters. It's somewhat commonly used on Windows, for example
the default project generated by MSVC uses it a few times. The macro is
defined as `#define UNREFERENCED_PARAMETER(x) (x)`, which means if you use
it like it's intended:
void f(int x) {
UNREFERENCED_PARAMETER(x);
}
then clang will emit a -Wunused-value warning for it. How do we want to fix
this? Ideas:
1. Don't. Tell people to not use UNREFERENCED_PARAMETER().
2. Have a winnt.h wrapper in lib/Headers that undefines this macro,
include_next's regular winnt.h, undefines it again, and then defines it to
something that doesn't trigger -Wunused-value (say, `(void)p`, or `do {
(void) P; } while (0)` or similar).
3. Change clang's Wunused-value to check if the unused value is expanded
from a macro that was defined in a system header that's spelled
UNREFERENCED_PARAMETER.
2 sounds like it has the highest chance of unintended side effects. 3 is a
bit hacky, but seems nicest from a user's perspective and isn't worse than
other things we do really.
Other ideas? Opinions?
Thanks,
Nico
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151010/172c77fc/attachment.html>
More information about the cfe-dev
mailing list