SCons: Disable Clang -Wordered-compare-function-pointers warning

It's raised for us on many comparators implemented to be able to store a struct
in `Set` or `Map` (who rely on `operator<` internally). In the cases I reviewed
we don't actually care about the ordering and we use the struct's function
pointers as that's the only distinctive data available.

(cherry picked from commit 802810c371)
This commit is contained in:
Rémi Verschelde 2021-07-15 16:57:47 +02:00
parent 955f2ba75e
commit 4c79dcc3e7
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -425,17 +425,21 @@ if selected_platform in platform_list:
else: # GCC, Clang else: # GCC, Clang
version = methods.get_compiler_version(env) or [-1, -1] version = methods.get_compiler_version(env) or [-1, -1]
gcc_common_warnings = [] common_warnings = []
if methods.using_gcc(env): if methods.using_gcc(env):
gcc_common_warnings += ["-Wno-misleading-indentation"] common_warnings += ["-Wno-misleading-indentation"]
if version[0] >= 7: if version[0] >= 7:
gcc_common_warnings += ["-Wshadow-local"] common_warnings += ["-Wshadow-local"]
elif methods.using_clang(env):
# We often implement `operator<` for structs of pointers as a requirement
# for putting them in `Set` or `Map`. We don't mind about unreliable ordering.
common_warnings += ["-Wno-ordered-compare-function-pointers"]
if env["warnings"] == "extra": if env["warnings"] == "extra":
# Note: enable -Wimplicit-fallthrough for Clang (already part of -Wextra for GCC) # Note: enable -Wimplicit-fallthrough for Clang (already part of -Wextra for GCC)
# once we switch to C++11 or later (necessary for our FALLTHROUGH macro). # once we switch to C++11 or later (necessary for our FALLTHROUGH macro).
env.Append(CCFLAGS=["-Wall", "-Wextra", "-Wwrite-strings", "-Wno-unused-parameter"] + gcc_common_warnings) env.Append(CCFLAGS=["-Wall", "-Wextra", "-Wwrite-strings", "-Wno-unused-parameter"] + common_warnings)
env.Append(CXXFLAGS=["-Wctor-dtor-privacy", "-Wnon-virtual-dtor"]) env.Append(CXXFLAGS=["-Wctor-dtor-privacy", "-Wnon-virtual-dtor"])
if methods.using_gcc(env): if methods.using_gcc(env):
env.Append( env.Append(
@ -451,9 +455,9 @@ if selected_platform in platform_list:
if version[0] >= 9: if version[0] >= 9:
env.Append(CCFLAGS=["-Wattribute-alias=2"]) env.Append(CCFLAGS=["-Wattribute-alias=2"])
elif env["warnings"] == "all": elif env["warnings"] == "all":
env.Append(CCFLAGS=["-Wall"] + gcc_common_warnings) env.Append(CCFLAGS=["-Wall"] + common_warnings)
elif env["warnings"] == "moderate": elif env["warnings"] == "moderate":
env.Append(CCFLAGS=["-Wall", "-Wno-unused"] + gcc_common_warnings) env.Append(CCFLAGS=["-Wall", "-Wno-unused"] + common_warnings)
else: # 'no' else: # 'no'
env.Append(CCFLAGS=["-w"]) env.Append(CCFLAGS=["-w"])