X-Git-Url: https://git.tld-linux.org/?a=blobdiff_plain;f=gcc-branch.diff;h=265c185214edc977d3aeacfd24d96ac999184960;hb=ad034c64fd98571e2b70381c0819c0be23d58dba;hp=b4a3e1fb33b205f95eec477b91611e4bf036acdb;hpb=0aa44b64cfb27293f860da99feaf3b2aa8e5f8f2;p=packages%2Fgcc.git diff --git a/gcc-branch.diff b/gcc-branch.diff index b4a3e1f..265c185 100644 --- a/gcc-branch.diff +++ b/gcc-branch.diff @@ -1,132 +1,2685 @@ -Index: libgcc/ChangeLog -=================================================================== ---- libgcc/ChangeLog (.../tags/gcc_4_7_3_release) (revision 197943) -+++ libgcc/ChangeLog (.../branches/gcc-4_7-branch) (revision 197943) -@@ -1,3 +1,10 @@ -+2013-04-11 Julian Brown -+ -+ * config/arm/linux-atomic.c (SUBWORD_SYNC_OP, SUBWORD_VAL_CAS) -+ (SUBWORD_TEST_AND_SET): Use signed char/short types instead of -+ unsigned char/unsigned short. -+ (__sync_val_compare_and_swap_{1,2}): Handle signed argument. -+ - 2013-04-11 Release Manager - - * GCC 4.7.3 released. -Index: libgcc/config/arm/linux-atomic.c -=================================================================== ---- libgcc/config/arm/linux-atomic.c (.../tags/gcc_4_7_3_release) (revision 197943) -+++ libgcc/config/arm/linux-atomic.c (.../branches/gcc-4_7-branch) (revision 197943) -@@ -97,19 +97,19 @@ - return (RETURN & mask) >> shift; \ - } - --SUBWORD_SYNC_OP (add, , +, unsigned short, 2, oldval) --SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, oldval) --SUBWORD_SYNC_OP (or, , |, unsigned short, 2, oldval) --SUBWORD_SYNC_OP (and, , &, unsigned short, 2, oldval) --SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, oldval) --SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, oldval) -+SUBWORD_SYNC_OP (add, , +, short, 2, oldval) -+SUBWORD_SYNC_OP (sub, , -, short, 2, oldval) -+SUBWORD_SYNC_OP (or, , |, short, 2, oldval) -+SUBWORD_SYNC_OP (and, , &, short, 2, oldval) -+SUBWORD_SYNC_OP (xor, , ^, short, 2, oldval) -+SUBWORD_SYNC_OP (nand, ~, &, short, 2, oldval) - --SUBWORD_SYNC_OP (add, , +, unsigned char, 1, oldval) --SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, oldval) --SUBWORD_SYNC_OP (or, , |, unsigned char, 1, oldval) --SUBWORD_SYNC_OP (and, , &, unsigned char, 1, oldval) --SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, oldval) --SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, oldval) -+SUBWORD_SYNC_OP (add, , +, signed char, 1, oldval) -+SUBWORD_SYNC_OP (sub, , -, signed char, 1, oldval) -+SUBWORD_SYNC_OP (or, , |, signed char, 1, oldval) -+SUBWORD_SYNC_OP (and, , &, signed char, 1, oldval) -+SUBWORD_SYNC_OP (xor, , ^, signed char, 1, oldval) -+SUBWORD_SYNC_OP (nand, ~, &, signed char, 1, oldval) - - #define OP_AND_FETCH_WORD(OP, PFX_OP, INF_OP) \ - int HIDDEN \ -@@ -132,19 +132,19 @@ - OP_AND_FETCH_WORD (xor, , ^) - OP_AND_FETCH_WORD (nand, ~, &) - --SUBWORD_SYNC_OP (add, , +, unsigned short, 2, newval) --SUBWORD_SYNC_OP (sub, , -, unsigned short, 2, newval) --SUBWORD_SYNC_OP (or, , |, unsigned short, 2, newval) --SUBWORD_SYNC_OP (and, , &, unsigned short, 2, newval) --SUBWORD_SYNC_OP (xor, , ^, unsigned short, 2, newval) --SUBWORD_SYNC_OP (nand, ~, &, unsigned short, 2, newval) -+SUBWORD_SYNC_OP (add, , +, short, 2, newval) -+SUBWORD_SYNC_OP (sub, , -, short, 2, newval) -+SUBWORD_SYNC_OP (or, , |, short, 2, newval) -+SUBWORD_SYNC_OP (and, , &, short, 2, newval) -+SUBWORD_SYNC_OP (xor, , ^, short, 2, newval) -+SUBWORD_SYNC_OP (nand, ~, &, short, 2, newval) - --SUBWORD_SYNC_OP (add, , +, unsigned char, 1, newval) --SUBWORD_SYNC_OP (sub, , -, unsigned char, 1, newval) --SUBWORD_SYNC_OP (or, , |, unsigned char, 1, newval) --SUBWORD_SYNC_OP (and, , &, unsigned char, 1, newval) --SUBWORD_SYNC_OP (xor, , ^, unsigned char, 1, newval) --SUBWORD_SYNC_OP (nand, ~, &, unsigned char, 1, newval) -+SUBWORD_SYNC_OP (add, , +, signed char, 1, newval) -+SUBWORD_SYNC_OP (sub, , -, signed char, 1, newval) -+SUBWORD_SYNC_OP (or, , |, signed char, 1, newval) -+SUBWORD_SYNC_OP (and, , &, signed char, 1, newval) -+SUBWORD_SYNC_OP (xor, , ^, signed char, 1, newval) -+SUBWORD_SYNC_OP (nand, ~, &, signed char, 1, newval) - - int HIDDEN - __sync_val_compare_and_swap_4 (int *ptr, int oldval, int newval) -@@ -181,7 +181,7 @@ - actual_oldval = *wordptr; \ - \ - if (__builtin_expect (((actual_oldval & mask) >> shift) != \ -- (unsigned int) oldval, 0)) \ -+ ((unsigned int) oldval & MASK_##WIDTH), 0)) \ - return (actual_oldval & mask) >> shift; \ - \ - actual_newval = (actual_oldval & ~mask) \ -@@ -195,8 +195,8 @@ - } \ - } - --SUBWORD_VAL_CAS (unsigned short, 2) --SUBWORD_VAL_CAS (unsigned char, 1) -+SUBWORD_VAL_CAS (short, 2) -+SUBWORD_VAL_CAS (signed char, 1) - - typedef unsigned char bool; - -@@ -217,8 +217,8 @@ - return (oldval == actual_oldval); \ - } - --SUBWORD_BOOL_CAS (unsigned short, 2) --SUBWORD_BOOL_CAS (unsigned char, 1) -+SUBWORD_BOOL_CAS (short, 2) -+SUBWORD_BOOL_CAS (signed char, 1) - - void HIDDEN - __sync_synchronize (void) -@@ -260,8 +260,8 @@ - return (oldval & mask) >> shift; \ - } - --SUBWORD_TEST_AND_SET (unsigned short, 2) --SUBWORD_TEST_AND_SET (unsigned char, 1) -+SUBWORD_TEST_AND_SET (short, 2) -+SUBWORD_TEST_AND_SET (signed char, 1) - - #define SYNC_LOCK_RELEASE(TYPE, WIDTH) \ - void HIDDEN \ +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_7_3_release) (revision 197943) -+++ gcc/DATESTAMP (.../branches/gcc-4_7-branch) (revision 197943) +--- gcc/DATESTAMP (.../tags/gcc_4_8_4_release) (revision 220382) ++++ gcc/DATESTAMP (.../branches/gcc-4_8-branch) (revision 220382) @@ -1 +1 @@ --20130411 -+20130413 +-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); \