X-Git-Url: https://git.tld-linux.org/?a=blobdiff_plain;f=gcc-branch.diff;h=265c185214edc977d3aeacfd24d96ac999184960;hb=ad034c64fd98571e2b70381c0819c0be23d58dba;hp=bc5227dc41ae21ee3208107c68249839cfae095f;hpb=7a6e13b7c210dd35129541d43a2c7f6ef6869c4a;p=packages%2Fgcc.git diff --git a/gcc-branch.diff b/gcc-branch.diff index bc5227d..265c185 100644 --- a/gcc-branch.diff +++ b/gcc-branch.diff @@ -1,1272 +1,2685 @@ -Index: gcc/targhooks.c -=================================================================== ---- gcc/targhooks.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/targhooks.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -529,6 +529,7 @@ - case scalar_to_vec: - case cond_branch_not_taken: - case vec_perm: -+ case vec_promote_demote: - return 1; - - case unaligned_load: +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_6_3_release) (wersja 185440) -+++ gcc/DATESTAMP (.../branches/gcc-4_6-branch) (wersja 185440) +--- gcc/DATESTAMP (.../tags/gcc_4_8_4_release) (revision 220382) ++++ gcc/DATESTAMP (.../branches/gcc-4_8-branch) (revision 220382) @@ -1 +1 @@ --20120301 -+20120315 -Index: gcc/target.h -=================================================================== ---- gcc/target.h (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/target.h (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -128,7 +128,8 @@ - scalar_to_vec, - cond_branch_not_taken, - cond_branch_taken, -- vec_perm -+ vec_perm, -+ vec_promote_demote - }; - - /* Sets of optimization levels at which an option may be enabled by +-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_6_3_release) (wersja 185440) -+++ gcc/DEV-PHASE (.../branches/gcc-4_6-branch) (wersja 185440) +--- 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_6_3_release) (wersja 185440) -+++ gcc/ChangeLog (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1,3 +1,101 @@ -+2012-03-15 Chung-Lin Tang +--- 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 + -+ Backport from mainline -+ 2012-03-10 Chung-Lin Tang ++ 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 rtl-optimization/52528 -+ * combine.c (can_combine_p): Add setting of subst_low_luid -+ before call to expand_field_assignment(). ++ PR tree-optimization/64563 ++ * tree-vrp.c (vrp_evaluate_conditional): Check for VR_RANGE ++ instead of != VR_VARYING. + -+2012-03-12 John David Anglin ++ 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 -+ 2011-09-03 John David Anglin + -+ PR Bug middle-end/50232 -+ * config/pa/pa.md (return): Define "return" insn pattern. -+ (epilogue): Use it when no epilogue is needed. -+ * config/pa/pa.c (pa_can_use_return_insn): New function. -+ * config/pa/pa-protos.h (pa_can_use_return_insn): Declare. ++ 2013-09-20 Bernd Edlinger ++ ++ PR middle-end/57748 ++ * expr.c (expand_assignment): Remove misalignp code path. + -+ Backport for mainline -+ 2012-01-28 John David Anglin ++ 2014-01-08 Bernd Edlinger + -+ PR target/51871 -+ * config/pa/pa.c (pa_return_addr_rtx): Add support for PA2.0 export -+ stubs. ++ 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. + -+2012-03-06 Michael Meissner ++2015-01-26 Uros Bizjak + + Backport from mainline -+ PR target/50310 -+ * config/rs6000/vector.md (vector_uneq): Add support for -+ UNEQ, LTGT, ORDERED, and UNORDERED IEEE vector comparisons. -+ (vector_ltgt): Likewise. -+ (vector_ordered): Likewise. -+ (vector_unordered): Likewise. -+ * config/rs6000/rs6000.c (rs6000_emit_vector_compare_inner): -+ Likewise. ++ 2015-01-26 Uros Bizjak + -+2012-03-04 John David Anglin ++ PR target/64795 ++ * config/i386/i386.md (*movdi_internal): Also check operand 0 ++ to determine TYPE_LEA operand. ++ (*movsi_internal): Ditto. + + Backport from mainline -+ 2012-03-01 John David Anglin ++ 2015-01-23 Uros Bizjak + -+ PR target/52408 -+ * config/pa/pa.md (zvdep_imm32): Change type of variable x from int to -+ unsigned HOST_WIDE_INT. -+ (zvdep_imm64): Likewise. -+ (vdepi_ior): Change type of variable x from int to HOST_WIDE_INT. -+ (vdepi_and): Likewise. -+ Likewise for unamed 64-bit patterns. -+ * config/pa/predicates.md (lhs_lshift_cint_operand): Update comment. ++ * config/i386/sse.md (sse2_loadld): Set attribute isa to sse2 for ++ alternative 1. + -+2012-03-03 Eric Botcazou ++2015-01-15 Martin Liska + -+ PR target/52425 + Backport from mainline -+ 2011-05-22 Eric Botcazou ++ 2014-11-27 Richard Biener + -+ * config/sparc/sparc.c (sparc_delegitimize_address): Handle -+ UNSPEC_MOVE_PIC pattern. ++ PR middle-end/63704 ++ * alias.c (mems_in_disjoint_alias_sets_p): Remove assert ++ and instead return false when !fstrict-aliasing. + -+2012-03-02 Peter Bergner ++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 -+ 2012-03-02 Peter Bergner -+ -+ * config/rs6000/vsx.md (vsx_set_): Reorder operands. -+ -+2012-03-02 Bill Schmidt -+ Ira Rosen -+ -+ PR tree-optimization/50031 -+ PR tree-optimization/50969 -+ * targhooks.c (default_builtin_vectorization_cost): Handle -+ vec_promote_demote. -+ * target.h (enum vect_cost_for_stmt): Add vec_promote_demote. -+ * tree-vect-loop.c (vect_get_single_scalar_iteraion_cost): Handle -+ all types of reduction and pattern statements. -+ (vect_estimate_min_profitable_iters): Likewise. -+ * tree-vect-stmts.c (vect_model_promotion_demotion_cost): New function. -+ (vect_model_store_cost): Use vec_perm rather than vector_stmt for -+ statement cost. -+ (vect_model_load_cost): Likewise. -+ (vect_get_load_cost): Likewise; add dump logic for explicit realigns. -+ (vectorizable_type_demotion): Call vect_model_promotion_demotion_cost. -+ (vectorizable_type_promotion): Likewise. -+ * config/spu/spu.c (spu_builtin_vectorization_cost): Handle -+ vec_promote_demote. -+ * config/i386/i386.c (ix86_builtin_vectorization_cost): Likewise. -+ * config/rs6000/rs6000.c (rs6000_builtin_vectorization_cost): Update -+ vec_perm for VSX and handle vec_promote_demote. -+ -+2012-03-01 Jakub Jelinek -+ -+ * BASE-VER: Set to 4.6.4. -+ * DEV-PHASE: Set to prerelease. ++ 2014-12-20 Segher Boessenkool + - 2012-03-01 Release Manager - - * GCC 4.6.3 released. -Index: gcc/testsuite/gcc.target/powerpc/pr52457.c -=================================================================== ---- gcc/testsuite/gcc.target/powerpc/pr52457.c (.../tags/gcc_4_6_3_release) (wersja 0) -+++ gcc/testsuite/gcc.target/powerpc/pr52457.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -0,0 +1,34 @@ -+/* { dg-do run { target { powerpc*-*-linux* } } } */ -+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ -+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */ -+/* { dg-require-effective-target vsx_hw } */ -+/* { dg-options "-O1 -mcpu=power7" } */ ++ 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]. + -+extern void abort (void); ++2015-01-13 Oleg Endo + -+typedef long long T; -+typedef T vl_t __attribute__((vector_size(2 * sizeof (T)))); ++ Backport form mainline ++ 2015-01-13 Oleg Endo + -+vl_t -+buggy_func (T x) -+{ -+ vl_t w; -+ T *p = (T *)&w; -+ p[0] = p[1] = x; -+ return w; -+} ++ PR target/64479 ++ * rtlanal.c (set_reg_p): Handle SEQUENCE constructs. + -+int -+main(void) -+{ -+ vl_t rval; -+ T *pl; ++2014-12-27 H.J. Lu + -+ pl = (T *) &rval; -+ rval = buggy_func (2); ++ Backport from mainline: ++ 2014-12-27 H.J. Lu + -+ if (pl[0] != 2 || pl[1] != 2) -+ abort (); ++ PR target/64409 ++ * config/i386/i386.c (ix86_function_type_abi): Issue an error ++ when ms_abi attribute is used with x32. + -+ return 0; ++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/intrinsic_8.f90 +Index: gcc/testsuite/gfortran.dg/pr64528.f90 =================================================================== ---- gcc/testsuite/gfortran.dg/intrinsic_8.f90 (.../tags/gcc_4_6_3_release) (wersja 0) -+++ gcc/testsuite/gfortran.dg/intrinsic_8.f90 (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -0,0 +1,23 @@ +--- 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 fortran/52452 -+! -+! Contributed by Roger Ferrer Ibanez ++! PR 63733: [4.8/4.9/5 Regression] [OOP] wrong resolution for OPERATOR generics +! -+PROGRAM test_etime -+ IMPLICIT NONE -+ INTRINSIC :: etime -+ REAL(4) :: tarray(1:2) -+ REAL(4) :: result -+ -+ CALL etime(tarray, result) -+END PROGRAM test_etime -+ -+subroutine test_etime2 -+ IMPLICIT NONE -+ INTRINSIC :: etime -+ REAL(4) :: tarray(1:2) -+ REAL(4) :: result -+ -+ result = etime(tarray) -+END subroutine test_etime2 -Index: gcc/testsuite/gfortran.dg/proc_ptr_34.f90 -=================================================================== ---- gcc/testsuite/gfortran.dg/proc_ptr_34.f90 (.../tags/gcc_4_6_3_release) (wersja 0) -+++ gcc/testsuite/gfortran.dg/proc_ptr_34.f90 (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -0,0 +1,79 @@ ++! 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 fortran/52469 -+! -+! This was failing as the DECL of the proc pointer "func" -+! was used for the interface of the proc-pointer component "my_f_ptr" -+! rather than the decl of the proc-pointer target -+! -+! Contributed by palott@gmail.com ++! PR 64244: [4.8/4.9/5 Regression] ICE at class.c:236 when using non_overridable +! ++! Contributed by Ondřej Čertík + -+module ExampleFuncs ++module m + implicit none + -+ ! NOTE: "func" is a procedure pointer! -+ pointer :: func -+ interface -+ function func (z) -+ real :: func -+ real, intent (in) :: z -+ end function func -+ end interface ++ type :: A ++ contains ++ generic :: f => g ++ procedure, non_overridable :: g ++ end type + -+ type Contains_f_ptr -+ procedure (func), pointer, nopass :: my_f_ptr -+ end type Contains_f_ptr +contains + -+function f1 (x) -+ real :: f1 -+ real, intent (in) :: x ++ subroutine g(this) ++ class(A), intent(in) :: this ++ end subroutine + -+ f1 = 2.0 * x ++end module + -+ return -+end function f1 + -+function f2 (x) -+ real :: f2 -+ real, intent (in) :: x ++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 () ++{ ++} + -+ f2 = 3.0 * x**2 ++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 + -+ return -+end function f2 ++ Backported from mainline ++ 2015-01-27 Jakub Jelinek + -+function fancy (func, x) -+ real :: fancy -+ real, intent (in) :: x ++ PR rtl-optimization/61058 ++ * gcc.dg/pr61058.c: New test. + -+ interface AFunc -+ function func (y) -+ real :: func -+ real, intent (in) ::y -+ end function func -+ end interface AFunc ++ PR c/64766 ++ * gcc.dg/pr64766.c: New test. + -+ fancy = func (x) + 3.3 * x -+end function fancy ++ 2015-01-13 Jakub Jelinek + -+end module ExampleFuncs ++ PR fortran/64528 ++ * gfortran.dg/pr64528.f90: New test. + ++ 2015-01-12 Jakub Jelinek + -+program test_proc_ptr -+ use ExampleFuncs -+ implicit none ++ PR tree-optimization/64563 ++ * gcc.dg/pr64563.c: New test. + -+ type (Contains_f_ptr), dimension (2) :: NewType -+ -+ !NewType(1) % my_f_ptr => f1 -+ NewType(2) % my_f_ptr => f2 ++ PR target/64513 ++ * gcc.target/i386/pr64513.c: New test. + -+ !write (*, *) NewType(1) % my_f_ptr (3.0), NewType(2) % my_f_ptr (3.0) -+ write (6, *) NewType(2) % my_f_ptr (3.0) ! < Shall print '27.0' ++2015-01-29 Ilya Tocar + -+ stop -+end program test_proc_ptr ++ * gcc.target/i386/sse-14.c: Test new intrinsic. ++ * gcc.target/i386/sse-22.c: Ditto. + -+! { dg-final { cleanup-modules "examplefuncs" } } -Index: gcc/testsuite/ChangeLog -=================================================================== ---- gcc/testsuite/ChangeLog (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/testsuite/ChangeLog (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1,3 +1,23 @@ -+2012-03-10 Tobias Burnus ++2015-01-27 Mikael Pettersson ++ ++ Backport from mainline ++ ++ 2013-09-20 Bernd Edlinger + -+ PR fortran/52469 -+ * gfortran.dg/proc_ptr_34.f90: New. ++ PR middle-end/57748 ++ * gcc.dg/torture/pr57748-1.c: New test. ++ * gcc.dg/torture/pr57748-2.c: New test. + -+2012-03-06 Tobias Burnus ++ 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 -+ 2012-03-02 Tobias Burnus ++ 2014-06-23 Marek Polacek + -+ PR fortran/52452 -+ * gfortran.dg/intrinsic_8.f90: New. ++ PR c/61553 ++ * c-c++-common/pr61553.c: New test. + -+2012-03-02 Peter Bergner ++2015-01-12 Janus Weil + + Backport from mainline -+ 2012-03-02 Peter Bergner ++ PR fortran/63733 ++ * gfortran.dg/typebound_operator_20.f90: New. + -+ * gcc.target/powerpc/pr52457.c: New test. ++2014-12-28 H.J. Lu + - 2012-03-01 Release Manager - - * GCC 4.6.3 released. -Index: gcc/fortran/ChangeLog -=================================================================== ---- gcc/fortran/ChangeLog (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/fortran/ChangeLog (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1,3 +1,18 @@ -+2012-03-10 Tobias Burnus ++ 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 fortran/52469 -+ * trans-types.c (gfc_get_function_type): Handle backend_decl -+ of a procedure pointer. ++ PR target/64409 ++ * gcc.target/i386/pr64409.c: New test. + -+2012-03-06 Tobias Burnus ++2014-12-23 Janus Weil + + Backport from mainline -+ 2012-03-02 Tobias Burnus ++ PR fortran/64244 ++ * gfortran.dg/typebound_call_26.f90: New. + -+ PR fortran/52452 -+ * resolve.c (resolve_intrinsic): Don't search for a -+ function if we know that it is a subroutine. ++2014-12-19 H.J. Lu + - 2012-03-01 Release Manager ++ 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.6.3 released. -Index: gcc/fortran/trans-types.c + * 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/fortran/trans-types.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/fortran/trans-types.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -2519,7 +2519,11 @@ - || sym->attr.flavor == FL_PROGRAM); +--- 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 - if (sym->backend_decl) -- return TREE_TYPE (sym->backend_decl); + * 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) + { -+ if (sym->attr.proc_pointer) -+ return TREE_TYPE (TREE_TYPE (sym->backend_decl)); -+ return TREE_TYPE (sym->backend_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; + } - alternate_return = 0; - typelist = NULL_TREE; -Index: gcc/fortran/resolve.c +- 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/fortran/resolve.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/fortran/resolve.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1452,7 +1452,7 @@ +--- 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 @@ + } - if (sym->intmod_sym_id) - isym = gfc_intrinsic_function_by_id ((gfc_isym_id) sym->intmod_sym_id); + 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 -+ else if (!sym->attr.subroutine) - isym = gfc_find_function (sym->name); +- expr = finish_offsetof (expr); ++ expr = finish_offsetof (expr); - if (isym) -Index: gcc/BASE-VER + failure: + parser->integral_constant_expression_p = save_ice_p; +Index: gcc/jump.c =================================================================== ---- gcc/BASE-VER (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/BASE-VER (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1 +1 @@ --4.6.3 -+4.6.4 -Index: gcc/tree-vect-loop.c -=================================================================== ---- gcc/tree-vect-loop.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/tree-vect-loop.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -2104,7 +2104,8 @@ - if (stmt_info - && !STMT_VINFO_RELEVANT_P (stmt_info) - && (!STMT_VINFO_LIVE_P (stmt_info) -- || STMT_VINFO_DEF_TYPE (stmt_info) != vect_reduction_def)) -+ || !VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (stmt_info))) -+ && !STMT_VINFO_IN_PATTERN_P (stmt_info)) - continue; - - if (STMT_VINFO_DATA_REF (vinfo_for_stmt (stmt))) -@@ -2251,11 +2252,19 @@ - { - gimple stmt = gsi_stmt (si); - stmt_vec_info stmt_info = vinfo_for_stmt (stmt); -+ -+ if (STMT_VINFO_IN_PATTERN_P (stmt_info)) +--- 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); + { -+ stmt = STMT_VINFO_RELATED_STMT (stmt_info); -+ stmt_info = vinfo_for_stmt (stmt); ++ 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. */ + - /* Skip stmts that are not vectorized inside the loop. */ - if (!STMT_VINFO_RELEVANT_P (stmt_info) - && (!STMT_VINFO_LIVE_P (stmt_info) -- || STMT_VINFO_DEF_TYPE (stmt_info) != vect_reduction_def)) -+ || !VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (stmt_info)))) - continue; -+ - vec_inside_cost += STMT_VINFO_INSIDE_OF_LOOP_COST (stmt_info) * factor; - /* FIXME: for stmts in the inner-loop in outer-loop vectorization, - some of the "outside" costs are generated inside the outer-loop. */ -Index: gcc/tree-vect-stmts.c -=================================================================== ---- gcc/tree-vect-stmts.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/tree-vect-stmts.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -623,6 +623,46 @@ + 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 @@ -+/* Model cost for type demotion and promotion operations. PWR is normally -+ zero for single-step promotions and demotions. It will be one if -+ two-step promotion/demotion is required, and so on. Each additional -+ step doubles the number of instructions required. */ -+ -+static void -+vect_model_promotion_demotion_cost (stmt_vec_info stmt_info, -+ enum vect_def_type *dt, int pwr) -+{ -+ int i, tmp; -+ int inside_cost = 0, outside_cost = 0, single_stmt_cost; -+ -+ /* The SLP costs were already calculated during SLP tree build. */ -+ if (PURE_SLP_STMT (stmt_info)) -+ return; -+ -+ single_stmt_cost = vect_get_stmt_cost (vec_promote_demote); -+ for (i = 0; i < pwr + 1; i++) -+ { -+ tmp = (STMT_VINFO_TYPE (stmt_info) == type_promotion_vec_info_type) ? -+ (i + 1) : i; -+ inside_cost += vect_pow2 (tmp) * single_stmt_cost; -+ } -+ -+ /* FORNOW: Assuming maximum 2 args per stmts. */ -+ for (i = 0; i < 2; i++) -+ { -+ if (dt[i] == vect_constant_def || dt[i] == vect_external_def) -+ outside_cost += vect_get_stmt_cost (vector_stmt); -+ } -+ -+ if (vect_print_dump_info (REPORT_COST)) -+ fprintf (vect_dump, "vect_model_promotion_demotion_cost: inside_cost = %d, " -+ "outside_cost = %d .", inside_cost, outside_cost); -+ -+ /* Set the costs in STMT_INFO. */ -+ stmt_vinfo_set_inside_of_loop_cost (stmt_info, NULL, inside_cost); -+ stmt_vinfo_set_outside_of_loop_cost (stmt_info, NULL, outside_cost); -+} -+ - /* Function vect_cost_strided_group_size + 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 @@ - For strided load or store, return the group_size only if it is the first -@@ -691,7 +731,7 @@ - { - /* Uses a high and low interleave operation for each needed permute. */ - inside_cost = ncopies * exact_log2(group_size) * group_size -- * vect_get_stmt_cost (vector_stmt); -+ * vect_get_stmt_cost (vec_perm); - - if (vect_print_dump_info (REPORT_COST)) - fprintf (vect_dump, "vect_model_store_cost: strided group_size = %d .", -@@ -795,7 +835,7 @@ - { - /* Uses an even and odd extract operations for each needed permute. */ - inside_cost = ncopies * exact_log2(group_size) * group_size -- * vect_get_stmt_cost (vector_stmt); -+ * vect_get_stmt_cost (vec_perm); - - if (vect_print_dump_info (REPORT_COST)) - fprintf (vect_dump, "vect_model_load_cost: strided group_size = %d .", -@@ -855,7 +895,7 @@ - case dr_explicit_realign: + 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: { - *inside_cost += ncopies * (2 * vect_get_stmt_cost (vector_load) -- + vect_get_stmt_cost (vector_stmt)); -+ + vect_get_stmt_cost (vec_perm)); + 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); - /* FIXME: If the misalignment remains fixed across the iterations of - the containing loop, the following cost should be added to the -@@ -863,6 +903,9 @@ - if (targetm.vectorize.builtin_mask_for_load) - *inside_cost += vect_get_stmt_cost (vector_stmt); + 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 (vect_print_dump_info (REPORT_COST)) -+ fprintf (vect_dump, "vect_model_load_cost: explicit realign"); -+ - break; - } - case dr_explicit_realign_optimized: -@@ -886,7 +929,12 @@ - } - *inside_cost += ncopies * (vect_get_stmt_cost (vector_load) -- + vect_get_stmt_cost (vector_stmt)); -+ + vect_get_stmt_cost (vec_perm)); -+ -+ if (vect_print_dump_info (REPORT_COST)) -+ fprintf (vect_dump, -+ "vect_model_load_cost: explicit realign optimized"); -+ - break; + /* 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 @@ } -@@ -2919,7 +2967,7 @@ - STMT_VINFO_TYPE (stmt_info) = type_demotion_vec_info_type; - if (vect_print_dump_info (REPORT_DETAILS)) - fprintf (vect_dump, "=== vectorizable_demotion ==="); -- vect_model_simple_cost (stmt_info, ncopies, dt, NULL); -+ vect_model_promotion_demotion_cost (stmt_info, dt, multi_step_cvt); - return true; - } + if (!op0) +- op0 = expand_expr (treeop0, +- NULL_RTX, VOIDmode, modifier); ++ op0 = expand_expr_real (treeop0, NULL_RTX, VOIDmode, modifier, ++ NULL, inner_reference_p); -@@ -3217,7 +3265,7 @@ - STMT_VINFO_TYPE (stmt_info) = type_promotion_vec_info_type; - if (vect_print_dump_info (REPORT_DETAILS)) - fprintf (vect_dump, "=== vectorizable_promotion ==="); -- vect_model_simple_cost (stmt_info, 2*ncopies, dt, NULL); -+ vect_model_promotion_demotion_cost (stmt_info, dt, multi_step_cvt); - return true; - } + /* 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; -Index: gcc/combine.c -=================================================================== ---- gcc/combine.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/combine.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1788,6 +1788,10 @@ - if (set == 0) - return 0; +- 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); -+ /* The simplification in expand_field_assignment may call back to -+ get_last_value, so set safe guard here. */ -+ subst_low_luid = DF_INSN_LUID (insn); -+ - set = expand_field_assignment (set); - src = SET_SRC (set), dest = SET_DEST (set); +- 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); -Index: gcc/config/spu/spu.c -=================================================================== ---- gcc/config/spu/spu.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/spu/spu.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -6794,6 +6794,7 @@ - case scalar_to_vec: - case cond_branch_not_taken: - case vec_perm: -+ case vec_promote_demote: - return 1; +- 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); - case scalar_store: -Index: gcc/config/sparc/sparc.c + default: + return expand_expr_real_2 (&ops, target, tmode, modifier); +Index: gcc/expr.h =================================================================== ---- gcc/config/sparc/sparc.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/sparc/sparc.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -3658,13 +3658,17 @@ +--- 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) { - x = delegitimize_mem_from_attrs (x); - -- if (GET_CODE (x) == LO_SUM -- && GET_CODE (XEXP (x, 1)) == UNSPEC -- && XINT (XEXP (x, 1), 1) == UNSPEC_TLSLE) -- { -- x = XVECEXP (XEXP (x, 1), 0, 0); -- gcc_assert (GET_CODE (x) == SYMBOL_REF); -- } -+ if (GET_CODE (x) == LO_SUM && GET_CODE (XEXP (x, 1)) == UNSPEC) -+ switch (XINT (XEXP (x, 1), 1)) -+ { -+ case UNSPEC_MOVE_PIC: -+ case UNSPEC_TLSLE: -+ x = XVECEXP (XEXP (x, 1), 0, 0); -+ gcc_assert (GET_CODE (x) == SYMBOL_REF); -+ break; -+ default: -+ break; -+ } +- return expand_expr_real (exp, target, mode, modifier, NULL); ++ return expand_expr_real (exp, target, mode, modifier, NULL, false); + } - return x; + 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); } -Index: gcc/config/i386/i386.c + + /* At the start of a function, record that we have no previously-pushed +Index: gcc/fortran/interface.c =================================================================== ---- gcc/config/i386/i386.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/i386/i386.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -32823,7 +32823,8 @@ - return ix86_cost->cond_not_taken_branch_cost; - - case vec_perm: -- return 1; -+ case vec_promote_demote: -+ return ix86_cost->vec_stmt_cost; - - default: - gcc_unreachable (); -Index: gcc/config/rs6000/vector.md -=================================================================== ---- gcc/config/rs6000/vector.md (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/rs6000/vector.md (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -448,6 +448,94 @@ - "VECTOR_UNIT_ALTIVEC_P (mode)" - "") - -+(define_insn_and_split "*vector_uneq" -+ [(set (match_operand:VEC_F 0 "vfloat_operand" "") -+ (uneq:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") -+ (match_operand:VEC_F 2 "vfloat_operand" "")))] -+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (mode)" -+ "#" -+ "" -+ [(set (match_dup 3) -+ (gt:VEC_F (match_dup 1) -+ (match_dup 2))) -+ (set (match_dup 4) -+ (gt:VEC_F (match_dup 2) -+ (match_dup 1))) -+ (set (match_dup 0) -+ (not:VEC_F (ior:VEC_F (match_dup 3) -+ (match_dup 4))))] -+ " -+{ -+ operands[3] = gen_reg_rtx (mode); -+ operands[4] = gen_reg_rtx (mode); -+}") -+ -+(define_insn_and_split "*vector_ltgt" -+ [(set (match_operand:VEC_F 0 "vfloat_operand" "") -+ (ltgt:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") -+ (match_operand:VEC_F 2 "vfloat_operand" "")))] -+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (mode)" -+ "#" -+ "" -+ [(set (match_dup 3) -+ (gt:VEC_F (match_dup 1) -+ (match_dup 2))) -+ (set (match_dup 4) -+ (gt:VEC_F (match_dup 2) -+ (match_dup 1))) -+ (set (match_dup 0) -+ (ior:VEC_F (match_dup 3) -+ (match_dup 4)))] -+ " -+{ -+ operands[3] = gen_reg_rtx (mode); -+ operands[4] = gen_reg_rtx (mode); -+}") -+ -+(define_insn_and_split "*vector_ordered" -+ [(set (match_operand:VEC_F 0 "vfloat_operand" "") -+ (ordered:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") -+ (match_operand:VEC_F 2 "vfloat_operand" "")))] -+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (mode)" -+ "#" -+ "" -+ [(set (match_dup 3) -+ (ge:VEC_F (match_dup 1) -+ (match_dup 2))) -+ (set (match_dup 4) -+ (ge:VEC_F (match_dup 2) -+ (match_dup 1))) -+ (set (match_dup 0) -+ (ior:VEC_F (match_dup 3) -+ (match_dup 4)))] -+ " -+{ -+ operands[3] = gen_reg_rtx (mode); -+ operands[4] = gen_reg_rtx (mode); -+}") -+ -+(define_insn_and_split "*vector_unordered" -+ [(set (match_operand:VEC_F 0 "vfloat_operand" "") -+ (unordered:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "") -+ (match_operand:VEC_F 2 "vfloat_operand" "")))] -+ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (mode)" -+ "#" -+ "" -+ [(set (match_dup 3) -+ (ge:VEC_F (match_dup 1) -+ (match_dup 2))) -+ (set (match_dup 4) -+ (ge:VEC_F (match_dup 2) -+ (match_dup 1))) -+ (set (match_dup 0) -+ (not:VEC_F (ior:VEC_F (match_dup 3) -+ (match_dup 4))))] -+ " -+{ -+ operands[3] = gen_reg_rtx (mode); -+ operands[4] = gen_reg_rtx (mode); -+}") +--- 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; ++ } + - ;; Note the arguments for __builtin_altivec_vsel are op2, op1, mask - ;; which is in the reverse order that we want - (define_expand "vector_select_" -Index: gcc/config/rs6000/rs6000.c ++ /* 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/config/rs6000/rs6000.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/rs6000/rs6000.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -3695,12 +3695,23 @@ - case vec_to_scalar: - case scalar_to_vec: - case cond_branch_not_taken: -- case vec_perm: - return 1; - - case cond_branch_taken: - return 3; - -+ case vec_perm: -+ if (TARGET_VSX) -+ return 4; -+ else -+ return 1; -+ -+ case vec_promote_demote: -+ if (TARGET_VSX) -+ return 5; -+ else -+ return 1; -+ - case unaligned_load: - if (TARGET_VSX && TARGET_ALLOW_MOVMISALIGN) - { -@@ -17229,6 +17240,10 @@ - case EQ: - case GT: - case GTU: -+ case ORDERED: -+ case UNORDERED: -+ case UNEQ: -+ case LTGT: - mask = gen_reg_rtx (mode); - emit_insn (gen_rtx_SET (VOIDmode, - mask, -Index: gcc/config/rs6000/vsx.md -=================================================================== ---- gcc/config/rs6000/vsx.md (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/rs6000/vsx.md (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1006,9 +1006,9 @@ - "VECTOR_MEM_VSX_P (mode)" - { - if (INTVAL (operands[3]) == 0) -- return \"xxpermdi %x0,%x1,%x2,1\"; -+ return \"xxpermdi %x0,%x2,%x1,1\"; - else if (INTVAL (operands[3]) == 1) -- return \"xxpermdi %x0,%x2,%x1,0\"; -+ return \"xxpermdi %x0,%x1,%x2,0\"; - else - gcc_unreachable (); - } -Index: gcc/config/pa/predicates.md -=================================================================== ---- gcc/config/pa/predicates.md (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/pa/predicates.md (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -421,9 +421,9 @@ - (ior (match_operand 0 "register_operand") - (match_operand 0 "cint_ior_operand"))) - --;; True iff OP is a CONST_INT of the forms 0...0xxxx or --;; 0...01...1xxxx. Such values can be the left hand side x in (x << --;; r), using the zvdepi instruction. -+;; True iff OP is a CONST_INT of the forms 0...0xxxx, 0...01...1xxxx, -+;; or 1...1xxxx. Such values can be the left hand side x in (x << r), -+;; using the zvdepi instruction. - - (define_predicate "lhs_lshift_cint_operand" - (match_code "const_int") -Index: gcc/config/pa/pa.md -=================================================================== ---- gcc/config/pa/pa.md (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/pa/pa.md (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -6348,7 +6348,7 @@ - "" - "* - { -- int x = INTVAL (operands[1]); -+ unsigned HOST_WIDE_INT x = UINTVAL (operands[1]); - operands[2] = GEN_INT (4 + exact_log2 ((x >> 4) + 1)); - operands[1] = GEN_INT ((x & 0xf) - 0x10); - return \"{zvdepi %1,%2,%0|depwi,z %1,%%sar,%2,%0}\"; -@@ -6366,7 +6366,7 @@ - "exact_log2 (INTVAL (operands[1]) + 1) > 0" - "* - { -- int x = INTVAL (operands[1]); -+ HOST_WIDE_INT x = INTVAL (operands[1]); - operands[2] = GEN_INT (exact_log2 (x + 1)); - return \"{vdepi -1,%2,%0|depwi -1,%%sar,%2,%0}\"; - }" -@@ -6383,7 +6383,7 @@ - "INTVAL (operands[1]) == -2" - "* - { -- int x = INTVAL (operands[1]); -+ HOST_WIDE_INT x = INTVAL (operands[1]); - operands[2] = GEN_INT (exact_log2 ((~x) + 1)); - return \"{vdepi 0,%2,%0|depwi 0,%%sar,%2,%0}\"; - }" -@@ -6447,7 +6447,7 @@ - "TARGET_64BIT" - "* - { -- int x = INTVAL (operands[1]); -+ unsigned HOST_WIDE_INT x = UINTVAL (operands[1]); - operands[2] = GEN_INT (4 + exact_log2 ((x >> 4) + 1)); - operands[1] = GEN_INT ((x & 0x1f) - 0x20); - return \"depdi,z %1,%%sar,%2,%0\"; -@@ -6465,7 +6465,7 @@ - "TARGET_64BIT && exact_log2 (INTVAL (operands[1]) + 1) > 0" - "* - { -- int x = INTVAL (operands[1]); -+ HOST_WIDE_INT x = INTVAL (operands[1]); - operands[2] = GEN_INT (exact_log2 (x + 1)); - return \"depdi -1,%%sar,%2,%0\"; - }" -@@ -6482,7 +6482,7 @@ - "TARGET_64BIT && INTVAL (operands[1]) == -2" - "* - { -- int x = INTVAL (operands[1]); -+ HOST_WIDE_INT x = INTVAL (operands[1]); - operands[2] = GEN_INT (exact_log2 ((~x) + 1)); - return \"depdi 0,%%sar,%2,%0\"; - }" -@@ -6671,6 +6671,20 @@ - - ;; Unconditional and other jump instructions. - -+;; Trivial return used when no epilogue is needed. -+(define_insn "return" -+ [(return) -+ (use (reg:SI 2))] -+ "pa_can_use_return_insn ()" -+ "* -+{ -+ if (TARGET_PA_20) -+ return \"bve%* (%%r2)\"; -+ return \"bv%* %%r0(%%r2)\"; -+}" -+ [(set_attr "type" "branch") -+ (set_attr "length" "4")]) -+ - ;; This is used for most returns. - (define_insn "return_internal" - [(return) -@@ -6719,11 +6733,8 @@ - rtx x; - - /* Try to use the trivial return first. Else use the full epilogue. */ -- if (reload_completed -- && !frame_pointer_needed -- && !df_regs_ever_live_p (2) -- && (compute_frame_size (get_frame_size (), 0) ? 0 : 1)) -- x = gen_return_internal (); -+ if (pa_can_use_return_insn ()) -+ x = gen_return (); - else +--- 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) { - hppa_expand_epilogue (); -Index: gcc/config/pa/pa-protos.h -=================================================================== ---- gcc/config/pa/pa-protos.h (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/pa/pa-protos.h (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -136,6 +136,7 @@ - extern int cint_ok_for_move (HOST_WIDE_INT); - extern void hppa_expand_prologue (void); - extern void hppa_expand_epilogue (void); -+extern bool pa_can_use_return_insn (void); - extern int ior_mask_p (unsigned HOST_WIDE_INT); - extern void compute_zdepdi_operands (unsigned HOST_WIDE_INT, - unsigned *); -Index: gcc/config/pa/pa.c -=================================================================== ---- gcc/config/pa/pa.c (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ gcc/config/pa/pa.c (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -4442,6 +4442,24 @@ - } - } +- if (ss->info->type != GFC_SS_SECTION) +- continue; -+bool -+pa_can_use_return_insn (void) -+{ -+ if (!reload_completed) -+ return false; + 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 + -+ if (frame_pointer_needed) -+ return false; ++ Backported from mainline ++ 2015-01-13 Jakub Jelinek + -+ if (df_regs_ever_live_p (2)) -+ return false; ++ PR fortran/64528 ++ * trans-decl.c (create_function_arglist): Don't set TREE_READONLY ++ on dummy args with VALUE attribute. + -+ if (crtl->profile) -+ return false; ++2015-01-24 Thomas Koenig + -+ return compute_frame_size (get_frame_size (), 0) == 0; -+} ++ PR fortran/56867 ++ * trans-array.c (gfc_conv_resolve_dependencies): Also check ++ dependencies when there may be substrings of character arrays. + - rtx - hppa_pic_save_rtx (void) ++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) { -@@ -4586,7 +4604,7 @@ - rtx saved_rp; - rtx ins; + gfc_actual_arglist* newactual; + gfc_symtree* target; +@@ -6072,6 +6072,10 @@ + if (resolve_typebound_generic_call (c->expr1, name) == FAILURE) + return FAILURE; -- /* Instruction stream at the normal return address for the export stub: -+ /* The instruction stream at the return address of a PA1.X export stub is: ++ /* 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. */ - 0x4bc23fd1 | stub+8: ldw -18(sr0,sp),rp - 0x004010a1 | stub+12: ldsid (sr0,rp),r1 -@@ -4594,11 +4612,17 @@ - 0xe0400002 | stub+20: be,n 0(sr0,rp) + 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); - 0xe0400002 must be specified as -532676606 so that it won't be -- rejected as an invalid immediate operand on 64-bit hosts. */ -+ rejected as an invalid immediate operand on 64-bit hosts. +- if (resolve_typebound_call (code, &name) == FAILURE) ++ if (resolve_typebound_call (code, &name, NULL) == FAILURE) + return FAILURE; -- HOST_WIDE_INT insns[4] = {0x4bc23fd1, 0x004010a1, 0x00011820, -532676606}; -- int i; -+ The instruction stream at the return address of a PA2.0 export stub is: + /* Use the generic name if it is there. */ +@@ -6356,7 +6360,7 @@ + } -+ 0x4bc23fd1 | stub+8: ldw -18(sr0,sp),rp -+ 0xe840d002 | stub+12: bve,n (rp) -+ */ -+ -+ HOST_WIDE_INT insns[4]; -+ int i, len; -+ - if (count != 0) - return NULL_RTX; + if (st == NULL) +- return resolve_typebound_call (code, NULL); ++ return resolve_typebound_call (code, NULL, NULL); -@@ -4620,11 +4644,26 @@ - ins = copy_to_reg (gen_rtx_AND (Pmode, rp, MASK_RETURN_ADDR)); - label = gen_label_rtx (); + 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 (TARGET_PA_20) -+ { -+ insns[0] = 0x4bc23fd1; -+ insns[1] = -398405630; -+ len = 2; -+ } +- 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 -+ { -+ insns[0] = 0x4bc23fd1; -+ insns[1] = 0x004010a1; -+ insns[2] = 0x00011820; -+ insns[3] = -532676606; -+ len = 4; -+ } ++ 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); ++} + - /* Check the instruction stream at the normal return address for the - export stub. If it is an export stub, than our return address is - really in -24[frameaddr]. */ + /* 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. */ -- for (i = 0; i < 3; i++) -+ for (i = 0; i < len; i++) - { - rtx op0 = gen_rtx_MEM (SImode, plus_constant (ins, i * 4)); - rtx op1 = GEN_INT (insns[i]); -Index: libstdc++-v3/include/debug/safe_iterator.h -=================================================================== ---- libstdc++-v3/include/debug/safe_iterator.h (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ libstdc++-v3/include/debug/safe_iterator.h (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1,6 +1,6 @@ - // Safe iterator implementation -*- C++ -*- - --// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011 -+// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011, 2012 - // Free Software Foundation, Inc. - // - // This file is part of the GNU ISO C++ Library. This library is free -@@ -142,7 +142,25 @@ - ._M_iterator(__x, "other")); - } + 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))); + } -+#ifdef __GXX_EXPERIMENTAL_CXX0X__ - /** -+ * @brief Move construction. -+ * @post __x is singular and unattached -+ */ -+ _Safe_iterator(_Safe_iterator&& __x) : _M_current() -+ { -+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular() -+ || __x._M_current == _Iterator(), -+ _M_message(__msg_init_copy_singular) -+ ._M_iterator(*this, "this") -+ ._M_iterator(__x, "other")); -+ std::swap(_M_current, __x._M_current); -+ this->_M_attach(__x._M_sequence); -+ __x._M_detach(); -+ } -+#endif -+ -+ /** - * @brief Converting constructor from a mutable iterator to a - * constant iterator. - */ -@@ -181,7 +199,28 @@ - return *this; - } + /* 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); -+#ifdef __GXX_EXPERIMENTAL_CXX0X__ - /** -+ * @brief Move assignment. -+ * @post __x is singular and unattached -+ */ -+ _Safe_iterator& -+ operator=(_Safe_iterator&& __x) -+ { -+ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular() -+ || __x._M_current == _Iterator(), -+ _M_message(__msg_copy_singular) -+ ._M_iterator(*this, "this") -+ ._M_iterator(__x, "other")); -+ _M_current = __x._M_current; -+ _M_attach(__x._M_sequence); -+ __x._M_detach(); -+ __x._M_current = _Iterator(); -+ return *this; -+ } -+#endif -+ -+ /** - * @brief Iterator dereference. - * @pre iterator is dereferenceable - */ -@@ -415,7 +454,9 @@ - /// Is this iterator equal to the sequence's before_begin() iterator if - /// any? - bool _M_is_before_begin() const -- { return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence()); } -+ { -+ return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence()); -+ } - }; + 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)); - template -Index: libstdc++-v3/ChangeLog + /* 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 =================================================================== ---- libstdc++-v3/ChangeLog (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ libstdc++-v3/ChangeLog (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1,3 +1,10 @@ -+2012-03-08 Jonathan Wakely -+ -+ PR libstdc++/52433 -+ * include/debug/safe_iterator.h (_Safe_iterator): Add move -+ constructor and move assignment operator. -+ * testsuite/23_containers/vector/debug/52433.cc: New. -+ - 2012-03-01 Release Manager - - * GCC 4.6.3 released. -Index: libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc -=================================================================== ---- libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc (.../tags/gcc_4_6_3_release) (wersja 0) -+++ libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -0,0 +1,43 @@ -+// Copyright (C) 2012 Free Software Foundation, Inc. -+// -+// This file is part of the GNU ISO C++ Library. This library is free -+// software; you can redistribute it and/or modify it under the -+// terms of the GNU General Public License as published by the -+// Free Software Foundation; either version 3, or (at your option) -+// any later version. -+// -+// This library is distributed in the hope that it will be useful, -+// but WITHOUT ANY WARRANTY; without even the implied warranty of -+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+// GNU General Public License for more details. -+// -+// You should have received a copy of the GNU General Public License along -+// with this library; see the file COPYING3. If not see -+// . -+// -+// { dg-require-debug-mode "" } -+// { dg-options "-std=gnu++0x" } -+// { dg-do compile } -+ -+// PR libstdc++/52433 -+ -+#include -+ -+struct X +--- 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) +{ -+ std::vector::iterator i; -+ -+ X() = default; -+ X(const X&) = default; -+ X(X&&) = default; -+ X& operator=(const X&) = default; -+ X& operator=(X&&) = default; -+}; ++ return (__m256i)__builtin_ia32_pslldqi256 (__A, __N * 8); ++} + -+X test01() ++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) +{ -+ X x; -+ x = X(); -+ return x; ++ return (__m256i)__builtin_ia32_psrldqi256 (__A, __N * 8); +} + -Index: boehm-gc/configure.ac -=================================================================== ---- boehm-gc/configure.ac (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ boehm-gc/configure.ac (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -392,6 +392,7 @@ - oldLIBS="$LIBS" - LIBS="$LIBS $THREADLIBS" - AC_CHECK_FUNCS([pthread_getattr_np]) -+AC_CHECK_FUNCS([pthread_get_stackaddr_np]) - LIBS="$oldLIBS" - - # Configuration of machine-dependent code -Index: boehm-gc/include/gc_config.h.in -=================================================================== ---- boehm-gc/include/gc_config.h.in (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ boehm-gc/include/gc_config.h.in (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -87,6 +87,9 @@ - /* Define to 1 if you have the `pthread_getattr_np' function. */ - #undef HAVE_PTHREAD_GETATTR_NP - -+/* Define to 1 if you have the `pthread_get_stackaddr_np_np' function. */ -+#undef HAVE_PTHREAD_GET_STACKADDR_NP -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_STDINT_H - -Index: boehm-gc/include/private/gcconfig.h -=================================================================== ---- boehm-gc/include/private/gcconfig.h (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ boehm-gc/include/private/gcconfig.h (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1331,7 +1331,11 @@ - These aren't used when dyld support is enabled (it is by default) */ - # define DATASTART ((ptr_t) get_etext()) - # define DATAEND ((ptr_t) get_end()) --# define STACKBOTTOM ((ptr_t) 0xc0000000) -+# ifdef HAVE_PTHREAD_GET_STACKADDR_NP -+# define STACKBOTTOM (ptr_t)pthread_get_stackaddr_np(pthread_self()) -+# else -+# define STACKBOTTOM ((ptr_t) 0xc0000000) -+# endif - # define USE_MMAP - # define USE_MMAP_ANON - # define USE_ASM_PUSH_REGS -@@ -2011,7 +2015,11 @@ - These aren't used when dyld support is enabled (it is by default) */ - # define DATASTART ((ptr_t) get_etext()) - # define DATAEND ((ptr_t) get_end()) --# define STACKBOTTOM ((ptr_t) 0x7fff5fc00000) -+# ifdef HAVE_PTHREAD_GET_STACKADDR_NP -+# define STACKBOTTOM (ptr_t)pthread_get_stackaddr_np(pthread_self()) -+# else -+# define STACKBOTTOM ((ptr_t) 0x7fff5fc00000) -+# endif - # define USE_MMAP - # define USE_MMAP_ANON - # ifdef GC_DARWIN_THREADS -Index: boehm-gc/ChangeLog -=================================================================== ---- boehm-gc/ChangeLog (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ boehm-gc/ChangeLog (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1,3 +1,17 @@ -+2012-03-02 Jack Howarth ++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); ++} + -+ Backport from mainline -+ 2012-02-23 Patrick Marlier -+ Jack Howarth -+ -+ PR boehm-gc/52179 -+ * include/gc_config.h.in: Undefine HAVE_PTHREAD_GET_STACKADDR_NP. -+ * include/private/gcconfig.h (DARWIN): Define STACKBOTTOM with -+ pthread_get_stackaddr_np when available. -+ * configure.ac (THREADS): Check availability of -+ pthread_get_stackaddr_np. -+ * configure: Regenerate. ++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); ++} + - 2012-03-01 Release Manager ++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))); + } + } - * GCC 4.6.3 released. -Index: boehm-gc/configure +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 =================================================================== ---- boehm-gc/configure (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ boehm-gc/configure (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -15246,6 +15246,17 @@ - fi - done +--- 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 ac_func in pthread_get_stackaddr_np -+do : -+ ac_fn_c_check_func "$LINENO" "pthread_get_stackaddr_np" "ac_cv_func_pthread_get_stackaddr_np" -+if test "x$ac_cv_func_pthread_get_stackaddr_np" = x""yes; then : -+ cat >>confdefs.h <<_ACEOF -+#define HAVE_PTHREAD_GET_STACKADDR_NP 1 -+_ACEOF -+ -+fi -+done -+ - LIBS="$oldLIBS" - - # Configuration of machine-dependent code -Index: libjava/configure.ac -=================================================================== ---- libjava/configure.ac (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ libjava/configure.ac (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -886,14 +886,9 @@ - SYSTEMSPEC="-lunicows $SYSTEMSPEC" - fi - ;; -- *-*-darwin9*) -+ *-*-darwin[[912]]*) - SYSTEMSPEC="%{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" - ;; -- *-*-darwin[[12]]*) -- # Something is incompatible with pie, would be nice to fix it and -- # remove -no_pie. PR49461 -- SYSTEMSPEC="-no_pie %{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" -- ;; - *) - SYSTEMSPEC= - ;; -Index: libjava/ChangeLog -=================================================================== ---- libjava/ChangeLog (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ libjava/ChangeLog (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -1,3 +1,13 @@ -+2012-03-02 Jack Howarth -+ -+ Backport from mainline -+ 2012-02-23 Patrick Marlier -+ Jack Howarth -+ -+ PR target/49461 -+ * configure.ac (SYSTEMSPEC): No longer pass -no_pie for darwin11. -+ * configure: Regenerate. ++ /* 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; ++ } + - 2012-03-01 Release Manager - - * GCC 4.6.3 released. -Index: libjava/configure -=================================================================== ---- libjava/configure (.../tags/gcc_4_6_3_release) (wersja 185440) -+++ libjava/configure (.../branches/gcc-4_6-branch) (wersja 185440) -@@ -19775,14 +19775,9 @@ - SYSTEMSPEC="-lunicows $SYSTEMSPEC" - fi - ;; -- *-*-darwin9*) -+ *-*-darwin[912]*) - SYSTEMSPEC="%{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" - ;; -- *-*-darwin[12]*) -- # Something is incompatible with pie, would be nice to fix it and -- # remove -no_pie. PR49461 -- SYSTEMSPEC="-no_pie %{!Zdynamiclib:%{!Zbundle:-allow_stack_execute}}" -- ;; - *) - SYSTEMSPEC= - ;; + 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); \