Index: libquadmath/configure =================================================================== --- libquadmath/configure (.../tags/gcc_4_8_4_release) (revision 220382) +++ libquadmath/configure (.../branches/gcc-4_8-branch) (revision 220382) @@ -613,7 +613,6 @@ LIBQUAD_USE_SYMVER_TRUE toolexeclibdir toolexecdir -multi_basedir MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE @@ -682,6 +681,7 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM +multi_basedir target_noncanonical target_os target_vendor @@ -736,6 +736,7 @@ ac_subst_files='' ac_user_opts=' enable_option_checking +enable_multilib enable_version_specific_runtime_libs enable_dependency_tracking with_bugurl @@ -746,7 +747,6 @@ with_gnu_ld enable_libtool_lock enable_maintainer_mode -enable_multilib enable_symvers enable_generated_files_in_srcdir ' @@ -1379,6 +1379,7 @@ --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-multilib build many library versions (default) --enable-version-specific-runtime-libs specify that runtime libraries should be installed in a compiler-specific directory @@ -1391,7 +1392,6 @@ --disable-libtool-lock avoid locking (might break parallel builds) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer - --enable-multilib build many library versions (default) --disable-symvers disable symbol versioning for libquadmath --enable-generated-files-in-srcdir put copies of generated files in source dir intended @@ -2370,6 +2370,44 @@ +# Default to --enable-multilib +# Check whether --enable-multilib was given. +if test "${enable_multilib+set}" = set; then : + enableval=$enable_multilib; case "$enableval" in + yes) multilib=yes ;; + no) multilib=no ;; + *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;; + esac +else + multilib=yes +fi + + +# We may get other options which we leave undocumented: +# --with-target-subdir, --with-multisrctop, --with-multisubdir +# See config-ml.in if you want the gory details. + +if test "$srcdir" = "."; then + if test "$with_target_subdir" != "."; then + multi_basedir="$srcdir/$with_multisrctop../.." + else + multi_basedir="$srcdir/$with_multisrctop.." + fi +else + multi_basedir="$srcdir/.." +fi + + +# Even if the default multilib is not a cross compilation, +# it may be that some of the other multilibs are. +if test $cross_compiling = no && test $multilib = yes \ + && test "x${with_multisubdir}" != x ; then + cross_compiling=maybe +fi + +ac_config_commands="$ac_config_commands default-1" + + target_alias=${target_alias-$host_alias} @@ -10527,7 +10565,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10530 "configure" +#line 10568 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10633,7 +10671,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10636 "configure" +#line 10674 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10918,44 +10956,7 @@ MAINT=$MAINTAINER_MODE_TRUE -# Default to --enable-multilib -# Check whether --enable-multilib was given. -if test "${enable_multilib+set}" = set; then : - enableval=$enable_multilib; case "$enableval" in - yes) multilib=yes ;; - no) multilib=no ;; - *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;; - esac -else - multilib=yes -fi - -# We may get other options which we leave undocumented: -# --with-target-subdir, --with-multisrctop, --with-multisubdir -# See config-ml.in if you want the gory details. - -if test "$srcdir" = "."; then - if test "$with_target_subdir" != "."; then - multi_basedir="$srcdir/$with_multisrctop../.." - else - multi_basedir="$srcdir/$with_multisrctop.." - fi -else - multi_basedir="$srcdir/.." -fi - - -# Even if the default multilib is not a cross compilation, -# it may be that some of the other multilibs are. -if test $cross_compiling = no && test $multilib = yes \ - && test "x${with_multisubdir}" != x ; then - cross_compiling=maybe -fi - -ac_config_commands="$ac_config_commands default-1" - - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -13644,6 +13645,20 @@ # # INIT-COMMANDS # + +srcdir="$srcdir" +host="$host" +target="$target" +with_multisubdir="$with_multisubdir" +with_multisrctop="$with_multisrctop" +with_target_subdir="$with_target_subdir" +ac_configure_args="${multilib_arg} ${ac_configure_args}" +multi_basedir="$multi_basedir" +CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} +CC="$CC" +CXX="$CXX" +GFORTRAN="$GFORTRAN" +GCJ="$GCJ" AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" @@ -13906,20 +13921,6 @@ -srcdir="$srcdir" -host="$host" -target="$target" -with_multisubdir="$with_multisubdir" -with_multisrctop="$with_multisrctop" -with_target_subdir="$with_target_subdir" -ac_configure_args="${multilib_arg} ${ac_configure_args}" -multi_basedir="$multi_basedir" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -CC="$CC" -CXX="$CXX" -GFORTRAN="$GFORTRAN" -GCJ="$GCJ" - _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 @@ -13929,9 +13930,9 @@ do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; @@ -14517,6 +14518,14 @@ case $ac_file$ac_mode in + "default-1":C) +# Only add multilib support code if we just rebuilt the top-level +# Makefile. +case " $CONFIG_FILES " in + *" Makefile "*) + ac_file=Makefile . ${multi_basedir}/config-ml.in + ;; +esac ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval @@ -15251,14 +15260,6 @@ chmod +x "$ofile" ;; - "default-1":C) -# Only add multilib support code if we just rebuilt the top-level -# Makefile. -case " $CONFIG_FILES " in - *" Makefile "*) - ac_file=Makefile . ${multi_basedir}/config-ml.in - ;; -esac ;; esac done # for ac_tag Index: libquadmath/ChangeLog =================================================================== --- libquadmath/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ libquadmath/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,8 @@ +2015-01-26 Matthias Klose + + * configure.ac: Move AM_ENABLE_MULTILIB before AC_PROG_CC. + * configure: Regenerate. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: libquadmath/configure.ac =================================================================== --- libquadmath/configure.ac (.../tags/gcc_4_8_4_release) (revision 220382) +++ libquadmath/configure.ac (.../branches/gcc-4_8-branch) (revision 220382) @@ -23,6 +23,8 @@ AC_CANONICAL_SYSTEM ACX_NONCANONICAL_TARGET +AM_ENABLE_MULTILIB(, ..) + target_alias=${target_alias-$host_alias} AC_SUBST(target_alias) @@ -60,7 +62,6 @@ AC_SUBST(enable_static) AM_MAINTAINER_MODE -AM_ENABLE_MULTILIB(, ..) AC_LANG_C # The same as in boehm-gc and libstdc++. Have to borrow it from there. Index: libsanitizer/configure =================================================================== --- libsanitizer/configure (.../tags/gcc_4_8_4_release) (revision 220382) +++ libsanitizer/configure (.../branches/gcc-4_8-branch) (revision 220382) @@ -662,7 +662,6 @@ MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE -multi_basedir am__untar am__tar AMTAR @@ -701,6 +700,7 @@ build_vendor build_cpu build +multi_basedir target_alias host_alias build_alias @@ -742,8 +742,8 @@ ac_subst_files='' ac_user_opts=' enable_option_checking +enable_multilib enable_version_specific_runtime_libs -enable_multilib enable_maintainer_mode enable_dependency_tracking enable_shared @@ -1388,8 +1388,8 @@ --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-multilib build many library versions (default) --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory - --enable-multilib build many library versions (default) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-dependency-tracking speeds up one-time build @@ -2417,6 +2417,44 @@ +# Default to --enable-multilib +# Check whether --enable-multilib was given. +if test "${enable_multilib+set}" = set; then : + enableval=$enable_multilib; case "$enableval" in + yes) multilib=yes ;; + no) multilib=no ;; + *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;; + esac +else + multilib=yes +fi + + +# We may get other options which we leave undocumented: +# --with-target-subdir, --with-multisrctop, --with-multisubdir +# See config-ml.in if you want the gory details. + +if test "$srcdir" = "."; then + if test "$with_target_subdir" != "."; then + multi_basedir="$srcdir/$with_multisrctop../.." + else + multi_basedir="$srcdir/$with_multisrctop.." + fi +else + multi_basedir="$srcdir/.." +fi + + +# Even if the default multilib is not a cross compilation, +# it may be that some of the other multilibs are. +if test $cross_compiling = no && test $multilib = yes \ + && test "x${with_multisubdir}" != x ; then + cross_compiling=maybe +fi + +ac_config_commands="$ac_config_commands default-1" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-version-specific-runtime-libs" >&5 $as_echo_n "checking for --enable-version-specific-runtime-libs... " >&6; } # Check whether --enable-version-specific-runtime-libs was given. @@ -3078,44 +3116,7 @@ -# Default to --enable-multilib -# Check whether --enable-multilib was given. -if test "${enable_multilib+set}" = set; then : - enableval=$enable_multilib; case "$enableval" in - yes) multilib=yes ;; - no) multilib=no ;; - *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;; - esac -else - multilib=yes -fi - -# We may get other options which we leave undocumented: -# --with-target-subdir, --with-multisrctop, --with-multisubdir -# See config-ml.in if you want the gory details. - -if test "$srcdir" = "."; then - if test "$with_target_subdir" != "."; then - multi_basedir="$srcdir/$with_multisrctop../.." - else - multi_basedir="$srcdir/$with_multisrctop.." - fi -else - multi_basedir="$srcdir/.." -fi - - -# Even if the default multilib is not a cross compilation, -# it may be that some of the other multilibs are. -if test $cross_compiling = no && test $multilib = yes \ - && test "x${with_multisubdir}" != x ; then - cross_compiling=maybe -fi - -ac_config_commands="$ac_config_commands default-1" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. @@ -11117,7 +11118,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11120 "configure" +#line 11121 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11223,7 +11224,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11226 "configure" +#line 11227 "configure" #include "confdefs.h" #if HAVE_DLFCN_H Index: libsanitizer/ChangeLog =================================================================== --- libsanitizer/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ libsanitizer/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,8 @@ +2015-01-27 Matthias Klose + + * configure.ac: Move AM_ENABLE_MULTILIB before AC_PROG_CC. + * configure: Regenerate. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: libsanitizer/configure.ac =================================================================== --- libsanitizer/configure.ac (.../tags/gcc_4_8_4_release) (revision 220382) +++ libsanitizer/configure.ac (.../branches/gcc-4_8-branch) (revision 220382) @@ -5,6 +5,8 @@ AC_INIT(package-unused, version-unused, libsanitizer) AC_CONFIG_SRCDIR([include/sanitizer/common_interface_defs.h]) +AM_ENABLE_MULTILIB(, ..) + AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) AC_ARG_ENABLE(version-specific-runtime-libs, [ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ], @@ -24,7 +26,6 @@ GCC_LIBSTDCXX_RAW_CXX_FLAGS AM_INIT_AUTOMAKE(foreign no-dist) -AM_ENABLE_MULTILIB(, ..) AM_MAINTAINER_MODE # Calculate toolexeclibdir Index: libstdc++-v3/include/std/future =================================================================== --- libstdc++-v3/include/std/future (.../tags/gcc_4_8_4_release) (revision 220382) +++ libstdc++-v3/include/std/future (.../branches/gcc-4_8-branch) (revision 220382) @@ -1417,7 +1417,8 @@ operator()(_ArgTypes... __args) { __future_base::_State_base::_S_check(_M_state); - _M_state->_M_run(std::forward<_ArgTypes>(__args)...); + auto __state = _M_state; + __state->_M_run(std::forward<_ArgTypes>(__args)...); } void Index: libstdc++-v3/ChangeLog =================================================================== --- libstdc++-v3/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ libstdc++-v3/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,9 @@ +2015-01-09 Jonathan Wakely + + PR libstdc++/60966 + * include/std/future (packaged_task::operator()): Increment the + reference count on the shared state until the function returns. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: libatomic/fop_n.c =================================================================== --- libatomic/fop_n.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ libatomic/fop_n.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -112,9 +112,9 @@ pre_barrier (smodel); - wptr = (UWORD *)mptr; - shift = 0; - mask = -1; + wptr = (UWORD *)((uintptr_t)mptr & -WORDSIZE); + shift = (((uintptr_t)mptr % WORDSIZE) * CHAR_BIT) ^ SIZE(INVERT_MASK); + mask = SIZE(MASK) << shift; wopval = (UWORD)opval << shift; woldval = __atomic_load_n (wptr, __ATOMIC_RELAXED); @@ -136,9 +136,9 @@ pre_barrier (smodel); - wptr = (UWORD *)mptr; - shift = 0; - mask = -1; + wptr = (UWORD *)((uintptr_t)mptr & -WORDSIZE); + shift = (((uintptr_t)mptr % WORDSIZE) * CHAR_BIT) ^ SIZE(INVERT_MASK); + mask = SIZE(MASK) << shift; wopval = (UWORD)opval << shift; woldval = __atomic_load_n (wptr, __ATOMIC_RELAXED); Index: libatomic/ChangeLog =================================================================== --- libatomic/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ libatomic/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,8 @@ +2015-01-21 Andrew Waterman + + * fop_n.c (libat_fetch_op): Align address to word boundary. + (libat_op_fetch): Likewise. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: libbacktrace/configure =================================================================== --- libbacktrace/configure (.../tags/gcc_4_8_4_release) (revision 220382) +++ libbacktrace/configure (.../branches/gcc-4_8-branch) (revision 220382) @@ -614,7 +614,6 @@ WARN_FLAGS EXTRA_FLAGS BACKTRACE_FILE -multi_basedir OTOOL64 OTOOL LIPO @@ -680,6 +679,7 @@ build_vendor build_cpu build +multi_basedir target_alias host_alias build_alias @@ -721,6 +721,7 @@ ac_subst_files='' ac_user_opts=' enable_option_checking +enable_multilib enable_maintainer_mode with_target_subdir enable_shared @@ -729,7 +730,6 @@ enable_fast_install with_gnu_ld enable_libtool_lock -enable_multilib with_system_libunwind ' ac_precious_vars='build_alias @@ -1361,6 +1361,7 @@ --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-multilib build many library versions (default) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=no] @@ -1368,7 +1369,6 @@ --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --enable-multilib build many library versions (default) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -2451,6 +2451,46 @@ ac_config_headers="$ac_config_headers config.h" +if test -n "${with_target_subdir}"; then + # Default to --enable-multilib +# Check whether --enable-multilib was given. +if test "${enable_multilib+set}" = set; then : + enableval=$enable_multilib; case "$enableval" in + yes) multilib=yes ;; + no) multilib=no ;; + *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;; + esac +else + multilib=yes +fi + + +# We may get other options which we leave undocumented: +# --with-target-subdir, --with-multisrctop, --with-multisubdir +# See config-ml.in if you want the gory details. + +if test "$srcdir" = "."; then + if test "$with_target_subdir" != "."; then + multi_basedir="$srcdir/$with_multisrctop../.." + else + multi_basedir="$srcdir/$with_multisrctop.." + fi +else + multi_basedir="$srcdir/.." +fi + + +# Even if the default multilib is not a cross compilation, +# it may be that some of the other multilibs are. +if test $cross_compiling = no && test $multilib = yes \ + && test "x${with_multisubdir}" != x ; then + cross_compiling=maybe +fi + +ac_config_commands="$ac_config_commands default-1" + +fi + ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do for ac_t in install-sh install.sh shtool; do @@ -11087,7 +11127,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11090 "configure" +#line 11130 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11193,7 +11233,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11196 "configure" +#line 11236 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11437,43 +11477,6 @@ if test -n "${with_target_subdir}"; then # We are compiling a GCC library. We can assume that the unwind # library exists. - # Default to --enable-multilib -# Check whether --enable-multilib was given. -if test "${enable_multilib+set}" = set; then : - enableval=$enable_multilib; case "$enableval" in - yes) multilib=yes ;; - no) multilib=no ;; - *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;; - esac -else - multilib=yes -fi - - -# We may get other options which we leave undocumented: -# --with-target-subdir, --with-multisrctop, --with-multisubdir -# See config-ml.in if you want the gory details. - -if test "$srcdir" = "."; then - if test "$with_target_subdir" != "."; then - multi_basedir="$srcdir/$with_multisrctop../.." - else - multi_basedir="$srcdir/$with_multisrctop.." - fi -else - multi_basedir="$srcdir/.." -fi - - -# Even if the default multilib is not a cross compilation, -# it may be that some of the other multilibs are. -if test $cross_compiling = no && test $multilib = yes \ - && test "x${with_multisubdir}" != x ; then - cross_compiling=maybe -fi - -ac_config_commands="$ac_config_commands default-1" - BACKTRACE_FILE="backtrace.lo simple.lo" else ac_fn_c_check_header_mongrel "$LINENO" "unwind.h" "ac_cv_header_unwind_h" "$ac_includes_default" @@ -13128,7 +13131,21 @@ # INIT-COMMANDS # +srcdir="$srcdir" +host="$host" +target="$target" +with_multisubdir="$with_multisubdir" +with_multisrctop="$with_multisrctop" +with_target_subdir="$with_target_subdir" +ac_configure_args="${multilib_arg} ${ac_configure_args}" +multi_basedir="$multi_basedir" +CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} +CC="$CC" +CXX="$CXX" +GFORTRAN="$GFORTRAN" +GCJ="$GCJ" + # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH @@ -13388,20 +13405,6 @@ -srcdir="$srcdir" -host="$host" -target="$target" -with_multisubdir="$with_multisubdir" -with_multisrctop="$with_multisrctop" -with_target_subdir="$with_target_subdir" -ac_configure_args="${multilib_arg} ${ac_configure_args}" -multi_basedir="$multi_basedir" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -CC="$CC" -CXX="$CXX" -GFORTRAN="$GFORTRAN" -GCJ="$GCJ" - GCC="$GCC" CC="$CC" acx_cv_header_stdint="$acx_cv_header_stdint" @@ -13434,8 +13437,8 @@ do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "gstdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS gstdint.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "backtrace-supported.h") CONFIG_FILES="$CONFIG_FILES backtrace-supported.h" ;; @@ -14024,6 +14027,14 @@ case $ac_file$ac_mode in + "default-1":C) +# Only add multilib support code if we just rebuilt the top-level +# Makefile. +case " $CONFIG_FILES " in + *" Makefile "*) + ac_file=Makefile . ${multi_basedir}/config-ml.in + ;; +esac ;; "libtool":C) # See if we are running on zsh, and set the options which allow our @@ -14663,14 +14674,6 @@ chmod +x "$ofile" ;; - "default-1":C) -# Only add multilib support code if we just rebuilt the top-level -# Makefile. -case " $CONFIG_FILES " in - *" Makefile "*) - ac_file=Makefile . ${multi_basedir}/config-ml.in - ;; -esac ;; "gstdint.h":C) if test "$GCC" = yes; then echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h Index: libbacktrace/ChangeLog =================================================================== --- libbacktrace/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ libbacktrace/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,8 @@ +2015-01-26 Matthias Klose + + * configure.ac: Move AM_ENABLE_MULTILIB before AC_PROG_CC. + * configure: Regenerate. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: libbacktrace/configure.ac =================================================================== --- libbacktrace/configure.ac (.../tags/gcc_4_8_4_release) (revision 220382) +++ libbacktrace/configure.ac (.../branches/gcc-4_8-branch) (revision 220382) @@ -34,6 +34,10 @@ AC_CONFIG_SRCDIR(backtrace.h) AC_CONFIG_HEADER(config.h) +if test -n "${with_target_subdir}"; then + AM_ENABLE_MULTILIB(, ..) +fi + AC_CANONICAL_SYSTEM target_alias=${target_alias-$host_alias} @@ -83,7 +87,6 @@ if test -n "${with_target_subdir}"; then # We are compiling a GCC library. We can assume that the unwind # library exists. - AM_ENABLE_MULTILIB(, ..) BACKTRACE_FILE="backtrace.lo simple.lo" else AC_CHECK_HEADER([unwind.h], Index: gcc/tree-vrp.c =================================================================== --- gcc/tree-vrp.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/tree-vrp.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -6811,7 +6811,7 @@ tree type = TREE_TYPE (op0); value_range_t *vr0 = get_value_range (op0); - if (vr0->type != VR_VARYING + if (vr0->type == VR_RANGE && INTEGRAL_TYPE_P (type) && vrp_val_is_min (vr0->min) && vrp_val_is_max (vr0->max) Index: gcc/c-family/ChangeLog =================================================================== --- gcc/c-family/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/c-family/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,12 @@ +2015-01-20 Marek Polacek + + Backport from mainline + 2014-06-23 Marek Polacek + + PR c/61553 + * c-common.c (get_atomic_generic_size): Don't segfault if the + type doesn't have a size. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: gcc/c-family/c-common.c =================================================================== --- gcc/c-family/c-common.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/c-family/c-common.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -10143,7 +10143,8 @@ function); return 0; } - size = tree_low_cst (TYPE_SIZE_UNIT (TREE_TYPE (type)), 1); + tree type_size = TYPE_SIZE_UNIT (TREE_TYPE (type)); + size = type_size ? tree_low_cst (type_size, 1) : 0; if (size != size_0) { error_at (loc, "size mismatch in argument %d of %qE", x + 1, Index: gcc/c/c-typeck.c =================================================================== --- gcc/c/c-typeck.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/c/c-typeck.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -5788,7 +5788,8 @@ warning (OPT_Wtraditional, "traditional C rejects automatic " "aggregate initialization"); - DECL_INITIAL (decl) = value; + if (value != error_mark_node || TREE_CODE (decl) != FUNCTION_DECL) + DECL_INITIAL (decl) = value; /* ANSI wants warnings about out-of-range constant initializers. */ STRIP_TYPE_NOPS (value); Index: gcc/c/ChangeLog =================================================================== --- gcc/c/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/c/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,12 @@ +2015-02-01 Jakub Jelinek + + Backported from mainline + 2015-01-27 Jakub Jelinek + + PR c/64766 + * c-typeck.c (store_init_value): Don't overwrite DECL_INITIAL + of FUNCTION_DECLs with error_mark_node. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: gcc/DATESTAMP =================================================================== --- gcc/DATESTAMP (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/DATESTAMP (.../branches/gcc-4_8-branch) (revision 220382) @@ -1 +1 @@ -20141219 +20150203 Index: gcc/rtlanal.c =================================================================== --- gcc/rtlanal.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/rtlanal.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -873,6 +873,17 @@ int reg_set_p (const_rtx reg, const_rtx insn) { + /* After delay slot handling, call and branch insns might be in a + sequence. Check all the elements there. */ + if (INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE) + { + for (int i = 0; i < XVECLEN (PATTERN (insn), 0); ++i) + if (reg_set_p (reg, XVECEXP (PATTERN (insn), 0, i))) + return true; + + return false; + } + /* We can be passed an insn or part of one. If we are passed an insn, check if a side-effect of the insn clobbers REG. */ if (INSN_P (insn) @@ -884,7 +895,7 @@ GET_MODE (reg), REGNO (reg))) || MEM_P (reg) || find_reg_fusage (insn, CLOBBER, reg))))) - return 1; + return true; return set_of (reg, insn) != NULL_RTX; } Index: gcc/DEV-PHASE =================================================================== --- gcc/DEV-PHASE (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/DEV-PHASE (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1 @@ +prerelease Index: gcc/ChangeLog =================================================================== --- gcc/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,137 @@ +2015-02-01 Jakub Jelinek + + Backported from mainline + 2015-01-27 Jakub Jelinek + + PR rtl-optimization/61058 + * jump.c (cleanup_barriers): Update basic block boundaries + if BLOCK_FOR_INSN is non-NULL on PREV. + + 2013-04-16 Steven Bosscher + + PR middle-end/43631 + * jump.c (cleanup_barriers): Use reorder_insns_nobb to avoid making + the moved barrier the tail of the basic block it follows. + + 2015-01-26 Jakub Jelinek + + * config/rs6000/rs6000-cpus.def (POWERPC_MASKS): Add + OPTION_MASK_QUAD_MEMORY_ATOMIC. + + 2015-01-12 Jakub Jelinek + + PR tree-optimization/64563 + * tree-vrp.c (vrp_evaluate_conditional): Check for VR_RANGE + instead of != VR_VARYING. + + PR target/64513 + * config/i386/i386.c (ix86_expand_prologue): Add + REG_FRAME_RELATED_EXPR to %rax and %r10 pushes. + +2015-01-29 Ilya Tocar + + * config/i386/avx2intrin.h (_mm256_bslli_epi128, + _mm256_bsrli_epi128): New. + * config/i386/emmintrin.h (_mm_bsrli_si128, _mm_bslli_si128): Ditto. + +2015-01-27 Mikael Pettersson + + Backport from mainline + + 2013-09-20 Bernd Edlinger + + PR middle-end/57748 + * expr.c (expand_assignment): Remove misalignp code path. + + 2014-01-08 Bernd Edlinger + + PR middle-end/57748 + * expr.h (expand_expr_real, expand_expr_real_1): Add new parameter + inner_reference_p. + (expand_expr, expand_normal): Adjust. + * expr.c (expand_expr_real, expand_expr_real_1): Add new parameter + inner_reference_p. Use inner_reference_p to expand inner references. + (store_expr): Adjust. + * cfgexpand.c (expand_call_stmt): Adjust. + +2015-01-26 Uros Bizjak + + Backport from mainline + 2015-01-26 Uros Bizjak + + PR target/64795 + * config/i386/i386.md (*movdi_internal): Also check operand 0 + to determine TYPE_LEA operand. + (*movsi_internal): Ditto. + + Backport from mainline + 2015-01-23 Uros Bizjak + + * config/i386/sse.md (sse2_loadld): Set attribute isa to sse2 for + alternative 1. + +2015-01-15 Martin Liska + + Backport from mainline + 2014-11-27 Richard Biener + + PR middle-end/63704 + * alias.c (mems_in_disjoint_alias_sets_p): Remove assert + and instead return false when !fstrict-aliasing. + +2015-01-14 Renlin Li + + Backport form mainline + 2014-08-12 Ramana Radhakrishnan + + PR target/61413 + * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Fix definition + of __ARM_SIZEOF_WCHAR_T. + +2015-01-13 Pat Haugen + + Backport from mainline + 2014-12-20 Segher Boessenkool + + PR target/64358 + * config/rs6000/rs6000.c (rs6000_split_logical_inner): Swap the + input operands if only the second is inverted. + * config/rs6000/rs6000.md (*boolc3_internal1 for BOOL_128): + Swap BOOL_REGS_OP1 and BOOL_REGS_OP2. Correct arguments to + rs6000_split_logical. + (*boolc3_internal2 for TI2): Swap operands[1] and operands[2]. + +2015-01-13 Oleg Endo + + Backport form mainline + 2015-01-13 Oleg Endo + + PR target/64479 + * rtlanal.c (set_reg_p): Handle SEQUENCE constructs. + +2014-12-27 H.J. Lu + + Backport from mainline: + 2014-12-27 H.J. Lu + + PR target/64409 + * config/i386/i386.c (ix86_function_type_abi): Issue an error + when ms_abi attribute is used with x32. + +2014-12-19 H.J. Lu + + Backported from mainline + 2014-12-14 H.J. Lu + + PR rtl-optimization/64037 + * combine.c (setup_incoming_promotions): Pass the argument + before any promotions happen to promote_function_mode. + +2014-12-19 Jakub Jelinek + + * BASE-VER: Set to 4.8.5. + * DEV-PHASE: Set to prerelease. + 2014-12-19 Release Manager * GCC 4.8.4 released. @@ -382,7 +516,7 @@ * config/pa/pa.md (trap): New insn. Add "trap" to attribute type. Don't allow trap insn in in_branch_delay, in_nullified_branch_delay or in_call_delay. - + 2014-11-06 Kyrylo Tkachov * config/aarch64/aarch64-elf-raw.h (CA53_ERR_835769_SPEC): Define. Index: gcc/testsuite/gcc.target/i386/pr64409.c =================================================================== --- gcc/testsuite/gcc.target/i386/pr64409.c (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gcc.target/i386/pr64409.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,6 @@ +/* { dg-do compile { target { ! { ia32 } } } } */ +/* { dg-require-effective-target maybe_x32 } */ +/* { dg-options "-O0 -mx32" } */ + +int a; +int* __attribute__ ((ms_abi)) fn1 () { return &a; } /* { dg-error "X32 does not support ms_abi attribute" } */ Index: gcc/testsuite/gcc.target/i386/sse-14.c =================================================================== --- gcc/testsuite/gcc.target/i386/sse-14.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/testsuite/gcc.target/i386/sse-14.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -150,6 +150,8 @@ /* emmintrin.h */ test_2 (_mm_shuffle_pd, __m128d, __m128d, __m128d, 1) +test_1 (_mm_bsrli_si128, __m128i, __m128i, 1) +test_1 (_mm_bslli_si128, __m128i, __m128i, 1) test_1 (_mm_srli_si128, __m128i, __m128i, 1) test_1 (_mm_slli_si128, __m128i, __m128i, 1) test_1 (_mm_extract_epi16, int, __m128i, 1) Index: gcc/testsuite/gcc.target/i386/pr57003.c =================================================================== --- gcc/testsuite/gcc.target/i386/pr57003.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/testsuite/gcc.target/i386/pr57003.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,5 +1,5 @@ /* PR rtl-optimization/57003 */ -/* { dg-do run } */ +/* { dg-do run { target { ! x32 } } } */ /* { dg-options "-O2 -maccumulate-outgoing-args" } */ #define N 2001 Index: gcc/testsuite/gcc.target/i386/sse-22.c =================================================================== --- gcc/testsuite/gcc.target/i386/sse-22.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/testsuite/gcc.target/i386/sse-22.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -88,6 +88,8 @@ #endif #include test_2 (_mm_shuffle_pd, __m128d, __m128d, __m128d, 1) +test_1 (_mm_bsrli_si128, __m128i, __m128i, 1) +test_1 (_mm_bslli_si128, __m128i, __m128i, 1) test_1 (_mm_srli_si128, __m128i, __m128i, 1) test_1 (_mm_slli_si128, __m128i, __m128i, 1) test_1 (_mm_extract_epi16, int, __m128i, 1) @@ -219,6 +221,8 @@ test_1 ( _mm256_shuffle_epi32, __m256i, __m256i, 1) test_1 ( _mm256_shufflehi_epi16, __m256i, __m256i, 1) test_1 ( _mm256_shufflelo_epi16, __m256i, __m256i, 1) +test_1 ( _mm256_bslli_epi128, __m256i, __m256i, 8) +test_1 ( _mm256_bsrli_epi128, __m256i, __m256i, 8) test_1 ( _mm256_slli_si256, __m256i, __m256i, 8) test_1 ( _mm256_srli_si256, __m256i, __m256i, 8) test_2 ( _mm_blend_epi32, __m128i, __m128i, __m128i, 1) Index: gcc/testsuite/gcc.target/i386/pr60516.c =================================================================== --- gcc/testsuite/gcc.target/i386/pr60516.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/testsuite/gcc.target/i386/pr60516.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,5 +1,5 @@ /* PR target/60516 */ -/* { dg-do compile } */ +/* { dg-do compile { target { ! x32 } } } */ /* { dg-options "-O2" } */ struct S { char c[65536]; }; Index: gcc/testsuite/gcc.target/i386/pr64513.c =================================================================== --- gcc/testsuite/gcc.target/i386/pr64513.c (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gcc.target/i386/pr64513.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,17 @@ +/* PR target/64513 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -mstack-arg-probe" } */ + +struct A {}; +struct B { struct A y; }; +int foo (struct A); + +int +bar (int x) +{ + struct B b; + int c; + while (x--) + c = foo (b.y); + return c; +} Index: gcc/testsuite/gfortran.dg/pr64528.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr64528.f90 (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gfortran.dg/pr64528.f90 (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,20 @@ +! PR fortran/64528 +! { dg-do compile } +! { dg-options "-O -fno-tree-dce -fno-tree-ccp" } + +program pr64528 + interface + subroutine foo(x) + integer, value :: x + end subroutine foo + end interface + integer :: x + x = 10 + call foo(x) + if(x .ne. 10) then + endif +end program pr64528 +subroutine foo(x) + integer, value :: x + x = 11 +end subroutine foo Index: gcc/testsuite/gfortran.dg/typebound_operator_20.f90 =================================================================== --- gcc/testsuite/gfortran.dg/typebound_operator_20.f90 (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gfortran.dg/typebound_operator_20.f90 (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,53 @@ +! { dg-do run } +! +! PR 63733: [4.8/4.9/5 Regression] [OOP] wrong resolution for OPERATOR generics +! +! Original test case from Alberto F. Martín Huertas +! Slightly modified by Salvatore Filippone +! Further modified by Janus Weil + +module overwrite + type parent + contains + procedure :: sum => sum_parent + generic :: operator(+) => sum + end type + + type, extends(parent) :: child + contains + procedure :: sum => sum_child + end type + +contains + + integer function sum_parent(op1,op2) + implicit none + class(parent), intent(in) :: op1, op2 + sum_parent = 0 + end function + + integer function sum_child(op1,op2) + implicit none + class(child) , intent(in) :: op1 + class(parent), intent(in) :: op2 + sum_child = 1 + end function + +end module + +program drive + use overwrite + implicit none + + type(parent) :: m1, m2 + class(parent), pointer :: mres + type(child) :: h1, h2 + class(parent), pointer :: hres + + if (m1 + m2 /= 0) call abort() + if (h1 + m2 /= 1) call abort() + if (h1%sum(h2) /= 1) call abort() + +end + +! { dg-final { cleanup-modules "overwrite" } } Index: gcc/testsuite/gfortran.dg/typebound_call_26.f90 =================================================================== --- gcc/testsuite/gfortran.dg/typebound_call_26.f90 (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gfortran.dg/typebound_call_26.f90 (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,30 @@ +! { dg-do compile } +! +! PR 64244: [4.8/4.9/5 Regression] ICE at class.c:236 when using non_overridable +! +! Contributed by Ondřej Čertík + +module m + implicit none + + type :: A + contains + generic :: f => g + procedure, non_overridable :: g + end type + +contains + + subroutine g(this) + class(A), intent(in) :: this + end subroutine + +end module + + +program test_non_overridable + use m, only: A + implicit none + class(A), allocatable :: h + call h%f() +end Index: gcc/testsuite/gfortran.dg/dependency_45.f90 =================================================================== --- gcc/testsuite/gfortran.dg/dependency_45.f90 (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gfortran.dg/dependency_45.f90 (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,12 @@ +! { dg-do run } +! { dg-options "-Warray-temporaries" } +! PR 56867 - substrings were not checked for dependency. +program main + character(len=4) :: a + character(len=4) :: c(3) + c(1) = 'abcd' + c(2) = '1234' + c(3) = 'wxyz' + c(:)(1:2) = c(2)(2:3) ! { dg-warning "array temporary" } + if (c(3) .ne. '23yz') call abort +end program main Index: gcc/testsuite/gcc.dg/pr61058.c =================================================================== --- gcc/testsuite/gcc.dg/pr61058.c (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gcc.dg/pr61058.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,10 @@ +/* PR rtl-optimization/61058 */ +/* { dg-do compile } */ +/* { dg-options "" } */ +/* { dg-additional-options "-fno-asynchronous-unwind-tables -mtune=atom" { target i?86-*-* x86_64-*-* } } */ + +void +foo (void) +{ + __builtin_unreachable (); +} Index: gcc/testsuite/gcc.dg/pr64766.c =================================================================== --- gcc/testsuite/gcc.dg/pr64766.c (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gcc.dg/pr64766.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,9 @@ +/* PR c/64766 */ +/* { dg-do compile } */ + +void +foo () +{ +} + +void foo () = 0; /* { dg-error "is initialized like a variable|invalid initializer" } */ Index: gcc/testsuite/gcc.dg/pr64563.c =================================================================== --- gcc/testsuite/gcc.dg/pr64563.c (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/gcc.dg/pr64563.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,14 @@ +/* PR tree-optimization/64563 */ +/* { dg-do compile } */ +/* { dg-options "-Os -Wtype-limits" } */ + +int a, b, c, d, f; +unsigned int e; + +void +foo (void) +{ + d = b = (a != (e | 4294967288UL)); + if (!d) + c = f || b; +} Index: gcc/testsuite/ChangeLog =================================================================== --- gcc/testsuite/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/testsuite/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,103 @@ +2015-02-01 Jakub Jelinek + + Backported from mainline + 2015-01-27 Jakub Jelinek + + PR rtl-optimization/61058 + * gcc.dg/pr61058.c: New test. + + PR c/64766 + * gcc.dg/pr64766.c: New test. + + 2015-01-13 Jakub Jelinek + + PR fortran/64528 + * gfortran.dg/pr64528.f90: New test. + + 2015-01-12 Jakub Jelinek + + PR tree-optimization/64563 + * gcc.dg/pr64563.c: New test. + + PR target/64513 + * gcc.target/i386/pr64513.c: New test. + +2015-01-29 Ilya Tocar + + * gcc.target/i386/sse-14.c: Test new intrinsic. + * gcc.target/i386/sse-22.c: Ditto. + +2015-01-27 Mikael Pettersson + + Backport from mainline + + 2013-09-20 Bernd Edlinger + + PR middle-end/57748 + * gcc.dg/torture/pr57748-1.c: New test. + * gcc.dg/torture/pr57748-2.c: New test. + + 2014-01-08 Bernd Edlinger + + PR middle-end/57748 + * gcc.dg/torture/pr57748-3.c: New test. + * gcc.dg/torture/pr57748-4.c: New test. + +2015-01-24 Thomas Koenig + + PR fortran/56867 + * gfortran.dg/dependency_45.f90: New test. + +2015-01-24 Thomas Koenig + + Backport from trunk + PR fortran/57023 + * gfortran.dg/internal_pack_15.f90: New test. + +2015-01-20 Marek Polacek + + Backport from mainline + 2014-06-23 Marek Polacek + + PR c/61553 + * c-c++-common/pr61553.c: New test. + +2015-01-12 Janus Weil + + Backport from mainline + PR fortran/63733 + * gfortran.dg/typebound_operator_20.f90: New. + +2014-12-28 H.J. Lu + + Backport from mainline: + 2014-12-28 H.J. Lu + + * gcc.target/i386/pr57003.c: Skip on x32. + * gcc.target/i386/pr60516.c: Likewise. + +2014-12-27 H.J. Lu + + Backport from mainline: + 2014-12-26 H.J. Lu + + PR target/64409 + * gcc.target/i386/pr64409.c: New test. + +2014-12-23 Janus Weil + + Backport from mainline + PR fortran/64244 + * gfortran.dg/typebound_call_26.f90: New. + +2014-12-19 H.J. Lu + + Backported from mainline + 2014-12-14 H.J. Lu + + PR rtl-optimization/64037 + * g++.dg/pr64037.C: New test. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: gcc/testsuite/g++.dg/pr64037.C =================================================================== --- gcc/testsuite/g++.dg/pr64037.C (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/g++.dg/pr64037.C (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,27 @@ +// { dg-do run { target i?86-*-* x86_64-*-* } } +// { dg-options "-std=c++11 -Os" } + +enum class X : unsigned char { + V = 2, +}; + +static void +__attribute__((noinline,noclone)) +foo(unsigned &out, unsigned a, X b) +{ + out = static_cast(b); +} + +int main() +{ + unsigned deadbeef = 0xDEADBEEF; + asm volatile ("" : "+d" (deadbeef), "+c" (deadbeef)); + + unsigned out; + foo(out, 2, X::V); + + if (out != 2) + __builtin_abort (); + + return 0; +} Index: gcc/testsuite/g++.dg/cpp0x/ref-qual16.C =================================================================== --- gcc/testsuite/g++.dg/cpp0x/ref-qual16.C (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/g++.dg/cpp0x/ref-qual16.C (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,12 @@ +// PR c++/64297 +// { dg-do compile { target c++11 } } + +struct A { + typedef int X; + template X m_fn1() const; +}; +template struct is_function {}; +is_function i; +struct D { + template > D(Y); +} b(&A::m_fn1<0>); Index: gcc/testsuite/g++.dg/template/offsetof3.C =================================================================== --- gcc/testsuite/g++.dg/template/offsetof3.C (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/g++.dg/template/offsetof3.C (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,18 @@ +// PR c++/64487 + +struct foo { + int member; +}; + +template < int N> +struct bar {}; + +template +struct qux { + static bar static_member; +}; + +template +bar qux::static_member; + +int main() { } Index: gcc/testsuite/g++.dg/template/non-dependent14.C =================================================================== --- gcc/testsuite/g++.dg/template/non-dependent14.C (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/g++.dg/template/non-dependent14.C (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,7 @@ +// PR c++/64251 + +class DictionaryValue {}; +template void CreateValue(T) { + DictionaryValue(0); + CreateValue(0); +} Index: gcc/testsuite/c-c++-common/pr61553.c =================================================================== --- gcc/testsuite/c-c++-common/pr61553.c (.../tags/gcc_4_8_4_release) (revision 0) +++ gcc/testsuite/c-c++-common/pr61553.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -0,0 +1,8 @@ +/* PR c/61553 */ +/* { dg-do compile } */ + +void +foo (char *s) +{ + __atomic_store (s, (void *) 0, __ATOMIC_SEQ_CST); /* { dg-error "size mismatch" } */ +} Index: gcc/cp/typeck.c =================================================================== --- gcc/cp/typeck.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/cp/typeck.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -8639,6 +8639,12 @@ /* This should really have a different TYPE_MAIN_VARIANT, but that gets complex. */ tree result = build_qualified_type (type, memfn_quals); + if (tree canon = TYPE_CANONICAL (result)) + if (canon != result) + /* check_qualified_type doesn't check the ref-qualifier, so make sure + TYPE_CANONICAL is correct. */ + TYPE_CANONICAL (result) + = build_ref_qualified_type (canon, type_memfn_rqual (result)); result = build_exception_variant (result, TYPE_RAISES_EXCEPTIONS (type)); return build_ref_qualified_type (result, rqual); } Index: gcc/cp/ChangeLog =================================================================== --- gcc/cp/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/cp/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,15 @@ +2015-01-13 Jason Merrill + + PR c++/64487 + * semantics.c (finish_offsetof): Handle templates here. + * parser.c (cp_parser_builtin_offsetof): Not here. + + PR c++/64251 + * decl2.c (mark_used): Don't mark if in_template_function. + + PR c++/64297 + * typeck.c (apply_memfn_quals): Correct wrong TYPE_CANONICAL. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: gcc/cp/semantics.c =================================================================== --- gcc/cp/semantics.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/cp/semantics.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -3651,6 +3651,14 @@ tree finish_offsetof (tree expr) { + /* If we're processing a template, we can't finish the semantics yet. + Otherwise we can fold the entire expression now. */ + if (processing_template_decl) + { + expr = build1 (OFFSETOF_EXPR, size_type_node, expr); + return expr; + } + if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR) { error ("cannot apply % to destructor %<~%T%>", Index: gcc/cp/decl2.c =================================================================== --- gcc/cp/decl2.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/cp/decl2.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -4606,7 +4606,7 @@ --function_depth; } - if (processing_template_decl) + if (processing_template_decl || in_template_function ()) return true; /* Check this too in case we're within fold_non_dependent_expr. */ Index: gcc/cp/parser.c =================================================================== --- gcc/cp/parser.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/cp/parser.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -8024,12 +8024,7 @@ } success: - /* If we're processing a template, we can't finish the semantics yet. - Otherwise we can fold the entire expression now. */ - if (processing_template_decl) - expr = build1 (OFFSETOF_EXPR, size_type_node, expr); - else - expr = finish_offsetof (expr); + expr = finish_offsetof (expr); failure: parser->integral_constant_expression_p = save_ice_p; Index: gcc/jump.c =================================================================== --- gcc/jump.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/jump.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -133,7 +133,30 @@ if (BARRIER_P (prev)) delete_insn (insn); else if (prev != PREV_INSN (insn)) - reorder_insns (insn, insn, prev); + { + basic_block bb = BLOCK_FOR_INSN (prev); + rtx end = PREV_INSN (insn); + reorder_insns_nobb (insn, insn, prev); + if (bb) + { + /* If the backend called in machine reorg compute_bb_for_insn + and didn't free_bb_for_insn again, preserve basic block + boundaries. Move the end of basic block to PREV since + it is followed by a barrier now, and clear BLOCK_FOR_INSN + on the following notes. + ??? Maybe the proper solution for the targets that have + cfg around after machine reorg is not to run cleanup_barriers + pass at all. */ + BB_END (bb) = prev; + do + { + prev = NEXT_INSN (prev); + if (prev != insn && BLOCK_FOR_INSN (prev) == bb) + BLOCK_FOR_INSN (prev) = NULL; + } + while (prev != end); + } + } } } return 0; Index: gcc/expr.c =================================================================== --- gcc/expr.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/expr.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -4708,8 +4708,6 @@ int unsignedp; int volatilep = 0; tree tem; - bool misalignp; - rtx mem = NULL_RTX; push_temp_slots (); tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1, @@ -4728,41 +4726,8 @@ && DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1))) get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset); - /* If we are going to use store_bit_field and extract_bit_field, - make sure to_rtx will be safe for multiple use. */ - mode = TYPE_MODE (TREE_TYPE (tem)); - if (TREE_CODE (tem) == MEM_REF - && mode != BLKmode - && ((align = get_object_alignment (tem)) - < GET_MODE_ALIGNMENT (mode)) - && ((icode = optab_handler (movmisalign_optab, mode)) - != CODE_FOR_nothing)) - { - struct expand_operand ops[2]; + to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, EXPAND_WRITE); - misalignp = true; - to_rtx = gen_reg_rtx (mode); - mem = expand_expr (tem, NULL_RTX, VOIDmode, EXPAND_WRITE); - - /* If the misaligned store doesn't overwrite all bits, perform - rmw cycle on MEM. */ - if (bitsize != GET_MODE_BITSIZE (mode)) - { - create_input_operand (&ops[0], to_rtx, mode); - create_fixed_operand (&ops[1], mem); - /* The movmisalign pattern cannot fail, else the assignment - would silently be omitted. */ - expand_insn (icode, 2, ops); - - mem = copy_rtx (mem); - } - } - else - { - misalignp = false; - to_rtx = expand_expr (tem, NULL_RTX, VOIDmode, EXPAND_WRITE); - } - /* If the bitfield is volatile, we want to access it in the field's mode, not the computed mode. If a MEM has VOIDmode (external with incomplete type), @@ -4900,17 +4865,6 @@ get_alias_set (to), nontemporal); } - if (misalignp) - { - struct expand_operand ops[2]; - - create_fixed_operand (&ops[0], mem); - create_input_operand (&ops[1], to_rtx, mode); - /* The movmisalign pattern cannot fail, else the assignment - would silently be omitted. */ - expand_insn (icode, 2, ops); - } - if (result) preserve_temp_slots (result); pop_temp_slots (); @@ -5262,7 +5216,7 @@ temp = expand_expr_real (exp, tmp_target, GET_MODE (target), (call_param_p ? EXPAND_STACK_PARM : EXPAND_NORMAL), - &alt_rtl); + &alt_rtl, false); } /* If TEMP is a VOIDmode constant and the mode of the type of EXP is not @@ -7881,11 +7835,21 @@ address, and ALT_RTL is non-NULL, then *ALT_RTL is set to the DECL_RTL of the VAR_DECL. *ALT_RTL is also set if EXP is a COMPOUND_EXPR whose second argument is such a VAR_DECL, and so on - recursively. */ + recursively. + If INNER_REFERENCE_P is true, we are expanding an inner reference. + In this case, we don't adjust a returned MEM rtx that wouldn't be + sufficiently aligned for its mode; instead, it's up to the caller + to deal with it afterwards. This is used to make sure that unaligned + base objects for which out-of-bounds accesses are supported, for + example record types with trailing arrays, aren't realigned behind + the back of the caller. + The normal operating mode is to pass FALSE for this parameter. */ + rtx expand_expr_real (tree exp, rtx target, enum machine_mode tmode, - enum expand_modifier modifier, rtx *alt_rtl) + enum expand_modifier modifier, rtx *alt_rtl, + bool inner_reference_p) { rtx ret; @@ -7897,7 +7861,8 @@ return ret ? ret : const0_rtx; } - ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl); + ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl, + inner_reference_p); return ret; } @@ -9190,7 +9155,8 @@ rtx expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, - enum expand_modifier modifier, rtx *alt_rtl) + enum expand_modifier modifier, rtx *alt_rtl, + bool inner_reference_p) { rtx op0, op1, temp, decl_rtl; tree type; @@ -9336,7 +9302,7 @@ set_curr_insn_location (gimple_location (g)); r = expand_expr_real (gimple_assign_rhs_to_tree (g), target, - tmode, modifier, NULL); + tmode, modifier, NULL, inner_reference_p); set_curr_insn_location (saved_loc); if (REG_P (r) && !REG_EXPR (r)) set_reg_attrs_for_decl_rtl (SSA_NAME_VAR (exp), r); @@ -9557,7 +9523,8 @@ case SAVE_EXPR: { tree val = treeop0; - rtx ret = expand_expr_real_1 (val, target, tmode, modifier, alt_rtl); + rtx ret = expand_expr_real_1 (val, target, tmode, modifier, alt_rtl, + inner_reference_p); if (!SAVE_EXPR_RESOLVED_P (exp)) { @@ -9706,6 +9673,7 @@ MEM_VOLATILE_P (temp) = 1; if (modifier != EXPAND_WRITE && modifier != EXPAND_MEMORY + && !inner_reference_p && mode != BLKmode && align < GET_MODE_ALIGNMENT (mode)) { @@ -9940,18 +9908,19 @@ computation, since it will need a temporary and TARGET is known to have to do. This occurs in unchecked conversion in Ada. */ orig_op0 = op0 - = expand_expr (tem, - (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE - && COMPLETE_TYPE_P (TREE_TYPE (tem)) - && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) - != INTEGER_CST) - && modifier != EXPAND_STACK_PARM - ? target : NULL_RTX), - VOIDmode, - (modifier == EXPAND_INITIALIZER - || modifier == EXPAND_CONST_ADDRESS - || modifier == EXPAND_STACK_PARM) - ? modifier : EXPAND_NORMAL); + = expand_expr_real (tem, + (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE + && COMPLETE_TYPE_P (TREE_TYPE (tem)) + && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) + != INTEGER_CST) + && modifier != EXPAND_STACK_PARM + ? target : NULL_RTX), + VOIDmode, + (modifier == EXPAND_INITIALIZER + || modifier == EXPAND_CONST_ADDRESS + || modifier == EXPAND_STACK_PARM) + ? modifier : EXPAND_NORMAL, + NULL, true); /* If the bitfield is volatile, we want to access it in the @@ -10302,17 +10271,18 @@ { /* See the normal_inner_ref case for the rationale. */ orig_op0 - = expand_expr (tem, - (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE - && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) - != INTEGER_CST) - && modifier != EXPAND_STACK_PARM - ? target : NULL_RTX), - VOIDmode, - (modifier == EXPAND_INITIALIZER - || modifier == EXPAND_CONST_ADDRESS - || modifier == EXPAND_STACK_PARM) - ? modifier : EXPAND_NORMAL); + = expand_expr_real (tem, + (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE + && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) + != INTEGER_CST) + && modifier != EXPAND_STACK_PARM + ? target : NULL_RTX), + VOIDmode, + (modifier == EXPAND_INITIALIZER + || modifier == EXPAND_CONST_ADDRESS + || modifier == EXPAND_STACK_PARM) + ? modifier : EXPAND_NORMAL, + NULL, true); if (MEM_P (orig_op0)) { @@ -10339,8 +10309,8 @@ } if (!op0) - op0 = expand_expr (treeop0, - NULL_RTX, VOIDmode, modifier); + op0 = expand_expr_real (treeop0, NULL_RTX, VOIDmode, modifier, + NULL, inner_reference_p); /* If the input and output modes are both the same, we are done. */ if (mode == GET_MODE (op0)) @@ -10407,50 +10377,53 @@ op0 = copy_rtx (op0); set_mem_align (op0, MAX (MEM_ALIGN (op0), TYPE_ALIGN (type))); } - else if (mode != BLKmode - && MEM_ALIGN (op0) < GET_MODE_ALIGNMENT (mode) - /* If the target does have special handling for unaligned - loads of mode then use them. */ - && ((icode = optab_handler (movmisalign_optab, mode)) - != CODE_FOR_nothing)) - { - rtx reg, insn; - - op0 = adjust_address (op0, mode, 0); - /* We've already validated the memory, and we're creating a - new pseudo destination. The predicates really can't - fail. */ - reg = gen_reg_rtx (mode); - - /* Nor can the insn generator. */ - insn = GEN_FCN (icode) (reg, op0); - emit_insn (insn); - return reg; - } - else if (STRICT_ALIGNMENT + else if (modifier != EXPAND_WRITE + && modifier != EXPAND_MEMORY + && !inner_reference_p && mode != BLKmode && MEM_ALIGN (op0) < GET_MODE_ALIGNMENT (mode)) { - tree inner_type = TREE_TYPE (treeop0); - HOST_WIDE_INT temp_size - = MAX (int_size_in_bytes (inner_type), - (HOST_WIDE_INT) GET_MODE_SIZE (mode)); - rtx new_rtx - = assign_stack_temp_for_type (mode, temp_size, type); - rtx new_with_op0_mode - = adjust_address (new_rtx, GET_MODE (op0), 0); + /* If the target does have special handling for unaligned + loads of mode then use them. */ + if ((icode = optab_handler (movmisalign_optab, mode)) + != CODE_FOR_nothing) + { + rtx reg, insn; - gcc_assert (!TREE_ADDRESSABLE (exp)); + op0 = adjust_address (op0, mode, 0); + /* We've already validated the memory, and we're creating a + new pseudo destination. The predicates really can't + fail. */ + reg = gen_reg_rtx (mode); - if (GET_MODE (op0) == BLKmode) - emit_block_move (new_with_op0_mode, op0, - GEN_INT (GET_MODE_SIZE (mode)), - (modifier == EXPAND_STACK_PARM - ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL)); - else - emit_move_insn (new_with_op0_mode, op0); + /* Nor can the insn generator. */ + insn = GEN_FCN (icode) (reg, op0); + emit_insn (insn); + return reg; + } + else if (STRICT_ALIGNMENT) + { + tree inner_type = TREE_TYPE (treeop0); + HOST_WIDE_INT temp_size + = MAX (int_size_in_bytes (inner_type), + (HOST_WIDE_INT) GET_MODE_SIZE (mode)); + rtx new_rtx + = assign_stack_temp_for_type (mode, temp_size, type); + rtx new_with_op0_mode + = adjust_address (new_rtx, GET_MODE (op0), 0); - op0 = new_rtx; + gcc_assert (!TREE_ADDRESSABLE (exp)); + + if (GET_MODE (op0) == BLKmode) + emit_block_move (new_with_op0_mode, op0, + GEN_INT (GET_MODE_SIZE (mode)), + (modifier == EXPAND_STACK_PARM + ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL)); + else + emit_move_insn (new_with_op0_mode, op0); + + op0 = new_rtx; + } } op0 = adjust_address (op0, mode, 0); @@ -10550,7 +10523,7 @@ /* WITH_SIZE_EXPR expands to its first argument. The caller should have pulled out the size to use in whatever context it needed. */ return expand_expr_real (treeop0, original_target, tmode, - modifier, alt_rtl); + modifier, alt_rtl, inner_reference_p); default: return expand_expr_real_2 (&ops, target, tmode, modifier); Index: gcc/expr.h =================================================================== --- gcc/expr.h (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/expr.h (.../branches/gcc-4_8-branch) (revision 220382) @@ -41,7 +41,8 @@ is a constant that is not a legitimate address. EXPAND_WRITE means we are only going to write to the resulting rtx. EXPAND_MEMORY means we are interested in a memory result, even if - the memory is constant and we could have propagated a constant value. */ + the memory is constant and we could have propagated a constant value, + or the memory is unaligned on a STRICT_ALIGNMENT target. */ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM, EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER, EXPAND_WRITE, EXPAND_MEMORY}; @@ -428,9 +429,9 @@ /* Work horses for expand_expr. */ extern rtx expand_expr_real (tree, rtx, enum machine_mode, - enum expand_modifier, rtx *); + enum expand_modifier, rtx *, bool); extern rtx expand_expr_real_1 (tree, rtx, enum machine_mode, - enum expand_modifier, rtx *); + enum expand_modifier, rtx *, bool); extern rtx expand_expr_real_2 (sepops, rtx, enum machine_mode, enum expand_modifier); @@ -441,13 +442,13 @@ expand_expr (tree exp, rtx target, enum machine_mode mode, enum expand_modifier modifier) { - return expand_expr_real (exp, target, mode, modifier, NULL); + return expand_expr_real (exp, target, mode, modifier, NULL, false); } static inline rtx expand_normal (tree exp) { - return expand_expr_real (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL, NULL); + return expand_expr_real (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL, NULL, false); } /* At the start of a function, record that we have no previously-pushed Index: gcc/fortran/interface.c =================================================================== --- gcc/fortran/interface.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/fortran/interface.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -3557,6 +3557,8 @@ gfc_user_op *uop; gfc_intrinsic_op i; const char *gname; + gfc_typebound_proc* tbo; + gfc_expr* tb_base; sym = NULL; @@ -3573,8 +3575,50 @@ i = fold_unary_intrinsic (e->value.op.op); + /* See if we find a matching type-bound operator. */ if (i == INTRINSIC_USER) + tbo = matching_typebound_op (&tb_base, actual, + i, e->value.op.uop->name, &gname); + else + switch (i) + { +#define CHECK_OS_COMPARISON(comp) \ + case INTRINSIC_##comp: \ + case INTRINSIC_##comp##_OS: \ + tbo = matching_typebound_op (&tb_base, actual, \ + INTRINSIC_##comp, NULL, &gname); \ + if (!tbo) \ + tbo = matching_typebound_op (&tb_base, actual, \ + INTRINSIC_##comp##_OS, NULL, &gname); \ + break; + CHECK_OS_COMPARISON(EQ) + CHECK_OS_COMPARISON(NE) + CHECK_OS_COMPARISON(GT) + CHECK_OS_COMPARISON(GE) + CHECK_OS_COMPARISON(LT) + CHECK_OS_COMPARISON(LE) +#undef CHECK_OS_COMPARISON + + default: + tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname); + break; + } + + /* If there is a matching typebound-operator, replace the expression with + a call to it and succeed. */ + if (tbo) { + gcc_assert (tb_base); + build_compcall_for_operator (e, actual, tb_base, tbo, gname); + + if (gfc_resolve_expr (e) == FAILURE) + return MATCH_ERROR; + else + return MATCH_YES; + } + + if (i == INTRINSIC_USER) + { for (ns = gfc_current_ns; ns; ns = ns->parent) { uop = gfc_find_uop (e->value.op.uop->name, ns); @@ -3623,54 +3667,6 @@ if (sym == NULL) { - gfc_typebound_proc* tbo; - gfc_expr* tb_base; - - /* See if we find a matching type-bound operator. */ - if (i == INTRINSIC_USER) - tbo = matching_typebound_op (&tb_base, actual, - i, e->value.op.uop->name, &gname); - else - switch (i) - { -#define CHECK_OS_COMPARISON(comp) \ - case INTRINSIC_##comp: \ - case INTRINSIC_##comp##_OS: \ - tbo = matching_typebound_op (&tb_base, actual, \ - INTRINSIC_##comp, NULL, &gname); \ - if (!tbo) \ - tbo = matching_typebound_op (&tb_base, actual, \ - INTRINSIC_##comp##_OS, NULL, &gname); \ - break; - CHECK_OS_COMPARISON(EQ) - CHECK_OS_COMPARISON(NE) - CHECK_OS_COMPARISON(GT) - CHECK_OS_COMPARISON(GE) - CHECK_OS_COMPARISON(LT) - CHECK_OS_COMPARISON(LE) -#undef CHECK_OS_COMPARISON - - default: - tbo = matching_typebound_op (&tb_base, actual, i, NULL, &gname); - break; - } - - /* If there is a matching typebound-operator, replace the expression with - a call to it and succeed. */ - if (tbo) - { - gfc_try result; - - gcc_assert (tb_base); - build_compcall_for_operator (e, actual, tb_base, tbo, gname); - - result = gfc_resolve_expr (e); - if (result == FAILURE) - return MATCH_ERROR; - - return MATCH_YES; - } - /* Don't use gfc_free_actual_arglist(). */ free (actual->next); free (actual); Index: gcc/fortran/trans-array.c =================================================================== --- gcc/fortran/trans-array.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/fortran/trans-array.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -4299,11 +4299,20 @@ for (ss = rss; ss != gfc_ss_terminator; ss = ss->next) { - if (ss->info->type != GFC_SS_SECTION) - continue; ss_expr = ss->info->expr; + if (ss->info->type != GFC_SS_SECTION) + { + /* Check for cases like c(:)(1:2) = c(2)(2:3) */ + if (!nDepend && dest_expr->rank > 0 + && dest_expr->ts.type == BT_CHARACTER + && ss_expr->expr_type == EXPR_VARIABLE) + + nDepend = gfc_check_dependency (dest_expr, ss_expr, false); + continue; + } + if (dest_expr->symtree->n.sym != ss_expr->symtree->n.sym) { if (gfc_could_be_alias (dest, ss) Index: gcc/fortran/ChangeLog =================================================================== --- gcc/fortran/ChangeLog (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch) (revision 220382) @@ -1,3 +1,42 @@ +2015-02-01 Jakub Jelinek + + Backported from mainline + 2015-01-13 Jakub Jelinek + + PR fortran/64528 + * trans-decl.c (create_function_arglist): Don't set TREE_READONLY + on dummy args with VALUE attribute. + +2015-01-24 Thomas Koenig + + PR fortran/56867 + * trans-array.c (gfc_conv_resolve_dependencies): Also check + dependencies when there may be substrings of character arrays. + +2015-01-24 Thomas Koenig + + Backport from trunk + PR fortran/57023 + * dependency.c (callback_dummy_intent_not_int): New function. + (dummy_intent_not_in): New function. + (gfc_full_array_ref_p): Use dummy_intent_not_in. + +2015-01-12 Janus Weil + + Backport from mainline + PR fortran/63733 + * interface.c (gfc_extend_expr): Look for type-bound operators before + non-typebound ones. + +2014-12-23 Janus Weil + + Backport from mainline + PR fortran/64244 + * resolve.c (resolve_typebound_call): New argument to pass out the + non-overridable attribute of the specific procedure. + (resolve_typebound_subroutine): Get overridable flag from + resolve_typebound_call. + 2014-12-19 Release Manager * GCC 4.8.4 released. Index: gcc/fortran/resolve.c =================================================================== --- gcc/fortran/resolve.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/fortran/resolve.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -6048,7 +6048,7 @@ /* Resolve a call to a type-bound subroutine. */ static gfc_try -resolve_typebound_call (gfc_code* c, const char **name) +resolve_typebound_call (gfc_code* c, const char **name, bool *overridable) { gfc_actual_arglist* newactual; gfc_symtree* target; @@ -6072,6 +6072,10 @@ if (resolve_typebound_generic_call (c->expr1, name) == FAILURE) return FAILURE; + /* Pass along the NON_OVERRIDABLE attribute of the specific TBP. */ + if (overridable) + *overridable = !c->expr1->value.compcall.tbp->non_overridable; + /* Transform into an ordinary EXEC_CALL for now. */ if (resolve_typebound_static (c->expr1, &target, &newactual) == FAILURE) @@ -6324,7 +6328,7 @@ if (c->ts.u.derived == NULL) c->ts.u.derived = gfc_find_derived_vtab (declared); - if (resolve_typebound_call (code, &name) == FAILURE) + if (resolve_typebound_call (code, &name, NULL) == FAILURE) return FAILURE; /* Use the generic name if it is there. */ @@ -6356,7 +6360,7 @@ } if (st == NULL) - return resolve_typebound_call (code, NULL); + return resolve_typebound_call (code, NULL, NULL); if (resolve_ref (code->expr1) == FAILURE) return FAILURE; @@ -6369,10 +6373,10 @@ || (!class_ref && st->n.sym->ts.type != BT_CLASS)) { gfc_free_ref_list (new_ref); - return resolve_typebound_call (code, NULL); + return resolve_typebound_call (code, NULL, NULL); } - if (resolve_typebound_call (code, &name) == FAILURE) + if (resolve_typebound_call (code, &name, &overridable) == FAILURE) { gfc_free_ref_list (new_ref); return FAILURE; Index: gcc/fortran/trans-decl.c =================================================================== --- gcc/fortran/trans-decl.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/fortran/trans-decl.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -2186,8 +2186,9 @@ /* Fill in arg stuff. */ DECL_CONTEXT (parm) = fndecl; DECL_ARG_TYPE (parm) = TREE_VALUE (typelist); - /* All implementation args are read-only. */ - TREE_READONLY (parm) = 1; + /* All implementation args except for VALUE are read-only. */ + if (!f->sym->attr.value) + TREE_READONLY (parm) = 1; if (POINTER_TYPE_P (type) && (!f->sym->attr.proc_pointer && f->sym->attr.flavor != FL_PROCEDURE)) Index: gcc/fortran/dependency.c =================================================================== --- gcc/fortran/dependency.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/fortran/dependency.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -1604,11 +1604,40 @@ return GFC_DEP_EQUAL; } +/* Callback function for checking if an expression depends on a + dummy variable which is any other than INTENT(IN). */ +static int +callback_dummy_intent_not_in (gfc_expr **ep, + int *walk_subtrees ATTRIBUTE_UNUSED, + void *data ATTRIBUTE_UNUSED) +{ + gfc_expr *e = *ep; + + if (e->expr_type == EXPR_VARIABLE && e->symtree + && e->symtree->n.sym->attr.dummy) + return e->symtree->n.sym->attr.intent != INTENT_IN; + else + return 0; +} + +/* Auxiliary function to check if subexpressions have dummy variables which + are not intent(in). +*/ + +static bool +dummy_intent_not_in (gfc_expr **ep) +{ + return gfc_expr_walker (ep, callback_dummy_intent_not_in, NULL); +} + /* Determine if an array ref, usually an array section specifies the entire array. In addition, if the second, pointer argument is provided, the function will return true if the reference is - contiguous; eg. (:, 1) gives true but (1,:) gives false. */ + contiguous; eg. (:, 1) gives true but (1,:) gives false. + If one of the bounds depends on a dummy variable which is + not INTENT(IN), also return false, because the user may + have changed the variable. */ bool gfc_full_array_ref_p (gfc_ref *ref, bool *contiguous) @@ -1672,7 +1701,8 @@ && (!ref->u.ar.as || !ref->u.ar.as->lower[i] || gfc_dep_compare_expr (ref->u.ar.start[i], - ref->u.ar.as->lower[i]))) + ref->u.ar.as->lower[i]) + || dummy_intent_not_in (&ref->u.ar.start[i]))) lbound_OK = false; /* Check the upper bound. */ if (ref->u.ar.end[i] @@ -1679,7 +1709,8 @@ && (!ref->u.ar.as || !ref->u.ar.as->upper[i] || gfc_dep_compare_expr (ref->u.ar.end[i], - ref->u.ar.as->upper[i]))) + ref->u.ar.as->upper[i]) + || dummy_intent_not_in (&ref->u.ar.end[i]))) ubound_OK = false; /* Check the stride. */ if (ref->u.ar.stride[i] Index: gcc/alias.c =================================================================== --- gcc/alias.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/alias.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -380,17 +380,9 @@ static inline int mems_in_disjoint_alias_sets_p (const_rtx mem1, const_rtx mem2) { -/* Perform a basic sanity check. Namely, that there are no alias sets - if we're not using strict aliasing. This helps to catch bugs - whereby someone uses PUT_CODE, but doesn't clear MEM_ALIAS_SET, or - where a MEM is allocated in some way other than by the use of - gen_rtx_MEM, and the MEM_ALIAS_SET is not cleared. If we begin to - use alias sets to indicate that spilled registers cannot alias each - other, we might need to remove this check. */ - gcc_assert (flag_strict_aliasing - || (!MEM_ALIAS_SET (mem1) && !MEM_ALIAS_SET (mem2))); - - return ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), MEM_ALIAS_SET (mem2)); + return (flag_strict_aliasing + && ! alias_sets_conflict_p (MEM_ALIAS_SET (mem1), + MEM_ALIAS_SET (mem2))); } /* Insert the NODE into the splay tree given by DATA. Used by Index: gcc/cfgexpand.c =================================================================== --- gcc/cfgexpand.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/cfgexpand.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -2111,7 +2111,7 @@ if (lhs) expand_assignment (lhs, exp, false); else - expand_expr_real_1 (exp, const0_rtx, VOIDmode, EXPAND_NORMAL, NULL); + expand_expr (exp, const0_rtx, VOIDmode, EXPAND_NORMAL); mark_transaction_restart_calls (stmt); } Index: gcc/combine.c =================================================================== --- gcc/combine.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/combine.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -1527,8 +1527,8 @@ uns3 = TYPE_UNSIGNED (DECL_ARG_TYPE (arg)); /* The mode and signedness of the argument as it is actually passed, - after any TARGET_PROMOTE_FUNCTION_ARGS-driven ABI promotions. */ - mode3 = promote_function_mode (DECL_ARG_TYPE (arg), mode2, &uns3, + see assign_parm_setup_reg in function.c. */ + mode3 = promote_function_mode (TREE_TYPE (arg), mode1, &uns3, TREE_TYPE (cfun->decl), 0); /* The mode of the register in which the argument is being passed. */ Index: gcc/config/i386/i386.md =================================================================== --- gcc/config/i386/i386.md (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/i386/i386.md (.../branches/gcc-4_8-branch) (revision 220382) @@ -1945,7 +1945,8 @@ (const_string "ssemov") (eq_attr "alternative" "15,16") (const_string "ssecvt") - (match_operand 1 "pic_32bit_operand") + (and (match_operand 0 "register_operand") + (match_operand 1 "pic_32bit_operand")) (const_string "lea") ] (const_string "imov"))) @@ -2171,7 +2172,8 @@ (const_string "sselog1") (eq_attr "alternative" "7,8,9,10,11") (const_string "ssemov") - (match_operand 1 "pic_32bit_operand") + (and (match_operand 0 "register_operand") + (match_operand 1 "pic_32bit_operand")) (const_string "lea") ] (const_string "imov"))) Index: gcc/config/i386/avx2intrin.h =================================================================== --- gcc/config/i386/avx2intrin.h (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/i386/avx2intrin.h (.../branches/gcc-4_8-branch) (revision 220382) @@ -639,11 +639,20 @@ #ifdef __OPTIMIZE__ extern __inline __m256i __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +_mm256_bslli_epi128 (__m256i __A, const int __N) +{ + return (__m256i)__builtin_ia32_pslldqi256 (__A, __N * 8); +} + +extern __inline __m256i +__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm256_slli_si256 (__m256i __A, const int __N) { return (__m256i)__builtin_ia32_pslldqi256 (__A, __N * 8); } #else +#define _mm256_bslli_epi128(A, N) \ + ((__m256i)__builtin_ia32_pslldqi256 ((__m256i)(A), (int)(N) * 8)) #define _mm256_slli_si256(A, N) \ ((__m256i)__builtin_ia32_pslldqi256 ((__m256i)(A), (int)(N) * 8)) #endif @@ -721,11 +730,20 @@ #ifdef __OPTIMIZE__ extern __inline __m256i __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +_mm256_bsrli_epi128 (__m256i __A, const int __N) +{ + return (__m256i)__builtin_ia32_psrldqi256 (__A, __N * 8); +} + +extern __inline __m256i +__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm256_srli_si256 (__m256i __A, const int __N) { return (__m256i)__builtin_ia32_psrldqi256 (__A, __N * 8); } #else +#define _mm256_bsrli_epi128(A, N) \ + ((__m256i)__builtin_ia32_psrldqi256 ((__m256i)(A), (int)(N) * 8)) #define _mm256_srli_si256(A, N) \ ((__m256i)__builtin_ia32_psrldqi256 ((__m256i)(A), (int)(N) * 8)) #endif Index: gcc/config/i386/sse.md =================================================================== --- gcc/config/i386/sse.md (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/i386/sse.md (.../branches/gcc-4_8-branch) (revision 220382) @@ -7369,7 +7369,7 @@ movss\t{%2, %0|%0, %2} movss\t{%2, %0|%0, %2} vmovss\t{%2, %1, %0|%0, %1, %2}" - [(set_attr "isa" "sse2,*,noavx,noavx,avx") + [(set_attr "isa" "sse2,sse2,noavx,noavx,avx") (set_attr "type" "ssemov") (set_attr "prefix" "maybe_vex,maybe_vex,orig,orig,vex") (set_attr "mode" "TI,TI,V4SF,SF,SF")]) Index: gcc/config/i386/emmintrin.h =================================================================== --- gcc/config/i386/emmintrin.h (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/i386/emmintrin.h (.../branches/gcc-4_8-branch) (revision 220382) @@ -1143,6 +1143,18 @@ #ifdef __OPTIMIZE__ extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_bsrli_si128 (__m128i __A, const int __N) +{ + return (__m128i)__builtin_ia32_psrldqi128 (__A, __N * 8); +} + +extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_bslli_si128 (__m128i __A, const int __N) +{ + return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8); +} + +extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm_srli_si128 (__m128i __A, const int __N) { return (__m128i)__builtin_ia32_psrldqi128 (__A, __N * 8); @@ -1154,6 +1166,10 @@ return (__m128i)__builtin_ia32_pslldqi128 (__A, __N * 8); } #else +#define _mm_bsrli_si128(A, N) \ + ((__m128i)__builtin_ia32_psrldqi128 ((__m128i)(A), (int)(N) * 8)) +#define _mm_bslli_si128(A, N) \ + ((__m128i)__builtin_ia32_pslldqi128 ((__m128i)(A), (int)(N) * 8)) #define _mm_srli_si128(A, N) \ ((__m128i)__builtin_ia32_psrldqi128 ((__m128i)(A), (int)(N) * 8)) #define _mm_slli_si128(A, N) \ Index: gcc/config/i386/i386.c =================================================================== --- gcc/config/i386/i386.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/i386/i386.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -5539,7 +5539,18 @@ if (abi == SYSV_ABI) { if (lookup_attribute ("ms_abi", TYPE_ATTRIBUTES (fntype))) - abi = MS_ABI; + { + if (TARGET_X32) + { + static bool warned = false; + if (!warned) + { + error ("X32 does not support ms_abi attribute"); + warned = true; + } + } + abi = MS_ABI; + } } else if (lookup_attribute ("sysv_abi", TYPE_ATTRIBUTES (fntype))) abi = SYSV_ABI; @@ -10483,6 +10494,10 @@ if (sp_is_cfa_reg) m->fs.cfa_offset += UNITS_PER_WORD; RTX_FRAME_RELATED_P (insn) = 1; + add_reg_note (insn, REG_FRAME_RELATED_EXPR, + gen_rtx_SET (VOIDmode, stack_pointer_rtx, + plus_constant (Pmode, stack_pointer_rtx, + -UNITS_PER_WORD))); } } @@ -10496,6 +10511,10 @@ if (sp_is_cfa_reg) m->fs.cfa_offset += UNITS_PER_WORD; RTX_FRAME_RELATED_P (insn) = 1; + add_reg_note (insn, REG_FRAME_RELATED_EXPR, + gen_rtx_SET (VOIDmode, stack_pointer_rtx, + plus_constant (Pmode, stack_pointer_rtx, + -UNITS_PER_WORD))); } } Index: gcc/config/rs6000/rs6000-cpus.def =================================================================== --- gcc/config/rs6000/rs6000-cpus.def (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/rs6000/rs6000-cpus.def (.../branches/gcc-4_8-branch) (revision 220382) @@ -91,6 +91,7 @@ | OPTION_MASK_PPC_GFXOPT \ | OPTION_MASK_PPC_GPOPT \ | OPTION_MASK_QUAD_MEMORY \ + | OPTION_MASK_QUAD_MEMORY_ATOMIC \ | OPTION_MASK_RECIP_PRECISION \ | OPTION_MASK_SOFT_FLOAT \ | OPTION_MASK_STRICT_ALIGN_OPTIONAL \ Index: gcc/config/rs6000/rs6000.c =================================================================== --- gcc/config/rs6000/rs6000.c (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/rs6000/rs6000.c (.../branches/gcc-4_8-branch) (revision 220382) @@ -32628,6 +32628,14 @@ if (complement_op2_p) op2 = gen_rtx_NOT (mode, op2); + /* For canonical RTL, if only one arm is inverted it is the first. */ + if (!complement_op1_p && complement_op2_p) + { + rtx temp = op1; + op1 = op2; + op2 = temp; + } + bool_rtx = ((code == NOT) ? gen_rtx_NOT (mode, op1) : gen_rtx_fmt_ee (code, mode, op1, op2)); Index: gcc/config/rs6000/rs6000.md =================================================================== --- gcc/config/rs6000/rs6000.md (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/rs6000/rs6000.md (.../branches/gcc-4_8-branch) (revision 220382) @@ -8622,8 +8622,8 @@ [(set (match_operand:BOOL_128 0 "vlogical_operand" "=") (match_operator:BOOL_128 3 "boolean_operator" [(not:BOOL_128 - (match_operand:BOOL_128 2 "vlogical_operand" "")) - (match_operand:BOOL_128 1 "vlogical_operand" "")]))] + (match_operand:BOOL_128 2 "vlogical_operand" "")) + (match_operand:BOOL_128 1 "vlogical_operand" "")]))] "TARGET_P8_VECTOR || (GET_CODE (operands[3]) == AND)" { if (TARGET_VSX && vsx_register_operand (operands[0], mode)) @@ -8638,7 +8638,7 @@ && reload_completed && int_reg_operand (operands[0], mode)" [(const_int 0)] { - rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, false, + rs6000_split_logical (operands, GET_CODE (operands[3]), false, false, true, NULL_RTX); DONE; } @@ -8660,14 +8660,14 @@ [(set (match_operand:TI2 0 "int_reg_operand" "=&r,r,r") (match_operator:TI2 3 "boolean_operator" [(not:TI2 - (match_operand:TI2 1 "int_reg_operand" "r,0,r")) - (match_operand:TI2 2 "int_reg_operand" "r,r,0")]))] + (match_operand:TI2 2 "int_reg_operand" "r,0,r")) + (match_operand:TI2 1 "int_reg_operand" "r,r,0")]))] "!TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)" "#" "reload_completed && !TARGET_P8_VECTOR && (GET_CODE (operands[3]) != AND)" [(const_int 0)] { - rs6000_split_logical (operands, GET_CODE (operands[3]), false, true, false, + rs6000_split_logical (operands, GET_CODE (operands[3]), false, false, true, NULL_RTX); DONE; } Index: gcc/config/arm/arm.h =================================================================== --- gcc/config/arm/arm.h (.../tags/gcc_4_8_4_release) (revision 220382) +++ gcc/config/arm/arm.h (.../branches/gcc-4_8-branch) (revision 220382) @@ -63,8 +63,8 @@ builtin_define_with_int_value ( \ "__ARM_SIZEOF_MINIMAL_ENUM", \ flag_short_enums ? 1 : 4); \ - builtin_define_with_int_value ( \ - "__ARM_SIZEOF_WCHAR_T", WCHAR_TYPE_SIZE); \ + builtin_define_type_sizeof ("__ARM_SIZEOF_WCHAR_T", \ + wchar_type_node); \ if (TARGET_ARM_ARCH_PROFILE) \ builtin_define_with_int_value ( \ "__ARM_ARCH_PROFILE", TARGET_ARM_ARCH_PROFILE); \