bpo-30104: Use -fno-strict-aliasing on clang (#1221)
authorVictor Stinner <victor.stinner@gmail.com>
Fri, 21 Apr 2017 09:24:34 +0000 (11:24 +0200)
committerGitHub <noreply@github.com>
Fri, 21 Apr 2017 09:24:34 +0000 (11:24 +0200)
Python/dtoa.c is not compiled correctly with clang 4.0 and
optimization level -O2 or higher, because of an aliasing issue on
the double/ULong[2] union.

LLVM bug report:
https://bugs.llvm.org//show_bug.cgi?id=31928

configure
configure.ac

index b4dc5f132884f560a7becb0737add9216bc21ade..40e64adc8a886d61e5c8a433e78a9115536a614b 100755 (executable)
--- a/configure
+++ b/configure
@@ -6814,8 +6814,15 @@ then
 
         # Clang also needs -fwrapv
         case $CC in
-            *clang*) WRAP="-fwrapv"
-            ;;
+            *clang*)
+                WRAP="-fwrapv"
+                # bpo-30104: Python/dtoa.c requires to be build with
+                # -fno-strict-aliasing to fix compiler issue on the
+                # double/ULong[2] union using clang 4.0 and optimization level
+                # -O2 or higher
+                # https://bugs.llvm.org//show_bug.cgi?id=31928
+                ALIASING="-fno-strict-aliasing"
+                ;;
         esac
 
        case $ac_cv_prog_cc_g in
@@ -6824,18 +6831,21 @@ then
                # Optimization messes up debuggers, so turn it off for
                # debug builds.
                 if "$CC" -v --help 2>/dev/null |grep -- -Og > /dev/null; then
-                    OPT="-g -Og -Wall $STRICT_PROTO"
+                    OPT="-g -Og -Wall"
                 else
-                    OPT="-g -O0 -Wall $STRICT_PROTO"
+                    OPT="-g -O0 -Wall"
                 fi
            else
-               OPT="-g $WRAP -O3 -Wall $STRICT_PROTO"
+               OPT="-g $WRAP -O3 -Wall"
            fi
            ;;
        *)
-           OPT="-O3 -Wall $STRICT_PROTO"
+           OPT="-O3 -Wall"
            ;;
        esac
+
+       OPT="$OPT $STRICT_PROTO $ALIASING"
+
        case $ac_sys_system in
            SCO_SV*) OPT="$OPT -m486 -DSCO5"
            ;;
index d7316b9fe85c3f4a916b184bd2c5c19d58f9b6a2..cb79ea891f4fc486913f9cba0c270ede5b584d66 100644 (file)
@@ -1454,8 +1454,15 @@ then
 
         # Clang also needs -fwrapv
         case $CC in
-            *clang*) WRAP="-fwrapv"
-            ;;
+            *clang*)
+                WRAP="-fwrapv"
+                # bpo-30104: Python/dtoa.c requires to be build with
+                # -fno-strict-aliasing to fix compiler issue on the
+                # double/ULong[2] union using clang 4.0 and optimization level
+                # -O2 or higher
+                # https://bugs.llvm.org//show_bug.cgi?id=31928
+                ALIASING="-fno-strict-aliasing"
+                ;;
         esac
 
        case $ac_cv_prog_cc_g in
@@ -1464,18 +1471,21 @@ then
                # Optimization messes up debuggers, so turn it off for
                # debug builds.
                 if "$CC" -v --help 2>/dev/null |grep -- -Og > /dev/null; then
-                    OPT="-g -Og -Wall $STRICT_PROTO"
+                    OPT="-g -Og -Wall"
                 else
-                    OPT="-g -O0 -Wall $STRICT_PROTO"
+                    OPT="-g -O0 -Wall"
                 fi
            else
-               OPT="-g $WRAP -O3 -Wall $STRICT_PROTO"
+               OPT="-g $WRAP -O3 -Wall"
            fi
            ;;
        *)
-           OPT="-O3 -Wall $STRICT_PROTO"
+           OPT="-O3 -Wall"
            ;;
        esac
+
+       OPT="$OPT $STRICT_PROTO $ALIASING"
+
        case $ac_sys_system in
            SCO_SV*) OPT="$OPT -m486 -DSCO5"
            ;;