1.1 --- a/common/autoconf/toolchain.m4 Mon Jul 25 15:06:07 2016 -0700 1.2 +++ b/common/autoconf/toolchain.m4 Mon Jul 11 05:02:28 2016 +0100 1.3 @@ -23,9 +23,59 @@ 1.4 # questions. 1.5 # 1.6 1.7 +# Prepare the system so that TOOLCHAIN_CHECK_COMPILER_VERSION can be called. 1.8 +# Must have CC_VERSION_NUMBER and CXX_VERSION_NUMBER. 1.9 +AC_DEFUN([TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS], 1.10 +[ 1.11 + if test "x$CC_VERSION" != "x$CXX_VERSION"; then 1.12 + AC_MSG_WARN([C and C++ compiler has different version numbers, $CC_VERSION vs $CXX_VERSION.]) 1.13 + AC_MSG_WARN([This typically indicates a broken setup, and is not supported]) 1.14 + fi 1.15 + 1.16 + # We only check CC_VERSION since we assume CXX_VERSION is equal. 1.17 + if [ [[ "$CC_VERSION" =~ (.*\.){3} ]] ]; then 1.18 + AC_MSG_WARN([C compiler version number has more than three parts (X.Y.Z): $CC_VERSION. Comparisons might be wrong.]) 1.19 + fi 1.20 + 1.21 + if [ [[ "$CC_VERSION" =~ [0-9]{6} ]] ]; then 1.22 + AC_MSG_WARN([C compiler version number has a part larger than 99999: $CC_VERSION. Comparisons might be wrong.]) 1.23 + fi 1.24 + 1.25 + COMPARABLE_ACTUAL_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$CC_VERSION"` 1.26 +]) 1.27 + 1.28 +# Check if the configured compiler (C and C++) is of a specific version or 1.29 +# newer. TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS must have been called before. 1.30 +# 1.31 +# Arguments: 1.32 +# $1: The version string to check against the found version 1.33 +# $2: block to run if the compiler is at least this version (>=) 1.34 +# $3: block to run if the compiler is older than this version (<) 1.35 +AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], 1.36 +[ 1.37 + REFERENCE_VERSION=$1 1.38 + 1.39 + if [ [[ "$REFERENCE_VERSION" =~ (.*\.){3} ]] ]; then 1.40 + AC_MSG_ERROR([Internal error: Cannot compare to $REFERENCE_VERSION, only three parts (X.Y.Z) is supported]) 1.41 + fi 1.42 + 1.43 + if [ [[ "$REFERENCE_VERSION" =~ [0-9]{6} ]] ]; then 1.44 + AC_MSG_ERROR([Internal error: Cannot compare to $REFERENCE_VERSION, only parts < 99999 is supported]) 1.45 + fi 1.46 + 1.47 + # Version comparison method inspired by http://stackoverflow.com/a/24067243 1.48 + COMPARABLE_REFERENCE_VERSION=`$AWK -F. '{ printf("%05d%05d%05d\n", [$]1, [$]2, [$]3) }' <<< "$REFERENCE_VERSION"` 1.49 + 1.50 + if test $COMPARABLE_ACTUAL_VERSION -ge $COMPARABLE_REFERENCE_VERSION ; then 1.51 + m4_ifval([$2], [$2], [:]) 1.52 + else 1.53 + m4_ifval([$3], [$3], [:]) 1.54 + fi 1.55 +]) 1.56 + 1.57 # $1 = compiler to test (CC or CXX) 1.58 # $2 = human readable name of compiler (C or C++) 1.59 -AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], 1.60 +AC_DEFUN([TOOLCHAIN_EXTRACT_COMPILER_VERSION], 1.61 [ 1.62 COMPILER=[$]$1 1.63 COMPILER_NAME=$2 1.64 @@ -81,7 +131,8 @@ 1.65 1.66 # First line typically looks something like: 1.67 # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 1.68 - COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/p"` 1.69 + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | \ 1.70 + $SED -e 's/^.* \(@<:@1-9@:>@\.@<:@0-9.@:>@*\)@<:@^0-9.@:>@.*$/\1/'` 1.71 COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) @<:@1-9@:>@@<:@0-9.@:>@*/\1/p"` 1.72 fi 1.73 # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) 1.74 @@ -181,7 +232,7 @@ 1.75 AC_MSG_RESULT([no, keeping $1]) 1.76 $1="$TEST_COMPILER" 1.77 fi 1.78 - TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME]) 1.79 + TOOLCHAIN_EXTRACT_COMPILER_VERSION([$1], [$COMPILER_NAME]) 1.80 ]) 1.81 1.82 1.83 @@ -385,6 +436,12 @@ 1.84 # Now that we have resolved CXX ourself, let autoconf have its go at it 1.85 AC_PROG_CXX([$CXX]) 1.86 1.87 + # This is the compiler version number on the form X.Y[.Z] 1.88 + AC_SUBST(CC_VERSION) 1.89 + AC_SUBST(CXX_VERSION) 1.90 + 1.91 + TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS 1.92 + 1.93 ### Locate other tools 1.94 1.95 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 1.96 @@ -507,7 +564,8 @@ 1.97 BASIC_FIXUP_EXECUTABLE(DUMPBIN) 1.98 1.99 COMPILER_TYPE=CL 1.100 - CCXXFLAGS="$CCXXFLAGS -nologo" 1.101 + # silence copyright notice and other headers. 1.102 + COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" 1.103 ]) 1.104 AC_SUBST(RC_FLAGS) 1.105 AC_SUBST(COMPILER_TYPE) 1.106 @@ -954,12 +1012,20 @@ 1.107 # 1.108 # Now setup the CFLAGS and LDFLAGS for the JDK build. 1.109 # Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build. 1.110 + # CFLAGS_JDK - C Compiler flags 1.111 + # CXXFLAGS_JDK - C++ Compiler flags 1.112 + # COMMON_CCXXFLAGS_JDK - common to C and C++ 1.113 # 1.114 case $COMPILER_NAME in 1.115 gcc ) 1.116 - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ 1.117 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses \ 1.118 -pipe \ 1.119 -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE" 1.120 + CXXSTD_CXXFLAG="-std=gnu++98" 1.121 + TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([$CXXSTD_CXXFLAG $CFLAGS_WARNINGS_ARE_ERRORS], 1.122 + [], [CXXSTD_CXXFLAG=""]) 1.123 + CXXFLAGS_JDK="${CXXFLAGS_JDK} ${CXXSTD_CXXFLAG}" 1.124 + AC_SUBST([CXXSTD_CXXFLAG]) 1.125 case $OPENJDK_TARGET_CPU_ARCH in 1.126 arm ) 1.127 # on arm we don't prevent gcc to omit frame pointer but do prevent strict aliasing 1.128 @@ -969,16 +1035,17 @@ 1.129 # on ppc we don't prevent gcc to omit frame pointer nor strict-aliasing 1.130 ;; 1.131 * ) 1.132 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -fno-omit-frame-pointer" 1.133 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -fno-omit-frame-pointer" 1.134 CFLAGS_JDK="${CFLAGS_JDK} -fno-strict-aliasing" 1.135 ;; 1.136 esac 1.137 + TOOLCHAIN_CHECK_COMPILER_VERSION(6, TOOLCHAIN_SETUP_GCC6_COMPILER_FLAGS) 1.138 ;; 1.139 ossc ) 1.140 - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" 1.141 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" 1.142 case $OPENJDK_TARGET_CPU_ARCH in 1.143 x86 ) 1.144 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" 1.145 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" 1.146 CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" 1.147 ;; 1.148 esac 1.149 @@ -997,16 +1064,16 @@ 1.150 LDFLAGS_CXX_JDK="$LDFLAGS_CXX_JDK" 1.151 ;; 1.152 cl ) 1.153 - CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ 1.154 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \ 1.155 -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \ 1.156 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ 1.157 -DWIN32 -DIAL" 1.158 case $OPENJDK_TARGET_CPU in 1.159 x86 ) 1.160 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86" 1.161 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_X86_ -Dx86" 1.162 ;; 1.163 x86_64 ) 1.164 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64" 1.165 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_AMD64_ -Damd64" 1.166 ;; 1.167 esac 1.168 ;; 1.169 @@ -1036,7 +1103,7 @@ 1.170 ;; 1.171 esac 1.172 1.173 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64" 1.174 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK $ADD_LP64" 1.175 1.176 # The package path is used only on macosx? 1.177 PACKAGE_PATH=/opt/local 1.178 @@ -1049,27 +1116,27 @@ 1.179 # Note: -Dmacro is the same as #define macro 1 1.180 # -Dmacro= is the same as #define macro 1.181 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1.182 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" 1.183 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN=" 1.184 else 1.185 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 1.186 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_LITTLE_ENDIAN" 1.187 fi 1.188 else 1.189 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN" 1.190 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -D_BIG_ENDIAN" 1.191 fi 1.192 if test "x$OPENJDK_TARGET_OS" = xlinux; then 1.193 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX" 1.194 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DLINUX" 1.195 fi 1.196 if test "x$OPENJDK_TARGET_OS" = xwindows; then 1.197 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS" 1.198 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DWINDOWS" 1.199 fi 1.200 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1.201 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS" 1.202 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DSOLARIS" 1.203 fi 1.204 if test "x$OPENJDK_TARGET_OS" = xaix; then 1.205 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DAIX -DPPC64" 1.206 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DAIX -DPPC64" 1.207 fi 1.208 if test "x$OPENJDK_TARGET_OS" = xmacosx; then 1.209 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" 1.210 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE -D_DARWIN_UNLIMITED_SELECT" 1.211 # Setting these parameters makes it an error to link to macosx APIs that are 1.212 # newer than the given OS version and makes the linked binaries compatible even 1.213 # if built on a newer version of the OS. 1.214 @@ -1079,25 +1146,25 @@ 1.215 # The macro takes the version with no dots, ex: 1070 1.216 # Let the flags variables get resolved in make for easier override on make 1.217 # command line. 1.218 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1.219 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DMAC_OS_X_VERSION_MAX_ALLOWED=\$(subst .,,\$(MACOSX_VERSION_MIN)) -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1.220 LDFLAGS_JDK="$LDFLAGS_JDK -mmacosx-version-min=\$(MACOSX_VERSION_MIN)" 1.221 fi 1.222 if test "x$OPENJDK_TARGET_OS" = xbsd; then 1.223 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" 1.224 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE" 1.225 fi 1.226 if test "x$DEBUG_LEVEL" = xrelease; then 1.227 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG" 1.228 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DNDEBUG" 1.229 if test "x$OPENJDK_TARGET_OS" = xsolaris; then 1.230 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DTRIMMED" 1.231 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DTRIMMED" 1.232 fi 1.233 else 1.234 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG" 1.235 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DDEBUG" 1.236 fi 1.237 1.238 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" 1.239 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" 1.240 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DARCH='\"$OPENJDK_TARGET_CPU_LEGACY\"' -D$OPENJDK_TARGET_CPU_LEGACY" 1.241 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK -DRELEASE='\"\$(RELEASE)\"'" 1.242 1.243 - CCXXFLAGS_JDK="$CCXXFLAGS_JDK \ 1.244 + COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS_JDK \ 1.245 -I${JDK_OUTPUTDIR}/include \ 1.246 -I${JDK_OUTPUTDIR}/include/$OPENJDK_TARGET_OS \ 1.247 -I${JDK_TOPDIR}/src/share/javavm/export \ 1.248 @@ -1106,12 +1173,12 @@ 1.249 -I${JDK_TOPDIR}/src/$OPENJDK_TARGET_OS_API_DIR/native/common" 1.250 1.251 # The shared libraries are compiled using the picflag. 1.252 - CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" 1.253 - CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " 1.254 + CFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA" 1.255 + CXXFLAGS_JDKLIB="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG $CXXFLAGS_JDKLIB_EXTRA " 1.256 1.257 # Executable flags 1.258 - CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK" 1.259 - CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK" 1.260 + CFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CFLAGS_JDK" 1.261 + CXXFLAGS_JDKEXE="$COMMON_CCXXFLAGS_JDK $CXXFLAGS_JDK" 1.262 1.263 # Now this is odd. The JDK native libraries have to link against libjvm.so 1.264 # On 32-bit machines there is normally two distinct libjvm.so:s, client and server. 1.265 @@ -1196,13 +1263,13 @@ 1.266 ]) 1.267 1.268 1.269 -# TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], 1.270 -# [RUN-IF-FALSE]) 1.271 +# TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], 1.272 +# [RUN-IF-FALSE]) 1.273 # ------------------------------------------------------------ 1.274 -# Check that the c and c++ compilers support an argument 1.275 -AC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS], 1.276 +# Check that the C compiler supports an argument 1.277 +AC_DEFUN([TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS], 1.278 [ 1.279 - AC_MSG_CHECKING([if compiler supports "$1"]) 1.280 + AC_MSG_CHECKING([if the C compiler supports "$1"]) 1.281 supports=yes 1.282 1.283 saved_cflags="$CFLAGS" 1.284 @@ -1213,6 +1280,23 @@ 1.285 AC_LANG_POP([C]) 1.286 CFLAGS="$saved_cflags" 1.287 1.288 + AC_MSG_RESULT([$supports]) 1.289 + if test "x$supports" = "xyes" ; then 1.290 + m4_ifval([$2], [$2], [:]) 1.291 + else 1.292 + m4_ifval([$3], [$3], [:]) 1.293 + fi 1.294 +]) 1.295 + 1.296 +# TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], 1.297 +# [RUN-IF-FALSE]) 1.298 +# ------------------------------------------------------------ 1.299 +# Check that the C++ compiler supports an argument 1.300 +AC_DEFUN([TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS], 1.301 +[ 1.302 + AC_MSG_CHECKING([if the C++ compiler supports "$1"]) 1.303 + supports=yes 1.304 + 1.305 saved_cxxflags="$CXXFLAGS" 1.306 CXXFLAGS="$CXXFLAG $1" 1.307 AC_LANG_PUSH([C++]) 1.308 @@ -1220,7 +1304,32 @@ 1.309 [supports=no]) 1.310 AC_LANG_POP([C++]) 1.311 CXXFLAGS="$saved_cxxflags" 1.312 + 1.313 + AC_MSG_RESULT([$supports]) 1.314 + if test "x$supports" = "xyes" ; then 1.315 + m4_ifval([$2], [$2], [:]) 1.316 + else 1.317 + m4_ifval([$3], [$3], [:]) 1.318 + fi 1.319 +]) 1.320 1.321 +# TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([ARGUMENT], [RUN-IF-TRUE], 1.322 +# [RUN-IF-FALSE]) 1.323 +# ------------------------------------------------------------ 1.324 +# Check that the C and C++ compilers support an argument 1.325 +AC_DEFUN([TOOLCHAIN_COMPILER_CHECK_ARGUMENTS], 1.326 +[ 1.327 + TOOLCHAIN_C_COMPILER_CHECK_ARGUMENTS([$1], 1.328 + [C_COMP_SUPPORTS="yes"], 1.329 + [C_COMP_SUPPORTS="no"]) 1.330 + TOOLCHAIN_CXX_COMPILER_CHECK_ARGUMENTS([$1], 1.331 + [CXX_COMP_SUPPORTS="yes"], 1.332 + [CXX_COMP_SUPPORTS="no"]) 1.333 + 1.334 + AC_MSG_CHECKING([if both compilers support "$1"]) 1.335 + supports=no 1.336 + if test "x$C_COMP_SUPPORTS" = "xyes" -a "x$CXX_COMP_SUPPORTS" = "xyes"; then supports=yes; fi 1.337 + 1.338 AC_MSG_RESULT([$supports]) 1.339 if test "x$supports" = "xyes" ; then 1.340 m4_ifval([$2], [$2], [:]) 1.341 @@ -1311,3 +1420,20 @@ 1.342 AC_SUBST(JT_HOME) 1.343 AC_SUBST(JTREGEXE) 1.344 ]) 1.345 + 1.346 +AC_DEFUN_ONCE([TOOLCHAIN_SETUP_GCC6_COMPILER_FLAGS], 1.347 +[ 1.348 + # These flags are required for GCC 6 builds as undefined behaviour in OpenJDK code 1.349 + # runs afoul of the more aggressive versions of these optimisations. 1.350 + # Notably, value range propagation now assumes that the this pointer of C++ 1.351 + # member functions is non-null. 1.352 + NO_DELETE_NULL_POINTER_CHECKS_CFLAG="-fno-delete-null-pointer-checks" 1.353 + TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$NO_DELETE_NULL_POINTER_CHECKS_CFLAG -Werror], 1.354 + [], [NO_DELETE_NULL_POINTER_CHECKS_CFLAG=""]) 1.355 + AC_SUBST([NO_DELETE_NULL_POINTER_CHECKS_CFLAG]) 1.356 + NO_LIFETIME_DSE_CFLAG="-fno-lifetime-dse" 1.357 + TOOLCHAIN_COMPILER_CHECK_ARGUMENTS([$NO_LIFETIME_DSE_CFLAG -Werror], 1.358 + [], [NO_LIFETIME_DSE_CFLAG=""]) 1.359 + CFLAGS_JDK="${CFLAGS_JDK} ${NO_DELETE_NULL_POINTER_CHECKS_CFLAG} ${NO_LIFETIME_DSE_CFLAG}" 1.360 + AC_SUBST([NO_LIFETIME_DSE_CFLAG]) 1.361 +])