[ovs-dev] [PATCH] configure: Disable strict aliasing.

Jarno Rajahalme jrajahalme at nicira.com
Wed Oct 1 01:00:03 UTC 2014


I buy that,

Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>

> On Sep 30, 2014, at 5:03 PM, Ben Pfaff <blp at nicira.com> wrote:
> 
> The C standard allows compilers to do type-based alias analysis, which
> means that the compiler is allowed to assume that pointers to objects of
> different types are pointers to different objects.  For example, a compiler
> may assume that "uint16_t *a" and "uint32_t *b" point to different and
> nonoverlapping locations because the pointed-to types are different.  This
> can lead to surprising "optimizations" with compilers that by default do
> this kind of analysis, which includes GCC and Clang.
> 
> The one escape clause that the C standard gives us is that character types
> must be assumed to alias any other object.  We've always tried to use this
> escape clause to avoid problems with type-based alias analysis in the past.
> I think that we should continue to try to do this in the future.  It's hard
> to tell what compiler we might want to use in the future, and one never
> knows what kind of control that compiler allows over alias analysis.
> 
> However, recently I helped another developer debug a nasty and confusing
> issue, which turned out to be the result of a surprising compiler
> optimization due to alias analysis.  I've seen enough of these that I don't
> think it's worthwhile to risk more problems than we have to.  Thus, this
> commit turns off type-based alias analysis in GCC and Clang.
> 
> Linus Torvalds thinks that type-base alias analysis is not sane, at least
> as GCC implements it: https://lkml.org/lkml/2003/2/26/158
> 
> The GCC manual says that -Wstrict-aliasing is only effective without
> -fno-strict-aliasing, otherwise I'd keep -Wstrict-aliasing also.
> 
> Indications are that MSVC doesn't do type-based alias analysis by default.
> 
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
> configure.ac |    2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 35e884a..62224b9 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -104,7 +104,6 @@ OVS_ENABLE_OPTION([-Wformat-security])
> OVS_ENABLE_OPTION([-Wno-format-zero-length])
> OVS_ENABLE_OPTION([-Wswitch-enum])
> OVS_ENABLE_OPTION([-Wunused-parameter])
> -OVS_ENABLE_OPTION([-Wstrict-aliasing])
> OVS_ENABLE_OPTION([-Wbad-function-cast])
> OVS_ENABLE_OPTION([-Wcast-align])
> OVS_ENABLE_OPTION([-Wstrict-prototypes])
> @@ -112,6 +111,7 @@ OVS_ENABLE_OPTION([-Wold-style-definition])
> OVS_ENABLE_OPTION([-Wmissing-prototypes])
> OVS_ENABLE_OPTION([-Wmissing-field-initializers])
> OVS_ENABLE_OPTION([-Wthread-safety])
> +OVS_ENABLE_OPTION([-fno-strict-aliasing])
> OVS_CONDITIONAL_CC_OPTION([-Wno-unused], [HAVE_WNO_UNUSED])
> OVS_CONDITIONAL_CC_OPTION([-Wno-unused-parameter], [HAVE_WNO_UNUSED_PARAMETER])
> OVS_ENABLE_WERROR
> -- 
> 1.7.10.4
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list