[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