  -W                          This switch is deprecated; use -Wextra instead.  Same as -Wextra.
  -Wabsolute-value            Warn on suspicious calls of standard functions computing absolute values.
  -Waddress                   Warn about suspicious uses of memory addresses.
  -Waddress-of-packed-member  Warn when the address of packed member of struct or union is taken.
  -Waggregate-return          Warn about returning structures, unions or arrays.
  -Waggressive-loop-optimizations Warn if a loop with constant number of iterations triggers undefined behavior.
  -Wall                       Enable most warning messages.
  -Walloc-zero                Warn for calls to allocation functions that specify zero bytes.
  -Walloca                    Warn on any use of alloca.
  -Wanalyzer-double-fclose    Warn about code paths in which a stdio FILE can be closed more than once.
  -Wanalyzer-double-free      Warn about code paths in which a pointer can be freed more than once.
  -Wanalyzer-exposure-through-output-file Warn about code paths in which sensitive data is written to a file.
  -Wanalyzer-file-leak        Warn about code paths in which a stdio FILE is not closed.
  -Wanalyzer-free-of-non-heap Warn about code paths in which a non-heap pointer is freed.
  -Wanalyzer-malloc-leak      Warn about code paths in which a heap-allocated pointer leaks.
  -Wanalyzer-null-argument    Warn about code paths in which NULL is passed to a must-not-be-NULL function argument.
  -Wanalyzer-null-dereference Warn about code paths in which a NULL pointer is dereferenced.
  -Wanalyzer-possible-null-argument Warn about code paths in which a possibly-NULL value is passed to a must-not-be-NULL function argument.
  -Wanalyzer-possible-null-dereference Warn about code paths in which a possibly-NULL pointer is dereferenced.
  -Wanalyzer-stale-setjmp-buffer Warn about code paths in which a longjmp rewinds to a jmp_buf saved in a stack frame that has returned.
  -Wanalyzer-tainted-array-index Warn about code paths in which an unsanitized value is used as an array index.
  -Wanalyzer-too-complex      Warn if the code is too complicated for the analyzer to fully explore.
  -Wanalyzer-unsafe-call-within-signal-handler Warn about code paths in which an async-signal-unsafe function is called from a signal handler.
  -Wanalyzer-use-after-free   Warn about code paths in which a freed value is used.
  -Wanalyzer-use-of-pointer-in-stale-stack-frame Warn about code paths in which a pointer to a stale stack frame is used.
  -Warith-conversion          Warn if conversion of the result of arithmetic might change the value even though converting the operands cannot.
  -Warray-bounds              Warn if an array is accessed out of bounds.
  -Wattribute-alias           Warn about type safety and similar errors and mismatches in declarations with alias attributes.
  -Wattribute-warning         Warn about uses of __attribute__((warning)) declarations.
  -Wattributes                Warn about inappropriate attribute usage.
  -Wbad-function-cast         Warn about casting functions to incompatible types.
  -Wbool-compare              Warn about boolean expression compared with an integer value different from true/false.
  -Wbool-operation            Warn about certain operations on boolean expressions.
  -Wbuiltin-declaration-mismatch Warn when a built-in function is declared with the wrong signature.
  -Wbuiltin-macro-redefined   Warn when a built-in preprocessor macro is undefined or redefined.
  -Wc++-compat                Warn about C constructs that are not in the common subset of C and C++.
  -Wc11-c2x-compat            Warn about features not present in ISO C11, but present in ISO C2X.
  -Wcannot-profile            Warn when profiling instrumentation was requested, but could not be applied to a certain function.
  -Wcast-align                Warn about pointer casts which increase alignment.
  -Wcast-align=strict         Warn about pointer casts which increase alignment.
  -Wcast-function-type        Warn about casts between incompatible function types.
  -Wcast-qual                 Warn about casts which discard qualifiers.
  -Wchar-subscripts           Warn about subscripts whose type is "char".
  -Wclobbered                 Warn about variables that might be changed by "longjmp" or "vfork".
  -Wcomment                   Warn about possibly nested block comments, and C++ comments spanning more than one physical line.
  -Wcomments                  Synonym for -Wcomment.  Same as -Wcomment.
  -Wconversion                Warn for implicit type conversions that may change a value.
  -Wcoverage-mismatch         Warn in case profiles in -fprofile-use do not match.
  -Wcpp                       Warn when a #warning directive is encountered.
  -Wdangling-else             Warn about dangling else.
  -Wdate-time                 Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage.
  -Wdeclaration-after-statement Warn when a declaration is found after a statement.
  -Wdeprecated                Warn if a deprecated compiler feature, class, method, or field is used.
  -Wdeprecated-declarations   Warn about uses of __attribute__((deprecated)) declarations.
  -Wdesignated-init           Warn about positional initialization of structs requiring designated initializers.
  -Wdisabled-optimization     Warn when an optimization pass is disabled.
  -Wdiscarded-array-qualifiers Warn if qualifiers on arrays which are pointer targets are discarded.
  -Wdiscarded-qualifiers      Warn if type qualifiers on pointers are discarded.
  -Wdiv-by-zero               Warn about compile-time integer division by zero.
  -Wdouble-promotion          Warn about implicit conversions from "float" to "double".
  -Wduplicate-decl-specifier  Warn when a declaration has duplicate const, volatile, restrict or _Atomic specifier.
  -Wduplicated-branches       Warn about duplicated branches in if-else statements.
  -Wduplicated-cond           Warn about duplicated conditions in an if-else-if chain.
  -Wempty-body                Warn about an empty body in an if or else statement.
  -Wendif-labels              Warn about stray tokens after #else and #endif.
  -Wenum-compare              Warn about comparison of different enum types.
  -Wenum-conversion           Warn about implicit conversion of enum types.
  -Werror-implicit-function-declaration This switch is deprecated; use -Werror=implicit-function-declaration instead.  Same as -Werror=.
  -Wexpansion-to-defined      Warn if "defined" is used outside #if.
  -Wextra                     Print extra (possibly unwanted) warnings.
  -Wfloat-conversion          Warn for implicit type conversions that cause loss of floating point precision.
  -Wfloat-equal               Warn if testing floating point numbers for equality.
  -Wformat                    Warn about printf/scanf/strftime/strfmon format string anomalies.  Same as -Wformat=.
  -Wformat-contains-nul       Warn about format strings that contain NUL bytes.
  -Wformat-diag               Warn about GCC format strings with strings unsuitable for diagnostics.
  -Wformat-extra-args         Warn if passing too many arguments to a function for its format string.
  -Wformat-nonliteral         Warn about format strings that are not literals.
  -Wformat-overflow           Warn about function calls with format strings that write past the end of the destination region.  Same as -Wformat-overflow=1 or =.
  -Wformat-security           Warn about possible security problems with format functions.
  -Wformat-signedness         Warn about sign differences with format functions.
  -Wformat-truncation         Warn about calls to snprintf and similar functions that truncate output. Same as -Wformat-truncation=1.  Same as -Wformat-truncation=.
  -Wformat-y2k                Warn about strftime formats yielding 2-digit years.
  -Wformat-zero-length        Warn about zero-length formats.
  -Wframe-address             Warn when __builtin_frame_address or __builtin_return_address is used unsafely.
  -Wfree-nonheap-object       Warn when attempting to free a non-heap object.
  -Whsa                       Warn when a function cannot be expanded to HSAIL.
  -Wif-not-aligned            Warn when the field in a struct is not aligned.
  -Wignored-attributes        Warn whenever attributes are ignored.
  -Wignored-qualifiers        Warn whenever type qualifiers are ignored.
  -Wimplicit                  Warn about implicit declarations.
  -Wimplicit-fallthrough      Same as -Wimplicit-fallthrough=3 (or, in negated form, -Wimplicit-fallthrough=0).
  -Wimplicit-function-declaration Warn about implicit function declarations.
  -Wimplicit-int              Warn when a declaration does not specify a type.
  -Wincompatible-pointer-types Warn when there is a conversion between pointers that have incompatible types.
  -Winit-self                 Warn about variables which are initialized to themselves.
  -Winline                    Warn when an inlined function cannot be inlined.
  -Wint-conversion            Warn about incompatible integer to pointer and pointer to integer conversions.
  -Wint-in-bool-context       Warn for suspicious integer expressions in boolean context.
  -Wint-to-pointer-cast       Warn when there is a cast to a pointer from an integer of a different size.
  -Winvalid-memory-model      Warn when an atomic memory model parameter is known to be outside the valid range.
  -Winvalid-pch               Warn about PCH files that are found but not used.
  -Wjump-misses-init          Warn when a jump misses a variable initialization.
  -Wlogical-not-parentheses   Warn when logical not is used on the left hand side operand of a comparison.
  -Wlogical-op                Warn when a logical operator is suspiciously always evaluating to true or false.
  -Wlong-long                 Do not warn about using "long long" when -pedantic.
  -Wlto-type-mismatch         During link time optimization warn about mismatched types of global declarations.
  -Wmain                      Warn about suspicious declarations of "main".
  -Wmaybe-uninitialized       Warn about maybe uninitialized automatic variables.
  -Wmemset-elt-size           Warn about suspicious calls to memset where the third argument contains the number of elements not multiplied by the element size.
  -Wmemset-transposed-args    Warn about suspicious calls to memset where the third argument is constant literal zero and the second is not.
  -Wmisleading-indentation    Warn when the indentation of the code does not reflect the block structure.
  -Wmissing-attributes        Warn about declarations of entities that may be missing attributes that related entities have been declared with.
  -Wmissing-braces            Warn about possibly missing braces around initializers.
  -Wmissing-declarations      Warn about global functions without previous declarations.
  -Wmissing-field-initializers Warn about missing fields in struct initializers.
  -Wmissing-format-attribute  Same as -Wsuggest-attribute=format.
  -Wmissing-include-dirs      Warn about user-specified include directories that do not exist.
  -Wmissing-noreturn          Same as -Wsuggest-attribute=noreturn.
  -Wmissing-parameter-type    Warn about function parameters declared without a type specifier in K&R-style functions.
  -Wmissing-profile           Warn in case profiles in -fprofile-use do not exist.
  -Wmissing-prototypes        Warn about global functions without prototypes.
  -Wmultichar                 Warn about use of multi-character character constants.
  -Wmultistatement-macros     Warn about unsafe macros expanding to multiple statements used as a body of a clause such as if, else, while, switch, or for.
  -Wnarrowing                 Warn about narrowing conversions within { } that are ill-formed in C++11.
  -Wnested-externs            Warn about "extern" declarations not at file scope.
  -Wnonnull                   Warn about NULL being passed to argument slots marked as requiring non-NULL.
  -Wnonnull-compare           Warn if comparing pointer parameter with nonnull attribute with NULL.
  -Wnormalized                Same as -Wnormalized=nfc (or, in negated form, -Wnormalized=none).
  -Wnull-dereference          Warn if dereferencing a NULL pointer may lead to erroneous or undefined behavior.
  -Wodr                       Warn about some C++ One Definition Rule violations during link time optimization.
  -Wold-style-declaration     Warn for obsolescent usage in a declaration.
  -Wold-style-definition      Warn if an old-style parameter definition is used.
  -Wopenmp-simd               Warn if a simd directive is overridden by the vectorizer cost model.
  -Woverflow                  Warn about overflow in arithmetic expressions.
  -Woverlength-strings        Warn if a string is longer than the maximum portable length specified by the standard.
  -Woverride-init             Warn about overriding initializers without side effects.
  -Woverride-init-side-effects Warn about overriding initializers with side effects.
  -Wpacked                    Warn when the packed attribute has no effect on struct layout.
  -Wpacked-bitfield-compat    Warn about packed bit-fields whose offset changed in GCC 4.4.
  -Wpacked-not-aligned        Warn when fields in a struct with the packed attribute are misaligned.
  -Wpadded                    Warn when padding is required to align structure members.
  -Wparentheses               Warn about possibly missing parentheses.
  -Wpedantic                  Issue warnings needed for strict compliance to the standard.
  -Wpointer-arith             Warn about function pointer arithmetic.
  -Wpointer-compare           Warn when a pointer is compared with a zero character constant.
  -Wpointer-sign              Warn when a pointer differs in signedness in an assignment.
  -Wpointer-to-int-cast       Warn when a pointer is cast to an integer of a different size.
  -Wpragmas                   Warn about misuses of pragmas.
  -Wprio-ctor-dtor            Warn if constructor or destructors with priorities from 0 to 100 are used.
  -Wpsabi                     This option lacks documentation.
  -Wredundant-decls           Warn about multiple declarations of the same object.
  -Wrestrict                  Warn when an argument passed to a restrict-qualified parameter aliases with another argument.
  -Wreturn-local-addr         Warn about returning a pointer/reference to a local or temporary variable.
  -Wreturn-type               Warn whenever a function's return type defaults to "int" (C), or about inconsistent return types (C++).
  -Wscalar-storage-order      Warn on suspicious constructs involving reverse scalar storage order.
  -Wsequence-point            Warn about possible violations of sequence point rules.
  -Wshadow                    Warn when one variable shadows another.  Same as -Wshadow=global.
  -Wshadow-compatible-local   Same as -Wshadow=compatible-local.
  -Wshadow-local              Same as -Wshadow=local.
  -Wshadow=compatible-local   Warn when one local variable shadows another local variable or parameter of compatible type.
  -Wshadow=global             Warn when one variable shadows another (globally).  Same as -Wshadow.
  -Wshadow=local              Warn when one local variable shadows another local variable or parameter.
  -Wshift-count-negative      Warn if shift count is negative.
  -Wshift-count-overflow      Warn if shift count >= width of type.
  -Wshift-negative-value      Warn if left shifting a negative value.
  -Wshift-overflow            Warn if left shift of a signed value overflows.  Same as -Wshift-overflow=.
  -Wsign-compare              Warn about signed-unsigned comparisons.
  -Wsign-conversion           Warn for implicit type conversions between signed and unsigned integers.
  -Wsizeof-array-argument     Warn when sizeof is applied on a parameter declared as an array.
  -Wsizeof-pointer-div        Warn about suspicious divisions of two sizeof expressions that don't work correctly with pointers.
  -Wsizeof-pointer-memaccess  Warn about suspicious length parameters to certain string functions if the argument uses sizeof.
  -Wstack-protector           Warn when not issuing stack smashing protection for some reason.
  -Wstrict-aliasing           Warn about code which might break strict aliasing rules.
  -Wstrict-overflow=0         Warn about optimizations that assume that signed overflow is undefined.
  -Wstrict-prototypes         Warn about unprototyped function declarations.
  -Wstring-compare            Warn about calls to strcmp and strncmp used in equality expressions that are necessarily true or false due to the length of one and size of the other argument.
  -Wstringop-overflow         Warn about buffer overflow in string manipulation functions like memcpy and strcpy.  Same as -Wstringop-overflow=.
  -Wstringop-truncation       Warn about truncation in string manipulation functions like strncat and strncpy.
  -Wsuggest-attribute=cold    Warn about functions which might be candidates for __attribute__((cold)).
  -Wsuggest-attribute=const   Warn about functions which might be candidates for __attribute__((const)).
  -Wsuggest-attribute=format  Warn about functions which might be candidates for format attributes.
  -Wsuggest-attribute=malloc  Warn about functions which might be candidates for __attribute__((malloc)).
  -Wsuggest-attribute=noreturn Warn about functions which might be candidates for __attribute__((noreturn)).
  -Wsuggest-final-methods     Warn about C++ virtual methods where adding final keyword would improve code quality.
  -Wsuggest-final-types       Warn about C++ polymorphic types where adding final keyword would improve code quality.
  -Wswitch                    Warn about enumerated switches, with no default, missing a case.
  -Wswitch-bool               Warn about switches with boolean controlling expression.
  -Wswitch-default            Warn about enumerated switches missing a "default:" statement.
  -Wswitch-enum               Warn about all enumerated switches missing a specific case.
  -Wswitch-outside-range      Warn about switch values that are outside of the switch's type range.
  -Wswitch-unreachable        Warn about statements between switch's controlling expression and the first case.
  -Wsync-nand                 Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions are used.
  -Wtautological-compare      Warn if a comparison always evaluates to true or false.
  -Wtrampolines               Warn whenever a trampoline is generated.
  -Wtrigraphs                 Warn if trigraphs are encountered that might affect the meaning of the program.
  -Wtype-limits               Warn if a comparison is always true or always false due to the limited range of the data type.
  -Wundef                     Warn if an undefined macro is used in an #if directive.
  -Wuninitialized             Warn about uninitialized automatic variables.
  -Wunknown-pragmas           Warn about unrecognized pragmas.
  -Wunreachable-code          Does nothing. Preserved for backward compatibility.
  -Wunsafe-loop-optimizations Does nothing. Preserved for backward compatibility.
  -Wunsuffixed-float-constants Warn about unsuffixed float constants.
  -Wunused                    Enable all -Wunused- warnings.
  -Wunused-but-set-parameter  Warn when a function parameter is only set, otherwise unused.
  -Wunused-but-set-variable   Warn when a variable is only set, otherwise unused.
  -Wunused-const-variable     Warn when a const variable is unused.  Same as -Wunused-const-variable=.
  -Wunused-function           Warn when a function is unused.
  -Wunused-label              Warn when a label is unused.
  -Wunused-local-typedefs     Warn when typedefs locally defined in a function are not used.
  -Wunused-macros             Warn about macros defined in the main file that are not used.
  -Wunused-parameter          Warn when a function parameter is unused.
  -Wunused-result             Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value.
  -Wunused-value              Warn when an expression value is unused.
  -Wunused-variable           Warn when a variable is unused.
  -Wvarargs                   Warn about questionable usage of the macros used to retrieve variable arguments.
  -Wvariadic-macros           Warn about using variadic macros.
  -Wvector-operation-performance Warn when a vector operation is compiled outside the SIMD.
  -Wvla                       Warn if a variable length array is used.
  -Wvolatile-register-var     Warn when a register variable is declared volatile.
  -Wwrite-strings             In C++, nonzero means warn about deprecated conversion from string literals to 'char *'.  In C, similar warning, except that the conversion is of course not deprecated by the ISO C standard.
  -Wzero-length-bounds        Warn about accesses to interior zero-length array members.
