[webkit-dev] CMake EWS now use -Werror

Michael Catanzaro mcatanzaro at gnome.org
Tue Oct 25 13:06:08 PDT 2022


Hi developers,

The Apple EWS bots have long used -Werror to make warnings fatal, 
discouraging inadvertently introducing new build warnings. But CMake 
EWS bots did not, until now. The new CMake behavior after 
https://commits.webkit.org/255961@main is:

 * By default, warnings are not fatal.
 * Warnings become fatal if you use the -DDEVELOPER_MODE=ON CMake flag. 
The build-webkit script always enables this.
 * An off switch exists, -DDEVELOPER_MODE_FATAL_WARNINGS=OFF, with a 
corresponding --no-fatal-warnings flag for build-webkit. Use this 
whenever you're bisecting, or when you're in a hurry and don't have 
time to deal with particular warnings.
 * All post-commit bots now build with --no-fatal-warnings to avoid 
losing test results to a compiler warning. The EWS does not, to 
discourage introduction of new warnings.

Some common warnings to avoid:

 * -Wreturn-type is by far the most common GCC warning introduced into 
WebKit. This occurs when you expect a switch statement to always 
return, but forget to ensure that it really does when passed an invalid 
enum value. Clang does not complain about these, so only the bots using 
GCC will notice it. The normal solution is to add 
RELEASE_ASSERT_NOT_REACHED() to the bottom of the function. In 
especially hot functions,  that might have performance impact, and you 
might need to write the code in an alternative way or use 
IGNORE_RETURN_TYPE_WARNINGS_BEGIN/END from Compiler.h. (I've considered 
disabling this warning due to how frequently we introduce code that 
trips it, but have left it because returning bogus data is very bad.)
 * -Wunused-parameter and -Wunused-variable warnings often occur around 
ENABLE() or USE() build guards. Use UNUSED_PARAM() and 
UNUSED_VARIABLE(), respectively, to suppress these. Note that 
Source/WebKit builds with -Wno-unused-parameter, but most of the rest 
of WebKit does not.
 * -Wredundant-move occurs when you write "return WTFMove(foo)" and the 
solution is to remove the WTFMove(). Clang only warns when the move 
blocks return value optimization, but GCC warns always.

Of course there are plenty more warnings you might encounter, but those 
are the most common ones. If you find something you don't know how to 
deal with, don't hesitate to ask for help. False positives can be 
suppressed using IGNORE_WARNINGS_BEGIN() and IGNORE_WARNINGS_END() or 
one of the similar macros from Compiler.h.

I believe the --no-fatal-warnings flag is not currently hooked up to 
anything on Apple ports. This would be good to improve.

Michael




More information about the webkit-dev mailing list