Hacker News new | ask | show | jobs
by ishtu 3175 days ago
Clang (since LLVM version 4.4) has flag -Weverything which really reports everything

https://www.bignerdranch.com/blog/a-bit-on-warnings/

3 comments

clang doesn't document the full list of warning flags that it supports, but the clang source code has a list, including the hierarchy of meta flags that enable other flags:

https://github.com/llvm-mirror/clang/blob/master/include/cla...

http://fuckingclangwarnings.com/ has descriptions of many of the warnings, but more recent warnings aren't covered because the website hasn't been updated since 2014.

Thank you! I've never seen that page. It doesn't show up when searching for "clang warnings" in DuckDuckGo or Bing, but I see now that it is Google's result #2.

I just found a GitHub repo that lists which warning flags are supported by different versions of clang and gcc:

https://github.com/Barro/compiler-warnings

I found -Weverything seriously annoying. Declare a structure, and clang warns about padding bytes being added. Make it a packed structure, and clang warns about the lack of padding bytes. Useless! Okay, I can see the warning on packed structures, as that's usually a compiler extension, but a plain struct?

Seriously?

There is also -Wlogical-op-parentheses, which rather condescendingly implies that you don't know the precedence of || vs &&. (The main use of parentheses is specifically to indicate precedence different from the usual, since otherwise they just add noise to the code and reduce clarity.) I half-expect -Warithmetic-op-parentheses or even -Wop-parentheses to show up in some future version of clang...

Unfortunately there's no corresponding -Wuseless-parentheses, which if present would truly make -Weverything a "damned if you do, damned if you don't".

I think clang added a -Weverything just to prove a point why it's a bad idea to actually contain _all_ warnings in -Wall.

As you say, some warnings are contradictory and it's up to the project to decide which one of them is more important.

Then turn off that warning if you don't like/want it.
The point is there's a warning either way. Pack the structure, and you get warnings. Don't pack the structure, get warnings. To me, that's being needlessly pedantic.
I'm not convinced I want Scott Meyers yelling at me with -Weverything as part of -Weffc++. I think I side with the gcc devs here on not having a flag to enable every possible warning ever.
You can just use `-Weverything -Wno-effc++` then
Why not have the flag and not use it if you don't want it? That way other users of gcc who want that flag are not deprived of that feature.