The answer is to use the -Wno-error=<name>
build flag, as described by gcc here (note that clang's options are modeled after gcc):
-Werror=
Make the specified warning into an error. The specifier for a warning is appended; for example -Werror=switch
turns the warnings controlled by -Wswitch
into errors. This switch takes a negative form, to be used to negate -Werror
for specific warnings; for example -Wno-error=switch
makes -Wswitch
warnings not be errors, even when -Werror
is in effect.
The warning message for each controllable warning includes the option that controls the warning. That option can then be used with -Werror=
and -Wno-error=
as described above.
Source: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html (emphasis added).
So, for this case, add the build option -Wno-error=undefined-reinterpret-cast
to turn OFF the -Werror=undefined-reinterpret-cast
flag.
In Bazel, you can pass C/C++ build options with the --copt="<flag>"
option (see here) (see also the --per_file_copt
option (see here and here)), making the final command look like this for this case:
time bazel build --copt="-Wno-error=undefined-reinterpret-cast" //my/src/...
This works! The Bazel build now runs to completion, showing these problems only as warnings again (notice -Werror
is missing from the warning statement now):
...has undefined behavior [-Wundefined-reinterpret-cast]
Note that if you need to pass multiple build flags in at once, use multiple calls to --copt=
. Ex:
time bazel build --copt="-Wno-error=undefined-reinterpret-cast" \
--copt="-Wno-error=switch" --copt="-ggdb" --copt="-O0" //my/src/...
Note: don't ever do this on production code for potentially-serious warnings like this (ex: undefined behavior). For more benign warnings, this is the right technique if you really need to disable one. For undefined behavior, this should just be for learning. See my comment below this answer.
More reading:
- I've documented a lot of the above information, and more, in my eRCaGuy_hello_world repo under the section titled "Additional C and C++ build notes (ex: w/
gcc
or clang
compilers)", here. Read there to learn more.
- [I STILL NEED TO TRY AND TEST THIS OUT] https://nelkinda.com/blog/suppress-warnings-in-gcc-and-clang/ - see esp. Section "3.3 Suppressing Warnings by Controlling the Diagnostic Stack". Learn to enable/disable GCC and Clang compiler warnings and options just for certain files or sections of code. Consider putting the necessary
#pragma
statements above and below header file #include
statements to affect just those files.